fix(prototype): 桌面补 redeem 兑换视图 + accRedeemRow 接线改指 redeem(原为误指购买页)

This commit is contained in:
wangjia
2026-07-13 09:53:25 +08:00
parent fa9a5c2d5e
commit e95995f20f
+27 -4
View File
@@ -157,6 +157,9 @@
.account-view .plan-banner{ margin-bottom:var(--space-5); }
.st-change{ font-family:var(--font-sans); font-size:13px; font-weight:600; color:var(--accent); }
/* ---- 兑换码视图(账户页「兑换码」入口) ---- */
.redeem-view .card{ display:flex; flex-direction:column; gap:var(--space-4); }
/* 设备行辅件(对齐线上设备管理) */
.dv-lead{ width:22px; height:22px; color:var(--fg2); flex:none; }
.dv-cur{ font-family:var(--font-sans); font-size:12px; font-weight:600; color:var(--accent);
@@ -1000,6 +1003,22 @@
</div>
</section>
<!-- 兑换码视图(账户页「兑换码」入口 · 静态默认表单态,同移动原型深度) -->
<section class="view" data-view="redeem">
<div class="view-body redeem-view">
<button class="pv-back" id="rdBack"><svg><use href="#i-arrow-left"/></svg><span data-i18n="rd.back">返回</span></button>
<div class="sec-label" data-i18n="rd.title">兑换码</div>
<div class="card">
<div class="field">
<label class="flabel" data-i18n="rd.label">兑换码</label>
<input class="input" data-i18n-ph="rd.ph" placeholder="输入兑换 / 激活码" readonly>
</div>
<button class="btn btn-primary btn-block btn-lg" data-i18n="rd.btn">立即兑换</button>
<div class="pv-hint-mut" data-i18n="rd.hint">输入卡密即可激活对应时长,激活后立即生效。</div>
</div>
</div>
</section>
<!-- toast -->
<div class="pv-toast" id="pvToast"><svg><use href="#i-check"/></svg><span id="pvToastText"></span></div>
@@ -1096,7 +1115,7 @@ var I18N = {
'nav.orders':{zh:'我的订单',en:'Orders'},
'nav.account':{zh:'账户',en:'Account'},
'nav.notifications':{zh:'通知',en:'Notifications'}, 'nav.invite':{zh:'邀请好友',en:'Invite friends'},
'nav.devices':{zh:'设备管理',en:'Devices'},
'nav.devices':{zh:'设备管理',en:'Devices'}, 'nav.redeem':{zh:'兑换码',en:'Redeem code'},
'acc.billing':{zh:'购买 & 订单 & 兑换',en:'Buy · Orders · Redeem'},
'acc.buy':{zh:'购买套餐',en:'Buy a plan'}, 'acc.buySub':{zh:'升级 PRO 会员',en:'Upgrade to PRO'},
'acc.orders':{zh:'我的订单',en:'My orders'}, 'acc.ordersSub':{zh:'查看订单记录',en:'View order history'},
@@ -1119,6 +1138,9 @@ var I18N = {
'inv.tgTitle':{zh:'加入 Telegram 频道',en:'Join Telegram channel'}, 'inv.tgSub':{zh:'+3 天',en:'+3 days'},
'inv.tgJoinBtn':{zh:'加入频道',en:'Join channel'}, 'inv.tgVerifyBtn':{zh:'验证领取',en:'Verify & claim'}, 'inv.tgDoneBtn':{zh:'已领 +3 天',en:'Claimed +3 days'},
'inv.tgDemoPending':{zh:'演示态 · 待验证',en:'Demo · pending'}, 'inv.tgDemoDone':{zh:'演示态 · 已领取',en:'Demo · claimed'},
'rd.back':{zh:'返回',en:'Back'}, 'rd.title':{zh:'兑换码',en:'Redeem code'},
'rd.label':{zh:'兑换码',en:'Redemption code'}, 'rd.ph':{zh:'输入兑换 / 激活码',en:'Enter activation code'},
'rd.btn':{zh:'立即兑换',en:'Redeem'}, 'rd.hint':{zh:'输入卡密即可激活对应时长,激活后立即生效。',en:'Enter a code to instantly activate plan time.'},
'set.orders':{zh:'我的订单',en:'My orders'}, 'set.ordersSub':{zh:'查看订单记录',en:'View order history'},
'ord.back':{zh:'返回',en:'Back'}, 'ord.details':{zh:'明细',en:'Details'},
'ord.kOrderNo':{zh:'订单号',en:'Order No.'}, 'ord.kPlan':{zh:'套餐',en:'Plan'}, 'ord.kAmount':{zh:'金额',en:'Amount'},
@@ -1664,8 +1686,7 @@ function pvEnterPay(){
}
function openPurchase(from){ PUR.from=from||'settings'; pvShow('plans'); setView('purchase'); }
/* 入口:设置页「兑换 & 购买」+ 账户页「续费 / 升级」 */
var _redeem=document.getElementById('redeemRow'); if(_redeem) _redeem.addEventListener('click', function(){ openPurchase('settings'); });
/* 入口:账户页「续费 / 升级」(设置页「兑换 & 购买」行已随 IA 重构移除,见 accRedeemRow */
var _pbnBtn=document.getElementById('pbnBtn'); if(_pbnBtn) _pbnBtn.addEventListener('click', function(){ openPurchase('account'); });
/* 支付渠道段控:切币种 → 套餐价随之刷新 */
@@ -1796,13 +1817,15 @@ var _odBack=document.getElementById('odBack'); if(_odBack) _odBack.addEventListe
/* ========= 账户新入口 / 通知铃铛 / 邀请(IA 重构) ========= */
var _accBuy=document.getElementById('accBuyRow'); if(_accBuy) _accBuy.addEventListener('click', function(){ openPurchase('account'); });
var _accOrders=document.getElementById('accOrdersRow'); if(_accOrders) _accOrders.addEventListener('click', function(){ openOrders('account'); });
var _accRedeem=document.getElementById('accRedeemRow'); if(_accRedeem) _accRedeem.addEventListener('click', function(){ openPurchase('account'); });
function openRedeem(){ setView('redeem'); }
var _accRedeem=document.getElementById('accRedeemRow'); if(_accRedeem) _accRedeem.addEventListener('click', function(){ openRedeem(); });
var _accInvite=document.getElementById('accInviteRow'); if(_accInvite) _accInvite.addEventListener('click', function(){ setView('invite'); });
var _accDevices=document.getElementById('accDevicesRow'); if(_accDevices) _accDevices.addEventListener('click', function(){ setView('devices'); });
var _dvBack=document.getElementById('dvBack'); if(_dvBack) _dvBack.addEventListener('click', function(){ setView('account'); });
var _tbBell=document.getElementById('tbBell'); if(_tbBell) _tbBell.addEventListener('click', function(){ if(S.view!=='notifications'){ S.notifFrom=S.view; } setView('notifications'); });
var _ntBack=document.getElementById('ntBack'); if(_ntBack) _ntBack.addEventListener('click', function(){ setView(S.notifFrom||'connect'); });
var _invBack=document.getElementById('invBack'); if(_invBack) _invBack.addEventListener('click', function(){ setView('account'); });
var _rdBack=document.getElementById('rdBack'); if(_rdBack) _rdBack.addEventListener('click', function(){ setView('account'); });
document.querySelectorAll('.js-inv-copy').forEach(function(b){ b.addEventListener('click', function(){ pvToast((S.lang==='zh'?'已复制:':'Copied: ')+b.dataset.copy); }); });
/* ========= 初始化 ========= */