基 vue-element-admin升级的Vue3 +TS +Element-

  vue3-element-admin 是基于 vue-element-admin 升级的 Vue3 + Element Plus 版本的后台管理前端解决方案,是 有来技术团队 继 youlai-mall 全栈开源商城项目的又一开源力作。

  项目使用 Vue3 + Vite2 + TypeScript + Element-Plus + Vue Router + Pinia + Volar 等前端主流技术栈,基于此项目模板完成有来商城管理前端的 Vue3 版本。

  本篇先对本项目功能、技术栈进行整体概述,而下一篇则会细节的讲述从0到1搭建 vue3-element-admin,有始有终,在希望大家对本项目有个完完整整整了解的同时也能够在学 Vue3 + TypeScript 等技术栈少花些时间,少走些弯路,这样团队在毫无保留开源做的或许才有些许意义。

  基 vue-element-admin升级的Vue3 +TS +Element-Plus 版本的后端管理前端解决方案 vue3-element-admin 正式对外发布,有来开源组织又一精心力作,毫无保留开放从0到1构建过程_第1张图片

  技术栈 描述 官网 Vue3 渐进式 JavaScript 框架 https://v3.cn.vuejs.org/ TypeScript 微软新推出的一种语言,是 JavaScript 的超集 https://www.tslang.cn/ Vite2 前端开发与构建工具 https://cn.vitejs.dev/ Element Plus 基于 Vue 3,面向设计师和开发者的组件库 https://element-plus.gitee.io/zh-CN/ Pinia 新一代状态管理工具 https://pinia.vuejs.org/ Vue Router Vue.js 的官方路由 https://router.vuejs.org/zh/ wangEditor Typescript 开发的 Web 富文本编辑器 https://www.wangeditor.com/ Echarts 一个基于 JavaScript 的开源可视化图表库 https://echarts.apache.org/zh/ 首先说下为什么会有此开源项目:

  vue-element-admin 过于优秀,但可惜不更新了,停滞在 Vue2 版本 ;

  场面上基于 Vue3 + Element Plus 组合的框架封装复杂,后端接入困难,和 vue-element-admin 相差甚远;

  新技术栈、新特性支持不够,举例 TypeScript 、Vue3.2 的 setup 语法糖;

  开源项目不稳定,很好的项目悄无声息的不更新了,所以团队想把管理前端掌握在自己手里。

  开始为了给有来商城的管理前端找到合适的 Vue3 升级的替代方案,花了不少时间去研究市面对应的开源框架,尝试过接入有来商城线上微服务接口,但结果都不尽人意,很大部分原因是接入的复杂程度远远大于当初接入 vue-element-admin ,也不排除是先入为主的原因。但接入 vue-element-admin 确实是很轻松的,有兴趣的可以了解下接入过程:

  vue-element-admin实战 | 第一篇:移除mock接入后台微服务接口

  vue-element-admin实战 | 第二篇:最小改动接入后台实现动态路由菜单加载

  因为相信大多数同学在 Vue2 学习阶段同时学习了 vue-element-admin 这款优秀的开源框架,但随着时间的脚步也都慢慢被卷入 Vue3 + TypeScript 的学习浪潮,前端技术栈更新迭代太快让人直呼学不动了,为了减少大家学习成本,便基于 vue-element-admin 升级改造适配当前 Vue3 生态技术栈的 vue3-element-admin,站在巨人的肩膀不仅是为了看的更远,更多的是一种致敬、延续和希望走的更远。

  在线预览地址:www.youlai.tech

  以下截图是来自有来商城管理前端 mall-admin-web ,是基于 vue3-element-admin 为基础开发的具有一套完整的系统权限管理的商城管理系统,数据均为线上真实的而非Mock。

  首页控制台

  结构样式基本遵循 vue-element-admin , 首页模块均已做组件封装,可简单的实现替换。

  基 vue-element-admin升级的Vue3 +TS +Element-Plus 版本的后端管理前端解决方案 vue3-element-admin 正式对外发布,有来开源组织又一精心力作,毫无保留开放从0到1构建过程_第2张图片

  国际化

  已实现 Element Plus 组件和菜单路由的国际化,不过只做了少量国际化工作,国际化大部分是体力活,如果你有国际化的需求,会在下文从0到1实现Element Plus组件和菜单路由的国际化。

  主题设置

  大小切换

  基 vue-element-admin升级的Vue3 +TS +Element-Plus 版本的后端管理前端解决方案 vue3-element-admin 正式对外发布,有来开源组织又一精心力作,毫无保留开放从0到1构建过程_第3张图片

  角色管理

  基 vue-element-admin升级的Vue3 +TS +Element-Plus 版本的后端管理前端解决方案 vue3-element-admin 正式对外发布,有来开源组织又一精心力作,毫无保留开放从0到1构建过程_第4张图片

  菜单管理

  基 vue-element-admin升级的Vue3 +TS +Element-Plus 版本的后端管理前端解决方案 vue3-element-admin 正式对外发布,有来开源组织又一精心力作,毫无保留开放从0到1构建过程_第5张图片

  商品上架

  基 vue-element-admin升级的Vue3 +TS +Element-Plus 版本的后端管理前端解决方案 vue3-element-admin 正式对外发布,有来开源组织又一精心力作,毫无保留开放从0到1构建过程_第6张图片

  库存设置

  基 vue-element-admin升级的Vue3 +TS +Element-Plus 版本的后端管理前端解决方案 vue3-element-admin 正式对外发布,有来开源组织又一精心力作,毫无保留开放从0到1构建过程_第7张图片

  微信小程序/ APP/ H5 显示上架商品效果

  基 vue-element-admin升级的Vue3 +TS +Element-Plus 版本的后端管理前端解决方案 vue3-element-admin 正式对外发布,有来开源组织又一精心力作,毫无保留开放从0到1构建过程_第8张图片

  项目启动 浏览器访问 http://localhost:3000

  项目部署 生成的静态文件在工程根目录 dist 文件夹

  大家在整合第三方插件的时候一定要注意版本,不同版本的插件整合会有区别

  1. 运行环境Node

  

  2. 开发工具VSCode

  下载地址:https://code.visualstudio.com/Download

  3. 必装插件Volar

  VSCode 插件市场搜索 Volar (就排在第一位的骷髅头),且要禁用默认的 Vetur.

  基 vue-element-admin升级的Vue3 +TS +Element-Plus 版本的后端管理前端解决方案 vue3-element-admin 正式对外发布,有来开源组织又一精心力作,毫无保留开放从0到1构建过程_第9张图片

  1. Vite 是什么?

  2. 初始化项目

  vue3-element-admin:项目名称 vue-ts : Vue + TypeScript 的模板,除此还有vue,react,react-ts模板 基 vue-element-admin升级的Vue3 +TS +Element-Plus 版本的后端管理前端解决方案 vue3-element-admin 正式对外发布,有来开源组织又一精心力作,毫无保留开放从0到1构建过程_第10张图片

  3. 启动项目

  浏览器访问: http://localhost:3000

  基 vue-element-admin升级的Vue3 +TS +Element-Plus 版本的后端管理前端解决方案 vue3-element-admin 正式对外发布,有来开源组织又一精心力作,毫无保留开放从0到1构建过程_第11张图片

  ?

  1.本地安装Element Plus和图标组件

  2.全局注册组件

  3. 页面使用 Element Plus 组件和图标

  4. 效果预览

  基 vue-element-admin升级的Vue3 +TS +Element-Plus 版本的后端管理前端解决方案 vue3-element-admin 正式对外发布,有来开源组织又一精心力作,毫无保留开放从0到1构建过程_第12张图片

  使用 @ 代替 src

  1. Vite配置

  2. 安装@types/node

  编译器报错:TS2307: Cannot find module 'path' or its corresponding type declarations.

  本地安装 Node 的 TypeScript 类型描述文件即可解决编译器报错

  3. TypeScript 编译配置

  4.别名使用

  官方教程: https://cn.vitejs.dev/guide/env-and-mode.html

  1. env配置文件

  项目根目录分别添加 开发、生产和模拟环境配置

  开发环境配置:.env.development

  生产环境配置:.env.production

  模拟生产环境配置:.env.staging

  2.环境变量智能提示

  添加环境变量类型声明

  后面在使用自定义环境变量就会有智能提示,环境变量使用请参考下一节。

  基 vue-element-admin升级的Vue3 +TS +Element-Plus 版本的后端管理前端解决方案 vue3-element-admin 正式对外发布,有来开源组织又一精心力作,毫无保留开放从0到1构建过程_第13张图片

  1. 跨域原理

  浏览器同源策略: 协议、域名和端口都相同是同源,浏览器会限制非同源请求读取响应结果。

  解决浏览器跨域限制大体分为后端和前端两个方向:

  后端:开启 CORS 资源共享; 前端:使用反向代理欺骗浏览器误认为是同源请求; 2. 前端反向代理解决跨域

  Vite 配置反向代理解决跨域,因为需要读取环境变量,故写法和上文的出入较大,这里贴出完整的 vite.config.ts 配置。

  官方教程: https://github.com/vbenjs/vite-plugin-svg-icons/blob/main/README.zh_CN.md

  Element Plus 图标库往往满足不了实际开发需求,可以引用和使用第三方例如 iconfont 的图标,本节通过整合 vite-plugin-svg-icons 插件使用第三方图标库。

  1. 安装 vite-plugin-svg-icons

  2. 创建图标文件夹

  3. main.ts 注册脚本

  4. vite.config.ts 插件配置

  5. 组件封装

  6. 使用案例

  Pinia 是 Vue.js 的轻量级状态管理库,Vuex 的替代方案。

  尤雨溪于2021.11.24 在 Twitter 上宣布:Pinia 正式成为 vuejs 官方的状态库,意味着 Pinia 就是 Vuex 5 。

  基 vue-element-admin升级的Vue3 +TS +Element-Plus 版本的后端管理前端解决方案 vue3-element-admin 正式对外发布,有来开源组织又一精心力作,毫无保留开放从0到1构建过程_第14张图片

  1. 安装Pinia

  2. Pinia全局注册

  3. Pinia模块封装

  4. 使用Pinia

  1. axios工具封装

  2. API封装

  以登录成功后获取用户信息(昵称、头像、角色集合和权限集合)的接口为案例,演示如何通过封装的 axios 工具类请求后端接口,其中响应数据

  3. API调用

  官方文档: https://router.vuejs.org/zh/api/

  1. 安装 vue-router

  2. 创建路由实例

  创建路由实例并导出,其中包括静态路由数据,动态路由后面将通过接口从后端获取并整合用户角色的权限控制。

  3. 路由实例全局注册

  4. 动态权限路由

  其中 是根据用户角色获取拥有权限的路由(静态路由+动态路由),核心代码如下:

  1. Directive 自定义指令

  2. 自定义指令全局注册

  3. 指令使用

  官方教程:https://element-plus.gitee.io/zh-CN/guide/i18n.html

  Element Plus 官方提供全局配置 Config Provider实现国际化

  i18n 英文全拼 internationalization ,国际化的意思,英文 i 和 n 中间18个英文字母

  1. 安装 vue-i18n

  2. 语言包

  创建 src/lang 语言包目录,中文语言包 zh-cn.ts,英文语言包 en.ts

  3. 创建i18n实例

  4. i18n 全局注册

  5. 静态页面国际化

  $t 是 i18n 提供的根据 key 从语言包翻译对应的 value 方法

  6. 动态路由国际化

  i18n 工具类,主要使用 i18n 的 te (判断语言包是否存在key) 和 t (翻译) 两个方法

  页面使用

  推荐教程:50 行代码 Vue3 中使用 wangEditor 富文本编辑器

  1. 安装wangEditor和Vue3组件

  2. wangEditor组件封装

  3. 使用案例

  基 vue-element-admin升级的Vue3 +TS +Element-Plus 版本的后端管理前端解决方案 vue3-element-admin 正式对外发布,有来开源组织又一精心力作,毫无保留开放从0到1构建过程_第15张图片

  1. 安装 Echarts

  2. Echarts 自适应大小工具类

  侧边栏、浏览器窗口大小切换都会触发图表的 resize() 方法来进行自适应

  3. Echarts使用

  官方示例: https://echarts.apache.org/examples/zh/index.html

  官方的示例文档丰富和详细,且涵盖了 JavaScript 和 TypeScript 版本,使用非常简单。

  基 vue-element-admin升级的Vue3 +TS +Element-Plus 版本的后端管理前端解决方案 vue3-element-admin 正式对外发布,有来开源组织又一精心力作,毫无保留开放从0到1构建过程_第16张图片

  Gitee Github vue3-element-admin https://gitee.com/youlaiorg/vue3-element-admin https://github.com/youlaitech/vue3-element-admin 如果有问题或有好的建议可以添加开发者微信,备注「有来」进入学习交流群,备注「无回」参与开发。

  开发人员 开发人员 基 vue-element-admin升级的Vue3 +TS +Element-Plus 版本的后端管理前端解决方案 vue3-element-admin 正式对外发布,有来开源组织又一精心力作,毫无保留开放从0到1构建过程_第17张图片 基 vue-element-admin升级的Vue3 +TS +Element-Plus 版本的后端管理前端解决方案 vue3-element-admin 正式对外发布,有来开源组织又一精心力作,毫无保留开放从0到1构建过程_第18张图片