@motor-cms/ui-admin 1.5.2 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/components/dashboard/DashboardActivityItem.vue +3 -3
- package/app/components/dashboard/DashboardAnnouncementModal.vue +53 -5
- package/app/components/dashboard/DashboardAnnouncements.vue +3 -3
- package/app/composables/useDashboardData.ts +1 -0
- package/app/lang/de/motor-admin/ai_system_prompts.json +1 -0
- package/app/lang/de/motor-admin/categories.json +1 -0
- package/app/lang/de/motor-admin/category_trees.json +1 -0
- package/app/lang/de/motor-admin/clients.json +1 -0
- package/app/lang/de/motor-admin/config_variables.json +1 -0
- package/app/lang/de/motor-admin/dashboard.json +2 -0
- package/app/lang/de/motor-admin/domains.json +1 -0
- package/app/lang/de/motor-admin/email_templates.json +1 -0
- package/app/lang/de/motor-admin/languages.json +1 -0
- package/app/lang/de/motor-admin/permissions.json +1 -0
- package/app/lang/de/motor-admin/roles.json +1 -0
- package/app/lang/de/motor-admin/users.json +1 -0
- package/app/lang/en/motor-admin/ai_system_prompts.json +1 -0
- package/app/lang/en/motor-admin/categories.json +1 -0
- package/app/lang/en/motor-admin/category_trees.json +1 -0
- package/app/lang/en/motor-admin/clients.json +1 -0
- package/app/lang/en/motor-admin/config_variables.json +1 -0
- package/app/lang/en/motor-admin/dashboard.json +2 -0
- package/app/lang/en/motor-admin/domains.json +1 -0
- package/app/lang/en/motor-admin/email_templates.json +1 -0
- package/app/lang/en/motor-admin/languages.json +1 -0
- package/app/lang/en/motor-admin/permissions.json +1 -0
- package/app/lang/en/motor-admin/roles.json +1 -0
- package/app/lang/en/motor-admin/users.json +1 -0
- package/app/pages/motor-admin/ai-system-prompts/[id]/edit.vue +4 -4
- package/app/pages/motor-admin/category-trees/[id]/categories/[categoryId]/edit.vue +4 -3
- package/app/pages/motor-admin/category-trees/[id]/edit.vue +4 -4
- package/app/pages/motor-admin/clients/[id]/edit.vue +4 -4
- package/app/pages/motor-admin/config-variables/[id]/edit.vue +4 -4
- package/app/pages/motor-admin/domains/[id]/edit.vue +4 -4
- package/app/pages/motor-admin/email-templates/[id]/edit.vue +4 -4
- package/app/pages/motor-admin/languages/[id]/edit.vue +4 -4
- package/app/pages/motor-admin/permission-groups/[id]/edit.vue +4 -4
- package/app/pages/motor-admin/roles/[id]/edit.vue +4 -4
- package/app/pages/motor-admin/users/[id]/edit.vue +4 -3
- package/app/pages/search.vue +5 -0
- package/package.json +2 -2
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
-
import {
|
|
2
|
+
import { formatTimeAgoIntl } from '@vueuse/core'
|
|
3
3
|
import type { ActivityItem } from '../../composables/useDashboardData'
|
|
4
4
|
|
|
5
|
-
const { t } = useI18n()
|
|
5
|
+
const { t, locale } = useI18n()
|
|
6
6
|
|
|
7
7
|
const props = defineProps<{
|
|
8
8
|
item: ActivityItem
|
|
@@ -82,7 +82,7 @@ const timestamp = computed(() => new Date(props.item.created_at))
|
|
|
82
82
|
<strong>{{ item.subject_name ?? t('motor-admin.dashboard.activity.unknown') }}</strong> {{ verb }}
|
|
83
83
|
</div>
|
|
84
84
|
<div class="text-xs text-dimmed mt-0.5">
|
|
85
|
-
{{ item.causer_name ?? t('motor-admin.dashboard.activity.system') }} · {{
|
|
85
|
+
{{ item.causer_name ?? t('motor-admin.dashboard.activity.system') }} · {{ formatTimeAgoIntl(timestamp, { locale }) }}
|
|
86
86
|
</div>
|
|
87
87
|
</div>
|
|
88
88
|
<UBadge
|
|
@@ -9,8 +9,9 @@ const emit = defineEmits<{
|
|
|
9
9
|
}>()
|
|
10
10
|
|
|
11
11
|
const { t } = useI18n()
|
|
12
|
-
const
|
|
13
|
-
const { can } = usePermissions()
|
|
12
|
+
const apiClient = useSanctumClient()
|
|
13
|
+
const { can, hasRole } = usePermissions()
|
|
14
|
+
const { user } = useSanctumAuth<import('@motor-cms/ui-core/app/types/auth').User>()
|
|
14
15
|
const saving = ref(false)
|
|
15
16
|
|
|
16
17
|
const canWriteAnnouncements = computed(() => can('dashboard-announcements.write'))
|
|
@@ -21,6 +22,7 @@ const form = reactive({
|
|
|
21
22
|
type: 'info',
|
|
22
23
|
audience: 'self',
|
|
23
24
|
target_user_ids: [] as number[],
|
|
25
|
+
client_id: undefined as number | undefined,
|
|
24
26
|
linkable_type: '',
|
|
25
27
|
linkable_id: undefined as number | undefined,
|
|
26
28
|
starts_at: undefined as string | undefined,
|
|
@@ -56,11 +58,29 @@ const userOptions = ref<Array<{ label: string; value: number }>>([])
|
|
|
56
58
|
const usersLoading = ref(false)
|
|
57
59
|
const usersFetched = ref(false)
|
|
58
60
|
|
|
61
|
+
const clientOptions = computed(() => {
|
|
62
|
+
return (user.value?.data?.clients ?? []).map(c => ({
|
|
63
|
+
label: c.name,
|
|
64
|
+
value: c.id,
|
|
65
|
+
}))
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
const allClientOptions = ref<Array<{ label: string; value: number }>>([])
|
|
69
|
+
const allClientsFetched = ref(false)
|
|
70
|
+
const allClientsLoading = ref(false)
|
|
71
|
+
|
|
72
|
+
const visibleClientOptions = computed(() => {
|
|
73
|
+
if (hasRole('SuperAdmin') && allClientsFetched.value) {
|
|
74
|
+
return allClientOptions.value
|
|
75
|
+
}
|
|
76
|
+
return clientOptions.value
|
|
77
|
+
})
|
|
78
|
+
|
|
59
79
|
watch(() => form.audience, async (audience) => {
|
|
60
80
|
if (audience === 'users' && !usersFetched.value) {
|
|
61
81
|
usersLoading.value = true
|
|
62
82
|
try {
|
|
63
|
-
const response = await
|
|
83
|
+
const response = await apiClient<{ data: Array<{ id: number; name: string }> }>('/api/v2/users?per_page=200')
|
|
64
84
|
userOptions.value = response.data.map(u => ({
|
|
65
85
|
label: u.name,
|
|
66
86
|
value: u.id,
|
|
@@ -70,6 +90,19 @@ watch(() => form.audience, async (audience) => {
|
|
|
70
90
|
usersLoading.value = false
|
|
71
91
|
}
|
|
72
92
|
}
|
|
93
|
+
if (audience === 'client' && hasRole('SuperAdmin') && !allClientsFetched.value) {
|
|
94
|
+
allClientsLoading.value = true
|
|
95
|
+
try {
|
|
96
|
+
const response = await apiClient<{ data: Array<{ id: number; name: string }> }>('/api/v2/clients?per_page=200')
|
|
97
|
+
allClientOptions.value = response.data.map(c => ({
|
|
98
|
+
label: c.name,
|
|
99
|
+
value: c.id,
|
|
100
|
+
}))
|
|
101
|
+
allClientsFetched.value = true
|
|
102
|
+
} finally {
|
|
103
|
+
allClientsLoading.value = false
|
|
104
|
+
}
|
|
105
|
+
}
|
|
73
106
|
})
|
|
74
107
|
|
|
75
108
|
const linkableOptions = ref<Array<{ label: string; value: number }>>([])
|
|
@@ -106,7 +139,7 @@ async function fetchLinkableOptions(query: string) {
|
|
|
106
139
|
if (query) {
|
|
107
140
|
params.set('search', query)
|
|
108
141
|
}
|
|
109
|
-
const response = await
|
|
142
|
+
const response = await apiClient<{ data: Array<Record<string, any>> }>(`${config.endpoint}?${params}`)
|
|
110
143
|
linkableOptions.value = response.data.map(item => ({
|
|
111
144
|
label: config.labelFn(item),
|
|
112
145
|
value: item.id,
|
|
@@ -144,6 +177,9 @@ async function handleSubmit() {
|
|
|
144
177
|
if (form.audience === 'users') {
|
|
145
178
|
data.target_user_ids = form.target_user_ids
|
|
146
179
|
}
|
|
180
|
+
if (form.audience === 'client' && form.client_id) {
|
|
181
|
+
data.client_id = form.client_id
|
|
182
|
+
}
|
|
147
183
|
if (form.linkable_type && form.linkable_id) {
|
|
148
184
|
data.linkable_type = form.linkable_type
|
|
149
185
|
data.linkable_id = form.linkable_id
|
|
@@ -155,7 +191,7 @@ async function handleSubmit() {
|
|
|
155
191
|
data.expires_at = form.expires_at
|
|
156
192
|
}
|
|
157
193
|
|
|
158
|
-
await
|
|
194
|
+
await apiClient('/api/v2/dashboard/announcements', {
|
|
159
195
|
method: 'POST',
|
|
160
196
|
body: data,
|
|
161
197
|
})
|
|
@@ -166,6 +202,7 @@ async function handleSubmit() {
|
|
|
166
202
|
type: 'info',
|
|
167
203
|
audience: 'self',
|
|
168
204
|
target_user_ids: [],
|
|
205
|
+
client_id: undefined,
|
|
169
206
|
linkable_type: '',
|
|
170
207
|
linkable_id: null,
|
|
171
208
|
starts_at: null,
|
|
@@ -222,6 +259,17 @@ async function handleSubmit() {
|
|
|
222
259
|
/>
|
|
223
260
|
</UFormField>
|
|
224
261
|
|
|
262
|
+
<UFormField v-if="form.audience === 'client'" :label="t('motor-admin.dashboard.announcements.field_client')">
|
|
263
|
+
<USelectMenu
|
|
264
|
+
v-model="form.client_id"
|
|
265
|
+
:items="visibleClientOptions"
|
|
266
|
+
value-key="value"
|
|
267
|
+
:loading="allClientsLoading"
|
|
268
|
+
:placeholder="t('motor-admin.dashboard.announcements.field_client_placeholder')"
|
|
269
|
+
class="w-full"
|
|
270
|
+
/>
|
|
271
|
+
</UFormField>
|
|
272
|
+
|
|
225
273
|
<UFormField :label="t('motor-admin.dashboard.announcements.field_link')">
|
|
226
274
|
<USelectMenu
|
|
227
275
|
v-model="form.linkable_type"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
-
import {
|
|
2
|
+
import { formatTimeAgoIntl } from '@vueuse/core'
|
|
3
3
|
import type { AnnouncementItem } from '../../composables/useDashboardData'
|
|
4
4
|
|
|
5
5
|
const props = defineProps<{
|
|
@@ -13,7 +13,7 @@ const emit = defineEmits<{
|
|
|
13
13
|
create: []
|
|
14
14
|
}>()
|
|
15
15
|
|
|
16
|
-
const { t } = useI18n()
|
|
16
|
+
const { t, locale } = useI18n()
|
|
17
17
|
|
|
18
18
|
const borderColors: Record<string, string> = {
|
|
19
19
|
info: 'border-l-info',
|
|
@@ -80,7 +80,7 @@ const borderColors: Record<string, string> = {
|
|
|
80
80
|
{{ item.linkable_name }}
|
|
81
81
|
</NuxtLink>
|
|
82
82
|
<div class="text-xs text-dimmed mt-2">
|
|
83
|
-
{{ item.created_by_name }} · {{
|
|
83
|
+
{{ item.created_by_name }} · {{ formatTimeAgoIntl(new Date(item.starts_at ?? item.created_at), { locale }) }}
|
|
84
84
|
</div>
|
|
85
85
|
</div>
|
|
86
86
|
</div>
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
"prompt_description": "Der System-Prompt-Text, der an das KI-Modell gesendet wird",
|
|
8
8
|
"create_title": "KI-System-Prompt erstellen",
|
|
9
9
|
"edit_title": "KI-System-Prompt bearbeiten",
|
|
10
|
+
"view_title": "KI-System-Prompt ansehen",
|
|
10
11
|
"created_success": "KI-System-Prompt erfolgreich erstellt.",
|
|
11
12
|
"updated_success": "KI-System-Prompt erfolgreich aktualisiert."
|
|
12
13
|
}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
"add": "Kategorie hinzufügen",
|
|
6
6
|
"create_title": "Kategorie erstellen",
|
|
7
7
|
"edit_title": "Kategorie bearbeiten",
|
|
8
|
+
"view_title": "Kategorie ansehen",
|
|
8
9
|
"created_success": "Kategorie wurde erfolgreich erstellt",
|
|
9
10
|
"updated_success": "Kategorie wurde erfolgreich aktualisiert",
|
|
10
11
|
"parent": "Übergeordnete Kategorie",
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
"add": "Kategoriebaum hinzufügen",
|
|
7
7
|
"create_title": "Kategoriebaum erstellen",
|
|
8
8
|
"edit_title": "Kategoriebaum bearbeiten",
|
|
9
|
+
"view_title": "Kategoriebaum ansehen",
|
|
9
10
|
"created_success": "Kategoriebaum wurde erfolgreich erstellt",
|
|
10
11
|
"updated_success": "Kategoriebaum wurde erfolgreich aktualisiert",
|
|
11
12
|
"children": "Kinder",
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
"add": "Mandant hinzufügen",
|
|
7
7
|
"create_title": "Mandant erstellen",
|
|
8
8
|
"edit_title": "Mandant bearbeiten",
|
|
9
|
+
"view_title": "Mandant ansehen",
|
|
9
10
|
"created_success": "Mandant erfolgreich erstellt.",
|
|
10
11
|
"updated_success": "Mandant erfolgreich aktualisiert.",
|
|
11
12
|
"slug": "Slug",
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
"is_invisible": "Versteckt",
|
|
10
10
|
"create_title": "Konfigurationsvariable erstellen",
|
|
11
11
|
"edit_title": "Konfigurationsvariable bearbeiten",
|
|
12
|
+
"view_title": "Konfigurationsvariable ansehen",
|
|
12
13
|
"created_success": "Konfigurationsvariable erfolgreich erstellt.",
|
|
13
14
|
"updated_success": "Konfigurationsvariable erfolgreich aktualisiert."
|
|
14
15
|
}
|
|
@@ -49,6 +49,8 @@
|
|
|
49
49
|
"field_audience": "Zielgruppe",
|
|
50
50
|
"field_users": "Nutzer auswählen",
|
|
51
51
|
"field_users_placeholder": "Nutzer suchen...",
|
|
52
|
+
"field_client": "Mandant auswählen",
|
|
53
|
+
"field_client_placeholder": "Mandant wählen...",
|
|
52
54
|
"field_link": "Verknüpfung (optional)",
|
|
53
55
|
"field_link_type_placeholder": "Typ wählen...",
|
|
54
56
|
"field_link_item": "Element",
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
"add": "Domain hinzufügen",
|
|
7
7
|
"create_title": "Domain erstellen",
|
|
8
8
|
"edit_title": "Domain bearbeiten",
|
|
9
|
+
"view_title": "Domain ansehen",
|
|
9
10
|
"created_success": "Domain erfolgreich erstellt.",
|
|
10
11
|
"updated_success": "Domain erfolgreich aktualisiert.",
|
|
11
12
|
"host": "Host",
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
"add": "E-Mail-Vorlage hinzufügen",
|
|
6
6
|
"create_title": "E-Mail-Vorlage erstellen",
|
|
7
7
|
"edit_title": "E-Mail-Vorlage bearbeiten",
|
|
8
|
+
"view_title": "E-Mail-Vorlage ansehen",
|
|
8
9
|
"slug": "Slug",
|
|
9
10
|
"slug_description": "URL-freundlicher Bezeichner, automatisch aus dem Namen generiert",
|
|
10
11
|
"subject": "Betreff",
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
"native_name": "Eigenname",
|
|
10
10
|
"create_title": "Sprache erstellen",
|
|
11
11
|
"edit_title": "Sprache bearbeiten",
|
|
12
|
+
"view_title": "Sprache ansehen",
|
|
12
13
|
"created_success": "Sprache erfolgreich erstellt.",
|
|
13
14
|
"updated_success": "Sprache erfolgreich aktualisiert.",
|
|
14
15
|
"iso_639_1": "ISO 639-1 Code",
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"position": "Position",
|
|
9
9
|
"create_title": "Berechtigungsgruppe erstellen",
|
|
10
10
|
"edit_title": "Berechtigungsgruppe bearbeiten",
|
|
11
|
+
"view_title": "Berechtigungsgruppe ansehen",
|
|
11
12
|
"created_success": "Berechtigungsgruppe erfolgreich erstellt.",
|
|
12
13
|
"updated_success": "Berechtigungsgruppe erfolgreich aktualisiert.",
|
|
13
14
|
"group_permissions": "Berechtigungen"
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"permissions": "Berechtigungen",
|
|
9
9
|
"create_title": "Rolle erstellen",
|
|
10
10
|
"edit_title": "Rolle bearbeiten",
|
|
11
|
+
"view_title": "Rolle ansehen",
|
|
11
12
|
"created_success": "Rolle erfolgreich erstellt.",
|
|
12
13
|
"updated_success": "Rolle erfolgreich aktualisiert.",
|
|
13
14
|
"guard_name": "Guard-Name",
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"permissions": "Berechtigungen",
|
|
11
11
|
"create_title": "Benutzer erstellen",
|
|
12
12
|
"edit_title": "Benutzer bearbeiten",
|
|
13
|
+
"view_title": "Benutzer ansehen",
|
|
13
14
|
"created_success": "Benutzer wurde erfolgreich erstellt",
|
|
14
15
|
"updated_success": "Benutzer wurde erfolgreich aktualisiert",
|
|
15
16
|
"password": "Passwort",
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
"prompt_description": "The system prompt text sent to the AI model",
|
|
8
8
|
"create_title": "Create AI System Prompt",
|
|
9
9
|
"edit_title": "Edit AI System Prompt",
|
|
10
|
+
"view_title": "View AI System Prompt",
|
|
10
11
|
"created_success": "AI system prompt created successfully.",
|
|
11
12
|
"updated_success": "AI system prompt updated successfully."
|
|
12
13
|
}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
"add": "Add Category",
|
|
6
6
|
"create_title": "Create Category",
|
|
7
7
|
"edit_title": "Edit Category",
|
|
8
|
+
"view_title": "View Category",
|
|
8
9
|
"created_success": "Category was created successfully",
|
|
9
10
|
"updated_success": "Category was updated successfully",
|
|
10
11
|
"parent": "Parent Category",
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
"add": "Add Category Tree",
|
|
7
7
|
"create_title": "Create Category Tree",
|
|
8
8
|
"edit_title": "Edit Category Tree",
|
|
9
|
+
"view_title": "View Category Tree",
|
|
9
10
|
"created_success": "Category tree was created successfully",
|
|
10
11
|
"updated_success": "Category tree was updated successfully",
|
|
11
12
|
"children": "Children",
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
"is_invisible": "Hidden",
|
|
10
10
|
"create_title": "Create Config Variable",
|
|
11
11
|
"edit_title": "Edit Config Variable",
|
|
12
|
+
"view_title": "View Config Variable",
|
|
12
13
|
"created_success": "Config variable created successfully.",
|
|
13
14
|
"updated_success": "Config variable updated successfully."
|
|
14
15
|
}
|
|
@@ -49,6 +49,8 @@
|
|
|
49
49
|
"field_audience": "Audience",
|
|
50
50
|
"field_users": "Select users",
|
|
51
51
|
"field_users_placeholder": "Search users...",
|
|
52
|
+
"field_client": "Select client",
|
|
53
|
+
"field_client_placeholder": "Choose a client...",
|
|
52
54
|
"field_link": "Link (optional)",
|
|
53
55
|
"field_link_type_placeholder": "Select type...",
|
|
54
56
|
"field_link_item": "Item",
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
"add": "Add Email Template",
|
|
6
6
|
"create_title": "Create Email Template",
|
|
7
7
|
"edit_title": "Edit Email Template",
|
|
8
|
+
"view_title": "View Email Template",
|
|
8
9
|
"slug": "Slug",
|
|
9
10
|
"slug_description": "URL-friendly identifier, auto-generated from name",
|
|
10
11
|
"subject": "Subject",
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
"native_name": "Native Name",
|
|
10
10
|
"create_title": "Create Language",
|
|
11
11
|
"edit_title": "Edit Language",
|
|
12
|
+
"view_title": "View Language",
|
|
12
13
|
"created_success": "Language created successfully.",
|
|
13
14
|
"updated_success": "Language updated successfully.",
|
|
14
15
|
"iso_639_1": "ISO 639-1 Code",
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"position": "Position",
|
|
9
9
|
"create_title": "Create Permission Group",
|
|
10
10
|
"edit_title": "Edit Permission Group",
|
|
11
|
+
"view_title": "View Permission Group",
|
|
11
12
|
"created_success": "Permission group created successfully.",
|
|
12
13
|
"updated_success": "Permission group updated successfully.",
|
|
13
14
|
"group_permissions": "Permissions"
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"permissions": "Permissions",
|
|
11
11
|
"create_title": "Create User",
|
|
12
12
|
"edit_title": "Edit User",
|
|
13
|
+
"view_title": "View User",
|
|
13
14
|
"created_success": "User was created successfully",
|
|
14
15
|
"updated_success": "User was updated successfully",
|
|
15
16
|
"password": "Password",
|
|
@@ -3,11 +3,10 @@
|
|
|
3
3
|
import { aISystemPromptFormMeta } from '../../../../types/generated/form-meta'
|
|
4
4
|
import { aiSystemPromptFormConfig, aiSystemPromptSelectOptionConfigs } from '@motor-cms/ui-core/app/types/config/ai-system-prompt'
|
|
5
5
|
|
|
6
|
-
definePageMeta({ layout: 'default', permission: 'ai-system-prompts.
|
|
6
|
+
definePageMeta({ layout: 'default', permission: 'ai-system-prompts.read' })
|
|
7
7
|
|
|
8
8
|
const route = useRoute()
|
|
9
|
-
const {
|
|
10
|
-
const { fields, schema, groups, state, loading, fetching, fetchError, formRef, selectOptions, selectOptionsLoading, onSubmit, onSaveAndContinue, onSaveAndNew, deleteRecord, deleting } = await useEntityForm({
|
|
9
|
+
const { fields, schema, groups, state, loading, fetching, fetchError, canWrite, pageTitle, formRef, selectOptions, selectOptionsLoading, onSubmit, onSaveAndContinue, onSaveAndNew, deleteRecord, deleting } = await useEntityForm({
|
|
11
10
|
apiEndpoint: '/api/v2/ai-system-prompts',
|
|
12
11
|
routePrefix: '/motor-admin/ai-system-prompts',
|
|
13
12
|
translationPrefix: 'motor-admin.ai_system_prompts',
|
|
@@ -21,13 +20,14 @@ const { fields, schema, groups, state, loading, fetching, fetchError, formRef, s
|
|
|
21
20
|
|
|
22
21
|
<template>
|
|
23
22
|
<FormPage
|
|
24
|
-
:title="
|
|
23
|
+
:title="pageTitle"
|
|
25
24
|
back-route="/motor-admin/ai-system-prompts"
|
|
26
25
|
:loading="fetching"
|
|
27
26
|
:error="fetchError"
|
|
28
27
|
>
|
|
29
28
|
<FormBase
|
|
30
29
|
ref="formRef"
|
|
30
|
+
:disabled="!canWrite"
|
|
31
31
|
v-model:state="state"
|
|
32
32
|
:fields="fields"
|
|
33
33
|
:schema="schema"
|
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
import { categoryFormMeta } from '@motor-cms/ui-core/app/types/generated/form-meta'
|
|
4
4
|
import { categoryFormConfig } from '@motor-cms/ui-core/app/types/config/category'
|
|
5
5
|
|
|
6
|
-
definePageMeta({ layout: 'default', permission: 'categories.
|
|
6
|
+
definePageMeta({ layout: 'default', permission: 'categories.read' })
|
|
7
7
|
|
|
8
8
|
const route = useRoute()
|
|
9
9
|
const { t } = useI18n()
|
|
10
10
|
const treeId = route.params.id as string
|
|
11
11
|
const categoryId = route.params.categoryId as string
|
|
12
12
|
|
|
13
|
-
const { fields, schema, groups, state, loading, fetching, fetchError, formRef, selectOptions, selectOptionsLoading, onSubmit, onSaveAndContinue, onSaveAndNew, deleteRecord, deleting } = await useEntityForm({
|
|
13
|
+
const { fields, schema, groups, state, loading, fetching, fetchError, canWrite, pageTitle, formRef, selectOptions, selectOptionsLoading, onSubmit, onSaveAndContinue, onSaveAndNew, deleteRecord, deleting } = await useEntityForm({
|
|
14
14
|
apiEndpoint: `/api/v2/category-trees/${treeId}/categories`,
|
|
15
15
|
routePrefix: `/motor-admin/category-trees/${treeId}`,
|
|
16
16
|
translationPrefix: 'motor-admin.categories',
|
|
@@ -26,13 +26,14 @@ const { fields, schema, groups, state, loading, fetching, fetchError, formRef, s
|
|
|
26
26
|
|
|
27
27
|
<template>
|
|
28
28
|
<FormPage
|
|
29
|
-
:title="
|
|
29
|
+
:title="pageTitle"
|
|
30
30
|
:back-route="`/motor-admin/category-trees/${treeId}`"
|
|
31
31
|
:loading="fetching"
|
|
32
32
|
:error="fetchError"
|
|
33
33
|
>
|
|
34
34
|
<FormBase
|
|
35
35
|
ref="formRef"
|
|
36
|
+
:disabled="!canWrite"
|
|
36
37
|
v-model:state="state"
|
|
37
38
|
:fields="fields"
|
|
38
39
|
:schema="schema"
|
|
@@ -3,11 +3,10 @@
|
|
|
3
3
|
import { categoryTreeFormMeta } from '@motor-cms/ui-core/app/types/generated/form-meta'
|
|
4
4
|
import { categoryTreeEditFormConfig } from '@motor-cms/ui-core/app/types/config/category-tree'
|
|
5
5
|
|
|
6
|
-
definePageMeta({ layout: 'default', permission: 'category-trees.
|
|
6
|
+
definePageMeta({ layout: 'default', permission: 'category-trees.read' })
|
|
7
7
|
|
|
8
8
|
const route = useRoute()
|
|
9
|
-
const {
|
|
10
|
-
const { fields, schema, groups, state, loading, fetching, fetchError, formRef, onSubmit, onSaveAndContinue, onSaveAndNew, deleteRecord, deleting } = await useEntityForm({
|
|
9
|
+
const { fields, schema, groups, state, loading, fetching, fetchError, canWrite, pageTitle, formRef, onSubmit, onSaveAndContinue, onSaveAndNew, deleteRecord, deleting } = await useEntityForm({
|
|
11
10
|
apiEndpoint: '/api/v2/category-trees',
|
|
12
11
|
routePrefix: '/motor-admin/category-trees',
|
|
13
12
|
translationPrefix: 'motor-admin.category_trees',
|
|
@@ -20,13 +19,14 @@ const { fields, schema, groups, state, loading, fetching, fetchError, formRef, o
|
|
|
20
19
|
|
|
21
20
|
<template>
|
|
22
21
|
<FormPage
|
|
23
|
-
:title="
|
|
22
|
+
:title="pageTitle"
|
|
24
23
|
back-route="/motor-admin/category-trees"
|
|
25
24
|
:loading="fetching"
|
|
26
25
|
:error="fetchError"
|
|
27
26
|
>
|
|
28
27
|
<FormBase
|
|
29
28
|
ref="formRef"
|
|
29
|
+
:disabled="!canWrite"
|
|
30
30
|
v-model:state="state"
|
|
31
31
|
:fields="fields"
|
|
32
32
|
:schema="schema"
|
|
@@ -3,11 +3,10 @@
|
|
|
3
3
|
import { clientFormMeta } from '../../../../types/generated/form-meta'
|
|
4
4
|
import { clientFormConfig } from '@motor-cms/ui-core/app/types/config/client'
|
|
5
5
|
|
|
6
|
-
definePageMeta({ layout: 'default', permission: 'clients.
|
|
6
|
+
definePageMeta({ layout: 'default', permission: 'clients.read' })
|
|
7
7
|
|
|
8
8
|
const route = useRoute()
|
|
9
|
-
const {
|
|
10
|
-
const { fields, schema, groups, state, loading, fetching, fetchError, formRef, onSubmit, onSaveAndContinue, onSaveAndNew, deleteRecord, deleting } = await useEntityForm({
|
|
9
|
+
const { fields, schema, groups, state, loading, fetching, fetchError, canWrite, pageTitle, formRef, onSubmit, onSaveAndContinue, onSaveAndNew, deleteRecord, deleting } = await useEntityForm({
|
|
11
10
|
apiEndpoint: '/api/v2/clients',
|
|
12
11
|
routePrefix: '/motor-admin/clients',
|
|
13
12
|
translationPrefix: 'motor-admin.clients',
|
|
@@ -20,13 +19,14 @@ const { fields, schema, groups, state, loading, fetching, fetchError, formRef, o
|
|
|
20
19
|
|
|
21
20
|
<template>
|
|
22
21
|
<FormPage
|
|
23
|
-
:title="
|
|
22
|
+
:title="pageTitle"
|
|
24
23
|
back-route="/motor-admin/clients"
|
|
25
24
|
:loading="fetching"
|
|
26
25
|
:error="fetchError"
|
|
27
26
|
>
|
|
28
27
|
<FormBase
|
|
29
28
|
ref="formRef"
|
|
29
|
+
:disabled="!canWrite"
|
|
30
30
|
v-model:state="state"
|
|
31
31
|
:fields="fields"
|
|
32
32
|
:schema="schema"
|
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
import { configVariableFormMeta } from '../../../../types/generated/form-meta'
|
|
3
3
|
import { configVariableFormConfig } from '@motor-cms/ui-core/app/types/config/config-variable'
|
|
4
4
|
|
|
5
|
-
definePageMeta({ layout: 'default', permission: 'config-variables.
|
|
5
|
+
definePageMeta({ layout: 'default', permission: 'config-variables.read' })
|
|
6
6
|
|
|
7
7
|
const route = useRoute()
|
|
8
|
-
const {
|
|
9
|
-
const { fields, schema, groups, state, loading, fetching, fetchError, formRef, onSubmit, onSaveAndContinue, onSaveAndNew, deleteRecord, deleting } = await useEntityForm({
|
|
8
|
+
const { fields, schema, groups, state, loading, fetching, fetchError, canWrite, pageTitle, formRef, onSubmit, onSaveAndContinue, onSaveAndNew, deleteRecord, deleting } = await useEntityForm({
|
|
10
9
|
apiEndpoint: '/api/v2/config-variables',
|
|
11
10
|
routePrefix: '/motor-admin/config-variables',
|
|
12
11
|
translationPrefix: 'motor-admin.config_variables',
|
|
@@ -19,13 +18,14 @@ const { fields, schema, groups, state, loading, fetching, fetchError, formRef, o
|
|
|
19
18
|
|
|
20
19
|
<template>
|
|
21
20
|
<FormPage
|
|
22
|
-
:title="
|
|
21
|
+
:title="pageTitle"
|
|
23
22
|
back-route="/motor-admin/config-variables"
|
|
24
23
|
:loading="fetching"
|
|
25
24
|
:error="fetchError"
|
|
26
25
|
>
|
|
27
26
|
<FormBase
|
|
28
27
|
ref="formRef"
|
|
28
|
+
:disabled="!canWrite"
|
|
29
29
|
v-model:state="state"
|
|
30
30
|
:fields="fields"
|
|
31
31
|
:schema="schema"
|
|
@@ -3,12 +3,11 @@
|
|
|
3
3
|
import { domainFormMeta } from '../../../../types/generated/form-meta'
|
|
4
4
|
import { domainFormConfig, domainSelectOptionConfigs, domainProtocolOptions } from '@motor-cms/ui-core/app/types/config/domain'
|
|
5
5
|
|
|
6
|
-
definePageMeta({ layout: 'default', permission: 'domains.
|
|
6
|
+
definePageMeta({ layout: 'default', permission: 'domains.read' })
|
|
7
7
|
|
|
8
8
|
const route = useRoute()
|
|
9
|
-
const { t } = useI18n()
|
|
10
9
|
|
|
11
|
-
const { fields, schema, groups, state, loading, fetching, fetchError, formRef, selectOptions, selectOptionsLoading, onSubmit, onSaveAndContinue, onSaveAndNew, deleteRecord, deleting } = await useEntityForm({
|
|
10
|
+
const { fields, schema, groups, state, loading, fetching, fetchError, canWrite, pageTitle, formRef, selectOptions, selectOptionsLoading, onSubmit, onSaveAndContinue, onSaveAndNew, deleteRecord, deleting } = await useEntityForm({
|
|
12
11
|
apiEndpoint: '/api/v2/domains',
|
|
13
12
|
routePrefix: '/motor-admin/domains',
|
|
14
13
|
translationPrefix: 'motor-admin.domains',
|
|
@@ -27,13 +26,14 @@ const mergedSelectOptions = computed(() => ({
|
|
|
27
26
|
|
|
28
27
|
<template>
|
|
29
28
|
<FormPage
|
|
30
|
-
:title="
|
|
29
|
+
:title="pageTitle"
|
|
31
30
|
back-route="/motor-admin/domains"
|
|
32
31
|
:loading="fetching"
|
|
33
32
|
:error="fetchError"
|
|
34
33
|
>
|
|
35
34
|
<FormBase
|
|
36
35
|
ref="formRef"
|
|
36
|
+
:disabled="!canWrite"
|
|
37
37
|
v-model:state="state"
|
|
38
38
|
:fields="fields"
|
|
39
39
|
:schema="schema"
|
|
@@ -3,11 +3,10 @@
|
|
|
3
3
|
import { emailTemplateFormMeta } from '../../../../types/generated/form-meta'
|
|
4
4
|
import { emailTemplateFormConfig, emailTemplateSelectOptionConfigs } from '@motor-cms/ui-core/app/types/config/email-template'
|
|
5
5
|
|
|
6
|
-
definePageMeta({ layout: 'default', permission: 'email-templates.
|
|
6
|
+
definePageMeta({ layout: 'default', permission: 'email-templates.read' })
|
|
7
7
|
|
|
8
8
|
const route = useRoute()
|
|
9
|
-
const {
|
|
10
|
-
const { fields: rawFields, schema, groups, state, loading, fetching, fetchError, formRef, selectOptions, selectOptionsLoading, onSubmit, onSaveAndContinue, onSaveAndNew, deleteRecord, deleting } = await useEntityForm({
|
|
9
|
+
const { fields: rawFields, schema, groups, state, loading, fetching, fetchError, canWrite, pageTitle, formRef, selectOptions, selectOptionsLoading, onSubmit, onSaveAndContinue, onSaveAndNew, deleteRecord, deleting } = await useEntityForm({
|
|
11
10
|
apiEndpoint: '/api/v2/email-templates',
|
|
12
11
|
routePrefix: '/motor-admin/email-templates',
|
|
13
12
|
translationPrefix: 'motor-admin.email_templates',
|
|
@@ -29,13 +28,14 @@ if (bodyHtmlField) {
|
|
|
29
28
|
|
|
30
29
|
<template>
|
|
31
30
|
<FormPage
|
|
32
|
-
:title="
|
|
31
|
+
:title="pageTitle"
|
|
33
32
|
back-route="/motor-admin/email-templates"
|
|
34
33
|
:loading="fetching"
|
|
35
34
|
:error="fetchError"
|
|
36
35
|
>
|
|
37
36
|
<FormBase
|
|
38
37
|
ref="formRef"
|
|
38
|
+
:disabled="!canWrite"
|
|
39
39
|
v-model:state="state"
|
|
40
40
|
:fields="fields"
|
|
41
41
|
:schema="schema"
|
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
import { languageFormMeta } from '../../../../types/generated/form-meta'
|
|
3
3
|
import { languageFormConfig } from '@motor-cms/ui-core/app/types/config/language'
|
|
4
4
|
|
|
5
|
-
definePageMeta({ layout: 'default', permission: 'languages.
|
|
5
|
+
definePageMeta({ layout: 'default', permission: 'languages.read' })
|
|
6
6
|
|
|
7
7
|
const route = useRoute()
|
|
8
|
-
const {
|
|
9
|
-
const { fields, schema, groups, state, loading, fetching, fetchError, formRef, onSubmit, onSaveAndContinue, onSaveAndNew, deleteRecord, deleting } = await useEntityForm({
|
|
8
|
+
const { fields, schema, groups, state, loading, fetching, fetchError, canWrite, pageTitle, formRef, onSubmit, onSaveAndContinue, onSaveAndNew, deleteRecord, deleting } = await useEntityForm({
|
|
10
9
|
apiEndpoint: '/api/v2/languages',
|
|
11
10
|
routePrefix: '/motor-admin/languages',
|
|
12
11
|
translationPrefix: 'motor-admin.languages',
|
|
@@ -19,13 +18,14 @@ const { fields, schema, groups, state, loading, fetching, fetchError, formRef, o
|
|
|
19
18
|
|
|
20
19
|
<template>
|
|
21
20
|
<FormPage
|
|
22
|
-
:title="
|
|
21
|
+
:title="pageTitle"
|
|
23
22
|
back-route="/motor-admin/languages"
|
|
24
23
|
:loading="fetching"
|
|
25
24
|
:error="fetchError"
|
|
26
25
|
>
|
|
27
26
|
<FormBase
|
|
28
27
|
ref="formRef"
|
|
28
|
+
:disabled="!canWrite"
|
|
29
29
|
v-model:state="state"
|
|
30
30
|
:fields="fields"
|
|
31
31
|
:schema="schema"
|
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
import { permissionGroupFormMeta } from '../../../../types/generated/form-meta'
|
|
3
3
|
import { permissionGroupFormConfig, permissionGroupSelectOptionConfigs, permissionGroupExtraFields } from '@motor-cms/ui-core/app/types/config/permission-group'
|
|
4
4
|
|
|
5
|
-
definePageMeta({ layout: 'default', permission: 'permission-groups.
|
|
5
|
+
definePageMeta({ layout: 'default', permission: 'permission-groups.read' })
|
|
6
6
|
|
|
7
7
|
const route = useRoute()
|
|
8
|
-
const {
|
|
9
|
-
const { fields, schema, groups, state, loading, fetching, fetchError, formRef, selectOptions, selectOptionsLoading, onSubmit, onSaveAndContinue, onSaveAndNew, deleteRecord, deleting } = await useEntityForm({
|
|
8
|
+
const { fields, schema, groups, state, loading, fetching, fetchError, canWrite, pageTitle, formRef, selectOptions, selectOptionsLoading, onSubmit, onSaveAndContinue, onSaveAndNew, deleteRecord, deleting } = await useEntityForm({
|
|
10
9
|
apiEndpoint: '/api/v2/permission-groups',
|
|
11
10
|
routePrefix: '/motor-admin/permission-groups',
|
|
12
11
|
translationPrefix: 'motor-admin.permissions',
|
|
@@ -22,13 +21,14 @@ const { fields, schema, groups, state, loading, fetching, fetchError, formRef, s
|
|
|
22
21
|
|
|
23
22
|
<template>
|
|
24
23
|
<FormPage
|
|
25
|
-
:title="
|
|
24
|
+
:title="pageTitle"
|
|
26
25
|
back-route="/motor-admin/permission-groups"
|
|
27
26
|
:loading="fetching"
|
|
28
27
|
:error="fetchError"
|
|
29
28
|
>
|
|
30
29
|
<FormBase
|
|
31
30
|
ref="formRef"
|
|
31
|
+
:disabled="!canWrite"
|
|
32
32
|
v-model:state="state"
|
|
33
33
|
:fields="fields"
|
|
34
34
|
:schema="schema"
|
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
import { roleFormMeta } from '../../../../types/generated/form-meta'
|
|
3
3
|
import { roleFormConfig, roleSelectOptionConfigs } from '@motor-cms/ui-core/app/types/config/role'
|
|
4
4
|
|
|
5
|
-
definePageMeta({ layout: 'default', permission: 'roles.
|
|
5
|
+
definePageMeta({ layout: 'default', permission: 'roles.read' })
|
|
6
6
|
|
|
7
7
|
const route = useRoute()
|
|
8
|
-
const {
|
|
9
|
-
const { fields, schema, groups, state, loading, fetching, fetchError, formRef, selectOptions, selectOptionsLoading, onSubmit, onSaveAndContinue, onSaveAndNew, deleteRecord, deleting } = await useEntityForm({
|
|
8
|
+
const { fields, schema, groups, state, loading, fetching, fetchError, canWrite, pageTitle, formRef, selectOptions, selectOptionsLoading, onSubmit, onSaveAndContinue, onSaveAndNew, deleteRecord, deleting } = await useEntityForm({
|
|
10
9
|
apiEndpoint: '/api/v2/roles',
|
|
11
10
|
routePrefix: '/motor-admin/roles',
|
|
12
11
|
translationPrefix: 'motor-admin.roles',
|
|
@@ -20,13 +19,14 @@ const { fields, schema, groups, state, loading, fetching, fetchError, formRef, s
|
|
|
20
19
|
|
|
21
20
|
<template>
|
|
22
21
|
<FormPage
|
|
23
|
-
:title="
|
|
22
|
+
:title="pageTitle"
|
|
24
23
|
back-route="/motor-admin/roles"
|
|
25
24
|
:loading="fetching"
|
|
26
25
|
:error="fetchError"
|
|
27
26
|
>
|
|
28
27
|
<FormBase
|
|
29
28
|
ref="formRef"
|
|
29
|
+
:disabled="!canWrite"
|
|
30
30
|
v-model:state="state"
|
|
31
31
|
:fields="fields"
|
|
32
32
|
:schema="schema"
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
import { userFormMeta } from '../../../../types/generated/form-meta'
|
|
4
4
|
import { userEditFormConfig, userSelectOptionConfigs, userEditExtraFields } from '@motor-cms/ui-core/app/types/config/user'
|
|
5
5
|
|
|
6
|
-
definePageMeta({ layout: 'default', permission: 'users.
|
|
6
|
+
definePageMeta({ layout: 'default', permission: 'users.read' })
|
|
7
7
|
|
|
8
8
|
const route = useRoute()
|
|
9
9
|
const { t } = useI18n()
|
|
10
10
|
|
|
11
|
-
const { fields: rawFields, schema, groups, state, loading, fetching, fetchError, formRef, selectOptions, selectOptionsLoading, onSubmit, onSaveAndContinue, onSaveAndNew, deleteRecord, deleting } = await useEntityForm({
|
|
11
|
+
const { fields: rawFields, schema, groups, state, loading, fetching, fetchError, canWrite, pageTitle, formRef, selectOptions, selectOptionsLoading, onSubmit, onSaveAndContinue, onSaveAndNew, deleteRecord, deleting } = await useEntityForm({
|
|
12
12
|
apiEndpoint: '/api/v2/users',
|
|
13
13
|
routePrefix: '/motor-admin/users',
|
|
14
14
|
translationPrefix: 'motor-admin.users',
|
|
@@ -56,13 +56,14 @@ watchEffect(() => {
|
|
|
56
56
|
|
|
57
57
|
<template>
|
|
58
58
|
<FormPage
|
|
59
|
-
:title="
|
|
59
|
+
:title="pageTitle"
|
|
60
60
|
back-route="/motor-admin/users"
|
|
61
61
|
:loading="fetching"
|
|
62
62
|
:error="fetchError"
|
|
63
63
|
>
|
|
64
64
|
<FormBase
|
|
65
65
|
ref="formRef"
|
|
66
|
+
:disabled="!canWrite"
|
|
66
67
|
v-model:state="state"
|
|
67
68
|
:fields="fields"
|
|
68
69
|
:schema="refinedSchema"
|
package/app/pages/search.vue
CHANGED
|
@@ -4,6 +4,11 @@ import type { SearchGridRow } from '@motor-cms/ui-core/app/types/search'
|
|
|
4
4
|
import type { PaginatedResponse, PaginationMeta } from '@motor-cms/ui-core/app/types/grid'
|
|
5
5
|
import { watchDebounced } from '@vueuse/core'
|
|
6
6
|
|
|
7
|
+
definePageMeta({
|
|
8
|
+
layout: 'default',
|
|
9
|
+
permission: 'search.read'
|
|
10
|
+
})
|
|
11
|
+
|
|
7
12
|
const { t } = useI18n()
|
|
8
13
|
const route = useRoute()
|
|
9
14
|
const router = useRouter()
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@motor-cms/ui-admin",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./nuxt.config.ts",
|
|
6
6
|
"files": [
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"@vueuse/core": "^14.0.0",
|
|
18
18
|
"sortablejs": "^1.15.0",
|
|
19
19
|
"zod": "^4.0.0",
|
|
20
|
-
"@motor-cms/ui-core": "1.
|
|
20
|
+
"@motor-cms/ui-core": "1.7.0"
|
|
21
21
|
},
|
|
22
22
|
"peerDependencies": {
|
|
23
23
|
"nuxt": "^4.0.0",
|