Files
fe_service_ebtp_frontend/src/pages/BidEvaluation/components/ReviewDevided.tsx

374 lines
11 KiB
TypeScript
Raw Normal View History

2021-01-16 11:29:42 +08:00
import React, { useEffect, useState } from 'react';
2022-03-10 14:24:13 +08:00
import { Modal, Table, Checkbox, message, Button, Empty } from 'antd';
2021-01-16 11:29:42 +08:00
import { getDevidedData, getJuryData, saveDevidedData } from './service';
2022-03-10 14:24:13 +08:00
import { getProMethod, getRoomTypeByEva } from '@/utils/session';
import { getURLInformation } from '@/utils/CommonUtils';
import { btnAuthority } from '@/utils/authority';
2021-01-16 11:29:42 +08:00
interface ReviewDivisionProps {
modalVisible: boolean;
onCancel: () => void;
title: any;
2022-03-10 14:24:13 +08:00
roomId?: string;
status?: number;
2021-01-16 11:29:42 +08:00
}
/**
*
* @param props
*/
const ReviewDevided: React.FC<ReviewDivisionProps> = (props) => {
2022-03-10 14:24:13 +08:00
const { modalVisible, onCancel, title, roomId, status } = props;
2021-01-16 11:29:42 +08:00
//存储评委数据
const [juryData, setJuryData] = useState<any[]>([]);
//存储表数据
const [totalTableData, setTotalTableData] = useState<any[]>([]);
//存储表头
const [totalTableColumns, setTotalTableColumns] = useState<any[]>([]);
//表格loading
2022-03-10 14:24:13 +08:00
const [tableLoading, setTableLoading] = useState<boolean>(false);
2021-01-16 11:29:42 +08:00
//评审分工查看状态
const [viewStatus, setViewStatus] = useState<boolean>(false);
2022-03-10 14:24:13 +08:00
//评审分工空状态
const [emptyStatus, setEmptyStatus] = useState<boolean>(false);
2021-01-16 11:29:42 +08:00
//全部参数
// const juryParams = '1331563852445253632';
2022-03-10 14:24:13 +08:00
const juryParams = roomId == undefined ? '' : roomId;
//获取资审方式
// const roomType = getURLInformation('roomType') == null ? '2' : getURLInformation('roomType');
const roomType = getRoomTypeByEva();//评审分工挪入评审室需要取session中的资审方式
//获取采购方式
const MethodDict = getProMethod();
2021-01-16 11:29:42 +08:00
useEffect(() => {
2022-03-10 14:24:13 +08:00
if (modalVisible) {
setTableLoading(true);
const btnStatus =
status == undefined ? false : status != 1 ? false : true;
setViewStatus(btnStatus);
if (juryParams == '') {
} else {
//获取评委
getJuryData(juryParams).then((res) => {
if (res?.code == 200) {
let juryData = res?.data;
if (juryData.length == 0) {
setEmptyStatus(true);
} else {
setEmptyStatus(false);
setJuryData(juryData);
//获取分工数据
if (juryParams == null) {
} else {
getDevidedData(juryParams).then((response) => {
if (response?.code == 200) {
//调用数据处理方法并初始化表格
InitializeTable(juryData, response?.data);
}
});
2021-01-16 11:29:42 +08:00
}
2022-03-10 14:24:13 +08:00
}
2021-01-16 11:29:42 +08:00
}
2022-03-10 14:24:13 +08:00
}).finally(() => {
setTableLoading(false);
});
}
2021-01-16 11:29:42 +08:00
}
2022-03-10 14:24:13 +08:00
}, [modalVisible, roomId]);
2021-01-16 11:29:42 +08:00
//初始化表格方法
const InitializeTable = (columns: any, data: any) => {
//处理数据
let totalData: any[] = [];
let count = 0;
2022-03-10 14:24:13 +08:00
data?.forEach((ele: any) => {
ele.subCategoryList.forEach((element: any, index: any) => {
let inner = element;
count = count + 1;
inner.key = count;
inner.rvwName = ele.rvwName;
inner.rowSpan = index == 0 ? ele.subCategoryList.length : 0;
if (inner.divideMap == null) {
let obj = {};
columns.forEach((e: any) => {
obj[e.id] = {
checked: inner.category == 0 && ele.rvwType == 2 ? false : true,
actType: inner.category,
rvwType: ele.rvwType,
juryMemberId: e.id,
roomId: juryParams,
};
});
inner.divideMap = obj;
inner.allStatus = inner.category == 0 && ele.rvwType == 2 ? false : true;
} else {
let obj = { ...inner.divideMap };
let count = 0;
columns.forEach((e: any) => {
if (obj.hasOwnProperty(e.id)) {
obj[e.id].checked = true;
count += 1;
} else {
2021-01-16 11:29:42 +08:00
obj[e.id] = {
checked: false,
actType: inner.category,
rvwType: ele.rvwType,
juryMemberId: e.id,
roomId: juryParams,
};
2022-03-10 14:24:13 +08:00
}
});
inner.divideMap = obj;
inner.allStatus = count == columns.length;
}
Object.assign(inner, inner.divideMap);
totalData.push(inner);
});
2021-01-16 11:29:42 +08:00
});
//处理表头
const tcolumns: any[] = [
2022-03-10 14:24:13 +08:00
{
title: '',
dataIndex: 'allStatus',
key: 'allStatus',
align: 'center',
width: 60,
render: (value: any, record: any, index: any) => {
return (
<Checkbox
disabled={
status != 1
? record.rvwName == '详审' && record.category == 0
: true
}
onChange={(event) => {
const data = [...totalData];
const selected = event.target.checked;
data.forEach((ele: any) => {
if (ele.key == record.key) {
ele.allStatus = selected;
columns.forEach((element: any) => {
ele[element.id].checked = selected;
});
}
});
setTotalTableData(data);
}}
checked={record.allStatus}
/>
);
},
},
2021-01-16 11:29:42 +08:00
{
title: '',
dataIndex: 'rvwName',
key: 'rvwName',
align: 'center',
render: (value: any, record: any, index: any) => {
if (!record.name) {
return {
children: value,
props: {
colSpan: 2,
style: { textAlign: 'center' },
},
};
}
return {
children: value,
props: {
rowSpan: record.rowSpan,
},
};
},
},
{
title: '评审项类别',
dataIndex: 'name',
key: 'name',
align: 'center',
render: (value: any, record: any, index: any) => {
if (!record.name) {
return {
children: '',
props: {
colSpan: 0,
},
};
}
return value;
},
},
];
columns.forEach((ele: any) => {
tcolumns.push({
title: ele.name,
dataIndex: ele.id,
key: ele.id,
align: 'center',
render: (value: any, record: any, index: any) => (
<Checkbox
2022-03-10 14:24:13 +08:00
disabled={status != 1 ? false : true}
2021-01-16 11:29:42 +08:00
onChange={(event) => {
const data = [...totalData];
const jury = data.findIndex((item: any) => item.key == record.key);
const isView = data.length - 1;
2022-03-10 14:24:13 +08:00
if (
data[jury][value.juryMemberId].rvwType == 2 &&
data[jury][value.juryMemberId].actType == 0
) {
2021-01-16 11:29:42 +08:00
columns.forEach((ele: any) => {
if (ele.id == value.juryMemberId) {
if (event.target.checked == true) {
data[jury][value.juryMemberId].checked = event.target.checked;
data[isView][value.juryMemberId].checked = event.target.checked;
} else {
data[jury][value.juryMemberId].checked = event.target.checked;
}
} else {
data[jury][ele.id].checked = false;
}
});
} else {
2022-03-10 14:24:13 +08:00
let count = 0;
2021-01-16 11:29:42 +08:00
data[jury][value.juryMemberId].checked = event.target.checked;
2022-03-10 14:24:13 +08:00
columns.forEach((ele: any) => {
if (data[jury][ele.id].checked == true) {
count += 1;
}
});
data[jury].allStatus = count == columns.length;
2021-01-16 11:29:42 +08:00
}
setTotalTableData(data);
}}
checked={value.checked}
/>
),
});
});
setTotalTableColumns(tcolumns);
setTotalTableData(totalData);
};
2022-03-10 14:24:13 +08:00
//保存方法
2021-01-16 11:29:42 +08:00
const onSubmit = async () => {
2022-03-10 14:24:13 +08:00
setTableLoading(true);
2021-01-16 11:29:42 +08:00
let data: any[] = [];
let count = 0;
let e = 0;
let a = 0;
let j = totalTableData.length - 1;
totalTableData.forEach((element: any) => {
let num = 0;
let b = 0;
juryData.forEach((ele: any) => {
2022-03-10 14:24:13 +08:00
if (element[ele.id].rvwType == 1) {
b = b + 1;
2021-01-16 11:29:42 +08:00
}
if (element[ele.id].checked == true) {
data.push(element[ele.id]);
if (
element[ele.id].rvwType == 2 &&
element[ele.id].actType == 0 &&
totalTableData[j][ele.id].checked
) {
e = e + 1;
}
} else if (element[ele.id].checked == false) {
num = num + 1;
}
});
if (num == juryData.length) {
count = count + 1;
}
if (b == juryData.length) {
a = a + 1;
}
});
if (count > 0) {
message.info('存在评审项未分配评委,请重新勾选');
2022-03-10 14:24:13 +08:00
setTableLoading(false);
2021-01-16 11:29:42 +08:00
return;
}
2022-03-10 14:24:13 +08:00
if (a == j) {
} else {
//预审 跳过报价和可查看报价
//多轮招募 跳过报价和可查看报价
if (roomType == '1' || MethodDict == 'procurement_mode_4') {
} else {
if (e == 0) {
message.info('请允许报价评审专家查看报价');
setTableLoading(false);
return;
}
2021-01-16 11:29:42 +08:00
}
}
2022-03-10 14:24:13 +08:00
await saveDevidedData({ divideList: data }).then((res) => {
if (res?.code == 200) {
message.success('保存成功');
setTotalTableData([]);
onCancel();
2021-01-16 11:29:42 +08:00
}
2022-03-10 14:24:13 +08:00
}).finally(() => {
setTableLoading(false);
})
2021-01-16 11:29:42 +08:00
};
return (
<>
2022-03-10 14:24:13 +08:00
<Modal
destroyOnClose
title={title}
visible={modalVisible}
onCancel={() => {
onCancel();
setTotalTableData([]);
}}
width={1000}
centered
footer={[
<Button
key="back"
onClick={() => {
onCancel();
setTotalTableData([]);
}}
>
</Button>,
<Button
key="submit"
type="primary"
loading={tableLoading}
onClick={() => onSubmit()}
hidden={viewStatus || emptyStatus}
disabled={btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])}
>
</Button>
]}
>
{emptyStatus ? (
<Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />
) : (
2021-01-16 11:29:42 +08:00
<Table
bordered
pagination={false}
columns={totalTableColumns}
dataSource={totalTableData}
2022-03-10 14:24:13 +08:00
size="small"
2021-01-16 11:29:42 +08:00
key="1"
rowKey="key"
loading={tableLoading}
/>
2022-03-10 14:24:13 +08:00
)}
</Modal>
2021-01-16 11:29:42 +08:00
</>
);
};
export default ReviewDevided;