修复账号切换后「我的」页当前账号展示错误,并统一举报摄影师首页 URI。
切换账号时以用户选中账号为准写入展示标题与业务作用域,避免沿用旧门店名称;同时将首页举报摄影师入口 URI 对齐为 report_photographer。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@ -76,6 +76,14 @@ struct AccountSwitchAccount: Identifiable, Hashable {
|
||||
}
|
||||
return SetUserRequest(ssUserId: businessUserId)
|
||||
}
|
||||
|
||||
/// 当前账号对应的景区和门店 ID,用于切换后校准业务作用域。
|
||||
var preferredScopeSelection: (scenicId: Int?, storeId: Int?) {
|
||||
if isStoreUser {
|
||||
return (scenicId, storeId)
|
||||
}
|
||||
return (scenicId, nil)
|
||||
}
|
||||
}
|
||||
|
||||
/// 登录账号选择载荷,保存临时 token 和待用户选择的账号列表。
|
||||
@ -100,9 +108,9 @@ struct V9AuthResponse: Decodable, Equatable {
|
||||
scenicUsers.map { $0.toAccountSwitchAccount() } + storeUsers.map { $0.toAccountSwitchAccount() }
|
||||
}
|
||||
|
||||
/// 提取当前或首个账号作为全局账号资料。
|
||||
/// 提取当前或首个账号作为全局账号资料,优先使用 isCurrent 标记的账号。
|
||||
var primaryProfile: AccountProfile? {
|
||||
if let storeUser = storeUsers.first(where: \.isCurrent) ?? storeUsers.first {
|
||||
if let storeUser = resolvedCurrentStoreUser {
|
||||
return AccountProfile(
|
||||
userId: String(storeUser.userId),
|
||||
displayName: storeUser.displayName,
|
||||
@ -111,7 +119,7 @@ struct V9AuthResponse: Decodable, Equatable {
|
||||
)
|
||||
}
|
||||
|
||||
if let scenicUser = scenicUsers.first(where: \.isCurrent) ?? scenicUsers.first {
|
||||
if let scenicUser = resolvedCurrentScenicUser {
|
||||
return AccountProfile(
|
||||
userId: String(scenicUser.userId),
|
||||
displayName: scenicUser.displayName,
|
||||
@ -123,6 +131,60 @@ struct V9AuthResponse: Decodable, Equatable {
|
||||
return nil
|
||||
}
|
||||
|
||||
/// 当前生效账号的类型和业务 ID,用于登录/切换后写入账号上下文。
|
||||
var currentAccountIdentity: (accountType: String, businessUserId: Int)? {
|
||||
if let storeUser = resolvedCurrentStoreUser {
|
||||
return (storeUser.accountType, storeUser.businessUserId)
|
||||
}
|
||||
if let scenicUser = resolvedCurrentScenicUser {
|
||||
return (scenicUser.accountType, scenicUser.businessUserId)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
/// 当前生效账号对应的景区和门店 ID,用于登录/切换后校准业务作用域。
|
||||
var preferredScopeSelection: (scenicId: Int?, storeId: Int?) {
|
||||
if let storeUser = resolvedCurrentStoreUser {
|
||||
return (
|
||||
storeUser.scenicId > 0 ? storeUser.scenicId : nil,
|
||||
storeUser.storeId > 0 ? storeUser.storeId : nil
|
||||
)
|
||||
}
|
||||
if let scenicUser = resolvedCurrentScenicUser {
|
||||
return (scenicUser.scenicId > 0 ? scenicUser.scenicId : nil, nil)
|
||||
}
|
||||
return (nil, nil)
|
||||
}
|
||||
|
||||
/// 当前生效账号在「我的」页面展示的标题。
|
||||
var currentAccountDisplayTitle: String? {
|
||||
if let storeUser = resolvedCurrentStoreUser {
|
||||
return storeUser.displayName.nonEmpty
|
||||
}
|
||||
if let scenicUser = resolvedCurrentScenicUser {
|
||||
return scenicUser.displayName.nonEmpty
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
/// 解析当前门店账号:isCurrent 优先,且在有景区 isCurrent 时不回退到其他门店。
|
||||
private var resolvedCurrentStoreUser: V9StoreUser? {
|
||||
if let current = storeUsers.first(where: \.isCurrent) {
|
||||
return current
|
||||
}
|
||||
guard !scenicUsers.contains(where: \.isCurrent) else { return nil }
|
||||
return storeUsers.first
|
||||
}
|
||||
|
||||
/// 解析当前景区账号:isCurrent 优先,且在有门店 isCurrent 时不回退到其他景区。
|
||||
private var resolvedCurrentScenicUser: V9ScenicUser? {
|
||||
if let current = scenicUsers.first(where: \.isCurrent) {
|
||||
return current
|
||||
}
|
||||
guard !storeUsers.contains(where: \.isCurrent) else { return nil }
|
||||
return scenicUsers.first
|
||||
}
|
||||
|
||||
/// 提取登录响应中的景区作用域,并按当前账号优先排序。
|
||||
var scenicScopes: [BusinessScope] {
|
||||
var seen = Set<Int>()
|
||||
@ -159,10 +221,10 @@ struct V9AuthResponse: Decodable, Equatable {
|
||||
|
||||
/// 当前账号的 app_role_code,用于登录后初始角色匹配。
|
||||
var currentAccountRoleCode: String? {
|
||||
if let storeUser = storeUsers.first(where: \.isCurrent) ?? storeUsers.first {
|
||||
if let storeUser = resolvedCurrentStoreUser {
|
||||
return nonEmpty(storeUser.resolvedAppRoleCode)
|
||||
}
|
||||
if let scenicUser = scenicUsers.first(where: \.isCurrent) ?? scenicUsers.first {
|
||||
if let scenicUser = resolvedCurrentScenicUser {
|
||||
return nonEmpty(scenicUser.resolvedAppRoleCode)
|
||||
}
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user