diff --git a/config/router.config.ts b/config/router.config.ts index 46b1726..1e2c3eb 100644 --- a/config/router.config.ts +++ b/config/router.config.ts @@ -111,6 +111,10 @@ export default [ }, ...home,//各角色主页 ...menuaZhaoBiao,//项目菜单所有路由 + { + path: '/AppointmentManage', + component: './AppointmentManage', + }, {//问卷调查 name: 'Questionnaire', icon: 'UnorderedListOutlined', diff --git a/src/components/ElecBidEvaluation/MeetingReservation.tsx b/src/components/ElecBidEvaluation/MeetingReservation.tsx new file mode 100644 index 0000000..a4f6e8b --- /dev/null +++ b/src/components/ElecBidEvaluation/MeetingReservation.tsx @@ -0,0 +1,211 @@ +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, 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 }, +}; +const validateMessages = { + required: '请填写此项', +}; +const range = (start: number, end: number) => { + const result = []; + for (let i = start; i < end; i++) { + result.push(i); + } + return result; +}; +/** + * 评标室预约管理-会议室预约弹窗 + * @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"); + + const onFinish = (values: any) => { + console.log(values); + 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); + saveMeeting(params).then(res => { + if (res?.code == 200) { + message.success("保存成功"); + onSubmit && onSubmit(); + } + }).finally(() => { + setLoading(false); + }) + }; + //不可选天 + function disabledDate(current: any) { + return current && current < moment().startOf('day'); + } + //不可选小时 + const disabledDateTime = () => ({ + disabledHours: () => [...range(0, 7), ...range(19, 24)], + }); + //时间选择框日期格式化 + const dateFormat: DatePickerProps['format'] = value => value?.startOf('hour').format('YYYY-MM-DD HH:mm:ss'); + //获取预约信息 + const getMeetData = () => { + setSkeleing(true); + getMeetingData(meetId).then(res => { + if (res?.code == 200) { + setSkeleing(false); + const data = res?.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, + content: '', + async onOk() { + await cancelMeeting(meetId).then(res => { + if (res?.code == 200) { + message.success("取消预约成功"); + onSubmit && onSubmit(); + } + }) + }, + onCancel() { }, + }); + } + useEffect(() => { + if (isNotEmpty(meetId)) { + getMeetData(); + } + }, [meetId]) + + return ( + onCancel()} + centered + width={600} + footer={skeleing ? [] : [ + , + , + , + , + ]} + > + + +
+ {meetType == "meeting" ? ( + <> + + + + + +