Account.js 9.79 KB
Newer Older
1
import React, { useEffect, useState } from 'react'
박상호's avatar
박상호 committed
2
import { Card, Image, Container, Row, Col, Table, Accordion, Button, Form, Modal, Alert } from 'react-bootstrap'
3
import { Link } from 'react-router-dom';
kusang96's avatar
kusang96 committed
4
5
import axios from 'axios';
import catchError from '../utils/catchErrors';
6
import { isAuthenticated } from '../utils/auth';
Jiwon Yoon's avatar
Jiwon Yoon committed
7

8
9
const INIT_ACCOUNT = {
    name: "",
박상호's avatar
박상호 committed
10
    avatarUrl: ''
11
}
Jiwon Yoon's avatar
Jiwon Yoon committed
12
13

function Account() {
14
    const [account, setAccount] = useState(INIT_ACCOUNT)
kusang96's avatar
kusang96 committed
15
    const [show, setShow] = useState(false);
박상호's avatar
0120    
박상호 committed
16
    const [proshow, setProshow] = useState(false)
17
18
    const [error, setError] = useState("")
    const userId = isAuthenticated()
19
    const [ordered, setOrdered] = useState('')
박상호's avatar
good    
박상호 committed
20
    
21
22

    async function getUsername(user) {
박상호's avatar
박상호 committed
23
        // console.log("tlg")
24
25
26
        try {
            const response = await axios.get(`/api/users/account/${user}`)
            setAccount(response.data)
박상호's avatar
0120    
박상호 committed
27
            console.log('555555555', response.data);
28
        } catch (error) {
kusang96's avatar
kusang96 committed
29
            catchError(error, setError)
박상호's avatar
박상호 committed
30
            // console.log('error2222', error)
31
32
33
34
35
        }
    }

    useEffect(() => {
        getUsername(userId)
36
        getOrdered(userId)
37
38
    }, [userId])

박상호's avatar
박상호 committed
39
40
41
42
43
44
45
46
47
48
49
50
    const handleChange = (event) => {
        const { name, value, files } = event.target
        if (files) {
            for (const file of files) {
                // console.log("name=", name, "value=", value, 'file=', file);
            }
            setAccount({ ...account, [name]: files })
        } else {
            console.log("name=", name, "value=", value);
            setAccount({ ...account, [name]: value })
        }
    }
51

박상호's avatar
박상호 committed
52
53
54
55
56
57
58
59
60
61
    const handleBasic = async (event) => {
        const formData = new FormData()
        formData.append('avatar', '')
        try {
            if (userId) {
                const response = await axios.put(`/api/users/account/${userId}`, formData)
                console.log(response.data)
                window.location.reload()
            }
        } catch (error) {
kusang96's avatar
kusang96 committed
62
            catchError(error, setError)
박상호's avatar
박상호 committed
63
64
65
        }
        setShow(false)
    }
66
67


박상호's avatar
박상호 committed
68
69
70
71
72
73
74
75
76
77
78
79
    const handleSubmit = async (event) => {
        event.preventDefault()
        if (account.avatar) {
            const formData = new FormData()
            formData.append('avatar', account.avatar[0])
            try {
                if (userId) {
                    const response = await axios.put(`/api/users/account/${userId}`, formData)
                    console.log(response.data)
                    window.location.reload()
                }
            } catch (error) {
kusang96's avatar
kusang96 committed
80
                catchError(error, setError)
박상호's avatar
박상호 committed
81
82
83
            }
        } else {
            alert("파일을 선택해주세요.")
kusang96's avatar
kusang96 committed
84
        }
박상호's avatar
박상호 committed
85
    }
86

87
88
89
90
91
92
93
94
95
96
97
    async function getOrdered({}) {
        console.log("object")
        try {
            const response = await axios.get(`/api/users/addorder`)
            setOrdered(response.data)
            console.log('@@@@', response.data);
        } catch (error) {
            catchError(error, setError)
        }
    }

박상호's avatar
good    
박상호 committed
98
    
박상호's avatar
박상호 committed
99
    return (
100
        <Container className="px-3">
kusang96's avatar
kusang96 committed
101
102
103
104
105
106
107
108
            <style type="text/css">
                {`
                a, a:hover, a:active {
                    color: #91877F;
                    text-decoration-color: #91877F;
                }
                `}
            </style>
109
110
111
            <h3 className="my-4 mx-3 font-weight-bold">My Page</h3>
            <Card md={3} className="p-1 mb-4" style={{ background: '#F7F3F3' }}>
                <Row className="p-2">
박상호's avatar
박상호 committed
112
                    <Col md={5} className="d-flex align-content-center justify-content-center">
kusang96's avatar
kusang96 committed
113
                        <Button variant="outline-light" onClick={() => setShow(true)}>
박상호's avatar
박상호 committed
114
                            {account.avatarUrl ? (
kusang96's avatar
kusang96 committed
115
                                <Image src={account.avatarUrl && `/images/${account.avatarUrl}`} className="img-thumbnail"
박상호's avatar
박상호 committed
116
117
                                    roundedCircle style={{ objectFit: "cover", width: "10rem", height: "10rem" }} />
                            ) : (
kusang96's avatar
0115    
kusang96 committed
118
                                    <Image src="/icon/person.svg" className="img-thumbnail"
박상호's avatar
박상호 committed
119
120
                                        roundedCircle style={{ objectFit: "cover", width: "10rem", height: "10rem" }} />
                                )}
121
                        </Button>
kusang96's avatar
kusang96 committed
122
                        <Modal show={show} onHide={() => setShow(false)}>
123
                            <Modal.Header closeButton style={{ background: "#F7F3F3" }}>
박상호's avatar
0120    
박상호 committed
124
                                <Modal.Title >이미지를 변경하시겠습니까?</Modal.Title>
박상호's avatar
박상호 committed
125
126
127
128
129
130
131
132
133
134
135
                            </Modal.Header>
                            <Form onSubmit={handleSubmit}>
                                <Modal.Body>
                                    <Form.Control type="file" name="avatar" onChange={handleChange} />
                                </Modal.Body>
                                <Modal.Footer>
                                    <Col className="px-0">
                                        <Button variant="outline-secondary" onClick={handleBasic}
                                            className="d-flex justify-content-start"><small>기본이미지로</small></Button>
                                        {/* 기본이미지로 보내기 */}
                                    </Col>
kusang96's avatar
kusang96 committed
136
137
                                    <Button variant="secondary" onClick={() => setShow(false)}>취소</Button>
                                    <Button variant="primary" type="submit" onClick={() => setShow(false)}>저장</Button>
박상호's avatar
박상호 committed
138
139
140
                                </Modal.Footer>
                            </Form>
                        </Modal>
141
142
143
144
145
                    </Col>
                    <Col >
                        <Row className="mt-4 text-center">
                            <Col>
                                <h2>
박상호's avatar
0120    
박상호 committed
146
147
148
149
                                    <strong title='회원정보' style={{ cursor: "pointer", textDecoration: 'underline' }} onClick={() => setProshow(true)}>
                                        {account.name}
                                    </strong>
                                    <Modal
150

박상호's avatar
0120    
박상호 committed
151
152
153
                                        size="sm"
                                        show={proshow}
                                        onHide={() => setProshow(false)}>
154
                                        <Modal.Header closeButton style={{ background: "#F7F3F3" }}>
박상호's avatar
0120    
박상호 committed
155
156
157
158
159
160
161
162
163
164
165
166
167
                                            <Modal.Title>회원정보</Modal.Title>
                                        </Modal.Header>
                                        <Modal.Body>
                                            <Col className="p-1">
                                                <li><strong>Role :</strong> {account.role}</li>
                                                <li><strong>ID :</strong> {account.id}</li>
                                                <li><strong>Username :</strong> {account.name}</li>
                                                <li><strong>Email :</strong> {account.email}</li>
                                                <li><strong>Tel :</strong> {account.tel}</li>
                                            </Col>
                                        </Modal.Body>
                                    </Modal>
                                    <small>{' '}({account.id}){" "}</small>
168
169
170
171
172
                                </h2>
                            </Col>
                        </Row>
                        <Row className="px-3">
                            <Card.Body className="p-2 text-center">
kusang96's avatar
kusang96 committed
173
                                <h4><Link to="/">
174
                                    <strong title="홈으로">
kusang96's avatar
0115    
kusang96 committed
175
                                        <Image src="/icon/mypagetiger.svg" width={"30rem"} roundedCircle className="img-thumbnail" >
176
                                        </Image>KU#
kusang96's avatar
kusang96 committed
177
                                    </strong>
178
                                </Link>
kusang96's avatar
kusang96 committed
179
180
181
                 방문해주신 <em>{account.name}</em> 님,<br />
                진심으로 환영합니다! 즐거운 쇼핑 되세요.
                </h4>
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
                            </Card.Body>
                        </Row>
                        <Row className="mr-1 text-muted d-flex justify-content-end">
                            <a href="mailto:shoppingmall_KU@korea.ac.kr">
                                <small title="메일보내기"> * 문의 : shoppingmall_KU@korea.ac.kr </small>
                            </a>
                            {/* 쇼핑몰 문의 메일보내기 */}
                        </Row>
                    </Col>
                </Row>
            </Card>
            <Accordion>
                <Row className="my-3 px-3">
                    <Table>
                        <thead className="text-center" style={{ background: '#F7F3F3' }}>
                            <tr>
                                <th scope="col">주문현황</th>
                                <th scope="col">배송중</th>
                                <th scope="col">배송완료</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <th scope="row">케이시앵글부츠(SH)</th>
                                <td>Mark</td>
                                <td>Otto</td>
                            </tr>
                            <tr>
                                <th scope="row">2</th>
                                <td>Jacob</td>
                                <td>Thornton</td>
                            </tr>
                            <tr>
                                <th scope="row">3</th>
                                <td colspan="2">Larry the Bird</td>
                            </tr>
                        </tbody>
                    </Table>
                </Row>
            </Accordion>
        </Container >
Jiwon Yoon's avatar
Jiwon Yoon committed
223
    )
박상호's avatar
박상호 committed
224
}
Jiwon Yoon's avatar
Jiwon Yoon committed
225

kusang96's avatar
0115    
kusang96 committed
226
export default Account