From e13fdef1f61cc3770891b461c223c8fa03b51727 Mon Sep 17 00:00:00 2001 From: hwj Date: Sat, 9 May 2026 15:24:18 +0800 Subject: [PATCH 01/16] =?UTF-8?q?feat=EF=BC=9A=E5=B7=A5=E5=8E=82=E5=BB=BA?= =?UTF-8?q?=E6=A8=A1=E6=A8=A1=E5=9D=97-=E7=AD=9B=E9=80=89=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6=E6=B7=BB=E5=8A=A0=E2=80=9C=E6=9B=B4=E5=A4=9A=E2=80=9D?= =?UTF-8?q?=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/erp/autocode/AutocodeIndex.vue | 19 +++++++++++++++++-- src/views/mes/bom/index.vue | 16 +++++++++++++++- src/views/mes/organization/index.vue | 16 +++++++++++++++- 3 files changed, 47 insertions(+), 4 deletions(-) diff --git a/src/views/erp/autocode/AutocodeIndex.vue b/src/views/erp/autocode/AutocodeIndex.vue index 1154d1e6..671fc2f1 100644 --- a/src/views/erp/autocode/AutocodeIndex.vue +++ b/src/views/erp/autocode/AutocodeIndex.vue @@ -36,7 +36,7 @@ /> - + - + + + + + + {{ showAllFilters ? '收起' : '更多' }} + + + {{ t('FactoryModeling.AutocodeRule.searchButtonText') }} {{ t('FactoryModeling.AutocodeRule.resetButtonText') }} @@ -200,6 +208,13 @@ const queryParams = reactive({ }) const queryFormRef = ref() // 搜索的表单 const exportLoading = ref(false) // 导出的加载中 +const showAllFilters = ref(false) // 是否显示所有筛选框 +const filterCount = 5 // 筛选框数量(ruleCode、ruleName、ruleDesc、remark、isEnable) + +/** 切换筛选框展开/折叠 */ +const toggleFilters = () => { + showAllFilters.value = !showAllFilters.value +} const getBarcodeTypeLabel = (value: any) => { const str = value === undefined || value === null ? '' : String(value) diff --git a/src/views/mes/bom/index.vue b/src/views/mes/bom/index.vue index 8e3c1677..6d1d8d06 100644 --- a/src/views/mes/bom/index.vue +++ b/src/views/mes/bom/index.vue @@ -37,7 +37,7 @@ class="!w-240px" /> - + + + + + {{ showAllFilters ? '收起' : '更多' }} + + + {{ t('FactoryModeling.ProductBOM.searchButtonText') }} {{ t('FactoryModeling.ProductBOM.resetButtonText') }} @@ -178,6 +185,13 @@ const queryParams = reactive({ }) const queryFormRef = ref() // 搜索的表单 const exportLoading = ref(false) // 导出的加载中 +const showAllFilters = ref(false) // 是否显示所有筛选框 +const filterCount = 4 // 筛选框数量(code、productId、remark、isEnable) + +/** 切换筛选框展开/折叠 */ +const toggleFilters = () => { + showAllFilters.value = !showAllFilters.value +} /** 查询列表 */ const getList = async () => { diff --git a/src/views/mes/organization/index.vue b/src/views/mes/organization/index.vue index bc469728..0fd42f0c 100644 --- a/src/views/mes/organization/index.vue +++ b/src/views/mes/organization/index.vue @@ -54,7 +54,7 @@ /> --> - + + + + + {{ showAllFilters ? '收起' : '更多' }} + + + {{ t('FactoryModeling.FactoryStructure.searchButtonText') }} {{ t('FactoryModeling.FactoryStructure.resetButtonText') }} @@ -219,6 +226,13 @@ const queryParams = reactive({ }) const queryFormRef = ref() // 搜索的表单 const exportLoading = ref(false) // 导出的加载中 +const showAllFilters = ref(false) // 是否显示所有筛选框 +const filterCount = 4 // 筛选框数量(code、parentId、name、orgClass) + +/** 切换筛选框展开/折叠 */ +const toggleFilters = () => { + showAllFilters.value = !showAllFilters.value +} /** 查询列表 */ const getList = async () => { From 152a906c16ef92d20427955a13ada3c0643c89ee Mon Sep 17 00:00:00 2001 From: hwj Date: Sat, 9 May 2026 17:03:07 +0800 Subject: [PATCH 02/16] =?UTF-8?q?feat=EF=BC=9A=E6=B7=BB=E5=8A=A0=E4=BA=A7?= =?UTF-8?q?=E8=83=BD=E6=8A=A5=E8=A1=A8=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/mes/device-ledger.ts | 47 ++++++ src/locales/en.ts | 24 +++ src/locales/zh-CN.ts | 24 +++ src/views/mes/capacityReport/index.vue | 223 +++++++++++++++++++++++++ 4 files changed, 318 insertions(+) create mode 100644 src/api/mes/device-ledger.ts create mode 100644 src/views/mes/capacityReport/index.vue diff --git a/src/api/mes/device-ledger.ts b/src/api/mes/device-ledger.ts new file mode 100644 index 00000000..6c71f1e7 --- /dev/null +++ b/src/api/mes/device-ledger.ts @@ -0,0 +1,47 @@ +import request from '@/config/axios' + +export interface CapacityReportVO { + id: number + deviceCode: string + deviceName: string + typeName: string + deviceStatus: number + ratedCapacity: number + reportCapacity: number + actualCapacity: number + workshopName: string +} + +export interface CapacityReportQuery { + pageNo: number + pageSize: number + deviceCode?: string + deviceName?: string + deviceType?: string + deviceStatus?: string + workshop?: string + ids?: string +} + +export const DeviceLedgerApi = { + /** + * 产能报表分页查询 + */ + getCapacityReportPage: async (params: CapacityReportQuery) => { + return await request.get({ url: '/mes/device-ledger/capacity-report/page', params }) + }, + + /** + * 产能报表导出 + */ + exportCapacityReport: async (params: { ids?: string }) => { + return await request.download({ url: '/mes/device-ledger/capacity-report/export-excel', params }) + }, + + /** + * 更新设备状态 + */ + updateDeviceLedger: async (data: { id: number; deviceStatus: number }) => { + return await request.put({ url: '/mes/device-ledger/update', data }) + } +} diff --git a/src/locales/en.ts b/src/locales/en.ts index 9e8e2f79..6211aad3 100644 --- a/src/locales/en.ts +++ b/src/locales/en.ts @@ -1335,10 +1335,34 @@ export default { validatorDeviceCodeRequired: 'Code can not be empty', gjTitle: 'Select key components', bjTitle: 'Select spare parts', + normal: 'Normal', + stop: 'Stopped', + maintenance: 'Maintenance', + scrap: 'Scrap', + placeholderWorkshop: 'Please input workshop', + reportCapacity: 'Report Capacity', + actualCapacity: 'Actual Capacity', Detail: { invalidId: 'Invalid device ID' } }, + // Capacity Report + CapacityReport: { + deviceCode: 'Device Code', + deviceName: 'Device Name', + deviceType: 'Device Type', + deviceStatus: 'Device Status', + workshop: 'Workshop', + ratedCapacity: 'Rated Capacity', + reportCapacity: 'Report Capacity', + actualCapacity: 'Actual Capacity', + placeholderDeviceCode: 'Please input device code', + placeholderDeviceName: 'Please input device name', + placeholderDeviceType: 'Please input device type', + placeholderDeviceStatus: 'Please select device status', + placeholderWorkshop: 'Please input workshop', + exportFilename: 'Capacity Report.xls' + }, // Critical Component EquipmentKeyItems: { code: 'Code', diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index c4c7f58c..58df282a 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -1325,10 +1325,34 @@ export default { validatorDeviceCodeRequired: '编码不能为空', gjTitle: '选择关键件', bjTitle: '选择备件', + normal: '正常', + stop: '停用', + maintenance: '维修', + scrap: '报废', + placeholderWorkshop: '请输入所属车间', + reportCapacity: '报工产能', + actualCapacity: '实际产能', Detail: { invalidId: '无效的设备ID' } }, + // 产能报表 + CapacityReport: { + deviceCode: '设备编码', + deviceName: '设备名称', + deviceType: '设备类型', + deviceStatus: '设备状态', + workshop: '所属车间', + ratedCapacity: '额定产能', + reportCapacity: '报工产能', + actualCapacity: '实际产能', + placeholderDeviceCode: '请输入设备编码', + placeholderDeviceName: '请输入设备名称', + placeholderDeviceType: '请输入设备类型', + placeholderDeviceStatus: '请选择设备状态', + placeholderWorkshop: '请输入所属车间', + exportFilename: '产能报表.xls' + }, // 设备关键件 EquipmentKeyItems: { count: '数量', diff --git a/src/views/mes/capacityReport/index.vue b/src/views/mes/capacityReport/index.vue new file mode 100644 index 00000000..46a4edbd --- /dev/null +++ b/src/views/mes/capacityReport/index.vue @@ -0,0 +1,223 @@ + + + From e68b934593a120aa49eb391a764ae023988a278e Mon Sep 17 00:00:00 2001 From: hwj Date: Sat, 9 May 2026 17:31:47 +0800 Subject: [PATCH 03/16] =?UTF-8?q?feat=EF=BC=9A=E7=94=9F=E4=BA=A7=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E6=A8=A1=E5=9D=97-=E7=AD=9B=E9=80=89=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6=E6=B7=BB=E5=8A=A0=E2=80=9C=E6=9B=B4=E5=A4=9A=E2=80=9D?= =?UTF-8?q?=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/mes/capacityReport/index.vue | 17 ++++++++++++++++- src/views/mes/feedingrecord/index.vue | 19 +++++++++++++++++-- src/views/mes/plan/index.vue | 22 +++++++++++++++++++--- src/views/mes/productionReport/index.vue | 19 +++++++++++++++++-- src/views/mes/task/index.vue | 19 +++++++++++++++++-- src/views/mes/tasksummary/index.vue | 20 ++++++++++++++++++-- 6 files changed, 104 insertions(+), 12 deletions(-) diff --git a/src/views/mes/capacityReport/index.vue b/src/views/mes/capacityReport/index.vue index 46a4edbd..ce7cd84e 100644 --- a/src/views/mes/capacityReport/index.vue +++ b/src/views/mes/capacityReport/index.vue @@ -46,7 +46,7 @@ - + + + + + + {{ showAllFilters ? '收起' : '更多' }} + + + {{ t('common.query') }} @@ -132,7 +140,14 @@ const queryParams = reactive({ }) const queryFormRef = ref() const exportLoading = ref(false) +const showAllFilters = ref(false) // 是否显示所有筛选框 +const filterCount = 4 // 筛选框数量 const selectedIds = ref([]) + +/** 切换筛选框展开/折叠 */ +const toggleFilters = () => { + showAllFilters.value = !showAllFilters.value +} const deviceStatusUpdatingMap = ref>({}) const isDeviceLedgerEnabled = (row: CapacityReportVO) => { diff --git a/src/views/mes/feedingrecord/index.vue b/src/views/mes/feedingrecord/index.vue index 459801d6..b433e728 100644 --- a/src/views/mes/feedingrecord/index.vue +++ b/src/views/mes/feedingrecord/index.vue @@ -40,7 +40,7 @@ class="!w-240px" /> - + - + + + + + + {{ showAllFilters ? '收起' : '更多' }} + + + {{ t('ProductionPlan.FeedingRecord.buttonSearchText') }} {{ t('ProductionPlan.FeedingRecord.buttonResetText') }} @@ -214,6 +222,13 @@ const queryParams = reactive({ }) const queryFormRef = ref() // 搜索的表单 const exportLoading = ref(false) // 导出的加载中 +const showAllFilters = ref(false) // 是否显示所有筛选框 +const filterCount = 4 // 筛选框数量 + +/** 切换筛选框展开/折叠 */ +const toggleFilters = () => { + showAllFilters.value = !showAllFilters.value +} /** 查询列表 */ const getList = async () => { diff --git a/src/views/mes/plan/index.vue b/src/views/mes/plan/index.vue index 88d76c3e..1036d8ea 100644 --- a/src/views/mes/plan/index.vue +++ b/src/views/mes/plan/index.vue @@ -18,22 +18,30 @@ - + - + - + + + + + + {{ showAllFilters ? '收起' : '更多' }} + + + {{ t('ProductionPlan.Plan.buttonSearchText') }} @@ -321,6 +329,14 @@ const queryParams = reactive({ }) const queryFormRef = ref() // 搜索的表单 const exportLoading = ref(false) // 导出的加载中 +const showAllFilters = ref(false) // 是否显示所有筛选框 +const filterCount = 4 // 筛选框数量 + +/** 切换筛选框展开/折叠 */ +const toggleFilters = () => { + showAllFilters.value = !showAllFilters.value +} + const warehouseList = ref([]) // 仓库列表 const storeDialogVisible = ref(false) // 入库仓库选择弹窗 const storeWarehouseId = ref() // 选中的仓库ID diff --git a/src/views/mes/productionReport/index.vue b/src/views/mes/productionReport/index.vue index 04815c51..eb99f6a9 100644 --- a/src/views/mes/productionReport/index.vue +++ b/src/views/mes/productionReport/index.vue @@ -41,7 +41,7 @@ class="!w-240px" /> - + - + + + + + + {{ showAllFilters ? '收起' : '更多' }} + + + {{ t('ProductionReport.Index.buttonSearch') }} @@ -170,6 +178,13 @@ const queryParams = reactive({ }) const queryFormRef = ref() const exportLoading = ref(false) +const showAllFilters = ref(false) // 是否显示所有筛选框 +const filterCount = 4 // 筛选框数量 + +/** 切换筛选框展开/折叠 */ +const toggleFilters = () => { + showAllFilters.value = !showAllFilters.value +} const activeStatusTab = ref('') diff --git a/src/views/mes/task/index.vue b/src/views/mes/task/index.vue index b9767fdb..ebcf579d 100644 --- a/src/views/mes/task/index.vue +++ b/src/views/mes/task/index.vue @@ -42,7 +42,7 @@ /> - + - + + + + + + {{ showAllFilters ? '收起' : '更多' }} + + + {{ t('ProductionPlan.Task.buttonSearchText') }} {{ t('ProductionPlan.Task.buttonResetText') }} @@ -221,6 +229,13 @@ const queryParams = reactive({ }) const queryFormRef = ref() // 搜索的表单 const exportLoading = ref(false) // 导出的加载中 +const showAllFilters = ref(false) // 是否显示所有筛选框 +const filterCount = 4 // 筛选框数量 + +/** 切换筛选框展开/折叠 */ +const toggleFilters = () => { + showAllFilters.value = !showAllFilters.value +} /** 查询列表 */ const getList = async () => { diff --git a/src/views/mes/tasksummary/index.vue b/src/views/mes/tasksummary/index.vue index f10eb885..382bb5e3 100644 --- a/src/views/mes/tasksummary/index.vue +++ b/src/views/mes/tasksummary/index.vue @@ -23,18 +23,26 @@ v-model="queryParams.deliveryDate" value-format="YYYY-MM-DD HH:mm:ss" @change="h :end-placeholder="t('ProductionPlan.TaskSummary.searchDeliveryEndPlaceholder')" :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" class="!w-240px" /> - + - + + + + + + {{ showAllFilters ? '收起' : '更多' }} + + + {{ t('ProductionPlan.TaskSummary.buttonSearchText') }} @@ -171,6 +179,14 @@ const queryParams = reactive({ }) const queryFormRef = ref() // 搜索的表单 const exportLoading = ref(false) // 导出的加载中 +const showAllFilters = ref(false) // 是否显示所有筛选框 +const filterCount = 4 // 筛选框数量 + +/** 切换筛选框展开/折叠 */ +const toggleFilters = () => { + showAllFilters.value = !showAllFilters.value +} + const { push } = useRouter() const taskScheduleDialogRef = ref() const deliveryDateFormatter = (_row: any, _column: any, value: any) => { From 1bdd5c276ff1e35e0b9b469194bb5191f9631690 Mon Sep 17 00:00:00 2001 From: hwj Date: Sat, 9 May 2026 17:34:02 +0800 Subject: [PATCH 04/16] =?UTF-8?q?style=EF=BC=9A=E4=BA=A7=E8=83=BD=E6=8A=A5?= =?UTF-8?q?=E8=A1=A8-=E5=88=A0=E9=99=A4=E7=8A=B6=E6=80=81=E5=AD=97?= =?UTF-8?q?=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/mes/capacityReport/index.vue | 47 -------------------------- 1 file changed, 47 deletions(-) diff --git a/src/views/mes/capacityReport/index.vue b/src/views/mes/capacityReport/index.vue index ce7cd84e..26e8de5f 100644 --- a/src/views/mes/capacityReport/index.vue +++ b/src/views/mes/capacityReport/index.vue @@ -35,17 +35,6 @@ class="!w-240px" /> - - - - - - - - - @@ -135,7 +114,6 @@ const queryParams = reactive({ deviceCode: undefined, deviceName: undefined, deviceType: undefined, - deviceStatus: undefined, workshop: undefined }) const queryFormRef = ref() @@ -148,31 +126,6 @@ const selectedIds = ref([]) const toggleFilters = () => { showAllFilters.value = !showAllFilters.value } -const deviceStatusUpdatingMap = ref>({}) - -const isDeviceLedgerEnabled = (row: CapacityReportVO) => { - return Number(row.deviceStatus) === 0 -} - -const handleDeviceStatusChange = async (row: CapacityReportVO, value: boolean) => { - if (!row?.id) return - const oldValue = Number(row.deviceStatus) - const nextValue = value ? 0 : 1 - row.deviceStatus = nextValue - deviceStatusUpdatingMap.value[row.id] = true - try { - await DeviceLedgerApi.updateDeviceLedger({ - id: row.id, - deviceStatus: nextValue - }) - message.success(t('common.updateSuccess')) - } catch { - row.deviceStatus = oldValue - message.error(t('common.updateFail')) - } finally { - deviceStatusUpdatingMap.value[row.id] = false - } -} const getList = async () => { loading.value = true From 2a6b73e566f3bb1b776e7fcb914d9e1b354cd9c8 Mon Sep 17 00:00:00 2001 From: hwj Date: Sat, 9 May 2026 17:41:32 +0800 Subject: [PATCH 05/16] =?UTF-8?q?fix=EF=BC=9A=E4=BF=AE=E5=A4=8Drunoverview?= =?UTF-8?q?=20api=E6=96=87=E4=BB=B6=E7=BC=BA=E5=A4=B1=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/iot/deviceOperationOverview/index.ts | 24 ++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/api/iot/deviceOperationOverview/index.ts diff --git a/src/api/iot/deviceOperationOverview/index.ts b/src/api/iot/deviceOperationOverview/index.ts new file mode 100644 index 00000000..f806fb05 --- /dev/null +++ b/src/api/iot/deviceOperationOverview/index.ts @@ -0,0 +1,24 @@ +import request from '@/config/axios' + +export interface RunOverviewRequestParams { + ids: string + startTime: string + endTime: string + timelinePageNo: number + timelinePageSize: number +} + +export interface RunOverviewResponse { + metrics?: any[] + hourlyStatus?: any[] + summary?: any[] + summaryTotalHours?: number + timelineRows?: any[] + totalDevices?: number +} + +export const DeviceOperationOverviewApi = { + getRunOverview: async (params: RunOverviewRequestParams) => { + return await request.get({ url: `/iot/deviceOperationOverview/getRunOverview`, params }) + } +} From 9f7a3c81b611d886fa2cdaec2e02489e77423c19 Mon Sep 17 00:00:00 2001 From: hwj Date: Mon, 11 May 2026 09:43:17 +0800 Subject: [PATCH 06/16] =?UTF-8?q?style=EF=BC=9A=E4=BB=BB=E5=8A=A1=E5=8D=95?= =?UTF-8?q?=E6=8E=92=E4=BA=A7-=E4=BA=A7=E8=83=BD=E6=9D=A5=E6=BA=90?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E9=80=BB=E8=BE=91=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tasksummary/components/ScheduleGanttPanelEditable.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/views/mes/tasksummary/components/ScheduleGanttPanelEditable.vue b/src/views/mes/tasksummary/components/ScheduleGanttPanelEditable.vue index c86f9693..8a9bf268 100644 --- a/src/views/mes/tasksummary/components/ScheduleGanttPanelEditable.vue +++ b/src/views/mes/tasksummary/components/ScheduleGanttPanelEditable.vue @@ -9,8 +9,8 @@ {{ activePreviewDevice.deviceName }} {{ activePreviewDevice.deviceId }} - {{ getCapacityTypeLabel(activePreviewDevice.capacityType) }} - {{ activePreviewDevice.ratedCapacity ?? '-' }} + {{ getCapacityTypeLabel(activePreviewDevice.capacityType) }} + {{ activePreviewDevice.ratedCapacity ?? '-' }} {{ activePreviewDevice.dailyAverageValue ?? '-' }} {{ activePreviewDevice.dataCollectionCapacity ?? '-' }} {{ activePreviewDevice.plans?.length ?? 0 }} @@ -27,7 +27,7 @@
{{ t('GanttChart.GanttPanel.taskCodeColon') }}{{ plan.taskCode ?? '-' }}
{{ t('GanttChart.GanttPanel.planNumberColon') }}{{ plan.planNumber ?? '-' }}
-
- + - + @@ -263,17 +217,17 @@ const handleDelete = async (id: number) => { message.success(t('common.delSuccess')) // 刷新列表 await getList() - } catch {} + } catch { } } /** 测试编码按钮操作 */ const handleTestCode = async (ruleCode: string) => { try { - + // 发起测试 const data = await AutocodeRuleApi.getTestCode(ruleCode) message.success(data) - - } catch {} + + } catch { } } /** 导出按钮操作 */ diff --git a/src/views/mes/bom/index.vue b/src/views/mes/bom/index.vue index 6d1d8d06..e09a0102 100644 --- a/src/views/mes/bom/index.vue +++ b/src/views/mes/bom/index.vue @@ -54,10 +54,10 @@
- - + + - {{ showAllFilters ? '收起' : '更多' }} + {{ showAllFilters ? t('FactoryModeling.FactoryStructure.collapseText') : t('FactoryModeling.FactoryStructure.expandText') }} diff --git a/src/views/mes/capacityReport/index.vue b/src/views/mes/capacityReport/index.vue index 26e8de5f..4f42f55b 100644 --- a/src/views/mes/capacityReport/index.vue +++ b/src/views/mes/capacityReport/index.vue @@ -46,9 +46,10 @@ - + - {{ showAllFilters ? '收起' : '更多' }} + {{ showAllFilters ? t('FactoryModeling.FactoryStructure.collapseText') : + t('FactoryModeling.FactoryStructure.expandText') }} diff --git a/src/views/mes/feedingrecord/index.vue b/src/views/mes/feedingrecord/index.vue index b433e728..a386c518 100644 --- a/src/views/mes/feedingrecord/index.vue +++ b/src/views/mes/feedingrecord/index.vue @@ -60,9 +60,10 @@
- + - {{ showAllFilters ? '收起' : '更多' }} + {{ showAllFilters ? t('FactoryModeling.FactoryStructure.collapseText') : + t('FactoryModeling.FactoryStructure.expandText') }} diff --git a/src/views/mes/organization/index.vue b/src/views/mes/organization/index.vue index 0fd42f0c..ad633553 100644 --- a/src/views/mes/organization/index.vue +++ b/src/views/mes/organization/index.vue @@ -71,9 +71,9 @@
- + - {{ showAllFilters ? '收起' : '更多' }} + {{ showAllFilters ? t('FactoryModeling.FactoryStructure.collapseText') : t('FactoryModeling.FactoryStructure.expandText') }} diff --git a/src/views/mes/plan/index.vue b/src/views/mes/plan/index.vue index 1036d8ea..31cc1d24 100644 --- a/src/views/mes/plan/index.vue +++ b/src/views/mes/plan/index.vue @@ -35,10 +35,11 @@ :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" class="!w-240px" />
- - + + - {{ showAllFilters ? '收起' : '更多' }} + {{ showAllFilters ? t('FactoryModeling.FactoryStructure.collapseText') : + t('FactoryModeling.FactoryStructure.expandText') }} diff --git a/src/views/mes/productionReport/index.vue b/src/views/mes/productionReport/index.vue index eb99f6a9..bd1c4016 100644 --- a/src/views/mes/productionReport/index.vue +++ b/src/views/mes/productionReport/index.vue @@ -63,10 +63,11 @@ /> - - + + - {{ showAllFilters ? '收起' : '更多' }} + {{ showAllFilters ? t('FactoryModeling.FactoryStructure.collapseText') : + t('FactoryModeling.FactoryStructure.expandText') }} diff --git a/src/views/mes/task/index.vue b/src/views/mes/task/index.vue index ebcf579d..9a2881be 100644 --- a/src/views/mes/task/index.vue +++ b/src/views/mes/task/index.vue @@ -65,9 +65,10 @@ - + - {{ showAllFilters ? '收起' : '更多' }} + {{ showAllFilters ? t('FactoryModeling.FactoryStructure.collapseText') : + t('FactoryModeling.FactoryStructure.expandText') }} diff --git a/src/views/mes/tasksummary/index.vue b/src/views/mes/tasksummary/index.vue index 382bb5e3..9771982d 100644 --- a/src/views/mes/tasksummary/index.vue +++ b/src/views/mes/tasksummary/index.vue @@ -37,9 +37,10 @@ v-model="queryParams.createTime" @change="handleQuery" value-format="YYYY-MM-DD
- + - {{ showAllFilters ? '收起' : '更多' }} + {{ showAllFilters ? t('FactoryModeling.FactoryStructure.collapseText') : + t('FactoryModeling.FactoryStructure.expandText') }} From aa3111131d92c4731f5cfd6acb575aa8d9b67577 Mon Sep 17 00:00:00 2001 From: hwj Date: Mon, 11 May 2026 10:58:10 +0800 Subject: [PATCH 08/16] =?UTF-8?q?feat=EF=BC=9AIOT=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=B1=95=E5=BC=80/=E6=94=B6=E8=B5=B7?= =?UTF-8?q?=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/locales/en.ts | 4 ++++ src/locales/zh-CN.ts | 4 ++++ src/views/iot/historyData/index.vue | 13 ++++++++++++- src/views/iot/realTimeMonitoring/index.vue | 13 ++++++++++++- 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/locales/en.ts b/src/locales/en.ts index 8207a9a1..1a6c8d66 100644 --- a/src/locales/en.ts +++ b/src/locales/en.ts @@ -4327,6 +4327,8 @@ export default { searchButtonText: 'Search', resetButtonText: 'Reset', exportButtonText: 'Export', + collapseText: 'Collapse', + expandText: 'Expand', tableLineCodeColumn: 'Line Code', tableLineNameColumn: 'Line Name', @@ -4364,6 +4366,8 @@ export default { searchButtonText: 'Search', resetButtonText: 'Reset', exportButtonText: 'Export', + collapseText: 'Collapse', + expandText: 'Expand', tableLineCodeColumn: 'Line Code', tableLineNameColumn: 'Line Name', diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index 4f779395..8d045c09 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -4163,6 +4163,8 @@ export default { searchButtonText: '搜索', resetButtonText: '重置', exportButtonText: '导出', + collapseText: '收起', + expandText: '展开', tableLineCodeColumn: '产线编码', tableLineNameColumn: '产线名称', @@ -4200,6 +4202,8 @@ export default { searchButtonText: '搜索', resetButtonText: '重置', exportButtonText: '导出', + collapseText: '收起', + expandText: '展开', tableLineCodeColumn: '产线编码', tableLineNameColumn: '产线名称', diff --git a/src/views/iot/historyData/index.vue b/src/views/iot/historyData/index.vue index 0f137ed8..884f270c 100644 --- a/src/views/iot/historyData/index.vue +++ b/src/views/iot/historyData/index.vue @@ -34,7 +34,7 @@ class="!w-240px" />
- + + + + + {{ showAllFilters ? t('DataCollection.HistoryData.collapseText') : t('DataCollection.HistoryData.expandText') }} + + @@ -151,6 +157,11 @@ const loading = ref(true) const list = ref([]) const total = ref(0) const exportLoading = ref(false) +const showAllFilters = ref(false) +const filterCount = 4 +const toggleFilters = () => { + showAllFilters.value = !showAllFilters.value +} const queryParams = reactive({ pageNo: 1, pageSize: 10, diff --git a/src/views/iot/realTimeMonitoring/index.vue b/src/views/iot/realTimeMonitoring/index.vue index 442da3bf..d5fb945b 100644 --- a/src/views/iot/realTimeMonitoring/index.vue +++ b/src/views/iot/realTimeMonitoring/index.vue @@ -34,7 +34,7 @@ class="!w-240px" /> - + + + + + {{ showAllFilters ? t('DataCollection.RealTimeMonitoring.collapseText') : t('DataCollection.RealTimeMonitoring.expandText') }} + + @@ -156,6 +162,11 @@ const loading = ref(true) const list = ref([]) const total = ref(0) const exportLoading = ref(false) +const showAllFilters = ref(false) +const filterCount = 4 +const toggleFilters = () => { + showAllFilters.value = !showAllFilters.value +} const queryParams = reactive({ pageNo: 1, pageSize: 10, From 985e92ee2bd6454cddbc30ad0007f54480ed086e Mon Sep 17 00:00:00 2001 From: hwj Date: Mon, 11 May 2026 13:45:50 +0800 Subject: [PATCH 09/16] =?UTF-8?q?feat=EF=BC=9A=E4=BA=A7=E8=83=BD=E6=8A=A5?= =?UTF-8?q?=E8=A1=A8-=E6=B7=BB=E5=8A=A0=E6=8A=A5=E5=B7=A5=E4=BA=A7?= =?UTF-8?q?=E8=83=BD=E5=BC=B9=E6=A1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/mes/plan/index.ts | 4 + src/locales/en.ts | 15 +- src/locales/zh-CN.ts | 15 +- .../capacityReport/ProductCapacityDialog.vue | 140 ++++++++++++++++++ src/views/mes/capacityReport/index.vue | 117 ++++++++------- 5 files changed, 230 insertions(+), 61 deletions(-) create mode 100644 src/views/mes/capacityReport/ProductCapacityDialog.vue diff --git a/src/api/mes/plan/index.ts b/src/api/mes/plan/index.ts index 37d6a0dc..aa005db7 100644 --- a/src/api/mes/plan/index.ts +++ b/src/api/mes/plan/index.ts @@ -177,5 +177,9 @@ export const PlanApi = { getPlanPageByTask: async (params: any) => { return await request.get({ url: `/mes/plan/page-by-task`, params }) + }, + + getProductCapacityPage: async (params: any) => { + return await request.get({ url: `/mes/plan/product-capacity-page`, params }) } } diff --git a/src/locales/en.ts b/src/locales/en.ts index 1a6c8d66..e990e60e 100644 --- a/src/locales/en.ts +++ b/src/locales/en.ts @@ -1353,14 +1353,27 @@ export default { deviceType: 'Device Type', deviceStatus: 'Device Status', workshop: 'Workshop', - ratedCapacity: 'Rated Capacity', + ratedCapacity: 'Rated Capacity (Planned Capacity)', reportCapacity: 'Report Capacity', + reportCapacityTooltip: 'Average of data from the last half year', + reportCapacityViewDetail: 'View Detail', actualCapacity: 'Actual Capacity', placeholderDeviceCode: 'Please input device code', placeholderDeviceName: 'Please input device name', placeholderDeviceType: 'Please input device type', placeholderDeviceStatus: 'Please select device status', placeholderWorkshop: 'Please input workshop', + dialogTitlePrefix: 'Report Capacity Detail - ', + dialogProductCode: 'Product Code', + dialogProductCodePlaceholder: 'Please input product code', + dialogProductName: 'Product Name', + dialogProductNamePlaceholder: 'Please input product name', + dialogTaskCode: 'Task Code', + dialogTaskCodePlaceholder: 'Please input task code', + dialogBaogongTotal: 'Report Total', + dialogAvgCapacity: 'Avg Report Capacity', + dialogSearchButtonText: 'Search', + dialogResetButtonText: 'Reset', exportFilename: 'Capacity Report.xls' }, // Critical Component diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index 8d045c09..c94f4ad6 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -1343,14 +1343,27 @@ export default { deviceType: '设备类型', deviceStatus: '设备状态', workshop: '所属车间', - ratedCapacity: '额定产能', + ratedCapacity: '额定产能(计划产能)', reportCapacity: '报工产能', + reportCapacityTooltip: '近半年的数据均值', + reportCapacityViewDetail: '查看明细', actualCapacity: '实际产能', placeholderDeviceCode: '请输入设备编码', placeholderDeviceName: '请输入设备名称', placeholderDeviceType: '请输入设备类型', placeholderDeviceStatus: '请选择设备状态', placeholderWorkshop: '请输入所属车间', + dialogTitlePrefix: '报工产能明细 - ', + dialogProductCode: '产品编码', + dialogProductCodePlaceholder: '请输入产品编码', + dialogProductName: '产品名称', + dialogProductNamePlaceholder: '请输入产品名称', + dialogTaskCode: '任务编码', + dialogTaskCodePlaceholder: '请输入任务编码', + dialogBaogongTotal: '报工总数', + dialogAvgCapacity: '报工均值产能', + dialogSearchButtonText: '搜索', + dialogResetButtonText: '重置', exportFilename: '产能报表.xls' }, // 设备关键件 diff --git a/src/views/mes/capacityReport/ProductCapacityDialog.vue b/src/views/mes/capacityReport/ProductCapacityDialog.vue new file mode 100644 index 00000000..716aa4f8 --- /dev/null +++ b/src/views/mes/capacityReport/ProductCapacityDialog.vue @@ -0,0 +1,140 @@ + + + diff --git a/src/views/mes/capacityReport/index.vue b/src/views/mes/capacityReport/index.vue index 4f42f55b..b58cce17 100644 --- a/src/views/mes/capacityReport/index.vue +++ b/src/views/mes/capacityReport/index.vue @@ -1,50 +1,28 @@