准入人员选择问题修复

This commit is contained in:
孙景学
2025-07-16 16:20:52 +08:00
parent 612082dedb
commit 1fcc0e7d44
3 changed files with 86 additions and 40 deletions

View File

@ -509,6 +509,14 @@ const CreateModal: React.FC<{ visible: boolean; onCancel: () => void; }> = ({ vi
setSelectedSuppliers(selected); setSelectedSuppliers(selected);
form.setFieldsValue({ supplier: selected }); form.setFieldsValue({ supplier: selected });
setSupplierModalVisible(false); setSupplierModalVisible(false);
const accessWorkName = form.getFieldValue('accessWorkName');
if(!accessWorkName) {
if(selected.length > 0 ) {
console.log(selected,'accessWorkName');
const suppliersName = `${selected[0].supplierType === 'ovs'? selected[0].nameEn:selected[0].name}${selected.length > 1? '等':'' }`
form.setFieldsValue({ 'accessWorkName': suppliersName });
}
}
}} }}
/> />
{/* 评审人员选择 */} {/* 评审人员选择 */}

View File

@ -23,6 +23,7 @@ type ReviewerChecks = {
type DivisionRow = { type DivisionRow = {
key: string; key: string;
itemName: string; itemName: string;
deleteType: Boolean;
reviewerChecks: ReviewerChecks; reviewerChecks: ReviewerChecks;
}; };
//列表头接口 //列表头接口
@ -47,7 +48,14 @@ const DivisionModal: React.FC<{
//列表数据渲染 -默认第一条 //列表数据渲染 -默认第一条
const [data, setData] = useState<DivisionRow[]>([ const [data, setData] = useState<DivisionRow[]>([
{ key: '1', itemName: '合规检查', reviewerChecks: {} }, { key: '1', itemName: '供应商信息登记表', reviewerChecks: {}, deleteType: false },
{ key: '2', itemName: '供应商反商业贿赂承诺书', reviewerChecks: {}, deleteType: false },
{ key: '3', itemName: '供应商社会准则符合性自审问卷', reviewerChecks: {}, deleteType: false },
{ key: '4', itemName: '是否为禁止使用供应商', reviewerChecks: {}, deleteType: false },
{ key: '5', itemName: '3年内在经营活动中没有重大违法记录的书面声明', reviewerChecks: {}, deleteType: false },
{ key: '6', itemName: '企业存续状态审核(营业执照等)', reviewerChecks: {}, deleteType: false },
{ key: '7', itemName: '行业资质、认证情况(按需)', reviewerChecks: {}, deleteType: false },
{ key: '8', itemName: '现场考察、产品试用情况(按需)', reviewerChecks: {}, deleteType: false },
]); ]);
// 评审项 选择 // 评审项 选择
@ -67,6 +75,7 @@ const DivisionModal: React.FC<{
})); }));
setData(newData); setData(newData);
}; };
//列表头 //列表头
const columns: ColumnsType<ColumnsRow> = [ const columns: ColumnsType<ColumnsRow> = [
{ {
@ -74,16 +83,23 @@ const DivisionModal: React.FC<{
dataIndex: 'itemName', dataIndex: 'itemName',
fixed: 'left', fixed: 'left',
width: 360, width: 360,
render: (text: string, record: any, index: number) => ( render: (text: string, record: any, index: number) => {
<Input return (
value={text} record.deleteType ? (
onChange={e => { <Input
const newData = [...data]; value={text}
newData[index].itemName = e.target.value; maxLength={200}
setData(newData); onChange={e => {
}} const newData = [...data];
/> newData[index].itemName = e.target.value;
), setData(newData);
}}
/>
) : (
<span>{text}</span>
)
)
}
}, },
...nonLeaderReviewers.map(r => ({ ...nonLeaderReviewers.map(r => ({
title: ( title: (
@ -92,7 +108,7 @@ const DivisionModal: React.FC<{
checked={data.every(row => row.reviewerChecks?.[r.userId])} checked={data.every(row => row.reviewerChecks?.[r.userId])}
>{r.name}</Checkbox> >{r.name}</Checkbox>
), ),
width: 140, width: 120,
dataIndex: r.userId, dataIndex: r.userId,
render: (val: any, record: any, rowIndex: number) => ( render: (val: any, record: any, rowIndex: number) => (
<Checkbox <Checkbox
@ -104,22 +120,34 @@ const DivisionModal: React.FC<{
{ {
title: '操作', title: '操作',
fixed: 'right', fixed: 'right',
width: '80px', width: 80,
render: (text: any, record: any, index: number) => ( render: (text: any, record: any, index: number) => {
<Button const deleteType = record.deleteType;
danger return (
disabled={data.length === 1} deleteType ? (
onClick={() => { <Button
const newData = data.filter((_, i) => i !== index); disabled={data.length === 1}
setData(newData); onClick={() => {
}} const newData = data.filter((_, i) => i !== index);
></Button> setData(newData);
), }}
>
</Button>
) : null
)
},
}, },
]; ];
const totalWidth = columns.reduce((sum, col) => {
// 只用 number 类型的宽度
const w = typeof col.width === 'number' ? col.width : 120;
return sum + w;
}, 0);
//增加行 //增加行
const addRow = () => { const addRow = () => {
const newRow = { key: Date.now().toString(), itemName: '', reviewerChecks: {} }; const newRow = { key: Date.now().toString(), itemName: '', reviewerChecks: {}, deleteType: true };
setData([...data, newRow]); setData([...data, newRow]);
}; };
@ -133,7 +161,9 @@ const DivisionModal: React.FC<{
dataSource={data} dataSource={data}
rowKey="key" rowKey="key"
pagination={false} pagination={false}
scroll={{ x: true }} scroll={{ x: totalWidth, y: 'calc(100vh - 450px)' }}
style={{ flex: 1, minHeight: 0 }}
/> />
<div style={{ textAlign: 'right', marginTop: 16 }}> <div style={{ textAlign: 'right', marginTop: 16 }}>

View File

@ -1,4 +1,4 @@
import React, { useState, useEffect, useMemo } from 'react'; import React, { useState, useEffect, useRef } from 'react';
import { Modal, Table, Radio, Button, message } from 'antd'; import { Modal, Table, Radio, Button, message } from 'antd';
import type { ColumnsType } from 'antd/es/table'; import type { ColumnsType } from 'antd/es/table';
@ -59,7 +59,7 @@ const ReviewerSelector: React.FC<ReviewerSelectorProps> = ({
// 本地已选 & 组长 // 本地已选 & 组长
const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([]); const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([]);
const [leaderUserId, setLeaderUserId] = useState<string>(''); const [leaderUserId, setLeaderUserId] = useState<string>('');
const [allData, setAllData] = useState<Reviewer[]>([]);
// 回显 // 回显
useEffect(() => { useEffect(() => {
if (visible) { if (visible) {
@ -79,19 +79,19 @@ const ReviewerSelector: React.FC<ReviewerSelectorProps> = ({
const { code, data } = res; const { code, data } = res;
if(code == 200) { if(code == 200) {
setData(orgIdAndDeptId(data.records)); setData(orgIdAndDeptId(data.records));
setAllData(prevAllData => {
const newData = orgIdAndDeptId(data.records);
const merged = [...prevAllData, ...newData];
// userId 唯一去重
return Array.from(new Map(merged.map(item => [item.userId, item])).values());
});
setTotal(data.total); setTotal(data.total);
} }
}) })
.finally(() => setLoading(false)); .finally(() => setLoading(false));
}, [visible, page, pageSize]); }, [visible, page, pageSize]);
// 当前已选项(全局选中的都能做组长)
// const selectedReviewerObjs = useMemo(
// () => data.filter((item) => selectedRowKeys.includes(item.userId)),
// [data, selectedRowKeys]
// );
// 列
const columns: ColumnsType<Reviewer> = [ const columns: ColumnsType<Reviewer> = [
{ title: '姓名', dataIndex: 'name' }, { title: '姓名', dataIndex: 'name' },
{ title: '工号', dataIndex: 'userId' }, { title: '工号', dataIndex: 'userId' },
@ -123,13 +123,13 @@ const ReviewerSelector: React.FC<ReviewerSelectorProps> = ({
return; return;
} }
// 组长和其他人员isLeader赋值 // 组长和其他人员isLeader赋值
const selected = data const selected = allData
.filter((item) => selectedRowKeys.includes(item.userId)) .filter((item) => selectedRowKeys.includes(item.userId))
.map((item) => ({ .map((item) => ({
...item, ...item,
isLeader: item.userId === leaderUserId ? 1 : 0, isLeader: item.userId === leaderUserId ? 1 : 0,
})); }));
console.log(selected); console.log(selected,'selected');
// 完整数据传回 // 完整数据传回
onSelect?.({ onSelect?.({
@ -153,10 +153,18 @@ const ReviewerSelector: React.FC<ReviewerSelectorProps> = ({
type: 'checkbox', type: 'checkbox',
selectedRowKeys, selectedRowKeys,
onChange: (keys) => { onChange: (keys) => {
setSelectedRowKeys(keys); // 当前页所有userId
const pageUserIds = data.map(item => item.userId);
// 把上一页的、非本页的key留下
let merged = selectedRowKeys.filter(key => !pageUserIds.includes(key as string));
// 再加上当前页选中的key
merged = [...merged, ...keys];
// 去重
merged = Array.from(new Set(merged));
setSelectedRowKeys(merged);
// 如果组长不在新选中里,清掉 // 如果组长不在新选中里,清掉
if (!keys.includes(leaderUserId)) setLeaderUserId(''); if (!merged.includes(leaderUserId)) setLeaderUserId('');
}, }
}} }}
columns={columns} columns={columns}
dataSource={data} dataSource={data}