check permission list เมนูทะเบียนประวัติ

This commit is contained in:
Warunee Tamkoo 2024-08-16 14:02:33 +07:00
parent 51707646e7
commit 6f2af7bb77
3 changed files with 82 additions and 11 deletions

View file

@ -10,7 +10,11 @@ interface DataOption2 {
id: number; id: number;
name: string; name: string;
} }
interface DataOptionSys {
id: string;
name: string;
system: string;
}
interface DataOptionInsignia { interface DataOptionInsignia {
id: string; id: string;
name: string; name: string;
@ -55,4 +59,5 @@ export type {
InformationOps, InformationOps,
AddressOps, AddressOps,
InsigniaOps, InsigniaOps,
DataOptionSys,
}; };

View file

@ -1,6 +1,10 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted } from "vue"; import { ref, onMounted } from "vue";
import { checkPermission } from "@/utils/permissions"; import {
checkPermission,
checkPermissionCreate,
checkPermissionList,
} from "@/utils/permissions";
import { useRoute, useRouter } from "vue-router"; import { useRoute, useRouter } from "vue-router";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import http from "@/plugins/http"; import http from "@/plugins/http";
@ -9,7 +13,10 @@ import axios from "axios";
/** /**
* importType * importType
*/ */
import type { DataOption } from "@/modules/04_registryPerson/interface/index/Main"; import type {
DataOption,
DataOptionSys,
} from "@/modules/04_registryPerson/interface/index/Main";
import type { ResponseObject } from "@/modules/04_registryPerson/interface/response/Profile"; import type { ResponseObject } from "@/modules/04_registryPerson/interface/response/Profile";
/** /**
@ -57,41 +64,49 @@ const profileId = ref<string>(route.params.id.toString());
const empType = ref<string>(pathRegistryEmp(route.name?.toString() ?? "")); const empType = ref<string>(pathRegistryEmp(route.name?.toString() ?? ""));
const formDetail = ref<ResponseObject>(); const formDetail = ref<ResponseObject>();
const itemsMenu = ref<DataOption[]>([ const itemsMenu = ref<DataOptionSys[]>([
{ {
id: "1", id: "1",
name: "ช่วยราชการ", name: "ช่วยราชการ",
system: "SYS_TEMPDUTY",
}, },
{ {
id: "2", id: "2",
name: "ส่งตัวกลับ", name: "ส่งตัวกลับ",
system: "SYS_TEMPDUTY2",
}, },
{ {
id: "3", id: "3",
name: "แต่งตั้ง-เลื่อน-ย้าย", name: "แต่งตั้ง-เลื่อน-ย้าย",
system: "SYS_PROMOTION_OFFICER",
}, },
{ {
id: "4", id: "4",
name: "ถึงแก่กรรม", name: "ถึงแก่กรรม",
system: "SYS_PASSAWAY",
}, },
{ {
id: "5", id: "5",
name: "ให้ออกจากราชการ", name: "ให้ออกจากราชการ",
system: "SYS_DISMISS",
}, },
{ {
id: "6", id: "6",
name: "อื่นๆ", name: "อื่นๆ",
system: "SYS_PLACEMENT_OTHER",
}, },
]); ]);
const itemsMenuEmployee = ref<DataOption[]>([ const itemsMenuEmployee = ref<DataOptionSys[]>([
{ {
id: "1", id: "1",
name: "ปรับระดับชั้นงาน - ย้าย", name: "ปรับระดับชั้นงาน - ย้าย",
system: "SYS_PROMOTION_EMP",
}, },
{ {
id: "2", id: "2",
name: "ถึงแก่กรรม", name: "ถึงแก่กรรม",
system: "SYS_PASSAWAY",
}, },
]); ]);
@ -634,7 +649,20 @@ onMounted(async () => {
}} }}
</div> </div>
<q-space /> <q-space />
<!-- list menu ของขาราชการฯ -->
<q-btn-dropdown <q-btn-dropdown
v-if="
empType === '' &&
checkPermissionList([
'SYS_TEMPDUTY',
'SYS_TEMPDUTY2',
'SYS_PROMOTION_OFFICER',
'SYS_PASSAWAY',
'SYS_DISMISS',
'SYS_PLACEMENT_OTHER',
])
"
size="md" size="md"
rounded rounded
unelevated unelevated
@ -643,12 +671,9 @@ onMounted(async () => {
icon="mdi-home-export-outline" icon="mdi-home-export-outline"
dropdown-icon="mdi-chevron-down" dropdown-icon="mdi-chevron-down"
> >
<q-list <q-list v-for="(item, index) in itemsMenu" :key="index">
v-if="empType === ''"
v-for="(item, index) in itemsMenu"
:key="index"
>
<q-item <q-item
v-if="checkPermissionCreate(item.system)"
clickable clickable
@click=" @click="
item.name == 'ช่วยราชการ' item.name == 'ช่วยราชการ'
@ -670,8 +695,25 @@ onMounted(async () => {
<q-item-section>{{ item.name }}</q-item-section> <q-item-section>{{ item.name }}</q-item-section>
</q-item> </q-item>
</q-list> </q-list>
<q-list v-else v-for="(item, index) in itemsMenuEmployee" :key="item.id"> </q-btn-dropdown>
<!-- list menu ของลกจางประจำ -->
<q-btn-dropdown
v-if="
empType === '-employee' &&
checkPermissionList(['SYS_PROMOTION_EMP', 'SYS_PASSAWAY'])
"
size="md"
rounded
unelevated
color="grey-4"
text-color="red"
icon="mdi-home-export-outline"
dropdown-icon="mdi-chevron-down"
>
<q-list v-for="item in itemsMenuEmployee" :key="item.id">
<q-item <q-item
v-if="checkPermissionCreate(item.system)"
clickable clickable
@click=" @click="
item.name == 'ปรับระดับชั้นงาน - ย้าย' item.name == 'ปรับระดับชั้นงาน - ย้าย'

View file

@ -18,3 +18,27 @@ export function checkPermission(route: any): RoleData | null {
return null; return null;
} }
} }
export function checkPermissionCreate(sys: string) {
if (storeMenu.permissions && sys) {
return (
storeMenu.permissions.roles.find(
(item) => item.authSysId === sys && item.attrIsCreate
) ?? false
);
} else {
return false;
}
}
export function checkPermissionList(sys: string[]) {
if (storeMenu.permissions && sys) {
return (
storeMenu.permissions.roles.some(
(item) => sys.includes(item.authSysId) && item.attrIsCreate
) ?? false
);
} else {
return false;
}
}