kuaiying_wx/app.js
2025-03-04 15:25:38 +08:00

393 lines
11 KiB
JavaScript
Raw Permalink 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.

// 引入封装加密包
const aes = require('./utils/aes')
App({
onLaunch: function(e) {
var t = this;
const query = e.query
const inviter_nickname = query.uuid || ''
console.log("邀请人id", inviter_nickname)
wx.setStorageSync('inviter_nickname', inviter_nickname);
this.globalData.launchOptions = e,
this.getUserInfo().then(function() {
console.log(e)
}).catch(function(e) {
console.error("获取用户信息失败:", e);
});
},
getCurrentTabbar(selected, that) {
if (typeof that.getTabBar === 'function' &&
that.getTabBar()) {
that.getTabBar().setData({
selected: selected
})
}
},
onShow() {
console.log('执行app.jsonShow')
console.log(1)
},
getPopupConfig() {
return new Promise((resolve, reject) => {
this.apiRequest({
url: '/popup-config/', // 后端接口地址
method: 'POST',
success: res => {
console.log(res)
if (res.data) {
const { is_enabled, popup_type, content } = res.data.data;
// 存储到本地缓存
wx.setStorageSync('popupEnabled', is_enabled);
wx.setStorageSync('popupType', popup_type);
wx.setStorageSync('popupContent', content);
console.log('弹窗配置已成功获取');
resolve(res.data.data); // 返回获取到的数据
} else {
console.warn('弹窗数据获取失败');
reject(new Error('弹窗数据获取失败'));
}
},
fail: error => {
console.error('请求失败:', error);
reject(error);
}
});
});
},
广告(){
wx.navigateTo({
url: "/pages/details/details",
success() {
console.log('跳转成功');
},
fail(err) {
console.error('跳转失败:', err);
}
});
},
checkUpdateVersion() {
console.log('检查微信版本是否支持更新机制');
if (wx.canIUse('getUpdateManager')) {
const updateManager = wx.getUpdateManager();
updateManager.onCheckForUpdate(function (res) {
console.log('检查新版本', res);
if (res.hasUpdate) {
updateManager.onUpdateReady(function () {
console.log('新版本下载完成');
wx.showModal({
title: '更新提示',
content: '新版本已准备好,是否重启应用?',
success: (res) => {
if (res.confirm) {
console.log('用户确认更新');
updateManager.applyUpdate();
}
}
});
});
updateManager.onUpdateFailed(function () {
console.log('新版本下载失败');
wx.showModal({
title: '已经有新版本了~',
content: '新版本下载失败,请检查网络设置后重试。',
showCancel: false,
});
});
} else {
console.log('当前是最新版本');
}
});
} else {
wx.showModal({
title: '温馨提示',
content: '当前微信版本过低,无法使用自动更新功能,请升级到最新微信版本后重试。',
showCancel: false,
});
}
},
/**
* 登陆并获取用户信息、token
* @param {*} callback
*/
getUserInfo: async function () {
wx.showLoading({
title: '正在加载...'
});
try {
let openid = wx.getStorageSync('openid');
if (!openid) {
const loginRes = await this.login();
openid = loginRes.data.userInfo.openid;
wx.setStorageSync('openid', openid);
this.globalData.hasUserInfo = true;
}
await this.getinfo(); // 调用 getinfo 方法获取用户信息
wx.hideLoading();
} catch (error) {
console.error('操作失败:', error);
wx.hideLoading();
throw error; // 将错误向上抛出,让调用者可以捕获
}
},
login: function () {
return new Promise((resolve, reject) => {
wx.login({
success: res => {
const code = res.code;
this.apiRequest({
url: '/myapp/login/',
method: 'POST',
data: {
code,
data: res.encryptedData,
iv: res.iv,
Options: this.globalData.launchOptions
},
success: res => resolve(res),
fail: error => reject(error)
});
},
fail: error => reject(error)
});
});
},
getinfo: function () {
return new Promise((resolve, reject) => {
this.apiRequest({
url: '/myapp/userinfo/',
method: 'POST',
data: {
'openid': wx.getStorageSync('openid'),
},
success: res => {
console.log('获取信息成功', res);
this.processUserInfo(res.data.userInfo, res.data.membershipTypeList);
resolve();
},
fail: error => {
console.error('获取信息失败:', error);
reject(error);
}
});
});
},
processUserInfo: function (userInfo, membershipTypeList) {
// 更新用户信息到本地存储
wx.setStorageSync('userId', userInfo.nickname);
wx.setStorageSync('uuid', userInfo.nickname);
wx.setStorageSync('openid', userInfo.openid);
wx.setStorageSync('token', userInfo.token);
wx.setStorageSync('dailyVideoQuota', userInfo.daily_video_quota);
wx.setStorageSync('totalParseNum', userInfo.usage_count);
wx.setStorageSync('defaultDailyFreeParseNum', userInfo.coins);
wx.setStorageSync('isMember', userInfo.is_member);
wx.setStorageSync('startTime', userInfo.member_start_time);
wx.setStorageSync('endTime', userInfo.member_end_time);
wx.setStorageSync('cards', membershipTypeList);
wx.setStorageSync('invitees_count', userInfo.invitees_count);
wx.setStorageSync('balance', userInfo.balance);
// 检查会员状态
this.checkMembershipExpiration(userInfo.member_end_time, userInfo.is_member);
},
checkMembershipExpiration: function (endTimeStr, isMember) {
if (endTimeStr && isMember) {
const currentTimeStamp = Date.now(); // 当前时间戳(毫秒)
// 判断 endTimeStr 是时间戳还是日期字符串
const endTime = typeof endTimeStr === "number"
? endTimeStr * 1000 // 如果是秒时间戳,转换为毫秒
: new Date(endTimeStr).getTime(); // 如果是字符串,解析为毫秒
// 验证时间是否有效
if (isNaN(endTime)) {
console.error("无效的时间格式:", endTimeStr);
return;
}
console.log("当前时间戳(毫秒):", currentTimeStamp);
console.log("会员到期时间戳(毫秒):", endTime);
// 检查会员是否过期
if (currentTimeStamp > endTime) {
wx.setStorageSync('isMember', false);
console.log('会员已过期,更新会员状态');
}
}
},
check_status: function() {
var e = this;
return new Promise(function(t, n) {
e.apiRequest({
url: "/api/check_status/?param=0",
method: "GET",
success: function(e) {
t(e);
},
fail: function(e) {
n(e);
}
});
});
},
globalData: {
selected: 0,
userInfo: null,
hasUserInfo: false,
// chatApiDomain: "https://chat.guimiaokeji.com",
chatApiDomain: "https://chat.guimiaokeji.com",
apiDomain: 'https://kuaiying.bytefunction.com', //生产
downloadPrefix: 'https://kuaiying.bytefunction.com/proxy?url=', // 通过代理服务器中转微信限制资源域名不同平台cdn域名千变万化
defaultDailyFreeParseNum: 0, //免费次数
totalParseNum: 0, //总次数
uuid: null,
isMember: true, // 假设默认为会员
startTime: null,
endTime: null,
launchOptions:null //页面参数
},
//chat服务统一调用接口的方法
chatApiRequest: function (options) {
const timestamp = Date.now();
let t = timestamp
let x = aes.Encrypt(String(timestamp))
return wx.request({
url: this.globalData.chatApiDomain + options.url,
method: options.method ? options.method : 'GET',
enableChunked: options.enableChunked?options.enableChunked:false,
header: {
'Authorization': 'Bearer ' + wx.getStorageSync('token'),
'Accept': 'application/json',
'x': x,
't': t
},
dataType: 'json',
data: options.data,
success: res => {
switch (res.statusCode) {
case 200:
options.success(res);
break;
case 401:
this.toLogin();
break;
case 422:
break;
case 404:
wx.showToast({
title: '请求地址不存在',
icon: 'none'
})
break;
default:
wx.showToast({
title: res.data.error,
icon: 'none'
})
}
},
fail: res => {
if (options.fail) {
options.fail(res);
}
},
complete: res => {
if (options.complete) {
options.complete(res);
}
}
});
},
//全局统一调用接口的方法
apiRequest: function (options) {
const timestamp = Date.now();
let t = timestamp
let x = aes.Encrypt(String(timestamp))
wx.request({
url: this.globalData.apiDomain + options.url,
method: options.method ? options.method : 'GET',
header: {
'Authorization': 'Bearer ' + wx.getStorageSync('token'),
'Accept': 'application/json',
'x': x,
't': t
},
dataType: 'json',
data: options.data,
success: res => {
switch (res.statusCode) {
case 200:
options.success(res);
break;
case 401:
this.toLogin();
break;
case 422:
break;
case 404:
wx.showToast({
title: '请求地址不存在',
icon: 'none'
})
break;
default:
wx.showToast({
title: res.data.message,
icon: 'none'
})
}
},
fail: res => {
if (options.fail) {
options.fail(res);
}
},
complete: res => {
if (options.complete) {
options.complete(res);
}
}
});
},
// 上传图片
uploadFile: function (filePath) {
return new Promise((resolve, reject) => {
wx.uploadFile({
url: this.globalData.apiDomain + "/myapp/upload_image/", // 上传的服务器接口地址
filePath: filePath,
name: 'image_file',
success: (res) => {
if (res.statusCode === 200) {
resolve(res.data)
} else {
reject(res)
}
},
fail: (err) => {
console.error('Upload failed:', err);
wx.showToast({
title: '上传错误',
icon: 'error'
});
}
})
})
},
// 生成视频额度是否为0
noQuota: function(){
let dailyVideoQuota = wx.getStorageSync('dailyVideoQuota')
return dailyVideoQuota < 1
}
});