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

element-table如何實現(xiàn)自定義表格排序

 更新時間:2022年07月29日 11:00:06   作者:節(jié)省錢  
這篇文章主要介紹了element-table如何實現(xiàn)自定義表格排序,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

element-table 自定義表格排序

第一步

在el-table中加入 @sort-change=“sort_change” 事件,sort_change為自定義的排序方法

第二步

在el-table-colum中加入sortable=“custom”,使用了該屬性之后當前列就可以進行排序且排序時會調(diào)用sort_change方法進行自定義排序

sortFun(attr, rev){
? ? ? // 第一個參數(shù)傳入info里的prop表示排的是哪一列,第二個參數(shù)是升還是降排序
? ? ? if (rev) {
? ? ? ? rev = 1;
? ? ? } else {
? ? ? ? rev = ?-1;
? ? ? }
? ? ? let that = this;
? ? ? return function (a, b) {
? ? ? ? let res = 0;
? ? ? ? for (let i = 0; ;i++) {
? ? ? ? ? if (!a[attr][i] || !b[attr][i]) {
? ? ? ? ? ? res = a[attr].length - b[attr].length;
? ? ? ? ? ? break;
? ? ? ? ? }
? ? ? ? ? let char1 = a[attr][i];
? ? ? ? ? let char1Type = that.getChartType(char1);
? ? ? ? ? let char2 = b[attr][i];
? ? ? ? ? let char2Type = that.getChartType(char2);
? ? ? ? ? // 類型相同的逐個比較字符
? ? ? ? ? if (char1Type[0] === char2Type[0]) {
? ? ? ? ? ? // console.log('字符類型相同');
? ? ? ? ? ? if (char1 === char2) {
? ? ? ? ? ? ? res = 0;
? ? ? ? ? ? ? // console.log('值全等', res);
? ? ? ? ? ? ? continue;
? ? ? ? ? ? } else {
? ? ? ? ? ? ? if (char1Type[0] === 'zh') {
? ? ? ? ? ? ? ? res = char1.localeCompare(char2);
? ? ? ? ? ? ? ? // console.log('a的字符類型為中文', res);
? ? ? ? ? ? ? } else if (char1Type[0] === 'en') {
? ? ? ? ? ? ? ? res = char1.charCodeAt(0) - char2.charCodeAt(0);
? ? ? ? ? ? ? ? // console.log('a的字符類型為英文', res);
? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? res = char1 - char2;
? ? ? ? ? ? ? ? // console.log('a的字符類型為數(shù)字', res);
? ? ? ? ? ? ? }
? ? ? ? ? ? ? // console.log('值不相等比較的結果', res);
? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? ? } else {
? ? ? ? ? ? // 類型不同的,直接用返回的數(shù)字相減
? ? ? ? ? ? var num1 = char1Type[1];
? ? ? ? ? ? var num2 = char2Type[1];
? ? ? ? ? ? res = num1 - num2;
? ? ? ? ? ? break;
? ? ? ? ? }
? ? ? ? }
? ? ? ? return res * rev;
? ? ? };
? ? }
? ? sort_change(column) {
? ? ? // this.currentPage = 1;// return to the first page after sorting
? ? ? if (column.prop === 'configTemplateName') {
? ? ? ? // 對展示的源數(shù)據(jù)進行重新排序
? ? ? ? ?this.configTemplatesFilter.sort(this.sortFun(column.prop, column.order === 'ascending'));
? ? ? } else if (column.prop === 'configTemplatePattern') {
? ? ? ? // 對展示的源數(shù)據(jù)進行重新排序
? ? ? ? this.configTemplatesFilter.sort(this.sortFun(column.prop, column.order === 'ascending'));
? ? ? }
? ? ? // 排序完顯示到第一頁
? ? ? this.handleCurrentChange(this.currentPage);
? ? }
? ? getChartType(char) {
? ? ? // 數(shù)字可按照排序的要求進行自定義 ;數(shù)字(0->9)->大寫字母(A->Z)->小寫字母(a->z)->中文拼音(a->z)
? ? ? if (/^[u4e00-u9fa5]$/.test(char)) {
? ? ? ? return ['zh', 3];
? ? ? }
? ? ? if (/^[a-zA-Z]$/.test(char)) {
? ? ? ? return ['en', 2];
? ? ? }
? ? ? if (/^[0-9]$/.test(char)) {
? ? ? ? return ['number', 1];
? ? ? }
? ? ? return ['others', 4];
? ? }
? ?handleCurrentChange(val) {
? ? ? this.configTempLoading = true;
? ? ? this.currentPage = val;
? ? ? this.configTemplatesView = this.configTemplatesFilter.filter(data => !this.queryParam.configTemplateName || data.configTemplateName.toLowerCase().includes(this.queryParam.configTemplateName.toLowerCase())).slice((val - 1) * this.pageSize, val * this.pageSize);
? ? ? this.configTempLoading = false;
? ? }

原理

當觸發(fā)排序時判斷是升序還是降序然后使用sort方法對要展示的源數(shù)據(jù)數(shù)組(未分頁過濾的數(shù)據(jù))進行重新排序;然后再進行分頁過濾進行數(shù)據(jù)展示

注意:當我們排序完之后再次點擊同一個排序圖標時column.order上的值時null;此時需要考慮是否恢復排序前的數(shù)據(jù)展示;最好使用一個中間變量來保存排序前的數(shù)據(jù),這樣不需要排序時直接使用中間變量進行展示即可 

element-table表格 自定義排序規(guī)則

項目需求

前端做排序,后臺返回的數(shù)據(jù)有合計一項,排序時,合計始終在最后一行

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

使用

在這里插入圖片描述

在這里插入圖片描述

@sort-change='sortChange'
   <el-table-column
      prop="revPar"
      align='center'
      sortable="custom"  
      label="RevPAR"
      width="110">
    </el-table-column>
sortChange(column){
      let arr = []
      this.tableData.forEach(val=>{
        arr.push(val)
      })
      if(column.order=='descending'){
        this.tableDatalist = arr.sort((a, b) => {
          let aVal =0
          if(String(a[fieldName]).indexOf('%')!=-1){
            aVal = Number(a[fieldName].split('%')[0])
          }else{
           aVal = Number(a[fieldName])
          }
          let bVal =0
          if(b[fieldName].indexOf('%')!=-1){
            bVal = Number(b[fieldName].split('%')[0])
          }else{
           bVal = Number(b[fieldName])
          }
          if (a.name == '合計') {
            aVal = -9999
          }
          if (b.name == '合計') {
            bVal = -9999
          }
          return bVal - aVal
        })
      }else if(column.order=='ascending'){
        this.tableDatalist = arr.sort((a, b) => {
          let aVal =0
          if(a[fieldName].indexOf('%')!=-1){
            aVal = Number(a[fieldName].split('%')[0])   //因為數(shù)據(jù)中有%,沒有的話可以去掉
          }else{
           aVal = Number(a[fieldName])
          }
          let bVal =0
          if(b[fieldName].indexOf('%')!=-1){
            bVal = Number(b[fieldName].split('%')[0])
          }else{
           bVal = Number(b[fieldName])
          }
          if (a.name == '合計') {
            aVal = 9999
          }
          if (b.name == '合計') {
            bVal = 9999
          }
          return aVal - bVal
        })
      }else{
        this.tableDatalist = this.tableData
      }
    },

具體操作根據(jù)業(yè)務需求自行修改

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • el-form-item?prop屬性動態(tài)綁定不生效問題及解決

    el-form-item?prop屬性動態(tài)綁定不生效問題及解決

    這篇文章主要介紹了el-form-item?prop屬性動態(tài)綁定不生效問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Vue項目配置router.js流程分析講解

    Vue項目配置router.js流程分析講解

    第一次寫Vue項目,要用到router.js,看了一下官方文檔,還是很懵逼,不知道怎么配置,又去看視頻查資料,最后終于搞定了。話不多說,先上代碼,我再講一些要注意的細節(jié)
    2022-12-12
  • 前端vue3搭建超詳細指南(快速上手搭建)

    前端vue3搭建超詳細指南(快速上手搭建)

    這篇文章主要介紹了使用Vue?3和Element-plus搭建前端項目的過程,包括項目搭建、Element-plus安裝和引入、axios安裝、sass使用、app.vue配置、組件創(chuàng)新、路由配置以及使用輔助插件來提高開發(fā)效率,需要的朋友可以參考下
    2025-02-02
  • 詳解從Vue-router到html5的pushState

    詳解從Vue-router到html5的pushState

    這篇文章主要介紹了詳解從Vue-router到html5的pushState,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • 利用Vue實現(xiàn)卡牌翻轉的特效

    利用Vue實現(xiàn)卡牌翻轉的特效

    這篇文章主要介紹了如何利用Vue實現(xiàn)一個春節(jié)抽??撁妫捎昧丝ㄅ品D的形式。文中的實現(xiàn)方法講解詳細,快跟隨小編一起學習一下吧
    2022-02-02
  • Vue iframe更改src后頁面未刷新問題解決方法

    Vue iframe更改src后頁面未刷新問題解決方法

    這篇文章主要介紹了Vue iframe更改src后頁面未刷新問題解決,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • vue中vue-cli項目報錯sockjs.js報錯問題

    vue中vue-cli項目報錯sockjs.js報錯問題

    這篇文章主要介紹了vue中vue-cli項目報錯sockjs.js報錯問題,具有很好的參考價值,希望對大家有所幫助。
    2022-12-12
  • Vue2.0實現(xiàn)購物車功能

    Vue2.0實現(xiàn)購物車功能

    這篇文章主要為大家詳細介紹了Vue2.0實現(xiàn)購物車功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Vue動態(tài)類的幾種使用方法總結

    Vue動態(tài)類的幾種使用方法總結

    這篇文章主要介紹了Vue動態(tài)類的幾種使用方法總結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 對類Vue的MVVM前端庫的實現(xiàn)代碼

    對類Vue的MVVM前端庫的實現(xiàn)代碼

    這篇文章主要介紹了對類Vue的MVVM前端庫的實現(xiàn)代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09

最新評論

施甸县| 绿春县| 肥西县| 沂源县| 宁国市| 沙雅县| 岳阳县| 淮南市| 晋州市| 潮安县| 德昌县| 南皮县| 海淀区| 旌德县| 桐柏县| 上杭县| 湘阴县| 太和县| 临沂市| 祁东县| 宁化县| 胶州市| 铁岭县| 新民市| 西乌| 福州市| 阳信县| 盐边县| 东兴市| 克山县| 蒲城县| 轮台县| 南昌县| 长沙市| 密云县| 息烽县| 台东市| 凌海市| 济宁市| 旬阳县| 新民市|