当前位置: 首页 > news >正文

【原创】解决vue-element-plus-admin无法实现下拉框动态控制表单功能,动态显隐输入框

前言

目前使用vue-element-plus-admin想要做一个系统定时任务功能,可以选择不同的定时任务类型,比如使用cron表达式、周期执行、指定时间执行等。每种类型对应不同的输入框,需要动态显隐输入框才行,但是这个vue-element-plus-admin很顽固啊,表单貌似初始化后就改不了了,作为一名Java后端工程师只能拼命钻研这个框架了,最终也是解决了这个问题。

 GitHub上也有人在项目里问同样的问题,作者也没给回复,那只能我自己来了

前端页面:选择不同循环类型显示不同的输入框

获取当前的formData

既然下拉框改了,那我form中的数据肯定发生了变化,那我将这个数据通过下拉选的onChange方法重新获取一下不就行了

定义formDataRef,并在下拉选改变时重新获取

const formDataRef = ref(getFormData())

const schema = reactive<FormSchema[]>([
  {
    field: 'cycleType',
    label: '循环类型',
    component: 'Select',
    componentProps: {
      placeholder: '请选择循环类型',
      clearable: true,
      options: [
        {
          label: '指定时间',
          value: 10
        },
        {
          label: '循环执行',
          value: 20
        },
        {
          label: 'cron表达式',
          value: 30
        }
      ],
      onChange: (value: number) => {
        formDataRef.value = getFormData()
      }
    }
  }
])

 其中getFormData()是useForm()中formMethods中的方法

监听formDataRef的变化

目前这个formDataRef是套了几层的东西,没法直接用,我这边又定义了一个realFormData,用于解包一层formDataRef

const formDataRef = ref(getFormData())
const realFormData = ref({})
watch(
  () => formDataRef,
  (newVal) => {
    newVal.value.then((res) => {
      realFormData.value = res
    })
  },
  {
    immediate: true,
    deep: true
  }
)

将监听到新的formDataRef的值赋值给realFormData,这样终于算是可以直接用了,后面不管有多少个下拉框,直接用realFormData比较就行了。

输入框动态计算是否隐藏

最后就是显隐输入框了,这里采用动态计算remove的值来达成这个功能

  {
    field: 'cron',
    label: 'cron表达式',
    component: 'Input',
    componentProps: {
      placeholder: '请输入cron表达式',
      clearable: true
    },
    remove: computed(() => {
      return realFormData.value.cycleType !== 30
    })
  }

例如上面的cron表达式输入框,我通过computed计算属性来判断这个输入框是否显示,目前只有cycleType为30才能显示出这个输入框。

实现效果

结语

这个vue-element-plus-admin对于用户比较复杂的需求有点难以招架,就这么一个较为简单的需求我这个后端程序猿就搞了好久,好在还是解决了

相关文章:

  • 解释下SpringBoot中的服务、依赖项、微服务、分布式的概念和关系
  • error: conflicting types for ‘SSL_SESSION_get_master_key’
  • 笔试题笔记#4、5 记录划水过程
  • 11苍穹外卖之Apache ECharts(数据可视化图表、后端传数据)
  • 批量修改mysql字符串字段子字符串
  • PhotoShop中创建窗口使用对应按钮创建对应图层简单示例
  • Linux 设置静态IP
  • 01什么是DevOps
  • JVM组成
  • 学习总结三十三
  • 如果需要保护多个域名怎么办?
  • 基于C++实现的(控制台)植物大战僵尸游戏(高级程序设计)
  • 大预言模型|微调大预言模型初探索(LLaMA-Factory)(1)
  • Centos7安装Clickhouse单节点部署
  • 深度整理总结MySQL——Expalin指南(一)
  • 域森林基础及环境搭建
  • 美颜SDK技术深度解析:从滤镜算法到实时渲染优化
  • qt 事件的传递顺序
  • python学opencv|读取图像(六十六)使用cv2.minEnclosingCircle函数实现图像轮廓圆形标注
  • 《战神:诸神黄昏》游戏闪退后提示弹窗“d3dx9_43.dll缺失”“找不到d3dx11_43.d”该怎么处理?
  • 王毅谈中拉命运共同体建设“五大工程”及落实举措
  • 习近平出席中国-拉美和加勒比国家共同体论坛第四届部长级会议开幕式
  • 飙升至熔断,巴基斯坦股市两大股指收盘涨逾9%
  • 书法需从字外看,书法家、学者吴本清辞世
  • 中国一直忽视欧盟经贸问题关切?外交部:事实证明中欧相互成就,共同发展
  • 新疆交通运输厅厅长西尔艾力·外力履新吐鲁番市市长候选人