Showing
3 changed files
with
64 additions
and
23 deletions
| ... | @@ -9,9 +9,27 @@ const UserData = styled.div` | ... | @@ -9,9 +9,27 @@ const UserData = styled.div` |
| 9 | font-size: 15px; | 9 | font-size: 15px; |
| 10 | `; | 10 | `; |
| 11 | 11 | ||
| 12 | +function makeTimestampToString(stamp) { | ||
| 13 | + if (!stamp) return ''; | ||
| 14 | + const date = stamp.split('T')[0]; | ||
| 15 | + const time = stamp.split('T')[1].split('.')[0]; | ||
| 16 | + | ||
| 17 | + return `${date} ${time}`; | ||
| 18 | +} | ||
| 19 | + | ||
| 12 | const UserDataCard = (props) => { | 20 | const UserDataCard = (props) => { |
| 13 | const getStats = `마지막 업데이트 ${moment().format("YYYY/MM/DD hh:mm")}`; | 21 | const getStats = `마지막 업데이트 ${moment().format("YYYY/MM/DD hh:mm")}`; |
| 14 | - const {userId} = props; | 22 | + const {userId, userData} = props; |
| 23 | + const {name, user_id, phone_number, email, created_datetime, recent_login_datetime, license_registered, card_registered} = userData; | ||
| 24 | + | ||
| 25 | + // card_registered: false | ||
| 26 | + // created_datetime: "2020-05-03T15:13:07.429Z" | ||
| 27 | + // email: "song@naver.com" | ||
| 28 | + // license_registered: false | ||
| 29 | + // name: "송봉수" | ||
| 30 | + // phone_number: "+821088643678" | ||
| 31 | + // recent_login_datetime: "2020-05-07T07:19:52.302Z" | ||
| 32 | + // user_id: 7569 | ||
| 15 | 33 | ||
| 16 | return ( | 34 | return ( |
| 17 | <Card | 35 | <Card |
| ... | @@ -22,34 +40,34 @@ const UserDataCard = (props) => { | ... | @@ -22,34 +40,34 @@ const UserDataCard = (props) => { |
| 22 | <div> | 40 | <div> |
| 23 | <Row> | 41 | <Row> |
| 24 | <Col md={6} sm={6} xs={12}> | 42 | <Col md={6} sm={6} xs={12}> |
| 25 | - <UserData>이름</UserData> | 43 | + <UserData>이름 : {name}</UserData> |
| 26 | </Col> | 44 | </Col> |
| 27 | <Col md={6} sm={6} xs={12}> | 45 | <Col md={6} sm={6} xs={12}> |
| 28 | - <UserData>사용자 ID</UserData> | 46 | + <UserData>사용자 ID : {user_id}</UserData> |
| 29 | </Col> | 47 | </Col> |
| 30 | </Row> | 48 | </Row> |
| 31 | <Row> | 49 | <Row> |
| 32 | <Col md={6} sm={6} xs={12}> | 50 | <Col md={6} sm={6} xs={12}> |
| 33 | - <UserData>전화번호</UserData> | 51 | + <UserData>전화번호 : {phone_number}</UserData> |
| 34 | </Col> | 52 | </Col> |
| 35 | <Col md={6} sm={6} xs={12}> | 53 | <Col md={6} sm={6} xs={12}> |
| 36 | - <UserData>이메일 가입 날짜</UserData> | 54 | + <UserData>이메일 : {email}</UserData> |
| 37 | </Col> | 55 | </Col> |
| 38 | </Row> | 56 | </Row> |
| 39 | <Row> | 57 | <Row> |
| 40 | <Col md={6} sm={6} xs={12}> | 58 | <Col md={6} sm={6} xs={12}> |
| 41 | - <UserData>가입 날짜</UserData> | 59 | + <UserData>가입 날짜 : {makeTimestampToString(created_datetime)}</UserData> |
| 42 | </Col> | 60 | </Col> |
| 43 | <Col md={6} sm={6} xs={12}> | 61 | <Col md={6} sm={6} xs={12}> |
| 44 | - <UserData>최근 로그인 날짜</UserData> | 62 | + <UserData>최근 로그인 날짜 : {makeTimestampToString(recent_login_datetime)}</UserData> |
| 45 | </Col> | 63 | </Col> |
| 46 | </Row> | 64 | </Row> |
| 47 | <Row> | 65 | <Row> |
| 48 | <Col md={6} sm={6} xs={12}> | 66 | <Col md={6} sm={6} xs={12}> |
| 49 | - <UserData>면허증 등록 여부</UserData> | 67 | + <UserData>면허증 등록 여부 : {license_registered ? '등록됨' : '미등록'}</UserData> |
| 50 | </Col> | 68 | </Col> |
| 51 | <Col md={6} sm={6} xs={12}> | 69 | <Col md={6} sm={6} xs={12}> |
| 52 | - <UserData>카드 등록 여부</UserData> | 70 | + <UserData>카드 등록 여부 : {license_registered ? '등록됨' : '미등록'}</UserData> |
| 53 | </Col> | 71 | </Col> |
| 54 | </Row> | 72 | </Row> |
| 55 | </div> | 73 | </div> | ... | ... |
| ... | @@ -3,17 +3,21 @@ import { Grid, Row, Col, Table } from "react-bootstrap"; | ... | @@ -3,17 +3,21 @@ import { Grid, Row, Col, Table } from "react-bootstrap"; |
| 3 | import styled from "styled-components"; | 3 | import styled from "styled-components"; |
| 4 | import Card from "components/Card/Card.jsx"; | 4 | import Card from "components/Card/Card.jsx"; |
| 5 | import { tdArray } from "variables/Variables.jsx"; | 5 | import { tdArray } from "variables/Variables.jsx"; |
| 6 | +import moment from "moment"; | ||
| 6 | 7 | ||
| 7 | -const thArray = ['킥보드 시리얼 번호', '대여 시각', '반납 시각', '대여 시간', '이동 거리', '대여 금액']; | 8 | +const thArray = ['킥보드 시리얼 번호', '대여 시각', '반납 시각', '총 대여 시간', '이동 거리', '대여 금액']; |
| 8 | 9 | ||
| 9 | const UserHistoryCard = (props) => { | 10 | const UserHistoryCard = (props) => { |
| 10 | - const {userId} = props; | 11 | + const {userId, rentData} = props; |
| 12 | + const getStats = `마지막 업데이트 ${moment().format("YYYY/MM/DD hh:mm")}`; | ||
| 11 | 13 | ||
| 12 | return ( | 14 | return ( |
| 13 | <Card | 15 | <Card |
| 14 | title={`${userId}번 사용자 킥보드 사용 히스토리`} | 16 | title={`${userId}번 사용자 킥보드 사용 히스토리`} |
| 15 | ctTableFullWidth | 17 | ctTableFullWidth |
| 16 | ctTableResponsive | 18 | ctTableResponsive |
| 19 | + stats={getStats} | ||
| 20 | + statsIcon="fa fa-history" | ||
| 17 | content={ | 21 | content={ |
| 18 | <Table striped hover> | 22 | <Table striped hover> |
| 19 | <thead> | 23 | <thead> |
| ... | @@ -24,15 +28,16 @@ const UserHistoryCard = (props) => { | ... | @@ -24,15 +28,16 @@ const UserHistoryCard = (props) => { |
| 24 | </tr> | 28 | </tr> |
| 25 | </thead> | 29 | </thead> |
| 26 | <tbody> | 30 | <tbody> |
| 27 | - {tdArray.map((prop, key) => { | 31 | + {rentData.map((data, idx) => ( |
| 28 | - return ( | 32 | + <tr key={idx}> |
| 29 | - <tr key={key}> | 33 | + <td>{data.serial_number}</td> |
| 30 | - {prop.map((prop, key) => { | 34 | + <td>{data.rent_datetime}</td> |
| 31 | - return <td key={key}>{prop}</td>; | 35 | + <td>{data.return_datetime}</td> |
| 32 | - })} | 36 | + <td>{data.rental_time}</td> |
| 37 | + <td>{data.rental_distance}</td> | ||
| 38 | + <td>{data.rental_fee}</td> | ||
| 33 | </tr> | 39 | </tr> |
| 34 | - ); | 40 | + ))} |
| 35 | - })} | ||
| 36 | </tbody> | 41 | </tbody> |
| 37 | </Table> | 42 | </Table> |
| 38 | } | 43 | } | ... | ... |
| ... | @@ -5,12 +5,30 @@ import UserHistoryCard from '../components/UserHistory/UserHistoryCard'; | ... | @@ -5,12 +5,30 @@ import UserHistoryCard from '../components/UserHistory/UserHistoryCard'; |
| 5 | import SearchButton from "../components/UserHistory/SearchButton"; | 5 | import SearchButton from "../components/UserHistory/SearchButton"; |
| 6 | 6 | ||
| 7 | const UserHistory = () => { | 7 | const UserHistory = () => { |
| 8 | - const [userId, setUserId] = useState(0); | 8 | + const [userId, setUserId] = useState(7575); |
| 9 | + const [userData, setUserData] = useState({}); | ||
| 10 | + const [rentData, setRentData] = useState([]); | ||
| 9 | 11 | ||
| 10 | useEffect(() => { | 12 | useEffect(() => { |
| 11 | - // componentDidMount > 쿼리 검사하기 | 13 | + // TODO: componentDidMount > 쿼리 검사하기 |
| 12 | },[]); | 14 | },[]); |
| 13 | 15 | ||
| 16 | + useEffect(() => { | ||
| 17 | + fetch(`http://1.201.143.67:5901/user/${userId}`) | ||
| 18 | + .then(r => r.json()) | ||
| 19 | + .then(d => { | ||
| 20 | + console.log('userData',d.data[0]) | ||
| 21 | + if(d.data && d.data.length) setUserData(d.data[0]); | ||
| 22 | + | ||
| 23 | + fetch(`http://1.201.143.67:5901/user/rent/${userId}`) | ||
| 24 | + .then(r => r.json()) | ||
| 25 | + .then(d => { | ||
| 26 | + console.log('rentData',d.data); | ||
| 27 | + if(d.data && d.data.length) setRentData(d.data); | ||
| 28 | + }) | ||
| 29 | + }) | ||
| 30 | + .catch(err => console.log(err)); },[userId]); | ||
| 31 | + | ||
| 14 | return ( | 32 | return ( |
| 15 | <div className="content"> | 33 | <div className="content"> |
| 16 | <Grid fluid> | 34 | <Grid fluid> |
| ... | @@ -21,10 +39,10 @@ const UserHistory = () => { | ... | @@ -21,10 +39,10 @@ const UserHistory = () => { |
| 21 | </Row> | 39 | </Row> |
| 22 | <Row> | 40 | <Row> |
| 23 | <Col md={12}> | 41 | <Col md={12}> |
| 24 | - <UserDataCard userId={userId}/> | 42 | + <UserDataCard userId={userId} userData={userData}/> |
| 25 | </Col> | 43 | </Col> |
| 26 | <Col md={12}> | 44 | <Col md={12}> |
| 27 | - <UserHistoryCard userId={userId}/> | 45 | + <UserHistoryCard userId={userId} rentData={rentData}/> |
| 28 | </Col> | 46 | </Col> |
| 29 | </Row> | 47 | </Row> |
| 30 | </Grid> | 48 | </Grid> | ... | ... |
-
Please register or login to post a comment