diff --git a/apps/web/app/workspace/page.tsx b/apps/web/app/workspace/page.tsx index 4c0b7a3..4ed7ecd 100644 --- a/apps/web/app/workspace/page.tsx +++ b/apps/web/app/workspace/page.tsx @@ -63,7 +63,7 @@ export default function WorkspacePage() { // 我负责的所有未完成开发任务 const myDevTasks = useMemo(() => - devTasks.filter((t) => t.assigneeId === userName && t.status !== 'done'), + devTasks.filter((t) => t.assigneeId === userName && t.status !== 'submitted'), [devTasks, userName] ); diff --git a/apps/web/components/test-case/TestCaseTab.tsx b/apps/web/components/test-case/TestCaseTab.tsx index a11bd44..86da422 100644 --- a/apps/web/components/test-case/TestCaseTab.tsx +++ b/apps/web/components/test-case/TestCaseTab.tsx @@ -37,7 +37,7 @@ export function TestCaseTab({ versionId, requirementIds }: Props) { // 提测状态判断 const versionDevTasks = useMemo(() => devTasks.filter((t) => requirementIds.includes(t.requirementId)), [devTasks, requirementIds]); - const allSubmitted = versionDevTasks.length > 0 && versionDevTasks.every((t) => t.status === 'submitted' || t.status === 'done'); + const allSubmitted = versionDevTasks.length > 0 && versionDevTasks.every((t) => t.status === 'submitted'); const stats = calcTestProgress(versionCases); @@ -89,7 +89,7 @@ export function TestCaseTab({ versionId, requirementIds }: Props) { )} {versionDevTasks.length > 0 && !allSubmitted && (
- 开发进行中,尚未全部提测({versionDevTasks.filter((t) => t.status === 'submitted' || t.status === 'done').length}/{versionDevTasks.length}) + 开发进行中,尚未全部提测({versionDevTasks.filter((t) => t.status === 'submitted').length}/{versionDevTasks.length})
)} {/* 统计栏 */} diff --git a/apps/web/lib/dev-task.ts b/apps/web/lib/dev-task.ts index eabe5f7..3881f9a 100644 --- a/apps/web/lib/dev-task.ts +++ b/apps/web/lib/dev-task.ts @@ -1,6 +1,6 @@ import type { Priority } from './derive'; -export type DevTaskStatus = 'todo' | 'in_progress' | 'testing' | 'submitted' | 'done'; +export type DevTaskStatus = 'todo' | 'in_progress' | 'testing' | 'submitted'; export interface DevTask { id: string; @@ -33,32 +33,28 @@ export const DEV_TASK_STATUS_LABEL: Record = { todo: '待开发', in_progress: '开发中', testing: '自测', - submitted: '提测', - done: '已完成', + submitted: '已提测', }; export const DEV_TASK_STATUS_COLOR: Record = { todo: 'bg-zinc-100 text-zinc-600', in_progress: 'bg-blue-50 text-blue-600', testing: 'bg-purple-50 text-purple-600', - submitted: 'bg-orange-50 text-orange-600', - done: 'bg-emerald-50 text-emerald-600', + submitted: 'bg-emerald-50 text-emerald-600', }; export const STATUS_PROGRESS: Record = { todo: 0, in_progress: 50, testing: 80, - submitted: 90, - done: 100, + submitted: 100, }; export const ALLOWED_TRANSITIONS: Record = { todo: ['in_progress'], in_progress: ['testing'], testing: ['submitted', 'in_progress'], - submitted: ['done', 'in_progress'], - done: [], + submitted: [], }; export function canTransition(from: DevTaskStatus, to: DevTaskStatus): boolean { diff --git a/apps/web/lib/version-status.ts b/apps/web/lib/version-status.ts index 3c83897..3498f0a 100644 --- a/apps/web/lib/version-status.ts +++ b/apps/web/lib/version-status.ts @@ -79,8 +79,7 @@ export function calcVersionExecutionStatus(input: ExecutionInput): VersionExecut // fallback: 没有 DevTask 则停留 planning if (devTasks.length === 0) return 'planning'; - const allDevDone = devTasks.every((t) => t.status === 'done'); - const allDevSubmitted = devTasks.every((t) => t.status === 'submitted' || t.status === 'done'); + const allDevSubmitted = devTasks.every((t) => t.status === 'submitted'); // 判断是否可发布 if (testCases.length > 0) { @@ -98,8 +97,5 @@ export function calcVersionExecutionStatus(input: ExecutionInput): VersionExecut // 已提测 if (allDevSubmitted) return 'submitted'; - // 开发完成但未全部提测 - if (allDevDone) return 'submitted'; - return 'developing'; } diff --git a/apps/web/stores/useTestCaseStore.ts b/apps/web/stores/useTestCaseStore.ts index 266c05e..35fbf7c 100644 --- a/apps/web/stores/useTestCaseStore.ts +++ b/apps/web/stores/useTestCaseStore.ts @@ -83,26 +83,6 @@ export const useTestCaseStore = create((set, get) => ({ if (to === 'blocked' && extra?.blockReason) patch.blockReason = extra.blockReason; if (to === 'running') { patch.failReason = undefined; patch.blockReason = undefined; } get().updateTestCase(id, patch); - - // 副作用:当版本所有用例通过 + Bug全关闭 → DevTask 自动完成 - if (to === 'passed' && tc.versionId) { - setTimeout(() => { - try { - const { useDevTaskStore } = require('@/stores/useDevTaskStore'); - const { useBugStore } = require('@/stores/useBugStore'); - const allCases = get().testCases.filter((c) => c.versionId === tc.versionId); - const allPassed = allCases.every((c) => c.id === id ? true : c.status === 'passed'); - if (!allPassed) return; - const allBugs = useBugStore.getState().bugs.filter((b: any) => b.versionId === tc.versionId); - const allBugsClosed = allBugs.every((b: any) => b.status === 'closed' || b.status === 'rejected'); - if (!allBugsClosed) return; - const devStore = useDevTaskStore.getState(); - const versionTasks = devStore.tasks.filter((t: any) => t.status === 'submitted'); - versionTasks.forEach((t: any) => devStore.changeStatus(t.id, 'done')); - } catch {} - }, 0); - } - return { ok: true }; },