antdesign Vue中table树嵌套表实现二级单独排序

在这里插入图片描述

<a-table :columns="columns" :data-source="data">
	<template #bodyCell="{ column, record, index }"> //record.children是二级树的数据
        <template v-if="Array.isArray(record.children) && record.children.length">
          <div class="sorterSecond">
            <span class="text">{{ record[column.dataIndex] }}</span>
            <div class="sorterIcon" @click="sorterClick(column, record, index)">
              <Icon
                :size="10"
                icon="ant-design:caret-up-outlined"
                :color="sorterIndex === 1 && dataIndex === column.dataIndex && activeIndex === index ? '#1890ff' : '#bfbfbf'"
              />
              <Icon
                :size="10"
                icon="ant-design:caret-down-outlined"
                :color="sorterIndex === 2 && dataIndex === column.dataIndex && activeIndex === index ? '#1890ff' : '#bfbfbf'"
              />
            </div>
          </div>
        </template>
      </template>
</a-table>
<script setup>
// 二级排序

  let dataIndex = ref('');
  let sorterIndex = ref(0);
  let cloneChildren = ref([]);
  let activeIndex = ref(0);
  function sorterClick(column, record, index) {
    if (dataIndex.value !== column.dataIndex || activeIndex.value !== index) {
      dataIndex.value = column.dataIndex;
      activeIndex.value = index;
      cloneChildren.value = cloneDeep(record.children);
      sorterIndex.value = 0;
    }
    sorterIndex.value++;
    if (sorterIndex.value === 3) {
      record.children = [...cloneChildren.value];
      sorterIndex.value = 0;
    } else {
      record.children.sort((a, b) => {
        if (sorterIndex.value === 1) {
          return a[column.dataIndex] - b[column.dataIndex];
        } else if (sorterIndex.value === 2) {
          return b[column.dataIndex] - a[column.dataIndex];
        }
      });
    }
  }
</script>

<style scoped lang="less">
  .sorterSecond {
    display: flex;
    align-items: center;
    justify-content: space-between;

    span.text {
      display: block;
      flex: 1;
    }
    .sorterIcon {
      display: flex;
      flex-direction: column;
      justify-content: center;
      cursor: pointer;
    }
  }
</style>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值