Vue--element实现会员管理条件查询
查询
前面我们做分页的时候,发送了 post 请求,在URL里携带了size和page,我们还可以把搜索的参数携带过去,让后台进行处理,返回搜索后的结果
修改 src/api/member.js 里的代码,加上请求参数data ,代码如下
// 会员管理接口 import request from '@/utils/request' import BASE_URL from '@/utils/common' export default { // 获取会员列表数据,page 当前页码。size,每页查询条数,searchMap 搜索的参数 getList(token,size,page,searchMap){ return request({ url: BASE_URL +`/api/manage/search/member?page=${page}&size=${size}`, // 反单引号 method: 'post', data: searchMap, headers:{ "Authorization":"JWT "+token } }) }, }
然后再去 src/views/member/index.vue里修改代码,如下
<template> <div> <!-- 搜索框 --> <!-- :inline="true" 表单一行显示 --> <!-- :model="searchMap" 绑定到这个参数上 --> <el-form ref="searchForm" :inline="true" :model="searchMap" style="margin-top: 20px"> <!-- 重置会看 el-form-item 组件元素的 prop 上是否指定了字段名,指定了才会重置生效 --> <el-form-item prop="member_card"> <!--prop需要在data里指定,不指定会出现重置不了的问题, placeholder背景文案 --> <el-input v-model="searchMap.member_card" placeholder="会员卡号" style="width: 200px"></el-input> </el-form-item> <!-- prop重置用 --> <el-form-item prop="member_name"> <el-input v-model="searchMap.member_name" placeholder="会员名字" style="width: 200px"></el-input> </el-form-item> <el-form-item prop="pay_type"> <el-select v-model="searchMap.pay_type" placeholder="支付类型" style="width: 110px"> <!-- 不要忘记 payTypeOptions 绑定到data中 --> <!-- for循环。label就是看到的中文,value提交到后台的值,也就是1,2,3,4 --> <el-option v-for="option in payTypeOptions" :key="option.pay_type" :label="option.name" :value="option.pay_type" ></el-option> </el-select> </el-form-item> <!-- 日期搜索框 --> <el-form-item prop="member_birthday"> <!-- value-format 是指定绑定值的格式 --> <el-date-picker style="width: 200px" value-format="yyyy-MM-dd" v-model="searchMap.member_birthday" type="date" placeholder="出生日期" ></el-date-picker> </el-form-item> <!-- 日期搜索框结束 --> <el-form-item> <el-button type="primary" @click="fetchData">查询</el-button> </el-form-item> </el-form> <!-- 搜索框结束 --> <!-- 列表页面 :data绑定渲染的数据,data 里我们定义的上list border 表格边框,表头最上面的那个边框 height 表格高度 --> <el-table :data="list" height="380" border style="width: 100%"> <!-- type='index'获取索引值,从1开始,label显示的标题,prop接口返回数据的字段名,width列宽,不写就自动 --> <el-table-column type="index" label="序号" width="50"></el-table-column> <el-table-column prop="member_card" label="会员卡号" width="180"></el-table-column> <el-table-column prop="member_name" label="会员姓名"></el-table-column> <el-table-column prop="member_birthday" label="会员生日" width="100"></el-table-column> <el-table-column prop="phone_number" label="手机号码" width="120"></el-table-column> <el-table-column prop="card_money" label="可用积分"></el-table-column> <el-table-column prop="Available_integral" label="开卡余额"></el-table-column> <!-- 支付类型开始 --> <el-table-column prop="pay_type" label="支付类型"> <template slot-scope="scope"> <!-- 使用过滤器,scope.row.pay_type为接口返回的pay_type的值,后面的是作用在哪个过滤器上面,这里作用在 payTypeFilter 上面--> <span>{{scope.row.pay_type | payTypeFilter }}</span> </template> </el-table-column> <!-- 支付类型结束 --> <el-table-column prop="member_address" label="会员地址" width='180'></el-table-column> <!-- 操作开始,scope 可以获取行数据 ,scope.row.id 获取该行数据的 id值--> <el-table-column label="操作" width="150"> <template slot-scope="scope"> <el-button size="mini" @click="handleEdit( scope.row.id)">编辑</el-button> <!-- 根据后端返回该行的id进行编辑和删除 --> <el-button size="mini" type="danger" @click="handleDelete( scope.row.id)">删除</el-button> </template> </el-table-column> <!-- 操作结束 --> </el-table> <!-- 列表页面结束 --> <!-- 分页 --> <!-- handleSizeChange 改变每页多少条调用这个方法,会传选择的条数过去 handleCurrentChange 点击页码调用这个方法,会传点击的页码过去 current-page当前的页码,data里定义的1,默认第一页 page-sizes 选择项,每页显示多少条 page-size 每页显示多少条,data里定义 layout="total, sizes, prev, pager, next, jumper" total 总共多少条,去掉后不显示,sizes选择项,prev上一页的箭头,pager页码,next下一页的箭头,jumper前往多少页 --> <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currenPage" :page-sizes="[10, 15, 20, 30]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total" ></el-pagination> <!-- 分页结束 --> </div> </template> <script> import memberApi from "@/api/member" // 支付类型,不能写在data里面,会报错,定义好了在下面写个 filters 方法 // 然后在列表页面使用过滤器,接口返回的pay_type是数字,不是字符串 const payTypeOptions = [ { pay_type: 1, name: "现金" }, { pay_type: 2, name: "微信" }, { pay_type: 3, name: "支付宝" }, { pay_type: 4, name: "银行卡" } ]; export default{ data(){ return { list: [], // 数据传给list,列表渲染的数据 total: 0, // 总记录数,在接口返回数据后赋值给total currenPage: 1, // 当前页码 pageSize: 10, // 每页显示的数据条数 searchMap: { // 条件查询绑定的条件值,搜索字段有四个 member_card: "", member_name: "", pay_type: "", member_birthday: "" }, payTypeOptions, // 这里要申明,要不然搜索框里使用的时候会报错 } }, created() { // 调接口请求数据,将调接口定义一个方法,在created里调用这个方法 this.fetchData() }, methods: { fetchData(){ // 获取token const token = localStorage.getItem('zz-token') console.log(token) // this.pageSize,this.currenPage 分页的条数和页码,要this. memberApi.getList(token,this.pageSize,this.currenPage,this.searchMap).then( response=>{ const res = response.data this.total = res.total // 将接口返回的total 覆盖 data里的total this.list = res.data // 将返回数据的data赋值给list // console.log(res) }) }, // 搜索接口,查询数据 searchData(){ }, // 编辑 handleEdit(id){ console.log('编辑',id) }, // 删除 handleDelete(id){ console.log('删除',id) }, // 当每页显示条数改变后被触发,val是最新的每页显示条数 handleSizeChange(val) { this.pageSize = val; this.fetchData(); }, // 当页码改变后被触发,val是最新的页码 handleCurrentChange(val) { this.currenPage = val; this.fetchData(); } }, filters: { // 过滤器,转换支付类型,type为1,2,3,4 payTypeFilter(pay_type) { const payObj = payTypeOptions.find(obj => { // obj 就是上面的一个对象,type和上面对象的type进行对比,在返回 return obj.pay_type === pay_type; }); // payObj 有值,返回 payObj.name return payObj ? payObj.name : null; // 没找到类型返回null,找到了返回payObj.name } } } </script>
修改的地方如下
日期搜索框,转换格式
绑定要传到后台的参数名
携带请求参数到后台