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

Element?table?上下移需求的實(shí)現(xiàn)

 更新時(shí)間:2022年07月19日 10:04:47   作者:參謀總長薩博  
本文主要介紹了Element?table?上下移需求的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

Element table 上下移動(dòng),聽起來是不是很簡單的需求,產(chǎn)品的描述也簡單:表格數(shù)據(jù)支持拖動(dòng)上下移,支持通過選擇表格行數(shù)據(jù)點(diǎn)擊按鈕上下移。最終效果大概如下(模擬數(shù)據(jù)共7條,去除了關(guān)聯(lián)的業(yè)務(wù)操作)

Element Table 上下移最終效果(下圖)

原型評(píng)審的時(shí)候,因?yàn)閮?nèi)容比較多,產(chǎn)品經(jīng)理講 Element table 上下移動(dòng)時(shí)一句話就帶過了,原型功能描述也簡單。做的時(shí)候才發(fā)現(xiàn)這個(gè)功能涉及很多細(xì)節(jié)需要考慮(痛哭流涕啊~),產(chǎn)品給留下的坑,接下來咱們一起來捋一下,防止下次考慮不周。

思路梳理

拋開業(yè)務(wù)復(fù)雜度,只分析這一小部分的上下移功能技術(shù)層的需求實(shí)現(xiàn)思路,上下移功能分為兩種操作方式,一種是表格數(shù)據(jù)行拖動(dòng)上下移;一種是復(fù)選框選中數(shù)據(jù)后,點(diǎn)擊上下移按鈕實(shí)現(xiàn)表格數(shù)據(jù)行移動(dòng)

分析到這里的時(shí)候發(fā)現(xiàn)需求描述里面對(duì)于開發(fā)人員來講,功能描述不完善

  • 問題1: 表格數(shù)據(jù)行拖動(dòng)上下移,是單行拖動(dòng),還是多行拖動(dòng)?
  • 問題2: 通過按鈕操作上移的時(shí)候,支持多選嗎? 單行移動(dòng)還是幾行移動(dòng)?
  • 問題3: 如果表格支持多選后上下移,那么不連續(xù)選中后數(shù)據(jù)怎么處理?如圖

  • 問題4: 如果多選的數(shù)據(jù),非連續(xù)選中情況下,有數(shù)據(jù)已經(jīng)是最下方了,如何處理邊界數(shù)據(jù)移動(dòng)問題?如圖

  • 問題5:如果選中的數(shù)據(jù)已經(jīng)是最上或最下了,怎么移動(dòng)呢?
  • 問題6:如果表格數(shù)據(jù)全選,怎么移動(dòng)?

這么多細(xì)節(jié)問題,產(chǎn)品經(jīng)理咋不講清楚寫明白呢,噴他!

帶著問題找產(chǎn)品經(jīng)理確認(rèn),結(jié)果產(chǎn)品經(jīng)理說他也沒想到還有這么好些情況

和產(chǎn)品經(jīng)理一波 battle 后的結(jié)果

  • 問題1:表格數(shù)據(jù)單行拖動(dòng)上下移

  • 問題2:按鈕操作上下移,支持?jǐn)?shù)據(jù)行多選,單行移動(dòng)

  • 問題3:表格數(shù)據(jù)不連續(xù)選中后,數(shù)據(jù)先合并,再以最靠上或靠下的數(shù)據(jù)為基礎(chǔ),向上或向下移動(dòng)

    • 根據(jù)選中的ID舉例,默認(rèn)表格ID排序?yàn)?1234567, 如果選中ID為 346,向下移動(dòng), 在數(shù)據(jù)層先把這三個(gè)數(shù)據(jù)截出來,整合,然后再插入到 7 的后面,整個(gè)表格數(shù)據(jù)ID排序就是 1257346。
  • 問題4:如果多選的數(shù)據(jù),非連續(xù)選中情況下,有數(shù)據(jù)已經(jīng)是最下方了,數(shù)據(jù)整合后,再基于最上或最下的數(shù)據(jù)為基礎(chǔ)向上或下移動(dòng)

  • 問題5:如果選中的數(shù)據(jù)已經(jīng)是最上或最下了,直接上下移,不用提示

  • 問題6:如果表格數(shù)據(jù)全選上下移直接提示 "不能選擇全部數(shù)據(jù)上下移"

問題清楚了開始復(fù)制粘貼,啊呸!來讓我們開始改變世界

確認(rèn)完所有細(xì)節(jié)問題后,發(fā)現(xiàn)這表格數(shù)據(jù)移動(dòng)功能實(shí)現(xiàn)邏輯代碼還是不少的,為什么標(biāo)題說這個(gè)上下移需求不簡單呢? 主要這一部分功能評(píng)審的時(shí)候基本沒算開發(fā)時(shí)間,和其他幾個(gè)功能整個(gè)一起評(píng)審才給1天,這時(shí)候?qū)τ谖覀冺?xiàng)目組已經(jīng)排好工期的狀態(tài)是不加工時(shí)的,開發(fā)人員自己加班趕進(jìn)度保證項(xiàng)目整體進(jìn)度,哎......

表格數(shù)據(jù)行拖動(dòng)上下移

表格數(shù)據(jù)行拖動(dòng)這個(gè)原生實(shí)現(xiàn)就不考慮了,時(shí)間代價(jià)有點(diǎn)高,一般找個(gè) npm 庫就行,目前不錯(cuò)的拖拽庫有 Sortable.js 官方有 Vue 版 Vue.Draggable ,因?yàn)橥蟿?dòng)需求比較簡單,發(fā)現(xiàn)一個(gè)更好用的庫,我用的這個(gè) el-table-draggable ,這個(gè)庫的作者基于 sortablejs 封裝了一下,在 Vue Element table 中使用更方便,只需要 <el-table-draggable> 包裹一下 el-table 就行了

import ElTableDraggable from 'el-table-draggable'

components: {
  ElTableDraggable
}

<el-table-draggable>
  <el-table
    row-key="id"
    ref="multipleTable"
    :data="tableData"
    tooltip-effect="dark"
    style="width: 100%"
    @selection-change="handleSelectionChange"
  >
    <el-table-column type="selection" width="55"> </el-table-column>
    <el-table-column label="ID" width="60">
      <template slot-scope="scope">{{ scope.row.id }}</template>
    </el-table-column>
    <el-table-column label="日期" width="120">
      <template slot-scope="scope">{{ scope.row.date }}</template>
    </el-table-column>
    <el-table-column prop="name" label="姓名" width="120">
    </el-table-column>
    <el-table-column prop="address" label="地址" show-overflow-tooltip>
    </el-table-column>
  </el-table>
</el-table-draggable>

注意! el-table 中的 row-key 必須設(shè)置,否則無法拖拽。

如果只是簡單實(shí)現(xiàn)一下表格數(shù)據(jù)行拖拽,讀者以后功能開發(fā)可以優(yōu)先考慮 el-table-draggable 這個(gè)庫, 能夠快速實(shí)現(xiàn)業(yè)務(wù)需求, 省下來的時(shí)間學(xué)習(xí)一會(huì)兒,看會(huì)兒掘金社區(qū)不香嗎? ^-^

表格數(shù)據(jù)選中點(diǎn)擊按鈕上下移

分析點(diǎn)擊移動(dòng)數(shù)據(jù)這里的實(shí)現(xiàn)邏輯,整個(gè)上下移動(dòng)需要3個(gè)核心步驟:定位、刪除、移動(dòng)。這里直接上代碼

一. 基于選中數(shù)據(jù)定位需要移動(dòng)到的位置

// confirm slotIndex
let slotIndex = -1
this.tableData.forEach((item, index) => {
  if (this.multipleSelection.length > 1) {
    this.multipleSelection.forEach((v, k) => {
      if (item.id === v.id) {
        if (slotIndex === -1) {
          slotIndex = index
        } else {
          if (slotIndex < index) {
            slotIndex = index
          }
        }
      }
    })
  } else {
    this.multipleSelection.forEach((v, k) => {
      if (item.id === v.id) {
        slotIndex = index + 1
      }
    })
  }
})

二. 刪除表格中的選中數(shù)據(jù)

// delete selectedata
this.multipleSelection.forEach((item, index) => {
  this.tableData.forEach((v, k) => {
    if (item.id === v.id) {
      this.tableData.splice(k, 1)
    }
  })
})

三. 將選中的數(shù)據(jù)移入指定位置

this.tableData.splice(slotIndex, 0, this.multipleSelection)
this.tableData = this.tableData.flat()

執(zhí)行完這三個(gè)步驟后,表格數(shù)據(jù)就能按需移動(dòng)了。在我們的實(shí)際項(xiàng)目場景中,由于表格數(shù)據(jù)內(nèi)容太多,數(shù)據(jù)又都比較像,因此需要移動(dòng)后的數(shù)據(jù)繼續(xù)回顯,這樣用戶能更直觀,在實(shí)際項(xiàng)目業(yè)務(wù)表格由于數(shù)據(jù)內(nèi)容太多了,也關(guān)聯(lián)了其他業(yè)務(wù)功能操作,表格數(shù)據(jù)上下移動(dòng)后選中回顯渲染是異常的,需要使用 setTimeout $nextTick() 處理一下

setTimeout(async () => {
  await this.$nextTick()
  selectionTableData.forEach(row => {
    this.$refs.table2.toggleRowSelection(row)
  })
}, 10)

注意!

表格中數(shù)據(jù)選中,選中數(shù)據(jù)的數(shù)組是按照選中操作的順序排列的,例如選中操作順序?yàn)?321, 對(duì)于頁面來講,選中的數(shù)據(jù)是 123,這時(shí)候要按照頁面的ID順序進(jìn)行整體移動(dòng),還是按照選中數(shù)據(jù)的順序移動(dòng),最終效果不一樣,目前我們的功能實(shí)現(xiàn)是按照選中順序進(jìn)行移動(dòng)的

演示代碼地址

https://github.com/gywgithub/vue-admin-element/blob/main/src/views/Table2.vue

到此這篇關(guān)于Element table 上下移需求的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Element table 上下移 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于pinia的簡單使用方式

    關(guān)于pinia的簡單使用方式

    這篇文章主要介紹了關(guān)于pinia的簡單使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Vue3中使用defineCustomElement 定義組件詳解

    Vue3中使用defineCustomElement 定義組件詳解

    這篇文章主要為大家介紹了Vue3中使用defineCustomElement 定義組件詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • vue多環(huán)境配置之 .env配置文件詳解

    vue多環(huán)境配置之 .env配置文件詳解

    .env文件是vue運(yùn)行項(xiàng)目時(shí)的環(huán)境配置文件,這篇文章主要介紹了vue多環(huán)境配置之 .env配置文件,需要的朋友可以參考下
    2023-03-03
  • 如何解決Element-ui的el-table固定列后出現(xiàn)的表格錯(cuò)位問題

    如何解決Element-ui的el-table固定列后出現(xiàn)的表格錯(cuò)位問題

    這篇文章主要介紹了如何解決Element-ui的el-table固定列后出現(xiàn)的表格錯(cuò)位問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • vue實(shí)現(xiàn)錨點(diǎn)跳轉(zhuǎn)scrollIntoView()使用案例

    vue實(shí)現(xiàn)錨點(diǎn)跳轉(zhuǎn)scrollIntoView()使用案例

    這篇文章主要介紹了vue實(shí)現(xiàn)錨點(diǎn)跳轉(zhuǎn)scrollIntoView()使用案例,文中結(jié)合實(shí)例代碼介紹了vue錨點(diǎn)跳轉(zhuǎn)的三種方式(頁內(nèi)跳轉(zhuǎn),跨頁跳轉(zhuǎn),函數(shù)跳轉(zhuǎn)),需要的朋友可以參考下
    2023-07-07
  • Vue3?封裝?Element?Plus?Menu?無限級(jí)菜單組件功能的詳細(xì)代碼

    Vue3?封裝?Element?Plus?Menu?無限級(jí)菜單組件功能的詳細(xì)代碼

    本文分別使用?SFC(模板方式)和?tsx?方式對(duì)?Element?Plus?*el-menu*?組件進(jìn)行二次封裝,實(shí)現(xiàn)配置化的菜單,有了配置化的菜單,后續(xù)便可以根據(jù)路由動(dòng)態(tài)渲染菜單,對(duì)Vue3?無限級(jí)菜單組件相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-09-09
  • 一文了解Vue中的nextTick

    一文了解Vue中的nextTick

    Vue中的 nextTick 涉及到Vue中DOM的異步更新,感覺很有意思,特意了解了一下。其中關(guān)于 nextTick 的源碼涉及到不少知識(shí),很多不太理解,暫且根據(jù)自己的一些感悟介紹下 nextTick
    2019-05-05
  • vue項(xiàng)目中canvas實(shí)現(xiàn)截圖功能

    vue項(xiàng)目中canvas實(shí)現(xiàn)截圖功能

    這篇文章主要為大家詳細(xì)介紹了vue項(xiàng)目中canvas實(shí)現(xiàn)截圖功能,截取圖片的一部分,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 淺入深出Vue之組件使用

    淺入深出Vue之組件使用

    這篇文章主要給大家介紹了關(guān)于淺入深出Vue之組件使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Vue數(shù)據(jù)雙向綁定底層實(shí)現(xiàn)原理

    Vue數(shù)據(jù)雙向綁定底層實(shí)現(xiàn)原理

    這篇文章主要為大家詳細(xì)介紹了Vue數(shù)據(jù)雙向綁定底層實(shí)現(xiàn)原理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11

最新評(píng)論

满城县| 邢台县| 宽城| 石渠县| 遂平县| 新津县| 曲靖市| 岑巩县| 高邮市| 灵台县| 精河县| 板桥市| 邯郸市| 仁寿县| 富源县| 镇平县| 邯郸县| 洪江市| 高唐县| 芦溪县| 双辽市| 阜南县| 丰台区| 青河县| 涡阳县| 萍乡市| 延安市| 禹州市| 三河市| 滦平县| 沾化县| 天等县| 明溪县| 延庆县| 上虞市| 蓬安县| 堆龙德庆县| 无极县| 肥东县| 琼海市| 平原县|