From: root Date: Fri, 21 Aug 2026 02:15:23 +0000 (+0800) Subject: feat: 领域编辑迁移至左侧导航栏并修复单行显示 X-Git-Url: http://acesimba.cloud/gitweb/?a=commitdiff_plain;h=41519a6b6bbe2420e5f4773e67c2f09beaadd5d0;p=StationBuilder.git feat: 领域编辑迁移至左侧导航栏并修复单行显示 - 移除「领域方案库」首页「管理领域」面板,方案列表上移 - 领域增删入口迁至左侧「领域分类」分组:行尾 × 删除(非「其他」领域,二次确认)、行末 + 新增领域(行内输入,≤6 字) - 修复 addDomain 仅更新 domains 未刷新 domainOptions 的问题(改由 reloadDomains 统一刷新) - 修复领域名按钮与 ×/+ 共用 flex:1 导致 × 等宽拉伸、过滤按钮被压窄、4 字以内领域名换行的布局问题(flex:1 仅作用于过滤按钮,×/✓ 固定 30px,领域名 white-space:nowrap + 省略号) - 同步更新 design-doc.html(v0.27) --- diff --git a/app/globals.css b/app/globals.css index f30916c..2863a26 100644 --- a/app/globals.css +++ b/app/globals.css @@ -292,3 +292,24 @@ .text-button.danger{color:#d92d20} .text-button.danger:hover{text-decoration:underline} +/* 领域方案库 · 左侧导航栏「领域分类」行内编辑(删除× / 新增+) */ +.domain-nav-row{display:flex;align-items:stretch;flex-wrap:nowrap} +.domain-nav-row>button:not(.domain-nav-del):not(.domain-nav-ok){flex:1;min-width:0;text-align:left;height:41px;border:0;background:transparent;padding:0 14px;display:flex;align-items:center;color:#333;font-size:13px;white-space:nowrap} +.domain-nav-name{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} +.domain-nav-row>button b{width:18px;color:#8a9298;margin-right:6px;font-weight:normal;flex:0 0 auto} +.domain-nav-row>button:hover{background:#e9ecee} +.domain-nav-row.active{background:#e9f6fc} +.domain-nav-row>button.active{background:#e9f6fc;color:#007fbd;font-weight:bold} +.domain-nav-row.active>button b,.domain-nav-row>button.active b{color:#009fe3} +.domain-nav-del{border:0;background:transparent;width:30px;color:#b0b6ba;font-size:15px;line-height:1;flex:0 0 auto} +.domain-nav-del:hover{color:var(--red);background:#fdecea} +.domain-nav-ok{border:0;background:transparent;width:30px;color:#1f9d5f;font-size:14px;flex:0 0 auto} +.domain-nav-ok:hover{background:#eafaef} +.domain-nav-add-cta{display:block} +.domain-nav-add{height:34px;border:0;background:transparent;text-align:left;padding:0 14px;display:flex;align-items:center;color:#009fe3;font-size:12px;width:100%} +.domain-nav-add:hover{background:#e9f6fc} +.domain-nav-add b{margin-right:6px} +.domain-nav-row.add{align-items:center;padding:4px 6px} +.domain-nav-input{flex:1;min-width:0;margin:0 4px;height:28px;border:1px solid #cfd4d9;border-radius:3px;padding:0 8px;font-size:12px;background:#fff} +.domain-nav-input:focus{outline:1px solid var(--blue);border-color:var(--blue)} + diff --git a/app/page.tsx b/app/page.tsx index 0ba009f..52aa0c9 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -177,6 +177,8 @@ export default function Home(){ const [openDomainTemplateId,setOpenDomainTemplateId]=useState(null); const [domainFilter,setDomainFilter]=useState(null); const [domainOptions,setDomainOptions]=useState<{id:number;name:string}[]>([]); + const [addingDomain,setAddingDomain]=useState(false); + const [newDomainName,setNewDomainName]=useState(""); const [view,setView]=useState<"table"|"card">("table"); const [functionTab,setFunctionTab]=useState<"mu"|"cube"|"menu">("mu"); @@ -425,12 +427,19 @@ export default function Home(){ }; const addDomain=async(name:string)=>{ - if(!name || name.length>6) return; + const n=(name||"").trim(); + if(!n) return; + if(n.length>6){ notify("领域名称不超过 6 个字"); return; } try{ - await fetchDb("/domains", {method:"POST", headers:{"Content-Type":"application/json"}, body:JSON.stringify({name})}); - setDomains(prev=>[...new Set([...prev, name])]); + await fetchDb("/domains", {method:"POST", headers:{"Content-Type":"application/json"}, body:JSON.stringify({name:n})}); + await reloadDomains(); }catch(e:any){ notify("添加领域失败: "+e.message); } }; + const doAddDomain=async()=>{ + if(!newDomainName.trim()) return; + await addDomain(newDomainName); + setAddingDomain(false); setNewDomainName(""); + }; const uploadFile=async(file:File)=>{ if(!site) return; @@ -475,7 +484,22 @@ export default function Home(){ return
⬡
iStationiStation TeamStationBuilder⌄
设计方案wang.yu@advantech.com
iStation Team
-