Commit 699f3ff22fc624f3dfa88adc0aa642572df0a140

Authored by xp.Huang
2 parents c8f43318 1bd717ed

Merge branch 'ft_local_dev' into 'main'

fix:修改Teambitin上的问题

See merge request huang/yun-teng-iot-front!417
... ... @@ -80,9 +80,10 @@ export const deleteDevice = (ids: string[]) => {
80 80 * 查询设备配置
81 81 * @param params pageSize page name
82 82 */
83   -export const deviceProfile = () => {
  83 +export const deviceProfile = (params) => {
84 84 return defHttp.get({
85 85 url: DeviceManagerApi.DEVICE_PROFILE_URL_ME,
  86 + params,
86 87 });
87 88 };
88 89
... ...
... ... @@ -21,7 +21,7 @@ enum ScreenManagerApi {
21 21 // GET_ATTRBUTELIST = '/device/keys',
22 22 GET_ATTRBUTELIST = '/device/attributes/',
23 23 ALARM_PROFILE = '/alarm/profile/',
24   - MASTER_GET_DEVICE = '/device/list/master',
  24 + MASTER_GET_DEVICE = '/device/list',
25 25 }
26 26
27 27 /**
... ... @@ -125,8 +125,8 @@ export const byOrganizationIdGetMasterDevice = (params: {
125 125 }) => {
126 126 const { organizationId, deviceProfileId } = params;
127 127 return defHttp.get({
128   - url: `${ScreenManagerApi.MASTER_GET_DEVICE}/${organizationId}`,
129   - params: { deviceProfileId },
  128 + url: `${ScreenManagerApi.MASTER_GET_DEVICE}`,
  129 + params: { deviceProfileId, organizationId },
130 130 });
131 131 };
132 132 //TODO-fengtao
... ...
... ... @@ -81,6 +81,9 @@ export const columns: BasicColumn[] = [
81 81 title: '名称',
82 82 dataIndex: 'name',
83 83 width: 120,
  84 + format: (_text: string, record: Recordable) => {
  85 + return record?.alias ? record?.alias : record?.name;
  86 + },
84 87 },
85 88 {
86 89 title: '设备状态',
... ...
... ... @@ -447,39 +447,3 @@ export const formSchema: FormSchema[] = [
447 447 },
448 448 },
449 449 ];
450   -
451   -export const topicTableColumn: BasicColumn[] = [
452   - {
453   - title: '功能',
454   - dataIndex: 'function',
455   - width: 100,
456   - },
457   - {
458   - title: '发布主题',
459   - dataIndex: 'release',
460   - width: 100,
461   - },
462   -
463   - {
464   - title: '订阅主题',
465   - dataIndex: 'subscribe',
466   - width: 100,
467   - },
468   - {
469   - title: '平台',
470   - dataIndex: 'platform',
471   - width: 30,
472   - },
473   -
474   - {
475   - title: '设备',
476   - dataIndex: 'device',
477   - width: 30,
478   - },
479   -
480   - // {
481   - // title: '描述',
482   - // dataIndex: 'description',
483   - // width: 100,
484   - // },
485   -];
... ...
1 1 <script lang="ts" setup>
2   - import { topicTableColumn } from '../device.profile.data';
3 2 import { BasicTable, useTable } from '/@/components/Table';
4   -
5   - const list = [
6   - {
7   - function: '网关/直连设备遥测',
8   - release: 'v1/devices/me/telemetry',
9   - subscribe: 'v1/devices/me/telemetry',
10   - platform: '订阅',
11   - device: '发布',
12   - },
13   - {
14   - function: '服务端命令下发到设备端',
15   - release: 'v1/devices/me/rpc/request/$request_id',
16   - subscribe: 'v1/devices/me/rpc/request/+',
17   - platform: '发布',
18   - device: '订阅',
19   - },
20   - {
21   - function: '设备端响应命令到服务端',
22   - release: 'v1/devices/me/rpc/response/$request_id',
23   - subscribe: 'v1/devices/me/rpc/response/+',
24   - platform: '订阅',
25   - device: '发布',
26   - },
27   - {
28   - function: '直连设备属性上报',
29   - release: 'v1/devices/me/attributes',
30   - subscribe: 'v1/devices/me/attributes',
31   - platform: '订阅',
32   - device: '发布',
33   - },
34   -
35   - {
36   - function: '设备端请求服务端共享属性及客户端属性',
37   - release: 'vv1/devices/me/attributes/response/$request_id',
38   - subscribe: 'v1/devices/me/attributes/response/+',
39   - platform: '订阅',
40   - device: '发布',
41   - },
42   - {
43   - function: '服务端响应共享属性集客户端属性给设备端',
44   - release: 'v1/devices/me/attributes/response/$request_id',
45   - subscribe: 'v1/devices/me/attributes/response/+',
46   - platform: '发布',
47   - device: '订阅',
48   - },
49   - {
50   - function: '设备端请求服务端子设备共享属性及客户端属性',
51   - release: 'v1/gateway/attributes/request',
52   - subscribe: 'v1/gateway/attributes/request',
53   - platform: '订阅',
54   - device: '发布',
55   - },
56   - {
57   - function: '服务端响应子设备共享属性及客户端属性给设备端',
58   - release: 'v1/gateway/attributes/response',
59   - subscribe: 'v1/gateway/attributes/response',
60   - platform: '发布',
61   - device: '订阅',
62   - },
63   - {
64   - function: '设备端上报子设备客户端属性',
65   - release: 'v1/gateway/attributes',
66   - subscribe: 'v1/gateway/attributes',
67   - platform: '订阅',
68   - device: '发布',
69   - },
70   - {
71   - function: '网关子设备遥测',
72   - release: 'v1/gateway/telemetry',
73   - subscribe: 'v1/gateway/telemetry',
74   - platform: '订阅',
75   - device: '发布',
76   - },
77   - ];
78   -
79   - const dataSource = list;
  3 + import { list, topicTableColumn } from './topic';
80 4
81 5 const [register] = useTable({
82 6 title: 'Topic',
83 7 showIndexColumn: false,
84   - dataSource,
  8 + dataSource: list,
85 9 columns: topicTableColumn,
86 10 bordered: true,
87 11 showTableSetting: true,
... ...
  1 +import { BasicColumn } from '/@/components/Table/src/types/table';
  2 +
  3 +export const topicTableColumn: BasicColumn[] = [
  4 + {
  5 + title: '设备类型',
  6 + dataIndex: 'deviceType',
  7 + width: 50,
  8 + customRender: ({ text, index }: { text: any; index: number }) => {
  9 + const obj: any = {
  10 + children: text,
  11 + attrs: {},
  12 + };
  13 + if (index === 0) {
  14 + obj.attrs.rowSpan = 6;
  15 + }
  16 + if (index > 0 && index < 6) {
  17 + obj.attrs.rowSpan = 0;
  18 + }
  19 + if (index > 6) {
  20 + obj.attrs.rowSpan = 0;
  21 + }
  22 + if (index === 6) {
  23 + obj.attrs.rowSpan = 4;
  24 + }
  25 + return obj;
  26 + },
  27 + },
  28 + {
  29 + title: '功能',
  30 + dataIndex: 'function',
  31 + width: 100,
  32 + },
  33 + {
  34 + title: '发布主题',
  35 + dataIndex: 'release',
  36 + width: 120,
  37 + },
  38 + {
  39 + title: '订阅主题',
  40 + dataIndex: 'subscribe',
  41 + width: 120,
  42 + },
  43 + {
  44 + title: '平台',
  45 + dataIndex: 'platform',
  46 + width: 30,
  47 + },
  48 + {
  49 + title: '设备',
  50 + dataIndex: 'device',
  51 + width: 30,
  52 + },
  53 +];
  54 +
  55 +export const list = [
  56 + {
  57 + deviceType: '网关/直连设备',
  58 + function: '网关/直连设备遥测',
  59 + release: 'v1/devices/me/telemetry',
  60 + subscribe: 'v1/devices/me/telemetry',
  61 + platform: '订阅',
  62 + device: '发布',
  63 + },
  64 + {
  65 + deviceType: '网关/直连设备',
  66 + function: '服务端命令下发到设备端',
  67 + release: 'v1/devices/me/rpc/request/$request_id',
  68 + subscribe: 'v1/devices/me/rpc/request/+',
  69 + platform: '发布',
  70 + device: '订阅',
  71 + },
  72 + {
  73 + deviceType: '网关/直连设备',
  74 + function: '设备端响应命令到服务端',
  75 + release: 'v1/devices/me/rpc/response/$request_id',
  76 + subscribe: 'v1/devices/me/rpc/response/+',
  77 + platform: '订阅',
  78 + device: '发布',
  79 + },
  80 + {
  81 + deviceType: '网关/直连设备',
  82 + function: '直连设备属性上报',
  83 + release: 'v1/devices/me/attributes',
  84 + subscribe: 'v1/devices/me/attributes',
  85 + platform: '订阅',
  86 + device: '发布',
  87 + },
  88 +
  89 + {
  90 + deviceType: '网关/直连设备',
  91 + function: '设备端请求服务端共享属性及客户端属性',
  92 + release: 'v1/devices/me/attributes/response/$request_id',
  93 + subscribe: 'v1/devices/me/attributes/response/+',
  94 + platform: '订阅',
  95 + device: '发布',
  96 + },
  97 + {
  98 + deviceType: '网关/直连设备',
  99 + function: '服务端响应共享属性集客户端属性给设备端',
  100 + release: 'v1/devices/me/attributes/response/$request_id',
  101 + subscribe: 'v1/devices/me/attributes/response/+',
  102 + platform: '发布',
  103 + device: '订阅',
  104 + },
  105 + {
  106 + deviceType: '网关子设备',
  107 + function: '设备端请求服务端子设备共享属性及客户端属性',
  108 + release: 'v1/gateway/attributes/request',
  109 + subscribe: 'v1/gateway/attributes/request',
  110 + platform: '订阅',
  111 + device: '发布',
  112 + },
  113 + {
  114 + deviceType: '网关子设备',
  115 + function: '服务端响应子设备共享属性及客户端属性给设备端',
  116 + release: 'v1/gateway/attributes/response',
  117 + subscribe: 'v1/gateway/attributes/response',
  118 + platform: '发布',
  119 + device: '订阅',
  120 + },
  121 + {
  122 + deviceType: '网关子设备',
  123 + function: '设备端上报子设备客户端属性',
  124 + release: 'v1/gateway/attributes',
  125 + subscribe: 'v1/gateway/attributes',
  126 + platform: '订阅',
  127 + device: '发布',
  128 + },
  129 + {
  130 + deviceType: '网关子设备',
  131 + function: '网关子设备遥测',
  132 + release: 'v1/gateway/telemetry',
  133 + subscribe: 'v1/gateway/telemetry',
  134 + platform: '订阅',
  135 + device: '发布',
  136 + },
  137 +];
... ...
... ... @@ -131,7 +131,7 @@
131 131 selectOptions.value = items.map((item) => {
132 132 if (item.deviceType !== 'GATEWAY')
133 133 return {
134   - label: item.name,
  134 + label: item.alias ? item.alias : item.name,
135 135 value: item.tbDeviceId,
136 136 id: item.id,
137 137 deviceProfileId: item.deviceProfileId,
... ... @@ -291,7 +291,7 @@
291 291 selectOptions.value = items.map((item) => {
292 292 if (item.deviceType !== 'GATEWAY')
293 293 return {
294   - label: item.name,
  294 + label: item.alias ? item.alias : item.name,
295 295 value: item.tbDeviceId,
296 296 id: item.id,
297 297 deviceProfileId: item.deviceProfileId,
... ... @@ -316,7 +316,7 @@
316 316 });
317 317 return {
318 318 ...T,
319   - label: item.name,
  319 + label: item.alias ? item.alias : item.name,
320 320 value: item.device,
321 321 attributes: item.attributes,
322 322 };
... ...
... ... @@ -245,6 +245,7 @@
245 245 operationType: trigger?.triggerCondition?.condition?.condition[0]?.valueType,
246 246 detail: trigger?.triggerCondition?.alarmDetails,
247 247 entityId: trigger?.entityId,
  248 + deviceType: trigger?.deviceType,
248 249 deviceProfileId: trigger?.deviceProfileId,
249 250 replaceValue: trigger?.triggerCondition?.condition?.spec?.predicate?.defaultValue,
250 251 time: trigger?.triggerCondition?.condition?.spec?.predicate?.defaultValue,
... ... @@ -325,6 +326,7 @@
325 326 operationType: condition?.triggerCondition?.condition?.condition[0]?.valueType,
326 327 detail: condition?.triggerCondition?.alarmDetails,
327 328 entityId: condition?.entityId,
  329 + deviceType: condition?.deviceType,
328 330 deviceProfileId: condition?.deviceProfileId,
329 331 replaceValue: condition?.triggerCondition?.condition?.spec?.predicate?.defaultValue,
330 332 time: condition?.triggerCondition?.condition?.spec?.predicate?.defaultValue,
... ... @@ -397,6 +399,7 @@
397 399 deviceId: action.deviceId,
398 400 alarm_config: action.alarmProfileId,
399 401 alarm_level: action.doContext.alarmLevel,
  402 + deviceType: action.deviceType,
400 403 });
401 404 // 如果是设备输出设置脚本值
402 405 if (action.outTarget === 'DEVICE_OUT') {
... ... @@ -436,6 +439,7 @@
436 439 .valueType,
437 440 detail: action.doContext.clearRule[index].triggerCondition.alarmDetails,
438 441 entityId: action.doContext.clearRule[index].entityId,
  442 + deviceType: action.doContext.clearRule[index].entityId?.deviceType,
439 443 deviceProfileId: action.doContext.clearRule[index]?.deviceProfileId,
440 444 replaceValue:
441 445 action.doContext.clearRule[index].triggerCondition.condition.spec.predicate
... ...
... ... @@ -193,6 +193,7 @@ export const trigger_condition_schema: FormSchema[] = [
193 193 field: 'triggered',
194 194 label: '',
195 195 component: 'Select',
  196 + defaultValue: 'SIMPLE',
196 197 componentProps: {
197 198 placeholder: '请选择触发类型',
198 199 options: [
... ... @@ -204,14 +205,44 @@ export const trigger_condition_schema: FormSchema[] = [
204 205 colProps: { span: 6 },
205 206 },
206 207 {
207   - field: 'deviceProfileId',
  208 + field: 'deviceType',
208 209 label: '',
209 210 component: 'ApiSelect',
210 211 colProps: { span: 6 },
  212 + defaultValue: 'SENSOR',
211 213 componentProps: ({ formActionType }) => {
  214 + const { setFieldsValue } = formActionType;
  215 + return {
  216 + api: findDictItemByCode,
  217 + params: {
  218 + dictCode: 'device_type',
  219 + },
  220 + placeholder: '请选择类型',
  221 + labelField: 'itemText',
  222 + valueField: 'itemValue',
  223 + getPopupContainer: () => document.body,
  224 + onChange(e) {
  225 + if (e) {
  226 + setFieldsValue({ deviceProfileId: '' });
  227 + }
  228 + },
  229 + };
  230 + },
  231 + },
  232 + {
  233 + field: 'deviceProfileId',
  234 + label: '',
  235 + component: 'ApiSelect',
  236 + colProps: { span: 6 },
  237 + componentProps: ({ formActionType, formModel }) => {
212 238 const { updateSchema, setFieldsValue } = formActionType;
  239 + const deviceType = formModel['deviceType'];
213 240 return {
214 241 api: deviceProfile,
  242 + params: {
  243 + deviceType,
  244 + },
  245 + showSearch: true,
215 246 placeholder: '请选择产品',
216 247 labelField: 'name',
217 248 valueField: 'id',
... ... @@ -372,14 +403,38 @@ export const actionSchema: FormSchema[] = [
372 403 colProps: { span: 6 },
373 404 },
374 405 {
  406 + field: 'deviceType',
  407 + label: '',
  408 + component: 'ApiSelect',
  409 + colProps: { span: 6 },
  410 + defaultValue: 'SENSOR',
  411 + componentProps: () => {
  412 + return {
  413 + api: findDictItemByCode,
  414 + params: {
  415 + dictCode: 'device_type',
  416 + },
  417 + placeholder: '请选择类型',
  418 + labelField: 'itemText',
  419 + valueField: 'itemValue',
  420 + getPopupContainer: () => document.body,
  421 + };
  422 + },
  423 + ifShow: ({ values }) => isDeviceOut(values.outTarget),
  424 + },
  425 + {
375 426 field: 'deviceProfileId',
376 427 label: '',
377 428 component: 'ApiSelect',
378 429 colProps: { span: 6 },
379   - componentProps: ({ formActionType }) => {
  430 + componentProps: ({ formActionType, formModel }) => {
380 431 const { setFieldsValue } = formActionType;
  432 + const deviceType = formModel['deviceType'];
381 433 return {
382 434 api: deviceProfile,
  435 + params: {
  436 + deviceType,
  437 + },
383 438 placeholder: '请选择产品',
384 439 labelField: 'name',
385 440 valueField: 'id',
... ...
... ... @@ -18,6 +18,7 @@ export const genTriggerOrConditionData = (triggerData) => {
18 18 timeUnit,
19 19 replaceValue,
20 20 deviceProfileId,
  21 + deviceType,
21 22 } = triggerData;
22 23 const mapPredicate = predicate?.map((item) => {
23 24 return {
... ... @@ -45,6 +46,7 @@ export const genTriggerOrConditionData = (triggerData) => {
45 46 triggerType,
46 47 entityType: device,
47 48 entityId: entityId?.length ? entityId : null,
  49 + deviceType,
48 50 triggerCondition: {
49 51 alarmDetails: detail,
50 52 condition: {
... ... @@ -83,6 +85,7 @@ export const genActionData = (actionData) => {
83 85 callType,
84 86 service,
85 87 thingsModelId,
  88 + deviceType,
86 89 } = actionData;
87 90 const clearRule = clearRules.map((item) => {
88 91 const mapPredicate = item.predicate.map((pred) => {
... ... @@ -117,6 +120,7 @@ export const genActionData = (actionData) => {
117 120 triggerType: item.triggerType,
118 121 entityType: item.device,
119 122 entityId: item.device === 'PART' ? item.entityId : null,
  123 + deviceType,
120 124 deviceProfileId: item.deviceProfileId,
121 125 triggerCondition: {
122 126 alarmDetails: item.detail,
... ... @@ -138,6 +142,7 @@ export const genActionData = (actionData) => {
138 142 {
139 143 alarmProfileId: alarm_config,
140 144 outTarget,
  145 + deviceType,
141 146 entityType: device ?? 'ALL',
142 147 deviceId: device === 'PART' ? deviceId : null,
143 148 deviceProfileId,
... ...
... ... @@ -103,7 +103,7 @@
103 103 params: '',
104 104 output: '',
105 105 dataType: 'HEX',
106   - saveOriginalData: 'false',
  106 + saveOriginalData: 'true',
107 107 });
108 108 const reportTypeOptions = reactive({
109 109 typeOptions: [],
... ... @@ -114,6 +114,10 @@
114 114 const { clipboardRef, copiedRef } = useCopyToClipboard();
115 115 const aceEditor = ref();
116 116 const aceRef = ref();
  117 + const setDefaultRadio = (p1, p2) => {
  118 + scriptForm.dataType = p1;
  119 + scriptForm.saveOriginalData = p2;
  120 + };
117 121 onMounted(async () => {
118 122 const res: any = await findDictItemByCode({
119 123 dictCode: 'report_data_type',
... ... @@ -127,8 +131,6 @@
127 131 reportTypeOptions.originalOptions = resOriginal.map((m) => {
128 132 return { label: m.itemText, value: m.itemValue };
129 133 });
130   - scriptForm.dataType = 'HEX';
131   - scriptForm.saveOriginalData = 'false';
132 134 });
133 135 // 初始化编辑器
134 136 const initEditor = (jsScript?: string) => {
... ... @@ -202,7 +204,7 @@
202 204 setTimeout(() => {
203 205 scriptForm.saveOriginalData = v.saveOriginalData === false ? 'false' : 'true';
204 206 scriptForm.dataType = v.dataType;
205   - }, 500);
  207 + }, 10);
206 208 });
207 209 aceEditor.value.setValue(v.convertJs);
208 210 handleFormat();
... ... @@ -229,6 +231,7 @@
229 231 setFormData,
230 232 setScriptContentData,
231 233 setScriptOutputData,
  234 + setDefaultRadio,
232 235 });
233 236 </script>
234 237 <style lang="less" scoped>
... ...
... ... @@ -56,6 +56,9 @@
56 56 ? '新增转换脚本'
57 57 : '测试转换脚本';
58 58 const okText = isText.value == 'test' ? '测试' : '确定';
  59 + if (unref(isTitle) == 'add') {
  60 + converScriptRef.value?.setDefaultRadio('HEX', 'true');
  61 + }
59 62 if (unref(isTitle) == 'edit') {
60 63 converScriptRef.value?.setFormData(data.record);
61 64 }
... ...