123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- import type { Form, FormExpose } from '@/components/Form'
- import type { ElForm, ElFormItem } from 'element-plus'
- import { ref, unref, nextTick } from 'vue'
- import { FormSchema, FormSetProps, FormProps } from '@/components/Form'
- export const useForm = () => {
- // From实例
- const formRef = ref<typeof Form & FormExpose>()
- // ElForm实例
- const elFormRef = ref<ComponentRef<typeof ElForm>>()
- /**
- * @param ref Form实例
- * @param elRef ElForm实例
- */
- const register = (ref: typeof Form & FormExpose, elRef: ComponentRef<typeof ElForm>) => {
- formRef.value = ref
- elFormRef.value = elRef
- }
- const getForm = async () => {
- await nextTick()
- const form = unref(formRef)
- if (!form) {
- console.error('The form is not registered. Please use the register method to register')
- }
- return form
- }
- // 一些内置的方法
- const methods = {
- /**
- * @description 设置form组件的props
- * @param props form组件的props
- */
- setProps: async (props: FormProps = {}) => {
- const form = await getForm()
- form?.setProps(props)
- if (props.model) {
- form?.setValues(props.model)
- }
- },
- /**
- * @description 设置form的值
- * @param data 需要设置的数据
- */
- setValues: async (data: Recordable) => {
- const form = await getForm()
- form?.setValues(data)
- },
- /**
- * @description 设置schema
- * @param schemaProps 需要设置的schemaProps
- */
- setSchema: async (schemaProps: FormSetProps[]) => {
- const form = await getForm()
- form?.setSchema(schemaProps)
- },
- /**
- * @description 新增schema
- * @param formSchema 需要新增数据
- * @param index 在哪里新增
- */
- addSchema: async (formSchema: FormSchema, index?: number) => {
- const form = await getForm()
- form?.addSchema(formSchema, index)
- },
- /**
- * @description 删除schema
- * @param field 删除哪个数据
- */
- delSchema: async (field: string) => {
- const form = await getForm()
- form?.delSchema(field)
- },
- /**
- * @description 获取表单数据
- * @returns form data
- */
- getFormData: async <T = Recordable>(): Promise<T> => {
- const form = await getForm()
- return form?.formModel as T
- },
- /**
- * @description 获取表单组件的实例
- * @param field 表单项唯一标识
- * @returns component instance
- */
- getComponentExpose: async (field: string) => {
- const form = await getForm()
- return form?.getComponentExpose(field)
- },
- /**
- * @description 获取formItem组件的实例
- * @param field 表单项唯一标识
- * @returns formItem instance
- */
- getFormItemExpose: async (field: string) => {
- const form = await getForm()
- return form?.getFormItemExpose(field) as ComponentRef<typeof ElFormItem>
- },
- /**
- * @description 获取ElForm组件的实例
- * @returns ElForm instance
- */
- getElFormExpose: async () => {
- await getForm()
- return unref(elFormRef)
- },
- getFormExpose: async () => {
- await getForm()
- return unref(formRef)
- }
- }
- return {
- formRegister: register,
- formMethods: methods
- }
- }
|