+
{{ organisation.name }}
@@ -79,54 +242,356 @@ function formatDate(iso: string) {
-
-
-
-
-
-
- Slug
-
-
- {{ organisation.slug }}
-
-
-
-
- Aangemaakt op
-
-
- {{ formatDate(organisation.created_at) }}
-
-
-
-
- Status
-
-
- {{ organisation.billing_status }}
-
-
-
-
-
+
+
+ Aangemaakt op {{ formatDate(organisation.created_at) }}
+
+
+
+
+ {{ tab.label }}
+
+
+
+
+
+
+
+
+
+
+
+ Slug
+
+
+ {{ organisation.slug }}
+
+
+
+
+ Status
+
+
+ {{ organisation.billing_status }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Kon leden niet laden.
+
+
+ Opnieuw proberen
+
+
+
+
+
+
+
+
+ Lid uitnodigen
+
+
+
+
+
+
+
+ Nog geen leden
+
+
+
+
+
+
+
+ {{ getInitials(item.full_name) }}
+
+ {{ item.full_name }}
+
+
+
+
+
+ {{ roleLabelMap[item.role] ?? item.role }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Openstaande uitnodigingen
+
+
+
+
+
+
+
+
+
+ {{ invitation.email }}
+
+ {{ roleLabelMap[invitation.role] ?? invitation.role }}
+
+
+
+ Verloopt op {{ formatDate(invitation.expires_at) }}
+
+
+
+
+ Intrekken
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Weet je zeker dat je {{ memberToRemove?.full_name }} wilt verwijderen uit de organisatie?
+
+
+
+
+ Annuleren
+
+
+ Verwijderen
+
+
+
+
+
+
+
+
+
+ Weet je zeker dat je de uitnodiging voor {{ invitationToRevoke?.email }} wilt intrekken?
+
+
+
+
+ Annuleren
+
+
+ Intrekken
+
+
+
+
+
+
+
+
+
+
+ Wijzig het e-mailadres van {{ memberToChangeEmail?.full_name }}.
+ Er wordt een verificatiemail verstuurd naar het nieuwe adres.
+
+
+
+
+
+
+ Annuleren
+
+
+ Verificatiemail versturen
+
+
+
+
+
+
+
+ Lid verwijderd
+
+
+ Uitnodiging ingetrokken
+
+
+ Verificatiemail verstuurd
+
diff --git a/apps/app/src/pages/platform/organisations/[id].vue b/apps/app/src/pages/platform/organisations/[id].vue
index a57441bb..ccdc676c 100644
--- a/apps/app/src/pages/platform/organisations/[id].vue
+++ b/apps/app/src/pages/platform/organisations/[id].vue
@@ -48,7 +48,23 @@ const roleOptions = [
{ title: 'Lid', value: 'org_member' },
]
-// Edit dialog
+// ─── Tabs ──────────────────────────────────────────────────
+const tabs = [
+ { value: 'algemeen', label: 'Algemeen', icon: 'tabler-building' },
+ { value: 'leden', label: 'Leden', icon: 'tabler-users-group' },
+]
+
+const activeTab = computed({
+ get: () => {
+ const tab = route.query.tab as string
+ return tabs.some(t => t.value === tab) ? tab : 'algemeen'
+ },
+ set: (value: string) => {
+ router.replace({ query: { ...route.query, tab: value } })
+ },
+})
+
+// ─── Edit dialog ───────────────────────────────────────────
const isEditDialogOpen = ref(false)
const editForm = ref
({})
const { mutate: updateOrg, isPending: isUpdating } = useUpdateAdminOrganisation()
@@ -75,11 +91,22 @@ function submitEdit() {
)
}
-// Delete
+// ─── Delete (type-to-confirm) ──────────────────────────────
const isDeleteDialogOpen = ref(false)
+const deleteConfirmName = ref('')
const { mutate: deleteOrg, isPending: isDeleting } = useDeleteAdminOrganisation()
+const deleteConfirmValid = computed(() =>
+ deleteConfirmName.value === org.value?.name,
+)
+
+function openDeleteDialog() {
+ deleteConfirmName.value = ''
+ isDeleteDialogOpen.value = true
+}
+
function confirmDelete() {
+ if (!deleteConfirmValid.value) return
deleteOrg(orgId.value, {
onSuccess: () => {
router.push({ name: 'platform-organisations' })
@@ -87,14 +114,14 @@ function confirmDelete() {
})
}
-// Open as organiser
+// ─── Open as organiser ─────────────────────────────────────
function openAsOrganiser() {
if (!org.value) return
orgStore.setActiveOrganisation(org.value.id)
router.push({ name: 'dashboard' })
}
-// ─── Invite Member ──────────────────────────────────────────
+// ─── Invite Member ─────────────────────────────────────────
const isInviteDialogOpen = ref(false)
const inviteForm = ref({ email: '', role: 'org_member' })
const inviteError = ref('')
@@ -123,7 +150,7 @@ function submitInvite() {
)
}
-// ─── Remove Member ──────────────────────────────────────────
+// ─── Remove Member ─────────────────────────────────────────
const isRemoveDialogOpen = ref(false)
const memberToRemove = ref<{ id: string; full_name: string } | null>(null)
const { mutate: removeMember, isPending: isRemoving } = useRemoveOrganisationMember()
@@ -147,7 +174,7 @@ function confirmRemove() {
)
}
-// ─── Update Member Role ─────────────────────────────────────
+// ─── Update Member Role ────────────────────────────────────
const { mutate: updateMemberRole } = useUpdateOrganisationMemberRole()
function onRoleChange(userId: string, newRole: string) {
@@ -161,7 +188,7 @@ function onRoleChange(userId: string, newRole: string) {
)
}
-// ─── Snackbar ───────────────────────────────────────────────
+// ─── Snackbar ──────────────────────────────────────────────
const snackbar = ref({ show: false, message: '', color: 'success' })
function showSnackbar(message: string, color: string) {
@@ -206,7 +233,7 @@ function formatDate(iso: string): string {
-
+
-
- {{ org.name }}
+
+
+ {{ org.name }}
+
{{ org.billing_status_label ?? org.billing_status }}
-
-
+
+
{{ org.slug }}
-
+ · Aangemaakt op {{ formatDate(org.created_at) }}
+ · Gewijzigd op {{ formatDate(org.updated_at) }}
+
@@ -247,8 +277,8 @@ function formatDate(iso: string): string {
-
-
+
+
-
-
- Details
-
-
-
-
- Aangemaakt
-
-
- {{ formatDate(org.created_at) }}
-
-
-
-
- Laatste wijziging
-
-
- {{ formatDate(org.updated_at) }}
-
-
-
-
-
+
+
+
+ {{ tab.label }}
+
+
-
-
-
- Leden
-
- Lid uitnodigen
-
-
-
-
-
- | Naam |
- Email |
- Rol |
-
- Acties
- |
-
-
-
-
-
-
-
+
+
+
+ Details
+
+
+
+
+ Slug
+
+
+ {{ org.slug }}
+
+
+
+
+ Billing status
+
+
-
- {{ member.first_name.charAt(0) }}{{ member.last_name.charAt(0) }}
-
- {{ member.full_name }}
-
- |
- {{ member.email }} |
-
- onRoleChange(member.id, val)"
- />
- |
-
-
+
+
+
+
+
+
+
+
+
+
+ Lid uitnodigen
+
+
+
+
+
+
+
+ | Naam |
+ Email |
+ Rol |
+
+ Acties
+ |
+
+
+
+
-
-
-
+
+
-
-
-
-
- Je kunt jezelf niet verwijderen
-
-
-
-
-
-
-
-
-
-
- Geen leden gevonden.
-
-
-
+
+ {{ member.first_name.charAt(0) }}{{ member.last_name.charAt(0) }}
+
+ {{ member.full_name }}
+
+ |
+ {{ member.email }} |
+
+ onRoleChange(member.id, val)"
+ />
+ |
+
+
+
+
+
+
+
+
+
+ Je kunt jezelf niet verwijderen
+
+
+
+
+ |
+
+
+
+
+ Geen leden gevonden.
+
+
+
+
-
-
- Gevarenzone
-
+
+ Danger Zone
-
- Organisatie verwijderen
-
+
+
+
+ Verwijder organisatie
+
+
+ Alle gegevens van deze organisatie worden permanent verwijderd.
+ Deze actie kan niet ongedaan worden gemaakt.
+
+
+
+ Verwijder
+
+
+
+
+
+
+
+
+ Transfer Ownership
+
+
+ Draag het eigenaarschap van deze organisatie over aan een andere gebruiker.
+
+
+
+
+
+
+ Transfer
+
+
+
+ Nog niet beschikbaar
+
+
@@ -523,15 +623,28 @@ function formatDate(iso: string): string {
-
+
- Weet je zeker dat je {{ org?.name }} wilt verwijderen?
- Dit kan niet ongedaan worden gemaakt.
+
+ Deze actie kan niet ongedaan worden gemaakt. Alle gegevens van
+ deze organisatie worden permanent verwijderd.
+
+
+ Typ {{ org?.name }} om te bevestigen:
+
+
@@ -544,9 +657,10 @@ function formatDate(iso: string): string {
- Verwijderen
+ Definitief verwijderen