@aspire-ui/element-component-pro 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +203 -0
- package/dist/ProForm/FormActions.vue.d.ts +98 -0
- package/dist/ProForm/ProForm.vue.d.ts +223 -0
- package/dist/ProForm/ProFormItem.vue.d.ts +39 -0
- package/dist/ProForm/index.d.ts +7 -0
- package/dist/ProForm/useForm.d.ts +28 -0
- package/dist/element-component-pro.es.js +444 -0
- package/dist/element-component-pro.es.js.map +1 -0
- package/dist/element-component-pro.umd.js +3 -0
- package/dist/element-component-pro.umd.js.map +1 -0
- package/dist/index.d.ts +769 -0
- package/dist/style.css +1 -0
- package/dist/types/index.d.ts +178 -0
- package/package.json +49 -0
- package/src/ProForm/FormActions.vue +76 -0
- package/src/ProForm/ProForm.vue +423 -0
- package/src/ProForm/ProFormItem.vue +250 -0
- package/src/ProForm/index.ts +6 -0
- package/src/ProForm/useForm.ts +114 -0
- package/src/index.ts +32 -0
- package/src/shims-vue.d.ts +5 -0
- package/src/types/index.ts +179 -0
- package/src/vite-env.d.ts +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-component-pro.umd.js","sources":["../src/ProForm/ProFormItem.vue","../src/ProForm/ProForm.vue","../src/ProForm/useForm.ts","../src/index.ts"],"sourcesContent":["<template>\n <el-form-item\n v-if=\"shouldRender\"\n v-show=\"shouldShow\"\n :prop=\"schema.field\"\n :required=\"schema.required\"\n :rules=\"effectiveRules\"\n >\n <template slot=\"label\">\n <span>{{ schema.label }}</span>\n <el-tooltip\n v-if=\"schema.helpMessage\"\n placement=\"top\"\n effect=\"light\"\n v-bind=\"schema.helpComponentProps || {}\"\n >\n <template slot=\"content\">\n <template v-if=\"Array.isArray(schema.helpMessage)\">\n <div v-for=\"(msg, i) in schema.helpMessage\" :key=\"i\" class=\"ecp-pro-form-item__help-item\">\n {{ msg }}\n </div>\n </template>\n <span v-else>{{ schema.helpMessage }}</span>\n </template>\n <i class=\"el-icon-question ecp-pro-form-item__help-icon\" />\n </el-tooltip>\n </template>\n <!-- render 自定义渲染 -->\n <template v-if=\"schema.render\">\n <component :is=\"renderComponent\" />\n </template>\n <!-- slot 自定义插槽(由 ProForm 传入 default slot) -->\n <slot v-else-if=\"hasSlot\" :model=\"formModel\" :schema=\"schema\" :field=\"schema.field\" :values=\"formModel\" />\n <!-- 默认组件渲染 -->\n <template v-else>\n <el-input\n v-if=\"schema.component === 'input' || !schema.component\"\n v-model=\"formModel[schema.field]\"\n :placeholder=\"schema.placeholder || (autoPlaceholder ? `请输入${schema.label}` : undefined)\"\n :disabled=\"effectiveDisabled\"\n v-bind=\"effectiveComponentProps\"\n v-on=\"effectiveComponentListeners\"\n />\n <el-input-number\n v-else-if=\"schema.component === 'input-number'\"\n v-model=\"formModel[schema.field]\"\n :placeholder=\"schema.placeholder\"\n :disabled=\"effectiveDisabled\"\n v-bind=\"effectiveComponentProps\"\n v-on=\"effectiveComponentListeners\"\n />\n <el-select\n class=\"ecp-pro-form-item__select\"\n v-else-if=\"schema.component === 'select'\"\n v-model=\"formModel[schema.field]\"\n :placeholder=\"schema.placeholder || (autoPlaceholder ? `请选择${schema.label}` : undefined)\"\n :disabled=\"effectiveDisabled\"\n v-bind=\"effectiveComponentProps\"\n v-on=\"effectiveComponentListeners\"\n >\n <el-option\n v-for=\"opt in (getOptions(effectiveComponentProps) || [])\"\n :key=\"String(opt.value)\"\n :label=\"opt.label\"\n :value=\"opt.value\"\n />\n </el-select>\n <el-date-picker\n v-else-if=\"schema.component === 'date-picker'\"\n v-model=\"formModel[schema.field]\"\n :placeholder=\"schema.placeholder || (autoPlaceholder ? `请选择${schema.label}` : undefined)\"\n :disabled=\"effectiveDisabled\"\n v-bind=\"effectiveComponentProps\"\n v-on=\"effectiveComponentListeners\"\n />\n <el-date-picker\n v-else-if=\"schema.component === 'date-range'\"\n v-model=\"formModel[schema.field]\"\n type=\"daterange\"\n range-separator=\"至\"\n start-placeholder=\"开始日期\"\n end-placeholder=\"结束日期\"\n value-format=\"yyyy-MM-dd\"\n :disabled=\"effectiveDisabled\"\n v-bind=\"effectiveComponentProps\"\n v-on=\"effectiveComponentListeners\"\n />\n <el-switch\n v-else-if=\"schema.component === 'switch'\"\n v-model=\"formModel[schema.field]\"\n :disabled=\"effectiveDisabled\"\n v-bind=\"effectiveComponentProps\"\n v-on=\"effectiveComponentListeners\"\n />\n <el-cascader\n v-else-if=\"schema.component === 'cascader'\"\n v-model=\"formModel[schema.field]\"\n :placeholder=\"schema.placeholder || (autoPlaceholder ? `请选择${schema.label}` : undefined)\"\n :disabled=\"effectiveDisabled\"\n v-bind=\"effectiveComponentProps\"\n v-on=\"effectiveComponentListeners\"\n />\n <el-checkbox-group\n v-else-if=\"schema.component === 'checkbox'\"\n v-model=\"formModel[schema.field]\"\n :disabled=\"effectiveDisabled\"\n v-bind=\"effectiveComponentProps\"\n v-on=\"effectiveComponentListeners\"\n >\n <el-checkbox\n v-for=\"opt in (getOptions(effectiveComponentProps) || [])\"\n :key=\"String(opt.value)\"\n :label=\"opt.value\"\n >\n {{ opt.label }}\n </el-checkbox>\n </el-checkbox-group>\n <el-radio-group\n v-else-if=\"schema.component === 'radio'\"\n v-model=\"formModel[schema.field]\"\n :disabled=\"effectiveDisabled\"\n v-bind=\"effectiveComponentProps\"\n v-on=\"effectiveComponentListeners\"\n >\n <el-radio\n v-for=\"opt in (getOptions(effectiveComponentProps) || [])\"\n :key=\"String(opt.value)\"\n :label=\"opt.value\"\n >\n {{ opt.label }}\n </el-radio>\n </el-radio-group>\n </template>\n </el-form-item>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, useSlots, h } from 'vue'\nimport type { ProFormSchema, RenderCallbackParams } from '../types'\n\nconst props = defineProps<{\n schema: ProFormSchema\n formModel: Record<string, unknown>\n formDisabled?: boolean\n autoPlaceholder?: boolean\n formActionType?: import('../types').FormActionType\n}>()\n\nconst slots = useSlots()\n\nconst renderParams = computed<RenderCallbackParams>(() => ({\n schema: props.schema,\n values: props.formModel,\n model: props.formModel,\n field: props.schema.field,\n}))\n\nconst shouldRender = computed(() => {\n const ifShow = props.schema.ifShow\n if (ifShow === undefined) return true\n if (typeof ifShow === 'boolean') return ifShow\n return ifShow(renderParams.value)\n})\n\nconst shouldShow = computed(() => {\n const show = props.schema.show\n if (show === undefined) return true\n if (typeof show === 'boolean') return show\n return show(renderParams.value)\n})\n\nconst effectiveDisabled = computed(() => {\n if (props.formDisabled) return true\n const dyn = props.schema.dynamicDisabled\n if (dyn === undefined) return false\n if (typeof dyn === 'boolean') return dyn\n return dyn(renderParams.value)\n})\n\nconst effectiveRules = computed(() => {\n const dyn = props.schema.dynamicRules\n if (!dyn) return props.schema.rules\n if (Array.isArray(dyn)) return dyn\n return dyn(renderParams.value)\n})\n\nconst effectiveComponentPropsAndListeners = computed(() => {\n const cp = props.schema.componentProps\n if (!cp) return { props: {}, listeners: {} }\n const raw = typeof cp === 'function'\n ? cp({\n ...renderParams.value,\n formActionType: props.formActionType,\n })\n : { ...cp }\n const propsOnly: Record<string, unknown> = {}\n const listeners: Record<string, (...args: unknown[]) => unknown> = {}\n for (const [key, value] of Object.entries(raw)) {\n if (key.length > 2 && /^on[A-Za-z]/.test(key) && typeof value === 'function') {\n const eventName = key.slice(2).charAt(0).toLowerCase() + key.slice(3)\n listeners[eventName] = value as (...args: unknown[]) => unknown\n } else {\n propsOnly[key] = value\n }\n }\n return { props: propsOnly, listeners }\n})\n\nconst effectiveComponentProps = computed(() => effectiveComponentPropsAndListeners.value.props)\nconst effectiveComponentListeners = computed(() => effectiveComponentPropsAndListeners.value.listeners)\n\nconst hasSlot = computed(() => !!slots.default)\n\nconst getOptions = (props: Record<string, unknown>): Array<{ label: string; value: unknown }> | undefined => {\n const opts = props?.options\n return Array.isArray(opts) ? opts : undefined\n}\n\nconst renderComponent = computed(() => {\n const renderFn = props.schema.render\n if (!renderFn) return null\n return {\n render() {\n const result = renderFn(renderParams.value)\n if (Array.isArray(result)) {\n return h('span', result)\n }\n return result\n },\n }\n})\n</script>\n\n<style scoped>\n.ecp-pro-form-item__help-icon {\n margin-left: 4px;\n color: #909399;\n cursor: help;\n font-size: 14px;\n}\n.ecp-pro-form-item__help-icon:hover {\n color: #409eff;\n}\n.ecp-pro-form-item__help-item {\n margin-bottom: 4px;\n}\n.ecp-pro-form-item__help-item:last-child {\n margin-bottom: 0;\n}\n.ecp-pro-form-item__select {\n display: block;\n}\n</style>\n","<template>\n <div ref=\"formWrapRef\" class=\"ecp-pro-form\">\n <el-form class=\"ecp-pro-form\" ref=\"formRef\" :model=\"formModel\" :rules=\"formRules\" :label-width=\"effectiveProps.labelWidth\"\n :label-position=\"effectiveProps.labelPosition\" :size=\"effectiveProps.size\" :disabled=\"effectiveProps.disabled\"\n v-bind=\"$attrs\" v-on=\"formListeners\">\n <slot name=\"formHeader\" />\n <el-row :gutter=\"effectiveProps.gutter\" :style=\"effectiveProps.baseRowStyle\">\n <template v-for=\"schema in displaySchemas\">\n <el-col v-if=\"shouldShow(schema)\" :key=\"schema.field\" v-bind=\"getColProps(schema)\"\n :offset=\"schema.colProps?.offset ?? effectiveProps.baseColProps?.offset ?? 0\" :data-field=\"schema.field\">\n <ProFormItem :schema=\"schema\" :form-model=\"formModel\" :form-disabled=\"effectiveProps.disabled\"\n :auto-placeholder=\"effectiveProps.autoSetPlaceholder\" :form-action-type=\"formActionRef\">\n <template v-if=\"slots[getSlotName(schema)]\">\n <slot :name=\"getSlotName(schema)\" :model=\"formModel\" :schema=\"schema\" :field=\"schema.field\"\n :values=\"formModel\" />\n </template>\n </ProFormItem>\n </el-col>\n </template>\n <el-col class=\"ecp-pro-form_col\" v-if=\"effectiveProps.showActionButtonGroup\"\n v-bind=\"hasMoreFields ? { span: 24 } : effectiveProps.actionColOptions || { span: 6 }\">\n <FormActions :show-action-button-group=\"effectiveProps.showActionButtonGroup\"\n :show-submit-button=\"effectiveProps.showSubmitButton\" :show-reset-button=\"effectiveProps.showResetButton\"\n :submit-button-text=\"effectiveProps.submitButtonText\" :reset-button-text=\"effectiveProps.resetButtonText\"\n :submit-button-icon=\"effectiveProps.submitButtonIcon\" :reset-button-icon=\"effectiveProps.resetButtonIcon\"\n :submit-loading=\"submitLoading\" :show-advanced-button=\"effectiveProps.showAdvancedButton\"\n :has-more-fields=\"hasMoreFields\" :collapsed=\"collapsed\" :action-col-options=\"effectiveActionColOptions\"\n @submit=\"handleSubmit\" @reset=\"handleReset\" @toggle=\"collapsed = !collapsed\">\n <template slot=\"submitBefore\">\n <slot name=\"submitBefore\" />\n </template>\n <template slot=\"resetBefore\">\n <slot name=\"resetBefore\" />\n </template>\n <template slot=\"advanceBefore\">\n <slot name=\"advanceBefore\" />\n </template>\n <template slot=\"advanceAfter\">\n <slot name=\"advanceAfter\" />\n </template>\n <template slot=\"actions\">\n <slot name=\"actions\" />\n </template>\n </FormActions>\n </el-col>\n </el-row>\n <el-button v-if=\"effectiveProps.showAdvancedButton && hasMoreFields\" type=\"text\" class=\"ecp-form-actions__advance\"\n @click=\"collapsed = !collapsed\">\n <i class=\"el-icon-d-arrow-left\" :class=\"collapsed ? 'down' : 'up'\" />\n {{ collapsed ? '展开' : '收起' }}\n </el-button>\n <slot name=\"formFooter\" />\n </el-form>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, useSlots, onMounted, onUnmounted } from 'vue'\nimport ProFormItem from './ProFormItem.vue'\nimport FormActions from './FormActions.vue'\nimport type { ProFormSchema, ProFormProps, FormActionType, ColEx, ScrollToFieldOptions, FormListeners } from '../types'\n\nconst props = withDefaults(\n defineProps<{\n schemas?: ProFormSchema[]\n initialValues?: Record<string, unknown>\n labelWidth?: string\n labelPosition?: 'left' | 'right' | 'top'\n gutter?: number\n size?: 'medium' | 'small' | 'large'\n disabled?: boolean\n baseColProps?: ColEx\n baseRowStyle?: Record<string, string | number>\n autoSetPlaceholder?: boolean\n showSubmitButton?: boolean\n showResetButton?: boolean\n submitButtonText?: string\n resetButtonText?: string\n submitButtonIcon?: string\n resetButtonIcon?: string\n showActionButtonGroup?: boolean\n actionColOptions?: ColEx\n showAdvancedButton?: boolean\n autoAdvancedLine?: number\n alwaysShowLines?: number\n submitFunc?: () => Promise<void>\n resetFunc?: () => Promise<void>\n submitOnReset?: boolean\n formListeners?: FormListeners\n }>(),\n {\n labelWidth: '120px',\n labelPosition: 'right',\n gutter: 24,\n size: 'medium',\n autoSetPlaceholder: true,\n showSubmitButton: true,\n showResetButton: true,\n submitButtonText: '提交',\n resetButtonText: '重置',\n submitButtonIcon: 'el-icon-search',\n resetButtonIcon: 'el-icon-refresh-left',\n showActionButtonGroup: true,\n showAdvancedButton: false,\n autoAdvancedLine: 3,\n alwaysShowLines: 1,\n baseColProps: () => ({ xs: 24, sm: 12, md: 12, lg: 8, xl: 6 }),\n actionColOptions: () => ({ xs: 24, sm: 12, md: 12, lg: 8, xl: 6 }),\n submitOnReset: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'submit', values: Record<string, unknown>): void\n (e: 'reset'): void\n (e: 'register', formAction: FormActionType): void\n}>()\nconst slots = useSlots()\nconst formRef = ref()\nconst formWrapRef = ref()\nconst submitLoading = ref(false)\nconst collapsed = ref(true)\nconst formModel = ref<Record<string, unknown>>({})\nconst formRules = ref<Record<string, unknown[]>>({})\nconst innerSchemas = ref<ProFormSchema[]>([])\nconst innerProps = ref<Partial<ProFormProps>>({})\n\n/** Element UI 栅格断点 (px) */\nconst BREAKPOINTS = { xl: 1920, lg: 1200, md: 992, sm: 768 }\n\n/** 根据当前视口宽度获取 ColEx 的有效 span(与 el-col 断点逻辑一致) */\nconst getEffectiveSpan = (colProps?: ColEx | null, baseColProps?: ColEx | null, width?: number): number => {\n const w = width ?? (typeof window !== 'undefined' ? window.innerWidth : 1920)\n const col = colProps ?? {}\n const base = baseColProps ?? {}\n const fallback = base.span ?? 8\n if (w >= BREAKPOINTS.xl) return col.xl ?? base.xl ?? col.lg ?? base.lg ?? col.md ?? base.md ?? col.sm ?? base.sm ?? col.xs ?? base.xs ?? col.span ?? fallback\n if (w >= BREAKPOINTS.lg) return col.lg ?? base.lg ?? col.md ?? base.md ?? col.sm ?? base.sm ?? col.xs ?? base.xs ?? col.span ?? fallback\n if (w >= BREAKPOINTS.md) return col.md ?? base.md ?? col.sm ?? base.sm ?? col.xs ?? base.xs ?? col.span ?? fallback\n if (w >= BREAKPOINTS.sm) return col.sm ?? base.sm ?? col.xs ?? base.xs ?? col.span ?? fallback\n if (w < BREAKPOINTS.sm) return col.sm ?? base.sm ?? col.xs ?? base.xs ?? col.span ?? fallback\n return col.xs ?? base.xs ?? col.span ?? fallback\n}\n\nconst effectiveProps = computed(() => ({ ...props, ...innerProps.value }))\nconst effectiveActionColOptions = computed(() => effectiveProps.value.actionColOptions ?? { span: 24 })\n\n/** 当前视口宽度,用于响应式计算 span */\nconst windowWidth = ref(typeof window !== 'undefined' ? window.innerWidth : 1920)\n\n/** 计算前 maxLines 行能容纳的 schema 数量(考虑栅格断点,每个 field 可有自己的 span) */\nconst getVisibleSchemaCount = (\n schemas: ProFormSchema[],\n baseColProps: ColEx | undefined,\n maxLines: number,\n width: number\n) => {\n let remaining = 24\n let rows = 1\n let count = 0\n for (const schema of schemas) {\n const span = getEffectiveSpan(schema.colProps, baseColProps, width)\n if (span > remaining) {\n rows++\n if (rows > maxLines) break\n remaining = 24 - span\n } else {\n remaining -= span\n }\n count++\n }\n return count\n}\n\nconst hasMoreFields = computed(() => {\n const schemas = innerSchemas.value.filter((s) => !s.hidden)\n\n if (!effectiveProps.value.showAdvancedButton) return false\n const lines = effectiveProps.value.alwaysShowLines ?? 1\n const baseColProps = effectiveProps.value.baseColProps\n const maxVisible = getVisibleSchemaCount(schemas, baseColProps, lines, windowWidth.value)\n console.log(schemas.length, maxVisible)\n return schemas.length > maxVisible\n})\n\nconst formListeners = computed((): FormListeners => {\n return effectiveProps.value.formListeners ?? {}\n})\n\nconst displaySchemas = computed(() => {\n const schemas = innerSchemas.value.filter((s) => {\n return shouldShow(s)\n })\n if (!effectiveProps.value.showAdvancedButton || !collapsed.value) return schemas\n const lines = effectiveProps.value.alwaysShowLines ?? 1\n const baseColProps = effectiveProps.value.baseColProps\n const maxVisible = getVisibleSchemaCount(schemas, baseColProps, lines, windowWidth.value)\n return schemas.slice(0, maxVisible)\n})\n\nconst shouldShow = (schema: ProFormSchema) => {\n let ifShow = true\n let show = true\n if (typeof schema.ifShow === 'function') {\n ifShow = schema.ifShow({ schema, values: formModel.value, model: formModel.value, field: schema.field })\n }\n if (typeof schema.ifShow === 'boolean') {\n ifShow = schema.ifShow\n }\n if (typeof schema.show === 'function') {\n show = schema.show({ schema, values: formModel.value, model: formModel.value, field: schema.field })\n }\n if (typeof schema.show === 'boolean') {\n show = schema.show\n }\n return ifShow && show\n}\nconst getColProps = (schema: ProFormSchema) => {\n return schema.colProps ?? effectiveProps.value.baseColProps ?? {}\n}\nconst getSlotName = (schema: ProFormSchema) => schema.slot || schema.field\n\nconst initForm = () => {\n const model: Record<string, unknown> = {}\n const rules: Record<string, unknown[]> = {}\n const initialValues = effectiveProps.value.initialValues ?? props.initialValues\n innerSchemas.value.forEach((schema) => {\n model[schema.field] = schema.defaultValue ?? initialValues?.[schema.field]\n if (schema.rules?.length) rules[schema.field] = schema.rules\n })\n formModel.value = { ...formModel.value, ...model }\n formRules.value = rules\n}\n\nconst filterByIfShow = (values: Record<string, unknown>) => {\n const result = { ...values }\n innerSchemas.value.forEach((schema) => {\n const ifShow = schema.ifShow\n if (ifShow === undefined) return\n const visible = typeof ifShow === 'boolean' ? ifShow : ifShow({ schema, values, model: values, field: schema.field })\n if (!visible) delete result[schema.field]\n })\n return result\n}\n\nconst processFieldMapToTime = (values: Record<string, unknown>) => {\n const filtered = filterByIfShow(values)\n const fieldMap = innerProps.value.fieldMapToTime\n if (!fieldMap?.length) return filtered\n const result = { ...filtered }\n fieldMap.forEach(([field, [startKey, endKey]]) => {\n const val = result[field]\n if (Array.isArray(val) && val.length === 2) {\n delete result[field]\n ; (result as Record<string, unknown>)[startKey] = val[0]\n ; (result as Record<string, unknown>)[endKey] = val[1]\n }\n })\n return result\n}\n\nconst handleSubmit = async () => {\n try {\n await formRef.value?.validate()\n if (effectiveProps.value.submitFunc) {\n await effectiveProps.value.submitFunc()\n } else {\n submitLoading.value = true\n emit('submit', processFieldMapToTime({ ...formModel.value }))\n }\n } catch (e) {\n console.error('Form validation failed:', e)\n } finally {\n submitLoading.value = false\n }\n}\n\nconst handleReset = async () => {\n if (effectiveProps.value.resetFunc) {\n await effectiveProps.value.resetFunc()\n } else {\n formRef.value?.resetFields()\n initForm()\n emit('reset')\n if (effectiveProps.value.submitOnReset) await handleSubmit()\n }\n}\n\nconst setFieldsValue = (values: Record<string, unknown>) => {\n formModel.value = { ...formModel.value, ...values }\n return Promise.resolve()\n}\n\nconst getFieldsValue = () => processFieldMapToTime({ ...formModel.value })\n\nconst resetFields = async () => {\n formRef.value?.resetFields()\n initForm()\n}\n\nconst validate = (nameList?: string[]) =>\n formRef.value?.validate(nameList) ?? Promise.resolve()\n\nconst validateFields = (nameList?: string[]) => {\n if (!formRef.value) return Promise.resolve()\n if (!nameList?.length) return formRef.value.validate()\n return Promise.all(nameList.map((prop) => new Promise((resolve, reject) => {\n formRef.value.validateField(prop, (valid: boolean) => (valid ? resolve(undefined) : reject(new Error('Validation failed'))))\n })))\n}\n\nconst scrollToField = async (name: string, options?: ScrollToFieldOptions) => {\n const el = formWrapRef.value?.querySelector(`[data-field=\"${name}\"]`)\n if (el) {\n el.scrollIntoView({ behavior: options?.behavior ?? 'smooth', block: options?.block ?? 'nearest' })\n }\n return Promise.resolve()\n}\n\nconst clearValidate = (name?: string | string[]) => {\n formRef.value?.clearValidate(name)\n}\n\nconst updateSchema = async (data: Partial<ProFormSchema> | Partial<ProFormSchema>[]) => {\n const list = Array.isArray(data) ? data : [data]\n list.forEach((item) => {\n const idx = innerSchemas.value.findIndex((s) => s.field === item.field)\n if (idx >= 0) innerSchemas.value[idx] = { ...innerSchemas.value[idx], ...item }\n })\n}\n\nconst appendSchemaByField = async (schema: ProFormSchema, prefixField?: string, first?: boolean) => {\n if (first) innerSchemas.value.unshift(schema)\n else if (prefixField) {\n const idx = innerSchemas.value.findIndex((s) => s.field === prefixField)\n innerSchemas.value.splice(idx + 1, 0, schema)\n } else innerSchemas.value.push(schema)\n initForm()\n}\n\nconst removeSchemaByField = async (field: string | string[]) => {\n const fields = Array.isArray(field) ? field : [field]\n innerSchemas.value = innerSchemas.value.filter((s) => !fields.includes(s.field))\n}\n\nconst setProps = async (formProps: Partial<ProFormProps>) => {\n innerProps.value = { ...innerProps.value, ...formProps }\n if (formProps.schemas) {\n innerSchemas.value = [...formProps.schemas]\n debugger\n initForm()\n }\n}\n\nconst formActionRef: FormActionType = {\n getFieldsValue,\n setFieldsValue,\n resetFields,\n validate,\n validateFields,\n submit: handleSubmit,\n scrollToField,\n clearValidate,\n updateSchema,\n appendSchemaByField,\n removeSchemaByField,\n setProps,\n}\n\ndefineExpose(formActionRef)\n\nconst syncSchemas = () => {\n innerSchemas.value = [...(props.schemas ?? [])]\n initForm()\n}\n\nconst handleResize = () => {\n if (typeof window !== 'undefined') windowWidth.value = window.innerWidth\n}\n\nonMounted(() => {\n syncSchemas()\n emit('register', formActionRef)\n if (typeof window !== 'undefined') window.addEventListener('resize', handleResize)\n})\n\nonUnmounted(() => {\n if (typeof window !== 'undefined') window.removeEventListener('resize', handleResize)\n})\n\nwatch(() => [props.schemas, props.initialValues], syncSchemas, { deep: true })\n</script>\n\n<style scoped>\n.ecp-pro-form {\n padding: 16px;\n position: relative;\n}\n\n.ecp-pro-form__advance {\n margin-bottom: 16px;\n}\n\n.ecp-pro-form_col {\n position: relative;\n float: right;\n}\n\n.el-icon-d-arrow-left.up {\n transform: rotate(90deg);\n}\n\n.el-icon-d-arrow-left.down {\n transform: rotate(-90deg);\n}\n\n.ecp-form-actions__advance {\n position: absolute;\n bottom: 0;\n left: 50%;\n transform: translate(-50%, -50%);\n}\n</style>\n","import { ref, watch, unref, type Ref } from 'vue'\nimport type { ProFormSchema, ProFormProps, FormActionType } from '../types'\n\nexport interface UseFormProps extends ProFormProps {\n schemas?: ProFormSchema[]\n}\n\n/** 支持 ref/computed 的 props(参考 Vben Admin:参数 props 内的值可以是 computed 或者 ref 类型) */\nexport type UseFormPropsReactive = UseFormProps | Ref<UseFormProps | undefined>\n\nexport interface UseFormReturn {\n /** 用于 @register,接收表单实例的 formAction */\n register: (formAction: FormActionType) => void\n formAction: { value: FormActionType | null }\n getFieldsValue: () => Record<string, unknown>\n setFieldsValue: (values: Record<string, unknown>) => Promise<void>\n resetFields: () => Promise<void>\n validate: (nameList?: string[]) => Promise<unknown>\n validateFields: (nameList?: string[]) => Promise<unknown>\n submit: () => Promise<void>\n scrollToField: (name: string, options?: import('../types').ScrollToFieldOptions) => Promise<void>\n clearValidate: (name?: string | string[]) => void\n updateSchema: (data: Partial<ProFormSchema> | Partial<ProFormSchema>[]) => Promise<void>\n appendSchemaByField: (schema: ProFormSchema, prefixField?: string, first?: boolean) => Promise<void>\n removeSchemaByField: (field: string | string[]) => Promise<void>\n setProps: (props: Partial<ProFormProps>) => Promise<void>\n}\n\nexport function useForm(props?: UseFormPropsReactive): [UseFormReturn['register'], Omit<UseFormReturn, 'register'>] {\n const formAction = ref<FormActionType | null>(null)\n const formPropsRef = ref<UseFormProps | undefined>(props ? unref(props as Ref<UseFormProps | undefined>) : undefined)\n\n const getFormProps = () => (props ? unref(props as Ref<UseFormProps | undefined>) : undefined) as UseFormProps | undefined\n\n const register = (action: FormActionType) => {\n formAction.value = action\n const formProps = getFormProps()\n debugger\n if (formProps && Object.keys(formProps).length > 0) {\n action.setProps(formProps)\n }\n }\n\n if (props) {\n watch(\n () => getFormProps(),\n (formProps) => {\n formPropsRef.value = formProps\n if (formProps && formAction.value) {\n formAction.value.setProps(formProps)\n }\n },\n { deep: true }\n )\n }\n\n const getFieldsValue = () => formAction.value?.getFieldsValue() ?? {}\n\n const setFieldsValue = async (values: Record<string, unknown>) => {\n await formAction.value?.setFieldsValue(values)\n }\n\n const resetFields = async () => {\n await formAction.value?.resetFields()\n }\n\n const validate = (nameList?: string[]) =>\n formAction.value?.validate(nameList) ?? Promise.resolve()\n\n const validateFields = (nameList?: string[]) =>\n formAction.value?.validateFields(nameList) ?? Promise.resolve()\n\n const submit = () => formAction.value?.submit() ?? Promise.resolve()\n\n const scrollToField = (name: string, options?: import('../types').ScrollToFieldOptions) =>\n formAction.value?.scrollToField(name, options) ?? Promise.resolve()\n\n const clearValidate = (name?: string | string[]) => {\n formAction.value?.clearValidate(name)\n }\n\n const updateSchema = (data: Partial<ProFormSchema> | Partial<ProFormSchema>[]) =>\n formAction.value?.updateSchema(data) ?? Promise.resolve()\n\n const appendSchemaByField = (schema: ProFormSchema, prefixField?: string, first?: boolean) =>\n formAction.value?.appendSchemaByField(schema, prefixField, first) ?? Promise.resolve()\n\n const removeSchemaByField = (field: string | string[]) =>\n formAction.value?.removeSchemaByField(field) ?? Promise.resolve()\n\n const setProps = async (formProps: Partial<ProFormProps>) => {\n formPropsRef.value = { ...formPropsRef.value, ...formProps }\n await formAction.value?.setProps(formProps)\n }\n\n const result: UseFormReturn = {\n register,\n formAction,\n getFieldsValue,\n setFieldsValue,\n resetFields,\n validate,\n validateFields,\n submit,\n scrollToField,\n clearValidate,\n updateSchema,\n appendSchemaByField,\n removeSchemaByField,\n setProps,\n }\n\n return [register, result]\n}\n","import type { VueConstructor } from 'vue'\n// import ProTable from './ProTable'\nimport ProForm, { ProFormItem, FormActions } from './ProForm'\n// import ProCard from './ProCard'\n// import ProDescriptions from './ProDescriptions'\nimport { useForm } from './ProForm/useForm'\n\nexport { ProForm, ProFormItem, FormActions, useForm }\nexport * from './types'\n\nconst components = [\n // { name: 'ProTable', component: ProTable },\n { name: 'ProForm', component: ProForm },\n { name: 'ProFormItem', component: ProFormItem },\n { name: 'FormActions', component: FormActions }\n // { name: 'ProCard', component: ProCard },\n // { name: 'ProDescriptions', component: ProDescriptions },\n]\n\nexport function install(Vue: VueConstructor) {\n components.forEach(({ name, component }) => {\n Vue.component(name, component)\n })\n}\n\nexport default {\n install,\n // ProTable,\n ProForm,\n // ProCard,\n // ProDescriptions,\n}\n"],"names":["slots","useSlots","renderParams","computed","props","shouldRender","ifShow","shouldShow","show","effectiveDisabled","dyn","effectiveRules","effectiveComponentPropsAndListeners","cp","raw","propsOnly","listeners","key","value","eventName","effectiveComponentProps","effectiveComponentListeners","hasSlot","getOptions","opts","renderComponent","renderFn","result","h","formRef","ref","formWrapRef","submitLoading","collapsed","formModel","formRules","innerSchemas","innerProps","BREAKPOINTS","getEffectiveSpan","colProps","baseColProps","width","w","col","base","fallback","effectiveProps","effectiveActionColOptions","windowWidth","getVisibleSchemaCount","schemas","maxLines","remaining","rows","count","schema","span","hasMoreFields","s","lines","maxVisible","formListeners","displaySchemas","getColProps","getSlotName","initForm","model","rules","initialValues","_a","filterByIfShow","values","processFieldMapToTime","filtered","fieldMap","field","startKey","endKey","val","handleSubmit","emit","e","handleReset","setFieldsValue","getFieldsValue","resetFields","validate","nameList","validateFields","prop","resolve","reject","valid","scrollToField","name","options","el","clearValidate","updateSchema","data","item","idx","appendSchemaByField","prefixField","first","removeSchemaByField","fields","setProps","formProps","formActionRef","expose","syncSchemas","handleResize","onMounted","onUnmounted","watch","useForm","formAction","formPropsRef","unref","getFormProps","register","action","components","ProForm","ProFormItem","FormActions","install","Vue","component","index"],"mappings":"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"}
|