feat(consignment): 补齐寄卖前端权限门控,收口调拨状态与运营体验
权限门控(P1-8 剩余): - 新增 resolveAdminPermission(sessionPermissions, code):会话接口的最新权限列表优先, 接口异常才回退登录时的本地快照;空数组也判无权限,避免"刚被收回权限仍能点"。 - 寄售仓库面板:consignment.manage 控制手动入库/编辑/作废/退单回库/匹配开关(无权限时开关禁用)。 - 寄卖提报面板:consignment.review 控制审核入库/驳回。 - 接单平台页:无 consignment.view 不渲染两个寄卖 tab,并把 URL/localStorage 的旧选择拉回工单页。 数据约束(P2-19 剩余): - 迁移 080:allocation_status 历史非法值归位「待安排」(备注留痕)后加 CHECK(待安排/已安排), 并顺手修正 077 遗留的"收集链接/玩家提交"权限描述文案。 - 编辑接口拒绝直接改 allocationStatus(400 consignment_allocation_status_update_forbidden)。 运营体验: - 两个面板补 isError 错误态与重试;审核通过/驳回加 confirmLoading 与提交中守卫(防双提交)。 - 待审徽标改用后端真实总数(原来只统计当前页);编辑弹窗押金不再兜底 ¥100(会误写押金)。 - 履约拦截弹窗冷静期文案不再硬编码"3 天",改为按商品规则设定。 - 核实并撤回"倒计时时区偏移"误报:deadlineAt 为带 Z 的 ISO,前端无偏移问题。 验证:后端 412 例(409 通过)、前端 21 例(新增 5 例权限解析)全绿, typecheck / lint / format / check:sql / build 通过;迁移 001→080 在全新空库跑通并在 dev 库应用。
This commit is contained in:
@@ -58,6 +58,25 @@ export function hasAdminPermission(permission: string) {
|
||||
return getAdminPermissions().includes(String(permission || '').trim())
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析管理端权限:会话接口返回的权限列表优先,缺失时回退到登录时写入本地的权限快照。
|
||||
*
|
||||
* 为什么需要两层:
|
||||
* - 本地快照可能过期(管理员改权限后该账号没重新登录),页面拿到 `/admin/auth/session`
|
||||
* 的最新列表后必须以它为准;
|
||||
* - 会话接口失败时不能让整个面板的按钮全消失,所以保留本地回退。
|
||||
*/
|
||||
export function resolveAdminPermission(
|
||||
sessionPermissions: string[] | null | undefined,
|
||||
permission: string,
|
||||
): boolean {
|
||||
const code = String(permission || '').trim()
|
||||
if (!code) return false
|
||||
// 空数组也算"拿到了最新列表",此时判定为无权限,不回退本地快照。
|
||||
if (Array.isArray(sessionPermissions)) return sessionPermissions.includes(code)
|
||||
return hasAdminPermission(code)
|
||||
}
|
||||
|
||||
export function hasAdminRole(role: 'admin' | 'operator' | 'support' | 'finance') {
|
||||
if (!hasAdminSession()) {
|
||||
return false
|
||||
|
||||
Reference in New Issue
Block a user