[#354] modification front page admin utilisateur (!39)
Some checks failed
Auto Tag Develop / tag (push) Has been cancelled
Some checks failed
Auto Tag Develop / tag (push) Has been cancelled
| Numéro du ticket | Titre du ticket | |------------------|-----------------| | #354 | modification front page admin utilisateur | ## Description de la PR ## Modification du .env ## Check list - [x] Pas de régression - [ ] TU/TI/TF rédigée - [x] TU/TI/TF OK - [x] CHANGELOG modifié Reviewed-on: #39 Reviewed-by: Autin <tristan@yuno.malio.fr> Co-authored-by: sroy <sebastien@yuno.malio.fr> Co-committed-by: sroy <sebastien@yuno.malio.fr>
This commit was merged in pull request #39.
This commit is contained in:
@@ -1,51 +1,70 @@
|
||||
<template>
|
||||
<form @submit.prevent="validate">
|
||||
<div
|
||||
class="flex items-center justify-between gap-10">
|
||||
<h1 class="text-3xl font-bold uppercase">
|
||||
<div class="flex items-center relative">
|
||||
<div class="flex flex-row absolute -left-[60px]">
|
||||
<Icon
|
||||
@click="router.push('/admin/user/list')"
|
||||
name="gg:arrow-left-o"
|
||||
size="40"
|
||||
class="cursor-pointer text-primary-500"
|
||||
/>
|
||||
</div>
|
||||
<h1 class="text-3xl text-primary-500 font-bold uppercase">
|
||||
{{ userId ? "Modification de l'utilisateur" : "Ajout d'un utilisateur" }}
|
||||
</h1>
|
||||
<UiButton
|
||||
class="inline-flex items-center justify-center text-xl text-white uppercase bg-primary-500 h-[50px] px-8 rounded hover:opacity-80 gap-2"
|
||||
type="submit"
|
||||
>
|
||||
<Icon :name="userId ? '' : 'mdi:plus'" size="28" />
|
||||
{{ userId ? 'Valider' : 'Ajouter' }}
|
||||
</UiButton>
|
||||
</div>
|
||||
|
||||
<div class="grid gap-y-16 gap-x-40 py-12">
|
||||
<div class="flex flex-cols-3 justify-between mb-11 pt-7">
|
||||
<UiTextInput
|
||||
id="user-name"
|
||||
v-model="form.username"
|
||||
label="Nom de l'utilisateur"
|
||||
:disabled="!auth.isAdmin"
|
||||
wrapper-class="w-[280px]"
|
||||
/>
|
||||
|
||||
<UiSelect
|
||||
id="user-role"
|
||||
v-model="form.role"
|
||||
label="Rôle de l'utilisateur"
|
||||
label="Role de l'utilisateur"
|
||||
:options="ROLE"
|
||||
:disabled="!auth.isAdmin"
|
||||
wrapper-class="w-[280px]"
|
||||
/>
|
||||
|
||||
<UiTextInput
|
||||
id="user-password"
|
||||
v-model="form.password"
|
||||
label="Mot de passe"
|
||||
type="password"
|
||||
|
||||
:disabled="!auth.isAdmin"
|
||||
wrapper-class="w-[280px]"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center justify-center">
|
||||
<UiButton
|
||||
class="inline-flex mb-28 items-center justify-center text-xl min-w-[194px] text-white uppercase bg-primary-500 h-[50px] rounded hover:opacity-80 justify-self-end"
|
||||
type="submit"
|
||||
:disabled="isLoading || isHydrating || !auth.isAdmin"
|
||||
>
|
||||
<Icon :name="userId ? '' : 'mdi:plus'" size="28" />
|
||||
{{ userId ? 'Valider' : 'Ajouter' }}
|
||||
</UiButton>
|
||||
</div>
|
||||
</form>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import {computed, reactive, ref, watch} from 'vue'
|
||||
import {ROLE} from '~/utils/constants'
|
||||
import {createUser, updateUser, getUser} from '~/services/auth'
|
||||
import type {UserData, UserFormData, UserPayload} from '~/services/dto/user-data'
|
||||
import { computed, reactive, ref, watch } from 'vue'
|
||||
import { ROLE } from '~/utils/constants'
|
||||
import { createUser, updateUser, getUser } from '~/services/auth'
|
||||
import type { UserData, UserFormData, UserPayload } from '~/services/dto/user-data'
|
||||
import { useAuthStore } from '~/stores/auth'
|
||||
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
const auth = useAuthStore()
|
||||
const userId = computed(() => resolveUserId(route.params.id))
|
||||
const isLoading = ref(false)
|
||||
const isHydrating = ref(false)
|
||||
@@ -59,7 +78,6 @@ const resolveUserId = (param: unknown) => {
|
||||
return Number.isFinite(id) ? id : null
|
||||
}
|
||||
|
||||
|
||||
const form = reactive<UserFormData>({
|
||||
username: '',
|
||||
password: '',
|
||||
@@ -73,8 +91,8 @@ const hydrateFromUser = (user: UserData | null) => {
|
||||
isHydrating.value = true
|
||||
form.username = user.username ?? ''
|
||||
const roles = user.roles ?? []
|
||||
const hasAdmin = roles.includes("ROLE_ADMIN")
|
||||
form.role = hasAdmin ? "ROLE_ADMIN" : "ROLE_USER"
|
||||
const hasAdmin = roles.includes('ROLE_ADMIN')
|
||||
form.role = hasAdmin ? 'ROLE_ADMIN' : 'ROLE_USER'
|
||||
form.password = ''
|
||||
isHydrating.value = false
|
||||
}
|
||||
@@ -93,10 +111,11 @@ watch(
|
||||
isLoading.value = false
|
||||
}
|
||||
},
|
||||
{immediate: true}
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
async function validate() {
|
||||
if (!auth.isAdmin) return
|
||||
|
||||
const normalizedUsername = form.username.trim()
|
||||
const normalizedRole = form.role.trim()
|
||||
@@ -112,13 +131,12 @@ async function validate() {
|
||||
|
||||
if (userId.value) {
|
||||
await updateUser(userId.value, basePayload)
|
||||
await router.push(`/admin/user/list/`)
|
||||
return
|
||||
}
|
||||
|
||||
const created = await createUser(basePayload)
|
||||
if (created) {
|
||||
await router.push(`/admin/user/list/`)
|
||||
await router.push('/admin/user/list')
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user