feat(web): 创作者中心「当前创作者」代看下拉 + 未绑定引导页
为什么:超管点进创作者中心原本是一片"未绑定创作者主体"的报错,既没说明原因也没有出路。 这批把两件事做出来:超管能在顶部选一个创作者只读代看;没有创作者身份的账号看到明确的引导页而不是白屏。 - 新增 useCreatorAccess(身份三态:granted / need-target / unbound)+ ImpersonationBar + CreatorAccessGuide, 四个页面用 CreatorCenterPage 统一套壳;身份不满足时不打业务接口,避免一串无意义的报错提示 - 代看目标存 localStorage,由 axios.request 统一给 /admin/creator-center 的请求加 X-Creator-Id 头 (不做查询参数;后端只对具备 impersonate 权限的账号认这个头) - axios 支持 silent 请求:业务码非 0 时不弹全局提示、把 Result 交给调用方判断(引导页据此分流) - 代看只读体验:代看态下「新建作品 / 编辑 / 提交审核 / 撤回」不渲染,编辑页整页禁用并提示原因 - 顶部下拉只在有 impersonate 权限时显示;无权限账号看不到、也不会请求 targets 接口
This commit is contained in:
1 parent
0a2e3e0b81
commit
685c912313
19 files changed
+995
-658
No files matched your search
@@ -0,0 +1,29 @@
|
||||
import { ref } from 'vue'
|
||||
|
||||
/**
|
||||
* 超管「代看创作者」的当前目标。
|
||||
*
|
||||
* 目标走独立请求头 `X-Creator-Id`(不做查询参数),并且**只有带 `creator-center:impersonate`
|
||||
* 权限的账号带上它才生效** —— 创作者自己带这个头没有任何作用。
|
||||
* 这里只负责"记住用户选了谁",权限判断在后端。
|
||||
*/
|
||||
const STORAGE_KEY = 'creator-center:impersonate-id'
|
||||
|
||||
function readStored(): number | null {
|
||||
const raw = localStorage.getItem(STORAGE_KEY)
|
||||
const value = raw ? Number(raw) : NaN
|
||||
return Number.isFinite(value) && value > 0 ? value : null
|
||||
}
|
||||
|
||||
export const impersonateCreatorId = ref<number | null>(readStored())
|
||||
|
||||
export function setImpersonateCreatorId(id: number | null) {
|
||||
impersonateCreatorId.value = id
|
||||
if (id) localStorage.setItem(STORAGE_KEY, String(id))
|
||||
else localStorage.removeItem(STORAGE_KEY)
|
||||
}
|
||||
|
||||
/** 创作者中心相关请求统一带上目标头(没选目标就不带) */
|
||||
export function creatorCenterHeaders(): Record<string, string> {
|
||||
return impersonateCreatorId.value ? { 'X-Creator-Id': String(impersonateCreatorId.value) } : {}
|
||||
}
|
||||
Reference in new issue
Block a user