]> acesimba.cloud Git - StationBuilder.git/commitdiff
fix: 反馈重新生成结束后按钮卡在「重新生成中…」
authorwang.yu <wang.yu@advantech.com>
Mon, 17 Aug 2026 23:47:50 +0000 (07:47 +0800)
committerwang.yu <wang.yu@advantech.com>
Mon, 17 Aug 2026 23:47:50 +0000 (07:47 +0800)
- refineCube 流结束后立即复位 refining 并关闭弹窗,站点刷新改为后台异步(不再阻塞按钮复位)
- 新增 >10 分钟看门狗:流异常挂起时强制复位并关闭窗口,避免界面卡死
- 同步更新 design-doc 第 8 节反馈说明

app/page.tsx
public/design-doc.html

index 3e9dfd44f763130dff59711481dc4c94e00f5207..bbad49ec5b97e92e3a844c66f5e233865450cfaf 100644 (file)
@@ -212,6 +212,13 @@ export default function Home(){
     if(!feedback.trim()){ notify("请填写修改意见"); return; }
     setRefining(true);
     setRefineLog("");
+    // 看门狗:极端情况下(如模型进程异常挂起)流一直不结束,超时后强制复位并关闭窗口,避免按钮卡在「重新生成中…」
+    const watchdog = setTimeout(() => {
+      setRefining(false);
+      setModal("");
+      setFeedbackCube(null);
+      notify("重新生成超过预期时长(>10 分钟),已自动结束并关闭窗口,可重新打开再试");
+    }, 600000);
     try{
       const res = await fetch(`/api/db/sites/${site.id}/cubes/${cube.id}/refine`, {
         method:"POST",
@@ -233,13 +240,17 @@ export default function Home(){
         }
       }
       notify(`已根据修改意见重新生成「${cube.name}」`);
-      const refreshed:SiteDetail = await fetchDb(`/sites/${site.id}`);
-      setSite(refreshed);
-      setSiteId(site.id);
+      // 流结束后立即复位 UI 并关闭窗口,避免等待站点刷新接口期间按钮持续显示「重新生成中…」
+      setRefining(false);
       setModal("");
       setFeedbackCube(null);
+      try{
+        const refreshed:SiteDetail = await fetchDb(`/sites/${site.id}`);
+        setSite(refreshed);
+        setSiteId(site.id);
+      }catch{}
     }catch(e:any){ notify("重新生成失败:"+(e?.message||e)); }
-    finally{ setRefining(false); }
+    finally{ clearTimeout(watchdog); setRefining(false); }
   };
 
   useEffect(()=>{ if(aiEndRef.current) aiEndRef.current.scrollIntoView({block:"end"}); }, [aiMessages, aiOpen]);
index 555b9debd3aace6f2f4221b08291d384f3d5176d..d8a5c0c77e9029ede795b5f8dc11ca7324b1ddb2 100644 (file)
   <h2>8. 模态框(Modal)</h2>
   <table>
     <tr><th>类型</th><th>功能</th><th>交互效果</th></tr>
-    <tr><td>æ\8f\90å\87ºä¿®æ\94¹æ\84\8fè§\81ï¼\88feedbackï¼\89</td><td>对å\8d\95页æ\8f\90å\8f\8dé¦\88å¹¶é\87\8dæ\96°ç\94\9fæ\88\90</td><td>å¼¹çª\97é¡¶é\83¨å\8d³ã\80\8cä¿®æ\94¹æ\84\8fè§\81ã\80\8dè¾\93å\85¥æ¡\86ï¼\88è\87ªå\8a¨è\81\9aç\84¦ï¼\89ï¼\8cä¸\8bæ\96¹å±\95示影å\93\8dè\8c\83å\9b´ï¼\88ä»\85å½\93å\89\8d页 / æ¨¡æ\8b\9fæ\95°æ\8d® / ä¸\8då\8f\97å½±å\93\8d项ï¼\89ï¼\9bæ\8f\90交å\90\8eå¼¹çª\97å\86\85å\87ºç\8e°é»\91åº\95ç\99½å­\97ç\9a\84 <b>AI ç\94\9fæ\88\90å·¥ä½\9cæµ\81</b> ç»\88端ï¼\8cå®\9eæ\97¶æ»\9aå\8a¨ AI/Skill ç\94\9fæ\88\90è¿\9b度ï¼\8cå®\8cæ\88\90å\90\8eè\87ªå\8a¨å\88·æ\96°å¹¶å\85³é\97­</td></tr>
+    <tr><td>æ\8f\90å\87ºä¿®æ\94¹æ\84\8fè§\81ï¼\88feedbackï¼\89</td><td>对å\8d\95页æ\8f\90å\8f\8dé¦\88å¹¶é\87\8dæ\96°ç\94\9fæ\88\90</td><td>å¼¹çª\97é¡¶é\83¨å\8d³ã\80\8cä¿®æ\94¹æ\84\8fè§\81ã\80\8dè¾\93å\85¥æ¡\86ï¼\88è\87ªå\8a¨è\81\9aç\84¦ï¼\89ï¼\8cä¸\8bæ\96¹å±\95示影å\93\8dè\8c\83å\9b´ï¼\88ä»\85å½\93å\89\8d页 / æ¨¡æ\8b\9fæ\95°æ\8d® / ä¸\8då\8f\97å½±å\93\8d项ï¼\89ï¼\9bæ\8f\90交å\90\8eå¼¹çª\97å\86\85å\87ºç\8e°é»\91åº\95ç\99½å­\97ç\9a\84 <b>AI ç\94\9fæ\88\90å·¥ä½\9cæµ\81</b> ç»\88端ï¼\8cå®\9eæ\97¶æ»\9aå\8a¨ AI/Skill ç\94\9fæ\88\90è¿\9b度ï¼\9bæµ\81ç»\93æ\9d\9få\90\8eç«\8bå\8d³å¤\8dä½\8dã\80\8cé\87\8dæ\96°ç\94\9fæ\88\90中â\80¦ã\80\8dæ\8c\89é\92®å¹¶è\87ªå\8a¨å\88·æ\96°ç«\99ç\82¹ã\80\81å\85³é\97­å¼¹çª\97ï¼\8c并设æ\9c\89 >10 å\88\86é\92\9fè¶\85æ\97¶ç\9c\8bé\97¨ç\8b\97å\85\9cåº\95ï¼\8cé\81¿å\85\8dç\95\8cé\9d¢å\8d¡å\9c¨ã\80\8cç\94\9fæ\88\90中ã\80\8d</td></tr>
     <tr><td>下载站点交付物(download)</td><td>选择下载项</td><td>列表含 Cube JSON / 菜单配置 / 报告;Asset Excel 占位 <span class="todo">尚未实现</span></td></tr>
     <tr><td>版本历史(history)</td><td>查看版本</td><td>仅展示 V1 当前版本 <span class="todo">真实版本管理尚未实现</span></td></tr>
     <tr><td>生成提示词(prompt)</td><td>查看/复制组合提示词</td><td>展示发送给模型的完整提示词,可复制到剪贴板</td></tr>