Merge branch 'main' of github.com:hainatravel/GHHub

# Conflicts:
#	src/main.jsx
perf/export-docx
Jimmy Liow 1 year ago
commit 5d4b5cc8f1

@ -6,6 +6,7 @@ export const HT_HOST = import.meta.env.PROD ? "https://p9axztuwd7x8a7.mycht.cn"
export const DATE_FORMAT = "YYYY-MM-DD"; export const DATE_FORMAT = "YYYY-MM-DD";
export const DATE_FORMAT_MONTH = "YYYY-MM"; export const DATE_FORMAT_MONTH = "YYYY-MM";
export const SMALL_DATETIME_FORMAT = "YYYY-MM-DD 23:59"; export const SMALL_DATETIME_FORMAT = "YYYY-MM-DD 23:59";
export const OFFICEWEBVIEWERURL = "https://view.officeapps.live.com/op/embed.aspx?wdPrint=1&wdHideGridlines=0&wdHideComments=1&wdEmbedCode=0&src=";
const __BUILD_VERSION__ = `__BUILD_VERSION__`.replace(/"/g, '') const __BUILD_VERSION__ = `__BUILD_VERSION__`.replace(/"/g, '')
export const BUILD_VERSION = import.meta.env.PROD ? __BUILD_VERSION__ : import.meta.env.MODE; export const BUILD_VERSION = import.meta.env.PROD ? __BUILD_VERSION__ : import.meta.env.MODE;

@ -31,6 +31,7 @@ import InvoiceDetail from "@/views/invoice/Detail";
import InvoicePaid from "@/views/invoice/Paid"; import InvoicePaid from "@/views/invoice/Paid";
import InvoicePaidDetail from "@/views/invoice/PaidDetail"; import InvoicePaidDetail from "@/views/invoice/PaidDetail";
import Airticket from "@/views/airticket/Index"; import Airticket from "@/views/airticket/Index";
import AirticketPlan from "@/views/airticket/Plan";
import { PERM_ACCOUNT_MANAGEMENT, PERM_OVERSEA, PERM_AIR_TICKET } from '@/config' import { PERM_ACCOUNT_MANAGEMENT, PERM_OVERSEA, PERM_AIR_TICKET } from '@/config'
@ -68,6 +69,7 @@ const router = createBrowserRouter([
{ path: "invoice/paid",element:<RequireAuth subject={PERM_OVERSEA} result={true}><InvoicePaid /></RequireAuth>}, { path: "invoice/paid",element:<RequireAuth subject={PERM_OVERSEA} result={true}><InvoicePaid /></RequireAuth>},
{ path: "invoice/paid/detail/:flid", element: <RequireAuth subject={PERM_OVERSEA} result={true}><InvoicePaidDetail /></RequireAuth>}, { path: "invoice/paid/detail/:flid", element: <RequireAuth subject={PERM_OVERSEA} result={true}><InvoicePaidDetail /></RequireAuth>},
{ path: "airticket",element: <RequireAuth subject={PERM_AIR_TICKET} result={true}><Airticket /></RequireAuth>}, { path: "airticket",element: <RequireAuth subject={PERM_AIR_TICKET} result={true}><Airticket /></RequireAuth>},
{ path: "airticket/plan/:coli_sn",element:<AirticketPlan />},
] ]
}, },
{ {

@ -9,7 +9,7 @@ const airTicketStore = create((set, get) => ({
setLoading: loading => set({ loading }), setLoading: loading => set({ loading }),
setPlanList: planList => set({ planList }), setPlanList: planList => set({ planList }),
async getPlanList(vei_sn, GRI_Name, PNR, TimeStart, TimeEnd) { async getPlanList(vei_sn, GRI_Name, TimeStart, TimeEnd) {
const { setLoading, setPlanList } = get(); const { setLoading, setPlanList } = get();
setLoading(true); setLoading(true);
const searchParams = { const searchParams = {
@ -17,7 +17,6 @@ const airTicketStore = create((set, get) => ({
FlightDate1: TimeStart, FlightDate1: TimeStart,
FlightDate2: TimeEnd, FlightDate2: TimeEnd,
GRI_Name: GRI_Name, GRI_Name: GRI_Name,
PNR: PNR,
}; };
const { errcode, result } = await fetchJSON(`${HT_HOST}/Service_BaseInfoWeb/GetFlightPlan`, searchParams); const { errcode, result } = await fetchJSON(`${HT_HOST}/Service_BaseInfoWeb/GetFlightPlan`, searchParams);

@ -1,7 +1,7 @@
import { useState, useEffect } from "react"; import { useState, useEffect } from "react";
import { Grid, Divider, Layout, Spin, Input, Col, Row, Space, List, Table } from "antd"; import { Grid, Divider, Layout, Spin, Input, Col, Row, Space, List, Table } from "antd";
import { PhoneOutlined, CustomerServiceOutlined, AudioOutlined } from "@ant-design/icons"; import { PhoneOutlined, CustomerServiceOutlined, AudioOutlined } from "@ant-design/icons";
import { useParams, useHref, useNavigate } from "react-router-dom"; import { useParams, useHref, useNavigate, NavLink } from "react-router-dom";
import { isEmpty } from "@/utils/commons"; import { isEmpty } from "@/utils/commons";
import dayjs from "dayjs"; import dayjs from "dayjs";
import SearchForm from "@/components/SearchForm"; import SearchForm from "@/components/SearchForm";
@ -29,6 +29,11 @@ const planListColumns = [
title: "出发日期", title: "出发日期",
key: "StartDate", key: "StartDate",
dataIndex: "StartDate", dataIndex: "StartDate",
sorter: (a, b) => {
const dateA = new Date(a.StartDate);
const dateB = new Date(b.StartDate);
return dateB.getTime() - dateA.getTime();
},
}, },
{ {
title: "出发城市", title: "出发城市",
@ -49,16 +54,27 @@ const planListColumns = [
title: "起飞时间", title: "起飞时间",
key: "FlightTimeStart", key: "FlightTimeStart",
dataIndex: "FlightTimeStart", dataIndex: "FlightTimeStart",
render: text => {
const hours = text.substring(0, 2);
const minutes = text.substring(2);
return `${hours}:${minutes}`;
},
}, },
{ {
title: "落地时间", title: "落地时间",
key: "FlightTimeEnd", key: "FlightTimeEnd",
dataIndex: "FlightTimeEnd", dataIndex: "FlightTimeEnd",
render: text => {
const hours = text.substring(0, 2);
const minutes = text.substring(2);
return `${hours}:${minutes}`;
},
}, },
{ {
title: "PNR 暂时用FlightInfo", title: "操作",
key: "FlightInfo", key: "FlightInfo",
dataIndex: "FlightInfo", dataIndex: "FlightInfo",
render: (text, record) => <NavLink to={`/airticket/plan/${record.COLI_SN}`}>{"编辑"}</NavLink>,
}, },
]; ];
@ -82,14 +98,14 @@ const Airticket = props => {
dates: [dayjs().startOf("M"), dayjs().endOf("M")], dates: [dayjs().startOf("M"), dayjs().endOf("M")],
}} }}
fieldsConfig={{ fieldsConfig={{
shows: ["referenceNo", "PNR", "dates"], shows: ["referenceNo", "dates"],
fieldProps: { fieldProps: {
referenceNo: { label: "搜索计划" }, referenceNo: { label: "搜索计划" },
dates: { label: "出发日期" }, dates: { label: "出发日期" },
}, },
}} }}
onSubmit={(err, formVal, filedsVal) => { onSubmit={(err, formVal, filedsVal) => {
getPlanList(travelAgencyId, formVal.referenceNo, formVal.PNR, formVal.startdate, formVal.endtime); getPlanList(travelAgencyId, formVal.referenceNo, formVal.startdate, formVal.endtime);
}} }}
/> />
<Row> <Row>

@ -0,0 +1,42 @@
import { useState, useEffect } from "react";
import { Grid, Divider, Layout, Spin, Input, Col, Row, Space, List, Table, Button } from "antd";
import { PhoneOutlined, CustomerServiceOutlined, AudioOutlined } from "@ant-design/icons";
import { useParams, useHref, useNavigate, NavLink } from "react-router-dom";
import { isEmpty } from "@/utils/commons";
import dayjs from "dayjs";
import { HT_HOST, OFFICEWEBVIEWERURL } from "@/config";
import airTicketStore from "@/stores/Airticket";
import useAuthStore from "@/stores/Auth";
const AirticketPlan = props => {
const href = useHref();
const navigate = useNavigate();
const { coli_sn } = useParams();
const [travelAgencyId, loginToken] = useAuthStore(
state => state.loginUser.travelAgencyId,
state => state.loginUser.loginToken
);
const [getPlanList, planList, loading] = airTicketStore(state => [state.getPlanList, state.planList, state.loading]);
const [loginUser] = useAuthStore(state => [state.loginUser]);
const reservationUrl = `https://p9axztuwd7x8a7.mycht.cn/service-fileServer/DownloadPlanDoc?GRI_SN=${coli_sn}&VEI_SN=${travelAgencyId}&token=${loginToken}&FileType=1`;
const reservationPreviewUrl = OFFICEWEBVIEWERURL + encodeURIComponent(reservationUrl);
useEffect(() => {}, []);
return (
<Space direction="vertical" style={{ width: "100%" }}>
<Row>
<Col md={24} lg={24} xxl={24} style={{ height: "100%" }}>
<iframe id="msdoc-iframe-reservation" title="msdoc-iframe-reservation" src={reservationPreviewUrl} frameBorder="0" style={{ width: "100%", height: "600px" }}></iframe>
<Button type="link" target="_blank" href={reservationUrl}>
下载
</Button>
</Col>
</Row>
</Space>
);
};
export default AirticketPlan;
Loading…
Cancel
Save