diff --git a/CHANGELOG.zh_CN.md b/CHANGELOG.zh_CN.md index 365009c0013ae1c087216758061dee800689396c..f720a9bfe1fe826d4d4ca1301176154713f8c21c 100644 --- a/CHANGELOG.zh_CN.md +++ b/CHANGELOG.zh_CN.md @@ -4,6 +4,7 @@ ### 🐛 Bug Fixes +- **CodeEditor** 修复 JSON 编辑器在格式化无效 JSON 文本时会抛出异常的问题 - **其它** - 修复部分封装组件在使用插槽时报错的问题 - 修复`useECharts`的`theme`参数不起作用的问题 diff --git a/src/components/CodeEditor/src/CodeEditor.vue b/src/components/CodeEditor/src/CodeEditor.vue index 2818e58bf96d4f6fe8b278973859503e3bd21cd2..552af01fb1bd7760e854624127c5610ecd11b5d6 100644 --- a/src/components/CodeEditor/src/CodeEditor.vue +++ b/src/components/CodeEditor/src/CodeEditor.vue @@ -25,18 +25,26 @@ value: { type: [Object, String] as PropType | string> }, mode: { type: String, default: MODE.JSON }, readonly: { type: Boolean }, + autoFormat: { type: Boolean, default: true }, }); - const emit = defineEmits(['change', 'update:value']); + const emit = defineEmits(['change', 'update:value', 'format-error']); const getValue = computed(() => { - const { value, mode } = props; - if (mode !== MODE.JSON) { + const { value, mode, autoFormat } = props; + if (!autoFormat || mode !== MODE.JSON) { return value as string; } - return isString(value) - ? JSON.stringify(JSON.parse(value), null, 2) - : JSON.stringify(value, null, 2); + let result = value; + if (isString(value)) { + try { + result = JSON.parse(value); + } catch (e) { + emit('format-error', value); + return value as string; + } + } + return JSON.stringify(result, null, 2); }); function handleValueChange(v) {