基于 vue + Element-ui 开发的后台管理系统
2022-08-03 09:57:03
225
{{single.collect_count}}

基于 vue + Element-ui 开发的后台管理系统

项目演示地址:https://git.io/fp9UM
项目仓库地址:https://github.com/Neveryu/vue-cms

引文

搞一个后台管理系统,应该是每个公司都会有的需求。基于后端(JAVA、PHP、GO)的 MVC 模式的后台管理系统中,一般前端使用的技术栈都是 jQuery + Bootstrap。

因为现在都是前后端分离,所以搞一个基于 Vue + ElementUI 的纯前端的后台管理系统,通过接口与后端交互。

思考

纯前端搞一个后台管理系统,如果不是 SPA 的话,可能还确实挺麻烦的:
1、全局状态、登录状态、用户信息之类的数据如何维护
2、菜单、路由权限如何设计管理
3、模块、组件如何划分以及复用
4、代码如何管理维护


所以,SPA 还是挺好的。

快速上手

# 克隆项目git clone https://github.com/Neveryu/vue-cms.git# 进入项目目录cd vue-cms# install dependenciesnpm install# serve with hot reload at localhost:8080npm start

完成上面这套操作,就可以在浏览器中输入:localhost:8080 看到项目了。


项目结构介绍

在这里插入图片描述
项目的外层目录文件,就没啥好说的了,本身也是用 vue-cli 来构建的,大家应该都清楚。我们主要来看一下 src 里面的内容。
在这里插入图片描述

引入 ElementUI

npm i element-ui -S

Element UI 作为我们主要的 UI 组件库,还是推荐使用 完整引入 的方式。
然后,在 main.js 中:

import ElementUI from 'element-ui'import 'element-ui/lib/theme-chalk/index.css'Vue.use(ElementUI, {size: 'medium'})

? 引入示例

登录功能设计

  • 自定义输入验证校验规则

ElementUI 本身有提供表单的验证功能,但是验证规则有限,如果你想更丰富,更适合自己场景的验证规则,可以使用 自定义校验规则

// username 验证规则const validateUsername = (rule, value, callback) => {if (!isValidUsername(value)) {// 如果callback是一个error对象,则验证不通过callback(new Error('请输入正确的用户名'))} else {callback()}}// 在 rules 中对要验证的字段配置 validatorrules: { username: [{ required: true, message: '请输入账号', trigger: 'blur' },{ required: true, trigger: 'blur', validator: validateUsername },{ required: true, trigger: 'change', validator: validateUsername }],pwd: [{ required: true, message: '请输入密码', trigger: 'blur' },{ required: true, trigger: 'blur', validator: validatePwd },{ required: true, trigger: 'change', validator: validatePwd }]}
  • 登录功能以及权限

提交用户输入的登录信息,调用接口要做验证。验证成功之后:
1、localstorage 会存储登录成功后下发的 token (后端会验证token的时效性)
2、登录成功后会跳到系统的主页
3、每一次路由跳转之前都会验证是否是登录态

  • 权限以及菜单栏

1,permission.js 的功能是全局的权限校验,每一次路由跳转都会触发这里面的全局路由前置钩子函数,这个是非常有必要的。
2、对于不同权限的用户对应不同的菜单来说,在登录之后,获取到用户在这个系统中所属的角色,然后,将 【基础菜单】 和 【角色所属菜单】做一个叠加,生成登录用户的菜单栏。


项目演示地址:https://git.io/fp9UM
项目仓库地址:https://github.com/Neveryu/vue-cms

回帖
全部回帖({{commentCount}})
{{item.user.nickname}} {{item.user.group_title}} {{item.friend_time}}
{{item.content}}
{{item.comment_content_show ? '取消' : '回复'}} 删除
回帖
{{reply.user.nickname}} {{reply.user.group_title}} {{reply.friend_time}}
{{reply.content}}
{{reply.comment_content_show ? '取消' : '回复'}} 删除
回帖
收起
没有更多啦~
{{commentLoading ? '加载中...' : '查看更多评论'}}