搜索、分页要考虑哪些东西?

单独拿出来一个来说,都是比较简单的,但是结合到一起再配合需求,就会出现种种变化,一不留神就会 ‘中招’ !

要把 分页 做成 搜索 !分两个情况进行说明!

注意: 以下情况均以每页10条数据为例。

情况一:搜索出来的数据超过10条,即有多页符合条件的数据。

1)假设用条件 “已审批的订单” 去搜索,结果一共有21条,共3页,此时是在第一页,他代表的是 “已审批的订单” 的1 - 10条。

2)当点击第二页的时候,应该还是要带着条件去搜索的,第二页代表的应该是“已审批的订单”的第11 - 20条。这就要求当在进行分页的时候,要把条件也带着。不然就会导致点击第二页跳转的时候,数据请求的是所有数据的第二页。

注意:要缓存已经查询的参数。如果在搜索栏输入条件 “审批过的订单” ,但是未点搜索,而是直接点第二页,根据日常需求我们不应该带着条件去查询,这点要注意,要注意 ‘缓存’ 已经查询的参数!

做法:首先,当点击搜索的时候,使用 searchMiddleForm 对象去记录查询条件,点击分页的时候,直接把searchMiddleForm对象的值当做参数传给后台即可。注意:后面进行分页跳转的搜索,传入的参数是 searchMiddleForm 的值且只有点击搜索的时候才会记录到searchMiddleForm里面。

示例代码如下:

// 点击搜索时触发的事件
handleSearch () {
      // 获取搜索的值
      const { accountName, name, organization, province, roles } = this.searchForm
      // 记录搜索中间值,为跳转页码用
      this.searchMiddleForm = { accountName, name, organization, province, roles }
      // 设置要传递给后台的参数
      let params = {
        data: {
          accountName,
          name: encrypt(name), // 对用户名字进行aes加密
          organization,
          province,
          roles,
          resourceId: this.resourceId
        },
        pageNum: 1,
        pageCount: 10
      }
      // 调用接口发送请求
      user
        .search(params)
        .then(res => {
            if(res.data.status){ 
                this.pagination.currentPage = 1 // 不要忘了重置当前页数为第1页
            }
        })
}

 

情况二:可以对数据进行删除操作

如果根据条件搜索出来的数据很多,当点击删除,数据应回到带搜索条件的这一页或者上一页。

1)假设用条件 “已审批的订单” 去搜索,结果一共有21条,共3页,此时是在第三页,第三页只有1条数据他代表的是 “已审批的订单” 的第21条。

2)把这一条删除,此时应展示的为第二页,即 “已审批的订单” 的第11 - 20 条。

这种临界删除的处理方法有很多,这里仅展示2种:

this.pagination 是一个对象,里面包含了所有分页相关的data数据。

this.pagination.total 代表的是 数据总数。

this.pagination.currentPage 代表的是 当前页。

this.pagination.pageSize 代表的是 当前页数据的数量,一般设置为10。

方法一:

handleDelete (row) { 
    user
     .delete({id: row.id})
     .then(res => {
        if (res.data.status) { // 如果删除成功
            this.pagination.total--  // 将数据总数减1
            if (this.pagination.total === 0) { // 判断如果减过后没有数据,那么让当前页为第一页
                 this.pagination.currenPage = 1
            } else {
                 let count = Math.ceil(this.pagination.total / this.pagination.pageSize)
                 if (this.pagination.currentPage > count) {
                    this.pagination.currenPage = count
                 }
            }
        }
     })
}

方法二:

if (tableDate.length <= 1 && this.pagination.currentPage > 1) {
    this.pagination.currentPage --
}
// tableDate为删除之前,数据在当前页的总条数。
// 意思就是,如果我在删除之前发现当前页大于第一页,且条数只有小于或者等于1条,那么我把当前页减1。