/** * 系统配置 API 服务 * 封装配置相关的API调用 */ import apiClient from '../utils/api.js'; // API 基础 URL(用于拼接图片路径,去掉 /api 后缀) const getBaseURL = () => { const apiUrl = 'http://localhost:9097/api'; // 如果包含 /api,去掉它 return apiUrl.replace(/\/api$/, ''); }; class ConfigAPI { /** * 获取配置 * @param {String|Array} configKeys - 配置键(单个字符串或数组) * @returns {Promise} */ async getConfig(configKeys) { try { let params = {}; // 支持单个字符串或数组 if (Array.isArray(configKeys)) { params.configKeys = configKeys.join(','); } else if (typeof configKeys === 'string') { params.configKey = configKeys; } else { throw new Error('配置键格式错误'); } const result = await apiClient.get('/config/get', params); return result; } catch (error) { console.error('获取配置失败:', error); throw error; } } /** * 获取微信相关配置 * @returns {Promise} { wechatNumber, wechatQRCode } */ async getWechatConfig() { try { const result = await this.getConfig(['wx_num', 'wx_img']); if (result && result.code === 0) { let qrcodeUrl = result.data.wx_img || ''; // 如果二维码是相对路径,转换为完整URL if (qrcodeUrl && !qrcodeUrl.startsWith('http://') && !qrcodeUrl.startsWith('https://') && !qrcodeUrl.startsWith('data:')) { const baseURL = getBaseURL(); // 如果以 / 开头,拼接服务器基础URL if (qrcodeUrl.startsWith('/')) { qrcodeUrl = baseURL + qrcodeUrl; } else { // 如果不是以 / 开头,可能是文件路径,需要拼接 qrcodeUrl = baseURL + '/' + qrcodeUrl; } } return { wechatNumber: result.data.wx_num || '', wechatQRCode: qrcodeUrl }; } return { wechatNumber: '', wechatQRCode: '' }; } catch (error) { console.error('获取微信配置失败:', error); return { wechatNumber: '', wechatQRCode: '' }; } } /** * 获取价格套餐列表 * @returns {Promise} 价格套餐列表 */ async getPricingPlans() { try { const result = await apiClient.get('/config/pricing-plans'); if (result && result.code === 0) { return result.data || []; } return []; } catch (error) { console.error('获取价格套餐失败:', error); return []; } } } export default new ConfigAPI();