diff --git a/ui/src/components/loa/loaList.vue b/ui/src/components/loa/loaList.vue
index 88fc92e..6494067 100644
--- a/ui/src/components/loa/loaList.vue
+++ b/ui/src/components/loa/loaList.vue
@@ -8,8 +8,16 @@ import {
TableHeader,
TableRow,
} from "@/components/ui/table"
+import { Badge } from '@/components/ui/badge'
+import {
+ DropdownMenu,
+ DropdownMenuContent,
+ DropdownMenuItem,
+ DropdownMenuTrigger,
+} from "@/components/ui/dropdown-menu"
+import { Ellipsis } from "lucide-vue-next";
import { getAllLOAs, LOARequest } from "@/api/loa";
-import { onMounted, ref } from "vue";
+import { onMounted, ref, computed } from "vue";
const LOAList = ref([]);
@@ -25,6 +33,32 @@ function formatDate(dateStr: string): string {
day: "numeric",
});
}
+
+function loaStatus(loa: {
+ start_date: string;
+ end_date: string;
+ deleted?: number;
+}): "Upcoming" | "Active" | "Expired" | "Cancelled" {
+ if (loa.deleted) return "Cancelled";
+
+ const now = new Date();
+ const start = new Date(loa.start_date);
+ const end = new Date(loa.end_date);
+
+ if (now < start) return "Upcoming";
+ if (now >= start && now <= end) return "Active";
+ if (now > end) return "Expired";
+
+ return "Expired"; // fallback
+}
+
+function sortByStartDate(loas: LOARequest[]): LOARequest[] {
+ return [...loas].sort(
+ (a, b) => new Date(b.start_date).getTime() - new Date(a.start_date).getTime()
+ );
+}
+
+const sortedLoas = computed(() => sortByStartDate(LOAList.value));
@@ -37,14 +71,11 @@ function formatDate(dateStr: string): string {
End
Reason
Posted on
+ Status
-
+
{{ post.name }}
@@ -52,6 +83,23 @@ function formatDate(dateStr: string): string {
{{ formatDate(post.end_date) }}
{{ post.reason }}
{{ formatDate(post.filed_date) }}
+
+ Upcoming
+ Active
+ Expired
+ Cancelled
+
+
+
+
+
+
+
+ Cancel
+
+
+
+
diff --git a/ui/src/pages/ManageLOA.vue b/ui/src/pages/ManageLOA.vue
index 3a24528..5fd3d35 100644
--- a/ui/src/pages/ManageLOA.vue
+++ b/ui/src/pages/ManageLOA.vue
@@ -1,12 +1,42 @@
+
+
diff --git a/ui/src/pages/SubmitLOA.vue b/ui/src/pages/SubmitLOA.vue
index 89a1125..1bed54a 100644
--- a/ui/src/pages/SubmitLOA.vue
+++ b/ui/src/pages/SubmitLOA.vue
@@ -1,3 +1,20 @@
+
+
-
+
\ No newline at end of file
diff --git a/ui/src/pages/memberList.vue b/ui/src/pages/memberList.vue
index 21c3001..5408c26 100644
--- a/ui/src/pages/memberList.vue
+++ b/ui/src/pages/memberList.vue
@@ -23,6 +23,7 @@ import {
DialogTitle,
DialogTrigger,
} from "@/components/ui/dialog"
+import Badge from "@/components/ui/badge/Badge.vue";
import { computed, ref } from "vue";
import { Member, getMembers } from "@/api/member";
import { useRouter } from 'vue-router';
@@ -48,23 +49,9 @@ const searchedMembers = computed(() => {
return members.value.filter(member => member.member_name.toLowerCase().includes(searchVal.value.toLowerCase()));
});
-// page state systems
-const showLOADialog = ref(false);
-const LOAuserId = ref(null);
-
@@ -89,9 +76,8 @@ const LOAuserId = ref
(null);
{{ member.rank }}
{{ member.status }}
- {{ member.status }}
- {{ member.status }}
-
+ On LOA
+
@@ -99,7 +85,6 @@ const LOAuserId = ref(null);
Change Rank
Transfer
- LOA
Retire