From: root Date: Mon, 14 Sep 2026 03:24:07 +0000 (+0800) Subject: 站点资产设置-设备类型改为领域内设备模板下拉,新增查看模板眼睛图标,优化列宽 X-Git-Url: http://acesimba.cloud/gitweb/?a=commitdiff_plain;h=6ff3a3062f27aa00c64a34649e408d2382b90d29;p=StationBuilder.git 站点资产设置-设备类型改为领域内设备模板下拉,新增查看模板眼睛图标,优化列宽 --- diff --git a/app/globals.css b/app/globals.css index 5bd8a7e..af580ad 100644 --- a/app/globals.css +++ b/app/globals.css @@ -86,11 +86,14 @@ .data-table.editable{table-layout:fixed} .data-table.editable th:nth-child(1){width:40%} .data-table.editable th:nth-child(2){width:92px} -.data-table.editable th:nth-child(3){width:34%} -.data-table.editable th:nth-child(4){width:44px} +.data-table.editable th:nth-child(3){width:56px} +.data-table.editable th:nth-child(4){width:auto} +.data-table.editable th:nth-child(5){width:48px} .data-table.editable input,.data-table.editable select,.data-table.editable textarea{min-width:0;width:100%} .data-table.editable .trash{border:0;background:transparent;color:var(--red);font-size:15px;cursor:pointer;line-height:1} .data-table.editable .trash:hover{color:#d63723} +.data-table.editable .asset-eye-btn{border:0;background:transparent;color:var(--blue);font-size:18px;cursor:pointer;line-height:1;padding:0;display:inline-flex;align-items:center} +.data-table.editable .asset-eye-btn.disabled{color:#c4c9cc;cursor:default} /* ===== 领域方案库:列表筛选栏 + 可排序列头 ===== */ .filter-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px} diff --git a/app/page.tsx b/app/page.tsx index 07c67e2..e9b08ed 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -694,8 +694,8 @@ export default function Home(){ {page==="toolSettings"&&} {page==="domainSettings"&&} {(page==="basic"||(page==="siteEdit"&&siteEditSection==="basic"))&&} - {page==="assets"&&} - {page==="siteEdit"&&siteEditSection==="assets"&&} + {page==="assets"&&} + {page==="siteEdit"&&siteEditSection==="assets"&&} {(page==="pageConfig"||(page==="siteEdit"&&siteEditSection==="pageConfig"))&&
@@ -984,11 +984,14 @@ function Basic({site,domains,onChange,onAddDomain,onUpload,saving,notify,onViewC ; } -function Assets({site,onChange,saving,notify,onViewCompletePrompt,mode,onModeChange}:{site:SiteDetail|null;onChange:(assets:Asset[])=>void;saving:boolean;notify:(m:string)=>void;onViewCompletePrompt:()=>void;mode:"quick"|"manual";onModeChange:(mode:"quick"|"manual")=>void}){ +function Assets({site,onChange,saving,notify,onViewCompletePrompt,mode,onModeChange,go}:{site:SiteDetail|null;onChange:(assets:Asset[])=>void;saving:boolean;notify:(m:string)=>void;onViewCompletePrompt:()=>void;mode:"quick"|"manual";onModeChange:(mode:"quick"|"manual")=>void;go:(p:PageKey)=>void}){ const [completing,setCompleting]=useState(false); const [completeLog,setCompleteLog]=useState(""); const completeConsoleRef=useRef(null); + const [deviceTemplates,setDeviceTemplates]=useState([]); useEffect(()=>{ if(completeConsoleRef.current) completeConsoleRef.current.scrollTop=completeConsoleRef.current.scrollHeight; },[completeLog]); + // 加载设备模板(按站点领域过滤) + useEffect(()=>{ (async()=>{ try{ const all=await fetchDb("/device-templates") as any[]; setDeviceTemplates(all.filter((t:any)=>{ try{ return JSON.parse(t.domain_names||"[]").includes(site?.domain); }catch{ return false; } })); }catch(e:any){ /* 静默失败,下拉框为空 */ } })(); },[site?.domain]); const appendAssets=(items:Array<{type:string;count:number;rule:string}>)=>{ const base = site?.assets || []; const next = [...base, ...items.map((it,i)=>({type:it.type, count:Number(it.count)||0, rule:it.rule||"", sort_order: base.length+i}))]; @@ -1039,13 +1042,14 @@ function Assets({site,onChange,saving,notify,onViewCompletePrompt,mode,onModeCha
{[[rows.length,"设备类型","类"],[total,"设备实例","个"],[Math.max(2, rows.filter(r=>r.type).length+1),"资产层级","层"]].map(x=>
{x[1]}{x[0]}{x[2]}
)}{saving&&
保存保存中…
}
+ 添加设备类型}> - - {rows.map((row,i)=> - + + {rows.map((row,i)=>{ const matchedTemplate = deviceTemplates.find(t=>t.name===row.type); return + + - )} + })}
设备类型 *数量 *命名规则操作
update(i,{type:e.target.value})}/>
设备类型 *数量 *命名规则操作
{deviceTemplates.length > 0 ? : update(i,{type:e.target.value})}/>} update(i,{count:Number(e.target.value)})}/> update(i,{rule:e.target.value})}/>
@@ -2656,6 +2660,8 @@ function CompanyDeviceTemplates({notify,onViewCpPrompt}:{notify:(m:string)=>void const {confirm,el:confirmEl}=useConfirm(); const load=async()=>{ try{ setList(await fetchDb("/device-templates") as any[]); }catch(e:any){ notify("加载失败:"+e.message); }finally{ setLoading(false); } }; useEffect(()=>{ load(); },[]); + // 支持从外部通过 URL 参数 openTemplate 自动打开指定模板编辑页 + useEffect(()=>{ const p=new URLSearchParams(window.location.search); const tid=p.get("openTemplate"); if(tid){ setOpenId(Number(tid)); window.history.replaceState({}, "", "?page=deviceTemplates"); } },[]); const pointCount=(row:any)=>(row.collection_points||[]).length; const domainNames=(row:any)=>{ try{ return JSON.parse(row.domain_names||"[]") as string[]; }catch{ return []; } }; const remove=async(row:any)=>{ if(!(await confirm(`确定删除设备模板「${row.name}」?`))) return; try{ await fetchDb(`/device-templates/${row.id}`,{method:"DELETE"}); setPreview(null); await load(); notify("设备模板已删除"); }catch(e:any){ notify("删除失败:"+e.message); } };