From c09a2291f35cbfa60eb32494ed5e54d5a8e49556 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 9 Sep 2026 14:46:08 +0800 Subject: [PATCH] =?utf8?q?feat:=20=E9=87=8D=E6=9E=84=E6=89=A9=E5=B1=95?= =?utf8?q?=E9=A1=B5=E9=9D=A2=E8=8F=9C=E5=8D=95=EF=BC=88=E4=BB=AA=E8=A1=A8?= =?utf8?q?=E6=9D=BF/=E6=8A=A5=E8=A1=A8=E5=AD=90=E9=A1=B5/=E5=9F=BA?= =?utf8?q?=E7=A1=80=E7=BB=84=E4=BB=B6=E5=BA=93/=E5=8A=9F=E8=83=BD=E7=BB=84?= =?utf8?q?=E4=BB=B6=E5=BA=93/=E7=AD=9B=E9=80=89=E5=99=A8/=E6=95=B0?= =?utf8?q?=E6=8D=AE=E6=BA=90=EF=BC=89=EF=BC=8C=E5=90=84=E9=A1=B5=E7=A9=BA?= =?utf8?q?=E7=99=BD=E5=8D=A0=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- app/globals.css | 3 +++ app/page.tsx | 24 ++++++++++++++++-------- data/db/StationBuilder.sqlite | Bin 11657216 -> 11657216 bytes scripts/verify-extmenu.mjs | 22 ++++++++++++++++++++++ 4 files changed, 41 insertions(+), 8 deletions(-) create mode 100644 scripts/verify-extmenu.mjs diff --git a/app/globals.css b/app/globals.css index 11133dd..b826323 100644 --- a/app/globals.css +++ b/app/globals.css @@ -297,6 +297,9 @@ html,body{font-family:Roboto,"Noto Sans SC","Microsoft YaHei",Arial,sans-serif;f .menu-section-items button:hover{background:#dcecf5;color:var(--company-primary)} .menu-section-items button.active{background:#c3e4f6;color:var(--company-primary);font-weight:500} .extension-menu-items{padding-bottom:2px}.extension-menu-item{height:50px;padding:0 20px 0 40px;display:flex;align-items:center;font-size:17px;line-height:50px;color:#323233;font-weight:500;cursor:default}.extension-submenu-title{justify-content:space-between;cursor:pointer}.extension-submenu-title>.anticon{font-size:11px;margin-right:1px}.extension-third-menu>div{height:50px;padding:0 20px 0 60px;display:flex;align-items:center;color:#323233;font-size:17px;line-height:50px;font-weight:500;cursor:default}.extension-menu-section .extension-menu-item:hover,.extension-menu-section .extension-third-menu>div:hover{background:transparent;color:inherit} +.extension-third-menu>button{height:50px;padding:0 20px 0 60px;display:flex;align-items:center;color:#323233;font-size:17px;line-height:50px;font-weight:500;cursor:pointer;border:0;background:transparent;width:100%;text-align:left;font-family:inherit} +.extension-menu-section .extension-third-menu>button.clickable:hover{background:#e8f4fb;color:var(--company-primary)} +.extension-menu-section .extension-third-menu>button.clickable.active{background:#d7eef9;color:var(--company-primary);font-weight:500} .company-side-footer{position:relative;margin:auto 16px 16px;padding:14px 4px 0;border-top:1px solid #ddd;display:flex;flex-direction:column;gap:8px;font-size:11px} .company-side-footer>b{color:#515a6e}.company-side-footer>button{height:26px;padding:0;border:0;background:transparent;display:flex;align-items:center;justify-content:space-between;color:#89898a;text-align:left} .company-model-menu{position:absolute;left:0;right:0;bottom:30px;padding:6px;background:#fff;border:1px solid #d9d9d9;box-shadow:0 4px 12px #00000018} diff --git a/app/page.tsx b/app/page.tsx index f8f80cf..5cb53cd 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -4,7 +4,7 @@ import { useEffect, useMemo, useRef, useState, type PointerEvent as ReactPointer import { Button as AntButton, Drawer, Dropdown, QRCode, Tag } from "antd"; import { AimOutlined, ApartmentOutlined, BarsOutlined, BlockOutlined, CaretDownOutlined, CaretRightOutlined, ControlOutlined, CopyOutlined, DeleteOutlined, DownloadOutlined, EditOutlined, EllipsisOutlined, EyeOutlined, LinkOutlined, PlusOutlined, PlusSquareOutlined, RobotOutlined, SearchOutlined, SnippetsOutlined, UploadOutlined, ZoomInOutlined, ZoomOutOutlined } from "@ant-design/icons"; -type PageKey = "login" | "projects" | "siteEdit" | "basic" | "assets" | "pageConfig" | "functions" | "generate" | "result" | "preview" | "domains" | "domainDetail" | "styleLibrary" | "deviceTemplates" | "toolSettings" | "domainSettings" | "dashboard"; +type PageKey = "login" | "projects" | "siteEdit" | "basic" | "assets" | "pageConfig" | "functions" | "generate" | "result" | "preview" | "domains" | "domainDetail" | "styleLibrary" | "deviceTemplates" | "toolSettings" | "domainSettings" | "dashboard" | "report-dashboard" | "report-doc" | "basic-components" | "func-components" | "filters" | "datasource"; type ModalKey = "" | "feedback" | "download" | "history" | "prompt" | "completePrompt"; const meta: Record = { @@ -24,7 +24,13 @@ const meta: Record = styleLibrary:{label:"页面样式",icon:"❖",subtitle:"管理可复用的 Cube 页面视觉样式与预览资源"}, toolSettings:{label:"内部工具配置",icon:"",subtitle:"配置 StationBuilder 使用的内部能力、AI 服务和默认模型"}, domainSettings:{label:"领域配置",icon:"",subtitle:"维护领域分类,供领域方案与站点项目统一使用"}, - dashboard:{label:"仪表盘",icon:"◈",subtitle:"仅展示仪表盘示意图片"}, + dashboard:{label:"仪表板",icon:"◈",subtitle:"仅展示仪表盘示意图片"}, + "report-dashboard":{label:"仪表板报表",icon:"",subtitle:""}, + "report-doc":{label:"文档报表",icon:"",subtitle:""}, + "basic-components":{label:"基础组件库",icon:"",subtitle:""}, + "func-components":{label:"功能组件库",icon:"",subtitle:""}, + filters:{label:"筛选器",icon:"",subtitle:""}, + datasource:{label:"数据源",icon:"",subtitle:""}, }; @@ -533,7 +539,7 @@ export default function Home(){ const projectArea = (["projects","siteEdit","basic","assets","pageConfig","functions","generate","result","preview"] as PageKey[]).includes(page); const resourceArea = (["domains","domainDetail","deviceTemplates","styleLibrary"] as PageKey[]).includes(page); const systemArea = (["toolSettings","domainSettings"] as PageKey[]).includes(page); - const extensionArea = (["dashboard"] as PageKey[]).includes(page); + const extensionArea = (["dashboard","report-dashboard","report-doc","basic-components","func-components","filters","datasource"] as PageKey[]).includes(page); const siteEditMeta = meta[siteEditSection]; const manualAssetActive = assetConfigMode==="manual" && (page==="assets" || (page==="siteEdit"&&siteEditSection==="assets")); @@ -569,16 +575,18 @@ export default function Home(){
{extensionNavOpen&&
- -
数据源
+
{reportNavOpen&&
-
仪表盘报表
-
文档报表
+ +
}
-
数据源
+ + + +
}
diff --git a/data/db/StationBuilder.sqlite b/data/db/StationBuilder.sqlite index 0d8130d093faeae991940835bd9f9bac6e9086b8..70c7efabc6b5c220932d2f33da6b7d7950e8827b 100644 GIT binary patch delta 947 zcmXBPM^IC75XbTN0+A$W9wK5w&==HTFT{ir(5GSp>7%z@jIe7Lv!{PIr-JRLl+2FVD#vmdNIo6t6F2_3SBbwY3|Eswy zMvvR)_QoBR|6Ilz#iL}#vm1U`O)kC6D9Kf3Q5$xqsCudR6|kFs2fP2Yx2U?0PGwpm z3IbW8Ba}{EOs$$!y@)l=!$R>jkSBXZG@#lnk|dd|{gTqB^eR!suhd!l6}#e# z+k!u>qB@)}_lUl*-867S>ZWm~eQ~DBn!zU8LUx1nS$M)u`IGRI3DHY_6jAa+SENfD z_@gP2Y)&L)7?6Tg7%>QGFu@E9(lHoAV15_#3W3{6imf5Oh*CSm;n#GC`1v8Q34-IQHGhA1r4(?2Xj%5d6l*g3H8{FE!c`}*p408iCx%@ zJ=lwV*pCA^hz1n+{PW;#Xa1|14Qu4Pod5s; delta 968 zcmX}n$5T^L6u{y4(ntcnhXx@9NGt(sECEF+++%xB#xuMTr^dZC?a-glSN)Gh;V?H^V`t5U@ z_1^MIZ$-*c^T(~PQ$1=6n3;@S+Umn1$J>z#LR!F6LoA7QlyvScJu> z!V)aSGAzdmRHFv9Scz3wjWwvlTCBr*Y(PCWViPuF3$~&G+prxwuoHgl!fx!rUhKnu z9Kb;w!eJc2Q5?f@oIoQ^;uKEf49?;l&f@|u;u0<+fGcQ15Fv!oj22wQHC#t4Zr~{if(m.type()==='error')errs.push(m.text());}); +await p.goto(`${BASE}/?page=projects`,{waitUntil:'networkidle'}); +await p.waitForSelector('.company-side-nav',{timeout:15000}); +// collect menu text +const menuText = await p.evaluate(()=>{ + const sec=[...document.querySelectorAll('.extension-menu-section')][0]; + return sec? sec.innerText.replace(/\n+/g,' | ') : 'NO SECTION'; +}); +console.log('MENU:', menuText); +for (const key of ['dashboard','report-dashboard','report-doc','basic-components','func-components','filters','datasource']) { + await p.goto(`${BASE}/?page=${key}`,{waitUntil:'networkidle'}); + await p.waitForSelector('.page-heading h1',{timeout:10000}).catch(()=>{}); + const title = await p.evaluate(()=>document.querySelector('.page-heading h1')?.textContent||'(none)'); + console.log('PAGE', key, '=>', title); +} +console.log('ERRORS', errs.slice(0,8)); +await b.close(); -- 2.43.0