diff --git a/src/api/basic/device.ts b/src/api/basic/device.ts index 63d7803..fe5bc37 100644 --- a/src/api/basic/device.ts +++ b/src/api/basic/device.ts @@ -56,7 +56,7 @@ } // 批量删除设备 -export function delDeviceBatch(ids: []) { +export function delDeviceBatch(ids: string[]) { return request({ url: `${prefix}/delete`, method: 'post', diff --git a/src/api/basic/device.ts b/src/api/basic/device.ts index 63d7803..fe5bc37 100644 --- a/src/api/basic/device.ts +++ b/src/api/basic/device.ts @@ -56,7 +56,7 @@ } // 批量删除设备 -export function delDeviceBatch(ids: []) { +export function delDeviceBatch(ids: string[]) { return request({ url: `${prefix}/delete`, method: 'post', diff --git a/src/api/data/query.ts b/src/api/data/query.ts new file mode 100644 index 0000000..9b5de39 --- /dev/null +++ b/src/api/data/query.ts @@ -0,0 +1,22 @@ +import request from '../index' +const prefix = 'device/data' + +// 查询数据 分页 +export function getDeviceDataListPage(data: object) { + return request({ + url: `${prefix}/list-page`, + method: 'post', + data, + }) +} + +// 导出 +export function exportDeviceData(data: object) { + return request({ + url: `${prefix}/list-export`, + responseType: 'blob', + method: 'post', + data, + }) +} + diff --git a/src/api/basic/device.ts b/src/api/basic/device.ts index 63d7803..fe5bc37 100644 --- a/src/api/basic/device.ts +++ b/src/api/basic/device.ts @@ -56,7 +56,7 @@ } // 批量删除设备 -export function delDeviceBatch(ids: []) { +export function delDeviceBatch(ids: string[]) { return request({ url: `${prefix}/delete`, method: 'post', diff --git a/src/api/data/query.ts b/src/api/data/query.ts new file mode 100644 index 0000000..9b5de39 --- /dev/null +++ b/src/api/data/query.ts @@ -0,0 +1,22 @@ +import request from '../index' +const prefix = 'device/data' + +// 查询数据 分页 +export function getDeviceDataListPage(data: object) { + return request({ + url: `${prefix}/list-page`, + method: 'post', + data, + }) +} + +// 导出 +export function exportDeviceData(data: object) { + return request({ + url: `${prefix}/list-export`, + responseType: 'blob', + method: 'post', + data, + }) +} + diff --git a/src/assets/icons/icon-alarm.svg b/src/assets/icons/icon-alarm.svg new file mode 100644 index 0000000..cf54837 --- /dev/null +++ b/src/assets/icons/icon-alarm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/api/basic/device.ts b/src/api/basic/device.ts index 63d7803..fe5bc37 100644 --- a/src/api/basic/device.ts +++ b/src/api/basic/device.ts @@ -56,7 +56,7 @@ } // 批量删除设备 -export function delDeviceBatch(ids: []) { +export function delDeviceBatch(ids: string[]) { return request({ url: `${prefix}/delete`, method: 'post', diff --git a/src/api/data/query.ts b/src/api/data/query.ts new file mode 100644 index 0000000..9b5de39 --- /dev/null +++ b/src/api/data/query.ts @@ -0,0 +1,22 @@ +import request from '../index' +const prefix = 'device/data' + +// 查询数据 分页 +export function getDeviceDataListPage(data: object) { + return request({ + url: `${prefix}/list-page`, + method: 'post', + data, + }) +} + +// 导出 +export function exportDeviceData(data: object) { + return request({ + url: `${prefix}/list-export`, + responseType: 'blob', + method: 'post', + data, + }) +} + diff --git a/src/assets/icons/icon-alarm.svg b/src/assets/icons/icon-alarm.svg new file mode 100644 index 0000000..cf54837 --- /dev/null +++ b/src/assets/icons/icon-alarm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-analysis.svg b/src/assets/icons/icon-analysis.svg new file mode 100644 index 0000000..db70a0e --- /dev/null +++ b/src/assets/icons/icon-analysis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/api/basic/device.ts b/src/api/basic/device.ts index 63d7803..fe5bc37 100644 --- a/src/api/basic/device.ts +++ b/src/api/basic/device.ts @@ -56,7 +56,7 @@ } // 批量删除设备 -export function delDeviceBatch(ids: []) { +export function delDeviceBatch(ids: string[]) { return request({ url: `${prefix}/delete`, method: 'post', diff --git a/src/api/data/query.ts b/src/api/data/query.ts new file mode 100644 index 0000000..9b5de39 --- /dev/null +++ b/src/api/data/query.ts @@ -0,0 +1,22 @@ +import request from '../index' +const prefix = 'device/data' + +// 查询数据 分页 +export function getDeviceDataListPage(data: object) { + return request({ + url: `${prefix}/list-page`, + method: 'post', + data, + }) +} + +// 导出 +export function exportDeviceData(data: object) { + return request({ + url: `${prefix}/list-export`, + responseType: 'blob', + method: 'post', + data, + }) +} + diff --git a/src/assets/icons/icon-alarm.svg b/src/assets/icons/icon-alarm.svg new file mode 100644 index 0000000..cf54837 --- /dev/null +++ b/src/assets/icons/icon-alarm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-analysis.svg b/src/assets/icons/icon-analysis.svg new file mode 100644 index 0000000..db70a0e --- /dev/null +++ b/src/assets/icons/icon-analysis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-data.svg b/src/assets/icons/icon-data.svg new file mode 100644 index 0000000..c9e6aad --- /dev/null +++ b/src/assets/icons/icon-data.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/api/basic/device.ts b/src/api/basic/device.ts index 63d7803..fe5bc37 100644 --- a/src/api/basic/device.ts +++ b/src/api/basic/device.ts @@ -56,7 +56,7 @@ } // 批量删除设备 -export function delDeviceBatch(ids: []) { +export function delDeviceBatch(ids: string[]) { return request({ url: `${prefix}/delete`, method: 'post', diff --git a/src/api/data/query.ts b/src/api/data/query.ts new file mode 100644 index 0000000..9b5de39 --- /dev/null +++ b/src/api/data/query.ts @@ -0,0 +1,22 @@ +import request from '../index' +const prefix = 'device/data' + +// 查询数据 分页 +export function getDeviceDataListPage(data: object) { + return request({ + url: `${prefix}/list-page`, + method: 'post', + data, + }) +} + +// 导出 +export function exportDeviceData(data: object) { + return request({ + url: `${prefix}/list-export`, + responseType: 'blob', + method: 'post', + data, + }) +} + diff --git a/src/assets/icons/icon-alarm.svg b/src/assets/icons/icon-alarm.svg new file mode 100644 index 0000000..cf54837 --- /dev/null +++ b/src/assets/icons/icon-alarm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-analysis.svg b/src/assets/icons/icon-analysis.svg new file mode 100644 index 0000000..db70a0e --- /dev/null +++ b/src/assets/icons/icon-analysis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-data.svg b/src/assets/icons/icon-data.svg new file mode 100644 index 0000000..c9e6aad --- /dev/null +++ b/src/assets/icons/icon-data.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-query.svg b/src/assets/icons/icon-query.svg new file mode 100644 index 0000000..ec62c90 --- /dev/null +++ b/src/assets/icons/icon-query.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/api/basic/device.ts b/src/api/basic/device.ts index 63d7803..fe5bc37 100644 --- a/src/api/basic/device.ts +++ b/src/api/basic/device.ts @@ -56,7 +56,7 @@ } // 批量删除设备 -export function delDeviceBatch(ids: []) { +export function delDeviceBatch(ids: string[]) { return request({ url: `${prefix}/delete`, method: 'post', diff --git a/src/api/data/query.ts b/src/api/data/query.ts new file mode 100644 index 0000000..9b5de39 --- /dev/null +++ b/src/api/data/query.ts @@ -0,0 +1,22 @@ +import request from '../index' +const prefix = 'device/data' + +// 查询数据 分页 +export function getDeviceDataListPage(data: object) { + return request({ + url: `${prefix}/list-page`, + method: 'post', + data, + }) +} + +// 导出 +export function exportDeviceData(data: object) { + return request({ + url: `${prefix}/list-export`, + responseType: 'blob', + method: 'post', + data, + }) +} + diff --git a/src/assets/icons/icon-alarm.svg b/src/assets/icons/icon-alarm.svg new file mode 100644 index 0000000..cf54837 --- /dev/null +++ b/src/assets/icons/icon-alarm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-analysis.svg b/src/assets/icons/icon-analysis.svg new file mode 100644 index 0000000..db70a0e --- /dev/null +++ b/src/assets/icons/icon-analysis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-data.svg b/src/assets/icons/icon-data.svg new file mode 100644 index 0000000..c9e6aad --- /dev/null +++ b/src/assets/icons/icon-data.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-query.svg b/src/assets/icons/icon-query.svg new file mode 100644 index 0000000..ec62c90 --- /dev/null +++ b/src/assets/icons/icon-query.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-statis.svg b/src/assets/icons/icon-statis.svg new file mode 100644 index 0000000..1bb944e --- /dev/null +++ b/src/assets/icons/icon-statis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/api/basic/device.ts b/src/api/basic/device.ts index 63d7803..fe5bc37 100644 --- a/src/api/basic/device.ts +++ b/src/api/basic/device.ts @@ -56,7 +56,7 @@ } // 批量删除设备 -export function delDeviceBatch(ids: []) { +export function delDeviceBatch(ids: string[]) { return request({ url: `${prefix}/delete`, method: 'post', diff --git a/src/api/data/query.ts b/src/api/data/query.ts new file mode 100644 index 0000000..9b5de39 --- /dev/null +++ b/src/api/data/query.ts @@ -0,0 +1,22 @@ +import request from '../index' +const prefix = 'device/data' + +// 查询数据 分页 +export function getDeviceDataListPage(data: object) { + return request({ + url: `${prefix}/list-page`, + method: 'post', + data, + }) +} + +// 导出 +export function exportDeviceData(data: object) { + return request({ + url: `${prefix}/list-export`, + responseType: 'blob', + method: 'post', + data, + }) +} + diff --git a/src/assets/icons/icon-alarm.svg b/src/assets/icons/icon-alarm.svg new file mode 100644 index 0000000..cf54837 --- /dev/null +++ b/src/assets/icons/icon-alarm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-analysis.svg b/src/assets/icons/icon-analysis.svg new file mode 100644 index 0000000..db70a0e --- /dev/null +++ b/src/assets/icons/icon-analysis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-data.svg b/src/assets/icons/icon-data.svg new file mode 100644 index 0000000..c9e6aad --- /dev/null +++ b/src/assets/icons/icon-data.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-query.svg b/src/assets/icons/icon-query.svg new file mode 100644 index 0000000..ec62c90 --- /dev/null +++ b/src/assets/icons/icon-query.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-statis.svg b/src/assets/icons/icon-statis.svg new file mode 100644 index 0000000..1bb944e --- /dev/null +++ b/src/assets/icons/icon-statis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/router/modules/basic.ts b/src/router/modules/basic.ts index 2308656..d4ec3f7 100644 --- a/src/router/modules/basic.ts +++ b/src/router/modules/basic.ts @@ -4,42 +4,6 @@ const routes: Route.recordRaw[] = [ { - path: '/basic/group', - component: Layout, - redirect: '/basic/group/list', - name: 'Group', - meta: { - title: '分组管理', - icon: 'ep:key', - auth: '/basic/group', - }, - children: [ - { - path: 'list', - name: 'GroupList', - component: () => import('@/views/basic/group/list.vue'), - meta: { - title: '分组管理', - auth: '/basic/group', - sidebar: false, - breadcrumb: true, - activeMenu: '/basic/group', - }, - }, - { - path: 'detail/:id?', - name: 'GroupInfoDetail', - component: () => import('@/views/basic/group/detail.vue'), - meta: { - title: '分组详情', - sidebar: false, - breadcrumb: true, - activeMenu: '/basic/group', - }, - }, - ], - }, - { path: '/basic/device', component: Layout, redirect: '/basic/device/list', @@ -76,6 +40,42 @@ ], }, { + path: '/basic/group', + component: Layout, + redirect: '/basic/group/list', + name: 'Group', + meta: { + title: '分组管理', + icon: 'ep:key', + auth: '/basic/group', + }, + children: [ + { + path: 'list', + name: 'GroupList', + component: () => import('@/views/basic/group/list.vue'), + meta: { + title: '分组管理', + auth: '/basic/group', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/group', + }, + }, + { + path: 'detail/:id?', + name: 'GroupInfoDetail', + component: () => import('@/views/basic/group/detail.vue'), + meta: { + title: '分组详情', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/group', + }, + }, + ], + }, + { path: '/basic/product', component: Layout, redirect: '/basic/product/list', @@ -100,40 +100,39 @@ }, ], }, - /* { - path: '/product', + path: '/basic/ota', component: Layout, - redirect: 'product/list', - name: 'Product', + redirect: '/basic/ota/list', + name: 'OTA', meta: { - title: '产品管理', + title: '远程升级', icon: 'ep:key', - auth: '/basic/product', + auth: '/basic/ota', }, children: [ { - path: 'product/list', - name: 'ProductList', + path: 'list', + name: 'OTAPackageList', component: () => import('@/views/basic/group/list.vue'), meta: { - title: '产品管理', - auth: '/basic/product/list', + title: '升级包管理', + auth: '/basic/ota/list', icon: 'ep:key', }, }, { - path: 'product/ota', - name: 'ProductOTAList', + path: 'task', + name: 'OTATaskList', component: () => import('@/views/basic/group/list.vue'), meta: { title: '远程升级', - auth: '/basic/product/ota', + auth: '/basic/ota/task', icon: 'ep:key', }, }, ], - }, */ + }, ] export default routes diff --git a/src/api/basic/device.ts b/src/api/basic/device.ts index 63d7803..fe5bc37 100644 --- a/src/api/basic/device.ts +++ b/src/api/basic/device.ts @@ -56,7 +56,7 @@ } // 批量删除设备 -export function delDeviceBatch(ids: []) { +export function delDeviceBatch(ids: string[]) { return request({ url: `${prefix}/delete`, method: 'post', diff --git a/src/api/data/query.ts b/src/api/data/query.ts new file mode 100644 index 0000000..9b5de39 --- /dev/null +++ b/src/api/data/query.ts @@ -0,0 +1,22 @@ +import request from '../index' +const prefix = 'device/data' + +// 查询数据 分页 +export function getDeviceDataListPage(data: object) { + return request({ + url: `${prefix}/list-page`, + method: 'post', + data, + }) +} + +// 导出 +export function exportDeviceData(data: object) { + return request({ + url: `${prefix}/list-export`, + responseType: 'blob', + method: 'post', + data, + }) +} + diff --git a/src/assets/icons/icon-alarm.svg b/src/assets/icons/icon-alarm.svg new file mode 100644 index 0000000..cf54837 --- /dev/null +++ b/src/assets/icons/icon-alarm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-analysis.svg b/src/assets/icons/icon-analysis.svg new file mode 100644 index 0000000..db70a0e --- /dev/null +++ b/src/assets/icons/icon-analysis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-data.svg b/src/assets/icons/icon-data.svg new file mode 100644 index 0000000..c9e6aad --- /dev/null +++ b/src/assets/icons/icon-data.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-query.svg b/src/assets/icons/icon-query.svg new file mode 100644 index 0000000..ec62c90 --- /dev/null +++ b/src/assets/icons/icon-query.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-statis.svg b/src/assets/icons/icon-statis.svg new file mode 100644 index 0000000..1bb944e --- /dev/null +++ b/src/assets/icons/icon-statis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/router/modules/basic.ts b/src/router/modules/basic.ts index 2308656..d4ec3f7 100644 --- a/src/router/modules/basic.ts +++ b/src/router/modules/basic.ts @@ -4,42 +4,6 @@ const routes: Route.recordRaw[] = [ { - path: '/basic/group', - component: Layout, - redirect: '/basic/group/list', - name: 'Group', - meta: { - title: '分组管理', - icon: 'ep:key', - auth: '/basic/group', - }, - children: [ - { - path: 'list', - name: 'GroupList', - component: () => import('@/views/basic/group/list.vue'), - meta: { - title: '分组管理', - auth: '/basic/group', - sidebar: false, - breadcrumb: true, - activeMenu: '/basic/group', - }, - }, - { - path: 'detail/:id?', - name: 'GroupInfoDetail', - component: () => import('@/views/basic/group/detail.vue'), - meta: { - title: '分组详情', - sidebar: false, - breadcrumb: true, - activeMenu: '/basic/group', - }, - }, - ], - }, - { path: '/basic/device', component: Layout, redirect: '/basic/device/list', @@ -76,6 +40,42 @@ ], }, { + path: '/basic/group', + component: Layout, + redirect: '/basic/group/list', + name: 'Group', + meta: { + title: '分组管理', + icon: 'ep:key', + auth: '/basic/group', + }, + children: [ + { + path: 'list', + name: 'GroupList', + component: () => import('@/views/basic/group/list.vue'), + meta: { + title: '分组管理', + auth: '/basic/group', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/group', + }, + }, + { + path: 'detail/:id?', + name: 'GroupInfoDetail', + component: () => import('@/views/basic/group/detail.vue'), + meta: { + title: '分组详情', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/group', + }, + }, + ], + }, + { path: '/basic/product', component: Layout, redirect: '/basic/product/list', @@ -100,40 +100,39 @@ }, ], }, - /* { - path: '/product', + path: '/basic/ota', component: Layout, - redirect: 'product/list', - name: 'Product', + redirect: '/basic/ota/list', + name: 'OTA', meta: { - title: '产品管理', + title: '远程升级', icon: 'ep:key', - auth: '/basic/product', + auth: '/basic/ota', }, children: [ { - path: 'product/list', - name: 'ProductList', + path: 'list', + name: 'OTAPackageList', component: () => import('@/views/basic/group/list.vue'), meta: { - title: '产品管理', - auth: '/basic/product/list', + title: '升级包管理', + auth: '/basic/ota/list', icon: 'ep:key', }, }, { - path: 'product/ota', - name: 'ProductOTAList', + path: 'task', + name: 'OTATaskList', component: () => import('@/views/basic/group/list.vue'), meta: { title: '远程升级', - auth: '/basic/product/ota', + auth: '/basic/ota/task', icon: 'ep:key', }, }, ], - }, */ + }, ] export default routes diff --git a/src/router/modules/data.ts b/src/router/modules/data.ts new file mode 100644 index 0000000..6278c5b --- /dev/null +++ b/src/router/modules/data.ts @@ -0,0 +1,105 @@ +import type { Route } from '@/global' + +const Layout = () => import('@/layouts/index.vue') + +const routes: Route.recordRaw[] = [ + { + path: '/data/query', + component: Layout, + redirect: '/data/query/list', + name: 'Group', + meta: { + title: '数据查询', + icon: 'ep:key', + auth: '/data/query', + }, + children: [ + { + path: 'list', + name: 'DataQueryList', + component: () => import('@/views/data/query/list.vue'), + meta: { + title: '数据查询', + auth: '/data/query', + sidebar: false, + breadcrumb: true, + activeMenu: '/data/query', + }, + }, + /* { + path: 'detail/:id?', + name: 'GroupInfoDetail', + component: () => import('@/views/basic/group/detail.vue'), + meta: { + title: '分组详情', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/group', + }, + }, */ + ], + }, + { + path: '/data/alarm', + component: Layout, + redirect: '/data/alarm/list', + name: 'Alarm', + meta: { + title: '报警查询', + icon: 'ep:key', + auth: '/data/alarm', + }, + children: [ + { + path: 'list', + name: 'AlarmList', + component: () => import('@/views/basic/device/list.vue'), + meta: { + title: '报警查询', + auth: '/data/alarm', + sidebar: false, + breadcrumb: true, + activeMenu: '/data/alarm', + }, + }, + { + path: 'detail/:id?', + name: 'DeviceInfoDetail', + component: () => import('@/views/basic/device/detail.vue'), + meta: { + title: '设备详情', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/device', + }, + }, + ], + }, + { + path: '/data/statis', + component: Layout, + redirect: '/data/statis/overview', + name: 'Statis', + meta: { + title: '统计分析', + icon: 'ep:key', + auth: '/data/statis', + }, + children: [ + { + path: 'overview', + name: 'StatisOverview', + component: () => import('@/views/basic/product/list.vue'), + meta: { + title: '产品管理', + auth: '/data/statis', + sidebar: false, + breadcrumb: true, + activeMenu: '/data/statis', + }, + }, + ], + }, +] + +export default routes diff --git a/src/api/basic/device.ts b/src/api/basic/device.ts index 63d7803..fe5bc37 100644 --- a/src/api/basic/device.ts +++ b/src/api/basic/device.ts @@ -56,7 +56,7 @@ } // 批量删除设备 -export function delDeviceBatch(ids: []) { +export function delDeviceBatch(ids: string[]) { return request({ url: `${prefix}/delete`, method: 'post', diff --git a/src/api/data/query.ts b/src/api/data/query.ts new file mode 100644 index 0000000..9b5de39 --- /dev/null +++ b/src/api/data/query.ts @@ -0,0 +1,22 @@ +import request from '../index' +const prefix = 'device/data' + +// 查询数据 分页 +export function getDeviceDataListPage(data: object) { + return request({ + url: `${prefix}/list-page`, + method: 'post', + data, + }) +} + +// 导出 +export function exportDeviceData(data: object) { + return request({ + url: `${prefix}/list-export`, + responseType: 'blob', + method: 'post', + data, + }) +} + diff --git a/src/assets/icons/icon-alarm.svg b/src/assets/icons/icon-alarm.svg new file mode 100644 index 0000000..cf54837 --- /dev/null +++ b/src/assets/icons/icon-alarm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-analysis.svg b/src/assets/icons/icon-analysis.svg new file mode 100644 index 0000000..db70a0e --- /dev/null +++ b/src/assets/icons/icon-analysis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-data.svg b/src/assets/icons/icon-data.svg new file mode 100644 index 0000000..c9e6aad --- /dev/null +++ b/src/assets/icons/icon-data.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-query.svg b/src/assets/icons/icon-query.svg new file mode 100644 index 0000000..ec62c90 --- /dev/null +++ b/src/assets/icons/icon-query.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-statis.svg b/src/assets/icons/icon-statis.svg new file mode 100644 index 0000000..1bb944e --- /dev/null +++ b/src/assets/icons/icon-statis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/router/modules/basic.ts b/src/router/modules/basic.ts index 2308656..d4ec3f7 100644 --- a/src/router/modules/basic.ts +++ b/src/router/modules/basic.ts @@ -4,42 +4,6 @@ const routes: Route.recordRaw[] = [ { - path: '/basic/group', - component: Layout, - redirect: '/basic/group/list', - name: 'Group', - meta: { - title: '分组管理', - icon: 'ep:key', - auth: '/basic/group', - }, - children: [ - { - path: 'list', - name: 'GroupList', - component: () => import('@/views/basic/group/list.vue'), - meta: { - title: '分组管理', - auth: '/basic/group', - sidebar: false, - breadcrumb: true, - activeMenu: '/basic/group', - }, - }, - { - path: 'detail/:id?', - name: 'GroupInfoDetail', - component: () => import('@/views/basic/group/detail.vue'), - meta: { - title: '分组详情', - sidebar: false, - breadcrumb: true, - activeMenu: '/basic/group', - }, - }, - ], - }, - { path: '/basic/device', component: Layout, redirect: '/basic/device/list', @@ -76,6 +40,42 @@ ], }, { + path: '/basic/group', + component: Layout, + redirect: '/basic/group/list', + name: 'Group', + meta: { + title: '分组管理', + icon: 'ep:key', + auth: '/basic/group', + }, + children: [ + { + path: 'list', + name: 'GroupList', + component: () => import('@/views/basic/group/list.vue'), + meta: { + title: '分组管理', + auth: '/basic/group', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/group', + }, + }, + { + path: 'detail/:id?', + name: 'GroupInfoDetail', + component: () => import('@/views/basic/group/detail.vue'), + meta: { + title: '分组详情', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/group', + }, + }, + ], + }, + { path: '/basic/product', component: Layout, redirect: '/basic/product/list', @@ -100,40 +100,39 @@ }, ], }, - /* { - path: '/product', + path: '/basic/ota', component: Layout, - redirect: 'product/list', - name: 'Product', + redirect: '/basic/ota/list', + name: 'OTA', meta: { - title: '产品管理', + title: '远程升级', icon: 'ep:key', - auth: '/basic/product', + auth: '/basic/ota', }, children: [ { - path: 'product/list', - name: 'ProductList', + path: 'list', + name: 'OTAPackageList', component: () => import('@/views/basic/group/list.vue'), meta: { - title: '产品管理', - auth: '/basic/product/list', + title: '升级包管理', + auth: '/basic/ota/list', icon: 'ep:key', }, }, { - path: 'product/ota', - name: 'ProductOTAList', + path: 'task', + name: 'OTATaskList', component: () => import('@/views/basic/group/list.vue'), meta: { title: '远程升级', - auth: '/basic/product/ota', + auth: '/basic/ota/task', icon: 'ep:key', }, }, ], - }, */ + }, ] export default routes diff --git a/src/router/modules/data.ts b/src/router/modules/data.ts new file mode 100644 index 0000000..6278c5b --- /dev/null +++ b/src/router/modules/data.ts @@ -0,0 +1,105 @@ +import type { Route } from '@/global' + +const Layout = () => import('@/layouts/index.vue') + +const routes: Route.recordRaw[] = [ + { + path: '/data/query', + component: Layout, + redirect: '/data/query/list', + name: 'Group', + meta: { + title: '数据查询', + icon: 'ep:key', + auth: '/data/query', + }, + children: [ + { + path: 'list', + name: 'DataQueryList', + component: () => import('@/views/data/query/list.vue'), + meta: { + title: '数据查询', + auth: '/data/query', + sidebar: false, + breadcrumb: true, + activeMenu: '/data/query', + }, + }, + /* { + path: 'detail/:id?', + name: 'GroupInfoDetail', + component: () => import('@/views/basic/group/detail.vue'), + meta: { + title: '分组详情', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/group', + }, + }, */ + ], + }, + { + path: '/data/alarm', + component: Layout, + redirect: '/data/alarm/list', + name: 'Alarm', + meta: { + title: '报警查询', + icon: 'ep:key', + auth: '/data/alarm', + }, + children: [ + { + path: 'list', + name: 'AlarmList', + component: () => import('@/views/basic/device/list.vue'), + meta: { + title: '报警查询', + auth: '/data/alarm', + sidebar: false, + breadcrumb: true, + activeMenu: '/data/alarm', + }, + }, + { + path: 'detail/:id?', + name: 'DeviceInfoDetail', + component: () => import('@/views/basic/device/detail.vue'), + meta: { + title: '设备详情', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/device', + }, + }, + ], + }, + { + path: '/data/statis', + component: Layout, + redirect: '/data/statis/overview', + name: 'Statis', + meta: { + title: '统计分析', + icon: 'ep:key', + auth: '/data/statis', + }, + children: [ + { + path: 'overview', + name: 'StatisOverview', + component: () => import('@/views/basic/product/list.vue'), + meta: { + title: '产品管理', + auth: '/data/statis', + sidebar: false, + breadcrumb: true, + activeMenu: '/data/statis', + }, + }, + ], + }, +] + +export default routes diff --git a/src/router/routes.ts b/src/router/routes.ts index 95ff1bb..2c4a1ec 100644 --- a/src/router/routes.ts +++ b/src/router/routes.ts @@ -2,6 +2,7 @@ import generatedRoutes from 'virtual:generated-pages' import systemRoute from './modules/system' import basicRoute from './modules/basic' +import dataRoute from './modules/data' import type { Route } from '@/global' import useSettingsStore from '@/store/modules/settings' @@ -116,6 +117,16 @@ }, { meta: { + title: '数据管理', + icon: '', + auth: '/data', + }, + children: [ + ...dataRoute, + ], + }, + { + meta: { title: '系统设置', icon: '', auth: '/system', diff --git a/src/api/basic/device.ts b/src/api/basic/device.ts index 63d7803..fe5bc37 100644 --- a/src/api/basic/device.ts +++ b/src/api/basic/device.ts @@ -56,7 +56,7 @@ } // 批量删除设备 -export function delDeviceBatch(ids: []) { +export function delDeviceBatch(ids: string[]) { return request({ url: `${prefix}/delete`, method: 'post', diff --git a/src/api/data/query.ts b/src/api/data/query.ts new file mode 100644 index 0000000..9b5de39 --- /dev/null +++ b/src/api/data/query.ts @@ -0,0 +1,22 @@ +import request from '../index' +const prefix = 'device/data' + +// 查询数据 分页 +export function getDeviceDataListPage(data: object) { + return request({ + url: `${prefix}/list-page`, + method: 'post', + data, + }) +} + +// 导出 +export function exportDeviceData(data: object) { + return request({ + url: `${prefix}/list-export`, + responseType: 'blob', + method: 'post', + data, + }) +} + diff --git a/src/assets/icons/icon-alarm.svg b/src/assets/icons/icon-alarm.svg new file mode 100644 index 0000000..cf54837 --- /dev/null +++ b/src/assets/icons/icon-alarm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-analysis.svg b/src/assets/icons/icon-analysis.svg new file mode 100644 index 0000000..db70a0e --- /dev/null +++ b/src/assets/icons/icon-analysis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-data.svg b/src/assets/icons/icon-data.svg new file mode 100644 index 0000000..c9e6aad --- /dev/null +++ b/src/assets/icons/icon-data.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-query.svg b/src/assets/icons/icon-query.svg new file mode 100644 index 0000000..ec62c90 --- /dev/null +++ b/src/assets/icons/icon-query.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-statis.svg b/src/assets/icons/icon-statis.svg new file mode 100644 index 0000000..1bb944e --- /dev/null +++ b/src/assets/icons/icon-statis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/router/modules/basic.ts b/src/router/modules/basic.ts index 2308656..d4ec3f7 100644 --- a/src/router/modules/basic.ts +++ b/src/router/modules/basic.ts @@ -4,42 +4,6 @@ const routes: Route.recordRaw[] = [ { - path: '/basic/group', - component: Layout, - redirect: '/basic/group/list', - name: 'Group', - meta: { - title: '分组管理', - icon: 'ep:key', - auth: '/basic/group', - }, - children: [ - { - path: 'list', - name: 'GroupList', - component: () => import('@/views/basic/group/list.vue'), - meta: { - title: '分组管理', - auth: '/basic/group', - sidebar: false, - breadcrumb: true, - activeMenu: '/basic/group', - }, - }, - { - path: 'detail/:id?', - name: 'GroupInfoDetail', - component: () => import('@/views/basic/group/detail.vue'), - meta: { - title: '分组详情', - sidebar: false, - breadcrumb: true, - activeMenu: '/basic/group', - }, - }, - ], - }, - { path: '/basic/device', component: Layout, redirect: '/basic/device/list', @@ -76,6 +40,42 @@ ], }, { + path: '/basic/group', + component: Layout, + redirect: '/basic/group/list', + name: 'Group', + meta: { + title: '分组管理', + icon: 'ep:key', + auth: '/basic/group', + }, + children: [ + { + path: 'list', + name: 'GroupList', + component: () => import('@/views/basic/group/list.vue'), + meta: { + title: '分组管理', + auth: '/basic/group', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/group', + }, + }, + { + path: 'detail/:id?', + name: 'GroupInfoDetail', + component: () => import('@/views/basic/group/detail.vue'), + meta: { + title: '分组详情', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/group', + }, + }, + ], + }, + { path: '/basic/product', component: Layout, redirect: '/basic/product/list', @@ -100,40 +100,39 @@ }, ], }, - /* { - path: '/product', + path: '/basic/ota', component: Layout, - redirect: 'product/list', - name: 'Product', + redirect: '/basic/ota/list', + name: 'OTA', meta: { - title: '产品管理', + title: '远程升级', icon: 'ep:key', - auth: '/basic/product', + auth: '/basic/ota', }, children: [ { - path: 'product/list', - name: 'ProductList', + path: 'list', + name: 'OTAPackageList', component: () => import('@/views/basic/group/list.vue'), meta: { - title: '产品管理', - auth: '/basic/product/list', + title: '升级包管理', + auth: '/basic/ota/list', icon: 'ep:key', }, }, { - path: 'product/ota', - name: 'ProductOTAList', + path: 'task', + name: 'OTATaskList', component: () => import('@/views/basic/group/list.vue'), meta: { title: '远程升级', - auth: '/basic/product/ota', + auth: '/basic/ota/task', icon: 'ep:key', }, }, ], - }, */ + }, ] export default routes diff --git a/src/router/modules/data.ts b/src/router/modules/data.ts new file mode 100644 index 0000000..6278c5b --- /dev/null +++ b/src/router/modules/data.ts @@ -0,0 +1,105 @@ +import type { Route } from '@/global' + +const Layout = () => import('@/layouts/index.vue') + +const routes: Route.recordRaw[] = [ + { + path: '/data/query', + component: Layout, + redirect: '/data/query/list', + name: 'Group', + meta: { + title: '数据查询', + icon: 'ep:key', + auth: '/data/query', + }, + children: [ + { + path: 'list', + name: 'DataQueryList', + component: () => import('@/views/data/query/list.vue'), + meta: { + title: '数据查询', + auth: '/data/query', + sidebar: false, + breadcrumb: true, + activeMenu: '/data/query', + }, + }, + /* { + path: 'detail/:id?', + name: 'GroupInfoDetail', + component: () => import('@/views/basic/group/detail.vue'), + meta: { + title: '分组详情', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/group', + }, + }, */ + ], + }, + { + path: '/data/alarm', + component: Layout, + redirect: '/data/alarm/list', + name: 'Alarm', + meta: { + title: '报警查询', + icon: 'ep:key', + auth: '/data/alarm', + }, + children: [ + { + path: 'list', + name: 'AlarmList', + component: () => import('@/views/basic/device/list.vue'), + meta: { + title: '报警查询', + auth: '/data/alarm', + sidebar: false, + breadcrumb: true, + activeMenu: '/data/alarm', + }, + }, + { + path: 'detail/:id?', + name: 'DeviceInfoDetail', + component: () => import('@/views/basic/device/detail.vue'), + meta: { + title: '设备详情', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/device', + }, + }, + ], + }, + { + path: '/data/statis', + component: Layout, + redirect: '/data/statis/overview', + name: 'Statis', + meta: { + title: '统计分析', + icon: 'ep:key', + auth: '/data/statis', + }, + children: [ + { + path: 'overview', + name: 'StatisOverview', + component: () => import('@/views/basic/product/list.vue'), + meta: { + title: '产品管理', + auth: '/data/statis', + sidebar: false, + breadcrumb: true, + activeMenu: '/data/statis', + }, + }, + ], + }, +] + +export default routes diff --git a/src/router/routes.ts b/src/router/routes.ts index 95ff1bb..2c4a1ec 100644 --- a/src/router/routes.ts +++ b/src/router/routes.ts @@ -2,6 +2,7 @@ import generatedRoutes from 'virtual:generated-pages' import systemRoute from './modules/system' import basicRoute from './modules/basic' +import dataRoute from './modules/data' import type { Route } from '@/global' import useSettingsStore from '@/store/modules/settings' @@ -116,6 +117,16 @@ }, { meta: { + title: '数据管理', + icon: '', + auth: '/data', + }, + children: [ + ...dataRoute, + ], + }, + { + meta: { title: '系统设置', icon: '', auth: '/system', diff --git a/src/views/basic/device/addDeviceDialog.vue b/src/views/basic/device/addDeviceDialog.vue index 018f123..9b130e0 100644 --- a/src/views/basic/device/addDeviceDialog.vue +++ b/src/views/basic/device/addDeviceDialog.vue @@ -1,8 +1,10 @@ + + diff --git a/src/api/basic/device.ts b/src/api/basic/device.ts index 63d7803..fe5bc37 100644 --- a/src/api/basic/device.ts +++ b/src/api/basic/device.ts @@ -56,7 +56,7 @@ } // 批量删除设备 -export function delDeviceBatch(ids: []) { +export function delDeviceBatch(ids: string[]) { return request({ url: `${prefix}/delete`, method: 'post', diff --git a/src/api/data/query.ts b/src/api/data/query.ts new file mode 100644 index 0000000..9b5de39 --- /dev/null +++ b/src/api/data/query.ts @@ -0,0 +1,22 @@ +import request from '../index' +const prefix = 'device/data' + +// 查询数据 分页 +export function getDeviceDataListPage(data: object) { + return request({ + url: `${prefix}/list-page`, + method: 'post', + data, + }) +} + +// 导出 +export function exportDeviceData(data: object) { + return request({ + url: `${prefix}/list-export`, + responseType: 'blob', + method: 'post', + data, + }) +} + diff --git a/src/assets/icons/icon-alarm.svg b/src/assets/icons/icon-alarm.svg new file mode 100644 index 0000000..cf54837 --- /dev/null +++ b/src/assets/icons/icon-alarm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-analysis.svg b/src/assets/icons/icon-analysis.svg new file mode 100644 index 0000000..db70a0e --- /dev/null +++ b/src/assets/icons/icon-analysis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-data.svg b/src/assets/icons/icon-data.svg new file mode 100644 index 0000000..c9e6aad --- /dev/null +++ b/src/assets/icons/icon-data.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-query.svg b/src/assets/icons/icon-query.svg new file mode 100644 index 0000000..ec62c90 --- /dev/null +++ b/src/assets/icons/icon-query.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-statis.svg b/src/assets/icons/icon-statis.svg new file mode 100644 index 0000000..1bb944e --- /dev/null +++ b/src/assets/icons/icon-statis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/router/modules/basic.ts b/src/router/modules/basic.ts index 2308656..d4ec3f7 100644 --- a/src/router/modules/basic.ts +++ b/src/router/modules/basic.ts @@ -4,42 +4,6 @@ const routes: Route.recordRaw[] = [ { - path: '/basic/group', - component: Layout, - redirect: '/basic/group/list', - name: 'Group', - meta: { - title: '分组管理', - icon: 'ep:key', - auth: '/basic/group', - }, - children: [ - { - path: 'list', - name: 'GroupList', - component: () => import('@/views/basic/group/list.vue'), - meta: { - title: '分组管理', - auth: '/basic/group', - sidebar: false, - breadcrumb: true, - activeMenu: '/basic/group', - }, - }, - { - path: 'detail/:id?', - name: 'GroupInfoDetail', - component: () => import('@/views/basic/group/detail.vue'), - meta: { - title: '分组详情', - sidebar: false, - breadcrumb: true, - activeMenu: '/basic/group', - }, - }, - ], - }, - { path: '/basic/device', component: Layout, redirect: '/basic/device/list', @@ -76,6 +40,42 @@ ], }, { + path: '/basic/group', + component: Layout, + redirect: '/basic/group/list', + name: 'Group', + meta: { + title: '分组管理', + icon: 'ep:key', + auth: '/basic/group', + }, + children: [ + { + path: 'list', + name: 'GroupList', + component: () => import('@/views/basic/group/list.vue'), + meta: { + title: '分组管理', + auth: '/basic/group', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/group', + }, + }, + { + path: 'detail/:id?', + name: 'GroupInfoDetail', + component: () => import('@/views/basic/group/detail.vue'), + meta: { + title: '分组详情', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/group', + }, + }, + ], + }, + { path: '/basic/product', component: Layout, redirect: '/basic/product/list', @@ -100,40 +100,39 @@ }, ], }, - /* { - path: '/product', + path: '/basic/ota', component: Layout, - redirect: 'product/list', - name: 'Product', + redirect: '/basic/ota/list', + name: 'OTA', meta: { - title: '产品管理', + title: '远程升级', icon: 'ep:key', - auth: '/basic/product', + auth: '/basic/ota', }, children: [ { - path: 'product/list', - name: 'ProductList', + path: 'list', + name: 'OTAPackageList', component: () => import('@/views/basic/group/list.vue'), meta: { - title: '产品管理', - auth: '/basic/product/list', + title: '升级包管理', + auth: '/basic/ota/list', icon: 'ep:key', }, }, { - path: 'product/ota', - name: 'ProductOTAList', + path: 'task', + name: 'OTATaskList', component: () => import('@/views/basic/group/list.vue'), meta: { title: '远程升级', - auth: '/basic/product/ota', + auth: '/basic/ota/task', icon: 'ep:key', }, }, ], - }, */ + }, ] export default routes diff --git a/src/router/modules/data.ts b/src/router/modules/data.ts new file mode 100644 index 0000000..6278c5b --- /dev/null +++ b/src/router/modules/data.ts @@ -0,0 +1,105 @@ +import type { Route } from '@/global' + +const Layout = () => import('@/layouts/index.vue') + +const routes: Route.recordRaw[] = [ + { + path: '/data/query', + component: Layout, + redirect: '/data/query/list', + name: 'Group', + meta: { + title: '数据查询', + icon: 'ep:key', + auth: '/data/query', + }, + children: [ + { + path: 'list', + name: 'DataQueryList', + component: () => import('@/views/data/query/list.vue'), + meta: { + title: '数据查询', + auth: '/data/query', + sidebar: false, + breadcrumb: true, + activeMenu: '/data/query', + }, + }, + /* { + path: 'detail/:id?', + name: 'GroupInfoDetail', + component: () => import('@/views/basic/group/detail.vue'), + meta: { + title: '分组详情', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/group', + }, + }, */ + ], + }, + { + path: '/data/alarm', + component: Layout, + redirect: '/data/alarm/list', + name: 'Alarm', + meta: { + title: '报警查询', + icon: 'ep:key', + auth: '/data/alarm', + }, + children: [ + { + path: 'list', + name: 'AlarmList', + component: () => import('@/views/basic/device/list.vue'), + meta: { + title: '报警查询', + auth: '/data/alarm', + sidebar: false, + breadcrumb: true, + activeMenu: '/data/alarm', + }, + }, + { + path: 'detail/:id?', + name: 'DeviceInfoDetail', + component: () => import('@/views/basic/device/detail.vue'), + meta: { + title: '设备详情', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/device', + }, + }, + ], + }, + { + path: '/data/statis', + component: Layout, + redirect: '/data/statis/overview', + name: 'Statis', + meta: { + title: '统计分析', + icon: 'ep:key', + auth: '/data/statis', + }, + children: [ + { + path: 'overview', + name: 'StatisOverview', + component: () => import('@/views/basic/product/list.vue'), + meta: { + title: '产品管理', + auth: '/data/statis', + sidebar: false, + breadcrumb: true, + activeMenu: '/data/statis', + }, + }, + ], + }, +] + +export default routes diff --git a/src/router/routes.ts b/src/router/routes.ts index 95ff1bb..2c4a1ec 100644 --- a/src/router/routes.ts +++ b/src/router/routes.ts @@ -2,6 +2,7 @@ import generatedRoutes from 'virtual:generated-pages' import systemRoute from './modules/system' import basicRoute from './modules/basic' +import dataRoute from './modules/data' import type { Route } from '@/global' import useSettingsStore from '@/store/modules/settings' @@ -116,6 +117,16 @@ }, { meta: { + title: '数据管理', + icon: '', + auth: '/data', + }, + children: [ + ...dataRoute, + ], + }, + { + meta: { title: '系统设置', icon: '', auth: '/system', diff --git a/src/views/basic/device/addDeviceDialog.vue b/src/views/basic/device/addDeviceDialog.vue index 018f123..9b130e0 100644 --- a/src/views/basic/device/addDeviceDialog.vue +++ b/src/views/basic/device/addDeviceDialog.vue @@ -1,8 +1,10 @@ + + diff --git a/src/views/basic/product/group-info.ts b/src/views/basic/product/group-info.ts new file mode 100644 index 0000000..00bbef6 --- /dev/null +++ b/src/views/basic/product/group-info.ts @@ -0,0 +1,23 @@ +// 列表查询参数接口 +export interface IListQuery { + ids?: [] // id列表 导出用 + groupNo?: string + groupName: string // 分组名 + beginTime: string // 创建时间-开始 + endTime: string // 创建时间-结束 + offset: number + limit: number + sort?: string + order?: string +} + +export interface IGroupInfo { + id: string // id + groupNo?: string // 分组编号 + groupName: string // 分组名称 + deptid: string // 所属组织 + deptName: string // 所属组织名称 + descn: string // 分组描述 + createUserId: string + createTime?: string +} diff --git a/src/api/basic/device.ts b/src/api/basic/device.ts index 63d7803..fe5bc37 100644 --- a/src/api/basic/device.ts +++ b/src/api/basic/device.ts @@ -56,7 +56,7 @@ } // 批量删除设备 -export function delDeviceBatch(ids: []) { +export function delDeviceBatch(ids: string[]) { return request({ url: `${prefix}/delete`, method: 'post', diff --git a/src/api/data/query.ts b/src/api/data/query.ts new file mode 100644 index 0000000..9b5de39 --- /dev/null +++ b/src/api/data/query.ts @@ -0,0 +1,22 @@ +import request from '../index' +const prefix = 'device/data' + +// 查询数据 分页 +export function getDeviceDataListPage(data: object) { + return request({ + url: `${prefix}/list-page`, + method: 'post', + data, + }) +} + +// 导出 +export function exportDeviceData(data: object) { + return request({ + url: `${prefix}/list-export`, + responseType: 'blob', + method: 'post', + data, + }) +} + diff --git a/src/assets/icons/icon-alarm.svg b/src/assets/icons/icon-alarm.svg new file mode 100644 index 0000000..cf54837 --- /dev/null +++ b/src/assets/icons/icon-alarm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-analysis.svg b/src/assets/icons/icon-analysis.svg new file mode 100644 index 0000000..db70a0e --- /dev/null +++ b/src/assets/icons/icon-analysis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-data.svg b/src/assets/icons/icon-data.svg new file mode 100644 index 0000000..c9e6aad --- /dev/null +++ b/src/assets/icons/icon-data.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-query.svg b/src/assets/icons/icon-query.svg new file mode 100644 index 0000000..ec62c90 --- /dev/null +++ b/src/assets/icons/icon-query.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-statis.svg b/src/assets/icons/icon-statis.svg new file mode 100644 index 0000000..1bb944e --- /dev/null +++ b/src/assets/icons/icon-statis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/router/modules/basic.ts b/src/router/modules/basic.ts index 2308656..d4ec3f7 100644 --- a/src/router/modules/basic.ts +++ b/src/router/modules/basic.ts @@ -4,42 +4,6 @@ const routes: Route.recordRaw[] = [ { - path: '/basic/group', - component: Layout, - redirect: '/basic/group/list', - name: 'Group', - meta: { - title: '分组管理', - icon: 'ep:key', - auth: '/basic/group', - }, - children: [ - { - path: 'list', - name: 'GroupList', - component: () => import('@/views/basic/group/list.vue'), - meta: { - title: '分组管理', - auth: '/basic/group', - sidebar: false, - breadcrumb: true, - activeMenu: '/basic/group', - }, - }, - { - path: 'detail/:id?', - name: 'GroupInfoDetail', - component: () => import('@/views/basic/group/detail.vue'), - meta: { - title: '分组详情', - sidebar: false, - breadcrumb: true, - activeMenu: '/basic/group', - }, - }, - ], - }, - { path: '/basic/device', component: Layout, redirect: '/basic/device/list', @@ -76,6 +40,42 @@ ], }, { + path: '/basic/group', + component: Layout, + redirect: '/basic/group/list', + name: 'Group', + meta: { + title: '分组管理', + icon: 'ep:key', + auth: '/basic/group', + }, + children: [ + { + path: 'list', + name: 'GroupList', + component: () => import('@/views/basic/group/list.vue'), + meta: { + title: '分组管理', + auth: '/basic/group', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/group', + }, + }, + { + path: 'detail/:id?', + name: 'GroupInfoDetail', + component: () => import('@/views/basic/group/detail.vue'), + meta: { + title: '分组详情', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/group', + }, + }, + ], + }, + { path: '/basic/product', component: Layout, redirect: '/basic/product/list', @@ -100,40 +100,39 @@ }, ], }, - /* { - path: '/product', + path: '/basic/ota', component: Layout, - redirect: 'product/list', - name: 'Product', + redirect: '/basic/ota/list', + name: 'OTA', meta: { - title: '产品管理', + title: '远程升级', icon: 'ep:key', - auth: '/basic/product', + auth: '/basic/ota', }, children: [ { - path: 'product/list', - name: 'ProductList', + path: 'list', + name: 'OTAPackageList', component: () => import('@/views/basic/group/list.vue'), meta: { - title: '产品管理', - auth: '/basic/product/list', + title: '升级包管理', + auth: '/basic/ota/list', icon: 'ep:key', }, }, { - path: 'product/ota', - name: 'ProductOTAList', + path: 'task', + name: 'OTATaskList', component: () => import('@/views/basic/group/list.vue'), meta: { title: '远程升级', - auth: '/basic/product/ota', + auth: '/basic/ota/task', icon: 'ep:key', }, }, ], - }, */ + }, ] export default routes diff --git a/src/router/modules/data.ts b/src/router/modules/data.ts new file mode 100644 index 0000000..6278c5b --- /dev/null +++ b/src/router/modules/data.ts @@ -0,0 +1,105 @@ +import type { Route } from '@/global' + +const Layout = () => import('@/layouts/index.vue') + +const routes: Route.recordRaw[] = [ + { + path: '/data/query', + component: Layout, + redirect: '/data/query/list', + name: 'Group', + meta: { + title: '数据查询', + icon: 'ep:key', + auth: '/data/query', + }, + children: [ + { + path: 'list', + name: 'DataQueryList', + component: () => import('@/views/data/query/list.vue'), + meta: { + title: '数据查询', + auth: '/data/query', + sidebar: false, + breadcrumb: true, + activeMenu: '/data/query', + }, + }, + /* { + path: 'detail/:id?', + name: 'GroupInfoDetail', + component: () => import('@/views/basic/group/detail.vue'), + meta: { + title: '分组详情', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/group', + }, + }, */ + ], + }, + { + path: '/data/alarm', + component: Layout, + redirect: '/data/alarm/list', + name: 'Alarm', + meta: { + title: '报警查询', + icon: 'ep:key', + auth: '/data/alarm', + }, + children: [ + { + path: 'list', + name: 'AlarmList', + component: () => import('@/views/basic/device/list.vue'), + meta: { + title: '报警查询', + auth: '/data/alarm', + sidebar: false, + breadcrumb: true, + activeMenu: '/data/alarm', + }, + }, + { + path: 'detail/:id?', + name: 'DeviceInfoDetail', + component: () => import('@/views/basic/device/detail.vue'), + meta: { + title: '设备详情', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/device', + }, + }, + ], + }, + { + path: '/data/statis', + component: Layout, + redirect: '/data/statis/overview', + name: 'Statis', + meta: { + title: '统计分析', + icon: 'ep:key', + auth: '/data/statis', + }, + children: [ + { + path: 'overview', + name: 'StatisOverview', + component: () => import('@/views/basic/product/list.vue'), + meta: { + title: '产品管理', + auth: '/data/statis', + sidebar: false, + breadcrumb: true, + activeMenu: '/data/statis', + }, + }, + ], + }, +] + +export default routes diff --git a/src/router/routes.ts b/src/router/routes.ts index 95ff1bb..2c4a1ec 100644 --- a/src/router/routes.ts +++ b/src/router/routes.ts @@ -2,6 +2,7 @@ import generatedRoutes from 'virtual:generated-pages' import systemRoute from './modules/system' import basicRoute from './modules/basic' +import dataRoute from './modules/data' import type { Route } from '@/global' import useSettingsStore from '@/store/modules/settings' @@ -116,6 +117,16 @@ }, { meta: { + title: '数据管理', + icon: '', + auth: '/data', + }, + children: [ + ...dataRoute, + ], + }, + { + meta: { title: '系统设置', icon: '', auth: '/system', diff --git a/src/views/basic/device/addDeviceDialog.vue b/src/views/basic/device/addDeviceDialog.vue index 018f123..9b130e0 100644 --- a/src/views/basic/device/addDeviceDialog.vue +++ b/src/views/basic/device/addDeviceDialog.vue @@ -1,8 +1,10 @@ + + diff --git a/src/views/basic/product/group-info.ts b/src/views/basic/product/group-info.ts new file mode 100644 index 0000000..00bbef6 --- /dev/null +++ b/src/views/basic/product/group-info.ts @@ -0,0 +1,23 @@ +// 列表查询参数接口 +export interface IListQuery { + ids?: [] // id列表 导出用 + groupNo?: string + groupName: string // 分组名 + beginTime: string // 创建时间-开始 + endTime: string // 创建时间-结束 + offset: number + limit: number + sort?: string + order?: string +} + +export interface IGroupInfo { + id: string // id + groupNo?: string // 分组编号 + groupName: string // 分组名称 + deptid: string // 所属组织 + deptName: string // 所属组织名称 + descn: string // 分组描述 + createUserId: string + createTime?: string +} diff --git a/src/views/basic/product/list.vue b/src/views/basic/product/list.vue new file mode 100644 index 0000000..4b0fceb --- /dev/null +++ b/src/views/basic/product/list.vue @@ -0,0 +1,214 @@ + + + + diff --git a/src/api/basic/device.ts b/src/api/basic/device.ts index 63d7803..fe5bc37 100644 --- a/src/api/basic/device.ts +++ b/src/api/basic/device.ts @@ -56,7 +56,7 @@ } // 批量删除设备 -export function delDeviceBatch(ids: []) { +export function delDeviceBatch(ids: string[]) { return request({ url: `${prefix}/delete`, method: 'post', diff --git a/src/api/data/query.ts b/src/api/data/query.ts new file mode 100644 index 0000000..9b5de39 --- /dev/null +++ b/src/api/data/query.ts @@ -0,0 +1,22 @@ +import request from '../index' +const prefix = 'device/data' + +// 查询数据 分页 +export function getDeviceDataListPage(data: object) { + return request({ + url: `${prefix}/list-page`, + method: 'post', + data, + }) +} + +// 导出 +export function exportDeviceData(data: object) { + return request({ + url: `${prefix}/list-export`, + responseType: 'blob', + method: 'post', + data, + }) +} + diff --git a/src/assets/icons/icon-alarm.svg b/src/assets/icons/icon-alarm.svg new file mode 100644 index 0000000..cf54837 --- /dev/null +++ b/src/assets/icons/icon-alarm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-analysis.svg b/src/assets/icons/icon-analysis.svg new file mode 100644 index 0000000..db70a0e --- /dev/null +++ b/src/assets/icons/icon-analysis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-data.svg b/src/assets/icons/icon-data.svg new file mode 100644 index 0000000..c9e6aad --- /dev/null +++ b/src/assets/icons/icon-data.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-query.svg b/src/assets/icons/icon-query.svg new file mode 100644 index 0000000..ec62c90 --- /dev/null +++ b/src/assets/icons/icon-query.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-statis.svg b/src/assets/icons/icon-statis.svg new file mode 100644 index 0000000..1bb944e --- /dev/null +++ b/src/assets/icons/icon-statis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/router/modules/basic.ts b/src/router/modules/basic.ts index 2308656..d4ec3f7 100644 --- a/src/router/modules/basic.ts +++ b/src/router/modules/basic.ts @@ -4,42 +4,6 @@ const routes: Route.recordRaw[] = [ { - path: '/basic/group', - component: Layout, - redirect: '/basic/group/list', - name: 'Group', - meta: { - title: '分组管理', - icon: 'ep:key', - auth: '/basic/group', - }, - children: [ - { - path: 'list', - name: 'GroupList', - component: () => import('@/views/basic/group/list.vue'), - meta: { - title: '分组管理', - auth: '/basic/group', - sidebar: false, - breadcrumb: true, - activeMenu: '/basic/group', - }, - }, - { - path: 'detail/:id?', - name: 'GroupInfoDetail', - component: () => import('@/views/basic/group/detail.vue'), - meta: { - title: '分组详情', - sidebar: false, - breadcrumb: true, - activeMenu: '/basic/group', - }, - }, - ], - }, - { path: '/basic/device', component: Layout, redirect: '/basic/device/list', @@ -76,6 +40,42 @@ ], }, { + path: '/basic/group', + component: Layout, + redirect: '/basic/group/list', + name: 'Group', + meta: { + title: '分组管理', + icon: 'ep:key', + auth: '/basic/group', + }, + children: [ + { + path: 'list', + name: 'GroupList', + component: () => import('@/views/basic/group/list.vue'), + meta: { + title: '分组管理', + auth: '/basic/group', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/group', + }, + }, + { + path: 'detail/:id?', + name: 'GroupInfoDetail', + component: () => import('@/views/basic/group/detail.vue'), + meta: { + title: '分组详情', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/group', + }, + }, + ], + }, + { path: '/basic/product', component: Layout, redirect: '/basic/product/list', @@ -100,40 +100,39 @@ }, ], }, - /* { - path: '/product', + path: '/basic/ota', component: Layout, - redirect: 'product/list', - name: 'Product', + redirect: '/basic/ota/list', + name: 'OTA', meta: { - title: '产品管理', + title: '远程升级', icon: 'ep:key', - auth: '/basic/product', + auth: '/basic/ota', }, children: [ { - path: 'product/list', - name: 'ProductList', + path: 'list', + name: 'OTAPackageList', component: () => import('@/views/basic/group/list.vue'), meta: { - title: '产品管理', - auth: '/basic/product/list', + title: '升级包管理', + auth: '/basic/ota/list', icon: 'ep:key', }, }, { - path: 'product/ota', - name: 'ProductOTAList', + path: 'task', + name: 'OTATaskList', component: () => import('@/views/basic/group/list.vue'), meta: { title: '远程升级', - auth: '/basic/product/ota', + auth: '/basic/ota/task', icon: 'ep:key', }, }, ], - }, */ + }, ] export default routes diff --git a/src/router/modules/data.ts b/src/router/modules/data.ts new file mode 100644 index 0000000..6278c5b --- /dev/null +++ b/src/router/modules/data.ts @@ -0,0 +1,105 @@ +import type { Route } from '@/global' + +const Layout = () => import('@/layouts/index.vue') + +const routes: Route.recordRaw[] = [ + { + path: '/data/query', + component: Layout, + redirect: '/data/query/list', + name: 'Group', + meta: { + title: '数据查询', + icon: 'ep:key', + auth: '/data/query', + }, + children: [ + { + path: 'list', + name: 'DataQueryList', + component: () => import('@/views/data/query/list.vue'), + meta: { + title: '数据查询', + auth: '/data/query', + sidebar: false, + breadcrumb: true, + activeMenu: '/data/query', + }, + }, + /* { + path: 'detail/:id?', + name: 'GroupInfoDetail', + component: () => import('@/views/basic/group/detail.vue'), + meta: { + title: '分组详情', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/group', + }, + }, */ + ], + }, + { + path: '/data/alarm', + component: Layout, + redirect: '/data/alarm/list', + name: 'Alarm', + meta: { + title: '报警查询', + icon: 'ep:key', + auth: '/data/alarm', + }, + children: [ + { + path: 'list', + name: 'AlarmList', + component: () => import('@/views/basic/device/list.vue'), + meta: { + title: '报警查询', + auth: '/data/alarm', + sidebar: false, + breadcrumb: true, + activeMenu: '/data/alarm', + }, + }, + { + path: 'detail/:id?', + name: 'DeviceInfoDetail', + component: () => import('@/views/basic/device/detail.vue'), + meta: { + title: '设备详情', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/device', + }, + }, + ], + }, + { + path: '/data/statis', + component: Layout, + redirect: '/data/statis/overview', + name: 'Statis', + meta: { + title: '统计分析', + icon: 'ep:key', + auth: '/data/statis', + }, + children: [ + { + path: 'overview', + name: 'StatisOverview', + component: () => import('@/views/basic/product/list.vue'), + meta: { + title: '产品管理', + auth: '/data/statis', + sidebar: false, + breadcrumb: true, + activeMenu: '/data/statis', + }, + }, + ], + }, +] + +export default routes diff --git a/src/router/routes.ts b/src/router/routes.ts index 95ff1bb..2c4a1ec 100644 --- a/src/router/routes.ts +++ b/src/router/routes.ts @@ -2,6 +2,7 @@ import generatedRoutes from 'virtual:generated-pages' import systemRoute from './modules/system' import basicRoute from './modules/basic' +import dataRoute from './modules/data' import type { Route } from '@/global' import useSettingsStore from '@/store/modules/settings' @@ -116,6 +117,16 @@ }, { meta: { + title: '数据管理', + icon: '', + auth: '/data', + }, + children: [ + ...dataRoute, + ], + }, + { + meta: { title: '系统设置', icon: '', auth: '/system', diff --git a/src/views/basic/device/addDeviceDialog.vue b/src/views/basic/device/addDeviceDialog.vue index 018f123..9b130e0 100644 --- a/src/views/basic/device/addDeviceDialog.vue +++ b/src/views/basic/device/addDeviceDialog.vue @@ -1,8 +1,10 @@ + + diff --git a/src/views/basic/product/group-info.ts b/src/views/basic/product/group-info.ts new file mode 100644 index 0000000..00bbef6 --- /dev/null +++ b/src/views/basic/product/group-info.ts @@ -0,0 +1,23 @@ +// 列表查询参数接口 +export interface IListQuery { + ids?: [] // id列表 导出用 + groupNo?: string + groupName: string // 分组名 + beginTime: string // 创建时间-开始 + endTime: string // 创建时间-结束 + offset: number + limit: number + sort?: string + order?: string +} + +export interface IGroupInfo { + id: string // id + groupNo?: string // 分组编号 + groupName: string // 分组名称 + deptid: string // 所属组织 + deptName: string // 所属组织名称 + descn: string // 分组描述 + createUserId: string + createTime?: string +} diff --git a/src/views/basic/product/list.vue b/src/views/basic/product/list.vue new file mode 100644 index 0000000..4b0fceb --- /dev/null +++ b/src/views/basic/product/list.vue @@ -0,0 +1,214 @@ + + + + diff --git a/src/views/data/query/data-query.ts b/src/views/data/query/data-query.ts new file mode 100644 index 0000000..576871e --- /dev/null +++ b/src/views/data/query/data-query.ts @@ -0,0 +1,36 @@ +// 列表查询参数接口 +export interface IListQuery { + groupId: string // 分组 + devcode: string + deviceType: string + beginTime?: string // 电量 + endTime?: string // + offset?: number + limit?: number + sort?: string + order?: string +} + +export interface IDeviceInfo { + id: string + groupId: string + devcode: string + deviceName?: string + deviceType: string + deviceTypeName?: string + status?: string + statusName?: string + cell?: string + imei: string + iccid: string + model: string + modelName?: string + productId: string + productName?: string + encipherType: string + encipherTypeName?: string + createTime: string + createUserId: string + createUserName?: string + dataValue?: string +} diff --git a/src/api/basic/device.ts b/src/api/basic/device.ts index 63d7803..fe5bc37 100644 --- a/src/api/basic/device.ts +++ b/src/api/basic/device.ts @@ -56,7 +56,7 @@ } // 批量删除设备 -export function delDeviceBatch(ids: []) { +export function delDeviceBatch(ids: string[]) { return request({ url: `${prefix}/delete`, method: 'post', diff --git a/src/api/data/query.ts b/src/api/data/query.ts new file mode 100644 index 0000000..9b5de39 --- /dev/null +++ b/src/api/data/query.ts @@ -0,0 +1,22 @@ +import request from '../index' +const prefix = 'device/data' + +// 查询数据 分页 +export function getDeviceDataListPage(data: object) { + return request({ + url: `${prefix}/list-page`, + method: 'post', + data, + }) +} + +// 导出 +export function exportDeviceData(data: object) { + return request({ + url: `${prefix}/list-export`, + responseType: 'blob', + method: 'post', + data, + }) +} + diff --git a/src/assets/icons/icon-alarm.svg b/src/assets/icons/icon-alarm.svg new file mode 100644 index 0000000..cf54837 --- /dev/null +++ b/src/assets/icons/icon-alarm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-analysis.svg b/src/assets/icons/icon-analysis.svg new file mode 100644 index 0000000..db70a0e --- /dev/null +++ b/src/assets/icons/icon-analysis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-data.svg b/src/assets/icons/icon-data.svg new file mode 100644 index 0000000..c9e6aad --- /dev/null +++ b/src/assets/icons/icon-data.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-query.svg b/src/assets/icons/icon-query.svg new file mode 100644 index 0000000..ec62c90 --- /dev/null +++ b/src/assets/icons/icon-query.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-statis.svg b/src/assets/icons/icon-statis.svg new file mode 100644 index 0000000..1bb944e --- /dev/null +++ b/src/assets/icons/icon-statis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/router/modules/basic.ts b/src/router/modules/basic.ts index 2308656..d4ec3f7 100644 --- a/src/router/modules/basic.ts +++ b/src/router/modules/basic.ts @@ -4,42 +4,6 @@ const routes: Route.recordRaw[] = [ { - path: '/basic/group', - component: Layout, - redirect: '/basic/group/list', - name: 'Group', - meta: { - title: '分组管理', - icon: 'ep:key', - auth: '/basic/group', - }, - children: [ - { - path: 'list', - name: 'GroupList', - component: () => import('@/views/basic/group/list.vue'), - meta: { - title: '分组管理', - auth: '/basic/group', - sidebar: false, - breadcrumb: true, - activeMenu: '/basic/group', - }, - }, - { - path: 'detail/:id?', - name: 'GroupInfoDetail', - component: () => import('@/views/basic/group/detail.vue'), - meta: { - title: '分组详情', - sidebar: false, - breadcrumb: true, - activeMenu: '/basic/group', - }, - }, - ], - }, - { path: '/basic/device', component: Layout, redirect: '/basic/device/list', @@ -76,6 +40,42 @@ ], }, { + path: '/basic/group', + component: Layout, + redirect: '/basic/group/list', + name: 'Group', + meta: { + title: '分组管理', + icon: 'ep:key', + auth: '/basic/group', + }, + children: [ + { + path: 'list', + name: 'GroupList', + component: () => import('@/views/basic/group/list.vue'), + meta: { + title: '分组管理', + auth: '/basic/group', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/group', + }, + }, + { + path: 'detail/:id?', + name: 'GroupInfoDetail', + component: () => import('@/views/basic/group/detail.vue'), + meta: { + title: '分组详情', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/group', + }, + }, + ], + }, + { path: '/basic/product', component: Layout, redirect: '/basic/product/list', @@ -100,40 +100,39 @@ }, ], }, - /* { - path: '/product', + path: '/basic/ota', component: Layout, - redirect: 'product/list', - name: 'Product', + redirect: '/basic/ota/list', + name: 'OTA', meta: { - title: '产品管理', + title: '远程升级', icon: 'ep:key', - auth: '/basic/product', + auth: '/basic/ota', }, children: [ { - path: 'product/list', - name: 'ProductList', + path: 'list', + name: 'OTAPackageList', component: () => import('@/views/basic/group/list.vue'), meta: { - title: '产品管理', - auth: '/basic/product/list', + title: '升级包管理', + auth: '/basic/ota/list', icon: 'ep:key', }, }, { - path: 'product/ota', - name: 'ProductOTAList', + path: 'task', + name: 'OTATaskList', component: () => import('@/views/basic/group/list.vue'), meta: { title: '远程升级', - auth: '/basic/product/ota', + auth: '/basic/ota/task', icon: 'ep:key', }, }, ], - }, */ + }, ] export default routes diff --git a/src/router/modules/data.ts b/src/router/modules/data.ts new file mode 100644 index 0000000..6278c5b --- /dev/null +++ b/src/router/modules/data.ts @@ -0,0 +1,105 @@ +import type { Route } from '@/global' + +const Layout = () => import('@/layouts/index.vue') + +const routes: Route.recordRaw[] = [ + { + path: '/data/query', + component: Layout, + redirect: '/data/query/list', + name: 'Group', + meta: { + title: '数据查询', + icon: 'ep:key', + auth: '/data/query', + }, + children: [ + { + path: 'list', + name: 'DataQueryList', + component: () => import('@/views/data/query/list.vue'), + meta: { + title: '数据查询', + auth: '/data/query', + sidebar: false, + breadcrumb: true, + activeMenu: '/data/query', + }, + }, + /* { + path: 'detail/:id?', + name: 'GroupInfoDetail', + component: () => import('@/views/basic/group/detail.vue'), + meta: { + title: '分组详情', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/group', + }, + }, */ + ], + }, + { + path: '/data/alarm', + component: Layout, + redirect: '/data/alarm/list', + name: 'Alarm', + meta: { + title: '报警查询', + icon: 'ep:key', + auth: '/data/alarm', + }, + children: [ + { + path: 'list', + name: 'AlarmList', + component: () => import('@/views/basic/device/list.vue'), + meta: { + title: '报警查询', + auth: '/data/alarm', + sidebar: false, + breadcrumb: true, + activeMenu: '/data/alarm', + }, + }, + { + path: 'detail/:id?', + name: 'DeviceInfoDetail', + component: () => import('@/views/basic/device/detail.vue'), + meta: { + title: '设备详情', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/device', + }, + }, + ], + }, + { + path: '/data/statis', + component: Layout, + redirect: '/data/statis/overview', + name: 'Statis', + meta: { + title: '统计分析', + icon: 'ep:key', + auth: '/data/statis', + }, + children: [ + { + path: 'overview', + name: 'StatisOverview', + component: () => import('@/views/basic/product/list.vue'), + meta: { + title: '产品管理', + auth: '/data/statis', + sidebar: false, + breadcrumb: true, + activeMenu: '/data/statis', + }, + }, + ], + }, +] + +export default routes diff --git a/src/router/routes.ts b/src/router/routes.ts index 95ff1bb..2c4a1ec 100644 --- a/src/router/routes.ts +++ b/src/router/routes.ts @@ -2,6 +2,7 @@ import generatedRoutes from 'virtual:generated-pages' import systemRoute from './modules/system' import basicRoute from './modules/basic' +import dataRoute from './modules/data' import type { Route } from '@/global' import useSettingsStore from '@/store/modules/settings' @@ -116,6 +117,16 @@ }, { meta: { + title: '数据管理', + icon: '', + auth: '/data', + }, + children: [ + ...dataRoute, + ], + }, + { + meta: { title: '系统设置', icon: '', auth: '/system', diff --git a/src/views/basic/device/addDeviceDialog.vue b/src/views/basic/device/addDeviceDialog.vue index 018f123..9b130e0 100644 --- a/src/views/basic/device/addDeviceDialog.vue +++ b/src/views/basic/device/addDeviceDialog.vue @@ -1,8 +1,10 @@ + + diff --git a/src/views/basic/product/group-info.ts b/src/views/basic/product/group-info.ts new file mode 100644 index 0000000..00bbef6 --- /dev/null +++ b/src/views/basic/product/group-info.ts @@ -0,0 +1,23 @@ +// 列表查询参数接口 +export interface IListQuery { + ids?: [] // id列表 导出用 + groupNo?: string + groupName: string // 分组名 + beginTime: string // 创建时间-开始 + endTime: string // 创建时间-结束 + offset: number + limit: number + sort?: string + order?: string +} + +export interface IGroupInfo { + id: string // id + groupNo?: string // 分组编号 + groupName: string // 分组名称 + deptid: string // 所属组织 + deptName: string // 所属组织名称 + descn: string // 分组描述 + createUserId: string + createTime?: string +} diff --git a/src/views/basic/product/list.vue b/src/views/basic/product/list.vue new file mode 100644 index 0000000..4b0fceb --- /dev/null +++ b/src/views/basic/product/list.vue @@ -0,0 +1,214 @@ + + + + diff --git a/src/views/data/query/data-query.ts b/src/views/data/query/data-query.ts new file mode 100644 index 0000000..576871e --- /dev/null +++ b/src/views/data/query/data-query.ts @@ -0,0 +1,36 @@ +// 列表查询参数接口 +export interface IListQuery { + groupId: string // 分组 + devcode: string + deviceType: string + beginTime?: string // 电量 + endTime?: string // + offset?: number + limit?: number + sort?: string + order?: string +} + +export interface IDeviceInfo { + id: string + groupId: string + devcode: string + deviceName?: string + deviceType: string + deviceTypeName?: string + status?: string + statusName?: string + cell?: string + imei: string + iccid: string + model: string + modelName?: string + productId: string + productName?: string + encipherType: string + encipherTypeName?: string + createTime: string + createUserId: string + createUserName?: string + dataValue?: string +} diff --git a/src/views/data/query/list.vue b/src/views/data/query/list.vue new file mode 100644 index 0000000..d15d867 --- /dev/null +++ b/src/views/data/query/list.vue @@ -0,0 +1,300 @@ + + + + diff --git a/src/api/basic/device.ts b/src/api/basic/device.ts index 63d7803..fe5bc37 100644 --- a/src/api/basic/device.ts +++ b/src/api/basic/device.ts @@ -56,7 +56,7 @@ } // 批量删除设备 -export function delDeviceBatch(ids: []) { +export function delDeviceBatch(ids: string[]) { return request({ url: `${prefix}/delete`, method: 'post', diff --git a/src/api/data/query.ts b/src/api/data/query.ts new file mode 100644 index 0000000..9b5de39 --- /dev/null +++ b/src/api/data/query.ts @@ -0,0 +1,22 @@ +import request from '../index' +const prefix = 'device/data' + +// 查询数据 分页 +export function getDeviceDataListPage(data: object) { + return request({ + url: `${prefix}/list-page`, + method: 'post', + data, + }) +} + +// 导出 +export function exportDeviceData(data: object) { + return request({ + url: `${prefix}/list-export`, + responseType: 'blob', + method: 'post', + data, + }) +} + diff --git a/src/assets/icons/icon-alarm.svg b/src/assets/icons/icon-alarm.svg new file mode 100644 index 0000000..cf54837 --- /dev/null +++ b/src/assets/icons/icon-alarm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-analysis.svg b/src/assets/icons/icon-analysis.svg new file mode 100644 index 0000000..db70a0e --- /dev/null +++ b/src/assets/icons/icon-analysis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-data.svg b/src/assets/icons/icon-data.svg new file mode 100644 index 0000000..c9e6aad --- /dev/null +++ b/src/assets/icons/icon-data.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-query.svg b/src/assets/icons/icon-query.svg new file mode 100644 index 0000000..ec62c90 --- /dev/null +++ b/src/assets/icons/icon-query.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/icon-statis.svg b/src/assets/icons/icon-statis.svg new file mode 100644 index 0000000..1bb944e --- /dev/null +++ b/src/assets/icons/icon-statis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/router/modules/basic.ts b/src/router/modules/basic.ts index 2308656..d4ec3f7 100644 --- a/src/router/modules/basic.ts +++ b/src/router/modules/basic.ts @@ -4,42 +4,6 @@ const routes: Route.recordRaw[] = [ { - path: '/basic/group', - component: Layout, - redirect: '/basic/group/list', - name: 'Group', - meta: { - title: '分组管理', - icon: 'ep:key', - auth: '/basic/group', - }, - children: [ - { - path: 'list', - name: 'GroupList', - component: () => import('@/views/basic/group/list.vue'), - meta: { - title: '分组管理', - auth: '/basic/group', - sidebar: false, - breadcrumb: true, - activeMenu: '/basic/group', - }, - }, - { - path: 'detail/:id?', - name: 'GroupInfoDetail', - component: () => import('@/views/basic/group/detail.vue'), - meta: { - title: '分组详情', - sidebar: false, - breadcrumb: true, - activeMenu: '/basic/group', - }, - }, - ], - }, - { path: '/basic/device', component: Layout, redirect: '/basic/device/list', @@ -76,6 +40,42 @@ ], }, { + path: '/basic/group', + component: Layout, + redirect: '/basic/group/list', + name: 'Group', + meta: { + title: '分组管理', + icon: 'ep:key', + auth: '/basic/group', + }, + children: [ + { + path: 'list', + name: 'GroupList', + component: () => import('@/views/basic/group/list.vue'), + meta: { + title: '分组管理', + auth: '/basic/group', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/group', + }, + }, + { + path: 'detail/:id?', + name: 'GroupInfoDetail', + component: () => import('@/views/basic/group/detail.vue'), + meta: { + title: '分组详情', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/group', + }, + }, + ], + }, + { path: '/basic/product', component: Layout, redirect: '/basic/product/list', @@ -100,40 +100,39 @@ }, ], }, - /* { - path: '/product', + path: '/basic/ota', component: Layout, - redirect: 'product/list', - name: 'Product', + redirect: '/basic/ota/list', + name: 'OTA', meta: { - title: '产品管理', + title: '远程升级', icon: 'ep:key', - auth: '/basic/product', + auth: '/basic/ota', }, children: [ { - path: 'product/list', - name: 'ProductList', + path: 'list', + name: 'OTAPackageList', component: () => import('@/views/basic/group/list.vue'), meta: { - title: '产品管理', - auth: '/basic/product/list', + title: '升级包管理', + auth: '/basic/ota/list', icon: 'ep:key', }, }, { - path: 'product/ota', - name: 'ProductOTAList', + path: 'task', + name: 'OTATaskList', component: () => import('@/views/basic/group/list.vue'), meta: { title: '远程升级', - auth: '/basic/product/ota', + auth: '/basic/ota/task', icon: 'ep:key', }, }, ], - }, */ + }, ] export default routes diff --git a/src/router/modules/data.ts b/src/router/modules/data.ts new file mode 100644 index 0000000..6278c5b --- /dev/null +++ b/src/router/modules/data.ts @@ -0,0 +1,105 @@ +import type { Route } from '@/global' + +const Layout = () => import('@/layouts/index.vue') + +const routes: Route.recordRaw[] = [ + { + path: '/data/query', + component: Layout, + redirect: '/data/query/list', + name: 'Group', + meta: { + title: '数据查询', + icon: 'ep:key', + auth: '/data/query', + }, + children: [ + { + path: 'list', + name: 'DataQueryList', + component: () => import('@/views/data/query/list.vue'), + meta: { + title: '数据查询', + auth: '/data/query', + sidebar: false, + breadcrumb: true, + activeMenu: '/data/query', + }, + }, + /* { + path: 'detail/:id?', + name: 'GroupInfoDetail', + component: () => import('@/views/basic/group/detail.vue'), + meta: { + title: '分组详情', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/group', + }, + }, */ + ], + }, + { + path: '/data/alarm', + component: Layout, + redirect: '/data/alarm/list', + name: 'Alarm', + meta: { + title: '报警查询', + icon: 'ep:key', + auth: '/data/alarm', + }, + children: [ + { + path: 'list', + name: 'AlarmList', + component: () => import('@/views/basic/device/list.vue'), + meta: { + title: '报警查询', + auth: '/data/alarm', + sidebar: false, + breadcrumb: true, + activeMenu: '/data/alarm', + }, + }, + { + path: 'detail/:id?', + name: 'DeviceInfoDetail', + component: () => import('@/views/basic/device/detail.vue'), + meta: { + title: '设备详情', + sidebar: false, + breadcrumb: true, + activeMenu: '/basic/device', + }, + }, + ], + }, + { + path: '/data/statis', + component: Layout, + redirect: '/data/statis/overview', + name: 'Statis', + meta: { + title: '统计分析', + icon: 'ep:key', + auth: '/data/statis', + }, + children: [ + { + path: 'overview', + name: 'StatisOverview', + component: () => import('@/views/basic/product/list.vue'), + meta: { + title: '产品管理', + auth: '/data/statis', + sidebar: false, + breadcrumb: true, + activeMenu: '/data/statis', + }, + }, + ], + }, +] + +export default routes diff --git a/src/router/routes.ts b/src/router/routes.ts index 95ff1bb..2c4a1ec 100644 --- a/src/router/routes.ts +++ b/src/router/routes.ts @@ -2,6 +2,7 @@ import generatedRoutes from 'virtual:generated-pages' import systemRoute from './modules/system' import basicRoute from './modules/basic' +import dataRoute from './modules/data' import type { Route } from '@/global' import useSettingsStore from '@/store/modules/settings' @@ -116,6 +117,16 @@ }, { meta: { + title: '数据管理', + icon: '', + auth: '/data', + }, + children: [ + ...dataRoute, + ], + }, + { + meta: { title: '系统设置', icon: '', auth: '/system', diff --git a/src/views/basic/device/addDeviceDialog.vue b/src/views/basic/device/addDeviceDialog.vue index 018f123..9b130e0 100644 --- a/src/views/basic/device/addDeviceDialog.vue +++ b/src/views/basic/device/addDeviceDialog.vue @@ -1,8 +1,10 @@ + + diff --git a/src/views/basic/product/group-info.ts b/src/views/basic/product/group-info.ts new file mode 100644 index 0000000..00bbef6 --- /dev/null +++ b/src/views/basic/product/group-info.ts @@ -0,0 +1,23 @@ +// 列表查询参数接口 +export interface IListQuery { + ids?: [] // id列表 导出用 + groupNo?: string + groupName: string // 分组名 + beginTime: string // 创建时间-开始 + endTime: string // 创建时间-结束 + offset: number + limit: number + sort?: string + order?: string +} + +export interface IGroupInfo { + id: string // id + groupNo?: string // 分组编号 + groupName: string // 分组名称 + deptid: string // 所属组织 + deptName: string // 所属组织名称 + descn: string // 分组描述 + createUserId: string + createTime?: string +} diff --git a/src/views/basic/product/list.vue b/src/views/basic/product/list.vue new file mode 100644 index 0000000..4b0fceb --- /dev/null +++ b/src/views/basic/product/list.vue @@ -0,0 +1,214 @@ + + + + diff --git a/src/views/data/query/data-query.ts b/src/views/data/query/data-query.ts new file mode 100644 index 0000000..576871e --- /dev/null +++ b/src/views/data/query/data-query.ts @@ -0,0 +1,36 @@ +// 列表查询参数接口 +export interface IListQuery { + groupId: string // 分组 + devcode: string + deviceType: string + beginTime?: string // 电量 + endTime?: string // + offset?: number + limit?: number + sort?: string + order?: string +} + +export interface IDeviceInfo { + id: string + groupId: string + devcode: string + deviceName?: string + deviceType: string + deviceTypeName?: string + status?: string + statusName?: string + cell?: string + imei: string + iccid: string + model: string + modelName?: string + productId: string + productName?: string + encipherType: string + encipherTypeName?: string + createTime: string + createUserId: string + createUserName?: string + dataValue?: string +} diff --git a/src/views/data/query/list.vue b/src/views/data/query/list.vue new file mode 100644 index 0000000..d15d867 --- /dev/null +++ b/src/views/data/query/list.vue @@ -0,0 +1,300 @@ + + + + diff --git a/src/views/data/query/listEmbedded.vue b/src/views/data/query/listEmbedded.vue new file mode 100644 index 0000000..cf4710e --- /dev/null +++ b/src/views/data/query/listEmbedded.vue @@ -0,0 +1,296 @@ + + + +