Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
students
shopping-mall
Commits
99d0b766
Commit
99d0b766
authored
Dec 30, 2020
by
Kim, Subin
Browse files
Merge remote-tracking branch 'origin/jaeyeon' into ourMaster
parents
8d1ed9a5
f3f88776
Changes
12
Show whitespace changes
Inline
Side-by-side
.gitignore
0 → 100644
View file @
99d0b766
node_modules
\ No newline at end of file
client/package.json
View file @
99d0b766
...
@@ -9,6 +9,7 @@
...
@@ -9,6 +9,7 @@
"bootstrap"
:
"^4.5.3"
,
"bootstrap"
:
"^4.5.3"
,
"react"
:
"^17.0.1"
,
"react"
:
"^17.0.1"
,
"react-bootstrap"
:
"^1.4.0"
,
"react-bootstrap"
:
"^1.4.0"
,
"react-daum-postcode"
:
"^2.0.2"
,
"react-dom"
:
"^17.0.1"
,
"react-dom"
:
"^17.0.1"
,
"react-router-dom"
:
"^5.2.0"
,
"react-router-dom"
:
"^5.2.0"
,
"react-scripts"
:
"4.0.1"
,
"react-scripts"
:
"4.0.1"
,
...
...
client/src/App.js
View file @
99d0b766
import
logo
from
'
./logo.svg
'
;
import
logo
from
'
./logo.svg
'
;
import
'
./App.css
'
;
import
'
./App.css
'
;
import
{
Button
}
from
'
react-bootstrap
'
;
import
{
Router
}
from
'
react-router-dom
'
;
import
Login
from
'
./Login
'
import
LogoutButton
from
'
./LogoutButton
'
import
{
signIn
}
from
'
./auth
'
function
App
()
{
function
App
()
{
return
(
const
[
user
,
setUser
]
=
useState
(
null
);
<
div
className
=
"
App
"
>
<
header
className
=
"
App-header
"
>
const
authenticated
=
user
!=
null
;
<
img
src
=
{
logo
}
className
=
"
App-logo
"
alt
=
"
logo
"
/>
<
p
>
const
login
=
({
id
,
password
})
=>
setUser
(
signIn
({
id
,
password
}));
Edit
<
code
>
src
/
App
.
js
<
/code> and save to reload
.
<
/p
>
const
logout
=
()
=>
setUser
(
null
);
<
a
className
=
"
App-link
"
href
=
"
https://reactjs.org
"
target
=
"
_blank
"
rel
=
"
noopener noreferrer
"
>
Learn
React
<
/a
>
<
/header
>
<
/div
>
);
}
}
export
default
App
;
export
default
App
;
client/src/Auth.js
0 → 100644
View file @
99d0b766
const
users
=
[
{
id
:
'
wodus
'
,
password
:
'
123
'
},
{
id
:
'
kim
'
,
password
:
'
456
'
},
]
export
function
signIn
({
id
,
password
}){
const
user
=
users
.
find
(
user
=>
user
.
id
===
id
&&
user
.
password
===
password
);
if
(
user
===
undefined
)
throw
new
Error
();
return
user
;
}
\ No newline at end of file
client/src/AuthRoute.js
0 → 100644
View file @
99d0b766
import
React
from
'
react
'
import
{
Route
,
Redirect
}
from
"
react-router-dom
"
function
AuthRoute
({})
\ No newline at end of file
client/src/Pages/Login.js
View file @
99d0b766
import
React
,
{
useState
,
useEffect
,
useRef
}
from
'
react
'
;
import
React
,
{
useState
,
useEffect
,
useRef
}
from
'
react
'
;
import
MainNav
from
'
../Components/MainNav
'
;
import
Nav1
from
'
../Components/MainNav
'
;
import
SubNav
from
'
../Components/SubNav
'
;
import
Nav2
from
'
../Components/SubNav
'
;
function
Login
()
{
import
{
Form
,
Col
,
Container
,
Button
,
Row
}
from
'
react-bootstrap
'
import
{
Link
,
Redirect
}
from
'
react-router-dom
'
function
Login
(){
const
[
validated
,
setValidated
]
=
useState
(
false
);
const
handleSubmit
=
(
e
)
=>
{
const
form
=
e
.
currentTarget
;
console
.
log
(
form
)
if
(
form
.
checkValidity
()
===
false
){
e
.
preventDefault
();
e
.
stopPropagation
();
}
setValidated
(
true
);
}
return
(
return
(
<
div
>
<
div
>
<
MainNav
/>
<
Nav1
/>
<
SubNav
/>
<
Nav2
/>
<
Container
className
=
"
my-5
"
>
<
Row
className
=
"
justify-content-center
"
>
<
Col
md
=
{
5
}
xs
=
{
10
}
className
=
"
border
"
style
=
{{
background
:
'
#F7F3F3
'
}}
>
<
h3
className
=
"
text-center mt-5
"
>
Login
<
/h3
>
<
Form
noValidate
validated
=
{
validated
}
onSubmit
=
{
handleSubmit
}
className
=
"
p-5
"
>
<
Form
.
Group
controlId
=
"
formBasicId
"
>
<
Form
.
Row
>
<
Col
sm
=
{
4
}
xs
=
{
6
}
as
=
{
Form
.
Label
}
for
=
"
id
"
>
아이디
<
/Col
>
<
Col
sm
=
{
8
}
xs
=
{
12
}
as
=
{
Form
.
Control
}
required
type
=
"
text
"
id
=
"
id
"
placeholder
=
"
ID
"
style
=
{{
width
:
'
160px
'
}}
>
<
/Col
>
<
Form
.
Control
.
Feedback
className
=
"
text-center
"
type
=
"
invalid
"
>
아이디를
입력하세요
.
<
/Form.Control.Feedback
>
<
/Form.Row
>
<
/Form.Group
>
<
Form
.
Group
controlId
=
"
formBasicPassword
"
>
<
Form
.
Row
>
<
Col
sm
=
{
4
}
xs
=
{
6
}
as
=
{
Form
.
Label
}
for
=
"
password
"
>
비밀번호
<
/Col
>
<
Col
sm
=
{
8
}
xs
=
{
12
}
as
=
{
Form
.
Control
}
type
=
"
password
"
id
=
"
password
"
placeholder
=
"
Password
"
style
=
{{
width
:
'
160px
'
}}
required
/>
<
Form
.
Control
.
Feedback
className
=
"
text-center
"
type
=
"
invalid
"
>
비밀번호를
입력하세요
.
<
/Form.Control.Feedback
>
<
/Form.Row
>
<
/Form.Group
>
<
Button
style
=
{{
background
:
'
#91877F
'
,
borderColor
:
'
#91877F
'
}}
type
=
"
submit
"
block
>
Login
<
/Button
>
<
div
className
=
"
loginLine
"
>
<
Link
to
=
"
/signup
"
style
=
{{
color
:
'
#91877F
'
}}
>
회원이
아니십니까
?
<
/Link
>
<
/div
>
<
/div
>
<
/Form
>
<
/Col
>
<
/Row
>
<
/Container
>
<
/div
>
)
)
}
}
...
...
client/src/Pages/LogoutButton.js
0 → 100644
View file @
99d0b766
import
React
from
'
react
'
import
{
withRouter
}
from
'
react-router-dom
'
function
LogoutButton
({
logout
,
history
}){
const
handleClick
=
()
=>
{
logout
()
history
.
push
(
"
/
"
)
}
return
<
button
onClick
=
{
handleClick
}
>
Logout
<
/button
>
}
export
default
withRouter
(
LogoutButton
)
\ No newline at end of file
client/src/Pages/Payment.js
View file @
99d0b766
...
@@ -40,7 +40,6 @@ function Payment() {
...
@@ -40,7 +40,6 @@ function Payment() {
function
handleClick2
()
{
function
handleClick2
()
{
if
(
paymentWay
.
length
!==
0
)
{
if
(
paymentWay
.
length
!==
0
)
{
setPaymentWay
([])
setPaymentWay
([])
// paymentWay=[]
}
}
}
}
...
...
client/src/Pages/ProductsRegist.js
View file @
99d0b766
import
React
,
{
useState
,
useEffect
,
useRef
}
from
'
react
'
;
import
React
,
{
useState
,
useEffect
,
useRef
}
from
'
react
'
;
import
MainNav
from
'
../Components/MainNav
'
;
import
Nav1
from
'
../Components/MainNav
'
;
import
SubNav
from
'
../Components/SubNav
'
;
import
Nav2
from
'
../Components/SubNav
'
;
import
{
Row
,
Col
,
Button
,
Form
,
Container
}
from
'
react-bootstrap
'
;
function
ProductsRegist
()
{
function
ProductsRegist
()
{
return
(
return
(
<
div
>
<
div
>
<
MainNav
/>
<
Nav1
/>
<
SubNav
/>
<
Nav2
/>
<
Container
>
<
Row
className
=
"
justify-content-md-center
"
>
<
Col
md
=
{
6
}
className
=
"
border m-5 p-3
"
>
<
Form
>
<
Form
.
Group
controlId
=
"
productNameform
"
>
<
Form
.
Label
>
상품명
<
/Form.Label
>
<
Form
.
Control
type
=
"
text
"
placeholder
=
"
상품명
"
/>
<
/Form.Group
>
<
Form
.
Group
controlId
=
"
productAmountform
"
>
<
Form
.
Label
>
수량
<
/Form.Label
>
<
Form
.
Control
type
=
"
text
"
placeholder
=
"
숫자만 입력해주세요
"
/>
<
/Form.Group
>
<
Form
.
Group
controlId
=
"
productPriceform
"
>
<
Form
.
Label
>
가격
<
/Form.Label
>
<
Form
.
Control
type
=
"
text
"
placeholder
=
"
숫자만 입력해주세요
"
/>
<
/Form.Group
>
<
Form
.
Group
>
<
Form
.
Label
>
분류
<
/Form.Label
>
<
Row
>
<
Col
md
=
{
6
}
>
<
Form
.
Control
as
=
"
select
"
placeholder
=
"
상위분류
"
>
<
option
>
Pants
<
/option
>
<
option
>
Skirt
<
/option
>
<
option
>
Outer
<
/option
>
<
/Form.Control
>
<
/Col
>
<
Col
md
=
{
6
}
>
<
Form
.
Control
as
=
"
select
"
placeholder
=
"
하위분류
"
>
<
option
>
긴바지
<
/option
>
<
option
>
반바지
<
/option
>
<
option
>
청바지
<
/option
>
<
/Form.Control
>
<
/Col
>
<
/Row
>
<
/Form.Group
>
<
Form
.
Group
controlId
=
"
productDescriptionform
"
>
<
Form
.
Label
>
상품설명
<
/Form.Label
>
<
Form
.
Control
as
=
"
textarea
"
rows
=
{
3
}
placeholder
=
"
상품을 설명해주세요
"
/>
<
/Form.Group
>
<
Form
.
Group
>
<
Form
.
Label
>
대표이미지
<
/Form.Label
>
<
Form
.
File
id
=
"
productImageform
"
/>
<
/Form.Group
>
<
Button
className
=
"
float-right
"
variant
=
"
primary
"
type
=
"
submit
"
>
등록
<
/Button
>
<
/Form
>
<
/Col
>
<
/Row
>
<
/Container
>
<
/div
>
<
/div
>
)
)
}
}
...
...
client/src/Pages/ShoppingCart.js
View file @
99d0b766
...
@@ -10,7 +10,7 @@ function ShoppingCart() {
...
@@ -10,7 +10,7 @@ function ShoppingCart() {
<
div
>
<
div
>
<
MainNav
/>
<
MainNav
/>
<
SubNav
/>
<
SubNav
/>
<
Container
className
=
"
justify-content-center
"
>
<
div
className
=
"
justify-content-center
"
>
<
h3
className
=
"
my-5 font-weight-bold text-center
"
style
=
{{
color
:
'
#F2A400
'
}}
>
장바구니
<
/h3
>
<
h3
className
=
"
my-5 font-weight-bold text-center
"
style
=
{{
color
:
'
#F2A400
'
}}
>
장바구니
<
/h3
>
<
div
>
<
div
>
<
h4
className
=
"
bg-light font-weight-bold py-3 border-top border-bottom text-center
"
>
주문상품정보
<
/h4
>
<
h4
className
=
"
bg-light font-weight-bold py-3 border-top border-bottom text-center
"
>
주문상품정보
<
/h4
>
...
@@ -77,7 +77,7 @@ function ShoppingCart() {
...
@@ -77,7 +77,7 @@ function ShoppingCart() {
<
div
className
=
"
text-center
"
>
<
div
className
=
"
text-center
"
>
<
Button
className
=
"
px-5
"
>
결제하기
<
/Button
>
<
Button
className
=
"
px-5
"
>
결제하기
<
/Button
>
<
/div
>
<
/div
>
<
/
Container
>
<
/
div
>
<
/div
>
<
/div
>
)
)
...
...
client/src/Pages/Signup.js
View file @
99d0b766
import
React
,
{
useState
,
useEffect
,
useRef
}
from
'
react
'
;
import
React
,
{
useState
,
useEffect
,
useRef
}
from
'
react
'
;
import
{
Redirect
}
from
'
react-router-dom
'
;
import
{
Redirect
}
from
'
react-router-dom
'
;
import
MainNav
from
'
../Components/MainNav
'
;
import
Nav1
from
'
../Components/MainNav
'
;
import
SubNav
from
'
../Components/SubNav
'
;
import
Nav2
from
'
../Components/SubNav
'
;
import
{
Form
,
Col
,
Container
,
Button
,
Row
}
from
'
react-bootstrap
'
import
FormCheckInput
from
'
react-bootstrap/esm/FormCheckInput
'
;
import
DaumPostcode
from
"
react-daum-postcode
"
;
function
Signup
()
{
function
Signup
()
{
const
[
address
,
setAddress
]
=
useState
(
""
)
const
handleComplete
=
(
data
)
=>
{
let
fullAddress
=
data
.
address
;
let
extraAddress
=
""
;
return
(
console
.
log
(
data
)
<
div
class
=
"
form-container
"
>
<
MainNav
/>
if
(
data
.
addressType
===
"
R
"
)
{
<
SubNav
/>
if
(
data
.
bname
!==
""
)
{
<
form
id
=
"
form
"
class
=
"
form
"
>
extraAddress
+=
data
.
bname
;
<
h1
>
회원가입
<
/h1
>
console
.
log
(
extraAddress
)
<
div
class
=
"
form-control
"
>
}
<
label
for
=
"
id
"
>
아이디
<
/label
>
if
(
data
.
buildingName
!==
""
)
{
<
input
type
=
"
text
"
id
=
"
id
"
placeholder
=
"
아이디를 입력하세요
"
><
/input
>
extraAddress
+=
extraAddress
!==
""
?
`,
${
data
.
buildingName
}
`
:
data
.
buildingName
;
}
fullAddress
+=
extraAddress
!==
""
?
` (
${
extraAddress
}
)`
:
""
;
}
setAddress
({
full
:
fullAddress
,
zone
:
data
.
zonecode
});
<
label
for
=
"
name
"
>
본명
<
/label
>
console
.
log
(
fullAddress
);
<
input
type
=
"
text
"
id
=
"
name
"
placeholder
=
"
본명을 입력하세요
"
><
/input
>
}
<
label
for
=
"
password
"
>
비밀번호
<
/label
>
const
Postcode
=
()
=>
{
<
input
type
=
"
password
"
id
=
"
password
"
placeholder
=
"
비밀번호를 입력하세요
"
><
/input
>
<
label
for
=
"
password2
"
>
비밀번호
확인
<
/label
>
<
input
type
=
"
password
"
id
=
"
password2
"
placeholder
=
"
비밀번호를 한번 더 입력하세요
"
><
/input
>
<
label
for
=
"
tel
"
>
휴대폰
번호
<
/label
>
return
(
<
input
type
=
"
text
"
id
=
"
tel
"
placeholder
=
"
휴대폰 번호를 입력하세요
"
><
/input
>
<
DaumPostcode
onComplete
=
{
handleComplete
}
/
>
);
}
<
label
for
=
"
add
"
>
주소
<
/label
>
const
[
post
,
setPost
]
=
useState
([]);
function
postClick
()
{
if
(
post
.
length
!==
0
)
{
setPost
([])
}
else
{
setPost
(
<
div
>
<
DaumPostcode
style
=
{
postCodeStyle
}
onComplete
=
{
handleComplete
}
/
>
<
/div
>
<
/div
>
<
/form
>
)
}
}
const
postCodeStyle
=
{
position
:
"
absolute
"
,
width
:
"
400px
"
,
height
:
"
500px
"
,
padding
:
"
7px
"
,
};
const
[
validated
,
setValidated
]
=
useState
(
false
);
const
handleSubmit
=
(
e
)
=>
{
const
form
=
e
.
currentTarget
;
console
.
log
(
form
)
if
(
form
.
checkValidity
()
===
false
)
{
e
.
preventDefault
();
e
.
stopPropagation
();
}
setValidated
(
true
);
}
return
(
<
div
>
<
Nav1
/>
<
Nav2
/>
<
Container
className
=
"
my-5
"
>
<
Row
className
=
"
justify-content-center
"
>
<
Col
md
=
{
6
}
xs
=
{
10
}
className
=
"
border
"
style
=
{{
background
:
'
#F7F3F3
'
}}
>
<
h2
className
=
"
text-center mt-5
"
>
Sign
Up
<
/h2
>
<
Form
noValidate
validated
=
{
validated
}
onSubmit
=
{
handleSubmit
}
className
=
"
p-5
"
>
<
Form
.
Group
controlId
=
"
formBasicName
"
>
<
Form
.
Row
>
<
Form
.
Label
for
=
"
name
"
>
이
름
<
/Form.Label
>
<
Col
>
<
Form
.
Control
required
type
=
"
text
"
id
=
"
name
"
size
=
"
sm
"
placeholder
=
""
className
=
"
mx-sm-3
"
>
<
/Form.Control
>
<
Form
.
Control
.
Feedback
type
=
"
invalid
"
>
이름을
입력하세요
.
<
/Form.Control.Feedback
>
<
/Col
>
<
/Form.Row
>
<
/Form.Group
>
<
Form
.
Group
controlId
=
"
formBasicNumber
"
>
<
Form
.
Row
>
<
Form
.
Label
for
=
"
number
"
>
주민등록번호
<
/Form.Label
>
<
Col
as
=
{
Row
}
>
<
Form
.
Control
required
type
=
"
text
"
id
=
"
number1
"
size
=
"
sm
"
maxlength
=
"
6
"
className
=
"
mx-sm-3
"
style
=
{{
width
:
'
120px
'
}}
><
/Form.Control
>
-
<
Form
.
Control
required
type
=
"
text
"
id
=
"
number2
"
size
=
"
sm
"
maxlength
=
"
1
"
className
=
"
mx-sm-3
"
style
=
{{
width
:
'
25px
'
}}
><
/Form.Control
>
******
<
Form
.
Control
.
Feedback
type
=
"
invalid
"
>
주민등록번호를
입력하세요
.
<
/Form.Control.Feedback
>
<
/Col
>
<
/Form.Row
>
<
/Form.Group
>
<
Form
.
Group
controlId
=
"
formBasicId
"
>
<
Form
.
Row
>
<
Form
.
Label
for
=
"
id
"
>
아이디
<
/Form.Label
>
<
Col
>
<
Form
.
Control
required
type
=
"
text
"
id
=
"
id
"
size
=
"
sm
"
placeholder
=
"
ID
"
className
=
"
mx-sm-3
"
><
/Form.Control
>
<
Form
.
Control
.
Feedback
type
=
"
invalid
"
>
아이디를
입력하세요
.
<
/Form.Control.Feedback
>
<
/Col
>
<
/Form.Row
>
<
/Form.Group
>
<
Form
.
Group
controlId
=
"
formBasicPassword
"
>
<
Form
.
Row
>
<
Form
.
Label
for
=
"
password
"
>
비밀번호
<
/Form.Label
>
<
Col
>
<
Form
.
Control
required
type
=
"
password
"
id
=
"
password
"
size
=
"
sm
"
placeholder
=
"
Password
"
aria
-
describedby
=
"
passwordHelpBlock
"
className
=
"
mx-sm-3
"
><
/Form.Control
>
<
Form
.
Text
id
=
"
password
"
muted
>
8
-
15
자로
입력해주세요
.
<
/Form.Text
>
<
Form
.
Control
.
Feedback
type
=
"
invalid
"
>
비밀번호를
입력하세요
.
<
/Form.Control.Feedback
>
<
/Col
>
<
/Form.Row
>
<
/Form.Group
>
<
Form
.
Group
controlId
=
"
formBasicPassword2
"
>
<
Form
.
Row
>
<
Form
.
Label
for
=
"
password2
"
>
비밀번호
확인
<
/Form.Label
>
<
Col
>
<
Form
.
Control
required
type
=
"
password
"
id
=
"
password2
"
size
=
"
sm
"
placeholder
=
""
className
=
"
mx-sm-3
"
><
/Form.Control
>
<
Form
.
Control
.
Feedback
type
=
"
invalid
"
>
비밀번호를
한번
더
입력하세요
.
<
/Form.Control.Feedback
>
<
/Col
>
<
/Form.Row
>
<
/Form.Group
>
<
Form
.
Group
controlId
=
"
formBasicTel
"
>
<
Form
.
Row
>
<
Form
.
Label
for
=
"
tel
"
>
휴대전화
<
/Form.Label
>
<
Col
>
<
Form
.
Control
required
type
=
"
text
"
id
=
"
tel
"
size
=
"
sm
"
placeholder
=
""
className
=
"
mx-sm-3
"
><
/Form.Control
>
<
Form
.
Control
.
Feedback
type
=
"
invalid
"
>
휴대전화를
입력하세요
.
<
/Form.Control.Feedback
>
<
/Col
>
<
/Form.Row
>
<
/Form.Group
>
<
Form
.
Group
controlId
=
"
formBasicAdd
"
>
<
Form
.
Row
>
{
console
.
log
(
"
address=
"
,
address
)}
<
Form
.
Label
className
=
"
mx-3
"
>
주
소
<
/Form.Label
>
<
Form
.
Control
required
type
=
"
text
"
id
=
"
add
"
size
=
"
sm
"
style
=
{{
width
:
'
120px
'
}}
value
=
{
address
.
zone
}
disabled
=
{(
address
.
zone
==
null
)
?
false
:
true
}
><
/Form.Control>
<
Button
size
=
"
sm
"
style
=
{{
background
:
'
#91877F
'
,
borderColor
:
'
#91877F
'
}}
className
=
"
mx-3
"
type
=
"
button
"
onClick
=
{
postClick
}
>
주소
찾기
<
/Button
>
{
post
}
<
Form
.
Control
required
type
=
"
text
"
id
=
"
add
"
size
=
"
sm
"
value
=
{
address
.
full
}
disabled
=
{(
address
.
zone
==
null
)
?
false
:
true
}
className
=
"
mx-3
"
style
=
{{
width
:
'
330px
'
}}
><
/Form.Control
>
<
Form
.
Control
required
type
=
"
text
"
id
=
"
add2
"
size
=
"
sm
"
placeholder
=
"
상세주소
"
className
=
"
mx-sm-3
"
><
/Form.Control
>
<
Form
.
Control
.
Feedback
type
=
"
invalid
"
>
상세
주소를
입력하세요
.
<
/Form.Control.Feedback
>
<
/Form.Row
>
<
/Form.Group
>
<
Button
style
=
{{
background
:
'
#91877F
'
,
borderColor
:
'
#91877F
'
}}
type
=
"
submit
"
block
>
Sign
Up
<
/Button
>
<
/Form
>
<
/Col
>
<
/Row
>
<
/Container
>
<
/div
>
<
/div
>
)
)
...
...
server/package.json
View file @
99d0b766
...
@@ -11,6 +11,9 @@
...
@@ -11,6 +11,9 @@
"author"
:
""
,
"author"
:
""
,
"license"
:
"ISC"
,
"license"
:
"ISC"
,
"dependencies"
:
{
"dependencies"
:
{
"express"
:
"^4.17.1"
"express"
:
"^4.17.1"
,
"mongoose"
:
"^5.11.9"
,
"nodemon"
:
"^2.0.6"
,
"validator"
:
"^13.5.2"
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment