使用vue3+ts+vite从零开始搭建bolg(五):layout(持续更新中)

五、layout搭建

5.1静态搭建

在src下创建如图文件夹

这里用logo举例,在scripts里export

javascript 复制代码
  <script lang="ts">
  export default {
    name: 'Logo',
  }
  </script>

然后在layout里引入

javascript 复制代码
//引入左侧菜单顶部用户信息
import Logo from './logo/index.vue'

接着直接使用

javascript 复制代码
<!-- 顶部用户信息 -->
      <Logo class="logo"></Logo>

以此类推,完成layout的静态搭建

5.2动态菜单

首先按照上述方法引入菜单

javascript 复制代码
<el-menu
        text-color="white"
        background-color="#001529"
        :default-active="$route.path"
        :collapse="LayOutSettingStore.fold ? true : false"
      >
        <Menu class="menu"></Menu>
</el-menu>

然后把菜单放入userStore里

javascript 复制代码
import { constantRoute } from '@/router/routes'

state: () => {
    return {
      token: GET_TOKEN(),
      username: '',
      menuRoutes:constantRoute,
    }
  },

再在Menu里,通过prop传到子组件

javascript 复制代码
<Menu :menuList="userStore.menuRoutes" class="menu"></Menu>

//引入用户相关的小仓库
import useUserStore from '../store/modules/user'
let userStore = useUserStore()

在menu的index.vue,定义并遍历

javascript 复制代码
<template>
    <div>
        <template v-for="item in menuList" :key="item.path">
            
        </template>
    </div>
</template>


defineProps(['menuList'])
没有子路由

即路由表里没有子路由

javascript 复制代码
<!--没有子路由-->
      <template v-if="!item.children">
        <el-menu-item
          v-if="!item.meta.hidden"
          :index="item.path"
          @click="goRoute"
        >
          <el-icon>
            <component :is="item.meta.icon"></component>
          </el-icon>
          <template #title>
            <span>{{ item.meta.title }}</span>
          </template>
        </el-menu-item>
      </template>

页面跳转goRoute方法

javascript 复制代码
import { useRouter } from 'vue-router'

let $router = useRouter()
const goRoute = (vc: any) => {
  $router.push(vc.index)
}
有子路由但是只有一个
javascript 复制代码
<!-- 有子路由但是只有一个的 -->
      <template v-if="item.children && item.children.length == 1">
        <el-menu-item
          v-if="!item.children[0].meta.hidden"
          :index="item.children[0].path"
          @click="goRoute"
        >
          <el-icon>
            <component :is="item.children[0].meta.icon"></component>
          </el-icon>
          <template #title>
            <span>{{ item.children[0].meta.title }}</span>
          </template>
        </el-menu-item>
      </template>
有子路由但是子路由大于一

采用递归的方法

javascript 复制代码
      <el-sub-menu
        :index="item.path"
        v-if="item.children && item.children.length > 1"
      >
        <template #title>
          <el-icon>
            <component :is="item.meta.icon"></component>
          </el-icon>
          <span>{{ item.meta.title }}</span>
        </template>
        <Menu :menuList="item.children"></Menu>
      </el-sub-menu>
相关推荐
这里有鱼汤16 分钟前
miniQMT下载历史行情数据太慢怎么办?一招提速10倍!
前端·python
用户214118326360244 分钟前
dify案例分享-免费玩转 AI 绘图!Dify 整合 Qwen-Image,文生图 图生图一步到位
前端
IT_陈寒1 小时前
Redis 性能翻倍的 7 个冷门技巧,第 5 个大多数人都不知道!
前端·人工智能·后端
mCell8 小时前
GSAP ScrollTrigger 详解
前端·javascript·动效
gnip8 小时前
Node.js 子进程:child_process
前端·javascript
excel11 小时前
为什么在 Three.js 中平面能产生“起伏效果”?
前端
excel12 小时前
Node.js 断言与测试框架示例对比
前端
天蓝色的鱼鱼13 小时前
前端开发者的组件设计之痛:为什么我的组件总是难以维护?
前端·react.js
codingandsleeping13 小时前
使用orval自动拉取swagger文档并生成ts接口
前端·javascript
石金龙14 小时前
[译] Composition in CSS
前端·css