使用vue3+element-ui plus 快速构建后台管理模板

一、安装 vue3 脚手架

npm create vue@latest

在这里插入图片描述

cd vue-ui-template #切换到刚刚创建好的vue项目根目录中
npm install #下载项目所需要的依赖包
npm run dev #启动运行项目服务

项目启动后,默认页面显示如下:

在这里插入图片描述

二、安装element-ui plus

官网链接:http://element-plus.org/zh-CN/guide/installation.html#%E4%BD%BF%E7%94%A8%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8
element-ui plus
快速上手链接:http://element-plus.org/zh-CN/guide/quickstart.html

npm install element-plus --save 

在这里插入图片描述

在main.js中进行全局配置(也可按需配置)
因为我的项目比较小,所以我就在页面中整体引入了。正常的话是按需加载

在这里插入图片描述

// main.js
import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import App from './App.vue'const app = createApp(App)app.use(ElementPlus)
app.mount('#app')

三、使用element-ui plus 构建布局

下面是我们要达成的一个布局效果(我之前写过的课设),分为侧边栏和顶部栏以及中间主体内容。

在这里插入图片描述

(一)安装使用element-ui plus 的icon组件

http://element-plus.org/zh-CN/component/icon.html#%E4%BD%BF%E7%94%A8%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8

在这里插入图片描述

  1. 安装命令
npm install @element-plus/icons-vue

在这里插入图片描述

  1. 在main.js中进行全局挂载
import * as ElementPlusIconsVue from '@element-plus/icons-vue'const app = createApp(App)
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {app.component(key, component)
}

在这里插入图片描述

(二)布局组件 container

对于element-ui plus的布局组件我就不一一介绍了,这里将使用到的组件链接放出来
container 布局容器 http://element-plus.org/zh-CN/component/container.html

在这里插入图片描述

<template><div class="common-layout"><el-container><el-aside width="200px">Aside</el-aside><el-container><el-header>Header</el-header><el-main>Main</el-main></el-container></el-container></div>
</template>

我们将这个布局抽离为两个组件,分别为一个header组件和一个aside组件,接下来开始抽离。

(三)模板组件抽离 Aside Header Container

  1. Header 组件(src\components\Header.vue)
<script setup>
import { ref } from 'vue'import { ElMessage } from 'element-plus';
import a11Img from '@/assets/a11.jpeg'  // 导入assets下的图片,自己喜欢啥图加啥图就行
const isCollapse = ref(true)
// 获取父组件传递过来的数据 
const showIcon = defineProps({isCollapse: Boolean
})// 获取父组件自定义的事件
const emit = defineEmits(['changeAside'])// 自定义按钮点击事件,侧边栏的收缩按钮
const collapseAside = () => {emit('changeAside')
}// 登出按钮
const LogOut = ()=>{}</script><template><div><el-header style="display: flex;font-size: 16px;"><div style="display: inline-flex;flex: 1; align-items: center;justify-content: left;"><el-icon v-show="!showIcon.isCollapse" @click="collapseAside" style="color: #303133;"><Fold /></el-icon><el-icon v-show="showIcon.isCollapse" @click="collapseAside" style="color: #303133;"><Expand /></el-icon></div><div class="toolbar"  ><div class="block" style="margin-right: 10px;"><el-avatar :size="40" :src="a11Img" /></div><span>管理员</span><el-dropdown trigger="click"><el-icon style="margin-left: 18px; margin-top: 1px;color: #303133;"><setting /></el-icon><template #dropdown><el-dropdown-menu><el-dropdown-item>View</el-dropdown-item><el-dropdown-item>Add</el-dropdown-item><el-dropdown-item @click="LogOut">退出登录</el-dropdown-item></el-dropdown-menu></template></el-dropdown></div></el-header></div>
</template><style scoped>
.el-header {width: 100%;background-color: #fff;color: var(--el-text-color-primary);box-shadow: var(--el-box-shadow);
}.toolbar {display: inline-flex;align-items: center;justify-content: center;height: 100%;right: 20px;text-align: right;
}.el-dropdown-menu__item {width: 120px;
}.icon-color {color: white;
}
</style>
  1. Aside组件(src\components\Aside.vue)
<script setup>
import { ref } from 'vue'const settings = defineProps({collapse: Boolean,width: String
})const iconColor = ref('color:#F8FAFB')
</script><template><el-aside :width="settings.width"><el-scrollbar><el-menu :default-openeds="['1', '3']" :collapse="settings.collapse" active-text-color="#F8FAFB"background-color="#1A1C1E" text-color="#74767A" router="true"><el-sub-menu index="1"><template #title><el-icon><House /></el-icon><span>首页</span></template><el-menu-item index="/admin/echatsIndex">首页</el-menu-item></el-sub-menu><el-sub-menu index="2"><template #title><el-icon><Menu /></el-icon><span>文章管理</span></template><el-menu-item index="/admin/articles">文章管理列表</el-menu-item></el-sub-menu><el-sub-menu index="3"><template #title><el-icon><Message /></el-icon><span>评论管理</span></template><el-menu-item index="/admin/comments">评论管理列表</el-menu-item></el-sub-menu><el-sub-menu index="4"><template #title><el-icon><Files /></el-icon><span>模块管理</span></template><el-menu-item index="/admin/blocks">模块管理列表</el-menu-item></el-sub-menu><el-sub-menu index="5"><template #title><el-icon><User /></el-icon><span>用户管理</span></template><el-menu-item index="/admin/users">用户管理列表</el-menu-item></el-sub-menu><el-sub-menu index="6"><template #title><el-icon><Watermelon /></el-icon><span>资源管理</span></template><el-menu-item index="/admin/filesAdmin">资源管理列表</el-menu-item></el-sub-menu><el-sub-menu index="7"><template #title><el-icon><Edit /></el-icon><span>编辑器</span></template><el-menu-item index="/admin/md">markdown</el-menu-item><el-menu-item index="/admin/richText">富文本</el-menu-item></el-sub-menu><el-sub-menu index="8"><template #title><el-icon><setting /></el-icon><span>系统设置</span></template><el-menu-item index="/admin/light">背景色</el-menu-item></el-sub-menu></el-menu></el-scrollbar></el-aside>
</template><style scoped>
.el-aside {height: 100vh;overflow: hidden;box-shadow: var(--el-box-shadow-lighter);
}.el-scrollbar {height: 100vh;overflow: hidden;background-color: #1A1C1E;
}.el-menu {border-right: none;
}
</style>

tips:侧边栏菜单这里我开启了路由,然后对应的index="xxx"都是我要跳转的页面,可以自行修改哈

  1. HomeView.vue 视图(src\views\HomeView.vue)
<script setup>
import { ref } from 'vue'// 组件注册
import Header from '@/components/Header.vue'import Aside from '@/components/Aside.vue'const asideSettings = ref({isCollapse:true,width:'200'
})// 给子组件绑定事件,通过子组件emit从而改变父组件的值
const changeAside = ()=>{asideSettings.value.isCollapse = !asideSettings.value.isCollapseif(asideSettings.value.isCollapse){asideSettings.value.width = "64"}else{asideSettings.value.width = "200"}
}</script>
<template><el-container style="min-height: 100vh;min-width: 100vw;overflow: hidden;"><Aside :collapse="asideSettings.isCollapse" :width="asideSettings.width"></Aside><el-container style="height: 100vh;width:100%;display: flex;flex-direction: column;"><Header :isCollapse="asideSettings.isCollapse"  @changeAside="changeAside"></Header><el-main><div><el-card><h1>文本内容</h1></el-card></div></el-main></el-container></el-container>
</template><style scoped>body{background-color: #eee;max-width: 100vw;overflow: hidden;
}.el-main {width: 100%;padding: 0;height: 100vh;overflow-x: hidden;
}</style>
  1. App.vue修改(src\App.vue)
<script setup>
import { RouterView } from 'vue-router'
</script><template><div><RouterView></RouterView></div>
</template><style scoped></style>
  1. vue3的默认css调优 (src\assets\main.css)
@import './base.css';#app {/* max-width: 1280px; */margin: 0 auto;/* padding: 2rem; */min-width: 100vw;min-height: 100vh;font-weight: normal;
}a,
.green {text-decoration: none;color: hsla(160, 100%, 37%, 1);transition: 0.4s;
}@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; */}
}

tips:最终的项目结构为下图,黄色标注为修改过的文件,红色文件标注的为新增的文件

在这里插入图片描述

  1. 页面效果

在这里插入图片描述
在这里插入图片描述


蹲一个赞 b( ̄▽ ̄)d ★,°:.☆( ̄▽ ̄)/$:.°★

以上代码的全部文件 :百度网盘链接: https://pan.baidu.com/s/1WtepwERvqIoq_tYm0BwwSg 提取码: 5kmx

请添加图片描述

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

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

相关文章

Vue-3.0路由

生活中的路由&#xff1a;设备和ip的映射关系 路由就是一种映射关系 Vue中路由&#xff1a;路径和组件的映射关系&#xff0c;根据路由就能知道不同路径的&#xff0c;应该匹配渲染哪个组件 VueRouter的介绍 作用&#xff1a;修改地址栏路径时&#xff0c;切换显示匹配的组…

idea中父工程Project创建

1.file-->new-->Project 2.选择maven包和JavaSDK 3.填写项目名&#xff0c;选择文件目录&#xff0c;项目包等 4.配置maven tip&#xff1a;约定>配置>编码 5.设置项目编码 6.注解生效激活&#xff0c;便于项目中使用注解 7.Java编译版本选择8 8.File Type 过滤&a…

php74 安装sodium

下载编译安装libsodium wget https://download.libsodium.org/libsodium/releases/libsodium-1.0.18-stable.tar.gz tar -zxf libsodium-1.0.18-stable.tar.gz cd libsodium-stable ./configure --without-libsodium make && make check sudo make install下载编译安装…

ChatGPT DALL-E 3的系统提示词大全

每当给出图像的描述时&#xff0c;使用dalle来创建图像&#xff0c;然后用纯文本总结用于生成图像的提示。如果用户没有要求创建特定数量的图像&#xff0c;默认创建四个标题&#xff0c;这些标题应尽可能多样化。发送给Dalle的所有标题都必须遵循以下策略&#xff1a;1.如果描…

GitLab 502问题解决方案

由于最近 gitlab 切换到另一台服务器上部署的 gitlab 后&#xff0c;经常出现 502。平时重启 gitlab 后都能解决&#xff0c;今天突然重启多次后都还是 502&#xff08;重启日志是正常的&#xff09;&#xff0c;遂通过 gitlab-ctl tail 查看日志进行排查。 gitlab-ctl tail通…

到底什么是5G-R?

近日&#xff0c;工信部向中国国家铁路集团有限公司&#xff08;以下简称“国铁集团”&#xff09;批复5G-R试验频率的消息&#xff0c;引起了行业内的广泛关注。 究竟什么是5G-R&#xff1f;为什么工信部会在此时批复5G-R的试验频率&#xff1f; 今天&#xff0c;小枣君就通过…

让ChatGPT等模型学会自主思考!开创性技术“自主认知”框架

ChatGPT、百度文心一言、Bard等大语言模型展现出了超强的创造能力&#xff0c;加速了生成式AI的应用进程。但AI模型只能基于训练数据执行各种任务&#xff0c;无法像人类一样利用生活知识、过往经验用于复杂的推理和决策。 例如&#xff0c;在玩游戏时&#xff0c;人类可以利用…

Python 控制语句

目录 1 选择结构1.1 单分支选择结构1.2 条件表达式详解1.3 条件表达式中&#xff0c;不能有赋值操作符“”1.4 双分支选择结构1.5 三元条件运算符1.6 多分支选择结构1.7 选择结构嵌套 2 循环结构2.1 while循环2.2 for循环和可迭代对象遍历2.3 可迭代对象2.4 range对象2.5 嵌套循…

2023年淘宝天猫双11红包领取活时间什么时候开始领天猫淘宝双十一红包优惠券?

2023年淘宝天猫双11红包领取活动开始与结束时间 2023年10月24日20:00开始领取至11月11日23:59结束&#xff1b; 2023年淘宝天猫双11红包活动使用开始与结束时间 第一波&#xff1a;2023年10月31日20:00开始使用至11月3日23:59 第二波&#xff1a;2023年11月10日20:00开始使用…

【Linux】使用timer_create()创建定时器发送信号并使用sigaction()处理信号

0x00 前言 最后更新时间&#xff1a;2023-10-16 0x01 主要函数及结构体介绍 1.sigaction函数 #include <signal.h> int sigaction(int signum, const struct sigaction *act,struct sigaction *oldact);功能&#xff1a; 用于改变进程接收到特定信号后的行为。 参数…

华为eNSP配置专题-ACL的配置

文章目录 华为eNSP配置专题-ACL的配置1、前置环境1.1、宿主机1.2、eNSP模拟器 2、基本环境搭建2.1、基本终端构成和连接2.2、各终端基本配置2.2.1、PC1和PC2的配置2.2.2、模拟互联网的路由器的配置2.2.3、财务部服务器的配置2.2.4、路由器AR1的配置 2.3、让各网段能够ping通互联…

ESP8266 Node Mcu开发板连接WIFI并上报数据到MQTT服务器——物联网应用开发

一、前言 本文主要介绍关于ESP8266 Node Mcu开发板如何连接WIFI并将本地采集的数据上传到MQTT服务器中。 大家调试可以使用MQTTBox 二、WIFI连接 首先&#xff0c;导入WIFI连接所需的头文件&#xff0c;引入所需库。 #include <ESP8266WiFi.h> 声明字符串常量&#xff0…

Vue项目路由加前缀

Vue项目路由加前缀 vue-cli3.0配置 1&#xff09;静态资源前缀 vue.config.js /module.exports 配置 publicPath&#xff1a;“/前缀” 2&#xff09;路由前缀 route/index.js export default new Router({ base:”/前缀" , }) 参考文章&#xff1a;https://blog.csd…

【00】神经网络之初始化参数

问题描述 #随机初始化权重 w12 np.random.randn(100, 784)/np.sqrt(784) 为什么除以28 回答 这里的代码是初始化一个深度学习模型中的权重矩阵w12。权重矩阵的形状是(100, 784)&#xff0c;这是一个从784个输入节点到100个隐藏节点的全连接层。 除以np.sqrt(784)是权重初始…

Qt QMovie和QLabel配合播放GIF表情包

文章目录 效果演示main函数创建MoviePlayer对象头文件movieplayer.h源文件movieplayer.cpp代码解释在Qt框架中,QMovie是用于处理动画和视频的类。所有源码已在本篇文章公布。 效果演示 main函数创建MoviePlayer对象 #include <QApplication>#include "movie

git pull and git fetch 到底有什么区别?

大家好这里是tony4geek 。 今天给大家介绍git pull and git fetch 有什么区别&#xff1f; 开发过程中大家肯定很多人都用到过git。获取代码有很多的git命令&#xff0c;最长用的命令是pull和fetch。那么问题来了他们之间到底有什么区别&#xff0c;该怎么使用呢&#xff1f;…

scratch身高统计 2023年9月中国电子学会图形化编程 少儿编程 scratch编程等级考试三级真题和答案解析

目录 scratch身高统计 一、题目要求 1、准备工作 2、功能实现 二、案例分析

docker容器内安装项目运行环境(python依赖包+allure)

目录 一、安装自动化项目依赖包1.导出项目依赖库2.上传到远程仓库3.进入jenkins容器内&#xff0c;检查是否安装git4.配置git用户信息5.生成秘钥6.把代码拉取下来7.安装python项目依赖8.运行项目 二、安装allure1.jenkins容器内安装allure&#xff0c;进入/usr/local/2.下载all…

MyBatisPlus的学习项目页面

MyBatisPlus通过扫描实体类&#xff0c;并基于反射获取实体类信息作为数据库表信息 类名驼峰转下划线作为表名 名为id的字段作为主键 变量名驼峰转下划线作为表的字段名 常见注解 TableName&#xff1a;用来指定表名 Tableld&#xff1a;用来指定表中的主键字段信息 Tabl…

修改http_charfinder.py使能在python311环境中运行

需要修改两个函数&#xff0c;第一个是init函数&#xff0c;修改如下&#xff1a; async def init(loop, address, port): # <1> # app web.Application(looploop) # <2> # app.router.add_route(GET, /, home) # <3> app web.Application(…