Commit d6eeaed7182d5e82c4817741fe3a8cb87899dbe0

Authored by ww
1 parent 936d0983

feat: 设备列表新增事件管理面板

1 -<template>  
2 - <BasicDrawer  
3 - v-bind="$attrs"  
4 - isDetail  
5 - @register="register"  
6 - destroyOnClose  
7 - @close="closeDrawer"  
8 - :title="deviceDetail.alias || deviceDetail.name"  
9 - width="80%"  
10 - >  
11 - <Tabs v-model:activeKey="activeKey" :size="size">  
12 - <TabPane key="1" tab="详情">  
13 - <Detail  
14 - ref="deviceDetailRef"  
15 - :deviceDetail="deviceDetail"  
16 - @open-gateway-device="handleOpenGatewayDevice"  
17 - />  
18 - </TabPane>  
19 - <TabPane key="modelOfMatter" tab="物模型数据">  
20 - <ModelOfMatter :deviceDetail="deviceDetail" />  
21 - </TabPane>  
22 - <!-- <TabPane key="2" tab="实时数据" v-if="deviceDetail?.deviceType !== 'GATEWAY'">  
23 - <RealTimeData :deviceDetail="deviceDetail" />  
24 - </TabPane>  
25 - <TabPane key="7" tab="历史数据" v-if="deviceDetail?.deviceType !== 'GATEWAY'">  
26 - <HistoryData :deviceDetail="deviceDetail" />  
27 - </TabPane> -->  
28 - <TabPane key="5" tab="命令下发" v-if="deviceDetail?.deviceType !== 'SENSOR'">  
29 - <CommandIssuance :deviceDetail="deviceDetail" />  
30 - </TabPane>  
31 - <TabPane key="3" tab="告警"><Alarm :id="deviceDetail.id" /></TabPane>  
32 - <TabPane key="4" tab="子设备" v-if="deviceDetail?.deviceType === 'GATEWAY'">  
33 - <ChildDevice  
34 - :fromId="deviceDetail?.tbDeviceId"  
35 - @openTbDeviceDetail="handleOpenTbDeviceDetail"  
36 - />  
37 - </TabPane>  
38 - <TabPane key="7" tab="命令下发记录">  
39 - <CommandRecord :fromId="deviceDetail?.tbDeviceId" />  
40 - </TabPane>  
41 - <!-- 网关设备并且场家是TBox -->  
42 - <TabPane  
43 - key="6"  
44 - tab="TBox"  
45 - v-if="deviceDetail?.deviceType === 'GATEWAY' && deviceDetail?.brand == 'TBox'"  
46 - >  
47 - <TBoxDetail :deviceDetail="deviceDetail" />  
48 - </TabPane>  
49 - <!-- 网关设备并且是TBox -->  
50 - </Tabs>  
51 - </BasicDrawer>  
52 -</template>  
53 -<script lang="ts">  
54 - import { defineComponent, ref } from 'vue';  
55 - import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';  
56 -  
57 - import { Tabs } from 'ant-design-vue';  
58 - import Detail from '../tabs/Detail.vue';  
59 - // import RealTimeData from '../tabs/RealTimeData.vue';  
60 - import Alarm from '../tabs/Alarm.vue';  
61 - import ChildDevice from '../tabs/ChildDevice.vue';  
62 - import TBoxDetail from '../tabs/TBoxDetail.vue';  
63 - import CommandIssuance from '../tabs/CommandIssuance.vue';  
64 - import { CommandRecord } from '../tabs/commandRecord/index';  
65 - import { getDeviceDetail } from '/@/api/device/deviceManager';  
66 - // import HistoryData from '../tabs/HistoryData.vue';  
67 - import ModelOfMatter from '../tabs/ModelOfMatter.vue';  
68 - export default defineComponent({  
69 - name: 'DeviceModal',  
70 - components: {  
71 - BasicDrawer,  
72 - Tabs,  
73 - TabPane: Tabs.TabPane,  
74 - Detail,  
75 - // RealTimeData,  
76 - Alarm,  
77 - ChildDevice,  
78 - CommandIssuance,  
79 - TBoxDetail,  
80 - // HistoryData,  
81 - ModelOfMatter,  
82 - CommandRecord,  
83 - },  
84 - emits: ['reload', 'register', 'openTbDeviceDetail', 'openGatewayDeviceDetail'],  
85 - setup(_props, { emit }) {  
86 - const activeKey = ref('1');  
87 - const size = ref('small');  
88 - const deviceDetailRef = ref();  
89 - const deviceDetail = ref<any>({});  
90 - const tbDeviceId = ref('');  
91 - // 详情回显  
92 - const [register] = useDrawerInner(async (data) => {  
93 - const { id } = data;  
94 - // 设备详情  
95 - const res = await getDeviceDetail(id);  
96 - deviceDetail.value = res;  
97 - const { latitude, longitude, address } = res.deviceInfo;  
98 - if (latitude) {  
99 - deviceDetailRef.value.initMap(longitude, latitude, address);  
100 - }  
101 - });  
102 - const closeDrawer = () => {  
103 - activeKey.value = '1';  
104 - };  
105 -  
106 - const handleOpenTbDeviceDetail = (data: { id: string; tbDeviceId: string }) => {  
107 - emit('openTbDeviceDetail', data);  
108 - };  
109 -  
110 - const handleOpenGatewayDevice = (data: { gatewayId: string; tbDeviceId: string }) => {  
111 - emit('openGatewayDeviceDetail', { id: data.gatewayId });  
112 - };  
113 -  
114 - return {  
115 - size,  
116 - activeKey,  
117 - register,  
118 - closeDrawer,  
119 - deviceDetail,  
120 - deviceDetailRef,  
121 - tbDeviceId,  
122 - handleOpenTbDeviceDetail,  
123 - handleOpenGatewayDevice,  
124 - };  
125 - },  
126 - });  
127 -</script> 1 +<template>
  2 + <BasicDrawer
  3 + v-bind="$attrs"
  4 + isDetail
  5 + @register="register"
  6 + destroyOnClose
  7 + @close="closeDrawer"
  8 + :title="deviceDetail.alias || deviceDetail.name"
  9 + width="80%"
  10 + >
  11 + <Tabs v-model:activeKey="activeKey" :size="size">
  12 + <TabPane key="1" tab="详情">
  13 + <Detail
  14 + ref="deviceDetailRef"
  15 + :deviceDetail="deviceDetail"
  16 + @open-gateway-device="handleOpenGatewayDevice"
  17 + />
  18 + </TabPane>
  19 + <TabPane key="modelOfMatter" tab="物模型数据">
  20 + <ModelOfMatter :deviceDetail="deviceDetail" />
  21 + </TabPane>
  22 + <!-- <TabPane key="2" tab="实时数据" v-if="deviceDetail?.deviceType !== 'GATEWAY'">
  23 + <RealTimeData :deviceDetail="deviceDetail" />
  24 + </TabPane>
  25 + <TabPane key="7" tab="历史数据" v-if="deviceDetail?.deviceType !== 'GATEWAY'">
  26 + <HistoryData :deviceDetail="deviceDetail" />
  27 + </TabPane> -->
  28 + <TabPane key="5" tab="命令下发" v-if="deviceDetail?.deviceType !== 'SENSOR'">
  29 + <CommandIssuance :deviceDetail="deviceDetail" />
  30 + </TabPane>
  31 + <TabPane key="3" tab="告警"><Alarm :id="deviceDetail.id" /></TabPane>
  32 + <TabPane key="4" tab="子设备" v-if="deviceDetail?.deviceType === 'GATEWAY'">
  33 + <ChildDevice
  34 + :fromId="deviceDetail?.tbDeviceId"
  35 + @openTbDeviceDetail="handleOpenTbDeviceDetail"
  36 + />
  37 + </TabPane>
  38 + <TabPane key="7" tab="命令下发记录">
  39 + <CommandRecord :fromId="deviceDetail?.tbDeviceId" />
  40 + </TabPane>
  41 + <!-- 网关设备并且场家是TBox -->
  42 + <TabPane
  43 + key="6"
  44 + tab="TBox"
  45 + v-if="deviceDetail?.deviceType === 'GATEWAY' && deviceDetail?.brand == 'TBox'"
  46 + >
  47 + <TBoxDetail :deviceDetail="deviceDetail" />
  48 + </TabPane>
  49 + <!-- 网关设备并且是TBox -->
  50 +
  51 + <TabPane key="eventManage" tab="事件管理">
  52 + <EventManage />
  53 + </TabPane>
  54 + </Tabs>
  55 + </BasicDrawer>
  56 +</template>
  57 +<script lang="ts">
  58 + import { defineComponent, ref } from 'vue';
  59 + import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
  60 +
  61 + import { Tabs } from 'ant-design-vue';
  62 + import Detail from '../tabs/Detail.vue';
  63 + // import RealTimeData from '../tabs/RealTimeData.vue';
  64 + import Alarm from '../tabs/Alarm.vue';
  65 + import ChildDevice from '../tabs/ChildDevice.vue';
  66 + import TBoxDetail from '../tabs/TBoxDetail.vue';
  67 + import CommandIssuance from '../tabs/CommandIssuance.vue';
  68 + import { CommandRecord } from '../tabs/commandRecord/index';
  69 + import { getDeviceDetail } from '/@/api/device/deviceManager';
  70 + // import HistoryData from '../tabs/HistoryData.vue';
  71 + import ModelOfMatter from '../tabs/ModelOfMatter.vue';
  72 + import EventManage from '../tabs/EventManage/index.vue';
  73 +
  74 + export default defineComponent({
  75 + name: 'DeviceModal',
  76 + components: {
  77 + BasicDrawer,
  78 + Tabs,
  79 + TabPane: Tabs.TabPane,
  80 + Detail,
  81 + // RealTimeData,
  82 + Alarm,
  83 + ChildDevice,
  84 + CommandIssuance,
  85 + TBoxDetail,
  86 + // HistoryData,
  87 + ModelOfMatter,
  88 + CommandRecord,
  89 + EventManage,
  90 + },
  91 + emits: ['reload', 'register', 'openTbDeviceDetail', 'openGatewayDeviceDetail'],
  92 + setup(_props, { emit }) {
  93 + const activeKey = ref('1');
  94 + const size = ref('small');
  95 + const deviceDetailRef = ref();
  96 + const deviceDetail = ref<any>({});
  97 + const tbDeviceId = ref('');
  98 + // 详情回显
  99 + const [register] = useDrawerInner(async (data) => {
  100 + const { id } = data;
  101 + // 设备详情
  102 + const res = await getDeviceDetail(id);
  103 + deviceDetail.value = res;
  104 + const { latitude, longitude, address } = res.deviceInfo;
  105 + if (latitude) {
  106 + deviceDetailRef.value.initMap(longitude, latitude, address);
  107 + }
  108 + });
  109 + const closeDrawer = () => {
  110 + activeKey.value = '1';
  111 + };
  112 +
  113 + const handleOpenTbDeviceDetail = (data: { id: string; tbDeviceId: string }) => {
  114 + emit('openTbDeviceDetail', data);
  115 + };
  116 +
  117 + const handleOpenGatewayDevice = (data: { gatewayId: string; tbDeviceId: string }) => {
  118 + emit('openGatewayDeviceDetail', { id: data.gatewayId });
  119 + };
  120 +
  121 + return {
  122 + size,
  123 + activeKey,
  124 + register,
  125 + closeDrawer,
  126 + deviceDetail,
  127 + deviceDetailRef,
  128 + tbDeviceId,
  129 + handleOpenTbDeviceDetail,
  130 + handleOpenGatewayDevice,
  131 + };
  132 + },
  133 + });
  134 +</script>
  1 +import { findDictItemByCode } from '/@/api/system/dict';
  2 +import { BasicColumn, FormSchema } from '/@/components/Table';
  3 +
  4 +export const columnSchema: BasicColumn[] = [
  5 + {
  6 + title: '时间',
  7 + dataIndex: 'time',
  8 + },
  9 + {
  10 + title: '标识符',
  11 + dataIndex: 'identifier',
  12 + helpMessage: ['标识符格式为模块标识符: 功能定义标识符'],
  13 + },
  14 + {
  15 + title: '事件名称',
  16 + dataIndex: 'eventName',
  17 + },
  18 + {
  19 + title: '事件类型',
  20 + dataIndex: 'eventType',
  21 + },
  22 + {
  23 + title: '输出参数',
  24 + dataIndex: 'outputParams',
  25 + },
  26 +];
  27 +
  28 +export const formSchemas: FormSchema[] = [
  29 + {
  30 + field: 'identifier',
  31 + label: '标识符',
  32 + component: 'Input',
  33 + },
  34 + {
  35 + field: 'alarmType',
  36 + label: '告警类型',
  37 + component: 'ApiSelect',
  38 + defaultValue: 'INFO',
  39 + componentProps: {
  40 + placeholder: '请选择事件类型',
  41 + api: findDictItemByCode,
  42 + params: {
  43 + dictCode: 'event_type',
  44 + },
  45 + labelField: 'itemText',
  46 + valueField: 'itemValue',
  47 + },
  48 + },
  49 + {
  50 + field: 'dateRange',
  51 + label: '时间范围',
  52 + component: 'RangePicker',
  53 + colProps: { span: 10 },
  54 + },
  55 +];
  1 +<script lang="ts" setup>
  2 + import { BasicTable, useTable } from '/@/components/Table';
  3 + import { formSchemas, columnSchema } from './config';
  4 + const [register] = useTable({
  5 + columns: columnSchema,
  6 + size: 'small',
  7 + rowKey: 'id',
  8 + showIndexColumn: false,
  9 + useSearchForm: true,
  10 + showTableSetting: true,
  11 + bordered: true,
  12 + formConfig: {
  13 + layout: 'inline',
  14 + baseColProps: { span: 6 },
  15 + labelWidth: 80,
  16 + schemas: formSchemas,
  17 + },
  18 + handleSearchInfoFn: (params: Recordable) => {
  19 + // console.log(params);
  20 + return params;
  21 + },
  22 + });
  23 +</script>
  24 +
  25 +<template>
  26 + <BasicTable @register="register" style="background-color: #f0f2f5" />
  27 +</template>