diff --git a/src/api/erp/product/unit/index.ts b/src/api/erp/product/unit/index.ts index 5354dbd1..d0991170 100644 --- a/src/api/erp/product/unit/index.ts +++ b/src/api/erp/product/unit/index.ts @@ -57,8 +57,8 @@ export const ProductUnitApi = { return await request.get({ url: `/erp/product-unit/flag-list`}) }, - // 下载用户导入模板 - importUserTemplate: async () => { + // 下载产品主单位导入模板 + importProductUnitTemplate: async () => { return await request.download({ url: '/erp/product-unit/get-import-template' }) } } diff --git a/src/api/iot/device/index.ts b/src/api/iot/device/index.ts index 806a7129..d021b322 100644 --- a/src/api/iot/device/index.ts +++ b/src/api/iot/device/index.ts @@ -195,6 +195,10 @@ export const DeviceApi = { getDeviceAttributeList: async (deviceId: number | string) => { return await request.get({ url: `/iot/device/device-attribute/list?deviceId=` + deviceId }) }, + // 下载设备属性导入模板 + importDeviceAttributeTemplate: async () => { + return await request.download({ url: '/iot/device/device-attribute/get-import-template' }) + }, getDeviceContactModelPage: async () => { return await request.get({ url: `/iot/device-contact-model/page` }) @@ -219,7 +223,7 @@ export const DeviceApi = { return await request.download({ url: `/iot/device-contact-model/export-excel`, params }) }, - // 获得设备属性 + // 获得设备点位 getDeviceAttribute: async (id: number) => { return await request.get({ url: `/iot/device-contact-model/get?id=` + id }) } diff --git a/src/assets/imgs/dashboard3.png b/src/assets/imgs/dashboard3.png new file mode 100644 index 00000000..d2125dbd Binary files /dev/null and b/src/assets/imgs/dashboard3.png differ diff --git a/src/locales/en.ts b/src/locales/en.ts index bf7cb218..ec59e64e 100644 --- a/src/locales/en.ts +++ b/src/locales/en.ts @@ -177,6 +177,60 @@ export default { } } }, + Dashboard3: { + Header: { + title: 'Device Operation Overview', + subTitle: 'IOT Real-Time Monitoring Center', + currentTime: 'Current Time: ', + lastUpdate: 'Last Updated: ', + refreshRate: 'Refresh: ', + refreshRateValue: 'Every {seconds}s' + }, + Metrics: { + total: 'Total Devices', + online: 'Online', + offline: 'Offline', + running: 'Running', + standby: 'Idle', + fault: 'Alarms' + }, + Status: { + running: 'Running', + standby: 'Idle', + fault: 'Alarm', + offline: 'Offline' + }, + AlarmBoard: { + currentDevice: 'Alarm Device', + todayAlarmDuration: 'Today Alarm Duration', + lastReportTime: 'Last Reported', + alarmPrefix: 'Alarm', + empty: 'No alarm devices' + }, + Detail: { + title: 'Device Operation Details', + carouselText: '{page} · Auto Carousel', + columns: { + deviceName: 'Device Name', + currentStatus: 'Status', + runningTime: 'Running Time (Today)', + standbyTime: 'Idle Time (Today)', + alarmTime: 'Alarm Time (Today)', + efficiency: 'Efficiency (Today)' + }, + empty: 'No device operation data' + }, + Charts: { + last24Hours: 'Last 24 Hours Operation Rate', + last7Days: 'Last 7 Days Operation Rate', + averageRate: 'Average: {value}' + }, + Time: { + minute: '{minute}m', + hour: '{hour}h', + hourMinute: '{hour}h {minute}m' + } + }, Dashboard8: { Header: { title: 'Smart Manufacturing Line Task Overview', @@ -1923,6 +1977,12 @@ export default { cancelSuccess: 'Cancel task successfully', cancelFail: 'Cancel task failed', selectAllDecisionError: 'Please select pass or fail for all pending records first', + placeholderInputValue: 'Please input', + imageLimitExceed: 'Maximum 3 images', + basicInfo: 'Basic Info', + cancelReason: 'Cancel Reason', + uploading: 'Uploading', + save: 'Save', selectDecisionError: 'Please select pass or fail for pending records first', updateSuccess: 'Update successfully', updateFail: 'Update failed', @@ -4875,6 +4935,7 @@ export default { create: 'Create', batchDelete: 'Batch Delete', export: 'Export', + import: 'Import', placeholderCode: 'Please enter type code', placeholderName: 'Please enter type name', @@ -4999,7 +5060,7 @@ export default { create: 'Create', batchDelete: 'Batch Delete', export: 'Export', - + import: 'Import', placeholderDeviceCode: 'Please enter device code', placeholderDeviceName: 'Please enter device name', placeholderModel: 'Please select device model', @@ -5029,7 +5090,7 @@ export default { dataUnit: 'Unit', ratio: 'Ratio', remark: 'Remark', - deviceAttributeTabLabel: 'Device Attributes', + deviceAttributeTabLabel: 'Device Point', deviceRuleTabLabel: 'Point Rules', currentDeviceLabel: 'Current Device: ', @@ -5076,7 +5137,17 @@ export default { messageDeviceInfoMissingForRules: 'Device information is missing, unable to load point rules', gridView: 'gridView', - sudoku: 'sudoku' + sudoku: 'sudoku', + importDragText: 'Drag file here, or', + importClickText: 'click to upload', + importUpdateSupport: 'Update existing user data if present', + importFormatLimit: 'Only xls, xlsx format files are allowed.', + importDownloadTemplate: 'Download template', + importFileRequired: 'Please upload file', + importSuccessTip: + 'Upload success: {createCount}; Update success: {updateCount}; Update failed: {failureCount};', + importFailed: 'Upload failed, please upload again!', + importFileLimit: 'Only one file can be uploaded!' }, RunReport: { moduleName: 'Device Operation Report', diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index 7b7b51e0..57949785 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -177,6 +177,60 @@ export default { } } }, + Dashboard3: { + Header: { + title: '设备运行总览大屏标题', + subTitle: 'IOT 实时监控中心副标题', + currentTime: '当前时间:', + lastUpdate: '最后更新:', + refreshRate: '刷新频率:', + refreshRateValue: '{seconds} 秒刷新' + }, + Metrics: { + total: '设备总数', + online: '在线', + offline: '离线', + running: '运行', + standby: '空闲', + fault: '报警' + }, + Status: { + running: '运行', + standby: '空闲', + fault: '报警', + offline: '离线' + }, + AlarmBoard: { + currentDevice: '当前报警设备', + todayAlarmDuration: '今日累计报警时长', + lastReportTime: '最后上报时间', + alarmPrefix: '报警', + empty: '暂无报警设备' + }, + Detail: { + title: '设备运行明细', + carouselText: '{page} · 自动轮播', + columns: { + deviceName: '设备名称', + currentStatus: '当前状态', + runningTime: '运行时间(今日)', + standbyTime: '空闲时间(今日)', + alarmTime: '报警时间(今日)', + efficiency: '运行效率(今日)' + }, + empty: '暂无设备运行数据' + }, + Charts: { + last24Hours: '近 24 小时运行率趋势', + last7Days: '近 7 天运行率趋势', + averageRate: '平均运行率:{value}' + }, + Time: { + minute: '{minute}分', + hour: '{hour}小时', + hourMinute: '{hour}小时{minute}分' + } + }, Dashboard8: { Header: { title: '智能制造产线任务总览', @@ -1890,6 +1944,7 @@ export default { // 工单管理 WorkOrderManagement: { + basicInfo: '基本信息', planNo: '单号', planType: '类型', planTypeInspect: '点检', @@ -1916,6 +1971,7 @@ export default { remark: '备注', operate: '操作', dialogTitleDefault: '检验结果', + cancelReason: '取消原因', cancelConfirm: '确认取消选中的任务吗?', cancelSuccess: '取消任务成功', cancelFail: '取消任务失败', @@ -1923,6 +1979,8 @@ export default { selectDecisionError: '请先为待检测记录选择通过或不通过', updateSuccess: '更新成功', updateFail: '更新失败', + placeholderInputValue: '请输入', + uploading: '上传中', placeholderPlanNo: '请输入单号', placeholderPlanType: '请选择类型', placeholderJobStatus: '请选择作业状态', @@ -4854,7 +4912,7 @@ export default { create: '新增', batchDelete: '批量删除', export: '导出', - + import: '导入', placeholderDeviceCode: '请输入设备编号', placeholderDeviceName: '请输入设备名称', placeholderModel: '请选择设备模型', @@ -4884,7 +4942,7 @@ export default { dataUnit: '单位', ratio: '倍率', remark: '备注', - deviceAttributeTabLabel: '设备属性', + deviceAttributeTabLabel: '设备点位', deviceRuleTabLabel: '点位规则', currentDeviceLabel: '当前设备:', @@ -4931,7 +4989,17 @@ export default { messageDeviceInfoMissingForRules: '设备信息缺失,无法加载点位规则', gridView: '表格视图', - sudoku: '九宫格' + sudoku: '九宫格', + importDragText: '将文件拖到此处,或', + importClickText: '点击上传', + importUpdateSupport: '是否更新已经存在的用户数据', + importFormatLimit: '仅允许导入 xls、xlsx 格式文件。', + importDownloadTemplate: '下载模板', + importFileRequired: '请上传文件', + importSuccessTip: + '上传成功数量:{createCount};更新成功数量:{updateCount};更新失败数量:{failureCount};', + importFailed: '上传失败,请您重新上传!', + importFileLimit: '最多只能上传一个文件!' }, RunReport: { moduleName: '设备运行报表', diff --git a/src/permission.ts b/src/permission.ts index 427ae0a1..ddfe4b8f 100644 --- a/src/permission.ts +++ b/src/permission.ts @@ -81,7 +81,8 @@ const whiteList = [ '/register', '/oauthLogin/gitee', '/iot/report/dashboardPage/Dashboard8', - '/iot/report/dashboardPage/Dashboard1' + '/iot/report/dashboardPage/Dashboard1', + '/iot/report/dashboardPage/Dashboard3' ] // 路由加载前 diff --git a/src/router/modules/remaining.ts b/src/router/modules/remaining.ts index f4697dd2..f781c3dc 100644 --- a/src/router/modules/remaining.ts +++ b/src/router/modules/remaining.ts @@ -653,6 +653,17 @@ const remainingRouter: AppRouteRecordRaw[] = [ canTo: true } }, + { + path: '/iot/report/dashboardPage/Dashboard3', + component: () => import('@/views/report/dashboardPage/dashboard1/dashboard3/index.vue'), + name: 'IotReportDashboard3', + meta: { + title: t('Dashboard3.Header.title'), + hidden: true, + noTagsView: true, + canTo: true + } + }, { path: '/iot', component: Layout, diff --git a/src/views/erp/product/unit/ProductUnitImportForm.vue b/src/views/erp/product/unit/ProductUnitImportForm.vue index 55d3e426..f6c97a59 100644 --- a/src/views/erp/product/unit/ProductUnitImportForm.vue +++ b/src/views/erp/product/unit/ProductUnitImportForm.vue @@ -138,7 +138,7 @@ const handleExceed = (): void => { /** 下载模板操作 */ const importTemplate = async () => { - const res = await ProductUnitApi.importUserTemplate() + const res = await ProductUnitApi.importProductUnitTemplate() download.excel(res, '单位导入模版.xls') } diff --git a/src/views/iot/device/components/DeviceAttributeImportForm.vue b/src/views/iot/device/components/DeviceAttributeImportForm.vue new file mode 100644 index 00000000..7c7cd1d0 --- /dev/null +++ b/src/views/iot/device/components/DeviceAttributeImportForm.vue @@ -0,0 +1,151 @@ + + diff --git a/src/views/iot/device/components/DeviceAttributeList.vue b/src/views/iot/device/components/DeviceAttributeList.vue index 54bbab93..91550390 100644 --- a/src/views/iot/device/components/DeviceAttributeList.vue +++ b/src/views/iot/device/components/DeviceAttributeList.vue @@ -51,6 +51,14 @@ > {{ t('DataCollection.Device.create') }} + + {{ t('DataCollection.Device.import') }} + + + + diff --git a/src/views/mes/workOrderManagement/index.vue b/src/views/mes/workOrderManagement/index.vue index 8829c880..781dcafe 100644 --- a/src/views/mes/workOrderManagement/index.vue +++ b/src/views/mes/workOrderManagement/index.vue @@ -1,4 +1,5 @@ -