当前位置: 首页 > article >正文

el-table中文排序-前端

 使用el-table的sort-change事件,例如代码中的@sort-change="sortTable",

给el-table-column添加sortable、sort-method(如不添加这个属性就无效)

:sortable="sortableList.includes(item.fieldNameEn) ? true : false"

:sort-method="sortableList.includes(item.fieldNameEn) ? compare(item.fieldNameEn,'ascending') : ()=>{}"

<el-table
        style="width: 100%; font-size: 16px"
        ref="checkingTable"
        :height="'100%'"
        :data="tableData"
        :header-cell-style="{
          background: '#ebebeb',
          color: '#1E1E1E',
          fontSize: '16px',
        }"
        @row-click="
          (row, column, e) => {
            handleClick(row, true);
          }
        "
        @selection-change="handleSelection"
        highlight-current-row
        :key="componentKey"
        @sort-change="sortTable"
      >
        <el-table-column type="selection" width="50"> </el-table-column>
        <!-- 自定义列设置 -->
        <template v-for="item in columnConfig['11']">
          <el-table-column
            v-if="item.hide"
            :key="item.fieldNameCn"
            :show-overflow-tooltip="true"
            :prop="item.fieldNameEn"
            :label="item.fieldNameCn"
            :width="item.width"
            :align="item.location"
            :header-align="item.location"
            :sortable="sortableList.includes(item.fieldNameEn) ? true : false"
            :sort-method="sortableList.includes(item.fieldNameEn) ? compare(item.fieldNameEn,'ascending') : ()=>{}"
          >
            <template slot-scope="scope">
              <span v-if="item.fieldNameCn == '标记'" class="pn-wrapper">
                <span class="label-wrapper">
                  <span
                    class="labelBox"
                    v-for="(val, index) in scope.row.nursingLabelSetDtoList"
                    :key="index"
                    :style="{
                      width: val.labelCssJson['width'] + 'px',
                      height: val.labelCssJson['height'] + 'px',
                      fontSize: val.labelCssJson['fontSize'] + 'px',
                      color: val.labelCssJson['color'],
                      backgroundColor: val.labelCssJson['backgroundColor'],
                      borderRadius: val.labelCssJson['borderRadius'] + 'px',
                    }"
                    >{{ val.labelDesc }}
                  </span>
                  <!-- <span
                    class="emgcLabel_wq"
                    v-if="scope.row.emergencySign == '20175479914889216'"
                    >急诊</span
                  > -->
                  <span
                    v-if="
                      scope.row.callingStatus == '287300077070843904' &&
                      userInfo.userRoleType == NURSEROLE
                    "
                    class="slowLabel_wq"
                    >缓
                  </span>
                  <span
                    v-if="
                      scope.row.callingStatus == '50315912372289536' &&
                      userInfo.userRoleType !== NURSEROLE
                    "
                    class="slowLabel_wq"
                    >缓
                  </span>
                </span>
              </span>
              <span v-else>{{ scope.row[item.fieldNameEn] }}</span>
            </template>
          </el-table-column>
        </template>
        <el-table-column width="60px">
            <template slot="header">
            <i
              class="el-icon-s-tools"
              @click="checkSetting"
              style="font-size: 20px; cursor: pointer"
            ></i>
              </template
          >
        </el-table-column>
      </el-table>
methids:{
    sortTable(sortObj) {
      const { prop, order } = sortObj;
      this.tableData.sort(this.compare(prop, order));
    },
    compare(propertyName, sort) {
      // 判断是否为数字
      function isNumberV(val) {
        var regPos = /^\d+(\.\d+)?$/; //非负浮点数
        var regNeg =
          /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数
        if (regPos.test(val) || regNeg.test(val)) {
          return true;
        } else {
          return false;
        }
      }
      // 处理空值
      function handleEmptyValues(value1, value2, sort) {
        const isEmpty1 = value1 === null || value1 === undefined || value1 === '';
        const isEmpty2 = value2 === null || value2 === undefined || value2 === '';

        if (isEmpty1 && isEmpty2) return 0; // 两个都是空值,视为相等
        if (isEmpty1) return sort === 'ascending' ? -1 : 1; // 将空值放在前面或后面
        if (isEmpty2) return sort === 'ascending' ? 1 : -1; // 将空值放在前面或后面

        return null; // 如果都不是空值,继续其他比较
      }

      return function (obj1, obj2) {
        let value1 = obj1[propertyName];
        let value2 = obj2[propertyName];

        // 首先处理空值
        const emptyCheckResult = handleEmptyValues(value1, value2, sort);
        if (emptyCheckResult !== null) return emptyCheckResult;

        // 数字类型的比较
        if (isNumberV(value1) || isNumberV(value2)) {
          if (sort === "ascending") {
            return value1 - value2;
          } else {
            return value2 - value1;
          }
        }
        // 布尔值的比较:利用减法-转化true 和 false
        // true => 1   false ⇒ 0
        // true-false => 1  false-true => -1
        // 下面方法是按照先false后true的顺序排序,如果想先true后false,调整value1-value2 和  value2 - value1的顺序即可
        else if (value1 instanceof Boolean && value2 instanceof Boolean) {
          if (sort === "ascending") {
            return value1 - value2;
          } else {
            return value2 - value1;
          }
        }
        // 字符比较使用localeCompare()
        else {
          const res = value1.localeCompare(value2, "zh");
          return sort === "ascending" ? res : -res;
        }
      };
    },


}


http://www.kler.cn/news/289261.html

相关文章:

  • Java 输入与输出之 NIO.2【AIO】【内存映射文件】【自动资源管理】探索之【四】
  • java-URLDNS 链条审计
  • 9、设计模式
  • Spring 学习笔记
  • 【Rust光年纪】解密Rust语言在经济学计算领域的全面应用与潜力展望
  • 【docker】docker 镜像仓库的管理
  • 39. 数组中出现次数超过一半的数字
  • 【专项刷题】— 哈希表
  • 阅读笔记——《阿里巴巴Java开发规范》
  • Unity实战案例 2D小游戏HappyGlass(游戏管理类脚本)
  • git进阶·团队开发的时候为何要创建临时分支来修复bug
  • 2708. 一个小组的最大实力值(24.9.3)
  • ADB 获取屏幕坐标,并模拟滑动和点击屏幕
  • 深入理解 JavaScript DOM 操作
  • js处理echarts tooltip定时轮播
  • 一款基于Vue的低代码可视化表单设计器工具,6K star的可视化表单设计器工具,轻松搞定表单,支持多端适配(附源码)
  • 被低估的SQL
  • 基于vue框架的超市管理系统ki6i8(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • 责任链设计模式详解
  • B端系统门门清之:SCRM系统,为客户管理加上社交,如虎添翼
  • MySQL事务处理(TransAction)
  • 苹果11月推出新款M4 Mac:Mac mini设计焕新 MacBook Pro仅例行更新
  • wsl下将Ubuntu从c盘移动到其他盘
  • Linux——IO模型_多路转接(epoll)
  • 监控平台之针对vue,react上报
  • ​yum安装/更新时报错:SyntaxError: invalid syntax​
  • 全局网络代理的使用与选择
  • css的position定位的属性
  • 【Java那些事】关于Git的使用
  • Datawhale X 李宏毅苹果书 AI夏令营|机器学习基础之案例学习