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
This commit is contained in:
wangjia
2026-07-03 21:08:13 +08:00
parent 71909a76d7
commit c010d8b416
8 changed files with 76 additions and 26 deletions
+2 -9
View File
@@ -38,20 +38,13 @@ permalink: /license/result/
(function () {
var API = '{{ site.appBaseUrl }}';
function $(id) { return document.getElementById(id); }
function token() {
var raw = localStorage.getItem('flutter.access_token');
if (!raw) return null;
try { return JSON.parse(raw); } catch (e) { return raw; }
}
var otn = new URLSearchParams(location.search).get('out_trade_no');
if (!otn || !token()) { $('waiting').style.display = 'none'; $('slow').style.display = 'block'; return; }
if (!otn || !jiuAuth.loggedIn()) { $('waiting').style.display = 'none'; $('slow').style.display = 'block'; return; }
var tries = 0, maxTries = 30; // 2s × 30 = 60s
function poll() {
tries++;
fetch(API + '/api/v1/license/purchase/' + encodeURIComponent(otn), {
headers: { 'Authorization': 'Bearer ' + token() },
})
jiuAuth.authFetch(API, '/api/v1/license/purchase/' + encodeURIComponent(otn), {})
.then(function (r) { return r.ok ? r.json() : null; })
.then(function (j) {
var d = j && j.data;