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规范来写即可实现效果!!!!

相关推荐
weixin_457885824 分钟前
JavaScript智能对话机器人——企业知识库自动化
开发语言·javascript·自动化
慕斯策划一场流浪32 分钟前
fastGPT—nextjs—mongoose—团队管理之团队列表api接口实现
开发语言·前端·javascript·fastgpt env文件配置·fastgpt团队列表接口实现·fastgpt团队切换api·fastgpt团队切换逻辑
cypking1 小时前
解决 axios get请求瞎转义问题
vue.js
向阳2561 小时前
SpringBoot+vue前后端分离整合sa-token(无cookie登录态 & 详细的登录流程)
java·vue.js·spring boot·后端·sa-token·springboot·登录流程
艾克马斯奎普特1 小时前
Vue.js 3 渐进式实现之响应式系统——第一节:系列开篇与响应式基本实现
vue.js
梅子酱~1 小时前
Vue 学习随笔系列二十二 —— 表格高度自适应
javascript·vue.js·学习
你的人类朋友1 小时前
JS严格模式,启动!
javascript·后端·node.js
Carlos_sam2 小时前
OpenLayers:如何控制Overlay的层级?
前端·javascript
莫循瑾木2 小时前
Vue3 Composition API 完全指南
前端·vue.js·前端工程化