jeecg-boot框架用代码生成器生成的表单业务列表,查询结构默认用create_time字段排序。在jeecg-boot中,系统默认每一张表都具备create_by create_time update_by update time 字段。所以在前端的JeecgListMixin.js文件中就直接定义了排序参数:
/* 排序参数 */
isorter:{
column: 'createTime',
order: 'desc',
},
然后在获取查询参数的时候直接使用了isorter
getQueryParams() {
//获取查询条件
let sqp = {}
if(this.superQueryParams){
sqp['superQueryParams']=encodeURI(this.superQueryParams)
sqp['superQueryMatchType'] = this.superQueryMatchType
}
//下面一行直接使用了 this.isorter
var param = Object.assign(sqp, this.queryParam, this.isorter ,this.filters);
param.field = this.getQueryField();
param.pageNo = this.ipagination.current;
param.pageSize = this.ipagination.pageSize;
return filterObj(param);
},
最终后端组合成的sql语句中会包含 order by create_time desc
这种处理方式会导致查询没有create_time字段的表会报异常。修改方法也很简单,重写一个JeecgListMixin文件,比如叫JeecgListMixinForMe.js,复制JeecgListMixin的内容,修改其中的getQueryParams方法
getQueryParams() {
//获取查询条件
let sqp = {}
if(this.superQueryParams){
sqp['superQueryParams']=encodeURI(this.superQueryParams)
sqp['superQueryMatchType'] = this.superQueryMatchType
}
//下面一行直接使用了 this.isorter
var param = Object.assign(sqp, this.queryParam, {} ,this.filters);
param.field = this.getQueryField();
param.pageNo = this.ipagination.current;
param.pageSize = this.ipagination.pageSize;
return filterObj(param);
},
把this.isorter设置成空值。这样就不会执行order by 。但是这同时也会让list中的点击表头列名排序的功能失效。
要想页面表格初始化数据的时候不按照create_time排序,同时又不丢失根据表头字段排序的功能,可以修改成这样:
/* 排序参数 */
isorter:{
column: '',
order: '',
},
同时,getQueryParams函数中恢复原样
//下面一行直接使用了 this.isorter
var param = Object.assign(sqp, this.queryParam, this.isorter ,this.filters);
将自己的组件文件修改成import JeecgListMixinForMe
import '@/assets/less/TableExpand.less'
import { mixinDevice } from '@/utils/mixin'
import { JeecgListMixin } from '@/mixins/JeecgListMixinForEfence'
更多的修改自定义还可以结合后端代码,主要是org.jeecg.common.system.query.QueryGenerator中的doMultiFieldsOrder()方法。