This commit is contained in:
linxd
2025-07-16 16:24:58 +08:00
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);
form.setFieldsValue({ supplier: selected });
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 = {
key: string;
itemName: string;
deleteType: Boolean;
reviewerChecks: ReviewerChecks;
};
//列表头接口
@ -44,10 +45,17 @@ const DivisionModal: React.FC<{
r => reviewerSelector.leader && r.userId !== reviewerSelector.leader.userId
), [reviewerSelector]
);
//列表数据渲染 -默认第一条
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);
};
//列表头
const columns: ColumnsType<ColumnsRow> = [
{
@ -74,16 +83,23 @@ const DivisionModal: React.FC<{
dataIndex: 'itemName',
fixed: 'left',
width: 360,
render: (text: string, record: any, index: number) => (
<Input
value={text}
onChange={e => {
const newData = [...data];
newData[index].itemName = e.target.value;
setData(newData);
}}
/>
),
render: (text: string, record: any, index: number) => {
return (
record.deleteType ? (
<Input
value={text}
maxLength={200}
onChange={e => {
const newData = [...data];
newData[index].itemName = e.target.value;
setData(newData);
}}
/>
) : (
<span>{text}</span>
)
)
}
},
...nonLeaderReviewers.map(r => ({
title: (
@ -92,7 +108,7 @@ const DivisionModal: React.FC<{
checked={data.every(row => row.reviewerChecks?.[r.userId])}
>{r.name}</Checkbox>
),
width: 140,
width: 120,
dataIndex: r.userId,
render: (val: any, record: any, rowIndex: number) => (
<Checkbox
@ -104,22 +120,34 @@ const DivisionModal: React.FC<{
{
title: '操作',
fixed: 'right',
width: '80px',
render: (text: any, record: any, index: number) => (
<Button
danger
disabled={data.length === 1}
onClick={() => {
const newData = data.filter((_, i) => i !== index);
setData(newData);
}}
></Button>
),
width: 80,
render: (text: any, record: any, index: number) => {
const deleteType = record.deleteType;
return (
deleteType ? (
<Button
disabled={data.length === 1}
onClick={() => {
const newData = data.filter((_, i) => i !== index);
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 newRow = { key: Date.now().toString(), itemName: '', reviewerChecks: {} };
const newRow = { key: Date.now().toString(), itemName: '', reviewerChecks: {}, deleteType: true };
setData([...data, newRow]);
};
@ -133,7 +161,9 @@ const DivisionModal: React.FC<{
dataSource={data}
rowKey="key"
pagination={false}
scroll={{ x: true }}
scroll={{ x: totalWidth, y: 'calc(100vh - 450px)' }}
style={{ flex: 1, minHeight: 0 }}
/>
<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 type { ColumnsType } from 'antd/es/table';
@ -59,7 +59,7 @@ const ReviewerSelector: React.FC<ReviewerSelectorProps> = ({
// 本地已选 & 组长
const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([]);
const [leaderUserId, setLeaderUserId] = useState<string>('');
const [allData, setAllData] = useState<Reviewer[]>([]);
// 回显
useEffect(() => {
if (visible) {
@ -79,19 +79,19 @@ const ReviewerSelector: React.FC<ReviewerSelectorProps> = ({
const { code, data } = res;
if(code == 200) {
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);
}
})
.finally(() => setLoading(false));
}, [visible, page, pageSize]);
// 当前已选项(全局选中的都能做组长)
// const selectedReviewerObjs = useMemo(
// () => data.filter((item) => selectedRowKeys.includes(item.userId)),
// [data, selectedRowKeys]
// );
// 列
const columns: ColumnsType<Reviewer> = [
{ title: '姓名', dataIndex: 'name' },
{ title: '工号', dataIndex: 'userId' },
@ -123,13 +123,13 @@ const ReviewerSelector: React.FC<ReviewerSelectorProps> = ({
return;
}
// 组长和其他人员isLeader赋值
const selected = data
const selected = allData
.filter((item) => selectedRowKeys.includes(item.userId))
.map((item) => ({
...item,
isLeader: item.userId === leaderUserId ? 1 : 0,
}));
console.log(selected);
console.log(selected,'selected');
// 完整数据传回
onSelect?.({
@ -153,10 +153,18 @@ const ReviewerSelector: React.FC<ReviewerSelectorProps> = ({
type: 'checkbox',
selectedRowKeys,
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}
dataSource={data}