准入人员选择问题修复
This commit is contained in:
@ -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 });
|
||||||
|
}
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
{/* 评审人员选择 */}
|
{/* 评审人员选择 */}
|
||||||
|
@ -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) => {
|
||||||
|
return (
|
||||||
|
record.deleteType ? (
|
||||||
<Input
|
<Input
|
||||||
value={text}
|
value={text}
|
||||||
|
maxLength={200}
|
||||||
onChange={e => {
|
onChange={e => {
|
||||||
const newData = [...data];
|
const newData = [...data];
|
||||||
newData[index].itemName = e.target.value;
|
newData[index].itemName = e.target.value;
|
||||||
setData(newData);
|
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) => {
|
||||||
|
const deleteType = record.deleteType;
|
||||||
|
return (
|
||||||
|
deleteType ? (
|
||||||
<Button
|
<Button
|
||||||
danger
|
|
||||||
disabled={data.length === 1}
|
disabled={data.length === 1}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
const newData = data.filter((_, i) => i !== index);
|
const newData = data.filter((_, i) => i !== index);
|
||||||
setData(newData);
|
setData(newData);
|
||||||
}}
|
}}
|
||||||
>删除</Button>
|
>
|
||||||
),
|
删除
|
||||||
|
</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 }}>
|
||||||
|
@ -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}
|
||||||
|
Reference in New Issue
Block a user