Commit d011484fa8f29064215fa45507a83d581f8f0342
Merge branch 'dev-fix-ww' into 'main_dev'
feat: 产品详情物模型新增导出全部物模型 See merge request yunteng/thingskit-front!567
Showing
2 changed files
with
40 additions
and
11 deletions
@@ -179,12 +179,7 @@ | @@ -179,12 +179,7 @@ | ||
179 | ); | 179 | ); |
180 | 180 | ||
181 | selectionOptions.rowSelection.getCheckboxProps = (record: Recordable) => { | 181 | selectionOptions.rowSelection.getCheckboxProps = (record: Recordable) => { |
182 | - // Demo:status为1的选择框禁用 | ||
183 | - if (record.status === 1) { | ||
184 | - return { disabled: true }; | ||
185 | - } else { | ||
186 | - return { disabled: false }; | ||
187 | - } | 182 | + return { disabled: record.status === 1 }; |
188 | }; | 183 | }; |
189 | 184 | ||
190 | const handleViewDetail = (record: ModelOfMatterParams) => { | 185 | const handleViewDetail = (record: ModelOfMatterParams) => { |
@@ -5,12 +5,16 @@ | @@ -5,12 +5,16 @@ | ||
5 | destroyOnClose | 5 | destroyOnClose |
6 | v-bind="$attrs" | 6 | v-bind="$attrs" |
7 | width="55rem" | 7 | width="55rem" |
8 | + :okButtonProps="{ loading }" | ||
8 | @register="register" | 9 | @register="register" |
9 | @ok="handleSubmit" | 10 | @ok="handleSubmit" |
10 | okText="导出物模型" | 11 | okText="导出物模型" |
11 | @cancel="handleCancel" | 12 | @cancel="handleCancel" |
12 | > | 13 | > |
13 | - <TslContent :record="$props.record" ref="TslConRef" /> | 14 | + <TslContent :record="record" ref="TslConRef" /> |
15 | + <template #centerFooter> | ||
16 | + <Button type="primary" :loading="loading" @click="handleExportAll">导出全部</Button> | ||
17 | + </template> | ||
14 | </BasicModal> | 18 | </BasicModal> |
15 | </template> | 19 | </template> |
16 | <script lang="ts" setup> | 20 | <script lang="ts" setup> |
@@ -18,6 +22,9 @@ | @@ -18,6 +22,9 @@ | ||
18 | import { BasicModal, useModalInner } from '/@/components/Modal'; | 22 | import { BasicModal, useModalInner } from '/@/components/Modal'; |
19 | import TslContent from './cpns/TslContent.vue'; | 23 | import TslContent from './cpns/TslContent.vue'; |
20 | import { DeviceRecord } from '/@/api/device/model/deviceModel'; | 24 | import { DeviceRecord } from '/@/api/device/model/deviceModel'; |
25 | + import { Button } from 'ant-design-vue'; | ||
26 | + import { getModelTsl } from '/@/api/device/modelOfMatter'; | ||
27 | + import { FunctionType } from './cpns/config'; | ||
21 | 28 | ||
22 | defineEmits(['register']); | 29 | defineEmits(['register']); |
23 | 30 | ||
@@ -28,6 +35,8 @@ | @@ -28,6 +35,8 @@ | ||
28 | const TslConRef = ref<InstanceType<typeof TslContent>>(); | 35 | const TslConRef = ref<InstanceType<typeof TslContent>>(); |
29 | const isUpdate = ref(false); | 36 | const isUpdate = ref(false); |
30 | 37 | ||
38 | + const loading = ref(false); | ||
39 | + | ||
31 | const [register, { closeModal, setModalProps }] = useModalInner(async (data) => { | 40 | const [register, { closeModal, setModalProps }] = useModalInner(async (data) => { |
32 | setModalProps({ confirmLoading: true }); | 41 | setModalProps({ confirmLoading: true }); |
33 | isUpdate.value = data.isUpdate; | 42 | isUpdate.value = data.isUpdate; |
@@ -41,10 +50,7 @@ | @@ -41,10 +50,7 @@ | ||
41 | closeModal(); | 50 | closeModal(); |
42 | }; | 51 | }; |
43 | 52 | ||
44 | - const handleSubmit = () => { | ||
45 | - const value = TslConRef.value?.getFormData(); | ||
46 | - if (!value) return; | ||
47 | - | 53 | + const exportJSONFile = (value: Recordable) => { |
48 | const blob = new Blob([JSON.stringify(value, null, 2)], { type: 'text/json' }); | 54 | const blob = new Blob([JSON.stringify(value, null, 2)], { type: 'text/json' }); |
49 | const objectURL = URL.createObjectURL(blob); | 55 | const objectURL = URL.createObjectURL(blob); |
50 | const element = document.createElement('a'); | 56 | const element = document.createElement('a'); |
@@ -56,6 +62,34 @@ | @@ -56,6 +62,34 @@ | ||
56 | element.remove(); | 62 | element.remove(); |
57 | URL.revokeObjectURL(objectURL); | 63 | URL.revokeObjectURL(objectURL); |
58 | }; | 64 | }; |
65 | + | ||
66 | + const handleSubmit = () => { | ||
67 | + const value = TslConRef.value?.getFormData(); | ||
68 | + if (!value) return; | ||
69 | + exportJSONFile(value); | ||
70 | + }; | ||
71 | + | ||
72 | + const getAllModel = () => { | ||
73 | + const { id: deviceProfileId } = props.record; | ||
74 | + return Promise.all([ | ||
75 | + getModelTsl({ deviceProfileId, functionType: FunctionType.EVENTS }), | ||
76 | + getModelTsl({ deviceProfileId, functionType: FunctionType.PROPERTIES }), | ||
77 | + getModelTsl({ deviceProfileId, functionType: FunctionType.SERVICE }), | ||
78 | + ]); | ||
79 | + }; | ||
80 | + | ||
81 | + const handleExportAll = async () => { | ||
82 | + loading.value = true; | ||
83 | + try { | ||
84 | + const [events, properties, service] = await getAllModel(); | ||
85 | + const value = { properties, service, events }; | ||
86 | + exportJSONFile(value); | ||
87 | + } catch (error) { | ||
88 | + throw error; | ||
89 | + } finally { | ||
90 | + loading.value = false; | ||
91 | + } | ||
92 | + }; | ||
59 | </script> | 93 | </script> |
60 | 94 | ||
61 | <style lang="less" scope> | 95 | <style lang="less" scope> |