Просмотр исходного кода

修复登录退出时提示框

pm 3 месяцев назад
Родитель
Сommit
51eb4383e1
3 измененных файлов с 17 добавлено и 6 удалено
  1. 1 1
      src/Dashboard.tsx
  2. 15 4
      src/components/ProcessDesigner.tsx
  3. 1 1
      src/views/Login.tsx

+ 1 - 1
src/Dashboard.tsx

@@ -129,7 +129,7 @@ export default function Dashboard() {
       sessionStorage.removeItem('lastActiveMenu');
       sessionStorage.removeItem('navigateToMenu');
       sessionStorage.removeItem('cabinetDetailSource');
-      toast.success(t('common.success'));
+      // 退出登录不再弹出全局成功提示(避免频繁/停留过久影响体验)
       navigate('/login');
     } catch (error: any) {
       // 即使API失败也清除本地数据并跳转

+ 15 - 4
src/components/ProcessDesigner.tsx

@@ -2213,6 +2213,17 @@ export default function ProcessDesigner() {
     event.dataTransfer.dropEffect = 'move';
   }, []);
 
+  /** 是否为真正会影响设计内容的变更(排除纯选中态/尺寸测量等 UI 变更) */
+  const isMeaningfulRfChange = useCallback((changes: Array<{ type?: string; dragging?: boolean }>) => {
+    return changes.some((ch) => {
+      // ReactFlow 的 select/dimensions 多为 UI 变化,不应标记“未保存”
+      if (ch.type === 'select' || ch.type === 'dimensions') return false;
+      // position 只有在拖拽时才视为修改(避免点击选中触发的非拖拽 position 事件)
+      if (ch.type === 'position') return Boolean(ch.dragging);
+      return true;
+    });
+  }, []);
+
   // 拖拽节点时的水平线磁吸:与画布上其他节点 Y 接近时对齐到同一水平线;节点变更时标记为已修改
   const onNodesChange = useCallback(
     (changes: NodeChange[]) => {
@@ -2230,23 +2241,23 @@ export default function ProcessDesigner() {
         }
         return ch;
       });
-      if (!isLoadingFromServerOrRestoreRef.current) {
+      if (!isLoadingFromServerOrRestoreRef.current && isMeaningfulRfChange(modified as any)) {
         setHasUnsavedChanges(true);
       }
       onNodesChangeBase(modified);
     },
-    [nodes, onNodesChangeBase]
+    [nodes, onNodesChangeBase, isMeaningfulRfChange]
   );
 
   // 边变更时标记为已修改(仅用户操作会触发 onEdgesChange);加载/恢复阶段不标记
   const onEdgesChangeWithDirty = useCallback(
     (changes: Parameters<typeof onEdgesChange>[0]) => {
-      if (!isLoadingFromServerOrRestoreRef.current) {
+      if (!isLoadingFromServerOrRestoreRef.current && isMeaningfulRfChange(changes as any)) {
         setHasUnsavedChanges(true);
       }
       onEdgesChange(changes);
     },
-    [onEdgesChange]
+    [onEdgesChange, isMeaningfulRfChange]
   );
 
   // 更新节点配置

+ 1 - 1
src/views/Login.tsx

@@ -390,7 +390,7 @@ export default function Login() {
       // 延迟一下再跳转,让用户看到加载提示
       setTimeout(() => {
         toast.dismiss('loading');
-        toast.success(t('common.success') || '登录成功');
+        // 登录成功不再弹出全局成功提示(避免频繁/停留过久影响体验)
 
         sessionStorage.removeItem('lastActiveMenu');
         sessionStorage.removeItem('cabinetDetailSource');