From b0148bcac690556507ef4f03eba7740b6b2d6b4a Mon Sep 17 00:00:00 2001 From: easy <1358086367@qq.com> Date: Mon, 30 Jan 2023 17:05:27 +0800 Subject: [PATCH 1/4] =?UTF-8?q?update:=20=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/system/menu.ts | 4 + src/router/menu.ts | 8 + src/utils/comm.ts | 27 -- .../components/dialogs/DeviceChooseDialog.vue | 6 +- src/views/system/Menu/Detail/BasicInfo.vue | 283 ++++++++++++++++++ src/views/system/Menu/Detail/ButtonMange.vue | 18 ++ src/views/system/Menu/Detail/index.vue | 25 ++ src/views/system/Menu/index.d.ts | 0 src/views/system/Menu/index.vue | 247 +++++++++++++++ 9 files changed, 589 insertions(+), 29 deletions(-) create mode 100644 src/api/system/menu.ts create mode 100644 src/views/system/Menu/Detail/BasicInfo.vue create mode 100644 src/views/system/Menu/Detail/ButtonMange.vue create mode 100644 src/views/system/Menu/Detail/index.vue create mode 100644 src/views/system/Menu/index.d.ts create mode 100644 src/views/system/Menu/index.vue diff --git a/src/api/system/menu.ts b/src/api/system/menu.ts new file mode 100644 index 00000000..6b584c4b --- /dev/null +++ b/src/api/system/menu.ts @@ -0,0 +1,4 @@ +import server from '@/utils/request'; + +// 获取当前用户可访问菜单 +export const getMenuTree_api = (data: object) => server.post(`/menu/_all/tree`, data); \ No newline at end of file diff --git a/src/router/menu.ts b/src/router/menu.ts index 2e92daff..20a8ca67 100644 --- a/src/router/menu.ts +++ b/src/router/menu.ts @@ -113,6 +113,14 @@ export default [ path:'/system/Permission', component: ()=>import('@/views/system/Permission/index.vue') }, + { + path:'/system/Menu', + component: ()=>import('@/views/system/Menu/index.vue') + }, + { + path:'/system/Menu/detail/:id', + component: ()=>import('@/views/system/Menu/Detail/index.vue') + }, // 初始化 { path: '/init-home', diff --git a/src/utils/comm.ts b/src/utils/comm.ts index 3c032a79..b5a12816 100644 --- a/src/utils/comm.ts +++ b/src/utils/comm.ts @@ -57,30 +57,3 @@ export const filterTreeSelectNode = (value: string, treeNode: any, key: string = export const filterSelectNode = (value: string, option: any, key: string = 'label'): boolean => { return option[key]?.includes(value) } - -/** - * 时间转换为'2022-01-02 14:03:05' - * @param date 时间对象 - * @returns - */ -export const dateFormat = (dateSouce:any):string|Error => { - let date = null - try { - date = new Date(dateSouce) - } catch (error) { - return new Error('请传入日期格式数据') - } - let year = date.getFullYear(); - let month: number | string = date.getMonth() + 1; - let day: number | string = date.getDate(); - let hour: number | string = date.getHours(); - let minutes: number | string = date.getMinutes(); - let seconds: number | string = date.getSeconds(); - month = (month < 10) ? '0' + month : month; - day = (day < 10) ? '0' + day : day; - hour = (hour < 10) ? '0' + hour : hour; - minutes = (minutes < 10) ? '0' + minutes : minutes; - seconds = (seconds < 10) ? '0' + seconds : seconds; - return year + "-" + month + "-" + day - + " " + hour + ":" + minutes + ":" + seconds; -} diff --git a/src/views/home/components/dialogs/DeviceChooseDialog.vue b/src/views/home/components/dialogs/DeviceChooseDialog.vue index 18a03947..ecb16650 100644 --- a/src/views/home/components/dialogs/DeviceChooseDialog.vue +++ b/src/views/home/components/dialogs/DeviceChooseDialog.vue @@ -22,7 +22,9 @@ }" > - {{ dateFormat(slotProps.modifyTime) }} + {{ + moment(slotProps.modifyTime).format('HHHH-MM-DD HH:mm:ss') + }} + + + 基本信息 + + + + + + + + 点击修改 + + + + + + 点击选择图标 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 权限配置 + + + + + 不支持 + 支持 + 间接控制 + + + + + {{ item.label }} + + + + + + + {{ val }} + {{ title }} + + + + + + + + + + 保存 + + + + + + + diff --git a/src/views/system/Menu/Detail/ButtonMange.vue b/src/views/system/Menu/Detail/ButtonMange.vue new file mode 100644 index 00000000..6c55ec8d --- /dev/null +++ b/src/views/system/Menu/Detail/ButtonMange.vue @@ -0,0 +1,18 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/views/system/Menu/Detail/index.vue b/src/views/system/Menu/Detail/index.vue new file mode 100644 index 00000000..08de6fd6 --- /dev/null +++ b/src/views/system/Menu/Detail/index.vue @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + diff --git a/src/views/system/Menu/index.d.ts b/src/views/system/Menu/index.d.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/views/system/Menu/index.vue b/src/views/system/Menu/index.vue new file mode 100644 index 00000000..7ff407f3 --- /dev/null +++ b/src/views/system/Menu/index.vue @@ -0,0 +1,247 @@ + + + + + + + 新增 + 菜单实例 + + + {{ slotProps.createTime }} + + + + + 查看 + + + + + + 新增子菜单 + + + + + + + + 删除 + + + + + + + + + + + + + + From 0c9de15e9a9ef5583a2f42a8fb6caf16146c92a4 Mon Sep 17 00:00:00 2001 From: easy <1358086367@qq.com> Date: Mon, 30 Jan 2023 18:11:05 +0800 Subject: [PATCH 2/4] =?UTF-8?q?update:=20=E8=8F=9C=E5=8D=95=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/system/menu.ts | 7 +++ src/views/system/Menu/Detail/BasicInfo.vue | 68 +++++++++++++++++++--- 2 files changed, 66 insertions(+), 9 deletions(-) diff --git a/src/api/system/menu.ts b/src/api/system/menu.ts index 7c310033..554b2502 100644 --- a/src/api/system/menu.ts +++ b/src/api/system/menu.ts @@ -4,3 +4,10 @@ import server from '@/utils/request'; export const getMenuTree_api = (data: object) => server.post(`/menu/_all/tree`, data); export const queryOwnThree = (data: any) => server.post('/menu/user-own/tree', data) + + + +// 获取资产类型 +export const getAssetsType_api = () => server.get(`/asset/types`); +// 获取菜单详情 +export const getMenuDetail_api = (id:string) => server.get(`/menu/${id}`); diff --git a/src/views/system/Menu/Detail/BasicInfo.vue b/src/views/system/Menu/Detail/BasicInfo.vue index 37cec9cb..18b62db3 100644 --- a/src/views/system/Menu/Detail/BasicInfo.vue +++ b/src/views/system/Menu/Detail/BasicInfo.vue @@ -98,21 +98,37 @@ 权限配置 - - + + + 数据权限控制 + + + + 不支持 支持 - 间接控制 + + 间接控制 + + + + @@ -171,19 +189,29 @@ \ No newline at end of file diff --git a/src/views/device/Instance/Detail/Info/components/Relation/index.vue b/src/views/device/Instance/Detail/Info/components/Relation/index.vue new file mode 100644 index 00000000..2fa91436 --- /dev/null +++ b/src/views/device/Instance/Detail/Info/components/Relation/index.vue @@ -0,0 +1,23 @@ + + + + + 关系信息 + 编辑 + + {{ item?.related ? (item?.related || []).map(i => i.name).join(',') : '' }} + + + + + diff --git a/src/views/device/Instance/Detail/Info/components/Tags/index.vue b/src/views/device/Instance/Detail/Info/components/Tags/index.vue new file mode 100644 index 00000000..b672f699 --- /dev/null +++ b/src/views/device/Instance/Detail/Info/components/Tags/index.vue @@ -0,0 +1,3 @@ + + tags + \ No newline at end of file diff --git a/src/views/device/Instance/Detail/Info/index.vue b/src/views/device/Instance/Detail/Info/index.vue new file mode 100644 index 00000000..2a6a58ee --- /dev/null +++ b/src/views/device/Instance/Detail/Info/index.vue @@ -0,0 +1,45 @@ + + + + + 设备信息 + 编辑 + + {{ instanceStore.current.id }} + {{ instanceStore.current.productName }} + {{ instanceStore.current.classifiedName }} + {{ instanceStore.current.deviceType?.text }} + {{ instanceStore.current.firmwareInfo?.version }} + {{ instanceStore.current.protocolName }} + {{ instanceStore.current.transport }} + {{ instanceStore.current.createTime ? moment(instanceStore.current.createTime).format('YYYY-MM-DD HH:mm:ss') : '' }} + {{ instanceStore.current.registerTime ? moment(instanceStore.current.registerTime).format('YYYY-MM-DD HH:mm:ss') : ''}} + {{ instanceStore.current.onlineTime ? moment(instanceStore.current.onlineTime).format('YYYY-MM-DD HH:mm:ss') : '' }} + {{ instanceStore.current.parentId }} + {{ instanceStore.current.description }} + + + + + + + + + \ No newline at end of file diff --git a/src/views/device/Instance/Detail/index.vue b/src/views/device/Instance/Detail/index.vue new file mode 100644 index 00000000..b4c055b5 --- /dev/null +++ b/src/views/device/Instance/Detail/index.vue @@ -0,0 +1,49 @@ + + + {{instanceStore.current.name}} + + + + + \ No newline at end of file diff --git a/src/views/device/Instance/Save/index.vue b/src/views/device/Instance/Save/index.vue index 1301e493..63fc7398 100644 --- a/src/views/device/Instance/Save/index.vue +++ b/src/views/device/Instance/Save/index.vue @@ -1,29 +1,83 @@ - + - + - - + + - - + + + + ID + + + + + + - - + + - - - + + + 所属产品 + + + + + + + - - + + @@ -31,41 +85,130 @@ \ No newline at end of file diff --git a/src/views/device/Instance/index.vue b/src/views/device/Instance/index.vue index 2e1d2544..63df2df5 100644 --- a/src/views/device/Instance/index.vue +++ b/src/views/device/Instance/index.vue @@ -151,7 +151,7 @@ - + \ No newline at end of file From ac62778a2fdaea68fb896feaebc7d2eeb42d30bd Mon Sep 17 00:00:00 2001 From: blp <2962632571@qq.com> Date: Mon, 30 Jan 2023 18:12:42 +0800 Subject: [PATCH 4/4] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E7=89=A9?= =?UTF-8?q?=E8=81=94=E5=8D=A1=E5=88=97=E8=A1=A8=E5=8D=A1=E7=89=87=E3=80=81?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E3=80=81=E5=AF=BC=E5=85=A5=E3=80=81=E7=BB=91?= =?UTF-8?q?=E5=AE=9A=E8=AE=BE=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/images/iot-card/iot-card-bg.png | Bin 0 -> 3944 bytes src/api/iot-card/cardManagement.ts | 35 ++- src/components/CardBox/index.vue | 11 + src/utils/utils.ts | 11 + .../iot-card/CardManagement/BindDevice.vue | 155 +++++++++++++ src/views/iot-card/CardManagement/Export.vue | 65 ++++++ src/views/iot-card/CardManagement/Import.vue | 157 +++++++++++++ src/views/iot-card/CardManagement/index.vue | 210 +++++++++++++++++- src/views/iot-card/CardManagement/typing.d.ts | 20 ++ 9 files changed, 657 insertions(+), 7 deletions(-) create mode 100644 public/images/iot-card/iot-card-bg.png create mode 100644 src/views/iot-card/CardManagement/BindDevice.vue create mode 100644 src/views/iot-card/CardManagement/Export.vue create mode 100644 src/views/iot-card/CardManagement/Import.vue create mode 100644 src/views/iot-card/CardManagement/typing.d.ts diff --git a/public/images/iot-card/iot-card-bg.png b/public/images/iot-card/iot-card-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..7b47b0e0df202175dc94d5e5ff6b474c33695141 GIT binary patch literal 3944 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 server.get(`/network/card/state/_sync`); * 批量删除物联卡 * @param data */ -export const removeCards = (data: any) => server.post(`/network/card/batch/_delete`, data); \ No newline at end of file +export const removeCards = (data: any) => server.post(`/network/card/batch/_delete`, data); + +/** + * 解绑设备 + * @param cardId + */ +export const unbind = (cardId: string) => server.get(`/network/card/${cardId}/_unbind`); + +/** + * 分页查询未绑定设备列表 + * @param data +*/ +export const queryUnbounded = (data: any) => server.post(`/network/card/unbounded/device/_query`, data); + +/** + * 绑定设备 + * @param cardId + * @param deviceId 选择的设备id + */ +export const bind = (cardId: string | any, deviceId: string) => server.get(`/network/card/${cardId}/${deviceId}/_bind`); + +/** + * 导入物联卡实例 + * @param configId 对接平台id + * @param params + */ +export const _import = (configId: any, params: any) => server.get(`/network/card/${configId}/_import`, params); + +/** + * 根据id批量导出 + * @param format 类型 xlsx、csv + * @param params + */ +export const _export = (format: string, data: any) => server.post(`/network/card/download.${format}/_query`, data, 'blob'); \ No newline at end of file diff --git a/src/components/CardBox/index.vue b/src/components/CardBox/index.vue index b3449223..cb958ce7 100644 --- a/src/components/CardBox/index.vue +++ b/src/components/CardBox/index.vue @@ -232,6 +232,17 @@ const handleClick = () => { :deep(.card-item-content-title) { cursor: pointer; } + + :deep(.card-item-heard-name) { + font-weight: 700; + font-size: 16px; + margin-bottom: 12px; + } + + :deep(.card-item-content-text) { + color: rgba(0, 0, 0, 0.75); + font-size: 12px; + } } .card-mask { diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 239ee90f..d9d3e290 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -54,6 +54,17 @@ export const downloadObject = (record: Record, fileName: string, fo formElement.submit(); document.body.removeChild(formElement); }; + +export const downloadFileByUrl = (url: string, name: string, type: string) => { + const downNode = document.createElement('a'); + downNode.style.display = 'none'; + downNode.download = `${name}.${type}`; + downNode.href = url; + document.body.appendChild(downNode); + downNode.click(); + document.body.removeChild(downNode); +}; + // 是否不是community版本 export const isNoCommunity = !(localStorage.getItem(SystemConst.VERSION_CODE) === 'community'); diff --git a/src/views/iot-card/CardManagement/BindDevice.vue b/src/views/iot-card/CardManagement/BindDevice.vue new file mode 100644 index 00000000..cdf48031 --- /dev/null +++ b/src/views/iot-card/CardManagement/BindDevice.vue @@ -0,0 +1,155 @@ + + + + + + + + {{ + slotProps.registryTime + ? moment(slotProps.registryTime).format( + 'YYYY-MM-DD HH:mm:ss', + ) + : '' + }} + + + + + + + + + + + + diff --git a/src/views/iot-card/CardManagement/Export.vue b/src/views/iot-card/CardManagement/Export.vue new file mode 100644 index 00000000..5f20c55f --- /dev/null +++ b/src/views/iot-card/CardManagement/Export.vue @@ -0,0 +1,65 @@ + + + + + + 文件格式: + + xlsx + csv + + + + + + + + + diff --git a/src/views/iot-card/CardManagement/Import.vue b/src/views/iot-card/CardManagement/Import.vue new file mode 100644 index 00000000..0ca75bca --- /dev/null +++ b/src/views/iot-card/CardManagement/Import.vue @@ -0,0 +1,157 @@ + + + + + + + + + + + + + xlsx + csv + + + + + + + + + + 文件上传 + + + + + + + .xlsx + + + .csv + + + + + 已完成 总数量 + {{ totalCount }} + + + + 失败 总数量 + {{ errCount }} + + + + + + + + + diff --git a/src/views/iot-card/CardManagement/index.vue b/src/views/iot-card/CardManagement/index.vue index 6ab563d4..3cf85c36 100644 --- a/src/views/iot-card/CardManagement/index.vue +++ b/src/views/iot-card/CardManagement/index.vue @@ -103,6 +103,113 @@ + + + + + + + + + + {{ slotProps.id }} + + + + + 平台对接 + + {{ slotProps.platformConfigName }} + + + 类型 + {{ slotProps.cardType.text }} + + + 提醒 + + + + + + + {{ slotProps.totalFlow }} + + M 使用流量 + + + + {{ slotProps.totalFlow - slotProps.usedFlow }} % + + 总共 {{ slotProps.totalFlow }} M + + + + + + + + + + + + + {{ item.text }} + + + + + + + + + {{ item.text }} + + + + + + + + + {{ slotProps.deviceName }} + {{ @@ -157,7 +264,7 @@ @@ -186,6 +293,20 @@ + + + + + + @@ -204,16 +325,25 @@ import { resumptionBatch, sync, removeCards, + unbind, } from '@/api/iot-card/cardManagement'; import { message } from 'ant-design-vue'; +import type { CardManagement } from './typing'; +import { getImage } from '@/utils/comm'; +import BindDevice from './BindDevice.vue'; +import Import from './Import.vue'; +import Export from './Export.vue'; const cardManageRef = ref>({}); const params = ref>({}); const _selectedRowKeys = ref([]); const _selectedRow = ref([]); +const bindDeviceVisible = ref(false); const visible = ref(false); const exportVisible = ref(false); const importVisible = ref(false); +const cardId = ref(); +const current = ref>({}); const columns = [ { @@ -239,9 +369,10 @@ const columns = [ }, { title: '绑定设备', - dataIndex: 'deviceName', - key: 'deviceName', + dataIndex: 'deviceId', + key: 'deviceId', ellipsis: true, + scopedSlots: true, width: 200, }, { @@ -360,7 +491,10 @@ const columns = [ }, ]; -const getActions = (data: Partial>): ActionsType[] => { +const getActions = ( + data: Partial>, + type: 'card' | 'table', +): ActionsType[] => { if (!data) return []; return [ { @@ -386,6 +520,25 @@ const getActions = (data: Partial>): ActionsType[] => { title: data.deviceId ? '解绑设备' : '绑定设备', }, icon: data.deviceId ? 'DisconnectOutlined' : 'LinkOutlined', + popConfirm: data.deviceId + ? { + title: '确认解绑设备?', + onConfirm: async () => { + unbind(data.id).then((resp: any) => { + if (resp.status === 200) { + message.success('操作成功'); + cardManageRef.value?.reload(); + } + }); + }, + } + : undefined, + onClick: () => { + if (!data.deviceId) { + bindDeviceVisible.value = true; + cardId.value = data.id; + } + }, }, { key: 'activation', @@ -479,11 +632,38 @@ const cancelSelect = () => { _selectedRowKeys.value = []; }; +const handleClick = (dt: any) => { + if (_selectedRowKeys.value.includes(dt.id)) { + const _index = _selectedRowKeys.value.findIndex((i) => i === dt.id); + _selectedRowKeys.value.splice(_index, 1); + } else { + _selectedRowKeys.value = [..._selectedRowKeys.value, dt.id]; + } +}; + +/** + * 查看 + */ +const handleView = (id: string) => { + message.warn(id + '暂未开发'); +}; + /** * 新增 */ const handleAdd = () => {}; +/** + * 绑定设备关闭窗口 + */ +const bindDevice = (val: boolean) => { + bindDeviceVisible.value = false; + cardId.value = ''; + if (val) { + cardManageRef.value?.reload(); + } +}; + /** * 批量激活 */ @@ -565,7 +745,25 @@ const handelRemove = async () => { diff --git a/src/views/iot-card/CardManagement/typing.d.ts b/src/views/iot-card/CardManagement/typing.d.ts new file mode 100644 index 00000000..b661a226 --- /dev/null +++ b/src/views/iot-card/CardManagement/typing.d.ts @@ -0,0 +1,20 @@ +export type CardManagement = { + id: string; + name: string; + iccId: string; + deviceId: string; + deviceName: string; + platformConfigId: string; + operatorName: string; + cardType: any; + totalFlow: number; + usedFlow: number; + residualFlow: number; + activationDate: string; + updateTime: string; + cardStateType: any; + cardState: any; + describe: string; + platformConfigName: string; + operatorPlatformType: any; +};
点击选择图标