feat: 接入消息未读数、全部已读与首页红点角标同步。

固定消息中心为首页入口,并在推送到达、已读后刷新桌面角标。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-21 18:02:43 +08:00
parent e7f1d777dd
commit caeeb9a1cf
18 changed files with 748 additions and 37 deletions

View File

@ -23,14 +23,26 @@ final class HomeCommonMenuStoreTests: XCTestCase {
super.tearDown()
}
func testDefaultCommonURIsTakeFirstFour() {
let permissions = (1...6).map {
func testDefaultCommonURIsTakeFirstFourAndExcludeMessageCenter() {
let permissions = [
HomePermissionItem(id: "0", name: "消息", uri: "message_center"),
] + (1...5).map {
HomePermissionItem(id: "\($0)", name: "菜单\($0)", uri: "uri_\($0)")
}
let uris = HomeCommonMenuStore.defaultCommonURIs(from: permissions)
XCTAssertEqual(uris, ["uri_1", "uri_2", "uri_3", "uri_4"])
}
func testSavedMessageCenterIsRemovedFromLegacyCommonURIs() {
let key = "scenic_user_u1_role_photographer_common_uris"
defaults.set(["message_center", "wallet"], forKey: key)
let uris = store.savedCommonURIs(accountScope: "scenic_user_u1", roleCode: "photographer")
XCTAssertEqual(uris, ["wallet"])
XCTAssertEqual(defaults.stringArray(forKey: key), ["wallet"])
}
func testSavedCommonURIsOverrideDefault() {
let permissions = [
HomePermissionItem(id: "1", name: "钱包", uri: "wallet"),
@ -65,8 +77,12 @@ final class HomeCommonMenuStoreTests: XCTestCase {
HomeMenuItem(uri: "wallet", title: "钱包", iconName: "wallet.pass"),
HomeMenuItem(uri: "cloud_management", title: "云盘", iconName: "icloud"),
HomeMenuItem(uri: "task_management", title: "任务", iconName: "checklist"),
HomeMenuItem(uri: "message_center", title: "消息中心", iconName: "bell"),
]
let split = HomeCommonMenuStore.splitMenus(from: menus, commonURIs: ["wallet", "task_management"])
let split = HomeCommonMenuStore.splitMenus(
from: menus,
commonURIs: ["wallet", "task_management", "message_center"]
)
XCTAssertEqual(split.common.map(\.uri), ["wallet", "task_management"])
XCTAssertEqual(split.more.map(\.uri), ["cloud_management"])
}
@ -75,7 +91,7 @@ final class HomeCommonMenuStoreTests: XCTestCase {
let item = HomeMenuCatalog.item(for: "report_photographer")
XCTAssertEqual(item?.title, "举报摄影师")
XCTAssertEqual(item?.iconName, "shield.fill")
XCTAssertEqual(item?.iconName, "shield.lefthalf.filled")
}
func testHomeMenuCatalogUsesIOS16CompatibleIcons() {