From 9ed5420381eb9e0f83149ef048d9f650116c5d87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=87=AF?= Date: Mon, 15 Jun 2026 22:33:18 +0800 Subject: [PATCH] =?UTF-8?q?feat(light-app):=20=E5=BA=94=E7=94=A8=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E9=A1=B5=E5=8A=A0=E7=B1=BB=E5=9E=8B=E5=88=86=E7=B1=BB?= =?UTF-8?q?=E7=AD=9B=E9=80=89=20+=20=E4=BF=AE=E5=A4=8D=E6=B7=B1=E8=89=B2?= =?UTF-8?q?=E9=A1=B6=E6=A0=8F=E6=A0=87=E9=A2=98=E9=AB=98=E5=88=86=E5=B1=8F?= =?UTF-8?q?=E5=86=85=E8=BE=B9=E8=B7=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 应用管理工具栏新增「全部/新页跳转/iframe嵌套」分类切换,选中 iframe 嵌套时出现挂载菜单下拉,可按 mountLocation 进一步筛选(深色/浅蓝主题适配) - 深色顶栏 .header-center-title 内边距由固定 155px 改为 8.07vw,随视口 等比缩放以匹配 background cover,修复 4K 等高分屏两侧菜单贴近中间的问题 Co-Authored-By: Claude Opus 4.8 (1M context) --- .../src/pages/LightAppManagementPage.tsx | 56 ++++++++++++++++++- .../src/pages/light-app-management.css | 15 +++-- frontend-web/src/styles/globals.css | 5 +- 3 files changed, 68 insertions(+), 8 deletions(-) diff --git a/frontend-web/src/pages/LightAppManagementPage.tsx b/frontend-web/src/pages/LightAppManagementPage.tsx index b613735a..2e28b2c0 100644 --- a/frontend-web/src/pages/LightAppManagementPage.tsx +++ b/frontend-web/src/pages/LightAppManagementPage.tsx @@ -133,6 +133,8 @@ export default function LightAppManagementPage() { const [form, setForm] = useState(emptyForm); const [activeParamPopover, setActiveParamPopover] = useState(null); const [viewMode, setViewMode] = useState<"table" | "cards">("table"); + const [categoryFilter, setCategoryFilter] = useState<"all" | LightAppType>("all"); + const [mountFilter, setMountFilter] = useState(""); const saving = actions.create.isPending || actions.update.isPending; @@ -220,7 +222,22 @@ export default function LightAppManagementPage() { toast.success("已复制地址"); }; - const tableApps = useMemo(() => apps, [apps]); + const selectCategory = (cat: "all" | LightAppType) => { + setCategoryFilter(cat); + if (cat !== "iframe") setMountFilter(""); + }; + + const tableApps = useMemo( + () => + apps.filter((app) => { + if (categoryFilter !== "all" && app.appType !== categoryFilter) return false; + if (categoryFilter === "iframe" && mountFilter && app.mountLocation !== mountFilter) { + return false; + } + return true; + }), + [apps, categoryFilter, mountFilter], + ); return (
@@ -252,7 +269,7 @@ export default function LightAppManagementPage() {
-
+
+
+ {( + [ + { value: "all", label: "全部" }, + { value: "window_open", label: "新页跳转" }, + { value: "iframe", label: "iframe 嵌套" }, + ] as const + ).map((c) => ( + + ))} +
+ + {categoryFilter === "iframe" && ( +
+