-
- {{ totalRevenue }}
- Monthly Revenue
-
-
- {{ completedJobs }}
- Jobs Completed
-
-
- {{ clientSatisfaction }}%
- Client Satisfaction
-
-
- {{ avgResponseTime }}h
- Avg Response Time
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -209,17 +306,29 @@
import { ref, computed, onMounted } from "vue";
import { useRouter } from "vue-router";
import Card from "primevue/card";
-import Button from "primevue/button";
import Tag from "primevue/tag";
-import { Calendar, Community, Hammer, PathArrowSolid, Clock, HistoricShield } from "@iconoir/vue";
+import { Calendar, Community, Hammer, PathArrowSolid, Clock, Shield, ShieldSearch,
+ClipboardCheck, DoubleCheck, CreditCard, CardNoAccess, ChatBubbleQuestion, Edit,
+WateringSoil, Soil, Truck, SoilAlt } from "@iconoir/vue";
import DataUtils from "../../utils.js";
import { useNotificationStore } from "../../stores/notifications-primevue";
+//import SimpleChart from "../common/SimpleChart.vue";
+import TodoChart from "../common/TodoChart.vue";
const router = useRouter();
// Dummy data from utils
const clientData = ref(DataUtils.dummyClientData);
const jobData = ref(DataUtils.dummyJobData);
+const locatesTodoNumber = ref(45);
+const locatesCompletedNumber = ref(5);
+const permitsTodoNumber = ref(24);
+const permitsCompletedNumber = ref(7);
+const permitFinalizationsTodoNumber = ref(35);
+const permitFinalizationsCompletedNumber = ref(2);
+const warrantyTodoNumber = ref(0);
+const warrantyCompletedNumber = ref(10);
+
const notifications = useNotificationStore();
// Computed values for dashboard metrics
@@ -266,10 +375,11 @@ onMounted(() => {
transition:
transform 0.2s ease,
box-shadow 0.2s ease;
+ background-color: var(--theme-surface-alt)
}
.widget-card:hover {
- transform: translateY(-2px);
+ /*transform: translateY(-2px);*/
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
}
@@ -281,7 +391,7 @@ onMounted(() => {
}
.widget-icon {
- color: rgb(69, 112, 101);
+ color: var(--theme-primary-strong);
width: 24px;
height: 24px;
}
@@ -295,7 +405,8 @@ onMounted(() => {
.widget-content {
display: flex;
flex-direction: column;
- gap: 15px;
+ margin: 0;
+ /*gap: 15px;*/
}
.metric {
@@ -353,6 +464,10 @@ onMounted(() => {
font-size: 0.9rem;
}
+.sidebar-button {
+ justify-content: center;
+}
+
/* Responsive adjustments */
@media (max-width: 768px) {
.widgets-grid {