{"version":3,"file":"use-inline-edit.mjs","sources":["../../../../../packages/components/multiple-form/src/use-inline-edit.ts"],"sourcesContent":["import { computed, shallowReactive } from 'vue'\nimport type {\n  MultipleFormProps,\n  MultipleFormRow,\n  MultipleFormRules\n} from './type'\n\ninterface Options {\n  props: MultipleFormProps\n}\n\nexport default function useInlineEdit(options: Options) {\n  const { props } = options\n\n  /** 列的校验规则 */\n  const columnRules = computed(() => {\n    return (props.columns ?? []).reduce((acc, column) => {\n      if (column.rules) {\n        acc[column.key] = column.rules\n      }\n      return acc\n    }, {} as Record<string, Partial<MultipleFormRules>>)\n  })\n\n  /** 错误提示 */\n  const errorTips = shallowReactive<Record<string, any>>({})\n\n  /** 校验器 */\n  const validators = {\n    required(value: any, required: boolean, msg = '该项必填') {\n      if (!required) return\n\n      if (Array.isArray(value)) {\n        return value.length > 0 ? undefined : msg\n      }\n      if ([undefined, null, ''].includes(value) && value !== 0) {\n        return msg\n      }\n    },\n\n    length(value: any, len: number, msg = '') {\n      if (value.length !== len) {\n        return msg || `长度应该等于${len}`\n      }\n    },\n\n    min(value: any, min: number, msg = '') {\n      if (Array.isArray(value)) {\n        return value.length < min ? msg || `该项最小长度应为 ${min}` : undefined\n      }\n\n      if (typeof value !== 'number') {\n        return msg || '请输入数字 '\n      }\n\n      if (typeof value === 'number' && value < min) {\n        return msg || `最小值不得小于：${min}`\n      }\n    },\n\n    max(value: any, max: number, msg = '') {\n      if (Array.isArray(value)) {\n        return value.length > max ? msg || `该项最大长度应为 ${max}` : undefined\n      }\n\n      if (typeof value !== 'number') {\n        return msg || '请输入数字'\n      }\n\n      if (typeof value === 'number' && value > max) {\n        return msg || `最大值不得大于：${max}`\n      }\n    },\n\n    match(value: any, pattern: RegExp, msg = '') {\n      if (typeof value !== 'string') {\n        return msg || `请输入类型为：[string],而不是${typeof value}类型`\n      }\n\n      if (!pattern.test(value)) {\n        return msg || `不匹配正则表达式：${pattern}`\n      }\n    }\n  }\n\n  /**\n   * 单规则校验(一个字段可能会有多个校验规则)\n   * @param type 校验的规则类型\n   * @param value 校验的值\n   * @param ruleValue 校验的规则\n   */\n  const singleRuleValidate = <\n    T extends keyof Omit<MultipleFormRules, 'validator'>\n  >(\n    type: T,\n    value: any,\n    ruleValue: any\n  ) => {\n    let rulesIsArray = Array.isArray(ruleValue)\n    const validator = validators[type]\n    return validator(\n      value,\n      // @ts-ignore\n      rulesIsArray ? ruleValue[0] : ruleValue,\n      rulesIsArray ? ruleValue[1] : undefined\n    )\n  }\n\n  /**\n   * 校验单个字段\n   * @param fieldValue 字段值\n   * @param fieldRules 字段的校验规则\n   * @param row 单行\n   */\n  const validateField = async (\n    fieldValue: any,\n    fieldRules: Partial<MultipleFormRules>,\n    row: MultipleFormRow\n  ) => {\n    const { validator, required, ...otherRules } = fieldRules\n\n    // 校验必填\n    const errorMsg = singleRuleValidate('required', fieldValue, required)\n    if (errorMsg) return errorMsg\n\n    if (required && !fieldValue && fieldValue !== 0) return\n\n    // validator独立校验\n    if (validator) {\n      const errorMsg = await validator(fieldValue, row.data, props.data ?? [], row)\n      if (errorMsg) return errorMsg\n    }\n\n    for (const key in otherRules) {\n      type Key = keyof typeof otherRules\n      const errorMsg = singleRuleValidate(\n        key as Key,\n        fieldValue,\n        otherRules[key as Key]\n      )\n      if (errorMsg) return errorMsg\n    }\n  }\n\n  /**\n   * 校验数据\n   * @param row 节点\n   */\n  async function validate(row: MultipleFormRow[] | MultipleFormRow) {\n    // 校验前先清空之前的校验信息\n    clearValidate()\n\n    const rules = columnRules.value\n\n    // 校验多条数据时以字段循环为优先\n    if (Array.isArray(row)) {\n      const recursiveValidate = async (\n        field: string,\n        row: MultipleFormRow[]\n      ) => {\n        let i = -1\n\n        while (++i < row.length && !errorTips[field]) {\n          let item = row[i]\n          let errorMsg = await validateField(item.data[field], rules[field], item)\n          if (errorMsg) {\n            errorTips[field] = errorMsg\n          }\n\n          if (item.children) {\n            await recursiveValidate(field, item.children)\n          }\n        }\n      }\n\n      for (const field in rules) {\n        await recursiveValidate(field, row)\n      }\n    }\n\n    // 校验单条数据\n    else {\n      for (const field in rules) {\n        const errorMsg = await validateField(row.data[field], rules[field], row)\n        if (errorMsg) {\n          errorTips[field] = errorMsg\n        }\n      }\n    }\n\n    for (let _ in errorTips) {\n      return false\n    }\n\n    return true\n  }\n\n  /**\n   * 清除校验\n   */\n  const clearValidate = () => {\n    for (const key in errorTips) {\n      delete errorTips[key]\n    }\n  }\n\n  return {\n    errorTips,\n    columnRules,\n    clearValidate,\n    validate\n  }\n}\n"],"names":["errorMsg","row"],"mappings":"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"}