From 38050e953e0e31f854411aeb3b19b8d4e2612044 Mon Sep 17 00:00:00 2001 From: hwj Date: Fri, 24 Jul 2026 17:07:24 +0800 Subject: [PATCH] =?UTF-8?q?style=EF=BC=9A=E8=AE=BE=E5=A4=87=E8=BF=90?= =?UTF-8?q?=E8=A1=8C=E5=8F=82=E6=95=B0-=E4=BF=AE=E5=A4=8Did=E8=BD=AC?= =?UTF-8?q?=E6=8D=A2=E5=AF=BC=E8=87=B4=E7=B2=BE=E5=BA=A6=E7=BC=BA=E5=A4=B1?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/iot/device/index.ts | 38 +++++++++++++++ src/api/iot/devicemodelattribute/index.ts | 4 +- src/views/erp/mold/index.vue | 1 - src/views/iot/deviceParamAnalysis/index.vue | 53 ++++++++------------- 4 files changed, 60 insertions(+), 36 deletions(-) diff --git a/src/api/iot/device/index.ts b/src/api/iot/device/index.ts index 2a411261..3fd36719 100644 --- a/src/api/iot/device/index.ts +++ b/src/api/iot/device/index.ts @@ -83,12 +83,50 @@ export interface DeviceContactModelVO { dataUnit?: string } +export interface ProductionDailyReportGenerateReqVO { + deviceIds: Array + reportDate: string + workTeamId: string | number +} + +export interface ProductionDailyReportFileVO { + fileName: string + fileUrl: string + filePath?: string + reportDate: string + workTeamId: string | number + workTeamName?: string + startTime?: string | null + endTime?: string | null + deviceIds: Array + devices?: Array<{ + deviceId: string | number + deviceCode?: string + deviceName?: string + capacityCode?: string + capacityName?: string + startValue?: number + endValue?: number + capacityDiff?: number + unit?: string + }> | null + createTime?: string +} + // 物联设备 API export const DeviceApi = { // 查询物联设备分页 getDevicePage: async (params: any) => { return await request.get({ url: `/iot/device/page`, params }) }, + + generateProductionDailyReport: async (data: ProductionDailyReportGenerateReqVO) => { + return await request.post({ url: `/iot/device/production-daily-report/generate`, data }) + }, + + getProductionDailyReportPage: async (params: any) => { + return await request.get({ url: `/iot/device/production-daily-report/page`, params }) + }, // 查询物联设备 getDeviceList: async (params?: any) => { return await request.get({ url: `/iot/device/deviceList`, params }) diff --git a/src/api/iot/devicemodelattribute/index.ts b/src/api/iot/devicemodelattribute/index.ts index 0cf314b0..a5470e94 100644 --- a/src/api/iot/devicemodelattribute/index.ts +++ b/src/api/iot/devicemodelattribute/index.ts @@ -57,8 +57,8 @@ export const DeviceModelAttributeApi = { }, operationAnalysisDetails: async (params: { - deviceId: number - modelId?: number + deviceId: string | number + modelId?: string | number collectionStartTime?: string collectionEndTime?: string }) => { diff --git a/src/views/erp/mold/index.vue b/src/views/erp/mold/index.vue index 5cc8210d..9172f264 100644 --- a/src/views/erp/mold/index.vue +++ b/src/views/erp/mold/index.vue @@ -313,7 +313,6 @@ const handleExport = async () => { try { await message.exportConfirm() exportLoading.value = true - parseKeyword() const data = await MoldBrandApi.exportMoldBrand(queryParams) download.excel(data, t('MoldManagement.MoldBrandPage.exportFilename')) } finally { diff --git a/src/views/iot/deviceParamAnalysis/index.vue b/src/views/iot/deviceParamAnalysis/index.vue index 2572db67..5a6a7240 100644 --- a/src/views/iot/deviceParamAnalysis/index.vue +++ b/src/views/iot/deviceParamAnalysis/index.vue @@ -115,8 +115,8 @@ type DeviceTreeNode = { tag?: TreeNodeTag children?: DeviceTreeNode[] orgClass?: string - deviceId?: number - modelId?: number + deviceId?: string + modelId?: string paramKey?: string unit?: string paramCount?: number @@ -124,14 +124,14 @@ type DeviceTreeNode = { } type ApiTreeParameter = { - id: number + id: string | number name: string code?: string unit?: string | null } type ApiTreeEquipment = { - id: number + id: string | number name: string parameters?: ApiTreeParameter[] } @@ -192,8 +192,8 @@ type ChartState = 'idle' | 'loading' | 'empty' | 'ready' type SelectedGroup = { id: string param: DeviceTreeNode - deviceId?: number - modelId?: number + deviceId?: string + modelId?: string dateRange: [string, string] requestSeq: number chartLoading: boolean @@ -226,28 +226,18 @@ const handleTreeRefresh = async () => { await loadTree() } -const toFiniteId = (value: any): number | undefined => { - if (typeof value === 'number') return Number.isFinite(value) ? value : undefined - if (typeof value === 'string') { - if (/^\d+$/.test(value.trim())) return Number(value) - const n = Number(value) - return Number.isFinite(n) ? n : undefined - } - return undefined +const toIdString = (value: unknown): string | undefined => { + const id = String(value ?? '').trim() + return id || undefined } -const toNodeIds = (node: DeviceTreeNode): { deviceId?: number; modelId?: number } => { - const modelId = typeof node.modelId === 'number' && Number.isFinite(node.modelId) ? node.modelId : undefined - const deviceId = typeof node.deviceId === 'number' && Number.isFinite(node.deviceId) ? node.deviceId : undefined - if (typeof deviceId === 'number') return { deviceId, modelId } +const toNodeIds = (node: DeviceTreeNode): { deviceId?: string; modelId?: string } => { + const modelId = toIdString(node.modelId) + const deviceId = toIdString(node.deviceId) + if (deviceId) return { deviceId, modelId } const parts = String(node.id ?? '').split('-').filter(Boolean) - const last = parts.length ? parts[parts.length - 1] : undefined - const parsed = toFiniteId(last) - if (typeof parsed !== 'number' || !Number.isFinite(parsed) || parsed <= 0) { - return { modelId } - } - return { deviceId: parsed, modelId } + return { deviceId: toIdString(parts[parts.length - 1]), modelId } } const buildParamTitle = (param: DeviceTreeNode) => { @@ -312,8 +302,8 @@ const buildTreeFromApi = (orgs: ApiTreeOrg[]): DeviceTreeNode[] => { id: `param-${eq.id}-${p.id}`, label: p?.name ?? p?.code ?? String(p?.id ?? ''), type: 'param', - deviceId: toFiniteId(eq.id), - modelId: toFiniteId(p.id), + deviceId: toIdString(eq.id), + modelId: toIdString(p.id), paramKey: p?.code ? String(p.code) : undefined, unit: p?.unit ? String(p.unit) : undefined, disabled: false @@ -324,7 +314,7 @@ const buildTreeFromApi = (orgs: ApiTreeOrg[]): DeviceTreeNode[] => { label: eq?.name ?? String(eq?.id ?? ''), type: 'device', tag: 'equipment', - deviceId: toFiniteId(eq.id), + deviceId: toIdString(eq.id), paramCount: params.length, children: paramNodes.length ? paramNodes : undefined, disabled: true @@ -506,7 +496,7 @@ const extractChartRows = (res: any): Record[] => { } const fetchGroupChart = async (group: SelectedGroup, notify: boolean) => { - if (typeof group.deviceId !== 'number' || !Number.isFinite(group.deviceId)) return + if (!group.deviceId) return ensureDateRange(group) const [start, end] = group.dateRange @@ -526,7 +516,7 @@ const fetchGroupChart = async (group: SelectedGroup, notify: boolean) => { collectionStartTime: buildDateTime(start, '00:00:00'), collectionEndTime: buildDateTime(end, '23:59:59') } - if (typeof group.modelId === 'number' && Number.isFinite(group.modelId)) { + if (group.modelId) { req.modelId = group.modelId } @@ -537,9 +527,6 @@ const fetchGroupChart = async (group: SelectedGroup, notify: boolean) => { group.chartXAxis = [] group.chartSeries = [] group.chartState = 'empty' - if (notify) { - message.warning(t('DataCollection.DeviceParamAnalysis.messageNodeNoParams')) - } return } @@ -643,7 +630,7 @@ const syncGroupsByCheckedNodes = (checkedNodes: DeviceTreeNode[]) => { const addedGroups: SelectedGroup[] = [] for (const node of toAdd) { const { deviceId, modelId } = toNodeIds(node) - if (typeof deviceId !== 'number') { + if (!deviceId) { continue } const group: SelectedGroup = {