feat(web): 创作者审核页支持开号/重置密码;登录落地按角色分流 + 首登强制改密

为什么:后台能开号了,但界面还没有入口;而且创作者登录后会落到 /dashboard/index(他没有运营后台权限)
直接掉 404。这批把开号入口、一次性凭据展示、落地分流与首登改密一次补齐。

- 创作者入驻页:「新增创作者」按钮(名称/类型/联系人/邮箱/国家)、「账号」列(已开通/未开通)、
  行内「开通账号 / 重置密码」;密码一次性弹窗展示(等宽可选中 + 一键复制 + 提示只显示这一次)
- 落地分流:新增 landingPath()(取账号能进的第一个菜单),登录与访问根路径都走它 ——
  创作者落 /creator-center/workspace,超管第一条仍是工作台(行为不变)
- 首登强制改密:Layout 挂 MustChangePasswordDialog,登录或刷新后若 profile 带 mustChangePassword 就弹不可关闭的
  改密框,改完清标记;只能改密或退出登录
This commit is contained in:
Vicky committed 2026-10-15 16:01:13 +08:00
1 parent bac070b60b
commit 8ce43ccd4c
10 files changed
+378 -7

No files matched your search

+30
View File
@@ -62,6 +62,36 @@ export const auditCreatorApi = (id: number, data: Record<string, unknown>) => {
return request.put<CreatorItem>({ url: `/admin/creators/${id}/audit`, data })
}
/** 手工录入创作者主体(C 端申请入驻未实现前的入口) */
export const createCreatorApi = (data: Record<string, unknown>) => {
return request.post<number>({ url: '/admin/creators', data })
}
export interface CreatorAccountResult {
creatorId: number
adminUserId: number
username: string
/** 一次性明文密码:只在开通 / 重置的这次响应里出现,之后拿不回来 */
password: string | null
created: boolean
message: string
}
/** 开通创作者账号(仅审核通过可开;已开通则幂等返回) */
export const openCreatorAccountApi = (id: number, username?: string) => {
return request.post<CreatorAccountResult>({
url: `/admin/creators/${id}/account`,
data: { username }
})
}
/** 重置创作者账号密码(一次性明文返回) */
export const resetCreatorPasswordApi = (id: number) => {
return request.post<CreatorAccountResult>({
url: `/admin/creators/${id}/account/reset-password`
})
}
export const pageSubmissionsApi = (params: Record<string, unknown>) => {
return request.get<PageResult<SubmissionItem>>({ url: '/admin/submissions/page', params })
}
+5
View File
@@ -27,3 +27,8 @@ export const getAdminRoleApi = (
export const getTestRoleApi = (params: RoleParams): Promise<IResponse<string[]>> => {
return request.get({ url: '/mock/role/list2', params })
}
/** 自助改密(首登强制改密也走这个接口) */
export const changePasswordApi = (data: { oldPassword: string; newPassword: string }) => {
return request.post<void>({ url: '/admin/auth/password', data })
}