Vue3+TS后台管理系统 - 模板

1,186 阅读5分钟

Vue3+TS后台管理系统 - 模板

gitee链接

gitee.com/tcwty123/vu…

技术栈

  1. 框架 Vue3全家桶+ts
  2. 工程化环境 vite
  3. 状态管理工具 pinia
  4. pinia持久化存储技术
  5. 包管理工具 pnpm
  6. 代码校验工具eslint+prettier
  7. 请求工具 axios
  8. UI组件库 element-plus
  9. css预编译 scss
  10. scss全局变量技术
  11. svg雪碧图技术 vite-plugin-svg-icons
  12. 组件设置name vueSetupExtend技术
  13. 全局组件自动注册技术 unplugin-auto-import/vite+unplugin-vue-components/vite
  14. 注册自定义插件技术 use自己的全局方法
  15. hooks函数
  16. 递归组件技术自动生成左侧菜单栏
  17. transition动画技术

首页样式

home.png

使用介绍

项目基础配置src/setting

左侧菜单栏中logo 项目名称 是否显示logo

统一在src/setting中配置, 已封装完成, 到时直接使用即可

路由篇 src/router

1. 配置地址

配置路由这里 将routes数组单独封装到routers.ts中,以后需要配置路由只需要在src/router/routers中配置即可

企业微信截图_16867084901352.png

2. 路由配置介绍

e4057639518d39cf0f8d44c277094c6.png

3. 路由守卫

src/setting

配置前置已经后置守卫功能 区分登录或未登录的状态 进行限制访问

后置守卫中增加title功能 随着路由的变化动态显示

网络请求篇src/utils/request

1. axios拦截器

请求拦截器: 全局携带token =>token建议在store中取,配合上pinia持久化技术

响应拦截器:

成功=>

response.data 剥离一层响应成功的数据

处理请求成功, 业务失败的业务,例如登录时,密码输入错误 请求成功,但是业务失败,可以通过code状态码来做判断

失败=>

通过console.dir(error)查看所以错误的请求信息

token过期(401) 清除登录状态=> 回到登录页

请求错误统一提示 => 利用Message.error(返回的错误massage信息)

2. 利用ts对axios进行二次封装

开发中利用未封装的axios进行请求一次,知晓通过结构一层后最外面的数据字段, 根据字段对

下图红框处进行实际处理

企业微信截图_1686710784894.png

根据二次封装的axios 对接口api进行集中管理

src/api

如果是get请求,可以不写 axios默认支持get请求

对数据定义类型 统一在src/types中创建xxx.d.ts分模块进行类型定义

企业微信截图_1686725249182.png

全局状态管理篇 src/stores

优势:

调用非常方便,可节省大量的组件通讯代码,通过调用函数或者取对象值的方式将信息全局使用

1. 注意事项

1)参照已有的模块进行cv 注意需要自行修改变量名以及在return中将所有的变量以及方法进行返回

如果要开启自动本地持久化存储,需要加上

  // {
  //   // 存储时持久化到本地, 默认是使用localStorage
  //   persist: true
  // }

2)如果要删除某个变量信息以及本地存储,直接赋值未空或者undefined即可,本地会随着仓库的变化而自动变化,不需要手动remove

3)在store下的index.ts中需要导入新增的模块

// 直接导出 模块中的所有成员
// * 指的是模块中的所有成员
// export * from '模块路径'
2. 使用方法
// 例如A组件调用
const stroe = useUserStore()
console.log(store.变量A) 在模板中使用同理
store.setUserInfo(可传参)

注册全局组件

此项目在src/components下注册全局组件不需要额外自行全局注册! 模板中直接使用即可

要让全局组件具备类型,需要在types/components.d.ts中进行类型定义,参照文件上文导入后cv即可

Layout介绍

企业微信截图_16867223236637.png

1. 说明

Layout是整个项目的架子, 包含项目的左侧菜单,头部导航以及主体二级路由出口

logo =====> 菜单栏logo以及项目名称 在setting.ts文件中自定义修改

menu =====> 左侧菜单栏 详见下文

mian =====> 二级路由出口

tabber =====> 头部导航栏 包含面包屑 刷新|全屏|设置|等出功能

index.vue =====> Layout入口文件

2. menu组件的使用

此组件已封装完成, 开发中只需在src/routers中配置路由信息即可,menu会根据配置的路由表动态生成左侧菜单

修改选中颜色,菜单栏背景颜色 需在Layout/index.vue中对el-menu菜单组件按照文档进行配置即可,我这里已经写好,有需要可以直接修改属性

<el-menu
   background-color="#001529"
   text-color="#fff"
   router
   active-text-color="pink"
   :default-active="$route.path"
   :collapse="settingStore.fold"
   :collapse-transition="false"
 >

若要修改整个菜单栏背景 还需要在styles/variable.scss对$base-menu-background变量进行修改

注意*

每个路由信息都需要添加上对应的元信息=>也就是mate中的内容

3. 菜单栏左侧svg使用

需要下载svg图 推荐iconfont 按照ui图进行下载svg即可

若要跳转icon大小 需要在Layout/menu/index.vue中对svg大小自行设置即可,目前已经在组件中写好

// Latout/menu/index.vue
<style lang="scss" scoped>
::v-deep() {
  .svg {
    font-size: 20px !important;
    margin-right: 5px;
  }
}
</style>

SvgIcon全局组件使用

  1. 下载svg图,并进行名字修改

  2. 例如login中需要使用eye-off图标进行编辑及存放svg

  3. 使用

     <SvgIcon name="login-eye-off" width="xx" height="xx" color="xx"/>
    
  4. SvgIcon支持class 设置font-size直接调整大小,如果大家正好不知道而且有兴趣了解如何封装的,可以看一下我的这篇文章,包含vue2以及vue3的封装雪碧图的详细说明. 手摸手,带你优雅的使用 SvgIcon

备注: 如果color不生效, 可以在iconfont上下载指定的颜色再使用即可,如下图👇

企业微信截图_16867244922214.png

Hook函数

1. useCounDown 实现自动倒计时的功能 默认值60
2. useLazyData 实现数据懒加载 只有出现在可视区域内才会发送请求, 包含图片懒加载详见IntersectionObserver - 懒加载的实现

完结~