vue菜单

1、创建组件 TreeMenu

html 复制代码
<template>
	<template v-for="item in menuTree" :key="item._id">


		<el-sub-menu v-if="item.children && item.children.length > 0" :key="item._id" :index="item.name">
			<template #title>
				<el-icon>
					<component class="icons" :is="item.meta.icon"></component>
				</el-icon>
				<!-- <component class="icons"  :is="item.icon" style="font-size: 5px; " width="20"></component> -->
				<span>{{ item.meta.title }}</span>
			</template>
			<el-menu-item-group>

				<tree-menu :menuTree="item.children" />
			</el-menu-item-group>

		</el-sub-menu>

		<!-- v-else-if="item.ismenu == 1"  -->
		<el-menu-item v-else :index="item.name" @click="clickMenu(item)" style="">
			<el-icon>
				<component class="icons" :is="item.meta.icon"></component>
			</el-icon>
			<!--  -->
			<span>{{ item.meta.title }}</span>
		</el-menu-item>
	</template>
</template>

<script>
export default {
	name: 'TreeMenu',
	props: {
		menuTree: {
			type: Array,
			default: () => []
		}
	},
	methods: {
		//点击把菜单的名字传出去
		clickMenu(val) {
			// alert(1);
			this.$store.commit("pushtags", val)

		}
	}

}
</script>
 <style>

.el-menu-item,.el-menu-item{
  width: 230px;
}</style>

2、conf.json 菜单数据

json 复制代码
{
    "code": 1,
    "msg": "成功",
    "time": 1683615337,
    "data": {
        "config": {
            "site_name": "real-tinke",
            "beian": "备案",
            "configgroup": [],
            "mail_type": "",
            "mail_smtp_host": "q",
            "mail_smtp_port": "",
            "mail_smtp_user": "",
            "mail_smtp_pass": "",
            "mail_verify_type": "1",
            "mail_from": "",
            "": "备案2"
        },
        "menu": [
            {
                "id": 1,
                "pid": 0,
                "name": "/welcome",
                "title": "控制台",
                "remark": "",
                "ismenu": 1,
                "createtime": 1491635035,
                "updatetime": 1652348263,
                "weigh": 9999,
                "status": "1",
                "apipath": "dashboard\/index",
                "icon": "user-filled",
                "component": 0,
                "menuCode": 0,
                "spacer": "",
                "childlist": []
            },
            {
                "id": 2,
                "pid": 0,
                "name": "general",
                "title": "常规管理",
                "remark": "",
                "ismenu": 1,
                "createtime": 1491635035,
                "updatetime": 1491635035,
                "weigh": 0,
                "status": "1",
                "apipath": "0",
                "icon": "user-filled",
                "component": 0,
                "menuCode": 0,
                "spacer": "",
                "childlist": [
                    {
                        "id": 3,
                        "pid": 2,
                        "name": "config",
                        "title": "配置",
                        "remark": "",
                        "ismenu": 1,
                        "createtime": 1491635035,
                        "updatetime": 1491635035,
                        "weigh": 0,
                        "status": "1",
                        "apipath": "general\/Configs\/index",
                        "icon": "user-filled",
                        "component": 0,
                        "menuCode": 0,
                        "spacer": " ├",
                        "childlist": []
                    },
                    {
                        "id": 7,
                        "pid": 2,
                        "name": "profile",
                        "title": "个人信息",
                        "remark": "",
                        "ismenu": 1,
                        "createtime": 1491635035,
                        "updatetime": 1491635035,
                        "weigh": 0,
                        "status": "1",
                        "apipath": "general\/profile\/index",
                        "icon": "user-filled",
                        "component": 0,
                        "menuCode": 0,
                        "spacer": " ├",
                        "childlist": []
                    },
                    {
                        "id": 9,
                        "pid": 2,
                        "name": "database",
                        "title": "数据库列表",
                        "remark": "",
                        "ismenu": 1,
                        "createtime": 1491635035,
                        "updatetime": 1491635035,
                        "weigh": 0,
                        "status": "1",
                        "apipath": "general\/database\/index",
                        "icon": "user-filled",
                        "component": 0,
                        "menuCode": 0,
                        "spacer": " └",
                        "childlist": []
                    }
                ]
            } 
        ],
        "getUserinfo": {
            "id": 1,
            "group_id": 1,
            "username": "admin",
            "nickname": "极梦测试1",
            "password": "8f72fa6ae8f467ec362d24c437b0fbef",
            "salt": "ltcuEk",
            "email": "admin@qq.com",
            "mobile": "18354393242",
            "avatar": "http:\/\/real-think.jmwl51.com\/storage\/upload\/20220511\/e9ccc0994c0bb8f40f4483304c3f6dc2.jpg",
            "level": 1,
            "gender": 0,
            "birthday": "1996-02-01",
            "bio": "",
            "money": "0.00",
            "score": 0,
            "successions": 1,
            "maxsuccessions": 5,
            "prevtime": 1652851903,
            "logintime": 1683614107,
            "loginip": "27.209.133.148",
            "loginfailure": 0,
            "joinip": "47.103.65.214",
            "jointime": 1631927605,
            "createtime": 1631927605,
            "updatetime": 1632638617,
            "token": "",
            "status": "1",
            "verification": "",
            "group": {
                "id": 1,
                "name": "默认组",
                "rules": "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55",
                "createtime": 1491635035,
                "updatetime": 1652824082,
                "status": "1"
            }
        }
    }
}

3、引用组件

html 复制代码
<template>
  <div class="basic-layout" style="display: flex;">

    <!-- , isCollapse ? 'fold' : 'unfold' -->
    <el-aside :class="['nav']" ref="navmenuwin">

      <!-- 导航菜单 -->
      <el-menu :default-active="activeMenu" class="nav-menu" :router="true" :show-timeout="3000" :collapse="isCollapse">
        <!-- 系统logo -->
        <div class="logo">
          <img src="../assets/img/logo-small.png" />
          <span v-if="!isCollapse" style="display: block;width: 110px;white-space: nowrap;">{{ site.site_name }}</span>
        </div>
        <tree-menu :menuTree="menuTree" />
      </el-menu>

    </el-aside>
    <el-container class="content">

      <!-- 头部 -->
      <el-header>
        
      </el-header>
      <!-- 内容 -->
      <el-main>

       
      </el-main>

    </el-container>
  </div>
</template>

<script>

//   import confjson from "../cpmponets/framework/conf.json";
import confjson from "../components/framework/conf.json"; 
import TreeMenu from "../components/framework/TreeMenu.vue"; 
import { useRouter } from 'vue-router'
export default {
  name: "home",
  components: { TreeMenu, Topcrumb, confjson },
  data() {
    return {
      confjson,
      islogo: true,
      activeMenu: location.hash.slice(1),
      isCollapse: false,
      site: {},
      menuTree: [],
      userInfo: {},
      noticeCount: 0,
      isFullScreen: false,

    };
  },
  watch: {
    //监视路由,一开始就监视,获取routeName,来判断是否激活
    $route: {
      immediate: true,
      handler(val) {
        // this.routeName=val.name
        console.log(val);
        this.activeMenu = val.name;

      }
    }
  },
  mounted() {
    this.getNoticeCount();
    this.getMenuList();
    const Router = useRouter()
    this.menuTree = Router.options.routes[0].children;
    console.log(this.menuTree)
  },
  methods: {
    toggleNav() {
      this.isCollapse = !this.isCollapse;
    },

    async getNoticeCount() {

      this.noticeCount = 5;
    },
    async getMenuList() {
      if (this.menuTree.length === 0) {
        try {
          const res = this.confjson.data
          console.log(res, "1111")
          // const res = await this.$api.getMenuList(); 
          this.userInfo = res.getUserinfo;
          // this.menuTree = res.menu; 
          this.site = res.config;
          this.$store.commit("pushtags", "")

          // this.$store.commit('changeMenuList',res.data.menu)
        } catch (error) {
          console.error(error);
        }
      }
    },




  },
};
</script>
  
 
 

备注:可以加个判断;是网页还是vue内部路径

相关推荐
钊兵1 小时前
数据库驱动免费下载(Oracle、Mysql、达梦、Postgresql)
数据库·mysql·postgresql·oracle·达梦·驱动
祈澈菇凉2 小时前
Webpack的基本功能有哪些
前端·javascript·vue.js
小纯洁w2 小时前
Webpack 的 require.context 和 Vite 的 import.meta.glob 的详细介绍和使用
前端·webpack·node.js
想睡好3 小时前
css文本属性
前端·css
qianmoQ3 小时前
第三章:组件开发实战 - 第五节 - Tailwind CSS 响应式导航栏实现
前端·css
zhoupenghui1683 小时前
golang时间相关函数总结
服务器·前端·golang·time
White graces3 小时前
正则表达式效验邮箱格式, 手机号格式, 密码长度
前端·spring boot·spring·正则表达式·java-ee·maven·intellij-idea
庸俗今天不摸鱼3 小时前
Canvas进阶-4、边界检测(流光,鼠标拖尾)
开发语言·前端·javascript·计算机外设
bubusa~>_<3 小时前
解决npm install 出现error,比如:ERR_SSL_CIPHER_OPERATION_FAILED
前端·npm·node.js
yanglamei19624 小时前
基于Python+Django+Vue的旅游景区推荐系统系统设计与实现源代码+数据库+使用说明
vue.js·python·django