一、后台修改
1. Controller 返回类型 换为 AjaxJson<IPage<Order>>
2. 自定义一个静态方法 获取分页参数:
public static final <T> Page<T> getPage(final Page<T> page, final HttpServletRequest request, final HttpServletResponse response) {
// 设置页码参数(传递repage参数,来记住页码)
String no = request.getParameter("pageNo");
if (StringUtils.isNumeric(no)) {
CookieUtils.setCookie(response, "pageNo", no);
page.setCurrent(Integer.parseInt(no));
} else if (request.getParameter("repage") != null) {
no = CookieUtils.getCookie(request, "pageNo");
if (StringUtils.isNumeric(no)) { page.setCurrent(Integer.parseInt(no));
}
}
// 设置页面大小参数(传递repage参数,来记住页码大小)
String size = request.getParameter("pageSize");
if (StringUtils.isNumeric(size)) {
CookieUtils.setCookie(response, "pageSize", size);
page.setSize(Integer.parseInt(size));
} else if (request.getParameter("repage") != null) {
no = CookieUtils.getCookie(request, "pageSize");
if (StringUtils.isNumeric(size)) {
page.setSize(Integer.parseInt(size));
}
} else if ("-1".equals(size)) {
page.setSize(Integer.parseInt(size));
} else {
page.setSize(10);
}
String pageCurrent = request.getParameter("page.current");
String pageSize = request.getParameter("page.size");
String pageOrders = request.getParameter("page.orders");
page.setCurrent(isNotBlank(pageCurrent) ? Long.parseLong(pageCurrent) : page.getCurrent());
page.setSize(isNotBlank(pageSize) ? Long.parseLong(pageSize) : page.getSize());
page.setOrders(isNotBlank(pageOrders) ? JSON.parseArray("[" + pageOrders + "]", OrderItem.class) : page.getOrders());
return page;
}
注:2 - 26 行 是对老数据的处理,可以删除;
28 - 33 行 才是需要的,这里可以看到,对排序处理只支持单字段排序,如果需要多字段排序,可以自行设计
3. Service findPage 方法修改
public IPage<Order> findPage(Page<Order> page, Order eo) {
IPage<Order> pageResult = mapper.findList(page, eo);
return pageResult;
}
4. Mapper.java 修改,覆盖 findList 方法
@Mapper
@Repository
public interface OrderMapper extends BaseMapper<Order> {
IPage<Order> findList(Page<Order> page, Order eo);
5. Mapper.xml 修改,修改 findList SQL
<select id="findList" resultType="Order">
SELECT
<include refid="orderColumns"/>
FROM smp_store_order a
<include refid="orderJoins"/>
<where>
a.del_flag = '0'
<if test="eo.id != null and eo.id != ''">
AND a.id = #{eo.id}
</if>
<if test="eo.orderStatus != null and eo.orderStatus != ''">
AND a.order_status = #{eo.orderStatus}
</if>
<if test="eo.createBy != null and eo.createBy != ''">
AND a.create_by = #{eo.createBy}
</if>
</where>
<choose>
<when test="page !=null and page.orders != null and page.orders.size > 0">
ORDER BY
<foreach collection="page.orders" item="item" index="i" open="" separator="," close="">
${item.column}<if test="item.asc"> ASC</if><if test="!item.asc"> DESC</if>
</foreach>
</when>
<otherwise>
ORDER BY a.update_date DESC
</otherwise>
</choose>
</select>
6. Controller 返回
Page<Order> pageParam = getPage(new Page<Order>(), request, response);
IPage<Order> pageResult = orderService.findPage(pageParam, eo);
return AjaxJson.success(pageResult);
二、PC端 vue 修改修改
1. 修改 OrderList.vue 中的 el-table
<el-table :data="dataList" 修改为 <el-table :data="page.records"
2. 修改 OrderList.vue 中的 el-pagination,按如下修改
<el-pagination
@size-change="sizeChangeHandle"
@current-change="currentChangeHandle"
:current-page="page.current"
:page-sizes="[10, 20, 50, 100]"
:page-size="page.size"
:total="page.total"
background
layout="total, sizes, prev, pager, next, jumper">
</el-pagination>
3. 修改 data ()
将 dataList: [], pageNo: 1, pageSize: 10, total: 0, orderBy: '', 修改为 page: {},
也可以把参数设置全,如下:
page: {
size: 10,
total: 0,
current: 1,
records: [],
orders: null
},
4. 修改 refreshList () 方法
将 params 参数修改为如下内容:
params: {
'page.current': this.page.current,
'page.size': this.page.size,
'page.orders': this.page.orders,
...this.searchForm
}
请求成功后,then 中内容修改为: }).then(({data}) => {
if (data && data.success) {
this.page.size = data.data.size
this.page.total = data.data.total
this.page.current = data.data.current
this.page.records = data.data.records
this.loading = false
}
})
5. 每页数 sizeChangeHandle (val) 方法修改如下:
// 每页数
sizeChangeHandle (val) {
this.page.size = val
this.page.current = 1
this.refreshList()
},
6. 当前页 currentChangeHandle (val) 方法修改如下:
// 当前页
currentChangeHandle (val) {
this.page.current = val
this.refreshList()
},
7. 排序 sortChangeHandle (obj) 方法修改如下:
// 排序
sortChangeHandle (obj) {
if (obj.order === 'ascending') {
this.page.orders = JSON.stringify({column: obj.prop, asc: true})
} else if (obj.order === 'descending') {
this.page.orders = JSON.stringify({column: obj.prop, asc: false})
} else {
this.page.orders = null
}
this.refreshList()
},