Files
fe_service_ebtp_frontend/src/pages/BidEvaluation/components/ExpertCommitment.tsx
2022-03-10 14:24:13 +08:00

219 lines
6.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;