feat: complete task board workflow gates
This commit is contained in:
@@ -17,7 +17,8 @@ import { Plus, X, CalendarDays, Clock3, ExternalLink, Link2, ListChecks, Save, A
|
||||
import { useRouter } from 'vue-router'
|
||||
import { useAuthStore } from '../stores/auth'
|
||||
import { useTaskStore } from '../stores/tasks'
|
||||
import { useLiveSyncStore } from '../stores/liveSync'
|
||||
import { useLiveSyncStore } from '../stores/live-sync'
|
||||
import { TASK_AGENT_LABELS, TASK_AGENT_OPTIONS } from '../constants/agentPool'
|
||||
|
||||
type BoardTask = ReturnType<typeof flattenBoard>[number]
|
||||
|
||||
@@ -222,16 +223,7 @@ const liveModeClass = computed(() => `live-pill-${liveSyncStore.connectionHealth
|
||||
|
||||
function expectedFromLabel(expected: string | null | undefined): string {
|
||||
if (!expected) return ''
|
||||
const map: Record<string, string> = {
|
||||
'bao': '👤 Bao',
|
||||
'iris': '🤖 Iris',
|
||||
'programmer': '🛠 Programmer',
|
||||
'reviewer': '🔎 Reviewer',
|
||||
'architekt': '🏛 Architekt',
|
||||
'researcher': '🔬 Researcher',
|
||||
'executor': '⚡ Executor',
|
||||
}
|
||||
return map[expected.toLowerCase()] ?? expected
|
||||
return TASK_AGENT_LABELS[expected.toLowerCase()] ?? expected
|
||||
}
|
||||
|
||||
function hoursSince(dateStr: string): number {
|
||||
@@ -827,13 +819,13 @@ onUnmounted(() => {
|
||||
<div class="field">
|
||||
<label for="task-assignee">Zugewiesen an</label>
|
||||
<select id="task-assignee" v-model="formAssignedTo" class="field-input field-select">
|
||||
<option value="bao">👤 Bao</option>
|
||||
<option value="iris">🤖 Iris</option>
|
||||
<option value="programmer">🛠 Programmer</option>
|
||||
<option value="reviewer">🔎 Reviewer</option>
|
||||
<option value="architekt">🏛 Architekt</option>
|
||||
<option value="researcher">🔬 Researcher</option>
|
||||
<option value="executor">⚡ Executor</option>
|
||||
<option
|
||||
v-for="option in TASK_AGENT_OPTIONS.filter(entry => entry.id)"
|
||||
:key="option.id"
|
||||
:value="option.id"
|
||||
>
|
||||
{{ option.label }}
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
@@ -951,14 +943,9 @@ onUnmounted(() => {
|
||||
<label class="sidebar-field">
|
||||
<span>Zuständig</span>
|
||||
<select v-model="detailForm.assignedTo" class="field-input field-select slim">
|
||||
<option value="">Nicht zugewiesen</option>
|
||||
<option value="bao">👤 Bao</option>
|
||||
<option value="iris">🤖 Iris</option>
|
||||
<option value="programmer">🛠 Programmer</option>
|
||||
<option value="reviewer">🔎 Reviewer</option>
|
||||
<option value="architekt">🏛 Architekt</option>
|
||||
<option value="researcher">🔬 Researcher</option>
|
||||
<option value="executor">⚡ Executor</option>
|
||||
<option v-for="option in TASK_AGENT_OPTIONS" :key="option.id || 'unassigned'" :value="option.id">
|
||||
{{ option.label }}
|
||||
</option>
|
||||
</select>
|
||||
</label>
|
||||
<label class="sidebar-field">
|
||||
|
||||
Reference in New Issue
Block a user