spring boot 字典使用,使用element-ui + vue

本文介绍了如何在Vue应用中结合Element-UI,使用axios异步获取数据,设计数据库表单,特别是针对字典类型的表单设计,如维修工和故障码的下拉选择,并展示了前后端交互和服务接口的实现方法。

数据库表设计

type为1则代表字典的类型

type为2则是下拉框显示的值

id是雪花算法自动生成的

前端设计

基于vue-fast2设计

使用element-ui

异步获取数据

// 获取数据列表
      getDataList () {
        this.dataListLoading = true
        this.$http({
          url: this.$http.adornUrl('/sys/dict/list'),
          method: 'get',
          params: this.$http.adornParams({
            'page': this.pageIndex,
            'limit': this.pageSize,
            'name': this.dataForm.name
          })
        }).then(({data}) => {
          if (data && data.code === 0) {
            this.dataList = data.page.list
            this.totalPage = data.page.totalCount
          } else {
            this.dataList = []
            this.totalPage = 0
          }
          this.dataListLoading = false
        })
      },
      getChildDataList (code) {
        this.childDataListLoading = true
        this.$http({
          url: this.$http.adornUrl('/sys/dict/childList'),
         
`RuoYi-Cloud + Vue3` 是一个基于 Spring Cloud Alibaba 微服务架构、前后端分离的权限管理系统,结合前端使用 Vue3 的现代化技术栈。所谓“全景预览”是指从项目结构、技术栈、模块划分、部署方式到核心功能实现的整体概览。 下面我将为你提供 `RuoYi-Cloud + Vue3` 的**完整全景预览**,包括: - 技术架构 - 项目结构说明 - 核心模块功能 -后端交互流程 - 部署方案 - 示例代码(登录模块为例) - 扩展建议 --- ## ✅ 一、技术架构图(逻辑结构) ``` +------------------+ +------------------+ | Vue3 前端系统 | <---> | Gateway 网关 | +------------------+ +------------------++----------------------------+ | 认证中心 (Auth Service) | +----------------------------++---------------+ +----------------+ +-------------+ | 系统管理服务 | | 监控服务(Monitor) | | 代码生成服务等 | | (System Service)| | (如:OSS, Job) | | (Gen Service)| +---------------+ +----------------+ +-------------+ 注册中心:Nacos 配置中心:Nacos RPC 调用:OpenFeign / Dubbo(可选) 安全认证:OAuth2 + JWT + Spring Security 网关路由:Spring Cloud Gateway 前端框架:Vue3 + Vite + Element Plus 数据库:MySQL + MyBatis-Plus 消息队列:RocketMQ / RabbitMQ(可选) 日志监控:ELK / SkyWalking ``` --- ## ✅ 二、项目结构说明(Maven 多模块) ```bash ruoyi-cloud/ ├── ruoyi-gateway/ # 网关服务 ├── ruoyi-auth/ # 认证中心(OAuth2 登录、JWT签发) ├── ruoyi-system/ # 系统管理微服务(用户、角色、菜单) ├── ruoyi-monitor/ # 监控服务(在线用户、日志查看) ├── ruoyi-common/ # 公共模块(工具类、常量、DTO) │ ├── ruoyi-common-core # 核心工具 │ └── ruoyi-common-datascope # 数据权限 ├── ruoyi-api/ # 远程调用接口定义(Feign 接口) └── ruoyi-file/ # 文件服务(MinIO/OSS上传) ``` 前端项目独立: ```bash ruoyi-ui-vue3/ ├── src/ │ ├── api/ # 封装 axios 请求 │ ├── components/ # 通用组件 │ ├── layout/ # 布局组件 │ ├── router/ # 路由配置(动态路由) │ ├── store/ # Pinia 状态管理 │ ├── views/ # 页面视图 │ └── utils/ # 工具函数 ├── vite.config.js # Vite 构建配置 └── package.json ``` --- ## ✅ 三、核心功能模块 | 模块 | 功能 | |------|------| | 用户管理 | 增删改查、状态控制、导入导出 | | 角色管理 | 权限分配、数据权限设置 | | 菜单管理 | 动态菜单、按钮权限 | | 部门管理 | 树形结构展示 | | 字典管理 | 系统枚举值统一维护 | | 参数设置 | 可配置项管理 | | 日志管理 | 操作日志、登录日志 | | 在线用户 | 实时会话管理(Redis 存储 token) | | 代码生成 | 自动生成功能 CRUD 前后端代码 | --- ## ✅ 四、前后端交互流程(以登录为例) ### 1. 前端 Vue3 登录请求(`login.vue`) ```vue <script setup> import { ref } from 'vue' import { loginApi } from '@/api/login' import { setToken } from '@/utils/auth' const username = ref('') const password = ref('') const handleLogin = async () => { try { const res = await loginApi({ username: username.value, password: password.value, grant_type: 'password', client_id: 'ruoyi', client_secret: '123456' }) setToken(res.access_token) // 获取用户信息 + 动态路由 window.location.href = '/index' } catch (error) { ElMessage.error('登录失败') } } </script> <template> <el-form @submit.prevent="handleLogin"> <el-input v-model="username" placeholder="用户名"/> <el-input v-model="password" type="password" placeholder="密码"/> <el-button type="primary" native-type="submit">登录</el-button> </el-form> </template> ``` > **说明**: > - 使用 `axios` 封装请求; > - 登录后将 `access_token` 存入 localStorage; > - 后续请求携带 `Authorization: Bearer xxx`。 --- ### 2. 后端认证中心 (`ruoyi-auth`) 接收登录请求 ```java @RestController @RequestMapping("/token") public class TokenController { @PostMapping("login") public ResponseEntity<OAuth2AccessToken> getToken(PasswordRequest request) { OAuth2AccessToken accessToken = authService.getToken(request); return ResponseEntity.ok(accessToken); } } ``` 其中 `authService.getToken()` 使用 Spring Security OAuth2 流程验证用户名密码,并返回 JWT token。 --- ### 3. 网关拦截与鉴权 在 `ruoyi-gateway` 中添加全局过滤器进行 token 验证: ```java @Component public class AuthGlobalFilter implements GlobalFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { String token = exchange.getRequest().getHeaders().getFirst("Authorization"); if (token == null || !token.startsWith("Bearer ")) { exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED); return exchange.getResponse().setComplete(); } // 解析 JWT 并校验(可用 JJWT 或 Nimbus JOSE) try { Claims claims = JwtUtil.parseJWT(token.substring(7)); // 设置上下文(如 userId, username) exchange.getAttributes().put("claims", claims); } catch (Exception e) { exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED); return exchange.getResponse().setComplete(); } return chain.filter(exchange); } @Override public int getOrder() { return -100; // 优先级最高 } } ``` --- ## ✅ 五、动态菜单 & 权限控制(Vue3 实现) ### 前端:根据用户权限拉取菜单并生成路由 ```js // store/user.js (Pinia) export const useUserStore = defineStore('user', { state: () => ({ userInfo: null, routes: [] }), actions: { async loadUserInfoAndRoutes() { const res = await getUserInfo() this.userInfo = res.user this.routes = generateRoutesFromPermissions(res.permissions) // 动态添加路由 this.routes.forEach(route => router.addRoute(route)) } } }) ``` ```js // utils/router.js export function generateRoutesFromPermissions(permissions) { return permissions.map(p => ({ path: p.path, name: p.name, component: () => import(`@/views/${p.component}.vue`), meta: { title: p.title, perms: p.perms } })) } ``` > 路由懒加载 + 权限指令 `v-hasPermi="'system:user:list'"` ```js // directives/hasPermi.js export default { mounted(el, binding) { const userPerms = JSON.parse(localStorage.getItem('perms') || '[]') if (!userPerms.includes(binding.value)) { el.parentNode?.removeChild(el) } } } ``` --- ## ✅ 六、部署方案 | 服务 | 部署方式 | |------|----------| | Nacos Server | Docker 单机或集群 | | RuoYi-Gateway | Spring Boot Jar | | RuoYi-Auth | Spring Boot Jar | | RuoYi-System | Spring Boot Jar | | Vue3 前端 | Nginx 静态托管 | | MySQL | Docker 容器或物理机 | | Redis | 缓存 session 和 token | **Nginx 配置示例**: ```nginx server { listen 80; server_name localhost; location / { root /usr/share/nginx/html/ruoyi-ui; index index.html; try_files $uri $uri/ /index.html; } # 代理后端服务 location /api/ { proxy_pass http://gateway:9200; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` --- ## ✅ 七、扩展建议 - 使用 `SkyWalking` 做链路追踪 - 引入 `Seata` 分布式事务 - 使用 `MinIO` 替代本地文件上传 - 前端支持暗黑模式(Vue3 + CSS 变量) - 支持多租户 SaaS 模式(字段隔离 or schema 隔离) --- ## ✅ 总结 `RuoYi-Cloud + Vue3` 是一套成熟的国产开源企业级中后台解决方案,具备: - 微服务解耦清晰 - 安全认证完善(OAuth2) -后端分离彻底 - 权限粒度精细(菜单 + 按钮 + 数据) - 可快速二次开发 适合用于中大型项目的基础平台搭建。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值