Vue--element对会员搜索输入框增加重置功能

简介: Vue--element对会员搜索输入框增加重置功能

前戏


前面我们已经实现了会员管理的搜索功能,但是有一个点用起来不舒服,当我们搜索完成之后,搜索框里的内容要手动一个一个删除,耽误了我们撩小姐姐的时间,我们可以给自己提一个需求,增加一个重置功能,点击重置清空搜索框里的内容。嗯,人人都是产品经理。

重置


代码如下

<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>
          <!-- searchForm 为搜索框上面 ref 绑定的属性,resetForm 要在methods里面定义-->
          <el-button @click="resetForm('searchForm')">重置</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)
            })
        },
        // 编辑
        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();
          },
        // 重置功能,element ui 提供的功能
        resetForm(formName) {
          // 重置要看 el-form-item 组件元素的 prop 上是否指定了字段名,指定了才会重置生效
            this.$refs[formName].resetFields();
          },
    },
    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>

改动地方如下

新增重置按钮

 

定义 resetForm方法

prop指定字段名

在data里指定哪些字段要重置,要不然会出现输入不了的情况


相关文章
|
1月前
|
存储 JavaScript 前端开发
介绍一下Vue的核心功能
介绍一下Vue的核心功能
|
2月前
|
JavaScript 前端开发 API
|
2月前
|
JavaScript API UED
vue.js怎么实现全屏显示功能
【10月更文挑战第7天】
49 1
|
2月前
|
资源调度 JavaScript UED
如何使用Vue.js实现单页应用的路由功能
【10月更文挑战第1天】如何使用Vue.js实现单页应用的路由功能
|
4月前
|
存储 JavaScript
任务清单小功能的实现(任务的增、删、改、查、存储)使用Vue实现
这篇文章介绍了使用Vue实现的任务清单小功能,包括任务的增加、删除、修改、查看以及数据存储。文章通过视频演示展示了实现效果,重点讲解了编辑功能的实现,并通过代码实例展示了编辑功能的核心代码,同时提供了完整的代码下载链接以及以往练习的概览。
任务清单小功能的实现(任务的增、删、改、查、存储)使用Vue实现
|
4月前
|
JavaScript 索引
炸裂!Vue3 中使用 Hook 实现按住 Shift 快速勾选el-table 功能,太丝滑了!
炸裂!Vue3 中使用 Hook 实现按住 Shift 快速勾选el-table 功能,太丝滑了!
|
4月前
|
前端开发 JavaScript
基于Vue3实现鼠标按下某个元素进行拖动,实时改变左侧或右侧元素的宽度,以及点击收起或展开的功能
本文介绍了如何在Vue3项目中实现一个鼠标拖动调整元素宽度的功能,并展示了点击按钮收起或展开侧边栏的效果,提供了完整的实现代码和操作演示。
875 0
|
4月前
|
JavaScript
基于Vue3+TS简单设计一个查看文章时点击展开和点击收起的小功能
该文章展示了如何使用Vue 3和TypeScript创建一个简单的展开和收起功能,用于文章查看时的交互体验。
156 0
|
4月前
|
Web App开发 JavaScript 前端开发
不光好上手,功能还特强的 Vue 3组件!且开源免费!
不光好上手,功能还特强的 Vue 3组件!且开源免费!
|
4月前
|
JavaScript 前端开发
【Vue 3】如何实现动态表单生成器的拖拽功能?
【Vue 3】如何实现动态表单生成器的拖拽功能?