diff --git a/packages/form-schema/src/base.ts b/packages/form-schema/src/base.ts index e364aea4..021fc935 100644 --- a/packages/form-schema/src/base.ts +++ b/packages/form-schema/src/base.ts @@ -716,6 +716,7 @@ export interface TableConfig extends FormItem { selection?: (mForm: FormState | undefined, data: any) => boolean | boolean | 'single'; /** 新增的默认行 */ defaultAdd?: (mForm: FormState | undefined, data: any) => any; + copyHandler?: (mForm: FormState | undefined, data: any) => any; onSelect?: (mForm: FormState | undefined, data: any) => any; defautSort?: SortProp; defaultSort?: SortProp; diff --git a/packages/form/src/table/ActionsColumn.vue b/packages/form/src/table/ActionsColumn.vue index f0de9af1..51dbf6e9 100644 --- a/packages/form/src/table/ActionsColumn.vue +++ b/packages/form/src/table/ActionsColumn.vue @@ -63,7 +63,18 @@ const removeHandler = (index: number) => { }; const copyHandler = (index: number) => { - const inputs = cloneDeep(props.model[props.name][index]); + let inputs = cloneDeep(props.model[props.name][index]); + + if (typeof props.config.copyHandler === 'function') { + const modelName = props.name || props.config.name || ''; + inputs = props.config.copyHandler(mForm, { + model: props.model[modelName], + prop: props.prop, + formValue: mForm?.values, + inputs, + }); + } + const { length } = props.model[props.name]; if (props.sortKey && length) { inputs[props.sortKey] = props.model[props.name][length - 1][props.sortKey] - 1; diff --git a/packages/form/src/table/useTableColumns.ts b/packages/form/src/table/useTableColumns.ts index b2c1cae4..4fd7f04d 100644 --- a/packages/form/src/table/useTableColumns.ts +++ b/packages/form/src/table/useTableColumns.ts @@ -101,6 +101,17 @@ export const useTableColumns = ( }); } + if (selection.value) { + columns.push({ + props: { + align: 'center', + headerAlign: 'center', + type: 'selection', + width: 45, + }, + }); + } + let actionFixed: 'left' | 'right' | undefined = props.config.fixed === false ? undefined : 'left'; if (typeof props.config.fixed === 'string' && ['left', 'right'].includes(props.config.fixed)) { @@ -159,17 +170,6 @@ export const useTableColumns = ( }); } - if (selection.value) { - columns.push({ - props: { - align: 'center', - headerAlign: 'center', - type: 'selection', - width: 45, - }, - }); - } - if (props.showIndex && props.config.showIndex) { columns.push({ props: { diff --git a/packages/tdesign-vue-next-adapter/src/Table.vue b/packages/tdesign-vue-next-adapter/src/Table.vue index dda7bc36..9fa806e0 100644 --- a/packages/tdesign-vue-next-adapter/src/Table.vue +++ b/packages/tdesign-vue-next-adapter/src/Table.vue @@ -60,6 +60,10 @@ const tableColumns = computed(() => { align: item.props?.align, }; + if (item.props.type === 'selection') { + column.type = 'multiple'; + } + // 处理自定义单元格渲染 if (item.cell) { column.cell = (h: any, { row, rowIndex }: any) => {