Commit cb92cfe2662182f63cacae893c087aa4be589fcc

Authored by fengwotao
2 parents 3e9658c8 3aa5b0f1

Merge branch 'main_dev' into ft

@@ -206,10 +206,7 @@ export const step1Schemas: FormSchema[] = [ @@ -206,10 +206,7 @@ export const step1Schemas: FormSchema[] = [
206 }, 206 },
207 ifShow: ({ values }) => { 207 ifShow: ({ values }) => {
208 return ( 208 return (
209 - values?.transportType === TransportTypeEnum.TCP &&  
210 - (values.deviceType === DeviceTypeEnum.SENSOR ||  
211 - values.deviceType === DeviceTypeEnum.GATEWAY) &&  
212 - values?.codeType === TaskTypeEnum.CUSTOM 209 + values?.transportType === TransportTypeEnum.TCP && values?.codeType === TaskTypeEnum.CUSTOM
213 ); 210 );
214 }, 211 },
215 }, 212 },
@@ -263,6 +263,7 @@ @@ -263,6 +263,7 @@
263 class="!text-lg" 263 class="!text-lg"
264 icon="ant-design:form-outlined" 264 icon="ant-design:form-outlined"
265 @click.stop="handleUpdate(item)" 265 @click.stop="handleUpdate(item)"
  266 + :disabled="item.name == 'default'"
266 /> 267 />
267 </Tooltip> 268 </Tooltip>
268 <AuthDropDown 269 <AuthDropDown
@@ -286,7 +287,7 @@ @@ -286,7 +287,7 @@
286 onConfirm: handleDelete.bind(null, [item.id]), 287 onConfirm: handleDelete.bind(null, [item.id]),
287 disabled: item.default, 288 disabled: item.default,
288 }, 289 },
289 - disabled: item.default, 290 + disabled: item.default || item.name == 'default',
290 }, 291 },
291 ]" 292 ]"
292 /> 293 />
1 -<template>  
2 - <div>属性</div>  
3 -</template>  
4 -  
5 -<script setup lang="ts"></script>  
6 -  
7 -<style lang="less" scoped></style>  
1 -<template>  
2 - <div>警告</div>  
3 -</template>  
4 -  
5 -<script setup lang="ts"></script>  
6 -  
7 -<style lang="less" scoped></style>  
1 -import ChainDetailDrawer from './index.vue';  
2 -export { ChainDetailDrawer };  
1 -<template>  
2 - <BasicDrawer  
3 - v-bind="$attrs"  
4 - isDetail  
5 - @register="register"  
6 - destroyOnClose  
7 - @close="closeDrawer"  
8 - :title="deviceDetail.alias || deviceDetail.name"  
9 - width="80%"  
10 - >  
11 - <Tabs v-model:activeKey="activeKey" :size="size">  
12 - <TabPane key="1" tab="详情">  
13 - <div>详情</div>  
14 - </TabPane>  
15 - <TabPane key="2" tab="属性">  
16 - <Attribute />  
17 - </TabPane>  
18 - <TabPane key="3" tab="最新遥测数据"><div>最新遥测数据</div></TabPane>  
19 - <TabPane key="4" tab="警告">  
20 - <div>警告</div>  
21 - </TabPane>  
22 - <TabPane key="5" tab="事件">  
23 - <div>事件</div>  
24 - </TabPane>  
25 - <!-- 网关设备并且场家是TBox -->  
26 - <TabPane key="6" tab="关联">  
27 - <div>关联</div>  
28 - </TabPane>  
29 - <!-- 网关设备并且是TBox -->  
30 -  
31 - <TabPane key="7" tab="审计日志">  
32 - <div>审计日志</div>  
33 - </TabPane>  
34 - </Tabs>  
35 - </BasicDrawer>  
36 -</template>  
37 -<script lang="ts" setup>  
38 - import { ref } from 'vue';  
39 - import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';  
40 -  
41 - import { Tabs, TabPane } from 'ant-design-vue';  
42 - import { DeviceRecord } from '/@/api/device/model/deviceModel';  
43 -  
44 - import Attribute from './component/Attribute.vue';  
45 -  
46 - // defineProps({});  
47 -  
48 - // defineEmits([]);  
49 -  
50 - const activeKey = ref('1');  
51 - const size = ref('small');  
52 - const deviceDetail = ref<DeviceRecord>({} as unknown as DeviceRecord);  
53 - // 详情回显  
54 - const [register] = useDrawerInner(async (data) => {  
55 - console.log(data, 'data');  
56 - });  
57 - const closeDrawer = () => {  
58 - activeKey.value = '1';  
59 - };  
60 -</script>  
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 <Authority> 5 <Authority>
6 <a-button type="primary" @click="handleAdd"> 新增规则链 </a-button> 6 <a-button type="primary" @click="handleAdd"> 新增规则链 </a-button>
7 </Authority> 7 </Authority>
8 - <Upload :show-upload-list="false" :customRequest="handleImport"> 8 + <Upload :show-upload-list="false" accept=".json," :customRequest="handleImport">
9 <Button type="primary" :loading="importLoading"> 导入规则链 </Button> 9 <Button type="primary" :loading="importLoading"> 导入规则链 </Button>
10 </Upload> 10 </Upload>
11 <Authority> 11 <Authority>
@@ -64,7 +64,7 @@ @@ -64,7 +64,7 @@
64 ifShow: !record.root, 64 ifShow: !record.root,
65 popConfirm: { 65 popConfirm: {
66 title: '是否确认删除', 66 title: '是否确认删除',
67 - confirm: handleDeleteOrBatchDelete.bind(null, record), 67 + confirm: handleDeleteOrBatchDelete.bind(null, record.id.id),
68 }, 68 },
69 }, 69 },
70 ]" 70 ]"
@@ -113,7 +113,7 @@ @@ -113,7 +113,7 @@
113 113
114 const isEmptyObject = (value: any) => isObject(value) && !Object.keys(value).length; 114 const isEmptyObject = (value: any) => isObject(value) && !Object.keys(value).length;
115 const importLoading = ref<boolean>(false); 115 const importLoading = ref<boolean>(false);
116 - const hasBatchDelete = ref<boolean>(false); 116 + const hasBatchDelete = ref<boolean>(true);
117 117
118 const beforeFetch = (params) => { 118 const beforeFetch = (params) => {
119 Reflect.set(params, 'page', params.page - 1); 119 Reflect.set(params, 'page', params.page - 1);
@@ -148,8 +148,11 @@ @@ -148,8 +148,11 @@
148 labelWidth: 120, 148 labelWidth: 120,
149 schemas: searchFormSchema, 149 schemas: searchFormSchema,
150 }, 150 },
  151 + resizeHeightOffset: 40,
  152 + canResize: true,
151 fetchSetting: { 153 fetchSetting: {
152 pageField: 'page', 154 pageField: 'page',
  155 + totalField: 'totalElements',
153 listField: 'data', 156 listField: 'data',
154 }, 157 },
155 beforeFetch: (params) => beforeFetch(params), 158 beforeFetch: (params) => beforeFetch(params),
@@ -208,6 +211,7 @@ @@ -208,6 +211,7 @@
208 }); 211 });
209 const { ruleChain, metadata } = data as any; 212 const { ruleChain, metadata } = data as any;
210 213
  214 + // 创建规则链
211 const value = await createRuleChine(ruleChain); 215 const value = await createRuleChine(ruleChain);
212 const { id } = value; 216 const { id } = value;
213 217
@@ -215,6 +219,7 @@ @@ -215,6 +219,7 @@
215 ruleChainId: id, 219 ruleChainId: id,
216 ...metadata, 220 ...metadata,
217 }; 221 };
  222 + // 导入规则链详情nodes的东西
218 const rules = await importRuleChine(values); 223 const rules = await importRuleChine(values);
219 224
220 rules 225 rules
@@ -239,9 +244,17 @@ @@ -239,9 +244,17 @@
239 const { firstNodeIndex, nodes, connections, ruleChainConnections } = await exportRuleChine( 244 const { firstNodeIndex, nodes, connections, ruleChainConnections } = await exportRuleChine(
240 record.id.id 245 record.id.id
241 ); 246 );
  247 +
  248 + const node = nodes.map((item) => {
  249 + return {
  250 + ...item,
  251 + id: undefined,
  252 + ruleChainId: undefined,
  253 + };
  254 + });
242 const value = { 255 const value = {
243 ruleChain: { additionalInfo, name, type, firstRuleNodeId, root, debugMode, configuration }, 256 ruleChain: { additionalInfo, name, type, firstRuleNodeId, root, debugMode, configuration },
244 - metadata: { firstNodeIndex, nodes, connections, ruleChainConnections }, 257 + metadata: { firstNodeIndex, nodes: node, connections, ruleChainConnections },
245 }; 258 };
246 exportJSONFile(value, name); 259 exportJSONFile(value, name);
247 }; 260 };
@@ -257,26 +270,25 @@ @@ -257,26 +270,25 @@
257 setProps({ 270 setProps({
258 loading: false, 271 loading: false,
259 }); 272 });
  273 + reload();
260 } 274 }
261 - reload();  
262 }; 275 };
263 276
264 - const handleDeleteOrBatchDelete = async (record: Recordable | null) => { 277 + const handleDeleteOrBatchDelete = async (id: string | null) => {
265 setProps({ 278 setProps({
266 loading: true, 279 loading: true,
267 }); 280 });
268 try { 281 try {
269 - if (!record) { 282 + if (!id) {
270 const ids = getSelectRowKeys(); 283 const ids = getSelectRowKeys();
271 await Promise.all(ids.map((item) => deleteRuleChine(item))); 284 await Promise.all(ids.map((item) => deleteRuleChine(item)));
272 return; 285 return;
273 } 286 }
274 - await deleteRuleChine(record.id.id); 287 + await deleteRuleChine(id);
275 } finally { 288 } finally {
276 setProps({ 289 setProps({
277 loading: false, 290 loading: false,
278 }); 291 });
279 -  
280 createMessage.success('删除成功'); 292 createMessage.success('删除成功');
281 clearSelectedRowKeys(); 293 clearSelectedRowKeys();
282 reload(); 294 reload();
@@ -212,6 +212,7 @@ @@ -212,6 +212,7 @@
212 return { 212 return {
213 value: item.id, 213 value: item.id,
214 label: item.name, 214 label: item.name,
  215 + status: item.status,
215 }; 216 };
216 }); 217 });
217 deviceList.value = editEntryIdData.value; 218 deviceList.value = editEntryIdData.value;
@@ -576,7 +577,11 @@ @@ -576,7 +577,11 @@
576 setFields(skipUnwrap.conditionItemRefs, true); 577 setFields(skipUnwrap.conditionItemRefs, true);
577 setFields(skipUnwrap.actionItemRefs, true); 578 setFields(skipUnwrap.actionItemRefs, true);
578 const data = await getOrganizationAlarmConfig({ organizationId: newValue }); 579 const data = await getOrganizationAlarmConfig({ organizationId: newValue });
579 - alarmConfigList.value = data.map((item) => ({ label: item.name, value: item.id })); 580 + alarmConfigList.value = data.map((item) => ({
  581 + label: item.name,
  582 + value: item.id,
  583 + status: item.status,
  584 + }));
580 setEditAlarmConfig(skipUnwrap.actionItemRefs, alarmConfigList); 585 setEditAlarmConfig(skipUnwrap.actionItemRefs, alarmConfigList);
581 // setFields(skipUnwrap.actionItemRefs, true); 586 // setFields(skipUnwrap.actionItemRefs, true);
582 // console.log(unref(organizationIdRef)); 587 // console.log(unref(organizationIdRef));
@@ -587,7 +592,7 @@ @@ -587,7 +592,7 @@
587 const data = await getOrganizationAlarmConfig({ 592 const data = await getOrganizationAlarmConfig({
588 organizationId: isUpdate.value ? provideOrgid.value : addOrgId.value, 593 organizationId: isUpdate.value ? provideOrgid.value : addOrgId.value,
589 }); 594 });
590 - const res = data.map((item) => ({ label: item.name, value: item.id })); 595 + const res = data.map((item) => ({ label: item.name, value: item.id, status: item.status }));
591 isUpdate.value ? (editAlarmConfigData.value = res) : (alarmConfigList.value = res); 596 isUpdate.value ? (editAlarmConfigData.value = res) : (alarmConfigList.value = res);
592 unref(skipUnwrap.actionItemRefs)?.map((item: any) => { 597 unref(skipUnwrap.actionItemRefs)?.map((item: any) => {
593 if (isUpdate.value) { 598 if (isUpdate.value) {
@@ -143,7 +143,7 @@ @@ -143,7 +143,7 @@
143 } 143 }
144 if (predicateIsRequired) return createMessage.error('请填写条件筛选'); 144 if (predicateIsRequired) return createMessage.error('请填写条件筛选');
145 //TODO-fengtao-设备、属性、条件筛选验证 145 //TODO-fengtao-设备、属性、条件筛选验证
146 - return { ...getFieldsValue(), predicate, schedule: alarmScheduleRef.value.scheduleData }; 146 + return { ...getFieldsValue(), predicate, schedule: alarmScheduleRef.value?.scheduleData };
147 }; 147 };
148 148
149 //TODO-fengtao 149 //TODO-fengtao
@@ -361,10 +361,10 @@ @@ -361,10 +361,10 @@
361 }; 361 };
362 //FT add 2022-10-27 362 //FT add 2022-10-27
363 const updateEditFieldAlarmConfig = (alarmConfigList) => { 363 const updateEditFieldAlarmConfig = (alarmConfigList) => {
364 - alarmConfigOptions.value = alarmConfigList.value; 364 + alarmConfigOptions.value = alarmConfigList.value.filter((item) => item.status);
365 }; 365 };
366 const updateFieldAlarmConfig = (alarmConfigList) => { 366 const updateFieldAlarmConfig = (alarmConfigList) => {
367 - alarmConfigOptions.value = alarmConfigList.value; 367 + alarmConfigOptions.value = alarmConfigList.value.filter((item) => item.status);
368 }; 368 };
369 //FT add 2022-10-27 369 //FT add 2022-10-27
370 370
@@ -2,18 +2,19 @@ @@ -2,18 +2,19 @@
2 import { Button, Spin } from 'ant-design-vue'; 2 import { Button, Spin } from 'ant-design-vue';
3 import { BasicForm, useForm } from '/@/components/Form'; 3 import { BasicForm, useForm } from '/@/components/Form';
4 import { BasicModal, useModal } from '/@/components/Modal'; 4 import { BasicModal, useModal } from '/@/components/Modal';
5 - import { formSchemas } from './config'; 5 + import { formSchemas, FormFieldsEnum } from './config';
6 import { ref } from 'vue'; 6 import { ref } from 'vue';
7 import { unref } from 'vue'; 7 import { unref } from 'vue';
8 import { composeModbusModalData } from './util'; 8 import { composeModbusModalData } from './util';
9 import { ModbusCommandValueType } from './type'; 9 import { ModbusCommandValueType } from './type';
10 import { genModbusCommand } from '/@/api/task'; 10 import { genModbusCommand } from '/@/api/task';
  11 + import { isNullOrUnDef } from '/@/utils/is';
11 12
12 const emit = defineEmits(['update:value']); 13 const emit = defineEmits(['update:value']);
13 14
14 const [registerModal] = useModal(); 15 const [registerModal] = useModal();
15 16
16 - const [registerForm, { getFieldsValue }] = useForm({ 17 + const [registerForm, { getFieldsValue, validate }] = useForm({
17 schemas: formSchemas, 18 schemas: formSchemas,
18 showActionButtonGroup: false, 19 showActionButtonGroup: false,
19 rowProps: { gutter: 10 }, 20 rowProps: { gutter: 10 },
@@ -25,8 +26,12 @@ @@ -25,8 +26,12 @@
25 const loading = ref(false); 26 const loading = ref(false);
26 const handleGetValue = async () => { 27 const handleGetValue = async () => {
27 try { 28 try {
  29 + await validate();
28 const value = getFieldsValue(); 30 const value = getFieldsValue();
29 const record = composeModbusModalData(value as ModbusCommandValueType); 31 const record = composeModbusModalData(value as ModbusCommandValueType);
  32 +
  33 + if (record[FormFieldsEnum.REGISTER_VALUES]?.some((item) => isNullOrUnDef(item))) return;
  34 +
30 loading.value = true; 35 loading.value = true;
31 const result = await genModbusCommand(record); 36 const result = await genModbusCommand(record);
32 commandValue.value = result; 37 commandValue.value = result;
@@ -46,7 +51,7 @@ @@ -46,7 +51,7 @@
46 return arr.reduce((prev, next) => `${prev} ${next.join('')}`, ''); 51 return arr.reduce((prev, next) => `${prev} ${next.join('')}`, '');
47 }; 52 };
48 53
49 - const handleOk = () => { 54 + const handleOk = async () => {
50 emit('update:value', unref(commandValue)); 55 emit('update:value', unref(commandValue));
51 }; 56 };
52 </script> 57 </script>
@@ -212,6 +212,7 @@ export const formSchemas: FormSchema[] = [ @@ -212,6 +212,7 @@ export const formSchemas: FormSchema[] = [
212 showTotalControl: false, 212 showTotalControl: false,
213 itemProps: () => { 213 itemProps: () => {
214 return { 214 return {
  215 + required: true,
215 valueField: 'value', 216 valueField: 'value',
216 changeEvent: 'update:value', 217 changeEvent: 'update:value',
217 } as FormSchema; 218 } as FormSchema;
@@ -41,6 +41,7 @@ @@ -41,6 +41,7 @@
41 { 41 {
42 label: '删除', 42 label: '删除',
43 auth: 'api:yt:role:delete', 43 auth: 'api:yt:role:delete',
  44 + ifShow: !record.status,
44 icon: 'ant-design:delete-outlined', 45 icon: 'ant-design:delete-outlined',
45 color: 'error', 46 color: 'error',
46 popConfirm: { 47 popConfirm: {
@@ -40,7 +40,9 @@ export const useSort = ( @@ -40,7 +40,9 @@ export const useSort = (
40 inited = true; 40 inited = true;
41 } 41 }
42 42
43 - onMounted(() => handleSort()); 43 + onMounted(async () => {
  44 + setTimeout(() => handleSort(), 500);
  45 + });
44 46
45 return { containerEl }; 47 return { containerEl };
46 }; 48 };
@@ -282,7 +282,7 @@ export const commonDataSourceSchemas = (): FormSchema[] => { @@ -282,7 +282,7 @@ export const commonDataSourceSchemas = (): FormSchema[] => {
282 }, 282 },
283 componentProps: ({ formActionType, formModel }) => { 283 componentProps: ({ formActionType, formModel }) => {
284 const { setFieldsValue } = formActionType; 284 const { setFieldsValue } = formActionType;
285 - const { codeType } = formModel || {}; 285 + const { codeType, deviceType, transportType } = formModel || {};
286 return { 286 return {
287 // api: findDictItemByCode, 287 // api: findDictItemByCode,
288 api: async (params: Recordable) => { 288 api: async (params: Recordable) => {
@@ -293,6 +293,14 @@ export const commonDataSourceSchemas = (): FormSchema[] => { @@ -293,6 +293,14 @@ export const commonDataSourceSchemas = (): FormSchema[] => {
293 (item) => item.itemValue == CommandTypeEnum.ATTRIBUTE.toString() 293 (item) => item.itemValue == CommandTypeEnum.ATTRIBUTE.toString()
294 ); 294 );
295 } 295 }
  296 +
  297 + // TCP网关子 --> 不能要服务命令类型
  298 + if (deviceType == 'SENSOR' && transportType == 'TCP') {
  299 + return record.filter(
  300 + (item) => item.itemValue == CommandTypeEnum.ATTRIBUTE.toString()
  301 + );
  302 + }
  303 +
296 if (codeType == TaskTypeEnum.MODBUS_RTU) { 304 if (codeType == TaskTypeEnum.MODBUS_RTU) {
297 // setFieldsValue({ [DataSourceField.COMMAND_TYPE]: undefined }); 305 // setFieldsValue({ [DataSourceField.COMMAND_TYPE]: undefined });
298 return record.filter( 306 return record.filter(
@@ -304,7 +312,6 @@ export const commonDataSourceSchemas = (): FormSchema[] => { @@ -304,7 +312,6 @@ export const commonDataSourceSchemas = (): FormSchema[] => {
304 ); 312 );
305 } 313 }
306 } catch (error) { 314 } catch (error) {
307 - console.log(error);  
308 return []; 315 return [];
309 } 316 }
310 }, 317 },