Commit 17c070d3ded8dfaba020f56df39005bedf2d03ea
1 parent
cd633e31
fix: replace model of matter tsl content editor to textarea
Showing
1 changed file
with
12 additions
and
58 deletions
| ... | ... | @@ -13,12 +13,6 @@ |
| 13 | 13 | <Tabs.TabPane :key="FunctionType.SERVICE" tab="服务" /> |
| 14 | 14 | <!-- <Tabs.TabPane :key="FunctionType.EVENTS" tab="事件" /> --> |
| 15 | 15 | <template #tabBarExtraContent> |
| 16 | - <Button @click="handlePremitter"> | |
| 17 | - <template #icon> | |
| 18 | - <SortAscendingOutlined /> | |
| 19 | - </template> | |
| 20 | - 格式化 | |
| 21 | - </Button> | |
| 22 | 16 | <Button class="ml-2" @click="handleCopy"> |
| 23 | 17 | <template #icon> |
| 24 | 18 | <CopyOutlined /> |
| ... | ... | @@ -30,24 +24,21 @@ |
| 30 | 24 | </div> |
| 31 | 25 | <div class="relative"> |
| 32 | 26 | <Spin :spinning="loading"> |
| 33 | - <div id="jsoneditor" ref="jsoneditorEl"></div> | |
| 34 | - <div class="absolute top-0 left-0 w-full h-full"></div> | |
| 27 | + <Textarea :disabled="true" :auto-size="{ minRows: 20, maxRows: 20 }" :value="jsonValue" /> | |
| 35 | 28 | </Spin> |
| 36 | 29 | </div> |
| 37 | 30 | </div> |
| 38 | 31 | </template> |
| 39 | 32 | <script lang="ts" setup> |
| 40 | - import { ref, unref, onMounted, nextTick } from 'vue'; | |
| 41 | - import { CopyOutlined, SortAscendingOutlined } from '@ant-design/icons-vue'; | |
| 42 | - import { useCopyToClipboard } from '/@/hooks/web/useCopyToClipboard'; | |
| 33 | + import { ref, unref, onMounted } from 'vue'; | |
| 34 | + import { CopyOutlined } from '@ant-design/icons-vue'; | |
| 43 | 35 | import { useMessage } from '/@/hooks/web/useMessage'; |
| 44 | - import jsoneditor from 'jsoneditor'; | |
| 45 | - import 'jsoneditor/dist/jsoneditor.min.css'; | |
| 46 | - import { Button, Typography, TypographyParagraph, Tabs, Spin } from 'ant-design-vue'; | |
| 36 | + import { Button, Typography, TypographyParagraph, Tabs, Spin, Textarea } from 'ant-design-vue'; | |
| 47 | 37 | import { FunctionType } from './config'; |
| 48 | 38 | import useCommon from '../hook/useCommon'; |
| 49 | 39 | import { DeviceRecord } from '/@/api/device/model/deviceModel'; |
| 50 | 40 | import { getModelTsl } from '/@/api/device/modelOfMatter'; |
| 41 | + import { useClipboard } from '@vueuse/core'; | |
| 51 | 42 | |
| 52 | 43 | const props = defineProps<{ |
| 53 | 44 | record: DeviceRecord; |
| ... | ... | @@ -61,40 +52,17 @@ |
| 61 | 52 | |
| 62 | 53 | const jsonValue = ref(); |
| 63 | 54 | |
| 64 | - const jsonInstance = ref<{ | |
| 65 | - set: (value?: Recordable) => void; | |
| 66 | - get: () => Recordable; | |
| 67 | - }>(); | |
| 68 | - | |
| 69 | - const jsoneditorEl = ref<HTMLDivElement>(); | |
| 70 | - | |
| 71 | 55 | const activeKey = ref(FunctionType.PROPERTIES); |
| 72 | 56 | |
| 73 | - onMounted(() => { | |
| 74 | - nextTick(() => { | |
| 75 | - let options = { | |
| 76 | - mode: 'code', | |
| 77 | - mainMenuBar: false, | |
| 78 | - statusBar: false, | |
| 79 | - }; | |
| 80 | - let editor = new jsoneditor(jsoneditorEl.value, options); | |
| 81 | - editor.set(jsonValue.value); | |
| 82 | - jsonInstance.value = editor; | |
| 83 | - }); | |
| 84 | - }); | |
| 85 | - | |
| 86 | - const { clipboardRef, copiedRef } = useCopyToClipboard(); | |
| 87 | - | |
| 57 | + const { copy, isSupported } = useClipboard({ source: jsonValue }); | |
| 88 | 58 | const handleCopy = () => { |
| 89 | 59 | try { |
| 90 | - const valueRef = unref(jsonInstance)?.get(); | |
| 91 | - const value = JSON.stringify(unref(valueRef)); | |
| 92 | - if (!value) { | |
| 60 | + if (!jsonValue.value) { | |
| 93 | 61 | createMessage.warning('请输入要拷贝的内容!'); |
| 94 | 62 | return; |
| 95 | 63 | } |
| 96 | - clipboardRef.value = value; | |
| 97 | - if (unref(copiedRef)) { | |
| 64 | + if (unref(isSupported)) { | |
| 65 | + copy(); | |
| 98 | 66 | createMessage.success('复制成功!'); |
| 99 | 67 | } |
| 100 | 68 | } catch (e) { |
| ... | ... | @@ -103,25 +71,18 @@ |
| 103 | 71 | }; |
| 104 | 72 | |
| 105 | 73 | const getFormData = () => { |
| 106 | - const value = unref(jsonInstance)?.get(); | |
| 107 | - if (!value) return; | |
| 108 | - return value; | |
| 74 | + return JSON.parse(jsonValue.value); | |
| 109 | 75 | }; |
| 110 | 76 | |
| 111 | 77 | const resetFormData = () => { |
| 112 | - unref(jsonInstance)?.set(); | |
| 113 | - }; | |
| 114 | - | |
| 115 | - const handlePremitter = () => { | |
| 116 | - const value = unref(jsonInstance)?.get(); | |
| 117 | - return unref(jsonInstance)?.set(value); | |
| 78 | + jsonValue.value = null; | |
| 118 | 79 | }; |
| 119 | 80 | |
| 120 | 81 | const handleSwitchTsl = async (functionType: FunctionType) => { |
| 121 | 82 | try { |
| 122 | 83 | loading.value = true; |
| 123 | 84 | const record = await getModelTsl({ deviceProfileId: props.record.id, functionType }); |
| 124 | - jsonInstance.value?.set(record); | |
| 85 | + jsonValue.value = JSON.stringify(record, null, 2); | |
| 125 | 86 | } catch (error) { |
| 126 | 87 | } finally { |
| 127 | 88 | loading.value = false; |
| ... | ... | @@ -138,10 +99,3 @@ |
| 138 | 99 | resetFormData, |
| 139 | 100 | }); |
| 140 | 101 | </script> |
| 141 | - | |
| 142 | -<style lang="less" scope> | |
| 143 | - #jsoneditor { | |
| 144 | - width: 100%; | |
| 145 | - height: 450px; | |
| 146 | - } | |
| 147 | -</style> | ... | ... |