# 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) - 如果已登录,从服务器加载配置并覆盖本地配置 2. **用户登录后**: - 监听 `user-login` 事件 - 自动从服务器加载最新配置 3. **配置合并策略**: - 服务器配置优先级高于本地配置 - 本地配置作为默认值(网络失败时使用) #### 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 为 `true` 或 `false` 2. **直接修改数据库**: ```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` - 任务详情页(使用配置)