Commit 4730b3af31d40fcd2dfe21c0d9faf08ef8420cfa

Authored by Cyrus Zhou
Committed by GitHub
1 parent 740d1601

Table BasicColumn 添加 editDynamicDisabled (#2018)

* Table BasicColumn 添加 editDynamicDisabled
Co-authored-by: Cyrus Zhou <6802207@qq.com>
使用方式同 Form FormSchema dynamicDisabled
```
export const Columns: BasicColumn[] = [
  {
    title: 'Title',
    dataIndex: 'Title',
    editRow: true,
    editComponent: 'Select',
    editDynamicDisabled: ({ record }) => record.isDisabled,
  },

* editComponentProps onChange 功能恢复
Co-authored-by: Cyrus Zhou <6802207@qq.com>
说明:
...omit(compProps, 'onChange')
这会忽略 onChange ,导致 editComponentProps onChange 被取消

如下功能将不支持:
```
editComponentProps: ({ record }) => {
  return {
    options: effectTypeData,
    onChange: () => {
    },
  };
},
```

* tableData == null 报错

* ApiSelect 第一次选择触发required错误提示问题

* 恢复 虽然可以解决第一次选择提示报错问题,但是会导致 onChange: (e: any, options: any) => 无法获得 options 的值
src/components/Table/src/components/editable/EditableCell.vue
... ... @@ -82,17 +82,36 @@
82 82 if (component === 'ApiSelect') {
83 83 apiSelectProps.cache = true;
84 84 }
85   -
  85 + upEditDynamicDisabled(record, column, value);
86 86 return {
87 87 size: 'small',
88 88 getPopupContainer: () => unref(table?.wrapRef.value) ?? document.body,
89 89 placeholder: createPlaceholderMessage(unref(getComponent)),
90 90 ...apiSelectProps,
91   - ...omit(compProps, 'onChange'),
  91 + ...compProps,
92 92 [valueField]: value,
  93 + disabled: unref(getDisable),
93 94 } as any;
94 95 });
95   -
  96 + function upEditDynamicDisabled(record, column, value) {
  97 + if (!record) return false;
  98 + const { key, dataIndex } = column;
  99 + if (!key && !dataIndex) return;
  100 + const dataKey = (dataIndex || key) as string;
  101 + set(record, dataKey, value);
  102 + }
  103 + const getDisable = computed(() => {
  104 + const { editDynamicDisabled } = props.column;
  105 + let disabled = false;
  106 + if (isBoolean(editDynamicDisabled)) {
  107 + disabled = editDynamicDisabled;
  108 + }
  109 + if (isFunction(editDynamicDisabled)) {
  110 + const { record } = props;
  111 + disabled = editDynamicDisabled({ record });
  112 + }
  113 + return disabled;
  114 + });
96 115 const getValues = computed(() => {
97 116 const { editValueMap } = props.column;
98 117  
... ...
src/components/Table/src/hooks/useTableScroll.ts
... ... @@ -90,7 +90,7 @@ export function useTableScroll(
90 90  
91 91 bodyEl!.style.height = 'unset';
92 92  
93   - if (!unref(getCanResize) || tableData.length === 0) return;
  93 + if (!unref(getCanResize) || !unref(tableData) || tableData.length === 0) return;
94 94  
95 95 await nextTick();
96 96 // Add a delay to get the correct bottomIncludeBody paginationHeight footerHeight headerHeight
... ...
src/components/Table/src/types/table.ts
... ... @@ -463,6 +463,8 @@ export interface BasicColumn extends ColumnProps&lt;Recordable&gt; {
463 463 column: BasicColumn;
464 464 index: number;
465 465 }) => VNodeChild | JSX.Element;
  466 + // 动态 Disabled
  467 + editDynamicDisabled?: boolean | ((record: Recordable) => boolean);
466 468 }
467 469  
468 470 export type ColumnChangeParam = {
... ...