Account.js 7.91 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);
16
17
18
19
    const [error, setError] = useState("")
    const userId = isAuthenticated()

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

    useEffect(() => {
        getUsername(userId)
    }, [userId])

박상호's avatar
박상호 committed
35
36
37
38
39
40
41
42
43
44
45
46
    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 })
        }
    }
47

박상호's avatar
박상호 committed
48
49
50
51
52
53
54
55
56
57
    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
58
            catchError(error, setError)
박상호's avatar
박상호 committed
59
60
61
        }
        setShow(false)
    }
62
63


박상호's avatar
박상호 committed
64
65
66
67
68
69
70
71
72
73
74
75
    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
76
                catchError(error, setError)
박상호's avatar
박상호 committed
77
78
79
            }
        } else {
            alert("파일을 선택해주세요.")
kusang96's avatar
kusang96 committed
80
        }
박상호's avatar
박상호 committed
81
    }
82

박상호's avatar
박상호 committed
83
    return (
84
        <Container className="px-3">
kusang96's avatar
kusang96 committed
85
86
87
88
89
90
91
92
            <style type="text/css">
                {`
                a, a:hover, a:active {
                    color: #91877F;
                    text-decoration-color: #91877F;
                }
                `}
            </style>
93
94
95
            <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
96
                    <Col md={5} className="d-flex align-content-center justify-content-center">
kusang96's avatar
kusang96 committed
97
                        <Button variant="outline-light" onClick={() => setShow(true)}>
박상호's avatar
박상호 committed
98
                            {account.avatarUrl ? (
kusang96's avatar
kusang96 committed
99
                                <Image src={account.avatarUrl && `/images/${account.avatarUrl}`} className="img-thumbnail"
박상호's avatar
박상호 committed
100
101
                                    roundedCircle style={{ objectFit: "cover", width: "10rem", height: "10rem" }} />
                            ) : (
kusang96's avatar
0115    
kusang96 committed
102
                                    <Image src="/icon/person.svg" className="img-thumbnail"
박상호's avatar
박상호 committed
103
104
                                        roundedCircle style={{ objectFit: "cover", width: "10rem", height: "10rem" }} />
                                )}
105
                        </Button>
kusang96's avatar
kusang96 committed
106
                        <Modal show={show} onHide={() => setShow(false)}>
박상호's avatar
박상호 committed
107
108
109
110
111
112
113
114
115
116
117
118
119
                            <Modal.Header closeButton>
                                <Modal.Title>이미지를 변경하시겠습니까?</Modal.Title>
                            </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
120
121
                                    <Button variant="secondary" onClick={() => setShow(false)}>취소</Button>
                                    <Button variant="primary" type="submit" onClick={() => setShow(false)}>저장</Button>
박상호's avatar
박상호 committed
122
123
124
                                </Modal.Footer>
                            </Form>
                        </Modal>
125
126
127
128
129
130
131
132
133
134
135
                    </Col>
                    <Col >
                        <Row className="mt-4 text-center">
                            <Col>
                                <h2>
                                    <strong>{account.name}</strong> <small>({account.id}){" "}님</small>
                                </h2>
                            </Col>
                        </Row>
                        <Row className="px-3">
                            <Card.Body className="p-2 text-center">
kusang96's avatar
kusang96 committed
136
                                <h4><Link to="/">
137
                                    <strong title="홈으로">
kusang96's avatar
0115    
kusang96 committed
138
                                        <Image src="/icon/mypagetiger.svg" width={"30rem"} roundedCircle className="img-thumbnail" >
139
                                        </Image>KU#
kusang96's avatar
kusang96 committed
140
                                    </strong>
141
                                </Link>
kusang96's avatar
kusang96 committed
142
143
144
                 방문해주신 <em>{account.name}</em> 님,<br />
                진심으로 환영합니다! 즐거운 쇼핑 되세요.
                </h4>
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
                            </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
186
    )
박상호's avatar
박상호 committed
187
}
Jiwon Yoon's avatar
Jiwon Yoon committed
188

kusang96's avatar
0115    
kusang96 committed
189
export default Account