ThingModelTSL.vue 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. <template>
  2. <Dialog v-model="dialogVisible" :title="dialogTitle">
  3. <JsonEditor
  4. v-model="thingModelTSL"
  5. :mode="viewMode === 'editor' ? 'code' : 'view'"
  6. height="600px" />
  7. <template #footer>
  8. <el-radio-group v-model="viewMode" size="small">
  9. <el-radio-button label="code">代码视图</el-radio-button>
  10. <el-radio-button label="editor">编辑器视图</el-radio-button>
  11. </el-radio-group>
  12. </template>
  13. </Dialog>
  14. </template>
  15. <script setup lang="ts">
  16. import hljs from 'highlight.js' // 导入代码高亮文件
  17. import 'highlight.js/styles/github.css' // 导入代码高亮样式
  18. import json from 'highlight.js/lib/languages/json'
  19. import { ThingModelApi } from '@/api/iot/thingmodel'
  20. import { ProductVO } from '@/api/iot/product/product'
  21. import { IOT_PROVIDE_KEY } from '@/views/iot/utils/constants'
  22. defineOptions({ name: 'ThingModelTSL' })
  23. const dialogVisible = ref(false) // 弹窗的是否展示
  24. const dialogTitle = ref('物模型 TSL') // 弹窗的标题
  25. const product = inject<Ref<ProductVO>>(IOT_PROVIDE_KEY.PRODUCT) // 注入产品信息
  26. const viewMode = ref('code') // 查看模式:code-代码视图,editor-编辑器视图
  27. /** 打开弹窗 */
  28. const open = () => {
  29. dialogVisible.value = true
  30. }
  31. defineExpose({ open })
  32. /** 获取 TSL */
  33. const thingModelTSL = ref({})
  34. const getTsl = async () => {
  35. thingModelTSL.value = await ThingModelApi.getThingModelTSLByProductId(product?.value?.id || 0)
  36. }
  37. /** 初始化 **/
  38. onMounted(async () => {
  39. // 注册代码高亮的各种语言
  40. hljs.registerLanguage('json', json)
  41. await getTsl()
  42. })
  43. </script>