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>
... ...