Commit 0f9a309a3ab533c45549f3c50d4c601b467a3239

Authored by ww
1 parent e7cb1866

perf: 变更枚举值引用

1 1 import { FormSchema } from '../../../types/form';
2 2 import { Specs, StructJSON } from '/@/api/device/model/modelOfMatterModel';
  3 +import { TransportTypeEnum } from '/@/enums/deviceEnum';
3 4 import { DataTypeEnum } from '/@/enums/objectModelEnum';
4   -import { TransportTypeEnum } from '/@/views/device/profiles/components/TransportDescript/const';
5 5
6 6 export const getFormSchemas = ({
7 7 structJSON: structJson,
... ...
  1 +export enum TransportTypeEnum {
  2 + DEFAULT = 'DEFAULT',
  3 + MQTT = 'MQTT',
  4 + COAP = 'COAP',
  5 + LWM2M = 'LWM2M',
  6 + SNMP = 'SNMP',
  7 + TCP = 'TCP',
  8 +}
... ...
1 1 import { FormProps, FormSchema, useComponentRegister } from '/@/components/Form';
2 2 import { findDictItemByCode } from '/@/api/system/dict';
3 3 import { getGatewayDevice, queryDeviceProfileBy } from '/@/api/device/deviceManager';
4   -import { TransportTypeEnum } from '../../profiles/components/TransportDescript/const';
5 4 import { JSONEditorValidator } from '/@/components/CodeEditor/src/JSONEditor';
6 5 import { JSONEditor } from '/@/components/CodeEditor';
7 6 import { DeviceRecord, DeviceTypeEnum } from '/@/api/device/model/deviceModel';
... ... @@ -17,6 +16,7 @@ import { createImgPreview } from '/@/components/Preview';
17 16 import { uploadThumbnail } from '/@/api/configuration/center/configurationCenter';
18 17 import LockControlGroup from '/@/components/Form/src/components/LockControlGroup.vue';
19 18 import { OrgTreeSelect } from '/@/views/common/OrgTreeSelect';
  19 +import { TransportTypeEnum } from '/@/enums/deviceEnum';
20 20
21 21 useComponentRegister('JSONEditor', JSONEditor);
22 22 useComponentRegister('ObjectModelValidateForm', ObjectModelValidateForm);
... ...
... ... @@ -5,8 +5,8 @@ import { DeviceRecord, DeviceTypeEnum } from '/@/api/device/model/deviceModel';
5 5 import { findDictItemByCode } from '/@/api/system/dict';
6 6 import { FormSchema, useComponentRegister } from '/@/components/Form';
7 7 import { BasicColumn } from '/@/components/Table';
  8 +import { TransportTypeEnum } from '/@/enums/deviceEnum';
8 9 import { OrgTreeSelect } from '/@/views/common/OrgTreeSelect';
9   -import { TransportTypeEnum } from '/@/views/device/profiles/components/TransportDescript/const';
10 10 import XLSX, { CellObject } from 'xlsx';
11 11
12 12 useComponentRegister('OrgTreeSelect', OrgTreeSelect);
... ...
... ... @@ -9,8 +9,8 @@
9 9 </div>
10 10 </div>
11 11 </template>
12   -<script lang="ts">
13   - import { defineComponent, nextTick, ref } from 'vue';
  12 +<script lang="ts" setup>
  13 + import { nextTick, ref } from 'vue';
14 14 import { BasicForm, useForm } from '/@/components/Form';
15 15 import { CommandFieldsEnum, CommandSchemas, CommandType, ValueType } from '../../config/data';
16 16 import { commandIssuanceApi } from '/@/api/device/deviceManager';
... ... @@ -18,107 +18,95 @@
18 18 import { Button } from '/@/components/Button';
19 19 import { Space } from 'ant-design-vue';
20 20 import { DeviceRecord } from '/@/api/device/model/deviceModel';
21   - import { TransportTypeEnum } from '../../../profiles/components/TransportDescript/const';
22 21 import { parseStringToJSON } from '/@/components/CodeEditor/src/JSONEditor';
23 22 import { CommandDeliveryWayEnum } from '/@/enums/toolEnum';
  23 + import { TransportTypeEnum } from '/@/enums/deviceEnum';
24 24
25   - export default defineComponent({
26   - components: { BasicForm, Button, Space },
27   - props: {
28   - deviceDetail: {
29   - type: Object as PropType<DeviceRecord>,
30   - required: true,
31   - },
32   - },
33   - emits: ['register'],
34   - setup(props) {
35   - const { createMessage } = useMessage();
36   - const loading = ref(false);
  25 + defineEmits(['register']);
37 26
38   - const [registerForm, { getFieldsValue, validate, resetFields, clearValidate }] = useForm({
39   - labelWidth: 120,
40   - schemas: CommandSchemas(
41   - props.deviceDetail.deviceProfile.transportType as TransportTypeEnum,
42   - props.deviceDetail.deviceProfileId
43   - ),
44   - baseColProps: { span: 20 },
45   - labelAlign: 'right',
46   - showSubmitButton: false,
47   - showResetButton: false,
48   - });
  27 + const props = defineProps<{
  28 + deviceDetail: DeviceRecord;
  29 + }>();
49 30
50   - const handleCancel = async () => {
51   - await resetFields();
52   - await nextTick();
53   - await clearValidate();
54   - };
  31 + const { createMessage } = useMessage();
  32 + const loading = ref(false);
55 33
56   - const handleOk = async () => {
57   - loading.value = true;
58   - try {
59   - // 验证
60   - const valid = await validate();
61   - if (!valid) return;
62   - // 收集表单数据
63   - const field = getFieldsValue();
64   - let command: Recordable = {
65   - persistent: true,
66   - method: 'methodThingskit',
67   - params: field[CommandFieldsEnum.COMMAND_TEXT],
68   - };
  34 + const [registerForm, { getFieldsValue, validate, resetFields, clearValidate }] = useForm({
  35 + labelWidth: 120,
  36 + schemas: CommandSchemas(
  37 + props.deviceDetail.deviceProfile.transportType as TransportTypeEnum,
  38 + props.deviceDetail.deviceProfileId
  39 + ),
  40 + baseColProps: { span: 20 },
  41 + labelAlign: 'right',
  42 + showSubmitButton: false,
  43 + showResetButton: false,
  44 + });
69 45
70   - if (field[CommandFieldsEnum.COMMAND_TYPE] === CommandType.CUSTOM) {
71   - if (field[CommandFieldsEnum.VALUE_TYPE] === ValueType.JSON) {
72   - const { json } = parseStringToJSON(field.commandValue);
73   - command.params = json;
74   - }
75   - } else {
76   - const { transportType } = props.deviceDetail.deviceProfile;
77   - command.params =
78   - transportType === TransportTypeEnum.TCP
79   - ? field[CommandFieldsEnum.TCP_SERVICE]
80   - : {
81   - [field[CommandFieldsEnum.SERVICE]]: field[CommandFieldsEnum.MODEL_INPUT],
82   - };
83   - command.additionalInfo = { cmdType: 1 };
84   - }
85   - commandIssuanceApi(
86   - field[CommandFieldsEnum.CUSTOM_TYPE] as CommandDeliveryWayEnum,
87   - props.deviceDetail.tbDeviceId,
88   - command
89   - )
90   - .then((res) => {
91   - if (!res) return;
92   - createMessage.success('命令下发成功');
93   - loading.value = true;
94   - // 请求
95   - handleCancel();
96   - })
97   - .catch((e) => {
98   - if (e?.message) {
99   - createMessage.error(e?.message);
100   - }
101   - handleCancel();
102   - })
103   - .finally(() => {
104   - setTimeout(() => {
105   - loading.value = false;
106   - }, 300);
107   - });
108   - } catch (e) {
109   - throw e;
110   - } finally {
111   - loading.value = false;
112   - }
113   - };
114   - return {
115   - registerForm,
116   - handleCancel,
117   - handleOk,
118   - loading,
  46 + const handleCancel = async () => {
  47 + await resetFields();
  48 + await nextTick();
  49 + await clearValidate();
  50 + };
  51 +
  52 + const handleOk = async () => {
  53 + loading.value = true;
  54 + try {
  55 + // 验证
  56 + const valid = await validate();
  57 + if (!valid) return;
  58 + // 收集表单数据
  59 + const field = getFieldsValue();
  60 + let command: Recordable = {
  61 + persistent: true,
  62 + method: 'methodThingskit',
  63 + params: field[CommandFieldsEnum.COMMAND_TEXT],
119 64 };
120   - },
121   - });
  65 +
  66 + if (field[CommandFieldsEnum.COMMAND_TYPE] === CommandType.CUSTOM) {
  67 + if (field[CommandFieldsEnum.VALUE_TYPE] === ValueType.JSON) {
  68 + const { json } = parseStringToJSON(field.commandValue);
  69 + command.params = json;
  70 + }
  71 + } else {
  72 + const { transportType } = props.deviceDetail.deviceProfile;
  73 + command.params =
  74 + transportType === TransportTypeEnum.TCP
  75 + ? field[CommandFieldsEnum.TCP_SERVICE]
  76 + : {
  77 + [field[CommandFieldsEnum.SERVICE]]: field[CommandFieldsEnum.MODEL_INPUT],
  78 + };
  79 + command.additionalInfo = { cmdType: 1 };
  80 + }
  81 + commandIssuanceApi(
  82 + field[CommandFieldsEnum.CUSTOM_TYPE] as CommandDeliveryWayEnum,
  83 + props.deviceDetail.tbDeviceId,
  84 + command
  85 + )
  86 + .then((res) => {
  87 + if (!res) return;
  88 + createMessage.success('命令下发成功');
  89 + loading.value = true;
  90 + // 请求
  91 + handleCancel();
  92 + })
  93 + .catch((e) => {
  94 + if (e?.message) {
  95 + createMessage.error(e?.message);
  96 + }
  97 + handleCancel();
  98 + })
  99 + .finally(() => {
  100 + setTimeout(() => {
  101 + loading.value = false;
  102 + }, 300);
  103 + });
  104 + } catch (e) {
  105 + throw e;
  106 + } finally {
  107 + loading.value = false;
  108 + }
  109 + };
122 110 </script>
123 111 <style scoped lang="less">
124 112 .jsoneditor-transform {
... ...
... ... @@ -12,8 +12,8 @@
12 12 import { genModbusCommand } from '/@/api/task';
13 13 import { TaskTypeEnum } from '/@/views/task/center/config';
14 14 import { SingleToHex, formSchemasConfig } from './config';
15   - import { TransportTypeEnum } from '/@/views/device/profiles/components/TransportDescript/const';
16 15 import { DataTypeEnum } from '/@/enums/objectModelEnum';
  16 + import { TransportTypeEnum } from '/@/enums/deviceEnum';
17 17
18 18 defineEmits(['register']);
19 19 const props = defineProps<{ deviceId: string; deviceName: string }>();
... ...
1 1 <script lang="ts" setup>
2 2 import { computed } from 'vue';
3 3 import COAPDescription from './COAPDescription.vue';
4   - import { TransportTypeEnum } from './const';
5 4 import DefaultConfiguration from './DefaultConfiguration.vue';
6 5 import LWM2MDescription from './LWM2MDescription.vue';
7 6 import MQTTConfiguration from './MQTTConfiguration.vue';
8 7 import SNMPDescription from './SNMPDescription.vue';
9 8 import TCPDescription from './TCPDescription.vue';
10 9 import { DeviceRecord } from '/@/api/device/model/deviceModel';
  10 + import { TransportTypeEnum } from '/@/enums/deviceEnum';
11 11
12 12 const props = defineProps<{
13 13 record: DeviceRecord;
... ...
1   -export enum TransportTypeEnum {
2   - DEFAULT = 'DEFAULT',
3   - MQTT = 'MQTT',
4   - COAP = 'COAP',
5   - LWM2M = 'LWM2M',
6   - SNMP = 'SNMP',
7   - TCP = 'TCP',
8   -}
9   -
10 1 export enum TransportPayloadTypeEnum {
11 2 PROTOBUF = 'PROTOBUF',
12 3 JSON = 'JSON',
... ...
... ... @@ -10,10 +10,10 @@
10 10 import { isArray } from 'lodash';
11 11 import { OpenModelMode } from '../types';
12 12 import { formSchemas } from '/@/components/Form/src/externalCompns/components/StructForm/config';
13   - import { TransportTypeEnum } from '../../../../components/TransportDescript/const';
14 13 import { DataTypeEnum } from '/@/enums/objectModelEnum';
15 14 import { ref, unref } from 'vue';
16 15 import EnumList from '/@/components/Form/src/externalCompns/components/StructForm/EnumList.vue';
  16 + import { TransportTypeEnum } from '/@/enums/deviceEnum';
17 17
18 18 const props = defineProps<{ openModalMode: OpenModelMode; transportType?: string | undefined }>();
19 19
... ...
... ... @@ -26,10 +26,10 @@ import { DeviceTypeEnum } from '../../../dataFlow/cpns/config';
26 26 import { getModelServices } from '/@/api/device/modelOfMatter';
27 27 import { ModelOfMatterParams, StructJSON } from '/@/api/device/model/modelOfMatterModel';
28 28 import { DeviceProfileModel } from '/@/api/device/model/deviceModel';
29   -import { TransportTypeEnum } from '/@/views/device/profiles/components/TransportDescript/const';
30 29 import { JSONEditor } from '/@/components/CodeEditor';
31 30 import { useJsonParse } from '/@/hooks/business/useJsonParse';
32 31 import { validateTCPCustomCommand } from '/@/components/Form/src/externalCompns/components/ThingsModelForm';
  32 +import { TransportTypeEnum } from '/@/enums/deviceEnum';
33 33
34 34 export enum FormFieldsEnum {
35 35 OUT_TARGET = 'outTarget',
... ...
... ... @@ -7,7 +7,7 @@ import { FormActionType, ThingsModelForm } from '/@/components/Form';
7 7 import { AlarmLevelEnum } from '/@/enums/alarmEnum';
8 8 import { CommandTypeEnum, ExecutionActionEnum, TriggerEntityTypeEnum } from '/@/enums/linkedgeEnum';
9 9 import { ServiceCallTypeEnum } from '/@/enums/toolEnum';
10   -import { TransportTypeEnum } from '/@/views/device/profiles/components/TransportDescript/const';
  10 +import { TransportTypeEnum } from '/@/enums/deviceEnum';
11 11
12 12 export interface ExecutionActionListRefItemType {
13 13 key: string;
... ...
... ... @@ -8,11 +8,11 @@ import {
8 8 ExecutionActionListRefItemType,
9 9 } from './type';
10 10 import { CommandTypeEnum, ExecutionActionEnum } from '/@/enums/linkedgeEnum';
11   -import { TransportTypeEnum } from '/@/views/device/profiles/components/TransportDescript/const';
12 11 import { useJsonParse } from '/@/hooks/business/useJsonParse';
13 12 import { createNewExecutionActionItem } from '.';
14 13 import { FormFieldsEnum } from './config';
15 14 import { isObject, isString } from '/@/utils/is';
  15 +import { TransportTypeEnum } from '/@/enums/deviceEnum';
16 16
17 17 export function useExecutionActionData(
18 18 executionActionListRef: Ref<ExecutionActionListRefItemType[]>,
... ...
... ... @@ -29,9 +29,9 @@ import { DataTypeEnum } from '/@/enums/objectModelEnum';
29 29 import { getModelTsl } from '/@/api/device/modelOfMatter';
30 30 import { FunctionType } from '/@/views/device/profiles/step/cpns/physical/cpns/config';
31 31 import { GetModelTslParams } from '/@/api/device/model/modelOfMatterModel';
32   -import { TransportTypeEnum } from '/@/views/device/profiles/components/TransportDescript/const';
33 32 import { FlipFlopComponentTypeEnum } from './types';
34 33 import { OptionsType } from 'ant-design-vue/es/vc-select/interface';
  34 +import { TransportTypeEnum } from '/@/enums/deviceEnum';
35 35
36 36 export enum FormFieldEnum {
37 37 FLIP_FLOP_TYPE = 'flipFlopType',
... ...
1   -import { ref, unref } from 'vue';
  1 +import { ref } from 'vue';
2 2 import { BasicColumn, FormSchema } from '/@/components/Table';
3   -import {
4   - byOrganizationIdGetMasterDevice,
5   - screenLinkOrganizationGetApi,
6   - getAttribute,
7   -} from '/@/api/ruleengine/ruleengineApi';
8   -import { scheduleOptions } from './formatData';
  3 +import { screenLinkOrganizationGetApi } from '/@/api/ruleengine/ruleengineApi';
9 4 import { copyTransFun } from '/@/utils/fnUtils';
10   -import { numberAndNonegativeRule } from '/@/utils/rules';
11   -import { findDictItemByCode } from '/@/api/system/dict';
12   -import { queryDeviceProfileBy } from '/@/api/device/deviceManager';
13   -import { getModelServices } from '/@/api/device/modelOfMatter';
14   -import { ModelOfMatterParams } from '/@/api/device/model/modelOfMatterModel';
15   -import useCommonFun from '../hooks/useCommonFun';
16   -import { DeviceProfileModel } from '/@/api/device/model/deviceModel';
17   -import { TransportTypeEnum } from '/@/views/device/profiles/components/TransportDescript/const';
18 5 import { useComponentRegister } from '/@/components/Form';
19 6 import { OrgTreeSelect } from '/@/views/common/OrgTreeSelect';
20   -import { isArray } from '/@/utils/is';
21   -import { ReadAndWriteEnum } from '/@/enums/toolEnum';
22 7
23 8 useComponentRegister('OrgTreeSelect', OrgTreeSelect);
24 9
25   -const { useByProductGetAttribute } = useCommonFun();
26 10 export type TOption = {
27 11 label: string;
28 12 value: string;
29 13 };
30 14
31   -export enum CommandTypeEnum {
32   - CUSTOM = 0,
33   - SERVICE = 1,
34   - ATTRIBUTE = 2,
35   -}
36   -
37 15 /**
38 16 * 所使用的枚举值
39 17 */
... ... @@ -174,733 +152,3 @@ export const searchFormSchema: FormSchema[] = [
174 152 colProps: { span: 6 },
175 153 },
176 154 ];
177   -// 持续时间
178   -const isTimeDuration = (type) => {
179   - return type === 'DURATION';
180   -};
181   -const isReplace = (type) => {
182   - return type === 'REPEATING';
183   -};
184   -// 部分
185   -const isPart = (type: string) => {
186   - return type === 'PART';
187   -};
188   -//新增代码2022-11-23
189   -const isPartOrAll = (type: string) => {
190   - return type === 'ALL' || type === 'PART';
191   -};
192   -const isService = (type: string) => {
193   - return Number(type) === 1;
194   -};
195   -const isDefine = (type: string) => {
196   - return Number(type) === 0;
197   -};
198   -//新增代码2022-11-23
199   -
200   -export const trigger_condition_schema: FormSchema[] = [
201   - {
202   - field: 'triggered',
203   - label: '',
204   - component: 'Select',
205   - defaultValue: 'SIMPLE',
206   - componentProps: {
207   - placeholder: '请选择触发类型',
208   - options: [
209   - { label: '简单', value: 'SIMPLE' },
210   - { label: '持续时长', value: 'DURATION' },
211   - { label: '重复次数', value: 'REPEATING' },
212   - ],
213   - },
214   - colProps: { span: 6 },
215   - },
216   - {
217   - field: 'deviceType',
218   - label: '',
219   - component: 'ApiSelect',
220   - colProps: { span: 6 },
221   - defaultValue: 'SENSOR',
222   - componentProps: ({ formActionType }) => {
223   - const { setFieldsValue } = formActionType;
224   - return {
225   - api: findDictItemByCode,
226   - params: {
227   - dictCode: 'device_type',
228   - },
229   - placeholder: '请选择类型',
230   - labelField: 'itemText',
231   - valueField: 'itemValue',
232   - getPopupContainer: (triggerNode) => triggerNode.parentNode,
233   - onChange(e) {
234   - if (e) {
235   - setFieldsValue({ deviceProfileId: '' });
236   - }
237   - },
238   - };
239   - },
240   - },
241   - {
242   - field: 'deviceProfileId',
243   - label: '',
244   - component: 'ApiSelect',
245   - colProps: { span: 6 },
246   - componentProps: ({ formActionType, formModel }) => {
247   - const { updateSchema, setFieldsValue } = formActionType;
248   - const deviceType = formModel['deviceType'];
249   -
250   - return {
251   - api: queryDeviceProfileBy,
252   - params: {
253   - deviceType,
254   - },
255   - showSearch: true,
256   - placeholder: '请选择产品',
257   - labelField: 'name',
258   - valueField: 'id',
259   - getPopupContainer: (triggerNode) => triggerNode.parentNode,
260   - onChange: async (e) => {
261   - if (e) {
262   - setFieldsValue({ type2: '', entityId: [] });
263   - const res = await getAttribute(e);
264   - const options = ref<TOption[]>([]);
265   - useByProductGetAttribute(res, updateSchema, options);
266   - }
267   - },
268   - filterOption: (inputValue: string, option: Record<'label' | 'value', string>) => {
269   - let { label, value } = option;
270   - label = label.toLowerCase();
271   - value = value.toLowerCase();
272   - inputValue = inputValue.toLowerCase();
273   - return label.includes(inputValue) || value.includes(inputValue);
274   - },
275   - };
276   - },
277   - },
278   - {
279   - field: 'device',
280   - label: '',
281   - component: 'Select',
282   - componentProps: {
283   - placeholder: '请选择设备',
284   - options: [
285   - { label: '全部', value: 'ALL' },
286   - { label: '部分', value: 'PART' },
287   - ],
288   - },
289   - colProps: { span: 6 },
290   - },
291   -
292   - {
293   - field: 'entityId',
294   - label: '',
295   - component: 'ApiSelect',
296   - componentProps: ({ formModel }) => {
297   - const deviceProfileId = formModel['deviceProfileId'];
298   - return {
299   - mode: 'multiple',
300   - api: async () => {
301   - if (unref(organizationId)) {
302   - try {
303   - const data = await byOrganizationIdGetMasterDevice({
304   - organizationId: unref(organizationId),
305   - deviceProfileId,
306   - });
307   - if (data)
308   - return data.map((item) => ({
309   - ...item,
310   - label: item.alias || item.name,
311   - value: item.tbDeviceId,
312   - }));
313   - } catch (error) {}
314   - }
315   - return [];
316   - },
317   - placeholder: '请选择设备',
318   - getPopupContainer: (triggerNode) => triggerNode.parentNode,
319   - filterOption: (inputValue: string, option: Record<'label' | 'value', string>) => {
320   - let { label, value } = option;
321   - label = label.toLowerCase();
322   - value = value.toLowerCase();
323   - inputValue = inputValue.toLowerCase();
324   - return label.includes(inputValue) || value.includes(inputValue);
325   - },
326   - };
327   - },
328   - ifShow: ({ values }) => isPart(values.device),
329   - colProps: { span: 6 },
330   - },
331   -
332   - {
333   - field: 'time',
334   - label: '',
335   - component: 'Input',
336   - ifShow: ({ values }) => isTimeDuration(values.triggered),
337   - colProps: { span: 6 },
338   - slot: 'time',
339   - rules: numberAndNonegativeRule,
340   - },
341   - {
342   - field: 'timeUnit',
343   - label: '',
344   - component: 'Select',
345   - defaultValue: 'SECONDS',
346   - ifShow: ({ values }) => isTimeDuration(values.triggered),
347   - show: false,
348   - },
349   - {
350   - field: 'replaceValue',
351   - label: '',
352   - component: 'Input',
353   - componentProps: {
354   - placeholder: '事件计数值',
355   - },
356   - ifShow: ({ values }) => isReplace(values.triggered),
357   - colProps: { span: 6 },
358   - rules: numberAndNonegativeRule,
359   - },
360   - {
361   - field: 'triggerType',
362   - label: '',
363   - component: 'Select',
364   - componentProps: {
365   - placeholder: '设备触发',
366   - options: [
367   - { label: '设备触发', value: 'DEVICE_TRIGGER' },
368   - // { label: '定时触发', value: 'SCHEDULE_TRIGGER' },
369   - // { label: '场景触发', value: 'SCENE_TRIGGER' },
370   - // { label: '手动触发', value: 'HAND_ACT' },
371   - ],
372   - },
373   - colProps: { span: 6 },
374   - },
375   -
376   - {
377   - field: 'type1',
378   - label: '',
379   - component: 'Select',
380   - componentProps: {
381   - placeholder: '属性触发方式',
382   - options: [{ label: '属性触发', value: 'TIME_SERIES' }],
383   - },
384   - ifShow: ({ values }) => isDevice(values.triggerType),
385   - colProps: { span: 6 },
386   - },
387   - {
388   - field: 'type2',
389   - label: '',
390   - component: 'Select',
391   - componentProps: {
392   - placeholder: '请选择属性',
393   - },
394   - ifShow: ({ values }) => isDevice(values.triggerType),
395   - colProps: { span: 6 },
396   - // rules: numberAndEngLishRule,
397   - },
398   - {
399   - field: 'operationType',
400   - label: '',
401   - component: 'Select',
402   - slot: 'operationType',
403   - colProps: { span: 6 },
404   - },
405   - // {
406   - // field: 'detail',
407   - // label: '',
408   - // component: 'InputTextArea',
409   - // componentProps: {
410   - // placeholder: '请输入详情',
411   - // },
412   - // colProps: {
413   - // span: 13,
414   - // },
415   - // },
416   -];
417   -// !!!----------------------------------------------------^_^------------------------------------------------------------!!!
418   -enum ActionEnum {
419   - DEVICE_OUT = 'DEVICE_OUT',
420   - ALARM_OUT = 'MSG_NOTIFY',
421   -}
422   -const isDeviceOut = (type: string) => type === ActionEnum.DEVICE_OUT;
423   -const isAlarmOut = (type: string) => type === ActionEnum.ALARM_OUT;
424   -
425   -export const actionSchema: FormSchema[] = [
426   - {
427   - field: 'outTarget',
428   - label: '',
429   - component: 'Select',
430   - required: true,
431   - componentProps: {
432   - placeholder: '请选择执行动作',
433   - },
434   - slot: 'outTarget',
435   - colProps: { span: 6 },
436   - },
437   - {
438   - field: 'deviceType',
439   - label: '',
440   - component: 'ApiSelect',
441   - colProps: { span: 6 },
442   - defaultValue: 'SENSOR',
443   - componentProps: ({ formActionType }) => {
444   - const { setFieldsValue } = formActionType;
445   - return {
446   - api: findDictItemByCode,
447   - params: {
448   - dictCode: 'device_type',
449   - },
450   - placeholder: '请选择类型',
451   - labelField: 'itemText',
452   - valueField: 'itemValue',
453   - getPopupContainer: (triggerNode) => triggerNode.parentNode,
454   - onChange(e) {
455   - if (e) {
456   - setFieldsValue({ deviceProfileId: '' });
457   - }
458   - },
459   - };
460   - },
461   - ifShow: ({ values }) => isDeviceOut(values.outTarget),
462   - },
463   - {
464   - field: 'transportType',
465   - label: '',
466   - component: 'Input',
467   - show: false,
468   - },
469   - {
470   - field: 'deviceProfileId',
471   - label: '',
472   - component: 'ApiSelect',
473   - colProps: { span: 6 },
474   - componentProps: ({ formActionType, formModel }) => {
475   - const { setFieldsValue } = formActionType;
476   - const deviceType = formModel['deviceType'];
477   - return {
478   - api: queryDeviceProfileBy,
479   - params: {
480   - deviceType,
481   - },
482   - placeholder: '请选择产品',
483   - labelField: 'name',
484   - valueField: 'id',
485   - getPopupContainer: (triggerNode) => triggerNode.parentNode,
486   - onChange: (_value: string, options = {} as DeviceProfileModel) => {
487   - const oldType = formModel['transportType'];
488   -
489   - const updateFlag =
490   - oldType === TransportTypeEnum.TCP || options.transportType === TransportTypeEnum.TCP;
491   -
492   - setFieldsValue({
493   - thingsModelId: '',
494   - deviceId: [],
495   - transportType: options.transportType,
496   - ...(updateFlag ? { doContext: null } : {}),
497   - });
498   - },
499   - onOptionsChange(options: DeviceProfileModel[]) {
500   - const deviceProfileId = formModel['deviceProfileId'];
501   - if (deviceProfileId) {
502   - const index = options.findIndex(
503   - (item) => (item as Recordable).value === deviceProfileId
504   - );
505   -
506   - ~index && setFieldsValue({ transportType: options[index].transportType });
507   - }
508   - },
509   - };
510   - },
511   - ifShow: ({ values }) => isDeviceOut(values.outTarget),
512   - },
513   - {
514   - field: 'device',
515   - label: '',
516   - component: 'Select',
517   - componentProps: ({ formActionType }) => {
518   - const { setFieldsValue } = formActionType;
519   - return {
520   - placeholder: '请选择设备',
521   - options: [
522   - { label: '全部', value: 'ALL' },
523   - { label: '部分', value: 'PART' },
524   - ],
525   - onChange: () => {
526   - setFieldsValue({ deviceId: [], thingsModelId: null });
527   - },
528   - };
529   - },
530   - ifShow: ({ values }) => isDeviceOut(values.outTarget) && values['deviceProfileId'],
531   - colProps: { span: 6 },
532   - },
533   - {
534   - field: 'deviceId',
535   - label: '',
536   - component: 'ApiSelect',
537   - componentProps: ({ formModel }) => {
538   - const deviceProfileId = formModel['deviceProfileId'];
539   - return {
540   - mode: 'multiple',
541   - api: async () => {
542   - if (unref(organizationId)) {
543   - try {
544   - const data = await byOrganizationIdGetMasterDevice({
545   - organizationId: unref(organizationId),
546   - deviceProfileId,
547   - });
548   - if (data)
549   - return data.map((item) => ({
550   - ...item,
551   - label: item.alias || item.name,
552   - value: item.tbDeviceId,
553   - }));
554   - } catch (error) {}
555   - }
556   - return [];
557   - },
558   - placeholder: '请选择设备',
559   - getPopupContainer: (triggerNode) => triggerNode.parentNode,
560   - };
561   - },
562   - ifShow: ({ values }) => isPart(values.device) && isDeviceOut(values.outTarget),
563   - colProps: { span: 6 },
564   - },
565   - //新增代码2022-11-23
566   - {
567   - field: 'commandType',
568   - label: '',
569   - required: true,
570   - component: 'ApiSelect',
571   - colProps: {
572   - span: 6,
573   - },
574   - defaultValue: '0',
575   - componentProps: ({ formActionType }) => {
576   - const { setFieldsValue } = formActionType;
577   - return {
578   - placeholder: '请选择类型',
579   - api: async (parmas: Recordable) => {
580   - try {
581   - const record = await findDictItemByCode(parmas);
582   - return record.filter(
583   - (item) =>
584   - item.itemValue !== CommandTypeEnum.ATTRIBUTE.toString() || item.itemText != '属性'
585   - );
586   - } catch (error) {
587   - return [];
588   - }
589   - },
590   - labelField: 'itemText',
591   - valueField: 'itemValue',
592   - params: {
593   - dictCode: 'custom_define',
594   - },
595   - numberToString: true,
596   - getPopupContainer: (triggerNode) => triggerNode.parentNode,
597   - onChange: () => {
598   - setFieldsValue({ doContext: null, thingsModelId: null });
599   - },
600   - };
601   - },
602   - ifShow: ({ values }) => isDeviceOut(values.outTarget) && isPartOrAll(values.device),
603   - },
604   - //新增代码2022-11-23
605   - {
606   - field: 'callType',
607   - label: '',
608   - required: true,
609   - component: 'ApiSelect',
610   - colProps: {
611   - span: 6,
612   - },
613   - defaultValue: 'SYNC',
614   - componentProps: {
615   - placeholder: '请选择类型',
616   - api: findDictItemByCode,
617   - params: {
618   - dictCode: 'call_mode',
619   - },
620   - labelField: 'itemText',
621   - valueField: 'itemValue',
622   - getPopupContainer: (triggerNode) => triggerNode.parentNode,
623   - },
624   - ifShow: ({ values }) =>
625   - isDeviceOut(values.outTarget) && isPartOrAll(values.device) && isDefine(values.commandType),
626   - },
627   - {
628   - field: 'serviceIdentifier',
629   - label: '',
630   - component: 'Input',
631   - show: false,
632   - },
633   - {
634   - field: 'thingsModelKeys',
635   - label: '',
636   - show: false,
637   - component: 'Select',
638   - componentProps: {
639   - mode: 'multiple',
640   - },
641   - },
642   - {
643   - field: 'thingsModelId',
644   - label: '',
645   - required: true,
646   - component: 'ApiSelect',
647   - colProps: {
648   - span: 6,
649   - },
650   - componentProps: ({ formModel, formActionType }) => {
651   - const { updateSchema, setFieldsValue } = formActionType;
652   - const deviceProfileId = Reflect.get(formModel, 'deviceProfileId');
653   - const thingsModelId = Reflect.get(formModel, 'thingsModelId');
654   - const transportType = Reflect.get(formModel, 'transportType');
655   - return {
656   - placeholder: '请选择服务',
657   - api: async (params: Recordable) => {
658   - try {
659   - if (!Reflect.get(params, 'deviceProfileId')) return [];
660   - const record =
661   - (await getModelServices(params as Record<'deviceProfileId', string>)) || [];
662   - const selected = record.find((item) => item.id === thingsModelId);
663   - selected &&
664   - updateSchema({
665   - field: 'serviceInputValue',
666   - componentProps: {
667   - inputData: selected?.functionJson.inputData,
668   - },
669   - });
670   - selected &&
671   - setFieldsValue({
672   - callType: selected.callType,
673   - serviceIdentifier: selected?.identifier,
674   - thingsModelKeys: isArray(selected?.functionJson?.inputData)
675   - ? selected?.functionJson?.inputData
676   - .filter((item) => item.accessMode === ReadAndWriteEnum.READ_AND_WRITE)
677   - .map((item) => item.identifier)
678   - : [],
679   - });
680   - return record;
681   - } catch (error) {
682   - console.error(error);
683   - return [];
684   - }
685   - },
686   - params: {
687   - deviceProfileId,
688   - },
689   - labelField: 'functionName',
690   - valueField: 'id',
691   - getPopupContainer: (triggerNode) => triggerNode.parentNode,
692   - onChange: (_, options: ModelOfMatterParams) => {
693   - if (options) {
694   - // setFieldsValue({ doContext: { ...options.functionJson, callType: options.callType } });
695   - // if ( )
696   - const record = {
697   - callType: options.callType,
698   - serviceIdentifier: options.identifier,
699   - thingsModelKeys: isArray(options?.functionJson?.inputData)
700   - ? options?.functionJson?.inputData
701   - .filter((item) => item.accessMode === ReadAndWriteEnum.READ_AND_WRITE)
702   - .map((item) => item.identifier)
703   - : [],
704   - };
705   - transportType === TransportTypeEnum.TCP
706   - ? Object.assign(record, {
707   - tcpServiceCommand: options.functionJson?.inputData?.[0]?.serviceCommand,
708   - })
709   - : updateSchema({
710   - field: 'serviceInputValue',
711   - componentProps: {
712   - inputData: options.functionJson.inputData,
713   - },
714   - });
715   -
716   - setFieldsValue(record);
717   - } else {
718   - setFieldsValue({ serviceIdentifier: null });
719   - }
720   - },
721   - };
722   - },
723   - ifShow: ({ values }) => isDeviceOut(values.outTarget) && isService(values.commandType),
724   - },
725   - //新增代码2022-11-23
726   - {
727   - field: 'alarm_config',
728   - label: '',
729   - component: 'Input',
730   - componentProps: {
731   - placeholder: '请选择告警配置',
732   - },
733   - slot: 'alarmConfigSlot',
734   - ifShow: ({ values }) => values.outTarget === 'MSG_NOTIFY',
735   - colProps: { span: 6 },
736   - },
737   - //新增代码2022-11-23
738   - {
739   - field: 'doContext',
740   - component: 'Input',
741   - label: '',
742   - slot: 'doContext',
743   - show: ({ values }) => {
744   - return (
745   - isDeviceOut(values.outTarget) && isPartOrAll(values.device) && isDefine(values.commandType)
746   - );
747   - },
748   - colProps: {
749   - span: 24,
750   - },
751   - },
752   - //新增代码2022-11-23
753   - {
754   - field: 'alarm_level',
755   - component: 'Select',
756   - label: '',
757   - show: ({ values }) => isAlarmOut(values.outTarget),
758   - // dynamicRules: (params) => {
759   - // const { outTarget } = params.values;
760   - // return [
761   - // {
762   - // required: outTarget == 'MSG_NOTIFY' ? true : false,
763   - // validator: (_, value) => {
764   - // if (!value) return Promise.reject('请选择告警配置');
765   - // Promise.resolve();
766   - // },
767   - // },
768   - // ];
769   - // },
770   - componentProps: {
771   - placeholder: '请选择告警等级',
772   - options: [
773   - {
774   - label: '紧急',
775   - value: 'CRITICAL',
776   - },
777   - {
778   - label: '重要',
779   - value: 'MAJOR',
780   - },
781   - {
782   - label: '次要',
783   - value: 'MINOR',
784   - },
785   - {
786   - label: '警告',
787   - value: 'WARNING',
788   - },
789   - {
790   - label: '不确定',
791   - value: 'INDETERMINATE',
792   - },
793   - ],
794   - },
795   - colProps: {
796   - span: 6,
797   - },
798   - },
799   - {
800   - field: 'clear_alarm',
801   - component: 'Checkbox',
802   - label: '',
803   - show: ({ values }) => isAlarmOut(values.outTarget),
804   - colProps: {
805   - span: 8,
806   - },
807   - slot: 'clearAlarm',
808   - },
809   - {
810   - field: 'tcpServiceCommand',
811   - component: 'Input',
812   - label: '服务命令',
813   - colProps: { span: 24 },
814   - dynamicDisabled: true,
815   - show: ({ values }) =>
816   - values['thingsModelId'] && values['transportType'] === TransportTypeEnum.TCP,
817   - },
818   - {
819   - field: 'serviceInputValue',
820   - component: 'ObjectModelValidateForm',
821   - label: '',
822   - changeEvent: 'update:value',
823   - valueField: 'value',
824   - show: ({ values }) =>
825   - values['thingsModelId'] && values['transportType'] !== TransportTypeEnum.TCP,
826   - colProps: {
827   - span: 24,
828   - },
829   - componentProps: {},
830   - },
831   -];
832   -
833   -export const alarmScheduleSchemas: FormSchema[] = [
834   - {
835   - field: 'schedule',
836   - label: '',
837   - component: 'Select',
838   - componentProps({ formActionType }) {
839   - const { resetFields } = formActionType;
840   - return {
841   - options: scheduleOptions,
842   - allowClear: false,
843   - onChange() {
844   - resetFields();
845   - },
846   - };
847   - },
848   - },
849   - {
850   - field: 'timezone',
851   - label: '时区',
852   - component: 'Select',
853   - defaultValue: 'Asia/Shanghai',
854   - componentProps: {
855   - options: [
856   - {
857   - label: 'Asia/Shanghai',
858   - value: 'Asia/Shanghai',
859   - },
860   - ],
861   - allowClear: false,
862   - },
863   - ifShow: ({ values }) => values.schedule !== 'ANY_TIME',
864   - },
865   - {
866   - field: 'daysOfWeek',
867   - label: '天',
868   - component: 'CheckboxGroup',
869   - rules: [
870   - {
871   - message: '请至少选择一天',
872   - required: true,
873   - },
874   - ],
875   - componentProps: {
876   - options: [
877   - { label: '星期一', value: 1 },
878   - { label: '星期二', value: 2 },
879   - { label: '星期三', value: 3 },
880   - { label: '星期四', value: 4 },
881   - { label: '星期五', value: 5 },
882   - { label: '星期六', value: 6 },
883   - { label: '星期日', value: 7 },
884   - ],
885   - },
886   - colProps: {
887   - span: 24,
888   - },
889   - ifShow: ({ values }) => values.schedule === 'SPECIFIC_TIME',
890   - },
891   - {
892   - field: 'time',
893   - label: '时间',
894   - labelWidth: 40,
895   - component: 'RangePicker',
896   - ifShow: ({ values }) => values.schedule === 'SPECIFIC_TIME',
897   - slot: 'timing',
898   - },
899   - {
900   - field: 'day',
901   - label: '天',
902   - component: 'CheckboxGroup',
903   - slot: 'customEnable',
904   - ifShow: ({ values }) => values.schedule === 'CUSTOM',
905   - },
906   -];
... ...
... ... @@ -8,12 +8,12 @@ import {
8 8 } from '../DevicePicker';
9 9 import { PollCommandInput, ModeEnum } from '../PollCommandInput';
10 10 import { DeviceProfileModel } from '/@/api/device/model/deviceModel';
11   -import { TransportTypeEnum } from '/@/views/device/profiles/components/TransportDescript/const';
12 11 import { JSONEditorValidator } from '/@/components/CodeEditor/src/JSONEditor';
13 12 import { BooleanStringEnum, TimeUnitEnum, TimeUnitNameEnum } from '/@/enums/toolEnum';
14 13 import { dateUtil } from '/@/utils/dateUtil';
15 14 import { ProductPicker, validateProductPicker } from '../ProductPicker';
16 15 import { useGlobSetting } from '/@/hooks/setting';
  16 +import { TransportTypeEnum } from '/@/enums/deviceEnum';
17 17
18 18 useComponentRegister('DevicePicker', DevicePicker);
19 19 useComponentRegister('ProductPicker', ProductPicker);
... ...
1 1 import { ref, unref } from 'vue';
2   -import { TransportTypeEnum } from '/@/views/device/profiles/components/TransportDescript/const';
3   -import { CommandTypeEnum } from '/@/views/rule/linkedge/config/config.data';
4 2 import { TaskTypeEnum } from '/@/views/task/center/config';
5 3 import { genModbusCommand } from '/@/api/task';
6 4 import { useMessage } from '/@/hooks/web/useMessage';
7 5 import { SingleToHex } from '/@/views/device/list/cpns/tabs/ObjectModelCommandDeliveryModal/config';
  6 +import { CommandTypeEnum } from '/@/enums/linkedgeEnum';
  7 +import { TransportTypeEnum } from '/@/enums/deviceEnum';
8 8
9 9 const getArray = (values) => {
10 10 const str = values.replace(/\s+/g, '');
... ...
... ... @@ -10,12 +10,12 @@ import { getModelServices } from '/@/api/device/modelOfMatter';
10 10 import { findDictItemByCode } from '/@/api/system/dict';
11 11 import { FormSchema, useComponentRegister } from '/@/components/Form';
12 12 import { OrgTreeSelect } from '/@/views/common/OrgTreeSelect';
13   -import { TransportTypeEnum } from '/@/views/device/profiles/components/TransportDescript/const';
14   -import { CommandTypeEnum } from '/@/views/rule/linkedge/config/config.data';
15 13 import { DataActionModeEnum } from '/@/enums/toolEnum';
16 14 import { TaskTypeEnum } from '/@/views/task/center/config';
17 15 import { createPickerSearch } from '/@/utils/pickerSearch';
18 16 import { DataTypeEnum } from '/@/enums/objectModelEnum';
  17 +import { CommandTypeEnum } from '/@/enums/linkedgeEnum';
  18 +import { TransportTypeEnum } from '/@/enums/deviceEnum';
19 19
20 20 useComponentRegister('OrgTreeSelect', OrgTreeSelect);
21 21
... ...
... ... @@ -2,8 +2,8 @@ import { ref } from 'vue';
2 2 import { DataSource } from '../../palette/types';
3 3 import { sendCommandOneway, sendCommandTwoway } from '/@/api/dataBoard';
4 4 import { useMessage } from '/@/hooks/web/useMessage';
5   -import { TransportTypeEnum } from '/@/views/device/profiles/components/TransportDescript/const';
6 5 import { ServiceCallTypeEnum } from '/@/enums/toolEnum';
  6 +import { TransportTypeEnum } from '/@/enums/deviceEnum';
7 7
8 8 const { createMessage } = useMessage();
9 9 export function useSendCommand() {
... ...