Files
suixinkan_ios_new/suixinkan/Features/Profile/Views/DebugHomeMenuPreviewView.swift
汉秋 26f4d0e671 Migrate from iOS 17 Observation to iOS 16-compatible Combine architecture.
Lower deployment target to iOS 16, replace @Observable with ObservableObject, add navigation and UI compatibility shims, and include login smoke UI tests.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-26 10:16:35 +08:00

149 lines
4.7 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// DebugHomeMenuPreviewView.swift
// suixinkan
//
// Created by Codex on 2026/6/24.
//
#if DEBUG
import SwiftUI
///
struct DebugHomeMenuPreviewView: View {
@EnvironmentObject private var appRouter: AppRouter
@EnvironmentObject private var router: RouterPath
@EnvironmentObject private var toastCenter: ToastCenter
private let items = HomeMenuRouter.debugAllMenuItems()
var body: some View {
List {
Section {
ForEach(items) { item in
Button {
open(item)
} label: {
DebugHomeMenuRow(item: item, route: HomeMenuRouter.resolve(uri: item.uri, title: item.title))
}
.buttonStyle(.plain)
}
} header: {
Text("全部首页菜单")
} footer: {
Text("DEBUG 调试入口不读取角色权限,仅用于预览页面迁移状态。")
}
}
.listStyle(.insetGrouped)
.navigationTitle("首页菜单调试")
.navigationBarTitleDisplayMode(.inline)
}
///
private func open(_ item: HomeMenuItem) {
let route = HomeMenuRouter.resolve(uri: item.uri, title: item.title)
switch route {
case .tab(let tab):
appRouter.select(tab)
case .orders(let entry):
appRouter.selectOrders(entry: entry)
case .destination(let homeRoute):
router.navigate(to: .home(homeRoute))
case .unsupported(_, let title, let reason):
toastCenter.show(reason)
router.navigate(to: .home(.modulePlaceholder(uri: item.uri, title: title)))
case .placeholder(let uri, let title):
HomeRouteDiagnostics.recordUnknown(uri: uri, title: title)
router.navigate(to: .home(.modulePlaceholder(uri: uri, title: title)))
}
}
}
/// URI
private struct DebugHomeMenuRow: View {
let item: HomeMenuItem
let route: HomeMenuResolvedRoute
var body: some View {
HStack(spacing: AppMetrics.Spacing.small) {
Image(systemName: iconName)
.font(.system(size: 18, weight: .semibold))
.foregroundStyle(iconColor)
.frame(width: 30, height: 30)
.background(iconColor.opacity(0.12), in: Circle())
VStack(alignment: .leading, spacing: 4) {
Text(item.title)
.font(.system(size: AppMetrics.FontSize.body, weight: .semibold))
.foregroundStyle(AppDesign.textPrimary)
Text(item.uri)
.font(.system(size: AppMetrics.FontSize.caption))
.foregroundStyle(AppDesign.textSecondary)
.lineLimit(1)
}
Spacer()
Text(routeLabel)
.font(.system(size: AppMetrics.FontSize.caption, weight: .semibold))
.foregroundStyle(iconColor)
Image(systemName: "chevron.right")
.font(.system(size: AppMetrics.FontSize.caption, weight: .semibold))
.foregroundStyle(AppDesign.placeholder)
}
.contentShape(Rectangle())
.padding(.vertical, AppMetrics.Spacing.xSmall)
}
///
private var routeLabel: String {
switch route {
case .tab:
return "Tab"
case .orders:
return "订单"
case .destination(let homeRoute):
if case .modulePlaceholder = homeRoute {
return "占位"
}
return "页面"
case .unsupported:
return "不支持"
case .placeholder:
return "未知"
}
}
///
private var iconName: String {
switch route {
case .tab:
return "rectangle.grid.1x2"
case .orders:
return "doc.text"
case .destination(let homeRoute):
if case .modulePlaceholder = homeRoute {
return "square.dashed"
}
return "arrowshape.turn.up.right"
case .unsupported:
return "nosign"
case .placeholder:
return "questionmark.circle"
}
}
///
private var iconColor: Color {
switch route {
case .tab, .orders, .destination:
AppDesign.primary
case .unsupported:
.red
case .placeholder:
AppDesign.warning
}
}
}
#endif