PhysicalModelModal.vue
3.73 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
110
111
<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, isTenantAdmin } = 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) ||
(unref(isTenantAdmin) && 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>