拖拽排序表格(sortable)

34 篇文章 0 订阅
    <!--html-->
    <el-table class="margin-medium-top table" 
          :cell-style="{'text-align':'center'}"
          :data="tableData"
          border
          :header-cell-style="headerCellStyle"
          style="width: 100%"
          v-loading="loadingTable">
                <el-table-column prop="universityName" label="院校名称">
                </el-table-column>
                <el-table-column prop="cityName" label="院校所在地">
                </el-table-column>
                <el-table-column prop="level" label="培养层次">
                </el-table-column>
                <el-table-column prop="" label="操作">
                    <template slot-scope="scope">
                        <div>
                            <el-button  type="text"  class="cz el-icon-rank"  ></el-button>
                        </div>
                    </template>
                </el-table-column>
    </el-table>

<script>
    import Sortable from 'sortablejs' //下载包yarn add sortablejs
    export default {
        mounted(){
        //因为sortable是监听的元素所以需要等待元素渲染完成后再执行此方法
            this.$nextTick(()=>{
            this.drag();
        })
    },
    methods:{
        drag(){
            // 设置要拖拽元素的父容器
            const tbody = document.querySelector('.el-table__body-wrapper tbody');
            const _this = this;
            Sortable.create(tbody, {
           //设置父元素下可拖拽的子元素
              draggable: ".el-table__row",
              handle:'.el-icon-rank',  //指定只能选中此类名的元素才可进行拖动el-table__row
              //拖动结束鼠标松开触发此事件
              onEnd ({ newIndex, oldIndex }) {
                   const currRow = _this.tableData.splice(oldIndex, 1)[0];
                  _this.tableData.splice(newIndex, 0, currRow);
                  let zhi = [];
                  //接收排序后的table内容获取table相关的id数组
                  _this.tableData.forEach((val) => {
                       zhi.push(val.logId);
                  });
                //传给后端接口,执行排序
                  _this.commonProfessionSortJk(zhi);
                }
             });
          },
          //执行排序接口
          async commonProfessionSortJk(val) {
            let result = await volunteerListOrderBy(val);
            if (result.status){
                //重新查询此列表内容
               this.volunteerList();
            }
           },
          //列表内容
          async volunteerList(){
           this.loadingTable=true;
           this.tableData=[];
           let result=await volunteerList();
           if(result.status){
             this.loadingTable=false;
             this.tableData=result.data;
             //(此注释不必在意只关注上方代码即可)重新追加sortId,(通过此id设置向上向下效果)
             for(let i=0;i<this.tableData.length;i++){
               this.tableData[i].sortId=i+1;
             }
             console.log('我是查出的志愿表');
             console.log(this.tableData);
            }else{
               this.loadingTable=false;
            }
        }
     }
  </script>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路光.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值