From 739b021334f7b2d0e5f4f077365f37d3ffe9d17d Mon Sep 17 00:00:00 2001 From: linxd <544554903@qq.com> Date: Thu, 3 Jul 2025 10:59:39 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=B4=E6=8A=A4=E5=B9=B4=E5=AE=A1=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E7=AE=A1=E7=90=86=E5=9B=BD=E9=99=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/dicts/dataStatistics.ts | 7 - src/locales/en-US.ts | 2 + src/locales/en-US/supplierAnnualTaskManage.ts | 144 +++++++++++++++++- src/locales/zh-CN.ts | 2 + src/locales/zh-CN/supplierAnnualTaskManage.ts | 144 +++++++++++++++++- .../supplierAnnualStatistics.tsx | 122 ++++++++++----- .../supplierExitStatistics.tsx | 81 ++++++---- .../components/BasicInfoStep.tsx | 82 ++++++---- .../components/Detail/BasicInfo.tsx | 36 +++-- .../components/Detail/EvaluatorModal.tsx | 16 +- .../components/Detail/SupplierInfo.tsx | 23 ++- .../BatchEvaluatorModal.tsx | 5 +- .../SupplierEvaluatorModal.tsx | 33 +++- .../EvaluatorComponents/SupplierTable.tsx | 64 +++++--- .../components/EvaluatorSelectStep.tsx | 16 +- .../components/SupplierSelectStep.tsx | 4 +- .../supplierAnnualTaskManage.tsx | 51 ++++--- .../supplierAnnualTaskManageAdd.tsx | 39 +++-- .../supplierAnnualTaskManageDetail.tsx | 23 +-- .../components/BasicInfoStep.tsx | 21 ++- 20 files changed, 679 insertions(+), 236 deletions(-) diff --git a/src/dicts/dataStatistics.ts b/src/dicts/dataStatistics.ts index 26eec18..fe521f3 100644 --- a/src/dicts/dataStatistics.ts +++ b/src/dicts/dataStatistics.ts @@ -41,13 +41,6 @@ export const AnnualReviewResultColor = { '2': 'red', }; -// 年审年度列表 -export const AnnualReviewYears = [ - { label: '2023年', value: '2023' }, - { label: '2022年', value: '2022' }, - { label: '2021年', value: '2021' }, -]; - // 数据统计类型 export const StatisticsType = { 'EVALUATE': 'evaluate', // 评价情况统计 diff --git a/src/locales/en-US.ts b/src/locales/en-US.ts index 9b32bcf..8d9e243 100644 --- a/src/locales/en-US.ts +++ b/src/locales/en-US.ts @@ -12,6 +12,7 @@ import dataStatistics from './en-US/dataStatistics'; import supplierAnnualTemplateManage from './en-US/supplierAnnualTemplateManage'; import supplierAnnualReview from './en-US/supplierAnnualReview'; import supplierAnnualResult from './en-US/supplierAnnualResult'; +import supplierAnnualTaskManage from './en-US/supplierAnnualTaskManage'; export default { 'navBar.lang': 'Languages', @@ -37,4 +38,5 @@ export default { ...supplierAnnualTemplateManage, ...supplierAnnualReview, ...supplierAnnualResult, + ...supplierAnnualTaskManage, }; diff --git a/src/locales/en-US/supplierAnnualTaskManage.ts b/src/locales/en-US/supplierAnnualTaskManage.ts index 0ea8d5f..b9ca163 100644 --- a/src/locales/en-US/supplierAnnualTaskManage.ts +++ b/src/locales/en-US/supplierAnnualTaskManage.ts @@ -1 +1,143 @@ -// 供应商年审 任务管理模块 \ No newline at end of file +// Supplier Annual Review Task Management Module +export default { + 'supplierAnnualTaskManage.title': 'Supplier Annual Review Task Management', + 'supplierAnnualTaskManage.filter.theme': 'Review Theme', + 'supplierAnnualTaskManage.filter.theme.placeholder': 'Please enter review theme', + 'supplierAnnualTaskManage.filter.time': 'Review Time', + 'supplierAnnualTaskManage.filter.time.start': 'Start Date', + 'supplierAnnualTaskManage.filter.time.end': 'End Date', + 'supplierAnnualTaskManage.filter.status': 'Review Status', + 'supplierAnnualTaskManage.filter.status.placeholder': 'Please select status', + 'supplierAnnualTaskManage.button.search': 'Search', + 'supplierAnnualTaskManage.button.reset': 'Reset', + 'supplierAnnualTaskManage.button.add': 'Add Task', + 'supplierAnnualTaskManage.button.view': 'View', + 'supplierAnnualTaskManage.button.edit': 'Edit', + 'supplierAnnualTaskManage.table.index': 'No.', + 'supplierAnnualTaskManage.table.theme': 'Review Theme', + 'supplierAnnualTaskManage.table.dept': 'Initiating Department', + 'supplierAnnualTaskManage.table.startTime': 'Review Start Time', + 'supplierAnnualTaskManage.table.endTime': 'Review End Time', + 'supplierAnnualTaskManage.table.status': 'Review Status', + 'supplierAnnualTaskManage.table.action': 'Actions', + 'supplierAnnualTaskManage.message.editWarning': 'Only tasks with pending status can be edited!', + 'supplierAnnualTaskManage.message.listFailed': 'Failed to get list', + 'supplierAnnualTaskManage.pagination.total': 'Total {total} records', + + // Add page + 'supplierAnnualTaskManage.add.title': 'Add Annual Review Task', + 'supplierAnnualTaskManage.edit.title': 'Edit Annual Review Task', + 'supplierAnnualTaskManage.button.back': 'Back', + 'supplierAnnualTaskManage.step.basicInfo.title': 'Basic Information', + 'supplierAnnualTaskManage.step.basicInfo.description': 'Please fill in basic information', + 'supplierAnnualTaskManage.step.selectSupplier.title': 'Select Suppliers', + 'supplierAnnualTaskManage.step.selectSupplier.description': 'Please select suppliers for review', + 'supplierAnnualTaskManage.step.selectEvaluator.title': 'Select Reviewers', + 'supplierAnnualTaskManage.step.selectEvaluator.description': 'Please select annual review personnel', + 'supplierAnnualTaskManage.button.prev': 'Previous', + 'supplierAnnualTaskManage.button.next': 'Next', + 'supplierAnnualTaskManage.button.save': 'Save', + 'supplierAnnualTaskManage.button.submit': 'Submit', + 'supplierAnnualTaskManage.message.formValidationFailed': 'Please complete required fields', + 'supplierAnnualTaskManage.modal.confirm.title': 'Prompt', + 'supplierAnnualTaskManage.modal.confirm.content': 'Are you sure you want to submit?', + + // Detail page + 'supplierAnnualTaskManage.detail.title': 'Review Task Details', + 'supplierAnnualTaskManage.detail.loading': 'Loading data...', + 'supplierAnnualTaskManage.detail.tab.basicInfo': 'Basic Information', + 'supplierAnnualTaskManage.detail.tab.supplierInfo': 'Supplier Information', + 'supplierAnnualTaskManage.detail.message.idEmpty': 'Task ID cannot be empty', + 'supplierAnnualTaskManage.detail.message.noId': 'No task ID provided', + 'supplierAnnualTaskManage.detail.message.loadFailed': 'Failed to get task details', + + // Evaluator Modal + 'supplierAnnualTaskManage.evaluatorModal.title': 'Evaluators for {supplierName}', + 'supplierAnnualTaskManage.evaluatorModal.button.close': 'Close', + 'supplierAnnualTaskManage.evaluatorModal.empty': 'No evaluator data available', + + // Basic Info Component + 'supplierAnnualTaskManage.basicInfo.title': 'Basic Information', + 'supplierAnnualTaskManage.basicInfo.theme': 'Review Theme', + 'supplierAnnualTaskManage.basicInfo.status': 'Review Status', + 'supplierAnnualTaskManage.basicInfo.year': 'Review Year', + 'supplierAnnualTaskManage.basicInfo.startTime': 'Start Time', + 'supplierAnnualTaskManage.basicInfo.endTime': 'End Time', + 'supplierAnnualTaskManage.basicInfo.template': 'Review Template', + 'supplierAnnualTaskManage.basicInfo.categoryLimitation': 'Category Limitation', + 'supplierAnnualTaskManage.basicInfo.category': 'Category', + 'supplierAnnualTaskManage.basicInfo.unknownStatus': 'Unknown Status', + + // Supplier Info Component + 'supplierAnnualTaskManage.supplierInfo.index': 'No.', + 'supplierAnnualTaskManage.supplierInfo.supplierName': 'Supplier Name', + 'supplierAnnualTaskManage.supplierInfo.dept': 'Department', + 'supplierAnnualTaskManage.supplierInfo.category': 'Category', + 'supplierAnnualTaskManage.supplierInfo.action': 'Actions', + 'supplierAnnualTaskManage.supplierInfo.viewEvaluators': 'View Evaluators', + 'supplierAnnualTaskManage.supplierInfo.empty': 'No supplier data available', + 'supplierAnnualTaskManage.supplierInfo.noEvaluators': 'No evaluators found for this supplier', + + // Batch Evaluator Modal + 'supplierAnnualTaskManage.batchEvaluatorModal.title': 'Batch Select Reviewers', + + // Supplier Evaluator Modal + 'supplierAnnualTaskManage.supplierEvaluatorModal.title.select': 'Select Reviewers - {supplierName}', + 'supplierAnnualTaskManage.supplierEvaluatorModal.title.view': 'View Reviewers - {supplierName}', + 'supplierAnnualTaskManage.supplierEvaluatorModal.button.close': 'Close', + 'supplierAnnualTaskManage.supplierEvaluatorModal.warning.selectAtLeastOne': 'Please select at least one reviewer', + 'supplierAnnualTaskManage.supplierEvaluatorModal.noSupplier': 'No supplier data', + 'supplierAnnualTaskManage.supplierEvaluatorModal.noEvaluators': 'No reviewers for this supplier, please click "Edit Personnel" to add', + 'supplierAnnualTaskManage.supplierEvaluatorModal.unknown.dept': 'Unknown Department', + + // Supplier Table Component + 'supplierAnnualTaskManage.supplierTable.supplierName': 'Supplier Name', + 'supplierAnnualTaskManage.supplierTable.socialCreditCode': 'Social Credit Code', + 'supplierAnnualTaskManage.supplierTable.categoryName': 'Admission Category', + 'supplierAnnualTaskManage.supplierTable.deptName': 'Admission Department', + 'supplierAnnualTaskManage.supplierTable.evaluatorCount': 'Reviewer Count', + 'supplierAnnualTaskManage.supplierTable.action': 'Actions', + 'supplierAnnualTaskManage.supplierTable.button.view': 'View', + 'supplierAnnualTaskManage.supplierTable.button.editPersonnel': 'Edit Personnel', + 'supplierAnnualTaskManage.supplierTable.button.delete': 'Delete', + 'supplierAnnualTaskManage.supplierTable.confirm.delete.title': 'Are you sure you want to delete this supplier?', + 'supplierAnnualTaskManage.supplierTable.confirm.delete.content': 'Supplier: {supplierName}', + 'supplierAnnualTaskManage.supplierTable.confirm.delete.content.withEvaluators': 'Supplier: {supplierName}, will also delete {count} associated reviewers', + 'supplierAnnualTaskManage.supplierTable.confirm.delete.okText': 'Confirm', + 'supplierAnnualTaskManage.supplierTable.confirm.delete.cancelText': 'Cancel', + + // Basic Info Step Component + 'supplierAnnualTaskManage.basicInfoStep.title': 'Basic Information', + 'supplierAnnualTaskManage.basicInfoStep.theme': 'Review Theme', + 'supplierAnnualTaskManage.basicInfoStep.theme.placeholder': 'Please enter', + 'supplierAnnualTaskManage.basicInfoStep.theme.required': 'Please enter review theme', + 'supplierAnnualTaskManage.basicInfoStep.year': 'Review Year', + 'supplierAnnualTaskManage.basicInfoStep.year.placeholder': 'Please select year', + 'supplierAnnualTaskManage.basicInfoStep.year.required': 'Please select review year', + 'supplierAnnualTaskManage.basicInfoStep.startTime': 'Review Start Time', + 'supplierAnnualTaskManage.basicInfoStep.startTime.placeholder': 'Year/Month/Day', + 'supplierAnnualTaskManage.basicInfoStep.startTime.required': 'Please select review start time', + 'supplierAnnualTaskManage.basicInfoStep.endTime': 'Review End Time', + 'supplierAnnualTaskManage.basicInfoStep.endTime.placeholder': 'Year/Month/Day', + 'supplierAnnualTaskManage.basicInfoStep.endTime.required': 'Please select review end time', + 'supplierAnnualTaskManage.basicInfoStep.categoryLimitation': 'Category Limitation Type', + 'supplierAnnualTaskManage.basicInfoStep.categoryLimitation.required': 'Please select category limitation type', + 'supplierAnnualTaskManage.basicInfoStep.categoryLimitation.universal': 'Universal (No Category Limit)', + 'supplierAnnualTaskManage.basicInfoStep.categoryLimitation.limited': 'Limited Category', + 'supplierAnnualTaskManage.basicInfoStep.category': 'Select Category', + 'supplierAnnualTaskManage.basicInfoStep.category.required': 'Please select category', + 'supplierAnnualTaskManage.basicInfoStep.template': 'Select Template', + 'supplierAnnualTaskManage.basicInfoStep.template.placeholder': 'Please select', + 'supplierAnnualTaskManage.basicInfoStep.template.required': 'Please select applicable review template', + + // Supplier Select Step Component + 'supplierAnnualTaskManage.supplierSelectStep.title': 'Supplier Selection', + + // Evaluator Select Step Component + 'supplierAnnualTaskManage.evaluatorSelectStep.title': 'Select Reviewers', + 'supplierAnnualTaskManage.evaluatorSelectStep.batchSelect': 'Batch Select Reviewers', + 'supplierAnnualTaskManage.evaluatorSelectStep.noSupplier': 'Please select suppliers in the previous step', + 'supplierAnnualTaskManage.evaluatorSelectStep.validation.noSupplier': 'Please add at least one supplier', + 'supplierAnnualTaskManage.evaluatorSelectStep.validation.noEvaluator': 'There are suppliers without assigned reviewers', + 'supplierAnnualTaskManage.evaluatorSelectStep.defaultDept': 'Purchasing Department', +}; diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index 17ada5d..d8c824b 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -12,6 +12,7 @@ import dataStatistics from './zh-CN/dataStatistics'; import supplierAnnualTemplateManage from './zh-CN/supplierAnnualTemplateManage'; import supplierAnnualReview from './zh-CN/supplierAnnualReview'; import supplierAnnualResult from './zh-CN/supplierAnnualResult'; +import supplierAnnualTaskManage from './zh-CN/supplierAnnualTaskManage'; export default { 'navBar.lang': '语言', @@ -37,4 +38,5 @@ export default { ...supplierAnnualTemplateManage, ...supplierAnnualReview, ...supplierAnnualResult, + ...supplierAnnualTaskManage, }; diff --git a/src/locales/zh-CN/supplierAnnualTaskManage.ts b/src/locales/zh-CN/supplierAnnualTaskManage.ts index 0ea8d5f..453a86d 100644 --- a/src/locales/zh-CN/supplierAnnualTaskManage.ts +++ b/src/locales/zh-CN/supplierAnnualTaskManage.ts @@ -1 +1,143 @@ -// 供应商年审 任务管理模块 \ No newline at end of file +// 供应商年审 任务管理模块 +export default { + 'supplierAnnualTaskManage.title': '供应商年审任务管理', + 'supplierAnnualTaskManage.filter.theme': '评价主题', + 'supplierAnnualTaskManage.filter.theme.placeholder': '请输入评价主题', + 'supplierAnnualTaskManage.filter.time': '评价时间', + 'supplierAnnualTaskManage.filter.time.start': '开始日期', + 'supplierAnnualTaskManage.filter.time.end': '结束日期', + 'supplierAnnualTaskManage.filter.status': '评价状态', + 'supplierAnnualTaskManage.filter.status.placeholder': '请选择状态', + 'supplierAnnualTaskManage.button.search': '搜索', + 'supplierAnnualTaskManage.button.reset': '重置', + 'supplierAnnualTaskManage.button.add': '新增任务', + 'supplierAnnualTaskManage.button.view': '查看', + 'supplierAnnualTaskManage.button.edit': '编辑', + 'supplierAnnualTaskManage.table.index': '序号', + 'supplierAnnualTaskManage.table.theme': '评价主题', + 'supplierAnnualTaskManage.table.dept': '发起单位', + 'supplierAnnualTaskManage.table.startTime': '评价开始时间', + 'supplierAnnualTaskManage.table.endTime': '评价结束时间', + 'supplierAnnualTaskManage.table.status': '评价状态', + 'supplierAnnualTaskManage.table.action': '操作', + 'supplierAnnualTaskManage.message.editWarning': '只有待执行状态的任务才能编辑!', + 'supplierAnnualTaskManage.message.listFailed': '获取列表失败', + 'supplierAnnualTaskManage.pagination.total': '共 {total} 条记录', + + // 新增页面 + 'supplierAnnualTaskManage.add.title': '新增年审任务', + 'supplierAnnualTaskManage.edit.title': '修改年审任务', + 'supplierAnnualTaskManage.button.back': '返回', + 'supplierAnnualTaskManage.step.basicInfo.title': '基本信息', + 'supplierAnnualTaskManage.step.basicInfo.description': '请填写基本信息', + 'supplierAnnualTaskManage.step.selectSupplier.title': '选择供应商', + 'supplierAnnualTaskManage.step.selectSupplier.description': '请选择参加评价的供应商', + 'supplierAnnualTaskManage.step.selectEvaluator.title': '选择年审人员', + 'supplierAnnualTaskManage.step.selectEvaluator.description': '请选择供应商年审人员', + 'supplierAnnualTaskManage.button.prev': '上一步', + 'supplierAnnualTaskManage.button.next': '下一步', + 'supplierAnnualTaskManage.button.save': '保存', + 'supplierAnnualTaskManage.button.submit': '提交', + 'supplierAnnualTaskManage.message.formValidationFailed': '请完成必填项', + 'supplierAnnualTaskManage.modal.confirm.title': '提示', + 'supplierAnnualTaskManage.modal.confirm.content': '是否确认提交', + + // 详情页面 + 'supplierAnnualTaskManage.detail.title': '评价任务详情', + 'supplierAnnualTaskManage.detail.loading': '数据加载中...', + 'supplierAnnualTaskManage.detail.tab.basicInfo': '基本信息', + 'supplierAnnualTaskManage.detail.tab.supplierInfo': '供应商信息', + 'supplierAnnualTaskManage.detail.message.idEmpty': '任务ID不能为空', + 'supplierAnnualTaskManage.detail.message.noId': '未提供任务ID', + 'supplierAnnualTaskManage.detail.message.loadFailed': '获取任务详情失败', + + // 评价人员模态框 + 'supplierAnnualTaskManage.evaluatorModal.title': '{supplierName}的评价人员', + 'supplierAnnualTaskManage.evaluatorModal.button.close': '关闭', + 'supplierAnnualTaskManage.evaluatorModal.empty': '暂无评价人员数据', + + // 基本信息组件 + 'supplierAnnualTaskManage.basicInfo.title': '基本信息', + 'supplierAnnualTaskManage.basicInfo.theme': '评价主题', + 'supplierAnnualTaskManage.basicInfo.status': '评价状态', + 'supplierAnnualTaskManage.basicInfo.year': '评价年份', + 'supplierAnnualTaskManage.basicInfo.startTime': '开始时间', + 'supplierAnnualTaskManage.basicInfo.endTime': '结束时间', + 'supplierAnnualTaskManage.basicInfo.template': '评价模板', + 'supplierAnnualTaskManage.basicInfo.categoryLimitation': '品类限制', + 'supplierAnnualTaskManage.basicInfo.category': '品类', + 'supplierAnnualTaskManage.basicInfo.unknownStatus': '未知状态', + + // 供应商信息组件 + 'supplierAnnualTaskManage.supplierInfo.index': '序号', + 'supplierAnnualTaskManage.supplierInfo.supplierName': '供应商名称', + 'supplierAnnualTaskManage.supplierInfo.dept': '部门', + 'supplierAnnualTaskManage.supplierInfo.category': '品类', + 'supplierAnnualTaskManage.supplierInfo.action': '操作', + 'supplierAnnualTaskManage.supplierInfo.viewEvaluators': '查看评价人员', + 'supplierAnnualTaskManage.supplierInfo.empty': '暂无供应商数据', + 'supplierAnnualTaskManage.supplierInfo.noEvaluators': '未找到该供应商的年审人员信息', + + // 批量评价人员模态框 + 'supplierAnnualTaskManage.batchEvaluatorModal.title': '批量选择年审人员', + + // 供应商评价人员模态框 + 'supplierAnnualTaskManage.supplierEvaluatorModal.title.select': '选择年审人员 - {supplierName}', + 'supplierAnnualTaskManage.supplierEvaluatorModal.title.view': '查看年审人员 - {supplierName}', + 'supplierAnnualTaskManage.supplierEvaluatorModal.button.close': '关闭', + 'supplierAnnualTaskManage.supplierEvaluatorModal.warning.selectAtLeastOne': '请至少选择一名评价人员', + 'supplierAnnualTaskManage.supplierEvaluatorModal.noSupplier': '无供应商数据', + 'supplierAnnualTaskManage.supplierEvaluatorModal.noEvaluators': '当前供应商暂无年审人员,请点击"编辑人员"按钮添加', + 'supplierAnnualTaskManage.supplierEvaluatorModal.unknown.dept': '未知部门', + + // 供应商表格组件 + 'supplierAnnualTaskManage.supplierTable.supplierName': '供应商名称', + 'supplierAnnualTaskManage.supplierTable.socialCreditCode': '统一社会信用代码', + 'supplierAnnualTaskManage.supplierTable.categoryName': '准入品类', + 'supplierAnnualTaskManage.supplierTable.deptName': '准入部门', + 'supplierAnnualTaskManage.supplierTable.evaluatorCount': '年审人员数', + 'supplierAnnualTaskManage.supplierTable.action': '操作', + 'supplierAnnualTaskManage.supplierTable.button.view': '查看', + 'supplierAnnualTaskManage.supplierTable.button.editPersonnel': '编辑人员', + 'supplierAnnualTaskManage.supplierTable.button.delete': '删除', + 'supplierAnnualTaskManage.supplierTable.confirm.delete.title': '确定要删除此供应商吗?', + 'supplierAnnualTaskManage.supplierTable.confirm.delete.content': '供应商: {supplierName}', + 'supplierAnnualTaskManage.supplierTable.confirm.delete.content.withEvaluators': '供应商: {supplierName},将同时删除 {count} 名关联的评价人员', + 'supplierAnnualTaskManage.supplierTable.confirm.delete.okText': '确定', + 'supplierAnnualTaskManage.supplierTable.confirm.delete.cancelText': '取消', + + // 基本信息步骤组件 + 'supplierAnnualTaskManage.basicInfoStep.title': '基本信息', + 'supplierAnnualTaskManage.basicInfoStep.theme': '评价主题', + 'supplierAnnualTaskManage.basicInfoStep.theme.placeholder': '请输入', + 'supplierAnnualTaskManage.basicInfoStep.theme.required': '请输入评价主题', + 'supplierAnnualTaskManage.basicInfoStep.year': '评价年度', + 'supplierAnnualTaskManage.basicInfoStep.year.placeholder': '请选择年度', + 'supplierAnnualTaskManage.basicInfoStep.year.required': '请选择评价年度', + 'supplierAnnualTaskManage.basicInfoStep.startTime': '评价开始时间', + 'supplierAnnualTaskManage.basicInfoStep.startTime.placeholder': '年/月/日', + 'supplierAnnualTaskManage.basicInfoStep.startTime.required': '请选择评价开始时间', + 'supplierAnnualTaskManage.basicInfoStep.endTime': '评价结束时间', + 'supplierAnnualTaskManage.basicInfoStep.endTime.placeholder': '年/月/日', + 'supplierAnnualTaskManage.basicInfoStep.endTime.required': '请选择评价结束时间', + 'supplierAnnualTaskManage.basicInfoStep.categoryLimitation': '品类限制类型', + 'supplierAnnualTaskManage.basicInfoStep.categoryLimitation.required': '请选择品类限制类型', + 'supplierAnnualTaskManage.basicInfoStep.categoryLimitation.universal': '通用不限品类', + 'supplierAnnualTaskManage.basicInfoStep.categoryLimitation.limited': '限制品类', + 'supplierAnnualTaskManage.basicInfoStep.category': '选择品类', + 'supplierAnnualTaskManage.basicInfoStep.category.required': '请选择品类', + 'supplierAnnualTaskManage.basicInfoStep.template': '选择模板', + 'supplierAnnualTaskManage.basicInfoStep.template.placeholder': '请选择', + 'supplierAnnualTaskManage.basicInfoStep.template.required': '请选择适用评价模板', + + // 供应商选择步骤组件 + 'supplierAnnualTaskManage.supplierSelectStep.title': '供应商选择', + + // 评价人员选择步骤组件 + 'supplierAnnualTaskManage.evaluatorSelectStep.title': '选择评价人员', + 'supplierAnnualTaskManage.evaluatorSelectStep.batchSelect': '批量选择评价人员', + 'supplierAnnualTaskManage.evaluatorSelectStep.noSupplier': '请先在上一步选择供应商', + 'supplierAnnualTaskManage.evaluatorSelectStep.validation.noSupplier': '请至少添加一个供应商', + 'supplierAnnualTaskManage.evaluatorSelectStep.validation.noEvaluator': '存在未分配评价人员的供应商', + 'supplierAnnualTaskManage.evaluatorSelectStep.defaultDept': '采购部', +}; diff --git a/src/pages/dataStatistics/supplierAnnualStatistics/supplierAnnualStatistics.tsx b/src/pages/dataStatistics/supplierAnnualStatistics/supplierAnnualStatistics.tsx index d4217af..e99cfd2 100644 --- a/src/pages/dataStatistics/supplierAnnualStatistics/supplierAnnualStatistics.tsx +++ b/src/pages/dataStatistics/supplierAnnualStatistics/supplierAnnualStatistics.tsx @@ -1,25 +1,13 @@ import React, { useState, useEffect } from 'react'; -import { - Button, - Table, - Input, - Select, - Form, - Tooltip, - Tag, - message -} from 'antd'; +import { Button, Table, Input, Select, Form, Tooltip, Tag, message, DatePicker } from 'antd'; import type { TablePaginationConfig } from 'antd'; -import { - SearchOutlined, - DeleteOutlined, - ExportOutlined -} from '@ant-design/icons'; +import { SearchOutlined, DeleteOutlined, ExportOutlined } from '@ant-design/icons'; import { useIntl } from 'umi'; -import { AnnualReviewYears, AnnualReviewResultText, AnnualReviewResultColor } from '@/dicts/dataStatistics'; +import { AnnualReviewResultText, AnnualReviewResultColor } from '@/dicts/dataStatistics'; import { getSupplierAnnualReviewStatistics } from '@/servers/api/dataStatistics'; import './supplierAnnualStatistics.less'; import { downloadFile } from '@/utils/download'; +import moment from 'moment'; const { Option } = Select; @@ -28,7 +16,9 @@ const SupplierAnnualStatistics: React.FC = () => { const [loading, setLoading] = useState(false); const [form] = Form.useForm(); - const [statisticsData, setStatisticsData] = useState([]); + const [statisticsData, setStatisticsData] = useState< + DataStatistics.AnnualReviewStatisticsRecord[] + >([]); const [pagination, setPagination] = useState({ current: 1, pageSize: 10, @@ -37,7 +27,8 @@ const SupplierAnnualStatistics: React.FC = () => { showQuickJumper: true, showTotal: (total) => intl.formatMessage({ id: 'dataStatistics.common.total' }, { total }), }); - const [searchParams, setSearchParams] = useState({}); + const [searchParams, setSearchParams] = + useState({}); // 准入单位下拉选项 - 假数据 const companyOptions = [ @@ -86,7 +77,9 @@ const SupplierAnnualStatistics: React.FC = () => { total: response.data.total, }); } else { - message.error(response.message || intl.formatMessage({ id: 'dataStatistics.annual.getDataFailed' })); + message.error( + response.message || intl.formatMessage({ id: 'dataStatistics.annual.getDataFailed' }), + ); } } catch (error) { console.error('获取年审统计数据失败:', error); @@ -108,10 +101,12 @@ const SupplierAnnualStatistics: React.FC = () => { // 获取年审结果标签 const getResultTag = (result: string) => { - const color = AnnualReviewResultColor[result as keyof typeof AnnualReviewResultColor] || 'default'; - const text = result === '1' - ? intl.formatMessage({ id: 'dataStatistics.annual.qualified' }) - : intl.formatMessage({ id: 'dataStatistics.annual.unqualified' }); + const color = + AnnualReviewResultColor[result as keyof typeof AnnualReviewResultColor] || 'default'; + const text = + result === '1' + ? intl.formatMessage({ id: 'dataStatistics.annual.qualified' }) + : intl.formatMessage({ id: 'dataStatistics.annual.unqualified' }); return {text}; }; @@ -173,7 +168,8 @@ const SupplierAnnualStatistics: React.FC = () => { dataIndex: 'annualreviewYear', key: 'annualreviewYear', width: 100, - render: (year: string) => intl.formatMessage({ id: 'dataStatistics.common.yearFormat' }, { year }) + render: (year: string) => + intl.formatMessage({ id: 'dataStatistics.common.yearFormat' }, { year }), }, { title: intl.formatMessage({ id: 'dataStatistics.annual.annualStatisticsResult' }), @@ -205,27 +201,71 @@ const SupplierAnnualStatistics: React.FC = () => { layout="inline" className="filter-form" > - - + + - - + {companyOptions.map((option) => ( + ))} - - - - - + {annualResultOptions.map((option) => ( + ))} diff --git a/src/pages/dataStatistics/supplierExitStatistics/supplierExitStatistics.tsx b/src/pages/dataStatistics/supplierExitStatistics/supplierExitStatistics.tsx index 2ab3e4c..4a82eb7 100644 --- a/src/pages/dataStatistics/supplierExitStatistics/supplierExitStatistics.tsx +++ b/src/pages/dataStatistics/supplierExitStatistics/supplierExitStatistics.tsx @@ -1,22 +1,7 @@ import React, { useState, useEffect } from 'react'; -import { - Button, - Table, - Space, - Input, - Select, - Form, - Tooltip, - Tag, - DatePicker, - message -} from 'antd'; +import { Button, Table, Space, Input, Select, Form, Tooltip, Tag, DatePicker, message } from 'antd'; import type { TablePaginationConfig } from 'antd'; -import { - SearchOutlined, - DeleteOutlined, - ExportOutlined -} from '@ant-design/icons'; +import { SearchOutlined, DeleteOutlined, ExportOutlined } from '@ant-design/icons'; import { useIntl } from 'umi'; import { getSupplierExitStatistics } from '@/servers/api/dataStatistics'; import moment from 'moment'; @@ -78,7 +63,7 @@ const SupplierExitStatistics: React.FC = () => { pageNo: current, pageSize: pageSize, }, - ...otherParams + ...otherParams, }; // 如果有日期范围,转换为开始和结束日期 @@ -99,7 +84,9 @@ const SupplierExitStatistics: React.FC = () => { total: response.data.total, }); } else { - message.error(response.message || intl.formatMessage({ id: 'dataStatistics.exit.getDataFailed' })); + message.error( + response.message || intl.formatMessage({ id: 'dataStatistics.exit.getDataFailed' }), + ); } } catch (error) { console.error('获取退出统计数据失败:', error); @@ -213,22 +200,54 @@ const SupplierExitStatistics: React.FC = () => { layout="inline" className="filter-form" > - - + + - - + {companyOptions.map((option) => ( + ))} - - + ({ + value: value ? moment(value) : undefined, + })} + normalize={(value) => value && value.format('YYYY')} + > + ]} width={600} @@ -32,7 +40,9 @@ const EvaluatorModal: React.FC = ({ visible, supplier, onCa ) : ( -
暂无评价人员数据
+
+ +
)} ); diff --git a/src/pages/supplierAnnualManage/supplierAnnualTaskManage/components/Detail/SupplierInfo.tsx b/src/pages/supplierAnnualManage/supplierAnnualTaskManage/components/Detail/SupplierInfo.tsx index b4e8381..2b8372b 100644 --- a/src/pages/supplierAnnualManage/supplierAnnualTaskManage/components/Detail/SupplierInfo.tsx +++ b/src/pages/supplierAnnualManage/supplierAnnualTaskManage/components/Detail/SupplierInfo.tsx @@ -1,5 +1,6 @@ import React from 'react'; import { Card, Table, Button, message } from 'antd'; +import { useIntl, FormattedMessage } from 'umi'; import styles from '../../supplierAnnualTaskManageDetail.less'; interface SupplierInfoProps { @@ -8,6 +9,8 @@ interface SupplierInfoProps { } const SupplierInfo: React.FC = ({ taskData, onViewEvaluators }) => { + const intl = useIntl(); + // 查看供应商评价人员 const handleViewSupplierEvaluators = (record: supplierAnnualTaskManage.TaskDetailData) => { if (record.userList && record.userList.length > 0) { @@ -16,47 +19,51 @@ const SupplierInfo: React.FC = ({ taskData, onViewEvaluators userList: record.userList, }); } else { - message.error('未找到该供应商的年审人员信息'); + message.error(intl.formatMessage({ id: 'supplierAnnualTaskManage.supplierInfo.noEvaluators' })); } }; const columns = [ { - title: '序号', + title: , dataIndex: 'index', key: 'index', render: (_: any, __: any, index: number) => index + 1, width: 80, }, { - title: '供应商名称', + title: , dataIndex: 'supplierName', key: 'supplierName', }, { - title: '部门', + title: , dataIndex: 'deptName', key: 'deptName', }, { - title: '品类', + title: , dataIndex: 'categoryName', key: 'categoryName', render: (text: string) => text || '--', }, { - title: '操作', + title: , key: 'action', render: (record: any) => ( ), }, ]; if (!taskData || !taskData.blackSupplierVos || taskData.blackSupplierVos.length === 0) { - return
暂无供应商数据
; + return ( +
+ +
+ ); } return ( diff --git a/src/pages/supplierAnnualManage/supplierAnnualTaskManage/components/EvaluatorComponents/BatchEvaluatorModal.tsx b/src/pages/supplierAnnualManage/supplierAnnualTaskManage/components/EvaluatorComponents/BatchEvaluatorModal.tsx index 5eb3bf4..8d80ec2 100644 --- a/src/pages/supplierAnnualManage/supplierAnnualTaskManage/components/EvaluatorComponents/BatchEvaluatorModal.tsx +++ b/src/pages/supplierAnnualManage/supplierAnnualTaskManage/components/EvaluatorComponents/BatchEvaluatorModal.tsx @@ -1,5 +1,6 @@ import React from 'react'; import { Modal } from 'antd'; +import { useIntl, FormattedMessage } from 'umi'; import EvaluateTaskPersonnelSelector from '@/components/EvaluateTaskPersonnelSelector/EvaluateTaskPersonnelSelector'; interface BatchEvaluatorModalProps { @@ -19,6 +20,8 @@ const BatchEvaluatorModal: React.FC = ({ filter, filterUserIds, }) => { + const intl = useIntl(); + // 将 API.PersonnelItem 转换为 supplierAnnualTaskManage.PersonnelItem const convertToTaskPersonnel = (items: API.PersonnelItem[]): supplierAnnualTaskManage.PersonnelItem[] => { return items.map(item => ({ @@ -52,7 +55,7 @@ const BatchEvaluatorModal: React.FC = ({ return ( = ({ filter, filterUserIds, }) => { + const intl = useIntl(); + // 本地保存当前选中的人员,确保在弹窗打开/关闭时能正确处理数据 const [localSelectedPersonnel, setLocalSelectedPersonnel] = useState([]); @@ -68,7 +71,7 @@ const SupplierEvaluatorModal: React.FC = ({ // 处理选择人员的回调 const handleSelect = (personnel: API.PersonnelItem[]) => { if (personnel.length === 0) { - message.warning('请至少选择一名评价人员'); + message.warning(intl.formatMessage({ id: 'supplierAnnualTaskManage.supplierEvaluatorModal.warning.selectAtLeastOne' })); return; } const convertedPersonnel = convertToTaskPersonnel(personnel); @@ -80,13 +83,17 @@ const SupplierEvaluatorModal: React.FC = ({ const renderEvaluatorList = () => { if (!currentSupplier) { - return
无供应商数据
; + return ( +
+ +
+ ); } if (!currentSupplier.evaluators || currentSupplier.evaluators.length === 0) { return (
- 当前供应商暂无年审人员,请点击"编辑人员"按钮添加 +
); } @@ -99,7 +106,7 @@ const SupplierEvaluatorModal: React.FC = ({ )} @@ -107,18 +114,28 @@ const SupplierEvaluatorModal: React.FC = ({ ); }; + // 根据模式获取模态框标题 + const getModalTitle = () => { + const titleId = mode === ModalMode.SELECT + ? 'supplierAnnualTaskManage.supplierEvaluatorModal.title.select' + : 'supplierAnnualTaskManage.supplierEvaluatorModal.title.view'; + + return intl.formatMessage( + { id: titleId }, + { supplierName: currentSupplier?.supplierName || '' } + ); + }; + return ( - 关闭 + , ] : null diff --git a/src/pages/supplierAnnualManage/supplierAnnualTaskManage/components/EvaluatorComponents/SupplierTable.tsx b/src/pages/supplierAnnualManage/supplierAnnualTaskManage/components/EvaluatorComponents/SupplierTable.tsx index e60e96d..6dcdc70 100644 --- a/src/pages/supplierAnnualManage/supplierAnnualTaskManage/components/EvaluatorComponents/SupplierTable.tsx +++ b/src/pages/supplierAnnualManage/supplierAnnualTaskManage/components/EvaluatorComponents/SupplierTable.tsx @@ -1,5 +1,6 @@ import React from 'react'; import { Table, Space, Button, Modal, Tooltip } from 'antd'; +import { useIntl, FormattedMessage } from 'umi'; interface SupplierTableProps { suppliers: supplierAnnualTaskManage.SupplierItem[]; // 供应商数据列表 @@ -20,6 +21,8 @@ const SupplierTable: React.FC = ({ onDeleteSupplier, mode, }) => { + const intl = useIntl(); + // 表格行选择配置 const rowSelection = { selectedRowKeys, @@ -28,14 +31,27 @@ const SupplierTable: React.FC = ({ // 删除确认对话框 const showDeleteConfirm = (record: supplierAnnualTaskManage.SupplierItem) => { + let content = intl.formatMessage( + { id: 'supplierAnnualTaskManage.supplierTable.confirm.delete.content' }, + { supplierName: record.supplierName } + ); + + if (record.evaluatorCount && record.evaluatorCount > 0) { + content = intl.formatMessage( + { id: 'supplierAnnualTaskManage.supplierTable.confirm.delete.content.withEvaluators' }, + { + supplierName: record.supplierName, + count: record.evaluatorCount + } + ); + } + Modal.confirm({ - title: '确定要删除此供应商吗?', - content: `供应商: ${record.supplierName}${ - record.evaluatorCount && record.evaluatorCount > 0 ? `,将同时删除 ${record.evaluatorCount} 名关联的评价人员` : '' - }`, - okText: '确定', + title: intl.formatMessage({ id: 'supplierAnnualTaskManage.supplierTable.confirm.delete.title' }), + content: content, + okText: intl.formatMessage({ id: 'supplierAnnualTaskManage.supplierTable.confirm.delete.okText' }), okType: 'danger', - cancelText: '取消', + cancelText: intl.formatMessage({ id: 'supplierAnnualTaskManage.supplierTable.confirm.delete.cancelText' }), onOk: () => onDeleteSupplier(record.id), }); }; @@ -43,17 +59,17 @@ const SupplierTable: React.FC = ({ // 表格列定义 const columns = [ { - title: '供应商名称', // 列标题 - dataIndex: 'supplierName', // 数据字段名 - key: 'supplierName', // 列的唯一标识 + title: , + dataIndex: 'supplierName', + key: 'supplierName', }, { - title: '统一社会信用代码', + title: , dataIndex: 'socialCreditCode', key: 'socialCreditCode', }, { - title: '准入品类', + title: , dataIndex: 'categoryName', key: 'categoryName', render: (categoryName: string) => ( @@ -63,18 +79,18 @@ const SupplierTable: React.FC = ({ ), }, { - title: '准入部门', + title: , dataIndex: 'deptName', key: 'deptName', }, { - title: '年审人员数', - align: 'center' as const, // 列对齐方式 - dataIndex: 'evaluatorCount', // 年审人员数量字段 + title: , + align: 'center' as const, + dataIndex: 'evaluatorCount', key: 'evaluatorCount', }, { - title: '操作', + title: , key: 'action', render: (_: any, record: supplierAnnualTaskManage.SupplierItem) => ( @@ -84,15 +100,15 @@ const SupplierTable: React.FC = ({ onViewEvaluators(record); }} > - 查看 + {mode !== 'division' && ( <> )} @@ -103,11 +119,11 @@ const SupplierTable: React.FC = ({ return ( ); }; diff --git a/src/pages/supplierAnnualManage/supplierAnnualTaskManage/components/EvaluatorSelectStep.tsx b/src/pages/supplierAnnualManage/supplierAnnualTaskManage/components/EvaluatorSelectStep.tsx index ca56179..fc799d2 100644 --- a/src/pages/supplierAnnualManage/supplierAnnualTaskManage/components/EvaluatorSelectStep.tsx +++ b/src/pages/supplierAnnualManage/supplierAnnualTaskManage/components/EvaluatorSelectStep.tsx @@ -1,5 +1,6 @@ import React, { useState, useEffect, forwardRef, useImperativeHandle } from 'react'; import { Card, Button, Space } from 'antd'; +import { useIntl, FormattedMessage } from 'umi'; import styles from '../supplierAnnualTaskManageAdd.less'; import { SupplierTable, @@ -37,6 +38,7 @@ interface EvaluatorSelectStepProps { * 3. 通过 dispatch 将更新的数据同步回 model */ const EvaluatorSelectStepComponent = (props: EvaluatorSelectStepProps) => { + const intl = useIntl(); const { supplierAnnualTaskManage, dispatch, innerRef } = props; // 从 model 获取表单数据,避免通过 props 层层传递 @@ -77,7 +79,7 @@ const EvaluatorSelectStepComponent = (props: EvaluatorSelectStepProps) => { validateFields: () => { // 自定义验证逻辑 if (suppliers.length === 0) { - return Promise.reject('请至少添加一个供应商'); + return Promise.reject(intl.formatMessage({ id: 'supplierAnnualTaskManage.evaluatorSelectStep.validation.noSupplier' })); } // 检查是否每个供应商都有评价人员 @@ -86,7 +88,7 @@ const EvaluatorSelectStepComponent = (props: EvaluatorSelectStepProps) => { ); if (hasNoEvaluator) { - return Promise.reject('存在未分配评价人员的供应商'); + return Promise.reject(intl.formatMessage({ id: 'supplierAnnualTaskManage.evaluatorSelectStep.validation.noEvaluator' })); } return Promise.resolve(); @@ -107,7 +109,7 @@ const EvaluatorSelectStepComponent = (props: EvaluatorSelectStepProps) => { const evaluators = supplier.evaluators || []; return { ...supplier, - userDept: supplier.userDept || '采购部', // 设置默认部门 + userDept: supplier.userDept || intl.formatMessage({ id: 'supplierAnnualTaskManage.evaluatorSelectStep.defaultDept' }), // 设置默认部门 evaluatorCount: evaluators.length, evaluators: evaluators, }; @@ -121,7 +123,7 @@ const EvaluatorSelectStepComponent = (props: EvaluatorSelectStepProps) => { setSuppliers([]); } - }, [taskFormData]); // 依赖于 taskFormData,当 model 数据变化时重新计算 + }, [taskFormData, intl]); // 依赖于 taskFormData,当 model 数据变化时重新计算 /** @@ -282,7 +284,7 @@ const EvaluatorSelectStepComponent = (props: EvaluatorSelectStepProps) => { // 渲染组件 return (
- + {/* 工具栏区域 */} {mode !== 'division' && (
@@ -292,7 +294,7 @@ const EvaluatorSelectStepComponent = (props: EvaluatorSelectStepProps) => { onClick={handleBatchSelect} disabled={selectedRowKeys.length === 0} > - 批量选择评价人员 +
@@ -301,7 +303,7 @@ const EvaluatorSelectStepComponent = (props: EvaluatorSelectStepProps) => { {/* 供应商表格区域 */} {suppliers.length === 0 ? (
- 请先在上一步选择供应商 +
) : ( { + const intl = useIntl(); const { supplierAnnualTaskManage, dispatch, innerRef } = props; // 从model获取数据 @@ -62,7 +64,7 @@ const SupplierSelectStepComponent = (props: SupplierSelectStepProps) => { return (
- + { + const intl = useIntl(); const [form] = Form.useForm(); const [loading, setLoading] = useState(false); const [data, setData] = useState([]); @@ -38,7 +39,8 @@ const SupplierAnnualTaskManage: React.FC = () => { current: 1, pageSize: 10, total: 0, - showTotal: (total: number) => `共 ${total} 条记录`, + showTotal: (total: number) => + intl.formatMessage({ id: 'supplierAnnualTaskManage.pagination.total' }, { total }), showSizeChanger: true, showQuickJumper: true, }); @@ -64,11 +66,11 @@ const SupplierAnnualTaskManage: React.FC = () => { total: res.data?.total || 0, }); } else { - message.error(res.message || '获取列表失败'); + message.error(res.message || intl.formatMessage({ id: 'supplierAnnualTaskManage.message.listFailed' })); } } catch (error) { console.error('获取列表失败:', error); - message.error('获取列表失败'); + message.error(intl.formatMessage({ id: 'supplierAnnualTaskManage.message.listFailed' })); } finally { setLoading(false); } @@ -142,7 +144,7 @@ const SupplierAnnualTaskManage: React.FC = () => { // 编辑任务 const handleEdit = (record: supplierAnnualTaskManage.TaskRecord) => { if (record.status !== AnnualTaskStatus.PENDING) { - message.warning('只有待执行状态的任务才能编辑!'); + message.warning(intl.formatMessage({ id: 'supplierAnnualTaskManage.message.editWarning' })); return; } @@ -156,7 +158,7 @@ const SupplierAnnualTaskManage: React.FC = () => { const columns = [ { - title: '序号', + title: , dataIndex: 'index', key: 'index', width: 80, @@ -164,7 +166,7 @@ const SupplierAnnualTaskManage: React.FC = () => { index + 1 + (pagination.current - 1) * pagination.pageSize, }, { - title: '评价主题', + title: , dataIndex: 'annualreviewTheme', key: 'annualreviewTheme', ellipsis: { @@ -177,31 +179,31 @@ const SupplierAnnualTaskManage: React.FC = () => { ), }, { - title: '发起单位', + title: , dataIndex: 'deptName', key: 'deptName', width: 150, }, { - title: '评价开始时间', + title: , dataIndex: 'startTime', key: 'startTime', width: 140, }, { - title: '评价结束时间', + title: , dataIndex: 'endTime', key: 'endTime', width: 140, }, { - title: '评价状态', + title: , dataIndex: 'statusName', key: 'statusName', width: 100 }, { - title: '操作', + title: , key: 'action', width: 180, fixed: 'right' as const, @@ -209,11 +211,11 @@ const SupplierAnnualTaskManage: React.FC = () => { render: (_: any, record: supplierAnnualTaskManage.TaskRecord) => ( {record.status === AnnualTaskStatus.PENDING && ( )} @@ -231,18 +233,21 @@ const SupplierAnnualTaskManage: React.FC = () => { layout="inline" className="filter-form" > - - + + - + - - {evaluateStatus.map((item) => (
diff --git a/src/pages/supplierAnnualManage/supplierAnnualTaskManage/supplierAnnualTaskManageAdd.tsx b/src/pages/supplierAnnualManage/supplierAnnualTaskManage/supplierAnnualTaskManageAdd.tsx index a8386af..d7ef2a5 100644 --- a/src/pages/supplierAnnualManage/supplierAnnualTaskManage/supplierAnnualTaskManageAdd.tsx +++ b/src/pages/supplierAnnualManage/supplierAnnualTaskManage/supplierAnnualTaskManageAdd.tsx @@ -1,6 +1,6 @@ import React, { useRef, useEffect } from 'react'; import { Card, Steps, Button, message, Space, Row, Col, Modal } from 'antd'; -import { connect, history } from 'umi'; +import { connect, history, useIntl, FormattedMessage } from 'umi'; import type { ConnectProps, Dispatch } from 'umi'; import { ArrowLeftOutlined, SaveOutlined } from '@ant-design/icons'; import BasicInfoStep from './components/BasicInfoStep'; @@ -39,6 +39,7 @@ interface PageProps extends ConnectProps { * 使用步骤式表单引导用户完成添加或编辑任务的流程 */ const SupplierTaskManageAdd: React.FC = ({ supplierAnnualTaskManage, dispatch }) => { + const intl = useIntl(); // 获取dva model中的状态 const { currentStep, loading, detailLoading } = supplierAnnualTaskManage; @@ -96,18 +97,18 @@ const SupplierTaskManageAdd: React.FC = ({ supplierAnnualTaskManage, // 步骤配置,定义每个步骤的标题、描述和内容组件 const steps = [ { - title: '基本信息', // 步骤标题 - description: '请填写基本信息', // 步骤描述 + title: intl.formatMessage({ id: 'supplierAnnualTaskManage.step.basicInfo.title' }), // 步骤标题 + description: intl.formatMessage({ id: 'supplierAnnualTaskManage.step.basicInfo.description' }), // 步骤描述 content: , // 步骤内容组件 }, { - title: '选择供应商', - description: '请选择参加评价的供应商', + title: intl.formatMessage({ id: 'supplierAnnualTaskManage.step.selectSupplier.title' }), + description: intl.formatMessage({ id: 'supplierAnnualTaskManage.step.selectSupplier.description' }), content: , }, { - title: '选择年审人员', - description: '请选择供应商年审人员', + title: intl.formatMessage({ id: 'supplierAnnualTaskManage.step.selectEvaluator.title' }), + description: intl.formatMessage({ id: 'supplierAnnualTaskManage.step.selectEvaluator.description' }), content: , }, ]; @@ -148,7 +149,7 @@ const SupplierTaskManageAdd: React.FC = ({ supplierAnnualTaskManage, if (typeof errorInfo === 'string') { message.error(errorInfo); } else if (errorInfo && errorInfo.errorFields) { - message.error('请完成必填项'); + message.error(intl.formatMessage({ id: 'supplierAnnualTaskManage.message.formValidationFailed' })); } } }; @@ -198,8 +199,8 @@ const SupplierTaskManageAdd: React.FC = ({ supplierAnnualTaskManage, } // 如果是编辑模式,则直接提交 提示是否确认后直接提交 Modal.confirm({ - title: '提示', - content: '是否确认提交', + title: intl.formatMessage({ id: 'supplierAnnualTaskManage.modal.confirm.title' }), + content: intl.formatMessage({ id: 'supplierAnnualTaskManage.modal.confirm.content' }), onOk: () => { submitTaskData(null); }, @@ -212,9 +213,13 @@ const SupplierTaskManageAdd: React.FC = ({ supplierAnnualTaskManage, {/* 页面头部,包含标题和返回按钮 */}
-

{isEditMode ? '修改年审任务' : '新增年审任务'}

+

+ {isEditMode + ? intl.formatMessage({ id: 'supplierAnnualTaskManage.edit.title' }) + : intl.formatMessage({ id: 'supplierAnnualTaskManage.add.title' })} +

@@ -237,11 +242,13 @@ const SupplierTaskManageAdd: React.FC = ({ supplierAnnualTaskManage, {/* 如果当前是评价分工步骤,则不显示上一步按钮 */} {currentStep > 0 && ( - + )} {currentStep < steps.length - 1 && ( )} {currentStep === steps.length - 1 && ( @@ -251,7 +258,9 @@ const SupplierTaskManageAdd: React.FC = ({ supplierAnnualTaskManage, icon={} onClick={handleSubmit} > - {isEditMode ? '保存' : '提交'} + {isEditMode + ? + : } )} diff --git a/src/pages/supplierAnnualManage/supplierAnnualTaskManage/supplierAnnualTaskManageDetail.tsx b/src/pages/supplierAnnualManage/supplierAnnualTaskManage/supplierAnnualTaskManageDetail.tsx index 507002e..b5ccd9b 100644 --- a/src/pages/supplierAnnualManage/supplierAnnualTaskManage/supplierAnnualTaskManageDetail.tsx +++ b/src/pages/supplierAnnualManage/supplierAnnualTaskManage/supplierAnnualTaskManageDetail.tsx @@ -1,6 +1,6 @@ import React, { useState, useEffect } from 'react'; import { Card, Button, message, Spin, Tabs, Typography } from 'antd'; -import { history, useLocation } from 'umi'; +import { history, useLocation, useIntl, FormattedMessage } from 'umi'; import { ArrowLeftOutlined } from '@ant-design/icons'; import { getAnnualTaskDetail } from '@/servers/api/supplierAnnual'; import { @@ -20,6 +20,7 @@ const useQuery = () => { }; const SupplierTaskManageDetail: React.FC = () => { + const intl = useIntl(); const query = useQuery(); const taskId = query.get('id'); @@ -39,7 +40,7 @@ const SupplierTaskManageDetail: React.FC = () => { // 获取任务详情 const fetchTaskDetail = async (id: string) => { if (!id) { - message.error('任务ID不能为空'); + message.error(intl.formatMessage({ id: 'supplierAnnualTaskManage.detail.message.idEmpty' })); return; } @@ -49,11 +50,11 @@ const SupplierTaskManageDetail: React.FC = () => { if (response.success) { setTaskData(response.data); } else { - message.error(response.message || '获取任务详情失败'); + message.error(response.message || intl.formatMessage({ id: 'supplierAnnualTaskManage.detail.message.loadFailed' })); } } catch (error) { console.error('获取任务详情失败:', error); - message.error('获取任务详情失败'); + message.error(intl.formatMessage({ id: 'supplierAnnualTaskManage.detail.message.loadFailed' })); } finally { setLoading(false); } @@ -64,7 +65,7 @@ const SupplierTaskManageDetail: React.FC = () => { if (taskId) { fetchTaskDetail(taskId); } else { - message.error('未提供任务ID'); + message.error(intl.formatMessage({ id: 'supplierAnnualTaskManage.detail.message.noId' })); } }, [taskId]); @@ -84,22 +85,24 @@ const SupplierTaskManageDetail: React.FC = () => {
- 评价任务详情 + + <FormattedMessage id="supplierAnnualTaskManage.detail.title" /> +
{loading ? (
- +
) : ( - + {taskData && } - + {taskData && { }); }; - // 年度选项生成 - const yearOptions = useCallback(() => { - const currentYear = new Date().getFullYear(); - return Array.from({ length: 11 }, (_, i) => currentYear - 5 + i).map((year) => ( - - )); - }, []); // 判断是否显示品类选择器 const shouldShowCategorySelector = useCallback(() => { @@ -130,11 +121,17 @@ const BasicInfoStepComponent = (props: BasicInfoStepProps) => { ({ + value: value ? moment(value) : undefined, + })} + normalize={(value) => value && value.format('YYYY')} rules={[{ required: true, message: intl.formatMessage({ id: 'supplierTaskManage.placeholder.selectYear' }) }]} > - +