最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ElementUI-Table 表格實現(xiàn)行拖拽效果

 更新時間:2025年10月09日 09:16:45   作者:宣晨光  
在Vue中實現(xiàn)表格拖拽功能,需引入依賴,配置ref、row-key及row-drag-end事件,使用mounted鉤子和key、$nextTick/$set確保數(shù)據(jù)刷新,添加樣式完成拖拽效果,本文介紹ElementUI-Table表格實現(xiàn)行拖拽效果,感興趣的朋友一起看看吧

1、引入依賴

npm install sortablejs --save

2、table表格設(shè)置

1、添加屬性 ref="multipleTable" row-key="id" @row-drag-end="handleDragEnd"

2、添加列

<el-table-column width="50" align="center">
            <template >
              <i class="el-icon-rank drag-handle"></i>
            </template>
          </el-table-column>
<el-table  v-loading="loading" :data="tableData" 
          :highlight-selection-row="true"      :key="componentKey"
          ref="multipleTable"  row-key="id" @row-drag-end="handleDragEnd" >
          <el-table-column width="50" align="center">
            <template >
              <i class="el-icon-rank drag-handle"></i>
            </template>
          </el-table-column>
          <el-table-column type="selection" width="55" align="center" />
          <el-table-column label="序號" type="index" align="center" min-width="5%" />
</el-table>

顯示效果如下

3、添加事件

1、必須是 mounted ,不可以使用created

2、解決無法二次拖拽、拖拽后表格數(shù)據(jù)無法重新渲染問題

補充:  :

1、key="componentKey"

2、// 重新初始化拖拽功能
this.$nextTick(() => {
this.initDragAndDrop();
});

3、 this.$set(this, 'materialList', newData);

<script>
import Sortable from "sortablejs";
export default {
  name: "demo",
  data() {
    return {
        tableData: [], // 確保初始化為空數(shù)組
        sortable: null,
      componentKey: 1000,
    }
  },
created() {
    this.getList();
  },
  mounted() {
    this.initDragAndDrop();
  },
  methods: {
    initDragAndDrop() {
      // 獲取表格的tbody元素
      const tbody = this.$refs.multipleTable.$el.querySelector('.el-table__body-wrapper tbody');
      // 初始化Sortable
      this.sortable = new Sortable(tbody, {
        handle: '.drag-handle', // 指定拖拽手柄
        animation: 150, // 動畫時間
        ghostClass: 'sortable-ghost', // 拖拽時的占位元素樣式
        onEnd: (event) => {
          // 拖拽結(jié)束時觸發(fā)
          this.handleDragEnd(event);
        }
      });
      console.log(this.sortable);
    },
    // 處理拖拽結(jié)束事件
    handleDragEnd(evt) {
      // 如果位置沒有變化,不做處理
      if (evt.oldIndex === evt.newIndex) {
          return;
        }
        // 獲取拖拽的行數(shù)據(jù)
        const draggingRow = this.materialList[evt.oldIndex];
        // 從原數(shù)組中移除并插入到新位置
        var newData = JSON.parse(JSON.stringify(this.materialList));;
        newData.splice(evt.newIndex, 0, newData.splice(evt.oldIndex, 1)[0]);
        console.log(newData)
        const nextRow = newData[evt.newIndex + 1];
        // 通知父組件數(shù)據(jù)已更新
        this.$set(this, 'materialList', newData);
        // 強制刷新組件以確保視圖更新
        this.componentKey += 1;
        // 發(fā)送拖拽信息
        this.$emit('drag-end', {
          id: draggingRow.materialDeviceId,   // 拖拽行的ID
          originalIndex: evt.oldIndex, // 原始位置(0開始)
          originalPosition: evt.oldIndex + 1, // 原始位置(1開始)
          newIndex: evt.newIndex,      // 新位置(0開始)
          newPosition: evt.newIndex + 1,      // 新位置(1開始)
          moved: evt.oldIndex !== evt.newIndex // 是否發(fā)生了移動
        });
        // TODO + -
        console.log(`拖拽完成 - ID: ${draggingRow.materialDeviceId}, 從第${evt.oldIndex + 1}行移到第${evt.newIndex + 1}行`);
        console.log('下一個位置:' , nextRow.materialDeviceId , nextRow.orderNum , nextRow.name)
        // 重新初始化拖拽功能
        this.$nextTick(() => {
          this.initDragAndDrop();
        });
    },
    /** 查詢素材分配列表 */
    getList() {
      listDevice(this.queryParams).then(response => {
        // 確保響應(yīng)數(shù)據(jù)不為null
        this.tableData= response.rows ? response.rows : [];
        this.total = response.total ? response.total : 0;
      }).catch(error => {
        // 添加錯誤處理,防止數(shù)據(jù)為null
        console.error('獲取數(shù)據(jù)失敗:', error);
        this.tableData= [];
        this.total = 0;
      });
    },
  }
}  
</script>

4、添加樣式

<style scoped>
.el-icon-rank{
  font-size: x-large;
}
/* 拖拽相關(guān)樣式 */
.cursor-move {
  cursor: move;
  color: #909399;
  transition: color 0.2s;
}
.cursor-move:hover {
  color: #409EFF;
}
/* 拖拽時的占位符樣式 */
::v-deep .sortable-ghost {
  opacity: 0.5;
  background-color: #f5f7fa;
}
/* 選中行樣式 */
::v-deep .sortable-chosen {
  background-color: #e6f7ff !important;
}
/* 正在拖拽的行樣式 */
::v-deep .dragging-row {
  background-color: #fffbe6 !important;
}
</style>

5、拖拽效果

到此這篇關(guān)于ElementUI-Table 表格實現(xiàn)行拖拽效果的文章就介紹到這了,更多相關(guān)ElementUI-Table 行拖拽內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue虛擬化列表封裝的實現(xiàn)

    vue虛擬化列表封裝的實現(xiàn)

    這篇文章主要介紹了vue實現(xiàn)虛擬化列表封裝方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • VSCode搭建vue項目的實現(xiàn)步驟

    VSCode搭建vue項目的實現(xiàn)步驟

    本文主要介紹了VSCode搭建vue項目的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 使用Vue快速實現(xiàn)一個無縫輪播效果

    使用Vue快速實現(xiàn)一個無縫輪播效果

    這篇文章主要為大家詳細介紹了如何使用Vue快速實現(xiàn)一個無縫輪播效果,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考下
    2024-04-04
  • 在vue中使用export?default導出的class類方式

    在vue中使用export?default導出的class類方式

    這篇文章主要介紹了在vue中使用export?default導出的class類方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • vue實現(xiàn)購物車小案例

    vue實現(xiàn)購物車小案例

    這篇文章主要為大家詳細介紹了vue實現(xiàn)購物車小案例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • vite打包去除console.log和debugge的方法實踐

    vite打包去除console.log和debugge的方法實踐

    本文主要介紹了vite打包去除console.log和debugge的方法實踐,vite 已經(jīng)將這個功能內(nèi)置了,所以我們只需要修改配置文件,下面就來介紹一下如何修改
    2023-12-12
  • Vue中v-bind原理深入探究

    Vue中v-bind原理深入探究

    這篇文章主要給大家分享了 v-bind的使用和注意需要注意的點,下面文章圍繞 v-bind指令的相關(guān)資料展開內(nèi)容且附上詳細代碼 需要的小伙伴可以參考一下,希望對大家有所幫助
    2022-10-10
  • Vue前端如何實現(xiàn)生成PDF并下載功能詳解

    Vue前端如何實現(xiàn)生成PDF并下載功能詳解

    在前端的崗位上經(jīng)常需要實現(xiàn)個生成個并下載的可視化圖表頁PDF文件,這篇文章主要給大家介紹了關(guān)于Vue前端如何實現(xiàn)生成PDF并下載功能的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • vue3+vant4實現(xiàn)pdf文件上傳與預覽組件

    vue3+vant4實現(xiàn)pdf文件上傳與預覽組件

    這篇文章主要介紹了vue3如何結(jié)合vant4實現(xiàn)簡單的pdf文件上傳與預覽組件,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-04-04
  • vue實現(xiàn)移動端touch拖拽排序

    vue實現(xiàn)移動端touch拖拽排序

    這篇文章主要為大家詳細介紹了vue實現(xiàn)移動端touch拖拽排序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07

最新評論

蓬莱市| 蒙山县| 天门市| 平凉市| 四子王旗| 体育| 拉孜县| 鄄城县| 姜堰市| 咸阳市| 宾川县| 黔江区| 涞水县| 祁阳县| 灵寿县| 芮城县| 阜阳市| 沭阳县| 望奎县| 绍兴市| 襄汾县| 博客| 兴文县| 太白县| 天峻县| 杨浦区| 孙吴县| 叶城县| 武山县| 化德县| 仪陇县| 巴彦县| 乳源| 皋兰县| 莱阳市| 潮州市| 历史| 凤翔县| 丰城市| 呼和浩特市| 岑巩县|