liu
2026-09-22 64494aadbcbdbe5c55d7260078479acba1d0e929
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/**
 * 站点文案(后台「字典管理 → 2024级学生产教融合实践教学信息填报」驱动)
 *
 * 文案由 /miniapp/site-titles 下发,后台改完即时生效,前端不用重新打包。
 * 接口未通 / 字典项被删 / 值为空时,一律回退下面的内置默认,页面不会出现空白标题。
 * 一次会话只请求一次(并发调用共用同一个 pending Promise),失败不缓存、下次可重试。
 */
import { getSiteTitles } from '@/api/auth.js'
 
// 兜底文案:须与后端 MiniappController#siteTitles 的 fallback 保持一致
export const DEFAULT_TITLES = {
  platformTitle: '产教融合实践教学管理平台',
  platformSubtitle: '江苏商贸职业学院 · 学生实践教学信息填报',
  loginSubtitle: '产教融合实践教学管理平台 · 学生账号',
}
 
let cache = null
let pending = null
 
/** 取站点文案(带缓存);永远 resolve,不会 reject */
export function getTitles() {
  if (cache) return Promise.resolve(cache)
  if (!pending) {
    pending = getSiteTitles()
      .then((res) => {
        cache = { ...DEFAULT_TITLES, ...(res.data || {}) }
        return cache
      })
      .catch(() => DEFAULT_TITLES)
      .then((v) => {
        pending = null
        return v
      })
  }
  return pending
}