// 浏览器环境下的优惠券中心页面逻辑 // API配置 const API_CONFIG = { // 生产环境 production: 'https://tral.cc/api/v1', // 开发环境 development: 'http://localhost:8080/api/v1' }; // 当前环境 - 根据域名自动判断 const CURRENT_ENV = window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1' ? 'development' : 'production'; const config = { apiBase: API_CONFIG[CURRENT_ENV] }; // 模拟请求函数 async function request(options) { const { url, method = 'GET', data } = options; const fullUrl = config.apiBase + url; try { const response = await fetch(fullUrl, { method, headers: { 'Content-Type': 'application/json', 'Authorization': localStorage.getItem('token') || '' }, body: data ? JSON.stringify(data) : undefined }); if (!response.ok) { throw new Error(`HTTP ${response.status}: ${response.statusText}`); } const result = await response.json(); return result; } catch (error) { console.error('请求失败:', error); throw error; } } // 页面数据 let pageData = { availableCoupons: [], loading: false }; // 页面初始化 document.addEventListener('DOMContentLoaded', function() { // 设置测试用的JWT token const testToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE3NjEwMzE0ODQsImlhdCI6MTc2MDk0NTA4NH0.JAi7VnVTsA-qPegR9DCINr1nISrxakaQxf6aY4EZykU'; localStorage.setItem('token', testToken); fetchAvailableCoupons(); }); // 获取可领取优惠券列表 async function fetchAvailableCoupons() { try { setLoading(true); // 调用真实API获取优惠券数据 const response = await request({ url: '/coupons', method: 'GET' }); const coupons = response.data || []; const formattedCoupons = formatCoupons(coupons); pageData.availableCoupons = formattedCoupons; renderCouponList(formattedCoupons); setLoading(false); } catch (error) { console.error('获取可领取优惠券失败:', error); setLoading(false); showToast('获取优惠券失败,请稍后重试'); } } // 格式化优惠券数据 function formatCoupons(coupons) { return coupons.map(coupon => { const remainingCount = coupon.total_count > 0 ? coupon.total_count - coupon.used_count : -1; return { id: coupon.id, name: coupon.name, type: coupon.type, value: coupon.value, minAmount: coupon.min_amount, desc: getCouponDesc(coupon), timeLimit: formatTimeLimit(coupon.start_time, coupon.end_time), status: 'default', totalCount: coupon.total_count, usedCount: coupon.used_count, remainingCount: remainingCount }; }); } // 获取优惠券描述 function getCouponDesc(coupon) { if (coupon.type === 1) { // 满减券 if (coupon.min_amount > 0) { return `满${(coupon.min_amount / 100).toFixed(0)}元减${(coupon.value / 100).toFixed(0)}元`; } return `立减${(coupon.value / 100).toFixed(0)}元`; } else if (coupon.type === 2) { // 折扣券 return `${coupon.value / 10}折`; } else if (coupon.type === 3) { // 免邮券 return '免运费'; } return coupon.description || '优惠券'; } // 格式化时间限制 function formatTimeLimit(startTime, endTime) { return `${startTime} - ${endTime}`; } // 渲染优惠券列表 function renderCouponList(coupons) { const couponListElement = document.getElementById('couponList'); const emptyStateElement = document.getElementById('emptyState'); if (!coupons || coupons.length === 0) { couponListElement.innerHTML = ''; emptyStateElement.style.display = 'flex'; return; } emptyStateElement.style.display = 'none'; const couponHTML = coupons.map(coupon => { const valueDisplay = coupon.type === 1 ? `${coupon.value / 100}元` : coupon.type === 2 ? `${coupon.value / 10}折` : `免邮`; const stockText = coupon.remainingCount > 0 ? `剩余 ${coupon.remainingCount} 张` : '已抢完'; const isDisabled = coupon.remainingCount === 0; return `