feat(audit): auto-select default rule sets and prompt templates

- Auto-select default rule set on dialog load, fallback to first item if no default exists
- Auto-select default prompt template on dialog load, fallback to first item if no default exists
- Remove empty option from rule set and prompt template selectors
- Update placeholder text from "默认规则" to "选择规则集" and "默认提示词" to "选择提示词模板"
- Add visual indicator "(默认)" badge to default items in dropdown lists
- Update label text from "提示词" to "提示词模板" for clarity
- Add ruleSets and promptTemplates to useEffect dependency array to maintain default selections on dialog reopen
- Improve UX by ensuring users always have a valid selection without manual intervention
This commit is contained in:
lintsinghua 2025-12-09 23:27:53 +08:00
parent 11107ea455
commit d84f4074f8
1 changed files with 25 additions and 10 deletions

View File

@ -146,6 +146,20 @@ export default function CreateTaskDialog({
]); ]);
setRuleSets(rulesRes.items); setRuleSets(rulesRes.items);
setPromptTemplates(promptsRes.items); setPromptTemplates(promptsRes.items);
// 自动选中默认规则集
const defaultRuleSet = rulesRes.items.find((r: AuditRuleSet) => r.is_default);
if (defaultRuleSet) {
setSelectedRuleSetId(defaultRuleSet.id);
} else if (rulesRes.items.length > 0) {
setSelectedRuleSetId(rulesRes.items[0].id);
}
// 自动选中默认提示词模板
const defaultPrompt = promptsRes.items.find((p: PromptTemplate) => p.is_default);
if (defaultPrompt) {
setSelectedPromptTemplateId(defaultPrompt.id);
} else if (promptsRes.items.length > 0) {
setSelectedPromptTemplateId(promptsRes.items[0].id);
}
} catch (error) { } catch (error) {
console.error("加载规则集和提示词失败:", error); console.error("加载规则集和提示词失败:", error);
} }
@ -161,11 +175,14 @@ export default function CreateTaskDialog({
} }
setSearchTerm(""); setSearchTerm("");
setShowAdvanced(false); setShowAdvanced(false);
setSelectedRuleSetId(""); // 重新加载时保持默认选中
setSelectedPromptTemplateId(""); const defaultRuleSet = ruleSets.find(r => r.is_default);
setSelectedRuleSetId(defaultRuleSet?.id || ruleSets[0]?.id || "");
const defaultPrompt = promptTemplates.find(p => p.is_default);
setSelectedPromptTemplateId(defaultPrompt?.id || promptTemplates[0]?.id || "");
zipState.reset(); zipState.reset();
} }
}, [open, preselectedProjectId]); }, [open, preselectedProjectId, ruleSets, promptTemplates]);
@ -380,29 +397,27 @@ export default function CreateTaskDialog({
<label className="block text-xs font-mono font-bold text-gray-600 mb-1 uppercase"></label> <label className="block text-xs font-mono font-bold text-gray-600 mb-1 uppercase"></label>
<Select value={selectedRuleSetId} onValueChange={setSelectedRuleSetId}> <Select value={selectedRuleSetId} onValueChange={setSelectedRuleSetId}>
<SelectTrigger className="h-9 rounded-none border-2 border-black font-mono text-xs focus:ring-0"> <SelectTrigger className="h-9 rounded-none border-2 border-black font-mono text-xs focus:ring-0">
<SelectValue placeholder="默认规则" /> <SelectValue placeholder="选择规则集" />
</SelectTrigger> </SelectTrigger>
<SelectContent className="rounded-none border-2 border-black shadow-[4px_4px_0px_0px_rgba(0,0,0,1)]"> <SelectContent className="rounded-none border-2 border-black shadow-[4px_4px_0px_0px_rgba(0,0,0,1)]">
<SelectItem value="" className="font-mono text-xs"></SelectItem>
{ruleSets.map((rs) => ( {ruleSets.map((rs) => (
<SelectItem key={rs.id} value={rs.id} className="font-mono text-xs"> <SelectItem key={rs.id} value={rs.id} className="font-mono text-xs">
{rs.name} ({rs.enabled_rules_count}) {rs.name} {rs.is_default && '(默认)'} ({rs.enabled_rules_count})
</SelectItem> </SelectItem>
))} ))}
</SelectContent> </SelectContent>
</Select> </Select>
</div> </div>
<div> <div>
<label className="block text-xs font-mono font-bold text-gray-600 mb-1 uppercase"></label> <label className="block text-xs font-mono font-bold text-gray-600 mb-1 uppercase"></label>
<Select value={selectedPromptTemplateId} onValueChange={setSelectedPromptTemplateId}> <Select value={selectedPromptTemplateId} onValueChange={setSelectedPromptTemplateId}>
<SelectTrigger className="h-9 rounded-none border-2 border-black font-mono text-xs focus:ring-0"> <SelectTrigger className="h-9 rounded-none border-2 border-black font-mono text-xs focus:ring-0">
<SelectValue placeholder="默认提示词" /> <SelectValue placeholder="选择提示词模板" />
</SelectTrigger> </SelectTrigger>
<SelectContent className="rounded-none border-2 border-black shadow-[4px_4px_0px_0px_rgba(0,0,0,1)]"> <SelectContent className="rounded-none border-2 border-black shadow-[4px_4px_0px_0px_rgba(0,0,0,1)]">
<SelectItem value="" className="font-mono text-xs"></SelectItem>
{promptTemplates.map((pt) => ( {promptTemplates.map((pt) => (
<SelectItem key={pt.id} value={pt.id} className="font-mono text-xs"> <SelectItem key={pt.id} value={pt.id} className="font-mono text-xs">
{pt.name} {pt.name} {pt.is_default && '(默认)'}
</SelectItem> </SelectItem>
))} ))}
</SelectContent> </SelectContent>