Skip to content

UsrInk-Pro 是一个基于SpringBoot + Mybatis + Shiro + Jwt + Vue3 + ElementPlus 的无状态前后端分离的后台管理系统,轻量、没有重度依赖,模块设计优雅,管理界面美观,可快速进行二次开发。

License

Notifications You must be signed in to change notification settings

mutolee/usrink-pro

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 

Repository files navigation

项目介绍

UsrInk-Pro 是一个基于SpringBoot + Mybatis + Shiro + Jwt + Vue3 + ElementPlus 的无状态前后端分离的后台管理系统,轻量、没有重度依赖,模块设计优雅,管理界面美观,可快速进行二次开发。

初衷

UsrInk-Pro 是我为了不用每次有了新项目,再搞重复事情,如系统模块的权限相关功能,及后台管理的UI搭建等。我希望用到技术栈能够有较好的生态支持,遇到问题可直接在网上找到相关答案,所以后端选择SpringBoot,前端选择Vue + ElementUI。

后端项目结构

usrink-server
├── usrink-admin               后台管理Web服务接口模块,为后台管理系统提供无状态的API接口
├── userink-api                前端Web服务接口模块,为网站,APP,小程序等提供无状态的API接口
├── usrink-common        
├──── usrink-common-core       通用核心模块,提供基础工具类、通用配置、异常处理等
├──── usrink-common-entity     通用实体模块,业务实体类放在此模块,如POJO,VO,BO等,被其他模块引用
├── usrink-framework
├──── usrink-framework-jwt     JWT模块,提供Jwt的配置,JWT鉴权,根据需要导入
├──── usrink-framework-mong    Mongo模块,提供Mongo的配置,操作类、多数据源等,根据需要导入
├──── usrink-framework-redis   Redis模块,提供Redis的配置,操作类、多数据源等,根据需要导入
├──── usrink-framework-mysql   Mysql模块,提供Mysql的配置,多数据源配置,根据需要导入
├──── usrink-framework-shiro   Shiro模块,提供Shiro的配置,权限控制,JWT身份验证,根据需要导入
├── usrink-generator-code      代码生成模块,根据数据库表生成实体类Model、Mapper、Dao、Service等,根据需要导入

前端项目结构

usrink-client
├── public                     静态资源文件夹
├── src                        
├──── components               公共组件文件夹
├────── _frame                 usrink-pro-admin框架组件
├────── other                  其他组件,二次开发的组件,可自行添加,或重命名
├──── plugins                  插件管理文件夹
├──── router                   路由配置文件夹
├──── stores                   状态管理文件夹
├────── _frame                 usrink-pro-admin框架状态管理文件夹
├────── other                  其他状态管理,二次开发的状态管理,可自行添加,或重命名
├──── utils                    工具类文件夹,所有工具类都在这里添加
├──── views                    页面组件文件夹
├────── _frame                 usrink-pro-admin框架页面
├────── other                  其他页面,二次开发的页面,可自行添加,或重命名
├──── App.vue                  根组件
├──── main.js                  入口文件

快速开始二次开发

开发环境

  • JDK 1.8
  • Maven 3.8.6
  • Mysql 8.0
  • Node v20.9.0
  • Npm 10.1.0

后端开发

  1. 克隆项目到本地
  2. 创建数据库,导入数据库脚本,数据库脚本在 usrink-server/usrink-admin/src/resources/ 目录下 db.sql
  3. 安装项目依赖,进入 usrink-server 目录,执行 mvn clean install
  4. 启动项目,进入 usrink-server 目录,运行 AdminApplication.java 启动后台服务
  5. 开些编写接口,业务逻辑,完成后台开发。

前端开发

  1. 克隆项目到本地(如果已经克隆过了,这步跳过)
  2. 安装项目依赖,进入 usrink-client 目录,执行 npm install
  3. 启动项目,进入 usrink-client 目录,执行 npm run dev,启动前端服务
  4. 开始编写页面,组件,完成前端开发。

开发示例

开发一个带权限控制的 HelloWorld 页面,后端返回一个字符串,前端在 HelloWorld 页面上展示这个字符串。

  1. 编写后端接口,在 usrink-admin 模块中的 controller 包下创建一个 HelloWorldController.java 文件,代码编写完成之后,记得重启服务,内容如下:
@RestController
public class HelloWorldController {

    @Log("HelloWorld 消息")
    @RequestMapping(value = "/helloWorld")
    @RequiresPermissions("test:helloWorld")
    public Res helloWorld() {
        Dict result = Dict.create();
        result.set("msg", "恭喜你,你成功访问了HelloWorld接口!");
        return Res.success(result);
    }
}
  1. 编写前端页面,在 usrink-client/src/views/other 目录下创建一个 page-helloworld.vue 文件,内容如下:
<script setup>
    import {onMounted, ref} from "vue";
    import httpUtil from "@/utils/HttpUtil.js";

    const msg = ref("")

    onMounted(() => {
        selectHelloWorld()
    })

    const selectHelloWorld = () => {
        httpUtil.get("/helloWorld").then(res => {
            msg.value = res.data.msg
        })
    }
</script>

<template>
    <div class="hello-world">
        <h1>{{msg}}</h1>
    </div>
</template>

<style scoped>

</style>
  1. 配置页面菜单,进入后台管理系统-系统管理-菜单管理,添加一个菜单,表单内容:

    • 场景类型:主菜单
    • 菜单名称:HelloWorld
    • 排序:2
    • 菜单类型:菜单
    • 页面路由:/helloworld
    • 页面组件:/other/page-helloworld
  2. 配置权限,进入后台管理系统-系统管理-菜单管理,搜索 HelloWorld 菜单,找到刚刚添加的菜单,在操作列点击 添加,为HelloWorld页面添加一个消息查询的权限,表单内容:

    • 场景类型:主菜单
    • 菜单名称:消息查询
    • 排序:1
    • 菜单类型:按钮
    • 权限标识:test:helloWorld
  3. 分配权限,进入后台管理系统-系统管理-角色管理,在超级管理员的操作列点击 分配权限,给超级管理员分配 HelloWorld 以及HelloWorld下的 消息查询 权限。

  4. 重新登录,右上角用户名下拉框中点击 退出,重新登录,进入系统管理,在主菜单将看到 HelloWorld 菜单,点击 HelloWorld 菜单,将看到 “恭喜你,你成功访问了HelloWorld接口!”。

  5. 至此,一个带权限控制的 HelloWorld 页面就开发完成了。

系统功能

  1. 用户管理:系统的操作者,可以登录系统,操作系统。
  2. 角色管理:用户的角色,可以分配角色的操作权限。
  3. 菜单管理:系统的菜单,可以配置菜单的路由,组件,权限等。
  4. 日志管理:用户登录日志,操作日志。
  5. 服务器监控:系统的监控,包括内存,磁盘,CPU等。
  6. 其他...

服务端

  1. 使用JWT作为身份验证,Shiro作为权限控制,实现无状态请求,该功能为独立模块,可按需导入。
  2. 使用Mybatis作为持久层框架,提供多数据源配置,可在业务层,通过Ds.R或者Ds.W动态切换数据源,该功能为独立模块,可按需导入。
  3. 使用Redis作为缓存,提供多数据源配置,该功能为独立模块,可按需导入。(未完成)
  4. 使用MongoDB作为数据库,提供多数据源配置,该功能为独立模块,可按需导入。(未完成)
  5. 使用Logback作为日志框架,提供日志记录,日志按等级放在不同文件夹,方便查找。
  6. 使用Swagger作为接口文档,方便查看接口信息,测试接口。(未完成)
  7. 使用Lombok简化代码,提高开发效率。
  8. 使用Jackson作为Json序列化,提供Json序列化,反序列化功能,可配置。
  9. 使用PageHelper作为分页插件,提供分页查询功能。
  10. 其他...

前端

  1. 使用Vue3作为前端框架,提供响应式,组件化开发。
  2. 使用ElementPlus作为UI框架,提供美观的UI组件。
  3. 使用VueRouter作为路由管理,提供路由配置,动态路由,路由跳转等功能。
  4. 使用Pinia作为状态管理,提供状态管理,状态共享等功能,如导航管理。
  5. 使用Axios作为Http请求,提供Http请求,拦截器等功能。
  6. 其他...

在线体验

体验地址:http://usr.ink

体验账号:usrink 密码:123456

项目部署

服务端

  1. 配置运行模式,进入 usrink-admin 模块,找到 application.properties 文件,修改 spring.profiles.active=prod
  2. 配置文件上传目录,进入 usrink-admin 模块,找到 application-prod.properties 文件,修改 file.upload.path=/data_disk/usrink/upload/
  3. 配置数据库连接,进入 usrink-admin 模块,找到 db/mysql/druid-mysql-prod.properties 文件,修改 master.druid.datasource.urlmaster.druid.datasource.usernamemaster.druid.datasource.password
  4. 打包项目,进入 usrink-server 目录,执行 mvn clean package,打包完成后,会在 usrink-admin/target 目录下生成一个可执行 usrink-admin-x.x.x.jar 包。
  5. 运行项目,执行 java -jar usrink-admin-x.x.x.jar,启动服务。

前端

  1. 配置服务器地址,进入 usrink-client/src/utils/Constant.js 文件,修改 HTTP_BASE_URL
// xxx.com 为你的服务器地址
const HTTP_BASE_URL = "http://xxx.com/admin-api"
  1. 打包项目,进入 usrink-client 目录,执行 npm run build,打包完成后,会在 usrink-client/dist 下生成相关html/js/css。

服务器容器

以Nginx为例,部署前端项目。

安装Nginx,配置Nginx,找到Nginx配置文件,添加如下配置:

server {
    listen 80;
    
    # 你的域名
    server_name xxx.com www.xxx.com;

    # 前端项目打包后的文件夹,可自行修改
    root /data_disk/usrink/client/dist;
    index index.html index.htm;

    location / {
        # 访问的文件不存在时,重定向到/,也就是index.html
        try_files $uri $uri/ /index.html;
    }

    # 后端资源访问路径
    location /res/ {
        proxy_pass http://localhost:9999/res/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # 后端服务的API接口
    location /admin-api/ {
        proxy_pass http://localhost:9999/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

配置文件描述:xxx.com 为你的访问地址,/data_disk/usrink/client/dist 为前端项目打包后的文件夹,可自行修改,/res/ 为后端资源访问路径,/admin-api/` 为后端服务的API接口。

注意:部署后,登录系统后台,一定要修改系统默认的3个用户的密码,切记!!!。

系统美图

About

UsrInk-Pro 是一个基于SpringBoot + Mybatis + Shiro + Jwt + Vue3 + ElementPlus 的无状态前后端分离的后台管理系统,轻量、没有重度依赖,模块设计优雅,管理界面美观,可快速进行二次开发。

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy