diff --git a/config/router.config.ts b/config/router.config.ts index 9b9517f..3def788 100644 --- a/config/router.config.ts +++ b/config/router.config.ts @@ -194,6 +194,7 @@ export default [ hideInMenu: true, icon: 'icon-fenlei', component: '@/pages/supplierAnnualManage/supplierAnnualTemplateManage/supplierAnnualTemplateManageAdd', + parentKeys: ['/supplierAnnual/supplierAnnualTemplateManage'], }, { name: '年审模板管理详情', @@ -201,6 +202,7 @@ export default [ hideInMenu: true, icon: 'icon-fenlei', component: '@/pages/supplierAnnualManage/supplierAnnualTemplateManage/supplierAnnualTemplateManageDetail', + parentKeys: ['/supplierAnnual/supplierAnnualTemplateManage'], }, { name: '年审任务管理', @@ -214,6 +216,7 @@ export default [ hideInMenu: true, icon: 'icon-liebiaomoshi', component: '@/pages/supplierAnnualManage/supplierAnnualTaskManage/supplierAnnualTaskManageAdd', + parentKeys: ['/supplierAnnual/supplierAnnualTaskManage'], }, { name: '年审任务管理详情', @@ -221,6 +224,7 @@ export default [ hideInMenu: true, icon: 'icon-liebiaomoshi', component: '@/pages/supplierAnnualManage/supplierAnnualTaskManage/supplierAnnualTaskManageDetail', + parentKeys: ['/supplierAnnual/supplierAnnualTaskManage'], }, { name: '年度审查', @@ -241,7 +245,7 @@ export default [ path: 'supplierAnnualScoreDetail', hideInMenu: true, icon: 'icon-liebiaomoshi', - parentKeys: ['/supplierAnnual/supplierAnnualScore'], + parentKeys: ['/supplierAnnual/supplierAnnualReview'], component: '@/pages/supplierAnnualManage/supplierAnnualReview/supplierAnnualScoreDetail', }, diff --git a/src/layouts/Header.tsx b/src/layouts/Header.tsx index 464f39d..3a5b84e 100644 --- a/src/layouts/Header.tsx +++ b/src/layouts/Header.tsx @@ -5,7 +5,7 @@ import LogoImg from '@/assets/img/logo.png'; import Language from './Language'; import User from './User'; import './layout.less'; -const HeaderComponent: React.FC = (props) => { +const HeaderComponent: React.FC = () => { return (
logo diff --git a/src/layouts/layout.less b/src/layouts/layout.less index 3e237bd..3b7abb9 100644 --- a/src/layouts/layout.less +++ b/src/layouts/layout.less @@ -7,6 +7,7 @@ align-items: center; justify-content: space-between; padding: 0 15px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); .logo { height: 45px; } diff --git a/src/locales/en-US/menu.ts b/src/locales/en-US/menu.ts index d3d12cc..4e13482 100644 --- a/src/locales/en-US/menu.ts +++ b/src/locales/en-US/menu.ts @@ -9,7 +9,9 @@ export default { 'menu.评价规则管理': 'Evaluation Rule Management', 'menu.任务管理': 'Task Management', 'menu.任务管理新增': 'Add Task', + 'menu.任务管理详情': 'Task Detail', 'menu.评价打分': 'Evaluation Scoring', + 'menu.评价打分详情': 'Evaluation Scoring Detail', 'menu.评价结果': 'Evaluation Results', 'menu.评价结果详情': 'Evaluation Results Detail', 'menu.评价结果得分明细': 'Evaluation Score Details', @@ -28,9 +30,18 @@ export default { // 供应商年审模块 'menu.供应商年审': 'Supplier Annual Review', 'menu.年审模板管理': 'Annual Review Template Management', + 'menu.年审模板管理新增': 'Add Annual Review Template', + 'menu.年审模板管理详情': 'Annual Review Template Detail', 'menu.年审任务管理': 'Annual Review Task Management', + 'menu.年审任务管理新增': 'Add Annual Review Task', + 'menu.年审任务管理详情': 'Annual Review Task Detail', 'menu.年度查询': 'Annual Query', + 'menu.年审打分': 'Annual Review Scoring', + 'menu.年审打分详情': 'Annual Review Scoring Detail', 'menu.年审结果': 'Annual Review Results', + 'menu.年审结果一级查询列表': 'Annual Review Results Primary Query', + 'menu.年审结果二级查询列表': 'Annual Review Results Secondary Query', + 'menu.年审结果详情': 'Annual Review Results Detail', //供应商 'menu.admit': 'admit', @@ -44,16 +55,16 @@ export default { 'menu.registrationQuery': 'Registered supplier inquiry', 'menu.groupQualifiedSupplierQuery': 'Group Qualified Supplier Query', 'menu.mySupplierInquiry': 'My supplier inquiry', - 'menu.admission': '供应商准入', - 'menu.admissionManagement': '供应商准入管理', - 'menu.admissionReviewManagement': '供应商准入评审管理', - 'menu.SupplierEntryReview': '供应商准入审核管理', - 'menu.SupplierCategoryEntry': '供应商品类准入管理', - 'menu.SupplierCategoryEntryReview': '供应商品类准入审核管理', - 'menu.informationManagement': '供应商信息管理', - 'menu.SupplierRegisterAgent': '供应商注册代录', - 'menu.SupplierChangeManage': '供应商变更管理', - 'menu.SupplierChangeReviewManage': '供应商变更审核管理', + 'menu.admission': 'Supplier Admission', + 'menu.admissionManagement': 'Supplier Admission Management', + 'menu.admissionReviewManagement': 'Supplier Admission Review', + 'menu.SupplierEntryReview': 'Supplier Entry Review', + 'menu.SupplierCategoryEntry': 'Supplier Category Entry', + 'menu.SupplierCategoryEntryReview': 'Supplier Category Entry Review', + 'menu.informationManagement': 'Supplier Information Management', + 'menu.SupplierRegisterAgent': 'Supplier Registration Agency', + 'menu.SupplierChangeManage': 'Supplier Change Management', + 'menu.SupplierChangeReviewManage': 'Supplier Change Review', 'menu.category': 'Supplier Category Library', 'menu.categoryManage': 'Category Management', 'menu.categoryLibraryManage': 'Category Library Management', diff --git a/src/locales/zh-CN/menu.ts b/src/locales/zh-CN/menu.ts index f36e3b6..9cbb643 100644 --- a/src/locales/zh-CN/menu.ts +++ b/src/locales/zh-CN/menu.ts @@ -9,7 +9,9 @@ export default { 'menu.评价规则管理': '评价规则管理', 'menu.任务管理': '任务管理', 'menu.任务管理新增': '任务管理新增', + 'menu.任务管理详情': '任务管理详情', 'menu.评价打分': '评价打分', + 'menu.评价打分详情': '评价打分详情', 'menu.评价结果': '评价结果', 'menu.评价结果详情': '评价结果详情', 'menu.评价结果得分明细': '评价结果得分明细', @@ -27,9 +29,18 @@ export default { // 供应商年审模块 'menu.供应商年审': '供应商年审', 'menu.年审模板管理': '年审模板管理', + 'menu.年审模板管理新增': '年审模板管理新增', + 'menu.年审模板管理详情': '年审模板管理详情', 'menu.年审任务管理': '年审任务管理', + 'menu.年审任务管理新增': '年审任务管理新增', + 'menu.年审任务管理详情': '年审任务管理详情', 'menu.年度查询': '年度查询', + 'menu.年审打分': '年审打分', + 'menu.年审打分详情': '年审打分详情', 'menu.年审结果': '年审结果', + 'menu.年审结果一级查询列表': '年审结果一级查询列表', + 'menu.年审结果二级查询列表': '年审结果二级查询列表', + 'menu.年审结果详情': '年审结果详情', 'menu.年度审查': '年度审查', diff --git a/src/pages/supplierAnnualManage/supplierAnnualTaskManage/supplierAnnualTaskManage.tsx b/src/pages/supplierAnnualManage/supplierAnnualTaskManage/supplierAnnualTaskManage.tsx index 6377059..38753a6 100644 --- a/src/pages/supplierAnnualManage/supplierAnnualTaskManage/supplierAnnualTaskManage.tsx +++ b/src/pages/supplierAnnualManage/supplierAnnualTaskManage/supplierAnnualTaskManage.tsx @@ -24,6 +24,8 @@ import { AnnualTaskStatusColor, AnnualTaskStatusOptions, } from '@/dicts/supplierAnnualTaskManageDict'; +import type { DictItem } from '@/servers/api/dicts'; +import { getDictList } from '@/servers/api/dicts'; const { RangePicker } = DatePicker; const { Option } = Select; @@ -41,7 +43,7 @@ const SupplierAnnualTaskManage: React.FC = () => { showQuickJumper: true, }); const [searchParams, setSearchParams] = useState({}); - + const [evaluateStatus, setEvaluateStatus] = useState([]); // 获取年度任务列表 const fetchList = async (params: any = {}) => { try { @@ -78,6 +80,11 @@ const SupplierAnnualTaskManage: React.FC = () => { // 首次加载获取数据 useEffect(() => { fetchList({ current: 1, pageSize: 10 }); + getDictList('project_status').then((res) => { + if (res.success) { + setEvaluateStatus(res.data); + } + }); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); @@ -183,11 +190,9 @@ const SupplierAnnualTaskManage: React.FC = () => { }, { title: '评价状态', - dataIndex: 'status', - key: 'status', - width: 100, - render: (status: string, record: supplierAnnualTaskManage.TaskRecord) => - getStatusTag(status, record.statusName), + dataIndex: 'statusName', + key: 'statusName', + width: 100 }, { title: '操作', @@ -232,9 +237,9 @@ const SupplierAnnualTaskManage: React.FC = () => { diff --git a/src/pages/supplierEvaluateManage/supplierEvaluateResult/supplierEvaluateResult.tsx b/src/pages/supplierEvaluateManage/supplierEvaluateResult/supplierEvaluateResult.tsx index abb372f..2510c32 100644 --- a/src/pages/supplierEvaluateManage/supplierEvaluateResult/supplierEvaluateResult.tsx +++ b/src/pages/supplierEvaluateManage/supplierEvaluateResult/supplierEvaluateResult.tsx @@ -1,6 +1,5 @@ import React, { useState, useEffect } from 'react'; import { - Card, Form, Input, Select, @@ -18,9 +17,11 @@ import { SearchOutlined, DeleteOutlined, } from '@ant-design/icons'; -import { TaskStatus, TaskStatusText, TaskStatusColor } from '@/dicts/supplierTaskDict'; +import { TaskStatusText, TaskStatusColor } from '@/dicts/supplierTaskDict'; import { history } from 'umi'; import { getEvaluateResultList, submitTaskForApproval } from '@/servers/api/supplierEvaluate'; +import { getDictList } from '@/servers/api/dicts'; +import type { DictItem } from '@/servers/api/dicts'; @@ -49,24 +50,7 @@ const SupplierEvaluateResult: React.FC = () => { showTotal: (total) => `共 ${total} 条记录`, }); const [searchParams, setSearchParams] = useState({}); - - // 品类数据 - const categoryOptions = [ - { label: '食品', value: '食品' }, - { label: '电子', value: '电子' }, - { label: '机械', value: '机械' }, - { label: '化工', value: '化工' }, - { label: '医药', value: '医药' }, - ]; - - // 创建单位数据 - const unitOptions = [ - { label: '中山市合创展包装材料有限公司', value: '中山市合创展包装材料有限公司' }, - { label: '广州市科技发展有限公司', value: '广州市科技发展有限公司' }, - { label: '深圳市创新科技有限公司', value: '深圳市创新科技有限公司' }, - { label: '东莞市制造业有限公司', value: '东莞市制造业有限公司' }, - ]; - + const [evaluateStatus, setEvaluateStatus] = useState([]); // 获取评价结果列表 const fetchResultList = async ( current = 1, @@ -132,6 +116,11 @@ const SupplierEvaluateResult: React.FC = () => { // 首次加载获取数据 useEffect(() => { fetchResultList(pagination.current, pagination.pageSize, {}); + getDictList('project_status').then((res) => { + if (res.success) { + setEvaluateStatus(res.data); + } + }); }, []); // 处理表格分页变化 @@ -260,10 +249,9 @@ const SupplierEvaluateResult: React.FC = () => { }, { title: '评价状态', - dataIndex: 'status', - key: 'status', + dataIndex: 'statusName', + key: 'statusName', width: 100, - render: (status: string) => getStatusTag(status), }, { title: '操作', @@ -305,9 +293,11 @@ const SupplierEvaluateResult: React.FC = () => { diff --git a/src/pages/supplierEvaluateManage/supplierEvaluateResult/supplierEvaluateResultScoreByList.tsx b/src/pages/supplierEvaluateManage/supplierEvaluateResult/supplierEvaluateResultScoreByList.tsx index 134868f..cd020a1 100644 --- a/src/pages/supplierEvaluateManage/supplierEvaluateResult/supplierEvaluateResultScoreByList.tsx +++ b/src/pages/supplierEvaluateManage/supplierEvaluateResult/supplierEvaluateResultScoreByList.tsx @@ -63,7 +63,6 @@ const SupplierEvaluateResultScoreByList: React.FC = () => { // 获取上级页面传递的数据 useEffect(() => { - console.log(location.state); if (location.state?.record) { setRecord(location.state.record); } diff --git a/src/pages/supplierEvaluateManage/supplierEvaluateScore/supplierEvaluateScore.tsx b/src/pages/supplierEvaluateManage/supplierEvaluateScore/supplierEvaluateScore.tsx index 6937f18..e960d8b 100644 --- a/src/pages/supplierEvaluateManage/supplierEvaluateScore/supplierEvaluateScore.tsx +++ b/src/pages/supplierEvaluateManage/supplierEvaluateScore/supplierEvaluateScore.tsx @@ -19,6 +19,8 @@ import { getSupplierDimension, getTaskPage, } from '@/servers/api/supplierEvaluate'; +import { getDictList } from '@/servers/api/dicts'; +import type { DictItem } from '@/servers/api/dicts'; const { Title } = Typography; const { TabPane } = Tabs; @@ -30,9 +32,9 @@ const SupplierEvaluateScore: React.FC = () => { // 新增状态 const [activeTab, setActiveTab] = useState('supplier'); const [supplierTableData, setSupplierTableData] = useState< - supplierEvaluateScore.SupplierDimensionRecord[] + SupplierEvaluateScore.SupplierDimensionResponse[] >([]); - const [taskTableData, setTaskTableData] = useState([]); + const [taskTableData, setTaskTableData] = useState([]); const [supplierTableLoading, setSupplierTableLoading] = useState(false); const [taskTableLoading, setTaskTableLoading] = useState(false); const [pagination, setPagination] = useState({ @@ -40,6 +42,7 @@ const SupplierEvaluateScore: React.FC = () => { pageSize: 10, total: 0, }); + const [evaluateStatus, setEvaluateStatus] = useState([]); /* name :关键字 startTime:开始时间 @@ -51,7 +54,7 @@ status:状态 const values = filterForm.getFieldsValue(); if (activeTab === 'supplier') { - const params: supplierEvaluateScore.SupplierDimensionRequest = { + const params: SupplierEvaluateScore.SupplierDimensionRequest = { basePageRequest: { pageNo: pagination.current, pageSize: pagination.pageSize, @@ -68,7 +71,7 @@ status:状态 return params; } else { - const params: supplierEvaluateScore.TaskPageRequest = { + const params: SupplierEvaluateScore.TaskPageRequest = { basePageRequest: { pageNo: pagination.current, pageSize: pagination.pageSize, @@ -153,6 +156,11 @@ status:状态 // 初始化加载数据 useEffect(() => { handleSearch(); + getDictList('project_status').then((res) => { + if (res.success) { + setEvaluateStatus(res.data); + } + }); }, [activeTab]); // 处理标签页切换 @@ -381,10 +389,11 @@ status:状态 diff --git a/src/pages/supplierEvaluateManage/supplierEvaluateScore/supplierEvaluateScoreDetail.tsx b/src/pages/supplierEvaluateManage/supplierEvaluateScore/supplierEvaluateScoreDetail.tsx index cd802c9..fa82edf 100644 --- a/src/pages/supplierEvaluateManage/supplierEvaluateScore/supplierEvaluateScoreDetail.tsx +++ b/src/pages/supplierEvaluateManage/supplierEvaluateScore/supplierEvaluateScoreDetail.tsx @@ -9,12 +9,11 @@ import { message, Typography, Empty, - Space, Form, Modal, } from 'antd'; import { ArrowLeftOutlined, SaveOutlined, ExclamationCircleOutlined } from '@ant-design/icons'; -import { getSupplierScoreDetail, saveEvaluateScore } from '@/servers/api/supplierEvaluate'; +import { getIndicator, saveEvaluateScore } from '@/servers/api/supplierEvaluate'; import ScoreEvaluationTable from '@/components/ScoreEvaluationTable'; import styles from './supplierEvaluateScore.less'; @@ -22,18 +21,14 @@ const { Title } = Typography; const { confirm } = Modal; const SupplierEvaluateScoreDetail: React.FC = () => { - const [form] = Form.useForm(); const location = useLocation<{ - record: supplierEvaluateScore.SupplierDimensionRecord | supplierEvaluateScore.TaskPageRecord; + record: SupplierEvaluateScore.SupplierDimensionData; mode?: 'view' | 'score'; // 查看模式或打分模式 recordType: 'supplier' | 'task'; // 记录类型:供应商或任务 }>(); const [loading, setLoading] = useState(false); const [submitting, setSubmitting] = useState(false); - const [saving, setSaving] = useState(false); - const [scoreDetail, setScoreDetail] = useState( - null, - ); + const [scoreDetail, setScoreDetail] = useState(); const [scoreData, setScoreData] = useState([]); const [record, setRecord] = useState(null); const [mode, setMode] = useState<'view' | 'score'>('view'); // 默认为查看模式 @@ -63,7 +58,7 @@ const SupplierEvaluateScoreDetail: React.FC = () => { }, [location]); // 将API数据转换为ScoreEvaluationTable组件所需的格式 - const formatDataForScoreTable = (data: supplierEvaluateScore.ScoreDetailData) => { + const formatDataForScoreTable = (data: SupplierEvaluateResult.EvaluateScoreDetailData) => { if (!data?.taskIndicatorVo) return []; return data.taskIndicatorVo.map((indicator) => { @@ -103,7 +98,7 @@ const SupplierEvaluateScoreDetail: React.FC = () => { setLoading(true); try { - const response = await getSupplierScoreDetail(record.id); + const response = await getIndicator(record.id); if (response.success && response.data) { setScoreDetail(response.data); @@ -167,7 +162,7 @@ const SupplierEvaluateScoreDetail: React.FC = () => { setSubmitting(true); try { // 构建提交数据 - const submitData: supplierEvaluateScore.ScoreSaveRequest = { + const submitData: SupplierEvaluateScore.ScoreSaveRequest = { id: record.id, scoreVoList: scoreData.flatMap((item) => { return item.indicatorNdList.map((subItem: any) => ({ diff --git a/src/pages/supplierEvaluateManage/supplierTaskManage/supplierTaskManage.tsx b/src/pages/supplierEvaluateManage/supplierTaskManage/supplierTaskManage.tsx index 584e923..2c08d13 100644 --- a/src/pages/supplierEvaluateManage/supplierTaskManage/supplierTaskManage.tsx +++ b/src/pages/supplierEvaluateManage/supplierTaskManage/supplierTaskManage.tsx @@ -6,6 +6,8 @@ import { history, useIntl } from 'umi'; import { TaskStatus, TaskStatusText, TaskStatusColor } from '@/dicts/supplierTaskDict'; import { getTaskList } from '@/servers/api/supplierEvaluate'; import styles from './supplierTaskManage.less'; +import { getDictList } from '@/servers/api/dicts'; +import type { DictItem } from '@/servers/api/dicts'; const { Option } = Select; const { RangePicker } = DatePicker; @@ -30,7 +32,7 @@ const SupplierTaskManage: React.FC = () => { pageSize: 10, }, }); - + const [evaluateStatus, setEvaluateStatus] = useState([]); const fetchTaskList = async ( current: number = 1, pageSize: number = 10, @@ -72,6 +74,12 @@ const SupplierTaskManage: React.FC = () => { useEffect(() => { fetchTaskList(pagination.current!, pagination.pageSize!, searchParams); + // 从字典接口中获取评价状态 + getDictList('project_status').then((res) => { + if (res.success) { + setEvaluateStatus(res.data); + } + }); }, []); const handleView = (record: SupplierTaskManage.TaskItem) => { @@ -85,15 +93,6 @@ const SupplierTaskManage: React.FC = () => { const handleDivision = (record: SupplierTaskManage.TaskItem) => { history.push(`supplierTaskManageAdd?id=${record.id}&mode=division`); }; - - const getStatusTag = (status: string) => { - const color = TaskStatusColor[status as keyof typeof TaskStatusColor] || 'default'; - const text = - TaskStatusText[status as keyof typeof TaskStatusText] || - intl.formatMessage({ id: 'supplierTaskManage.status.unknown' }); - return {text}; - }; - const handleTableChange = (newPagination: TablePaginationConfig) => { fetchTaskList(newPagination.current!, newPagination.pageSize!, searchParams); }; @@ -179,7 +178,6 @@ const SupplierTaskManage: React.FC = () => { dataIndex: 'statusName', key: 'statusName', width: 100, - // render: (status: string) => getStatusTag(status), }, { title: intl.formatMessage({ id: 'supplierTaskManage.column.action' }), @@ -240,15 +238,11 @@ const SupplierTaskManage: React.FC = () => { placeholder={intl.formatMessage({ id: 'supplierTaskManage.placeholder.status' })} allowClear > - - - + {evaluateStatus.map((item) => ( + + ))} ('/coscoEvaluate/user/getIndicator', { + return request('/coscoEvaluate/user/getIndicator', { method: 'GET', params: { id }, }); diff --git a/src/servers/dao/supplierEvaluateManage/supplierEvaluateScore.d.ts b/src/servers/dao/supplierEvaluateManage/supplierEvaluateScore.d.ts index 42126e2..4f8c213 100644 --- a/src/servers/dao/supplierEvaluateManage/supplierEvaluateScore.d.ts +++ b/src/servers/dao/supplierEvaluateManage/supplierEvaluateScore.d.ts @@ -4,18 +4,17 @@ declare namespace SupplierEvaluateScore { // 现有接口定义 interface ScoreDetailResponse { code: number; - data: any; // 使用 SupplierEvaluateResult.EvaluateScoreDetailData + data: SupplierEvaluateResult.EvaluateScoreDetailData; // 使用 SupplierEvaluateResult.EvaluateScoreDetailData message: string; success: boolean; } interface ScoreSaveRequest { id: string; - score: number; - indicators: { + scoreVoList: { id: string; score: number; - remarks?: string; + remark?: string; }[]; } @@ -27,27 +26,90 @@ declare namespace SupplierEvaluateScore { } interface SupplierDimensionRequest { - current?: number; - pageSize?: number; - taskId: string; - supplierId: string; + basePageRequest: { + pageNo: number; + pageSize: number; + }; + name?: string; + status?: string; + startTime?: string; + endTime?: string; } + /** + * 获取供应商维度响应 + */ interface SupplierDimensionResponse { code: number; - data: any; + data: SupplierDimensionData; message: string; success: boolean; + [property: string]: any; + } + + /** + * 供应商维度数据 + */ + interface SupplierDimensionData { + categoryId: null; + categoryLimitation: string; + createBy: null; + createDate: null; + createTime: null; + deleteFlag: null; + delFlag: string; + deptId: null; + endTime: string; + evaluateTheme: string; + evaluateYear: string; + id: string; + indicatorList: IndicatorListItem[]; + lastUpdateTime: null; + startTime: string; + status: string; + supplierIds: SupplierIdItem[]; + templateId: string; + tenantId: null; + tenantName: null; + updateBy: null; + updateDate: null; + updateTime: null; + weightDept: null; + weightStatus: string; + weightValue: null; + [property: string]: any; + } + + /** + * 指标列表项 + */ + interface IndicatorListItem { + indicatorIds: null[]; + type: string; + userId: string; + [property: string]: any; + } + + /** + * 供应商ID项 + */ + interface SupplierIdItem { + id: string; + userIds: any[]; + [property: string]: any; } interface TaskPageRequest { - current?: number; - pageSize?: number; - evaluateTheme?: string; - evaluateYear?: string; + basePageRequest: { + pageNo: number; + pageSize: number; + }; + name?: string; + status?: string; startTime?: string; endTime?: string; - status?: string; + evaluateTheme?: string; + evaluateYear?: string; } interface TaskPageResponse {