若依vue3后台排序

要实现一个功能,前端有这个箭头按钮,按一下就发后台进行排序
请添加图片描述
java的分页对象(若依自带无须改动)

@Data
public class PageQuery implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 分页大小
     */
    private Integer pageSize;

    /**
     * 当前页数
     */
    private Integer pageNum;

    /**
     * 排序列
     */
    private String orderByColumn;

    /**
     * 排序的方向desc或者asc
     */
    private String isAsc;

    /**
     * 当前记录起始索引 默认值
     */
    public static final int DEFAULT_PAGE_NUM = 1;

    /**
     * 每页显示记录数 默认值 默认查全部
     */
    public static final int DEFAULT_PAGE_SIZE = Integer.MAX_VALUE;

    public <T> Page<T> build() {
        Integer pageNum = ObjectUtil.defaultIfNull(getPageNum(), DEFAULT_PAGE_NUM);
        Integer pageSize = ObjectUtil.defaultIfNull(getPageSize(), DEFAULT_PAGE_SIZE);
        if (pageNum <= 0) {
            pageNum = DEFAULT_PAGE_NUM;
        }
        Page<T> page = new Page<>(pageNum, pageSize);
        List<OrderItem> orderItems = buildOrderItem();
        if (CollUtil.isNotEmpty(orderItems)) {
            page.addOrder(orderItems);
        }
        return page;
    }

    /**
     * 构建排序
     *
     * 支持的用法如下:
     * {isAsc:"asc",orderByColumn:"id"} order by id asc
     * {isAsc:"asc",orderByColumn:"id,createTime"} order by id asc,create_time asc
     * {isAsc:"desc",orderByColumn:"id,createTime"} order by id desc,create_time desc
     * {isAsc:"asc,desc",orderByColumn:"id,createTime"} order by id asc,create_time desc
     */
    private List<OrderItem> buildOrderItem() {
        if (StringUtils.isBlank(orderByColumn) || StringUtils.isBlank(isAsc)) {
            return null;
        }
        String orderBy = SqlUtil.escapeOrderBySql(orderByColumn);
        orderBy = StringUtils.toUnderScoreCase(orderBy);

        // 兼容前端排序类型
        isAsc = StringUtils.replaceEach(isAsc, new String[]{"ascending", "descending"}, new String[]{"asc", "desc"});

        String[] orderByArr = orderBy.split(",");
        String[] isAscArr = isAsc.split(",");
        if (isAscArr.length != 1 && isAscArr.length != orderByArr.length) {
            throw new ServiceException("排序参数有误");
        }

        List<OrderItem> list = new ArrayList<>();
        // 每个字段各自排序
        for (int i = 0; i < orderByArr.length; i++) {
            String orderByStr = orderByArr[i];
            String isAscStr = isAscArr.length == 1 ? isAscArr[0] : isAscArr[i];
            if ("asc".equals(isAscStr)) {
                list.add(OrderItem.asc(orderByStr));
            } else if ("desc".equals(isAscStr)) {
                list.add(OrderItem.desc(orderByStr));
            } else {
                throw new ServiceException("排序参数有误");
            }
        }
        return list;
    }

}

前端代码

<el-table v-if="showTable"  @header-click="handleHeaderCLick" 
		:header-cell-class-name="handleHeaderClass">
	<el-table-column label="教师超编(人)" prop="createTime" 	sortable="custom">
	....

js代码

// 需要设置这个,否则重置的时候箭头不会清空点亮
const showTable = ref(false);

// 默认排序
const defaultSort = ref({prop: 'createTime', order: 'ascending'});
/** 重置按钮操作 */
function resetQuery() {
  
  proxy.resetForm("queryRef");
  queryParams.value.orderByColumn = defaultSort.value.prop;
  queryParams.value.isAsc = defaultSort.value.order;
  // 重新刷一遍表单,清空箭头点亮
  // 在getList发后端接口时重新设为true
  showTable.value = false;
  handleQuery();
}


// 绑定箭头的,没有这个多个排序字段只会有一个亮
// 设置列的排序为我们自定义的排序
function handleHeaderClass({column}) {
  column.order = column.multiOrder
}	
// 点击表头进行排序
function handleHeaderCLick(column) {

	// 如果table不是@header-click而是@sort-change
	// 则为column.column.sortable。。。其余属性以此类推
  if (column.sortable !== 'custom') {
    return
  }
  switch (column.multiOrder) {
    case 'descending':
      column.multiOrder = 'ascending';
      break;
    case 'ascending':
      column.multiOrder = '';
      break;
    default:
      column.multiOrder = 'descending';
      break;
  }
  handleOrderChange(column.property, column.multiOrder)
}
function handleOrderChange(prop, order) {
  let orderByArr = queryParams.value.orderByColumn ? queryParams.value.orderByColumn.split(",") : [];
  let isAscArr = queryParams.value.isAsc ? queryParams.value.isAsc.split(",") : [];
  let propIndex = orderByArr.indexOf(prop)
  if (propIndex !== -1) {
    if (order) {
      //排序里已存在 只修改排序
      isAscArr[propIndex] = order;
    } else {
      //如果order为null 则删除排序字段和属性
      isAscArr.splice(propIndex, 1);//删除排序
      orderByArr.splice(propIndex, 1);//删除属性
    }
  } else {
    //排序里不存在则新增排序
    orderByArr.push(prop);
    isAscArr.push(order);
  }
  
  // queryParams是查询参数对象
  // 查询参数要有的排序字段
  //	合并排序
  queryParams.value.orderByColumn = orderByArr.join(",");
  queryParams.value.isAsc = isAscArr.join(",");
  // 获取列表方法,此时发后端接口
  getList();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3 后台管理系统的菜单管理是指在后台管理系统中对菜单进行配置和管理的功能。通过菜单管理,可以动态地添加、修改和删除菜单,以实现对系统功能的灵活控制。 在Vue3 后台管理系统中,菜单管理通常包括以下几个方面的功能: 1. 菜单列表:通过菜单列表展示所有已配置的菜单,包括菜单名称、图标、路径等信息。管理员可以轻松地查看和管理所有菜单。 2. 菜单添加:管理员可以通过菜单添加功能添加新的菜单项。在添加菜单时,可以设置菜单的名称、图标、路径和权限等属性,以便后续的菜单控制和权限管理。 3. 菜单编辑:管理员可以对已有菜单进行编辑,包括修改菜单的名称、图标、路径和权限。通过菜单编辑功能,可以实现对已有菜单的灵活调整和优化。 4. 菜单删除:如果某个菜单不再需要或者有需要重新配置时,管理员可以通过菜单删除功能将其删除。删除菜单时,会同时删除该菜单下的所有子菜单,以保证系统的结构清晰和统一。 5. 菜单排序:管理员可以对菜单进行排序,以自定义菜单在系统中的显示顺序。通过菜单排序功能,可以将常用或者重要的菜单放在前面,方便用户的使用。 6. 菜单权限控制:菜单管理还需要与权限管理功能结合,实现对用户的菜单访问权限控制。只有具有相应权限的用户才能看到和使用对应的菜单项,增加了系统的安全性和稳定性。 总之,Vue3 后台管理系统的菜单管理功能通过配置和管理菜单,实现了对系统功能的灵活控制,提升了系统的易用性和管理效率。同时,菜单权限控制功能也实现了对系统的访问权限的精细管理,保证了系统的安全性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值