Commit 92b3279bbe49dfa0a3236f121036fcf28d96a767

Authored by ww
1 parent 40c29078

perf: 调整数据看板socket逻辑, 新增自定义推送socket消息及接受消息逻辑

Showing 40 changed files with 446 additions and 263 deletions
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 - import { ComponentPropsConfigType, DataFetchUpdateFn } from '/@/views/visual/packages/index.type'; 2 + import { ComponentPropsConfigType } from '/@/views/visual/packages/index.type';
3 import { option } from './config'; 3 import { option } from './config';
4 - import { useDataFetch } from '/@/views/visual/packages/hook/useSocket';  
5 import { Spin } from 'ant-design-vue'; 4 import { Spin } from 'ant-design-vue';
6 import { computed, ref } from 'vue'; 5 import { computed, ref } from 'vue';
7 import { useComponentScale } from '../../../hook/useComponentScale'; 6 import { useComponentScale } from '../../../hook/useComponentScale';
8 import { useSendCommand } from '../../../hook/useSendCommand'; 7 import { useSendCommand } from '../../../hook/useSendCommand';
9 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 8 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
  9 + import { DataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
  10 + import { useDataFetch } from '../../../hook/socket/useSocket';
10 11
11 const props = defineProps<{ 12 const props = defineProps<{
12 config: ComponentPropsConfigType<typeof option>; 13 config: ComponentPropsConfigType<typeof option>;
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 - import { ComponentPropsConfigType, DataFetchUpdateFn } from '/@/views/visual/packages/index.type'; 2 + import { ComponentPropsConfigType } from '/@/views/visual/packages/index.type';
3 import { option } from './config'; 3 import { option } from './config';
4 - import { useDataFetch } from '/@/views/visual/packages/hook/useSocket';  
5 import { SvgIcon } from '/@/components/Icon'; 4 import { SvgIcon } from '/@/components/Icon';
6 import { Switch } from 'ant-design-vue'; 5 import { Switch } from 'ant-design-vue';
7 import { computed, ref } from 'vue'; 6 import { computed, ref } from 'vue';
@@ -9,6 +8,8 @@ @@ -9,6 +8,8 @@
9 import { useSendCommand } from '../../../hook/useSendCommand'; 8 import { useSendCommand } from '../../../hook/useSendCommand';
10 import { unref } from 'vue'; 9 import { unref } from 'vue';
11 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 10 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
  11 + import { DataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
  12 + import { useDataFetch } from '../../../hook/socket/useSocket';
12 13
13 const props = defineProps<{ 14 const props = defineProps<{
14 config: ComponentPropsConfigType<typeof option>; 15 config: ComponentPropsConfigType<typeof option>;
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 - import { ComponentPropsConfigType, DataFetchUpdateFn } from '/@/views/visual/packages/index.type'; 2 + import { ComponentPropsConfigType } from '/@/views/visual/packages/index.type';
3 import { option } from './config'; 3 import { option } from './config';
4 - import { useDataFetch } from '/@/views/visual/packages/hook/useSocket';  
5 import { Spin } from 'ant-design-vue'; 4 import { Spin } from 'ant-design-vue';
6 import { computed, ref } from 'vue'; 5 import { computed, ref } from 'vue';
7 import { useComponentScale } from '../../../hook/useComponentScale'; 6 import { useComponentScale } from '../../../hook/useComponentScale';
8 import { useSendCommand } from '../../../hook/useSendCommand'; 7 import { useSendCommand } from '../../../hook/useSendCommand';
9 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 8 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
  9 + import { DataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
  10 + import { useDataFetch } from '../../../hook/socket/useSocket';
10 11
11 const props = defineProps<{ 12 const props = defineProps<{
12 config: ComponentPropsConfigType<typeof option>; 13 config: ComponentPropsConfigType<typeof option>;
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 - import { ComponentPropsConfigType, DataFetchUpdateFn } from '/@/views/visual/packages/index.type'; 2 + import { ComponentPropsConfigType } from '/@/views/visual/packages/index.type';
3 import { option } from './config'; 3 import { option } from './config';
4 - import { useDataFetch } from '/@/views/visual/packages/hook/useSocket';  
5 import { Slider, Spin } from 'ant-design-vue'; 4 import { Slider, Spin } from 'ant-design-vue';
6 import { computed, ref, unref } from 'vue'; 5 import { computed, ref, unref } from 'vue';
7 import { useComponentScale } from '../../../hook/useComponentScale'; 6 import { useComponentScale } from '../../../hook/useComponentScale';
8 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 7 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
9 import { useSendCommand } from '../../../hook/useSendCommand'; 8 import { useSendCommand } from '../../../hook/useSendCommand';
10 import { useReceiveValue } from '../../../hook/useReceiveValue'; 9 import { useReceiveValue } from '../../../hook/useReceiveValue';
  10 + import { DataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
  11 + import { useDataFetch } from '../../../hook/socket/useSocket';
11 12
12 const props = defineProps<{ 13 const props = defineProps<{
13 config: ComponentPropsConfigType<typeof option>; 14 config: ComponentPropsConfigType<typeof option>;
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 - import {  
3 - ComponentPropsConfigType,  
4 - MultipleDataFetchUpdateFn,  
5 - } from '/@/views/visual/packages/index.type'; 2 + import { ComponentPropsConfigType } from '/@/views/visual/packages/index.type';
6 import { option } from './config'; 3 import { option } from './config';
7 - import { useMultipleDataFetch } from '/@/views/visual/packages/hook/useSocket';  
8 import { SvgIcon } from '/@/components/Icon'; 4 import { SvgIcon } from '/@/components/Icon';
9 import { Switch } from 'ant-design-vue'; 5 import { Switch } from 'ant-design-vue';
10 import { computed, ref } from 'vue'; 6 import { computed, ref } from 'vue';
@@ -12,6 +8,8 @@ @@ -12,6 +8,8 @@
12 import { useSendCommand } from '../../../hook/useSendCommand'; 8 import { useSendCommand } from '../../../hook/useSendCommand';
13 import { unref } from 'vue'; 9 import { unref } from 'vue';
14 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 10 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
  11 + import { MultipleDataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
  12 + import { useMultipleDataFetch } from '../../../hook/socket/useSocket';
15 13
16 const props = defineProps<{ 14 const props = defineProps<{
17 config: ComponentPropsConfigType<typeof option>; 15 config: ComponentPropsConfigType<typeof option>;
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 - import { ComponentPropsConfigType, DataFetchUpdateFn } from '/@/views/visual/packages/index.type'; 2 + import { ComponentPropsConfigType } from '/@/views/visual/packages/index.type';
3 import { option } from './config'; 3 import { option } from './config';
4 - import { useDataFetch } from '/@/views/visual/packages/hook/useSocket';  
5 import { computed } from 'vue'; 4 import { computed } from 'vue';
6 import { ref } from 'vue'; 5 import { ref } from 'vue';
7 import { unref } from 'vue'; 6 import { unref } from 'vue';
8 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 7 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
9 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime'; 8 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime';
  9 + import { useDataFetch } from '../../../hook/socket/useSocket';
  10 + import { DataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
10 11
11 const props = defineProps<{ 12 const props = defineProps<{
12 config: ComponentPropsConfigType<typeof option>; 13 config: ComponentPropsConfigType<typeof option>;
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 - import { ComponentPropsConfigType, DataFetchUpdateFn } from '/@/views/visual/packages/index.type'; 2 + import { ComponentPropsConfigType } from '/@/views/visual/packages/index.type';
3 import { option } from './config'; 3 import { option } from './config';
4 - import { useDataFetch } from '/@/views/visual/packages/hook/useSocket';  
5 import { computed } from 'vue'; 4 import { computed } from 'vue';
6 import { ref } from 'vue'; 5 import { ref } from 'vue';
7 import { unref } from 'vue'; 6 import { unref } from 'vue';
8 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 7 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
9 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime'; 8 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime';
  9 + import { useDataFetch } from '../../../hook/socket/useSocket';
  10 + import { DataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
10 11
11 const props = defineProps<{ 12 const props = defineProps<{
12 config: ComponentPropsConfigType<typeof option>; 13 config: ComponentPropsConfigType<typeof option>;
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 - import { ComponentPropsConfigType, DataFetchUpdateFn } from '/@/views/visual/packages/index.type'; 2 + import { ComponentPropsConfigType } from '/@/views/visual/packages/index.type';
3 import { option } from './config'; 3 import { option } from './config';
4 - import { useDataFetch } from '/@/views/visual/packages/hook/useSocket';  
5 import { ref } from 'vue'; 4 import { ref } from 'vue';
6 import { computed } from 'vue'; 5 import { computed } from 'vue';
7 import { unref } from 'vue'; 6 import { unref } from 'vue';
8 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 7 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
9 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime'; 8 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime';
  9 + import { useDataFetch } from '../../../hook/socket/useSocket';
  10 + import { DataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
10 11
11 const props = defineProps<{ 12 const props = defineProps<{
12 config: ComponentPropsConfigType<typeof option>; 13 config: ComponentPropsConfigType<typeof option>;
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 - import { ComponentPropsConfigType, DataFetchUpdateFn } from '/@/views/visual/packages/index.type'; 2 + import { ComponentPropsConfigType } from '/@/views/visual/packages/index.type';
3 import { option } from './config'; 3 import { option } from './config';
4 - import { useDataFetch } from '/@/views/visual/packages/hook/useSocket';  
5 import { ref, computed, unref } from 'vue'; 4 import { ref, computed, unref } from 'vue';
6 import { Space } from 'ant-design-vue'; 5 import { Space } from 'ant-design-vue';
7 import { useComponentScale } from '/@/views/visual/packages/hook/useComponentScale'; 6 import { useComponentScale } from '/@/views/visual/packages/hook/useComponentScale';
8 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime'; 7 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime';
9 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 8 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
  9 + import { useDataFetch } from '../../../hook/socket/useSocket';
  10 + import { DataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
10 11
11 const props = defineProps<{ 12 const props = defineProps<{
12 config: ComponentPropsConfigType<typeof option>; 13 config: ComponentPropsConfigType<typeof option>;
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 import { EChartsOption, ECharts, init } from 'echarts'; 2 import { EChartsOption, ECharts, init } from 'echarts';
3 import { unref, ref, onMounted, computed, nextTick } from 'vue'; 3 import { unref, ref, onMounted, computed, nextTick } from 'vue';
4 - import { useDataFetch } from '../../../hook/useSocket';  
5 - import { ComponentPropsConfigType, DataFetchUpdateFn } from '../../../index.type'; 4 + import { ComponentPropsConfigType } from '../../../index.type';
6 import { option } from './config'; 5 import { option } from './config';
7 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime'; 6 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime';
8 import { useIntervalFn } from '@vueuse/core'; 7 import { useIntervalFn } from '@vueuse/core';
9 import { useComponentScale } from '../../../hook/useComponentScale'; 8 import { useComponentScale } from '../../../hook/useComponentScale';
10 import { isArray } from '/@/utils/is'; 9 import { isArray } from '/@/utils/is';
11 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 10 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
  11 + import { useDataFetch } from '../../../hook/socket/useSocket';
  12 + import { DataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
12 13
13 const props = defineProps<{ 14 const props = defineProps<{
14 config: ComponentPropsConfigType<typeof option>; 15 config: ComponentPropsConfigType<typeof option>;
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 import { EChartsOption, ECharts, init } from 'echarts'; 2 import { EChartsOption, ECharts, init } from 'echarts';
3 import { unref, ref, onMounted, computed, nextTick } from 'vue'; 3 import { unref, ref, onMounted, computed, nextTick } from 'vue';
4 - import { useDataFetch } from '../../../hook/useSocket';  
5 - import { ComponentPropsConfigType, DataFetchUpdateFn } from '../../../index.type'; 4 + import { ComponentPropsConfigType } from '../../../index.type';
6 import { option } from './config'; 5 import { option } from './config';
7 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime'; 6 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime';
8 import { useIntervalFn } from '@vueuse/core'; 7 import { useIntervalFn } from '@vueuse/core';
9 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 8 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
10 import { isArray } from '/@/utils/is'; 9 import { isArray } from '/@/utils/is';
11 import { useComponentScale } from '/@/views/visual/packages/hook/useComponentScale'; 10 import { useComponentScale } from '/@/views/visual/packages/hook/useComponentScale';
  11 + import { useDataFetch } from '../../../hook/socket/useSocket';
  12 + import { DataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
12 13
13 const props = defineProps<{ 14 const props = defineProps<{
14 config: ComponentPropsConfigType<typeof option>; 15 config: ComponentPropsConfigType<typeof option>;
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 import { EChartsOption, ECharts, init } from 'echarts'; 2 import { EChartsOption, ECharts, init } from 'echarts';
3 import { unref, ref, onMounted, computed, nextTick } from 'vue'; 3 import { unref, ref, onMounted, computed, nextTick } from 'vue';
4 - import { useMultipleDataFetch } from '../../../hook/useSocket';  
5 - import { ComponentPropsConfigType, MultipleDataFetchUpdateFn } from '../../../index.type'; 4 + import { ComponentPropsConfigType } from '../../../index.type';
6 import { option } from './config'; 5 import { option } from './config';
7 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime'; 6 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime';
8 // import { useIntervalFn } from '@vueuse/core'; 7 // import { useIntervalFn } from '@vueuse/core';
@@ -10,6 +9,7 @@ @@ -10,6 +9,7 @@
10 import { useComponentScale } from '/@/views/visual/packages/hook/useComponentScale'; 9 import { useComponentScale } from '/@/views/visual/packages/hook/useComponentScale';
11 import { useReceiveMessage } from '../../../hook/useReceiveMessage'; 10 import { useReceiveMessage } from '../../../hook/useReceiveMessage';
12 import { useReceiveValue } from '../../../hook/useReceiveValue'; 11 import { useReceiveValue } from '../../../hook/useReceiveValue';
  12 + import { MultipleDataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
13 13
14 const props = defineProps<{ 14 const props = defineProps<{
15 config: ComponentPropsConfigType<typeof option>; 15 config: ComponentPropsConfigType<typeof option>;
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 import { EChartsOption, ECharts, init } from 'echarts'; 2 import { EChartsOption, ECharts, init } from 'echarts';
3 import { unref, ref, onMounted, computed, nextTick } from 'vue'; 3 import { unref, ref, onMounted, computed, nextTick } from 'vue';
4 - import { useDataFetch } from '../../../hook/useSocket';  
5 - import { ComponentPropsConfigType, DataFetchUpdateFn } from '../../../index.type'; 4 + import { ComponentPropsConfigType } from '../../../index.type';
6 import { option } from './config'; 5 import { option } from './config';
7 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime'; 6 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime';
8 import { useIntervalFn } from '@vueuse/core'; 7 import { useIntervalFn } from '@vueuse/core';
9 import { useComponentScale } from '../../../hook/useComponentScale'; 8 import { useComponentScale } from '../../../hook/useComponentScale';
10 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 9 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
  10 + import { useDataFetch } from '../../../hook/socket/useSocket';
  11 + import { DataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
11 12
12 const props = defineProps<{ 13 const props = defineProps<{
13 config: ComponentPropsConfigType<typeof option>; 14 config: ComponentPropsConfigType<typeof option>;
@@ -3,8 +3,7 @@ @@ -3,8 +3,7 @@
3 import { onMounted } from 'vue'; 3 import { onMounted } from 'vue';
4 import { unref } from 'vue'; 4 import { unref } from 'vue';
5 import { ref } from 'vue'; 5 import { ref } from 'vue';
6 - import { useDataFetch } from '../../../hook/useSocket';  
7 - import { ComponentPropsConfigType, DataFetchUpdateFn } from '../../../index.type'; 6 + import { ComponentPropsConfigType } from '../../../index.type';
8 import { option } from './config'; 7 import { option } from './config';
9 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime'; 8 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime';
10 import { useIntervalFn } from '@vueuse/core'; 9 import { useIntervalFn } from '@vueuse/core';
@@ -12,6 +11,8 @@ @@ -12,6 +11,8 @@
12 import { useComponentScale } from '../../../hook/useComponentScale'; 11 import { useComponentScale } from '../../../hook/useComponentScale';
13 import { nextTick } from 'vue'; 12 import { nextTick } from 'vue';
14 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 13 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
  14 + import { useDataFetch } from '../../../hook/socket/useSocket';
  15 + import { DataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
15 16
16 const props = defineProps<{ 17 const props = defineProps<{
17 config: ComponentPropsConfigType<typeof option>; 18 config: ComponentPropsConfigType<typeof option>;
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 - import { ComponentPropsConfigType, DataFetchUpdateFn } from '/@/views/visual/packages/index.type'; 2 + import { ComponentPropsConfigType } from '/@/views/visual/packages/index.type';
3 import { Gradient, GradientColor, option } from './config'; 3 import { Gradient, GradientColor, option } from './config';
4 - import { useDataFetch } from '/@/views/visual/packages/hook/useSocket';  
5 import { ECharts, EChartsOption, init } from 'echarts'; 4 import { ECharts, EChartsOption, init } from 'echarts';
6 import { ref, unref, onMounted, computed } from 'vue'; 5 import { ref, unref, onMounted, computed } from 'vue';
7 import { isArray } from '/@/utils/is'; 6 import { isArray } from '/@/utils/is';
@@ -11,6 +10,8 @@ @@ -11,6 +10,8 @@
11 import { useIntervalFn } from '@vueuse/core'; 10 import { useIntervalFn } from '@vueuse/core';
12 import { nextTick } from 'vue'; 11 import { nextTick } from 'vue';
13 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 12 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
  13 + import { useDataFetch } from '../../../hook/socket/useSocket';
  14 + import { DataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
14 15
15 const props = defineProps<{ 16 const props = defineProps<{
16 config: ComponentPropsConfigType<typeof option>; 17 config: ComponentPropsConfigType<typeof option>;
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 - import {  
3 - ComponentPropsConfigType,  
4 - MultipleDataFetchUpdateFn,  
5 - } from '/@/views/visual/packages/index.type'; 2 + import { ComponentPropsConfigType } from '/@/views/visual/packages/index.type';
6 import { option } from './config'; 3 import { option } from './config';
7 - import { useMultipleDataFetch } from '/@/views/visual/packages/hook/useSocket';  
8 import { useBaiduMapSDK } from '../../../hook/useBaiduMapSDK'; 4 import { useBaiduMapSDK } from '../../../hook/useBaiduMapSDK';
9 import { ref, unref } from 'vue'; 5 import { ref, unref } from 'vue';
10 import { buildUUID } from '/@/utils/uuid'; 6 import { buildUUID } from '/@/utils/uuid';
11 import { Spin } from 'ant-design-vue'; 7 import { Spin } from 'ant-design-vue';
12 import { computed } from 'vue'; 8 import { computed } from 'vue';
13 import { useMapTrackPlayBack } from './useMapTrackPlayback'; 9 import { useMapTrackPlayBack } from './useMapTrackPlayback';
  10 + import { useMultipleDataFetch } from '../../../hook/socket/useSocket';
  11 + import { MultipleDataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
14 12
15 const props = defineProps<{ 13 const props = defineProps<{
16 config: ComponentPropsConfigType<typeof option>; 14 config: ComponentPropsConfigType<typeof option>;
@@ -2,8 +2,9 @@ @@ -2,8 +2,9 @@
2 import { ref } from 'vue'; 2 import { ref } from 'vue';
3 import { Image as AntImage } from 'ant-design-vue'; 3 import { Image as AntImage } from 'ant-design-vue';
4 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime'; 4 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime';
5 - import { useDataFetch } from '../../../hook/useSocket';  
6 - import { ComponentPropsConfigType, DataFetchUpdateFn } from '../../../index.type'; 5 + import { ComponentPropsConfigType } from '../../../index.type';
  6 + import { useDataFetch } from '../../../hook/socket/useSocket';
  7 + import { DataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
7 8
8 const props = defineProps<{ 9 const props = defineProps<{
9 config: ComponentPropsConfigType; 10 config: ComponentPropsConfigType;
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 - import { ComponentPropsConfigType, DataFetchUpdateFn } from '/@/views/visual/packages/index.type'; 2 + import { ComponentPropsConfigType } from '/@/views/visual/packages/index.type';
3 import { option } from './config'; 3 import { option } from './config';
4 import { useComponentScale } from '/@/views/visual/packages/hook/useComponentScale'; 4 import { useComponentScale } from '/@/views/visual/packages/hook/useComponentScale';
5 - import { useDataFetch } from '/@/views/visual/packages/hook/useSocket';  
6 import { computed } from 'vue'; 5 import { computed } from 'vue';
7 import { ref, onMounted, unref } from 'vue'; 6 import { ref, onMounted, unref } from 'vue';
8 import { useIntervalFn } from '@vueuse/core'; 7 import { useIntervalFn } from '@vueuse/core';
9 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 8 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
10 import { useReceiveValue } from '../../../hook/useReceiveValue'; 9 import { useReceiveValue } from '../../../hook/useReceiveValue';
11 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime'; 10 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime';
  11 + import { DataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
  12 + import { useDataFetch } from '../../../hook/socket/useSocket';
12 13
13 const props = defineProps<{ 14 const props = defineProps<{
14 config: ComponentPropsConfigType<typeof option>; 15 config: ComponentPropsConfigType<typeof option>;
@@ -2,8 +2,9 @@ @@ -2,8 +2,9 @@
2 import { ref } from 'vue'; 2 import { ref } from 'vue';
3 import { Image as AntImage } from 'ant-design-vue'; 3 import { Image as AntImage } from 'ant-design-vue';
4 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime'; 4 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime';
5 - import { useDataFetch } from '../../../hook/useSocket';  
6 - import { ComponentPropsConfigType, DataFetchUpdateFn } from '../../../index.type'; 5 + import { ComponentPropsConfigType } from '../../../index.type';
  6 + import { useDataFetch } from '../../../hook/socket/useSocket';
  7 + import { DataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
7 8
8 const props = defineProps<{ 9 const props = defineProps<{
9 config: ComponentPropsConfigType; 10 config: ComponentPropsConfigType;
@@ -16,27 +17,6 @@ @@ -16,27 +17,6 @@
16 17
17 const url = ref<string>(fallback); 18 const url = ref<string>(fallback);
18 19
19 - // const getImagBase64 = ref(fallback);  
20 -  
21 - // const getBase64Image = (url: string) => {  
22 - // let canvas: Nullable<HTMLCanvasElement> = document.createElement('canvas');  
23 - // const ctx = canvas.getContext('2d');  
24 - // let image: Nullable<HTMLImageElement> = new Image();  
25 -  
26 - // image.onload = function () {  
27 - // canvas!.height = image!.height;  
28 - // canvas!.width = image!.width;  
29 - // ctx?.drawImage(image!, 0, 0);  
30 - // const dataUrl = canvas!.toDataURL('image/png');  
31 - // getImagBase64.value = dataUrl;  
32 - // console.log(dataUrl);  
33 - // image = null;  
34 - // canvas = null;  
35 - // };  
36 - // image.setAttribute('crossOrigin', 'Anonymous');  
37 - // image.src = url;  
38 - // };  
39 -  
40 const updateFn: DataFetchUpdateFn = (message, attribute) => { 20 const updateFn: DataFetchUpdateFn = (message, attribute) => {
41 const { data = {} } = message; 21 const { data = {} } = message;
42 const [latest] = data[attribute] || []; 22 const [latest] = data[attribute] || [];
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 import { EChartsOption, SeriesOption, ECharts, init } from 'echarts'; 2 import { EChartsOption, SeriesOption, ECharts, init } from 'echarts';
3 import { unref, ref, onMounted, computed, nextTick } from 'vue'; 3 import { unref, ref, onMounted, computed, nextTick } from 'vue';
4 - import { useMultipleDataFetch } from '../../../hook/useSocket';  
5 - import { ComponentPropsConfigType, MultipleDataFetchUpdateFn } from '../../../index.type'; 4 + import { ComponentPropsConfigType } from '../../../index.type';
6 import { option } from './config'; 5 import { option } from './config';
7 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime'; 6 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime';
8 import { useComponentScale } from '../../../hook/useComponentScale'; 7 import { useComponentScale } from '../../../hook/useComponentScale';
9 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 8 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
10 import { useReceiveMessage } from '../../../hook/useReceiveMessage'; 9 import { useReceiveMessage } from '../../../hook/useReceiveMessage';
11 import { useReceiveValue } from '../../../hook/useReceiveValue'; 10 import { useReceiveValue } from '../../../hook/useReceiveValue';
  11 + import { useMultipleDataFetch } from '../../../hook/socket/useSocket';
  12 + import { MultipleDataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
12 13
13 const props = defineProps<{ 14 const props = defineProps<{
14 config: ComponentPropsConfigType<typeof option>; 15 config: ComponentPropsConfigType<typeof option>;
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 import { EChartsOption, SeriesOption, ECharts, init } from 'echarts'; 2 import { EChartsOption, SeriesOption, ECharts, init } from 'echarts';
3 import { unref, ref, onMounted, computed, nextTick } from 'vue'; 3 import { unref, ref, onMounted, computed, nextTick } from 'vue';
4 - import { useMultipleDataFetch } from '../../../hook/useSocket';  
5 - import { ComponentPropsConfigType, MultipleDataFetchUpdateFn } from '../../../index.type'; 4 + import { ComponentPropsConfigType } from '../../../index.type';
6 import { option } from './config'; 5 import { option } from './config';
7 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime'; 6 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime';
8 import { useComponentScale } from '../../../hook/useComponentScale'; 7 import { useComponentScale } from '../../../hook/useComponentScale';
@@ -10,6 +9,8 @@ @@ -10,6 +9,8 @@
10 import { useReceiveMessage } from '../../../hook/useReceiveMessage'; 9 import { useReceiveMessage } from '../../../hook/useReceiveMessage';
11 import { useReceiveValue } from '../../../hook/useReceiveValue'; 10 import { useReceiveValue } from '../../../hook/useReceiveValue';
12 import { toRaw } from 'vue'; 11 import { toRaw } from 'vue';
  12 + import { useMultipleDataFetch } from '../../../hook/socket/useSocket';
  13 + import { MultipleDataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
13 14
14 const props = defineProps<{ 15 const props = defineProps<{
15 config: ComponentPropsConfigType<typeof option>; 16 config: ComponentPropsConfigType<typeof option>;
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 import { EChartsOption, SeriesOption, ECharts, init } from 'echarts'; 2 import { EChartsOption, SeriesOption, ECharts, init } from 'echarts';
3 import { unref, ref, onMounted, computed, nextTick, toRaw } from 'vue'; 3 import { unref, ref, onMounted, computed, nextTick, toRaw } from 'vue';
4 - import { useMultipleDataFetch } from '../../../hook/useSocket';  
5 - import { ComponentPropsConfigType, MultipleDataFetchUpdateFn } from '../../../index.type'; 4 + import { ComponentPropsConfigType } from '../../../index.type';
6 import { option } from './config'; 5 import { option } from './config';
7 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime'; 6 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime';
8 import { useComponentScale } from '../../../hook/useComponentScale'; 7 import { useComponentScale } from '../../../hook/useComponentScale';
9 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 8 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
  9 + import { useMultipleDataFetch } from '../../../hook/socket/useSocket';
  10 + import { MultipleDataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
10 11
11 const props = defineProps<{ 12 const props = defineProps<{
12 config: ComponentPropsConfigType<typeof option>; 13 config: ComponentPropsConfigType<typeof option>;
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 import { EChartsOption, SeriesOption, ECharts, init } from 'echarts'; 2 import { EChartsOption, SeriesOption, ECharts, init } from 'echarts';
3 import { unref, ref, onMounted, computed, nextTick, toRaw } from 'vue'; 3 import { unref, ref, onMounted, computed, nextTick, toRaw } from 'vue';
4 - import { useMultipleDataFetch } from '../../../hook/useSocket';  
5 - import { ComponentPropsConfigType, MultipleDataFetchUpdateFn } from '../../../index.type'; 4 + import { ComponentPropsConfigType } from '../../../index.type';
6 import { option } from './config'; 5 import { option } from './config';
7 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime'; 6 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime';
8 import { useComponentScale } from '../../../hook/useComponentScale'; 7 import { useComponentScale } from '../../../hook/useComponentScale';
9 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 8 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
  9 + import { useMultipleDataFetch } from '../../../hook/socket/useSocket';
  10 + import { MultipleDataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
10 11
11 const props = defineProps<{ 12 const props = defineProps<{
12 config: ComponentPropsConfigType<typeof option>; 13 config: ComponentPropsConfigType<typeof option>;
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 import { reactive, ref } from 'vue'; 2 import { reactive, ref } from 'vue';
3 - import { useMultipleDataFetch } from '../../../hook/useSocket';  
4 - import { ComponentPropsConfigType, MultipleDataFetchUpdateFn } from '../../../index.type'; 3 + import { ComponentPropsConfigType } from '../../../index.type';
5 import { option } from './config'; 4 import { option } from './config';
6 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 5 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
7 import { BasicTable, useTable, BasicColumn } from '/@/components/Table'; 6 import { BasicTable, useTable, BasicColumn } from '/@/components/Table';
  7 + import { MultipleDataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
  8 + import { useMultipleDataFetch } from '../../../hook/socket/useSocket';
8 9
9 const props = defineProps<{ 10 const props = defineProps<{
10 config: ComponentPropsConfigType<typeof option>; 11 config: ComponentPropsConfigType<typeof option>;
@@ -28,30 +29,12 @@ @@ -28,30 +29,12 @@
28 canResize: true, 29 canResize: true,
29 maxHeight: 144, 30 maxHeight: 144,
30 size: 'small', 31 size: 'small',
31 - // columns: [{ title: '属性', dataIndex: 'attribute', width: 80 }],  
32 columns: realTimeColumn as any, 32 columns: realTimeColumn as any,
33 }); 33 });
34 34
35 - // const getDesign = computed(() => {  
36 - // const { persetOption, option } = props.config;  
37 - // clearInterval;  
38 - // return {};  
39 - // });  
40 -  
41 - // const randomFn = () => {  
42 - // useIntervalFn(() => {  
43 - // const value = (Math.random() * 100).toFixed(0);  
44 - // unref(chartInstance)?.setOption({  
45 - // series: [{ data: [{ value }] }, { data: [{ value }] }],  
46 - // } as EChartsOption);  
47 - // }, 3000);  
48 - // };  
49 -  
50 const updateFn: MultipleDataFetchUpdateFn = () => {}; 35 const updateFn: MultipleDataFetchUpdateFn = () => {};
51 36
52 useMultipleDataFetch(props, updateFn); 37 useMultipleDataFetch(props, updateFn);
53 -  
54 - // const { getRatio } = useComponentScale(props);  
55 </script> 38 </script>
56 39
57 <template> 40 <template>
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 import { EChartsOption, ECharts, init } from 'echarts'; 2 import { EChartsOption, ECharts, init } from 'echarts';
3 import { unref, ref, onMounted, nextTick, toRaw } from 'vue'; 3 import { unref, ref, onMounted, nextTick, toRaw } from 'vue';
4 - import { useMultipleDataFetch } from '../../../hook/useSocket';  
5 - import { ComponentPropsConfigType, MultipleDataFetchUpdateFn } from '../../../index.type'; 4 + import { ComponentPropsConfigType } from '../../../index.type';
6 import { option } from './config'; 5 import { option } from './config';
7 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime'; 6 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime';
8 import { useComponentScale } from '../../../hook/useComponentScale'; 7 import { useComponentScale } from '../../../hook/useComponentScale';
9 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 8 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
10 import { dateFormat } from '/@/utils/common/compUtils'; 9 import { dateFormat } from '/@/utils/common/compUtils';
  10 + import { useMultipleDataFetch } from '../../../hook/socket/useSocket';
  11 + import { MultipleDataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
11 12
12 const props = defineProps<{ 13 const props = defineProps<{
13 config: ComponentPropsConfigType<typeof option>; 14 config: ComponentPropsConfigType<typeof option>;
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 - import { ComponentPropsConfigType, DataFetchUpdateFn } from '/@/views/visual/packages/index.type'; 2 + import { ComponentPropsConfigType } from '/@/views/visual/packages/index.type';
3 import { option } from './config'; 3 import { option } from './config';
4 import { useComponentScale } from '/@/views/visual/packages/hook/useComponentScale'; 4 import { useComponentScale } from '/@/views/visual/packages/hook/useComponentScale';
5 - import { useDataFetch } from '/@/views/visual/packages/hook/useSocket';  
6 import { ref, onMounted, unref } from 'vue'; 5 import { ref, onMounted, unref } from 'vue';
7 import { useIntervalFn } from '@vueuse/core'; 6 import { useIntervalFn } from '@vueuse/core';
8 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 7 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
9 import { useReceiveValue } from '../../../hook/useReceiveValue'; 8 import { useReceiveValue } from '../../../hook/useReceiveValue';
  9 + import { useDataFetch } from '../../../hook/socket/useSocket';
  10 + import { DataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
10 11
11 const props = defineProps<{ 12 const props = defineProps<{
12 config: ComponentPropsConfigType<typeof option>; 13 config: ComponentPropsConfigType<typeof option>;
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 - import { useDataFetch } from '/@/views/visual/packages/hook/useSocket';  
3 - import { ComponentPropsConfigType, DataFetchUpdateFn } from '/@/views/visual/packages/index.type';  
4 - 2 + import { ComponentPropsConfigType } from '/@/views/visual/packages/index.type';
5 import { option } from './config'; 3 import { option } from './config';
6 import { SvgIcon } from '/@/components/Icon'; 4 import { SvgIcon } from '/@/components/Icon';
7 import { computed } from 'vue'; 5 import { computed } from 'vue';
8 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 6 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
  7 + import { useDataFetch } from '../../../hook/socket/useSocket';
  8 + import { DataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
9 9
10 const props = defineProps<{ 10 const props = defineProps<{
11 config: ComponentPropsConfigType<typeof option>; 11 config: ComponentPropsConfigType<typeof option>;
@@ -33,25 +33,6 @@ @@ -33,25 +33,6 @@
33 }; 33 };
34 }); 34 });
35 35
36 - // const svgList = ref<any>([  
37 - // {  
38 - // value: 26.2,  
39 - // name: 'wendu',  
40 - // icon: 'zongfushe',  
41 - // unit: 'kw',  
42 - // iconColor: '#367BFF',  
43 - // fontColor: '#357CFB',  
44 - // },  
45 - // {  
46 - // value: 53.7,  
47 - // name: 'shidu',  
48 - // icon: 'guangzhaoqiangdu',  
49 - // unit: '℃',  
50 - // iconColor: '#FFA000',  
51 - // fontColor: '#FFA000',  
52 - // },  
53 - // ]);  
54 -  
55 const updateFn: DataFetchUpdateFn = () => {}; 36 const updateFn: DataFetchUpdateFn = () => {};
56 37
57 useDataFetch(props, updateFn); 38 useDataFetch(props, updateFn);
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 - import { ComponentPropsConfigType, DataFetchUpdateFn } from '/@/views/visual/packages/index.type'; 2 + import { ComponentPropsConfigType } from '/@/views/visual/packages/index.type';
3 import { option } from './config'; 3 import { option } from './config';
4 import { useComponentScale } from '/@/views/visual/packages/hook/useComponentScale'; 4 import { useComponentScale } from '/@/views/visual/packages/hook/useComponentScale';
5 - import { useDataFetch } from '/@/views/visual/packages/hook/useSocket';  
6 import { computed } from 'vue'; 5 import { computed } from 'vue';
7 import { ref } from 'vue'; 6 import { ref } from 'vue';
8 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 7 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
  8 + import { useDataFetch } from '../../../hook/socket/useSocket';
  9 + import { DataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
9 10
10 const props = defineProps<{ 11 const props = defineProps<{
11 config: ComponentPropsConfigType<typeof option>; 12 config: ComponentPropsConfigType<typeof option>;
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 - import { ComponentPropsConfigType, DataFetchUpdateFn } from '/@/views/visual/packages/index.type'; 2 + import { ComponentPropsConfigType } from '/@/views/visual/packages/index.type';
3 import { option } from './config'; 3 import { option } from './config';
4 import { useComponentScale } from '/@/views/visual/packages/hook/useComponentScale'; 4 import { useComponentScale } from '/@/views/visual/packages/hook/useComponentScale';
5 - import { useDataFetch } from '/@/views/visual/packages/hook/useSocket';  
6 import { computed } from 'vue'; 5 import { computed } from 'vue';
7 import { ref } from 'vue'; 6 import { ref } from 'vue';
8 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime'; 7 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime';
9 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 8 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
  9 + import { useDataFetch } from '../../../hook/socket/useSocket';
  10 + import { DataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
10 11
11 const props = defineProps<{ 12 const props = defineProps<{
12 config: ComponentPropsConfigType<typeof option>; 13 config: ComponentPropsConfigType<typeof option>;
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 - import { ComponentPropsConfigType, DataFetchUpdateFn } from '/@/views/visual/packages/index.type'; 2 + import { ComponentPropsConfigType } from '/@/views/visual/packages/index.type';
3 import { option } from './config'; 3 import { option } from './config';
4 import { useComponentScale } from '/@/views/visual/packages/hook/useComponentScale'; 4 import { useComponentScale } from '/@/views/visual/packages/hook/useComponentScale';
5 - import { useDataFetch } from '/@/views/visual/packages/hook/useSocket';  
6 import { ref } from 'vue'; 5 import { ref } from 'vue';
7 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime'; 6 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime';
8 import { SvgIcon } from '/@/components/Icon'; 7 import { SvgIcon } from '/@/components/Icon';
9 import { computed } from 'vue'; 8 import { computed } from 'vue';
10 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 9 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
  10 + import { useDataFetch } from '../../../hook/socket/useSocket';
  11 + import { DataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
11 12
12 const props = defineProps<{ 13 const props = defineProps<{
13 config: ComponentPropsConfigType<typeof option>; 14 config: ComponentPropsConfigType<typeof option>;
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 - import { ComponentPropsConfigType, DataFetchUpdateFn } from '/@/views/visual/packages/index.type'; 2 + import { ComponentPropsConfigType } from '/@/views/visual/packages/index.type';
3 import { option } from './config'; 3 import { option } from './config';
4 import { useComponentScale } from '/@/views/visual/packages/hook/useComponentScale'; 4 import { useComponentScale } from '/@/views/visual/packages/hook/useComponentScale';
5 - import { useDataFetch } from '/@/views/visual/packages/hook/useSocket';  
6 import { computed } from 'vue'; 5 import { computed } from 'vue';
7 import { ref } from 'vue'; 6 import { ref } from 'vue';
8 import { SvgIcon } from '/@/components/Icon'; 7 import { SvgIcon } from '/@/components/Icon';
9 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 8 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
  9 + import { useDataFetch } from '../../../hook/socket/useSocket';
  10 + import { DataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
10 11
11 const props = defineProps<{ 12 const props = defineProps<{
12 config: ComponentPropsConfigType<typeof option>; 13 config: ComponentPropsConfigType<typeof option>;
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 import { option } from './config'; 2 import { option } from './config';
3 - // import { useComponentScale } from '/@/views/visual/packages/hook/useComponentScale';  
4 - import { ComponentPropsConfigType, MultipleDataFetchUpdateFn } from '../../../index.type';  
5 - import { useMultipleDataFetch } from '/@/views/visual/packages/hook/useSocket';  
6 - import { computed } from 'vue';  
7 - import { ref } from 'vue'; 3 + import { ComponentPropsConfigType } from '../../../index.type';
8 import { Progress } from 'ant-design-vue'; 4 import { Progress } from 'ant-design-vue';
9 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 5 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
10 - import { unref } from 'vue';  
11 - import { onMounted } from 'vue';  
12 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime'; 6 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime';
13 import { useReceiveMessage } from '../../../hook/useReceiveMessage'; 7 import { useReceiveMessage } from '../../../hook/useReceiveMessage';
14 import { buildUUID } from '/@/utils/uuid'; 8 import { buildUUID } from '/@/utils/uuid';
15 import { useReceiveValue } from '../../../hook/useReceiveValue'; 9 import { useReceiveValue } from '../../../hook/useReceiveValue';
  10 + import { ref, computed, unref, onMounted } from 'vue';
  11 + import { useMultipleDataFetch } from '../../../hook/socket/useSocket';
  12 + import { MultipleDataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
16 13
17 const props = defineProps<{ 14 const props = defineProps<{
18 config: ComponentPropsConfigType<typeof option>; 15 config: ComponentPropsConfigType<typeof option>;
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 - import { ComponentPropsConfigType, MultipleDataFetchUpdateFn } from '../../../index.type';  
3 - 2 + import { ComponentPropsConfigType } from '../../../index.type';
4 import { option } from './config'; 3 import { option } from './config';
5 - import { useMultipleDataFetch } from '/@/views/visual/packages/hook/useSocket';  
6 import { ref, unref } from 'vue'; 4 import { ref, unref } from 'vue';
7 import { SvgIcon } from '/@/components/Icon'; 5 import { SvgIcon } from '/@/components/Icon';
8 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime'; 6 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime';
@@ -10,6 +8,8 @@ @@ -10,6 +8,8 @@
10 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 8 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
11 import { useReceiveMessage } from '../../../hook/useReceiveMessage'; 9 import { useReceiveMessage } from '../../../hook/useReceiveMessage';
12 import { useReceiveValue } from '../../../hook/useReceiveValue'; 10 import { useReceiveValue } from '../../../hook/useReceiveValue';
  11 + import { useMultipleDataFetch } from '../../../hook/socket/useSocket';
  12 + import { MultipleDataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
13 13
14 const props = defineProps<{ 14 const props = defineProps<{
15 config: ComponentPropsConfigType<typeof option>; 15 config: ComponentPropsConfigType<typeof option>;
@@ -42,14 +42,6 @@ @@ -42,14 +42,6 @@
42 deviceRename, 42 deviceRename,
43 id: deviceId, 43 id: deviceId,
44 }; 44 };
45 - // return {  
46 - // unit: unit ?? persetUnit,  
47 - // fontColor: fontColor ?? persetFontColor,  
48 - // icon: icon ?? persetIcon,  
49 - // iconColor: iconColor ?? persetIconColor,  
50 - // attribute: attribute || attributeRename,  
51 - // attributeRename,  
52 - // };  
53 }), 45 }),
54 }; 46 };
55 }); 47 });
@@ -88,25 +80,7 @@ @@ -88,25 +80,7 @@
88 time.value = timespan; 80 time.value = timespan;
89 } 81 }
90 }); 82 });
91 - // });  
92 }); 83 });
93 - // console.log(unref(svgList), 'svglist');  
94 - // const { data = {} } = message;  
95 - // const { dataSource } = unref(getDesign);  
96 - // svgList.value.length = 0;  
97 - // svgList.value = dataSource.map((item) => {  
98 - // const { icon, iconColor, unit, fontColor, attribute } = item || {};  
99 - // const [latest] = data[attribute] || [];  
100 - // const [_timespan, value] = latest || [];  
101 - // return {  
102 - // value: Number(value),  
103 - // name: attribute,  
104 - // icon,  
105 - // unit,  
106 - // iconColor,  
107 - // fontColor,  
108 - // };  
109 - // });  
110 }; 84 };
111 85
112 useMultipleDataFetch(props, updateFn); 86 useMultipleDataFetch(props, updateFn);
src/views/visual/packages/hook/socket/useSocket.ts renamed from src/views/visual/packages/hook/useSocket.ts
1 import { Ref, computed, onUnmounted, unref, watch } from 'vue'; 1 import { Ref, computed, onUnmounted, unref, watch } from 'vue';
2 -import { WidgetDataType } from '../../palette/hooks/useDataSource'; 2 +import { WidgetDataType } from '../../../palette/hooks/useDataSource';
3 import { useWebSocket } from '@vueuse/core'; 3 import { useWebSocket } from '@vueuse/core';
4 import { useGlobSetting } from '/@/hooks/setting'; 4 import { useGlobSetting } from '/@/hooks/setting';
5 import { isShareMode } from '/@/views/sys/share/hook'; 5 import { isShareMode } from '/@/views/sys/share/hook';
6 import { getJwtToken, getShareJwtToken } from '/@/utils/auth'; 6 import { getJwtToken, getShareJwtToken } from '/@/utils/auth';
7 -import { isNullAndUnDef } from '/@/utils/is'; 7 +import { DataSource } from '../../../palette/types';
  8 +import { CUSTOM_SUBSCRIBE_MESSAGE_COMPONENT_KEY_LIST } from '../../package';
8 import { 9 import {
9 - ComponentPropsConfigType, 10 + CmdUpdateMsg,
  11 + CmdUpdateTypeEnum,
10 DataFetchUpdateFn, 12 DataFetchUpdateFn,
11 EntityTypeEnum, 13 EntityTypeEnum,
12 MultipleDataFetchUpdateFn, 14 MultipleDataFetchUpdateFn,
13 - ReceiveGroupMessageType, 15 + ReceiveAlarmDataCmdsMessageType,
  16 + ReceiveEntityCountMessageType,
  17 + ReceiveEntityDataMessageType,
14 ReceiveMessageType, 18 ReceiveMessageType,
  19 + ReceiveTsSubCmdsGroupMessageType,
  20 + ReceiveTsSubCmdsMessageType,
15 ScopeTypeEnum, 21 ScopeTypeEnum,
16 - SubscribeMessageItemType,  
17 SubscribeMessageType, 22 SubscribeMessageType,
18 -} from '../index.type';  
19 -import { DataSource } from '../../palette/types'; 23 + TsSubCmdsItemType,
  24 +} from './useSocket.type';
  25 +import { ComponentPropsConfigType } from '../../index.type';
20 26
21 interface DeviceGroupMapType { 27 interface DeviceGroupMapType {
22 subscriptionId: number; 28 subscriptionId: number;
@@ -29,11 +35,18 @@ interface ComponentUpdateFnMapValueType { @@ -29,11 +35,18 @@ interface ComponentUpdateFnMapValueType {
29 attributes: string[]; 35 attributes: string[];
30 } 36 }
31 37
32 -const parseMessage = (text: string): ReceiveMessageType => { 38 +interface CustomSubscribeMapValueType {
  39 + uuid: string;
  40 + updateFn?: Fn;
  41 +}
  42 +
  43 +export type CustomSubscribeSendMessageFnType = (cmdId: number) => void;
  44 +
  45 +const parseMessage = (text: string): ReceiveTsSubCmdsMessageType => {
33 try { 46 try {
34 return JSON.parse(text); 47 return JSON.parse(text);
35 } catch (error) { 48 } catch (error) {
36 - return {} as ReceiveMessageType; 49 + return {} as ReceiveTsSubCmdsMessageType;
37 } 50 }
38 }; 51 };
39 52
@@ -48,6 +61,8 @@ class Subscriber { @@ -48,6 +61,8 @@ class Subscriber {
48 61
49 componentGroupUpdateFnMap = new Map<string, ComponentUpdateFnMapValueType[]>(); 62 componentGroupUpdateFnMap = new Map<string, ComponentUpdateFnMapValueType[]>();
50 63
  64 + customSubscribeMap = new Map<number, CustomSubscribeMapValueType>();
  65 +
51 getNextSubscribeId() { 66 getNextSubscribeId() {
52 return this.subscribeId++; 67 return this.subscribeId++;
53 } 68 }
@@ -56,6 +71,8 @@ class Subscriber { @@ -56,6 +71,8 @@ class Subscriber {
56 this.deviceGroupMap.clear(); 71 this.deviceGroupMap.clear();
57 this.subscriptionMap.clear(); 72 this.subscriptionMap.clear();
58 this.componentUpdateFnMap.clear(); 73 this.componentUpdateFnMap.clear();
  74 + this.componentGroupUpdateFnMap.clear();
  75 + this.customSubscribeMap.clear();
59 }; 76 };
60 77
61 addSubscriber = (info: Record<'deviceId' | 'slaveDeviceId' | 'attribute' | 'uuid', string>) => { 78 addSubscriber = (info: Record<'deviceId' | 'slaveDeviceId' | 'attribute' | 'uuid', string>) => {
@@ -85,7 +102,7 @@ class Subscriber { @@ -85,7 +102,7 @@ class Subscriber {
85 entityType: EntityTypeEnum.DEVICE, 102 entityType: EntityTypeEnum.DEVICE,
86 scope: ScopeTypeEnum.LATEST_TELEMERY, 103 scope: ScopeTypeEnum.LATEST_TELEMERY,
87 ...(unsubscribe ? { unsubscribe } : {}), 104 ...(unsubscribe ? { unsubscribe } : {}),
88 - } as SubscribeMessageItemType; 105 + } as TsSubCmdsItemType;
89 }); 106 });
90 return { tsSubCmds: message } as SubscribeMessageType; 107 return { tsSubCmds: message } as SubscribeMessageType;
91 } 108 }
@@ -98,14 +115,14 @@ class Subscriber { @@ -98,14 +115,14 @@ class Subscriber {
98 return this.genBasicMessage(); 115 return this.genBasicMessage();
99 } 116 }
100 117
101 - getScopeMessage(message: ReceiveMessageType, attribute: string[]) { 118 + getScopeMessage(message: ReceiveTsSubCmdsMessageType, attribute: string[]) {
102 const data = attribute.reduce((prev, next) => { 119 const data = attribute.reduce((prev, next) => {
103 return { ...prev, [next]: (message.data || {})[next] || [[]] }; 120 return { ...prev, [next]: (message.data || {})[next] || [[]] };
104 - }, {} as ReceiveMessageType['data']); 121 + }, {} as ReceiveTsSubCmdsMessageType['data']);
105 122
106 const latestValues = attribute.reduce((prev, next) => { 123 const latestValues = attribute.reduce((prev, next) => {
107 return { ...prev, [next]: (message.latestValues || {})[next] || [[]] }; 124 return { ...prev, [next]: (message.latestValues || {})[next] || [[]] };
108 - }, {} as ReceiveMessageType['data']); 125 + }, {} as ReceiveTsSubCmdsMessageType['data']);
109 126
110 return { 127 return {
111 subscriptionId: message.subscriptionId, 128 subscriptionId: message.subscriptionId,
@@ -113,10 +130,14 @@ class Subscriber { @@ -113,10 +130,14 @@ class Subscriber {
113 errorMsg: message.errorMsg, 130 errorMsg: message.errorMsg,
114 data, 131 data,
115 latestValues, 132 latestValues,
116 - } as ReceiveMessageType; 133 + } as ReceiveTsSubCmdsMessageType;
117 } 134 }
118 135
119 - getGroupScopeMessage(message: ReceiveMessageType, attribute: string[], deviceId: string) { 136 + getGroupScopeMessage(
  137 + message: ReceiveTsSubCmdsMessageType,
  138 + attribute: string[],
  139 + deviceId: string
  140 + ) {
120 const result = this.getScopeMessage(message, attribute); 141 const result = this.getScopeMessage(message, attribute);
121 142
122 return { 143 return {
@@ -127,7 +148,13 @@ class Subscriber { @@ -127,7 +148,13 @@ class Subscriber {
127 latestValues: { 148 latestValues: {
128 [deviceId]: result.latestValues, 149 [deviceId]: result.latestValues,
129 }, 150 },
130 - } as ReceiveGroupMessageType; 151 + } as ReceiveTsSubCmdsGroupMessageType;
  152 + }
  153 +
  154 + customSubscribe(uuid: string, sendMessageFn: CustomSubscribeSendMessageFnType, updateFn: Fn) {
  155 + const cmdId = this.getNextSubscribeId();
  156 + this.customSubscribeMap.set(cmdId, { uuid, updateFn });
  157 + sendMessageFn(cmdId);
131 } 158 }
132 159
133 trackUpdate(uuid: string, fn: Fn) { 160 trackUpdate(uuid: string, fn: Fn) {
@@ -144,8 +171,30 @@ class Subscriber { @@ -144,8 +171,30 @@ class Subscriber {
144 } 171 }
145 172
146 triggerUpdate(message: ReceiveMessageType) { 173 triggerUpdate(message: ReceiveMessageType) {
  174 + if (message.errorCode) {
  175 + return;
  176 + }
  177 +
  178 + if (isEntityDataUpdateMsg(message)) {
  179 + return;
  180 + }
  181 +
  182 + if (isAlarmDataUpdateMsg(message)) {
  183 + this.triggerAlarmDataMesssage(message);
  184 + return;
  185 + }
  186 +
  187 + if (isEntityCountUpdateMsg(message)) {
  188 + return;
  189 + }
  190 +
  191 + if (message.subscriptionId) {
  192 + this.triggerTsSubCmdsMessage(message);
  193 + }
  194 + }
  195 +
  196 + triggerTsSubCmdsMessage(message: ReceiveTsSubCmdsMessageType) {
147 const { subscriptionId } = message; 197 const { subscriptionId } = message;
148 - if (isNullAndUnDef(subscriptionId)) return;  
149 const deviceId = this.subscriptionMap.get(subscriptionId); 198 const deviceId = this.subscriptionMap.get(subscriptionId);
150 if (!deviceId) return; 199 if (!deviceId) return;
151 const deviceGroup = this.deviceGroupMap.get(deviceId); 200 const deviceGroup = this.deviceGroupMap.get(deviceId);
@@ -179,6 +228,21 @@ class Subscriber { @@ -179,6 +228,21 @@ class Subscriber {
179 } 228 }
180 }); 229 });
181 } 230 }
  231 +
  232 + triggerAlarmDataMesssage(message: ReceiveAlarmDataCmdsMessageType) {
  233 + const { cmdId } = message;
  234 + const isCustomSubscribeMessage = this.customSubscribeMap.get(cmdId);
  235 + if (isCustomSubscribeMessage) {
  236 + const updateFn = isCustomSubscribeMessage.updateFn;
  237 + try {
  238 + updateFn?.(message);
  239 + } catch (error) {
  240 + console.error(`Custom subscribe message invoke update function failed`);
  241 + throw error;
  242 + }
  243 + return;
  244 + }
  245 + }
182 } 246 }
183 247
184 const subscriber = new Subscriber(); 248 const subscriber = new Subscriber();
@@ -206,12 +270,14 @@ export const useSocket = (dataSourceRef: Ref<WidgetDataType[]>) => { @@ -206,12 +270,14 @@ export const useSocket = (dataSourceRef: Ref<WidgetDataType[]>) => {
206 270
207 const initSubscribe = () => { 271 const initSubscribe = () => {
208 subscriber.clearSubscriber(); 272 subscriber.clearSubscriber();
209 - unref(dataSourceRef).forEach((item) => {  
210 - item.dataSource.forEach((temp) => { 273 +
  274 + for (const item of unref(dataSourceRef)) {
  275 + if (CUSTOM_SUBSCRIBE_MESSAGE_COMPONENT_KEY_LIST.includes(item.frontId)) continue;
  276 + for (const temp of item.dataSource) {
211 const { deviceId, slaveDeviceId, attribute, uuid } = temp; 277 const { deviceId, slaveDeviceId, attribute, uuid } = temp;
212 subscriber.addSubscriber({ deviceId, slaveDeviceId, attribute, uuid }); 278 subscriber.addSubscriber({ deviceId, slaveDeviceId, attribute, uuid });
213 - });  
214 - }); 279 + }
  280 + }
215 }; 281 };
216 282
217 watch( 283 watch(
@@ -234,8 +300,34 @@ export const useSocket = (dataSourceRef: Ref<WidgetDataType[]>) => { @@ -234,8 +300,34 @@ export const useSocket = (dataSourceRef: Ref<WidgetDataType[]>) => {
234 onUnmounted(() => { 300 onUnmounted(() => {
235 close(); 301 close();
236 }); 302 });
  303 +
  304 + return {
  305 + send,
  306 + close,
  307 + };
237 }; 308 };
238 309
  310 +export function isEntityDataUpdateMsg(
  311 + message: ReceiveMessageType
  312 +): message is ReceiveEntityDataMessageType {
  313 + const updateMsg = message as CmdUpdateMsg;
  314 + return updateMsg.cmdId !== undefined && updateMsg.cmdUpdateType === CmdUpdateTypeEnum.ENTITY_DATA;
  315 +}
  316 +
  317 +export function isAlarmDataUpdateMsg(
  318 + message: ReceiveMessageType
  319 +): message is ReceiveAlarmDataCmdsMessageType {
  320 + const updateMsg = message as CmdUpdateMsg;
  321 + return updateMsg.cmdId !== undefined && updateMsg.cmdUpdateType === CmdUpdateTypeEnum.ALARM_DATA;
  322 +}
  323 +
  324 +export function isEntityCountUpdateMsg(
  325 + message: ReceiveMessageType
  326 +): message is ReceiveEntityCountMessageType {
  327 + const updateMsg = message as CmdUpdateMsg;
  328 + return updateMsg.cmdId !== undefined && updateMsg.cmdUpdateType === CmdUpdateTypeEnum.COUNT_DATA;
  329 +}
  330 +
239 export const useDataFetch = ( 331 export const useDataFetch = (
240 props: { config: ComponentPropsConfigType }, 332 props: { config: ComponentPropsConfigType },
241 updateFn: DataFetchUpdateFn 333 updateFn: DataFetchUpdateFn
@@ -288,16 +380,6 @@ export const useMultipleDataFetch = ( @@ -288,16 +380,6 @@ export const useMultipleDataFetch = (
288 }); 380 });
289 381
290 if (!Object.keys(unref(getDataSourceGroup)).length) return; 382 if (!Object.keys(unref(getDataSourceGroup)).length) return;
291 - // const getBindAttributes = computed(() => {  
292 - // const attributes = props.config.option.dataSource?.map((item) => item.attribute);  
293 - // return [...new Set(attributes)];  
294 - // });  
295 -  
296 - // if (!unref(getBindAttributes).length) return;  
297 -  
298 - // const getDeviceId = computed(() => {  
299 - // return props.config.option.dataSource?.at(0)?.deviceId;  
300 - // });  
301 383
302 watch( 384 watch(
303 () => getDataSourceGroup, 385 () => getDataSourceGroup,
@@ -318,3 +400,23 @@ export const useMultipleDataFetch = ( @@ -318,3 +400,23 @@ export const useMultipleDataFetch = (
318 400
319 return {}; 401 return {};
320 }; 402 };
  403 +
  404 +export const useCustomDataFetch = (
  405 + props: { config: ComponentPropsConfigType },
  406 + transformMessage: Fn,
  407 + updateFn: Fn
  408 +) => {
  409 + const getUUID = computed(() => {
  410 + return props.config.option.uuid;
  411 + });
  412 +
  413 + watch(
  414 + () => getUUID,
  415 + () => {
  416 + subscriber.customSubscribe(props.config.option.uuid, transformMessage, updateFn);
  417 + },
  418 + {
  419 + immediate: true,
  420 + }
  421 + );
  422 +};
  1 +export interface SubscribeMessageType {
  2 + tsSubCmds?: TsSubCmdsItemType[];
  3 + alarmDataCmds?: AlarmDataCmdsItemType[];
  4 + alarmDataUnsubscribeCmds?: UnsubscribeCmdsItemType[];
  5 + attrSubCmds?: [];
  6 + entityCountCmds?: [];
  7 + entityCountUnsubscribeCmds?: UnsubscribeCmdsItemType[];
  8 + entityDataCmds?: [];
  9 + entityDataUnsubscribeCmds?: UnsubscribeCmdsItemType[];
  10 + historyCmds?: [];
  11 +}
  12 +
  13 +export interface UnsubscribeCmdsItemType {
  14 + cmdId: number;
  15 +}
  16 +
  17 +export enum CmdUpdateTypeEnum {
  18 + ENTITY_DATA = 'ENTITY_DATA',
  19 + ALARM_DATA = 'ALARM_DATA',
  20 + COUNT_DATA = 'COUNT_DATA',
  21 +}
  22 +
  23 +export interface AlarmDataCmdsItemType {
  24 + cmdId: number;
  25 +}
  26 +
  27 +export interface TsSubCmdsItemType {
  28 + cmdId: number;
  29 + entityId: string;
  30 + entityType: string;
  31 + keys?: string;
  32 + scope?: string;
  33 + unsubscribe?: boolean;
  34 +}
  35 +
  36 +export interface ReceiveTsSubCmdsMessageType {
  37 + subscriptionId: number;
  38 + errorCode: number;
  39 + errorMsg: Nullable<string>;
  40 + data: Record<string, [number, string][]>;
  41 + latestValues: Record<string, number>;
  42 +}
  43 +
  44 +export interface ReceiveTsSubCmdsGroupMessageType {
  45 + subscriptionId: number;
  46 + errorCode: number;
  47 + errorMsg: Nullable<string>;
  48 + data: {
  49 + string: Record<string, [number, string][]>;
  50 + };
  51 + latestValues: {
  52 + string: Record<string, number>;
  53 + };
  54 +}
  55 +
  56 +export interface PageData<T> {
  57 + data: T[];
  58 + totalPages: number;
  59 + totalElements: number;
  60 + hasNext: boolean;
  61 +}
  62 +
  63 +export interface CmdUpdateMsg {
  64 + cmdId: number;
  65 + errorCode: number;
  66 + errorMsg: string;
  67 + cmdUpdateType: CmdUpdateTypeEnum;
  68 +}
  69 +
  70 +export interface DataUpdateMsg<T> extends CmdUpdateMsg {
  71 + data?: PageData<T>;
  72 + update?: T[];
  73 +}
  74 +
  75 +export enum EntityType {
  76 + TENANT = 'TENANT',
  77 + TENANT_PROFILE = 'TENANT_PROFILE',
  78 + CUSTOMER = 'CUSTOMER',
  79 + USER = 'USER',
  80 + DASHBOARD = 'DASHBOARD',
  81 + ASSET = 'ASSET',
  82 + DEVICE = 'DEVICE',
  83 + DEVICE_PROFILE = 'DEVICE_PROFILE',
  84 + ASSET_PROFILE = 'ASSET_PROFILE',
  85 + ALARM = 'ALARM',
  86 + RULE_CHAIN = 'RULE_CHAIN',
  87 + RULE_NODE = 'RULE_NODE',
  88 + EDGE = 'EDGE',
  89 + ENTITY_VIEW = 'ENTITY_VIEW',
  90 + WIDGETS_BUNDLE = 'WIDGETS_BUNDLE',
  91 + WIDGET_TYPE = 'WIDGET_TYPE',
  92 + API_USAGE_STATE = 'API_USAGE_STATE',
  93 + TB_RESOURCE = 'TB_RESOURCE',
  94 + OTA_PACKAGE = 'OTA_PACKAGE',
  95 + RPC = 'RPC',
  96 + QUEUE = 'QUEUE',
  97 +}
  98 +
  99 +export enum AliasEntityType {
  100 + CURRENT_CUSTOMER = 'CURRENT_CUSTOMER',
  101 + CURRENT_TENANT = 'CURRENT_TENANT',
  102 + CURRENT_USER = 'CURRENT_USER',
  103 + CURRENT_USER_OWNER = 'CURRENT_USER_OWNER',
  104 +}
  105 +
  106 +export interface HasUUID {
  107 + id: string;
  108 +}
  109 +
  110 +export interface TsValue {
  111 + ts: number;
  112 + value: string;
  113 + count?: number;
  114 +}
  115 +
  116 +export interface EntityId extends HasUUID {
  117 + entityType: EntityType | AliasEntityType;
  118 +}
  119 +
  120 +export interface ComparisonTsValue {
  121 + current?: TsValue;
  122 + previous?: TsValue;
  123 +}
  124 +
  125 +export interface EntityData {
  126 + entityId: EntityId;
  127 + latest: { [entityKeyType: string]: { [key: string]: TsValue } };
  128 + timeseries: { [key: string]: TsValue[] };
  129 + aggLatest?: { [id: number]: ComparisonTsValue };
  130 +}
  131 +
  132 +/**
  133 + * @description entity data receive message
  134 + */
  135 +export interface ReceiveEntityDataMessageType extends DataUpdateMsg<EntityData> {
  136 + cmdUpdateType: CmdUpdateTypeEnum.ENTITY_DATA;
  137 +}
  138 +
  139 +/**
  140 + * @description 告警
  141 + */
  142 +export interface ReceiveAlarmDataCmdsMessageType extends DataUpdateMsg<Recordable> {
  143 + cmdUpdateType: CmdUpdateTypeEnum.ALARM_DATA;
  144 + allowedEntities: number;
  145 + totalEntities: number;
  146 +}
  147 +
  148 +/**
  149 + * @description entity count receive message
  150 + */
  151 +export interface ReceiveEntityCountMessageType extends CmdUpdateMsg {
  152 + cmdUpdateType: CmdUpdateTypeEnum.COUNT_DATA;
  153 + count: number;
  154 +}
  155 +
  156 +/**
  157 + * @description 接受消息
  158 + */
  159 +export type ReceiveMessageType =
  160 + | ReceiveTsSubCmdsMessageType
  161 + | ReceiveAlarmDataCmdsMessageType
  162 + | ReceiveEntityDataMessageType
  163 + | ReceiveEntityCountMessageType;
  164 +
  165 +export enum EntityTypeEnum {
  166 + DEVICE = 'DEVICE',
  167 +}
  168 +
  169 +export enum ScopeTypeEnum {
  170 + LATEST_TELEMERY = 'LATEST_TELEMERY',
  171 +}
  172 +
  173 +export enum AttributeScopeEnum {
  174 + CLIENT_SCOPE = 'CLIENT_SCOPE',
  175 + SERVER_SCOPE = 'SERVER_SCOPE',
  176 + SHARED_SCOPE = 'SHARED_SCOPE',
  177 +}
  178 +
  179 +export type DataFetchUpdateFn = (message: ReceiveTsSubCmdsMessageType, attr: string) => void;
  180 +
  181 +export type MultipleDataFetchUpdateFn = (
  182 + message: ReceiveTsSubCmdsGroupMessageType,
  183 + deviceId: string,
  184 + attr: string[]
  185 +) => void;
1 -import { ReceiveGroupMessageType } from '../index.type'; 1 +import { ReceiveTsSubCmdsGroupMessageType } from '../index.type';
2 2
3 export const useReceiveMessage = () => { 3 export const useReceiveMessage = () => {
4 const forEachGroupMessage = ( 4 const forEachGroupMessage = (
5 - message: ReceiveGroupMessageType, 5 + message: ReceiveTsSubCmdsGroupMessageType,
6 deviceId: string, 6 deviceId: string,
7 attributes: string[], 7 attributes: string[],
8 Fn: (attribute: string, value: any, timespan: number) => void 8 Fn: (attribute: string, value: any, timespan: number) => void
@@ -140,68 +140,3 @@ export interface PackagesType { @@ -140,68 +140,3 @@ export interface PackagesType {
140 // [PackagesCategoryEnum.STATISTICS]: ConfigType[]; 140 // [PackagesCategoryEnum.STATISTICS]: ConfigType[];
141 [PackagesCategoryEnum.OTHER]: ConfigType[]; 141 [PackagesCategoryEnum.OTHER]: ConfigType[];
142 } 142 }
143 -  
144 -export interface SubscribeMessageType {  
145 - tsSubCmds: SubscribeMessageItemType[];  
146 -}  
147 -  
148 -export interface SubscribeMessageItemType {  
149 - cmdId: number;  
150 - entityId: string;  
151 - entityType: string;  
152 - keys?: string;  
153 - scope?: string;  
154 - unsubscribe?: boolean;  
155 -}  
156 -  
157 -export interface ReceiveMessageType {  
158 - subscriptionId: number;  
159 - errorCode: number;  
160 - errorMsg: Nullable<string>;  
161 - data: Record<string, [number, string][]>;  
162 - latestValues: Record<string, number>;  
163 -}  
164 -  
165 -export interface ReceiveGroupMessageType {  
166 - subscriptionId: number;  
167 - errorCode: number;  
168 - errorMsg: Nullable<string>;  
169 - data: {  
170 - string: Record<string, [number, string][]>;  
171 - };  
172 - latestValues: {  
173 - string: Record<string, number>;  
174 - };  
175 -}  
176 -  
177 -export enum EntityTypeEnum {  
178 - DEVICE = 'DEVICE',  
179 -}  
180 -  
181 -export enum ScopeTypeEnum {  
182 - LATEST_TELEMERY = 'LATEST_TELEMERY',  
183 -}  
184 -  
185 -export type DataFetchUpdateFn = (message: ReceiveMessageType, attr: string) => void;  
186 -  
187 -export type MultipleDataFetchUpdateFn = (  
188 - message: ReceiveGroupMessageType,  
189 - deviceId: string,  
190 - attr: string[]  
191 -) => void;  
192 -  
193 -// 旧 组件key  
194 -// TEXT_COMPONENT_1 = 'text-component-1',  
195 -// TEXT_COMPONENT_2 = 'text-component-2',  
196 -// TEXT_COMPONENT_3 = 'text-component-3',  
197 -// TEXT_COMPONENT_4 = 'text-component-4',  
198 -// TEXT_COMPONENT_5 = 'text-component-5',  
199 -// INSTRUMENT_COMPONENT_1 = 'instrument-component-1',  
200 -// INSTRUMENT_COMPONENT_2 = 'instrument-component-2',  
201 -// DIGITAL_DASHBOARD_COMPONENT = 'digital-dashboard-component',  
202 -// PICTURE_COMPONENT_1 = 'picture-component-1',  
203 -// CONTROL_COMPONENT_TOGGLE_SWITCH = 'control-component-toggle-switch',  
204 -// CONTROL_COMPONENT_SWITCH_WITH_ICON = 'control-component-switch-with-icon',  
205 -// CONTROL_COMPONENT_SLIDING_SWITCH = 'control-component-sliding-switch',  
206 -// MAP_COMPONENT_TRACK_REAL = 'map-component-track-real',  
207 -// MAP_COMPONENT_TRACK_HISTORY = 'map-component-track-history',  
@@ -18,3 +18,8 @@ export const packageList: PackagesType = { @@ -18,3 +18,8 @@ export const packageList: PackagesType = {
18 // [PackagesCategoryEnum.STATISTICS]: STATISTICSList, 18 // [PackagesCategoryEnum.STATISTICS]: STATISTICSList,
19 [PackagesCategoryEnum.OTHER]: OtherList, 19 [PackagesCategoryEnum.OTHER]: OtherList,
20 }; 20 };
  21 +
  22 +/**
  23 + * @description
  24 + */
  25 +export const CUSTOM_SUBSCRIBE_MESSAGE_COMPONENT_KEY_LIST: string[] = [];
  1 +import { inject, provide } from 'vue';
  2 +
  3 +const SymbolKey = Symbol('data-board');
  4 +
  5 +export interface ContextOptionsType {
  6 + send: (data: string | ArrayBuffer | Blob, useBuffer?: boolean | undefined) => boolean;
  7 + close: (code?: number | undefined, reason?: string | undefined) => void;
  8 +}
  9 +
  10 +export const createDataBoardContext = (options: ContextOptionsType) => {
  11 + provide(SymbolKey, options);
  12 +};
  13 +
  14 +export const useDataBoardContext = () => {
  15 + return inject<ContextOptionsType>(SymbolKey) || ({} as Partial<ContextOptionsType>);
  16 +};
@@ -25,10 +25,11 @@ @@ -25,10 +25,11 @@
25 import { ModalParamsType } from '/#/utils'; 25 import { ModalParamsType } from '/#/utils';
26 import { DataActionModeEnum } from '/@/enums/toolEnum'; 26 import { DataActionModeEnum } from '/@/enums/toolEnum';
27 import { HistoryTrendModal } from './components/HistoryTrendModal'; 27 import { HistoryTrendModal } from './components/HistoryTrendModal';
28 - import { useSocket } from '../packages/hook/useSocket';  
29 import { watch } from 'vue'; 28 import { watch } from 'vue';
30 import { useRootSetting } from '/@/hooks/setting/useRootSetting'; 29 import { useRootSetting } from '/@/hooks/setting/useRootSetting';
31 import { ThemeEnum } from '/@/enums/appEnum'; 30 import { ThemeEnum } from '/@/enums/appEnum';
  31 + import { createDataBoardContext } from './hooks/useDataBoardContext';
  32 + import { useSocket } from '/@/views/visual/packages/hook/socket/useSocket';
32 33
33 const props = defineProps<{ 34 const props = defineProps<{
34 value?: Recordable; 35 value?: Recordable;
@@ -72,7 +73,9 @@ @@ -72,7 +73,9 @@
72 openTrendModal(true, { mode: DataActionModeEnum.READ, record: data } as ModalParamsType); 73 openTrendModal(true, { mode: DataActionModeEnum.READ, record: data } as ModalParamsType);
73 }; 74 };
74 75
75 - useSocket(dataSource); 76 + const { send, close } = useSocket(dataSource);
  77 +
  78 + createDataBoardContext({ send, close });
76 79
77 const { getDarkMode } = useRootSetting(); 80 const { getDarkMode } = useRootSetting();
78 watch( 81 watch(
@@ -164,3 +167,4 @@ @@ -164,3 +167,4 @@
164 </template> 167 </template>
165 168
166 <style lang="less" scoped></style> 169 <style lang="less" scoped></style>
  170 +../packages/hook/socket/useSocket