当前位置: 首页 > news >正文

a-table 动态列宽拖拽 vue

所需依赖及版本:

"vue-draggable-resizable": "^2.3.0"

"ant-design-vue": "1.7.8"

封装dragMixin文件:

import VueDraggableResizable from 'vue-draggable-resizable';
import '@/assets/less/draggableResizable.less'

export const draggableResizable = {
  components: {
    VueDraggableResizable
  },
  data() {
    return {}
  },
  created() {
  },
  mounted() {
    let nodeTable = document.getElementsByClassName('ant-table-fixed')
    nodeTable[0].style.removeProperty("width")
  },
  methods: {
    /**
     * 表格列可拖拽
     * 表格上使用::components="drag(columns)"
     * tips:columns中需包含dataIndex或者key和width(Number)
     */
    drag(columns) {
      return {
        header: {
          cell: this.initDrag(columns),
        },
      }
    },
    initDrag(columns) {
      return (h, props, children) => {
        const {key, ...restProps} = props
        const col = columns.find((col) => {
          const k = col.dataIndex || col.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, 1)
            },
          },
        }
        const drag = h('vue-draggable-resizable', {...dragProps})
        return h('th', {...restProps, class: 'resize-table-th'}, [...children, drag])
      }
    }
  }
}

dragResizable.less 文件:

.resize-table-th {
  position: relative;
  .table-draggable-handle {
    transform: none !important;
    position: absolute;
    height: 100% !important;
    bottom: 0;
    left: auto !important;
    right: 0;
    cursor: col-resize;
    touch-action: none;
  }
}
.ant-table-header-column > div {
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}

组件内使用:

:components="drag(columns)"  利用a-table  components api自定义table  

<a-table
        ref="table"
        size="middle"
        :scroll="{ x: true }"
        bordered
        rowKey="id"
        :components="drag(columns)"
        :columns="columns"
        :dataSource="dataSource"
        :pagination="ipagination"
        :loading="loading"
        :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
        class="j-table-force-nowrap"
        @change="handleTableChange"
      >




</a-table>

相关文章:

  • 关于网络协议的若干问题(一)
  • JavaEE-http/https/Tomcat(下)
  • HTTP/2 中的漏洞
  • element ui el-table表格复选框,弹框关闭取消打勾选择
  • centos清理日志和缓存
  • grafana api创建dashboard 记录
  • 【unity】【VR】白马VR课堂系列-VR开发核心基础04-主体设置-XR Rig的引入和设置
  • 从硬件结构到软件
  • C++入门(1):命名空间,IO流 输入输出,缺省参数
  • Flink kafka 数据汇不指定分区器导致的问题
  • go语言输出带颜色字体
  • docker 入门教程
  • 单页面应用(SPA):改变用户体验的未来
  • Infuse Mac视频播放器 中文
  • 软件测试学习(二)静态白盒测试、动态白盒测试、配置测试、兼容性测试、外国语言测试
  • 信息学奥赛一本通-编程启蒙3219:练36.2 不定方程求解
  • 让 Visual Studio 用上 ChatGPT
  • Hadoop3教程(九):MapReduce框架原理概述
  • Web自动化测试入门 : 前端页面的组成分析详解
  • 《机器学习》第5章 神经网络
  • OpenAI任命了一位新CEO
  • 首届上海老年学习课程展将在今年10月举办
  • 谢晖不再担任中超长春亚泰队主教练:战绩不佳主动请辞
  • 中方对原产印度进口氯氰菊酯实施反倾销措施,商务部回应
  • 降准又降息!央行发布3类10项措施
  • 86岁书画家、美术教育家、吴昌硕嫡裔曾孙吴民先离世