PhysicalModelModal.vue
3.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<template>
  <BasicModal v-bind="$attrs" :width="480" @register="register" @ok="handleSubmit">
    <Typography>
      <TypographyParagraph>
        <blockquote class="bg-gray-100">{{ blockContent }}</blockquote>
      </TypographyParagraph>
    </Typography>
    <ObjectModelForm
      ref="objectModelElRef"
      :mode="openModalMode"
      :device-record="record"
      :transport-type="(record.transportType as TransportTypeEnum)"
    />
  </BasicModal>
</template>
<script lang="ts" setup>
  import { ref, unref, nextTick } from 'vue';
  import { BasicModal, useModalInner } from '/@/components/Modal';
  import { Typography, TypographyParagraph } from 'ant-design-vue';
  import { ModelOfMatterParams } from '/@/api/device/model/modelOfMatterModel';
  import {
    createModel,
    updateModel,
    createModelCategory,
    updateModelCategory,
  } from '/@/api/device/modelOfMatter';
  import { useMessage } from '/@/hooks/web/useMessage';
  import { useRole } from '/@/hooks/business/useRole';
  import { ObjectModelForm } from '../../../components/ObjectModelForm';
  import { TransportTypeEnum } from '/@/enums/deviceEnum';
  import { DataActionModeEnum, DataActionModeNameEnum } from '/@/enums/toolEnum';
  import { DeviceProfileDetail } from '/@/api/device/model/deviceConfigModel';
  const { isPlatformAdmin, isSysadmin } = useRole();
  const emit = defineEmits(['register', 'success']);
  const objectModelElRef = ref<InstanceType<typeof ObjectModelForm>>();
  const props = defineProps<{
    record: DeviceProfileDetail;
  }>();
  const blockContent = `属性一般是指设备的运行状态,如当前温度等;服务是指设备可被调用的方法,支持定义参数,如执行某项任务;事件则是指设备上报的通知,如告警,需要被及时处理。`;
  const openModalMode = ref<DataActionModeEnum>(DataActionModeEnum.CREATE);
  const { createMessage } = useMessage();
  const currentActionModel = ref<ModelOfMatterParams>();
  const [register, { closeModal, setModalProps }] = useModalInner(
    async (data: ModalParamsType<ModelOfMatterParams>) => {
      const { mode, record } = data;
      openModalMode.value = mode;
      if (record) {
        await nextTick();
      }
      const title = `${DataActionModeNameEnum[mode]}物模型`;
      setModalProps({
        showOkBtn: mode !== DataActionModeEnum.READ,
        title,
      });
      unref(objectModelElRef)?.resetFieldsValue?.();
      if (mode !== DataActionModeEnum.CREATE && record) {
        currentActionModel.value = record;
        unref(objectModelElRef)?.setFieldsValue(record || {});
      }
    }
  );
  const handleSubmit = async () => {
    try {
      setModalProps({ loading: false, okButtonProps: { loading: true } });
      await unref(objectModelElRef)?.validate?.();
      const value = unref(objectModelElRef)!.getFieldsValue();
      const isCategoryAction =
        (unref(isSysadmin) || unref(isPlatformAdmin)) && props.record.ifShowClass;
      const submitFn =
        unref(openModalMode) === DataActionModeEnum.CREATE
          ? isCategoryAction
            ? createModelCategory
            : createModel
          : isCategoryAction
          ? updateModelCategory
          : updateModel;
      value[isCategoryAction ? 'categoryId' : 'deviceProfileId'] = props.record.id;
      if (unref(openModalMode) !== DataActionModeEnum.CREATE)
        value.id = unref(currentActionModel)?.id;
      await submitFn(value);
      createMessage.success('操作成功');
      closeModal();
      emit('success');
    } catch (error) {
      throw Error(error as string);
    } finally {
      setModalProps({ loading: false, okButtonProps: { loading: false } });
    }
  };
</script>
<style lang="less" scope></style>