import React, { PureComponent } from 'react'; import { Divider, Button, Form, Card, Tabs, Table, Tooltip, Input, Select, Row, Col, message, Modal, Popconfirm, Tag, InputNumber } from 'antd'; import { history } from 'umi'; import ProTable from '@ant-design/pro-table'; import { getDictBidMethodDict, getProMethod, getRoomId, getDefId, getQuotationMethodById } from '@/utils/session'; import { saveLeaderId, getJuryData, checkOpenBidSupplier, getPackageList, createReviewRoom, closingReviewRoom } from './components/service'; import './index.less'; import { connect } from "dva"; import { routerRedux } from 'dva/router'; import { getProId, getProSignDict } from '@/utils/session'; import ReviewDevided from '@/pages/BidEvaluation/components/ReviewDevided'; import CreateReviewRoom from '@/pages/BidEvaluation/components/CreateReviewRoom'; import { getURLInformation } from '@/utils/CommonUtils'; import { ExclamationCircleOutlined } from '@ant-design/icons'; import { btnAuthority } from '@/utils/authority'; import SetGroupLeader from './components/SetGroupLeader'; import { finish } from './components/simpleUploadServis'; import UploadReport from './components/UploadReport'; import CloseReasonModal from './components/CloseReasonModal'; import { getUrlRelativePath, isNotEmpty, isEmpty, getUrlParam } from '@/utils/CommonUtils'; //import SetLeader from '@/pages/BidEvaluation/components/SetLeader'; // @Form.create() const InfId = getRoomId(); const { confirm } = Modal; const modalHeight = window.innerHeight * 96 / 100; @connect(({ bidev, loading }) => ({ ...bidev, managerlistLoading: loading.effects['bidev/fetchManagerList'], })) class manager extends PureComponent { state = { pageNo: 1, pageSize: 10, tpId: getProId(), defId: getDefId(), ratevisible: false, visible: false, data: {}, roomStatus: 1, proMethod: getProMethod(), createVisible: false, sectionName: "采购包", sectionType: "评审", createIdList: [], loading: false, closeVisible: false, name: '', sort: '', listParams: '', } //存储分页参数和查询条件 savePageAndParams = () => { const { listParams } = this.state let searchParams = JSON.parse(listParams); let params = `${'?roomType=' + getURLInformation("roomType") + '&pageNo=' + searchParams.pageNo}${isEmpty(searchParams.sectionName) ? '' : '&name=' + searchParams.sectionName}${isEmpty(searchParams.roomSort) ? '' : '&sort=' + searchParams.roomSort}`; let url = getUrlRelativePath() + params; sessionStorage.setItem('roomReturnURL', url);//存储返回url } // 跳转评审配置 flowConfig = (record) => { sessionStorage.setItem("roomId", record.id) this.savePageAndParams(); this.props.dispatch(routerRedux.push(`/ProjectLayout/FlowConfig`)) } //查询评审室列表 getManagerList = (params) => { const { dispatch } = this.props; this.setState({ listParams: JSON.stringify(params) }) dispatch({ type: "bidev/fetchManagerList", payload: { ...params } }) } componentDidMount() { //确定显示字段名称 let sectionName = "采购包"; let sectionType = "评审"; let proMethod = getProMethod(); if (proMethod == "procurement_mode_1" || proMethod == "procurement_mode_2") { sectionName = "标段"; sectionType = "评标"; } else if (proMethod == "procurement_mode_5" || proMethod == "procurement_mode_6") { sectionName = "采购包"; sectionType = "谈判"; } else if (proMethod == "procurement_mode_4") { sectionName = "包件"; } const pageNo = getURLInformation("pageNo"); const name = getUrlParam("name"); const sort = getUrlParam("sort"); this.setState({ sectionName, sectionType, name, sort, pageNo: Number(pageNo), }) const params = { pageNo: isNotEmpty(pageNo) ? Number(pageNo) : 1, pageSize: 10, roomType: getURLInformation('roomType'), tpId: getProId(),//项目id sectionName: isNotEmpty(name) ? name : '', roomSort: isNotEmpty(sort) ? sort : '', } this.getManagerList(params) } handleRedirect = async (record) => { sessionStorage.setItem("roomId", record.id) sessionStorage.setItem("roomStatus", record.status) sessionStorage.setItem("groupId", record.chatGroupId) sessionStorage.setItem("expertGroupId", record.expertChatGroupId) sessionStorage.setItem("roomTypeByEva", getURLInformation("roomType")) this.setState({ loading: true }) await getQuotationMethodById(record.id) // this.props.dispatch(routerRedux.push('/ProjectLayout/EvaRoom')) this.setState({ loading: false }) window.open(`/EvaRoom`) } //评委会设置 onJurySet = (record) => { this.savePageAndParams(); history.push({ pathname: '/ProjectLayout/JudgingPanel', state: { roomId: record.id, secId: record.sectionId, openTime: record.openTime } }); // this.props.dispatch(routerRedux.push(`/ProjectLayout/JudgingPanel?roomId=${record.id}&secId=${record.sectionId}&openTime=${record.openTime}`)); } //创建评审室 onCreateClick = async () => { const { tpId, createIdList } = this.state await getPackageList(tpId).then(res => { if (res.code == 200) { if (res.data.length == 0) { message.info("当前项目无可选包件,无法创建评审室") } else { this.setState({ createIdList: res.data, createVisible: true }) } } }) } //关闭评审室(多轮招募) onCloseClick = (record) => { this.setState({ data: record, closeVisible: true }) } //关闭评审室关闭onOk closeReasonOk = () => { const { pageNo, pageSize, tpId, name, sort } = this.state; this.setState({ closeVisible: false, data: {} }); const params = { pageNo: pageNo, pageSize: pageSize, roomType: getURLInformation('roomType'), tpId: tpId,//项目id sectionName: name, roomSort: sort, } this.getManagerList(params) } //关闭评审室关闭onCancel closeReasonCancel = () => { this.setState({ closeVisible: false, data: {} }); } onCreateOut = () => { this.setState({ createVisible: false }) } methodStatus() { const { proMethod } = this.state const biddingSignDict = getProSignDict(); let procurementMethod; switch (proMethod) { case 'procurement_mode_1': procurementMethod = { visible: false, name: '评审' }; break; case 'procurement_mode_2': procurementMethod = { visible: false, name: '评审' }; break; case 'procurement_mode_3': switch (biddingSignDict) { case 'selection_method_1': procurementMethod = { visible: false, name: '评审' }; break; case 'selection_method_2': procurementMethod = { visible: true, name: '评审' }; break default: } break; case 'procurement_mode_4': procurementMethod = { visible: true, name: '评审' }; break; case 'procurement_mode_5': procurementMethod = { visible: true, name: '谈判' }; break; case 'procurement_mode_6': procurementMethod = { visible: true, name: '谈判' }; break; case 'procurement_mode_7': procurementMethod = { visible: true, name: '评审' }; break; case 'procurement_mode_8': procurementMethod = { visible: false, name: '评审' }; break; case 'procurement_mode_9': procurementMethod = { visible: true, name: '谈判' }; break; default: } return procurementMethod; } onOpenBizassessroom = async (record) => { // const {checkOpenList} = this.props const { onOpenRoom } = this const { proMethod } = this.state const params = { id: record.id } this.props.dispatch({ type: "bidev/checkOpenBidSupplier", payload: params.id, callback: (response) => { let checkOpenList = response.data let methodDict = proMethod == null ? "procurement_mode_1" : proMethod if (checkOpenList?.length == 0) { message.error("应答的供应商为0家,不能开启评审!") } else { if (methodDict == "procurement_mode_5" && checkOpenList?.length < 2) { confirm({ title: '确认开启评审室?', icon: , content: 注意:应答的供应商少于2家, centered: true, onOk() { onOpenRoom(params) }, onCancel() { }, }); } else if (methodDict == "procurement_mode_3" && checkOpenList?.length < 3) { confirm({ title: '确认开启评审室?', icon: , content: 注意:应答的供应商少于3家, centered: true, onOk() { onOpenRoom(params) }, onCancel() { }, }); } else { confirm({ title: '确认开启评审室?', icon: , centered: true, onOk() { onOpenRoom(params) }, onCancel() { }, }); } } } }) } onOpenRoom = (params) => { const { defId } = this.state this.setState({ loading: true }) if (defId == "recruit_multi") { this.props.dispatch({ type: "bidev/zmmultiOpenBizassessroom", payload: { ...params }, callback: () => { this.setState({ loading: false }) } }) } else { this.props.dispatch({ type: "bidev/openBizassessroom", payload: { ...params }, callback: () => { this.setState({ loading: false }) } }) } } onResetVerificationCode = (record) => { const { pageNo, pageSize, tpId } = this.state; const params = { id: record.id, pageNo: pageNo, pageSize: pageSize, tpId: tpId } this.props.dispatch({ type: "bidev/resetVerificationCode", payload: { ...params } }) } // 跳转组建评委会 onRedirectRate = () => { this.props.dispatch(routerRedux.push('/JudgingPanel/list')) } render() { const { managerList, managerlistLoading, dispatch } = this.props; const { pageNo, pageSize, tpId, ratevisible, visible, data, createVisible, sectionName, sectionType, createIdList, proMethod, defId, loading, closeVisible, name, sort } = this.state; const pagination = { current: pageNo, total: managerList && managerList.total, showSizeChanger: false, // showQuickJumper: true, defaultPageSize: 10, // showTotal: (total,range) => `共 ${total} 条记录,第${range.slice(',')[0]}-${range.slice(',')[1]}条`, onChange: (page, pageSize) => { this.setState({ pageNo: page, pageSize: pageSize, }); const params = { pageNo: page, pageSize: pageSize, roomType: getURLInformation('roomType'), tpId: tpId,//项目id sectionName: name, roomSort: sort, } this.getManagerList(params) }, } const columns = [ { title: '序号', dataIndex: 'id', width: '5%', render: (text, record, index) => { return (index + 1) } }, { title: `${sectionName}名称`, dataIndex: 'sectionName', width: '10%' }, { title: `${sectionName}编号`, dataIndex: 'sectionNum', width: '10%' }, { title: defId == "recruit_multi" ? "轮次" : `${sectionType}次数`, hideInTable: proMethod == 'procurement_mode_9', dataIndex: 'roomSort', width: '10%', render: (text, record, index) => { return defId == "recruit_multi" ? <>第{text}轮 : record.reviewMark == 1 ? <>第{text + record.reviewSort}次{sectionType} : <>第{text}次{sectionType} } }, { title: '评委信息', dataIndex: 'juryMember', width: '10%' }, { title: '应答截止时间', dataIndex: 'responseEndTime', width: '10%', hideInTable: defId != "recruit_multi" }, { title: `${sectionType}开始时间`, dataIndex: 'openTime', width: '10%' }, { title: '校验码', dataIndex: 'verificationCode', width: '10%', hideInTable: proMethod == 'procurement_mode_9', }, { title: '状态', dataIndex: 'status', width: '10%', hideInTable: proMethod == 'procurement_mode_9', render: (text, record, index) => { let txt = record.status return record.sectionStatus == 9 ? "异常处理" : txt == 0 || txt == 1 ? `准备${sectionType}` : (txt == 2 ? `正在${sectionType}` : (txt == 3 ? `${sectionType}结束` : null)) } }, { title: '操作', dataIndex: 'operation', width: '10%', render: (text, record, index) => { let status = record.status; return ( <> { record.sectionStatus == 9 ? null : status == 0 || status == 1 && } { (status == 2 || (status == 3 && record?.closeReson == null)) && } { defId == "recruit_multi" && } { this.onResetVerificationCode(record) }} okText="确定" cancelText="取消" > { this.methodStatus().visible && } { defId == "recruit_multi" && (status == 1 || (status == 3 && record?.closeReson != null)) && } {/* 单一来源简化按钮 */} { proMethod == 'procurement_mode_9' && <> { this.setState({ loading: true }); await finish(record.id).then((res) => { if (res.success) { message.success('提交成功!'); const params = { pageNo: pageNo, pageSize: pageSize, roomType: getURLInformation('roomType'), tpId: tpId,//项目id sectionName: name, roomSort: sort, } this.getManagerList(params) } }); this.setState({ loading: false }); }} okText="确定" cancelText="取消" > } ) } } ] return ( <> [ <> this.setState({ name: event.target.value })} /> {defId == "recruit_multi" ? this.setState({ sort: event.target.value })} /> : null} {defId == "recruit_multi" ? : null} ]} /> { this.onCreateOut() }} onSubmit={async (value) => await createReviewRoom(value).then(res => { if (res.code == 200) { message.success("创建评审室成功") this.onCreateOut() const params = { pageNo: pageNo, pageSize: pageSize, roomType: getURLInformation('roomType'), tpId: tpId,//项目id sectionName: name, roomSort: sort, } this.getManagerList(params) return true } else { return false } }) } roomIdList={createIdList} /> {closeVisible && { this.closeReasonCancel() }} onOk={() => { this.closeReasonOk() }} recordData={data} />} ) } } export default manager;