Vue项目技术----Layout页面布局

vue3-admin商品管理后台项目(后台布局layout布局开发一) 阅读详情
AI摘要

本文介绍Vue项目的Layout页面布局技术。先阐述使用该布局的原因,接着说明搭建Layout页面框架的步骤,包括创建各组件并组合、修改路由显示。还讲解了结合路由生成动态布局,如通过路由配置生成菜单栏、实现动态面包屑导航和标签栏,同时解决了相关问题。

前言

为什么要使用Layout页面布局?

         首先,Vue项目通过组件实现,在项目中部分公共组件(例如菜单栏组件,导航栏组件等)是不需要每次都切换重新加载的,因此为了便于开发,便设计Layout页面布局,将公共组件提取作为全局组件,切换功能组件实现页面变化。

element-ui组件模块

        官网:组件Element-ui官网

        这个组件很实用在Vue项目中,里面有很多可以直接套用的组件,便于开发人员快速搭建页面。

正文

一.搭建Layout页面框架

1.创建vue项目

运行命令【npm install element-ui 】下载element-ui模块和【npm install sass sass-loader --save-dev】下载样式模块。其中element-ui还需要在main.js中引入,程序如下。

// 引入 Element UI 及其样式
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'

// 使用 Element UI
Vue.use(ElementUI)

2.菜单导航组件

src\layout\components\Menu\index.vue 。在项目\src目录下创建layout目录,在创建components目录,创建Menu目录,创建index.vue组件。后续公共组件创建均为目录形式

<template>
    <!-- 菜单容器 -->
    <div class="menu-container">
      <!-- Element UI 菜单组件   mode="horizontal" -->
      <el-menu
        default-active="2"
        class="el-menu-vertical-demo"
        background-color="#545c64"
        text-color="#fff"
        active-text-color="#ffd04b">
        <el-submenu index="1">
          <template slot="title">
            <i class="el-icon-location"></i>
            <span>导航一</span>
          </template>
          <el-menu-item-group>
            <template slot="title">分组一</template>
            <el-menu-item index="1-1">选项1</el-menu-item>
            <el-menu-item index="1-2">选项2</el-menu-item>
          </el-menu-item-group>
          <el-menu-item-group title="分组2">
            <el-menu-item index="1-3">选项3</el-menu-item>
          </el-menu-item-group>
          <el-submenu index="1-4">
            <template slot="title">选项4</template>
            <el-menu-item index="1-4-1">选项1</el-menu-item>
          </el-submenu>
        </el-submenu>
        <el-menu-item index="2">
          <i class="el-icon-menu"></i>
          <span slot="title">导航二</span>
        </el-menu-item>
        <el-menu-item index="3" disabled>
          <i class="el-icon-document"></i>
          <span slot="title">导航三</span>
        </el-menu-item>
        <el-menu-item index="4">
          <i class="el-icon-setting"></i>
          <span slot="title">导航四</span>
        </el-menu-item>
      </el-menu>
    </div>
  </template>
  
  <script>
  export default {
    name: 'Menu',
    data(){
      return{
        props: {
        // 设置菜单模式:horizontal(水平) 或 vertical(垂直)
        mode: 'horizontal', // 默认是水平菜单
        }
      }
    }
    
  }
  </script>
  
  <style scoped>
  .menu-container {
    background-color: var(--el-menu-bg-color);
  }
  
  .menu-container .os-menu {
    border: 0;
  }
  
  .menu-container .os-menu.el-menu--horizontal {
    height: calc(var(--os-layout-logo-height) - 1px);
  }
  </style>

3.面包屑导航组件

src\layout\components\Breadcrumb\index.vue

<template>
    <el-breadcrumb separator="/">
      <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
      <el-breadcrumb-item><a href="/">活动管理</a></el-breadcrumb-item>
      <el-breadcrumb-item>活动列表</el-breadcrumb-item>
      <el-breadcrumb-item>活动详情</el-breadcrumb-item>
    </el-breadcrumb>
</template>
<style scoped>
.breadcrumb-container {
  display: flex;
  flex-wrap: nowrap; /* 防止换行 */
  overflow: hidden; /* 横向滚动溢出处理 */
  padding-right: 12px;
  
}
</style>
  

4.底部栏组件

src\layout\components\Footer\index.vue

<template>
    <div class="footer-container">
      <!-- 左侧:公司名称或标志 -->
      <div class="flex-content">
        <svg-icon name="logo" />
        <span class="logo-title">{
  
  { app_title }}</span>
      </div>
      <!-- 中间:导航链接 -->
      <div class="flex-content">
        <a href="about">关于我们</a>
        <a href="#contact">联系我们</a>
        <a href="#privacy-policy">隐私政策</a>
        <a href="#terms-of-service">服务条款</a>
      </div>
      <!-- 右侧:版权信息 -->
      <div class="text-right">&copy; 2025 xxxxx. 保留所有权利.</div>
    </div>
  </template>
  
  <script>
  export default {
  data() {
    return {
      app_title:'My App',
      port: window.location.port
    }
  }
}
  </script>
  
  <style scoped lang="scss">
  .footer-container {
    display: flex;
    align-items: center;
    width: 100%;
    user-select: none;
    font-size: 0.75rem; /* text-xs */
    height: var(--os-layout-footer-height);
    justify-content: center;
  }
  
  /* 针对大屏设备的样式 */
  @media (min-width: 1024px) {
    .footer-container {
      justify-content: space-between;
    }
  }
  
  .flex-content {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.5rem; /* gap-2 */
    font-size: 0.875rem; /* text-sm */
    color: #9ca3af; /* text-gray-400 */
    display: none;
  }
  
  @media (min-width: 1024px) {
    .flex-content {
      display: flex;
    }
  }
  
  .logo-title {
    font-weight: 700; /* font-bold */
    -webkit-font-smoothing: subpixel-antialiased; /* subpixel-antialiased */
    background-image: linear-gradient(to right, #ec4899, #8b5cf6); /* from-pink-500 
vue3后台管理系统之layout组件的搭建 您需要从 @element-plus/icons-vue 中导入所有图标并进行全局注册。hidden: false //代表路由标题在菜单中是否隐藏。src下创建setting.ts。渲染layout一级路由的子路由。title: ' 登录 ',传递路由数组到Menu组件。在meta添加属性icon。动态组件component。hidden代表是否隐藏。store管理路由数组。接收menuList。根据判断条件展示路由。 阅读详情

相关推荐

vue——布局(flex、gride)

前端布局发展史: 初代table布局 CSS+div布局 Flex布局(移动端较友好) grid布局(2020年) Flex布局: 实例1用flex布局制作导航栏 flex:1表示下面的综合: flex-grow : 1; // 这意味着div将以与窗口大小相同的比例增长 flex-shrink : 1; // 这意味着div将以与窗口大小相同的比例缩小 flex-basis : 0; // 这意味着div没有这样的起始值,并且将根据可用的屏幕大小占用屏幕。例如: -.

wy313622821的博客 1万+

vue3项目实战(三)---页面布局设计

layout页面布局

qq_39253096的博客 4215

Vue-Layout(可视化布局)

什么是Vue-Layout ? 怎么使用Vue-Layout ?

郭宝的博客 1万+

T100服务端接口实战:从注册到日志排查的全链路开发指南

本文提供了一份T100服务端接口开发的全链路实战指南。从程序注册与框架签出开始,详细讲解了接口的数据结构设计、核心业务逻辑编写,到最终的部署上线与调用验证。文章重点分享了如何利用日志文件高效定位和排查接口问题,帮助开发者快速掌握T100接口开发的关键步骤与实用技巧。

weixin_28831399的博客 300

西门子S7-1200与S7-200SMART的PROFINET通讯实战:从GSD文件生成到数据监控

本文详细解析了西门子S7-1200与S7-200SMART之间实现PROFINET通讯的完整实战流程。核心内容包括将S7-200SMART配置为智能IO设备、生成并安装GSD文件、在TIA Portal中进行网络组态与地址映射,最终实现双向数据交换与监控。该方案为整合新旧设备、构建灵活高效的工业自动化系统提供了可靠路径。

weixin_29271263的博客 245

从DIY到实战:手把手教你搭建一个媲美吉时利2450的nA级电流源表(附原理图与避坑指南)

本文详细解析如何从零打造nA级精密电流源,涵盖核心设计原理、PCB布局技巧、热电偶效应应对及校准验证体系。通过低成本替代方案和优化设计,实现媲美商用源表的性能,特别适合硬件爱好者和独立开发者。文章还提供原理图与避坑指南,助你轻松搭建高精度电流源系统。

weixin_42656416的博客 292

Qt Coordinate System

Qt 坐标系统Qt 坐标系统 数学基础 Qt坐标系统 视口 平移变换 缩放变换 setWindow 旋转 总结数学基础 矩阵与线性变换坐标系变换Qt坐标系统 视口和OpenGL一样,视口确定了画面在窗口(QWidget)中显示的区域,Qt的绘图坐标会完全映射到视口(View port)上,就像图示一样。默认情况下,窗口和视口是重合的,视口的大小覆盖了整个窗口。和OpenGL一样,Qt的QPa

unclerunning的博客 1151

100天精通Python(爬虫篇)——第118天:selenium自动化操作浏览器基础大总结

一、Selenium框架环境搭建 1. 下载模块 2. 安装浏览器驱动WebDriver 二、基础操作 1. 打开浏览器 2. 无界面模式 3. 元素定位 4. 元素操作 5. 前进后退 6. 执行js 7.页面等待 隐式等待(常用) 显式等待(了解) 三、进阶操作 1. 使用代理ip 2. 修改请求头 3. 隐藏指纹特征.....................

努力让自己发光,对的人才能迎着光而来 10万+

Python全栈入门到实战【基础篇 05】核心基础:Python的2种运行模式(交互式+命令行式)

Python代码运行模式详解:交互式与命令行式对比 摘要: Python提供两种核心运行模式:交互式(REPL)和命令行式(脚本式)。交互式模式适合快速测试语法,即时反馈结果,通过终端输入python启动,特点是无需保存、临时执行,适合验证小段代码逻辑。命令行式模式需将代码保存为.py文件后运行,适合开发完整程序,可重复执行和修改。两种模式各有优势:交互式便于学习调试,命令行式适合实际开发。掌握两种模式的使用场景和切换方法,是Python入门的关键技能,能显著提升学习效率。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 4557

PLC模糊控制模糊PID(梯形图实现+算法分析)

博途PLC的模糊PID控制详细内容请查看下面的博客文章:Matlab仿真+博途PLC模糊PID控制完整SCL源代码参考(带模糊和普通PID切换功能)_博途怎么实现模糊pid_RXXW_Dor的博客-优快云博客模糊PID的其它相关数学基础,理论知识大家可以参看专栏的其它文章,这里不再赘述,本文就双容水箱的模糊PID问题做详细讲解(包括所有源代码和模糊规则设置参数)。

RXXW_Dor的博客 5884

微信小程序 - 最新详细实现气泡菜单功能,点击任意元素在底部或附近周围弹出气泡菜单列表,仿微信气泡弹框显示菜单快捷功能收纳,自定义气泡弹窗/菜单气泡弹窗,小程序气泡框嵌套菜单组件插件,自动计算弹出定位

微信小程序,vue2,vue3,气泡列表,汽泡菜单,气泡框,泡泡框,悬浮框,悬浮菜单,点击菜单按钮弹出气泡,对话箭头气泡框,弹出的气泡准确定位并吸附在附近,弹出式气泡,弹窗菜单,气泡自定义HTML弹窗,带三角的气泡弹框,三角气泡框里面嵌套菜单,当点击一个按钮或元素时,会从附近弹出一个小气泡一样的菜单列表,自定义气泡框内的内容,点击一个元素在附近弹出一个气泡弹框功能效果,气泡弹框不准怎么办,被盖住了,挡住了,长按弹出,组件插件,微信,自定义气泡菜单组件,气泡弹出框,小程序自定义气泡框,菜单气泡,包裹列表的三角

🏆 前端领域优质创作者 3916

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: Vue项目----iconfont图标的使用
下一篇: QT实现自定义指示灯
颜*鸣&空
博客等级 码龄5年 636粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颜*鸣&空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值