From 29e85ec3456b2689a4ea1caf22407b7939dbe637 Mon Sep 17 00:00:00 2001 From: jl-zhoujl2 Date: Fri, 26 Aug 2022 15:48:47 +0800 Subject: [PATCH] 8.26 --- src/assets/zjl_style.less | 43 ++- .../ElecBidEvaluation/BidEvalAppointment.tsx | 249 ++++++++++++++++++ .../ElecBidEvaluation/MeetingReservation.tsx | 25 +- src/components/ElecBidEvaluation/service.ts | 14 + .../JudgingPanel/List/index.tsx | 93 +++++-- 5 files changed, 392 insertions(+), 32 deletions(-) create mode 100644 src/components/ElecBidEvaluation/BidEvalAppointment.tsx diff --git a/src/assets/zjl_style.less b/src/assets/zjl_style.less index 8a4a611..61fc6f7 100644 --- a/src/assets/zjl_style.less +++ b/src/assets/zjl_style.less @@ -2,10 +2,12 @@ .common { padding: 0px 24px; } + //操作栏颜色 .operation { // margin-right: 8px; } + // .card-title-button .ant-card-head-title { // padding: 10px 0px; // } @@ -17,15 +19,18 @@ color: #b30000; // margin-right: 8px; } + .revenue .ant-tabs-content-holder { margin-top: 0px; } -.revenue .ant-tabs-top > .ant-tabs-nav, -.ant-tabs-bottom > .ant-tabs-nav, -.ant-tabs-top > div > .ant-tabs-nav, -.ant-tabs-bottom > div > .ant-tabs-nav { + +.revenue .ant-tabs-top>.ant-tabs-nav, +.ant-tabs-bottom>.ant-tabs-nav, +.ant-tabs-top>div>.ant-tabs-nav, +.ant-tabs-bottom>div>.ant-tabs-nav { margin: 0; } + // .ant-pro-card-body { // padding: 0; // } @@ -33,17 +38,21 @@ .confirm .ant-pro-table .ant-pro-table-search { padding: 16px 0px 0px 0px; } + .notice .ant-pro-table-list-toolbar-container { padding: 0px 0px 16px; } + .erf-title-flex { display: flex; justify-content: space-between; } + .erf-title-left { height: 32px; line-height: 32px; } + .erf-delete { color: #1890ff !important; background: rgba(0, 0, 0, 0) !important; @@ -55,6 +64,7 @@ font-weight: 600; line-height: 56px; } + .CM_span { text-indent: 2em; // line-height: 24px; @@ -79,10 +89,12 @@ float: left; line-height: 44px; } + //日历组件专用样式 .calendar-dashboard .ant-picker-calendar .ant-picker-panel .ant-picker-body { padding: 0px; } + .calendar-dashboard .ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date { margin: 0 0 1px 1px; padding: 0px 8px 0px; @@ -93,6 +105,7 @@ border-right: 1px solid #f0f0f0; border-radius: 0px } + .calendar-dashboard .ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-content { position: static; width: auto; @@ -102,34 +115,42 @@ color: rgba(0, 0, 0, 0.85); line-height: 1.5715; text-align: center; -} +} + .calendar-dashboard .ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date, .calendar-dashboard .ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date, .calendar-dashboard .ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date-today, .calendar-dashboard .ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date-today { background: #fff1f0; } + .calendar-dashboard .ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-today { border-color: #b30000; } + .calendar-dashboard .ant-picker-calendar-full .ant-picker-panel .ant-picker-body th { padding: 0 0px 5px 0; text-align: center; } + .calendar-dashboard .ant-picker-calendar-full .ant-picker-panel .ant-picker-body td { text-align: center; } + .calendar-dashboard .ant-tag { margin-right: 0px; line-height: 19px; } + .calendar-dashboard .ant-picker-cell { cursor: default; } + .notice-detail-html p { margin: 0; padding: 0; } + .notice-detail-file { font-size: 17px; color: #7c7c7c; @@ -138,26 +159,38 @@ top: 5px; vertical-align: top; } + .notice-detail-noticefile { margin-top: 20px; + .ant-spin-nested-loading { display: inline-block; } } + .baseinf-top { background-color: #ffffff; padding: 20px; overflow: auto; } + .baseinf-bottom-btn { margin-top: 40px; text-align: center; } + .calibration-panel { .ant-collapse-content-box { padding: 0px 16px; } } + .question-form .ant-space { min-width: 50%; +} + +.table-no-alert { + .ant-pro-table-alert { + display: none; + } } \ No newline at end of file diff --git a/src/components/ElecBidEvaluation/BidEvalAppointment.tsx b/src/components/ElecBidEvaluation/BidEvalAppointment.tsx new file mode 100644 index 0000000..9066099 --- /dev/null +++ b/src/components/ElecBidEvaluation/BidEvalAppointment.tsx @@ -0,0 +1,249 @@ +import React, { useEffect, useRef, useState } from 'react'; +import { Col, DatePicker, Form, Input, message, Modal, Row } from 'antd'; +import ProTable, { ActionType, ProColumns } from '@ant-design/pro-table'; +import { getBidEvalRoom } from './service'; +import { dateFormat, disabledDate, disabledDateTime, validateMessages } from './MeetingReservation'; +import moment from 'moment'; +import { dateTimeFormatter } from '@/utils/DateUtils'; + +interface BidEvalAppointmentProps { + modalVisible: boolean; + onCancel: () => void; + onSubmit: (value: any) => void; + values: any; +} + +export const proviceEnum = { + "0011": "北京", + "0012": "天津", + "0013": "河北", + "0014": "山西", + "0015": "内蒙古", + "0021": "辽宁", + "0022": "吉林", + "0023": "黑龙江", + "0031": "上海", + "0032": "江苏", + "0033": "浙江", + "0034": "安徽", + "0035": "福建", + "0036": "江西", + "0037": "山东", + "0041": "河南", + "0042": "湖北", + "0043": "湖南", + "0044": "广东", + "0045": "广西", + "0046": "海南", + "0050": "重庆", + "0051": "四川", + "0052": "贵州", + "0053": "云南", + "0054": "西藏", + "0061": "陕西", + "0062": "甘肃", + "0063": "青海", + "0064": "宁夏", + "0065": "新疆", + "001000": "集团" +} + +const modalHeight = window.innerHeight * 96 / 100; + +const BidEvalAppointment: React.FC = (props) => { + const { modalVisible, onCancel, onSubmit, values } = props; + const actionRef = useRef(); + const [form] = Form.useForm(); + //当前选择行areaId + const [selectedRowKeys, setSelectedRowKeys] = useState([]); + //当前选择行数据 + const [selectedRecord, setSelectedRecord] = useState(); + const columns: ProColumns[] = [ + { + valueType: 'index', + width: 48, + }, + { + title: '评标室名称', + dataIndex: 'areaName', + ellipsis: true, + }, + { + title: '服务省分', + dataIndex: 'provinceDictId', + ellipsis: true, + valueEnum: proviceEnum, + hideInSearch: true, + }, + { + title: '详细地址', + dataIndex: 'areaAddress', + ellipsis: true, + hideInSearch: true, + }, + { + title: '可容纳人数', + dataIndex: 'areaNumber', + ellipsis: true, + hideInSearch: true, + }, + { + title: '联系人', + dataIndex: 'contactName', + ellipsis: true, + hideInSearch: true, + }, { + title: '联系电话', + dataIndex: 'contactTel', + ellipsis: true, + hideInSearch: true, + }, + ]; + + const onOk = () => { + if (selectedRowKeys.length == 0) { + message.info("请选择评标室"); + return; + } + form.validateFields().then(value => { + if (value.reserveStartDate < moment().format(dateTimeFormatter)) { + message.info("开始时间不可早于当前时间"); + return; + } + value["areaId"] = selectedRecord.id; + value["placeId"] = selectedRecord.placeId; + value["evalLocation"] = selectedRecord.areaName; + onSubmit(value); + }) + } + + useEffect(() => { + if (values) { + if (values?.areaId) { + setSelectedRowKeys([values.areaId]) + setSelectedRecord({ + ...values, + id: values.areaId, + }) + } + form.setFieldsValue({ + ...values, + }) + } + return () => { + setSelectedRowKeys([]); + setSelectedRecord(void 0); + } + }, [values]) + + return ( + onCancel()} + onOk={() => onOk()} + okText="确认" + width={"70%"} + style={{ maxHeight: modalHeight }} + bodyStyle={{ maxHeight: modalHeight - 107, overflowY: 'auto', }} + className="confirm table-no-alert" + centered + > + + columns={columns} + actionRef={actionRef} + bordered={false} + request={async (params: any) => { + return await getBidEvalRoom(params).then(res => { + if (res?.code == 200) { + return { + data: res?.data.records, + success: res?.success, + total: res?.data.total, + } + } else { + return { + data: [], + success: false, + total: 0, + } + } + }) + }} + rowKey="id" + search={{ + labelWidth: 'auto', + }} + options={false} + pagination={{ + size: "small", + defaultPageSize: 10, + showSizeChanger: true, + }} + rowSelection={{ + type: "radio", + selectedRowKeys, + onChange: (selectedRowKeys, selectedRows) => { + setSelectedRowKeys(selectedRowKeys); + setSelectedRecord(selectedRows[0]); + }, + }} + dateFormatter="string" + toolBarRender={false} + /> +
+ {selectedRowKeys.length > 0 && ( + + + + + + + + + + + + + + + + + + + + + + + )} +
+
+ ); +}; + +export default BidEvalAppointment; diff --git a/src/components/ElecBidEvaluation/MeetingReservation.tsx b/src/components/ElecBidEvaluation/MeetingReservation.tsx index a4f6e8b..b18bfd0 100644 --- a/src/components/ElecBidEvaluation/MeetingReservation.tsx +++ b/src/components/ElecBidEvaluation/MeetingReservation.tsx @@ -18,16 +18,26 @@ const layout = { labelCol: { span: 7 }, wrapperCol: { span: 14 }, }; -const validateMessages = { +export const validateMessages = { required: '请填写此项', }; -const range = (start: number, end: number) => { +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 dateFormat: DatePickerProps['format'] = value => value?.startOf('hour').format('YYYY-MM-DD HH:mm:ss'); /** * 评标室预约管理-会议室预约弹窗 * @param props @@ -67,16 +77,7 @@ const MeetingReservation: React.FC = (props) => { 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); diff --git a/src/components/ElecBidEvaluation/service.ts b/src/components/ElecBidEvaluation/service.ts index 944ba2b..b6e356a 100644 --- a/src/components/ElecBidEvaluation/service.ts +++ b/src/components/ElecBidEvaluation/service.ts @@ -26,4 +26,18 @@ export async function cancelMeeting(id: any) { return request('/api/biz-service-ebtp-evaluation/v1/eval/room/reserve/cancel/' + id, { method: 'GET', }); +} + +/** + * 评标室预约-查询评标室 + * @params data + */ +export async function getBidEvalRoom(data: any) { + return request('/api/biz-service-ebtp-evaluation/v1/elec/eval/area/page/list', { + method: 'POST', + data: { + ...data, + pageNo: data.current, + }, + }); } \ No newline at end of file diff --git a/src/pages/Tender/ProjectManager/JudgingPanel/List/index.tsx b/src/pages/Tender/ProjectManager/JudgingPanel/List/index.tsx index 29da542..b694062 100644 --- a/src/pages/Tender/ProjectManager/JudgingPanel/List/index.tsx +++ b/src/pages/Tender/ProjectManager/JudgingPanel/List/index.tsx @@ -11,6 +11,7 @@ import FileDown from '@/utils/Download'; import { UploadOutlined } from '@ant-design/icons'; import { btnAuthority } from '@/utils/authority'; import RiskPrevention from '@/utils/RiskPrevention'; +import BidEvalAppointment from '@/components/ElecBidEvaluation/BidEvalAppointment'; const JudgingPanel: React.FC<{}> = () => { const modalHeight = window.innerHeight * 96 / 100; @@ -43,6 +44,9 @@ const JudgingPanel: React.FC<{}> = () => { const [manNum, manNumSet] = useState(5);//人数 const [riskVisible, setRiskVisible] = useState(false);//风控弹窗 2021.9.7 zhoujianlong const [riskData, setRiskData] = useState([]);//风控数据 2021.9.7 zhoujianlong + const [selectEvalVisible, setSelectEvalVisible] = useState(false);//电子评标室-评标室预约选择 2022.8.26 zhoujianlong + const [selectEvalDisabled, setSelectEvalDisabled] = useState(true);//电子评标室-评标室预约选择不可选状态控制 true-不可填写 false-可填写 2022.8.26 zhoujianlong + const [selectEvalData, setSelectEvalData] = useState();//电子评标室-评标室预约选择-数据 2022.8.26 zhoujianlong function getShouName() { const method = getProMethod(); let showNameT: any = { zbr: '', bb: '', pb: '', }//相关标段 标书费 保证金 服务费 @@ -72,7 +76,7 @@ const JudgingPanel: React.FC<{}> = () => { const hide = message.loading('正在配置'); try { const success = await saveGroup({ ...fields }).then((res) => { - if(res?.code == 4004 && res?.success == false) { //2021.9.7 zhoujianlong 新增评委会保存增加风控 + if (res?.code == 4004 && res?.success == false) { //2021.9.7 zhoujianlong 新增评委会保存增加风控 const data = res?.data?.result == undefined ? [] : res?.data?.result setRiskData(data) setRiskVisible(true) @@ -673,6 +677,20 @@ const JudgingPanel: React.FC<{}> = () => { }}>{display ? '自行输入' : '选择分类'} } */} + + = () => { > - - + + + + + + + + + + + + + = () => { showTime={{ defaultValue: moment('00:00:00', 'HH:mm:ss') }} disabled={disabled} showNow={false} + style={{ width: "90%" }} /> = () => { showTime={{ defaultValue: moment('00:00:00', 'HH:mm:ss') }} disabled={disabled} showNow={false} + style={{ width: "90%" }} /> - - - + - +

关联{showName.bb}

@@ -1657,7 +1696,29 @@ const JudgingPanel: React.FC<{}> = () => { dataSet(dataTem, type); memberCountSet(memberCount + 1); } - + //评标室预约回调 + const returnEvalData = (value: any) => { + setSelectEvalVisible(false); + setSelectEvalDisabled(false); + form.setFieldsValue({ + startTime: value.reserveStartDate, + endTime: value.reserveEndDate, + evalLocation: value.evalLocation, + reserveBy: value.reserveBy, + reserveContactNumber: value.reserveContactNumber, + areaId: value.areaId, + placeId: value.placeId, + }) + } + //评标室预约-选择评标室 + const selectEvalClick = () => { + const data = form.getFieldsValue(); + data["reserveStartDate"] = data.startTime; + data["reserveEndDate"] = data.endTime; + console.log("data", data) + setSelectEvalData(data); + setSelectEvalVisible(true); + } return (
@@ -1715,7 +1776,7 @@ const JudgingPanel: React.FC<{}> = () => { {group()} {member()} {/**风控组件 */} - {riskVisible && { setRiskVisible(false) @@ -1723,6 +1784,8 @@ const JudgingPanel: React.FC<{}> = () => { }} data={riskData} />} + {/**电子评标室-评标室预约选择 */} + setSelectEvalVisible(false)} onSubmit={(value: any) => returnEvalData(value)} values={selectEvalData} />
) }