diff --git a/apps/vue/src/components/Form/src/BasicForm.vue b/apps/vue/src/components/Form/src/BasicForm.vue index b9a8c9ee9..99702e5af 100644 --- a/apps/vue/src/components/Form/src/BasicForm.vue +++ b/apps/vue/src/components/Form/src/BasicForm.vue @@ -63,6 +63,7 @@ import { basicProps } from './props'; import { useDesign } from '/@/hooks/web/useDesign'; + import { isFunction, isArray } from '/@/utils/is'; export default defineComponent({ name: 'BasicForm', @@ -90,6 +91,7 @@ // Get the basic configuration of the form const getProps = computed((): FormProps => { + // @ts-ignore return { ...props, ...unref(propsRef) } as FormProps; }); @@ -239,8 +241,11 @@ propsRef.value = deepMerge(unref(propsRef) || {}, formProps); } - function setFormModel(key: string, value: any) { + function setFormModel(key: string, value: any, schema: FormSchema) { formModel[key] = value; + if (isFunction(schema.dynamicRules) || isArray(schema.rules)) { + return; + } const { validateTrigger } = unref(getBindValue); if (!validateTrigger || validateTrigger === 'change') { validateFields([key]).catch((_) => {}); diff --git a/apps/vue/src/components/Form/src/components/FormItem.vue b/apps/vue/src/components/Form/src/components/FormItem.vue index 1d2657ad9..ff92cdc15 100644 --- a/apps/vue/src/components/Form/src/components/FormItem.vue +++ b/apps/vue/src/components/Form/src/components/FormItem.vue @@ -34,7 +34,7 @@ default: () => ({}), }, setFormModel: { - type: Function as PropType<(key: string, value: any) => void>, + type: Function as PropType<(key: string, value: any, schema: FormSchema) => void>, default: null, }, tableAction: { @@ -252,7 +252,7 @@ } const target = e ? e.target : null; const value = target ? (isCheck ? target.checked : target.value) : e; - props.setFormModel(field, value); + props.setFormModel(field, value, props.schema); }, }; const Comp = componentMap.get(component) as ReturnType; diff --git a/apps/vue/src/components/Form/src/hooks/useFormEvents.ts b/apps/vue/src/components/Form/src/hooks/useFormEvents.ts index 973f8c875..4b12ff355 100644 --- a/apps/vue/src/components/Form/src/hooks/useFormEvents.ts +++ b/apps/vue/src/components/Form/src/hooks/useFormEvents.ts @@ -60,7 +60,7 @@ export function useFormEvents({ /** * @description: Set form value */ - async function setFieldsValue(values: Recordable): Promise { + async function setFieldsValue>(values: T): Promise { const fields = unref(getSchema) .map((item) => item.field) .filter(Boolean); diff --git a/apps/vue/src/components/Form/src/types/form.ts b/apps/vue/src/components/Form/src/types/form.ts index 34cf482e8..968af1ce7 100644 --- a/apps/vue/src/components/Form/src/types/form.ts +++ b/apps/vue/src/components/Form/src/types/form.ts @@ -26,7 +26,7 @@ export interface ButtonProps extends AntdButtonProps { export interface FormActionType { submit: () => Promise; - setFieldsValue: (values: T) => Promise; + setFieldsValue: (values: T) => Promise; resetFields: () => Promise; getFieldsValue: () => Recordable; clearValidate: (name?: string | string[]) => Promise; diff --git a/apps/vue/src/components/Table/src/BasicTable.vue b/apps/vue/src/components/Table/src/BasicTable.vue index 7dfe1ee53..07fbdc0dc 100644 --- a/apps/vue/src/components/Table/src/BasicTable.vue +++ b/apps/vue/src/components/Table/src/BasicTable.vue @@ -97,6 +97,7 @@ import { warn } from '/@/utils/log'; export default defineComponent({ + name:'BasicTable', components: { Table, BasicForm, diff --git a/apps/vue/src/components/Table/src/hooks/useDataSource.ts b/apps/vue/src/components/Table/src/hooks/useDataSource.ts index 903b8e9c4..15d3677e7 100644 --- a/apps/vue/src/components/Table/src/hooks/useDataSource.ts +++ b/apps/vue/src/components/Table/src/hooks/useDataSource.ts @@ -165,30 +165,41 @@ export function useDataSource( const rowKeyName = unref(getRowKey); if (!rowKeyName) return; const rowKeys = !Array.isArray(rowKey) ? [rowKey] : rowKey; - for (const key of rowKeys) { - let index: number | undefined = dataSourceRef.value.findIndex((row) => { - let targetKeyName: string; - if (typeof rowKeyName === 'function') { - targetKeyName = rowKeyName(row); - } else { - targetKeyName = rowKeyName as string; - } - return row[targetKeyName] === key; - }); - if (index >= 0) { - dataSourceRef.value.splice(index, 1); + + function deleteRow(data?: Recordable, key?: string | number | string[] | number[]) { + const row: { index: number; data: [] } = findRow(data, key); + if (row === null || row.index === -1) { + return; } - index = unref(propsRef).dataSource?.findIndex((row) => { - let targetKeyName: string; - if (typeof rowKeyName === 'function') { - targetKeyName = rowKeyName(row); - } else { - targetKeyName = rowKeyName as string; + row.data.splice(row.index, 1); + + function findRow(data, key) { + if (data === null || data === undefined) { + return null; } - return row[targetKeyName] === key; - }); - if (typeof index !== 'undefined' && index !== -1) - unref(propsRef).dataSource?.splice(index, 1); + for (let i = 0; i < data.length; i++) { + const row = data[i]; + let targetKeyName: string = rowKeyName as string; + if (isFunction(rowKeyName)) { + targetKeyName = rowKeyName(row); + } + if (row[targetKeyName] === key) { + return { index: i, data }; + } + if (row.children?.length > 0) { + const result = findRow(row.children, key); + if (result != null) { + return result; + } + } + } + return null; + } + } + + for (const key of rowKeys) { + deleteRow(dataSourceRef.value, key); + deleteRow(unref(propsRef).dataSource, key); } setPagination({ total: unref(propsRef).dataSource?.length,