Files
jiu/web/assets/nav.js
T
wangjia c010d8b416 fix(site): 官网 401 自动用 refresh_token 续签重试;资产加构建版本号破缓存
- 新增共享 auth.js(jiuAuth):access token 60 分钟过期后,checkout 提交/
  结果页轮询遇 401 自动 POST /auth/refresh 换新 token 并重试一次,仍失败
  才跳登录——修复「已登录点提交订单却被踢回登录页」
- 登录判定放宽为 access 或 refresh token 任一存在(refresh 7 天有效)
- 所有 JS/CSS 引用加 ?v=构建版本号:修复旧版 nav.js 被浏览器缓存后在新
  页面执行(右上角错位的旧用户面板、带引号的 "张三" 显示)
- nav.js 改经 jiuAuth 读 localStorage(JSON 解码,去掉引号显示)
- 登录页回填上次的门店编号与账号

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-03 21:08:13 +08:00

43 lines
1.4 KiB
JavaScript

/* 官网导航交互:汉堡菜单 + 登录态感知(Web 版 App 与官网同域时,
localStorage['flutter.*'] 有登录信息 → CTA 变「进入系统」)。零依赖。 */
(function () {
function getAuthUser() {
if (!window.jiuAuth || !jiuAuth.loggedIn()) return null;
var username = jiuAuth.get('username');
if (!username) return null;
return {
username: username,
realName: jiuAuth.get('real_name') || '',
shopNo: jiuAuth.get('shop_no') || '',
};
}
// 汉堡菜单
var burger = document.getElementById('nav-burger');
var mobile = document.getElementById('nav-mobile-menu');
if (burger && mobile) {
burger.addEventListener('click', function (e) {
e.stopPropagation();
var open = mobile.classList.toggle('open');
burger.setAttribute('aria-expanded', open ? 'true' : 'false');
});
document.addEventListener('click', function (e) {
if (!mobile.contains(e.target) && e.target !== burger) {
mobile.classList.remove('open');
}
});
}
// 登录态:CTA 换成「进入系统」
var user = getAuthUser();
if (user) {
var cta = document.getElementById('nav-cta');
if (cta) {
cta.innerHTML =
'<a class="btn primary" href="/app/">进入系统 · ' +
(user.realName || user.username).replace(/[<>&"]/g, '') +
'</a>';
}
}
})();