Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >测试需求平台17-产品管理分页功能和样式优化

测试需求平台17-产品管理分页功能和样式优化

作者头像
MegaQi
发布于 2023-10-21 11:22:53
发布于 2023-10-21 11:22:53
23401
代码可运行
举报
运行总次数:1
代码可运行

书接上篇,继续对产品管理重构做最后的分页实现,以及样式的调整优化。

2.Pagination分页

数据较多时候使用分页控制信息数量,也可以进行页面的转跳,常搭配 列表List 表格Table 使用。

https://arco.design/vue/component/pagination

2.1 基本用法

组件<a-pagination>配置分页,total 表示总数量为属必填项。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>*
  <a-pagination :total="50"/>
</template>

默认每页10条,并选中第一页,按照上边总数50计算,会展示1-5页码,当页码较大时,会使用更多页码的分页样式。

2.2 属性方法

对于pagination组件还有功能样式属性设置,常用的如下:

  • 每页条数:通过 show-page-size展示每页条数选择器
  • 页码跳转:设置 show-jumper 显示页码跳转输入框
  • 展示总数:通过设置show-total 属性展示数据总数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <a-pagination :total="50" show-total show-jumper show-page-size/>
</template>

几项配置全部展示样式如下:

另外的一些则变量赋值

  • current 当前的页数 v-model
  • page-size 每页面展示的条数(默认10) v-model
  • default-current 初始化默认选中的页数
  • default-page-size 初始化默认每页展示的条数
  • page-size-options 数据选择组件选项列表
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<a-pagination
    :total="50"
    :page-size="20"
    :current= "2"
    :page-size-options=[10,20,30]
    show-total
    show-jumper
    show-page-size
  />

对应代码设置后的结果

最后就是对应的事件,pagination比较简单只用两个

事件名

描述

参数

change

页码改变时触发

current: number

page-size-change

数据条数改变时触发

pageSize: number

当然其他非常用的还有大小、自定义样式、插槽等,同样也是根据需求实现需求自行查阅官方文档即可。

2.3 分页实战

结合上一节讲的sql limit 知识点,将其搜产品搜索接口改造成带分页查询接口。

注:为了不影响就版本服务接口,这里为新增一个分页查询接口/searchPage

分页查询接口重点关注新增参数、全量个数统计和结果返回体,其中与/search接口的区别地方参考代码中的注解说明。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@app_product.route("/api/product/searchPage",methods=['GET'])
def product_search_page():
    # 获取title和keyCode
    title = request.args.get('title')
    keyCode = request.args.get('keyCode')

    # 新增页数和每页个数参数,空时候做默认处理,并注意前端传过来可能是字符串,需要做个强制转换
    pageSize = 10 if request.args.get('pageSize') is None else int(request.args.get('pageSize'))
    currentPage = 1 if request.args.get('currentPage') is None else int(request.args.get('currentPage'))

    sql = "SELECT * FROM `products` WHERE `status`=0"
    # 增加基础全量个数统计
    sqlCount = "SELECT COUNT(*) as `count` FROM `products` WHERE `status`=0"

    # 条件拼接全量统计也需要同步

    if title is not None:
        sql = sql + " AND `title` LIKE '%{}%'".format(title)
        sqlCount = sqlCount + " AND `title` LIKE '%{}%'".format(title)
    if keyCode is not None:
        sql = sql + " AND `keyCode` LIKE '%{}%'".format(keyCode)
        sqlCount = sqlCount + " AND `keyCode` LIKE '%{}%'".format(keyCode)

    # 排序最后拼接带分页查询
    sql = sql + ' ORDER BY `update` DESC LIMIT {},{}'.format((currentPage - 1) * pageSize, pageSize)

    connection = connectDB()

    # 使用python的with..as控制流语句(相当于简化的try except finally)
    with connection:
        # 先查询总数
        with connection.cursor() as cursor:
            cursor.execute(sqlCount)
            total = cursor.fetchall()

        # 执行查询分页查询
        with connection.cursor() as cursor:
            # 按照条件进行查询
            cursor.execute(sql)
            data = cursor.fetchall()

    # 带着分页查询结果和总条数返回,total注意是list字段需要下角标key取值
    resp_data = {
        "code": 20000,
        "message": "success",
        "data": data,
        "total": total[0]['count']
    }

    return resp_data

前端产品要想实现分页需要做如下基础优化改动

  • 定义列表总数变量,增加额外的页参数,并优化查询方法
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 定义列表总数变量ts语法
const productTotal = ref<number>();

// 增加页吗和每页个数,给定默认值
const productSearch = reactive({
  title: undefined,
  keyCode: undefined,
  pageSize: 5,
  currentPage: 1
})

// 优化搜索请求方法
const btnSearchClick = async () => {
  // const res = await apiProductSearch(productSearch);
  // 注意此处替换成的新的接口方法
  const res = await apiProductSearchPage(productSearch);
  if (res.code === 20000) {
    renderList.value = res.data
    // 增加总数量的赋值
    productTotal.value = res.total
  } else {
    console.log("产品搜索失败");
  }
};

  • 编写页和数量变更触发事件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 页切换时候拿到点击页码并给赋值到请求参数,同时触发新的查询
const pageChange = (current: number) => {
    console.log(current)
    productSearch.currentPage=current
    btnSearchClick()
}

// 
const pageSizeChange = (pageSize: number) => {
  console.log(pageSize)
  productSearch.pageSize=pageSize
  btnSearchClick()
}
  • 模版HTML在表格下方实现配置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<a-pagination
   :total="productTotal"
   :page-size-options=[5,10,20,30,50]
    default-page-size="5"
    @change="pageChange"
    @pageSizeChange="pageSizeChange"
    show-total
    show-page-size          
  />
  • 默认请求优化 这里有个问题,页面加载的时候默认请求还是之前的list接口,需要将其改成最新分页查询方法,改动点是fetchData()注释或删除掉,并将初始化调用换成btnSearchClick(),以及之前增删改的数据刷新页要全部替换。

最后来个测试与演示

3. 布局样式优化

在上边功能代码实现中都仅仅是添加了控件和操作,并没有进行样式的定义。所以这里通过给各层级增加 style 样式定义,让界面更加合理美观。

针对views/product/index.vue 几个改动为:

  • 对页面增加一个整体白色背景,并且设置间距和高度百分比,让区块更明显
  • from部分也整体进行个间距20px缩进,让其有层次感
  • 将独立行的“添加产品按钮”迁移到form-item里,保持对其效果
  • 按照通常分页表格设计习惯将分页控件样式靠右对其,但保持靠右50px的距离

在上述优化代码编写完后,Ctrl+S 保存,如果是WebStorm调试模式下运行,会自动编译变化部分,刷新页面即可查看,如果是其他手动方式,请重新运行 npm run dev查看效果。

此篇到此对于使用Acro Pro项目的重构中的“产品管理”功能就基本结束了。下一篇将开始“应用管理”功能的实现。

End

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-05-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 非典型性程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
flask+vue:创建一个数据列表并实现简单的查询功能(一)
这里要用到element-ui中Select 选择器、 Form 表单 、DatePicker 日期选择器
冰霜
2022/03/15
2.4K1
flask+vue:创建一个数据列表并实现简单的查询功能(一)
vue+element踩坑记-表格的分页实现
今天简单的介绍一下element的分页是怎么实现的,先说一下感受,之前一直是使用的jQuery的分页,其实也不全算是,使用的本质还是BootStrapUI的分页,感兴趣的可以翻翻我之前写的文章,有关于这块的,这里就不做任何的赘述,那么说这个原则是用完element的分页以后觉得真的是太简单的,简单的写完甚至没有一点的成就感。不BB,我们看效果和代码!
何处锦绣不灰堆
2020/05/29
1.4K0
vue+element踩坑记-表格的分页实现
测试需求平台16-产品管理搜索功能实现
在系列前几篇实战分享中,我们从0-1实现了产品管理的中的列表显示和增删改的最为基础的交互操作,本篇将继续学习和实现其搜索和分页。
MegaQi
2023/10/21
1680
测试需求平台16-产品管理搜索功能实现
关于flask入门教程-分页的几种方式
关于flask的分页,大家都知道有一个Flask-SQLAlchemy提供的paginate()方法,这个方法配合bootstrap简化了分页连接代码的生成,但其实关于分页数据的返回才是最重要和最难的,数据的生成由多种方法,有原生SQL,有Flask-SQLAlchemy中的原生SQL,有Flask-SQLAlchemy对象数据等等。如何结合数据生成方式和分页组件也算是一个难点吧。
python与大数据分析
2022/03/11
1.4K0
关于flask入门教程-分页的几种方式
eltable的分页
分页思路 前端实现自己的分页 这种思路一般就是后台返回的数据没有做分页处理 前端对返回的数据进行简单的分页 eleui提供了分页的插件,直接使用就可以了 实现思路: 对后端返回的数据js计算出它的length,length就是 分页参数中的总数, <el-table @row-click="handle" :row-class-name="tableRowClassName" :data="typeList.slice((this.query.pageNum - 1) *
安德玛
2022/03/05
5870
Django 使用Paginator分页器
上方的分页代码还有一个不足之处,当我们的页码数量过多时,会全部展示出来,整个页面都是很不美观,我们直接在上方代码上稍加修改一下试试.
王瑞MVP
2022/12/28
1.2K0
Django 使用Paginator分页器
vue分页功能
vue中的分页使用频繁,在此记录一下。因为分页一般和增删查改等一起使用,所以写了一套。若是没有使用到其他功能,可以直接删除,只使用分页功能。
全栈程序员站长
2022/11/10
7720
浅学前端:Vue篇(二)
ElementUI是基于vue的一套组件库,前面讲述了如何自己去创建组件,但是自己创建组件成本太高了,所以我们一般都是采用一些第三方的比较成熟的组件库,ElementUI就是其中一中,使用之后可以大大减少我们的开发成本。
传说之下的花儿
2023/11/12
2740
浅学前端:Vue篇(二)
超级详细:一个漂亮的Vue分页器组件的实现
2、在分页器组件计算属性computed中计算总共多少页/最后一页 - this.total / this.pageSize
打不着的大喇叭
2024/03/11
1.7K0
超级详细:一个漂亮的Vue分页器组件的实现
TP5 分页样式[通俗易懂]
自定义分页类 放到extend\page\,这里也可以自己决定,命名空间对了就行 在extend\page\下新建Page.php把以下代码粘过去
全栈程序员站长
2022/09/09
6380
TSINGSEE青犀视频EasyCVR视频融合共享平台通道分页功能是如何实现的?
目前TSINGSEE青犀视频EasyCVR平台接入设备较多时,没有分页图标,界面通过滚动条来显示所有通道信息,用户无法直观地看见设备的总数等信息,操作十分不便。
TSINGSEE青犀视频
2021/02/20
4860
vue 分页 Pagination
https://cloud.tencent.com/developer/section/1489889
全栈程序员站长
2022/11/10
5670
Flask与Vue分页功能实现
在本篇文章中,我们将实现一个简单的分页功能,后端使用 Flask 提供数据,前端使用 Vue.js 显示数据,并且通过 Element UI 进行分页组件的交互。具体实现包括 Flask 视图函数的分页逻辑、Vue 前端分页组件的实现和前后端数据交互。
晓松
2024/12/26
1230
Flask与Vue分页功能实现
ElementUI 分页+django rest framework
在之前的文章中,链接如下:https://www.cnblogs.com/xiao987334176/p/14313471.html
py3study
2021/03/29
1.7K0
ElementUI 分页+django rest framework
【源码免费下载】SpringBoot整合Spring+SpringMVC+MyBatisPlus案例:图书管理系统
只是上述调用MyBatisPlus中提供的分页功能相关的方法还无法真正实现分页功能,MyBatisPlu是通过拦截器来实现分页的,所以需要配置拦截器。
.29.
2023/10/17
4250
【源码免费下载】SpringBoot整合Spring+SpringMVC+MyBatisPlus案例:图书管理系统
Flask 学习-73.Flask-SQLAlchemy 分页查询paginate
前言 Flask-SQLAlchemy 提供了一个分页查询方法 paginate(),方便我们实现在后端查询分页。 分页查询 在django 框架里面有个rest_framework.pagination 分页器, 只需简单的配置就可以实现分页 from rest_framework.pagination import PageNumberPagination # 定义分页器简单分页(PageNumberPagination) class MyPageNumberPagination(PageNumber
上海-悠悠
2022/09/27
2.7K0
vue+element实现分页的封装
分页想必大家都写过,后台管理项目分页是必不可少的,话不多说,上代码 Paging组件 <template> <!-- 分页组件的封装 --> <div class="pagination"> <el-pagination @size-change="sizeChange" @current-change="currentChange" :page-sizes="[1,5,10,15,,20]" layout="
前端小白@阿强
2020/08/11
1.4K1
vue+element实现分页的封装
用了这么久的PageHelper,你知道原生的分页查询原理和步骤吗
分页查询则是在页面上将本来很多的数据分段显示,每页显示用户自定义的行数。可提高用户体验度,同时减少一次性加载,内存溢出风险。
业余草
2021/12/06
2.1K0
用了这么久的PageHelper,你知道原生的分页查询原理和步骤吗
原生分页查询原理步骤解析
    分页查询则是在页面上将本来很多的数据分段显示,每页显示用户自定义的行数。可提高用户体验度,     同时减少一次性加载,内存溢出风险。
上分如喝水
2021/08/16
1.3K0
原生分页查询原理步骤解析
vue——element-ui中的表格和分页器连接起来
上面的代码时elementUI官方示例,简单分析一下:el-table 里面的 :data 是数据源;el-table-column 是表格里面的每一行的数据,它里面的 prop 绑定的是 :data 数据源里面的某个属性值,由此形成一个表格。
江一铭
2022/06/16
1.7K0
相关推荐
flask+vue:创建一个数据列表并实现简单的查询功能(一)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档