整理接口定义规范
This commit is contained in:
@ -1,13 +1,12 @@
|
||||
import React from 'react';
|
||||
import { Modal } from 'antd';
|
||||
import EvaluateTaskPersonnelSelector from '@/components/EvaluateTaskPersonnelSelector/EvaluateTaskPersonnelSelector';
|
||||
import type { PersonnelItem } from '@/servers/types/evaluator';
|
||||
|
||||
interface BatchEvaluatorModalProps {
|
||||
visible: boolean;
|
||||
onCancel: () => void;
|
||||
onSelect: (selectedEvaluators: PersonnelItem[]) => void;
|
||||
selectedPersonnel?: PersonnelItem[];
|
||||
onSelect: (selectedEvaluators: supplierAnnualTaskManage.PersonnelItem[]) => void;
|
||||
selectedPersonnel?: supplierAnnualTaskManage.PersonnelItem[];
|
||||
filter?: boolean;
|
||||
filterUserIds?: string[];
|
||||
}
|
||||
@ -20,9 +19,40 @@ const BatchEvaluatorModal: React.FC<BatchEvaluatorModalProps> = ({
|
||||
filter,
|
||||
filterUserIds,
|
||||
}) => {
|
||||
// 将 API.PersonnelItem 转换为 supplierAnnualTaskManage.PersonnelItem
|
||||
const convertToTaskPersonnel = (items: API.PersonnelItem[]): supplierAnnualTaskManage.PersonnelItem[] => {
|
||||
return items.map(item => ({
|
||||
id: item.id,
|
||||
name: item.name,
|
||||
userId: item.id, // 使用 id 作为 userId
|
||||
userName: item.name, // 使用 name 作为 userName
|
||||
userDept: item.userDept,
|
||||
userDeptId: item.userDeptId,
|
||||
position: item.position || '',
|
||||
isSelected: item.isSelected
|
||||
}));
|
||||
};
|
||||
|
||||
// 将 supplierAnnualTaskManage.PersonnelItem 转换为 API.PersonnelItem
|
||||
const convertToAPIPersonnel = (items: supplierAnnualTaskManage.PersonnelItem[]): API.PersonnelItem[] => {
|
||||
return items.map(item => ({
|
||||
id: item.id,
|
||||
name: item.name,
|
||||
userDept: item.userDept,
|
||||
userDeptId: item.userDeptId,
|
||||
position: item.position,
|
||||
isSelected: item.isSelected // 默认值
|
||||
}));
|
||||
};
|
||||
|
||||
// 处理选择事件,将 API.PersonnelItem 转换为 supplierAnnualTaskManage.PersonnelItem
|
||||
const handleSelect = (apiPersonnel: API.PersonnelItem[]) => {
|
||||
onSelect(convertToTaskPersonnel(apiPersonnel));
|
||||
};
|
||||
|
||||
return (
|
||||
<Modal
|
||||
title="批量选择评价人员"
|
||||
title="批量选择年审人员"
|
||||
visible={visible}
|
||||
onCancel={onCancel}
|
||||
footer={null}
|
||||
@ -30,8 +60,8 @@ const BatchEvaluatorModal: React.FC<BatchEvaluatorModalProps> = ({
|
||||
destroyOnClose={false}
|
||||
>
|
||||
<EvaluateTaskPersonnelSelector
|
||||
onSelect={onSelect}
|
||||
selectedPersonnel={selectedPersonnel}
|
||||
onSelect={handleSelect}
|
||||
selectedPersonnel={convertToAPIPersonnel(selectedPersonnel)}
|
||||
filter={filter}
|
||||
filterUserIds={filterUserIds}
|
||||
onClose={onCancel}
|
||||
|
@ -1,14 +1,18 @@
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { Modal, Button, List, message } from 'antd';
|
||||
import EvaluateTaskPersonnelSelector from '@/components/EvaluateTaskPersonnelSelector/EvaluateTaskPersonnelSelector';
|
||||
import { ModalMode } from '@/servers/types/evaluator';
|
||||
import type { PersonnelItem, SupplierItem } from '@/servers/types/evaluator';
|
||||
|
||||
// 模态框模式枚举
|
||||
enum ModalMode {
|
||||
SELECT = 'select', // 选择模式
|
||||
VIEW = 'view', // 查看模式
|
||||
}
|
||||
|
||||
interface SupplierEvaluatorModalProps {
|
||||
visible: boolean; // 控制弹窗显示/隐藏
|
||||
onCancel: () => void; // 取消按钮回调函数
|
||||
onSelect: (personnel: PersonnelItem[]) => void; // 选择人员后的回调函数
|
||||
currentSupplier: SupplierItem | null; // 当前操作的供应商对象
|
||||
onSelect: (personnel: supplierAnnualTaskManage.PersonnelItem[]) => void; // 选择人员后的回调函数
|
||||
currentSupplier: supplierAnnualTaskManage.SupplierItem | null; // 当前操作的供应商对象
|
||||
mode: ModalMode; // 弹窗模式:SELECT(选择) 或 VIEW(查看)
|
||||
filter?: boolean; // 是否过滤评价人员
|
||||
filterUserIds?: string[]; // 过滤评价人员ID列表
|
||||
@ -24,7 +28,7 @@ const SupplierEvaluatorModal: React.FC<SupplierEvaluatorModalProps> = ({
|
||||
filterUserIds,
|
||||
}) => {
|
||||
// 本地保存当前选中的人员,确保在弹窗打开/关闭时能正确处理数据
|
||||
const [localSelectedPersonnel, setLocalSelectedPersonnel] = useState<PersonnelItem[]>([]);
|
||||
const [localSelectedPersonnel, setLocalSelectedPersonnel] = useState<supplierAnnualTaskManage.PersonnelItem[]>([]);
|
||||
|
||||
// 当currentSupplier变化时,更新本地的选中人员
|
||||
useEffect(() => {
|
||||
@ -35,14 +39,41 @@ const SupplierEvaluatorModal: React.FC<SupplierEvaluatorModalProps> = ({
|
||||
}
|
||||
}, [currentSupplier]);
|
||||
|
||||
// 将 API.PersonnelItem 转换为 supplierAnnualTaskManage.PersonnelItem
|
||||
const convertToTaskPersonnel = (items: API.PersonnelItem[]): supplierAnnualTaskManage.PersonnelItem[] => {
|
||||
return items.map(item => ({
|
||||
id: item.id,
|
||||
name: item.name,
|
||||
userId: item.id, // 使用 id 作为 userId
|
||||
userName: item.name, // 使用 name 作为 userName
|
||||
userDept: item.userDept,
|
||||
userDeptId: item.userDeptId,
|
||||
position: item.position || '',
|
||||
isSelected: item.isSelected
|
||||
}));
|
||||
};
|
||||
|
||||
// 将 supplierAnnualTaskManage.PersonnelItem 转换为 API.PersonnelItem
|
||||
const convertToAPIPersonnel = (items: supplierAnnualTaskManage.PersonnelItem[]): API.PersonnelItem[] => {
|
||||
return items.map(item => ({
|
||||
id: item.id,
|
||||
name: item.name,
|
||||
userDept: item.userDept,
|
||||
userDeptId: item.userDeptId,
|
||||
position: item.position,
|
||||
isSelected: item.isSelected // 默认值
|
||||
}));
|
||||
};
|
||||
|
||||
// 处理选择人员的回调
|
||||
const handleSelect = (personnel: PersonnelItem[]) => {
|
||||
const handleSelect = (personnel: API.PersonnelItem[]) => {
|
||||
if (personnel.length === 0) {
|
||||
message.warning('请至少选择一名评价人员');
|
||||
return;
|
||||
}
|
||||
setLocalSelectedPersonnel(personnel);
|
||||
onSelect(personnel);
|
||||
const convertedPersonnel = convertToTaskPersonnel(personnel);
|
||||
setLocalSelectedPersonnel(convertedPersonnel);
|
||||
onSelect(convertedPersonnel);
|
||||
};
|
||||
|
||||
// 渲染评价人员列表(用于查看模式)
|
||||
@ -64,7 +95,7 @@ const SupplierEvaluatorModal: React.FC<SupplierEvaluatorModalProps> = ({
|
||||
<List
|
||||
itemLayout="horizontal"
|
||||
dataSource={currentSupplier.evaluators}
|
||||
renderItem={(item: PersonnelItem) => (
|
||||
renderItem={(item: supplierAnnualTaskManage.PersonnelItem) => (
|
||||
<List.Item>
|
||||
<List.Item.Meta
|
||||
title={item.name}
|
||||
@ -101,7 +132,7 @@ const SupplierEvaluatorModal: React.FC<SupplierEvaluatorModalProps> = ({
|
||||
onSelect={handleSelect}
|
||||
filter={filter}
|
||||
filterUserIds={filterUserIds}
|
||||
selectedPersonnel={localSelectedPersonnel}
|
||||
selectedPersonnel={convertToAPIPersonnel(localSelectedPersonnel)}
|
||||
onClose={onCancel}
|
||||
/>
|
||||
) : (
|
||||
|
@ -1,13 +1,12 @@
|
||||
import React, { useEffect } from 'react';
|
||||
import { Table, Space, Button, Tag, Modal, Tooltip } from 'antd';
|
||||
import type { SupplierItem } from '@/servers/types/evaluator';
|
||||
import React from 'react';
|
||||
import { Table, Space, Button, Modal, Tooltip } from 'antd';
|
||||
|
||||
interface SupplierTableProps {
|
||||
suppliers: SupplierItem[]; // 供应商数据列表
|
||||
suppliers: supplierAnnualTaskManage.SupplierItem[]; // 供应商数据列表
|
||||
selectedRowKeys: React.Key[]; // 选中的行keys
|
||||
onSelectChange: (selectedRowKeys: React.Key[]) => void; // 选择行变化的回调
|
||||
onViewEvaluators: (supplier: SupplierItem) => void; // 查看评价人员的回调
|
||||
onSelectEvaluators: (supplier: SupplierItem) => void; // 选择评价人员的回调
|
||||
onViewEvaluators: (supplier: supplierAnnualTaskManage.SupplierItem) => void; // 查看评价人员的回调
|
||||
onSelectEvaluators: (supplier: supplierAnnualTaskManage.SupplierItem) => void; // 选择评价人员的回调
|
||||
onDeleteSupplier: (key: string) => void; // 删除供应商的回调
|
||||
mode?: string; // 模式
|
||||
}
|
||||
@ -28,11 +27,11 @@ const SupplierTable: React.FC<SupplierTableProps> = ({
|
||||
};
|
||||
|
||||
// 删除确认对话框
|
||||
const showDeleteConfirm = (record: SupplierItem) => {
|
||||
const showDeleteConfirm = (record: supplierAnnualTaskManage.SupplierItem) => {
|
||||
Modal.confirm({
|
||||
title: '确定要删除此供应商吗?',
|
||||
content: `供应商: ${record.supplierName}${
|
||||
record.evaluatorCount > 0 ? `,将同时删除 ${record.evaluatorCount} 名关联的评价人员` : ''
|
||||
record.evaluatorCount && record.evaluatorCount > 0 ? `,将同时删除 ${record.evaluatorCount} 名关联的评价人员` : ''
|
||||
}`,
|
||||
okText: '确定',
|
||||
okType: 'danger',
|
||||
@ -77,7 +76,7 @@ const SupplierTable: React.FC<SupplierTableProps> = ({
|
||||
{
|
||||
title: '操作',
|
||||
key: 'action',
|
||||
render: (_: any, record: SupplierItem) => (
|
||||
render: (_: any, record: supplierAnnualTaskManage.SupplierItem) => (
|
||||
<Space>
|
||||
<Button
|
||||
type="link"
|
||||
|
@ -5,15 +5,17 @@ import {
|
||||
SupplierTable,
|
||||
BatchEvaluatorModal,
|
||||
SupplierEvaluatorModal,
|
||||
WeightSettingModal,
|
||||
} from './EvaluatorComponents';
|
||||
import { ModalMode } from '@/servers/types/evaluator';
|
||||
import type { PersonnelItem, SupplierItem } from '@/servers/types/evaluator';
|
||||
import type { DeptWeightItem } from '@/servers/dao/supplierEvaluateTask';
|
||||
import type { Dispatch } from 'umi';
|
||||
import { connect } from 'umi';
|
||||
import type { SupplierTaskModelState } from '@/models/supplierAnnualTaskManage';
|
||||
|
||||
// 模态框模式枚举
|
||||
enum ModalMode {
|
||||
SELECT = 'select', // 选择模式
|
||||
VIEW = 'view', // 查看模式
|
||||
}
|
||||
|
||||
/**
|
||||
* 组件接收的Props接口
|
||||
* supplierAnnualTaskManage: Dva model 状态
|
||||
@ -44,33 +46,27 @@ const EvaluatorSelectStepComponent = (props: EvaluatorSelectStepProps) => {
|
||||
const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([]);
|
||||
|
||||
// 供应商列表数据,包含评价人员信息(从Dva model获取初始数据,维护在本地状态)
|
||||
const [suppliers, setSuppliers] = useState<SupplierItem[]>([]);
|
||||
const [suppliers, setSuppliers] = useState<supplierAnnualTaskManage.SupplierItem[]>([]);
|
||||
|
||||
// 批量选择模态框的可见性控制
|
||||
const [batchSelectModalVisible, setBatchSelectModalVisible] = useState(false);
|
||||
|
||||
// 权重设置模态框的可见性控制
|
||||
const [weightSettingModalVisible, setWeightSettingModalVisible] = useState(false);
|
||||
|
||||
// 评价人员选择/查看模态框的可见性控制
|
||||
const [evaluatorModalVisible, setEvaluatorModalVisible] = useState(false);
|
||||
|
||||
// 当前操作的供应商对象,用于评价人员的选择和查看
|
||||
const [currentSupplier, setCurrentSupplier] = useState<SupplierItem | null>(null);
|
||||
const [currentSupplier, setCurrentSupplier] = useState<supplierAnnualTaskManage.SupplierItem | null>(null);
|
||||
|
||||
// 模态框模式:SELECT(选择模式) 或 VIEW(查看模式)
|
||||
const [modalMode, setModalMode] = useState<ModalMode>(ModalMode.SELECT);
|
||||
|
||||
// 权重单位列表,根据评价人员部门动态生成
|
||||
const [taskDeptWeightList, setTaskDeptWeightList] = useState<DeptWeightItem[]>([]);
|
||||
|
||||
// 表单实例,用于权重设置
|
||||
const [form] = Form.useForm();
|
||||
const [filterUserIds, setFilterUserIds] = useState<string[]>([]);
|
||||
useEffect(() => {
|
||||
if (mode === 'division' && taskFormData.userList && taskFormData.userList.length > 0) {
|
||||
const filterUserIdsaa = taskFormData.userList
|
||||
.map((user: PersonnelItem) => (user.isSelected === true ? user.id : null))
|
||||
.map((user: any) => (user.isSelected === true ? user.id : null))
|
||||
.filter((id: string | null) => id !== null);
|
||||
setFilterUserIds(filterUserIdsaa);
|
||||
}
|
||||
@ -108,7 +104,7 @@ const EvaluatorSelectStepComponent = (props: EvaluatorSelectStepProps) => {
|
||||
if (taskFormData.selectedSuppliers && taskFormData.selectedSuppliers.length > 0) {
|
||||
// 转换上一步的供应商数据,添加评价人员数量字段
|
||||
const suppliersWithEvaluators = taskFormData.selectedSuppliers.map(
|
||||
(supplier: SupplierItem) => {
|
||||
(supplier: supplierAnnualTaskManage.SupplierItem) => {
|
||||
// 确保evaluators字段存在且为数组
|
||||
const evaluators = supplier.evaluators || [];
|
||||
return {
|
||||
@ -137,11 +133,11 @@ const EvaluatorSelectStepComponent = (props: EvaluatorSelectStepProps) => {
|
||||
*/
|
||||
const updateFormData = (updatedData: any) => {
|
||||
// 结构 更新数据中的suppliersWithEvaluators
|
||||
const { suppliersWithEvaluators }: { suppliersWithEvaluators: SupplierItem[] } = updatedData;
|
||||
const { suppliersWithEvaluators }: { suppliersWithEvaluators: supplierAnnualTaskManage.SupplierItem[] } = updatedData;
|
||||
// 构建供应商ID列表
|
||||
const supplierIds = suppliersWithEvaluators.map((supplier) => ({
|
||||
suppliedId: supplier.id,
|
||||
userIds: supplier.evaluators?.map((e: PersonnelItem) => e.id) || [],
|
||||
userIds: supplier.evaluators?.map((e: supplierAnnualTaskManage.PersonnelItem) => e.id) || [],
|
||||
}));
|
||||
|
||||
// 构建userList 并去重,确保保留 isSelected 为 true 的对象
|
||||
@ -150,7 +146,7 @@ const EvaluatorSelectStepComponent = (props: EvaluatorSelectStepProps) => {
|
||||
.flatMap((s) => s.evaluators || [])
|
||||
.forEach((user) => {
|
||||
// 如果已存在此ID的用户且当前用户isSelected为true,或者Map中不存在此用户,则更新/添加
|
||||
if (!userMap.has(user.id) || user.isSelected) {
|
||||
if (!userMap.has(user.id) || (user as any).isSelected) {
|
||||
userMap.set(user.id, user);
|
||||
}
|
||||
});
|
||||
@ -182,7 +178,7 @@ const EvaluatorSelectStepComponent = (props: EvaluatorSelectStepProps) => {
|
||||
* 打开评价人员选择模态框
|
||||
* @param supplier 当前选中的供应商
|
||||
*/
|
||||
const handleSelectEvaluators = (supplier: SupplierItem) => {
|
||||
const handleSelectEvaluators = (supplier: supplierAnnualTaskManage.SupplierItem) => {
|
||||
setCurrentSupplier(supplier);
|
||||
setModalMode(ModalMode.SELECT);
|
||||
setEvaluatorModalVisible(true);
|
||||
@ -193,7 +189,7 @@ const EvaluatorSelectStepComponent = (props: EvaluatorSelectStepProps) => {
|
||||
* 打开评价人员查看模态框
|
||||
* @param supplier 当前选中的供应商
|
||||
*/
|
||||
const handleViewEvaluators = (supplier: SupplierItem) => {
|
||||
const handleViewEvaluators = (supplier: supplierAnnualTaskManage.SupplierItem) => {
|
||||
// 查找完整的供应商数据(包括evaluators)
|
||||
const fullSupplier = suppliers.find((s) => s.id === supplier.id);
|
||||
if (fullSupplier) {
|
||||
@ -211,7 +207,7 @@ const EvaluatorSelectStepComponent = (props: EvaluatorSelectStepProps) => {
|
||||
* 更新供应商的评价人员列表并同步到 Dva model
|
||||
* @param selectedEvaluators 选中的评价人员列表
|
||||
*/
|
||||
const handleEvaluatorSelect = (selectedEvaluators: PersonnelItem[]) => {
|
||||
const handleEvaluatorSelect = (selectedEvaluators: supplierAnnualTaskManage.PersonnelItem[]) => {
|
||||
if (!currentSupplier) return;
|
||||
// 更新当前供应商的评价人员列表
|
||||
const updatedSuppliers = suppliers.map((supplier) => {
|
||||
@ -241,7 +237,7 @@ const EvaluatorSelectStepComponent = (props: EvaluatorSelectStepProps) => {
|
||||
* 批量更新供应商的评价人员列表并同步到 Dva model
|
||||
* @param selectedEvaluators 选中的评价人员列表
|
||||
*/
|
||||
const handleBatchEvaluatorSelect = (selectedEvaluators: PersonnelItem[]) => {
|
||||
const handleBatchEvaluatorSelect = (selectedEvaluators: supplierAnnualTaskManage.PersonnelItem[]) => {
|
||||
if (selectedRowKeys.length === 0) return;
|
||||
|
||||
// 更新所有选中供应商的评价人员列表
|
||||
@ -288,7 +284,7 @@ const EvaluatorSelectStepComponent = (props: EvaluatorSelectStepProps) => {
|
||||
// 渲染组件
|
||||
return (
|
||||
<div className={styles.evaluatorSelectStep}>
|
||||
<Card title="选择年审人员" bordered={false} className="inner-card">
|
||||
<Card title="选择评价人员" bordered={false} className="inner-card">
|
||||
{/* 工具栏区域 */}
|
||||
{mode !== 'division' && (
|
||||
<div className={styles.toolbar}>
|
||||
@ -298,7 +294,7 @@ const EvaluatorSelectStepComponent = (props: EvaluatorSelectStepProps) => {
|
||||
onClick={handleBatchSelect}
|
||||
disabled={selectedRowKeys.length === 0}
|
||||
>
|
||||
批量选择年审人员
|
||||
批量选择评价人员
|
||||
</Button>
|
||||
</Space>
|
||||
</div>
|
||||
@ -321,7 +317,7 @@ const EvaluatorSelectStepComponent = (props: EvaluatorSelectStepProps) => {
|
||||
/>
|
||||
)}
|
||||
|
||||
{/* 批量选择年审人员弹窗 */}
|
||||
{/* 批量选择评价人员弹窗 */}
|
||||
<BatchEvaluatorModal
|
||||
visible={batchSelectModalVisible}
|
||||
onCancel={() => setBatchSelectModalVisible(false)}
|
||||
@ -330,7 +326,7 @@ const EvaluatorSelectStepComponent = (props: EvaluatorSelectStepProps) => {
|
||||
onSelect={handleBatchEvaluatorSelect}
|
||||
/>
|
||||
|
||||
{/* 单个供应商年审人员弹窗 */}
|
||||
{/* 单个供应商评价人员弹窗 */}
|
||||
<SupplierEvaluatorModal
|
||||
visible={evaluatorModalVisible}
|
||||
onCancel={() => setEvaluatorModalVisible(false)}
|
||||
|
@ -2,7 +2,6 @@ import React, { forwardRef, useImperativeHandle, useEffect, useState } from 'rea
|
||||
import { Card } from 'antd';
|
||||
import styles from '../supplierAnnualTaskManageAdd.less';
|
||||
import SupplierSelector from '@/components/SupplierSelector';
|
||||
import type { SupplierItem } from '@/servers/dao/supplierEvaluateTask';
|
||||
import type { Dispatch } from 'umi';
|
||||
import { connect } from 'umi';
|
||||
import type { SupplierTaskModelState } from '@/models/supplierAnnualTaskManage';
|
||||
@ -21,7 +20,7 @@ const SupplierSelectStepComponent = (props: SupplierSelectStepProps) => {
|
||||
const { taskFormData } = supplierAnnualTaskManage;
|
||||
|
||||
// 内部状态,避免直接操作formData导致循环更新
|
||||
const [selectedSuppliers, setSelectedSuppliers] = useState<SupplierItem[]>([]);
|
||||
const [selectedSuppliers, setSelectedSuppliers] = useState<supplierAnnualTaskManage.SupplierItem[]>([]);
|
||||
|
||||
// 当taskFormData.selectedSuppliers更新时,同步到本地状态
|
||||
useEffect(() => {
|
||||
@ -40,7 +39,7 @@ const SupplierSelectStepComponent = (props: SupplierSelectStepProps) => {
|
||||
}));
|
||||
|
||||
// 处理供应商选择
|
||||
const handleSupplierSelect = (suppliers: SupplierItem[]) => {
|
||||
const handleSupplierSelect = (suppliers: supplierAnnualTaskManage.SupplierItem[]) => {
|
||||
// 确保每个供应商都有evaluators字段
|
||||
const suppliersWithEvaluators = suppliers.map(supplier => ({
|
||||
...supplier,
|
||||
|
@ -167,7 +167,7 @@ const SupplierTaskManageAdd: React.FC<PageProps> = ({ supplierAnnualTaskManage,
|
||||
* 提交任务数据
|
||||
* @param taskStatus 任务状态,决定是否需要下级单位完善
|
||||
*/
|
||||
const submitTaskData = (taskStatus: TaskNotifyLowerUnits | null) => {
|
||||
const submitTaskData = (taskStatus: string | null) => {
|
||||
if (dispatch) {
|
||||
dispatch({
|
||||
type: 'supplierAnnualTaskManage/submitTaskData',
|
||||
|
Reference in New Issue
Block a user