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)) { |