第3章 管理端(Vue)布局面的设计实现

news2025/2/1 16:57:08

1 导入“element-plus:Icon”组件

1.1“element-plus:Icon” 组件导入命令:

    npm install @element-plus/icons-vue

1.2“element-plus:Icon” 组件配置:

import { createApp } from 'vue'//vue-cli44.5.0版本的脚手架)后取代了:import Vue from 'vue';

//“element-plus”模板插件【导入】为全局变量:“ElementPlus”

import ElementPlus from 'element-plus'

import zhCn from 'element-plus/es/locale/lang/zh-cn';//ElementPlus 组件内部默认使用英语,使用中文语言。

import 'element-plus/dist/index.css'

//“element-plus icon”的所有图标【导入】为全局变量:“ElementPlusIconsVue”

import * as ElementPlusIconsVue from '@element-plus/icons-vue'

import App from './App.vue'

import router from './router'

import store from './store'

const app = createApp(App)

// 使全局变量:“ElementPlus”,在所有的*.vue页面中都有效。

app.use(ElementPlus, {

    locale: zhCn,//使用中文语言

})

//“element-plus icon”的所有图标,依次实例化到当前项目中,从而使这些图标在所有的*.vue页面中都有效。

for (const [key, component] of Object.entries(ElementPlusIconsVue)) {

  app.component(key, component)

}

app

    .use(store)

    .use(router)

    .mount('#app')

2 定义路由:src\router\index.js

import {

    createRouter,

    createWebHashHistory

} from 'vue-router'

import HomeView from '../views/HomeView.vue'

const routes = [{

        path: '/',

        name: '欢迎',

        component: () => import('../views/WelcomeView.vue'),

        meta: {

            title: '欢迎',

            icon: "HomeFilled",

            menuId: '1',

        },

    },

    {

        path: '/Template',

        name: '复制模板',

        component: () => import('../views/TemplateView.vue'),

        meta: {

            title: '复制模板',

            icon: "Document",

            menuId: '2',

        },

    },

    {

        path: '/Test',

        name: '测试',

        component: () => import('../views/TestView'),

        meta: {

            title: '测试',

            icon: "Setting",

            menuId: '3',

        },

    },

    {

        path: '/Users/User',

        name: '用户管理',

        component: () => import('../views/Users/UserView.vue'),

        meta: {

            title: '用户管理',

            icon: "User",

            menuId: '4',

        },

        children: [{

                path: '/Users/User',

                name: '用户',

                component: () => import('../views/Users/UserView.vue'),

                meta: {

                    title: '',

                    menuId: '4-1',

                },

            },

            {

                path: '/Users/Role',

                name: '角色',

                component: () => import('../views/Users/RoleView.vue'),

                meta: {

                    title: '角色',

                    menuId: '4-2',

                },

            },

        ]

    },

    {

        path: '/home',

        name: 'home',

        component: HomeView,

        meta: {

            title: '首页',

            icon: "Tools",

            menuId: '5',

        },

    },

    {

        path: '/about',

        name: 'about',

        component: () => import('../views/AboutView.vue'),

        meta: {

            title: '关于',

            icon: "Tools",

            menuId: '6',

        },

    },

]

const router = createRouter({

    history: createWebHashHistory(),

    routes

})

// 如果路由实例中有标题实例,依次把标题渲染显示在浏览器相对应的标签上。

//to: 当前跳转到页面的路由实例。

router.beforeEach(async (to) => {

    if (to.meta.title) {

        document.title = to.meta.title;

    }

});

export default router

3 定义布局页:src\views\ WelcomeView.vue

<template>

    <!-- 直接调用:element-plusIcon-->

    <!-- <div id="app">

        <el-icon>

            <element-plus></element-plus>

        </el-icon>

        <el-icon>

            <el-icon>

                <Operation />

            </el-icon>

        </el-icon>

    </div> -->

   

    <el-container>

        <!-- 侧边栏 "<div class="aside">标签可被删除,为了下拉条控件样式保存了该标签"-->

        <div class="aside">

            <el-aside width="200px">

                <!--必须包含有:"el-menu"标签,否则左侧菜单栏的高度不能达到100% -->

                <el-menu active-text-color="#ffd04b" background-color="#545c64" class="el-menu-vertical-demo"

                    default-active="4-1" text-color="#fff" router>

                    <template v-for="(item, index) in this.$router.options.routes" :key="index">

                        <el-sub-menu :index="item.meta.menuId" v-if="item.children && item.children.length">

                            <template #title>

                                <span>{{item.name}}</span>

                            </template>

                            <el-menu-item :index="children.meta.menuId" v-for="(children, index) in item.children"

                                :key="index" :route="{path:item.path}">

                                {{children.name}}

                            </el-menu-item>

                        </el-sub-menu>

                        <el-menu-item :index="item.meta.menuId" v-else :route="{path:item.path}">

                            <el-icon>

                                <component :is="item.meta.icon"></component>

                            </el-icon>

                            <span>{{item.name}}</span>

                        </el-menu-item>

                    </template>

                </el-menu>

            </el-aside>

        </div>

        <el-container>

            <el-header>Header</el-header>

            <el-main>

                Main

            </el-main>

            <el-footer>Footer</el-footer>

        </el-container>

    </el-container>

</template>

<script>

    import router from '../router/index.js'

    export default {

        name: 'WelcomeView',

        data() {

            return {

                menuList: {},

            };

        },

        methods: {

            getAllMenu() {

                //console.log(router);

                //console.log(this.$router.options.routes);

                //console.log(router.options.routes);

                console.log(router.options.routes);

                console.log(router.options.routes[0].meta.icon);

                console.log(router.options.routes[3].children[0].meta.menuId);

                //this.menuList=router.options.routes;

                //console.log(this.menuList);

                //console.log(this.menuList.Array);

            },

        },

        mounted() {

            this.getAllMenu();

            //console.log(router.value);

        },

    }

</script>

<style scoped lang="scss">

    .aside {

        width: 200px;

        overflow: hidden;

        background-color: #545c64;

    }

    .el-aside {

        height: 100%;

        //overflow-x: hidden;

        //overflow-y: scroll;

    }

    .el-header {

        background-color: #ff0000;

        color: #FFFFFF;

    }

    .el-main {

        height: 90vh; //必须定义:"height"为:90vh,否则主区域的高度不能达到100%;如果大于90vh整页的调度将超过100%

        background-color: #00ff00;

        color: #FFFFFF;

    }

    .el-footer {

        background-color: #0000ff;

        color: #FFFFFF;

    }

    //必须定义:".el-menu"样式,否则左侧菜单栏的高度不能达到100%

    .el-menu {

        height: 90vh; //必须定义:"height"为:90vh,否则左侧菜单栏的高度不能达到100%;如果大于90vh整页的调度将超过100%

    }

</style>

对以上功能更为具体实现和注释见:221220_001shopvue(布局设计完成)。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于A2B与DSP/DAC传输音频的时钟问题

加我V hezkz17 进同行数字音频系统设计开发交流答疑群 1 AD2428----->某功放DSP 是通过IN3输入音频数据 为什么 BCLK 和LRCLK 没有连接TDM时钟 ? 2 新改的板子 用IN1作为音频数据输入 IN1和 OUTPUT3 都是使用 A2B的TDM时钟 因为OUTPUT3 是上行TDM8 用作回传音和录音的…

用好这个任务管理工具,轻松躲避职场明枪暗箭

俗话说&#xff1a;“职场如战场”&#xff0c;而战场上&#xff0c;就不可避免地存在着形形色色的人&#xff0c;以及竞争与对立关系。升职、加薪、都是足以让人心动的诱惑&#xff0c;有利益存在的地方&#xff0c;就有勾心斗角&#xff0c;明坑暗亏。 正所谓&#xff0c;明…

简述 MySQL 的字符集和比较规则(简洁明了)

字符集和比较规则 字符集的概念&#xff1a; 人们抽象出一个字符集的概念来描述某个字符范围的编码规则。 比较规则的概念&#xff1a; 对于某一种字符集来说&#xff0c;可以制定用来比较字符大小的多种规则&#xff0c;也就是说同一种字符集可以有多种规则。 最常用的 U…

阿根廷夺冠!梅西圆梦!历届世界杯还有哪些数据看点?

从1930年到2022年&#xff0c;世界杯已走过92年的光辉岁月&#xff0c;从马拉多纳的“上帝之手”、贝利的“四两拨千斤”、罗纳尔迪尼奥的“诡异吊射”、范佩西的“鱼跃冲顶”再到姆巴佩上演“帽子戏法”刷新记录&#xff0c;世界杯为球迷朋友们带来了无数个惊心动魄的精彩瞬间…

链表(1)-------数据结构

链表(重点): 链表是物理存储结构上面非连续的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的引用链接次序实现的 1)在顺序表中&#xff0c;我们不光引入了一段连续的内存&#xff0c;还引入了一块连续的内存空间&#xff0c;叫做usedsize&#xff0c;来表示对应数组中…

Opencv(C++)笔记--Canny边缘检测算法

目录 1--算法原理 2--Opencv API 3--代码实例 1--算法原理 具体原理讲解可参考博客1 和 博客2&#xff0c;算法主要步骤如下&#xff1a; ① 使用高斯模糊&#xff08;高斯滤波&#xff09;去除噪声&#xff1b; ② 进行灰度转换&#xff0c;转换为灰度图&#xff1b; ③ 计…

数据结构---动态规划

动态规划爬楼梯问题解法1第一步第二步第三步JAVA实现解法2问题建模最优子结构边界状态转移公式求解问题递归JAVA实现备忘录算法JAVA实现解法三JAVA实现&#xff08;斐波那契数列&#xff09;国王和金矿一个错误的解法排列组合解法JAVA实现动态规划爬楼梯问题 有一座高度是10级…

rk3568 添加gc2053摄像头驱动

在设备树文件代码中添加 gc2053 设备节点 &i2c2 {status "okay";pinctrl-0 <&i2c2m1_xfer>;/* split mode: lane0/1 */gc2053: gc205337 {status "okay";compatible "galaxycore,gc2053";// 需要与驱动中的匹配字符串一致reg …

高级篇-rabbitmq的高级特性

1.消息可靠性 三种丢失的情形&#xff1a; 1.1 生产者确认机制 启动MQ 创建Queues&#xff1a; 两种Callback: 1.ReturnCallback:全局callback 2.ComfirmCallback: 发送信息时候设置 Testpublic void testSendMessage2SimpleQueue() throws InterruptedException {// 1.…

第八章练习题-3

目录 第十三题 题目 Student类 Teacher类 main类 老师的代码 Student类 Teacher类 main类 第七问&#xff1a;定义多态数组 main类 运行结果 问题 原因 解决办法 老师代码&#xff1a;main类 结果 第八问 运行结果 第十四题 第十五题 题目 方法的多态…

HFSS使用经验三

目录 一、如何量取HFSS某一点的空间位置 二、如何快速的切换视图 三、HFSS中绘制圆柱体 四、如何修改HFSS的仿真线程数量 五、HFSS中如何选取挖空的面 六、HFSS中如何实现参数扫描 一、如何量取HFSS某一点的空间位置 右击可以点击Measure按键 鼠标放到特殊点&#xff0c…

2023年申请发明专利的重要性和注意问题。

随着对知识产权意思的逐步提高&#xff0c;企业对知识产权越来越关心。知识产权包括专利权、商标权和著作权。专利包含发明专利专利、实用新型专利、外观设计专利。其中发明专利的申请难度最大&#xff0c;含金量最高。根据小编申请发明专利方面20年的经验&#xff0c;简单介绍…

【Windows|WSL|Ubuntu|VSCode】流程记录|坑点模糊回忆

无限踩坑&#xff0c;悲惨回忆&#xff0c;又似乎毫无意义&#xff1f; 1.安装WSL 官方文档&#xff1a;Install WSL | Microsoft Learn 简单来说&#xff0c;管理员身份运行PowerShell wsl --install 通常需要wsl2&#xff0c;得益于其优势&#xff0c;通过 PowerShell w…

用ERP系统做数据管理对企业有什么好处?

ERP系统数据管理解决方案是以业务为主导的工具&#xff0c;为所有的业务流程和操作创建一个单一的主记录&#xff0c;包括来自各种内部和外部应用和来源的人员和系统。 大多数企业采用不同的系统&#xff0c;包含客户、产品、销售、交易等信息数据存储在许多不同的地方&#…

葵花宝典之C语言冷知识(二)

目录 &#x1f693;&#xff08;一&#xff09;图形的打印 &#x1f699;判断类型 &#x1f68c;逻辑简单易找规律型。 &#x1f68c;存在坐标规律的图案打印 &#x1f693;&#xff08;二&#xff09;中值的表达形式 &#x1f699;(xy)/2 表达错误的原因 &#x1f699;有符号数…

Python编程课程好学吗?能学会吗?

Python编程课程好学吗&#xff1f;能学会吗&#xff1f;Python是一种计算机程序设计语言&#xff0c;一种面向对象的动态类型语言&#xff0c;最初被设计用于编写自动化脚本(shell)&#xff0c;随着版本的不断更新和语言新功能的添加越来越多被用于独立的大型项目的开发。 编程…

mvn和npm的那些事

1 mvn简介 mvn就好比java中的maven,用于管理包版本,mvn用于管理node版本,而npm来源于node中,比如用于拉取仓库中的依赖包,在构建使用项目时可以选择指定的版本,从而避免编译出错运行失败等问题 Node.js17或更高版本中出现Error: error:0308010C:digital envelope routine…

CSDN如何使用Markdown编辑器

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

Pytest自动化测试 - 完美结合Allure

简介 Allure Framework是一种灵活的、轻量级、多语言测试报告工具。 不仅可以以简洁的网络报告形式非常简洁地显示已测试的内容&#xff0c; 而且还允许参与开发过程的每个人从日常执行中提取最大程度的有用信息和测试。 从开发/测试的角度来看&#xff1a; Allure报告可以…

四大蓝牙天线设计方式

https://www.elecfans.com/d/686538.html 一直以来&#xff0c;无论是智能手机&#xff0c;还是笔记本电脑&#xff0c;亦或是平板电脑&#xff0c;蓝牙都是智能设备的标配。随着移动互联网的发展&#xff0c;现在涌现出大量的智能可穿戴设备&#xff0c;而支撑这些应用的发展不…