import { useState, useEffect } from "react"; import { Checkbox, Divider, DatePicker, Modal, Form, Input, Col, Row, Space, Collapse, Table, Button, Select, App, Popconfirm, Switch, Radio, List } from "antd"; import { PhoneOutlined, FrownTwoTone, LikeTwoTone, ArrowUpOutlined, ArrowDownOutlined, PlusOutlined } from "@ant-design/icons"; import { useParams, useHref, useNavigate, NavLink } from "react-router-dom"; import { isEmpty, formatColonTime } from "@/utils/commons"; import { OFFICEWEBVIEWERURL } from "@/config"; import dayjs from "dayjs"; import airTicketStore from "@/stores/Airticket"; import { usingStorage } from "@/hooks/usingStorage"; import BackBtn from "@/components/BackBtn"; const AirticketPlan = props => { const { coli_sn, gri_sn } = useParams(); const { travelAgencyId, loginToken, userId } = usingStorage(); const [ getPlanDetail, planDetail, getGuestList, guestList, loading, postFlightDetail, postFlightCost, deleteFlightCost, getVeiPlanChange, veiPlanChangeTxt, postVeiFlightPlanConfirm, ticketIssuedNotifications, delete_flight_info, getAirPortList, airPortList, airLineList, ] = airTicketStore(state => [ state.getPlanDetail, state.planDetail, state.getGuestList, state.guestList, state.loading, state.postFlightDetail, state.postFlightCost, state.deleteFlightCost, state.getVeiPlanChange, state.veiPlanChangeTxt, state.postVeiFlightPlanConfirm, state.ticketIssuedNotifications, state.delete_flight_info, state.getAirPortList, state.airPortList, state.airLineList, ]); const reservationUrl = `https://p9axztuwd7x8a7.mycht.cn/Service_BaseInfoWeb/FlightPlanDocx?GRI_SN=${gri_sn}&VEI_SN=${travelAgencyId}&token=${loginToken}`; const reservationPreviewUrl = OFFICEWEBVIEWERURL + encodeURIComponent(reservationUrl); const [form] = Form.useForm(); const { notification } = App.useApp(); //console.log(reservationPreviewUrl); //乘客下拉列表 const guestList_select = () => { return ( guestList && guestList.map(item => { return { label: `${item.MEI_Name} , ${item.MEI_PassportNo}`, value: `${item.MEI_Name} , ${item.MEI_PassportNo} , ${item.MEI_Country} , ${item.MEI_Gender} , ${item.MEI_age} , ${item.MEI_Birthday}` }; }) ); }; const guestList_OnChange = e => { ticket_form.setFieldsValue({ Memo: `${e.target.value}` }); }; //机场下拉列表 const airPortList_select = () => { return ( airPortList && airPortList.map(item => { return { label: `${item.AirPort_Code} - ${item.AirPort_Name}`, value: item.AirPort_Name }; }) ); }; //费用列表 const costListColumns = [ { title: "客人信息/备注", key: "Memo", dataIndex: "Memo", }, { title: "状态", key: "CostType", dataIndex: "CostType", }, { title: "票号", key: "TicketNo", dataIndex: "TicketNo", render: (text, record) => (record.CostType == "出票" ? text : "-"), }, { title: "PNR", key: "PNR", dataIndex: "PNR", render: (text, record) => (record.CostType == "出票" ? text : "-"), }, { title: "机票类型", key: "FlightType", dataIndex: "FlightType", render: (text, record) => (record.CostType == "出票" ? text : "-"), }, { title: "机票价格", key: "Cost", dataIndex: "Cost", render: (text, record) => (record.CostType == "出票" ? text : "-"), }, { title: "服务费", key: "ServiceFee", dataIndex: "ServiceFee", }, { title: "折扣", key: "Discount", dataIndex: "Discount", render: (text, record) => (record.CostType == "出票" ? text : "-"), }, { title: "编辑", key: "CLC_SN", dataIndex: "CLC_SN", render: (text, record) => record.CheckStatus <= 2 ? ( showModal(record)}>编辑 handleDelete(record.CLC_SN)} okText="是" cancelText="否"> ) : ( record.CheckStatusName ), }, ]; const Airticket_form = props => { const airInfo = props.airInfo; const [airinfo_form] = Form.useForm(); return ( <>
{ postFlightDetail(airInfo.CLF_SN, airInfo.GRI_SN, airInfo.VEI_SN, airInfo, values) .then(() => { notification.success({ message: `成功`, description: "机票信息保存成功!", placement: "top", duration: 4, icon: , }); }) .catch(() => { notification.error({ message: `错误`, description: "保存失败", placement: "top", duration: 4, icon: , }); }); }} autoComplete="off"> 航班信息 - - 出票信息 ); }; const detail_items = () => { return planDetail ? planDetail.map(item => { return { key: item.id, label: `${item.StartDate} ${item.FlightNo}(${item.FromAirport}${item.FlightStart}-${item.ToAirport}${item.FlightEnd})(${item.FlightCabin})`, extra: ( { delete_flight_info(item.CLF_SN); //删除记录 getPlanDetail(travelAgencyId, gri_sn); //更新页面计划详情,含费用列表 }} okText="是" cancelText="否"> ), children: , }; }) : []; }; // 机票信息编辑表单 begin const [isModalOpen, setIsModalOpen] = useState(false); const [isModalOpen_confirmInfo, setisModalOpen_confirmInfo] = useState(false); const [isTicketType, setisTicketType] = useState(true); const [isAddNew, setisAddNew] = useState(true); //是否是在新增费用信息 const [ticket_form] = Form.useForm(); const [confirmInfo_form] = Form.useForm(); const showModal = ticket => { setIsModalOpen(true); ticket_form.resetFields(); if (isEmpty(ticket.CostType)) ticket.CostType = "出票"; ticket.CostType == "出票" ? setisTicketType(true) : setisTicketType(false); //如果是出票类型,显示票号、折扣等选项 isEmpty(ticket.CLC_SN) ? setisAddNew(true) : setisAddNew(false); //如果是新增窗口 ticket_form.setFieldsValue(ticket); if (isEmpty(ticket.Memo)) ticket_form.setFieldsValue({ Memo: "" }); }; const handleOk = (close_modal = true) => { ticket_form .validateFields() .then(values => { // 在这里处理表单提交逻辑,例如发送数据到服务器 console.log("Received values of form: ", values); postFlightCost(values) .then(() => { notification.success({ message: `成功`, description: "保存成功!", placement: "top", duration: 4, icon: , }); getPlanDetail(travelAgencyId, gri_sn); }) .catch(() => { notification.error({ message: `错误`, description: "保存失败", placement: "top", duration: 4, icon: , }); }); if (close_modal) setIsModalOpen(false); }) .catch(info => { console.log("Validate Failed:", info); }); }; const handleCancel = () => { ticket_form.resetFields(); setIsModalOpen(false); }; const handleDelete = CLC_SN => { deleteFlightCost(CLC_SN) .then(() => { notification.success({ message: `成功`, description: "删除成功!", placement: "top", duration: 4, icon: , }); getPlanDetail(travelAgencyId, gri_sn); }) .catch(() => { notification.error({ message: `错误`, description: "删除失败", placement: "top", duration: 4, icon: , }); }); }; const onChangeType = value => { if (value == "出票") { setisTicketType(true); } else { setisTicketType(false); } }; //变更确认表单 const showModal_confirmInfo = ConfirmInfo => { setisModalOpen_confirmInfo(true); confirmInfo_form.setFieldsValue({ ConfirmInfo: ConfirmInfo }); }; const handleCancel_confirmInfo = () => { setisModalOpen_confirmInfo(false); confirmInfo_form.resetFields(); }; const handleOk_confirmInfo = () => { confirmInfo_form .validateFields() .then(values => { console.log("Received values of form: ", values.ConfirmInfo); postVeiFlightPlanConfirm(travelAgencyId, gri_sn, userId, values.ConfirmInfo) .then(() => { notification.success({ message: `成功`, description: "保存成功!", placement: "top", duration: 4, icon: , }); getVeiPlanChange(travelAgencyId, gri_sn); }) .catch(() => { notification.error({ message: `错误`, description: "保存失败", placement: "top", duration: 4, icon: , }); }); confirmInfo_form.resetFields(); setisModalOpen_confirmInfo(false); }) .catch(info => { console.log("Validate Failed:", info); }); }; // 机票信息编辑表单 end useEffect(() => { getPlanDetail(travelAgencyId, gri_sn); //计划详情,含费用列表 getGuestList(coli_sn); //客人列表 getVeiPlanChange(travelAgencyId, gri_sn); //计划变更信息 getAirPortList(); //获取机场信息 }, []); return ( {planDetail ? `${planDetail[0].GRI_No} - ${planDetail[0].WL}` : ""}

{ postFlightDetail("", gri_sn, travelAgencyId, { FlightNo: "新的记录", FlightStatus: 1 }, []); //新增加一条记录 getPlanDetail(travelAgencyId, gri_sn); //计划详情,含费用列表 }} okText="是" cancelText="否">

计划变更
( <> {isAddNew ? ( <> {" "} ) : ( )} )}>
)} {isTicketType && ( <> guestList_OnChange(e)} style={{ minWidth: 320, }}> ( {item.label} )}> {/*
); }; export default AirticketPlan;