Commit 7ec6bc971b803d57d534b2b07c2c5d51b95a1151

Authored by dev001
1 parent fb7d09b8

perf: 修改设备列表,网关子设备,批量修改组织禁用逻辑修改

... ... @@ -210,6 +210,7 @@ export interface DeviceRecord {
210 210 };
211 211 customerName?: string;
212 212 customerId?: string;
  213 + gatewayId?: string;
213 214 }
214 215
215 216 export interface DeviceModelOfMatterAttrs {
... ...
... ... @@ -49,7 +49,7 @@
49 49 watch(
50 50 () => props.params,
51 51 () => {
52   - isFirstLoaded.value && fetch();
  52 + fetch();
53 53 },
54 54 { deep: true }
55 55 );
... ...
... ... @@ -413,13 +413,25 @@ export const customerForm: FormSchema[] = [
413 413
414 414 export const orgForm: FormSchema[] = [
415 415 {
  416 + field: 'sensorOrganizationId',
  417 + label: '依据网关设备请求的组织数组',
  418 + component: 'Input',
  419 + ifShow: false,
  420 + },
  421 + {
416 422 field: 'organizationId',
417 423 component: 'OrgTreeSelect',
418 424 helpMessage: updateOrgHelpMessage,
419 425 label: '选择组织',
420 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 15 </template>
16 16
17 17 <script lang="ts">
18   - import { defineComponent, ref } from 'vue';
  18 + import { defineComponent, ref, nextTick } from 'vue';
19 19 import { BasicModal, useModalInner } from '/@/components/Modal';
20 20 import { BasicForm, useForm } from '/@/components/Form';
21 21 import { orgForm } from '../../config/detail.config';
22   - import { doBatchUpdateDevice } from '/@/api/device/deviceManager';
  22 + import { doBatchUpdateDevice, getGATEWAY } from '/@/api/device/deviceManager';
23 23 import { useMessage } from '/@/hooks/web/useMessage';
24 24
25 25 export default defineComponent({
... ... @@ -34,11 +34,28 @@
34 34
35 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 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 59 labelWidth: 100,
43 60 showActionButtonGroup: false,
44 61 schemas: orgForm,
... ...
... ... @@ -70,7 +70,7 @@
70 70 text: '批量修改组织',
71 71 icon: 'ant-design:wallet-outlined',
72 72 event: '',
73   - disabled: !batchPrivateFlag,
  73 + disabled: !batchPrivateFlag || batchSensorFlag || diffBatchSensorFlag,
74 74 onClick: handleBatchOrg.bind(null),
75 75 },
76 76 ]"
... ... @@ -360,6 +360,10 @@
360 360
361 361 const batchPrivateFlag = ref(true);
362 362
  363 + const batchSensorFlag = ref(false);
  364 +
  365 + const diffBatchSensorFlag = ref(false);
  366 +
363 367 const [
364 368 registerTable,
365 369 {
... ... @@ -420,6 +424,14 @@
420 424 !selectedRows.every((item) => (item as DeviceRecord).deviceType === deviceType);
421 425
422 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 435 isPublicAndPrivateFlag.value =
424 436 selectedRows.some((item: DeviceRecord) => !item?.customerId) &&
425 437 selectedRows.some((item: DeviceRecord) => item?.customerAdditionalInfo?.isPublic);
... ... @@ -432,6 +444,14 @@
432 444 !selectedRows.every((item) => (item as DeviceRecord).deviceType === deviceType);
433 445
434 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 455 isPublicAndPrivateFlag.value =
436 456 selectedRows.some((item) => !item?.customerId) &&
437 457 selectedRows.some((item) => item?.customerAdditionalInfo?.isPublic);
... ...
... ... @@ -108,13 +108,20 @@ export const formSchema: FormSchema[] = [
108 108 label: '消息类型',
109 109 required: true,
110 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 137 const messageType = Reflect.get(formModel, 'messageType');
131 138 if (isMessage(messageType))
132 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 146 if (isEnterpriseWechat(messageType)) {
... ...