Showing
6 changed files
with
76 additions
and
16 deletions
@@ -210,6 +210,7 @@ export interface DeviceRecord { | @@ -210,6 +210,7 @@ export interface DeviceRecord { | ||
210 | }; | 210 | }; |
211 | customerName?: string; | 211 | customerName?: string; |
212 | customerId?: string; | 212 | customerId?: string; |
213 | + gatewayId?: string; | ||
213 | } | 214 | } |
214 | 215 | ||
215 | export interface DeviceModelOfMatterAttrs { | 216 | export interface DeviceModelOfMatterAttrs { |
@@ -413,13 +413,25 @@ export const customerForm: FormSchema[] = [ | @@ -413,13 +413,25 @@ export const customerForm: FormSchema[] = [ | ||
413 | 413 | ||
414 | export const orgForm: FormSchema[] = [ | 414 | export const orgForm: FormSchema[] = [ |
415 | { | 415 | { |
416 | + field: 'sensorOrganizationId', | ||
417 | + label: '依据网关设备请求的组织数组', | ||
418 | + component: 'Input', | ||
419 | + ifShow: false, | ||
420 | + }, | ||
421 | + { | ||
416 | field: 'organizationId', | 422 | field: 'organizationId', |
417 | component: 'OrgTreeSelect', | 423 | component: 'OrgTreeSelect', |
418 | helpMessage: updateOrgHelpMessage, | 424 | helpMessage: updateOrgHelpMessage, |
419 | label: '选择组织', | 425 | label: '选择组织', |
420 | required: true, | 426 | required: true, |
421 | - componentProps: { | ||
422 | - placeholder: '请选择', | 427 | + componentProps: ({ formModel }) => { |
428 | + return { | ||
429 | + apiTreeSelectProps: { | ||
430 | + params: { | ||
431 | + organizationId: formModel?.sensorOrganizationId, | ||
432 | + }, | ||
433 | + }, | ||
434 | + }; | ||
423 | }, | 435 | }, |
424 | }, | 436 | }, |
425 | ]; | 437 | ]; |
@@ -15,11 +15,11 @@ | @@ -15,11 +15,11 @@ | ||
15 | </template> | 15 | </template> |
16 | 16 | ||
17 | <script lang="ts"> | 17 | <script lang="ts"> |
18 | - import { defineComponent, ref } from 'vue'; | 18 | + import { defineComponent, ref, nextTick } from 'vue'; |
19 | import { BasicModal, useModalInner } from '/@/components/Modal'; | 19 | import { BasicModal, useModalInner } from '/@/components/Modal'; |
20 | import { BasicForm, useForm } from '/@/components/Form'; | 20 | import { BasicForm, useForm } from '/@/components/Form'; |
21 | import { orgForm } from '../../config/detail.config'; | 21 | import { orgForm } from '../../config/detail.config'; |
22 | - import { doBatchUpdateDevice } from '/@/api/device/deviceManager'; | 22 | + import { doBatchUpdateDevice, getGATEWAY } from '/@/api/device/deviceManager'; |
23 | import { useMessage } from '/@/hooks/web/useMessage'; | 23 | import { useMessage } from '/@/hooks/web/useMessage'; |
24 | 24 | ||
25 | export default defineComponent({ | 25 | export default defineComponent({ |
@@ -34,11 +34,28 @@ | @@ -34,11 +34,28 @@ | ||
34 | 34 | ||
35 | const record = ref([]); | 35 | const record = ref([]); |
36 | 36 | ||
37 | - const [registerModal, { closeModal, setModalProps }] = useModalInner((data) => { | 37 | + const [registerModal, { closeModal, setModalProps }] = useModalInner(async (data) => { |
38 | + await nextTick(); | ||
38 | record.value = data; | 39 | record.value = data; |
40 | + // 如果是网关子设备 | ||
41 | + const deviceTypeFilterSensor = data | ||
42 | + .filter((filterItem) => filterItem.deviceType === 'SENSOR') | ||
43 | + .map((mapItem) => mapItem.tbDeviceId); | ||
44 | + // 根据gatewayId获取网关所属组织 | ||
45 | + for (let item of deviceTypeFilterSensor) { | ||
46 | + await getGATEWAYByTbDeviceId(item); | ||
47 | + } | ||
39 | }); | 48 | }); |
40 | 49 | ||
41 | - const [registerForm, { validate, resetFields }] = useForm({ | 50 | + const getGATEWAYByTbDeviceId = async (tbDeviceId: string) => { |
51 | + const result = await getGATEWAY(tbDeviceId); | ||
52 | + if (!result) return; | ||
53 | + setFieldsValue({ | ||
54 | + sensorOrganizationId: result.organizationId, | ||
55 | + }); | ||
56 | + }; | ||
57 | + | ||
58 | + const [registerForm, { validate, resetFields, setFieldsValue }] = useForm({ | ||
42 | labelWidth: 100, | 59 | labelWidth: 100, |
43 | showActionButtonGroup: false, | 60 | showActionButtonGroup: false, |
44 | schemas: orgForm, | 61 | schemas: orgForm, |
@@ -70,7 +70,7 @@ | @@ -70,7 +70,7 @@ | ||
70 | text: '批量修改组织', | 70 | text: '批量修改组织', |
71 | icon: 'ant-design:wallet-outlined', | 71 | icon: 'ant-design:wallet-outlined', |
72 | event: '', | 72 | event: '', |
73 | - disabled: !batchPrivateFlag, | 73 | + disabled: !batchPrivateFlag || batchSensorFlag || diffBatchSensorFlag, |
74 | onClick: handleBatchOrg.bind(null), | 74 | onClick: handleBatchOrg.bind(null), |
75 | }, | 75 | }, |
76 | ]" | 76 | ]" |
@@ -360,6 +360,10 @@ | @@ -360,6 +360,10 @@ | ||
360 | 360 | ||
361 | const batchPrivateFlag = ref(true); | 361 | const batchPrivateFlag = ref(true); |
362 | 362 | ||
363 | + const batchSensorFlag = ref(false); | ||
364 | + | ||
365 | + const diffBatchSensorFlag = ref(false); | ||
366 | + | ||
363 | const [ | 367 | const [ |
364 | registerTable, | 368 | registerTable, |
365 | { | 369 | { |
@@ -420,6 +424,14 @@ | @@ -420,6 +424,14 @@ | ||
420 | !selectedRows.every((item) => (item as DeviceRecord).deviceType === deviceType); | 424 | !selectedRows.every((item) => (item as DeviceRecord).deviceType === deviceType); |
421 | 425 | ||
422 | batchPrivateFlag.value = selectedRows.some((item: DeviceRecord) => !item?.customerId); | 426 | batchPrivateFlag.value = selectedRows.some((item: DeviceRecord) => !item?.customerId); |
427 | + const filterSensor = selectedRows.map((filterItem: DeviceRecord) => filterItem.deviceType); | ||
428 | + batchSensorFlag.value = | ||
429 | + filterSensor.includes('SENSOR') && | ||
430 | + (filterSensor.includes('DIRECT_CONNECTION') || filterSensor.includes('GATEWAY')); // 网关子和直连设备或者网关设备,则禁用组织修改 | ||
431 | + const filterGatewayId = selectedRows | ||
432 | + .filter((filterItem: DeviceRecord) => filterItem.deviceType === 'SENSOR') | ||
433 | + .map((mapItem: DeviceRecord) => mapItem.gatewayId); | ||
434 | + diffBatchSensorFlag.value = [...new Set(filterGatewayId)].length > 1; // 数组长度大于1,说明选择的网关子设备所属网关为多个,则禁用组织修改 | ||
423 | isPublicAndPrivateFlag.value = | 435 | isPublicAndPrivateFlag.value = |
424 | selectedRows.some((item: DeviceRecord) => !item?.customerId) && | 436 | selectedRows.some((item: DeviceRecord) => !item?.customerId) && |
425 | selectedRows.some((item: DeviceRecord) => item?.customerAdditionalInfo?.isPublic); | 437 | selectedRows.some((item: DeviceRecord) => item?.customerAdditionalInfo?.isPublic); |
@@ -432,6 +444,14 @@ | @@ -432,6 +444,14 @@ | ||
432 | !selectedRows.every((item) => (item as DeviceRecord).deviceType === deviceType); | 444 | !selectedRows.every((item) => (item as DeviceRecord).deviceType === deviceType); |
433 | 445 | ||
434 | batchPrivateFlag.value = selectedRows.some((item) => !item?.customerId); | 446 | batchPrivateFlag.value = selectedRows.some((item) => !item?.customerId); |
447 | + const filterSensor = selectedRows.map((filterItem) => filterItem.deviceType); | ||
448 | + batchSensorFlag.value = | ||
449 | + filterSensor.includes('SENSOR') && | ||
450 | + (filterSensor.includes('DIRECT_CONNECTION') || filterSensor.includes('GATEWAY')); // 网关子和直连设备或者网关设备,则禁用组织修改 | ||
451 | + const filterGatewayId = selectedRows | ||
452 | + .filter((filterItem: DeviceRecord) => filterItem.deviceType === 'SENSOR') | ||
453 | + .map((mapItem: DeviceRecord) => mapItem.gatewayId); | ||
454 | + diffBatchSensorFlag.value = [...new Set(filterGatewayId)].length > 1; // 数组长度大于1,说明选择的网关子设备所属网关为多个,则禁用组织修改 | ||
435 | isPublicAndPrivateFlag.value = | 455 | isPublicAndPrivateFlag.value = |
436 | selectedRows.some((item) => !item?.customerId) && | 456 | selectedRows.some((item) => !item?.customerId) && |
437 | selectedRows.some((item) => item?.customerAdditionalInfo?.isPublic); | 457 | selectedRows.some((item) => item?.customerAdditionalInfo?.isPublic); |
@@ -108,13 +108,20 @@ export const formSchema: FormSchema[] = [ | @@ -108,13 +108,20 @@ export const formSchema: FormSchema[] = [ | ||
108 | label: '消息类型', | 108 | label: '消息类型', |
109 | required: true, | 109 | required: true, |
110 | component: 'ApiSelect', | 110 | component: 'ApiSelect', |
111 | - componentProps: { | ||
112 | - api: findDictItemByCode, | ||
113 | - params: { | ||
114 | - dictCode: 'message_type', | ||
115 | - }, | ||
116 | - labelField: 'itemText', | ||
117 | - valueField: 'itemValue', | 111 | + componentProps({ formActionType }) { |
112 | + return { | ||
113 | + api: findDictItemByCode, | ||
114 | + params: { | ||
115 | + dictCode: 'message_type', | ||
116 | + }, | ||
117 | + labelField: 'itemText', | ||
118 | + valueField: 'itemValue', | ||
119 | + onChange() { | ||
120 | + formActionType.setFieldsValue({ | ||
121 | + platformType: null, | ||
122 | + }); | ||
123 | + }, | ||
124 | + }; | ||
118 | }, | 125 | }, |
119 | }, | 126 | }, |
120 | { | 127 | { |
@@ -130,7 +137,10 @@ export const formSchema: FormSchema[] = [ | @@ -130,7 +137,10 @@ export const formSchema: FormSchema[] = [ | ||
130 | const messageType = Reflect.get(formModel, 'messageType'); | 137 | const messageType = Reflect.get(formModel, 'messageType'); |
131 | if (isMessage(messageType)) | 138 | if (isMessage(messageType)) |
132 | return result.filter( | 139 | return result.filter( |
133 | - (item) => item.itemValue !== 'DING_TALK' && item.itemValue !== 'ALI_VOICE' | 140 | + (item) => |
141 | + item.itemValue !== 'DING_TALK' && | ||
142 | + item.itemValue !== 'ALI_VOICE' && | ||
143 | + item.itemValue !== 'ENTERPRISE_WECHAT' | ||
134 | ); | 144 | ); |
135 | 145 | ||
136 | if (isEnterpriseWechat(messageType)) { | 146 | if (isEnterpriseWechat(messageType)) { |