VUE搭建后台管理界面

article/2025/9/2 9:05:49

在这里插入图片描述


后台管理

    • 一、前言
    • 二、依赖配置
    • 三、koa框架
    • 四、数据库
    • 五、路由
    • 六、前端界面
      • 6.1 登录界面
      • 6.2 注册界面
      • 6.3 展示界面
    • 七、阿里云部署
      • 7.1 前端项目
      • 7.2 后端node
      • 7.3 mysql安装
      • 7.4 测试
    • 八、总结


一、前言

本篇文章从头到尾过一遍vue3搭建项目的过程,实现一个用户登录、注册,根据身份等级判断登录界面的应用。前端采用vue3+vite+element-plus,后端使用node.js+koa+mysql

2

4

5

项目开源地址:https://github.com/bosombaby/user_manage

二、依赖配置

{"name": "user_interface","private": true,"version": "0.0.0","type": "module","scripts": {"dev": "vite","build": "vite build","preview": "vite preview"},"dependencies": {"@element-plus/icons-vue": "^2.0.10","axios": "^1.1.3","element-plus": "^2.2.22","nanoid": "^4.0.0","vue": "^3.2.41","vue-router": "^4.0.12"},"devDependencies": {"@vitejs/plugin-vue": "^3.2.0","less": "^4.1.3","unplugin-auto-import": "^0.11.4","unplugin-vue-components": "^0.22.9","vite": "^3.2.3"}
}

在这里插入图片描述

  • node_modules 文件夹用来存放所有已安装到项目中的包。require() 导入第三方包时,就是从这个目录中查找并加载包。
  • package-lock.json 配置文件用来记录 node_modules 目录下的每一个包的下载信息,例如包的名字、版本号、下载地址等。
  • package.json项目的名称、版本号、描述等、用到了哪些包、开发期间使用的包、部署使用的包
    • devDependencies :开发依赖
    • dependencies :核心依赖
  • 注意:程序员不要手动修改 node_modules 或 package-lock.json 文件中的任何代码,npm 包管理工具会自动维护它们,今后在项目开发中,一定要把 node_modules 文件夹,添加到 .gitignore 忽略文件中

三、koa框架

这次采取KOa框架作为后端,Koaexpress同一个团队开发,自由度、灵活度更高,异步请求也更加灵活了。后端主要还是对前端接口返回json数据,前端好进行数据处理。

const Koa = require('koa')
const cors=require('@koa/cors')
const router=require('./router/')
const bodyParser=require('koa-bodyparser')//静态变量
const PORT = 8080const app = new Koa()
// 跨域
app.use(bodyParser())
app.use(cors())
app.use(router.routes())app.listen(PORT, () => {console.log(`http://127.0.0.1:${PORT}`);
})

之前看到几个写得比较好的koa框架教程,只不过有点老了,但思想还是通用的。

koa框架

技术博客

四、数据库

user_info

键名字段主键不为空
idVARCHAR(10)11
usernameVARCHAR(45)01
passwordVARCHAR(45)01
levelINT01

其中,level三个数值0 1 2分别代表超级管理员、管理员、普通用户

这次,刚开始请求数据库资源的时候,只用了简单的async/await,导致后端发送的一直是前端上一次请求的数据,淦!后来,发现对数据库整体请求要单独封装一个Promise对象,代码如下:

const mysql = require('mysql')const pool = mysql.createPool({host: '127.0.0.1',user: 'root',password: '123456',database:'3d_resources'})let query = (sql, values)=> {return new Promise((resolve, reject) => {pool.getConnection((err, connection) => {if (err) {reject('数据库连接出错',err)} else {connection.query(sql, values, (err, results) => {if (err) {reject('数据库语句出错',err)} else {resolve(results)}connection.release()})}})})
}module.exports=query

五、路由

vue3的路由使用和vue2已经完全不一样了,vue3使用起来更加自由,用到什么功能就导入对应的函数,但有时候写代码也下不去手。下面,主要讲解一下路由的基本使用。首先,创建router文件夹,统一管理路由。

import { createRouter, createWebHashHistory } from 'vue-router'const routes = [{path: '/',redirect:'/login'},{path: '/login',name:'login',component:()=>import('../views/Login.vue')},{path: '/register',component:()=>import('../views/Register.vue')},{path: '/layout',component:()=>import('../views/Layout/Layout.vue'),children:[{path: '/layout/home0',name:'home0',component:()=>import('../views/Layout/Home0.vue'),},{path: '/layout/home1',name:'home1',component:()=>import('../views/Layout/Home1.vue'),},{path: '/layout/home2',name:'home2',component:()=>import('../views/Layout/Home2.vue'),},]}
]const router = createRouter({history:createWebHashHistory(),routes,})
export default router

createWebHashHistory()是路径问题,就是访问的时候带有/#/这个符号。Vue-Router有两种模式:hash模式和history模式。默认的路由模式是hash模式。

对于页面路由跳转,使用,传参啥的,使用 useRouter ,useRoute两个生成参数,不使用this了。

推荐文章:vue3中关于路由hash与History的设置

路由关系

  • 登录
  • 注册
  • 展示
    • 超级管理员界面
    • 管理员界面
    • 用户界面

其中,登录界面可以跳转到注册界面,注册完成跳转到登录界面。登录并且后端数据库验证通过,根据用户的身份进入不同的展示界面。

六、前端界面

6.1 登录界面

3

<template><el-form :model="loginForm" class="login-form" ref="form"><!-- 账户 --><el-form-item label="账号" prop="username" :rules="[{ required: true, message: '账号不能为空', trigger: 'blur' }]"><el-input v-model=loginForm.username /></el-form-item><!-- 密码 --><el-form-item label="密码" prop="password" :rules="[{ required: true, message: '密码不能为空', trigger: 'blur' }]"><el-input v-model="loginForm.password" type="password" /></el-form-item><el-form-item class="last"><el-button type="primary" @click="checkInfo">登录</el-button><el-button type="success" @click="enterRegister">进入注册</el-button></el-form-item></el-form>
</template><script setup>
import { ref, reactive,getCurrentInstance,onMounted } from 'vue'
import { useRouter ,useRoute} from 'vue-router'import axios from 'axios'const {proxy}=getCurrentInstance()const loginForm = reactive({id: '', username: '', password: '',level:2
})const router=useRouter()
const route=useRoute()const request = axios.create({baseURL:'http://127.0.0.1:8080'
})//账号验证
const checkInfo =  () => {//服务端验证账号密码proxy.$refs.form.validate(async (valid,fields) => {if (valid) {let userData={}let res= await request.post('/user/login', { username: loginForm.username, password: loginForm.password })if (!res.data.data.length) {alert('用户名或者密码错误!')} else {const username=res.data.data[0].usernameconst level = res.data.data[0].levelrouter.push({ name:`home${level}`,query:{username}})}}else {alert('数据不合法!')}})}//账号注册
const enterRegister = async () => {router.push({path:'/register'})
}</script><style lang="less" scoped>
.login-form{width: 250px;margin: 200px auto;:deep(.el-form-item__content)  {justify-content: space-between;}
}
</style>

本次对利用element-plus快速搭建前端表单样式,对于非空也进行一点小小的判断。这里路由传参是,注意params只能使用name切换路由,而且可能是由于版本问题,params请求参数一直未被收集到。登录成功,根据level进入不同的管理界面。

6.2 注册界面

4

5

<template><el-form :model="registerForm" class="register-form" ref="form" ><!-- 账户 --><el-form-item label="账号" prop="username" :rules="[{ required: true, message: '账号不能为空', trigger: 'blur' }]"><el-input v-model=registerForm.username  /></el-form-item><!-- 密码 --><el-form-item label="密码" prop="password" :rules="[{ required: true, message: '密码不能为空', trigger: 'blur' }]"><el-input v-model="registerForm.password" type="password" /></el-form-item><el-form-item ><el-button type="primary" @click="sumbitInfo">注册</el-button></el-form-item></el-form>
</template><script setup>import { ref, reactive, getCurrentInstance } from 'vue'
import { useRouter } from 'vue-router';
import { customAlphabet } from 'nanoid'
import axios from 'axios'const {proxy} =getCurrentInstance()
const router=useRouter()
//后端请求
const request = axios.create({baseURL:'http://127.0.0.1:8080'
})const registerForm = reactive({id: '', username: '', password: '',level:2
})const createId = () => {const nanoid = customAlphabet('vrteam_123456789', 9)return nanoid()}//注册用户
const sumbitInfo =  () => {proxy.$refs.form.validate(async (valid, fields) => {if (valid) {//唯一idregisterForm.id = createId()registerForm.level = 2let userData={username:registerForm.username}let onlyCheck = await request.get('/user/check', { params: userData })if (onlyCheck.data.data.length) {alert('用户名已存在,请重新输入!')} else {let res = await request.post('/user/register', registerForm)if (res.data.data.affectedRows) {alert('注册成功')router.push({path:'/login'})} else {alert('注册失败')}}} else {alert('数据不合法')}})}
</script><style lang="less" scoped>
.register-form{width: 250px;margin:200px auto;:deep( .el-form-item__content){justify-content: space-around;}
}
</style>

注册界面对于后端有两次请求,一次是判断用户名是否唯一化的预检查,第二次才是真正的写入数据库。对于id的生成,采用nanoid

6.3 展示界面

6

7

就是普通的展示,没写太多东西,纯纯练手小项目。

七、阿里云部署

都写到这了,就体验一下项目上线的流程吧,本次采用阿里云服务器加上内置的宝塔面板部署。

7.1 前端项目

vue输入命令 npm run build打包项目,生成dist文件夹,文件夹上传服务器,进入宝塔面板。

在这里插入图片描述

填写公网ip或者域名,部署网站,这里默认80端口,切换端口再ip后端直接写就行。这里注意一点,端口一定要再宝塔面板的安全和服务器的防火请开启,不然访问不了。

7.2 后端node

这里采9

pm2配置项目,软件商店下载pm2,这里node版本尽量和本机开发环境一致,模块管理也就是npm包管理,这里的项目端口注意开放。这里我部署的时候还有一个问题,终端输入pm2node -v无法识别command,这里是没有配置环境变量的问题。我们可以使用软连接配置或者写入环境变量,这里直接网上搜一下就行了。

7.3 mysql安装

这里mysql添加,注意数据库的参数要和后端一致,编码也要一致。数据库创建完成之后,把mysql数据导入本地,然后上传服务器

在这里插入图片描述

7.4 测试

在这里插入图片描述

没啥问题

八、总结

本次对于vue3+koa前后端交互的项目有了一个大的了解,对于项目开发、上线流程有了一个大体的了解。但对于用户的持久化(cookie、sessioj)、路由限制这些没有应用到项目里面去,后续有时间慢慢完善技术,go!!!。


http://chatgpt.dhexx.cn/article/ODAS5H6f.shtml

相关文章

前端UI大全(针对后台管理系统)

转自http://blog.csdn.net/u011001084/article/details/52250270 最近有个项目需要&#xff0c;维护优化以前一个外包的项目&#xff0c;由于项目比较早所以UI不太美观&#xff0c;想做重构。想满足的条件应该达到如下几个&#xff1a; 1、美观、大方、简洁 2、兼容IE8、不考…

jQ UI 后台管理系统基础UI

jQ UI 后台管理系统基础UI jQ UI 后台管理系统基础UI基础页面![在这里插入图片描述](https://img-blog.csdnimg.cn/44464b1228d740779a3cdfadeca60726.png?x-oss-processimage/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5b-D54G155qE5Yi26YCg5ZWG,size_…

后台UI框架介绍

后台管理UI的选择 最近要做一个企业的OA系统&#xff0c;以前一直使用EasyUI&#xff0c;一切都好&#xff0c;但感觉有点土了&#xff0c;想换成现在流行的Bootstrap为基础的后台UI风格&#xff0c;想满足的条件应该达到如下几个&#xff1a; 1、美观、大方、简洁 2、兼容I…

后台UI框架开发(一)

后台UI框架开发(一) 众所周知&#xff0c;现在的后台管理系统的前端页面基本上都是一个样子…… 那既然&#xff0c;每个后台管理页面的样子都是这样的&#xff0c;那我们能不能设计一个页面&#xff0c;专门写成这个样子&#xff0c;只需要以面向对象的方式去使用某些方法来修…

开箱即用的后台UI框架eui(原eadmin)

&#xff08;很多人问有没有开箱即用&#xff0c;不需要复杂打包环境配置的功能强大、界面精美的后台UI框架&#xff0c;现在他来了&#xff09; eui 基于原生JS开发&#xff0c;开箱即用&#xff0c;无需打包环境&#xff0c;专门为不太熟悉mvvm开发模式的人员定制打造。此次…

国内主流在用的10大后台UI框架,私活必备

目录 vue-Element-Admin AdminLTE ant-design-pro tabler ng2-admin Gentelella iview-admin blur-admin vue-admin material-dashboard 前任何企业在开发的过程中&#xff0c;都摆脱不了管理后台的开发需要。 如果一切从0开始&#xff0c;费时费力&#xff0c;而且…

解决xshell无限窗口方法

解决xshell无限窗口方法 百度10分钟&#xff0c;群里吹逼2两小时纸上得来终觉浅,绝知此事要躬行解决xshell-"要继续使用此程序,您必须应用最新的更新或使用新版本"的问题解决xshell-无限窗口的问题 百度10分钟&#xff0c;群里吹逼2两小时 今天xshell突然提示“要继…

正版Xshell+Xftp免费使用,你还在找破解版吗

想必很多人都和阿福一样使用一款软件&#xff0c;先是去官网下载。用了一段时间后提示要付费就直接搜破解版接着用。 今天我的Xshell就到期了&#xff0c;笔记本还是裸奔状态&#xff0c;下载的破解版报毒不敢用&#xff0c;用习惯的软件也不想说换就换&#xff0c;怎么办&…

Finalshell安全吗?Xshell怎么样?

文章目录 一、我的常用ssh连接工具二、Xshell2.1 下载&#xff1a;认准官网2.2 Xshell 配置2.3 Xftp和WinSCP 一、我的常用ssh连接工具 之前讲过&#xff1a; 【服务器】远程连接选SSH&#xff08;PUTTY、Finalshell、WinSCP&#xff09; 还是 远程桌面&#xff08;RDP、VNC、…

【XShell】安装免费版XShell

该文章书写时间&#xff1a;2023年4月18日 最新一次修改&#xff1a;2023年4月19日 目录 一、下载XShell的目的 为什么配置环境需求需要Xshell 为什么Linux就适合 为什么要选择Xshell 二、下载XShell 三、安装XShell 四、使用XShell建立静态 1. XShell初始化界面 2、点击…

mac linux工具下载,xshell mac版

xshell mac版功能非常齐全,可以满足不同人的个性需求。具有强大的分页式环境,还可以定义的文本编辑器编辑终端内容,应对不安全的Telnet客户端,帮助大家实现控制终端的目的,带给用户良好的终端服务器操作体验。感兴趣的朋友可以前来尝试下! xshell for mac软件简介: xshe…

xshell免费版安装使用

介绍 Xshell是一款非常实用的SSH&#xff08;Secure Shell&#xff09;客户端软件&#xff0c;它可以让你在Windows系统中安全地远程登录到Linux或其他UNIX服务器中&#xff0c;并进行终端操作。本文将为大家介绍Xshell 7的安装方法&#xff0c;希望对大家有所帮助。 一、下载…

xshell下载

文章目录 xshell 官网下载地址 xshell 官网下载地址 xshell官网&#xff1a;https://www.xshell.com/zh/xshell/ 进入官网之后选择“所有下载-家庭/学校下载”&#xff0c;这个是免费的填写自己的邮箱地址&#xff0c;然后就会收到相对应的下载地址

你还在使用xshell绿色破解版?

你还在使用xshell绿色破解版&#xff1f; 一、xshell 介绍二、1分钟助你申请Xshell&#xff08;免费版&#xff09;个人版本和家庭版本&#xff0c;避免盗版问题1.访问Xshell官网下载页面 https://www.netsarang.com/zh/xshell-download/2、找到免费授权页面3、收到邮箱一个下载…

xshell免费版 正版,非xshell破解版

国内的下载网址下载的xshell是收费的&#xff0c;解决方法就是找国外的下载网址&#xff0c;国外提供学生和学校使用的免费版本。 连接网址&#xff1a;https://www.netsarang.com/en/all-downloads/

还在为XShell破解烦恼,试试tabby

Tabby (前身是 Terminus) 是一个可高度配置的终端模拟器和 SSH 或串口客户端&#xff0c;支持 Windows&#xff0c;macOS 和 Linux 集成 SSH&#xff0c;Telnet 客户端和连接管理器集成串行终端定制主题和配色方案完全可配置的快捷键和多键快捷键分体式窗格自动保存标签页支持…

xshell7,xftp7个人免费版官方下载,无需破解,免激活,下载即可使用

对于开发人员来说&#xff0c;xshell这款软件应该不陌生&#xff0c;是一款非常好用的服务器连接工具&#xff0c;但同时它又是收费的&#xff0c;导致很多同学下载后使用不久后就到期了。于是很多人都去网上搜索绿色版、破解版的&#xff0c;结果搜索出来的要么是有很多的捆绑…

NB!更方便Xshell本地密码破解工具

工具介绍 XshellCrack是基于SharpXDecrypt的二次开发&#xff0c;用go语言重写&#xff0c;增加了注册表查询设置&#xff0c;更方便xshell本地密码破解。 关注【Hack分享吧】公众号&#xff0c;回复关键字【230717】获取下载链接 工具使用 Usage:root SshCrack [flags]Flags…

Xshell Plus 6标准版详细安装破解教程,解决评估过期问题(附注册机,全网独家可用),非学校/家庭免费版

声明&#xff1a;相关软件仅供学习研究软件之用&#xff0c;不得用于商业用途&#xff0c;请大家购买正版&#xff0c;支持正版软件&#xff0c;请认准官方正版网站&#xff0c;与此同时&#xff0c;本软件数字签名为NetSarang Computer&#xff0c;与苏州思杰马克丁无关 注册机…

xshell7配置文件密码破解

工具 how-does-Xmanager-encrypt-password 实现 xshell配置文件位置&#xff1a; xshell7: C:\Users\%username%\Documents\NetSarang Computer\7\Xshell\Sessions xshell6: C:\Users\%username%\Documents\NetSarang Computer\6\Xshell\Sessions XShell5: %userpro…