Browse Source

perf: perf table

vben 4 years ago
parent
commit
cdf0a600e5

+ 2 - 1
src/components/Button/src/PopConfirmButton.vue

@@ -13,6 +13,7 @@
     inheritAttrs: false,
     inheritAttrs: false,
     components: { Popconfirm, BasicButton },
     components: { Popconfirm, BasicButton },
     props: {
     props: {
+      size: propTypes.oneOf(['large', 'default', 'small']).def(),
       enable: propTypes.bool.def(true),
       enable: propTypes.bool.def(true),
       okText: propTypes.string,
       okText: propTypes.string,
       cancelText: propTypes.string,
       cancelText: propTypes.string,
@@ -31,7 +32,7 @@
         return popValues;
         return popValues;
       });
       });
       return () => {
       return () => {
-        const Button = h(BasicButton, omit(unref(attrs), 'icon'), extendSlots(slots));
+        const Button = h(BasicButton, unref(getBindValues), extendSlots(slots));
         if (!props.enable) {
         if (!props.enable) {
           return Button;
           return Button;
         }
         }

+ 0 - 2
src/components/Table/index.ts

@@ -2,11 +2,9 @@ import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
 
 
 export { default as BasicTable } from './src/BasicTable.vue';
 export { default as BasicTable } from './src/BasicTable.vue';
 export { default as TableAction } from './src/components/TableAction.vue';
 export { default as TableAction } from './src/components/TableAction.vue';
-// export { default as TableImg } from './src/components/TableImg.vue';
 export { default as EditTableHeaderIcon } from './src/components/EditTableHeaderIcon.vue';
 export { default as EditTableHeaderIcon } from './src/components/EditTableHeaderIcon.vue';
 
 
 export const TableImg = createAsyncComponent(() => import('./src/components/TableImg.vue'));
 export const TableImg = createAsyncComponent(() => import('./src/components/TableImg.vue'));
-// export const TableAction = createAsyncComponent(() => import('./src/components/TableAction.vue'));
 
 
 export * from './src/types/table';
 export * from './src/types/table';
 export * from './src/types/pagination';
 export * from './src/types/pagination';

+ 19 - 2
src/components/Table/src/components/TableAction.vue

@@ -5,7 +5,10 @@
         <Icon :icon="action.icon" class="mr-1" v-if="action.icon" />
         <Icon :icon="action.icon" class="mr-1" v-if="action.icon" />
         {{ action.label }}
         {{ action.label }}
       </PopConfirmButton>
       </PopConfirmButton>
-      <Divider type="vertical" v-if="divider && index < getActions.length" />
+      <Divider
+        type="vertical"
+        v-if="divider && index < getActions.length - (dropDownActions ? 0 : 1)"
+      />
     </template>
     </template>
     <Dropdown :trigger="['hover']" :dropMenuList="getDropList" v-if="dropDownActions">
     <Dropdown :trigger="['hover']" :dropMenuList="getDropList" v-if="dropDownActions">
       <slot name="more" />
       <slot name="more" />
@@ -44,17 +47,31 @@
     },
     },
     setup(props) {
     setup(props) {
       const { prefixCls } = useDesign('basic-table-action');
       const { prefixCls } = useDesign('basic-table-action');
-      let table = {};
+      let table: Partial<TableActionType> = {};
       if (!props.outside) {
       if (!props.outside) {
         table = useTableContext();
         table = useTableContext();
       }
       }
 
 
+      // const getSize = computed(() => {
+      //   const size = table?.getSize?.();
+      //   if (size === 'middle' || !size) {
+      //     return;
+      //   }
+
+      //   if (size === 'default') {
+      //     return 'large';
+      //   }
+      //   return size;
+      // });
+
       const getActions = computed(() => {
       const getActions = computed(() => {
         return (props.actions || []).map((action) => {
         return (props.actions || []).map((action) => {
           const { popConfirm } = action;
           const { popConfirm } = action;
+          // const size = unref(getSize);
           return {
           return {
             type: 'link',
             type: 'link',
             size: 'small',
             size: 'small',
+            // ...(size ? { size } : {}),
             ...action,
             ...action,
             ...(popConfirm || {}),
             ...(popConfirm || {}),
             onConfirm: popConfirm?.confirm,
             onConfirm: popConfirm?.confirm,

+ 13 - 0
src/components/Table/src/components/editable/EditableCell.vue

@@ -85,6 +85,18 @@
         return unref(ruleMessage) && unref(ruleVisible);
         return unref(ruleMessage) && unref(ruleVisible);
       });
       });
 
 
+      // const getSize = computed(() => {
+      //   const size = table?.getSize?.();
+      //   if (size === 'middle' || !size) {
+      //     return;
+      //   }
+
+      //   if (size === 'default') {
+      //     return 'large';
+      //   }
+      //   return size;
+      // });
+
       const getIsCheckComp = computed(() => {
       const getIsCheckComp = computed(() => {
         const component = unref(getComponent);
         const component = unref(getComponent);
         return ['Checkbox', 'Switch'].includes(component);
         return ['Checkbox', 'Switch'].includes(component);
@@ -300,6 +312,7 @@
         handleOptionsChange,
         handleOptionsChange,
         getWrapperStyle,
         getWrapperStyle,
         getRowEditable,
         getRowEditable,
+        // getSize,
       };
       };
     },
     },
   });
   });

+ 3 - 3
src/components/Table/src/components/editable/helper.ts

@@ -8,10 +8,10 @@ const { t } = useI18n();
  */
  */
 export function createPlaceholderMessage(component: ComponentType) {
 export function createPlaceholderMessage(component: ComponentType) {
   if (component.includes('Input')) {
   if (component.includes('Input')) {
-    return t('component.form.input');
+    return t('common.inputText');
   }
   }
   if (component.includes('Picker')) {
   if (component.includes('Picker')) {
-    return t('component.form.choose');
+    return t('common.chooseText');
   }
   }
 
 
   if (
   if (
@@ -20,7 +20,7 @@ export function createPlaceholderMessage(component: ComponentType) {
     component.includes('Radio') ||
     component.includes('Radio') ||
     component.includes('Switch')
     component.includes('Switch')
   ) {
   ) {
-    return t('component.form.choose');
+    return t('common.chooseText');
   }
   }
   return '';
   return '';
 }
 }

+ 1 - 1
src/components/Table/src/hooks/useTableScroll.ts

@@ -143,7 +143,7 @@ export function useTableScroll(
 
 
     const table = unref(tableElRef);
     const table = unref(tableElRef);
     const tableWidth = table?.$el?.offsetWidth ?? 0;
     const tableWidth = table?.$el?.offsetWidth ?? 0;
-    return tableWidth > width ? tableWidth - 24 : width;
+    return tableWidth > width ? '100%' : width;
   });
   });
 
 
   const getScrollRef = computed(() => {
   const getScrollRef = computed(() => {

+ 2 - 13
src/components/Table/src/style/index.less

@@ -51,7 +51,7 @@
   //
   //
   .ant-table {
   .ant-table {
     width: 100%;
     width: 100%;
-    overflow-x: auto;
+    overflow-x: hidden;
     border: none;
     border: none;
 
 
     &-title {
     &-title {
@@ -107,22 +107,11 @@
     border: 1px solid @border-color !important;
     border: 1px solid @border-color !important;
   }
   }
 
 
-  .ant-table td {
-    white-space: nowrap;
-  }
-
   .ant-table-tbody > tr > td,
   .ant-table-tbody > tr > td,
   .ant-table-tbody > tr > th,
   .ant-table-tbody > tr > th,
   .ant-table-thead > tr > td,
   .ant-table-thead > tr > td,
   .ant-table-thead > tr > th {
   .ant-table-thead > tr > th {
-    white-space: pre;
-  }
-
-  .ant-table-tbody > tr > td > span,
-  .ant-table-tbody > tr > th > span,
-  .ant-table-thead > tr > td > span,
-  .ant-table-thead > tr > th > span {
-    display: block;
+    white-space: nowrap;
   }
   }
 
 
   .ant-table-row-cell-last {
   .ant-table-row-cell-last {

+ 0 - 1
src/views/demo/page/form/high/PersonTable.vue

@@ -30,7 +30,6 @@
       title: '工号',
       title: '工号',
       dataIndex: 'no',
       dataIndex: 'no',
       editRow: true,
       editRow: true,
-
       // customRender: renderEditableRow({ dataIndex: 'no', placeholder: '请输入工号' }),
       // customRender: renderEditableRow({ dataIndex: 'no', placeholder: '请输入工号' }),
     },
     },
     {
     {