@tager/admin-administrators 1.0.0 → 1.0.1
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/dist/dev/main.d.ts +3 -3
- package/dist/index.mjs +117 -52
- package/dist/locales/en.d.ts +4 -0
- package/dist/services/requests.d.ts +4 -0
- package/dist/typings/model.d.ts +2 -0
- package/dist/views/AdminForm/AdminForm.helpers.d.ts +3 -2
- package/dist/views/AdminForm/AdminForm.vue.d.ts +2661 -1
- package/package.json +5 -4
- package/src/dev/main.ts +25 -21
- package/src/locales/en.ts +5 -0
- package/src/locales/ru.ts +43 -39
- package/src/services/requests.ts +13 -0
- package/src/typings/model.ts +3 -0
- package/src/views/AdminForm/AdminForm.helpers.ts +10 -3
- package/src/views/AdminForm/AdminForm.vue +183 -93
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tager/admin-administrators",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "dist/index.umd.js",
|
|
6
6
|
"module": "dist/index.esm.js",
|
|
@@ -33,9 +33,9 @@
|
|
|
33
33
|
"@babel/eslint-parser": "^7.17.0",
|
|
34
34
|
"@rushstack/eslint-patch": "^1.1.2",
|
|
35
35
|
"@tager/admin-dynamic-field": "^1.0.0",
|
|
36
|
-
"@tager/admin-layout": "^1.0.
|
|
37
|
-
"@tager/admin-services": "^1.
|
|
38
|
-
"@tager/admin-ui": "^1.0.
|
|
36
|
+
"@tager/admin-layout": "^1.0.6",
|
|
37
|
+
"@tager/admin-services": "^1.1.3",
|
|
38
|
+
"@tager/admin-ui": "^1.0.7",
|
|
39
39
|
"@types/lodash.isequal": "^4.5.6",
|
|
40
40
|
"@types/lodash.pick": "^4.4.7",
|
|
41
41
|
"@types/node": "16.x",
|
|
@@ -54,6 +54,7 @@
|
|
|
54
54
|
"eslint-plugin-import": "^2.26.0",
|
|
55
55
|
"eslint-plugin-prettier": "^4.0.0",
|
|
56
56
|
"eslint-plugin-vue": "^8.7.1",
|
|
57
|
+
"pinia": "^2.0.18",
|
|
57
58
|
"sass": "^1.51.0",
|
|
58
59
|
"sass-loader": "^12.6.0",
|
|
59
60
|
"typescript": "^4.6.3",
|
package/src/dev/main.ts
CHANGED
|
@@ -1,22 +1,24 @@
|
|
|
1
|
-
import { createApp } from
|
|
1
|
+
import { createApp } from 'vue';
|
|
2
2
|
|
|
3
|
-
import { configStore, i18n, i18nPlugin } from
|
|
4
|
-
import { createRouter } from
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
3
|
+
import { configStore, i18n, i18nPlugin } from '@tager/admin-services';
|
|
4
|
+
import { createRouter } from '@tager/admin-layout';
|
|
5
|
+
import '@tager/admin-ui/css';
|
|
6
|
+
import '@tager/admin-layout/css';
|
|
7
|
+
import '@tager/admin-dynamic-field/css';
|
|
8
8
|
|
|
9
|
-
import { applyTranslations } from
|
|
9
|
+
import { applyTranslations } from '../locales/apply';
|
|
10
10
|
import {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
} from
|
|
11
|
+
ADMIN_FORM_ROUTE,
|
|
12
|
+
ADMIN_LIST_ROUTE,
|
|
13
|
+
ROLE_FORM_ROUTE,
|
|
14
|
+
ROLE_LIST_ROUTE,
|
|
15
|
+
} from '../constants/routes';
|
|
16
16
|
|
|
17
|
-
import { OZITAG_CONFIG } from
|
|
18
|
-
import App from
|
|
19
|
-
import { populateEnvironment } from
|
|
17
|
+
import { OZITAG_CONFIG } from './config';
|
|
18
|
+
import App from './App.vue';
|
|
19
|
+
import { populateEnvironment } from './env';
|
|
20
|
+
|
|
21
|
+
import { createPinia } from 'pinia';
|
|
20
22
|
|
|
21
23
|
populateEnvironment();
|
|
22
24
|
|
|
@@ -25,22 +27,24 @@ configStore.setConfig(OZITAG_CONFIG);
|
|
|
25
27
|
const router = createRouter(
|
|
26
28
|
{
|
|
27
29
|
routes: [
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
ADMIN_LIST_ROUTE,
|
|
31
|
+
ADMIN_FORM_ROUTE,
|
|
32
|
+
ROLE_LIST_ROUTE,
|
|
33
|
+
ROLE_FORM_ROUTE,
|
|
32
34
|
],
|
|
33
35
|
},
|
|
34
36
|
{ useTitleSync: false }
|
|
35
37
|
);
|
|
36
38
|
|
|
37
39
|
const app = createApp(App);
|
|
40
|
+
const pinia = createPinia();
|
|
38
41
|
|
|
39
42
|
app.use(router);
|
|
40
43
|
app.use(i18nPlugin);
|
|
44
|
+
app.use(pinia);
|
|
41
45
|
|
|
42
46
|
applyTranslations();
|
|
43
47
|
|
|
44
|
-
i18n.init({ debug: true, lng:
|
|
45
|
-
app.mount(
|
|
48
|
+
i18n.init({ debug: true, lng: 'ru' }).then(() => {
|
|
49
|
+
app.mount('#app');
|
|
46
50
|
});
|
package/src/locales/en.ts
CHANGED
package/src/locales/ru.ts
CHANGED
|
@@ -1,42 +1,46 @@
|
|
|
1
|
-
import {EN} from './en';
|
|
1
|
+
import { EN } from './en';
|
|
2
2
|
|
|
3
3
|
export const RU: typeof EN = {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
4
|
+
home: 'Главная',
|
|
5
|
+
administrators: 'Администраторы',
|
|
6
|
+
role: 'Роль',
|
|
7
|
+
roles: 'Роли',
|
|
8
|
+
admin: 'Админ',
|
|
9
|
+
admins: 'Админы',
|
|
10
|
+
createRole: 'Создать роль',
|
|
11
|
+
createAdmin: 'Создать админа',
|
|
12
|
+
createAdministrator: 'Создать администратора',
|
|
13
|
+
edit: 'Редактировать',
|
|
14
|
+
delete: 'Удалить',
|
|
15
|
+
email: 'Электронная почта',
|
|
16
|
+
actions: 'Действия',
|
|
17
|
+
updateRole: 'Обновить роль',
|
|
18
|
+
updateAdmin: 'Обновить администратора',
|
|
19
|
+
password: 'Пароль',
|
|
20
|
+
newPassword: 'Новый пароль',
|
|
21
|
+
name: 'Имя',
|
|
22
|
+
success: 'Успех',
|
|
23
|
+
adminSuccessfullyCreated: 'Админ успешно создан',
|
|
24
|
+
adminSuccessfullyUpdated: 'Админ успешно обновлен',
|
|
25
|
+
error: 'Ошибка',
|
|
26
|
+
adminCreationError: 'Ошибка создания администратора',
|
|
27
|
+
adminUpdateError: 'Ошибка обновления администратора',
|
|
28
|
+
listOfRoles: 'Список ролей',
|
|
29
|
+
addRole: 'Добавить роль',
|
|
30
|
+
noPrivileges: 'Без привилегий',
|
|
31
|
+
privileges: 'Привилегии',
|
|
32
|
+
all: 'Все',
|
|
33
|
+
roleSuccessfullyCreated: 'Роль успешно создана',
|
|
34
|
+
roleSuccessfullyUpdate: 'Роль успешно обновлена',
|
|
35
|
+
roleCreationError: 'Ошибка создания роли',
|
|
36
|
+
roleUpdateError: 'Ошибка обновления роли',
|
|
37
|
+
adminList: 'Список администраторов',
|
|
38
|
+
adminForm: 'Форма администратора',
|
|
39
|
+
roleList: 'Список ролей',
|
|
40
|
+
roleForm: 'Форма роли',
|
|
41
|
+
andMorePrivilege: 'и еще {{count}} привилегий...',
|
|
42
|
+
tabs: {
|
|
43
|
+
general: 'Основное',
|
|
44
|
+
params: 'Параметры',
|
|
45
|
+
},
|
|
42
46
|
};
|
package/src/services/requests.ts
CHANGED
|
@@ -1,9 +1,20 @@
|
|
|
1
1
|
import { request, ResponseBody } from '@tager/admin-services';
|
|
2
|
+
import {
|
|
3
|
+
FieldConfigUnion,
|
|
4
|
+
FieldShortType,
|
|
5
|
+
OutgoingValueUnion,
|
|
6
|
+
} from '@tager/admin-dynamic-field';
|
|
2
7
|
|
|
3
8
|
import { AdminType, RoleType, ScopeGroupsData } from '../typings/model';
|
|
4
9
|
|
|
5
10
|
type SuccessData = { success: boolean };
|
|
6
11
|
|
|
12
|
+
/** Fields */
|
|
13
|
+
|
|
14
|
+
export function getFieldList(): Promise<ResponseBody<Array<FieldConfigUnion>>> {
|
|
15
|
+
return request.get({ path: '/admin/admins/fields' });
|
|
16
|
+
}
|
|
17
|
+
|
|
7
18
|
/** Roles */
|
|
8
19
|
|
|
9
20
|
export function getRoleList(): Promise<ResponseBody<Array<RoleType>>> {
|
|
@@ -63,6 +74,8 @@ export type AdminUpdatePayload = {
|
|
|
63
74
|
email: string;
|
|
64
75
|
roles: Array<number>;
|
|
65
76
|
password: string;
|
|
77
|
+
|
|
78
|
+
params: Array<FieldShortType<OutgoingValueUnion>>;
|
|
66
79
|
};
|
|
67
80
|
|
|
68
81
|
export type AdminCreationPayload = AdminUpdatePayload;
|
package/src/typings/model.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { FieldShortType, IncomingValueUnion } from '@tager/admin-dynamic-field';
|
|
2
|
+
|
|
1
3
|
export type ScopeType = {
|
|
2
4
|
readonly value: string;
|
|
3
5
|
readonly label: string;
|
|
@@ -25,4 +27,5 @@ export type AdminType = {
|
|
|
25
27
|
readonly roles: Array<RoleType>;
|
|
26
28
|
readonly isSelf: boolean;
|
|
27
29
|
readonly isSuperAdmin: boolean;
|
|
30
|
+
readonly params: Array<FieldShortType<IncomingValueUnion>>;
|
|
28
31
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Nullable, createId } from '@tager/admin-services';
|
|
2
2
|
import { OptionType } from '@tager/admin-ui';
|
|
3
|
+
import { FieldUnion, universalFieldUtils } from '@tager/admin-dynamic-field';
|
|
3
4
|
|
|
4
5
|
import { AdminType, RoleType } from '../../typings/model';
|
|
5
6
|
import {
|
|
@@ -39,21 +40,27 @@ export function convertAdminToFormValues(
|
|
|
39
40
|
}
|
|
40
41
|
|
|
41
42
|
export function convertFormValuesToAdminUpdatePayload(
|
|
42
|
-
values: FormValues
|
|
43
|
+
values: FormValues,
|
|
44
|
+
paramsValues: Array<FieldUnion> = []
|
|
43
45
|
): AdminUpdatePayload {
|
|
44
46
|
return {
|
|
45
47
|
name: values.name,
|
|
46
48
|
email: values.email,
|
|
47
49
|
roles: values.roles.map((role) => role.value),
|
|
48
50
|
password: values.password,
|
|
51
|
+
params: paramsValues.map((field) => ({
|
|
52
|
+
value: universalFieldUtils.getOutgoingValue(field),
|
|
53
|
+
name: field.config.name,
|
|
54
|
+
})),
|
|
49
55
|
};
|
|
50
56
|
}
|
|
51
57
|
|
|
52
58
|
export function convertFormValuesToAdminCreationPayload(
|
|
53
|
-
values: FormValues
|
|
59
|
+
values: FormValues,
|
|
60
|
+
paramsValues: Array<FieldUnion> = []
|
|
54
61
|
): AdminCreationPayload {
|
|
55
62
|
return {
|
|
56
|
-
...convertFormValuesToAdminUpdatePayload(values),
|
|
63
|
+
...convertFormValuesToAdminUpdatePayload(values, paramsValues),
|
|
57
64
|
};
|
|
58
65
|
}
|
|
59
66
|
|
|
@@ -1,44 +1,56 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<Page :title="pageTitle" :is-content-loading="isContentLoading">
|
|
3
3
|
<form novalidate @submit.prevent>
|
|
4
|
+
<TabList v-model:tab-id="selectedTabId" :tab-list="tabList" />
|
|
5
|
+
|
|
6
|
+
<template v-if="selectedTabId === 'general'">
|
|
4
7
|
<FormField
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
v-model:value="values.name"
|
|
9
|
+
name="name"
|
|
10
|
+
:error="errors.name"
|
|
11
|
+
:label="$i18n.t('administrators:name')"
|
|
9
12
|
/>
|
|
10
13
|
<FormField
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
v-model:value="values.email"
|
|
15
|
+
name="email"
|
|
16
|
+
:error="errors.email"
|
|
17
|
+
:label="$i18n.t('administrators:email')"
|
|
15
18
|
/>
|
|
16
19
|
<FormFieldMultiSelect
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
v-model:selected-options="values.roles"
|
|
21
|
+
name="roles"
|
|
22
|
+
:label="$i18n.t('administrators:roles')"
|
|
23
|
+
:options="roleOptionList"
|
|
24
|
+
:error="errors.roles"
|
|
22
25
|
/>
|
|
23
26
|
<FormField
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
v-model:value="values.password"
|
|
28
|
+
name="password"
|
|
29
|
+
:error="errors.password"
|
|
30
|
+
:label="
|
|
28
31
|
isCreation
|
|
29
32
|
? $i18n.t('administrators:password')
|
|
30
33
|
: $i18n.t('administrators:newPassword')
|
|
31
34
|
"
|
|
32
35
|
/>
|
|
36
|
+
</template>
|
|
37
|
+
|
|
38
|
+
<template v-if="selectedTabId === 'params'">
|
|
39
|
+
<DynamicField
|
|
40
|
+
v-for="field of templateValues"
|
|
41
|
+
:key="field.config.name"
|
|
42
|
+
:field="field"
|
|
43
|
+
/>
|
|
44
|
+
</template>
|
|
33
45
|
</form>
|
|
34
46
|
|
|
35
47
|
<template #footer>
|
|
36
48
|
<FormFooter
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
49
|
+
:back-href="backButtonUrl"
|
|
50
|
+
:is-submitting="isSubmitting"
|
|
51
|
+
:is-creation="isCreation"
|
|
52
|
+
:can-create-another="isCreation"
|
|
53
|
+
@submit="submitForm"
|
|
42
54
|
/>
|
|
43
55
|
</template>
|
|
44
56
|
</Page>
|
|
@@ -53,26 +65,45 @@ import {
|
|
|
53
65
|
SetupContext,
|
|
54
66
|
watch,
|
|
55
67
|
} from 'vue';
|
|
68
|
+
import { useRoute, useRouter } from 'vue-router';
|
|
56
69
|
|
|
57
|
-
import {Page} from
|
|
58
|
-
|
|
70
|
+
import { Page } from '@tager/admin-layout';
|
|
59
71
|
import {
|
|
60
|
-
convertRequestErrorToMap,
|
|
72
|
+
convertRequestErrorToMap,
|
|
73
|
+
navigateBack,
|
|
74
|
+
notEmpty,
|
|
61
75
|
Nullable,
|
|
62
|
-
useResource,
|
|
76
|
+
useResource,
|
|
77
|
+
useToast,
|
|
63
78
|
} from '@tager/admin-services';
|
|
64
|
-
import {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
79
|
+
import {
|
|
80
|
+
OptionType,
|
|
81
|
+
FormFooter,
|
|
82
|
+
TagerFormSubmitEvent,
|
|
83
|
+
FormField,
|
|
84
|
+
FormFieldMultiSelect,
|
|
85
|
+
TabType,
|
|
86
|
+
TabList,
|
|
87
|
+
} from '@tager/admin-ui';
|
|
88
|
+
import { useI18n } from '@tager/admin-services';
|
|
89
|
+
import {
|
|
90
|
+
DynamicField,
|
|
91
|
+
FieldConfigUnion,
|
|
92
|
+
FieldShortType,
|
|
93
|
+
FieldUnion,
|
|
94
|
+
IncomingValueUnion,
|
|
95
|
+
universalFieldUtils,
|
|
96
|
+
} from '@tager/admin-dynamic-field';
|
|
97
|
+
|
|
98
|
+
import { AdminType, RoleType } from '../../typings/model';
|
|
69
99
|
import {
|
|
70
100
|
createAdmin,
|
|
71
101
|
getAdmin,
|
|
102
|
+
getFieldList,
|
|
72
103
|
getRoleList,
|
|
73
104
|
updateAdmin,
|
|
74
105
|
} from '../../services/requests';
|
|
75
|
-
import {getAdminFormUrl, getAdminListUrl
|
|
106
|
+
import { getAdminFormUrl, getAdminListUrl } from '../../utils/paths';
|
|
76
107
|
|
|
77
108
|
import {
|
|
78
109
|
convertFormValuesToAdminCreationPayload,
|
|
@@ -81,13 +112,19 @@ import {
|
|
|
81
112
|
convertRoleListToOptions,
|
|
82
113
|
FormValues,
|
|
83
114
|
} from './AdminForm.helpers';
|
|
84
|
-
import {useRoute, useRouter} from "vue-router";
|
|
85
115
|
|
|
86
116
|
export default defineComponent({
|
|
87
117
|
name: 'AdminForm',
|
|
88
|
-
components: {
|
|
118
|
+
components: {
|
|
119
|
+
DynamicField,
|
|
120
|
+
TabList,
|
|
121
|
+
Page,
|
|
122
|
+
FormFooter,
|
|
123
|
+
FormField,
|
|
124
|
+
FormFieldMultiSelect,
|
|
125
|
+
},
|
|
89
126
|
setup() {
|
|
90
|
-
const {t} = useI18n();
|
|
127
|
+
const { t } = useI18n();
|
|
91
128
|
|
|
92
129
|
const route = useRoute();
|
|
93
130
|
const router = useRouter();
|
|
@@ -95,9 +132,11 @@ export default defineComponent({
|
|
|
95
132
|
|
|
96
133
|
const adminId = computed(() => route.params.adminId as string | number);
|
|
97
134
|
|
|
98
|
-
const isCreation = computed(() => adminId.value ===
|
|
135
|
+
const isCreation = computed(() => adminId.value === 'create');
|
|
99
136
|
|
|
100
|
-
const [fetchAdmin, {data: admin, loading: isAdminLoading}] = useResource<
|
|
137
|
+
const [fetchAdmin, { data: admin, loading: isAdminLoading }] = useResource<
|
|
138
|
+
Nullable<AdminType>
|
|
139
|
+
>({
|
|
101
140
|
fetchResource: () => getAdmin(adminId.value),
|
|
102
141
|
initialValue: null,
|
|
103
142
|
resourceName: 'Admin',
|
|
@@ -105,29 +144,35 @@ export default defineComponent({
|
|
|
105
144
|
|
|
106
145
|
/** Fetch role list */
|
|
107
146
|
|
|
108
|
-
const [
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
}
|
|
147
|
+
const [fetchRoleList, { data: roleList, loading: isRoleListLoading }] =
|
|
148
|
+
useResource<Array<RoleType>>({
|
|
149
|
+
fetchResource: getRoleList,
|
|
150
|
+
initialValue: [],
|
|
151
|
+
resourceName: 'Role List',
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
const [fetchFieldList, { data: fieldList, loading: isFieldListLoading }] =
|
|
155
|
+
useResource<Array<FieldConfigUnion>>({
|
|
156
|
+
fetchResource: getFieldList,
|
|
157
|
+
initialValue: [],
|
|
158
|
+
resourceName: 'Field List',
|
|
159
|
+
});
|
|
116
160
|
|
|
117
161
|
onMounted(() => {
|
|
118
162
|
fetchRoleList();
|
|
163
|
+
fetchFieldList();
|
|
164
|
+
updateTemplateValues();
|
|
119
165
|
if (isCreation.value) return;
|
|
120
|
-
|
|
121
166
|
fetchAdmin();
|
|
122
167
|
});
|
|
123
168
|
|
|
124
169
|
/** Role Options */
|
|
125
170
|
const roleOptionList = computed<Array<OptionType<number>>>(() =>
|
|
126
|
-
|
|
171
|
+
convertRoleListToOptions(roleList.value)
|
|
127
172
|
);
|
|
128
173
|
|
|
129
174
|
const values = ref<FormValues>(
|
|
130
|
-
|
|
175
|
+
convertAdminToFormValues(admin.value, roleOptionList.value)
|
|
131
176
|
);
|
|
132
177
|
|
|
133
178
|
const errors = ref<Record<string, string>>({});
|
|
@@ -135,8 +180,8 @@ export default defineComponent({
|
|
|
135
180
|
|
|
136
181
|
watch([admin, roleOptionList], () => {
|
|
137
182
|
values.value = convertAdminToFormValues(
|
|
138
|
-
|
|
139
|
-
|
|
183
|
+
admin.value,
|
|
184
|
+
roleOptionList.value
|
|
140
185
|
);
|
|
141
186
|
});
|
|
142
187
|
|
|
@@ -146,65 +191,107 @@ export default defineComponent({
|
|
|
146
191
|
if (admin.value && admin.value.isSelf) return;
|
|
147
192
|
|
|
148
193
|
const creationBody = convertFormValuesToAdminCreationPayload(
|
|
149
|
-
|
|
194
|
+
values.value,
|
|
195
|
+
templateValues.value
|
|
150
196
|
);
|
|
151
197
|
|
|
152
|
-
const updateBody = convertFormValuesToAdminUpdatePayload(
|
|
198
|
+
const updateBody = convertFormValuesToAdminUpdatePayload(
|
|
199
|
+
values.value,
|
|
200
|
+
templateValues.value
|
|
201
|
+
);
|
|
153
202
|
|
|
154
203
|
const requestPromise = isCreation.value
|
|
155
|
-
|
|
156
|
-
|
|
204
|
+
? createAdmin(creationBody)
|
|
205
|
+
: updateAdmin(adminId.value, updateBody);
|
|
157
206
|
|
|
158
207
|
requestPromise
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
});
|
|
192
|
-
})
|
|
193
|
-
.finally(() => {
|
|
194
|
-
isSubmitting.value = false;
|
|
208
|
+
.then(({ data }) => {
|
|
209
|
+
errors.value = {};
|
|
210
|
+
|
|
211
|
+
if (event.type === 'create') {
|
|
212
|
+
router.push(getAdminFormUrl({ adminId: data.id }));
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
if (event.type === 'create_exit' || event.type === 'save_exit') {
|
|
216
|
+
navigateBack(router, getAdminListUrl());
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
if (event.type === 'create_create-another') {
|
|
220
|
+
values.value = convertAdminToFormValues(null, roleOptionList.value);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
toast.show({
|
|
224
|
+
variant: 'success',
|
|
225
|
+
title: t('administrators:success'),
|
|
226
|
+
body: isCreation.value
|
|
227
|
+
? t('administrators:adminSuccessfullyCreated')
|
|
228
|
+
: t('administrators:adminSuccessfullyUpdated'),
|
|
229
|
+
});
|
|
230
|
+
})
|
|
231
|
+
.catch((error) => {
|
|
232
|
+
console.error(error);
|
|
233
|
+
errors.value = convertRequestErrorToMap(error);
|
|
234
|
+
toast.show({
|
|
235
|
+
variant: 'danger',
|
|
236
|
+
title: t('administrators:error'),
|
|
237
|
+
body: isCreation.value
|
|
238
|
+
? t('administrators:adminCreationError')
|
|
239
|
+
: t('administrators:adminUpdateError'),
|
|
195
240
|
});
|
|
241
|
+
})
|
|
242
|
+
.finally(() => {
|
|
243
|
+
isSubmitting.value = false;
|
|
244
|
+
});
|
|
196
245
|
}
|
|
197
246
|
|
|
198
247
|
const pageTitle = computed<string>(() => {
|
|
199
248
|
return isCreation.value
|
|
200
|
-
|
|
201
|
-
|
|
249
|
+
? t('administrators:createAdmin')
|
|
250
|
+
: `${t('administrators:updateAdmin')} "${values.value.name}"`;
|
|
202
251
|
});
|
|
203
252
|
|
|
204
253
|
const isContentLoading = computed<boolean>(
|
|
205
|
-
|
|
254
|
+
() =>
|
|
255
|
+
isAdminLoading.value ||
|
|
256
|
+
isRoleListLoading.value ||
|
|
257
|
+
isFieldListLoading.value
|
|
206
258
|
);
|
|
207
259
|
|
|
260
|
+
/** Tabs */
|
|
261
|
+
|
|
262
|
+
const shouldDisplayParamsTab = computed<boolean>(
|
|
263
|
+
() => fieldList.value.length > 0
|
|
264
|
+
);
|
|
265
|
+
|
|
266
|
+
const tabList = computed<Array<TabType>>(() => {
|
|
267
|
+
return [
|
|
268
|
+
{ id: 'general', label: t('administrators:tabs.general') },
|
|
269
|
+
shouldDisplayParamsTab.value
|
|
270
|
+
? { id: 'params', label: t('administrators:tabs.params') }
|
|
271
|
+
: null,
|
|
272
|
+
].filter(notEmpty);
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
const selectedTabId = ref<string>(tabList.value[0].id);
|
|
276
|
+
|
|
277
|
+
const templateValues = ref<Array<FieldUnion>>([]);
|
|
278
|
+
|
|
279
|
+
function updateTemplateValues() {
|
|
280
|
+
const incomingFieldList: Array<FieldShortType<IncomingValueUnion>> =
|
|
281
|
+
admin.value?.params ?? [];
|
|
282
|
+
|
|
283
|
+
templateValues.value = fieldList.value.map((fieldConfig, index) =>
|
|
284
|
+
universalFieldUtils.createFormField(
|
|
285
|
+
fieldConfig,
|
|
286
|
+
incomingFieldList[index]?.value
|
|
287
|
+
)
|
|
288
|
+
);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
watch([admin, fieldList], () => {
|
|
292
|
+
updateTemplateValues();
|
|
293
|
+
});
|
|
294
|
+
|
|
208
295
|
return {
|
|
209
296
|
t,
|
|
210
297
|
backButtonUrl: getAdminListUrl(),
|
|
@@ -217,6 +304,9 @@ export default defineComponent({
|
|
|
217
304
|
pageTitle,
|
|
218
305
|
isCreation,
|
|
219
306
|
roleOptionList,
|
|
307
|
+
tabList,
|
|
308
|
+
selectedTabId,
|
|
309
|
+
templateValues,
|
|
220
310
|
};
|
|
221
311
|
},
|
|
222
312
|
});
|