[ant-design-vue] table组件列宽拖拽功能

[ant-design-vue] table组件列宽拖拽功能

  • vue2.x 拖动table组件列宽功能
    • 环境信息
    • 相关代码
  • vue3.x 拖动table组件列宽功能
    • 环境信息
    • 相关代码

vue2.x 拖动table组件列宽功能

环境信息

    "ant-design-vue": "^1.7.1",
    "vue": "^2.6.11",
    "vue-draggable-resizable": "^2.2.0",

相关代码

    
    



import Vue from 'vue';
import VueDraggableResizable from 'vue-draggable-resizable';
// import 'vue-draggable-resizable/dist/VueDraggableResizable.css';
Vue.component('vue-draggable-resizable', VueDraggableResizable);

export default {
    name: "resize-table",
    props: [
        "data",
        "loading",
        "columns",
        "customRow",
        "scroll",
        "rowClassName"
    ],
    data() {
        this.resizeComp = {
            header: {
                cell: (h, props, children) => {
                    const { key, ...restProps } = props;
                    const col = this.columns.find(colItem => {
                        const k = colItem.dataIndex || colItem.key;//列索引
                        return k === key
                    });

                    if (!col || !col.width) {
                        return h('th', { ...restProps }, [...children])
                    }

                    const dragProps = {
                        key: col.dataIndex || col.key,
                        class: 'table-draggable-handle',
                        attrs: {
                            w: 10,
                            x: col.width,
                            z: 1,
                            axis: 'x',
                            draggable: true,
                            resizable: false
                        },
                        on: {
                            dragging: (x, y) => {
                                col.width = Math.max(x, 10);//留出空白
                            }
                        }
                    };
                    restProps.attrs.widh = col.width;
                    const drag = h('vue-draggable-resizable', { ...dragProps });
                    return h('th', { ...restProps, class: 'resize-table-th' }, [...children, drag])
                }
            },
        };
    },
    methods: {
        setRowKey(record, index) {
            return index;
        }
    }
};



.resize-table-th {
    position: relative;
    .table-draggable-handle {
        height: 100% !important;
        bottom: 0;
        left: auto !important;
        right: -5px;
        cursor: col-resize;
        touch-action: none;
        transform: translate(0px, 0px) !important;
        position: absolute;
        top: 0;
    }
}


原有的样式文件没有使用的必要,个人添加的部分样式内容就符合需求了

vue3.x 拖动table组件列宽功能

环境信息

    "ant-design-vue": "^3.2.13",
    "vue": "^3.2.45",

相关代码

vue3.x对应的ant-design-vue中的table组件本身支持列宽的拖动了,不需求额外的包的支持,根据Api说明设置resizeColumn即可

  
  


import { ref, reactive } from "vue";

defineProps({
	options: {
		type: Object,
		require: true
	}
})
const handleResizeColumn = (w, col) => {
	col.width = w;
};

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/7e26ebb48e.html