index.ts 694 Bytes
import { Rule } from '/@/components/Form';

export { default as JSONEditor } from './index.vue';

export const parseStringToJSON = <T = Recordable>(value: string) => {
  try {
    const json = JSON.parse(value) as T;
    return { json, valid: true };
  } catch (error) {
    return { json: null, valid: false };
  }
};

export const JSONEditorValidator = (message = 'json格式校验失败'): Rule[] => {
  return [
    {
      validateTrigger: 'blur',
      validator(_rule: Rule, value: any, _callback: Fn) {
        const { valid } = parseStringToJSON(value);
        if (valid) {
          return Promise.resolve();
        }
        return Promise.reject(message);
      },
    },
  ];
};