Files
suixinkan_ios_new/suixinkan/Features/Profile/Views/DebugHomeMenuPreviewView.swift

154 lines
4.9 KiB
Swift
Raw Permalink 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 .orderPush(let route):
appRouter.select(.orders)
appRouter.router(for: .orders).navigate(to: .orders(route))
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 .orderPush:
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, .orderPush:
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, .orderPush, .destination:
AppDesign.primary
case .unsupported:
.red
case .placeholder:
AppDesign.warning
}
}
}
#endif