PhysicalModelModal.vue
3.89 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
112
113
114
115
116
117
118
<template>
<BasicModal v-bind="$attrs" :width="480" @register="register" @ok="handleSubmit">
<Typography>
<TypographyParagraph>
<blockquote class="bg-gray-100">{{
t('deviceManagement.product.thingsModelDescText')
}}</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 } from '/@/enums/toolEnum';
import { DeviceProfileDetail } from '/@/api/device/model/deviceConfigModel';
import { useI18n } from '/@/hooks/web/useI18n';
const { t } = useI18n();
const { isPlatformAdmin, isSysadmin, isTenantAdmin } = useRole();
const emit = defineEmits(['register', 'success']);
const objectModelElRef = ref<InstanceType<typeof ObjectModelForm>>();
const props = defineProps<{
record: DeviceProfileDetail;
thingsModelListTotal: Number;
}>();
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 = t(`deviceManagement.device.thingsModel.action.${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;
// 新增,传递一个sort字段,服务端需要,当前分页总数加1
if (unref(openModalMode) === DataActionModeEnum.CREATE) {
(value as Recordable).sort = (props.thingsModelListTotal as any as number) + 1;
}
await submitFn(value);
createMessage.success(t('common.operationSuccessText'));
closeModal();
emit('success');
} catch (error) {
throw Error(error as string);
} finally {
setModalProps({ loading: false, okButtonProps: { loading: false } });
}
};
</script>
<style lang="less" scope></style>