@eeplatform/nuxt-layer-common 1.5.1 → 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/CHANGELOG.md +12 -0
- package/components/ConfirmPrompt.vue +73 -0
- package/components/EnrollmentForm.vue +59 -22
- package/components/Layout/NavigationDrawer.vue +3 -0
- package/composables/useGradeLevel.ts +42 -0
- package/package.json +2 -2
- package/types/curriculum.d.ts +33 -0
- package/types/enrollment.d.ts +1 -0
- package/types/grade-level.d.ts +20 -0
package/CHANGELOG.md
CHANGED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<v-card width="100%">
|
|
3
|
+
<v-toolbar density="compact" class="pl-4">
|
|
4
|
+
<span class="font-weight-medium text-h5 text-capitalize">
|
|
5
|
+
Delete {{ localProps.title }}
|
|
6
|
+
</span>
|
|
7
|
+
</v-toolbar>
|
|
8
|
+
|
|
9
|
+
<v-card-text>
|
|
10
|
+
<p class="text-subtitle-2 text-center">
|
|
11
|
+
Are you sure you want to delete this
|
|
12
|
+
{{ localProps.title.toLowerCase() }}? This action cannot be undone.
|
|
13
|
+
</p>
|
|
14
|
+
|
|
15
|
+
<v-row v-if="message" no-gutters justify="center" class="mt-4">
|
|
16
|
+
<span class="text-caption text-error text-center">
|
|
17
|
+
{{ message }}
|
|
18
|
+
</span>
|
|
19
|
+
</v-row>
|
|
20
|
+
</v-card-text>
|
|
21
|
+
|
|
22
|
+
<v-toolbar density="compact">
|
|
23
|
+
<v-row no-gutters>
|
|
24
|
+
<v-col cols="6">
|
|
25
|
+
<v-btn
|
|
26
|
+
tile
|
|
27
|
+
block
|
|
28
|
+
size="48"
|
|
29
|
+
variant="text"
|
|
30
|
+
class="text-none"
|
|
31
|
+
@click="emits('cancel')"
|
|
32
|
+
:disabled="localProps.disabled"
|
|
33
|
+
>
|
|
34
|
+
Cancel
|
|
35
|
+
</v-btn>
|
|
36
|
+
</v-col>
|
|
37
|
+
<v-col cols="6">
|
|
38
|
+
<v-btn
|
|
39
|
+
tile
|
|
40
|
+
block
|
|
41
|
+
size="48"
|
|
42
|
+
color="black"
|
|
43
|
+
variant="flat"
|
|
44
|
+
class="text-none"
|
|
45
|
+
@click="emits('confirm')"
|
|
46
|
+
:disabled="localProps.disabled"
|
|
47
|
+
>
|
|
48
|
+
Delete {{ localProps.title }}
|
|
49
|
+
</v-btn>
|
|
50
|
+
</v-col>
|
|
51
|
+
</v-row>
|
|
52
|
+
</v-toolbar>
|
|
53
|
+
</v-card>
|
|
54
|
+
</template>
|
|
55
|
+
|
|
56
|
+
<script setup lang="ts">
|
|
57
|
+
const localProps = defineProps({
|
|
58
|
+
title: {
|
|
59
|
+
type: String,
|
|
60
|
+
default: "Title",
|
|
61
|
+
},
|
|
62
|
+
message: {
|
|
63
|
+
type: String,
|
|
64
|
+
default: "",
|
|
65
|
+
},
|
|
66
|
+
disabled: {
|
|
67
|
+
type: Boolean,
|
|
68
|
+
default: false,
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
const emits = defineEmits(["cancel", "confirm"]);
|
|
73
|
+
</script>
|
|
@@ -60,12 +60,13 @@
|
|
|
60
60
|
<InputLabel class="text-capitalize" title="School" required />
|
|
61
61
|
<v-col cols="12">
|
|
62
62
|
<v-combobox
|
|
63
|
-
v-model="
|
|
63
|
+
v-model="enrollment.schoolId"
|
|
64
64
|
v-model:search="searchSchool"
|
|
65
65
|
:rules="[requiredRule]"
|
|
66
66
|
:items="schools"
|
|
67
67
|
item-title="name"
|
|
68
68
|
item-value="id"
|
|
69
|
+
:return-object="false"
|
|
69
70
|
:loading="schoolsStatus"
|
|
70
71
|
:disabled="schoolsStatus"
|
|
71
72
|
:hide-no-data="false"
|
|
@@ -121,7 +122,7 @@
|
|
|
121
122
|
<v-autocomplete
|
|
122
123
|
v-model="enrollment.gradeLevel"
|
|
123
124
|
:rules="[requiredRule]"
|
|
124
|
-
:items="
|
|
125
|
+
:items="gradeLevelOffering"
|
|
125
126
|
></v-autocomplete>
|
|
126
127
|
</v-col>
|
|
127
128
|
</v-row>
|
|
@@ -1381,7 +1382,7 @@ watchEffect(() => {
|
|
|
1381
1382
|
}
|
|
1382
1383
|
});
|
|
1383
1384
|
|
|
1384
|
-
const schools = ref<
|
|
1385
|
+
const schools = ref<TSchool[]>([]);
|
|
1385
1386
|
const searchSchool = ref("");
|
|
1386
1387
|
|
|
1387
1388
|
const { getAll: getAllSchools } = useSchool();
|
|
@@ -1432,48 +1433,84 @@ watchEffect(() => {
|
|
|
1432
1433
|
}
|
|
1433
1434
|
});
|
|
1434
1435
|
|
|
1435
|
-
const selectedSchool =
|
|
1436
|
-
id: "",
|
|
1437
|
-
name: "",
|
|
1438
|
-
});
|
|
1436
|
+
const selectedSchool = computed(() => enrollment.value.schoolId);
|
|
1439
1437
|
|
|
1440
1438
|
watch(selectedSchool, (val) => {
|
|
1441
|
-
|
|
1442
|
-
|
|
1439
|
+
enrollment.value.gradeLevel = "";
|
|
1440
|
+
const school = schools.value.find((s) => s.id === val);
|
|
1441
|
+
|
|
1442
|
+
if (school?.name) {
|
|
1443
|
+
enrollment.value.school = school?._id ?? "";
|
|
1444
|
+
enrollment.value.schoolName = school?.name;
|
|
1443
1445
|
}
|
|
1444
1446
|
|
|
1445
|
-
enrollment.value.cityMunicipality =
|
|
1447
|
+
enrollment.value.cityMunicipality = school?.cityMunicipalityPSGC ?? "";
|
|
1446
1448
|
|
|
1447
|
-
if (
|
|
1448
|
-
enrollment.value.province =
|
|
1449
|
+
if (school?.province) {
|
|
1450
|
+
enrollment.value.province = school?.province;
|
|
1449
1451
|
}
|
|
1450
1452
|
|
|
1451
|
-
const regionPSGC =
|
|
1452
|
-
?
|
|
1453
|
+
const regionPSGC = school?.cityMunicipalityPSGC
|
|
1454
|
+
? school?.cityMunicipalityPSGC.slice(0, 2) + "00000000"
|
|
1453
1455
|
: "";
|
|
1454
1456
|
|
|
1455
|
-
if (
|
|
1457
|
+
if (school?.region && regionPSGC) {
|
|
1456
1458
|
enrollment.value.region = regionPSGC;
|
|
1457
1459
|
}
|
|
1458
1460
|
|
|
1459
|
-
if (
|
|
1460
|
-
enrollment.value.regionName =
|
|
1461
|
+
if (school?.regionName) {
|
|
1462
|
+
enrollment.value.regionName = school?.regionName;
|
|
1461
1463
|
}
|
|
1462
1464
|
|
|
1463
|
-
if (
|
|
1464
|
-
enrollment.value.division =
|
|
1465
|
-
?
|
|
1465
|
+
if (school?.division) {
|
|
1466
|
+
enrollment.value.division = school?.cityMunicipalityPSGC
|
|
1467
|
+
? school?.cityMunicipalityPSGC.slice(0, 5) + "00000"
|
|
1466
1468
|
: "";
|
|
1467
1469
|
}
|
|
1468
1470
|
|
|
1469
|
-
if (
|
|
1470
|
-
enrollment.value.divisionName =
|
|
1471
|
+
if (school?.divisionName) {
|
|
1472
|
+
enrollment.value.divisionName = school?.divisionName;
|
|
1471
1473
|
}
|
|
1472
1474
|
});
|
|
1473
1475
|
|
|
1474
1476
|
const { gradeLevels, generateSchoolYears, motherTongueOptions, tracks } =
|
|
1475
1477
|
useBasicEdu();
|
|
1476
1478
|
|
|
1479
|
+
const gradeLevelOffering = ref<Record<string, any>[]>([]);
|
|
1480
|
+
|
|
1481
|
+
const { getAll: getGradeLevels } = useGradeLevel();
|
|
1482
|
+
|
|
1483
|
+
const { data: getGradeLevelReq, refresh: refreshGradeLevels } =
|
|
1484
|
+
await useLazyAsyncData(
|
|
1485
|
+
"get-grade-levels-for-curriculum-subject-form",
|
|
1486
|
+
() =>
|
|
1487
|
+
getGradeLevels({
|
|
1488
|
+
limit: 100,
|
|
1489
|
+
status: "active",
|
|
1490
|
+
school: enrollment.value.school,
|
|
1491
|
+
}),
|
|
1492
|
+
{
|
|
1493
|
+
watch: [() => enrollment.value.school],
|
|
1494
|
+
immediate: false,
|
|
1495
|
+
}
|
|
1496
|
+
);
|
|
1497
|
+
|
|
1498
|
+
watchEffect(() => {
|
|
1499
|
+
if (getGradeLevelReq.value && getGradeLevelReq.value.items) {
|
|
1500
|
+
gradeLevelOffering.value = getGradeLevelReq.value.items.map(
|
|
1501
|
+
(l: TCurriculumSubject) => {
|
|
1502
|
+
if (typeof l.gradeLevel === "string") {
|
|
1503
|
+
return {
|
|
1504
|
+
title: l.gradeLevel.replace("-", " "),
|
|
1505
|
+
value: l.gradeLevel,
|
|
1506
|
+
educationLevel: l.educationLevel,
|
|
1507
|
+
};
|
|
1508
|
+
}
|
|
1509
|
+
}
|
|
1510
|
+
);
|
|
1511
|
+
}
|
|
1512
|
+
});
|
|
1513
|
+
|
|
1477
1514
|
const selectedTrackStrands = computed(
|
|
1478
1515
|
() =>
|
|
1479
1516
|
tracks.find(
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export default function useGradeLevel() {
|
|
2
|
+
const resource = "basic-education/grade-levels";
|
|
3
|
+
|
|
4
|
+
function add(value: TGradeLevel) {
|
|
5
|
+
return $fetch<Record<string, any>>(`/api/${resource}`, {
|
|
6
|
+
method: "POST",
|
|
7
|
+
body: value,
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
async function getAll({
|
|
12
|
+
page = 1,
|
|
13
|
+
search = "",
|
|
14
|
+
limit = 10,
|
|
15
|
+
status = "active",
|
|
16
|
+
school = "",
|
|
17
|
+
} = {}) {
|
|
18
|
+
return $fetch<Record<string, any>>(`/api/${resource}`, {
|
|
19
|
+
method: "GET",
|
|
20
|
+
query: { page, limit, search, status, school },
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function updateById(id: string) {
|
|
25
|
+
return $fetch<Record<string, any>>(`/api/${resource}/${id}`, {
|
|
26
|
+
method: "PUT",
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function deleteById(id: string) {
|
|
31
|
+
return $fetch<Record<string, any>>(`/api/${resource}/${id}`, {
|
|
32
|
+
method: "DELETE",
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return {
|
|
37
|
+
add,
|
|
38
|
+
getAll,
|
|
39
|
+
updateById,
|
|
40
|
+
deleteById,
|
|
41
|
+
};
|
|
42
|
+
}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@eeplatform/nuxt-layer-common",
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "1.
|
|
5
|
+
"version": "1.7.0",
|
|
6
6
|
"main": "./nuxt.config.ts",
|
|
7
7
|
"publishConfig": {
|
|
8
8
|
"access": "public"
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"typescript": "^5.6.3",
|
|
24
24
|
"vite-plugin-vuetify": "^2.0.4",
|
|
25
25
|
"vue": "latest",
|
|
26
|
-
"vuetify": "^3.
|
|
26
|
+
"vuetify": "^3.11.2"
|
|
27
27
|
},
|
|
28
28
|
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e",
|
|
29
29
|
"dependencies": {
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
declare type TCurriculumSubject = {
|
|
2
|
+
_id?: string;
|
|
3
|
+
curriculum: string;
|
|
4
|
+
curriculumName: string;
|
|
5
|
+
effectiveSchoolYear?: number[];
|
|
6
|
+
educationLevel: string;
|
|
7
|
+
gradeLevel: string | string[];
|
|
8
|
+
subjectCode: string;
|
|
9
|
+
subjectName: string;
|
|
10
|
+
subjectType: string;
|
|
11
|
+
program?: string;
|
|
12
|
+
programName?: string;
|
|
13
|
+
sessionFrequency: number;
|
|
14
|
+
sessionDuration: number;
|
|
15
|
+
totalMinutesPerWeek: number;
|
|
16
|
+
status?: string;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
declare type TCurriculum = {
|
|
20
|
+
_id?: string;
|
|
21
|
+
name: string;
|
|
22
|
+
effectiveSchoolYear: string;
|
|
23
|
+
maxTeachingHoursPerDay: number;
|
|
24
|
+
curriculumMemoRef?: string;
|
|
25
|
+
whitelist?: string[];
|
|
26
|
+
status?: string;
|
|
27
|
+
createdAt?: string;
|
|
28
|
+
updatedAt?: string;
|
|
29
|
+
deletedAt?: string;
|
|
30
|
+
createdBy?: string;
|
|
31
|
+
updatedBy?: string;
|
|
32
|
+
deletedBy?: string;
|
|
33
|
+
};
|
package/types/enrollment.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ declare type TTLearner = {
|
|
|
8
8
|
cityMunicipalityPSGC?: string; // e.g., "Manila"
|
|
9
9
|
division: string; // e.g., "Manila"
|
|
10
10
|
divisionName?: string; // e.g., "Manila"
|
|
11
|
+
schoolId: string;
|
|
11
12
|
school: string;
|
|
12
13
|
schoolName?: string;
|
|
13
14
|
schoolYear: string; // e.g., "2025-2026"
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
declare type TGradeLevel = {
|
|
2
|
+
_id?: string;
|
|
3
|
+
school: string;
|
|
4
|
+
educationLevel: string;
|
|
5
|
+
gradeLevel: string;
|
|
6
|
+
teachingStyle: string;
|
|
7
|
+
minNumberOfLearners: number;
|
|
8
|
+
maxNumberOfLearners: number;
|
|
9
|
+
tracks?: string[];
|
|
10
|
+
trackStrands?: string[];
|
|
11
|
+
defaultStartTime?: string;
|
|
12
|
+
defaultEndTime?: string;
|
|
13
|
+
status?: string;
|
|
14
|
+
createdAt?: string;
|
|
15
|
+
updatedAt?: string;
|
|
16
|
+
deletedAt?: string;
|
|
17
|
+
createdBy?: string;
|
|
18
|
+
updatedBy?: string;
|
|
19
|
+
deletedBy?: string;
|
|
20
|
+
};
|