소스 검색

fix(code-editor): fixed formatting error

修复JSON编辑器在格式化无效JSON文本时会抛出异常的问题
无木 3 년 전
부모
커밋
e7c96363a1
2개의 변경된 파일15개의 추가작업 그리고 6개의 파일을 삭제
  1. 1 0
      CHANGELOG.zh_CN.md
  2. 14 6
      src/components/CodeEditor/src/CodeEditor.vue

+ 1 - 0
CHANGELOG.zh_CN.md

@@ -4,6 +4,7 @@
 
 ### 🐛 Bug Fixes
 
+- **CodeEditor** 修复 JSON 编辑器在格式化无效 JSON 文本时会抛出异常的问题
 - **其它**
   - 修复部分封装组件在使用插槽时报错的问题
   - 修复`useECharts`的`theme`参数不起作用的问题

+ 14 - 6
src/components/CodeEditor/src/CodeEditor.vue

@@ -25,18 +25,26 @@
     value: { type: [Object, String] as PropType<Record<string, any> | 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) {