根据级联选择器选择后自动会出现相对应的表单结构

文章描述了一个使用Vue.js开发的项目中,如何通过el-cascader级联选择器控制财务信息表单的显示与隐藏。当用户选择不同的业务类型时,对应的财务表单项会动态加载或消失。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果是这样的,选择业务后就会在财务信息里出现相应的表单,删除选择的业务,表单就会消失

代码:

 <fieldset>
        <legend>业务类型</legend>
        <el-form-item label="类型">
          <el-cascader @change="change" :props="props" :options="options" :show-all-levels="false" ref="cascaderArr"
            v-model="formData.ywlx"></el-cascader>
        </el-form-item>
  </fieldset>
  <fieldset>
        <legend>财务信息</legend>
        <el-form-item v-for="(item, index) in formData.member" :key="index" :label="item.name">
          <el-input v-model="item.amount"></el-input>
        </el-form-item>
  </fieldset>

<script>
   export default {
       data(){
         return{
             props: { multiple: true, value: "id", label: "name", emitPath: false },
             //业务数组
             options: [],
              formData: {
                  //业务
                  ywlx: [],
                  member: [],
           },
        }
     },
     methods:{
     //级联选择器
    change(val) {
      //判断是否为编辑
      if (this.id) {
        this.formData.member = [];
        this.$nextTick(() => {
          const checkedNode = this.$refs["cascaderArr"].getCheckedNodes();
          let array = checkedNode.filter(
            (item) => !item.data.hasOwnProperty("children")
          );
          let list= []
          array.forEach((res) => {
            list.push(res.data)
          });
          //过滤出相同的对象组成的新数组
          let a = this.memberEdit.filter(item => list.find(num => item.name == num.name))
          //过滤出不相同的对象组成的新数组
          let b = list.filter(item => !(this.memberEdit.map(num => num.name)).includes(item.name))
          //俩数组合并
          this.formData.member = a.concat(b)
        })
      } else {
        this.formData.member = [];
        this.$nextTick(() => {
          const checkedNode = this.$refs["cascaderArr"].getCheckedNodes();
          let array = checkedNode.filter(
            (item) => !item.data.hasOwnProperty("children")
          );
          array.forEach((res) => {
            this.formData.member.push(res.data);
          });
        });
      }
    },
     },
 mounted() {
    //判断是编辑还是新增
    if (this.$route.query.id !== undefined) {
      this.id = this.$route.query.id;
      getProject(this.$route.query.id).then((res) => {
        this.memberEdit = res.data.member;
        Object.assign(this.formData, res.data);
      });
    }
    //获取业务数组
    getBusiness().then((res) => {
      this.options = res.data;
    }),
      this.rest();
  },
   }
</script>

getBusiness是获取业务里面数据的数组,

getProject是编辑的接口,mounted是判断是否为编辑,然后将接口返回的数据在通过Object.assign给到formData,

change方法是判断是否为编辑,不是编辑就直接走下面的方法,是编辑的话考虑到联动效果,里面的name是后端返给的那个业务汉字名字,我当时是靠name来进行判断的,根据实际需求自行判断

props里面是一些配置项,请看官网组件介绍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值