| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- // 充值界面逻辑
- (function() {
- let overlay = null;
- let container = null;
- let closeBtn = null;
- let packages = null;
- let rechargeInfo = null;
- let selectedPointsEl = null;
- let selectedPriceEl = null;
-
- let currentPackage = null;
- let currentUsername = null;
- function init() {
- overlay = document.getElementById('rechargeOverlay');
- container = document.getElementById('rechargeContainer');
- closeBtn = document.getElementById('rechargeClose');
- packages = document.querySelectorAll('.recharge-package');
- rechargeInfo = document.getElementById('rechargeInfo');
- selectedPointsEl = document.getElementById('selectedPoints');
- selectedPriceEl = document.getElementById('selectedPrice');
- if (!overlay || !container) {
- console.error('[RechargeView] 充值界面元素未找到');
- return;
- }
- bindEvents();
- }
- function bindEvents() {
- // 关闭按钮 - 只关闭界面,不触发充值
- if (closeBtn) {
- closeBtn.addEventListener('click', () => {
- hide();
- // 通知父窗口关闭充值界面
- if (window.parent && window.parent !== window) {
- window.parent.postMessage({
- type: 'close-recharge-view'
- }, '*');
- }
- });
- }
- // 点击遮罩层关闭 - 只关闭界面,不触发充值
- if (overlay) {
- overlay.addEventListener('click', (e) => {
- if (e.target === overlay) {
- hide();
- // 通知父窗口关闭充值界面
- if (window.parent && window.parent !== window) {
- window.parent.postMessage({
- type: 'close-recharge-view'
- }, '*');
- }
- }
- });
- }
- // ESC 键关闭 - 只关闭界面,不触发充值
- document.addEventListener('keydown', (e) => {
- if (e.key === 'Escape' && overlay && overlay.classList.contains('show')) {
- hide();
- // 通知父窗口关闭充值界面
- if (window.parent && window.parent !== window) {
- window.parent.postMessage({
- type: 'close-recharge-view'
- }, '*');
- }
- }
- });
- // 测试购买按钮
- const testBuyBtn = document.getElementById('testBuyBtn');
- if (testBuyBtn) {
- testBuyBtn.addEventListener('click', handleRechargeSuccess);
- }
- // 套餐选择
- if (packages) {
- packages.forEach(pkg => {
- pkg.addEventListener('click', () => {
- selectPackage(pkg);
- });
- });
- }
- // 监听来自父窗口的消息
- window.addEventListener('message', (event) => {
- if (event.data && event.data.type === 'open-recharge-view') {
- show(event.data.needPoints, event.data.currentPoints);
- }
- });
- }
- function selectPackage(pkg) {
- // 移除所有选中状态
- packages.forEach(p => p.classList.remove('selected'));
-
- // 添加选中状态
- pkg.classList.add('selected');
- currentPackage = {
- points: parseInt(pkg.dataset.points),
- price: parseFloat(pkg.dataset.price),
- package: pkg.dataset.package
- };
- // 显示充值信息
- if (rechargeInfo) {
- rechargeInfo.style.display = 'block';
- }
-
- if (selectedPointsEl) {
- selectedPointsEl.textContent = currentPackage.points + ' Ani币';
- }
-
- if (selectedPriceEl) {
- selectedPriceEl.textContent = '¥' + currentPackage.price;
- }
- }
- function show(needPoints, currentPoints) {
- if (!overlay) {
- init();
- }
- currentUsername = getCurrentUsername();
- if (!currentUsername) {
- if (window.parent && window.parent.HintView) {
- window.parent.HintView.error('请先登录', 2000);
- }
- return;
- }
- // 重置状态
- if (packages) {
- packages.forEach(p => p.classList.remove('selected'));
- }
- if (rechargeInfo) {
- rechargeInfo.style.display = 'none';
- }
- currentPackage = null;
- // 显示充值界面
- overlay.classList.add('show');
- overlay.style.pointerEvents = 'auto';
-
- // 默认选中第一个套餐
- if (packages && packages.length > 0) {
- selectPackage(packages[0]);
- }
- }
- function hide() {
- if (overlay) {
- overlay.classList.remove('show');
- overlay.style.pointerEvents = 'none';
- }
- currentPackage = null;
- currentUsername = null;
- }
- async function handleRechargeSuccess() {
- if (!currentPackage || !currentUsername) {
- hide();
- return;
- }
- try {
- // 调用充值API
- const response = await fetch('/api/recharge', {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json'
- },
- body: JSON.stringify({
- username: currentUsername,
- points: currentPackage.points,
- price: currentPackage.price,
- package: currentPackage.package
- })
- });
- const result = await response.json();
- if (result.success) {
- // 充值成功,通知父窗口
- if (window.parent && window.parent !== window) {
- window.parent.postMessage({
- type: 'recharge-success',
- points: currentPackage.points
- }, '*');
- }
- // 显示成功提示
- if (window.parent && window.parent.HintView) {
- window.parent.HintView.success(`充值成功!获得 ${currentPackage.points} Ani币`, 3000);
- }
- hide();
- } else {
- // 充值失败
- if (window.parent && window.parent.HintView) {
- window.parent.HintView.error(result.message || '充值失败', 3000);
- }
- hide();
- }
- } catch (error) {
- console.error('[RechargeView] 充值处理失败:', error);
- if (window.parent && window.parent.HintView) {
- window.parent.HintView.error('充值失败,请稍后重试', 3000);
- }
- hide();
- }
- }
- // 获取当前登录用户名
- function getCurrentUsername() {
- try {
- const loginDataStr = localStorage.getItem('loginData');
- if (!loginDataStr) {
- return null;
- }
-
- const loginData = JSON.parse(loginDataStr);
- const now = Date.now();
-
- // 检查是否过期
- if (now >= loginData.expireTime) {
- localStorage.removeItem('loginData');
- return null;
- }
-
- return loginData.user ? loginData.user.username : null;
- } catch (error) {
- console.error('[RechargeView] 获取用户名失败:', error);
- return null;
- }
- }
- // 初始化
- if (document.readyState === 'loading') {
- document.addEventListener('DOMContentLoaded', init);
- } else {
- init();
- }
- })();
|