diff --git a/src/api/manage/api.management.ts b/src/api/manage/api.management.ts index 8c37eac8..3f6864d5 100644 --- a/src/api/manage/api.management.ts +++ b/src/api/manage/api.management.ts @@ -3,5 +3,7 @@ import env from "../index"; const management = `${env.API_URI}/org/keycloak`; export default { + management, managementUser: `${management}/user`, + managementRole: `${management}/role`, }; diff --git a/src/modules/02_users/components/Roles/DialogAddRole.vue b/src/modules/02_users/components/Roles/DialogAddRole.vue new file mode 100644 index 00000000..6e996857 --- /dev/null +++ b/src/modules/02_users/components/Roles/DialogAddRole.vue @@ -0,0 +1,147 @@ + + + + + diff --git a/src/modules/02_users/components/Users/DialogAddUser.vue b/src/modules/02_users/components/Users/DialogAddUser.vue index c68bba40..1a6389af 100644 --- a/src/modules/02_users/components/Users/DialogAddUser.vue +++ b/src/modules/02_users/components/Users/DialogAddUser.vue @@ -4,7 +4,10 @@ import { useQuasar } from "quasar"; import http from "@/plugins/http"; import config from "@/app.config"; -import type { FormUser } from "@/modules/02_users/interface/request/Main"; +import type { + FormUser, + Roles, +} from "@/modules/02_users/interface/request/Main"; /** importComponents*/ import DialogHeader from "@/components/DialogHeader.vue"; @@ -29,13 +32,17 @@ const props = defineProps({ }); const isPwd = ref(true); +const roles = ref([]); const formData = reactive({ username: "", password: "", firstName: "", lastName: "", email: "", + roles: [], }); +const roleOptionsMain = ref([]); +const roleOptions = ref([]); /** * function fetch ข้อมูลผู้ใช้งาน @@ -51,6 +58,23 @@ function fetchUserDetail(id: string) { formData.firstName = data.firstName; formData.lastName = data.lastName; formData.email = data.email; + roles.value = data.roles; + }) + .catch((err) => { + messageError($q, err); + }) + .finally(() => { + hideLoader(); + }); +} + +/** function fetc รายการ role*/ +function fetchlistRole() { + showLoader(); + http + .get(config.API.managementRole) + .then((res) => { + roleOptions.value = res.data; }) .catch((err) => { messageError($q, err); @@ -62,6 +86,11 @@ function fetchUserDetail(id: string) { /** function บันทึกข้อมูลผู้ใช้งาน*/ function onSubmit() { + formData.roles = !isStatusEdit.value + ? roles.value.map((e: { id: string }) => e.id) + : undefined; + formData.password = !isStatusEdit.value ? formData.password : undefined; + dialogConfirm($q, () => { showLoader(); const url = isStatusEdit.value @@ -91,6 +120,7 @@ function closeDialog() { formData.firstName = ""; formData.lastName = ""; formData.email = ""; + roles.value = []; } watch( @@ -99,6 +129,7 @@ watch( if (modal.value && isStatusEdit.value) { fetchUserDetail(userId.value); } + modal.value && fetchlistRole(); } ); @@ -190,6 +221,25 @@ watch( > +
+ +
diff --git a/src/modules/02_users/components/Users/DialogRoleUser.vue b/src/modules/02_users/components/Users/DialogRoleUser.vue new file mode 100644 index 00000000..4e5e58ff --- /dev/null +++ b/src/modules/02_users/components/Users/DialogRoleUser.vue @@ -0,0 +1,181 @@ + + + + + diff --git a/src/modules/02_users/interface/request/Main.ts b/src/modules/02_users/interface/request/Main.ts index 39e3e0cb..cbc0bd3a 100644 --- a/src/modules/02_users/interface/request/Main.ts +++ b/src/modules/02_users/interface/request/Main.ts @@ -1,8 +1,19 @@ interface FormUser { username: string; - password: string; + password: string | undefined; firstName: string; lastName: string; email: string; + roles: string[] | undefined; } -export type { FormUser }; + +interface FormRole { + role: string; + description: string; +} + +interface Roles { + id: string; + name: string; +} +export type { FormUser, FormRole, Roles }; diff --git a/src/modules/02_users/interface/response/Main.ts b/src/modules/02_users/interface/response/Main.ts index fefdf1ba..0e58194c 100644 --- a/src/modules/02_users/interface/response/Main.ts +++ b/src/modules/02_users/interface/response/Main.ts @@ -4,6 +4,16 @@ interface Users { id: string; lastName: string; username: string; + roles: Roles; } -export type { Users }; +interface Roles { + clientRole?: boolean; + composite?: boolean; + containerId?: string; + description: string; + id: string; + name: string; +} + +export type { Users, Roles }; diff --git a/src/modules/02_users/router.ts b/src/modules/02_users/router.ts index ba9c8dcb..956aa408 100644 --- a/src/modules/02_users/router.ts +++ b/src/modules/02_users/router.ts @@ -1,5 +1,8 @@ const ListsPageUser = () => import("@/modules/02_users/views/listsUser.vue"); +const PageManagementRole = () => + import("@/modules/02_users/views/managementRoleUser.vue"); const ListsPageRole = () => import("@/modules/02_users/views/listsRole.vue"); +const ListsRoleDetail = () => import("@/modules/02_users/views/roleDetail.vue"); export default [ { @@ -12,6 +15,17 @@ export default [ Role: "user_role", }, }, + { + path: "/users/roles/:id", + name: "manageUsersRolesId", + component: PageManagementRole, + meta: { + Auth: true, + Key: [7], + Role: "user_role", + }, + }, + { path: "/users/:id", name: "masterInsignia", @@ -27,4 +41,14 @@ export default [ Role: "user_role", }, }, + { + path: "/roles/:id", + name: "manageRolesId", + component: ListsRoleDetail, + meta: { + Auth: true, + Key: [7], + Role: "user_role", + }, + }, ]; diff --git a/src/modules/02_users/views/listsRole.vue b/src/modules/02_users/views/listsRole.vue index 3f2a4645..50f83c8d 100644 --- a/src/modules/02_users/views/listsRole.vue +++ b/src/modules/02_users/views/listsRole.vue @@ -1,7 +1,274 @@ - + diff --git a/src/modules/02_users/views/listsUser.vue b/src/modules/02_users/views/listsUser.vue index 1fce295e..5034adb4 100644 --- a/src/modules/02_users/views/listsUser.vue +++ b/src/modules/02_users/views/listsUser.vue @@ -1,34 +1,42 @@ + + + + diff --git a/src/modules/02_users/views/roleDetail.vue b/src/modules/02_users/views/roleDetail.vue new file mode 100644 index 00000000..41b4cf5b --- /dev/null +++ b/src/modules/02_users/views/roleDetail.vue @@ -0,0 +1,1207 @@ + + +