219 lines
6.8 KiB
TypeScript
219 lines
6.8 KiB
TypeScript
![]() |
import React, { useEffect, useState } from 'react';
|
|||
|
import { Button, Checkbox, Descriptions, message, Modal, Spin } from 'antd';
|
|||
|
import DescriptionsItem from 'antd/lib/descriptions/Item';
|
|||
|
import ProTable from '@ant-design/pro-table';
|
|||
|
import { getProId, getProMethod} from '@/utils/session';
|
|||
|
import { fetchbidslist, fetchJuryMemInfo, pushRedirectRe } from '@/services/bidev';
|
|||
|
import { ProColumns } from '@ant-design/pro-table/es';
|
|||
|
import CommitmentModal from './CommitmentModal';
|
|||
|
import { ExclamationCircleOutlined } from '@ant-design/icons';
|
|||
|
import { getDefId } from './service';
|
|||
|
|
|||
|
interface ExpertCommitmentProps {
|
|||
|
//展开收起
|
|||
|
modalVisible: boolean;
|
|||
|
//退出
|
|||
|
onCancel: () => void;
|
|||
|
//当前行的数据传入
|
|||
|
recordData?: any;
|
|||
|
//刷新方法
|
|||
|
onRefresh: () => void;
|
|||
|
}
|
|||
|
|
|||
|
const ExpertCommitment: React.FC<ExpertCommitmentProps> = (props) => {
|
|||
|
const { modalVisible, onCancel, recordData,onRefresh } = props;
|
|||
|
//获取项目id
|
|||
|
const proId = recordData?.tpId;
|
|||
|
//获取roomId
|
|||
|
const roomId = recordData?.id;
|
|||
|
//获取采购方式
|
|||
|
const proMethod: any = getProMethod();
|
|||
|
//loading
|
|||
|
const [loading, setLoading] = useState<boolean>(false);
|
|||
|
//专家信息存储
|
|||
|
const [JuryInfo, setJuryInfo] = useState<any>();
|
|||
|
//供应商列表存储
|
|||
|
const [supplierList, setSupplierList] = useState<any>();
|
|||
|
//页面投标人字体
|
|||
|
const [roleName, setRoleName] = useState<any>('供应商');
|
|||
|
//页面评审 评标 谈判
|
|||
|
const [sectionType, setSectionType] = useState<any>('评审');
|
|||
|
//专家承诺书勾选
|
|||
|
const [checked, setChecked] = useState<boolean>(false);
|
|||
|
//专家承诺书显示弹窗
|
|||
|
const [commitmentVisible, setCommitmentVisible] = useState<boolean>(false);
|
|||
|
|
|||
|
const { confirm } = Modal;
|
|||
|
|
|||
|
const bidscolumns: ProColumns<any>[] = [
|
|||
|
{
|
|||
|
title: '序号',
|
|||
|
dataIndex: 'id',
|
|||
|
width: '10%',
|
|||
|
align: 'center',
|
|||
|
render: (text: any, record: any, index: any) => {
|
|||
|
return index + 1;
|
|||
|
},
|
|||
|
},
|
|||
|
{ title: `${roleName}名称`, dataIndex: 'companyName', align: 'center', width: '90%' },
|
|||
|
];
|
|||
|
//checked状态存储
|
|||
|
const onChange = (props: any) => {
|
|||
|
setChecked(props.target.checked);
|
|||
|
};
|
|||
|
//打开专家承诺书
|
|||
|
const modalOpen = () => {
|
|||
|
setCommitmentVisible(true)
|
|||
|
};
|
|||
|
const onOk = async (code: any) => {
|
|||
|
setLoading(true)
|
|||
|
if (code == 1 && checked == false) {
|
|||
|
message.info('请您先阅读专家承诺书');
|
|||
|
setLoading(false)
|
|||
|
} else {
|
|||
|
const params = {
|
|||
|
assessRoomId: roomId,
|
|||
|
attitude: code,
|
|||
|
juryMemberId: JuryInfo?.id,
|
|||
|
sectionId: recordData?.sectionId,
|
|||
|
};
|
|||
|
//提交专家承诺书状态 -勾选确定或申请回避
|
|||
|
await pushRedirectRe(params).then((res) => {
|
|||
|
if (res?.code == 200) {
|
|||
|
if (res.success == true) {
|
|||
|
//勾选确定
|
|||
|
if (code == 1) {
|
|||
|
//获取流程id
|
|||
|
getDefId(getProId()).then(res => {
|
|||
|
if(res?.code == 200) {
|
|||
|
sessionStorage.setItem('defId', JSON.stringify(res?.data));
|
|||
|
window.open('/EvaRoom');
|
|||
|
}
|
|||
|
})
|
|||
|
} else if (code == 2) {
|
|||
|
message.success("申请回避成功")
|
|||
|
onRefresh();
|
|||
|
}
|
|||
|
setChecked(false)
|
|||
|
onCancel();
|
|||
|
}
|
|||
|
}
|
|||
|
}).finally(() => {
|
|||
|
setLoading(false)
|
|||
|
});
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
useEffect(() => {
|
|||
|
if(modalVisible) {
|
|||
|
//修改显示字段
|
|||
|
if(proMethod == "procurement_mode_1" || proMethod == "procurement_mode_2") {
|
|||
|
setRoleName('投标人')
|
|||
|
setSectionType("评标")
|
|||
|
}
|
|||
|
const paramskt = {
|
|||
|
assessRoomId: roomId,
|
|||
|
projectId: proId,
|
|||
|
};
|
|||
|
const params = {
|
|||
|
roomId: roomId,
|
|||
|
};
|
|||
|
//获取供应商信息
|
|||
|
fetchbidslist(paramskt).then(async (res) => {
|
|||
|
if (res?.code == 200) {
|
|||
|
const data = res.data;
|
|||
|
const e = (
|
|||
|
<ProTable
|
|||
|
options={false}
|
|||
|
search={false}
|
|||
|
columns={bidscolumns}
|
|||
|
dataSource={data}
|
|||
|
pagination={false}
|
|||
|
size="small"
|
|||
|
/>
|
|||
|
);
|
|||
|
setSupplierList(e);
|
|||
|
//获取专家数据
|
|||
|
await fetchJuryMemInfo(params).then((response) => {
|
|||
|
if (response?.code == 200) {
|
|||
|
const data = response?.data;
|
|||
|
setJuryInfo(data);
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
}, [recordData?.id,modalVisible]);
|
|||
|
return (
|
|||
|
<Modal
|
|||
|
destroyOnClose
|
|||
|
visible={modalVisible}
|
|||
|
onCancel={() => {
|
|||
|
setChecked(false)
|
|||
|
onCancel()
|
|||
|
}}
|
|||
|
title="请阅读并同意承诺书协议或申请回避"
|
|||
|
width={"60%"}
|
|||
|
centered
|
|||
|
footer={[
|
|||
|
<Button key="back" onClick={() => {
|
|||
|
setChecked(false)
|
|||
|
onCancel()
|
|||
|
}}>
|
|||
|
取消
|
|||
|
</Button>,
|
|||
|
<Button key="avoid" type="primary" loading={loading} onClick={() => {
|
|||
|
confirm({
|
|||
|
title: '您正在申请专家回避,确认要进行回避吗?',
|
|||
|
icon: <ExclamationCircleOutlined />,
|
|||
|
content: <span style={{color: '#b30000'}}>注意:申请回避后将不能参与此次{sectionType}</span>,
|
|||
|
centered: true,
|
|||
|
okText: "确认",
|
|||
|
onOk() {
|
|||
|
onOk(2)
|
|||
|
},
|
|||
|
onCancel() {},
|
|||
|
});
|
|||
|
}}>
|
|||
|
申请回避
|
|||
|
</Button>,
|
|||
|
<Button key="submit" type="primary" loading={loading} onClick={() => onOk(1)}>
|
|||
|
确定
|
|||
|
</Button>,
|
|||
|
]}
|
|||
|
>
|
|||
|
<Spin spinning={loading} delay={300}>
|
|||
|
<div className="first-title">专家信息</div>
|
|||
|
<Descriptions column={3}>
|
|||
|
<DescriptionsItem label="姓名" style={{ padding: '1px 1px 0px' }}>
|
|||
|
{JuryInfo?.name}
|
|||
|
</DescriptionsItem>
|
|||
|
<DescriptionsItem label="手机号" style={{ padding: '1px 1px 0px' }}>
|
|||
|
{JuryInfo?.mobile}
|
|||
|
</DescriptionsItem>
|
|||
|
<DescriptionsItem label="身份证号" style={{ padding: '1px 1px 0px' }}>
|
|||
|
{JuryInfo?.certificate}
|
|||
|
</DescriptionsItem>
|
|||
|
</Descriptions>
|
|||
|
<div className="first-title">{roleName}信息</div>
|
|||
|
{supplierList}
|
|||
|
<div style={{ display: 'flex', justifyContent: 'center' }}>
|
|||
|
<span style={{ fontSize: '14px', fontWeight: 'bold', marginTop: 16 }}>
|
|||
|
<Checkbox onChange={onChange} checked={checked}></Checkbox>
|
|||
|
<span style={{ marginLeft: '8px' }}>我已阅读并同意了此承诺书</span>
|
|||
|
<span
|
|||
|
style={{ color: '#b30000', fontSize: '14px', cursor: 'pointer' }}
|
|||
|
onClick={modalOpen}
|
|||
|
>
|
|||
|
《承诺书协议》
|
|||
|
</span>
|
|||
|
</span>
|
|||
|
</div>
|
|||
|
</Spin>
|
|||
|
<CommitmentModal modalVisible={commitmentVisible} onCancel={() => setCommitmentVisible(false)}/>
|
|||
|
</Modal>
|
|||
|
);
|
|||
|
};
|
|||
|
|
|||
|
export default ExpertCommitment;
|