Browse Source

解决deleteTableRecord删除树形表格的行记录时,无法删除,无法找到子节点的问题

pull/768/head
cKey 3 years ago
parent
commit
c1fb1c2e97
  1. 7
      apps/vue/src/components/Form/src/BasicForm.vue
  2. 4
      apps/vue/src/components/Form/src/components/FormItem.vue
  3. 2
      apps/vue/src/components/Form/src/hooks/useFormEvents.ts
  4. 2
      apps/vue/src/components/Form/src/types/form.ts
  5. 1
      apps/vue/src/components/Table/src/BasicTable.vue
  6. 55
      apps/vue/src/components/Table/src/hooks/useDataSource.ts

7
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((_) => {});

4
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<typeof defineComponent>;

2
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<void> {
async function setFieldsValue<T extends Recordable<any>>(values: T): Promise<void> {
const fields = unref(getSchema)
.map((item) => item.field)
.filter(Boolean);

2
apps/vue/src/components/Form/src/types/form.ts

@ -26,7 +26,7 @@ export interface ButtonProps extends AntdButtonProps {
export interface FormActionType {
submit: () => Promise<void>;
setFieldsValue: <T>(values: T) => Promise<void>;
setFieldsValue: <T extends Recordable>(values: T) => Promise<void>;
resetFields: () => Promise<void>;
getFieldsValue: () => Recordable;
clearValidate: (name?: string | string[]) => Promise<void>;

1
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,

55
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<any>, 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,

Loading…
Cancel
Save