|
|
@@ -0,0 +1,29 @@
|
|
|
+import { getToken, setToken } from '@/utils/auth'
|
|
|
+
|
|
|
+/**
|
|
|
+ * 宿主免登适配(yiwise 一智同款:token 随 URL 带进来,落地页即目标页)
|
|
|
+ *
|
|
|
+ * 宿主(SCRM「审批流配置」页)把服务账号 JWT 直接拼进 iframe 地址:
|
|
|
+ * {qqflow}/flow/designer#embedToken=xxx
|
|
|
+ * 本模块在应用挂载前执行:
|
|
|
+ * 1. 从 URL 片段(hash)取 embedToken → 写入登录态(iframe 内为 sessionStorage,见 utils/auth.ts);
|
|
|
+ * 2. history.replaceState 清掉地址片段(token 不留在地址栏/浏览器历史);
|
|
|
+ * 3. 随后路由守卫直接放行到 /flow/designer,无登录页中转。
|
|
|
+ *
|
|
|
+ * 相对 yiwise 把 access_token 放 query 的做法,这里放 hash 片段:
|
|
|
+ * hash 不会随请求发给网关/静态服务器,不会进访问日志。
|
|
|
+ */
|
|
|
+const EMBED_TOKEN_KEY = 'embedToken'
|
|
|
+
|
|
|
+export function initEmbed(): void {
|
|
|
+ const hash = window.location.hash
|
|
|
+ if (!hash || hash.indexOf(EMBED_TOKEN_KEY) < 0) return
|
|
|
+ const token = new URLSearchParams(hash.replace(/^#/, '')).get(EMBED_TOKEN_KEY)
|
|
|
+ if (!token) return
|
|
|
+ if (getToken() !== token) {
|
|
|
+ setToken(token)
|
|
|
+ }
|
|
|
+ // 清理地址栏片段,保留 path/query
|
|
|
+ window.history.replaceState({}, '', window.location.pathname + window.location.search)
|
|
|
+ console.info('[embed] 已按 URL 参数完成免登,直达目标页')
|
|
|
+}
|