在Vue中如何根据下拉框选中的值 展示不同的输入框

14 篇文章 0 订阅
订阅专栏

大纲:

      🌳  1、怎么根据下拉框中选中的值展示不同的输入框呢?
        我们可以使用change事件来进行处理。当我们选中收费类型的其中一个就触发change事件,然后根据选中的value值,对数据进行展示与隐藏 即可。
      🥑  收费类型分为三种,即按天 按分钟 按次收费,而我们需要根据不同的收费类型展示类型中的数据。
        🟢1 按天收费:freeTime(免收分钟)、dayMaxPrice(每日最高金额)
     
        🟢2 按分钟收费:freeTime(免收分钟)、startPrice(起步金额)、startTime(起步分钟)、dayUnitTime(超/分钟)、dayUnitPrice(超/分钟 收费金额)
  
        🟢3 按次收费:unitPrice(每次收费金额)
        按天按分钟收费 共用字段:freeTime(免收分钟)


  代码展示:

<template>
    <avue-crud :option="option" :data="data" :page.sync="page" v-model="form" ref="crud" @search-change="searchChange" @search-reset="searchReset" @current-change="currentChange" @size-change="sizeChange" @row-save="rowSave" @row-del="rowDel">
    </avue-crud>
</template>

<script>
  import API from '@/components/common/Api';
  export default {
    data() {
      return {
        /* data:[]后端获取到的数据列表。option表格配置项.form 表单*/
        data: [],
        page: {
          total: 0, //总页码
          pageNo: 1, //页码
          pageSize: 10 //分页条数
        },
        form: {
          carParkType: '',
          carParkTypeId: '',
          rulesDetail: '',
          rulesName: '',
        },
        query: {}, //搜索键值
        option: {
          size: 'mini', //表格大小 medium/small/mini
          index: true, //序号
          border: true,
          searchMenuSpan: 4, //栅格占据的列数
          labelWidth: 160,
          searchLabelWidth: 120,
          viewBtn: true, //查看详情按钮
          delBtn: true, //删除按钮
          stripe: true, //斑马纹
          align: 'center',
          column: [{
              label: '车场名称', //表头
              prop: 'carParkName', //键值
              disabled: true,
              rules: [{
                required: true,
                message: "请输入车场名称",
                trigger: "blur",
              }, ],
            }, {
              label: '规则名称', //表头
              prop: 'rulesName', //键值
              search: true, //是否搜索
              rules: [{
                required: true,
                message: "请输入规则名称",
                trigger: "blur",
              }, ],
            }, {
              label: '收费类型', //表头
              prop: 'chargeTypeId', //键值
              type: 'select',
              search: true, //是否搜索
              dicData: [],
              props: {
                label: "name",
                value: "id",
              },
              rules: [{
                required: true,
                message: "请选择收费类型",
                trigger: "blur",
              }, ],
              change: (e) => {
                this.onChangeType(e)
              }
            }, {
              label: '汽车类型', //表头
              prop: 'carTypeId', //键值
              search: true, //是否搜索
              type: 'select',
              dicData: [],
              props: {
                label: "carTypeName",
                value: "carTypeId",
              },
              rules: [{
                required: true,
                message: "请选择汽车类型",
                trigger: "blur",
              }, ],
            }, {
              label: '车牌颜色', //表头
              prop: 'carPlateColorId', //键值
              search: true, //是否搜索
              type: 'select',
              dicUrl: "/api/dictionary/selectByType?type=car_color_type",
              props: {
                label: "name",
                value: "id",
              },
              rules: [{
                required: true,
                message: "请选择车牌颜色",
                trigger: "blur",
              }, ],
            }, {
              label: '节假日是否免费', //表头
              prop: 'festivalsFree', //键值
              type: 'select',
              dicData: [{
                label: '是',
                value: 1
              }, {
                label: '否',
                value: 2
              }]
            }, {
              label: '规则详情', //表头
              prop: 'rulesDetail', //键值
              type: 'textarea',
              row: true,
              disabled: true,
            },
            // 收费规则共用字段
            {
              label: '免收分钟', //表头
              prop: 'freeTime', //键值
              type: 'number',
              min: 0,
              display: false,
              rules: [{ required: true,message:"请输入免收分钟",trigger: "blur"}],
            },
            // 按天收费
            {
              label: '每日最高金额', //表头
              prop: 'dayMaxPrice', //键值
              type: 'number',
              min: 0,
              display: false,
              rules: [{required: true,message:"请输入每日最高金额",trigger: "blur"}],
            },
            // 按分钟收费
            {
              label: '起步金额', //表头
              prop: 'startPrice', //键值
              type: 'number',
              min: 0,
              display: false,
              rules: [{required: true,message:"请输入起步金额",trigger: "blur"}],
            }, {
              label: '起步分钟', //表头
              prop: 'startTime', //键值
              type: 'number',
              min: 0,
              display: false,
              rules: [{required: true,message:"请输入起步分钟",trigger: "blur"}],
            }, {
              label: '超/分钟', //表头
              prop: 'dayUnitTime', //键值
              type: 'number',
              min: 0,
              display: false,
              rules: [{required: true,message:"请输入超时分钟",trigger: "blur"}],
            }, {
              label: '超/分钟 收费金额', //表头
              prop: 'dayUnitPrice', //键值
              type: 'number',
              min: 0,
              display: false,
              rules: [{required: true,message:"请输入超时分钟收费金额",trigger: "blur"}],
            },
            // 按次收费
            {
              label: '每次收费金额', //表头
              prop: 'unitPrice', //键值
              type: 'number',
              min: 0,
              display: false,
              rules: [{required: true,message:"请输入每次收费金额",trigger: "blur"}],
            },
          ]
        },
        dicData: [],
      }
    },
    mounted() {
      this.form.carParkId = +this.$route.query.id
      this.form.carParkName = this.$route.query.name
      this.onLoad()
      //获取汽车类型
      this.getcarTypeList()
    },
    methods: {
      //搜索 val为搜索对象 val{} done() 停止
      searchChange(val, done) {
        this.query = val
        this.onLoad()
        done()
      },
      //重置
      searchReset() {
        this.query = {}
        this.onLoad()
      },

      // 根据接口获取data数据
      async onLoad() {
        let params = {
          data: {
            ...this.query,
            carParkId: +this.$route.query.id || ''
          },
          pageNum: this.page.pageNo,
          pageSize: this.page.pageSize,
        }
        await API.getParkingFeeList(params).then(res => {
          if (res.data.code == 0) {
            this.data = res.data.data.list;
            this.page.total = res.data.data.total;
          } else {
            this.$message({
              type: 'error',
              message: res.data.msg
            });
          }
        })
      },

      // 分页条数
      sizeChange(val, done) {
        this.page.pageSize = val;
        this.onLoad();
        done();
      },
      // 分页选择
      currentChange(val) {
        this.page.pageNo = val;
        this.onLoad();
      },

      // 新增数据保存
      rowSave(form, done, loading) {
        API.getParkingFeeAdd(form).then(res => {
          if (res.data.code == 0) {
            done(form);
            this.onLoad()
          } else {
            this.$message({
              type: 'error',
              message: res.data.msg
            });
            done(form);
            this.onLoad()
          }
        })
      },
      // 删除
      rowDel(val) {
        this.$confirm('此操作将永久删除该数据, 是否继续?', '提示', {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            type: 'warning'
          }).then(() => {
            API.getParkingFeeDel(val.id).then(res => {
              if (res.data.code === 0) {
                this.onLoad()
              } else {
                this.$message({
                  type: 'error',
                  message: res.data.msg
                });
              }
            });
          }).catch(() => {});
      },

      //获取汽车类型 收费规则类型
      getcarTypeList() {
        API.getcarTypeInfo().then(res => {
          if (res.data.code === 0) {
            this.option.column[3].dicData = res.data.data;
          }
        })

        API.xhtp({
          method: "get",
          url: '/api/dictionary/selectByType?type=charge_type'
        }).then(res => {
          if (res.data.code === 0) {
            this.option.column[2].dicData = res.data.data;
          }
        })
      },
      //收费类型
      onChangeType(e) {
        //根据value值判断选中收费类型的规则详情
        e.column.dicData.forEach(item => {
          if (e.value === item.id) { //规则详情赋值
            this.form.rulesDetail = item.describe
          }
        })
       
        //根据value(id)值 判断是否展示列表
        if (e.value == 26) { // 按次收费
          this.option.column.forEach(item => {
            if (item.prop === 'unitPrice') {
              item.display = true
            } else if (item.prop === 'dayMaxPrice' || item.prop === 'freeTime' ||
              item.prop === 'startPrice' || item.prop === 'startTime' || item.prop === 'dayUnitTime' || item
              .prop === 'dayUnitPrice') {
              item.display = false
            }
          })
        } else if (e.value == 27) { // 按分钟收费
          this.option.column.forEach(item => {
            if (item.prop === 'freeTime' || item.prop === 'startPrice' || item.prop === 'startTime' || item
              .prop === 'dayUnitTime' || item.prop === 'dayUnitPrice') {
              item.display = true
            } else if (item.prop === 'dayMaxPrice' || item
              .prop === 'unitPrice') {
              item.display = false
            }
          })
        } else if (e.value == 28) { // 按天收费
          this.option.column.forEach(item => {
            if (item.prop === 'freeTime' || item.prop === 'dayMaxPrice') {
              item.display = true
            } else if (item.prop === 'startPrice' ||
              item.prop === 'startTime' || item.prop === 'dayUnitTime' || item.prop === 'dayUnitPrice' || item
              .prop === 'unitPrice') {
              item.display = false
            }
          })
        }
      },

    }
  }
</script>

<style>
</style>

实现步骤:

 1、我们先调收费类型接口 获取收费类型的数据,然后给收费类型中加一个change事件;

打印看看e里面的内容是什么。

由图可知,e里面有value值(实际上就是选中类型的Id)、一些数据,而我们真正需要的数据就是dicData数组里边的数据【describe(规则详情) 、name(收费类型)】


  2、将按次、按天、按分钟收费需要展示的字段都先定义在options中,给展示的字段一个默认的初始值(display 是否显示) display: false;我们就让他默认隐藏。


 3、写一个专门判断选中类型的方法,通过 e.value 来判断选中的那个收费类型从而进行判断,遍历option.column,修改对应的属性值的状态,是否显示或隐藏。


 4、在change事件中调用判断选中类型的方法,change: (e) => {  this.onChangeType(e) }

 5、测试是否有效果


!!!注意:一定要给设置字段初始值(display: 'false'),不然的话判断了显示与隐藏也没效果 


 效果图:

        按次收费

         按分钟收费

        按天收费 


 视频效果展示:

收费规则

vue实现select下拉显示隐藏功能
12-30
今日,怂怂就来说说,在项目刚遇到这么一个功能需求; 描述:当下拉选择不同的属性选项,需展示对应的内容界面; select下拉菜单如下: 当下拉选择【表结构变更】、即展示如下界面: 当下拉选择【接口变更】、即展示如下界面: 代码实现 vue.js: //定义一个select下拉菜单 <el-option label=接口变更 va
vuejs绑定数据到select,选择option数据后,同步改变下面一个输入框input
热门推荐
qq_21036015的博客
04-28 4万+
前言:应公司开发,某小功能的需要,所以初次接触到vuejs,摸索学习,还不熟练,只是简单分享一些公司开发遇到的一些问题,有不足的地方欢迎留言讨论。   一,问题描述: 【当前页面里有一个select + 一个input】 1.ajax请求后台数据,绑定到select下拉单选。 2.点击下拉框选中一栏数据,同时input从没有变成同步更新到选中的那一栏。 3.演示效果图
Vue + element ui 实现后台数据渲染到下拉框选项,同时将input下拉框联动,select选定之后,input显示对应的
Liuliu_x的博客
04-28 1万+
实现过程: 使用element 的select以及input输入框 <el-form-item label="Mid" prop="mid"> <el-select filterable v-model="form.mid" placeholder="请选择" > <el-option v-for="item in midList" :key="item.value" :label="item
vue用element两个下拉框连动
weixin_45098257的博客
04-15 2561
遇到了下拉框相连的,点第一个后,第二个出数据 注意::key="item.id"一般写id :label="item.paramterName" 下拉框显示数据 :value="item.stationName" 传过去得内容 v-model和:value一样的 v-model名字随意取,但是要到return下定义一把,传到后台的就是写 v-model的内容 @change=“Canshu()” 一定要写在第一个下拉框上 <span class="si_title"&gt
vue加element实现下拉框点击一行数据,文本显示并嵌套数据
qq_52959651的博客
08-02 1973
先看效果图 下拉框点击显示在文本 每点击下拉框,文本都将数据嵌套进去 监测运算符是否已存在,如果存在则不显示运算符并提醒 代码 <template> <div> <el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm" label-width="110px" class="demo-ruleForm"
Vue下拉框回显并默认选中随机问题
12-09
总之,解决Vue下拉框回显随机问题的关键在于保证数据加载的顺序,确保数据一致性,并充分利用Vue和Element UI提供的特性。通过调整请求顺序,保证数据的同步,以及正确设置和绑定数据,可以有效地避免此类问题的发生...
vue实现页面内容禁止选中功能,仅输入框和文本域可选
10-16
今天小编就为大家分享一篇vue实现页面内容禁止选中功能,仅输入框和文本域可选,具有很好的参考价,希望对大家有所帮助。一起跟随小编过来看看吧
Vue.js仿Select下拉框效果
10-15
Vue.js,为了实现一个仿Select下拉框的效果,我们可以自定义组件来达到这个目的。这个过程涉及到了Vue的组件系统、数据绑定、事件处理和条件渲染等核心概念。以下将详细介绍如何使用Vue.js创建这样一个仿Select...
vue+element+input+提取选中文字
05-12
textarea有大量数据,获得鼠标选中的部分数据
Vue实现输入框/选择列表内容更改,页面实时预览多个内容变化
qq_46119575的博客
06-22 4700
在各种前端页面,比如用户信息注册的页面,往往有多个输入框和多个选项列表。为了避免用户选错或者输入错误,可以在前端页面上实时将多个输入框内容拼接起来,显示到页面或者弹出的窗口,帮助用户核对、检查输入的内容是否有错,提高用户体验。本文介绍了在 Vue 如何实现用户输入多个内容或者选择多个选项列表,与多个内容拼接起来显示到页面上,实现实时预览的效果。
使用element-ui + vue2实现下拉菜单(多选)对其他控件的显示和隐藏
m0_59866133的博客
07-13 2400
使用element-ui + vue2实现下拉菜单(多选)对其他控件的显示和隐藏
vue】element-表单下拉框选中某个后,同步更新其他输入框
一个间歇性踌躇满志,持续性混吃等死的小菜鸟
03-11 851
一、实现的效果 jobName下拉框选择任意一个后,jobId同步变成对应的 二、实现 2.1、数据结构 1 jenkinsList : [ 2 { 3 "id":10, 4 "dictType":1, 5 "dictValue":"小程序1", 6 "extra":0, 7 "isDe...
vue 动态设置下拉框默认值
qq_61838643的博客
07-25 3576
下拉框默认值一般为第一个option,通过给select标签绑定v-model属性,改变其就可实现动态设置下拉框默认值。修改其为option的value,便可设置下拉框默认值,如 selectlevel:"普通用户",就有以下效果。最后通过各种方法修改selectlevel的就可以动态修改下拉框默认值啦。在data声明变量selectlevel。
(vue)循环input且对应修改
nyf_unknow的博客
08-11 1894
(vue)循环input且对应修改
vue3 实现选择输入框
weixin_45286211的博客
10-30 882
vue3 实现选择输入框 (带数据选择功能的输入框),这里用的vue3+nuxt(组件直接用)
vueelement-ui实现表单根据不同下拉框进行动态表单校验
m0_52263688的博客
04-01 2867
vueelement-ui实现表单根据不同下拉框进行动态表单校验 我们想实现的功能如下,请看效果: 话不多说我们上代码 html部分: <el-form :model="formInline" ref="formInline" :inline="true" :rules="rules" style="width: 600px;">
5.2Vue电商后台管理系统补充搜索功能:搜索栏变化时列表跟着变化
weixin_47505105的博客
03-24 699
Vue电商后台管理系统补充搜索功能:搜索栏变化时列表跟着变化
vue下拉框输入框的联动
weixin_44149505的博客
04-13 5452
基于element-UI的下拉框 <el-form-item label="保险公司" prop="insuranceCompanyName" min-width="130"> <el-select v-model="formData.insuranceCompanyName" @change="companyChange" clearable placeho...
uniapp vue2 搜索下拉框
最新发布
11-15
以下是uniapp vue2实现搜索下拉框的方法: 1.在template添加一个输入框和一个下拉框,使用v-model绑定输入框下拉框显示状态: ```html <template> <div> <input type="text" v-model="searchText" @input="handleInput"> <ul v-show="showList"> <li v-for="(item, index) in dataList" :key="index" @click="handleSelect(item)"> {{ item }} </li> </ul> </div> </template> ``` 2.在script定义data和methods: ```javascript <script> export default { data() { return { dataList: ['apple', 'banana', 'orange', 'pear'], // 下拉框数据 showList: false, // 是否显示下拉框 searchText: '' // 输入框 } }, methods: { handleInput() { // 输入框输入时触发 this.showList = true // 显示下拉框 }, handleSelect(item) { // 选择下拉框的项时触发 this.searchText = item // 将选中的项赋输入框 this.showList = false // 隐藏下拉框 } } } </script> ``` 3.在style定义下拉框的样式: ```css <style> ul { list-style: none; padding: 0; margin: 0; border: 1px solid #ccc; } li { padding: 5px; cursor: pointer; } li:hover { background-color: #f2f2f2; } </style> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 如何解决 npm ERR! Cannot read properties of null (reading ‘pickAlgorithm‘)报错问题 13420
  • 如何解决 “node --max-old-space-size=10240“ 不是内部或外部命令,也不是可运行的程序或批处理文件。报错问题 10257
  • poi技术实现数据的导入与导出 6986
  • Vue中根据不同状态切换 Tabs 标签页内容 6308
  • 解决在vue中使用elementUI自定义校验及点击提交不生效问题 6271

分类专栏

  • vue 14篇
  • uniapp 5篇
  • uView 6篇
  • Idea
  • JavaBase 1篇
  • jQuery 6篇
  • Selenium 2篇
  • collection集合框架 3篇
  • MySQL 8篇
  • select绑值 1篇
  • poi 1篇
  • xml 1篇
  • Swing 1篇
  • JavaWeb 9篇
  • Java Server Pages 1篇
  • 静态网页 连接HTML和Java 1篇

最新评论

  • 如何解决 “node --max-old-space-size=10240“ 不是内部或外部命令,也不是可运行的程序或批处理文件。报错问题

    mssii: 不懂就问,删了重新npm install不又继续爆内存了?

  • 学生管理系统 前后端分离项目【简约版】

    收集光芒361: 大神,求源码

  • vue中实现PDF文件流预览

    明思齐: Thank you for your appreciation of this article.表情包

  • vue中实现PDF文件流预览

    征途黯然.: This vue中实现PDF文件流预览 article is truly great and very insightful.

  • 如何解决 “node --max-old-space-size=10240“ 不是内部或外部命令,也不是可运行的程序或批处理文件。报错问题

    一奕: "dev": "node --max_old_space_size=4096 node_modules/@vue/cli-service/bin/vue-cli-service.js serve",能解决

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • vue中实现PDF文件流预览
  • 据房间Id是否存在,判断当前房间是否到期且实时更改颜色
  • vue中实现数字+英文字母组合键盘
2023年28篇
2022年58篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司辽宁关键词排名报价伊春网站优化公司百度贴吧关键词排名引流昆山网站搜索优化企业关键词排名软件适合火25星郑州官网关键词搜索排名代理优化网站相信大将军22马鞍山关键词排名推广福建网站优化代理关键词排名云检索软件南阳网站优化推广方案淘宝关键词排名多久会变网站子域名在在百度优化胶州网站优化做网站排名优化是怎么回事隆回网站优化代发seo关键词排名应用易速达榆林网站seo优化方案绍兴网站seo推广优化网站速度优化方案网站排名优化太金苹果实力糹怎么关键词快速排名推广网站优化最好的方法龙泉网站自然优化网站建设能优化吗优化网站降权怎么处理网站自然优化电话前端网站内部优化夏邑专业网站关键词优化价格南京seo网站排名优化歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化