import React, { useEffect, useState } from 'react'; import { Button, DatePicker, DatePickerProps, Form, Input, message, Modal, Select, Skeleton, Spin } from 'antd'; import moment from 'moment' import { cancelMeeting, getMeetingData, saveAppointmentEdit, saveMeeting } from './service'; import { isNotEmpty } from '@/utils/CommonUtils'; import { ExclamationCircleOutlined } from '@ant-design/icons'; import { dateTimeFormatter, echoDateTimeFormatter } from '@/utils/DateUtils'; interface MeetingReservationProps { modalVisible: boolean; onCancel: () => void; onSubmit?: () => void; roomList?: any[];//评标室列表 带问号的参数可不传 status: string;//状态 0-新建 1-编辑 2-查看 meetId?: string;//预约id } const layout = { labelCol: { span: 7 }, wrapperCol: { span: 14 }, }; export const validateMessages = { required: '请填写此项', }; export const range = (start: number, end: number) => { const result = []; for (let i = start; i < end; i++) { result.push(i); } return result; }; //不可选天 export function disabledDate(current: any) { return current && current < moment().startOf('day'); } //不可选小时 export const disabledDateTime = () => ({ disabledHours: () => [...range(0, 7), ...range(19, 24)], }); //不可选小时(额外不可选) export const otherDisabledDateTime = (current: any, disabledMap: any, type: string) => { let otherHour: any[] = range(0, 24); if (current) { otherHour = []; if (Object.keys(disabledMap).length != 0) { const time = moment(current).format("yyyy-MM-DD"); disabledMap[time] && (otherHour = [...disabledMap[time][type]]); } } return ({ disabledHours: () => [...range(0, 7), ...range(19, 24), ...otherHour], }) }; //时间选择框日期格式化 export const dateFormat: DatePickerProps['format'] = value => value?.startOf('hour').format('YYYY-MM-DD HH:mm:ss'); /** * 评标室预约管理-会议室预约弹窗 * @param props * @returns */ const MeetingReservation: React.FC = (props) => { const { modalVisible, onCancel, onSubmit, roomList, status, meetId } = props; const [form] = Form.useForm(); const { Option } = Select; const { confirm } = Modal; const { TextArea } = Input; //loading const [loading, setLoading] = useState(false); //初始化 const [skeleing, setSkeleing] = useState(false); //窗口状态 0-新建 1-编辑 2-查看 const [modalStatus, setModalStatus] = useState(status); //评标室类型 meeting-会议室 eval-评标室 const [meetType, setMeetType] = useState("meeting"); //会议室预约是否可修改 true-不可修改 false-可修改 const [isEditMeet, setIsEditMeet] = useState(false); //存一份预约数据 const [meetingData, setMeetingData] = useState(); const onFinish = (values: any) => { if (values.reserveStartDate < moment().format(dateTimeFormatter)) { message.info("开始时间不可早于当前时间"); return; } const params = JSON.parse(JSON.stringify(values));//深拷贝 params.reserveStartDate = moment(params.reserveStartDate).format(dateTimeFormatter); params.reserveEndDate = moment(params.reserveEndDate).format(dateTimeFormatter); setLoading(true); if (meetType == "meeting") {//会议室保存 saveMeeting(params).then(res => { if (res?.code == 200) { message.success("保存成功"); onSubmit && onSubmit(); } }).finally(() => { setLoading(false); }) } else { saveAppointmentEdit({ ...meetingData, ...params }).then(res => {//评标室保存 if (res?.code == 200) { message.success("保存成功"); onSubmit && onSubmit(); } }).finally(() => { setLoading(false); }) } }; //获取预约信息 const getMeetData = () => { setSkeleing(true); getMeetingData(meetId).then(res => { if (res?.code == 200) { setSkeleing(false); const data = res?.data; const isEdit: boolean = data.reserveType == "meeting" ? data.reserveStartDate <= moment().format(dateTimeFormatter) : data.status != 0; setIsEditMeet(isEdit); setMeetingData(data); setMeetType(data.reserveType);//变更窗口类型 if (data.reserveType == "meeting") { data.reserveStartDate = echoDateTimeFormatter(data.reserveStartDate); data.reserveEndDate = echoDateTimeFormatter(data.reserveEndDate); } form.setFieldsValue(data); } }) } //取消预约 const cancelMeet = () => { confirm({ title: "请与评标场所使用人员确认后再进行取消,以免影响评标/会议的正常开展!", icon: , centered: true, okText: '确认', content: '', async onOk() { await cancelMeeting(meetId).then(res => { if (res?.code == 200) { message.success("取消预约成功"); onSubmit && onSubmit(); } }) }, onCancel() { }, }); } const editMeeting = () => { if (meetType == "eval") {//评标室预约修改 const data = JSON.parse(JSON.stringify(meetingData));//深拷贝 data.reserveStartDate = echoDateTimeFormatter(data.reserveStartDate); data.reserveEndDate = echoDateTimeFormatter(data.reserveEndDate); form.setFieldsValue(data); } setModalStatus("1"); } useEffect(() => { if (isNotEmpty(meetId)) { getMeetData(); } }, [meetId]) return ( onCancel()} centered width={600} footer={skeleing ? [] : [ , , , , ]} >
{meetType == "meeting" ? ( <>