树形菜单和卡片弹出的做法

该文展示了如何在Vue.js应用中实现树形菜单选择上级菜单,使用treeselect组件处理接口返回的数据,并转换成合适结构。同时,文章还涵盖了菜单类型的radiogroup选择以及图标小卡片的el-popover组件的使用,提供了图标选择功能。
摘要由CSDN通过智能技术生成

1、先来几张结果图

 2、树形菜单的实现代码

 <el-col :span="24">
                <el-form-item label="上级菜单" prop="parentId">
                  <!-- normalizer就是转换菜单数据结构,把这个对象的menuId转成id,menuName转成name类似的操作 -->
                  <treeselect
                    v-model="form.parentId"
                    :options="menuOptions"
                    :normalizer="normalizer"
                    :show-count="true"
                    placeholder="选择上级菜单"
                  />
                </el-form-item>
              </el-col>
              <!-- 这里定义不同菜单类型对应的label不一样,就可以进行点击的时候不同的操作 -->
              <el-col :span="24">
                <el-form-item label="菜单类型" prop="menuType">
                  <el-radio-group v-model="form.menuType">
                    <el-radio label="M">目录</el-radio>
                    <el-radio label="C">菜单</el-radio>
                    <el-radio label="F">按钮</el-radio>
                  </el-radio-group>
                </el-form-item>
              </el-col>

这里的menuOption实际上就是接口返回的数据处理成合适的结构

 相关事件代码:

/** 转换菜单数据结构 */
    normalizer(node) {
      if (node.children && !node.children.length) {
        delete node.children;
      }
      return {
        id: node.menuId,
        label: node.menuName,
        children: node.children
      };
    },

3、小卡片效果代码

              <!-- 图标小卡片弹窗的代码 -->
              <el-col :span="24" v-if="form.menuType != 'F'">
                <el-form-item label="菜单图标" prop="icon">
                  <!-- 这个就是小组件---弹出框 -->
                  <!-- placement="bottom-start"就是组件的出现位置 -->
                  <el-popover
                    placement="bottom-start"
                    width="460"
                    trigger="click"
                    @show="$refs['iconSelect'].reset()"
                  >
                    <!-- 写好的组件调用 -->
                    <IconSelect
                      ref="iconSelect"
                      @selected="selected"
                      :active-icon="form.icon"
                    />
                    <el-input
                      slot="reference"
                      v-model="form.icon"
                      placeholder="点击选择图标"
                      readonly
                    >
                      <!-- 图标显示的地方svg-icon  :icon-class="form.icon"动态绑定样式 如果有的话就是显示你选择的图标在首部 -->
                      <svg-icon
                        v-if="form.icon"
                        slot="prefix"
                        :icon-class="form.icon"
                        style="width: 25px"
                      />
                      <!-- 如果没有选择标签就是显示原始的样式即prefix首部放大镜图标,el-input__icon和slot是搭配使用的 -->
                      <i
                        v-else
                        slot="prefix"
                        class="el-icon-search el-input__icon"
                      />
                    </el-input>
                  </el-popover>
                </el-form-item>
              </el-col>

具体情况具体分析,提供一个参考哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值