11<script setup lang="ts">
2+ import { computed , ref , watch } from ' vue'
23import {
34 NCard , NDescriptions , NDescriptionsItem , NFlex , NTag , NIcon , NText ,
45 NCollapse , NCollapseItem , NButton , NCode , NEmpty ,
56} from ' naive-ui'
67import { CopyOutlined } from ' @vicons/antd'
78import type { NodeInfo } from ' ../../../types'
89import SafePreviewImage from ' ../../../components/SafePreviewImage.vue'
10+ import RawJsonCollapseItem from ' ./RawJsonCollapseItem.vue'
911
1012const props = defineProps <{
1113 selectedNode: NodeInfo | null
@@ -28,6 +30,16 @@ const props = defineProps<{
2830 formatJson: (obj : any ) => string
2931 copyToClipboard: (text : string ) => void
3032}>()
33+
34+ const expandedNames = ref <string []>([... props .rawJsonDefaultExpanded ])
35+ watch (
36+ () => props .rawJsonDefaultExpanded ,
37+ (names ) => {
38+ expandedNames .value = [... names ]
39+ },
40+ )
41+
42+ const nodeDefinitionExpanded = computed (() => expandedNames .value .includes (' node-definition' ))
3143 </script >
3244
3345<template >
@@ -88,7 +100,7 @@ const props = defineProps<{
88100 />
89101 </div >
90102
91- <n-collapse style =" margin-top : 16px " :default-expanded-names = " props.rawJsonDefaultExpanded " >
103+ <n-collapse v-model:expanded-names = " expandedNames " style =" margin-top : 16px " >
92104 <n-collapse-item v-if =" props.isVscodeLaunchEmbed" title =" 节点定义" name =" node-definition" >
93105 <template #header-extra >
94106 <n-button
@@ -105,33 +117,22 @@ const props = defineProps<{
105117 <n-text v-if =" props.bridgeNodeDefinitionLoading" depth =" 3" style =" font-size : 13px " >正在加载节点定义...</n-text >
106118 <n-text v-else-if =" props.bridgeNodeDefinitionError" type =" error" style =" font-size : 13px " >{{ props.bridgeNodeDefinitionError }}</n-text >
107119 <n-code
108- v-else-if =" props.formattedBridgeNodeDefinition"
120+ v-else-if =" props.formattedBridgeNodeDefinition && nodeDefinitionExpanded "
109121 :code =" props.formattedBridgeNodeDefinition"
110122 language =" json"
111123 :word-wrap =" true"
112124 style =" max-height : 500px ; overflow : auto ; max-width : 100% "
113125 />
114126 <n-empty v-else description =" 未获取到节点定义" />
115127 </n-collapse-item >
116- <n-collapse-item title =" 原始节点数据" name =" node-json" >
117- <template #header-extra >
118- <n-button
119- size =" tiny"
120- @click.stop =" props.copyToClipboard(props.formatJson(props.selectedNode))"
121- >
122- <template #icon >
123- <n-icon ><copy-outlined /></n-icon >
124- </template >
125- 复制
126- </n-button >
127- </template >
128- <n-code
129- :code =" props.formatJson(props.selectedNode)"
130- language =" json"
131- :word-wrap =" true"
132- style =" max-height : 500px ; overflow : auto ; max-width : 100% "
133- />
134- </n-collapse-item >
128+ <raw-json-collapse-item
129+ title =" 原始节点数据"
130+ name =" node-json"
131+ :value =" props.selectedNode"
132+ :expanded-names =" expandedNames"
133+ :format-json =" props.formatJson"
134+ :copy-to-clipboard =" props.copyToClipboard"
135+ />
135136 </n-collapse >
136137 </n-card >
137138</template >
0 commit comments