comprehensive_tools之添加菜单

文章目录

  • 安装 sass sass-loader
  • 新建Layout、styles
  • 修改配置文件
    • App.vue
    • 修改 main.css
    • main.ts
    • 删除components目录下的所有文件
    • 在router文件夹中新建routers.ts
    • 修改router/index.ts
    • 修改vite.config.ts
    • AboutView.vue、ContactView.vue、HomeView.vue
      • AboutView.vue
      • ContactView.vue
      • HomeView.vue
  • 效果

安装 sass sass-loader

npm install -D sass sass-loader

新建Layout、styles

在src目录下新建Layout文件夹,在该文件夹下新建 index.vue
内容:

<script setup lang="ts">
import { useRouter, useRoute } from 'vue-router'

// 获取当前路由和导航
const router = useRouter()
const route = useRoute()

// 获取当前激活的路由
const activeRoute = route.path

// 动态过滤路由,只显示带有 `meta.title` 的路由
const filteredRoutes = router.options.routes.filter(r => r.meta?.title)

// 导航到目标路由
const navigateTo = (path: string) => {
  router.push(path)
}
</script>

<template>
  <div class="layout-container">
    <!-- 头部区域 -->
    <el-header height="50px" class="layout-header">
      <!-- 减小头部高度 -->
      <div class="header-content">
        <div class="logo">My App</div>
        <!-- 动态生成菜单项 -->
        <el-menu mode="horizontal" :default-active="activeRoute" class="menu">
          <el-menu-item
            v-for="route in filteredRoutes"
            :key="route.path"
            :index="route.path"
            @click="navigateTo(route.path)"
          >
            {{ route.meta?.title || route.name }}
          </el-menu-item>
        </el-menu>
      </div>
    </el-header>

    <!-- 内容区域 -->
    <el-main class="layout-content">
      <slot />
    </el-main>

    <!-- 页脚区域 -->
    <el-footer height="20px" class="layout-footer">
      © 2024 My App. All rights reserved.
    </el-footer>
  </div>
</template>

<style scoped lang="scss">
.layout-container {
  height: calc(100vh - 8px);
  display: flex;
  flex-direction: column;

  .layout-header {
    background-color: #ffffff;
    color: white;
    padding: 0 20px;
    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
    line-height: 50px;

    .header-content {
      display: flex;
      justify-content: space-between;
      align-items: center;
      height: 100%;

      .logo {
        font-size: 18px;
        font-weight: 600;
        padding-left: 10px;
        color: aquamarine;
        margin-right: 10px;
      }

      .menu {
        flex-grow: 1;
        display: flex;
        justify-content: center; /* 水平居中对齐菜单 */
        font-size: 14px;
        height: 50px;
        border-bottom: none;

        .el-menu-item {
          padding: 0 15px;
        }
      }
    }
  }

  .layout-content {
    flex-grow: 1;
    padding: 20px;
  }

  .layout-footer {
    text-align: center;
    background-color: #f0f0f0;
    color: #909399;
  }
}
</style>

修改配置文件

App.vue

<script setup lang="ts">
import { RouterLink, RouterView } from 'vue-router'
import HelloWorld from './components/HelloWorld.vue'
</script>

<template>
  <header>
    <img
      alt="Vue logo"
      class="logo"
      src="@/assets/logo.svg"
      width="125"
      height="125"
    />

    <div class="wrapper">
      <HelloWorld msg="You did it!" />

      <nav>
        <RouterLink to="/">Home</RouterLink>
        <RouterLink to="/about">About</RouterLink>
      </nav>
    </div>
  </header>

  <RouterView />
</template>

<style scoped>
header {
  line-height: 1.5;
  max-height: 100vh;
}

.logo {
  display: block;
  margin: 0 auto 2rem;
}

nav {
  width: 100%;
  font-size: 12px;
  text-align: center;
  margin-top: 2rem;
}

nav a.router-link-exact-active {
  color: var(--color-text);
}

nav a.router-link-exact-active:hover {
  background-color: transparent;
}

nav a {
  display: inline-block;
  padding: 0 1rem;
  border-left: 1px solid var(--color-border);
}

nav a:first-of-type {
  border: 0;
}

@media (min-width: 1024px) {
  header {
    display: flex;
    place-items: center;
    padding-right: calc(var(--section-gap) / 2);
  }

  .logo {
    margin: 0 2rem 0 0;
  }

  header .wrapper {
    display: flex;
    place-items: flex-start;
    flex-wrap: wrap;
  }

  nav {
    text-align: left;
    margin-left: -1rem;
    font-size: 1rem;

    padding: 1rem 0;
    margin-top: 1rem;
  }
}
</style>

修改 main.css

@import './base.css';

#app {
  /* max-width: 1280px; */
  width: 100vw;
  margin: 0 auto;
  /* padding: 2rem; */
  font-weight: normal;
}

a,
.green {
  text-decoration: none;
  color: hsla(160, 100%, 37%, 1);
  transition: 0.4s;
  padding: 3px;
}

@media (hover: hover) {
  a:hover {
    background-color: hsla(160, 100%, 37%, 0.2);
  }
}

@media (min-width: 1024px) {
  body {
    display: flex;
    place-items: center;
  }

  #app {
    display: grid;
    /* grid-template-columns: 1fr 1fr; */
    padding: 0 2rem;
  }
}

main.ts

移动 main.css、base.css 至styles文件夹中

import './styles/main.css' // 引入全局样式文件,应用全局样式

import { createApp } from 'vue' // 从 Vue 中引入 createApp 函数,用于创建 Vue 应用实例
import { createPinia } from 'pinia' // 引入 Pinia,Pinia 是 Vue 3 的状态管理库
import ElementPlus from 'element-plus' // 引入 Element Plus 组件库
import 'element-plus/dist/index.css' // 引入 Element Plus 的全局样式文件
import App from './App.vue' // 引入根组件 App.vue,作为应用的根组件
import router from './router' // 引入 Vue Router 配置文件,管理应用的路由
import 'uno.css' // 引入 UnoCSS,一个 CSS 框架,用于快速开发 Vue 应用

// 创建 Vue 应用实例,将根组件 App 作为入口
const app = createApp(App)

// 使用 Element Plus 组件库
app.use(ElementPlus)

// 使用 Pinia 状态管理库
app.use(createPinia())

// 使用 Vue Router 进行路由管理
app.use(router)

// 将 Vue 应用挂载到 HTML 文件中的 id 为 `#app` 的 DOM 元素上
app.mount('#app')


删除components目录下的所有文件

在router文件夹中新建routers.ts

import { type RouteRecordRaw } from 'vue-router'
import HomeView from '@/views/HomeView.vue'

const routes: Array<RouteRecordRaw> = [
  {
    path: '/',
    name: 'home',
    component: HomeView,
    meta: { title: 'Home' }, // 添加 meta 信息
  },
  {
    path: '/about',
    name: 'about',
    component: () => import('@/views/AboutView.vue'),
    meta: { title: 'About' }, // 添加 meta 信息
  },
  {
    path: '/contact',
    name: 'contact',
    component: () => import('@/views/ContactView.vue'),
    meta: { title: 'Contact' }, // 添加 meta 信息
  },
]

export default routes

修改router/index.ts

import { createRouter, createWebHistory } from 'vue-router'
import routes from './routes' // 导入 routes

// 创建 Vue Router 实例
const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL), // 基于 HTML5 history 模式
  routes, // 使用从 routes.ts 导入的路由配置
})

export default router

修改vite.config.ts

import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
// 自动配置
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
// Element Plus
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
// UnoCSS
import UnoCSS from 'unocss/vite'
// VueUse
import {
  VueUseComponentsResolver,
  VueUseDirectiveResolver,
} from 'unplugin-vue-components/resolvers'
// https://vite.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    vueJsx(),
    // UnoCSS
    UnoCSS(),
    // 自动导入 UI 库,页面直接使用
    AutoImport({
      resolvers: [ElementPlusResolver()],
      imports: ['vue', 'vue-router'], // 导入vue和vue-router
      dts: 'types/auto-imports.d.ts', // 生成自动导入类型声明文件
      dirs: [], // 自动导入的方法等
      vueTemplate: true,
    }),
    // 自动注册组件,页面直接使用
    Components({
      dirs: ['src/components/', 'src/Layout'], // 扫描的文件夹
      dts: 'types/components.d.ts', // 生成自动注册类型声明文件
      include: [/\.vue$/, /\.vue\?vue/, /\.md$/], // 匹配文件
      resolvers: [
        ElementPlusResolver(), // 自动导入 Element Plus
        VueUseComponentsResolver(), // 自动导入 VueUse
        VueUseDirectiveResolver(), // 自动导入 VueUse 的指令
      ], // 配置组件库的解析器
    }),
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url)),
    },
  },
})

AboutView.vue、ContactView.vue、HomeView.vue

AboutView.vue

<template>
  <div class="about">
    <h1>This is an about page</h1>
  </div>
</template>

<style>
@media (min-width: 1024px) {
  .about {
    height: 100%;
    display: flex;
    align-items: center;
  }
}
</style>

ContactView.vue

<template>
  <div class="about">
    <h1>This is an about contact</h1>
  </div>
</template>

<style>
@media (min-width: 1024px) {
  .about {
    min-height: 100vh;
    display: flex;
    align-items: center;
  }
}
</style>

HomeView.vue

<script setup lang="ts"></script>

<template>
  <main>阿斯顿萨</main>
</template>

效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/891196.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2014年国赛高教杯数学建模A题嫦娥三号软着陆轨道设计与控制策略解题全过程文档及程序

2014年国赛高教杯数学建模 A题 嫦娥三号软着陆轨道设计与控制策略 嫦娥三号于2013年12月2日1时30分成功发射&#xff0c;12月6日抵达月球轨道。嫦娥三号在着陆准备轨道上的运行质量为2.4t&#xff0c;其安装在下部的主减速发动机能够产生1500N到7500N的可调节推力&#xff0c;…

二、PyCharm基本设置

PyCharm基本设置 前言一、设置中文汉化二、设置代码字体颜色三、设置鼠标滚轮调整字体大小四、修改 PyCharm 运行内存4.1 方式一4.1 方式二 五、显示 PyCharm 运行时内存六、设置代码模版配置的参数有&#xff1a; 七、PyCharm设置背景图总结 前言 为了让我们的 PyCharm 更好用…

rk3568,rk3588 , opencv 的了解。

网上的截图&#xff1a; 自动安装&#xff1b; 手动安装&#xff1b; 我只是 截图了一下&#xff0c;并没有实地的进行测试。

JAVA软开-面试经典题(7)-字符串常量池

字符串常量池 1.定义&#xff1a;字符串常量池&#xff08;String Constant Pool&#xff09;&#xff0c;用于存放字符串常量的运行时内存结构&#xff0c;其底层的实现为Hashtable。 【注意】 在JDK1.6之前&#xff0c;字符串常量池中只会存放具体的String实例&#xff0c;在…

学生护眼大路灯哪种好啊?五款真正护眼的护眼大路灯分享

在贴吧、论坛、知乎等社区网站上&#xff0c;大家可能经常看到家长吐槽、讨论学生护眼大路灯哪种好啊这类话题。说是由于孩子们用了不适合的护眼大路灯后&#xff0c;出现了光线刺眼、疲劳感加重等诸多伤眼问题。作为测评师&#xff0c;我对这个问题非常关注&#xff0c;也特意…

prompt learning

prompt learning 对于CLIP&#xff08;如上图所示&#xff09;而言&#xff0c;对其prompt构造的更改就是在zero shot应用到下游任务的时候对其输入的label text进行一定的更改&#xff0c;比如将“A photo of a{obj}”改为“[V1][V2]…[Vn][Class]”这样可学习的V1-Vn的token…

UE5 C++: 插件编写06 | 移动文件时自动Fix up redirectors

目录 前言&#xff1a; 本文内容&#xff1a; WHY WHAT HOW 详细步骤 代码解析 1. Build.cs file中 2. QuickAssetAction.cpp中 IMPORTANT NOTES 中文解释&#xff1a; 使用 AssetToolsModule 来修复重定向器 使用 AssetRegistryModule 来过滤所有重定向器 使用 FMo…

功能强大且简单易用的实时算法视频监控,智慧快消开源了。

智慧快消视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。 基于多年的深度…

Ngin入门套餐

快速了解Nginx 一、代理1.1 正向代理1.2 反向代理1.3 正向代理和反向代理的区别 二、Nginx负载均衡策略2.1 轮询&#xff08;Round Robin&#xff09;2.2 加权轮询&#xff08;Weighted Round Robin&#xff09;2.3 IP 哈希&#xff08;IP Hash&#xff09;2.4 最少连接&#x…

Unite Shanghai 2024 团结引擎专场 | 团结引擎 OpenHarmony 工程剖析

在 2024 年 7 月 24 日的 Unite Shanghai 2024 团结引擎专场演讲中&#xff0c;Unity中国 OpenHarmony 技术负责人刘伟贤对团结引擎导出的 OpenHarmony 工程进行了细节剖析&#xff0c;详细讲解 XComponent 如何与引擎结合&#xff0c;UI 线程和引擎线程的关联以及 ts/ets 的代…

PostgreSQL学习笔记六:模式SCHEMA

模式&#xff08;Schema&#xff09; PostgreSQL中的模式&#xff08;Schema&#xff09;是一个命名的数据库对象集合&#xff0c;包括表、视图、索引、数据类型、函数、存储过程和操作符等。模式的主要作用是组织和命名空间数据库对象&#xff0c;使得同一个数据库中可以包含…

Linux命令——ls

命令格式&#xff1a;命令本身选项命令的指向目标 1.ls命令作用为列出目录下的内容 #lls后的选项有[-a,-l,-h]##注意ls与选项间应用空格隔开. 如下图为&#xff08;ls命令体-l选项/根文件&#xff09;的命令行 # ls -a 为&#xff1a;列出所有文件&#xff08;包括隐藏文件&…

mysql 慢查询日志slowlog

慢查询参数 slow log 输出示例 # Time: 2024-08-08T22:39:12.80425308:00 #查询结束时间戳 # UserHost: root[root] localhost [] Id: 83 # Query_time: 2.331306 Lock_time: 0.000003 Rows_sent: 9762500 Rows_examined: 6250 SET timestamp1723127950; select *…

接口性能测试,这个还真有用啊。

一、概述 性能测试按照不同视角&#xff0c;可以分为以下几类&#xff1a; a. 用户视角的性能 用户角度感受到的网站响应速度的快和慢。从用户在浏览器输入网址/打开应用&#xff0c;到整个页面呈现给用户的耗时。包含了用户端发送请求&#xff0c;服务端收到并执行请求&…

【2024版】Pycharm安装教程+汉化教程(零基础小白都能学会)

PyCharm安装教程 点击右边链接→PyCharm安装包 以专业版为例&#xff0c;继续进行安装&#xff08;安装内容没啥太大区别&#xff0c;所以两版本都适用&#xff09; 2.打开解压后的文件夹&#xff0c;右击pycharm 2024.1.4 3.点击下一步。 4.更改安装位置&#xff0c;点击下一步…

海外云手机:出海电商养号智能化方案

随着出海电商的迅猛发展&#xff0c;使用海外云手机进行养号已经成为越来越多商家的新选择。尤其在社交电商推广和短视频引流方面&#xff0c;海外云手机不仅提高了流量的精准度&#xff0c;还助力商家实现业务的快速增长。本文将探讨海外云手机养号相较于传统模式的优势&#…

机载交互详解!

一、机载交互网络 机载交互网络是指飞机内部用于传输飞行员指令、飞行数据以及系统状态信息的通信网络。它通常由多个节点&#xff08;如传感器、控制器、显示器等&#xff09;和连接这些节点的通信链路组成。 节点&#xff1a; 传感器节点&#xff1a;负责采集飞机的各种飞…

基于YOLOv11的车辆行人实时检测系统(python+pyside6界面+系统源码+可训练的数据集+也完成的训练模型)

上百种【基于YOLOv8/v10/v11的目标检测系统】目录&#xff08;pythonpyside6界面系统源码可训练的数据集也完成的训练模型&#xff09;-CSDN博客 ............................................................................................ 摘要&#xff1a; 本文提出了…

人工智能AI与机器学习ML基础入门

小学生都能看懂的人工智能入门书籍 第一章 入门简介 TensorFlow 入门 如果你想入门人工智能&#xff08;AI&#xff09;&#xff1f;机器学习&#xff08;ML&#xff09;和深度学习是很好的起点。不过&#xff0c;一开始接触这些概念时&#xff0c;可能会被各种选项和新术语搞…

WebGl 使用uniform变量动态修改点的颜色

在WebGL中&#xff0c;uniform变量用于在顶点着色器和片元着色器之间传递全局状态信息&#xff0c;这些信息在渲染过程中不会随着顶点的变化而变化。uniform变量可以用来设置变换矩阵、光照参数、材料属性等。由于它们在整个渲染过程中共享&#xff0c;因此可以被所有使用该着色…