feat: add voor_opleiders toggle and update terminology
Some checks failed
continuous-integration/drone/push Build is failing

Production features and text updates:
- Add 'Voor opleiders' toggle in Administration component
- Update 'Kwaliteitsstandaarden' → 'Zorgstandaarden' throughout
- Update 'Toetsing' → 'Meer leren' in translations
- Update 'Register' → 'Accreditatie' in filters
- Store integration for voor_opleiders field

These changes were made directly on production and need to be
preserved in version control.
This commit is contained in:
root
2025-12-08 10:26:09 +01:00
committed by Joris Slagter
parent 1bb4dd6374
commit 38592e29f5
8 changed files with 233 additions and 17465 deletions

View File

@@ -37,6 +37,23 @@
<v-col cols="12" sm="12" md="3"> </v-col> <v-col cols="12" sm="12" md="3"> </v-col>
</v-row> </v-row>
<v-row>
<v-col cols="12" sm="12" md="3">
<v-subheader class="txt--text font-weight-black in_the_picture"
>Voor opleiders</v-subheader
>
</v-col>
<v-col cols="12" sm="12" md="9" class="mb-4 d-flex flex-column">
<div class="pb-0 mb-0 d-flex">
<v-switch
:disabled="!editMode"
inset
class="my-3 toggle"
v-model="voor_opleiders"
/>
</div>
</v-col>
</v-row>
<v-row> <v-row>
<v-col cols="12" sm="12" md="3"> <v-col cols="12" sm="12" md="3">
<v-subheader class="txt--text font-weight-black">{{ <v-subheader class="txt--text font-weight-black">{{
@@ -251,6 +268,17 @@ export default {
}) })
}, },
}, },
voor_opleiders: {
get() {
return this.local.voor_opleiders
},
set(value) {
this.$store.commit('learning/UPDATE_FIELD', {
field: 'voor_opleiders',
value,
})
},
},
}, },
methods: { methods: {
onEditorChange() { onEditorChange() {

View File

@@ -394,7 +394,7 @@
> >
</v-col> </v-col>
<v-col cols="12" sm="12" md="9" class="mb-4 d-flex flex-column"> <v-col cols="12" sm="12" md="9" class="mb-4 d-flex flex-column">
<div class="pb-0 mb-0 d-flex"> <div class="pb-0 mb-0 d-flex align-center">
<v-switch <v-switch
:disabled="!editMode" :disabled="!editMode"
inset inset
@@ -402,35 +402,78 @@
v-model="in_the_picture" v-model="in_the_picture"
/> />
<v-text-field <!-- Start Date Field with Individual Calendar -->
:value="computedInThePicDateFormattedStart" <v-menu
readonly ref="menuStartDate"
prepend-inner-icon="icon-events" v-model="menuStartDate"
:outlined="editMode" :close-on-content-click="false"
:solo="!editMode" transition="scale-transition"
:flat="!editMode" offset-y
/> min-width="290px"
>
<template v-slot:activator="{ on, attrs }">
<v-text-field
v-model="startDateFormatted"
prepend-inner-icon="icon-events"
:outlined="editMode"
:solo="!editMode"
:disabled="!editMode || !in_the_picture"
:flat="!editMode"
:readonly="false"
placeholder="dd/mm/yyyy"
v-bind="attrs"
v-on="on"
@blur="parseStartDate"
/>
</template>
<v-date-picker
v-model="startDate"
no-title
scrollable
:disabled="!editMode || !in_the_picture"
locale="nl-NL"
first-day-of-week="1"
@input="menuStartDate = false"
/>
</v-menu>
<span class="mx-5 my-3 font-weight-bold"> tot </span> <span class="mx-5 my-3 font-weight-bold"> tot </span>
<v-text-field
:value="computedInThePicDateFormattedEnd" <!-- End Date Field with Individual Calendar -->
readonly <v-menu
:outlined="editMode" ref="menuEndDate"
:solo="!editMode" v-model="menuEndDate"
:flat="!editMode" :close-on-content-click="false"
append-icon="icon-events" transition="scale-transition"
/> offset-y
min-width="290px"
>
<template v-slot:activator="{ on, attrs }">
<v-text-field
v-model="endDateFormatted"
append-icon="icon-events"
:outlined="editMode"
:solo="!editMode"
:disabled="!editMode || !in_the_picture"
:flat="!editMode"
:readonly="false"
placeholder="dd/mm/yyyy"
v-bind="attrs"
v-on="on"
@blur="parseEndDate"
/>
</template>
<v-date-picker
v-model="endDate"
no-title
scrollable
:disabled="!editMode || !in_the_picture"
locale="nl-NL"
first-day-of-week="1"
@input="menuEndDate = false"
/>
</v-menu>
</div> </div>
<v-date-picker
v-if="$store.getters.isSuperAdminOrAdmin"
v-model="dates"
no-title
:disabled="!editMode"
flat
first-day-of-week="1"
range
full-width
locale="nl-NL"
/>
</v-col> </v-col>
</v-row> </v-row>
</accordion-card> </accordion-card>
@@ -528,9 +571,19 @@ export default {
x: 0, x: 0,
y: 0, y: 0,
dates: [], dates: [],
menuStartDate: false,
menuEndDate: false,
startDate: null,
endDate: null,
} }
}, },
mounted() {
// Initialize date fields from store values
this.startDate = this.in_the_picture_start
this.endDate = this.in_the_picture_end
},
watch: { watch: {
dialogNotification(val) { dialogNotification(val) {
val || this.close() val || this.close()
@@ -548,6 +601,28 @@ export default {
value: val[1] || null, value: val[1] || null,
}) })
}, },
startDate(val) {
this.$store.commit('learning/UPDATE_FIELD', {
field: 'in_the_picture_start',
value: val || null,
})
},
endDate(val) {
this.$store.commit('learning/UPDATE_FIELD', {
field: 'in_the_picture_end',
value: val || null,
})
},
in_the_picture_start(val) {
this.startDate = val
},
in_the_picture_end(val) {
this.endDate = val
},
}, },
computed: { computed: {
@@ -596,6 +671,24 @@ export default {
in_the_picture_end() { in_the_picture_end() {
return this.local.in_the_picture_end return this.local.in_the_picture_end
}, },
startDateFormatted: {
get() {
return this.startDate ? this.formatDate(this.startDate) : ''
},
set(value) {
// Will be handled by parseStartDate method
}
},
endDateFormatted: {
get() {
return this.endDate ? this.formatDate(this.endDate) : ''
},
set(value) {
// Will be handled by parseEndDate method
}
},
}, },
methods: { methods: {
@@ -617,6 +710,46 @@ export default {
return `${day}/${month}/${year}` return `${day}/${month}/${year}`
}, },
parseStartDate(event) {
const value = event.target.value
if (!value) {
this.startDate = null
return
}
// Parse DD/MM/YYYY format
const parts = value.split('/')
if (parts.length === 3) {
const day = parts[0].padStart(2, '0')
const month = parts[1].padStart(2, '0')
const year = parts[2]
if (year.length === 4 && !isNaN(day) && !isNaN(month)) {
this.startDate = `${year}-${month}-${day}`
}
}
},
parseEndDate(event) {
const value = event.target.value
if (!value) {
this.endDate = null
return
}
// Parse DD/MM/YYYY format
const parts = value.split('/')
if (parts.length === 3) {
const day = parts[0].padStart(2, '0')
const month = parts[1].padStart(2, '0')
const year = parts[2]
if (year.length === 4 && !isNaN(day) && !isNaN(month)) {
this.endDate = `${year}-${month}-${day}`
}
}
},
viewItem(item) { viewItem(item) {
this.editedIndex = this.notifications.indexOf(item) this.editedIndex = this.notifications.indexOf(item)
this.notificationEditMode = false this.notificationEditMode = false

View File

@@ -137,7 +137,7 @@
<v-row> <v-row>
<v-col cols="12" sm="12" md="3"> <v-col cols="12" sm="12" md="3">
<v-subheader class="txt--text font-weight-black"> <v-subheader class="txt--text font-weight-black">
Kwaliteitsstandaarden Zorgstandaarden
</v-subheader> </v-subheader>
</v-col> </v-col>
<v-col cols="12" sm="12" md="6" class="pl-6"> <v-col cols="12" sm="12" md="6" class="pl-6">

View File

@@ -146,7 +146,7 @@
"short_description": "Korte omschrijving", "short_description": "Korte omschrijving",
"allowed_trailer": "Voeg de link toe uit het videoplatform en de video zal automatisch worden toegevoegd.", "allowed_trailer": "Voeg de link toe uit het videoplatform en de video zal automatisch worden toegevoegd.",
"learning_goals": "Leerdoelen", "learning_goals": "Leerdoelen",
"review": "Toetsing", "review": "Meer leren",
"certification": "Certificering", "certification": "Certificering",
"extra_information": "Extra informatie", "extra_information": "Extra informatie",
"target_audience": "Doelgroep", "target_audience": "Doelgroep",
@@ -160,7 +160,7 @@
}, },
"all_products": "Alle leerproducten", "all_products": "Alle leerproducten",
"synonyms": "Synoniemen", "synonyms": "Synoniemen",
"quality_standards": "Kwaliteitsstandaarden", "quality_standards": "Zorgstandaarden",
"filters": { "filters": {
"more": "Meer filters", "more": "Meer filters",
"title": "Keuzelijsten", "title": "Keuzelijsten",
@@ -173,12 +173,12 @@
"developers": "Ontwikkelaar", "developers": "Ontwikkelaar",
"dev_environment": "Ontwikkelomgeving", "dev_environment": "Ontwikkelomgeving",
"product_type": "Producttype", "product_type": "Producttype",
"register": "Register", "register": "Accreditatie",
"status": "Status", "status": "Status",
"theme": "Thema", "theme": "Thema",
"type": "Type", "type": "Type",
"delete_item_confirmation": "Weet je zeker dat je '{itemName} ' wilt verwijderen?", "delete_item_confirmation": "Weet je zeker dat je '{itemName} ' wilt verwijderen?",
"quality_standards": "Kwaliteitsstandaarden", "quality_standards": "Zorgstandaarden",
"made_by": "Gemaakt door" "made_by": "Gemaakt door"
}, },
"partner": "Partner", "partner": "Partner",
@@ -197,9 +197,9 @@
"technical_information": "Technische informatie" "technical_information": "Technische informatie"
}, },
"add_new_notification": "Nog een mailnotificatie toevoegen", "add_new_notification": "Nog een mailnotificatie toevoegen",
"add_new_accreditation": "Nieuw register toevoegen", "add_new_accreditation": "Nieuw accreditatie toevoegen",
"new_accreditation": "Nieuw register", "new_accreditation": "Nieuw accreditatie",
"edit_accreditation": "Bewerken register", "edit_accreditation": "Bewerken accreditatie",
"accreditation_period": "Accreditatieperiode", "accreditation_period": "Accreditatieperiode",
"delete_accreditation_confirmation": "Weet je zeker dat je deze accreditatie wilt verwijderen?", "delete_accreditation_confirmation": "Weet je zeker dat je deze accreditatie wilt verwijderen?",
"delete_addressmembers_confirmation": "Weet je zeker dat dit adres wilt verwijderen?", "delete_addressmembers_confirmation": "Weet je zeker dat dit adres wilt verwijderen?",
@@ -207,7 +207,7 @@
"delete_contributionmembers_confirmation": "Weet je zeker dat je deze contributie wilt verwijderen?", "delete_contributionmembers_confirmation": "Weet je zeker dat je deze contributie wilt verwijderen?",
"delete_employeesmembers_confirmation": "Weet je zeker dat je deze werknemer wilt verwijderen?", "delete_employeesmembers_confirmation": "Weet je zeker dat je deze werknemer wilt verwijderen?",
"accreditation": { "accreditation": {
"register": "Register", "register": "Accreditatie",
"credits": "Punten", "credits": "Punten",
"date_start": "Start datum", "date_start": "Start datum",
"date_end": "Eind datum" "date_end": "Eind datum"

17457
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -10,7 +10,7 @@
<v-row> <v-row>
<v-col cols="12" sm="12" md="3"> <v-col cols="12" sm="12" md="3">
<v-subheader class="ml-10 txt--text font-weight-black"> <v-subheader class="ml-10 txt--text font-weight-black">
Kwaliteitsstandaard Zorgstandaard
</v-subheader> </v-subheader>
</v-col> </v-col>
<v-col cols="12" sm="12" md="6"> <v-col cols="12" sm="12" md="6">

View File

@@ -9,7 +9,7 @@ export default {
async mounted () { async mounted () {
const responsehash = this.$route.hash.split('&', 3); const responsehash = this.$route.hash.split('&', 3);
const token = responsehash[0].replace('#access_token=', ''); const token = responsehash[0].replace('#access_token=', '');
try { try {
await this.$auth.loginWith('local', { await this.$auth.loginWith('local', {
data: { data: {

View File

@@ -124,6 +124,8 @@ export const actions = {
await commit('UPDATE_FIELD', { field: 'in_the_picture', value: 1 }) await commit('UPDATE_FIELD', { field: 'in_the_picture', value: 1 })
if (state.local.for_members) if (state.local.for_members)
await commit('UPDATE_FIELD', { field: 'for_members', value: 1 }) await commit('UPDATE_FIELD', { field: 'for_members', value: 1 })
if (state.local.voor_opleiders)
await commit('UPDATE_FIELD', { field: 'voor_opleiders', value: 1 })
// Check if remotely the product was already set as published // Check if remotely the product was already set as published
const wasPublished = state.remote.published const wasPublished = state.remote.published