HaniBlindBox/honey_box/common/config.js
2026-02-03 22:58:58 +08:00

468 lines
11 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import RequestManager from '@/common/request.js'
/**
* 全局配置工具类
* 用于项目启动时加载全局配置数据并缓存
*/
// 数据缓存对象
let configData = null;
let isLoading = false;
let loadPromise = null;
const wx_version = "117";
// 白名单页面(不需要登录即可访问)
export const whiteList = [
"pages/shouye/index", // 首页
"pages/index/index",
"pages/shouye/detail", // 详情页
"pages/shouye/huanxiang", // 换箱页面
"pages/mall/index", // 商城首页
"pages/shouye/detail_wuxian", // 无限详情页
"pages/hegui/hegui", // 盒柜页面
"pages/infinite/index", // 福利首页
"pages/user/index", // 用户中心
"pages/infinite/daily_check_in", // 每日签到
"pages/infinite/bonus_house", // 福利屋
"pages/other/prize_draw", // 每日奖品抽取
"pages/shouye/danye", // 单页
"pages/guize/guize", // 规则页面
"pages/shouye/dada_ranking", // 达达排行榜
"pages/shouye/yaoqing_ranking", // 邀请排行榜
"pages/user/login", // 登录页面
"pages/shouye/slots",
"pages/other/web-pay-order", // 网页支付订单
"pages/other/web-pay-success", // 网页支付成功
"pages/other/about"// 其它页面
];
// API白名单不需要登录即可访问的API
export const apiWhiteList = [
'login_record',
'api/warehouse_index',
'api/user',
'api/warehouse_send_record',
'api/create_web_pay_order',
'api/get_order_url_link'
];
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": "哈尼盲盒",
"share_title": "哈尼盲盒上线,来就送!",
"share_title_detail": "哈尼盲盒,正版潮玩手办一番赏",
"purchase_popup": "1",
"exchange_times": "2",
"balance_name": "钻石",
"balance_icon": "https://image.zfunbox.cn/app/icons/20250412/a482b527477e74f8a18ec02ebc7f0b4e.png",
"currency1_name": "HH币",
"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",
"show_dadajuan_limit": "0",
"waimai_box_id": "1049",
"daily_free_draw_id": "1050",
"cabinet_exchange_limit": "0",
"daily_coupon_limit": "0",
"update_time": 1745379501
},
version: wx_version
};
// 配置类
class ConfigManager {
static getShareImageUrl() {
return "https://image.zfunbox.cn/icon/fenxiang.jpg"; //this.getAppSetting('share_image_url');
}
/**
* 初始化并加载配置
* 在应用启动时调用
*/
static init() {
return this.loadConfig();
}
/**
* 加载配置数据
* @returns {Promise} 返回加载完成的Promise
*/
static loadConfig() {
// 避免重复加载
if (isLoading) {
return loadPromise;
}
isLoading = true;
loadPromise = new Promise((resolve, reject) => {
RequestManager.getCache('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 != "") {
// 不直接返回configData继续执行下面的代码
} else {
configData = defaultConfig;
}
}
return key in configData ? configData[key] : defaultConfig[key];
}
/**
* 盒子类型
* @returns {Object} 商品类型对象
*/
static getGoodType() {
let goodType = this.get('good_type');
if (goodType != null) {
if (this.GetVersion()) {
return goodType.filter(item => item.is_show === 1 && (item.value === 2 || item.value === 0)).map(
item => {
return {
id: item.value,
title: item.name
}
});
}
return goodType.filter(item => item.is_show === 1).map(item => {
// console.log(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;
}
/**
* 获取其它配置
* @returns
*/
static getBaseConfig() {
let baseConfig = this.get('base_config');
return baseConfig;
}
/**
* 获取其它配置
* @returns
*/
static getBaseConfigKey(key) {
let baseConfig = this.getBaseConfig();
if (key == null) {
return baseConfig;
}
return key in baseConfig ? baseConfig[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;
}
/**
* 获取版本号
* @returns {Boolean} 是否为微信版本
*/
static GetVersion() {
//#ifdef MP-WEIXIN
let version = this.get('version');
if (version == wx_version) {
return true;
}
return false;
//#endif
return false;
}
}
export default ConfigManager;