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

news2024/11/15 10:54:52

大纲:

      🌳  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'),不然的话判断了显示与隐藏也没效果 


 效果图:

        按次收费

         按分钟收费

        按天收费 


 视频效果展示:

收费规则

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/757991.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BIO、NIO、AIO之间有什么区别

一、简介 在计算机中&#xff0c;IO 传输数据有三种工作方式&#xff0c;分别是&#xff1a; BIO、NIO、AIO。 在讲解 BIO、NIO、AIO 之前&#xff0c;我们先来回顾一下这几个概念&#xff1a;同步与异步&#xff0c;阻塞与非阻塞。 同步与异步的区别 同步就是发起一个请求后…

“从草图到魔法:使用ClipDrop - Stable Doodle将你的想象变成真实图像“

ClipDrop - Stable Doodle 是一款将手绘草图转换为真实图像的工具&#xff0c;您可以按照以下步骤使用它&#xff1a; 1、打开https://clipdrop.co/stable-doodle 2、使用鼠标画一幅画 3、输入提示词&#xff0c;比如&#xff1a;mikey mouse 按“generate”按钮 4、结果

春秋云境—Initial

文章目录 春秋云境—Initial一、前期准备1、靶标介绍2、相关设备 二、WEB渗透1、ThinkPHP RCE&#xff08;1&#xff09;、打开网站&#xff08;2&#xff09;、检测漏洞 2、蚁剑连接3、sudo提权4、frpc代理5、fsacn扫描 三、后渗透1、信呼OA RCE&#xff08;1&#xff09;、1.…

Android 14适配

Google I/O 2023 发布的 Android beta2 &#xff0c;Android 14 将在2023年第三季度发布。Google Play 已经开始强制要求targetSdkVersion 33适配&#xff0c;所以 targetSdkVersion 34适配也是非常有必要的。 前台服务类型&#xff08;Foreground service types are required&…

4. 设计(黑盒)测试用例 (一) 等价类 边界值 判定表

本篇文章我们将详细介绍如何来测试用例。 1. 设计测试用例的基本要素 1.1 测试用例概念 测试用例&#xff08;Test Case&#xff09;是为了实施测试而向被测试的系统提供的一组集合。 1.2 测试用例要素 测试环境、测试步骤、测试数据、预期结果。 1.3 测试用例的重要性 提…

架构训练营学习笔记:4-1存储架构模式之数据库存储架构

一 数据库读写分离 适应场景&#xff1a;互联网读多写少。 原理&#xff1a;主机负责写&#xff0c;从机可以多个负责读取。数据主从做同步。 业务的写发给主机&#xff0c;读操作发给从机。 条件&#xff1a;1业务量增长 2 其他优化条件已处理&#xff08;索引优化、缓存&a…

Linux学习之环境变量、预定义变量和位置变量

环境变量是每个Shell打开就能获取到的变量&#xff0c;即一打开终端就已经初始化的变量。 显示环境变量 set、env和declare都可以查看变量的值。按照可以查看信息的范围从小到大是env<set<declare。 env只能显示全局变量。 set可以输出所有的变量&#xff0c;包括全局…

多数据源切换、读写分离-02

使用dynamic进行数据源切换、读写分离 特性 1、支持数据源分组 &#xff0c;适用于多种场景纯粹多库读写分离一主多从混合模式。 2、支持数据库敏感配置信息 加密 ENC()。 3、支持每个数据库独立初始化表结构schema和数据库database。 4、支持无数据源启动&#xff0c;支持懒加…

【已解决】pyecharts大屏点击Save Config没反应,无法保存chart_config.json

在使用pyecharts开发大屏时&#xff0c;临时大屏拖拽好之后&#xff0c;点击Save Config之后没反应&#xff0c;没有弹出json保存对话框。 报错现象&#xff1a; 利用Python的pyecharts库的Page组件开发可视化大屏时&#xff0c;无法点击Save Config按钮。 问题原因&#xff1…

sonarqube安装并配置CI/CD

sonarqube安装使用 目录 简介效果(配置在下面查看)官方文档环境准备配置compose-sonarqube.yml启动登录集成Gitlab 获取私钥sonarqube配置gitlab查看项目 配置 手动方式Gitlab CI/CD 自动检测 简介 SonarQube是一个开源的代码质量管理平台&#xff0c;用于对代码进行静态代…

Kong简介

Kong 是一个开源的云原生 API 网关和服务网格&#xff0c;它提供了强大的流量控制、请求转发、日志记录、认证和授权等功能。 一、Kong Consumer Kong Consumer 是 Kong API 网关中的一个重要概念&#xff0c;它代表使用你的 API 的最终用户或客户端。Consumer 的创建和配置可…

Spring AOP知识点详解

Spring AOP是 Spring最核心的能力&#xff0c;那到底什么是AOP呢&#xff0c;今天了不起带大家了解一下。 AOP是什么 AOP(Aspect Oriented Programming):面向切面编程&#xff0c;是OOP(面向对象编程)的一个延续&#xff0c;其和OOP一样&#xff0c;也是一种编程思想&#xff0…

在Linux下做性能分析3:perf

介绍 ftrace的跟踪方法是一种总体跟踪法&#xff0c;换句话说&#xff0c;你统计了一个事件到下一个事件所有的时间长度&#xff0c;然后把它们放到时间轴上&#xff0c;你可以知道整个系统运行在时间轴上的分布。 这种方法很准确&#xff0c;但跟踪成本很高。所以&#xff0…

有道云笔记迁移到自建服务器Joplin

当前有道云笔记各项业务开始逐渐向会员靠拢&#xff0c;如一开始不受限的多端同步现在非会员限制成了两个终端&#xff0c;估计以后会有越来越多的免费内容会逐渐的向会员转移&#xff0c;因此博主开始考虑自建服务器来搞一个云笔记服务端。 因博主已有黑群晖&#xff0c;并且有…

OK3588运行python程序对摄像头数据进行图像处理

OK3588运行python程序读取usb摄像头 硬件连接用工具测试验证摄像头工作正常python 读取usb摄像头并进行图像处理 硬件连接 把usb摄像头插入HOST的usb接口。 在串口终端运行 sudo v4l2-ctl --list-devices 如下图 当前的usb设备是 /dev/video74 用工具测试验证摄像头工作正常…

基于深度学习的高精度80类动物目标检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度80类动物目标检测识别系统可用于日常生活中或野外来检测与定位80类动物目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的80类动物目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YO…

#4. 背包

4030: 背包 题目内容 有 n n n 个物品&#xff0c;每个物品有大小 w i w_i wi​ 和价值 v i v_i vi​&#xff0c;再给定一个整数 k k k 和背包大小 m m m&#xff0c;对每个 1 ≤ i ≤ n − k 1 1 \le i \le n - k 1 1≤i≤n−k1&#xff0c;求出如果只能选择 i i …

Linux中makefile

第一个版本的makefile Makefile的依赖是从上至下的&#xff0c;换句话说就是目标文件是第一句里的目标&#xff0c;如果不满足执行依赖&#xff0c;就会继续向下执行。如果满足了生成目标的依赖&#xff0c;就不会再继续向下执行了。 Make会自动寻找依赖条件所用到的文件&…

uni-app的H5版本下载跨域问题

前端能正常访问图片&#xff0c;但无法下载 因为路径不经过业务代码&#xff0c;所以需要在nginx配置跨域 代码&#xff1a; add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods GET, POST, OPTIONS; add_header Access-Control-Allow-H…