ProductDescription.vue
3.49 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
119
120
121
122
123
124
125
126
<script lang="ts" setup>
import { Spin, Image } from 'ant-design-vue';
import { ref, unref, h } from 'vue';
import { deviceConfigGetRuleChain } from '/@/api/device/deviceConfigApi';
import { RuleChainRecord } from '/@/api/device/model/deviceConfigModel';
import { DeviceRecord } from '/@/api/device/model/deviceModel';
import { findDictItemByCode } from '/@/api/system/dict';
import { SysDictItemResult } from '/@/api/system/model/dictModel';
import { Description, useDescription } from '/@/components/Description';
import { to } from '/@/utils/to';
import productDefaultImage from '/@/assets/icons/product-default.svg';
const loading = ref(false);
const props = defineProps<{
record: DeviceRecord;
}>();
const data = ref<DeviceRecord>({} as unknown as DeviceRecord);
const [register, { setDescProps }] = useDescription({
layout: 'vertical',
column: 2,
schema: [
{
field: 'image',
label: '图片',
span: 2,
render: (val) => {
return h(Image, { src: val || productDefaultImage, height: 200 });
},
},
{
field: 'deviceType',
label: '设备类型',
},
{
field: 'name',
label: '产品名称',
},
{
field: 'ruleChain',
label: '规则链',
},
{
field: 'queueName',
label: '处理队列',
},
{
field: 'description',
label: '描述',
render(val) {
return h('div', { class: 'min-h-6' }, val);
},
},
],
});
const findDeviceType = async (deviceType: string) => {
const [error, data] = await to<SysDictItemResult[]>(
findDictItemByCode({ dictCode: 'device_type' })
);
if (!error) {
const record = data.find((item) => item.itemValue === deviceType);
return { deviceType: record?.itemText };
}
return {};
};
const findHandleQueue = async (defaultQueueName: string) => {
const [error, data] = await to<SysDictItemResult[]>(
findDictItemByCode({ dictCode: 'queen_execute_sequence' })
);
if (!error) {
const record = data.find((item) => item.itemValue === defaultQueueName);
return { queueName: record?.itemText };
}
return {};
};
const findRuleChain = async (ruleChain: string) => {
const [error, data] = await to<RuleChainRecord[]>(deviceConfigGetRuleChain());
if (!error) {
const record = data.find((item) => item.id.id === ruleChain);
return { ruleChain: record?.name };
}
return {};
};
const renderProductInfo = async () => {
try {
data.value = {} as unknown as DeviceRecord;
loading.value = true;
const { defaultRuleChainId, deviceType, defaultQueueName } = props.record;
data.value = props.record;
const values = await Promise.all([
findDeviceType(deviceType),
findHandleQueue(defaultQueueName),
findRuleChain(defaultRuleChainId),
]);
const value = values.reduce((prev, next) => ({ ...prev, ...next }), {});
data.value = Object.assign(unref(data), value);
setDescProps({ data: unref(data) });
} catch (error) {
throw error;
} finally {
loading.value = false;
}
};
defineExpose({
renderProductInfo,
});
</script>
<template>
<Spin :spinning="loading">
<Description class="product-description" @register="register" />
</Spin>
</template>
<style lang="less" scoped>
.product-description:deep(.ant-image-img) {
height: 200px !important;
}
</style>