diff --git a/src/locales/en.ts b/src/locales/en.ts
index 6781d569..5c7a1810 100644
--- a/src/locales/en.ts
+++ b/src/locales/en.ts
@@ -4269,5 +4269,228 @@ export default {
messageDeviceNoParams: 'No parameters under this device',
messageFetchChartFailed: 'Failed to load chart data'
}
+ },
+ ProductionReport: {
+ Index: {
+ searchCodeLabel: 'Task Code',
+ searchCodePlaceholder: 'Please enter task code',
+ searchOrderDateLabel: 'Order Date',
+ searchDeliveryDateLabel: 'Delivery Date',
+ searchRemarkLabel: 'Remark',
+ searchRemarkPlaceholder: 'Please enter remark',
+ searchCreateTimeLabel: 'Create Time',
+ startDatePlaceholder: 'Start Date',
+ endDatePlaceholder: 'End Date',
+ buttonSearch: 'Search',
+ buttonReset: 'Reset',
+ buttonExport: 'Export',
+ tabAll: 'All',
+ tabIssued: 'Issued',
+ tabPartialScheduled: 'Partial Scheduled',
+ tabPendingProduction: 'Pending',
+ tabInProduction: 'In Production',
+ tabCompleted: 'Completed',
+ tableCode: 'Task Code',
+ tableOrderDate: 'Order Date',
+ tableDeliveryDate: 'Delivery Date',
+ tableStatus: 'Status',
+ tableIsScheduled: 'Scheduled',
+ tableProductionProgress: 'Progress',
+ tableRemark: 'Remark',
+ yes: 'Yes',
+ no: 'No',
+ detailTabBasicInfo: 'Basic Info',
+ detailTabRelatedPlan: 'Related Plans',
+ detailTabQualityInfo: 'Quality Info',
+ detailTabBaogongInfo: 'Work Report',
+ exportFilename: 'ProductionReport'
+ },
+ BasicInfo: {
+ buttonRefresh: 'Refresh',
+ tableTaskCode: 'Task Code',
+ tableProductCode: 'Product Code',
+ tableProductName: 'Product Name',
+ tableTotalNumber: 'Total Qty',
+ tablePlanNumber: 'Planned Qty',
+ tableUnplannedNumber: 'Unplanned Qty',
+ tableOperate: 'Operate',
+ buttonViewProductInfo: 'View Product'
+ },
+ ProductInfo: {
+ dialogTitle: 'Product Info',
+ labelProductCode: 'Product Code',
+ labelProductName: 'Product Name',
+ labelNumber: 'Quantity',
+ labelUnit: 'Unit',
+ labelSpecification: 'Specification',
+ tableMaterialCode: 'Material Code',
+ tableMaterialName: 'Material Name',
+ tableRequiredQuantity: 'Required Qty',
+ tableUnit: 'Unit'
+ },
+ BaogongInfo: {
+ dateRangeSeparator: 'To',
+ startDatePlaceholder: 'Start Date',
+ endDatePlaceholder: 'End Date',
+ buttonToday: 'Today',
+ buttonLast7Days: 'Last 7 Days',
+ buttonLast30Days: 'Last 30 Days',
+ buttonReset: 'Reset',
+ buttonRefresh: 'Refresh',
+ tableTaskCode: 'Task Code',
+ tablePlanCode: 'Plan Code',
+ tableEmployeeId: 'Employee ID',
+ tableEmployeeName: 'Employee Name',
+ tableProductName: 'Product Name',
+ tableProductCode: 'Product Code',
+ tableBaogongNumber: 'Report Qty',
+ tablePassNumber: 'Pass Qty',
+ tableNoPassNumber: 'Fail Qty',
+ tablePassRate: 'Pass Rate%',
+ tableNoPassReason: 'Fail Reason',
+ tableBaogongTime: 'Report Time'
+ },
+ QualityInfo: {
+ buttonRefresh: 'Refresh',
+ expandTableName: 'Inspection Item',
+ expandTableMethod: 'Method',
+ expandTableStandard: 'Standard',
+ expandTableUnit: 'Unit',
+ expandTableUpperLimit: 'Upper Limit',
+ expandTableLowerLimit: 'Lower Limit',
+ expandTableInputValue: 'Input Value',
+ expandTableImage: 'Image',
+ expandTablePreview: 'Preview',
+ expandTableResult: 'Result',
+ expandTableRemark: 'Remark',
+ tableCode: 'Inspection Code',
+ tableCategory: 'Category',
+ tableStatus: 'Status',
+ tableTicketCode: 'Ticket Code',
+ tableProcess: 'Process',
+ tableSchema: 'Inspection Schema',
+ tableManager: 'Manager',
+ tableExecutor: 'Executor',
+ tableExecuteTime: 'Execute Time',
+ tableRemark: 'Remark',
+ tableResult: 'Result',
+ resultPass: 'Pass',
+ resultFail: 'Fail',
+ inspectionPending: 'Pending',
+ inspectionPass: 'Passed',
+ inspectionFail: 'Failed',
+ unknown: 'Unknown'
+ },
+ RelatedPlan: {
+ buttonRefresh: 'Refresh',
+ emptyDescription: 'No related plans'
+ },
+ PlanCard: {
+ labelProductName: 'Product Name',
+ labelDeviceName: 'Device Name',
+ labelPlanStartTime: 'Plan Start Time',
+ labelPlanEndTime: 'Plan End Time',
+ labelLatestStartTime: 'Latest Start Time',
+ statPlanNumber: 'Planned Qty',
+ statWangongNumber: 'Completed Qty',
+ statPassNumber: 'Pass Qty',
+ statNoPassNumber: 'Fail Qty',
+ statPassRate: 'Pass Rate',
+ emptyDescription: 'No data'
+ },
+ Timeline: {
+ unknown: 'Unknown',
+ statusScheduled: 'Scheduled',
+ statusPaused: 'Paused',
+ statusPendingStorage: 'Pending Storage',
+ statusStored: 'Stored',
+ statusStarted: 'Started'
+ }
+ },
+ GanttChart: {
+ Index: {
+ searchTimeLabel: 'Query Time',
+ startPlaceholder: 'Start Time',
+ endPlaceholder: 'End Time',
+ deviceLabel: 'Device',
+ devicePlaceholder: 'Please select device',
+ buttonSearch: 'Search',
+ buttonReset: 'Reset'
+ },
+ CardView: {
+ legendScheduled: 'Scheduled',
+ legendMerged: 'Merged',
+ legendPaused: 'Paused',
+ legendPendingStorage: 'Pending Storage',
+ legendStored: 'Stored',
+ statPlanCount: 'Plans',
+ statCapacity: 'Capacity',
+ planCodeLabel: 'Plan Code:',
+ productLabel: 'Product:',
+ planNumberLabel: 'Plan Qty:',
+ deliveryDateLabel: 'Delivery Date:',
+ startLabel: 'Start:',
+ endLabel: 'End:',
+ emptyDescription: 'No Plans',
+ statusScheduled: 'Scheduled',
+ statusMerged: 'Merged',
+ statusPaused: 'Paused',
+ statusPendingStorage: 'Pending Storage',
+ statusStored: 'Stored',
+ statusUnknown: 'Unknown'
+ },
+ GanttPanel: {
+ detailTitle: 'Schedule Info',
+ deviceNameLabel: 'Device Name',
+ deviceIdLabel: 'Device ID',
+ capacityLabel: 'Capacity',
+ dailyAvgLabel: 'Daily Avg Report',
+ dataCollectionCapacityLabel: 'DC Capacity',
+ planCountLabel: 'Plan Count',
+ planDetailTitle: 'Plan Details',
+ planCodeColon: 'Plan Code: ',
+ planNumberColon: 'Plan Qty: ',
+ deliveryDateColon: 'Delivery Date: ',
+ startColon: 'Start: ',
+ endColon: 'End: ',
+ latestStartColon: 'Latest Start: ',
+ emptyDescription: 'No Schedule Info',
+ adjustTaskTitle: 'Adjust Task',
+ deviceLabel: 'Device',
+ devicePlaceholder: 'Please select device',
+ startDateLabel: 'Start Date',
+ startDatePlaceholder: 'Please select start date',
+ durationLabel: 'Days',
+ buttonCancel: 'Cancel',
+ buttonConfirm: 'Confirm',
+ editStartDateTitle: 'Edit Start Time',
+ startTimeLabel: 'Start Time',
+ startTimePlaceholder: 'Please select start time',
+ warningCompleteDeviceDate: 'Please complete device and start date',
+ warningValidTime: 'Please select a valid time',
+ columnTaskName: 'Task Name',
+ columnStartTime: 'Start Time',
+ columnDays: 'Days',
+ scaleMonthFormat: 'MMM YYYY',
+ tooltipTaskDetail: 'Task Detail',
+ tooltipTaskCode: 'Task Code: ',
+ tooltipProduct: 'Product: ',
+ tooltipDetailId: 'Detail ID: ',
+ tooltipPlanNumber: 'Plan Qty: ',
+ tooltipStart: 'Start: ',
+ tooltipEnd: 'End: ',
+ tooltipLatestStart: 'Latest Start: ',
+ tooltipSummary: 'Summary',
+ tooltipDevice: 'Device: ',
+ tooltipDetailCount: 'Detail Count: ',
+ tooltipTotalPlanNumber: 'Total Plan Qty: ',
+ tooltipEarliestStart: 'Earliest Start: ',
+ tooltipLatestEnd: 'Latest End: ',
+ statusScheduled: 'Scheduled',
+ statusStarted: 'Started',
+ statusPaused: 'Paused',
+ statusPendingStorage: 'Pending Storage',
+ statusStored: 'Stored'
+ }
}
}
diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts
index eef7d30c..8b896efa 100644
--- a/src/locales/zh-CN.ts
+++ b/src/locales/zh-CN.ts
@@ -4486,6 +4486,229 @@ export default {
}
+ }
+ },
+ ProductionReport: {
+ Index: {
+ searchCodeLabel: '任务单编码',
+ searchCodePlaceholder: '请输入任务单编码',
+ searchOrderDateLabel: '下达日期',
+ searchDeliveryDateLabel: '交货日期',
+ searchRemarkLabel: '备注',
+ searchRemarkPlaceholder: '请输入备注',
+ searchCreateTimeLabel: '创建时间',
+ startDatePlaceholder: '开始日期',
+ endDatePlaceholder: '结束日期',
+ buttonSearch: '搜索',
+ buttonReset: '重置',
+ buttonExport: '导出',
+ tabAll: '全部',
+ tabIssued: '已下达',
+ tabPartialScheduled: '部分排产',
+ tabPendingProduction: '待生产',
+ tabInProduction: '生产中',
+ tabCompleted: '已完成',
+ tableCode: '任务单编码',
+ tableOrderDate: '下达日期',
+ tableDeliveryDate: '交货日期',
+ tableStatus: '状态',
+ tableIsScheduled: '是否排产',
+ tableProductionProgress: '生产进度',
+ tableRemark: '备注',
+ yes: '是',
+ no: '否',
+ detailTabBasicInfo: '基础信息',
+ detailTabRelatedPlan: '关联计划',
+ detailTabQualityInfo: '质检信息',
+ detailTabBaogongInfo: '报工信息',
+ exportFilename: '生产报表'
+ },
+ BasicInfo: {
+ buttonRefresh: '刷新',
+ tableTaskCode: '任务单编码',
+ tableProductCode: '产品编码',
+ tableProductName: '产品名称',
+ tableTotalNumber: '总数量',
+ tablePlanNumber: '已计划数量',
+ tableUnplannedNumber: '未计划数量',
+ tableOperate: '操作',
+ buttonViewProductInfo: '查看产品信息'
+ },
+ ProductInfo: {
+ dialogTitle: '产品信息',
+ labelProductCode: '产品编码',
+ labelProductName: '产品名称',
+ labelNumber: '数量',
+ labelUnit: '单位',
+ labelSpecification: '规格',
+ tableMaterialCode: '原料编码',
+ tableMaterialName: '原料名称',
+ tableRequiredQuantity: '需求量',
+ tableUnit: '单位'
+ },
+ BaogongInfo: {
+ dateRangeSeparator: '至',
+ startDatePlaceholder: '开始日期',
+ endDatePlaceholder: '结束日期',
+ buttonToday: '今日',
+ buttonLast7Days: '近七天',
+ buttonLast30Days: '近30日',
+ buttonReset: '重置',
+ buttonRefresh: '刷新',
+ tableTaskCode: '任务单编码',
+ tablePlanCode: '计划编码',
+ tableEmployeeId: '员工ID',
+ tableEmployeeName: '员工名称',
+ tableProductName: '产品名称',
+ tableProductCode: '产品编码',
+ tableBaogongNumber: '报工数量',
+ tablePassNumber: '合格数量',
+ tableNoPassNumber: '不合格数量',
+ tablePassRate: '合格率%',
+ tableNoPassReason: '不合格原因',
+ tableBaogongTime: '报工时间'
+ },
+ QualityInfo: {
+ buttonRefresh: '刷新',
+ expandTableName: '检验项名称',
+ expandTableMethod: '检验方式',
+ expandTableStandard: '判定基准',
+ expandTableUnit: '单位',
+ expandTableUpperLimit: '上限值',
+ expandTableLowerLimit: '下限值',
+ expandTableInputValue: '输入值',
+ expandTableImage: '图片',
+ expandTablePreview: '预览',
+ expandTableResult: '检验结果',
+ expandTableRemark: '备注',
+ tableCode: '质检编码',
+ tableCategory: '质检分类',
+ tableStatus: '状态',
+ tableTicketCode: '工单编码',
+ tableProcess: '工序',
+ tableSchema: '检验方案',
+ tableManager: '负责人',
+ tableExecutor: '执行人',
+ tableExecuteTime: '执行时间',
+ tableRemark: '备注',
+ tableResult: '结果',
+ resultPass: '通过',
+ resultFail: '不通过',
+ inspectionPending: '待检测',
+ inspectionPass: '检测通过',
+ inspectionFail: '检测不通过',
+ unknown: '未知'
+ },
+ RelatedPlan: {
+ buttonRefresh: '刷新',
+ emptyDescription: '暂无关联计划'
+ },
+ PlanCard: {
+ labelProductName: '产品名称',
+ labelDeviceName: '设备名称',
+ labelPlanStartTime: '计划开始时间',
+ labelPlanEndTime: '计划结束时间',
+ labelLatestStartTime: '最晚开始时间',
+ statPlanNumber: '计划数量',
+ statWangongNumber: '完工数量',
+ statPassNumber: '合格数量',
+ statNoPassNumber: '不合格数量',
+ statPassRate: '合格率',
+ emptyDescription: '暂无数据'
+ },
+ Timeline: {
+ unknown: '未知',
+ statusScheduled: '已排产',
+ statusPaused: '暂停',
+ statusPendingStorage: '待入库',
+ statusStored: '已入库',
+ statusStarted: '已开工'
+ }
+ },
+ GanttChart: {
+ Index: {
+ searchTimeLabel: '查询时间',
+ startPlaceholder: '开始时间',
+ endPlaceholder: '结束时间',
+ deviceLabel: '设备',
+ devicePlaceholder: '请选择设备',
+ buttonSearch: '查询',
+ buttonReset: '重置'
+ },
+ CardView: {
+ legendScheduled: '已排产',
+ legendMerged: '已并工',
+ legendPaused: '暂停',
+ legendPendingStorage: '待入库',
+ legendStored: '已入库',
+ statPlanCount: '计划数',
+ statCapacity: '产能',
+ planCodeLabel: '计划编号:',
+ productLabel: '产品:',
+ planNumberLabel: '计划数量:',
+ deliveryDateLabel: '交货日期:',
+ startLabel: '开始:',
+ endLabel: '结束:',
+ emptyDescription: '暂无计划',
+ statusScheduled: '已排产',
+ statusMerged: '已并工',
+ statusPaused: '暂停',
+ statusPendingStorage: '待入库',
+ statusStored: '已入库',
+ statusUnknown: '未知'
+ },
+ GanttPanel: {
+ detailTitle: '计划信息',
+ deviceNameLabel: '设备名称',
+ deviceIdLabel: '设备ID',
+ capacityLabel: '产能',
+ dailyAvgLabel: '每日报工平均值',
+ dataCollectionCapacityLabel: '数据采集产能',
+ planCountLabel: '计划条数',
+ planDetailTitle: '计划明细',
+ planCodeColon: '计划编码:',
+ planNumberColon: '计划数量:',
+ deliveryDateColon: '交货日期:',
+ startColon: '开始:',
+ endColon: '结束:',
+ latestStartColon: '最晚开工:',
+ emptyDescription: '暂无计划信息',
+ adjustTaskTitle: '调整任务',
+ deviceLabel: '设备',
+ devicePlaceholder: '请选择设备',
+ startDateLabel: '开始日期',
+ startDatePlaceholder: '请选择开始日期',
+ durationLabel: '天数',
+ buttonCancel: '取消',
+ buttonConfirm: '确定',
+ editStartDateTitle: '修改开始时间',
+ startTimeLabel: '开始时间',
+ startTimePlaceholder: '请选择开始时间',
+ warningCompleteDeviceDate: '请完善设备和开始日期',
+ warningValidTime: '请选择有效的时间',
+ columnTaskName: '任务名称',
+ columnStartTime: '开始时间',
+ columnDays: '天数',
+ scaleMonthFormat: 'YYYY年M月',
+ tooltipTaskDetail: '任务明细',
+ tooltipTaskCode: '任务单:',
+ tooltipProduct: '产品:',
+ tooltipDetailId: '明细ID:',
+ tooltipPlanNumber: '计划数量:',
+ tooltipStart: '开始:',
+ tooltipEnd: '结束:',
+ tooltipLatestStart: '最晚开工:',
+ tooltipSummary: '汇总',
+ tooltipDevice: '设备:',
+ tooltipDetailCount: '任务明细条数:',
+ tooltipTotalPlanNumber: '计划总数:',
+ tooltipEarliestStart: '最早计划开始:',
+ tooltipLatestEnd: '最晚计划结束:',
+ statusScheduled: '已排产',
+ statusStarted: '已开工',
+ statusPaused: '暂停',
+ statusPendingStorage: '待入库',
+ statusStored: '已入库'
}
}
}
diff --git a/src/views/erp/stock/out/index.vue b/src/views/erp/stock/out/index.vue
index c2762414..bfb0ee63 100644
--- a/src/views/erp/stock/out/index.vue
+++ b/src/views/erp/stock/out/index.vue
@@ -420,7 +420,7 @@ onMounted(async () => {
// TODO 芋艿:可优化功能:列表界面,支持导入
// TODO 芋艿:可优化功能:详情界面,支持打印
/** tab 切换 */
-let activeName = '产品出库'
+let activeName = '领料出库'
const handleTabClick = (tab: TabsPaneContext) => {
queryParams.outType = tab.paneName
handleQuery()
diff --git a/src/views/mes/components/ScheduleGanttPanel.vue b/src/views/mes/components/ScheduleGanttPanel.vue
index 0bf5399d..0c69429b 100644
--- a/src/views/mes/components/ScheduleGanttPanel.vue
+++ b/src/views/mes/components/ScheduleGanttPanel.vue
@@ -2,7 +2,7 @@
-
计划信息
+
{{ t('GanttChart.GanttPanel.detailTitle') }}
- {{ activePreviewDevice.deviceName }}
- {{ activePreviewDevice.deviceId }}
- {{ activePreviewDevice.ratedCapacity ?? '-' }}
- {{ activePreviewDevice.dailyAverageValue ?? '-' }}
- {{ activePreviewDevice.dataCollectionCapacity ?? '-' }}
- {{ activePreviewDevice.plans?.length ?? 0 }}
+ {{ activePreviewDevice.deviceName }}
+ {{ activePreviewDevice.deviceId }}
+ {{ activePreviewDevice.ratedCapacity ?? '-' }}
+ {{ activePreviewDevice.dailyAverageValue ?? '-' }}
+ {{ activePreviewDevice.dataCollectionCapacity ?? '-' }}
+ {{ activePreviewDevice.plans?.length ?? 0 }}
- 计划明细
+ {{ t('GanttChart.GanttPanel.planDetailTitle') }}
-
计划编码:{{ plan.taskCode ?? '-' }}
-
计划数量:{{ plan.planNumber ?? '-' }}
-
交货日期:{{ plan.deliveryDateStr ?? '-' }}
-
开始:{{ plan.planStartTimeStr || '-' }}
-
结束:{{ plan.planEndTimeStr || '-' }}
-
最晚开工:{{ plan.latestStartTimeStr || '-' }}
+
{{ t('GanttChart.GanttPanel.planCodeColon') }}{{ plan.taskCode ?? '-' }}
+
{{ t('GanttChart.GanttPanel.planNumberColon') }}{{ plan.planNumber ?? '-' }}
+
{{ t('GanttChart.GanttPanel.deliveryDateColon') }}{{ plan.deliveryDateStr ?? '-' }}
+
{{ t('GanttChart.GanttPanel.startColon') }}{{ plan.planStartTimeStr || '-' }}
+
{{ t('GanttChart.GanttPanel.endColon') }}{{ plan.planEndTimeStr || '-' }}
+
{{ t('GanttChart.GanttPanel.latestStartColon') }}{{ plan.latestStartTimeStr || '-' }}
-
+
-
+
-
-
+
+
-
+
-
+
- 取消
- 确定
+ {{ t('GanttChart.GanttPanel.buttonCancel') }}
+ {{ t('GanttChart.GanttPanel.buttonConfirm') }}
-
+
-
+
- 取消
- 确定
+ {{ t('GanttChart.GanttPanel.buttonCancel') }}
+ {{ t('GanttChart.GanttPanel.buttonConfirm') }}
@@ -102,16 +102,19 @@
import dayjs from 'dayjs'
import { gantt } from 'dhtmlx-gantt'
import 'dhtmlx-gantt/codebase/dhtmlxgantt.css'
+import { useI18n } from '@/hooks/web/useI18n'
defineOptions({ name: 'ScheduleGanttPanel' })
+const { t } = useI18n()
+
// 计划状态颜色映射表
const PLAN_STATUS_COLOR_MAP = {
- 1: { label: '已排产', color: '#409eff', textColor: '#ffffff', sort: 1 },
- 8: { label: '已开工', color: '#67c23a', textColor: '#ffffff', sort: 2 },
- 3: { label: '暂停', color: '#e6a23c', textColor: '#ffffff', sort: 3 },
- 4: { label: '待入库', color: '#f56c6c', textColor: '#ffffff', sort: 4 },
- 5: { label: '已入库', color: '#8e7cc3', textColor: '#ffffff', sort: 5 },
+ 1: { label: t('GanttChart.GanttPanel.statusScheduled'), color: '#409eff', textColor: '#ffffff', sort: 1 },
+ 8: { label: t('GanttChart.GanttPanel.statusStarted'), color: '#67c23a', textColor: '#ffffff', sort: 2 },
+ 3: { label: t('GanttChart.GanttPanel.statusPaused'), color: '#e6a23c', textColor: '#ffffff', sort: 3 },
+ 4: { label: t('GanttChart.GanttPanel.statusPendingStorage'), color: '#f56c6c', textColor: '#ffffff', sort: 4 },
+ 5: { label: t('GanttChart.GanttPanel.statusStored'), color: '#8e7cc3', textColor: '#ffffff', sort: 5 },
}
const sortedPlanStatusList = Object.entries(PLAN_STATUS_COLOR_MAP)
@@ -339,25 +342,25 @@ const buildTaskTooltipHtml = (task: any, start?: Date, end?: Date) => {
const plan = task?._planData
if (plan) {
return `
- 任务明细
- 任务单:${plan.taskCode ?? '-'}
- 产品:${plan.productCode ?? '-'} / ${plan.productName ?? '-'}
- 明细ID:${plan.taskDetailId ?? '-'}
- 计划数量:${plan.planNumber ?? '-'}
- 开始:${formatTooltipDateTime(start ?? task?.start_date)}
- 结束:${formatTooltipDateTime(end ?? task?.end_date)}
- 最晚开工:${formatTooltipDateTime(plan.latestStartTimeStr)}
+ ${t('GanttChart.GanttPanel.tooltipTaskDetail')}
+ ${t('GanttChart.GanttPanel.tooltipTaskCode')}${plan.taskCode ?? '-'}
+ ${t('GanttChart.GanttPanel.tooltipProduct')}${plan.productCode ?? '-'} / ${plan.productName ?? '-'}
+ ${t('GanttChart.GanttPanel.tooltipDetailId')}${plan.taskDetailId ?? '-'}
+ ${t('GanttChart.GanttPanel.tooltipPlanNumber')}${plan.planNumber ?? '-'}
+ ${t('GanttChart.GanttPanel.tooltipStart')}${formatTooltipDateTime(start ?? task?.start_date)}
+ ${t('GanttChart.GanttPanel.tooltipEnd')}${formatTooltipDateTime(end ?? task?.end_date)}
+ ${t('GanttChart.GanttPanel.tooltipLatestStart')}${formatTooltipDateTime(plan.latestStartTimeStr)}
`
}
const device = task?._deviceData
const summary = getDeviceTaskSummary(task)
return `
- 汇总
- 设备:${device?.deviceName ?? '-'}
- 任务明细条数:${summary.planCount}
- 计划总数:${summary.totalPlanNumber}
- 最早计划开始:${summary.earliestStart}
- 最晚计划结束:${summary.latestEnd}
+ ${t('GanttChart.GanttPanel.tooltipSummary')}
+ ${t('GanttChart.GanttPanel.tooltipDevice')}${device?.deviceName ?? '-'}
+ ${t('GanttChart.GanttPanel.tooltipDetailCount')}${summary.planCount}
+ ${t('GanttChart.GanttPanel.tooltipTotalPlanNumber')}${summary.totalPlanNumber}
+ ${t('GanttChart.GanttPanel.tooltipEarliestStart')}${summary.earliestStart}
+ ${t('GanttChart.GanttPanel.tooltipLatestEnd')}${summary.latestEnd}
`
}
const getTaskByTooltipNode = (node: HTMLElement) => {
@@ -617,7 +620,7 @@ const openTaskAdjustDialog = (task: any) => {
const handleTaskAdjustSubmit = () => {
if (!taskAdjustTaskId.value || !props.editable) return
if (!taskAdjustForm.deviceTaskId || !taskAdjustForm.startDate) {
- message.warning('请完善设备和开始日期')
+ message.warning(t('GanttChart.GanttPanel.warningCompleteDeviceDate'))
return
}
const task = gantt.getTask(taskAdjustTaskId.value)
@@ -643,7 +646,7 @@ const handleStartDateEditorSubmit = () => {
}
const newStart = dayjs(startDateEditorValue.value)
if (!newStart.isValid()) {
- message.warning('请选择有效的时间')
+ message.warning(t('GanttChart.GanttPanel.warningValidTime'))
return
}
const duration = Math.max(Number(task.duration) || 1, 1)
@@ -717,14 +720,14 @@ const initGanttPreview = () => {
gantt.config.columns = [
{
name: 'text',
- label: '任务名称',
+ label: t('GanttChart.GanttPanel.columnTaskName'),
tree: true,
width: '*',
min_width: 200
},
{
name: 'start_date',
- label: '开始时间',
+ label: t('GanttChart.GanttPanel.columnStartTime'),
align: 'center',
width: 210,
template: (task: any) =>
@@ -734,7 +737,7 @@ const initGanttPreview = () => {
},
{
name: 'duration',
- label: '天数',
+ label: t('GanttChart.GanttPanel.columnDays'),
align: 'center',
width: 60,
template: (task: any) =>
@@ -750,7 +753,7 @@ const initGanttPreview = () => {
]
gantt.config.scales = [
- { unit: 'month', step: 1, format: (date) => dayjs(date).format('YYYY年M月') },
+ { unit: 'month', step: 1, format: (date) => dayjs(date).format(t('GanttChart.GanttPanel.scaleMonthFormat')) },
{ unit: 'day', step: 1, format: (date) => dayjs(date).format('MM-DD') }
]
diff --git a/src/views/mes/ganttChart/components/ScheduleCardView.vue b/src/views/mes/ganttChart/components/ScheduleCardView.vue
new file mode 100644
index 00000000..71058b5d
--- /dev/null
+++ b/src/views/mes/ganttChart/components/ScheduleCardView.vue
@@ -0,0 +1,426 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('GanttChart.CardView.planCodeLabel') }}
+ {{ plan.taskCode }}
+
+
+ {{ t('GanttChart.CardView.productLabel') }}
+ {{ plan.productCode }} / {{ plan.productName }}
+
+
+ {{ t('GanttChart.CardView.planNumberLabel') }}
+ {{ plan.planNumber }}
+
+
+ {{ t('GanttChart.CardView.deliveryDateLabel') }}
+ {{ plan.deliveryDateStr || '-' }}
+
+
+ {{ t('GanttChart.CardView.startLabel') }}
+ {{ plan.planStartTimeStr }}
+
+
+ {{ t('GanttChart.CardView.endLabel') }}
+ {{ plan.planEndTimeStr }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/mes/ganttChart/index.vue b/src/views/mes/ganttChart/index.vue
index 8c39ac95..5d96385e 100644
--- a/src/views/mes/ganttChart/index.vue
+++ b/src/views/mes/ganttChart/index.vue
@@ -1,43 +1,57 @@
-
+
-
-
+
+
- 查询
- 重置
+ {{ t('GanttChart.Index.buttonSearch') }}
+ {{ t('GanttChart.Index.buttonReset') }}
+
+
+
-
+
+
+
+
+
diff --git a/src/views/mes/plan/index.vue b/src/views/mes/plan/index.vue
index d6a679a4..88d76c3e 100644
--- a/src/views/mes/plan/index.vue
+++ b/src/views/mes/plan/index.vue
@@ -73,34 +73,20 @@
-
-
-
-
-
-
-
-
- setInspectable(scope.row.id, hasPending)" />
-
-
-
+
-
-
+ setInspectable(scope.row.id, hasPending)" />
@@ -118,7 +104,21 @@
sortable />
-
+
+
+
+
+ {{ Number(scope.row.passRate ?? 0) }}%
+
+
+
@@ -168,8 +168,8 @@
v-hasPermi="['mes:plan:update']" v-if="scope.row.status === 1 && scope.row.isPreProduction === 1">
{{ t('ProductionPlan.Plan.actionTrialLabel') }}
-
+
{{ t('ProductionPlan.Plan.actionInspectLabel') }}
+
+
+
+
diff --git a/src/views/mes/productionReport/components/ProductInfoDialog.vue b/src/views/mes/productionReport/components/ProductInfoDialog.vue
index 5713912b..e111ff30 100644
--- a/src/views/mes/productionReport/components/ProductInfoDialog.vue
+++ b/src/views/mes/productionReport/components/ProductInfoDialog.vue
@@ -1,54 +1,59 @@
-
-
-
-
-
-
-
-
-
-
-
-
- {{ scope.row.isEnable ? '是' : '否' }}
-
-
-
+
+
+ {{ productInfo.barCode }}
+ {{ productInfo.productName }}
+ {{ productInfo.number }}
+ {{ productInfo.unitName }}
+ {{ productInfo.standard }}
+
+
+
+
+
+
-
+
diff --git a/src/views/mes/productionReport/components/ProductionPlanCard.vue b/src/views/mes/productionReport/components/ProductionPlanCard.vue
index a191d981..5420aafc 100644
--- a/src/views/mes/productionReport/components/ProductionPlanCard.vue
+++ b/src/views/mes/productionReport/components/ProductionPlanCard.vue
@@ -1,30 +1,29 @@
-
@@ -69,16 +67,18 @@
import dayjs from 'dayjs'
import type { PlanVO } from '@/api/mes/plan'
import ProductionPlanTimeline from './ProductionPlanTimeline.vue'
+import { useI18n } from '@/hooks/web/useI18n'
defineOptions({ name: 'ProductionPlanCard' })
+const { t } = useI18n()
+
interface Props {
plan: PlanVO
}
defineProps
()
-// 格式化日期时间
const formatDateTime = (value: string | number | Date | null | undefined): string => {
if (!value) return '-'
return dayjs(value).format('YYYY-MM-DD HH:mm:ss')
@@ -104,7 +104,6 @@ export default {}
}
}
-// 卡片头部
.card-header {
display: flex;
justify-content: space-between;
@@ -204,14 +203,12 @@ export default {}
}
}
-// 卡片中部:时间线
.card-timeline {
padding: 16px 20px;
background: #fafafa;
border-bottom: 1px solid #f0f0f0;
}
-// 响应式
@media (max-width: 1400px) {
.header-right {
flex-wrap: wrap;
diff --git a/src/views/mes/productionReport/components/ProductionPlanTimeline.vue b/src/views/mes/productionReport/components/ProductionPlanTimeline.vue
index 7ff570bc..19585d8c 100644
--- a/src/views/mes/productionReport/components/ProductionPlanTimeline.vue
+++ b/src/views/mes/productionReport/components/ProductionPlanTimeline.vue
@@ -1,6 +1,5 @@
-
-
-
{{ getStatusLabel(record.operateStatus) }}
{{ formatTime(record.operateTime) }}
-