]> acesimba.cloud Git - StationBuilder.git/commitdiff
feat: 设计方案按钮移至左侧菜单栏底部(鲜明紫渐变)
authorroot <root@localhost.localdomain>
Wed, 9 Sep 2026 05:45:09 +0000 (13:45 +0800)
committerroot <root@localhost.localdomain>
Wed, 9 Sep 2026 05:45:09 +0000 (13:45 +0800)
app/globals.css
app/page.tsx

index 9761793d6f713fc344e1f51faeee122797bf2499..cc13220393499409a42415650e1fc1974593485f 100644 (file)
@@ -29,7 +29,7 @@
 
 /* 右下角浮动 AI 会话 */
 .ai-fab{position:fixed;right:22px;bottom:22px;z-index:80;width:54px;height:54px;border-radius:50%;border:0;background:transparent;box-shadow:0 8px 22px #0a85c355;display:grid;place-items:center;cursor:pointer;touch-action:none;user-select:none}.ai-fab-icon{width:54px;height:54px;border-radius:50%;object-fit:cover;-webkit-user-drag:none;user-drag:none;user-select:none;pointer-events:none}
-.design-doc-link{position:fixed;left:12px;bottom:10px;z-index:70;padding:3px 10px;font-size:10px;line-height:1.4;color:#fff;text-decoration:none;border-radius:10px;background:linear-gradient(135deg,#b39ddb 0%,#d1c4e9 100%);box-shadow:0 2px 6px #b39ddb55;opacity:.85;transition:opacity .15s}
+.design-doc-link{display:block;margin-top:auto;margin-left:10px;margin-right:10px;margin-bottom:10px;padding:5px 8px;font-size:10px;line-height:1.4;font-weight:600;text-align:center;color:#fff;text-decoration:none;border-radius:6px;background:linear-gradient(135deg,#7e57c2 0%,#ab47bc 100%);box-shadow:0 1px 4px #7e57c255;opacity:.95;transition:opacity .15s}
 .design-doc-link:hover{opacity:1;color:#fff}
 .ai-fab:active{cursor:grabbing}
 .ai-fab:hover:not(:active){transform:translateY(-1px);box-shadow:0 12px 26px #0a85c366}
@@ -493,7 +493,7 @@ html,body{font-family:Roboto,"Noto Sans SC","Microsoft YaHei",Arial,sans-serif;f
 
 
 /* 全局页脚 · 备案信息 */
-.site-footer{margin-left:0;padding:14px 20px;text-align:center;color:#9aa0a6;font-size:12px;background:#fff;border-top:1px solid var(--line)}
+.site-footer{position:relative;margin-left:0;padding:14px 20px;text-align:center;color:#9aa0a6;font-size:12px;background:#fff;border-top:1px solid var(--line)}
 
 /* WISE-IoT Desk header — aligned to the reference application's native header. */
 .topbar.wise-header{height:56px;padding:0 8px 0 12px;gap:0;border-top:4px solid #008cd6;border-bottom:1px solid #c8c8c8;background:#fff;box-shadow:none;overflow:hidden;color:#787878}
index 7cf569eab3bab017763918fa59eac7ee166c8024..d9e4bf5fd1d62ac3db95982d5b382590623d69fe 100644 (file)
@@ -594,6 +594,7 @@ export default function Home(){
           </div>}
         </section>
       </nav>
+      <a className="design-doc-link" href="https://aidemo.istation.cloud/t/stationbuilder/design-doc.html" target="_blank" rel="noopener">设计方案</a>
     </aside>
     <aside className="side-nav"><div className="module-switch"><button className={(["projects","basic","assets","pageConfig","functions","generate","result","preview"] as PageKey[]).includes(page)?"active":""} onClick={()=>go("projects")}><b>▦</b><span>StationBuilder<small>站点生成工具</small></span></button><button className={(["domains","domainDetail","deviceTemplates"] as PageKey[]).includes(page)?"active":""} onClick={()=>{setDomainFilter(null); go("domains");}}><b>◆</b><span>领域方案库<small>行业标准方案</small></span></button><button className={page==="styleLibrary"?"active":""} onClick={()=>go("styleLibrary")}><b>❖</b><span>页面样式库<small>页面视觉样式</small></span></button></div>{page==="styleLibrary"?<><small>样式库导航</small><button className={page==="styleLibrary"?"active":""} onClick={()=>go("styleLibrary")}><b>❖</b>全部页面样式</button></>:(["domains","domainDetail","deviceTemplates"] as PageKey[]).includes(page)?<><small>方案库导航</small><button className={page==="domains"?"active":""} onClick={()=>{setDomainFilter(null); go("domains");}}><b>▦</b>领域方案</button><button className={page==="deviceTemplates"?"active":""} onClick={()=>go("deviceTemplates")}><b>⬡</b>设备模版</button><small>领域分类</small>
 {domainOptions.map((d:any)=>(
@@ -631,7 +632,7 @@ export default function Home(){
         </div>
       </>
     )}
-  </div></aside>
+    </div></aside>
     <main className="workspace"><div className="crumb">iStation StationBuilder / <b>{["domains","domainDetail","styleLibrary","deviceTemplates","toolSettings","domainSettings"].includes(page)?meta[page].label:page==="projects"?"站点列表":page==="siteEdit"?`站点管理 / 站点编辑 / ${siteEditMeta.label}`:`站点详情 / ${meta[page].label}`}</b></div><div className="page-heading"><div><h1>{page==="siteEdit"?siteEditMeta.label:meta[page].label}</h1><p>{page==="siteEdit"?siteEditMeta.subtitle:meta[page].subtitle}</p></div><div>{page==="projects"&&<Button onClick={()=>go("basic","new")}>+ 新建站点</Button>}{page==="siteEdit"&&<label className="site-edit-switcher"><span>当前站点</span><select value={siteId??""} onChange={async e=>{const id=Number(e.target.value);await loadSite(id);window.history.replaceState({},"",`?page=siteEdit&id=${id}`);}}>{sites.map(item=><option key={item.id} value={item.id}>{item.name||"未命名站点"}</option>)}</select></label>}{page==="domains"&&openDomainTemplateId==null&&<Button onClick={()=>setOpenDomainTemplateId("create")}>+ 新增领域方案</Button>}{page==="domains"&&openDomainTemplateId!=null&&<Button secondary onClick={()=>setOpenDomainTemplateId(null)}>← 返回方案列表</Button>}{domainFilter!=null&&page==="domains"&&openDomainTemplateId==null&&<Button secondary onClick={()=>{setDomainFilter(null);}}>清除领域筛选:{domainOptions.find(d=>d.id===domainFilter)?.name||""}</Button>}{page==="domainSettings"&&<Button onClick={()=>{setNewDomainName("");setAddingDomain(true);}}>+ 新增领域</Button>}</div></div>{page==="siteEdit"&&<SiteEditTabs section={siteEditSection} onChange={setSiteEditSection}/>} {SITE_EDIT_STEPS.includes(page as SiteEditSection)&&<Steps page={page} go={go}/>}<div className="content">
       {page==="projects"&&<Projects view={view} setView={setView} sites={sites} loading={loading} go={go} loadSite={loadSite} notify={notify} onDelete={deleteSites}/>}
       {(page==="domains"||page==="domainDetail")&&(openDomainTemplateId!=null
@@ -654,7 +655,6 @@ export default function Home(){
     </div>{SITE_EDIT_STEPS.slice(0,-1).includes(page as SiteEditSection)&&<div className="sticky-actions"><Button secondary onClick={()=>{const i=SITE_EDIT_STEPS.indexOf(page as SiteEditSection);go(i>0?SITE_EDIT_STEPS[i-1]:"projects")}}>上一步</Button><div><Button secondary onClick={()=>notify("草稿已保存")}>保存草稿</Button><Button onClick={()=>{const i=SITE_EDIT_STEPS.indexOf(page as SiteEditSection);go(SITE_EDIT_STEPS[i+1])}}>下一步</Button></div></div>}{page==="siteEdit"&&<div className="sticky-actions"><Button secondary onClick={()=>{const i=SITE_EDIT_STEPS.indexOf(siteEditSection);if(i>0)setSiteEditSection(SITE_EDIT_STEPS[i-1]);else go("projects")}}>上一步</Button><div><Button secondary onClick={()=>notify("草稿已保存")}>保存草稿</Button>{siteEditSection!=="generate"&&<Button onClick={()=>{const i=SITE_EDIT_STEPS.indexOf(siteEditSection);setSiteEditSection(SITE_EDIT_STEPS[i+1])}}>下一步</Button>}</div></div>}</main>
     <footer className="site-footer">陕ICP备2026022239号-2</footer>
     {addingDomain&&page==="domainSettings"&&<div className="dlg-backdrop" onMouseDown={()=>{setAddingDomain(false);setNewDomainName("");}}><div className="dlg-box domain-create-dialog" onMouseDown={e=>e.stopPropagation()}><h2>新增领域</h2><p>创建后可在领域方案和站点基本信息中直接选择。</p><input autoFocus value={newDomainName} maxLength={6} placeholder="请输入领域名称(最多 6 个字)" onChange={e=>setNewDomainName(e.target.value)} onKeyDown={async e=>{if(e.key==="Enter")await doAddDomain();if(e.key==="Escape"){setAddingDomain(false);setNewDomainName("");}}}/><div className="dlg-actions"><Button secondary onClick={()=>{setAddingDomain(false);setNewDomainName("");}}>取消</Button><Button disabled={!newDomainName.trim()} onClick={doAddDomain}>创建</Button></div></div></div>}
-    <a className="design-doc-link" href="design-doc.html" target="_blank" rel="noopener">设计方案</a>
     {toast&&<div className="toast"><b>✓</b>{toast}</div>}{modal&&<Modal type={modal} close={()=>setModal("")} notify={notify} promptData={promptData} feedbackCube={feedbackCube} refineCube={refineCube} refining={refining} refineLog={refineLog}/>}
     {!aiOpen&&!manualAssetActive&&<button ref={fabRef} className="ai-fab" title="AI 助手 · 拖动可移动位置,双击复位" aria-label="AI 助手"
       style={fabPos?{left:fabPos.x,top:fabPos.y,right:"auto",bottom:"auto"}:undefined}