import React, { useState } from 'react'; import { Workflow, Lock, CheckCircle2, AlertCircle } from 'lucide-react'; import { activateWorkflow, getProject } from '../../api/projectWorkflow'; interface ProjectWorkflowSwitcherProps { projectId: number; activeWorkflowKey: string; workflowVersion: number; isCreator: boolean; onWorkflowChanged?: (newKey: string, newVersion: number) => void; } const WORKFLOW_OPTIONS = [ { key: 'main', label: '主协同流程', icon: '⚡' }, { key: 'product_manager', label: '智能产品经理', icon: '📋' }, { key: 'test_manager', label: '智能测试经理', icon: '🧪' }, ]; export const ProjectWorkflowSwitcher: React.FC = ({ projectId, activeWorkflowKey, workflowVersion, isCreator, onWorkflowChanged, }) => { const [switching, setSwitching] = useState(false); const [errorMsg, setErrorMsg] = useState(null); const handleSelect = async (targetKey: string) => { if (targetKey === activeWorkflowKey) return; if (!isCreator) { setErrorMsg('权限不足:仅项目创建人可切换激活工作流'); setTimeout(() => setErrorMsg(null), 3000); return; } setSwitching(true); setErrorMsg(null); try { let res; try { res = await activateWorkflow(projectId, { workflow_key: targetKey, expected_version: workflowVersion, reason: '前端控制台用户切换工作流', }); } catch (firstErr: any) { // 若遇到并发版本落后或冲突,自动拉取数据库最新项目版本重试一次 const fresh = await getProject(projectId); res = await activateWorkflow(projectId, { workflow_key: targetKey, expected_version: fresh.workflow_selection_version, reason: '前端版本冲突自愈重试', }); } if (onWorkflowChanged && res) { onWorkflowChanged(res.active_workflow_key, res.version); } } catch (err: any) { setErrorMsg(err.message || '切换工作流失败'); setTimeout(() => setErrorMsg(null), 4000); } finally { setSwitching(false); } }; return (
工作流: {WORKFLOW_OPTIONS.map((wf) => { const isActive = wf.key === activeWorkflowKey; return ( ); })}
{errorMsg && (
{errorMsg}
)}
); };