vue-admin-core
Version:
A Component Library for Vue 3
1 lines • 12.5 kB
Source Map (JSON)
{"version":3,"file":"useFormilyTable.mjs","sources":["../../../../../package/hooks/formily/useFormilyTable.tsx"],"sourcesContent":["import useRequest from \"../useRequest\";\nimport {\n DefineComponent,\n FormProvider,\n ISchema,\n ISchemaFieldProps,\n SchemaKey,\n VueComponent,\n useForm\n} from \"@formily/vue\";\nimport { Field, Form as FormilyForm, IFormProps, createForm } from \"@formily/core\";\nimport { Options, Result, Service } from \"../useRequest/src/types\";\nimport { useGlobalConfig } from \"@vue-admin-core/components/config-provider\";\nimport { type PropType, type Ref, defineComponent, getCurrentInstance, toValue, watch } from \"vue\";\nimport { ArrayTable, ITable } from \"@vue-admin-core/formily\";\nimport { autorun } from \"@formily/reactive\";\nimport { isService } from \"../useRequest/__utils__/isService\";\nimport defaultProps from \"element-plus/es/components/table/src/table/defaults\";\nimport { map } from \"lodash-es\";\n\n// #region useFormilyTable\n/**\n * useFormilyTable Hook 的签名\n */\ndeclare type useFormilyTable = <TData, TParams extends any[]>(\n request: Service<TData, TParams> | Result<TData, TParams>,\n options?: Options<TData, TParams> & {\n formProps?: IFormProps<object>;\n },\n definitions?: Record<string, ISchema>,\n SchemaField?: DefineComponent<ISchemaFieldProps>\n) => {\n // 通过useForm获取的form,如果没有,则默认创建一个新的\n form: Ref<FormilyForm>;\n // 表格组件\n Table: DefineComponent<PropType<typeof ArrayTable>>;\n request: Result<TData, TParams>;\n table: ITable;\n};\n// #endregion useFormilyTable\n\nexport type UseFormilyTableSchema = Record<\n SchemaKey,\n {\n \"x-table-header\": boolean;\n \"x-column-props\": typeof defaultProps;\n } & ISchema\n>;\n\nexport const transformTableSchema = (schemas: UseFormilyTableSchema) => {\n const _map: Record<string, ISchema> = {};\n\n map(schemas, (schema, key) => {\n if (schema[\"x-column-props\"]) {\n _map[key] = {\n type: \"void\",\n \"x-component\": \"ArrayTable.Column\",\n \"x-component-props\": schema[\"x-column-props\"],\n ...schema\n };\n } else {\n _map[key] = schema;\n }\n if (schema[\"properties\"]) {\n _map[key][\"properties\"] = transformTableSchema(schema[\"properties\"] as UseFormilyTableSchema);\n }\n });\n\n return _map;\n};\n\nexport const useFormilyTable = <TData, TParams extends any[]>(\n request: Service<TData, TParams> | Result<TData, TParams>,\n options?: Options<TData, TParams> & {\n formProps?: IFormProps<object>;\n },\n SchemaField?: DefineComponent<ISchemaFieldProps>\n) => {\n const form = useForm();\n const config = useGlobalConfig();\n const pageSizeKey = config.value.pageSizeKey || \"pageSize\";\n const currentPageKey = config.value.currentPageKey || \"currentPage\";\n const totalKey = config.value.totalKey || \"totalElements\";\n const listKey = config.value.listKey || \"content\";\n const tableUid = \"dataSource\";\n\n const app = getCurrentInstance();\n\n const SelfSchemaField = (app?.appContext.components.SchemaField ||\n SchemaField) as DefineComponent<ISchemaFieldProps>;\n\n if (!SelfSchemaField) {\n throw new Error(`SchemaField 找不到,在全局设置app.use(setupFormily)或者传入SchemaField`);\n }\n\n const { formProps, ...others } = options || {};\n\n if (!form.value) {\n form.value = createForm(formProps);\n }\n\n const pagination = ArrayTable.createPagination();\n const table: ITable = ArrayTable.createTable() as ITable;\n\n let result = request as Result<TData, TParams>;\n\n if (isService<TData, TParams>(request)) {\n result = useRequest(request, { manual: true, current: 1, ...others });\n }\n\n autorun(() => {\n const params = toValue(result.params as any)?.[0];\n // @ts-ignore\n result.run({\n ...params,\n [pageSizeKey]: pagination.pageSize,\n [currentPageKey]: pagination.current\n });\n });\n\n watch(\n result.loading,\n (value) => {\n form.value.query(tableUid).take((field) => {\n field.setComponentProps({ loading: value });\n });\n },\n { immediate: true }\n );\n\n watch([result.data], ([data]) => {\n if (Array.isArray(data)) {\n form.value.query(tableUid).take((field) => {\n (field as Field).setValue(data);\n });\n } else {\n form.value.query(tableUid).take((field) => {\n (field as Field).setValue((data as any)[listKey]);\n pagination.setTotal((data as any)[totalKey]);\n });\n }\n });\n\n const Table = defineComponent({\n name: \"UseSearchTableTable\",\n props: {\n ...defaultProps,\n schema: {\n type: Object as PropType<UseFormilyTableSchema>,\n required: true\n },\n components: {\n type: Object as PropType<Record<string, VueComponent>>\n },\n scope: {\n type: Object\n },\n name: {\n type: [String, Number] as PropType<SchemaKey>\n },\n definitions: {\n type: Object as PropType<Record<string, ISchema>>\n }\n },\n setup(props, { slots }) {\n const { schema, components, scope, name, ...reset } = props;\n const _form = useForm();\n\n if (_form.value) form.value = _form.value;\n const _schema: ISchema = {\n type: \"object\",\n definitions: props.definitions,\n properties: {\n [tableUid]: {\n type: \"array\",\n \"x-component\": \"ArrayTable\",\n \"x-component-props\": {\n ...reset,\n pagination: pagination,\n table,\n loading: result.loading.value\n },\n items: {\n type: \"object\",\n properties: transformTableSchema(schema) as Record<string, ISchema>\n }\n }\n }\n };\n return () => (\n <FormProvider form={form.value}>\n <SelfSchemaField schema={_schema} components={components} name={name} scope={scope}>\n {slots}\n </SelfSchemaField>\n </FormProvider>\n );\n }\n });\n\n return {\n form: form,\n Table,\n request: result,\n table: table\n };\n};\nexport default useFormilyTable;\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","transformTableSchema","schemas","_map","map","schema","key","type","useFormilyTable","request","options","SchemaField","form","useForm","config","useGlobalConfig","pageSizeKey","value","currentPageKey","totalKey","listKey","tableUid","app","getCurrentInstance","SelfSchemaField","appContext","components","Error","formProps","others","createForm","pagination","ArrayTable","createPagination","table","createTable","result","isService","useRequest","manual","current","autorun","params","toValue","run","pageSize","watch","loading","query","take","field","setComponentProps","immediate","data","Array","isArray","setValue","setTotal","Table","defineComponent","name","props","defaultProps","required","scope","String","Number","definitions","setup","slots","reset","_form","_schema","properties","items","_createVNode","FormProvider","default"],"mappings":"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"}