@7365admin1/layer-common 1.10.0 → 1.10.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/CHANGELOG.md +6 -0
- package/components/AcceptDialog.vue +44 -0
- package/components/AccessCardAddForm.vue +101 -13
- package/components/AccessManagement.vue +130 -47
- package/components/AddSupplyForm.vue +165 -0
- package/components/AreaChecklistHistoryLogs.vue +235 -0
- package/components/AreaChecklistHistoryMain.vue +176 -0
- package/components/AreaFormDialog.vue +266 -0
- package/components/AreaMain.vue +841 -0
- package/components/AttendanceCheckInOutDialog.vue +416 -0
- package/components/AttendanceDetailsDialog.vue +184 -0
- package/components/AttendanceMain.vue +155 -0
- package/components/AttendanceMapSearchDialog.vue +393 -0
- package/components/AttendanceSettingsDialog.vue +398 -0
- package/components/BuildingManagement/buildings.vue +5 -5
- package/components/BuildingManagement/units.vue +5 -5
- package/components/ChecklistItemRow.vue +54 -0
- package/components/CheckoutItemMain.vue +705 -0
- package/components/CleaningScheduleMain.vue +271 -0
- package/components/DocumentManagement.vue +4 -0
- package/components/EntryPass/QrTemplatePreview.vue +104 -0
- package/components/EntryPassMain.vue +252 -200
- package/components/HygieneUpdateMoreAction.vue +238 -0
- package/components/ManageChecklistMain.vue +384 -0
- package/components/MemberMain.vue +48 -20
- package/components/MyAttendanceMain.vue +224 -0
- package/components/OnlineFormsConfiguration.vue +9 -2
- package/components/PhotoUpload.vue +410 -0
- package/components/ScheduleAreaMain.vue +313 -0
- package/components/ScheduleTaskAreaFormDialog.vue +144 -0
- package/components/ScheduleTaskAreaUpdateMoreAction.vue +109 -0
- package/components/ScheduleTaskForm.vue +471 -0
- package/components/ScheduleTaskMain.vue +345 -0
- package/components/ScheduleTastTicketMain.vue +182 -0
- package/components/StockCard.vue +191 -0
- package/components/SupplyManagementMain.vue +557 -0
- package/components/TableHygiene.vue +617 -0
- package/components/UnitMain.vue +451 -0
- package/components/VisitorManagement.vue +28 -15
- package/composables/useAccessManagement.ts +90 -0
- package/composables/useAreaPermission.ts +51 -0
- package/composables/useAreas.ts +99 -0
- package/composables/useAttendance.ts +89 -0
- package/composables/useAttendancePermission.ts +68 -0
- package/composables/useBuilding.ts +2 -2
- package/composables/useBuildingUnit.ts +2 -2
- package/composables/useCard.ts +2 -0
- package/composables/useCheckout.ts +61 -0
- package/composables/useCheckoutPermission.ts +80 -0
- package/composables/useCleaningPermission.ts +229 -0
- package/composables/useCleaningSchedulePermission.ts +58 -0
- package/composables/useCleaningSchedules.ts +233 -0
- package/composables/useCountry.ts +8 -0
- package/composables/useDashboardData.ts +2 -2
- package/composables/useFeedback.ts +1 -1
- package/composables/useLocation.ts +78 -0
- package/composables/useOnlineForm.ts +16 -9
- package/composables/usePeople.ts +87 -72
- package/composables/useQR.ts +29 -0
- package/composables/useScheduleTask.ts +89 -0
- package/composables/useScheduleTaskArea.ts +85 -0
- package/composables/useScheduleTaskPermission.ts +68 -0
- package/composables/useSiteEntryPassSettings.ts +4 -15
- package/composables/useStock.ts +45 -0
- package/composables/useSupply.ts +63 -0
- package/composables/useSupplyPermission.ts +92 -0
- package/composables/useUnitPermission.ts +51 -0
- package/composables/useUnits.ts +82 -0
- package/composables/useWebUsb.ts +389 -0
- package/composables/useWorkOrder.ts +1 -1
- package/nuxt.config.ts +3 -0
- package/package.json +4 -1
- package/types/area.d.ts +22 -0
- package/types/attendance.d.ts +38 -0
- package/types/checkout-item.d.ts +27 -0
- package/types/cleaner-schedule.d.ts +54 -0
- package/types/location.d.ts +42 -0
- package/types/schedule-task.d.ts +18 -0
- package/types/stock.d.ts +16 -0
- package/types/supply.d.ts +11 -0
- package/utils/acm-crypto.ts +30 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
export default function useScheduleTask() {
|
|
2
|
+
async function getScheduleTasks({
|
|
3
|
+
site = "",
|
|
4
|
+
search = "",
|
|
5
|
+
page = 1,
|
|
6
|
+
limit = 10,
|
|
7
|
+
} = {}) {
|
|
8
|
+
return useNuxtApp().$api<Record<string, any>>(
|
|
9
|
+
`/api/hygiene-schedule-tasks/site/${site}`,
|
|
10
|
+
{
|
|
11
|
+
method: "GET",
|
|
12
|
+
query: {
|
|
13
|
+
site,
|
|
14
|
+
search,
|
|
15
|
+
page,
|
|
16
|
+
limit,
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function getScheduleTaskById(id: string) {
|
|
23
|
+
return useNuxtApp().$api<TScheduleTask>(
|
|
24
|
+
`/api/hygiene-schedule-tasks/id/${id}`,
|
|
25
|
+
{
|
|
26
|
+
method: "GET",
|
|
27
|
+
},
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function createScheduleTask(payload: {
|
|
32
|
+
title: string;
|
|
33
|
+
time: string;
|
|
34
|
+
startDate?: string;
|
|
35
|
+
endDate?: string;
|
|
36
|
+
description?: string;
|
|
37
|
+
areas: { name: string; value: string }[];
|
|
38
|
+
site: string;
|
|
39
|
+
}) {
|
|
40
|
+
return useNuxtApp().$api<Record<string, any>>(
|
|
41
|
+
`/api/hygiene-schedule-tasks/site/${payload.site}`,
|
|
42
|
+
{
|
|
43
|
+
method: "POST",
|
|
44
|
+
body: {
|
|
45
|
+
title: payload.title,
|
|
46
|
+
time: payload.time,
|
|
47
|
+
startDate: payload.startDate,
|
|
48
|
+
endDate: payload.endDate,
|
|
49
|
+
description: payload.description,
|
|
50
|
+
areas: payload.areas,
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function updateScheduleTask(
|
|
57
|
+
id: string,
|
|
58
|
+
payload: {
|
|
59
|
+
title: string;
|
|
60
|
+
time: string;
|
|
61
|
+
startDate?: string;
|
|
62
|
+
endDate?: string;
|
|
63
|
+
description?: string;
|
|
64
|
+
areas: { name: string; value: string }[];
|
|
65
|
+
},
|
|
66
|
+
) {
|
|
67
|
+
return useNuxtApp().$api<Record<string, any>>(
|
|
68
|
+
`/api/hygiene-schedule-tasks/id/${id}`,
|
|
69
|
+
{
|
|
70
|
+
method: "PATCH",
|
|
71
|
+
body: {
|
|
72
|
+
title: payload.title,
|
|
73
|
+
time: payload.time,
|
|
74
|
+
startDate: payload.startDate,
|
|
75
|
+
endDate: payload.endDate,
|
|
76
|
+
description: payload.description,
|
|
77
|
+
areas: payload.areas,
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return {
|
|
84
|
+
getScheduleTasks,
|
|
85
|
+
createScheduleTask,
|
|
86
|
+
updateScheduleTask,
|
|
87
|
+
getScheduleTaskById,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
export default function useScheduleTaskArea() {
|
|
2
|
+
async function getAreas({
|
|
3
|
+
site = "",
|
|
4
|
+
search = "",
|
|
5
|
+
page = 1,
|
|
6
|
+
limit = 10,
|
|
7
|
+
} = {}) {
|
|
8
|
+
return useNuxtApp().$api<Record<string, any>>(
|
|
9
|
+
"/api/hygiene-schedule-task-area",
|
|
10
|
+
{
|
|
11
|
+
method: "GET",
|
|
12
|
+
query: {
|
|
13
|
+
site,
|
|
14
|
+
search,
|
|
15
|
+
page,
|
|
16
|
+
limit,
|
|
17
|
+
},
|
|
18
|
+
}
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function createArea(name: string, site: string) {
|
|
23
|
+
return useNuxtApp().$api<Record<string, any>>(
|
|
24
|
+
"/api/hygiene-schedule-task-area",
|
|
25
|
+
{
|
|
26
|
+
method: "POST",
|
|
27
|
+
body: {
|
|
28
|
+
name,
|
|
29
|
+
site,
|
|
30
|
+
},
|
|
31
|
+
}
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function updateArea(id: string, name: string) {
|
|
36
|
+
return useNuxtApp().$api<Record<string, any>>(
|
|
37
|
+
`/api/hygiene-schedule-task-area/id/${id}`,
|
|
38
|
+
{
|
|
39
|
+
method: "PATCH",
|
|
40
|
+
body: { name },
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function deleteArea(id: string) {
|
|
46
|
+
return useNuxtApp().$api<Record<string, any>>(
|
|
47
|
+
`/api/hygiene-schedule-task-area/id/${id}`,
|
|
48
|
+
{
|
|
49
|
+
method: "DELETE",
|
|
50
|
+
}
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function getAreaById(id: string) {
|
|
55
|
+
return useNuxtApp().$api<Record<string, any>>(
|
|
56
|
+
`/api/hygiene-schedule-task-area/id/${id}`,
|
|
57
|
+
{
|
|
58
|
+
method: "GET",
|
|
59
|
+
}
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function uploadAreas(file: File, site: string) {
|
|
64
|
+
const formData = new FormData();
|
|
65
|
+
formData.append("file", file);
|
|
66
|
+
formData.append("site", site);
|
|
67
|
+
|
|
68
|
+
return useNuxtApp().$api<Record<string, any>>(
|
|
69
|
+
"/api/hygiene-schedule-task-area/upload",
|
|
70
|
+
{
|
|
71
|
+
method: "POST",
|
|
72
|
+
body: formData,
|
|
73
|
+
}
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return {
|
|
78
|
+
getAreas,
|
|
79
|
+
createArea,
|
|
80
|
+
updateArea,
|
|
81
|
+
deleteArea,
|
|
82
|
+
getAreaById,
|
|
83
|
+
uploadAreas,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export default function useScheduleTaskPermission() {
|
|
2
|
+
const { hasPermission } = usePermission();
|
|
3
|
+
const { permissions } = useCleaningPermission();
|
|
4
|
+
const { userAppRole } = useLocalSetup();
|
|
5
|
+
|
|
6
|
+
const canViewScheduleTasks = computed(() => {
|
|
7
|
+
if (!userAppRole.value) return true;
|
|
8
|
+
if (userAppRole.value.permissions.includes("*")) return true;
|
|
9
|
+
return hasPermission(
|
|
10
|
+
userAppRole.value,
|
|
11
|
+
permissions,
|
|
12
|
+
"schedule-task-mgmt",
|
|
13
|
+
"see-all-schedule-tasks"
|
|
14
|
+
);
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
const canCreateScheduleTask = computed(() => {
|
|
18
|
+
if (!userAppRole.value) return true;
|
|
19
|
+
if (userAppRole.value.permissions.includes("*")) return true;
|
|
20
|
+
return hasPermission(
|
|
21
|
+
userAppRole.value,
|
|
22
|
+
permissions,
|
|
23
|
+
"schedule-task-mgmt",
|
|
24
|
+
"add-schedule-task"
|
|
25
|
+
);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
const canUpdateScheduleTask = computed(() => {
|
|
29
|
+
if (!userAppRole.value) return true;
|
|
30
|
+
if (userAppRole.value.permissions.includes("*")) return true;
|
|
31
|
+
return hasPermission(
|
|
32
|
+
userAppRole.value,
|
|
33
|
+
permissions,
|
|
34
|
+
"schedule-task-mgmt",
|
|
35
|
+
"update-schedule-task"
|
|
36
|
+
);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
const canDeleteScheduleTask = computed(() => {
|
|
40
|
+
if (!userAppRole.value) return true;
|
|
41
|
+
if (userAppRole.value.permissions.includes("*")) return true;
|
|
42
|
+
return hasPermission(
|
|
43
|
+
userAppRole.value,
|
|
44
|
+
permissions,
|
|
45
|
+
"schedule-task-mgmt",
|
|
46
|
+
"delete-schedule-task"
|
|
47
|
+
);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
const canViewScheduleTaskDetails = computed(() => {
|
|
51
|
+
if (!userAppRole.value) return true;
|
|
52
|
+
if (userAppRole.value.permissions.includes("*")) return true;
|
|
53
|
+
return hasPermission(
|
|
54
|
+
userAppRole.value,
|
|
55
|
+
permissions,
|
|
56
|
+
"schedule-task-mgmt",
|
|
57
|
+
"see-schedule-task-details"
|
|
58
|
+
);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
return {
|
|
62
|
+
canViewScheduleTasks,
|
|
63
|
+
canCreateScheduleTask,
|
|
64
|
+
canUpdateScheduleTask,
|
|
65
|
+
canDeleteScheduleTask,
|
|
66
|
+
canViewScheduleTaskDetails,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export default function useSiteEntryPassSettings() {
|
|
2
2
|
function getBySiteId(siteId: string) {
|
|
3
3
|
return useNuxtApp().$api<Record<string, any>>(
|
|
4
|
-
`/api/
|
|
4
|
+
`/api/access-management/settings/${siteId}`,
|
|
5
5
|
{
|
|
6
6
|
method: "GET",
|
|
7
7
|
}
|
|
@@ -17,9 +17,9 @@ export default function useSiteEntryPassSettings() {
|
|
|
17
17
|
);
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
function
|
|
20
|
+
function save(value: any) {
|
|
21
21
|
return useNuxtApp().$api<Record<string, any>>(
|
|
22
|
-
"/api/
|
|
22
|
+
"/api/access-management/settings",
|
|
23
23
|
{
|
|
24
24
|
method: "POST",
|
|
25
25
|
body: value,
|
|
@@ -27,20 +27,9 @@ export default function useSiteEntryPassSettings() {
|
|
|
27
27
|
);
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
function updateBySiteId(value: any, siteId: string) {
|
|
31
|
-
return useNuxtApp().$api<Record<string, any>>(
|
|
32
|
-
"/api/site-entrypass-settings/site/" + siteId,
|
|
33
|
-
{
|
|
34
|
-
method: "PUT",
|
|
35
|
-
body: value,
|
|
36
|
-
}
|
|
37
|
-
);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
30
|
return {
|
|
41
31
|
getBySiteId,
|
|
42
32
|
getById,
|
|
43
|
-
|
|
44
|
-
updateBySiteId,
|
|
33
|
+
save,
|
|
45
34
|
};
|
|
46
35
|
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export default function useStock() {
|
|
2
|
+
function getStockBySupply(
|
|
3
|
+
site: string,
|
|
4
|
+
supply: string,
|
|
5
|
+
page = 1,
|
|
6
|
+
search = "",
|
|
7
|
+
limit = 10
|
|
8
|
+
) {
|
|
9
|
+
return useNuxtApp().$api<Record<string, any>>(
|
|
10
|
+
`/api/hygiene-stocks/site/${site}/supply/${supply}`,
|
|
11
|
+
{ method: "GET", query: { page, search, limit } }
|
|
12
|
+
);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function createStock(site: string, id: string, payload: TStockCreate) {
|
|
16
|
+
return useNuxtApp().$api<Record<string, any>>(
|
|
17
|
+
`/api/hygiene-stocks/site/${site}/supply/${id}`,
|
|
18
|
+
{
|
|
19
|
+
method: "POST",
|
|
20
|
+
body: {
|
|
21
|
+
qty: payload.qty,
|
|
22
|
+
remarks: payload.remarks,
|
|
23
|
+
},
|
|
24
|
+
}
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function requestItem(site: string, id: string, payload: TStockCreate) {
|
|
29
|
+
return useNuxtApp().$api<Record<string, any>>(
|
|
30
|
+
`/api/hygiene-request-items/site/${site}/supply/${id}`,
|
|
31
|
+
{
|
|
32
|
+
method: "POST",
|
|
33
|
+
body: {
|
|
34
|
+
qty: payload.qty,
|
|
35
|
+
},
|
|
36
|
+
}
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return {
|
|
41
|
+
createStock,
|
|
42
|
+
getStockBySupply,
|
|
43
|
+
requestItem,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export default function useSupply() {
|
|
2
|
+
function getSupplies({ page = 1, search = "", limit = 10, site = "" } = {}) {
|
|
3
|
+
return useNuxtApp().$api<Record<string, any>>(
|
|
4
|
+
`/api/hygiene-supplies/site/${site}`,
|
|
5
|
+
{
|
|
6
|
+
method: "GET",
|
|
7
|
+
query: { page, search, limit, site },
|
|
8
|
+
}
|
|
9
|
+
);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function getSupplyById(id: string) {
|
|
13
|
+
return useNuxtApp().$api<Record<string, any>>(
|
|
14
|
+
`/api/hygiene-supplies/id/${id}`,
|
|
15
|
+
{
|
|
16
|
+
method: "GET",
|
|
17
|
+
}
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function createSupply(payload: TSupplyCreate, site: string) {
|
|
22
|
+
return useNuxtApp().$api<Record<string, any>>(
|
|
23
|
+
`/api/hygiene-supplies/site/${site}`,
|
|
24
|
+
{
|
|
25
|
+
method: "POST",
|
|
26
|
+
body: {
|
|
27
|
+
name: payload.name,
|
|
28
|
+
unitOfMeasurement: payload.unitOfMeasurement,
|
|
29
|
+
},
|
|
30
|
+
}
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function updateSupply(id: string, payload: TSupplyCreate) {
|
|
35
|
+
return useNuxtApp().$api<Record<string, any>>(
|
|
36
|
+
`/api/hygiene-supplies/id/${id}`,
|
|
37
|
+
{
|
|
38
|
+
method: "PATCH",
|
|
39
|
+
body: {
|
|
40
|
+
name: payload.name,
|
|
41
|
+
unitOfMeasurement: payload.unitOfMeasurement,
|
|
42
|
+
},
|
|
43
|
+
}
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function deleteSupply(id: string) {
|
|
48
|
+
return useNuxtApp().$api<Record<string, any>>(
|
|
49
|
+
`/api/hygiene-supplies/id/${id}`,
|
|
50
|
+
{
|
|
51
|
+
method: "DELETE",
|
|
52
|
+
}
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return {
|
|
57
|
+
getSupplies,
|
|
58
|
+
getSupplyById,
|
|
59
|
+
createSupply,
|
|
60
|
+
updateSupply,
|
|
61
|
+
deleteSupply,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
export function useSupplyPermission() {
|
|
2
|
+
const { hasPermission } = usePermission();
|
|
3
|
+
const { permissions } = useCleaningPermission();
|
|
4
|
+
const { userAppRole } = useLocalSetup();
|
|
5
|
+
|
|
6
|
+
const canViewSupplies = computed(() => {
|
|
7
|
+
if (!userAppRole.value) return true;
|
|
8
|
+
if (userAppRole.value.permissions.includes("*")) return true;
|
|
9
|
+
return hasPermission(
|
|
10
|
+
userAppRole.value,
|
|
11
|
+
permissions,
|
|
12
|
+
"supply-mgmt",
|
|
13
|
+
"see-all-supplies"
|
|
14
|
+
);
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
const canAddSupply = computed(() => {
|
|
18
|
+
if (!userAppRole.value) return true;
|
|
19
|
+
if (userAppRole.value.permissions.includes("*")) return true;
|
|
20
|
+
return hasPermission(
|
|
21
|
+
userAppRole.value,
|
|
22
|
+
permissions,
|
|
23
|
+
"supply-mgmt",
|
|
24
|
+
"add-supply"
|
|
25
|
+
);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
const canUpdateSupply = computed(() => {
|
|
29
|
+
if (!userAppRole.value) return true;
|
|
30
|
+
if (userAppRole.value.permissions.includes("*")) return true;
|
|
31
|
+
return hasPermission(
|
|
32
|
+
userAppRole.value,
|
|
33
|
+
permissions,
|
|
34
|
+
"supply-mgmt",
|
|
35
|
+
"update-supply"
|
|
36
|
+
);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
const canDeleteSupply = computed(() => {
|
|
40
|
+
if (!userAppRole.value) return true;
|
|
41
|
+
if (userAppRole.value.permissions.includes("*")) return true;
|
|
42
|
+
return hasPermission(
|
|
43
|
+
userAppRole.value,
|
|
44
|
+
permissions,
|
|
45
|
+
"supply-mgmt",
|
|
46
|
+
"delete-supply"
|
|
47
|
+
);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
const canAddStock = computed(() => {
|
|
51
|
+
if (!userAppRole.value) return true;
|
|
52
|
+
if (userAppRole.value.permissions.includes("*")) return true;
|
|
53
|
+
return hasPermission(
|
|
54
|
+
userAppRole.value,
|
|
55
|
+
permissions,
|
|
56
|
+
"supply-mgmt",
|
|
57
|
+
"add-stock"
|
|
58
|
+
);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
const canViewStock = computed(() => {
|
|
62
|
+
if (!userAppRole.value) return true;
|
|
63
|
+
if (userAppRole.value.permissions.includes("*")) return true;
|
|
64
|
+
return hasPermission(
|
|
65
|
+
userAppRole.value,
|
|
66
|
+
permissions,
|
|
67
|
+
"supply-mgmt",
|
|
68
|
+
"view-stock"
|
|
69
|
+
);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
const canRequestItem = computed(() => {
|
|
73
|
+
if (!userAppRole.value) return true;
|
|
74
|
+
if (userAppRole.value.permissions.includes("*")) return true;
|
|
75
|
+
return hasPermission(
|
|
76
|
+
userAppRole.value,
|
|
77
|
+
permissions,
|
|
78
|
+
"supply-mgmt",
|
|
79
|
+
"request-item"
|
|
80
|
+
);
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
return {
|
|
84
|
+
canViewSupplies,
|
|
85
|
+
canAddSupply,
|
|
86
|
+
canUpdateSupply,
|
|
87
|
+
canDeleteSupply,
|
|
88
|
+
canAddStock,
|
|
89
|
+
canViewStock,
|
|
90
|
+
canRequestItem,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export function useUnitPermission() {
|
|
2
|
+
const { hasPermission } = usePermission();
|
|
3
|
+
const { permissions } = useCleaningPermission();
|
|
4
|
+
|
|
5
|
+
const { userAppRole } = useLocalSetup();
|
|
6
|
+
|
|
7
|
+
const canViewUnits = computed(() => {
|
|
8
|
+
if (!userAppRole.value) return true;
|
|
9
|
+
if (userAppRole.value.permissions.includes("*")) return true;
|
|
10
|
+
return hasPermission(userAppRole.value, permissions, "unit-mgmt", "see-all-units");
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
const canCreateUnit = computed(() => {
|
|
14
|
+
if (!userAppRole.value) return true;
|
|
15
|
+
if (userAppRole.value.permissions.includes("*")) return true;
|
|
16
|
+
return hasPermission(userAppRole.value, permissions, "unit-mgmt", "add-unit");
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
const canUpdateUnit = computed(() => {
|
|
20
|
+
if (!userAppRole.value) return true;
|
|
21
|
+
if (userAppRole.value.permissions.includes("*")) return true;
|
|
22
|
+
return hasPermission(userAppRole.value, permissions, "unit-mgmt", "update-unit");
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
const canViewUnitDetails = computed(() => {
|
|
26
|
+
if (!userAppRole.value) return true;
|
|
27
|
+
if (userAppRole.value.permissions.includes("*")) return true;
|
|
28
|
+
return hasPermission(userAppRole.value, permissions, "unit-mgmt", "see-unit-details");
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
const canDeleteUnit = computed(() => {
|
|
32
|
+
if (!userAppRole.value) return true;
|
|
33
|
+
if (userAppRole.value.permissions.includes("*")) return true;
|
|
34
|
+
return hasPermission(userAppRole.value, permissions, "unit-mgmt", "delete-unit");
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
const canImportUnit = computed(() => {
|
|
38
|
+
if (!userAppRole.value) return true;
|
|
39
|
+
if (userAppRole.value.permissions.includes("*")) return true;
|
|
40
|
+
return hasPermission(userAppRole.value, permissions, "unit-mgmt", "import-units");
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
return {
|
|
44
|
+
canViewUnits,
|
|
45
|
+
canCreateUnit,
|
|
46
|
+
canUpdateUnit,
|
|
47
|
+
canViewUnitDetails,
|
|
48
|
+
canDeleteUnit,
|
|
49
|
+
canImportUnit,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export default function useUnits() {
|
|
2
|
+
async function getUnits({
|
|
3
|
+
site = "",
|
|
4
|
+
search = "",
|
|
5
|
+
page = 1,
|
|
6
|
+
limit = 10,
|
|
7
|
+
} = {}) {
|
|
8
|
+
return useNuxtApp().$api<Record<string, any>>(
|
|
9
|
+
`/api/hygiene-units/site/${site}`,
|
|
10
|
+
{
|
|
11
|
+
method: "GET",
|
|
12
|
+
query: {
|
|
13
|
+
search,
|
|
14
|
+
page,
|
|
15
|
+
limit,
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function createUnit(name: string, site: string) {
|
|
22
|
+
return useNuxtApp().$api<Record<string, any>>(
|
|
23
|
+
`/api/hygiene-units/site/${site}`,
|
|
24
|
+
{
|
|
25
|
+
method: "POST",
|
|
26
|
+
body: {
|
|
27
|
+
name,
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function updateUnit(id: string, name: string) {
|
|
34
|
+
return useNuxtApp().$api<Record<string, any>>(
|
|
35
|
+
`/api/hygiene-units/id/${id}`,
|
|
36
|
+
{
|
|
37
|
+
method: "PATCH",
|
|
38
|
+
body: {
|
|
39
|
+
name,
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function deleteUnit(id: string) {
|
|
46
|
+
return useNuxtApp().$api<Record<string, any>>(
|
|
47
|
+
`/api/hygiene-units/id/${id}`,
|
|
48
|
+
{
|
|
49
|
+
method: "DELETE",
|
|
50
|
+
},
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function uploadUnits(file: File, site: string) {
|
|
55
|
+
const formData = new FormData();
|
|
56
|
+
formData.append("file", file);
|
|
57
|
+
|
|
58
|
+
return useNuxtApp().$api<Record<string, any>>(
|
|
59
|
+
`/api/hygiene-units/site/${site}/upload`,
|
|
60
|
+
{
|
|
61
|
+
method: "POST",
|
|
62
|
+
body: formData,
|
|
63
|
+
},
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function downloadUnits(site: string) {
|
|
68
|
+
return useNuxtApp().$api<Blob>(`/api/hygiene-units/site/${site}/download`, {
|
|
69
|
+
method: "GET",
|
|
70
|
+
responseType: "blob",
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return {
|
|
75
|
+
getUnits,
|
|
76
|
+
createUnit,
|
|
77
|
+
updateUnit,
|
|
78
|
+
deleteUnit,
|
|
79
|
+
uploadUnits,
|
|
80
|
+
downloadUnits,
|
|
81
|
+
};
|
|
82
|
+
}
|