import React, { useEffect, useState } from 'react'; import { Modal, Table, Checkbox, message, Spin, Button } from 'antd'; import { getDevidedData, getJuryData, saveDevidedData } from './service'; interface ReviewDivisionProps { modalVisible: boolean; onCancel: () => void; title: any; values: any; } /** * 保存评审分工 * @param fields */ export const handleSave = async (fields: any) => { try { await saveDevidedData(fields); message.success('保存成功'); return true; } catch (error) { message.error('保存失败'); return false; } }; /** * 评审分工 * @param props */ const ReviewDevided: React.FC = (props) => { const { modalVisible, onCancel, title, values } = props; //存储评委数据 const [juryData, setJuryData] = useState([]); //存储表数据 const [totalTableData, setTotalTableData] = useState([]); //存储表头 const [totalTableColumns, setTotalTableColumns] = useState([]); //表格loading const [tableLoading, setTableLoadings] = useState(false); //modal loading const [modalLoading, setModalLoading] = useState(false); //评审分工查看状态 const [viewStatus, setViewStatus] = useState(false); //全部参数 // const juryParams = '1331563852445253632'; const juryParams = values == undefined ? '' : values.id; useEffect(() => { setTableLoadings(true); const status = values == undefined ? false : (values.status == 1 || values.status == 0 ? false : true) console.log(status) setViewStatus(status) if (juryParams == '') { } else { //获取评委 getJuryData(juryParams).then((res) => { if (res.code == 200) { setJuryData(res.data); //获取分工数据 if (juryParams == null) { } else { getDevidedData(juryParams).then((response) => { if (response.code == 200) { //调用数据处理方法并初始化表格 InitializeTable(res.data, response.data); setTableLoadings(false); } }); } } }); } }, [modalVisible, values]); //初始化表格方法 const InitializeTable = (columns: any, data: any) => { //处理数据 let totalData: any[] = []; let count = 0; data.forEach((ele: any) => { if (ele.hasOwnProperty('subCategoryList')) { 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: false, actType: inner.category, rvwType: ele.rvwType, juryMemberId: e.id, roomId: juryParams, }; }); inner.divideMap = obj; } else { let obj = { ...inner.divideMap }; columns.forEach((e: any) => { if (obj.hasOwnProperty(e.id)) { obj[e.id].checked = true; } else { obj[e.id] = { checked: false, actType: inner.category, rvwType: ele.rvwType, juryMemberId: e.id, roomId: juryParams, }; } }); inner.divideMap = obj; } Object.assign(inner, inner.divideMap); totalData.push(inner); }); } }); //处理表头 const tcolumns: any[] = [ { 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) => ( { const data = [...totalData]; const jury = data.findIndex((item: any) => item.key == record.key); const isView = data.length - 1; if (data[jury][value.juryMemberId].rvwType == 2 && data[jury][value.juryMemberId].actType == 0) { 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 { data[jury][value.juryMemberId].checked = event.target.checked; } setTotalTableData(data); }} defaultChecked={value.checked} checked={value.checked} /> ), }); }); console.log(totalData); setTotalTableColumns(tcolumns); setTotalTableData(totalData); }; const onSubmit = async () => { setModalLoading(true); console.log(totalTableData); 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) => { if(element[ele.id].rvwType == 1) { b = b + 1 } 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('存在评审项未分配评委,请重新勾选'); setModalLoading(false); return; } if(a == totalTableData.length - 1) {} else { if (e == 0) { message.info('请允许报价评审专家查看报价'); setModalLoading(false); return; } } const success = await handleSave({ divideList: data }); if (success) { setModalLoading(false); setTotalTableData([]) onCancel(); } }; const onSelect = (record: any, selected: any) => { setTableLoadings(true); let select = totalTableData; select.forEach((ele: any) => { if (ele.key == record.key) { juryData.forEach((element) => { ele[element.id].checked = selected; }); } }); setTotalTableData(select); }; return ( <> { onCancel() setTotalTableData([]) }} width={800} footer={viewStatus ? false : [ , , ]} > { onSelect(record, selected); setTableLoadings(false); }, getCheckboxProps: (record) => ({ disabled: viewStatus == true ? true : record.rvwName == '详审' && record.category == 0, }), }} /> ); }; export default ReviewDevided;