240 lines
8.6 KiB
JavaScript
240 lines
8.6 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":0,"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},{"value":15,"sort_order":15,"is_show":0,"name":"福利屋","pay_wechat":1,"pay_balance":1,"pay_currency":0,"pay_currency2":0,"pay_coupon":0,"is_deduction":0},{"value":16,"sort_order":16,"is_show":1,"name":"翻倍赏","pay_wechat":1,"pay_balance":1,"pay_currency":1,"pay_currency2":1,"pay_coupon":1,"is_deduction":1},{"value":17,"sort_order":17,"is_show":0,"name":"外卖盒子","pay_wechat":1,"pay_balance":1,"pay_currency":0,"pay_currency2":0,"pay_coupon":0,"is_deduction":0}],
|
||
"app_setting": {
|
||
"key": "app_setting",
|
||
"app_name": "友达赏",
|
||
"purchase_popup": "1",
|
||
"exchange_times": "2",
|
||
"balance_name": "钻石",
|
||
"balance_icon": "https://image.zfunbox.cn/app/icons/20250412/a482b527477e74f8a18ec02ebc7f0b4e.png",
|
||
"currency1_name": "UU币",
|
||
"currency1_icon": "https://image.zfunbox.cn/app/icons/20250412/3d1741965e9439372d1ce101bd110616.png",
|
||
"currency2_name": "达达券",
|
||
"currency2_icon": "https://image.zfunbox.cn/app/icons/20250412/19a9f69011fd82c85ab0df3a064a309c.png",
|
||
"win_audio": "https://image.zfunbox.cn/app/20250407/14ba53d367e1d131a344c6fd5cc0e28e.mp3",
|
||
"applet_version": "v1.0.3",
|
||
"sign_in_spend_limit": "1",
|
||
"waimai_box_id": "1049",
|
||
"daily_free_draw_id": "1050",
|
||
"cabinet_exchange_limit": "0",
|
||
"daily_coupon_limit": "0",
|
||
"update_time": 1744550962
|
||
}
|
||
};
|
||
|
||
// 配置类
|
||
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;
|