Vue2结合el-cascader级联下拉获取当前选中的所有级别的id和label

实现效果如下:

需求:

1、要给后端大佬传递当前选中级别所有父级以及祖籍的id和label。(不仅仅传递最后一级哦)

2、其次要求按后端大佬给的传递字段进行拼接,如 第一级 使用level1Id和level1Name,其他依次类推。。。

3、虽然搞不懂为啥要这样传数据,但是后端要求这样的格式,苦恼~~

实现代码如下:

这里写了个简单案例效果

javascript 复制代码
<template>
  <div>
 //:show-all-levels="false" 只显示最后一级
    <el-cascader
      v-model="selectedOptions"
      :options="options"
      :props="{ multiple: true }"
      @change="handleChange"
    />
    <el-button @click="save">保存</el-button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selectedOptions: [],
      flatSelectedOptions: [],
      options: [
        {
          value: 'zhinan',
          label: '指南',
          children: [
            {
              value: 'shejiyuanze',
              label: '设计原则',
              children: [
                { value: 'yizhi', label: '一致' },
                { value: 'fankui', label: '反馈' },
                { value: 'xiaolv', label: '效率' },
                { value: 'kekong', label: '可控' }
              ]
            },
            {
              value: 'daohang',
              label: '导航',
              children: [
                { value: 'cexiangdaohang', label: '侧向导航' },
                { value: 'dingbudaohang', label: '顶部导航' }
              ]
            }
          ]
        },
        {
          value: 'zujian',
          label: '组件',
          children: [
            {
              value: 'basic',
              label: 'Basic',
              children: [
                { value: 'layout', label: 'Layout 布局' },
                { value: 'color', label: 'Color 色彩' },
                { value: 'typography', label: 'Typography 字体' },
                { value: 'icon', label: 'Icon 图标' },
                { value: 'button', label: 'Button 按钮' }
              ]
            }
          ]
        }
      ]
    }
  },
  methods: {
    handleChange(value) {
      this.flatSelectedOptions = value.map(item => {
        return this.flattenOption(item, this.options)
      })
    },
    flattenOption(path, options) {
      const result = {}
      path.forEach((value, index) => {
        const option = options.find(opt => opt.value === value)
        if (option) {
          const key = `level${index + 1}Id`  //这里换成后端约定好的字段Id
          const labelKey = `level${index + 1}Name` //这里换成后端约定好的字段Name
          result[key] = value
          result[labelKey] = option.label
          options = option.children // 递归查找下一级选项
        }
      })
      return result
    },
    save() {
    // 当点击保存按钮时,可以拿到处理后的数据
      console.log('处理后的数据:', this.flatSelectedOptions)
    }
  }
}
</script>

这样就大功告成了,和后端交流了俩小时~~~还是妥协了哈

vue3使用方法同理哈,按vue3规范来写即可实现效果!!!!

相关推荐
摘星编程1 小时前
OpenHarmony环境下React Native:自定义useTruncate文本截断
javascript·react native·react.js
Duang007_1 小时前
【LeetCodeHot100 超详细Agent启发版本】字母异位词分组 (Group Anagrams)
开发语言·javascript·人工智能·python
有来技术1 小时前
Spring Boot 4 + Vue3 企业级多租户 SaaS:从共享 Schema 架构到商业化套餐设计
java·vue.js·spring boot·后端
东东5162 小时前
学院个人信息管理系统 (springboot+vue)
vue.js·spring boot·后端·个人开发·毕设
2601_949868363 小时前
Flutter for OpenHarmony 电子合同签署App实战 - 主入口实现
开发语言·javascript·flutter
m0_748229993 小时前
Vue2 vs Vue3:核心差异全解析
前端·javascript·vue.js
xiaoxue..3 小时前
React 手写实现的 KeepAlive 组件
前端·javascript·react.js·面试
摘星编程3 小时前
在OpenHarmony上用React Native:自定义useHighlight关键词高亮
javascript·react native·react.js
2601_949613024 小时前
flutter_for_openharmony家庭药箱管理app实战+用药知识详情实现
android·javascript·flutter
一起养小猫4 小时前
Flutter for OpenHarmony 实战 表单处理与验证完整指南
android·开发语言·前端·javascript·flutter·harmonyos