2026-02-09 21:13:05 +08:00
|
|
|
const { getPoints, checkDailyReward, canWatchAd, getTodayAdCount, rewardFromAd, AD_REWARD_CONFIG } = require('../../utils/pointsManager');
|
|
|
|
|
const { getDailyAdvice } = require('../../utils/dailyAdvice');
|
|
|
|
|
const { getDailyArticle, getCategories } = require('../../utils/knowledgeData');
|
|
|
|
|
|
2026-02-01 22:03:00 +08:00
|
|
|
Page({
|
2026-02-09 21:13:05 +08:00
|
|
|
data: {
|
|
|
|
|
currentPoints: 0,
|
|
|
|
|
dailyAdvice: '',
|
|
|
|
|
dailyArticle: {
|
|
|
|
|
id: '',
|
|
|
|
|
title: '',
|
|
|
|
|
summary: '',
|
|
|
|
|
category: '',
|
|
|
|
|
categoryName: '',
|
|
|
|
|
type: 'local'
|
|
|
|
|
},
|
|
|
|
|
energyVisible: false,
|
|
|
|
|
knowledgeVisible: false
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
onLoad: function () {
|
|
|
|
|
// 加载每日内容
|
|
|
|
|
this.loadDailyContent();
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
onShow: function () {
|
|
|
|
|
// 检查每日登录奖励
|
|
|
|
|
const rewardResult = checkDailyReward();
|
|
|
|
|
|
|
|
|
|
// 如果获得了奖励,显示提示
|
|
|
|
|
if (rewardResult.rewarded) {
|
|
|
|
|
wx.showToast({
|
|
|
|
|
title: rewardResult.message,
|
|
|
|
|
icon: 'success',
|
|
|
|
|
duration: 2000
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 刷新积分显示
|
|
|
|
|
this.setData({
|
|
|
|
|
currentPoints: getPoints()
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 加载每日内容
|
|
|
|
|
loadDailyContent: function () {
|
|
|
|
|
try {
|
|
|
|
|
// 获取今日建议
|
|
|
|
|
const advice = getDailyAdvice();
|
|
|
|
|
|
|
|
|
|
// 获取今日文章
|
|
|
|
|
const article = getDailyArticle();
|
|
|
|
|
|
|
|
|
|
// 获取分类名称
|
|
|
|
|
const categories = getCategories();
|
|
|
|
|
const category = categories.find(c => c.id === article.category);
|
|
|
|
|
|
|
|
|
|
this.setData({
|
|
|
|
|
dailyAdvice: advice,
|
|
|
|
|
dailyArticle: Object.assign({}, article, {
|
|
|
|
|
categoryName: category ? category.name : '塔罗知识'
|
|
|
|
|
})
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
console.log('[首页] 每日内容加载成功');
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('[首页] 每日内容加载失败:', error);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 显示能量卡浮层
|
|
|
|
|
showEnergyOverlay: function () {
|
|
|
|
|
this.setData({
|
|
|
|
|
energyVisible: true
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 隐藏能量卡浮层
|
|
|
|
|
hideEnergyOverlay: function () {
|
|
|
|
|
this.setData({
|
|
|
|
|
energyVisible: false
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 显示知识卡半屏
|
|
|
|
|
showKnowledgePanel: function () {
|
|
|
|
|
this.setData({
|
|
|
|
|
knowledgeVisible: true
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 隐藏知识卡半屏
|
|
|
|
|
hideKnowledgePanel: function () {
|
|
|
|
|
this.setData({
|
|
|
|
|
knowledgeVisible: false
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 阻止事件冒泡
|
|
|
|
|
stopPropagation: function () {
|
|
|
|
|
// 空函数,用于阻止点击事件冒泡
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 跳转到塔罗占卜
|
2026-02-01 22:03:00 +08:00
|
|
|
goToTarot: function () {
|
|
|
|
|
wx.navigateTo({
|
|
|
|
|
url: '/pages/index/index'
|
2026-02-09 21:13:05 +08:00
|
|
|
});
|
2026-02-08 21:17:12 +08:00
|
|
|
},
|
|
|
|
|
|
2026-02-09 21:13:05 +08:00
|
|
|
// 跳转到知识模块
|
2026-02-08 21:17:12 +08:00
|
|
|
goToKnowledge: function () {
|
|
|
|
|
wx.navigateTo({
|
|
|
|
|
url: '/pages/knowledge/index'
|
2026-02-09 21:13:05 +08:00
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 跳转到文章详情
|
|
|
|
|
goToArticle: function () {
|
|
|
|
|
const article = this.data.dailyArticle;
|
|
|
|
|
|
|
|
|
|
// 先关闭半屏
|
|
|
|
|
this.setData({
|
|
|
|
|
knowledgeVisible: false
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 延迟跳转,等待动画完成
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
if (article.type === 'web') {
|
|
|
|
|
// 外链文章,跳转到 webview
|
|
|
|
|
wx.navigateTo({
|
|
|
|
|
url: `/pages/webview/index?url=${encodeURIComponent(article.url)}&title=${encodeURIComponent(article.title)}`
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
// 本地文章,跳转到文章详情页
|
|
|
|
|
wx.navigateTo({
|
|
|
|
|
url: `/pages/knowledge/article?id=${article.id}`
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}, 300);
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 显示积分说明
|
|
|
|
|
showPointsInfo: function () {
|
|
|
|
|
try {
|
|
|
|
|
console.log('[首页] 点击积分徽章');
|
|
|
|
|
const remaining = AD_REWARD_CONFIG.DAILY_LIMIT - getTodayAdCount();
|
|
|
|
|
const canWatch = canWatchAd();
|
|
|
|
|
|
|
|
|
|
console.log('[首页] 剩余广告次数:', remaining);
|
|
|
|
|
console.log('[首页] 是否可以观看:', canWatch);
|
|
|
|
|
console.log('[首页] 当前积分:', this.data.currentPoints);
|
|
|
|
|
|
|
|
|
|
const lines = [
|
|
|
|
|
'当前积分:' + this.data.currentPoints,
|
|
|
|
|
'',
|
|
|
|
|
'每次占卜会消耗积分,不同牌阵消耗不同。',
|
|
|
|
|
'每日首次登录可获得 +3 积分奖励。',
|
|
|
|
|
'',
|
|
|
|
|
'看广告可获得积分(今日剩余 ' + remaining + ' 次)'
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
const content = lines.join('\n');
|
|
|
|
|
console.log('[首页] 弹窗内容:', content);
|
|
|
|
|
|
|
|
|
|
console.log('[首页] 准备调用 wx.showModal');
|
|
|
|
|
wx.showModal({
|
|
|
|
|
title: '积分说明',
|
|
|
|
|
content: content,
|
|
|
|
|
confirmText: canWatch ? '看广告' : '知道了',
|
|
|
|
|
cancelText: '关闭',
|
|
|
|
|
success: (res) => {
|
|
|
|
|
console.log('[首页] 弹窗回调:', res);
|
|
|
|
|
if (res.confirm && canWatch) {
|
|
|
|
|
this.watchAdForPoints();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
fail: (err) => {
|
|
|
|
|
console.error('[首页] 弹窗失败:', err);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
console.log('[首页] wx.showModal 已调用');
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('[首页] showPointsInfo 错误:', error);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 观看广告获取积分(模拟)
|
|
|
|
|
watchAdForPoints: function () {
|
|
|
|
|
const result = rewardFromAd();
|
|
|
|
|
|
|
|
|
|
if (result.success) {
|
|
|
|
|
// 刷新积分显示
|
|
|
|
|
this.setData({
|
|
|
|
|
currentPoints: getPoints()
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 显示奖励提示
|
|
|
|
|
wx.showToast({
|
|
|
|
|
title: result.message,
|
|
|
|
|
icon: 'success',
|
|
|
|
|
duration: 2000
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
// 显示失败提示
|
|
|
|
|
wx.showToast({
|
|
|
|
|
title: result.message,
|
|
|
|
|
icon: 'none',
|
|
|
|
|
duration: 2000
|
|
|
|
|
});
|
|
|
|
|
}
|
2026-02-01 22:03:00 +08:00
|
|
|
}
|
2026-02-09 21:13:05 +08:00
|
|
|
});
|