YUDAO源码中的正序倒序表格ElmentUI的实现,与后端的配合?

前端展示和实现:

  1. elmentUI表格的定义

  2. JS请求参数改造

复制代码
 <!-- 列表 -->
    <el-table v-loading="loading" :data="list"   @sort-change="handleSortChange">
    
      
      <el-table-column label="Expiry Date" prop="expiry_date"     sortable>
         <template slot-scope="{ column }">
                <span>{{ column.label }}</span>
                <el-icon v-if="column.property === currentSort.prop" 
                    :class="currentSort.order === 'ascending' ?
                     'el-icon-arrow-up' : 'el-icon-arrow-down'">
                </el-icon>
        </template>
      </el-table-column>

data() {
    return {
       currentSort: { // 当前排序状态
              prop: '', // 排序的属性
              order: '' // 排序顺序,可选值为 ascending 和 descending
        },

....
  methods: {
           //捕捉事件
         handleSortChange({ column, prop, order }) {
          console.log(`排序属性: ${prop}, 排序方向: ${order}`);
           this.currentSort.prop = prop;
           this.currentSort.order = order;
           this.getList()
              // 在这里可以实现自定义排序逻辑,例如对tableData进行排序处理
           },
....
        //改造请求参数
         addOrderFields(){
          let sortingFields =[]
          if(this.currentSort.prop !== ''){
            let sortObj={
              field:this.currentSort.prop,
              order:''
            }

            if(this.currentSort.order == 'ascending'){
              sortObj.order = 'asc'
            }else{
              sortObj.order ='desc'
            }
            sortingFields.push(sortObj)

            this.queryParams.sortingFields= sortingFields
           
          }
        },

后端配合:

控制器:

POST方式和@RequestBody CertPageReqVO的配合

复制代码
@PostMapping("/page")
@PreAuthorize("@ss.hasPermission('cert::query')")
public CommonResult<PageResult<CertRespVO>> getPage(@RequestBody CertPageReqVO pageVO ) {
    return success(Service.getPageOfCertRespVo(pageVO));
}

//加入排序的接收参数

复制代码
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class CertPageReqVO extends PageParam {
    //加入排序的接收参数
    private Collection<SortingField> sortingFields;

Mapper实现:

改造selectPage()

IPage<CertDO> mpPage = MyBatisUtils.buildPage(reqVO,reqVO.getSortingFields());

复制代码
@Mapper
public interface CertMapper extends BaseMapperX<CertDO> {

    default PageResult<CertDO> selectPage(CertPageReqVO reqVO) {

        LambdaQueryWrapperX<CertDO> ew= new LambdaQueryWrapperX<CertDO>()
                .likeIfPresent(CertDO::getName, reqVO.getName())
                .likeIfPresent(CertDO::getDescription, reqVO.getDescription())
                .orderByDesc(CertDO::getId);

           
            if (reqVO.PAGE_SIZE_NONE.equals(reqVO.getPageSize())) {
                List<CertDO> list = selectList(ew);
                return new PageResult<>(list, (long) list.size());
            }

            // MyBatis Plus 查询
            IPage<CertDO> mpPage = MyBatisUtils.buildPage(reqVO,reqVO.getSortingFields());
            selectPage(mpPage, ew);
            // 转换返回
            return new PageResult<>(mpPage.getRecords(), mpPage.getTotal());
    }

已经实现的原理

相关推荐
计算机毕设VX:Fegn089523 分钟前
计算机毕业设计|基于Java + vue水果商城系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot·课程设计
周杰伦_Jay24 分钟前
【 Vue前端技术详细解析】目录结构与数据传递
前端·javascript·vue.js
!停1 小时前
深入理解指针(4)
开发语言·javascript·ecmascript
A24207349301 小时前
JavaScript学习
前端·javascript·学习
奋斗吧程序媛1 小时前
动态组件驱动的标签页架构(简单来说:一个页面包含许多Tabs页面,这些Tabs页面渲染逻辑)
前端·javascript·vue.js
Felix_Fly1 小时前
用 Vue3 + naive-cron 开发 Cron 表达式工具:从 0 到 1 实现生成 + 反解析
前端·javascript·vue.js·vue·cron·naive
开发者小天1 小时前
react中useReducer的使用
前端·javascript·react.js
阿蒙Amon1 小时前
JavaScript学习笔记:1.JavaScript简介
javascript·笔记·学习
Irene19912 小时前
Vue3 相比 Vue2 的主要变化(生命周期、状态管理、API风格)
vue.js
老华带你飞2 小时前
校务管理|基于springboot 校务管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·spring