{"version":3,"file":"form.vue2.mjs","sources":["../../../../../packages/components/form/src/form.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent as __MACROS_defineComponent } from \"vue\";\nexport default /*#__PURE__*/ __MACROS_defineComponent({\n  name: 'ElForm'\n});\n</script>\n<template>\n  <el-grid\n    tag=\"form\"\n    :cols=\"cols\"\n    gap=\"0,8\"\n    ref=\"formRef\"\n    :class=\"[ns.b(), labelPosition ? 'el-form--label-' + labelPosition : '']\"\n  >\n    <template :key=\"slot.node.key || undefined\" v-for=\"slot of getSlots()\">\n      <el-form-item\n        v-if=\"isFormComponent(slot)\"\n        ref=\"formItemRefs\"\n        v-bind=\"slot.formItemProps\"\n      >\n        <component\n          :is=\"slot.node\"\n          :modelValue=\"getChainValue(data, slot.field)\"\n          :text=\"\n            slot.textField ? getChainValue(data, slot.textField) : undefined\n          \"\n          @update:model-value=\"handleUpdateValue(slot.field, $event)\"\n          @update:text=\"handleUpdateText($event, slot.textField)\"\n        />\n      </el-form-item>\n      <component v-else :is=\"slot.node\" />\n    </template>\n\n    {{ renderEffect() }}\n  </el-grid>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n  inject,\n  isVNode,\n  nextTick,\n  onBeforeUnmount,\n  provide,\n  shallowRef,\n  useSlots,\n  type VNode,\n  type VNodeArrayChildren\n} from 'vue'\nimport ElFormItem from './form-item.vue'\nimport { ElGrid } from '@element-ultra/components/grid'\nimport { formInjectionKey, formKey } from '@element-ultra/tokens'\nimport { formComponents, formProps } from './form'\nimport { validators } from './form-validator'\nimport { useNamespace } from '@element-ultra/hooks'\nimport {\n  deepExtend,\n  getChainValue,\n  isFragment,\n  isTemplate\n} from '@element-ultra/utils'\nimport { isObject } from 'lodash'\n\ntype FormItemType = InstanceType<typeof ElFormItem>\n\n\n\nconst props = defineProps(formProps)\nconst emit = defineEmits([\"validate\"])\nconst slots = useSlots()\nconst ns = useNamespace('form')\n\n// 表单实例项\nconst formItemRefs = shallowRef<FormItemType[]>([])\n// 字段 -> 表单项实例 映射\nlet formItemRefsMap: Record<string, FormItemType> = {}\n\nif (props.defaultData && props.data) {\n  for (const key in props.defaultData) {\n    if (key in props.data) {\n      props.data[key] = props.defaultData[key]\n    }\n  }\n}\n\n// 组件渲染时的副作用\nconst renderEffect = () => {\n  nextTick(() => {\n    let oldMap: any = formItemRefsMap\n    let ret: Record<string, FormItemType> = {}\n    formItemRefs.value.forEach(item => {\n      if (!item.field) return\n      ret[item.field] = item\n    })\n\n    formItemRefsMap = ret\n\n    if (!props.data) return\n\n    // 清除已消失的组件的data数据\n    for (const field in oldMap) {\n      if (!formItemRefsMap[field]) {\n        props.data[field] = defaultFormValues[field]\n      }\n    }\n\n    oldMap = null\n  })\n}\n\n// 默认表单值\nlet defaultFormValues: Record<string, any> = JSON.parse(\n  JSON.stringify(props.data || {})\n)\n\nconst getFormItemSpan = (span?: 'max' | number) => {\n  if (!span) return ''\n\n  if (span === 'max') {\n    return '1 / -1'\n  } else if (!isNaN(+span)) {\n    return `span ${span}`\n  } else {\n    return ''\n  }\n}\n\nconst handleUpdateValue = (field: string, val: any) => {\n  const { data } = props\n  if (!data) return\n  let fieldItems = field.split('.')\n\n  // 有多个字段\n  if (fieldItems.length > 1) {\n    let target = data\n    fieldItems.slice(0, -1).forEach(field => {\n      target = target[field]\n    })\n\n    target[fieldItems[fieldItems.length - 1]] = val\n  } else {\n    data[field] = val\n  }\n}\n\nconst handleUpdateText = (text: any, textField?: string) => {\n  const { data } = props\n  if (!data || !textField) return\n  let fieldItems = textField.split('.')\n\n  // 有多个字段\n  if (fieldItems.length > 1) {\n    let target = data\n    fieldItems.slice(0, -1).forEach(field => {\n      target = target[field]\n    })\n\n    target[fieldItems[fieldItems.length - 1]] = text\n  } else {\n    data[textField] = text\n  }\n}\n\ntype FormComponentSlot = {\n  node: VNode\n  formItemProps: {\n    label: string\n    field: string\n    style: any\n    tips: string\n    required?: boolean\n  }\n  field: string\n  textField?: string\n}\n\ntype OtherSlot = {\n  node: VNode\n}\n\nconst isFormComponent = (slot: any): slot is FormComponentSlot => {\n  return !!slot.field\n}\n\nconst getSlots = () => {\n  const vNodeList = slots.default?.() || []\n\n  let result: Array<FormComponentSlot | OtherSlot> = []\n  const recursive = (nodeList: VNodeArrayChildren) => {\n    nodeList.forEach(node => {\n      if (!isVNode(node)) return\n\n      // 如果是模板或者片段则渲染children\n      if (\n        (isFragment(node) || isTemplate(node)) &&\n        Array.isArray(node.children)\n      ) {\n        return recursive(node.children)\n      }\n\n      if (isObject(node.type) && formComponents.has((node.type as any).name)) {\n        const props = node.props || {}\n\n        const { label, field, tips, span, required } = props\n\n        return result.push({\n          node,\n          field,\n          textField: props.textField || props['text-field'],\n          formItemProps: {\n            label,\n            field,\n            tips,\n            required,\n            style: {\n              gridColumn: getFormItemSpan(span)\n            }\n          }\n        })\n      }\n\n      result.push({ node })\n    })\n  }\n\n  recursive(vNodeList)\n\n  return result\n}\n\n/**\n * 重置单个字段值\n * @param field 字段\n */\nconst resetField = (field: string) => {\n  if (!props.data) return\n\n  props.data[field] = defaultFormValues[field]\n  nextTick(() => clearValidate(field))\n}\n\n/** 重置所有字段 */\nconst resetFields = () => {\n  if (!props.data) return\n  deepExtend(props.data, defaultFormValues, true)\n  /** 对表单项的值进行重置 */\n  // for (const key in formItemRefsMap) {\n  //   let keyList = key.split('.')\n  //   if (keyList.length > 1) {\n  //     let target = props.data\n  //     let defaultTarget = defaultFormValues\n  //     keyList.slice(0, -1).some(item => {\n  //       target = target[item]\n  //       defaultTarget = defaultTarget[item]\n  //       return !target || !defaultTarget\n  //     })\n  //     const lastKey = keyList[keyList.length - 1]\n\n  //     if (target && defaultTarget) {\n  //       target[lastKey] = defaultTarget[lastKey]\n  //     }\n  //   } else {\n  //     props.data[key] = defaultFormValues[key]\n  //   }\n  // }\n  nextTick(() => clearValidate())\n}\n\n// 清除校验\nconst clearValidate = (fields?: string | string[]) => {\n  if (!fields) {\n    formItemRefs.value.forEach(item => item.clearValidate())\n  } else if (typeof fields === 'string') {\n    formItemRefsMap[fields]?.clearValidate()\n  } else {\n    fields.forEach(field => formItemRefsMap[field]?.clearValidate())\n  }\n}\n\n/**\n * 单个字段校验\n * @param field 需要校验的字段\n */\nconst validateField = async (field: string) => {\n  const { data, rules } = props\n  if (!data || !rules) return null\n\n  const value = getChainValue(data, field)\n\n  let fieldRules = rules[field]\n\n  if (!fieldRules) {\n    console.warn(`表单数据中没有定义该字段: ${field}, 校验可能出现问题`)\n  }\n  const { validator, required, ...rule } = fieldRules || {}\n\n  let errMsg: null | undefined | string = null\n\n  // 优先校验必填, 以组件中传入的required属性为准\n  errMsg = validators.required(\n    value,\n    formItemRefsMap[field]?.isRequired ?? required\n  )\n  if (errMsg) return errMsg\n\n  if (!value && value !== 0) return errMsg\n\n  errMsg = await validator?.(value, data, rule)\n  if (errMsg) return errMsg\n\n  type RuleKey = keyof Omit<typeof rule, 'children'>\n  Object.keys(rule).some(type => {\n    let result = validators[type as RuleKey]?.(\n      value,\n      rule[type as RuleKey] as any\n    )\n    if (result) {\n      errMsg = result\n      return true\n    }\n  })\n\n  return errMsg\n}\n\nconst formRef = shallowRef<InstanceType<typeof ElGrid>>()\n/** 校验 */\nconst validate = async (fields?: string | string[]): Promise<boolean> => {\n  let result = true\n\n  // 没有传入字段或者传入的字段是数组\n  if (!fields || Array.isArray(fields)) {\n    const allValidation = await Promise.all(\n      Array.isArray(fields)\n        ? fields.map(field => formItemRefsMap[field]?.validate())\n        : formItemRefs.value.map(formItem => formItem?.validate())\n    )\n    result = allValidation.every(valid => valid)\n  } else if (typeof fields === 'string') {\n    const valid = await formItemRefsMap[fields]?.validate()\n    result = !!valid\n  }\n\n  if (!result) {\n    await nextTick()\n    ~(formRef.value?.$el as HTMLElement)\n      ?.getElementsByClassName('el-form-item is-error')[0]\n      ?.scrollIntoView({\n        behavior: 'smooth',\n        block: 'nearest'\n      })\n  }\n\n  return result ? result : Promise.reject(result)\n}\n\nprovide(formKey, {\n  props,\n\n  formRules: props.rules,\n  resetField,\n  emit,\n  validateField\n})\n\nconst exposed = {\n  validate,\n  resetFields,\n  clearValidate\n}\n\n// 尝试往formDialog, page组件中注册自己\nconst formInjection = inject(formInjectionKey, null)\n\nif (formInjection) {\n  formInjection.addForm(exposed)\n\n  onBeforeUnmount(() => {\n    formInjection.deleteForm(exposed)\n  })\n}\n\ndefineExpose(exposed)\n</script>\n"],"names":["__MACROS_defineComponent","field","props","_a","_b"],"mappings":"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"}