From a0549e068a9d7c882c73b7958c43d6f318d70608 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=89=E7=A7=8B?= <497055328@qq.com> Date: Fri, 3 Jul 2026 20:51:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BD=BB=E5=BA=95=E6=B8=85=E7=90=86=20promotio?= =?UTF-8?q?n=5Fpage=20=E6=AE=8B=E7=95=99=E5=BC=95=E7=94=A8=EF=BC=8C?= =?UTF-8?q?=E7=A7=BB=E9=99=A4=20hiddenHomeMenuURIs=20=E6=9C=BA=E5=88=B6?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 宣传页已从白名单、菜单构建与文档中完全删除,不再保留专用隐藏逻辑。 Co-authored-by: Cursor --- suixinkan/Features/Home/Home.md | 2 -- .../Home/Services/HomeCommonMenuStore.swift | 13 +++------- .../Home/ViewModels/HomeViewModel.swift | 1 - suixinkanTests/HomeCommonMenuStoreTests.swift | 26 ------------------- 功能同步Checklist.md | 2 +- 5 files changed, 4 insertions(+), 40 deletions(-) diff --git a/suixinkan/Features/Home/Home.md b/suixinkan/Features/Home/Home.md index cf37bcc..58d1c25 100644 --- a/suixinkan/Features/Home/Home.md +++ b/suixinkan/Features/Home/Home.md @@ -63,5 +63,3 @@ Home 模块负责登录后的首页工作台,包括当前景区展示、工作 后续迁移具体首页子模块时,应先在 `HomeRoute` 增加目标页面,再更新 `HomeMenuRouter.resolve` 对应 URI 的映射,并同步补充单元测试。 `report_photographer` 已由 `Features/WildPhotographerReport` 接管。 - -`promotion_page`(宣传页)已从 iOS 移除;该 URI 列入 `HomeCommonMenuStore.hiddenHomeMenuURIs`,首页与全部功能页均不展示。 diff --git a/suixinkan/Features/Home/Services/HomeCommonMenuStore.swift b/suixinkan/Features/Home/Services/HomeCommonMenuStore.swift index 36e60fe..c16d673 100644 --- a/suixinkan/Features/Home/Services/HomeCommonMenuStore.swift +++ b/suixinkan/Features/Home/Services/HomeCommonMenuStore.swift @@ -44,11 +44,6 @@ struct HomeCommonMenuStore { "cooperation_order" ] - /// 已从 iOS 移除的首页菜单 URI,即使后端仍下发权限也不展示。 - static let hiddenHomeMenuURIs: Set = [ - "promotion_page" - ] - private let defaults: UserDefaults /// 初始化常用应用存储服务,并允许测试注入独立 UserDefaults。 @@ -133,11 +128,9 @@ struct HomeCommonMenuStore { let finalCommon: [String] if !saved.isEmpty { - finalCommon = saved - .filter { availableTopLevelSet.contains($0) } - .filter { !Self.hiddenHomeMenuURIs.contains($0) } + finalCommon = saved.filter { availableTopLevelSet.contains($0) } } else { - finalCommon = defaultCommon.filter { !Self.hiddenHomeMenuURIs.contains($0) } + finalCommon = defaultCommon save(finalCommon, roleCode: roleCode, accountScope: accountScope) } @@ -222,6 +215,6 @@ struct HomeCommonMenuStore { /// 判断 URI 是否属于 Android 首页菜单白名单。 private static func isAndroidHomeMenuURI(_ uri: String) -> Bool { - androidHomeMenuURIs.contains(uri) && !hiddenHomeMenuURIs.contains(uri) + androidHomeMenuURIs.contains(uri) } } diff --git a/suixinkan/Features/Home/ViewModels/HomeViewModel.swift b/suixinkan/Features/Home/ViewModels/HomeViewModel.swift index 8abea4a..15fc493 100644 --- a/suixinkan/Features/Home/ViewModels/HomeViewModel.swift +++ b/suixinkan/Features/Home/ViewModels/HomeViewModel.swift @@ -80,7 +80,6 @@ final class HomeViewModel: ObservableObject { var seen = Set() var deduplicated: [PermissionItem] = [] for item in permissionItems where !item.uri.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { - guard !HomeCommonMenuStore.hiddenHomeMenuURIs.contains(item.uri) else { continue } if seen.insert(HomeMenuRouter.menuAliasKey(for: item.uri)).inserted { deduplicated.append(item) } diff --git a/suixinkanTests/HomeCommonMenuStoreTests.swift b/suixinkanTests/HomeCommonMenuStoreTests.swift index 35d08c2..327ca74 100644 --- a/suixinkanTests/HomeCommonMenuStoreTests.swift +++ b/suixinkanTests/HomeCommonMenuStoreTests.swift @@ -272,8 +272,6 @@ final class HomeCommonMenuStoreTests: XCTestCase { /// 测试 report_photographer 属于 Android menuList 白名单,且可加入常用应用。 func testPhotographerReportIsWhitelistedAndCanBeAddedToCommon() { XCTAssertTrue(HomeCommonMenuStore.androidHomeMenuURIs.contains("report_photographer")) - XCTAssertFalse(HomeCommonMenuStore.androidHomeMenuURIs.contains("promotion_page")) - XCTAssertTrue(HomeCommonMenuStore.hiddenHomeMenuURIs.contains("promotion_page")) let store = HomeCommonMenuStore(defaults: makeIsolatedDefaults()) let uris = store.add( @@ -287,30 +285,6 @@ final class HomeCommonMenuStoreTests: XCTestCase { XCTAssertEqual(uris, ["location_report", "report_photographer"]) } - /// 测试已移除的 promotion_page 不会出现在白名单,且会从已保存常用菜单中过滤。 - func testPromotionPageIsHiddenFromCommonMenu() { - let defaults = makeIsolatedDefaults() - defaults.set( - ["wallet", "promotion_page", "message_center"], - forKey: HomeCommonMenuStore.storageKey(roleCode: "photographer", accountScope: "scenic_user_promotion") - ) - let store = HomeCommonMenuStore(defaults: defaults) - let menus = [ - menu("wallet"), - menu("promotion_page"), - menu("message_center") - ] - - let uris = store.load( - menuItems: menus, - roleCode: "photographer", - accountScope: "scenic_user_promotion", - topLevelPermissionURIs: menus.map(\.uri) - ) - - XCTAssertEqual(uris, ["wallet", "message_center"]) - } - /// 测试非白名单顶层项占用前 4 名额时,默认常用不会用后续白名单项补位。 func testDefaultCommonDoesNotBackfillAfterNonCatalogSlots() { let uris = HomeCommonMenuStore.defaultCommonURIs( diff --git a/功能同步Checklist.md b/功能同步Checklist.md index 740c306..2dd0260 100644 --- a/功能同步Checklist.md +++ b/功能同步Checklist.md @@ -112,7 +112,7 @@ | 完成 | 运营区域 | `operating-area` 已接真实页面;按店铺/景区管理员模式加载围栏,解析 `business_map_area` 并只读展示地图或模拟器坐标摘要。 | 本轮不做区域新增、编辑、删除或绘制保存。 | | 完成 | 位置上报 | 当前位置、标记点、在线状态、立即上报、提醒设置、历史记录、筛选和分页已接入。 | 本轮不做后台定位、离线队列或推送提醒。 | | 完成 | 举报摄影师 | `photographer_report` 已接真实页面;支持提交举报、我的举报、详情、补充证据、附近风险地图;当前为 Mock 数据闭环。 | 后续接入真实 API 时保持页面字段和交互不变。 | -| 移除 | 宣传页 | `promotion_page` 已从 iOS 移除;首页白名单与常用菜单均隐藏该入口。 | 如后端仍下发权限,客户端静默忽略。 | +| 移除 | 宣传页 | 已从 iOS 移除,首页不再展示该入口。 | 如后端仍下发权限,客户端静默忽略。 | | 完成 | 注册邀请 | 邀请码、邀请链接、二维码、复制链接、规则展示、邀请记录和奖励记录已接入。 | 邀请二维码不落盘,后续如需分享图片再临时生成。 | | 完成 | 飞手认证 | `pilot_cert` 已接真实页面;支持实名状态、认证详情、验证码、证件图 OSS 上传、首次提交和驳回编辑。 | 不包含 DJI/飞控 SDK 或真实飞行控制。 | | 完成 | 合作订单 | `cooperation_order` 已接真实页面;双 Tab 列表(获客线索/获客订单)、合作获客员、扫码绑定、主 Tab 扫码识别 sale_user_bind。 | 与订单模块 orderType 11/14 订单来源联动。 |