Commit 0e29512e91b4005c3c4351d837ace794e72ff22c

Authored by ww
1 parent 59bcbf55

fix: 修复部分节点表单

Showing 52 changed files with 762 additions and 433 deletions
1   -import { DeviceInfoItemType, DeviceTypeItem } from './model';
  1 +import { DeviceInfoItemType, DeviceTypeItem, PageParams } from './model';
2 2 import { TBPaginationResult } from '/#/axios';
3 3 import { defHttp } from '/@/utils/http/axios';
4 4
... ... @@ -8,6 +8,17 @@ enum Api {
8 8 TENANT_QUEUE = '/tenant/queues',
9 9 }
10 10
  11 +enum Entity {
  12 + DEVICES = '/tenant/devices',
  13 + ASSETS = '/tenant/assets',
  14 + ENTITY_VIEW = '/tenant/entityViews',
  15 + TENANT = '/tenant',
  16 + CUSTOMER = '/customers',
  17 + DASHBOARD = '/tenant/dashboards',
  18 + USER = '/users',
  19 + EDGE = '/tenant/edges',
  20 +}
  21 +
11 22 export const getDeviceInfos = () => {
12 23 return defHttp.get<TBPaginationResult<DeviceInfoItemType>>(
13 24 {
... ... @@ -35,3 +46,99 @@ export const getTenantQueue = (params: Recordable) => {
35 46 { joinPrefix: false }
36 47 );
37 48 };
  49 +
  50 +export const getEntityDevice = (params: PageParams) => {
  51 + return defHttp.get(
  52 + {
  53 + url: Entity.DEVICES,
  54 + params,
  55 + },
  56 + {
  57 + joinPrefix: false,
  58 + }
  59 + );
  60 +};
  61 +
  62 +export const getEntityAssets = (params: PageParams) => {
  63 + return defHttp.get(
  64 + {
  65 + url: Entity.ASSETS,
  66 + params,
  67 + },
  68 + {
  69 + joinPrefix: false,
  70 + }
  71 + );
  72 +};
  73 +
  74 +export const getEntityViews = (params: PageParams) => {
  75 + return defHttp.get(
  76 + {
  77 + url: Entity.ENTITY_VIEW,
  78 + params,
  79 + },
  80 + {
  81 + joinPrefix: false,
  82 + }
  83 + );
  84 +};
  85 +
  86 +export const getEntityTenant = (params: Record<'tenantId', string>) => {
  87 + return defHttp.get(
  88 + {
  89 + url: `${Entity.TENANT}/${params.tenantId}`,
  90 + params,
  91 + },
  92 + {
  93 + joinPrefix: false,
  94 + }
  95 + );
  96 +};
  97 +
  98 +export const getEntityCustomer = (params: PageParams) => {
  99 + return defHttp.get(
  100 + {
  101 + url: Entity.CUSTOMER,
  102 + params,
  103 + },
  104 + {
  105 + joinPrefix: false,
  106 + }
  107 + );
  108 +};
  109 +
  110 +export const getEntityUser = (params: PageParams) => {
  111 + return defHttp.get(
  112 + {
  113 + url: Entity.USER,
  114 + params,
  115 + },
  116 + {
  117 + joinPrefix: false,
  118 + }
  119 + );
  120 +};
  121 +
  122 +export const getEntityDashboard = (params: PageParams) => {
  123 + return defHttp.get(
  124 + {
  125 + url: Entity.DASHBOARD,
  126 + params,
  127 + },
  128 + {
  129 + joinPrefix: false,
  130 + }
  131 + );
  132 +};
  133 +
  134 +export const getEntityEdge = (params: PageParams) => {
  135 + return defHttp.get(
  136 + {
  137 + url: Entity.EDGE,
  138 + params,
  139 + },
  140 + {
  141 + joinPrefix: false,
  142 + }
  143 + );
  144 +};
... ...
... ... @@ -44,3 +44,11 @@ export interface DeviceTypeItem {
44 44 entityType: string;
45 45 type: string;
46 46 }
  47 +
  48 +export interface PageParams {
  49 + pageSize?: number;
  50 + page?: number;
  51 + textSearch?: string;
  52 + sortProperty?: string;
  53 + sortOrder?: string;
  54 +}
... ...
  1 +import { RuleChainPaginationItemType } from './model/type';
  2 +import { TBPaginationResult } from '/#/axios';
1 3 import { defHttp } from '/@/utils/http/axios';
2 4 import { RuleChainType } from '/@/views/rule/designer/types/ruleNode';
3 5
... ... @@ -26,7 +28,7 @@ export const saveRuleChainData = (data: RuleChainType) => {
26 28 };
27 29
28 30 export const getRuleChains = (params: Recordable) => {
29   - return defHttp.get(
  31 + return defHttp.get<TBPaginationResult<RuleChainPaginationItemType>>(
30 32 {
31 33 url: Api.GET_RULE_CHAINES,
32 34 params,
... ...
  1 +export interface RuleChainPaginationItemType {
  2 + id: Id;
  3 + createdTime: number;
  4 + additionalInfo?: AdditionalInfo;
  5 + tenantId: Id;
  6 + name: string;
  7 + type: string;
  8 + firstRuleNodeId: Id;
  9 + root: boolean;
  10 + debugMode: boolean;
  11 + configuration: any;
  12 +}
  13 +
  14 +export interface Id {
  15 + entityType: string;
  16 + id: string;
  17 +}
  18 +
  19 +export interface AdditionalInfo {
  20 + description: string;
  21 +}
... ...
... ... @@ -28,6 +28,7 @@
28 28 labelField?: string;
29 29 valueField?: string;
30 30 immediate?: boolean;
  31 + searchField?: string;
31 32 queryEmptyDataAgin?: boolean;
32 33 onChangeHook?: ({ options }: OnChangeHookParams) => void;
33 34 dropdownVisibleChangeHook?: ({ options }: OnChangeHookParams) => void;
... ... @@ -36,6 +37,7 @@
36 37 resultField: '',
37 38 labelField: 'label',
38 39 valueField: 'value',
  40 + searchField: 'text',
39 41 immediate: true,
40 42 queryEmptyDataAgin: true,
41 43 }
... ... @@ -55,16 +57,26 @@
55 57 return unref(options).reduce((prev, next: Recordable) => {
56 58 if (next) {
57 59 const value = get(next, valueField);
  60 + const label = get(next, labelField);
58 61 prev.push({
59   - label: next[labelField],
60   - value: numberToString ? `${value}` : value,
61 62 ...omit(next, [labelField, valueField]),
  63 + label,
  64 + value: numberToString ? `${value}` : value,
62 65 });
63 66 }
64 67 return prev;
65 68 }, [] as OptionsItem[]);
66 69 });
67 70
  71 + const getBindProps = computed(() => {
  72 + const { searchApi } = props;
  73 + return {
  74 + ...attrs,
  75 + showSearch: true,
  76 + filterOption: !searchApi,
  77 + };
  78 + });
  79 +
68 80 watchEffect(() => {
69 81 props.immediate && fetch();
70 82 });
... ... @@ -125,7 +137,7 @@
125 137
126 138 const debounceSearchFunction = useDebounceFn(handleSearch, 300);
127 139 async function handleSearch(params?: string) {
128   - let { searchApi, api } = props;
  140 + let { searchApi, api, searchField } = props;
129 141 if (!searchApi || !isFunction(searchApi)) {
130 142 if (!api || !isFunction(api)) return;
131 143 searchApi = api;
... ... @@ -133,7 +145,7 @@
133 145 options.value = [];
134 146 try {
135 147 loading.value = true;
136   - const res = await searchApi({ ...props.params, text: params });
  148 + const res = await searchApi({ ...props.params, [searchField]: params });
137 149 if (Array.isArray(res)) {
138 150 options.value = res;
139 151 emitChange();
... ... @@ -154,8 +166,7 @@
154 166 <template>
155 167 <Select
156 168 @dropdownVisibleChange="handleFetch"
157   - v-bind="attrs"
158   - show-search
  169 + v-bind="getBindProps"
159 170 @change="handleChange"
160 171 :options="getOptions"
161 172 @search="debounceSearchFunction"
... ...
... ... @@ -45,7 +45,7 @@ export enum EntityTypeNameEnum {
45 45 CUSTOMER = '客户',
46 46 USER = '用户',
47 47 DASHBOARD = '仪表板',
48   - EDGE = 'Edge',
  48 + EDGE = '边缘',
49 49 }
50 50
51 51 /**
... ... @@ -56,30 +56,11 @@ export enum PerimeterTypeEnum {
56 56 CIRCLE = 'CIRCLE',
57 57 }
58 58
59   -/**
60   - * @description Filter Range util
61   - */
62   -export enum RangeUtilEnum {
63   - METER = 'METER',
64   - KILOMETER = 'KILOMETER',
65   - FOOT = 'FOOT',
66   - MILE = 'MILE',
67   - NAUTICAL_MILE = 'NAUTICAL_MILE',
68   -}
69   -
70   -export enum RangeUtilNameEnum {
71   - METER = 'Meter',
72   - KILOMETER = 'Kilometer',
73   - FOOT = 'Foot',
74   - MILE = 'Mile',
75   - NAUTICAL_MILE = 'Nautical mile',
76   -}
77   -
78   -export enum MessageTypesFilterEnum {
79   - POST_ATTRIBUTES = 'POST_ATTRIBUTES',
80   - POST_TELEMETRY = 'POST_TELEMETRY',
81   - RPC_REQUEST_FROM_DEVICE = 'RPC_REQUEST_FROM_DEVICE',
82   - RPC_REQUEST_TO_DEVICE = 'RPC_REQUEST_TO_DEVICE',
  59 +export enum MessageTypesEnum {
  60 + POST_ATTRIBUTES_REQUEST = 'POST_ATTRIBUTES_REQUEST',
  61 + POST_TELEMETRY_REQUEST = 'POST_TELEMETRY_REQUEST',
  62 + TO_SERVER_RPC_REQUEST = 'TO_SERVER_RPC_REQUEST',
  63 + RPC_CALL_FROM_SERVER_TO_DEVICE = 'RPC_CALL_FROM_SERVER_TO_DEVICE',
83 64 ACTIVITY_EVENT = 'ACTIVITY_EVENT',
84 65 INACTIVITY_EVENT = 'INACTIVITY_EVENT',
85 66 CONNECT_EVENT = 'CONNECT_EVENT',
... ... @@ -100,11 +81,11 @@ export enum MessageTypesFilterEnum {
100 81 RPC_FAILED = 'RPC_FAILED',
101 82 }
102 83
103   -export enum MessageTypesFilterNameEnum {
104   - POST_ATTRIBUTES = 'Post attributes',
105   - POST_TELEMETRY = 'Post telemetry',
106   - RPC_REQUEST_FROM_DEVICE = 'RPC Request from Device',
107   - RPC_REQUEST_TO_DEVICE = 'RPC Request to Device',
  84 +export enum MessageTypesNameEnum {
  85 + POST_ATTRIBUTES_REQUEST = 'Post attributes',
  86 + POST_TELEMETRY_REQUEST = 'Post telemetry',
  87 + TO_SERVER_RPC_REQUEST = 'RPC Request from Device',
  88 + RPC_CALL_FROM_SERVER_TO_DEVICE = 'RPC Request to Device',
108 89 ACTIVITY_EVENT = 'Activity Event',
109 90 INACTIVITY_EVENT = 'Inactivity Event',
110 91 CONNECT_EVENT = 'Connect Event',
... ... @@ -124,6 +105,24 @@ export enum MessageTypesFilterNameEnum {
124 105 RPC_TIMEOUT = 'RPC Timeout',
125 106 RPC_FAILED = 'RPC Failed',
126 107 }
  108 +/**
  109 + * @description Filter Range util
  110 + */
  111 +export enum RangeUtilEnum {
  112 + METER = 'METER',
  113 + KILOMETER = 'KILOMETER',
  114 + FOOT = 'FOOT',
  115 + MILE = 'MILE',
  116 + NAUTICAL_MILE = 'NAUTICAL_MILE',
  117 +}
  118 +
  119 +export enum RangeUtilNameEnum {
  120 + METER = 'Meter',
  121 + KILOMETER = 'Kilometer',
  122 + FOOT = 'Foot',
  123 + MILE = 'Mile',
  124 + NAUTICAL_MILE = 'Nautical mile',
  125 +}
127 126
128 127 // Enrichment Customer details
129 128 export enum DetailsListEnum {
... ...
... ... @@ -85,7 +85,7 @@ export enum DelayDeprecatedFieldsEnum {
85 85 export enum DelayDeprecatedFieldsNameEnum {
86 86 USE_METADATA_PERIOD_IN_SECONDS_PATTERNS = 'Use period in seconds pattern',
87 87 PERIOD_IN_SECONDS = 'Period in seconds',
88   - PERIOD_IN_SECONDS_PATTERN = 'Period in seconds',
  88 + PERIOD_IN_SECONDS_PATTERN = 'Period in seconds pattern',
89 89 MAX_PENDING_MSGS = 'Maximum pending messages',
90 90 }
91 91
... ... @@ -131,8 +131,8 @@ export enum GeneratorFieldsNameEnum {
131 131 MSG_COUNT = 'Message count(0 - unlimited)',
132 132 PERIOD_IN_SECONDS = 'Period in seconds',
133 133 JS_SCRIPT = 'Generate',
134   - // ORIGINATOR_ID = 'Originator',
135   - ORIGINATOR_TYPE = 'Originator',
  134 + // ORIGINATOR_ID = '资产',
  135 + ORIGINATOR_TYPE = '类型',
136 136 }
137 137
138 138 // Gps geofencing events
... ...
... ... @@ -71,6 +71,7 @@ export enum OriginatorFieldsNameEnum {
71 71
72 72 // Enrichment originator telemetry
73 73 export enum OriginatorTelemetryFieldsEnum {
  74 + LATEST_TS_KEY_NAMES = 'latestTsKeyNames',
74 75 AGGREGATION = 'aggregation',
75 76 FETCH_MODE = 'fetchMode',
76 77 ORDER_BY = 'orderBy',
... ... @@ -85,6 +86,7 @@ export enum OriginatorTelemetryFieldsEnum {
85 86 }
86 87
87 88 export enum OriginatorTelemetryFieldsNameEnum {
  89 + LATEST_TS_KEY_NAMES = 'Latest timeseries',
88 90 AGGREGATION = '数据聚合功能',
89 91 FETCH_MODE = 'Fetch Mode',
90 92 ORDER_BY = 'Order by',
... ... @@ -102,11 +104,13 @@ export enum OriginatorTelemetryFieldsNameEnum {
102 104 export enum RelatedAttributesFieldsEnum {
103 105 RELATIONS_QUERY = 'relationsQuery',
104 106 ATTR_MAPPING = 'attrMapping',
  107 + TELEMETRY = 'telemetry',
105 108 }
106 109
107   -export enum RelatedAttributesFieldNameEnum {
  110 +export enum RelatedAttributesFieldsNameEnum {
108 111 RELATIONS_QUERY = 'Relations query',
109 112 ATTR_MAPPING = 'Attributes mapping',
  113 + TELEMETRY = 'Latest telemetry',
110 114 }
111 115
112 116 // Enrichment Related device Attributes
... ... @@ -144,6 +148,17 @@ export enum RelatedDeviceAttributeFieldsNameEnum {
144 148 DEVICE_TYPES = '设备类型',
145 149 }
146 150
  151 +// Tenant attributes
  152 +export enum TenantAttributesFieldsEnum {
  153 + ATTR_MAPING = 'attrMapping',
  154 + TELEMETRY = 'telemetry',
  155 +}
  156 +
  157 +export enum TenantAttributesFieldsNameEnum {
  158 + ATTR_MAPING = 'attrMapping',
  159 + TELEMETRY = 'Latest telemetry',
  160 +}
  161 +
147 162 // Enrichment Tenant details
148 163 export enum TenantDetailsFieldsEnum {
149 164 DETAILS_LIST = 'detailsList',
... ... @@ -154,29 +169,3 @@ export enum TenantDetailsFieldsNameEnum {
154 169 DETAILS_LIST = 'Add selected details to message metadata',
155 170 ADD_TO_METADATA = 'Select entity details',
156 171 }
157   -
158   -export const EnrichmentCategoryFormFields = {
159   - ...CalculateDeltaFieldsEnum,
160   - ...CustomerAttributesFieldsEnum,
161   - ...CustomerDetailsFieldsEnum,
162   - ...OriginatorAttributesEnum,
163   - ...OriginatorFieldsEnum,
164   - ...OriginatorTelemetryFieldsEnum,
165   - ...RelatedAttributesFieldsEnum,
166   - ...RelatedDeviceAttributeFieldsEnum,
167   - ...TenantDetailsFieldsEnum,
168   -};
169   -
170   -export const EnrichmentCategoryFormFieldsName = {
171   - ...CalculateDeltaFieldsNameEnum,
172   - ...CustomerAttributesFieldsNameEnum,
173   - ...CustomerDetailsFieldsNameEnum,
174   - ...OriginatorAttributesNameEnum,
175   - ...OriginatorFieldsNameEnum,
176   - ...OriginatorTelemetryFieldsNameEnum,
177   - ...RelatedAttributesFieldNameEnum,
178   - ...RelatedDeviceAttributeFieldsNameEnum,
179   - ...TenantDetailsFieldsNameEnum,
180   -};
181   -
182   -export type EnrichmentCategoryType = typeof EnrichmentCategoryFormFields;
... ...
... ... @@ -244,23 +244,23 @@ export enum RestApiCallFieldsEnum {
244 244
245 245 export enum RestApiCallFieldsNameEnum {
246 246 REST_ENDPOINT_URL_PATTERN = 'Endpoint URL pattern',
247   - REQUEST_METHOD = 'requestMethod',
248   - USE_SIMPLE_CLIENT_HTTP_FACTORY = 'useSimpleClientHttpFactory',
249   - IGNORE_REQUEST_BODY = 'ignoreRequestBody',
250   - ENABLE_PROXY = 'enableProxy',
251   - USE_SYSTEM_PROXY_PROPERTIES = 'useSystemProxyProperties',
252   - PROXY_SCHEME = 'proxyScheme',
253   - PROXY_HOST = 'proxyHost',
254   - PROXY_PORT = 'proxyPort',
255   - PROXY_USER = 'proxyUser',
256   - PROXY_PASSWORD = 'proxyPassword',
257   - READ_TIMEOUT_MS = 'readTimeoutMs',
258   - MAX_PARALLEL_REQUESTS_COUNT = 'maxParallelRequestsCount',
259   - HEADERS = 'headers',
260   - USE_REDIS_QUEUE_FOR_MSG_PERSISTENCE = 'useRedisQueueForMsgPersistence',
261   - TRIM_QUEUE = 'trimQueue',
262   - MAX_QUEUE_SIZE = 'maxQueueSize',
263   - CREDENTIALS = 'credentials',
  247 + REQUEST_METHOD = 'Request method',
  248 + USE_SIMPLE_CLIENT_HTTP_FACTORY = 'Use simple client HTTP factory',
  249 + IGNORE_REQUEST_BODY = 'Without request body',
  250 + ENABLE_PROXY = 'Enable proxy',
  251 + USE_SYSTEM_PROXY_PROPERTIES = 'Use system proxy properties',
  252 + PROXY_SCHEME = 'Proxy scheme',
  253 + PROXY_HOST = 'Proxy host',
  254 + PROXY_PORT = 'Proxy port',
  255 + PROXY_USER = 'Proxy user',
  256 + PROXY_PASSWORD = 'Proxy password',
  257 + READ_TIMEOUT_MS = 'Read timeout in millis',
  258 + MAX_PARALLEL_REQUESTS_COUNT = 'Max number of parallel request',
  259 + HEADERS = 'Header',
  260 + USE_REDIS_QUEUE_FOR_MSG_PERSISTENCE = 'Use redis queue for message persistence',
  261 + TRIM_QUEUE = 'Trim redis queue',
  262 + MAX_QUEUE_SIZE = 'Redis queue max size',
  263 + CREDENTIALS = 'Credentials',
264 264
265 265 TYPE = 'Credentials type',
266 266 PASSWORD = 'Password',
... ...
1 1 // Filter Check Alarm Status Fields
2   -export enum FilterCheckAlarmStatusFieldEnum {
  2 +export enum CheckAlarmStatusFieldEnum {
3 3 ALARM_STATUS_LIST = 'alarmStatusList',
4 4 }
5 5
6   -export enum FilterCheckAlarmStatusFieldNameEnum {
  6 +export enum CheckAlarmStatusFieldNameEnum {
7 7 ALARM_STATUS_LIST = 'Alarm status filter',
8 8 }
9 9
... ... @@ -90,24 +90,11 @@ export enum ScriptFieldsNameEnum {
90 90 JS_SCRIPT = 'Filter',
91 91 }
92 92
93   -export const FilterCategoryFormFields = {
94   - ...FilterCheckAlarmStatusFieldEnum,
95   - ...CheckExistenceFieldsEnum,
96   - ...CheckRelationFieldsEnum,
97   - ...GpsGeofencingFilterFieldsEnum,
98   - ...MessageTypeFieldsEnum,
99   - ...OriginatorTypeFieldsEnum,
100   - ...ScriptFieldsEnum,
101   -};
102   -
103   -export const FilterCategoryFormFieldsName = {
104   - ...FilterCheckAlarmStatusFieldNameEnum,
105   - ...CheckExistenceFieldsNameEnum,
106   - ...CheckRelationFieldsNameEnum,
107   - ...GpsGeofencingFilterFieldsNameEnum,
108   - ...MessageTypeFieldsNameEnum,
109   - ...OriginatorTypeFieldsNameEnum,
110   - ...ScriptFieldsNameEnum,
111   -};
  93 +// Filter Switch
  94 +export enum SwitchFieldsEnum {
  95 + JS_SCRIPT = 'jsScript',
  96 +}
112 97
113   -export type FilterCategoryFormType = typeof FilterCategoryFormFields;
  98 +export enum SwitchFieldsNameEnum {
  99 + JS_SCRIPT = 'Filter',
  100 +}
... ...
1 1 import { CommonFields, CommonFieldsName } from './formField/common';
2   -import {
3   - EnrichmentCategoryFormFields,
4   - EnrichmentCategoryFormFieldsName,
5   -} from './formField/enrichment';
6   -import { FilterCategoryFormFields, FilterCategoryFormFieldsName } from './formField/filter';
7 2
8 3 export enum FetchNodeComFlagTypeENum {
9 4 CONNECTION_MODAL = 'CONNECTION_MODAL',
... ... @@ -20,12 +15,8 @@ export enum EdgeBindDataFieldNameEnum {
20 15
21 16 export const NodeBindDataFieldEnum = {
22 17 ...CommonFields,
23   - ...FilterCategoryFormFields,
24   - ...EnrichmentCategoryFormFields,
25 18 };
26 19
27 20 export const NodeBindDataFieldNameEnum = {
28 21 ...CommonFieldsName,
29   - ...FilterCategoryFormFieldsName,
30   - ...EnrichmentCategoryFormFieldsName,
31 22 };
... ...
... ... @@ -14,7 +14,7 @@ export function useInputNode() {
14 14 description: '规则链的逻辑输入,将传入消息转发到下一个相关规则节点。',
15 15 },
16 16 },
17   - { id, draggable: false }
  17 + { id, draggable: false, selectable: false }
18 18 );
19 19
20 20 return newNode;
... ...
... ... @@ -36,6 +36,7 @@ export const formSchemas: FormSchema[] = [
36 36 label: EntityTypeNameEnum[value],
37 37 value,
38 38 })),
  39 + getPopupContainer: () => document.body,
39 40 placeholder: `请选择${CreateRelationFieldsNameEnum.ENTITY_TYPE}`,
40 41 },
41 42 },
... ... @@ -49,7 +50,7 @@ export const formSchemas: FormSchema[] = [
49 50 'Hint: use ${metadataKey} for value from metadata, $[messageKey] for value from message body',
50 51 ],
51 52 componentProps: {
52   - placeholder: `请选择${CreateRelationFieldsNameEnum.ENTITY_NAME_PATTERN}`,
  53 + placeholder: `请输入${CreateRelationFieldsNameEnum.ENTITY_NAME_PATTERN}`,
53 54 },
54 55 },
55 56 {
... ... @@ -83,33 +84,31 @@ export const formSchemas: FormSchema[] = [
83 84 {
84 85 field: CreateRelationFieldsEnum.CREATE_ENTITY_IF_NOT_EXISTS,
85 86 component: 'Checkbox',
86   - label: '',
87   - helpMessage: 'Create a new entity set above if it does not exist.',
  87 + label: CreateRelationFieldsNameEnum.CREATE_ENTITY_IF_NOT_EXISTS,
  88 + helpMessage: '',
88 89 show: ({ model }) => {
89 90 const type = model[CreateRelationFieldsEnum.ENTITY_TYPE];
90 91 return [EntityTypeEnum.ASSET, EntityTypeEnum.DEVICE, EntityTypeEnum.CUSTOMER].includes(type);
91 92 },
92 93 renderComponentContent: () => ({
93   - default: () => CreateRelationFieldsNameEnum.CREATE_ENTITY_IF_NOT_EXISTS,
  94 + default: () => 'Create a new entity set above if it does not exist.',
94 95 }),
95 96 },
96 97 {
97 98 field: CreateRelationFieldsEnum.REMOVE_CURRENT_RELATIONS,
98 99 component: 'Checkbox',
99   - label: '',
100   - helpMessage:
101   - 'Removes current relations from the originator of the incoming message based on direction and type.',
  100 + label: CreateRelationFieldsNameEnum.REMOVE_CURRENT_RELATIONS,
102 101 renderComponentContent: () => ({
103   - default: () => CreateRelationFieldsNameEnum.REMOVE_CURRENT_RELATIONS,
  102 + default: () =>
  103 + 'Removes current relations from the originator of the incoming message based on direction and type.',
104 104 }),
105 105 },
106 106 {
107 107 field: CreateRelationFieldsEnum.CHANGE_ORIGINATOR_TO_RELATED_ENTITY,
108 108 component: 'Checkbox',
109   - label: '',
110   - helpMessage: 'Used to process submitted message as a message from another entity.',
  109 + label: CreateRelationFieldsNameEnum.CHANGE_ORIGINATOR_TO_RELATED_ENTITY,
111 110 renderComponentContent: () => ({
112   - default: () => CreateRelationFieldsNameEnum.CHANGE_ORIGINATOR_TO_RELATED_ENTITY,
  111 + default: () => 'Used to process submitted message as a message from another entity.',
113 112 }),
114 113 },
115 114 {
... ...
... ... @@ -19,7 +19,7 @@ export const formSchemas: FormSchema[] = [
19 19 component: 'Input',
20 20 label: DelayDeprecatedFieldsNameEnum.PERIOD_IN_SECONDS_PATTERN,
21 21 required: true,
22   - show: ({ model }) => model[DelayDeprecatedFieldsEnum.USE_METADATA_PERIOD_IN_SECONDS_PATTERNS],
  22 + ifShow: ({ model }) => model[DelayDeprecatedFieldsEnum.USE_METADATA_PERIOD_IN_SECONDS_PATTERNS],
23 23 componentProps: {
24 24 min: 0,
25 25 placeholder: `请输入${DelayDeprecatedFieldsNameEnum.PERIOD_IN_SECONDS_PATTERN}`,
... ... @@ -30,7 +30,8 @@ export const formSchemas: FormSchema[] = [
30 30 component: 'InputNumber',
31 31 label: DelayDeprecatedFieldsNameEnum.PERIOD_IN_SECONDS,
32 32 required: true,
33   - show: ({ model }) => !model[DelayDeprecatedFieldsEnum.USE_METADATA_PERIOD_IN_SECONDS_PATTERNS],
  33 + ifShow: ({ model }) =>
  34 + !model[DelayDeprecatedFieldsEnum.USE_METADATA_PERIOD_IN_SECONDS_PATTERNS],
34 35 componentProps: {
35 36 min: 0,
36 37 placeholder: `请输入${DelayDeprecatedFieldsNameEnum.PERIOD_IN_SECONDS}`,
... ...
1   -import { DirectionEnum, DirectionNameEnum } from '../../../enum/form';
  1 +import {
  2 + DirectionEnum,
  3 + DirectionNameEnum,
  4 + EntityTypeEnum,
  5 + EntityTypeNameEnum,
  6 +} from '../../../enum/form';
2 7 import {
3 8 DeleteRelationFieldsEnum,
4 9 DeleteRelationFieldsNameEnum,
... ... @@ -20,7 +25,6 @@ export const formSchemas: FormSchema[] = [
20 25 component: 'Select',
21 26 label: DeleteRelationFieldsNameEnum.DIRECTION,
22 27 required: true,
23   - colProps: { span: 12 },
24 28 show: ({ model }) => model[DeleteRelationFieldsEnum.DELETE_FOR_SINGLE_ENTITY],
25 29 componentProps: {
26 30 options: Object.keys(DirectionEnum).map((value) => ({
... ... @@ -32,6 +36,21 @@ export const formSchemas: FormSchema[] = [
32 36 },
33 37 },
34 38 {
  39 + field: DeleteRelationFieldsEnum.ENTITY_TYPE,
  40 + component: 'Select',
  41 + label: DeleteRelationFieldsNameEnum.ENTITY_TYPE,
  42 + required: true,
  43 + colProps: { span: 12 },
  44 + componentProps: {
  45 + options: Object.keys(EntityTypeEnum).map((value) => ({
  46 + label: EntityTypeNameEnum[value],
  47 + value,
  48 + })),
  49 + getPopupContainer: () => document.body,
  50 + placeholder: `请选择${DeleteRelationFieldsNameEnum.ENTITY_TYPE}`,
  51 + },
  52 + },
  53 + {
35 54 field: DeleteRelationFieldsEnum.ENTITY_NAME_PATTERN,
36 55 component: 'Input',
37 56 label: DeleteRelationFieldsNameEnum.ENTITY_NAME_PATTERN,
... ...
1 1 import { EntityTypeEnum, EntityTypeNameEnum } from '../../../enum/form';
2 2 import { GeneratorFieldsEnum, GeneratorFieldsNameEnum } from '../../../enum/formField/action';
3 3 import { JavascriptEditorWithTestModal } from '../../../src/components/JavaScriptFilterModal';
  4 +import { getEntityIdSelect } from '../../Filter/CheckRelation/create.config';
4 5 import { FormSchema, useComponentRegister } from '/@/components/Form';
5 6
6 7 useComponentRegister('JavascriptEditorWithTestModal', JavascriptEditorWithTestModal);
... ... @@ -37,13 +38,18 @@ export const formSchemas: FormSchema[] = [
37 38 value,
38 39 })),
39 40 placeholder: `请选择${GeneratorFieldsNameEnum.ORIGINATOR_TYPE}`,
  41 + getPopupContainer: () => document.body,
40 42 },
41 43 },
42 44 {
43 45 field: GeneratorFieldsEnum.ORIGINATOR_ID,
44   - component: 'Select',
45   - label: GeneratorFieldsNameEnum.ORIGINATOR_TYPE,
  46 + component: 'ApiSearchSelect',
  47 + label: ' ',
46 48 colProps: { span: 16 },
  49 + componentProps: ({ formModel }) => {
  50 + const type = formModel[GeneratorFieldsEnum.ORIGINATOR_TYPE];
  51 + return getEntityIdSelect(type);
  52 + },
47 53 },
48 54 {
49 55 field: GeneratorFieldsEnum.JS_SCRIPT,
... ...
... ... @@ -47,7 +47,7 @@ export const formSchemas: FormSchema[] = [
47 47 component: 'Input',
48 48 label: GpsGeofencingEventsFieldsNameEnum.PERIMETER_KEY_NAME,
49 49 required: true,
50   - show: ({ model }) =>
  50 + ifShow: ({ model }) =>
51 51 model[GpsGeofencingEventsFieldsEnum.PERIMETER_TYPE] === PerimeterTypeEnum.POLYGON &&
52 52 model[GpsGeofencingEventsFieldsEnum.FETCH_PERIMETER_INFO_FROM_MESSAGE_METADATA],
53 53 componentProps: {
... ... @@ -61,7 +61,7 @@ export const formSchemas: FormSchema[] = [
61 61 helpMessage:
62 62 'Please, use the following format for manual definition of polygon: [[lat1,lon1],[lat2,lon2], ... ,[latN,lonN]].',
63 63 required: true,
64   - show: ({ model }) =>
  64 + ifShow: ({ model }) =>
65 65 model[GpsGeofencingEventsFieldsEnum.PERIMETER_TYPE] === PerimeterTypeEnum.POLYGON &&
66 66 !model[GpsGeofencingEventsFieldsEnum.FETCH_PERIMETER_INFO_FROM_MESSAGE_METADATA],
67 67 componentProps: {
... ... @@ -74,7 +74,7 @@ export const formSchemas: FormSchema[] = [
74 74 label: GpsGeofencingEventsFieldsNameEnum.CENTER_LATITUDE,
75 75 colProps: { span: 12 },
76 76 required: true,
77   - show: ({ model }) =>
  77 + ifShow: ({ model }) =>
78 78 model[GpsGeofencingEventsFieldsEnum.PERIMETER_TYPE] === PerimeterTypeEnum.CIRCLE &&
79 79 !model[GpsGeofencingEventsFieldsEnum.FETCH_PERIMETER_INFO_FROM_MESSAGE_METADATA],
80 80 componentProps: {
... ... @@ -86,7 +86,7 @@ export const formSchemas: FormSchema[] = [
86 86 component: 'InputNumber',
87 87 label: GpsGeofencingEventsFieldsNameEnum.CENTER_LONGITUDE,
88 88 colProps: { span: 12 },
89   - show: ({ model }) =>
  89 + ifShow: ({ model }) =>
90 90 model[GpsGeofencingEventsFieldsEnum.PERIMETER_TYPE] === PerimeterTypeEnum.CIRCLE &&
91 91 !model[GpsGeofencingEventsFieldsEnum.FETCH_PERIMETER_INFO_FROM_MESSAGE_METADATA],
92 92 componentProps: {
... ... @@ -99,7 +99,7 @@ export const formSchemas: FormSchema[] = [
99 99 label: GpsGeofencingEventsFieldsNameEnum.RANGE,
100 100 colProps: { span: 12 },
101 101 required: true,
102   - show: ({ model }) =>
  102 + ifShow: ({ model }) =>
103 103 model[GpsGeofencingEventsFieldsEnum.PERIMETER_TYPE] === PerimeterTypeEnum.CIRCLE &&
104 104 !model[GpsGeofencingEventsFieldsEnum.FETCH_PERIMETER_INFO_FROM_MESSAGE_METADATA],
105 105 componentProps: {
... ... @@ -112,7 +112,7 @@ export const formSchemas: FormSchema[] = [
112 112 label: GpsGeofencingEventsFieldsNameEnum.RANGE_UNIT,
113 113 colProps: { span: 12 },
114 114 required: true,
115   - show: ({ model }) =>
  115 + ifShow: ({ model }) =>
116 116 model[GpsGeofencingEventsFieldsEnum.PERIMETER_TYPE] === PerimeterTypeEnum.CIRCLE &&
117 117 !model[GpsGeofencingEventsFieldsEnum.FETCH_PERIMETER_INFO_FROM_MESSAGE_METADATA],
118 118 componentProps: {
... ...
... ... @@ -21,6 +21,7 @@ export const formSchemas: FormSchema[] = [
21 21 field: SaveAttributesFieldsEnum.NOTIFY_DEVICE,
22 22 component: 'Checkbox',
23 23 label: SaveAttributesFieldsNameEnum.NOTIFY_DEVICE,
  24 + ifShow: ({ model }) => model[SaveAttributesFieldsEnum.SCOPE] === ScopeEnum.SHARED_SCOPE,
24 25 renderComponentContent: () => ({
25 26 default: () =>
26 27 'If the message arrives from the device, we will push it back to the device by default.',
... ...
  1 +import { h } from 'vue';
1 2 import { SaveEventFieldsEnum, SaveEventFieldsNameEnum } from '../../../enum/formField/action';
2 3 import { FormSchema } from '/@/components/Form';
3 4
4 5 export const formSchemas: FormSchema[] = [
5 6 {
  7 + field: 'content',
  8 + label: '',
  9 + component: 'Input',
  10 + renderColContent: () =>
  11 + h(
  12 + 'div',
  13 + { style: { color: 'red' } },
  14 + `定义的配置指令 'tkMsgEventNodeConfiguration' 不可用。`
  15 + ),
  16 + },
  17 + {
6 18 field: SaveEventFieldsEnum.CONFIGURATION,
7 19 component: 'JSONEditor',
8 20 label: SaveEventFieldsNameEnum.CONFIGURATION,
... ...
... ... @@ -28,7 +28,6 @@ export const formSchemas: FormSchema[] = [
28 28 {
29 29 required: true,
30 30 validator(_rule, value) {
31   - console.log(value);
32 31 if (!isObject(value) || !Object.keys(value).length)
33 32 return Promise.reject('至少应该指定一个字段映射。');
34 33 return Promise.resolve();
... ...
1   -import { NodeBindDataFieldEnum, NodeBindDataFieldNameEnum } from '../../../enum/node';
  1 +import {
  2 + CalculateDeltaFieldsEnum,
  3 + CalculateDeltaFieldsNameEnum,
  4 +} from '../../../enum/formField/enrichment';
2 5 import { FormSchema } from '/@/components/Form';
3 6
4 7 export const formSchemas: FormSchema[] = [
5 8 {
6   - field: NodeBindDataFieldEnum.INPUT_VALUE_KEY,
  9 + field: CalculateDeltaFieldsEnum.INPUT_VALUE_KEY,
7 10 component: 'Input',
8   - label: NodeBindDataFieldNameEnum.INPUT_VALUE_KEY,
  11 + label: CalculateDeltaFieldsNameEnum.INPUT_VALUE_KEY,
9 12 required: true,
10 13 colProps: { span: 8 },
  14 + componentProps: {
  15 + placeholder: `请输入${CalculateDeltaFieldsNameEnum.INPUT_VALUE_KEY}`,
  16 + },
11 17 },
12 18 {
13   - field: NodeBindDataFieldEnum.OUTPUT_VALUE_KEY,
  19 + field: CalculateDeltaFieldsEnum.OUTPUT_VALUE_KEY,
14 20 component: 'Input',
15   - label: NodeBindDataFieldNameEnum.OUTPUT_VALUE_KEY,
  21 + label: CalculateDeltaFieldsNameEnum.OUTPUT_VALUE_KEY,
16 22 required: true,
17 23 colProps: { span: 8 },
  24 + componentProps: {
  25 + placeholder: `请输入${CalculateDeltaFieldsNameEnum.OUTPUT_VALUE_KEY}`,
  26 + },
18 27 },
19 28 {
20   - field: NodeBindDataFieldEnum.ROUND,
  29 + field: CalculateDeltaFieldsEnum.ROUND,
21 30 component: 'InputNumber',
22   - label: NodeBindDataFieldNameEnum.ROUND,
  31 + label: CalculateDeltaFieldsNameEnum.ROUND,
23 32 colProps: { span: 8 },
24 33 componentProps: {
25 34 step: 1,
26 35 max: 15,
  36 + placeholder: `请输入${CalculateDeltaFieldsNameEnum.ROUND}`,
27 37 },
28 38 },
29 39 {
30   - field: NodeBindDataFieldEnum.USE_CACHE,
  40 + field: CalculateDeltaFieldsEnum.USE_CACHE,
31 41 component: 'Checkbox',
32 42 label: '',
33 43 renderComponentContent: () => {
34 44 return {
35   - default: () => NodeBindDataFieldNameEnum.USE_CACHE,
  45 + default: () => CalculateDeltaFieldsNameEnum.USE_CACHE,
36 46 };
37 47 },
38 48 },
39 49 {
40   - field: NodeBindDataFieldEnum.TELL_FAILURE_IF_DELTA_IS_NEGATIVE,
  50 + field: CalculateDeltaFieldsEnum.TELL_FAILURE_IF_DELTA_IS_NEGATIVE,
41 51 component: 'Checkbox',
42 52 label: '',
43 53 renderComponentContent: () => {
44 54 return {
45   - default: () => NodeBindDataFieldNameEnum.TELL_FAILURE_IF_DELTA_IS_NEGATIVE,
  55 + default: () => CalculateDeltaFieldsNameEnum.TELL_FAILURE_IF_DELTA_IS_NEGATIVE,
46 56 };
47 57 },
48 58 },
49 59 {
50   - field: NodeBindDataFieldEnum.ADD_PERIOD_BETWEEN_MSGS,
  60 + field: CalculateDeltaFieldsEnum.ADD_PERIOD_BETWEEN_MSGS,
51 61 component: 'Checkbox',
52 62 label: '',
53 63 renderComponentContent: () => {
54 64 return {
55   - default: () => NodeBindDataFieldNameEnum.ADD_PERIOD_BETWEEN_MSGS,
  65 + default: () => CalculateDeltaFieldsNameEnum.ADD_PERIOD_BETWEEN_MSGS,
56 66 };
57 67 },
58 68 },
59 69 {
60   - field: NodeBindDataFieldEnum.PERIOD_VALUE_KEY,
  70 + field: CalculateDeltaFieldsEnum.PERIOD_VALUE_KEY,
61 71 component: 'Input',
62   - label: NodeBindDataFieldNameEnum.PERIOD_VALUE_KEY,
  72 + label: CalculateDeltaFieldsNameEnum.PERIOD_VALUE_KEY,
63 73 required: true,
64   - ifShow: ({ model }) => model[NodeBindDataFieldEnum.ADD_PERIOD_BETWEEN_MSGS],
  74 + ifShow: ({ model }) => model[CalculateDeltaFieldsEnum.ADD_PERIOD_BETWEEN_MSGS],
  75 + componentProps: {
  76 + placeholder: `请输入${CalculateDeltaFieldsNameEnum.PERIOD_VALUE_KEY}`,
  77 + },
65 78 },
66 79 ];
... ...
1   -import { NodeBindDataFieldEnum, NodeBindDataFieldNameEnum } from '../../../enum/node';
  1 +import {
  2 + CustomerAttributesFieldsEnum,
  3 + CustomerAttributesFieldsNameEnum,
  4 +} from '../../../enum/formField/enrichment';
2 5 import { FormSchema, useComponentRegister } from '/@/components/Form';
3 6 import { AttributeConfiguration } from '/@/views/rule/designer/src/components/AttributeConfiguration';
4 7
... ... @@ -6,20 +9,20 @@ useComponentRegister('AttributeConfiguration', AttributeConfiguration);
6 9
7 10 export const formSchemas: FormSchema[] = [
8 11 {
9   - field: NodeBindDataFieldEnum.TELEMETRY,
  12 + field: CustomerAttributesFieldsEnum.TELEMETRY,
10 13 component: 'Checkbox',
11 14 label: '',
12 15 renderComponentContent: () => {
13 16 return {
14   - default: () => NodeBindDataFieldNameEnum.TELEMETRY,
  17 + default: () => CustomerAttributesFieldsNameEnum.TELEMETRY,
15 18 };
16 19 },
17 20 },
18 21 {
19   - field: NodeBindDataFieldEnum.ATTR_MAPING,
  22 + field: CustomerAttributesFieldsEnum.ATTR_MAPING,
20 23 component: 'AttributeConfiguration',
21   - label: NodeBindDataFieldNameEnum.ATTR_MAPING,
22   - slot: NodeBindDataFieldEnum.ATTR_MAPING,
  24 + label: CustomerAttributesFieldsNameEnum.ATTR_MAPING,
  25 + slot: CustomerAttributesFieldsEnum.ATTR_MAPING,
23 26 valueField: 'value',
24 27 changeEvent: 'update:value',
25 28 },
... ...
1 1 import { DetailsListEnum, DetailsListNameEnum } from '../../../enum/form';
2   -import { NodeBindDataFieldEnum, NodeBindDataFieldNameEnum } from '../../../enum/node';
  2 +import {
  3 + CustomerDetailsFieldsEnum,
  4 + CustomerDetailsFieldsNameEnum,
  5 +} from '../../../enum/formField/enrichment';
3 6 import { FormSchema } from '/@/components/Form';
4 7
5 8 export const formSchemas: FormSchema[] = [
6 9 {
7   - field: NodeBindDataFieldEnum.DETAILS_LIST,
  10 + field: CustomerDetailsFieldsEnum.DETAILS_LIST,
8 11 component: 'Select',
9   - label: NodeBindDataFieldNameEnum.DETAILS_LIST,
  12 + label: CustomerDetailsFieldsNameEnum.DETAILS_LIST,
10 13 componentProps: {
11 14 mode: 'multiple',
12 15 options: Object.keys(DetailsListEnum).map((item) => ({
13 16 label: DetailsListNameEnum[item],
14 17 value: item,
15   - getPopupContainer: () => document.body,
16 18 })),
  19 + getPopupContainer: () => document.body,
17 20 },
18 21 },
19 22 {
20   - field: NodeBindDataFieldEnum.ADD_TO_METADATA,
  23 + field: CustomerDetailsFieldsEnum.ADD_TO_METADATA,
21 24 component: 'Checkbox',
22 25 label: '',
23 26 renderComponentContent: () => {
24 27 return {
25   - default: () => NodeBindDataFieldNameEnum.ADD_TO_METADATA,
  28 + default: () => CustomerDetailsFieldsNameEnum.ADD_TO_METADATA,
26 29 };
27 30 },
28 31 },
... ...
1   -import { NodeBindDataFieldEnum, NodeBindDataFieldNameEnum } from '../../../enum/node';
  1 +import {
  2 + OriginatorAttributesEnum,
  3 + OriginatorAttributesNameEnum,
  4 +} from '../../../enum/formField/enrichment';
2 5 import { FormSchema } from '/@/components/Form';
3 6
4 7 export const formSchemas: FormSchema[] = [
5 8 {
6   - field: NodeBindDataFieldEnum.TELL_FAILURE_IF_ABSENT,
  9 + field: OriginatorAttributesEnum.TELL_FAILURE_IF_ABSENT,
7 10 component: 'Checkbox',
8   - label: '',
9   - // helpMessage: [
10   - // 'If at least one selected key doesn\'t exist the outbound message will report "Failure".',
11   - // ],
  11 + label: OriginatorAttributesNameEnum.TELL_FAILURE_IF_ABSENT,
12 12 renderComponentContent: () => ({
13   - default: () => NodeBindDataFieldNameEnum.TELL_FAILURE_IF_ABSENT,
  13 + default: () =>
  14 + 'If at least one selected key doesn\'t exist the outbound message will report "Failure".',
14 15 }),
15 16 },
16 17 {
17   - field: NodeBindDataFieldEnum.CLIENT_ATTRIBUTE_NAMES,
  18 + field: OriginatorAttributesEnum.CLIENT_ATTRIBUTE_NAMES,
18 19 component: 'Select',
19   - label: NodeBindDataFieldNameEnum.CLIENT_ATTRIBUTE_NAMES,
  20 + label: OriginatorAttributesNameEnum.CLIENT_ATTRIBUTE_NAMES,
20 21 helpMessage: [
21 22 `Hint: use \${metadataKey} for value from metadata, $[messageKey] for value from message body`,
22 23 ],
23 24 componentProps: {
24 25 mode: 'tags',
25 26 open: false,
  27 + placeholder: `请输入${OriginatorAttributesNameEnum.CLIENT_ATTRIBUTE_NAMES}`,
26 28 },
27 29 },
28 30 {
29   - field: NodeBindDataFieldEnum.SHARED_ATTRIBUTE_NAMES,
  31 + field: OriginatorAttributesEnum.SHARED_ATTRIBUTE_NAMES,
30 32 component: 'Select',
31   - label: NodeBindDataFieldNameEnum.SHARED_ATTRIBUTE_NAMES,
  33 + label: OriginatorAttributesNameEnum.SHARED_ATTRIBUTE_NAMES,
32 34 helpMessage: [
33 35 `Hint: use \${metadataKey} for value from metadata, $[messageKey] for value from message body`,
34 36 ],
35 37 componentProps: {
36 38 mode: 'tags',
37 39 open: false,
  40 + placeholder: `请输入${OriginatorAttributesNameEnum.SHARED_ATTRIBUTE_NAMES}`,
38 41 },
39 42 },
40 43 {
41   - field: NodeBindDataFieldEnum.SERVER_ATTRIBUTE_NAMES,
  44 + field: OriginatorAttributesEnum.SERVER_ATTRIBUTE_NAMES,
42 45 component: 'Select',
43   - label: NodeBindDataFieldNameEnum.SERVER_ATTRIBUTE_NAMES,
  46 + label: OriginatorAttributesNameEnum.SERVER_ATTRIBUTE_NAMES,
44 47 helpMessage: [
45 48 `Hint: use \${metadataKey} for value from metadata, $[messageKey] for value from message body`,
46 49 ],
47 50 componentProps: {
48 51 mode: 'tags',
49 52 open: false,
  53 + placeholder: `请输入${OriginatorAttributesNameEnum.SERVER_ATTRIBUTE_NAMES}`,
50 54 },
51 55 },
52 56 {
53   - field: NodeBindDataFieldEnum.LATEST_TS_KEY_NAMES,
  57 + field: OriginatorAttributesEnum.LATEST_TS_KEY_NAMES,
54 58 component: 'Select',
55   - label: NodeBindDataFieldNameEnum.LATEST_TS_KEY_NAMES,
  59 + label: OriginatorAttributesNameEnum.LATEST_TS_KEY_NAMES,
56 60 helpMessage: [
57 61 `Hint: use \${metadataKey} for value from metadata, $[messageKey] for value from message body`,
58 62 ],
59 63 componentProps: {
60 64 mode: 'tags',
61 65 open: false,
  66 + placeholder: `请输入${OriginatorAttributesNameEnum.LATEST_TS_KEY_NAMES}`,
62 67 },
63 68 },
64 69 {
65   - field: NodeBindDataFieldEnum.GET_LATEST_VALUE_WITH_TS,
  70 + field: OriginatorAttributesEnum.GET_LATEST_VALUE_WITH_TS,
66 71 component: 'Checkbox',
67   - label: '',
68   - // helpMessage: [
69   - // 'If selected, latest telemetry values will be added to the outbound message metadata with timestamp, e.g: "temp": "{"ts":1574329385897, "value":42}"',
70   - // ],
  72 + label: OriginatorAttributesNameEnum.GET_LATEST_VALUE_WITH_TS,
71 73 renderComponentContent: () => ({
72   - default: () => NodeBindDataFieldNameEnum.GET_LATEST_VALUE_WITH_TS,
  74 + default: () =>
  75 + 'If selected, latest telemetry values will be added to the outbound message metadata with timestamp, e.g: "temp": "{"ts":1574329385897, "value":42}"',
73 76 }),
74 77 },
75 78 ];
... ...
1   -import { NodeBindDataFieldEnum, NodeBindDataFieldNameEnum } from '../../../enum/node';
  1 +import { OriginatorFieldsEnum, OriginatorFieldsNameEnum } from '../../../enum/formField/enrichment';
2 2 import { FormSchema, useComponentRegister } from '/@/components/Form';
3 3 import { AttributeConfiguration } from '/@/views/rule/designer/src/components/AttributeConfiguration';
4 4
... ... @@ -6,10 +6,10 @@ useComponentRegister('AttributeConfiguration', AttributeConfiguration);
6 6
7 7 export const formSchemas: FormSchema[] = [
8 8 {
9   - field: NodeBindDataFieldEnum.FIELDS_MAPPING,
  9 + field: OriginatorFieldsEnum.FIELDS_MAPPING,
10 10 component: 'AttributeConfiguration',
11   - label: NodeBindDataFieldNameEnum.FIELDS_MAPPING,
12   - slot: NodeBindDataFieldEnum.FIELDS_MAPPING,
  11 + label: OriginatorFieldsNameEnum.FIELDS_MAPPING,
  12 + slot: OriginatorFieldsEnum.FIELDS_MAPPING,
13 13 valueField: 'value',
14 14 changeEvent: 'update:value',
15 15 },
... ...
... ... @@ -6,155 +6,169 @@ import {
6 6 TimeIntervalUnitEnum,
7 7 TimeIntervalUnitNameEnum,
8 8 } from '../../../enum/form';
9   -import { NodeBindDataFieldEnum, NodeBindDataFieldNameEnum } from '../../../enum/node';
  9 +import {
  10 + OriginatorTelemetryFieldsEnum,
  11 + OriginatorTelemetryFieldsNameEnum,
  12 +} from '../../../enum/formField/enrichment';
10 13 import { FormSchema } from '/@/components/Form';
11 14
12 15 export const formSchemas: FormSchema[] = [
13 16 {
14   - field: NodeBindDataFieldEnum.LATEST_TS_KEY_NAMES,
  17 + field: OriginatorTelemetryFieldsEnum.LATEST_TS_KEY_NAMES,
15 18 component: 'Select',
16   - label: NodeBindDataFieldNameEnum.LATEST_TS_KEY_NAMES,
  19 + label: OriginatorTelemetryFieldsNameEnum.LATEST_TS_KEY_NAMES,
17 20 componentProps: {
18 21 mode: 'tags',
19 22 open: false,
  23 + placeholder: `请输入${OriginatorTelemetryFieldsNameEnum.LATEST_TS_KEY_NAMES}`,
  24 + getPopupContainer: () => document.body,
20 25 },
21 26 },
22 27 {
23   - field: NodeBindDataFieldEnum.FETCH_MODE,
  28 + field: OriginatorTelemetryFieldsEnum.FETCH_MODE,
24 29 component: 'Select',
25   - label: NodeBindDataFieldNameEnum.FETCH_MODE,
  30 + label: OriginatorTelemetryFieldsNameEnum.FETCH_MODE,
26 31 required: true,
27 32 componentProps: {
28 33 options: Object.keys(FetchModeEnum).map((value) => ({ label: value, value })),
  34 + placeholder: `请选择${OriginatorTelemetryFieldsNameEnum.FETCH_MODE}`,
  35 + getPopupContainer: () => document.body,
29 36 },
30 37 },
31 38 {
32   - field: NodeBindDataFieldEnum.AGGREGATION,
  39 + field: OriginatorTelemetryFieldsEnum.AGGREGATION,
33 40 component: 'Select',
34   - label: NodeBindDataFieldNameEnum.AGGREGATION,
  41 + label: OriginatorTelemetryFieldsNameEnum.AGGREGATION,
35 42 required: true,
36   - show: ({ model }) => model[NodeBindDataFieldEnum.FETCH_MODE] === FetchModeEnum.ALL,
  43 + show: ({ model }) => model[OriginatorTelemetryFieldsEnum.FETCH_MODE] === FetchModeEnum.ALL,
37 44 componentProps: {
38 45 options: Object.keys(AggregationEnum).map((value) => ({
39 46 label: AggregationNameEnum[value],
40 47 value,
41 48 })),
  49 + placeholder: `请选择${OriginatorTelemetryFieldsNameEnum.AGGREGATION}`,
  50 + getPopupContainer: () => document.body,
42 51 },
43 52 },
44 53 {
45   - field: NodeBindDataFieldEnum.ORDER_BY,
46   - component: 'Select',
47   - label: NodeBindDataFieldNameEnum.ORDER_BY,
48   - required: true,
49   - show: ({ model }) => model[NodeBindDataFieldEnum.FETCH_MODE] === FetchModeEnum.ALL,
50   - componentProps: {
51   - options: Object.keys(OrderByEnum).map((value) => ({ label: value, value })),
52   - },
53   - },
54   - {
55   - field: NodeBindDataFieldEnum.ORDER_BY,
  54 + field: OriginatorTelemetryFieldsEnum.ORDER_BY,
56 55 component: 'Select',
57   - label: NodeBindDataFieldNameEnum.ORDER_BY,
  56 + label: OriginatorTelemetryFieldsNameEnum.ORDER_BY,
58 57 required: true,
59 58 helpMessage: ['Select to choose telemetry sampling order.'],
60   - show: ({ model }) => model[NodeBindDataFieldEnum.FETCH_MODE] === FetchModeEnum.ALL,
  59 + show: ({ model }) => model[OriginatorTelemetryFieldsEnum.FETCH_MODE] === FetchModeEnum.ALL,
61 60 componentProps: {
62 61 options: Object.keys(OrderByEnum).map((value) => ({ label: value, value })),
  62 + placeholder: `请选择${OriginatorTelemetryFieldsNameEnum.FETCH_MODE}`,
  63 + getPopupContainer: () => document.body,
63 64 },
64 65 },
65 66 {
66   - field: NodeBindDataFieldEnum.LIMIT,
  67 + field: OriginatorTelemetryFieldsEnum.LIMIT,
67 68 component: 'InputNumber',
68   - label: NodeBindDataFieldNameEnum.LIMIT,
  69 + label: OriginatorTelemetryFieldsNameEnum.LIMIT,
69 70 required: true,
70 71 helpMessage: [
71 72 "Min limit value is 2, max - 1000. In case you want to fetch a single entry, select fetch mode 'FIRST' or 'LAST'.",
72 73 ],
73   - show: ({ model }) => model[NodeBindDataFieldEnum.FETCH_MODE] === FetchModeEnum.ALL,
  74 + show: ({ model }) => model[OriginatorTelemetryFieldsEnum.FETCH_MODE] === FetchModeEnum.ALL,
74 75 componentProps: {
75 76 min: 2,
76 77 max: 1000,
77 78 step: 1,
  79 + placeholder: `请输入${OriginatorTelemetryFieldsNameEnum.LIMIT}`,
78 80 },
79 81 },
80 82 {
81   - field: NodeBindDataFieldEnum.USE_METADATA_INTERVAL_PATTERNS,
  83 + field: OriginatorTelemetryFieldsEnum.USE_METADATA_INTERVAL_PATTERNS,
82 84 component: 'Checkbox',
83 85 label: '',
84 86 renderComponentContent: () => ({
85   - default: () => NodeBindDataFieldNameEnum.USE_METADATA_INTERVAL_PATTERNS,
  87 + default: () => OriginatorTelemetryFieldsNameEnum.USE_METADATA_INTERVAL_PATTERNS,
86 88 }),
87 89 },
88 90 {
89   - field: NodeBindDataFieldEnum.START_INTERVAL,
  91 + field: OriginatorTelemetryFieldsEnum.START_INTERVAL,
90 92 component: 'InputNumber',
91   - label: NodeBindDataFieldNameEnum.START_INTERVAL,
  93 + label: OriginatorTelemetryFieldsNameEnum.START_INTERVAL,
92 94 colProps: { span: 12 },
93 95 required: true,
94   - show: ({ model }) => !model[NodeBindDataFieldEnum.USE_METADATA_INTERVAL_PATTERNS],
  96 + show: ({ model }) => !model[OriginatorTelemetryFieldsEnum.USE_METADATA_INTERVAL_PATTERNS],
95 97 componentProps: {
96 98 step: 1,
97 99 min: 0,
  100 + placeholder: `请输入${OriginatorTelemetryFieldsNameEnum.START_INTERVAL}`,
98 101 },
99 102 },
100 103 {
101   - field: NodeBindDataFieldEnum.START_INTERVAL_TIME_UNIT,
  104 + field: OriginatorTelemetryFieldsEnum.START_INTERVAL_TIME_UNIT,
102 105 component: 'Select',
103   - label: NodeBindDataFieldNameEnum.START_INTERVAL_TIME_UNIT,
  106 + label: OriginatorTelemetryFieldsNameEnum.START_INTERVAL_TIME_UNIT,
104 107 colProps: { span: 12 },
105 108 required: true,
106   - show: ({ model }) => !model[NodeBindDataFieldEnum.USE_METADATA_INTERVAL_PATTERNS],
  109 + show: ({ model }) => !model[OriginatorTelemetryFieldsEnum.USE_METADATA_INTERVAL_PATTERNS],
107 110 componentProps: {
108 111 options: Object.keys(TimeIntervalUnitEnum).map((value) => ({
109 112 label: TimeIntervalUnitNameEnum[value],
110 113 value,
111 114 })),
  115 + placeholder: `请选择${OriginatorTelemetryFieldsNameEnum.START_INTERVAL_TIME_UNIT}`,
  116 + getPopupContainer: () => document.body,
112 117 },
113 118 },
114 119 {
115   - field: NodeBindDataFieldEnum.END_INTERVAL,
  120 + field: OriginatorTelemetryFieldsEnum.END_INTERVAL,
116 121 component: 'InputNumber',
117   - label: NodeBindDataFieldNameEnum.END_INTERVAL,
  122 + label: OriginatorTelemetryFieldsNameEnum.END_INTERVAL,
118 123 colProps: { span: 12 },
119 124 required: true,
120   - show: ({ model }) => !model[NodeBindDataFieldEnum.USE_METADATA_INTERVAL_PATTERNS],
  125 + show: ({ model }) => !model[OriginatorTelemetryFieldsEnum.USE_METADATA_INTERVAL_PATTERNS],
121 126 componentProps: {
122 127 step: 1,
123 128 min: 0,
  129 + placeholder: `请输入${OriginatorTelemetryFieldsNameEnum.END_INTERVAL}`,
124 130 },
125 131 },
126 132 {
127   - field: NodeBindDataFieldEnum.END_INTERVAL_TIME_UNIT,
  133 + field: OriginatorTelemetryFieldsEnum.END_INTERVAL_TIME_UNIT,
128 134 component: 'Select',
129   - label: NodeBindDataFieldNameEnum.END_INTERVAL_TIME_UNIT,
  135 + label: OriginatorTelemetryFieldsNameEnum.END_INTERVAL_TIME_UNIT,
130 136 colProps: { span: 12 },
131 137 required: true,
132   - show: ({ model }) => !model[NodeBindDataFieldEnum.USE_METADATA_INTERVAL_PATTERNS],
  138 + show: ({ model }) => !model[OriginatorTelemetryFieldsEnum.USE_METADATA_INTERVAL_PATTERNS],
133 139 componentProps: {
134 140 options: Object.keys(TimeIntervalUnitEnum).map((value) => ({
135 141 label: TimeIntervalUnitNameEnum[value],
136 142 value,
137 143 })),
  144 + placeholder: `请选择${OriginatorTelemetryFieldsNameEnum.END_INTERVAL_TIME_UNIT}`,
  145 + getPopupContainer: () => document.body,
138 146 },
139 147 },
140 148 {
141   - field: NodeBindDataFieldEnum.START_INTERVAL_PATTERN,
  149 + field: OriginatorTelemetryFieldsEnum.START_INTERVAL_PATTERN,
142 150 component: 'Input',
143   - label: NodeBindDataFieldNameEnum.START_INTERVAL_PATTERN,
  151 + label: OriginatorTelemetryFieldsNameEnum.START_INTERVAL_PATTERN,
144 152 required: true,
145 153 helpMessage: [
146 154 'Hint: use ${metadataKey} for value from metadata, $[messageKey] for value from message body',
147 155 ],
148   - show: ({ model }) => model[NodeBindDataFieldEnum.USE_METADATA_INTERVAL_PATTERNS],
  156 + ifShow: ({ model }) => model[OriginatorTelemetryFieldsEnum.USE_METADATA_INTERVAL_PATTERNS],
  157 + componentProps: {
  158 + placeholder: `请输入${OriginatorTelemetryFieldsNameEnum.START_INTERVAL_PATTERN}`,
  159 + },
149 160 },
150 161 {
151   - field: NodeBindDataFieldEnum.END_INTERVAL_PATTERN,
  162 + field: OriginatorTelemetryFieldsEnum.END_INTERVAL_PATTERN,
152 163 component: 'Input',
153   - label: NodeBindDataFieldNameEnum.END_INTERVAL_PATTERN,
  164 + label: OriginatorTelemetryFieldsNameEnum.END_INTERVAL_PATTERN,
154 165 required: true,
155 166 helpMessage: [
156 167 'Hint: use ${metadataKey} for value from metadata, $[messageKey] for value from message body',
157 168 ],
158   - show: ({ model }) => model[NodeBindDataFieldEnum.USE_METADATA_INTERVAL_PATTERNS],
  169 + ifShow: ({ model }) => model[OriginatorTelemetryFieldsEnum.USE_METADATA_INTERVAL_PATTERNS],
  170 + componentProps: {
  171 + placeholder: `请输入${OriginatorTelemetryFieldsNameEnum.END_INTERVAL_PATTERN}`,
  172 + },
159 173 },
160 174 ];
... ...
1   -import { NodeBindDataFieldEnum, NodeBindDataFieldNameEnum } from '../../../enum/node';
2 1 import { AttributeConfiguration } from '/@/views/rule/designer/src/components/AttributeConfiguration';
3 2 import { FormSchema, useComponentRegister } from '/@/components/Form';
4 3 import { RelationsQuery } from '/@/views/rule/designer/src/components/RelationsQuery';
  4 +import {
  5 + RelatedAttributesFieldsEnum,
  6 + RelatedAttributesFieldsNameEnum,
  7 +} from '../../../enum/formField/enrichment';
5 8
6 9 useComponentRegister('RelationsQuery', RelationsQuery);
7 10 useComponentRegister('AttributeConfiguration', AttributeConfiguration);
8 11
9 12 export const formSchemas: FormSchema[] = [
10 13 {
11   - field: NodeBindDataFieldEnum.RELATIONS_QUERY,
  14 + field: RelatedAttributesFieldsEnum.RELATIONS_QUERY,
12 15 component: 'RelationsQuery',
13   - label: NodeBindDataFieldNameEnum.RELATIONS_QUERY,
  16 + label: RelatedAttributesFieldsNameEnum.RELATIONS_QUERY,
14 17 changeEvent: 'update:value',
15 18 valueField: 'value',
16   - slot: NodeBindDataFieldEnum.RELATIONS_QUERY,
  19 + slot: RelatedAttributesFieldsEnum.RELATIONS_QUERY,
17 20 },
18 21 {
19   - field: NodeBindDataFieldEnum.TELEMETRY,
  22 + field: RelatedAttributesFieldsEnum.TELEMETRY,
20 23 component: 'Checkbox',
21 24 label: '',
22 25 renderComponentContent: () => ({
23   - default: () => NodeBindDataFieldNameEnum.TELEMETRY,
  26 + default: () => RelatedAttributesFieldsNameEnum.TELEMETRY,
24 27 }),
25 28 },
26 29 {
27   - field: NodeBindDataFieldEnum.ATTR_MAPING,
  30 + field: RelatedAttributesFieldsEnum.ATTR_MAPPING,
28 31 component: 'AttributeConfiguration',
29 32 label: '',
30   - slot: NodeBindDataFieldEnum.ATTR_MAPING,
  33 + slot: RelatedAttributesFieldsEnum.ATTR_MAPPING,
31 34 },
32 35 ];
... ...
... ... @@ -5,8 +5,8 @@
5 5 import { NodeData } from '../../../types/node';
6 6 import { RelationsQuery } from '/@/views/rule/designer/src/components/RelationsQuery';
7 7 import { ref, unref } from 'vue';
8   - import { NodeBindDataFieldEnum } from '../../../enum/node';
9 8 import { AttributeConfiguration } from '/@/views/rule/designer/src/components/AttributeConfiguration';
  9 + import { RelatedAttributesFieldsEnum } from '../../../enum/formField/enrichment';
10 10
11 11 defineProps<{
12 12 config: NodeData;
... ... @@ -30,8 +30,8 @@
30 30 const attrMapping = unref(attributeControlElRef)?.getFieldsValue();
31 31 return {
32 32 ...value,
33   - [NodeBindDataFieldEnum.RELATIONS_QUERY]: queryValue,
34   - [NodeBindDataFieldEnum.ATTR_MAPING]: attrMapping,
  33 + [RelatedAttributesFieldsEnum.RELATIONS_QUERY]: queryValue,
  34 + [RelatedAttributesFieldsEnum.ATTR_MAPPING]: attrMapping,
35 35 };
36 36 };
37 37
... ... @@ -39,9 +39,9 @@
39 39 resetFields();
40 40 setFieldsValue(value);
41 41 unref(relationsQueryElRef)?.setFieldsValue(
42   - value?.[NodeBindDataFieldEnum.RELATIONS_QUERY] as Recordable
  42 + value?.[RelatedAttributesFieldsEnum.RELATIONS_QUERY] as Recordable
43 43 );
44   - unref(attributeControlElRef)?.setFieldsValue(value?.[NodeBindDataFieldEnum.ATTR_MAPING]);
  44 + unref(attributeControlElRef)?.setFieldsValue(value?.[RelatedAttributesFieldsEnum.ATTR_MAPPING]);
45 45 };
46 46
47 47 defineExpose({
... ... @@ -59,7 +59,9 @@
59 59 <AttributeConfiguration
60 60 v-model:value="model[field]"
61 61 ref="attributeControlElRef"
62   - :keyLabel="`Source ${model[NodeBindDataFieldEnum.TELEMETRY] ? 'telemetry' : 'attribute'}`"
  62 + :keyLabel="`Source ${
  63 + model[RelatedAttributesFieldsEnum.TELEMETRY] ? 'telemetry' : 'attribute'
  64 + }`"
63 65 valueLabel="Target attribute"
64 66 >
65 67 <template #afterForm>
... ...
... ... @@ -4,7 +4,11 @@ import {
4 4 RelationTypeEnum,
5 5 RelationTypeNameEnum,
6 6 } from '../../../enum/form';
7   -import { NodeBindDataFieldEnum, NodeBindDataFieldNameEnum } from '../../../enum/node';
  7 +import {
  8 + RelatedDeviceAttributeFieldsEnum,
  9 + RelatedDeviceAttributeFieldsNameEnum,
  10 +} from '../../../enum/formField/enrichment';
  11 +
8 12 import { getDeviceTypes } from '/@/api/ruleChainDesigner';
9 13 import { FormSchema } from '/@/components/Form';
10 14
... ... @@ -28,17 +32,17 @@ export interface DeviceRelationsQuery {
28 32
29 33 export const formSchemas: FormSchema[] = [
30 34 {
31   - field: NodeBindDataFieldEnum.FETCH_LAST_LEVEL_ONLY,
  35 + field: RelatedDeviceAttributeFieldsEnum.FETCH_LAST_LEVEL_ONLY,
32 36 component: 'Checkbox',
33 37 label: '',
34 38 renderComponentContent: () => ({
35   - default: () => NodeBindDataFieldNameEnum.FETCH_LAST_LEVEL_ONLY,
  39 + default: () => RelatedDeviceAttributeFieldsNameEnum.FETCH_LAST_LEVEL_ONLY,
36 40 }),
37 41 },
38 42 {
39   - field: NodeBindDataFieldEnum.DIRECTION,
  43 + field: RelatedDeviceAttributeFieldsEnum.DIRECTION,
40 44 component: 'Select',
41   - label: NodeBindDataFieldNameEnum.DIRECTION,
  45 + label: RelatedDeviceAttributeFieldsNameEnum.DIRECTION,
42 46 required: true,
43 47 colProps: { span: 12 },
44 48 componentProps: {
... ... @@ -46,99 +50,100 @@ export const formSchemas: FormSchema[] = [
46 50 label: DirectionNameEnum[value],
47 51 value,
48 52 })),
49   - placeholder: `请选择${NodeBindDataFieldNameEnum.DIRECTION}`,
  53 + placeholder: `请选择${RelatedDeviceAttributeFieldsNameEnum.DIRECTION}`,
50 54 getPopupContainer: () => document.body,
51 55 },
52 56 },
53 57 {
54   - field: NodeBindDataFieldEnum.MAX_LEVEL,
  58 + field: RelatedDeviceAttributeFieldsEnum.MAX_LEVEL,
55 59 component: 'InputNumber',
56   - label: NodeBindDataFieldNameEnum.MAX_LEVEL,
  60 + label: RelatedDeviceAttributeFieldsNameEnum.MAX_LEVEL,
57 61 colProps: { span: 12 },
58 62 componentProps: {
59 63 min: 1,
  64 + placeholder: `请输入${RelatedDeviceAttributeFieldsNameEnum.MAX_LEVEL}`,
60 65 },
61 66 },
62 67 {
63   - field: NodeBindDataFieldEnum.RELATION_TYPE,
  68 + field: RelatedDeviceAttributeFieldsEnum.RELATION_TYPE,
64 69 component: 'Select',
65   - label: NodeBindDataFieldNameEnum.RELATION_TYPE,
  70 + label: RelatedDeviceAttributeFieldsNameEnum.RELATION_TYPE,
66 71 componentProps: {
67 72 options: Object.keys(RelationTypeEnum).map((value) => ({
68 73 label: RelationTypeNameEnum[value],
69 74 value,
70 75 })),
71   - placeholder: `请选择${NodeBindDataFieldNameEnum.RELATION_TYPE}`,
  76 + placeholder: `请选择${RelatedDeviceAttributeFieldsNameEnum.RELATION_TYPE}`,
72 77 getPopupContainer: () => document.body,
73 78 },
74 79 },
75 80 {
76   - field: NodeBindDataFieldEnum.DEVICE_TYPES,
  81 + field: RelatedDeviceAttributeFieldsEnum.DEVICE_TYPES,
77 82 component: 'ApiSelect',
78   - label: NodeBindDataFieldNameEnum.DEVICE_TYPES,
  83 + label: RelatedDeviceAttributeFieldsNameEnum.DEVICE_TYPES,
79 84 componentProps: {
80 85 mode: 'multiple',
81 86 api: getDeviceTypes,
82 87 labelField: 'type',
83 88 valueField: 'type',
84 89 getPopupContainer: () => document.body,
85   - placeholder: `请选择${NodeBindDataFieldNameEnum.DEVICE_TYPES}`,
  90 + placeholder: `请选择${RelatedDeviceAttributeFieldsNameEnum.DEVICE_TYPES}`,
86 91 },
87 92 },
88 93 {
89   - field: NodeBindDataFieldEnum.TELL_FAILURE_IF_ABSENT,
  94 + field: RelatedDeviceAttributeFieldsEnum.TELL_FAILURE_IF_ABSENT,
90 95 component: 'Checkbox',
91 96 label: '',
92 97 renderComponentContent: () => ({
93   - default: () => NodeBindDataFieldNameEnum.TELL_FAILURE_IF_ABSENT,
  98 + default: () => RelatedDeviceAttributeFieldsNameEnum.TELL_FAILURE_IF_ABSENT,
94 99 }),
95 100 },
96 101 {
97   - field: NodeBindDataFieldEnum.CLIENT_ATTRIBUTE_NAMES,
  102 + field: RelatedDeviceAttributeFieldsEnum.CLIENT_ATTRIBUTE_NAMES,
98 103 component: 'Select',
99   - label: NodeBindDataFieldNameEnum.CLIENT_ATTRIBUTE_NAMES,
  104 + label: RelatedDeviceAttributeFieldsNameEnum.CLIENT_ATTRIBUTE_NAMES,
100 105 componentProps: {
101 106 open: false,
102 107 mode: 'tags',
103   - placeholder: NodeBindDataFieldNameEnum.CLIENT_ATTRIBUTE_NAMES,
  108 + placeholder: RelatedDeviceAttributeFieldsNameEnum.CLIENT_ATTRIBUTE_NAMES,
104 109 },
105 110 },
106 111 {
107   - field: NodeBindDataFieldEnum.SHARED_ATTRIBUTE_NAMES,
  112 + field: RelatedDeviceAttributeFieldsEnum.SHARED_ATTRIBUTE_NAMES,
108 113 component: 'Select',
109   - label: NodeBindDataFieldNameEnum.SHARED_ATTRIBUTE_NAMES,
  114 + label: RelatedDeviceAttributeFieldsNameEnum.SHARED_ATTRIBUTE_NAMES,
110 115 componentProps: {
111 116 open: false,
112 117 mode: 'tags',
113   - placeholder: NodeBindDataFieldNameEnum.SHARED_ATTRIBUTE_NAMES,
  118 + placeholder: RelatedDeviceAttributeFieldsNameEnum.SHARED_ATTRIBUTE_NAMES,
114 119 },
115 120 },
116 121 {
117   - field: NodeBindDataFieldEnum.SERVER_ATTRIBUTE_NAMES,
  122 + field: RelatedDeviceAttributeFieldsEnum.SERVER_ATTRIBUTE_NAMES,
118 123 component: 'Select',
119   - label: NodeBindDataFieldNameEnum.SERVER_ATTRIBUTE_NAMES,
  124 + label: RelatedDeviceAttributeFieldsNameEnum.SERVER_ATTRIBUTE_NAMES,
120 125 componentProps: {
121 126 open: false,
122 127 mode: 'tags',
123   - placeholder: NodeBindDataFieldNameEnum.SERVER_ATTRIBUTE_NAMES,
  128 + placeholder: RelatedDeviceAttributeFieldsNameEnum.SERVER_ATTRIBUTE_NAMES,
124 129 },
125 130 },
126 131 {
127   - field: NodeBindDataFieldEnum.LATEST_TS_KEY_NAMES,
  132 + field: RelatedDeviceAttributeFieldsEnum.LATEST_TS_KEY_NAMES,
128 133 component: 'Select',
129   - label: NodeBindDataFieldNameEnum.LATEST_TS_KEY_NAMES,
  134 + label: RelatedDeviceAttributeFieldsNameEnum.LATEST_TS_KEY_NAMES,
130 135 componentProps: {
131 136 open: false,
132 137 mode: 'tags',
133   - placeholder: NodeBindDataFieldNameEnum.LATEST_TS_KEY_NAMES,
  138 + placeholder: RelatedDeviceAttributeFieldsNameEnum.LATEST_TS_KEY_NAMES,
134 139 },
135 140 },
136 141 {
137   - field: NodeBindDataFieldEnum.GET_LATEST_VALUE_WITH_TS,
  142 + field: RelatedDeviceAttributeFieldsEnum.GET_LATEST_VALUE_WITH_TS,
138 143 component: 'Checkbox',
139 144 label: '',
140 145 renderComponentContent: () => ({
141   - default: () => NodeBindDataFieldNameEnum.GET_LATEST_VALUE_WITH_TS,
  146 + default: () => RelatedDeviceAttributeFieldsNameEnum.GET_LATEST_VALUE_WITH_TS,
142 147 }),
143 148 },
144 149 ];
... ...
... ... @@ -3,7 +3,7 @@
3 3 import { BasicForm, useForm } from '/@/components/Form';
4 4 import { DeviceRelationsQuery, formSchemas, ValueType } from './create.config';
5 5 import { NodeData } from '../../../types/node';
6   - import { NodeBindDataFieldEnum } from '../../../enum/node';
  6 + import { RelatedDeviceAttributeFieldsEnum } from '../../../enum/formField/enrichment';
7 7
8 8 defineProps<{
9 9 config: NodeData;
... ... @@ -18,32 +18,40 @@
18 18 await validate();
19 19 const value = getFieldsValue() || {};
20 20 return {
21   - [NodeBindDataFieldEnum.DEVICE_RELATIONS_QUERY]: {
22   - [NodeBindDataFieldEnum.FETCH_LAST_LEVEL_ONLY]:
23   - value[NodeBindDataFieldEnum.FETCH_LAST_LEVEL_ONLY],
24   - [NodeBindDataFieldEnum.DEVICE_TYPES]: value[NodeBindDataFieldEnum.DEVICE_TYPES],
25   - [NodeBindDataFieldEnum.DIRECTION]: value[NodeBindDataFieldEnum.DIRECTION],
26   - [NodeBindDataFieldEnum.MAX_LEVEL]: value[NodeBindDataFieldEnum.MAX_LEVEL],
27   - [NodeBindDataFieldEnum.RELATION_TYPE]: value[NodeBindDataFieldEnum.RELATION_TYPE],
  21 + [RelatedDeviceAttributeFieldsEnum.DEVICE_RELATIONS_QUERY]: {
  22 + [RelatedDeviceAttributeFieldsEnum.FETCH_LAST_LEVEL_ONLY]:
  23 + value[RelatedDeviceAttributeFieldsEnum.FETCH_LAST_LEVEL_ONLY],
  24 + [RelatedDeviceAttributeFieldsEnum.DEVICE_TYPES]:
  25 + value[RelatedDeviceAttributeFieldsEnum.DEVICE_TYPES],
  26 + [RelatedDeviceAttributeFieldsEnum.DIRECTION]:
  27 + value[RelatedDeviceAttributeFieldsEnum.DIRECTION],
  28 + [RelatedDeviceAttributeFieldsEnum.MAX_LEVEL]:
  29 + value[RelatedDeviceAttributeFieldsEnum.MAX_LEVEL],
  30 + [RelatedDeviceAttributeFieldsEnum.RELATION_TYPE]:
  31 + value[RelatedDeviceAttributeFieldsEnum.RELATION_TYPE],
28 32 } as DeviceRelationsQuery,
29   - [NodeBindDataFieldEnum.CLIENT_ATTRIBUTE_NAMES]:
30   - value[NodeBindDataFieldEnum.CLIENT_ATTRIBUTE_NAMES],
31   - [NodeBindDataFieldEnum.GET_LATEST_VALUE_WITH_TS]:
32   - value[NodeBindDataFieldEnum.GET_LATEST_VALUE_WITH_TS],
33   - [NodeBindDataFieldEnum.LATEST_TS_KEY_NAMES]: value[NodeBindDataFieldEnum.LATEST_TS_KEY_NAMES],
34   - [NodeBindDataFieldEnum.SERVER_ATTRIBUTE_NAMES]:
35   - value[NodeBindDataFieldEnum.SERVER_ATTRIBUTE_NAMES],
36   - [NodeBindDataFieldEnum.SHARED_ATTRIBUTE_NAMES]:
37   - value[NodeBindDataFieldEnum.SHARED_ATTRIBUTE_NAMES],
38   - [NodeBindDataFieldEnum.TELL_FAILURE_IF_ABSENT]:
39   - value[NodeBindDataFieldEnum.TELL_FAILURE_IF_ABSENT],
  33 + [RelatedDeviceAttributeFieldsEnum.CLIENT_ATTRIBUTE_NAMES]:
  34 + value[RelatedDeviceAttributeFieldsEnum.CLIENT_ATTRIBUTE_NAMES],
  35 + [RelatedDeviceAttributeFieldsEnum.GET_LATEST_VALUE_WITH_TS]:
  36 + value[RelatedDeviceAttributeFieldsEnum.GET_LATEST_VALUE_WITH_TS],
  37 + [RelatedDeviceAttributeFieldsEnum.LATEST_TS_KEY_NAMES]:
  38 + value[RelatedDeviceAttributeFieldsEnum.LATEST_TS_KEY_NAMES],
  39 + [RelatedDeviceAttributeFieldsEnum.SERVER_ATTRIBUTE_NAMES]:
  40 + value[RelatedDeviceAttributeFieldsEnum.SERVER_ATTRIBUTE_NAMES],
  41 + [RelatedDeviceAttributeFieldsEnum.SHARED_ATTRIBUTE_NAMES]:
  42 + value[RelatedDeviceAttributeFieldsEnum.SHARED_ATTRIBUTE_NAMES],
  43 + [RelatedDeviceAttributeFieldsEnum.TELL_FAILURE_IF_ABSENT]:
  44 + value[RelatedDeviceAttributeFieldsEnum.TELL_FAILURE_IF_ABSENT],
40 45 } as ValueType;
41 46 };
42 47
43 48 const setValue: CreateModalDefineExposeType['setFieldsValue'] = (value) => {
44 49 resetFields();
45 50 console.log(value);
46   - setFieldsValue({ ...value, ...(value?.[NodeBindDataFieldEnum.DEVICE_RELATIONS_QUERY] || {}) });
  51 + setFieldsValue({
  52 + ...value,
  53 + ...(value?.[RelatedDeviceAttributeFieldsEnum.DEVICE_RELATIONS_QUERY] || {}),
  54 + });
47 55 };
48 56
49 57 defineExpose({
... ...
1   -import { NodeBindDataFieldEnum, NodeBindDataFieldNameEnum } from '../../../enum/node';
  1 +import {
  2 + TenantAttributesFieldsEnum,
  3 + TenantAttributesFieldsNameEnum,
  4 +} from '../../../enum/formField/enrichment';
2 5 import { FormSchema, useComponentRegister } from '/@/components/Form';
3 6 import { AttributeConfiguration } from '/@/views/rule/designer/src/components/AttributeConfiguration';
4 7
... ... @@ -6,20 +9,20 @@ useComponentRegister('AttributeConfiguration', AttributeConfiguration);
6 9
7 10 export const formSchemas: FormSchema[] = [
8 11 {
9   - field: NodeBindDataFieldEnum.TELEMETRY,
  12 + field: TenantAttributesFieldsEnum.TELEMETRY,
10 13 component: 'Checkbox',
11 14 label: '',
12 15 renderComponentContent: () => {
13 16 return {
14   - default: () => NodeBindDataFieldNameEnum.TELEMETRY,
  17 + default: () => TenantAttributesFieldsNameEnum.TELEMETRY,
15 18 };
16 19 },
17 20 },
18 21 {
19   - field: NodeBindDataFieldEnum.ATTR_MAPING,
  22 + field: TenantAttributesFieldsEnum.ATTR_MAPING,
20 23 component: 'AttributeConfiguration',
21   - label: NodeBindDataFieldNameEnum.ATTR_MAPING,
22   - slot: NodeBindDataFieldEnum.ATTR_MAPING,
  24 + label: TenantAttributesFieldsNameEnum.ATTR_MAPING,
  25 + slot: TenantAttributesFieldsEnum.ATTR_MAPING,
23 26 valueField: 'value',
24 27 changeEvent: 'update:value',
25 28 },
... ...
... ... @@ -4,7 +4,7 @@
4 4 import { credentialsTypeOptions, FileItemType, formSchemas } from './config';
5 5 import { ref, watch } from 'vue';
6 6 import { buildUUID } from '/@/utils/uuid';
7   - import { CredentialsTypeEnum, CredentialsTypeNameEnum } from '../../../../enum/form';
  7 + import { CredentialsTypeEnum, CredentialsTypeNameEnum } from './config';
8 8 import { AzureIotHubFieldsEnum } from '../../../../enum/formField/external';
9 9
10 10 const props = withDefaults(
... ... @@ -59,7 +59,7 @@
59 59 value,
60 60 AzureIotHubFieldsEnum.CA_CERT_FILE_NAME
61 61 ),
62   - [AzureIotHubFieldsEnum.CA_CERT]: getFileValue(value?.[AzureIotHubFieldsEnum.CERT]),
  62 + [AzureIotHubFieldsEnum.CERT]: getFileValue(value?.[AzureIotHubFieldsEnum.CERT]),
63 63 [AzureIotHubFieldsEnum.CERT_FILE_NAME]: getValueByKey(
64 64 value,
65 65 AzureIotHubFieldsEnum.CERT_FILE_NAME
... ...
1 1 import { GcpPubsubFieldsEnum, GcpPubsubFieldsNameEnum } from '../../../enum/formField/external';
2 2 import { AttributeConfiguration } from '/@/views/rule/designer/src/components/AttributeConfiguration';
3   -import { FileItemType, getFileData } from '../../../src/components/CredentialsCard/config';
  3 +import { FileItemType, getFileData } from '../AzureIotHub/CredentialsCard/config';
4 4 import { FormSchema, useComponentRegister } from '/@/components/Form';
5 5
6 6 useComponentRegister('AttributeConfiguration', AttributeConfiguration);
... ...
... ... @@ -27,6 +27,7 @@ export const formSchemas: FormSchema[] = [
27 27 allowClear: true,
28 28 options: Object.keys(MessagePropertiesEnum).map((value) => ({ label: value, value })),
29 29 placeholder: `请选择${RabbitmqFieldsNameEnum.ROUTING_KEY_PATTERN}`,
  30 + getPopupContainer: () => document.body,
30 31 },
31 32 },
32 33 {
... ...
... ... @@ -80,8 +80,7 @@ export const formSchemas: FormSchema[] = [
80 80 component: 'Select',
81 81 required: true,
82 82 ifShow: ({ model }) =>
83   - model[SendEmailFieldsEnum.TLS_VERSION] &&
84   - !model[SendEmailFieldsEnum.USE_SYSTEM_SMTP_SETTINGS],
  83 + model[SendEmailFieldsEnum.ENABLE_TLS] && !model[SendEmailFieldsEnum.USE_SYSTEM_SMTP_SETTINGS],
85 84 componentProps: {
86 85 options: Object.keys(TSLVersionEnum).map((value) => ({
87 86 label: TSLVersionNameEnum[value],
... ... @@ -107,7 +106,8 @@ export const formSchemas: FormSchema[] = [
107 106 required: true,
108 107 colProps: { span: 12 },
109 108 ifShow: ({ model }) =>
110   - !model[SendEmailFieldsEnum.USE_SYSTEM_SMTP_SETTINGS] && model[SendEmailFieldsEnum.PROXY_HOST],
  109 + !model[SendEmailFieldsEnum.USE_SYSTEM_SMTP_SETTINGS] &&
  110 + model[SendEmailFieldsEnum.ENABLE_PROXY],
111 111 componentProps: {
112 112 placeholder: `请输入${SendEmailFieldsNameEnum.PROXY_HOST}`,
113 113 },
... ... @@ -119,7 +119,8 @@ export const formSchemas: FormSchema[] = [
119 119 required: true,
120 120 colProps: { span: 12 },
121 121 ifShow: ({ model }) =>
122   - !model[SendEmailFieldsEnum.USE_SYSTEM_SMTP_SETTINGS] && model[SendEmailFieldsEnum.PROXY_PORT],
  122 + !model[SendEmailFieldsEnum.USE_SYSTEM_SMTP_SETTINGS] &&
  123 + model[SendEmailFieldsEnum.ENABLE_PROXY],
123 124 componentProps: {
124 125 placeholder: `请输入${SendEmailFieldsNameEnum.PROXY_PORT}`,
125 126 },
... ... @@ -129,7 +130,8 @@ export const formSchemas: FormSchema[] = [
129 130 label: SendEmailFieldsNameEnum.PROXY_USER,
130 131 component: 'Input',
131 132 ifShow: ({ model }) =>
132   - !model[SendEmailFieldsEnum.USE_SYSTEM_SMTP_SETTINGS] && model[SendEmailFieldsEnum.PROXY_USER],
  133 + !model[SendEmailFieldsEnum.USE_SYSTEM_SMTP_SETTINGS] &&
  134 + model[SendEmailFieldsEnum.ENABLE_PROXY],
133 135 componentProps: {
134 136 placeholder: `请输入${SendEmailFieldsNameEnum.PROXY_USER}`,
135 137 },
... ... @@ -138,7 +140,9 @@ export const formSchemas: FormSchema[] = [
138 140 field: SendEmailFieldsEnum.PROXY_PASSWORD,
139 141 label: SendEmailFieldsNameEnum.PROXY_PASSWORD,
140 142 component: 'Input',
141   - ifShow: ({ model }) => !model[SendEmailFieldsEnum.USE_SYSTEM_SMTP_SETTINGS],
  143 + ifShow: ({ model }) =>
  144 + !model[SendEmailFieldsEnum.USE_SYSTEM_SMTP_SETTINGS] &&
  145 + model[SendEmailFieldsEnum.ENABLE_PROXY],
142 146 componentProps: {
143 147 placeholder: `请输入${SendEmailFieldsNameEnum.PROXY_PASSWORD}`,
144 148 },
... ...
... ... @@ -58,7 +58,7 @@ export const formSchemas: FormSchema[] = [
58 58 !model[SendSMSFieldsEnum.USE_SYSTEM_SMS_SETTINGS] &&
59 59 model[SendSMSFieldsEnum.TYPE] === SMSServiceProviderEnum.TWILIO,
60 60 componentProps: {
61   - placeholder: `请输入${SendSMSFieldsEnum.NUMBER_FROM}`,
  61 + placeholder: `请输入${SendSMSFieldsNameEnum.NUMBER_FROM}`,
62 62 },
63 63 },
64 64 {
... ...
1   -import { NodeBindDataFieldEnum, NodeBindDataFieldNameEnum } from '../../../enum/node';
  1 +import {
  2 + CheckAlarmStatusFieldEnum,
  3 + CheckAlarmStatusFieldNameEnum,
  4 +} from '../../../enum/formField/filter';
2 5 import { FormSchema } from '/@/components/Form';
3 6 import { AlarmStatus, AlarmStatusMean } from '/@/enums/alarmEnum';
4 7
5 8 export const formSchemas: FormSchema[] = [
6 9 {
7   - field: NodeBindDataFieldEnum.ALARM_STATUS_LIST,
  10 + field: CheckAlarmStatusFieldEnum.ALARM_STATUS_LIST,
8 11 component: 'Select',
9   - label: NodeBindDataFieldNameEnum.ALARM_STATUS_LIST,
  12 + label: CheckAlarmStatusFieldNameEnum.ALARM_STATUS_LIST,
10 13 required: true,
11 14 componentProps: {
12 15 mode: 'multiple',
13 16 getPopupContainer: () => document.body,
14   - placeholder: `请选择${NodeBindDataFieldNameEnum.ALARM_STATUS_LIST}`,
  17 + placeholder: `请选择${CheckAlarmStatusFieldNameEnum.ALARM_STATUS_LIST}`,
15 18 options: [
16 19 {
17 20 label: AlarmStatusMean[AlarmStatus.CLEARED_UN_ACK],
... ...
1   -import { NodeBindDataFieldEnum, NodeBindDataFieldNameEnum } from '../../../enum/node';
  1 +import {
  2 + CheckExistenceFieldsEnum,
  3 + CheckExistenceFieldsNameEnum,
  4 +} from '../../../enum/formField/filter';
2 5 import { FormSchema } from '/@/components/Form';
3 6
4 7 export const formSchemas: FormSchema[] = [
5 8 {
6   - field: NodeBindDataFieldEnum.MESSAGE_NAMES,
  9 + field: CheckExistenceFieldsEnum.MESSAGE_NAMES,
7 10 component: 'Select',
8   - label: NodeBindDataFieldNameEnum.MESSAGE_NAMES,
  11 + label: CheckExistenceFieldsNameEnum.MESSAGE_NAMES,
9 12 componentProps: {
10 13 mode: 'tags',
11 14 open: false,
12 15 getPopupContainer: () => document.body,
  16 + placeholder: `请选择${CheckExistenceFieldsNameEnum.MESSAGE_NAMES}`,
13 17 },
14 18 },
15 19 {
16   - field: NodeBindDataFieldEnum.METADATA_NAMES,
  20 + field: CheckExistenceFieldsEnum.METADATA_NAMES,
17 21 component: 'Select',
18   - label: NodeBindDataFieldNameEnum.METADATA_NAMES,
  22 + label: CheckExistenceFieldsNameEnum.METADATA_NAMES,
19 23 componentProps: {
20 24 mode: 'tags',
21 25 open: false,
22 26 getPopupContainer: () => document.body,
  27 + placeholder: `请选择${CheckExistenceFieldsNameEnum.METADATA_NAMES}`,
23 28 },
24 29 },
25 30 {
26   - field: NodeBindDataFieldEnum.CHECK_ALL_KEYS,
  31 + field: CheckExistenceFieldsEnum.CHECK_ALL_KEYS,
27 32 component: 'Checkbox',
28   - label: NodeBindDataFieldNameEnum.CHECK_ALL_KEYS,
29   - labelWidth: 200,
  33 + label: '',
  34 + renderComponentContent: () => ({
  35 + default: () => CheckExistenceFieldsNameEnum.CHECK_ALL_KEYS,
  36 + }),
30 37 },
31 38 ];
... ...
... ... @@ -6,70 +6,115 @@ import {
6 6 RelationTypeEnum,
7 7 RelationTypeNameEnum,
8 8 } from '../../../enum/form';
9   -import { NodeBindDataFieldEnum, NodeBindDataFieldNameEnum } from '../../../enum/node';
10   -import { deviceProfilePage } from '/@/api/device/deviceManager';
  9 +import {
  10 + CheckRelationFieldsEnum,
  11 + CheckRelationFieldsNameEnum,
  12 +} from '../../../enum/formField/filter';
11 13 import { FormSchema } from '/@/components/Form';
  14 +import {
  15 + getEntityDevice,
  16 + getEntityAssets,
  17 + getEntityViews,
  18 + getEntityTenant,
  19 + getEntityCustomer,
  20 + getEntityUser,
  21 + getEntityDashboard,
  22 + getEntityEdge,
  23 +} from '/@/api/ruleChainDesigner';
  24 +import { useUserStore } from '/@/store/modules/user';
  25 +
  26 +export const getEntityIdSelect = (type: EntityTypeEnum) => {
  27 + const method = {
  28 + [EntityTypeEnum.DEVICE]: getEntityDevice,
  29 + [EntityTypeEnum.ASSET]: getEntityAssets,
  30 + [EntityTypeEnum.ENTITY_VIEW]: getEntityViews,
  31 + [EntityTypeEnum.TENANT]: async () => {
  32 + const userInfo = useUserStore();
  33 + const params = { tenantId: userInfo.getUserInfo.tenantId! };
  34 + const result = await getEntityTenant(params);
  35 + return Array.isArray(result) ? result : [result];
  36 + },
  37 + [EntityTypeEnum.CUSTOMER]: getEntityCustomer,
  38 + [EntityTypeEnum.USER]: getEntityUser,
  39 + [EntityTypeEnum.DASHBOARD]: getEntityDashboard,
  40 + [EntityTypeEnum.EDGE]: getEntityEdge,
  41 + };
  42 +
  43 + const params: Recordable = {
  44 + page: 0,
  45 + pageSize: 50,
  46 + };
  47 +
  48 + return {
  49 + placeholder: `请选择${EntityTypeNameEnum[type] ?? ''}`,
  50 + resultField: 'data',
  51 + labelField: 'name',
  52 + valueField: 'id.id',
  53 + searchField: 'textSearch',
  54 + params,
  55 + api: method[type],
  56 + searchApi: method[type],
  57 + };
  58 +};
12 59
13 60 export const formSchemas: FormSchema[] = [
14 61 {
15   - field: NodeBindDataFieldEnum.NAME,
16   - component: 'Input',
17   - label: NodeBindDataFieldNameEnum.NAME,
18   - },
19   - {
20   - field: NodeBindDataFieldEnum.CHECK_FOR_SINGLE_ENTITY,
  62 + field: CheckRelationFieldsEnum.CHECK_FOR_SINGLE_ENTITY,
21 63 component: 'Checkbox',
22 64 label: '',
23 65 renderComponentContent: () => ({
24   - default: () => NodeBindDataFieldNameEnum.CHECK_FOR_SINGLE_ENTITY,
  66 + default: () => CheckRelationFieldsNameEnum.CHECK_FOR_SINGLE_ENTITY,
25 67 }),
26 68 },
27 69 {
28   - field: NodeBindDataFieldEnum.DIRECTION,
  70 + field: CheckRelationFieldsEnum.DIRECTION,
29 71 component: 'Select',
30   - label: NodeBindDataFieldEnum.DIRECTION,
  72 + label: CheckRelationFieldsNameEnum.DIRECTION,
31 73 componentProps: {
32 74 options: [
33 75 { label: DirectionNameEnum.FROM, value: DirectionEnum.FROM },
34 76 { label: DirectionNameEnum.TO, value: DirectionEnum.TO },
35 77 ],
  78 + placeholder: `请选择${CheckRelationFieldsNameEnum.DIRECTION}`,
  79 + getPopupContainer: () => document.body,
36 80 },
37 81 },
38 82 {
39   - field: NodeBindDataFieldEnum.ENTITY_TYPE,
  83 + field: CheckRelationFieldsEnum.ENTITY_TYPE,
40 84 component: 'Select',
41   - label: NodeBindDataFieldNameEnum.ENTITY_TYPE,
  85 + label: CheckRelationFieldsNameEnum.ENTITY_TYPE,
42 86 colProps: { span: 8 },
43   - componentProps: {
44   - options: Object.keys(EntityTypeEnum).map((key) => ({
45   - label: EntityTypeNameEnum[key],
46   - value: key,
47   - })),
  87 + componentProps: ({ formActionType }) => {
  88 + const { setFieldsValue } = formActionType;
  89 + return {
  90 + options: Object.keys(EntityTypeEnum).map((key) => ({
  91 + label: EntityTypeNameEnum[key],
  92 + value: key,
  93 + })),
  94 + placeholder: `请选择${CheckRelationFieldsNameEnum.ENTITY_TYPE}`,
  95 + getPopupContainer: () => document.body,
  96 + onChange: () => {
  97 + setFieldsValue({ [CheckRelationFieldsEnum.ENTITY_ID]: null });
  98 + },
  99 + };
48 100 },
49 101 },
50 102 {
51   - field: NodeBindDataFieldEnum.ENTITY_ID,
52   - component: 'ApiSelectScrollLoad',
  103 + field: CheckRelationFieldsEnum.ENTITY_ID,
  104 + component: 'ApiSearchSelect',
53 105 label: ' ',
54 106 colProps: { span: 16 },
55   - show: ({ model }) => model[NodeBindDataFieldEnum.ENTITY_TYPE],
  107 + show: ({ model }) => model[CheckRelationFieldsEnum.ENTITY_TYPE],
56 108 componentProps: ({ formModel }) => {
57   - const entityType = formModel[NodeBindDataFieldEnum.ENTITY_TYPE];
  109 + const entityType = formModel[CheckRelationFieldsEnum.ENTITY_TYPE];
58 110
59   - return {
60   - showSearch: true,
61   - api: deviceProfilePage,
62   - resultField: 'items',
63   - labelField: 'name',
64   - valueField: 'id',
65   - placeholder: `请选择${EntityTypeNameEnum[entityType]}`,
66   - };
  111 + return getEntityIdSelect(entityType);
67 112 },
68 113 },
69 114 {
70   - field: NodeBindDataFieldEnum.RELEATION_TYPE,
  115 + field: CheckRelationFieldsEnum.RELEATION_TYPE,
71 116 component: 'Select',
72   - label: NodeBindDataFieldNameEnum.RELEATION_TYPE,
  117 + label: CheckRelationFieldsNameEnum.RELEATION_TYPE,
73 118 defaultValue: RelationTypeEnum.CONTAINS,
74 119 componentProps: {
75 120 options: Object.keys(RelationTypeEnum).map((value) => ({
... ...
1 1 import { PerimeterTypeEnum, RangeUtilEnum, RangeUtilNameEnum } from '../../../enum/form';
2   -import { NodeBindDataFieldEnum, NodeBindDataFieldNameEnum } from '../../../enum/node';
  2 +import {
  3 + GpsGeofencingFilterFieldsEnum,
  4 + GpsGeofencingFilterFieldsNameEnum,
  5 +} from '../../../enum/formField/filter';
3 6 import { FormSchema } from '/@/components/Form';
4 7
5 8 export const formSchemas: FormSchema[] = [
6 9 {
7   - field: NodeBindDataFieldEnum.LATITUDE_KEY_NAME,
  10 + field: GpsGeofencingFilterFieldsEnum.LATITUDE_KEY_NAME,
8 11 component: 'Input',
9   - label: NodeBindDataFieldNameEnum.LATITUDE_KEY_NAME,
  12 + label: GpsGeofencingFilterFieldsNameEnum.LATITUDE_KEY_NAME,
10 13 },
11 14 {
12   - field: NodeBindDataFieldEnum.LONGITUDE_KEY_NAME,
  15 + field: GpsGeofencingFilterFieldsEnum.LONGITUDE_KEY_NAME,
13 16 component: 'Input',
14   - label: NodeBindDataFieldNameEnum.LONGITUDE_KEY_NAME,
  17 + label: GpsGeofencingFilterFieldsNameEnum.LONGITUDE_KEY_NAME,
15 18 },
16 19 {
17   - field: NodeBindDataFieldEnum.PERIMETER_TYPE,
  20 + field: GpsGeofencingFilterFieldsEnum.PERIMETER_TYPE,
18 21 component: 'Select',
19   - label: NodeBindDataFieldNameEnum.PERIMETER_TYPE,
  22 + label: GpsGeofencingFilterFieldsNameEnum.PERIMETER_TYPE,
20 23 componentProps: {
21 24 options: Object.keys(PerimeterTypeEnum).map((value) => ({ label: value, value })),
22 25 },
23 26 },
24 27 {
25   - field: NodeBindDataFieldEnum.FETCH_PERIMETER_INFO_FROM_MESSAGE_METADATA,
  28 + field: GpsGeofencingFilterFieldsEnum.FETCH_PERIMETER_INFO_FROM_MESSAGE_METADATA,
26 29 component: 'Checkbox',
27 30 label: '',
28 31 renderComponentContent: () => ({
29   - default: () => NodeBindDataFieldNameEnum.FETCH_PERIMETER_INFO_FROM_MESSAGE_METADATA,
  32 + default: () => GpsGeofencingFilterFieldsNameEnum.FETCH_PERIMETER_INFO_FROM_MESSAGE_METADATA,
30 33 }),
31 34 },
32 35 {
33   - field: NodeBindDataFieldEnum.PERIMETER_KEY_NAME,
  36 + field: GpsGeofencingFilterFieldsEnum.PERIMETER_KEY_NAME,
34 37 component: 'Input',
35   - label: NodeBindDataFieldNameEnum.PERIMETER_KEY_NAME,
36   - show: ({ model }) => model[NodeBindDataFieldEnum.FETCH_PERIMETER_INFO_FROM_MESSAGE_METADATA],
  38 + label: GpsGeofencingFilterFieldsNameEnum.PERIMETER_KEY_NAME,
  39 + show: ({ model }) =>
  40 + model[GpsGeofencingFilterFieldsEnum.FETCH_PERIMETER_INFO_FROM_MESSAGE_METADATA],
37 41 },
38 42 {
39   - field: NodeBindDataFieldEnum.POLYGONS_DEFINITION,
  43 + field: GpsGeofencingFilterFieldsEnum.POLYGONS_DEFINITION,
40 44 component: 'Input',
41   - label: NodeBindDataFieldNameEnum.POLYGONS_DEFINITION,
  45 + label: GpsGeofencingFilterFieldsNameEnum.POLYGONS_DEFINITION,
42 46 helpMessage:
43 47 'Please, use the following format for manual definition of polygon: [[lat1,lon1],[lat2,lon2], ... ,[latN,lonN]].',
44 48 show: ({ model }) =>
45   - !model[NodeBindDataFieldEnum.FETCH_PERIMETER_INFO_FROM_MESSAGE_METADATA] &&
46   - model[NodeBindDataFieldEnum.PERIMETER_TYPE] === PerimeterTypeEnum.POLYGON,
  49 + !model[GpsGeofencingFilterFieldsEnum.FETCH_PERIMETER_INFO_FROM_MESSAGE_METADATA] &&
  50 + model[GpsGeofencingFilterFieldsEnum.PERIMETER_TYPE] === PerimeterTypeEnum.POLYGON,
47 51 },
48 52 {
49   - field: NodeBindDataFieldEnum.CENTER_LATITUDE,
  53 + field: GpsGeofencingFilterFieldsEnum.CENTER_LATITUDE,
50 54 component: 'InputNumber',
51   - label: NodeBindDataFieldNameEnum.CENTER_LATITUDE,
  55 + label: GpsGeofencingFilterFieldsNameEnum.CENTER_LATITUDE,
52 56 colProps: { span: 12 },
53 57 show: ({ model }) =>
54   - model[NodeBindDataFieldEnum.PERIMETER_TYPE] === PerimeterTypeEnum.CIRCLE &&
55   - !model[NodeBindDataFieldEnum.FETCH_PERIMETER_INFO_FROM_MESSAGE_METADATA],
  58 + model[GpsGeofencingFilterFieldsEnum.PERIMETER_TYPE] === PerimeterTypeEnum.CIRCLE &&
  59 + !model[GpsGeofencingFilterFieldsEnum.FETCH_PERIMETER_INFO_FROM_MESSAGE_METADATA],
56 60 },
57 61 {
58   - field: NodeBindDataFieldEnum.CENTER_LONGITUDE,
  62 + field: GpsGeofencingFilterFieldsEnum.CENTER_LONGITUDE,
59 63 component: 'InputNumber',
60   - label: NodeBindDataFieldNameEnum.CENTER_LONGITUDE,
  64 + label: GpsGeofencingFilterFieldsNameEnum.CENTER_LONGITUDE,
61 65 colProps: { span: 12 },
62 66 show: ({ model }) =>
63   - model[NodeBindDataFieldEnum.PERIMETER_TYPE] === PerimeterTypeEnum.CIRCLE &&
64   - !model[NodeBindDataFieldEnum.FETCH_PERIMETER_INFO_FROM_MESSAGE_METADATA],
  67 + model[GpsGeofencingFilterFieldsEnum.PERIMETER_TYPE] === PerimeterTypeEnum.CIRCLE &&
  68 + !model[GpsGeofencingFilterFieldsEnum.FETCH_PERIMETER_INFO_FROM_MESSAGE_METADATA],
65 69 },
66 70 {
67   - field: NodeBindDataFieldEnum.RANGE,
  71 + field: GpsGeofencingFilterFieldsEnum.RANGE,
68 72 component: 'InputNumber',
69   - label: NodeBindDataFieldNameEnum.RANGE,
  73 + label: GpsGeofencingFilterFieldsNameEnum.RANGE,
70 74 colProps: { span: 12 },
71 75 show: ({ model }) =>
72   - model[NodeBindDataFieldEnum.PERIMETER_TYPE] === PerimeterTypeEnum.CIRCLE &&
73   - !model[NodeBindDataFieldEnum.FETCH_PERIMETER_INFO_FROM_MESSAGE_METADATA],
  76 + model[GpsGeofencingFilterFieldsEnum.PERIMETER_TYPE] === PerimeterTypeEnum.CIRCLE &&
  77 + !model[GpsGeofencingFilterFieldsEnum.FETCH_PERIMETER_INFO_FROM_MESSAGE_METADATA],
74 78 },
75 79 {
76   - field: NodeBindDataFieldEnum.RANGE_UNIT,
  80 + field: GpsGeofencingFilterFieldsEnum.RANGE_UNIT,
77 81 component: 'Select',
78   - label: NodeBindDataFieldNameEnum.RANGE_UNIT,
  82 + label: GpsGeofencingFilterFieldsNameEnum.RANGE_UNIT,
79 83 colProps: { span: 12 },
80 84 show: ({ model }) =>
81   - model[NodeBindDataFieldEnum.PERIMETER_TYPE] === PerimeterTypeEnum.CIRCLE &&
82   - !model[NodeBindDataFieldEnum.FETCH_PERIMETER_INFO_FROM_MESSAGE_METADATA],
  85 + model[GpsGeofencingFilterFieldsEnum.PERIMETER_TYPE] === PerimeterTypeEnum.CIRCLE &&
  86 + !model[GpsGeofencingFilterFieldsEnum.FETCH_PERIMETER_INFO_FROM_MESSAGE_METADATA],
83 87 componentProps: {
84 88 options: Object.keys(RangeUtilEnum).map((value) => ({
85 89 label: RangeUtilNameEnum[value],
... ...
1   -import { NodeBindDataFieldEnum, NodeBindDataFieldNameEnum } from '../../../enum/node';
2   -import { findDictItemByCode } from '/@/api/system/dict';
  1 +import { MessageTypesEnum, MessageTypesNameEnum } from '../../../enum/form';
  2 +import { MessageTypeFieldsEnum, MessageTypeFieldsNameEnum } from '../../../enum/formField/filter';
3 3 import { FormSchema } from '/@/components/Form';
4   -import { DictEnum } from '/@/enums/dictEnum';
5 4
6 5 export const formSchemas: FormSchema[] = [
7 6 {
8   - field: NodeBindDataFieldEnum.MESSAGE_TYPES,
9   - component: 'ApiSelect',
10   - label: NodeBindDataFieldNameEnum.MESSAGE_TYPES,
  7 + field: MessageTypeFieldsEnum.MESSAGE_TYPES,
  8 + component: 'Select',
  9 + label: MessageTypeFieldsNameEnum.MESSAGE_TYPES,
11 10 componentProps: {
12   - api: findDictItemByCode,
13   - params: {
14   - dictCode: DictEnum.MESSAGE_TYPES_FILTER,
15   - },
  11 + options: Object.keys(MessageTypesEnum).map((value) => ({
  12 + label: MessageTypesNameEnum[value],
  13 + value,
  14 + })),
16 15 mode: 'multiple',
17   - labelField: 'itemText',
18   - valueField: 'itemValue',
  16 + placeholder: `请选择${MessageTypeFieldsNameEnum.MESSAGE_TYPES}`,
19 17 getPopupContainer: () => document.body,
20 18 },
21 19 },
... ...
1   -import { NodeBindDataFieldEnum, NodeBindDataFieldNameEnum } from '../../../enum/node';
  1 +import {
  2 + OriginatorTypeFieldsEnum,
  3 + OriginatorTypeFieldsNameEnum,
  4 +} from '../../../enum/formField/filter';
2 5 import { findDictItemByCode } from '/@/api/system/dict';
3 6 import { FormSchema } from '/@/components/Form';
4 7 import { DictEnum } from '/@/enums/dictEnum';
5 8
6 9 export const formSchemas: FormSchema[] = [
7 10 {
8   - field: NodeBindDataFieldEnum.ORIGINATOR_TYPES,
  11 + field: OriginatorTypeFieldsEnum.ORIGINATOR_TYPES,
9 12 component: 'ApiSelect',
10   - label: NodeBindDataFieldNameEnum.ORIGINATOR_TYPES,
  13 + label: OriginatorTypeFieldsNameEnum.ORIGINATOR_TYPES,
11 14 componentProps: {
12 15 api: findDictItemByCode,
13 16 params: {
... ...
1 1 import { h } from 'vue';
2   -import { NodeBindDataFieldEnum, NodeBindDataFieldNameEnum } from '../../../enum/node';
3 2 import { FormSchema, useComponentRegister } from '/@/components/Form';
4 3 import HelpMessage from './HelpMessage.vue';
5 4 import { JavascriptEditorWithTestModal } from '/@/views/rule/designer/src/components/JavaScriptFilterModal';
  5 +import { ScriptFieldsEnum, ScriptFieldsNameEnum } from '../../../enum/formField/filter';
6 6
7 7 useComponentRegister('JavascriptEditorWithTestModal', JavascriptEditorWithTestModal);
8 8
9 9 export const formSchemas: FormSchema[] = [
10 10 {
11   - field: NodeBindDataFieldEnum.JS_SCRIPT,
  11 + field: ScriptFieldsEnum.JS_SCRIPT,
12 12 component: 'JavascriptEditorWithTestModal',
13   - label: NodeBindDataFieldNameEnum.JS_SCRIPT,
  13 + label: ScriptFieldsNameEnum.JS_SCRIPT,
14 14 changeEvent: 'update:value',
15 15 valueField: 'value',
16 16 renderComponentContent: () => {
... ...
1   -import { NodeBindDataFieldEnum, NodeBindDataFieldNameEnum } from '../../../enum/node';
  1 +import { SwitchFieldsEnum, SwitchFieldsNameEnum } from '../../../enum/formField/filter';
2 2 import { FormSchema, useComponentRegister } from '/@/components/Form';
3 3 import { JavascriptEditorWithTestModal } from '/@/views/rule/designer/src/components/JavaScriptFilterModal';
4 4
... ... @@ -6,9 +6,9 @@ useComponentRegister('JavascriptEditorWithTestModal', JavascriptEditorWithTestMo
6 6
7 7 export const formSchemas: FormSchema[] = [
8 8 {
9   - field: NodeBindDataFieldEnum.JS_SCRIPT,
  9 + field: SwitchFieldsEnum.JS_SCRIPT,
10 10 component: 'JavascriptEditorWithTestModal',
11   - label: NodeBindDataFieldNameEnum.JS_SCRIPT,
  11 + label: SwitchFieldsNameEnum.JS_SCRIPT,
12 12 changeEvent: 'update:value',
13 13 valueField: 'value',
14 14 componentProps: {
... ...
... ... @@ -2,6 +2,17 @@ import { RuleChainFieldsEnum, RuleChainFieldsNameEnum } from '../../../enum/form
2 2 import { getRuleChains } from '/@/api/ruleDesigner';
3 3 import { FormSchema } from '/@/components/Form';
4 4
  5 +const fetch = async (params: Recordable) => {
  6 + try {
  7 + const result = await getRuleChains(params);
  8 + const data = result.data.map((item) => ({ label: item.name, value: item.id.id }));
  9 + return data;
  10 + } catch (err) {
  11 + console.error(err);
  12 + return [];
  13 + }
  14 +};
  15 +
5 16 export const formSchemas: FormSchema[] = [
6 17 {
7 18 field: RuleChainFieldsEnum.RULE_CHAIN_ID,
... ... @@ -11,16 +22,13 @@ export const formSchemas: FormSchema[] = [
11 22 return {
12 23 placeholder: '请选择所属产品',
13 24 showSearch: true,
14   - resultField: 'data',
15   - labelField: 'name',
16   - valueField: 'id.id',
17 25 params: {
18 26 pageSize: 50,
19 27 page: 0,
20 28 type: 'CORE',
21 29 },
22   - api: getRuleChains,
23   - searchApi: getRuleChains,
  30 + api: fetch,
  31 + searchApi: fetch,
24 32 getPopupContainer: () => document.body,
25 33 };
26 34 },
... ...
... ... @@ -28,5 +28,7 @@ export const formSchemas: FormSchema[] = [
28 28 component: 'RelationsQuery',
29 29 label: ChangeOriginatorFieldsNameEnum.RELATIONS_QUERY,
30 30 slot: ChangeOriginatorFieldsEnum.RELATIONS_QUERY,
  31 + ifShow: ({ model }) =>
  32 + model[ChangeOriginatorFieldsEnum.ORIGINATOR_SOURCE] === OriginatorSourceEnum.RELATED,
31 33 },
32 34 ];
... ...
1   -<script lang="ts" setup></script>
  1 +<script lang="ts" setup>
  2 + import { EdgeBindDataFieldEnum, EdgeBindDataFieldNameEnum } from '../../../enum/node';
  3 + import { ConnectionModalDefineExposeType } from '../../../types';
  4 + import { NodeData } from '../../../types/node';
  5 + import { BasicForm, FormSchema, useForm } from '/@/components/Form';
  6 +
  7 + defineProps<{
  8 + config: NodeData;
  9 + }>();
  10 +
  11 + const getSchemas = (): FormSchema[] => {
  12 + return [
  13 + {
  14 + field: EdgeBindDataFieldEnum.TYPE,
  15 + component: 'Select',
  16 + label: EdgeBindDataFieldNameEnum.TYPE,
  17 + componentProps: {
  18 + mode: 'tags',
  19 + open: false,
  20 + getPopupContainer: () => document.body,
  21 + placeholder: '请输入链接标签',
  22 + },
  23 + },
  24 + ];
  25 + };
  26 +
  27 + const [register, { setFieldsValue, getFieldsValue }] = useForm({
  28 + showActionButtonGroup: false,
  29 + schemas: getSchemas(),
  30 + });
  31 +
  32 + const getValue: ConnectionModalDefineExposeType['getFieldsValue'] = async () => {
  33 + return getFieldsValue();
  34 + };
  35 +
  36 + const setValue: ConnectionModalDefineExposeType['setFieldsValue'] = async (value) => {
  37 + const { type } = value || {};
  38 + setFieldsValue(type);
  39 + };
  40 +
  41 + defineExpose({
  42 + getFieldsValue: getValue,
  43 + setFieldsValue: setValue,
  44 + } as ConnectionModalDefineExposeType);
  45 +</script>
2 46
3 47 <template>
4   - <div>自定义</div>
  48 + <BasicForm @register="register" />
5 49 </template>
... ...
... ... @@ -16,8 +16,8 @@ export const TopFormSchemas: FormSchema[] = [
16 16 },
17 17 {
18 18 field: NodeBindDataFieldEnum.DEBUG_MODE,
19   - component: 'Checkbox',
20   - label: '',
  19 + component: 'Switch',
  20 + label: NodeBindDataFieldNameEnum.DEBUG_MODE,
21 21 colProps: {
22 22 offset: 2,
23 23 span: 6,
... ...
1 1 <script lang="ts" setup>
2 2 import { Card, Select, Tag, Form, Button } from 'ant-design-vue';
3 3 import { ref, toRaw, unref, watch } from 'vue';
4   - import { MessageTypesFilterEnum, MessageTypesFilterNameEnum } from '../../../enum/form';
  4 + import { MessageTypesEnum, MessageTypesNameEnum } from '../../../enum/form';
5 5 import { JSONEditor } from '/@/components/CodeEditor';
6 6 import { Icon } from '/@/components/Icon';
7 7 import { JavaScriptFunctionEditor } from '/@/components/Form';
... ... @@ -12,7 +12,7 @@
12 12 interface Value {
13 13 msg: Recordable;
14 14 metadata: Recordable;
15   - msgType: MessageTypesFilterEnum;
  15 + msgType: MessageTypesEnum;
16 16 javascriptFunction: string;
17 17 }
18 18
... ... @@ -35,9 +35,9 @@
35 35 (eventName: 'save', value: Value): void;
36 36 }>();
37 37
38   - const messageType = ref(MessageTypesFilterEnum.POST_TELEMETRY);
39   - const messageTypeOptions = Object.keys(MessageTypesFilterEnum).map((value) => ({
40   - label: MessageTypesFilterNameEnum[value],
  38 + const messageType = ref(MessageTypesEnum.POST_TELEMETRY_REQUEST);
  39 + const messageTypeOptions = Object.keys(MessageTypesEnum).map((value) => ({
  40 + label: MessageTypesNameEnum[value],
41 41 value,
42 42 }));
43 43
... ...
1 1 <script lang="ts" setup>
2 2 import { BasicModal, useModalInner } from '/@/components/Modal';
3 3 import JavaScriptFilterTest from './JavaScriptFilterTest.vue';
4   - import { MessageTypesFilterEnum } from '../../../enum/form';
  4 + import { MessageTypesEnum } from '../../../enum/form';
5 5 import { ref } from 'vue';
6 6 import { JavaScriptFunctionEditor } from '/@/components/Form';
7 7
... ... @@ -15,7 +15,7 @@
15 15 interface SaveValueType {
16 16 msg: Recordable;
17 17 metadata: Recordable;
18   - msgType: MessageTypesFilterEnum;
  18 + msgType: MessageTypesEnum;
19 19 javascriptFunction: string;
20 20 }
21 21
... ...
... ... @@ -56,8 +56,8 @@
56 56 placement="left"
57 57 color="#fff"
58 58 trigger="hover"
59   - :mouse-enter-delay="0.3"
60   - overlay-class-name="!max-w-72"
  59 + :mouse-enter-delay="0.5"
  60 + overlay-class-name="!max-w-90"
61 61 >
62 62 <template #title>
63 63 <section class="text-dark-900">
... ...
... ... @@ -42,6 +42,7 @@ export interface UserInfo {
42 42 plainRoles?: PlainRoleInfo[];
43 43 phoneNumber?: string;
44 44 email?: string;
  45 + tenantId?: string;
45 46 }
46 47
47 48 export interface BeforeMiniState {
... ...