评审小组
This commit is contained in:
@ -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('抽取人数不符合规定!');
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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'
|
||||
});
|
||||
}
|
||||
|
Reference in New Issue
Block a user