diff --git a/src/stores/Airticket.js b/src/stores/Airticket.js index d342b83..6a393b9 100644 --- a/src/stores/Airticket.js +++ b/src/stores/Airticket.js @@ -8,6 +8,8 @@ const airTicketStore = create((set, get) => ({ loading: false, setLoading: loading => set({ loading }), setPlanList: planList => set({ planList }), + setPlanDetail: planDetail => set({ planDetail }), + setGuestList: guestList => set({ guestList }), async getPlanList(vei_sn, GRI_Name, TimeStart, TimeEnd) { const { setLoading, setPlanList } = get(); @@ -24,6 +26,27 @@ const airTicketStore = create((set, get) => ({ setPlanList(_result); setLoading(false); }, + + async getPlanDetail(vei_sn, gri_sn) { + const { setPlanDetail } = get(); + const searchParams = { + vei_sn: 6376, //vei_sn, + gri_sn: 369040, //gri_sn + }; + const { errcode, result } = await fetchJSON(`${HT_HOST}/Service_BaseInfoWeb/GetFlightPlanDetail`, searchParams); + const _result = errcode !== 0 ? [] : result; + setPlanDetail(_result); + }, + async getGuestList(coli_sn) { + const { setGuestList } = get(); + const searchParams = { + COLI_SN: 1097829, //coli_sn, + }; + const { errcode, result } = await fetchJSON(`${HT_HOST}/Service_BaseInfoWeb/GetFlightGuestInfo`, searchParams); + const _result = errcode !== 0 ? [] : result; + setGuestList(_result); + }, + })); export default airTicketStore; diff --git a/src/utils/commons.js b/src/utils/commons.js index c5508ca..2e83226 100644 --- a/src/utils/commons.js +++ b/src/utils/commons.js @@ -129,7 +129,7 @@ export function escape2Html(str) { var output = temp.innerText || temp.textContent; temp = null; return output; - } +} export function formatPrice(price) { return Math.ceil(price).toLocaleString(); @@ -139,7 +139,6 @@ export function formatPercent(number) { return Math.round(number * 100) + "%"; } - /** * ! 不支持计算 Set 或 Map * @param {*} val @@ -148,23 +147,23 @@ export function formatPercent(number) { * false if: 'false', 'undefined' */ export function isEmpty(val) { - // return val === undefined || val === null || val === ""; - return [Object, Array].includes((val || {}).constructor) && !Object.entries(val || {}).length; + // return val === undefined || val === null || val === ""; + return [Object, Array].includes((val || {}).constructor) && !Object.entries(val || {}).length; } /** * 数组排序 */ -export const sortBy = (key) => { - return (a, b) => (a[key] > b[key] ? 1 : b[key] > a[key] ? -1 : 0); +export const sortBy = key => { + return (a, b) => (a[key] > b[key] ? 1 : b[key] > a[key] ? -1 : 0); }; /** * Object排序keys */ -export const sortKeys = (obj) => - Object.keys(obj) - .sort() - .reduce((a, k2) => ({ ...a, [k2]: obj[k2] }), {}); +export const sortKeys = obj => + Object.keys(obj) + .sort() + .reduce((a, k2) => ({ ...a, [k2]: obj[k2] }), {}); /** * 数组排序, 给定排序数组 @@ -174,41 +173,41 @@ export const sortKeys = (obj) => * @returns */ export const sortArrayByOrder = (items, keyName, keyOrder) => { - return items.sort((a, b) => { - return keyOrder.indexOf(a[keyName]) - keyOrder.indexOf(b[keyName]); - }); + return items.sort((a, b) => { + return keyOrder.indexOf(a[keyName]) - keyOrder.indexOf(b[keyName]); + }); }; /** * 合并Object, 递归地 */ export function merge(...objects) { - const isDeep = objects.some((obj) => obj !== null && typeof obj === 'object'); + const isDeep = objects.some(obj => obj !== null && typeof obj === "object"); - const result = objects[0] || (isDeep ? {} : objects[0]); + const result = objects[0] || (isDeep ? {} : objects[0]); - for (let i = 1; i < objects.length; i++) { - const obj = objects[i]; + for (let i = 1; i < objects.length; i++) { + const obj = objects[i]; - if (!obj) continue; + if (!obj) continue; - Object.keys(obj).forEach((key) => { - const val = obj[key]; + Object.keys(obj).forEach(key => { + const val = obj[key]; - if (isDeep) { - if (Array.isArray(val)) { - result[key] = [].concat(Array.isArray(result[key]) ? result[key] : [result[key]], val); - } else if (typeof val === 'object') { - result[key] = merge(result[key], val); - } else { - result[key] = val; - } - } else { - result[key] = typeof val === 'boolean' ? val : result[key]; - } - }); - } + if (isDeep) { + if (Array.isArray(val)) { + result[key] = [].concat(Array.isArray(result[key]) ? result[key] : [result[key]], val); + } else if (typeof val === "object") { + result[key] = merge(result[key], val); + } else { + result[key] = val; + } + } else { + result[key] = typeof val === "boolean" ? val : result[key]; + } + }); + } - return result; + return result; } /** @@ -217,16 +216,16 @@ export function merge(...objects) { * @see https://www.lodashjs.com/docs/lodash.groupBy#_groupbycollection-iteratee_identity */ export function groupBy(array = [], callback) { - return array.reduce((groups, item) => { - const key = typeof callback === 'function' ? callback(item) : item[callback]; + return array.reduce((groups, item) => { + const key = typeof callback === "function" ? callback(item) : item[callback]; - if (!groups[key]) { - groups[key] = []; - } + if (!groups[key]) { + groups[key] = []; + } - groups[key].push(item); - return groups; - }, {}); + groups[key].push(item); + return groups; + }, {}); } /** @@ -235,12 +234,12 @@ export function groupBy(array = [], callback) { * @param {array} keys */ export function pick(object, keys) { - return keys.reduce((obj, key) => { - if (object && Object.prototype.hasOwnProperty.call(object, key)) { - obj[key] = object[key]; - } - return obj; - }, {}); + return keys.reduce((obj, key) => { + if (object && Object.prototype.hasOwnProperty.call(object, key)) { + obj[key] = object[key]; + } + return obj; + }, {}); } /** @@ -250,44 +249,44 @@ export function pick(object, keys) { * @returns */ export function omit(object, keysToOmit) { - return Object.fromEntries(Object.entries(object).filter(([key]) => !keysToOmit.includes(key))); + return Object.fromEntries(Object.entries(object).filter(([key]) => !keysToOmit.includes(key))); } /** * 深拷贝 */ export function cloneDeep(value) { - // return structuredClone(value); - if (typeof value !== 'object' || value === null) { - return value; - } + // return structuredClone(value); + if (typeof value !== "object" || value === null) { + return value; + } - const result = Array.isArray(value) ? [] : {}; + const result = Array.isArray(value) ? [] : {}; - for (const key in value) { - if (Object.prototype.hasOwnProperty.call(value, key)) { - result[key] = cloneDeep(value[key]); - } - } + for (const key in value) { + if (Object.prototype.hasOwnProperty.call(value, key)) { + result[key] = cloneDeep(value[key]); + } + } - return result; + return result; } /** * 向零四舍五入, 固定精度设置 */ function curriedFix(precision = 0) { - return function (number) { - // Shift number by precision places - const shift = Math.pow(10, precision); - const shiftedNumber = number * shift; + return function (number) { + // Shift number by precision places + const shift = Math.pow(10, precision); + const shiftedNumber = number * shift; - // Round to nearest integer - const roundedNumber = Math.round(shiftedNumber); + // Round to nearest integer + const roundedNumber = Math.round(shiftedNumber); - // Shift back decimal place - return roundedNumber / shift; - }; + // Shift back decimal place + return roundedNumber / shift; + }; } /** * 向零四舍五入, 保留2位小数 @@ -313,106 +312,106 @@ export const fixToInt = curriedFix(0); * */ export function objectMapper(input, keyMap) { - // Loop through array mapping - if (Array.isArray(input)) { - return input.map((obj) => objectMapper(obj, keyMap)); - } - - if (typeof input === 'object') { - const mappedObj = {}; - - Object.keys(input).forEach((key) => { - // Keep original keys not in keyMap - if (!keyMap[key]) { - mappedObj[key] = input[key]; - } - // Handle array of maps - if (Array.isArray(keyMap[key])) { - keyMap[key].forEach((map) => { - let value = input[key]; - if (map.transform) value = map.transform(value); - mappedObj[map.key] = value; - }); - - // Handle single map - } else { - const map = keyMap[key]; - if (map) { - let value = input[key]; - if (map.transform) value = map.transform(value); - mappedObj[map.key || map] = value; - } - } - }); - - return mappedObj; - } - - return input; + // Loop through array mapping + if (Array.isArray(input)) { + return input.map(obj => objectMapper(obj, keyMap)); + } + + if (typeof input === "object") { + const mappedObj = {}; + + Object.keys(input).forEach(key => { + // Keep original keys not in keyMap + if (!keyMap[key]) { + mappedObj[key] = input[key]; + } + // Handle array of maps + if (Array.isArray(keyMap[key])) { + keyMap[key].forEach(map => { + let value = input[key]; + if (map.transform) value = map.transform(value); + mappedObj[map.key] = value; + }); + + // Handle single map + } else { + const map = keyMap[key]; + if (map) { + let value = input[key]; + if (map.transform) value = map.transform(value); + mappedObj[map.key || map] = value; + } + } + }); + + return mappedObj; + } + + return input; } /** * 创建一个对应于对象路径的值数组 */ export function at(obj, path) { - let result; - if (Array.isArray(obj)) { - // array case - const indexes = path.split('.').map((i) => parseInt(i)); - result = []; - for (let i = 0; i < indexes.length; i++) { - result.push(obj[indexes[i]]); - } - } else { - // object case - const indexes = path.split('.').map((i) => i); - result = [obj]; - for (let i = 0; i < indexes.length; i++) { - result = [result[0][indexes[i]]]; - } - } - return result; + let result; + if (Array.isArray(obj)) { + // array case + const indexes = path.split(".").map(i => parseInt(i)); + result = []; + for (let i = 0; i < indexes.length; i++) { + result.push(obj[indexes[i]]); + } + } else { + // object case + const indexes = path.split(".").map(i => i); + result = [obj]; + for (let i = 0; i < indexes.length; i++) { + result = [result[0][indexes[i]]]; + } + } + return result; } /** * 删除 null/undefined */ export function flush(collection) { - let result, len, i; - if (!collection) { - return undefined; - } - if (Array.isArray(collection)) { - result = []; - len = collection.length; - for (i = 0; i < len; i++) { - const elem = collection[i]; - if (elem != null) { - result.push(elem); - } - } - return result; - } - if (typeof collection === 'object') { - result = {}; - const keys = Object.keys(collection); - len = keys.length; - for (i = 0; i < len; i++) { - const key = keys[i]; - const value = collection[key]; - if (value != null) { - result[key] = value; - } - } - return result; - } - return undefined; + let result, len, i; + if (!collection) { + return undefined; + } + if (Array.isArray(collection)) { + result = []; + len = collection.length; + for (i = 0; i < len; i++) { + const elem = collection[i]; + if (elem != null) { + result.push(elem); + } + } + return result; + } + if (typeof collection === "object") { + result = {}; + const keys = Object.keys(collection); + len = keys.length; + for (i = 0; i < len; i++) { + const key = keys[i]; + const value = collection[key]; + if (value != null) { + result[key] = value; + } + } + return result; + } + return undefined; } /** * 千分位 格式化数字 */ -export const numberFormatter = (number) => { - return new Intl.NumberFormat().format(number); +export const numberFormatter = number => { + return new Intl.NumberFormat().format(number); }; /** @@ -422,193 +421,195 @@ export const numberFormatter = (number) => { * getNestedValue(obj, keyArr); // Returns: 'c' */ export const getNestedValue = (obj, keyArr) => { - return keyArr.reduce((acc, curr) => { - return acc && Object.prototype.hasOwnProperty.call(acc, curr) ? acc[curr] : undefined; - // return acc && acc[curr]; - }, obj); + return keyArr.reduce((acc, curr) => { + return acc && Object.prototype.hasOwnProperty.call(acc, curr) ? acc[curr] : undefined; + // return acc && acc[curr]; + }, obj); }; /** * 计算笛卡尔积 */ -export const cartesianProductArray = (arr, sep = '_', index = 0, prefix = '') => { - let result = []; - if (index === arr.length) { - return [prefix]; - } - arr[index].forEach((item) => { - result = result.concat(cartesianProductArray(arr, sep, index + 1, prefix ? `${prefix}${sep}${item}` : `${item}`)); - }); - return result; +export const cartesianProductArray = (arr, sep = "_", index = 0, prefix = "") => { + let result = []; + if (index === arr.length) { + return [prefix]; + } + arr[index].forEach(item => { + result = result.concat(cartesianProductArray(arr, sep, index + 1, prefix ? `${prefix}${sep}${item}` : `${item}`)); + }); + return result; }; -export const stringToColour = (str) => { - var hash = 0 - for (let i = 0; i < str.length; i++) { - hash = str.charCodeAt(i) + ((hash << 5) - hash) - } - var colour = '#' - for (let i = 0; i < 3; i++) { - var value = (hash >> (i * 8)) & 0xff - value = (value % 150) + 50 - colour += ('00' + value.toString(16)).substr(-2) - } - return colour -} +export const stringToColour = str => { + var hash = 0; + for (let i = 0; i < str.length; i++) { + hash = str.charCodeAt(i) + ((hash << 5) - hash); + } + var colour = "#"; + for (let i = 0; i < 3; i++) { + var value = (hash >> (i * 8)) & 0xff; + value = (value % 150) + 50; + colour += ("00" + value.toString(16)).substr(-2); + } + return colour; +}; export const debounce = (func, wait, immediate) => { - var timeout; - return function () { - var context = this, - args = arguments; - clearTimeout(timeout); - if (immediate && !timeout) func.apply(context, args); - timeout = setTimeout(function () { - timeout = null; - if (!immediate) func.apply(context, args); - }, wait); - }; -} + var timeout; + return function () { + var context = this, + args = arguments; + clearTimeout(timeout); + if (immediate && !timeout) func.apply(context, args); + timeout = setTimeout(function () { + timeout = null; + if (!immediate) func.apply(context, args); + }, wait); + }; +}; -export const removeFormattingChars = (str) => { - const regex = /[\r\n\t\v\f]/g; - str = str.replace(regex, ' '); - // Replace more than four consecutive spaces with a single space - str = str.replace(/\s{4,}/g, ' '); - return str; -} +export const removeFormattingChars = str => { + const regex = /[\r\n\t\v\f]/g; + str = str.replace(regex, " "); + // Replace more than four consecutive spaces with a single space + str = str.replace(/\s{4,}/g, " "); + return str; +}; export const olog = (text, ...args) => { - console.log( - `%c ${text} `, - 'background:#fb923c ; padding: 1px; border-radius: 3px; color: #fff',...args - ); + console.log(`%c ${text} `, "background:#fb923c ; padding: 1px; border-radius: 3px; color: #fff", ...args); }; -export const sanitizeFilename = (str) => { - // Remove whitespace and replace with hyphens - str = str.replace(/\s+/g, '-'); - // Remove invalid characters and replace with hyphens - str = str.replace(/[^a-zA-Z0-9.-]/g, '-'); - // Replace consecutive hyphens with a single hyphen - str = str.replace(/-+/g, '-'); - // Trim leading and trailing hyphens - str = str.replace(/^-+|-+$/g, ''); - return str; -} +export const sanitizeFilename = str => { + // Remove whitespace and replace with hyphens + str = str.replace(/\s+/g, "-"); + // Remove invalid characters and replace with hyphens + str = str.replace(/[^a-zA-Z0-9.-]/g, "-"); + // Replace consecutive hyphens with a single hyphen + str = str.replace(/-+/g, "-"); + // Trim leading and trailing hyphens + str = str.replace(/^-+|-+$/g, ""); + return str; +}; export const formatBytes = (bytes, decimals = 2) => { - if (bytes === 0) return ''; + if (bytes === 0) return ""; - const k = 1024; - const dm = decimals < 0 ? 0 : decimals; - const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; + const k = 1024; + const dm = decimals < 0 ? 0 : decimals; + const sizes = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]; - const i = Math.floor(Math.log(bytes) / Math.log(k)); - return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]; + const i = Math.floor(Math.log(bytes) / Math.log(k)); + return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + " " + sizes[i]; }; export const calcCacheSizes = async () => { - try { - let swCacheSize = 0; - let diskCacheSize = 0; - let indexedDBSize = 0; - - // 1. Get the service worker cache size - if ('caches' in window) { - const cacheNames = await caches.keys(); - for (const name of cacheNames) { - const cache = await caches.open(name); - const requests = await cache.keys(); - for (const request of requests) { - const response = await cache.match(request); - swCacheSize += Number(response.headers.get('Content-Length')) || 0; - } - } - } - - // 2. Get the disk cache size - // const diskCacheName = 'disk-cache'; - // const diskCache = await caches.open(diskCacheName); - // const diskCacheKeys = await diskCache.keys(); - // for (const request of diskCacheKeys) { - // const response = await diskCache.match(request); - // diskCacheSize += Number(response.headers.get('Content-Length')) || 0; - // } - - // 3. Get the IndexedDB cache size - // const indexedDBNames = await window.indexedDB.databases(); - // for (const dbName of indexedDBNames) { - // const db = await window.indexedDB.open(dbName.name); - // const objectStoreNames = db.objectStoreNames; - - // if (objectStoreNames !== undefined) { - // const objectStores = Array.from(objectStoreNames).map((storeName) => db.transaction([storeName], 'readonly').objectStore(storeName)); - - // for (const objectStore of objectStores) { - // const request = objectStore.count(); - // request.onsuccess = () => { - // indexedDBSize += request.result; - // }; - // } - // } - // } - - return { swCacheSize, diskCacheSize, indexedDBSize, totalSize: Number(swCacheSize) + Number(diskCacheSize) + indexedDBSize }; - } catch (error) { - console.error('Error getting cache sizes:', error); - } + try { + let swCacheSize = 0; + let diskCacheSize = 0; + let indexedDBSize = 0; + + // 1. Get the service worker cache size + if ("caches" in window) { + const cacheNames = await caches.keys(); + for (const name of cacheNames) { + const cache = await caches.open(name); + const requests = await cache.keys(); + for (const request of requests) { + const response = await cache.match(request); + swCacheSize += Number(response.headers.get("Content-Length")) || 0; + } + } + } + + // 2. Get the disk cache size + // const diskCacheName = 'disk-cache'; + // const diskCache = await caches.open(diskCacheName); + // const diskCacheKeys = await diskCache.keys(); + // for (const request of diskCacheKeys) { + // const response = await diskCache.match(request); + // diskCacheSize += Number(response.headers.get('Content-Length')) || 0; + // } + + // 3. Get the IndexedDB cache size + // const indexedDBNames = await window.indexedDB.databases(); + // for (const dbName of indexedDBNames) { + // const db = await window.indexedDB.open(dbName.name); + // const objectStoreNames = db.objectStoreNames; + + // if (objectStoreNames !== undefined) { + // const objectStores = Array.from(objectStoreNames).map((storeName) => db.transaction([storeName], 'readonly').objectStore(storeName)); + + // for (const objectStore of objectStores) { + // const request = objectStore.count(); + // request.onsuccess = () => { + // indexedDBSize += request.result; + // }; + // } + // } + // } + + return { swCacheSize, diskCacheSize, indexedDBSize, totalSize: Number(swCacheSize) + Number(diskCacheSize) + indexedDBSize }; + } catch (error) { + console.error("Error getting cache sizes:", error); + } }; -export const clearAllCaches = async (cb) => { - try { - // 1. Clear the service worker cache - if ('caches' in window) { - // if (navigator.serviceWorker) { - const cacheNames = await caches.keys(); - await Promise.all(cacheNames.map((name) => caches.delete(name))); - } - - // 2. Clear the disk cache (HTTP cache) - // const diskCacheName = 'disk-cache'; - // await window.caches.delete(diskCacheName); - // const diskCache = await window.caches.open(diskCacheName); - // const diskCacheKeys = await diskCache.keys(); - // await Promise.all(diskCacheKeys.map((request) => diskCache.delete(request))); - - // 3. Clear the IndexedDB cache - const indexedDBNames = await window.indexedDB.databases(); - await Promise.all(indexedDBNames.map((dbName) => window.indexedDB.deleteDatabase(dbName.name))); - - // Unregister the service worker - const registration = await navigator.serviceWorker.getRegistration(); - if (registration) { - await registration.unregister(); - console.log('Service worker unregistered'); - } else { - console.log('No service worker registered'); - } - if (typeof cb === 'function' ) { - cb(); - } - - } catch (error) { - console.error('Error clearing caches or unregistering service worker:', error); - } +export const clearAllCaches = async cb => { + try { + // 1. Clear the service worker cache + if ("caches" in window) { + // if (navigator.serviceWorker) { + const cacheNames = await caches.keys(); + await Promise.all(cacheNames.map(name => caches.delete(name))); + } + + // 2. Clear the disk cache (HTTP cache) + // const diskCacheName = 'disk-cache'; + // await window.caches.delete(diskCacheName); + // const diskCache = await window.caches.open(diskCacheName); + // const diskCacheKeys = await diskCache.keys(); + // await Promise.all(diskCacheKeys.map((request) => diskCache.delete(request))); + + // 3. Clear the IndexedDB cache + const indexedDBNames = await window.indexedDB.databases(); + await Promise.all(indexedDBNames.map(dbName => window.indexedDB.deleteDatabase(dbName.name))); + + // Unregister the service worker + const registration = await navigator.serviceWorker.getRegistration(); + if (registration) { + await registration.unregister(); + console.log("Service worker unregistered"); + } else { + console.log("No service worker registered"); + } + if (typeof cb === "function") { + cb(); + } + } catch (error) { + console.error("Error clearing caches or unregistering service worker:", error); + } }; -export const loadScript = (src) => { - return new Promise((resolve, reject) => { - const script = document.createElement('script'); - script.type = 'text/javascript'; - script.onload = resolve; - script.onerror = reject; - script.crossOrigin = 'anonymous'; - script.src = src; - if (document.head.append) { - document.head.append(script); - } else { - document.getElementsByTagName('head')[0].appendChild(script); - } - }); +export const loadScript = src => { + return new Promise((resolve, reject) => { + const script = document.createElement("script"); + script.type = "text/javascript"; + script.onload = resolve; + script.onerror = reject; + script.crossOrigin = "anonymous"; + script.src = src; + if (document.head.append) { + document.head.append(script); + } else { + document.getElementsByTagName("head")[0].appendChild(script); + } + }); }; +//格式化为冒号时间,2010转为20:10 +export const formatColonTime = text => { + const hours = text.substring(0, 2); + const minutes = text.substring(2); + return `${hours}:${minutes}`; +}; diff --git a/src/views/airticket/Index.jsx b/src/views/airticket/Index.jsx index 2f5ccf9..32a84a5 100644 --- a/src/views/airticket/Index.jsx +++ b/src/views/airticket/Index.jsx @@ -2,7 +2,7 @@ import { useState, useEffect } from "react"; import { Grid, Divider, Layout, Spin, Input, Col, Row, Space, List, Table } 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 { isEmpty, formatColonTime } from "@/utils/commons"; import dayjs from "dayjs"; import SearchForm from "@/components/SearchForm"; @@ -54,21 +54,19 @@ const planListColumns = [ title: "起飞时间", key: "FlightTimeStart", dataIndex: "FlightTimeStart", - render: text => { - const hours = text.substring(0, 2); - const minutes = text.substring(2); - return `${hours}:${minutes}`; - }, + render: text => formatColonTime(text), }, { title: "落地时间", key: "FlightTimeEnd", dataIndex: "FlightTimeEnd", - render: text => { - const hours = text.substring(0, 2); - const minutes = text.substring(2); - return `${hours}:${minutes}`; - }, + render: text => formatColonTime(text), + }, + { + title: "是否出票", + key: "COLD_PlanVEI_SN", + dataIndex: "COLD_PlanVEI_SN", + render: (text, record) => "否", }, { title: "操作", @@ -82,7 +80,7 @@ const Airticket = props => { const href = useHref(); const navigate = useNavigate(); const { phonenumber } = useParams(); - const {travelAgencyId, } = usingStorage(); + const { travelAgencyId } = usingStorage(); const [getPlanList, planList, loading] = airTicketStore(state => [state.getPlanList, state.planList, state.loading]); const [phone_number, setPhone_number] = useState(phonenumber); const showTotal = total => `合计 ${total} `; diff --git a/src/views/airticket/Plan.jsx b/src/views/airticket/Plan.jsx index 4cd4bf0..29ba956 100644 --- a/src/views/airticket/Plan.jsx +++ b/src/views/airticket/Plan.jsx @@ -1,40 +1,194 @@ 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 { Grid, Divider, Layout, Form, Input, Col, Row, Space, Collapse, Table, Button } from "antd"; +import { PhoneOutlined, CustomerServiceOutlined, AudioOutlined, ArrowUpOutlined, ArrowDownOutlined } 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 { isEmpty, formatColonTime } from "@/utils/commons"; +import { OFFICEWEBVIEWERURL } from "@/config"; import airTicketStore from "@/stores/Airticket"; -import useAuthStore from "@/stores/Auth"; +import { usingStorage } from "@/hooks/usingStorage"; 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 { travelAgencyId, loginToken } = usingStorage(); + const [getPlanDetail, planDetail, getGuestList, guestList, loading] = airTicketStore(state => [state.getPlanDetail, state.planDetail, state.getGuestList, state.guestList, state.loading]); + const reservationUrl = `https://p9axztuwd7x8a7.mycht.cn/Service_BaseInfoWeb/FlightPlanDocx?GRI_SN=${coli_sn}&VEI_SN=${travelAgencyId}`; + const reservationPreviewUrl = OFFICEWEBVIEWERURL + encodeURIComponent(reservationUrl); - const reservationUrl = `https://p9axztuwd7x8a7.mycht.cn/service-fileServer/DownloadPlanDoc?GRI_SN=${coli_sn}&VEI_SN=${travelAgencyId}&token=${loginToken}&FileType=1`; + console.log(reservationPreviewUrl); - const reservationPreviewUrl = OFFICEWEBVIEWERURL + encodeURIComponent(reservationUrl); + const Airticket_form = props => { + const aitInfo = props.airInfo; + return ( + <> +
+ + + + + + + } value={aitInfo.FromCity} /> + } value={aitInfo.ToCity} /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {/* + + */} +
+ + + + ); + }; - useEffect(() => {}, []); + const detail_items = () => { + return planDetail + ? planDetail.map(item => { + return { + key: item.id, + label: `${item.StartDate} 计划: ${item.FlightInfo}`, + children: , + }; + }) + : []; + }; + + const guestListColumns = [ + { + title: "姓名", + key: "MEI_Name", + dataIndex: "MEI_Name", + }, + { + title: "证件类型", + key: "MEI_PassportType", + dataIndex: "MEI_PassportType", + }, + { + title: "证件号", + key: "MEI_PassportNo", + dataIndex: "MEI_PassportNo", + }, + { + title: "证件有效期", + key: "MEI_PassportValidDate", + dataIndex: "MEI_PassportValidDate", + }, + { + title: "性别", + key: "MEI_Gender", + dataIndex: "MEI_Gender", + }, + { + title: "年龄", + key: "MEI_age", + dataIndex: "MEI_age", + }, + { + title: "国籍", + key: "MEI_Country", + dataIndex: "MEI_Country", + }, + { + title: "票号", + key: "MEI_SN", + dataIndex: "MEI_SN", + }, + { + title: "PNR", + key: "MEI_SN", + dataIndex: "MEI_SN", + }, + { + title: "机票费用(RMB)含基建和税", + key: "MEI_SN", + dataIndex: "MEI_SN", + }, + { + title: "折扣", + key: "MEI_SN", + dataIndex: "MEI_SN", + }, + { + title: "手续费", + key: "MEI_SN", + dataIndex: "MEI_SN", + }, + { + title: "机票类型(成人/儿童/婴儿)", + key: "MEI_SN", + dataIndex: "MEI_SN", + }, + ]; + + useEffect(() => { + getPlanDetail(travelAgencyId, coli_sn); + getGuestList(travelAgencyId, coli_sn); + console.log(detail_items()); + }, []); return ( - + {/* */} + 出票信息 + + + );