element el-transfer组件实现右侧列表可拖拉拽效果

需求是实现Transfer 穿梭框选中的数据列表,可以拖拉拽进行排序功能。


主要是使用到了sortablejs插件。

首先安装sortablejs

npm install sortablejs --save

再使用的vue文件中引用插件

<el-transfer 
    ref="transfer" 
    v-model="form" :data="groupModalList"
    :titles="['未选', '已选']"
    @change="transferList"
    target-order="push"
>
</el-transfer>


import Sortable from 'sortablejs'

data () {
    return {
        form: [],
        groupModalList: []
    }
}

methods: {
   transferList (e) {
      this.$forceUpdate() 
   } 
}

mounted() {
    this.$nextTick(() => {
        const transfer = this.$refs.transfer.$el
        const rightPanel = transfer.getElementsByClassName('el-transfer-panel')[1].getElementsByClassName('el-transfer-panel__body')[0]
        const rightEl = rightPanel.getElementsByClassName('el-transfer-panel__list')[0]
        Sortable.create(rightEl, {
          onEnd: evt => {
            const { oldIndex, newIndex } = evt
            console.log(oldIndex, newIndex)
            let _arr = this.form.splice(oldIndex, 1)
            this.form.splice(newIndex, 0, _arr[0])
            console.log(this.form)
          }
        })
      })
}

  • transferList里的$forceUpdate是为了强制更新列表数据。
  • 建议target-order=“push” 设置为push模式,这样左侧选择的item会被追加到右侧的末尾,方便查看。
  • 上面的this.$nextTick方法,可以写在mounted里,当然如果你要把穿梭框放在弹出层里,那么就不要写在mouted里,建议写在弹出层触发打开的方法里(也就是弹出层visible = true的所在方法里)。
  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要在 Element Plus 的 el-table 组件实现表头合并,可以使用 el-table-column 组件的属性:`colspan` 和 `rowspan`。其中,`colspan` 表示列合并数,`rowspan` 表示行合并数。 具体实现步骤如下: 1. 在 el-table 中定义表头,使用 el-table-column 定义每一列的表头,需要合并的单元格设置 `colspan` 和 `rowspan` 属性。 2. 在表格数据中,需要将需要合并的单元格的值设置为 null。 下面是一个示例代码,用来展示如何在 Element Plus 中实现表头合并: ```html <el-table :data="tableData"> <el-table-column prop="name" label="姓名" rowspan="2"></el-table-column> <el-table-column prop="age" label="年龄" colspan="2"></el-table-column> <el-table-column prop="address" label="地址" rowspan="2"></el-table-column> <el-table-column prop="date" label="日期" rowspan="2"></el-table-column> <el-table-column prop="status" label="状态" rowspan="2"></el-table-column> <el-table-column prop="score" label="分数" colspan="3"></el-table-column> </el-table> ``` ```js tableData: [ { name: '张三', age: 18, address: '北京市', date: '2021-06-01', status: '通过', score: [80, 90, 85] }, { name: '李四', age: 20, address: '上海市', date: '2021-06-02', status: '未通过', score: [70, 65, 80] }, { name: null, age: '平均值', address: null, date: null, status: null, score: [75, 77.5, 82.5] }, ], ``` 在上面的代码中,第一列的表头“姓名”需要合并两行,使用 `rowspan="2"` 实现。第二列的表头“年龄”需要合并两列,使用 `colspan="2"` 实现。最后一列的表头“分数”需要合并三列,使用 `colspan="3"` 实现。在表格数据中,第一个数据行的第一列和第三列需要合并,将其值设置为 null。 注意:`rowspan` 和 `colspan` 的值必须是正整数,不能为 0 或负数。同时,合并单元格时需要保证数据的正确性,否则可能会出现显示错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值