编辑 | blame | 历史 | 原始文档

APP配置从数据库读取功能说明

概述

将APP的功能开关配置从本地 config.js 文件改为从数据库动态读取,实现后台可配置化管理。

实现内容

1. 后端实现

1.1 创建配置控制器

文件: ruoyi-admin/src/main/java/com/ruoyi/web/controller/app/AppConfigController.java

提供两个接口:
- GET /app/config/features - 获取功能开关配置
- GET /app/config/all - 获取完整APP配置

特点:
- 无需权限校验,所有登录用户都可访问
- 自动将配置值转换为布尔类型

1.2 数据库配置

文件: sql/app_config.sql

插入两条配置记录:
```sql
-- 就绪按钮配置
config_key: app.feature.showAssigneeReadyButton
config_value: true/false

-- 强制完成按钮配置
config_key: app.feature.showForceCompleteButton
config_value: true/false
```

2. 前端实现

2.1 API接口文件

文件: app/api/appConfig.js

封装配置获取接口:
- getAppFeatures() - 获取功能开关
- getAppConfig() - 获取完整配置

2.2 应用启动加载

文件: app/App.vue

修改配置加载逻辑:
1. 应用启动时
- 先使用本地默认配置(config.js)
- 如果已登录,从服务器加载配置并覆盖本地配置

  1. 用户登录后
  • 监听 user-login 事件
  • 自动从服务器加载最新配置
  1. 配置合并策略
  • 服务器配置优先级高于本地配置
  • 本地配置作为默认值(网络失败时使用)

2.3 本地配置保留

文件: app/config.js

保留 features 配置作为默认值:
javascript features: { showAssigneeReadyButton: true, showForceCompleteButton: true }

3. 配置项说明

配置键 说明 可选值 默认值
app.feature.showAssigneeReadyButton 是否显示执行人就绪按钮 true/false true
app.feature.showForceCompleteButton 是否显示强制完成按钮 true/false true

使用方式

后台配置

  1. 通过后台管理界面
  • 登录后台管理系统
  • 进入【系统管理】->【参数设置】
  • 搜索 "APP-显示" 找到相关配置
  • 修改 config_value 为 truefalse
  1. 直接修改数据库
    ```sql
    -- 隐藏强制完成按钮
    UPDATE sys_config
    SET config_value = 'false'
    WHERE config_key = 'app.feature.showForceCompleteButton';

-- 显示强制完成按钮
UPDATE sys_config
SET config_value = 'true'
WHERE config_key = 'app.feature.showForceCompleteButton';
```

APP生效时机

配置修改后,APP在以下情况会获取最新配置:
1. 用户重新登录
2. 应用重新启动
3. 从后台切换回前台(如果已登录)

配置优先级

服务器配置 > 本地默认配置
  • 服务器配置可用时:使用数据库中的配置
  • 服务器配置加载失败:使用 config.js 中的默认配置
  • 用户未登录:使用 config.js 中的默认配置

扩展说明

添加新的配置项

  1. 数据库添加配置
    sql INSERT INTO sys_config (config_name, config_key, config_value, config_type, create_by, create_time, remark) VALUES ('APP-新功能开关', 'app.feature.newFeature', 'true', 'N', 'admin', sysdate(), '新功能开关说明');

  2. 后端添加读取逻辑
    java // AppConfigController.java String newFeature = configService.selectConfigByKey("app.feature.newFeature"); features.put("newFeature", "true".equalsIgnoreCase(newFeature));

  3. 前端config.js添加默认值
    javascript features: { showAssigneeReadyButton: true, showForceCompleteButton: true, newFeature: true // 新增 }

  4. 页面使用配置
    ```javascript
    // 在 methods 中添加判断方法
    showNewFeature() {
    return !!(config && config.features && config.features.newFeature)
    }

// 在模板中使用
新功能按钮
```

注意事项

  1. 配置缓存:若依框架对 sys_config 表有缓存机制,修改配置后可能需要刷新缓存
  2. 配置格式:config_value 只支持字符串,后端会转换为布尔值
  3. 兼容性:保留本地默认配置确保网络异常时功能可用
  4. 安全性:配置接口无需权限,确保不暴露敏感信息

相关文件清单

后端

  • ruoyi-admin/src/main/java/com/ruoyi/web/controller/app/AppConfigController.java - 配置控制器
  • sql/app_config.sql - 配置数据SQL

前端

  • app/api/appConfig.js - API接口
  • app/App.vue - 应用启动配置加载
  • app/config.js - 本地默认配置
  • app/pagesTask/detail.vue - 任务详情页(使用配置)