评审小组

This commit is contained in:
jlzhangyx5
2025-05-27 15:44:05 +08:00
parent da11195495
commit af8f783612
2 changed files with 94 additions and 27 deletions

View File

@ -53,7 +53,7 @@ const JudgingPanel: React.FC<{}> = () => {
const [editableKeys, setEditableRowKeys] = useState<any[]>([]);
const [tableData, setTableData] = useState<DataSourceType[]>([]);
function getShouName() {
const method = getProMethod();
const method = 'procurement_mode_1';//getProMethod();//TODO zyx-假数据
let showNameT: any = { zbr: '', bb: '', pb: '', }//相关标段 标书费 保证金 服务费
// let num = 3;
if (method === 'procurement_mode_1' || method === 'procurement_mode_2') {//招标
@ -101,8 +101,8 @@ const JudgingPanel: React.FC<{}> = () => {
const columns: ProColumns<any>[] = [
{ title: '序号', valueType: 'index', width: 50, },
{ title: `${showName.bb}名称`, dataIndex: 'sectionName', },
{ title: '专家数量', dataIndex: 'expertNumber', width: 80 },
{ title: `${showName.zbr}代表数量`, dataIndex: 'representativeNumber', width: 120 },
{ title: '专家抽取数量', dataIndex: 'expertNumber', width: 120 },
{ title: `直接录入数量`, dataIndex: 'representativeNumber', width: 120 },
{ title: '预计开始时间', dataIndex: 'startTime', valueType: 'dateTime', width: '10%', },
{ title: '预计结束时间', dataIndex: 'endTime', valueType: 'dateTime', width: '10%', },
{
@ -163,23 +163,63 @@ const JudgingPanel: React.FC<{}> = () => {
<Button type='text'
hidden={!check && btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])}
onClick={() => {
updateDataSet(record);
//剔除代表
let list = [...record.juryCategoryVOList];
list.map((item: any, index: any) => {
if (item.category == 1) {
list.splice(index, 1);
}
});
cqDataSet(list);
setModalVis(true);
sectionCountSet(sectionCount + 1);
// queryVoList({ id: record.id }).then((res) => {
// if (res.code == 200) {
// updateDataSet(res.data);
// console.log("res.data",res.data);
// }
// });
// updateDataSet(record);
// console.log("record", record);
// //剔除代表
// let list = [...record.juryCategoryVOList];
// list.map((item: any, index: any) => {
// if (item.category == 1) {
// list.splice(index, 1);
// }
// });
// cqDataSet(list);
// setModalVis(true);
// sectionCountSet(sectionCount + 1);
handleUpdate(record);
disabledSet(check);
// readOnlySet(check);
checkSectionNameSet(record.sectionName);
// checkSectionNameSet(record.sectionName);
}}>{check ? '查看' : '修改'}</Button>
)
}
const handleUpdate = async (record: any) => {
form.resetFields();
const res = await queryVoList({ id: record.id });
// 提取专业抽取列表
const extractSpecialityList = res.data.extractSpecialityList || [];
// 设置表格数据
let specList = extractSpecialityList.map((item: any, index: number) => ({
...item,
uid: item.id || String(index + Date.now()) // 确保每个条目有唯一 key
}))
res.data.extractSpecialityList = specList;
setTableData(specList);
// 设置 editableKeys确保每一行都能编辑
setEditableRowKeys(specList.map((item: any, index: number) => item.uid));
// setEditableRowKeys(specList.map(item => item.uid));
updateDataSet(res.data);
//剔除代表
let list = [...res.data.juryCategoryVOList];
list.map((item: any, index: any) => {
if (item.category == 1) {
list.splice(index, 1);
}
});
cqDataSet(list);
setModalVis(true);
sectionCountSet(sectionCount + 1);
// readOnlySet(check);
checkSectionNameSet(res.data.sectionName);
};
//删除
const del = async (fields: any) => {
@ -342,6 +382,7 @@ const JudgingPanel: React.FC<{}> = () => {
endTime: updateData != undefined ? updateData.reserveStatus == 1 ? moment(updateData.elecEvalRoomReserve.reserveEndDate, 'yyyy-MM-DD HH:mm:ss') : moment(updateData.endTime, 'yyyy-MM-DD HH:mm:ss') : null,
evalLocation: updateData != undefined ? updateData.reserveStatus == 1 ? updateData.elecEvalRoomReserve.areaAddress : updateData.evalLocation : null,
description: updateData != undefined ? updateData.description : null,
extractSpecialityList: updateData != undefined ? updateData.extractSpecialityList : null,
})
}, [updateData]);
@ -360,6 +401,9 @@ const JudgingPanel: React.FC<{}> = () => {
onCancel={() => {
setModalVis(false);
updateDataSet({});
setTableData([]);
setCheckedList([]);
form.resetFields();
}}
>
{tab1()}
@ -440,10 +484,12 @@ const JudgingPanel: React.FC<{}> = () => {
message.error("所选标段评标委员会人数不一致");
return;
}
console.log("checkedList", checkedList);
const juryNumber = parseInt(uniqueJuryNumbers[0]) || 0;
const repNumber = parseInt(form.getFieldValue('representativeNumber')) || 0;
console.log(juryNumber, repNumber);
if (repNumber < 0 || repNumber > juryNumber) {
message.error(`直接录入数量应在 0 ~ ${juryNumber} 之间`);
form.setFieldsValue({ representativeNumber: undefined, expertNumber: undefined });
@ -451,6 +497,7 @@ const JudgingPanel: React.FC<{}> = () => {
}
const expertNumber = Math.max(0, juryNumber - repNumber);
(expertNumber === 0) && setTableData([]);
form.getFieldValue('representativeNumber') && form.setFieldsValue({ expertNumber });
};
@ -458,8 +505,6 @@ const JudgingPanel: React.FC<{}> = () => {
useEffect(() => {
calculateExpertNumber();
}, [form.getFieldValue('representativeNumber'), checkedList]);
const expertNumber = form.getFieldValue('expertNumber');
const shouldShowTable = expertNumber !== null && expertNumber !== undefined && Number(expertNumber) > 0;
const tab1 = () => {//cqtab1
return (
<>
@ -583,7 +628,7 @@ const JudgingPanel: React.FC<{}> = () => {
<Col span={12}><FormItem
name="representativeNumber"
label={`直接录入数量`}
rules={[...rule(`直接录入代表数量`), { pattern: /^([1-9]?\d|100)$/, message: '请输入正确数值' }]}
rules={[...rule(`直接录入数量`), { pattern: /^([1-9]?\d|100)$/, message: '请输入正确数值' }]}
{...formLayout}
>
<Input style={{ width: "90%" }} type="number" disabled={disabled} placeholder={`直接录入数量`}
@ -623,6 +668,7 @@ const JudgingPanel: React.FC<{}> = () => {
rowKey="uid"
toolBarRender={false}
columns={professColumns}
dataSource={tableData}
recordCreatorProps={{
newRecordType: 'dataSource',
hidden: disabled,
@ -641,7 +687,6 @@ const JudgingPanel: React.FC<{}> = () => {
setEditableRowKeys(keys);
},
onValuesChange: (record, recordList) => {
console.log("", recordList)
setTableData(recordList);
},
actionRender: (row, _, dom) => {
@ -720,12 +765,23 @@ const JudgingPanel: React.FC<{}> = () => {
specNum += Number(item?.extractNumber);
}
}
console.log("expertNumber", schemaData?.expertNumber, "specNum", specNum);
if (Number(schemaData?.expertNumber) !== specNum) {
res = false;
message.error("抽取专业人数与专家需求人数不符!");
}
return res;
}
const checkSpecialityUnique = () => {
let res = true;
const specialityIds = tableData.map(item => item.specialityId).filter(Boolean);
const unique = [...new Set(specialityIds)];
if (specialityIds.length !== unique.length) {
res = false;
message.error('抽取专业名称不可重复选择');
}
return res;
};
const idToNameMap = Object.entries(professionalMap || {}).reduce((acc, [id, option]) => {
acc[id] = option.text;
return acc;
@ -750,6 +806,9 @@ const JudgingPanel: React.FC<{}> = () => {
<Button onClick={() => {
setModalVis(false);
updateDataSet({});
setCheckedList([]);
setTableData([]);
form.resetFields();
}}>{disabled ? '关闭' : '取消'}</Button>
<Button hidden={disabled || btnAuthority(['ebtp-agency-project-manager', 'ebtp-purchase'])} type="primary" loading={loading} onClick={() => {
let pass = false;
@ -776,6 +835,11 @@ const JudgingPanel: React.FC<{}> = () => {
const bidCount = parseInt(formVals.representativeNumber) + parseInt(formVals.expertNumber);
if (pass) {
pass = checkMan(bidCount, parseInt(formVals.expertNumber));
}
if (pass) {
pass = checkSpecialityUnique();
}
if (pass) {
pass = checkData(finalVals)
}
const st = moment(formVals.startTime).format('yyyy-MM-DD HH:mm:ss');
@ -791,7 +855,7 @@ const JudgingPanel: React.FC<{}> = () => {
formVals.startTime != undefined ? formVals.startTime = formVals.startTime.format('yyyy-MM-DD HH:mm:ss') : null;
formVals.endTime != undefined ? formVals.endTime = formVals.endTime.format('yyyy-MM-DD HH:mm:ss') : null;
const _cqData = cqData.length > 0 ? [{ ...cqData[0], extractNumber: count }] : [{ category: "2", extractMethod: "2", extractNumber: count, subCategory: "4" }]//抽取数量录入
let params = { ...formVals, juryRoomList: juryRoomList, projectId: proId, juryCategoryVOList: _cqData, reserveStatus: 0,extractSpecialityList:enhancedData };
let params = { ...formVals, juryRoomList: juryRoomList, projectId: proId, juryCategoryVOList: _cqData, reserveStatus: 0, extractSpecialityList: enhancedData };
if (updateData != undefined) {
params['id'] = updateData.id;
}
@ -802,6 +866,9 @@ const JudgingPanel: React.FC<{}> = () => {
}
setModalVis(false);
updateDataSet({});
setCheckedList([]);
setTableData([]);
form.resetFields();
}
loadingSet(false);
})
@ -1004,7 +1071,7 @@ const JudgingPanel: React.FC<{}> = () => {
return (
<>
{daibiao.juryMemberList != undefined ?
<Panel header={`采购人代表(最大人数:${daibiao.extractNumber})`} key="1">
<Panel header={`直接录入数量(最大人数:${daibiao.extractNumber})`} key="1">
<ProTable
key='proTable1'
columns={columnsMember}
@ -1350,7 +1417,7 @@ const JudgingPanel: React.FC<{}> = () => {
</div>}
>
{daibiao.juryMemberList != undefined ? <>
{returnHeader('采购人代表')}
{returnHeader('直接录入专家')}
{returnCheckBox(daibiao.juryMemberList)}
</> : null}
{jishu.juryMemberList != undefined ? <>
@ -1366,7 +1433,7 @@ const JudgingPanel: React.FC<{}> = () => {
{returnCheckBox(falv.juryMemberList)}
</> : null}
{qita.juryMemberList != undefined ? <>
{returnHeader('其它类专家')}
{returnHeader('抽取专家')}
{returnCheckBox(qita.juryMemberList)}
</> : null}
<br /><br />
@ -1391,7 +1458,7 @@ const JudgingPanel: React.FC<{}> = () => {
params.push(...daibiao.juryMemberList)
} else {
chackNum = false;
message.error('代表人数不符合规定!');
message.error('直接录入人数不符合规定!');
}
}
if (jishu.juryMemberList != undefined) {
@ -1423,7 +1490,7 @@ const JudgingPanel: React.FC<{}> = () => {
params.push(...qita.juryMemberList)
} else {
chackNum = false;
message.error('其它类人数不符合规定!');
message.error('抽取人数不符合规定!');
}
}

View File

@ -16,7 +16,7 @@ export async function getSecs(params?: any) {
}
//删除
export async function delOne(params?: any) {
return request(`/api/biz-service-ebtp-rsms/v1/jury/info/${params.id}`, {
return request(`/api/biz-service-ebtp-rsms/v1/jury/info/del/${params.id}`, {
method: 'POST'
});
}