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

使用antdv的a-table行拖拽

使用antdv的a-table行拖拽

使用a-table行拖拽,实现上下换行

sortablejs中文网

    <div ref="tableContainer">
        <a-table
                bordered
                size="middle"
                :columns="columns"
                :data-source="[{name: 1}, {name: 2}, {name: 3}]"
                :pagination="false"
                :scroll="{ x: true }"
        >
            <template slot="code" slot-scope="text, row">
                <a-input style="width: 200px" v-model="row.code" placeholder="请输入顺序号"></a-input>
            </template>

            <template slot="action" slot-scope="text, row">
                <a-icon :style="setMultStyle" style="transform: rotate(45deg);color: #1890ff;font-size: 20px;"
                        type="fullscreen"/>
            </template>
        </a-table>
    </div>
export default {
  name: 'sotrTable',
  data(){
     return {
       	  enabled:true,
		  dataSource: [{nodeName: 1}, {nodeName: 2}, {nodeName: 3}],
		  columns: [
		      {
		          title: '名称',
		          dataIndex: 'name',
		          align: 'center'
		      },
		      {
		          title: '顺序号',
		          dataIndex: 'code',
		          align: 'center',
		          scopedSlots: {customRender: 'code'}
		      },
		      {
		          title: '操作',
		          dataIndex: 'action',
		          scopedSlots: {customRender: 'action'},
		          align: 'center',
		          // fixed: 'right',
		          width: 150
		      }
		  ],
     }
  },
       computed: {
            setMultStyle() {
                return {
                    cursor: this.enabled ? 'move' : 'default'
                }
            }
        },
        mounted() {
            this.$nextTick(() => {
                let tableContainer = this.$refs.tableContainer
                this.rowDrop(tableContainer)
            })
        },
        methods: {
            rowDrop(dom) {
                console.log(dom.querySelector('.ant-table>.ant-table-content .ant-table-tbody'))
                new Sortable.create(dom.querySelector('.ant-table>.ant-table-content .ant-table-tbody'), {
                    handle: '.ant-table-row', // 行元素
                    animation: 150,
                    onEnd: ({newIndex, oldIndex}) => {
                        console.log(newIndex, oldIndex)
                        // 拖拽后回调
                        const currRow = this.dataSource.splice(oldIndex, 1)[0]
                        console.log(currRow)
                        console.log(this.dataSource[newIndex])
                        this.dataSource.splice(newIndex, 0, currRow)
                        this.dataSource.forEach((row, index) => {
                            row.sort = index + 1
                        })
                    }
                })
            },
        }
}

相关文章:

  • 【大数据】大数据治理的全面解析
  • 猿人学 — 第1届第17题(解题思路附源码)
  • 【Lua学习】字符串string和字符串标准库
  • 充电宝租赁管理系统网站毕业设计SpringBootSSM框架开发
  • Ultralytics_yolov10目标检测,预处理函数入口
  • vue代码中关于字符串对比的实现
  • Kubernetes--深入理解Pod资源管理
  • 代码随想录算法训练营第三十天|491. 非递减子序列,46. 全排列,47. 全排列 II,332. 重新安排行程,51. N 皇后,37. 解数独
  • Robust多模态模型的开发
  • JS设计模式之职责链模式:优雅地处理请求流程
  • 【大数据】Hive快速入门
  • 【工具】前端js数字金额转中文大写金额
  • git的提取和拉取有啥区别
  • LeetCode整数转罗马数字
  • 使用NumPy进行线性代数的快速指南
  • 内网Debian\Ubuntu服务器安装dep包,基于apt-rdepends下载相关依赖
  • Reverse Tabnabbing漏洞的理解和利用
  • SQLite数据库
  • 前端 | Uncaught (in promise) undefined
  • 通过Express + Vue3从零构建一个用户认证与授权系统(一)项目结构设计