Merge branch 'dev' of http://59.110.10.99:53000/liuc/fe_supplier_frontend into dev
This commit is contained in:
@ -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 });
|
||||
}
|
||||
}
|
||||
}}
|
||||
/>
|
||||
{/* 评审人员选择 */}
|
||||
|
@ -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 }}>
|
||||
|
@ -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}
|
||||
|
Reference in New Issue
Block a user