From 27412ea898792a56ba915d9a7398649f0ed183c6 Mon Sep 17 00:00:00 2001 From: hwj Date: Fri, 16 Jan 2026 09:50:45 +0800 Subject: [PATCH 1/9] =?UTF-8?q?style=EF=BC=9A=E8=83=BD=E6=BA=90=E6=8A=A5?= =?UTF-8?q?=E8=A1=A8-=E6=97=B6=E9=97=B4=E8=8C=83=E5=9B=B4=E7=AD=9B?= =?UTF-8?q?=E9=80=89=E6=A1=86=E4=BC=A0=E5=8F=82=E8=B0=83=E6=95=B4/?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E6=9F=A5=E4=B8=83=E5=A4=A9=E5=86=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/mes/energydevicecheck/index.vue | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/views/mes/energydevicecheck/index.vue b/src/views/mes/energydevicecheck/index.vue index 742e43b4..a3de3bf7 100644 --- a/src/views/mes/energydevicecheck/index.vue +++ b/src/views/mes/energydevicecheck/index.vue @@ -13,7 +13,7 @@ - { } } +const buildDefaultTimeRange = () => { + const pad = (n: number) => (n < 10 ? `0${n}` : String(n)) + const end = new Date() + end.setMinutes(0, 0, 0) + const start = new Date(end.getTime() - 7 * 24 * 60 * 60 * 1000) + const format = (d: Date) => { + const y = d.getFullYear() + const m = pad(d.getMonth() + 1) + const day = pad(d.getDate()) + const h = pad(d.getHours()) + return `${y}-${m}-${day} ${h}:00:00` + } + return [format(start), format(end)] as string[] +} + const queryParams = reactive({ pageNo: 1, pageSize: 10, name: undefined as string | undefined, orgId: undefined as string | number | undefined, - timeRange: [] as string[], + timeRange: buildDefaultTimeRange(), startTime: undefined as string | undefined, endTime: undefined as string | undefined }) @@ -187,7 +202,7 @@ const handleQuery = () => { /** 重置按钮操作 */ const resetQuery = () => { queryFormRef.value.resetFields() - queryParams.timeRange = [] + queryParams.timeRange = buildDefaultTimeRange() handleQuery() } From 32d1c4199d4af7403d9322b65756031d0bca8298 Mon Sep 17 00:00:00 2001 From: hwj Date: Fri, 16 Jan 2026 10:12:58 +0800 Subject: [PATCH 2/9] =?UTF-8?q?style=EF=BC=9A=E8=AE=BE=E5=A4=87=E7=AE=A1?= =?UTF-8?q?=E7=90=86-=E7=BB=B4=E4=BF=AE=E5=8D=95/=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E7=AE=A1=E7=90=86-=E4=BF=AE=E6=94=B9=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/mes/deviceledger/index.ts | 4 ++++ src/views/mes/dvrepair/DvRepairForm.vue | 4 ++-- src/views/mes/taskManagement/TaskManagementForm.vue | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/api/mes/deviceledger/index.ts b/src/api/mes/deviceledger/index.ts index c6ed0460..8294b8a2 100644 --- a/src/api/mes/deviceledger/index.ts +++ b/src/api/mes/deviceledger/index.ts @@ -45,6 +45,10 @@ export const DeviceLedgerApi = { return await request.get({ url: `/mes/device-ledger/page`, params }) }, + getDeviceLedgerList: async (params: any) => { + return await request.get({ url: `/mes/device-ledger/list`, params }) + }, + // 查询设备类型详情 getDeviceLedger: async (id: number) => { return await request.get({ url: `/mes/device-ledger/get?id=` + id }) diff --git a/src/views/mes/dvrepair/DvRepairForm.vue b/src/views/mes/dvrepair/DvRepairForm.vue index 067016a3..79e0301f 100644 --- a/src/views/mes/dvrepair/DvRepairForm.vue +++ b/src/views/mes/dvrepair/DvRepairForm.vue @@ -211,8 +211,8 @@ const ensureDeviceOptionsLoaded = async () => { if (deviceOptionsLoaded.value) return deviceLoading.value = true try { - const data = await DeviceLedgerApi.getDeviceLedgerPage({}) - const rows = (data?.list ?? []) as DeviceLedgerVO[] + const data = await DeviceLedgerApi.getDeviceLedgerList({}) + const rows = (Array.isArray(data) ? data : data?.list ?? data?.data ?? []) as DeviceLedgerVO[] deviceOptions.value = rows .filter((r) => typeof r?.id === 'number') .map((r) => ({ label: `${r.deviceCode ?? ''} ${r.deviceName ?? ''}`.trim(), value: r.id, raw: r })) diff --git a/src/views/mes/taskManagement/TaskManagementForm.vue b/src/views/mes/taskManagement/TaskManagementForm.vue index 2611f0be..fb1f9654 100644 --- a/src/views/mes/taskManagement/TaskManagementForm.vue +++ b/src/views/mes/taskManagement/TaskManagementForm.vue @@ -127,11 +127,11 @@ const toCommaSeparatedIds = (value: any): string | undefined => { const ensureOptionsLoaded = async () => { const [deviceRes, planRes, userRes] = await Promise.all([ - DeviceLedgerApi.getDeviceLedgerPage({}), + DeviceLedgerApi.getDeviceLedgerList({}), PlanMaintenanceApi.getPlanMaintenancePage({ pageNo: 1, pageSize: 100 }), getSimpleUserList() ]) - deviceOptions.value = (deviceRes?.list ?? []) as DeviceOption[] + deviceOptions.value = (Array.isArray(deviceRes) ? deviceRes : deviceRes?.list ?? deviceRes?.data ?? []) as DeviceOption[] planOptions.value = (planRes?.list ?? []) as PlanOption[] users.value = userRes ?? [] } From 4fd8874505c4e4f99d8022c2f4363088d9cc97eb Mon Sep 17 00:00:00 2001 From: hwj Date: Fri, 16 Jan 2026 14:58:25 +0800 Subject: [PATCH 3/9] =?UTF-8?q?style=EF=BC=9A=E8=AE=BE=E5=A4=87=E7=AE=A1?= =?UTF-8?q?=E7=90=86-=E5=B7=A5=E5=8D=95=E7=AE=A1=E7=90=86-=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E5=90=8E=E5=88=B7=E6=96=B0=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/workOrderManagement/components/TicketResultDialog.vue | 2 ++ src/views/mes/workOrderManagement/index.vue | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/views/mes/workOrderManagement/components/TicketResultDialog.vue b/src/views/mes/workOrderManagement/components/TicketResultDialog.vue index e3e21d9c..346fc647 100644 --- a/src/views/mes/workOrderManagement/components/TicketResultDialog.vue +++ b/src/views/mes/workOrderManagement/components/TicketResultDialog.vue @@ -59,6 +59,7 @@ import { TicketManagementApi, TicketResultVO } from '@/api/mes/ticketManagement' defineOptions({ name: 'TicketResultDialog' }) +const emit = defineEmits(['success']) const message = useMessage() const dialogVisible = ref(false) @@ -140,6 +141,7 @@ const handleSave = async () => { try { await TicketManagementApi.batchUpdateTicketResults(payload) message.success('更新成功') + emit('success') dialogVisible.value = false } catch { message.error('更新失败') diff --git a/src/views/mes/workOrderManagement/index.vue b/src/views/mes/workOrderManagement/index.vue index d64fd0e0..7b644cb9 100644 --- a/src/views/mes/workOrderManagement/index.vue +++ b/src/views/mes/workOrderManagement/index.vue @@ -82,7 +82,7 @@ v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" @pagination="getList" /> - + diff --git a/src/views/Home/echarts-data.ts b/src/views/Home/echarts-data.ts index 56093f4b..9692ab90 100644 --- a/src/views/Home/echarts-data.ts +++ b/src/views/Home/echarts-data.ts @@ -151,6 +151,228 @@ export const barOptions: EChartsOption = { ] } +export const deviceRepairLineOptions: EChartsOption = { + title: { + text: '设备维修数量统计', + left: 'center' + }, + tooltip: { + trigger: 'axis' + }, + grid: { + left: 40, + right: 20, + bottom: 30, + top: 60, + containLabel: true + }, + xAxis: { + type: 'category', + boundaryGap: false, + data: ['一月', '二月', '三月', '四月', '五月', '六月'] + }, + yAxis: { + type: 'value' + }, + series: [ + { + name: '维修数量', + type: 'line', + smooth: true, + data: [3, 5, 4, 6, 8, 7] + } + ] +} + +export const deviceCategoryPieOptions: EChartsOption = { + title: { + text: '设备分类统计', + left: 'center' + }, + tooltip: { + trigger: 'item' + }, + legend: { + orient: 'vertical', + left: 'left' + }, + series: [ + { + name: '设备类别', + type: 'pie', + radius: '55%', + center: ['50%', '60%'], + data: [ + { value: 12, name: '注塑机' }, + { value: 9, name: '冲床' }, + { value: 6, name: '数控机床' }, + { value: 4, name: '检测设备' }, + { value: 2, name: '其他' } + ] + } + ] +} + +export const deviceDistributionBarOptions: EChartsOption = { + title: { + text: '设备分布统计', + left: 'center' + }, + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'shadow' + } + }, + grid: { + left: 40, + right: 20, + bottom: 30, + top: 60, + containLabel: true + }, + xAxis: { + type: 'category', + data: ['一车间', '二车间', '三车间', '四车间', '五车间'], + axisTick: { + alignWithLabel: true + } + }, + yAxis: { + type: 'value' + }, + series: [ + { + name: '设备数量', + type: 'bar', + data: [10, 8, 6, 5, 4] + } + ] +} + +export const productionOverviewMock = { + orderCount: 9, + runningOrderCount: 12, + startedOrderCount: 12, + shutdownOrderCount: 0, + plannedOutput: 109210, + completedOutput: 1260, + qualifiedRate: 1.15, + alarmRate: 0, + onTimeRate: 0 +} + +export const productionProgressMock = [ + { + id: 'SCGD00000036', + orderNo: 'SCGD00000036', + productName: '大中型模具', + statusText: '生产中', + planStartTime: '2021-05-28 18:40:10', + planEndTime: '2021-06-05 18:40:10', + completeRate: 8.33 + }, + { + id: 'SCGD00000037', + orderNo: 'SCGD00000037', + productName: '大型注塑模具', + statusText: '排产中', + planStartTime: '2021-05-28 18:40:10', + planEndTime: '2021-06-10 18:40:10', + completeRate: 6.86 + }, + { + id: 'SCGD00000033', + orderNo: 'SCGD00000033', + productName: '模具零件加工', + statusText: '生产中', + planStartTime: '2021-04-02 17:50:12', + planEndTime: '2021-04-10 17:50:12', + completeRate: 57.58 + }, + { + id: 'SCGD00000040', + orderNo: 'SCGD00000040', + productName: '试模工单', + statusText: '待开工', + planStartTime: '2021-06-15 08:30:00', + planEndTime: '2021-06-20 18:00:00', + completeRate: 0 + } +] + +export const deviceStatusMock = { + inactive: 2, + active: 0, + total: 2 +} + +export const alarmStatusMock = { + serious: 0, + assignedToMe: 0, + total: 0 +} + +export const deviceOverviewMock = { + deviceTotal: 33, + needRepair: 0, + running: 33, + stop: 0, + utilization: 0, + alarmRate: 0 +} + +export const todoTasksMock = [ + { + id: 'TASK0001', + name: '模具工位点检任务', + type: '点检', + priority: '高', + planTime: '2021-06-13 13:00', + owner: '设备科' + }, + { + id: 'TASK0002', + name: '设备保养任务', + type: '保养', + priority: '中', + planTime: '2021-06-13 15:00', + owner: '保全班' + }, + { + id: 'TASK0003', + name: '注塑机状态巡检', + type: '巡检', + priority: '中', + planTime: '2021-06-14 09:00', + owner: '设备科' + }, + { + id: 'TASK0004', + name: '能耗异常分析', + type: '分析', + priority: '低', + planTime: '2021-06-14 14:00', + owner: '能源管理' + }, + { + id: 'TASK0005', + name: '设备档案核对', + type: '管理', + priority: '低', + planTime: '2021-06-15 10:00', + owner: '设备管理' + }, + { + id: 'TASK0006', + name: '安全隐患排查', + type: '安全', + priority: '高', + planTime: '2021-06-15 16:00', + owner: '安环部' + } +] + export const radarOption: EChartsOption = { legend: { data: [t('workplace.personal'), t('workplace.team')] diff --git a/src/views/Home/types.ts b/src/views/Home/types.ts index e6313d36..06a7bab1 100644 --- a/src/views/Home/types.ts +++ b/src/views/Home/types.ts @@ -1,7 +1,7 @@ export type WorkplaceTotal = { - project: number - access: number - todo: number + project: number + access: number + todo: number } export type Project = { @@ -53,3 +53,55 @@ export type MonthlySales = { estimate: number actual: number } + +export type ProductionOverview = { + orderCount: number + runningOrderCount: number + startedOrderCount: number + shutdownOrderCount: number + plannedOutput: number + completedOutput: number + qualifiedRate: number + alarmRate: number + onTimeRate: number +} + +export type ProductionProgressItem = { + id: string + orderNo: string + productName: string + statusText: string + planStartTime: string + planEndTime: string + completeRate: number +} + +export type DeviceStatusSummary = { + inactive: number + active: number + total: number +} + +export type AlarmStatusSummary = { + serious: number + assignedToMe: number + total: number +} + +export type DeviceOverview = { + deviceTotal: number + needRepair: number + running: number + stop: number + utilization: number + alarmRate: number +} + +export type TodoTask = { + id: string + name: string + type: string + priority: string + planTime: string + owner: string +} From 3cb3e4470031663ff3de29e6e88f715bc3f8821d Mon Sep 17 00:00:00 2001 From: hwj Date: Fri, 16 Jan 2026 16:18:01 +0800 Subject: [PATCH 5/9] =?UTF-8?q?feat=EF=BC=9A=E6=A8=A1=E5=85=B7=E7=AE=A1?= =?UTF-8?q?=E7=90=86-=E6=A8=A1=E5=85=B7=E8=AF=A6=E6=83=85=E5=BC=B9?= =?UTF-8?q?=E6=A1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/erp/mold/components/MoldList.vue | 288 +++++++++++++++--- src/views/mes/energydevicecheck/index.vue | 15 +- src/views/mold/moldrepair/MoldRepairForm.vue | 1 + .../TaskConfigurationForm.vue | 6 +- 4 files changed, 255 insertions(+), 55 deletions(-) diff --git a/src/views/erp/mold/components/MoldList.vue b/src/views/erp/mold/components/MoldList.vue index e54b62c9..467b935c 100644 --- a/src/views/erp/mold/components/MoldList.vue +++ b/src/views/erp/mold/components/MoldList.vue @@ -1,26 +1,16 @@