您的位置:首页 > 其它

测试开发【提测平台】分享7-实现产品搜索和优化时间显示

2021-08-16 12:14 791 查看

微信搜索【大奇测试开】,关注这个坚持分享测试开发干货的家伙。

一首歌的时间去阅读,再用半小时的时间去coding,动手去实践才能记得牢,学得会,来吧一起成长进步。

  • 实现模糊搜索功能
  • 使用table属性formatter来格式化内容

实现搜索功能

服务端实现搜索接口

按照查询全部接口进行改造,增加两个参数分别是title和keyCode进行逻辑查询sql与进行拼接,实现查询,这里需要注意的是,在用request.args.get()获取参数值的话,获取不到是个None

# 搜索接口
@app_product.route("/api/product/search",methods=['GET'])
def product_search():
# 获取title和keyCode
title = request.args.get('title')
keyCode = request.args.get('keyCode')

# 基础语句定义
sql = "SELECT * FROM `products` WHERE `status`=0"

# 如果title不为空,拼接tilite的模糊查询
if title is not None:
sql = sql + " AND `title` LIKE '%{}%'".format(title)
# 如果keyCode不为空,拼接tilite的模糊查询
if keyCode is not None:
sql = sql + " AND `keyCode` LIKE '%{}%'".format(keyCode)

# 排序最后拼接
sql = sql + " ORDER BY `update` DESC"

connection = connectDB()
# 使用python的with..as控制流语句(相当于简化的try except finally)
with connection.cursor() as cursor:
# 按照条件进行查询
print(sql)
cursor.execute(sql)
data = cursor.fetchall()

# 按返回模版格式进行json结果返回
resp_data = {
"code": 20000,
"data": data
}

return resp_data

 

前端定义请求接口

老模式,先实现product.js 的接口请求实现 apiProductSearch(),params定义的是个josn直接传过来就行,可以不用二次封装,上层传过来的格式如:

{"title":"value", "keyCode":"value"}

// 条件查询
export function apiProductSearch(params) {
return request({
url: '/api/product/search',
method: 'get',
params: params
})
}

 

页面实现搜索区域

使用 Form表单 中的 ¶内行表单  即横向给定两个输入框,分别绑定,data()里定义的search关键字title和keyCode,再增加个button控件,最为搜索的时候的操作,几个关键代码分别如下:

绑定数据定义

 

// 搜索条件
search: {
title: undefined,
keyCode: undefined
}

 

搜索区域和控件定义

 

<div class="filter-container">
<!--搜索部分开始-->
<el-form :inline="true" :model="search">
<el-form-item label="名称">
<el-input v-model="search.title" placeholder="支持模糊查询" style="width: 200px;"
56c
clearable/>
</el-form-item>
<el-form-item label="关键词">
<el-input v-model="search.keyCode" placeholder="支持模糊查询" style="width: 200px;" clearable/>
</el-form-item>
<el-form
ad8
-item>
<el-button type="primary" plain @click="searchProduct()">查询</el-button>
</el-form-item>
</el-form>
<!--搜索部分结束-->
<el-button type="primary" icon="el-icon-plus" style="float:right" @click="dialogProduct()">新增</el-button>
</div>

 

条件搜索点击事件

 

// 条件搜索功能
searchProduct() {
apiProductSearch(this.search).then(res => {
this.tableData = res.data
})
}

实现如上 2d09 内容后,分别启动前后端看看实际成功,这里要说的是,实际上在后端接口测试好后,一直运行者,前端也处于运行状态就行,前端在ide工具里可以在保存后实时编辑渲染的,这样也最大程度看到编码中的效果,在实际的开发过程中也是最为真实的,边编码边看效果,遇到问题和错误及时解决,减少敲了一大堆后的多处错误的回头反查的无头绪。

按例进行编程后测试

CASE1:  输入名称进行模糊查询

CASE2:输入关键词模糊查询

其他测试用例

CASE3: 同时输入名称和关键词联合查询,验证显示同时满足的数据

CASE4: 任意一个条件精确搜索查询,验证查询显示正常

CASE5: 不输入空条件,验证返回所有

 

优化时间列显示

在之前的操作时间列后端直接返回的是数据默认的格式 Sun, 08 Aug 2021 17:56:32 GMT,这样很不友好,我们在前端进行时间格式化,使用的到是依赖包moment,一个轻量级的JavaScript时间库,方便开发中对时间的各种操作,官方地址 http://momentjs.cn/

要使用它,需要提前在前端的 package.json 文件增加这个依赖,当前我增加的版本是 2.29.1 截止到本篇编写时

这里还涉及到一个操作,引用后要做依赖更新,直接点击图片中ide编辑器提示的run 即可,或者按照之前在命令行执行 npm install 

 

在product.vue 全局js中增加引用

 

import moment from 'moment'

编写一个时间格式方法,放在methods:{}

 

formatDate(row, column) {
const date = row[column.property]
if (date === undefined) {
return ''
}
// 使用moment格式化时间,由于我的数据库是默认时区,偏移量设置0,各自根据情况进行配置
return moment(date).utcOffset(0).format('YYYY-MM-DD HH:mm')
}

 

 

 

接下来重要的是在原来table 的 el-table-column 使用 formatter 属性引用即可

<el-table-column :formatter="formatDate" prop="update" label="操作时间"/>

 

最后优化的效果如下

:formatter 这个不只可以用于时间,后续比如后端返回的对应的数字转换成英文,返回加工的显示等等,所以要掌握使用方法举一反三。

 

一个思考题

在最后本篇留一个思考题,就是条件搜索和之前的全量查询,是否可以合并成一个呢,不妨动手自己改造一下。

 

【代码更新】

 

地址:https://github.com/mrzcode/TestProjectManagement

 

TAG:TPMShare7

 

【系列前要阅读】

 

 

原创不易,经过实践的总结分享更不易,如果你觉得有用,请点击推荐,也欢迎关注我博客园和微信公众号。 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐