Merge branch 'develop' into fix/user-soft-delete-orphan-references
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 1m12s
Pull Request — Quality gate / Frontend (build) (pull_request) Successful in 1m23s

This commit is contained in:
2026-06-27 09:32:17 +00:00
7 changed files with 181 additions and 3 deletions
@@ -32,6 +32,13 @@
empty-option-label="Aucun client"
group-class="w-full"
/>
<MalioSelect
v-if="!isEditing"
v-model="form.workflowId"
:options="workflowOptions"
label="Workflow"
group-class="w-full"
/>
<div class="mt-4">
<ColorPicker v-model="form.color" />
</div>
@@ -124,10 +131,12 @@
<script setup lang="ts">
import type { Project, ProjectWrite } from '~/modules/project-management/services/dto/project'
import type { Workflow } from '~/modules/project-management/services/dto/workflow'
import type { Client } from '~/modules/directory/services/dto/client'
import type { GiteaRepository } from '~/modules/integration/services/dto/gitea'
import type { BookStackShelf } from '~/modules/integration/services/dto/bookstack'
import { useProjectService } from '~/modules/project-management/services/projects'
import { useWorkflowService } from '~/modules/project-management/services/workflows'
import { useGiteaService } from '~/modules/integration/services/gitea'
import { useBookStackService } from '~/modules/integration/services/bookstack'
@@ -174,12 +183,24 @@ const bookstackShelfOptions = computed(() =>
bookstackShelves.value.map(s => ({ label: s.name, value: s.id }))
)
const { getAll: getAllWorkflows } = useWorkflowService()
const workflows = ref<Workflow[]>([])
const workflowOptions = computed(() =>
workflows.value.map(w => ({ label: w.name, value: w.id }))
)
function defaultWorkflowId(): number | null {
return (workflows.value.find(w => w.isDefault) ?? workflows.value[0])?.id ?? null
}
const form = reactive({
code: '',
name: '',
description: '',
color: '#222783',
clientId: null as number | null,
workflowId: null as number | null,
giteaRepoFullName: null as string | null,
bookstackShelfId: null as number | null,
})
@@ -222,6 +243,7 @@ watch(() => props.modelValue, (open) => {
form.description = ''
form.color = '#222783'
form.clientId = null
form.workflowId = defaultWorkflowId()
form.giteaRepoFullName = null
form.bookstackShelfId = null
}
@@ -269,6 +291,9 @@ async function handleSubmit() {
await update(props.project.id, payload)
} else {
payload.code = form.code
if (form.workflowId) {
payload.workflow = `/api/workflows/${form.workflowId}`
}
await create(payload)
}
@@ -308,6 +333,15 @@ async function handleArchiveToggle() {
}
onMounted(async () => {
try {
workflows.value = await getAllWorkflows()
// Si le drawer est déjà ouvert en création, pré-remplir une fois les workflows chargés.
if (props.modelValue && !props.project && !form.workflowId) {
form.workflowId = defaultWorkflowId()
}
} catch {
// Workflows indisponibles, ignore (le serveur assignera le défaut)
}
try {
giteaRepos.value = await listRepositories()
} catch {