From: wang.yu Date: Wed, 19 Aug 2026 06:21:34 +0000 (+0800) Subject: 领域方案库:修复创建失败与设备模版选择抖动 X-Git-Url: http://acesimba.cloud/gitweb/?a=commitdiff_plain;h=370b32d15f9e36227371df8da0fac975dfac12fa;p=StationBuilder.git 领域方案库:修复创建失败与设备模版选择抖动 - CreateTemplate: domain_id 在 domains 异步加载后自动默认到首个领域, 并加兜底校验,避免提交 domain_id=0 被后端拒(创建失败/列表不显示) - DomainDetail.load 增加 silent 模式;DeviceTemplatePicker 勾选后静默刷新, 不再触发全屏「加载中」导致的页面抖动 --- diff --git a/app/page.tsx b/app/page.tsx index a5b25c1..fdf6637 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1076,7 +1076,8 @@ function CreateTemplate({doms,notify,onCreated}:{doms:any[];notify:(m:string)=>v const [domain_id,setDomainId]=useState(doms[0]?.id||0); const [name,setName]=useState(""); const [description,setDesc]=useState(""); const [status,setStatus]=useState("available"); const [version,setVersion]=useState("1.0"); const [creator,setCreator]=useState(CURRENT_USER_EMAIL); - const save=async()=>{ try{ const r:any=await fetchDb("/domain-templates",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({domain_id,name,description,status,version,creator})}); notify("已创建"); onCreated(r.id); }catch(e:any){ notify("创建失败:"+e.message); } }; + useEffect(()=>{ if(doms.length && !domain_id) setDomainId(doms[0].id); },[doms]); + const save=async()=>{ if(!domain_id){ notify("请选择所属领域"); return; } try{ const r:any=await fetchDb("/domain-templates",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({domain_id,name,description,status,version,creator})}); notify("已创建"); onCreated(r.id); }catch(e:any){ notify("创建失败:"+e.message); } }; return
@@ -1248,7 +1249,7 @@ function DomainDetail({id,go,notify,onBack,onCreated}:{id:number|null;go:(p:Page const [loading,setLoading]=useState(false); const [m,setM]=useState(null); const loadDoms=async()=>{ try{ setDoms(await fetchDb("/domains") as any); }catch{} }; - const load=async()=>{ if(id==null){ setT(null); return; } setLoading(true); try{ setT(await fetchDb(`/domain-templates/${id}`) as any); }catch(e:any){ notify("加载失败:"+e.message); } finally{ setLoading(false); } }; + const load=async(silent=false)=>{ if(id==null){ setT(null); return; } if(!silent) setLoading(true); try{ setT(await fetchDb(`/domain-templates/${id}`) as any); }catch(e:any){ notify("加载失败:"+e.message); } finally{ if(!silent) setLoading(false); } }; useEffect(()=>{ loadDoms(); load(); },[id]); useEffect(()=>{ if(t) setM({domain_id:t.domain_id,name:t.name,description:t.description||"",status:t.status,version:t.version,creator:t.creator||""}); },[t?.id]); if(id==null) return ; @@ -1272,7 +1273,7 @@ function DomainDetail({id,go,notify,onBack,onCreated}:{id:number|null;go:(p:Page
- d.id)} notify={notify} onChange={load}/> + d.id)} notify={notify} onChange={()=>load(true)}/>
{t.pages.map((p:any)=>)}