fix(ai): 收紧AI任务类型入库规则
This commit is contained in:
@@ -8,7 +8,7 @@ import { useDevTaskStore } from '@/stores/useDevTaskStore';
|
||||
import { useTestCaseStore } from '@/stores/useTestCaseStore';
|
||||
import { useTaskCategoryStore } from '@/stores/useTaskCategoryStore';
|
||||
import { useAuthStore } from '@/stores/useAuthStore';
|
||||
import { findCategoryByCode, type CategoryGroup } from '@/lib/task-category';
|
||||
import { findCategoryByCode, resolveAiTaskCategoryByName, type CategoryGroup } from '@/lib/task-category';
|
||||
import { clampDevAiEstimateHours, clampTestCaseAiEstimateHours } from '@/lib/ai-estimation-policy';
|
||||
import { resolveDecomposeDraftRequirementFields } from '@/lib/ai-decompose-adoption';
|
||||
import { formatReportRequirementLabel } from '@/lib/ai-decompose-report';
|
||||
@@ -102,6 +102,15 @@ export function DecomposeReportModal({
|
||||
return fallbackGroup === 'testing' ? '功能测试' : '开发任务';
|
||||
};
|
||||
|
||||
const resolveDraftCategoryName = (
|
||||
draft: AgentDevTaskDraft | AgentTestCaseDraft,
|
||||
fallbackGroup: Extract<CategoryGroup, 'development' | 'testing'>,
|
||||
) =>
|
||||
resolveAiTaskCategoryByName(categories, resolveDraftTaskTypeName(draft, fallbackGroup), fallbackGroup, {
|
||||
allowCreate: fallbackGroup !== 'testing',
|
||||
fallbackCode: draft.categoryCode,
|
||||
}).category.name;
|
||||
|
||||
const handleAdopt = () => {
|
||||
if (submitting) return;
|
||||
setSubmitting(true);
|
||||
@@ -124,7 +133,7 @@ export function DecomposeReportModal({
|
||||
const refs = normalizeRefs(draft.references);
|
||||
const requirementFields = resolveDecomposeDraftRequirementFields({ ...draft, references: refs }, requirements);
|
||||
const taskTypeName = resolveDraftTaskTypeName(draft, 'development');
|
||||
const categoryId = ensureCategory(taskTypeName, 'development').id;
|
||||
const categoryId = ensureCategory(taskTypeName, 'development', { fallbackCode: draft.categoryCode }).id;
|
||||
const aiEstimateHours = clampDevAiEstimateHours(draft.categoryCode, draft.aiEstimateHours);
|
||||
const recommendedAssignee = resolveRecommendedAssignee(draft, version.members ?? []);
|
||||
|
||||
@@ -166,7 +175,10 @@ export function DecomposeReportModal({
|
||||
const refs = normalizeRefs(draft.references);
|
||||
const requirementFields = resolveDecomposeDraftRequirementFields({ ...draft, references: refs }, requirements);
|
||||
const taskTypeName = resolveDraftTaskTypeName(draft, 'testing');
|
||||
const categoryId = ensureCategory(taskTypeName, 'testing').id;
|
||||
const categoryId = ensureCategory(taskTypeName, 'testing', {
|
||||
allowCreate: false,
|
||||
fallbackCode: draft.categoryCode,
|
||||
}).id;
|
||||
const aiEstimateHours = clampTestCaseAiEstimateHours(draft.categoryCode, draft.aiEstimateHours);
|
||||
const recommendedAssignee = resolveRecommendedAssignee(draft, version.members ?? []);
|
||||
|
||||
@@ -351,7 +363,7 @@ export function DecomposeReportModal({
|
||||
<div className="flex items-center gap-2 flex-wrap">
|
||||
<span className="text-[13px] font-medium text-[var(--ink)]">{d.title}</span>
|
||||
<span className="text-[10px] px-1.5 py-0.5 rounded bg-[var(--bg-subtle)] text-[var(--ink-soft)]">
|
||||
{resolveDraftTaskTypeName(d, 'development')}
|
||||
{resolveDraftCategoryName(d, 'development')}
|
||||
</span>
|
||||
<span className="text-[10px] px-1.5 py-0.5 rounded bg-zinc-100 text-zinc-600">
|
||||
{d.priority}
|
||||
@@ -422,7 +434,7 @@ export function DecomposeReportModal({
|
||||
<div className="flex items-center gap-2 flex-wrap">
|
||||
<span className="text-[13px] font-medium text-[var(--ink)]">{d.title}</span>
|
||||
<span className="text-[10px] px-1.5 py-0.5 rounded bg-[var(--bg-subtle)] text-[var(--ink-soft)]">
|
||||
{resolveDraftTaskTypeName(d, 'testing')}
|
||||
{resolveDraftCategoryName(d, 'testing')}
|
||||
</span>
|
||||
<span className="text-[10px] px-1.5 py-0.5 rounded bg-zinc-100 text-zinc-600">
|
||||
{d.priority}
|
||||
|
||||
Reference in New Issue
Block a user