彻底清理 promotion_page 残留引用,移除 hiddenHomeMenuURIs 机制。

宣传页已从白名单、菜单构建与文档中完全删除,不再保留专用隐藏逻辑。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-03 20:51:27 +08:00
parent 9df4c4f6e8
commit a0549e068a
5 changed files with 4 additions and 40 deletions

View File

@ -63,5 +63,3 @@ Home 模块负责登录后的首页工作台,包括当前景区展示、工作
后续迁移具体首页子模块时,应先在 `HomeRoute` 增加目标页面,再更新 `HomeMenuRouter.resolve` 对应 URI 的映射,并同步补充单元测试。 后续迁移具体首页子模块时,应先在 `HomeRoute` 增加目标页面,再更新 `HomeMenuRouter.resolve` 对应 URI 的映射,并同步补充单元测试。
`report_photographer` 已由 `Features/WildPhotographerReport` 接管。 `report_photographer` 已由 `Features/WildPhotographerReport` 接管。
`promotion_page`(宣传页)已从 iOS 移除;该 URI 列入 `HomeCommonMenuStore.hiddenHomeMenuURIs`,首页与全部功能页均不展示。

View File

@ -44,11 +44,6 @@ struct HomeCommonMenuStore {
"cooperation_order" "cooperation_order"
] ]
/// iOS URI使
static let hiddenHomeMenuURIs: Set<String> = [
"promotion_page"
]
private let defaults: UserDefaults private let defaults: UserDefaults
/// UserDefaults /// UserDefaults
@ -133,11 +128,9 @@ struct HomeCommonMenuStore {
let finalCommon: [String] let finalCommon: [String]
if !saved.isEmpty { if !saved.isEmpty {
finalCommon = saved finalCommon = saved.filter { availableTopLevelSet.contains($0) }
.filter { availableTopLevelSet.contains($0) }
.filter { !Self.hiddenHomeMenuURIs.contains($0) }
} else { } else {
finalCommon = defaultCommon.filter { !Self.hiddenHomeMenuURIs.contains($0) } finalCommon = defaultCommon
save(finalCommon, roleCode: roleCode, accountScope: accountScope) save(finalCommon, roleCode: roleCode, accountScope: accountScope)
} }
@ -222,6 +215,6 @@ struct HomeCommonMenuStore {
/// URI Android /// URI Android
private static func isAndroidHomeMenuURI(_ uri: String) -> Bool { private static func isAndroidHomeMenuURI(_ uri: String) -> Bool {
androidHomeMenuURIs.contains(uri) && !hiddenHomeMenuURIs.contains(uri) androidHomeMenuURIs.contains(uri)
} }
} }

View File

@ -80,7 +80,6 @@ final class HomeViewModel: ObservableObject {
var seen = Set<String>() var seen = Set<String>()
var deduplicated: [PermissionItem] = [] var deduplicated: [PermissionItem] = []
for item in permissionItems where !item.uri.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { 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 { if seen.insert(HomeMenuRouter.menuAliasKey(for: item.uri)).inserted {
deduplicated.append(item) deduplicated.append(item)
} }

View File

@ -272,8 +272,6 @@ final class HomeCommonMenuStoreTests: XCTestCase {
/// report_photographer Android menuList /// report_photographer Android menuList
func testPhotographerReportIsWhitelistedAndCanBeAddedToCommon() { func testPhotographerReportIsWhitelistedAndCanBeAddedToCommon() {
XCTAssertTrue(HomeCommonMenuStore.androidHomeMenuURIs.contains("report_photographer")) XCTAssertTrue(HomeCommonMenuStore.androidHomeMenuURIs.contains("report_photographer"))
XCTAssertFalse(HomeCommonMenuStore.androidHomeMenuURIs.contains("promotion_page"))
XCTAssertTrue(HomeCommonMenuStore.hiddenHomeMenuURIs.contains("promotion_page"))
let store = HomeCommonMenuStore(defaults: makeIsolatedDefaults()) let store = HomeCommonMenuStore(defaults: makeIsolatedDefaults())
let uris = store.add( let uris = store.add(
@ -287,30 +285,6 @@ final class HomeCommonMenuStoreTests: XCTestCase {
XCTAssertEqual(uris, ["location_report", "report_photographer"]) 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 /// 4
func testDefaultCommonDoesNotBackfillAfterNonCatalogSlots() { func testDefaultCommonDoesNotBackfillAfterNonCatalogSlots() {
let uris = HomeCommonMenuStore.defaultCommonURIs( let uris = HomeCommonMenuStore.defaultCommonURIs(

View File

@ -112,7 +112,7 @@
| 完成 | 运营区域 | `operating-area` 已接真实页面;按店铺/景区管理员模式加载围栏,解析 `business_map_area` 并只读展示地图或模拟器坐标摘要。 | 本轮不做区域新增、编辑、删除或绘制保存。 | | 完成 | 运营区域 | `operating-area` 已接真实页面;按店铺/景区管理员模式加载围栏,解析 `business_map_area` 并只读展示地图或模拟器坐标摘要。 | 本轮不做区域新增、编辑、删除或绘制保存。 |
| 完成 | 位置上报 | 当前位置、标记点、在线状态、立即上报、提醒设置、历史记录、筛选和分页已接入。 | 本轮不做后台定位、离线队列或推送提醒。 | | 完成 | 位置上报 | 当前位置、标记点、在线状态、立即上报、提醒设置、历史记录、筛选和分页已接入。 | 本轮不做后台定位、离线队列或推送提醒。 |
| 完成 | 举报摄影师 | `photographer_report` 已接真实页面;支持提交举报、我的举报、详情、补充证据、附近风险地图;当前为 Mock 数据闭环。 | 后续接入真实 API 时保持页面字段和交互不变。 | | 完成 | 举报摄影师 | `photographer_report` 已接真实页面;支持提交举报、我的举报、详情、补充证据、附近风险地图;当前为 Mock 数据闭环。 | 后续接入真实 API 时保持页面字段和交互不变。 |
| 移除 | 宣传页 | `promotion_page` 已从 iOS 移除首页白名单与常用菜单均隐藏该入口。 | 如后端仍下发权限,客户端静默忽略。 | | 移除 | 宣传页 | 已从 iOS 移除首页不再展示该入口。 | 如后端仍下发权限,客户端静默忽略。 |
| 完成 | 注册邀请 | 邀请码、邀请链接、二维码、复制链接、规则展示、邀请记录和奖励记录已接入。 | 邀请二维码不落盘,后续如需分享图片再临时生成。 | | 完成 | 注册邀请 | 邀请码、邀请链接、二维码、复制链接、规则展示、邀请记录和奖励记录已接入。 | 邀请二维码不落盘,后续如需分享图片再临时生成。 |
| 完成 | 飞手认证 | `pilot_cert` 已接真实页面;支持实名状态、认证详情、验证码、证件图 OSS 上传、首次提交和驳回编辑。 | 不包含 DJI/飞控 SDK 或真实飞行控制。 | | 完成 | 飞手认证 | `pilot_cert` 已接真实页面;支持实名状态、认证详情、验证码、证件图 OSS 上传、首次提交和驳回编辑。 | 不包含 DJI/飞控 SDK 或真实飞行控制。 |
| 完成 | 合作订单 | `cooperation_order` 已接真实页面;双 Tab 列表(获客线索/获客订单)、合作获客员、扫码绑定、主 Tab 扫码识别 sale_user_bind。 | 与订单模块 orderType 11/14 订单来源联动。 | | 完成 | 合作订单 | `cooperation_order` 已接真实页面;双 Tab 列表(获客线索/获客订单)、合作获客员、扫码绑定、主 Tab 扫码识别 sale_user_bind。 | 与订单模块 orderType 11/14 订单来源联动。 |