222 lines
8.1 KiB
JavaScript
222 lines
8.1 KiB
JavaScript
import RequestManager from '@/common/request.js'
|
||
/**
|
||
* 全局配置工具类
|
||
* 用于项目启动时加载全局配置数据并缓存
|
||
*/
|
||
|
||
// 数据缓存对象
|
||
let configData = null;
|
||
let isLoading = false;
|
||
let loadPromise = null;
|
||
const defaultConfig = {
|
||
"good_type": [{ "value": 0, "sort_order": 0, "is_show": 1, "name": "全部", "pay_wechat": 1, "pay_balance": 1, "pay_currency": 1, "pay_currency2": 1, "pay_coupon": 1, "is_deduction": 1 }, { "value": 1, "sort_order": 1, "is_show": 0, "name": "一番赏", "pay_wechat": 1, "pay_balance": 1, "pay_currency": 1, "pay_currency2": 1, "pay_coupon": 1, "is_deduction": 1 }, { "value": 2, "sort_order": 2, "is_show": 1, "name": "无限赏", "pay_wechat": 1, "pay_balance": 1, "pay_currency": 1, "pay_currency2": 1, "pay_coupon": 1, "is_deduction": 1 }, { "value": 3, "sort_order": 3, "is_show": 0, "name": "擂台赏", "pay_wechat": 1, "pay_balance": 1, "pay_currency": 1, "pay_currency2": 1, "pay_coupon": 1, "is_deduction": 1 }, { "value": 5, "sort_order": 4, "is_show": 0, "name": "积分赏", "pay_wechat": 0, "pay_balance": 0, "pay_currency": 0, "pay_currency2": 1, "pay_coupon": 1, "is_deduction": 0 }, { "value": 6, "sort_order": 5, "is_show": 1, "name": "全局赏", "pay_wechat": 1, "pay_balance": 1, "pay_currency": 1, "pay_currency2": 1, "pay_coupon": 1, "is_deduction": 1 }, { "value": 8, "sort_order": 6, "is_show": 1, "name": "领主赏", "pay_wechat": 1, "pay_balance": 1, "pay_currency": 1, "pay_currency2": 1, "pay_coupon": 1, "is_deduction": 1 }, { "value": 9, "sort_order": 7, "is_show": 1, "name": "连击赏", "pay_wechat": 1, "pay_balance": 1, "pay_currency": 1, "pay_currency2": 1, "pay_coupon": 1, "is_deduction": 1 }, { "value": 10, "sort_order": 8, "is_show": 0, "name": "商城赏", "pay_wechat": 1, "pay_balance": 0, "pay_currency": 0, "pay_currency2": 1, "pay_coupon": 0, "is_deduction": 0 }, { "value": 11, "sort_order": 9, "is_show": 0, "name": "自制赏", "pay_wechat": 1, "pay_balance": 1, "pay_currency": 1, "pay_currency2": 1, "pay_coupon": 1, "is_deduction": 1 }],
|
||
"app_setting": { "key": "app_setting", "app_name": "友达赏", "purchase_popup": "1", "exchange_times": "2", "balance_name": "钻石", "balance_icon": "https://mh.shhuanmeng.com/app/icons/20250322/3d823aaa01e96aeeafc39cbb2d579612.jpg", "file": "", "currency1_name": "UU币", "currency1_icon": "https://mh.shhuanmeng.com/app/icons/20250322/8188634352e7f9edf5a2a42329b7c2c9.jpg", "currency2_name": "达达卷", "currency2_icon": "", "win_audio": "https://mh.shhuanmeng.com/static/web/static/mp3/open.mp3", "applet_version": "v1.0.0", "sign_in_spend_limit": "0", "update_time": 1743438198 }
|
||
|
||
};
|
||
|
||
// 配置类
|
||
class ConfigManager {
|
||
/**
|
||
* 初始化并加载配置
|
||
* 在应用启动时调用
|
||
*/
|
||
static init() {
|
||
return this.loadConfig();
|
||
}
|
||
|
||
/**
|
||
* 加载配置数据
|
||
* @returns {Promise} 返回加载完成的Promise
|
||
*/
|
||
static loadConfig() {
|
||
// 避免重复加载
|
||
if (isLoading) {
|
||
return loadPromise;
|
||
}
|
||
|
||
isLoading = true;
|
||
loadPromise = new Promise((resolve, reject) => {
|
||
RequestManager.get('config')
|
||
.then(res => {
|
||
if (res.status === 1 && res.data) {
|
||
configData = res.data;
|
||
console.log('全局配置数据加载成功');
|
||
let _configData = uni.getStorageSync("configData");
|
||
uni.setStorageSync('configData', configData);
|
||
if (_configData != null && _configData != '') {
|
||
if (_configData.app_setting.applet_version != configData.app_setting.applet_version) {
|
||
console.log('版本号不一致,需要更新');
|
||
const updateManager = uni.getUpdateManager();
|
||
uni.showModal({
|
||
title: "更新提示",
|
||
content: "新版本已经准备好,是否重启应用?",
|
||
showCancel: false,
|
||
success(res) {
|
||
if (res.confirm) {
|
||
console.log('开始重启');
|
||
wx.restartMiniProgram({path:"/pages/shouye/index"});
|
||
// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
|
||
//updateManager.applyUpdate();
|
||
|
||
//#ifdef MP-WEIXIN
|
||
|
||
//#endif
|
||
}
|
||
},
|
||
});
|
||
}
|
||
}
|
||
resolve(configData);
|
||
} else {
|
||
console.error('加载配置数据失败:', res.msg || '未知错误');
|
||
reject(new Error(res.msg || '加载配置失败'));
|
||
}
|
||
})
|
||
.catch(err => {
|
||
console.error('请求配置数据失败:', err);
|
||
isLoading = false;
|
||
reject(err);
|
||
});
|
||
});
|
||
|
||
return loadPromise;
|
||
}
|
||
|
||
/**
|
||
* 获取所有配置数据
|
||
* @returns {Object} 配置数据对象
|
||
*/
|
||
static getAll() {
|
||
if (configData) {
|
||
return configData;
|
||
} else {
|
||
console.warn('配置数据尚未加载,获取本地缓存中。。。');
|
||
configData = uni.getStorageSync("configData");
|
||
if (configData != null) {
|
||
return configData;
|
||
}
|
||
this.loadConfig();
|
||
return {};
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 获取指定键的配置值
|
||
* @param {String} key 配置键
|
||
* @param {any} defaultValue 默认值,当键不存在时返回
|
||
* @returns {any} 配置值
|
||
*/
|
||
static get(key) {
|
||
if (!configData) {
|
||
console.warn('配置数据尚未加载,获取本地缓存中。。。');
|
||
configData = uni.getStorageSync("configData");
|
||
if (configData != null && configData != "") {
|
||
return configData;
|
||
}
|
||
configData = defaultConfig;
|
||
// wx.restartMiniProgram({
|
||
// success(res) {
|
||
// console.log('重启小程序成功', res);
|
||
// },
|
||
// fail(err) {
|
||
// console.error('重启小程序失败', err);
|
||
// }
|
||
// });
|
||
}
|
||
return key in configData ? configData[key] : defaultValue;
|
||
}
|
||
|
||
/**
|
||
* 盒子类型
|
||
* @returns {Object} 商品类型对象
|
||
*/
|
||
static getGoodType() {
|
||
let goodType = this.get('good_type');
|
||
if (goodType != null) {
|
||
// goodType数组过滤,只保留is_show=1的项目
|
||
return goodType.filter(item => item.is_show === 1).map(item => {
|
||
return {
|
||
id: item.value,
|
||
title: item.name
|
||
}
|
||
});
|
||
}
|
||
return [];
|
||
}
|
||
|
||
/**
|
||
* 获取指定盒子类型
|
||
* @param {Number} type 盒子类型
|
||
* @returns {Object} 盒子类型对象
|
||
*/
|
||
static getGoodTypeFind(type) {
|
||
let goodType = this.get('good_type');
|
||
if (goodType != null) {
|
||
return goodType.find(item => item.value == type);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 刷新配置数据
|
||
* @returns {Promise} 返回刷新完成的Promise
|
||
*/
|
||
static refresh() {
|
||
isLoading = false;
|
||
return this.loadConfig();
|
||
}
|
||
|
||
/**
|
||
* 检查配置是否已加载
|
||
* @returns {Boolean} 是否已加载
|
||
*/
|
||
static isLoaded() {
|
||
return configData !== null;
|
||
}
|
||
|
||
/**
|
||
* 获取应用设置
|
||
* @param {String} key 设置键
|
||
* @returns {Object|String|null} 设置值
|
||
*/
|
||
static getAppSetting(key = null) {
|
||
let appSetting = this.get('app_setting');
|
||
if (key == null) {
|
||
return appSetting;
|
||
}
|
||
return key in appSetting ? appSetting[key] : null;
|
||
}
|
||
|
||
/**
|
||
* 获取指定键的配置值
|
||
* @param {String} key 配置键
|
||
* @param {any} defaultValue 默认值,当键不存在时返回
|
||
* @returns {any} 配置值
|
||
*/
|
||
static async getAsync(key, defaultValue = null) {
|
||
if (!configData) {
|
||
// console.warn('配置数据尚未加载,正在加载中...');
|
||
await this.loadConfig();
|
||
if (configData) {
|
||
return key in configData ? configData[key] : defaultValue;;
|
||
}
|
||
return defaultValue;
|
||
}
|
||
|
||
return key in configData ? configData[key] : defaultValue;
|
||
}
|
||
|
||
/**
|
||
* 获取应用设置
|
||
* @param {String} key 设置键
|
||
* @returns {Object|String|null} 设置值
|
||
*/
|
||
static async getAppSettingAsync(key = null) {
|
||
let appSetting = await this.getAsync('app_setting');
|
||
if (key == null) {
|
||
return appSetting;
|
||
}
|
||
return key in appSetting ? appSetting[key] : null;
|
||
}
|
||
}
|
||
|
||
export default ConfigManager;
|