diff --git a/api/controller_admin/system_config.js b/api/controller_admin/system_config.js index 855a3f6..eeb902b 100644 --- a/api/controller_admin/system_config.js +++ b/api/controller_admin/system_config.js @@ -90,7 +90,7 @@ module.exports = { order: [ ['category', 'ASC'], ['sortOrder', 'ASC'], - ['configId', 'ASC'] + ['id', 'ASC'] ] }); diff --git a/api/controller_front/config.js b/api/controller_front/config.js new file mode 100644 index 0000000..c9818a5 --- /dev/null +++ b/api/controller_front/config.js @@ -0,0 +1,114 @@ +/** + * 系统配置管理控制器(客户端接口) + * 提供客户端调用的配置相关接口 + */ + +const Framework = require("../../framework/node-core-framework.js"); + +const normalizeConfigValue = (config) => { + if (!config) { + return config; + } + + const normalized = { ...config }; + + if (normalized.configType === 'json' && normalized.configValue) { + try { + normalized.configValue = JSON.parse(normalized.configValue); + } catch (e) { + // 解析失败,保持原值 + } + } else if (normalized.configType === 'boolean') { + normalized.configValue = normalized.configValue === 'true' || normalized.configValue === '1'; + } else if (normalized.configType === 'number') { + normalized.configValue = parseFloat(normalized.configValue) || 0; + } + + return normalized; +}; + +module.exports = { + /** + * @swagger + * /api/config/get: + * get: + * summary: 获取配置 + * description: 根据配置键获取配置值,支持单个或多个配置键 + * tags: [前端-系统配置] + * parameters: + * - in: query + * name: configKey + * required: false + * schema: + * type: string + * description: 配置键(单个,如:wechat_number) + * - in: query + * name: configKeys + * required: false + * schema: + * type: string + * description: 配置键(多个,逗号分隔,如:wechat_number,wechat_qrcode) + * responses: + * 200: + * description: 获取成功 + */ + 'GET /config/get': async (ctx) => { + try { + const models = await Framework.getModels(); + const { system_config, op } = models; + const { configKey, configKeys } = ctx.query; + + // 如果没有提供配置键,返回失败 + if (!configKey && !configKeys) { + return ctx.fail('请提供配置键'); + } + + // 处理多个配置键 + let keys = []; + if (configKeys) { + keys = configKeys.split(',').map(k => k.trim()).filter(k => k); + } else if (configKey) { + keys = [configKey]; + } + + if (keys.length === 0) { + return ctx.fail('配置键不能为空'); + } + + // 查询配置 + const configs = await system_config.findAll({ + where: { + configKey: { + [op.in]: keys + }, + is_delete: 0 + } + }); + + if (configs.length === 0) { + return ctx.success({}); + } + + // 如果只有一个配置键,返回单个配置值 + if (keys.length === 1) { + const config = normalizeConfigValue(configs[0].toJSON()); + return ctx.success({ + [config.configKey]: config.configValue + }); + } + + // 多个配置键,返回对象 + const result = {}; + configs.forEach(config => { + const normalized = normalizeConfigValue(config.toJSON()); + result[normalized.configKey] = normalized.configValue; + }); + + return ctx.success(result); + } catch (error) { + console.error('获取配置失败:', error); + return ctx.fail('获取配置失败: ' + error.message); + } + } +}; +