From ecd2531bb543f73174f0b03a58db3112e8863c79 Mon Sep 17 00:00:00 2001 From: Jimmy Liow <18777396951@163.com> Date: Mon, 24 Apr 2023 15:55:38 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E6=8F=90=E9=86=92=EF=BC=9B=E5=A2=9E=E5=8A=A0=E7=99=BB=E9=99=86?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/stores/Auth.js | 6 ++- src/stores/Reservation.js | 85 ++++++++------------------------ src/views/App.jsx | 6 ++- src/views/reservation/Newest.jsx | 25 +++++++--- 4 files changed, 49 insertions(+), 73 deletions(-) diff --git a/src/stores/Auth.js b/src/stores/Auth.js index 72b9122..3ce7cd4 100644 --- a/src/stores/Auth.js +++ b/src/stores/Auth.js @@ -7,7 +7,11 @@ class Auth { this.root = root; } - loginUser = 'LiaoYijun(IT)'; + login = { + userId: 1, + username: 'LiaoYijun(IT)', + travelAgencyId: 628 + } } export default Auth; \ No newline at end of file diff --git a/src/stores/Reservation.js b/src/stores/Reservation.js index 28aebfb..5b068b0 100644 --- a/src/stores/Reservation.js +++ b/src/stores/Reservation.js @@ -1,5 +1,5 @@ import { makeAutoObservable, runInAction } from "mobx"; -import * as req from '@/utils/request'; +import { fetchJSON } from '@/utils/request'; import { HT_HOST } from "@/config"; import { prepareUrl } from '@/utils/commons'; @@ -11,9 +11,8 @@ class Reservation { } fetchReservation(referenceNo, fromDate, thruDate) { - const fetchUrl = prepareUrl(HT_HOST + '/service-tourdesign/GetPlanSearchList') - .append('VEISn', 628) + .append('VEISn', this.root.authStore.login.travelAgencyId) .append('GroupNo', referenceNo) .append('DateStart', fromDate) .append('DataEnd', thruDate) @@ -22,70 +21,28 @@ class Reservation { .append('PageNum', 0) .append('PageIndex', 1) .build(); - req.fetchJSON(fetchUrl) - .then(json => { - runInAction(() => { - this.reservationList = json.data.map((data, index) => { - return { - key: data.vas_gri_sn, - id: data.vas_gri_sn, - referenceNumber: data.GriName, - arrivalDate: data.GetGDate, - pax: data.PersonNum, - status: data.GState, - reservationDate: data.GetGDate, - guide: data.Guide, + + return fetchJSON(fetchUrl) + .then(json => { + runInAction(() => { + if (json.errcode == 0) { + this.reservationList = json.Result.map((data, index) => { + return { + key: data.vas_gri_sn, + id: data.vas_gri_sn, + referenceNumber: data.GriName, + arrivalDate: data.GetGDate, + pax: data.PersonNum, + status: data.GState, + reservationDate: data.GetGDate, + guide: data.Guide, + } + }); + } else { + throw new Error(json.errmsg + ': ' + json.errcode); } }); }); - }) - .then(() => { - }); - - // runInAction(() => { - // this.reservationList = [ - // { - // key: '1', - // id: '1', - // referenceNumber: '111029-N111025076', - // arrivalDate: '2023-04-08', - // pax: '5AD 1CH', - // status: 'Confirm', - // reservationDate: '2023-04-08 19:31', - // guide: 'Bill', - // }, - // { - // key: '2', - // id: '3', - // referenceNumber: '111029-N111025076', - // arrivalDate: '2023-04-08', - // pax: '5AD 1CH', - // status: 'Confirm', - // reservationDate: '2023-04-08 19:31', - // guide: 'Jim', - // }, - // { - // key: '3', - // id: '3', - // referenceNumber: '111029-N111025076', - // arrivalDate: '2023-05-08', - // pax: '3AD', - // status: 'Confirm', - // reservationDate: '2023-01-08 19:31', - // guide: 'Giffigan', - // }, - // { - // key: '3', - // id: '3', - // referenceNumber: '111029-N111025076', - // arrivalDate: '2023-05-08', - // pax: '3AD', - // status: 'Confirm', - // reservationDate: '2023-01-08 19:31', - // guide: 'Laurie Notaro', - // }, - // ]; - // }); } reservationList = []; diff --git a/src/views/App.jsx b/src/views/App.jsx index fa3e6c4..11d08cc 100644 --- a/src/views/App.jsx +++ b/src/views/App.jsx @@ -1,7 +1,7 @@ import { Outlet, Link, useHref, useLocation } from "react-router-dom"; import { useEffect } from 'react'; import { observer } from "mobx-react"; -import { Layout, Menu, ConfigProvider, theme, Dropdown, Space, Row, Col } from 'antd'; +import { Layout, Menu, ConfigProvider, theme, Dropdown, Space, Row, Col, App as AntApp } from 'antd'; import { DownOutlined } from '@ant-design/icons'; @@ -64,6 +64,7 @@ function App() { algorithm: theme.defaultAlgorithm, }} > + e.preventDefault()}> - {authStore.loginUser} + {authStore.login.username} @@ -108,6 +109,7 @@ function App() { + ); } diff --git a/src/views/reservation/Newest.jsx b/src/views/reservation/Newest.jsx index 0a74b2e..2e8c1ee 100644 --- a/src/views/reservation/Newest.jsx +++ b/src/views/reservation/Newest.jsx @@ -2,7 +2,7 @@ import { NavLink } from "react-router-dom"; import { useEffect, useState } from 'react'; import { observer } from "mobx-react"; import { toJS } from "mobx"; -import { Row, Col, Space, Button, Table, Input, Typography, DatePicker, Radio, Modal } from 'antd'; +import { Row, Col, Space, Button, Table, Input, Typography, DatePicker, Radio, Modal, App } from 'antd'; import { useStore } from '@/stores/StoreContext.js'; const { Title } = Typography; @@ -64,6 +64,8 @@ function Newest() { const [isModalOpen, setIsModalOpen] = useState(false); const [selectedDateRange, onDateRangeChange] = useState([]); const [referenceNo, onNumberChange] = useState(''); + const [tableLoading, setTableLoading] = useState(false); + const { notification } = App.useApp(); const showModal = () => { setIsModalOpen(true); @@ -74,15 +76,25 @@ function Newest() { const handleCancel = () => { setIsModalOpen(false); }; - + useEffect(() => { console.info('Newest.useEffect'); }, []); - const onSearchClick = () => { - console.info(selectedDateRange); - console.info(referenceNo); - reservationStore.fetchReservation(referenceNo, selectedDateRange[0], selectedDateRange[1]); + const onSearchClick = () => { + setTableLoading(true); + reservationStore.fetchReservation(referenceNo, selectedDateRange[0], selectedDateRange[1]) + .catch(ex => { + notification.error({ + message: `Notification`, + description: ex.message, + placement: 'top', + duration: 4, + }); + }) + .finally(() => { + setTableLoading(false); + }); } return ( @@ -196,6 +208,7 @@ function Newest() { 'Reservations without the tour guide information will be highlighted in red if the arrival date is within 3 days.'} bordered + loading={tableLoading} pagination={{ position: ['bottomCenter'], current: 1, From 910ffc3f69d9e60cddbdcc83514de955763bd91f Mon Sep 17 00:00:00 2001 From: Jimmy Liow <18777396951@163.com> Date: Mon, 24 Apr 2023 16:52:51 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E8=AE=A1=E5=88=92=E8=AF=A6=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/stores/Auth.js | 2 +- src/stores/Reservation.js | 32 +++++++++++++++++++++++++++++++- src/views/reservation/Detail.jsx | 14 ++++++++++++-- src/views/reservation/Newest.jsx | 2 +- 4 files changed, 45 insertions(+), 5 deletions(-) diff --git a/src/stores/Auth.js b/src/stores/Auth.js index 3ce7cd4..c547088 100644 --- a/src/stores/Auth.js +++ b/src/stores/Auth.js @@ -9,7 +9,7 @@ class Auth { login = { userId: 1, - username: 'LiaoYijun(IT)', + username: 'Giffigan(Discova)', travelAgencyId: 628 } } diff --git a/src/stores/Reservation.js b/src/stores/Reservation.js index 5b068b0..4fc465d 100644 --- a/src/stores/Reservation.js +++ b/src/stores/Reservation.js @@ -10,7 +10,7 @@ class Reservation { this.root = root; } - fetchReservation(referenceNo, fromDate, thruDate) { + fetchReservationList(referenceNo, fromDate, thruDate) { const fetchUrl = prepareUrl(HT_HOST + '/service-tourdesign/GetPlanSearchList') .append('VEISn', this.root.authStore.login.travelAgencyId) .append('GroupNo', referenceNo) @@ -45,6 +45,36 @@ class Reservation { }); } + fetchReservation(reservationId) { + const fetchUrl = prepareUrl(HT_HOST + '/service-tourdesign/GetPlanInfo') + .append('VEI_SN', this.root.authStore.login.travelAgencyId) + .append('GRI_SN', reservationId) + .build(); + + return fetchJSON(fetchUrl) + .then(json => { + runInAction(() => { + if (json.errcode == 0) { + console.info(json); + // this.reservationList = json.Result.map((data, index) => { + // return { + // key: data.vas_gri_sn, + // id: data.vas_gri_sn, + // referenceNumber: data.GriName, + // arrivalDate: data.GetGDate, + // pax: data.PersonNum, + // status: data.GState, + // reservationDate: data.GetGDate, + // guide: data.Guide, + // } + // }); + } else { + throw new Error(json.errmsg + ': ' + json.errcode); + } + }); + }); + } + reservationList = []; customerList = [ diff --git a/src/views/reservation/Detail.jsx b/src/views/reservation/Detail.jsx index 9dcfe22..b5bed7c 100644 --- a/src/views/reservation/Detail.jsx +++ b/src/views/reservation/Detail.jsx @@ -3,7 +3,7 @@ import { useEffect } from 'react'; import { observer } from "mobx-react"; import { toJS } from "mobx"; import moment from "moment"; -import { Row, Col, Space, Button, Table, Input, Typography, List } from 'antd'; +import { Row, Col, Space, Button, Table, Input, Typography, List, App } from 'antd'; import { useStore } from '../../stores/StoreContext.js'; const { Title } = Typography; @@ -39,12 +39,22 @@ const itineraryListColumns = [ function Detail() { const navigate = useNavigate(); + const { notification } = App.useApp(); const { reservationId } = useParams(); const { reservationStore } = useStore(); const { itineraryList, customerList } = reservationStore; useEffect(() => { - console.info('Detail.useEffect: ' + reservationId); + console.info('Detail.useEffect: ' + reservationId); + reservationStore.fetchReservation(reservationId) + .catch(ex => { + notification.error({ + message: `Notification`, + description: ex.message, + placement: 'top', + duration: 4, + }); + }); }, [reservationId]); return ( diff --git a/src/views/reservation/Newest.jsx b/src/views/reservation/Newest.jsx index 2e8c1ee..a047964 100644 --- a/src/views/reservation/Newest.jsx +++ b/src/views/reservation/Newest.jsx @@ -83,7 +83,7 @@ function Newest() { const onSearchClick = () => { setTableLoading(true); - reservationStore.fetchReservation(referenceNo, selectedDateRange[0], selectedDateRange[1]) + reservationStore.fetchReservationList(referenceNo, selectedDateRange[0], selectedDateRange[1]) .catch(ex => { notification.error({ message: `Notification`,