1. 首页
  2. 软件开发
  3. 前后端分离项目实战-通用管理系统搭建(前端Vue3+ElementPlus,后端Springboot+Mysql+Redis)第一篇:项目创建和工具安装集成

前后端分离项目实战-通用管理系统搭建(前端Vue3+ElementPlus,后端Springboot+Mysql+Redis)第一篇:项目创建和工具安装集成

  • 发布于 2024-08-19
  • 11 次阅读

天行健,君子以自强不息;地势坤,君子以厚德载物。


每个人都有惰性,但不断学习是好好生活的根本,共勉!


文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。


明月出天山,苍茫云海间。
------《关山月》



文章目录




第一部分:项目的构建以及基础组件的安装配置

1. 后台管理系统模块划分

通用后台管理系统:登录模块、系统主页、用户管理、其他功能、找回密码、权限管理、系统配置

后台管理系统的模块和功能表:

模块功能列表
登录模块1. 账号密码登录 2. 短信验证码登录 3. 二维码扫码登录
系统主页1.动态菜单 2.tab页 3.主题切换 4.个人信息 5.修改密码
用户管理1.用户列表 2.重置密码 3.启用停用
其他功能1.消息管理 2.验证码管理 3.已读消息 4.数据可视化
找回密码1.邮箱找回密码 2.短信验证码找回密码
权限管理1.角色管理 2.菜单管理
系统配置1.数据字典 2.操作日志 3.系统配置

2. 项目的创建

2.1 创建Vue3项目

可参考:Vue3入门之创建vue3的单页应用(vite+vue)
找到一个文件夹位置,项目文件夹会创建在该文件夹下,在此位置目录中输入cmd回车打开窗口
使用命令创建

npm create vue@latest

创建完成后使用vscode打开项目,对项目包结构进行整理

Vue Official插件安装

在Vscode中安装插件Vue - Official,Vue官方发布的那个,如下图

2.2 初始化项目结构

2.2.1 删除不需要的文件

删除src下component包中的文件
删除src下assets包中的文件

2.2.2 删除不需要的代码

删除src包下的App.vue文件中的内容,保留以下标签即可,如下

<script setup>

</script>

<template>

</template>

<style scoped>

</style>

删除main.ts中的main.css引入,保留如下代码即可

import {
    createApp } from 'vue'
import App from './App.vue'
import router from './router'

const app = createApp(App)

app.use(router)

app.mount('#app')

删除index.ts中的HomeView引入以及不需要的内容,保留以下内容即可

import {
    createRouter, createWebHistory } from 'vue-router'

const router = createRouter({
   
  history: createWebHistory(),
  routes: []
})

export default router
2.2.3 修改文件内容

修改index.html
将title默认的Vite App修改为寒山李白通用后台管理系统,内容如下

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <link rel="icon" href="/favicon.ico">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>寒山李白通用后台管理系统</title>
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="/src/main.ts"></script>
  </body>
</html>
2.2.4 创建需要的包和文件

在src包下创建styles包,mock包、store包,utils包,api包,
在styles包下创建一个theme主题包和一个default.css样式文件,然后再在theme包下创建一个default-theme.css文件

编写default.css文件和default-theme.css文件
default.css

@charset 'utf-8';
html,
body {
   
	margin: 0;
	padding: 0;
}

default-theme.css

@charset 'utf-8';
.default-theme {
   }

2.3 运行项目

下载依赖

npm install

启动项目

npm run dev

2.4 访问项目

根据输出提示,浏览器输入地址进行访问

http://localhost:5173/

浏览器界面如下
一个空白页

3. 安装和使用element-plus

3.1 安装element-plus

在terminal终端中执行以下命令安装element-plus

npm install element-plus --save

--save表示将依赖添加到package.json文件中

3.2 element-plus组件使用实例

3.2.1 引入并注册element相关组件

在main.ts中引入需要的element-plus组件并全局注册
此时main.ts完整代码如下


import {
    createApp } from 'vue'
import App from './App.vue'
import router from './router'

// 引入element-plus
import ElementPlus from 'element-plus'
// 引入element-plus的css组件
import 'element-plus/dist/index.css'
// 引入element-plus的国际化
import zhCn from 'element-plus/es/locale/lang/zh-cn'
// 引入element-plus字体图标相关组件
import * as ElementPlusIconsVue from '@element-plus/icons-vue'

const app = createApp(App)

// 全局注册路由
app.use(router)

// 全局注册element-plus、国际化
app.use(ElementPlus, {
   
    locale: zhCn
})

// 全局注册element-plus图标相关组件
for (const [key, component] of Object.entries(ElementPlusIconsVue)){
   
    app.component(key, component)
}

app.mount('#app')
3.2.2 element-plus图标的使用

element-plus图标组件官网地址:https://element-plus.org/zh-CN/component/icon.html
在element-plus组件界面往下滑找到图标,复制图标,鼠标左键单击即可复制

在App.vue文件的template标签中粘贴图标的代码

<script setup lang="ts">

</script>

<template>
  <el-icon><House /></el-icon>
</template>

<style scoped>

</style>

浏览器刷新界面可以看到House图标

4. Vue Router路由的配置使用

Vue-Router路由官网地址:https://router.vuejs.org/zh/guide/

本篇创建项目时已经同时集成了路由Vue Router,无需再次安装

4.1 创建登录页面组件(login.vue)

在views包下创建login包,在login包下创建login.vue组件,组件内容如下
login.vue

<script setup lang="ts">

</script>

<template>
        登录界面
</template>

<style scoped>

</style>

注意:组件中的script标签必须加上lang='ts'参数,不然会报错

4.2 路由配置(index.ts)

根据上面的登录组件,在index.ts中引入登录组件login.vue
配置后的index.ts完整代码如下

import {
    createRouter, createWebHistory } from 'vue-router'

// 自定义路由组件或从其他文件导入,这里选择从其他文件导入
import login from "../views/login/login.vue";

// 定义一些路由,每个路由都需要映射到一个组件,
const routes = [
  {
   
    path: '/',
    component: login
  }
]

// 创建路由实例并传递'routes'配置 你可以在这里输入更多的配置
const router = createRouter({
   
  history: createWebHistory(),
  // routes:routes可以简写成routes,不会报错
  // routes:[]
  routes
})

export default router

4.3 路由应用(App.vue)

配置后,在App.vue中使用RouterView标签进行渲染页面
App.vue完整代码如下

<script setup lang="ts">
</script>

<template>
  <RouterView></RouterView>
</template>

<style scoped>

</style>
4.4 查看结果

完成以上配置后,启动项目,访问,浏览器页面,如下,首页已经路由到了登录页面组件的内容

5. 数据请求配置(axios)

使用axios进行数据请求,可参考axios官网:https://www.axios-http.cn/

5.1 安装axios

在终端输入命令进行安装

npm install axios --save

5.2 配置axios实例

在代码中可直接使用axios进行请求,但有时会需要配置请求的参数,这个时候可以自定义axios实例

在src下的api包下创建文件api.ts,在文件中配置axios

import axios from 'axios'

// 数据请求自定义配置(实例)

const api = axios.create({
   
    // baseURL: 'https://mo_sss.blog.csdn.net.cn',
    baseURL: import.meta.url,
    timeout: 1000,
    headers: {
   
        // 'X-Custom-Header': 'foobar'
        'Content-Type': 'application/json;charset=UTF-8'
    }
    // withCredentials 表示跨域请求时是否需要使用凭证,默认是true
    // withCredentials: true,
    // responseType 表示浏览器将要响应的数据类型,包括arraybuffer、document、json、text、stream
    // 浏览器专属类型: blob
    // 默认值就是json
    // responseType: 'json',
    // responseEncoding 表示用于解码响应的编码(Node.js专属),注意,忽略responseType值为stream或者客户端请求
    // 默认值为utf-8
    // responseEncoding: 'utf-8'
});

export default api;

5.3 引用axios实例

在login.vue中引用实例

<script setup lang="ts">

    import api from '../../api/api'
	// 这里的地址必须是一个有返回值的接口,这里暂时没有,先用百度地址
    api.get('https://www.baidu.com').then(resp=>{
   
        console.log(resp.data)
    })

</script>

<template>
    登录界面
</template>

<style scoped>

</style>

6. 安装和配置mock(暂时使用,后续会使用后端接口)

mock用来模拟数据
官网地址:http://mockjs.com/

6.1 安装mock

使用命令安装mockjs库

npm install mockjs --save

6.2 配置mock

在src下的mock包中新建index.ts文件,文件内容如下

import Mock from 'mockjs'

在main.ts文件中添加引入mock
添加以下代码

// 引入mockjs
import './mock/index'

7. 安装和配置Vuex

vuex用来数据状态的管理
官网地址:https://vuex.vuejs.org/zh/

7.1 安装Vuex

参考官网安装命令如下

npm install vuex@next --save

7.2 配置Vuex

在src下的store包中创建index.ts文件,文件内容如下

// 引入
import {
    createStore } from "vuex"

// 创建一个新的store实例
const store = createStore({
   
    state() {
   
        return{
   
            count: 0
        }
    },
    mutations: {
   
        increment(state) {
   
            state.count++
        }
    }
})

export default store;

在main.ts文件中新增以下代码(引入和注册vuex)

// 引入Vuex
import store from './store/index'
// 全局注册vuex状态管理
app.use(store)

8. 工具方法实现

在src包下的utils包中新增不同方法的实现
添加的方法代码参考element-plus官网组件

在src包下的utils包中新建文件utils.ts

8.1 加载方法的实现

加载组件直达链接
在utils包中创建utils.ts
在文件中添加以下代码

import {
    ElLoading, ElMessage } from "element-plus";

const utils = {
   
    // 加载动画
    loading: null,
    // loading: String,
    // 展示加载动画
    showLoadding(msg:string){
   
        utils.loading = ElLoading.service({
   
            lock: true,
            text: msg?msg:'Loading',
            // background: 'rgba(0,0,0,0.7)',
        })

    },
    // 隐藏加载动画
    hideLoadding(){
   
        utils.loading && utils.loading.close()
    },
}

export default utils;

8.2 消息提示的实现

参考组件中消息的提示代码,将一下代码填入变量utils

    // 消息提示
    showError(msg:string){
   
        return ElMessage({
   
            message: msg,
            grouping: true,
            type: 'error'
        })
    } ,
    showSuccess(msg:string){
   
        return ElMessage({
   
            message: msg,
            grouping: true,
            type: 'success'
        })
    } ,
    showWarning(msg:string){
   
        return ElMessage({
   
            message: msg,
            grouping: true,
            type: 'warning'
        })
    } ,
    showDefault(msg:string){
   
        return ElMessage({
   
            message: msg,
            grouping: true,
            type: 'info'
        })
    } ,
    closeMessage(){
   
        ElMessage.closeAll()
    } ,

8.3 完整代码

完整的utils.ts文件代码如下

import {
    ElLoading, ElMessage } from "element-plus";

const utils = {
   
    // 加载动画
    loading: null,
    // loading: String,
    // 展示加载动画
    showLoadding(msg:string){
   
        utils.loading = ElLoading.service({
   
            lock: true,
            text: msg?msg:'Loading',
            // background: 'rgba(0,0,0,0.7)',
        })

    },
    // 隐藏加载动画
    hideLoadding(){
   
        utils.loading && utils.loading.close()
    },
    // 消息提示
    showError(msg:string){
   
        return ElMessage({
   
            message: msg,
            grouping: true,
            type: 'error'
        })
    } ,
    showSuccess(msg:string){
   
        return ElMessage({
   
            message: msg,
            grouping: true,
            type: 'success'
        })
    } ,
    showWarning(msg:string){
   
        return ElMessage({
   
            message: msg,
            grouping: true,
            type: 'warning'
        })
    } ,
    showDefault(msg:string){
   
        return ElMessage({
   
            message: msg,
            grouping: true,
            type: 'info'
        })
    } ,
    closeMessage(){
   
        ElMessage.closeAll()
    } ,
}

export default utils;

9. 界面主题配置

为界面配置暗黑主题的切换
参考暗黑组件地址:https://element-plus.org/zh-CN/guide/dark-mode.html

9.1 引入组件

在main.ts中引入暗黑主题的css变量

// 引入element-plus的暗黑模式主题的css变量
import 'element-plus/theme-chalk/dark/css-vars.css'

9.2 应用组件

在App.vue中实现暗黑主题的按钮
在App.vue中的script中添加以下引入暗黑主题组件

// 引入暗黑主题的动态切换
import {
    useDark, useToggle } from '@vueuse/core'

在template中添加以下代码实现按钮

  <!-- 暗黑主题动态切换按钮实现 -->
  <button @click="toggleDark()">
    <i inline-block align-middle i="dark:carbon-moon carbon-sun"/>

    <span class="ml-2">{
   {
    isDark ? 'Dark' : 'Light' }}</span>
  </button>

完整的App.vue代码如下

<script setup lang="ts">
// 引入暗黑主题的动态切换
import {
    useDark, useToggle } from '@vueuse/core'

const isDark = useDark()
// 切换主题函数
const toggleDark = useToggle(isDark)

</script>

<template>
  <RouterView></RouterView>
  <!-- 暗黑主题动态切换按钮实现 -->
  <button @click="toggleDark()">
    <i inline-block align-middle i="dark:carbon-moon carbon-sun"/>

    <span class="ml-2">{
   {
    isDark ? 'Dark' : 'Light' }}</span>
  </button>
  <!-- <el-icon><House /></el-icon> -->
  <!-- <el-icon><Plus /></el-icon> -->
</template>

<style scoped>

</style>

9.3 暗黑功能演示

运行项目,访问浏览器页面
点击按钮进行界面主题切换


感谢阅读,祝君暴富!


原文链接: https://hanshan.blog.csdn.net//article/details/140976922