-
Routes Page
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ selectedRoute.routeName }}
+ {{ selectedRoute.routeId }} - {{ selectedRoute.date }}
+
+
+
+ {{ selectedRoute.status.toUpperCase() }}
+
+
+
+
+
+
+
+
+
+
+
+
+
Route Summary
+
+
+
+ mdi-account-hard-hat
+ Technician:
+ {{ selectedRoute.technician }}
+
+
+
+ mdi-clock-start
+ Start Time:
+ {{ selectedRoute.startTime }}
+
+
+
+ mdi-car
+ Vehicle:
+ {{ selectedRoute.vehicleId }}
+
+
+
+ mdi-map-marker-distance
+ Total Miles:
+ {{ selectedRoute.totalMileage }} mi
+
+
+
+ mdi-timer
+ Est. Duration:
+ {{ selectedRoute.estimatedDuration }}
+
+
+
+ mdi-map-marker-multiple
+ Stops:
+ {{ selectedRoute.completedStops }}/{{ selectedRoute.totalStops }}
+
+
+
+
+
+
+
Route Stops
+
+
+
+
{{ stop.stopId }}
+
+
+
+
+
+
+ mdi-map-marker
+ {{ stop.address }}
+
+
+
+ mdi-wrench
+ {{ stop.serviceType }}
+
+
+
+ mdi-clock
+ {{ stop.estimatedTime }} ({{ stop.duration }} min)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
mdi-map
+
Route Map
+
Interactive map showing route path and stops
+
+
+
+
+
+
+
+
{{ selectedRoute.totalMileage }}
+
Total Miles
+
+
+
{{ selectedRoute.totalStops }}
+
Stops
+
+
+
{{ Math.round(selectedRoute.totalMileage / selectedRoute.totalStops * 10) / 10 }}
+
Avg Miles/Stop
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Close
+
+
+ Optimize Route
+
+
+
+
-
-
+
+
diff --git a/frontend/src/main.js b/frontend/src/main.js
index bcc052d..5633c18 100644
--- a/frontend/src/main.js
+++ b/frontend/src/main.js
@@ -5,8 +5,28 @@ import router from "./router";
import PrimeVue from "primevue/config";
import { globalSettings } from "./globalSettings";
+// Vuetify
+import "vuetify/styles";
+import { createVuetify } from "vuetify";
+import * as components from "vuetify/components";
+import * as directives from "vuetify/directives";
+import { mdi } from "vuetify/iconsets/mdi";
+import "@mdi/font/css/materialdesignicons.css";
+
+const vuetify = createVuetify({
+ components,
+ directives,
+ icons: {
+ defaultSet: "mdi",
+ sets: {
+ mdi,
+ },
+ },
+});
+
createApp(App)
.use(router)
+ .use(vuetify)
.use(PrimeVue, {
theme: {
options: {
diff --git a/frontend/src/utils.js b/frontend/src/utils.js
index ac18662..c58dca3 100644
--- a/frontend/src/utils.js
+++ b/frontend/src/utils.js
@@ -503,6 +503,631 @@ class DataUtils {
],
},
];
+
+ static dummyServiceData = [
+ // Scheduled services
+ {
+ id: "service_1",
+ title: "Sprinkler System Installation - John Doe",
+ customer: "John Doe",
+ address: "123 Lane Dr, Cityville, MN",
+ serviceType: "Sprinkler System Installation",
+ foreman: "Mike Thompson",
+ crew: ["Technician A", "Technician B"],
+ scheduledDate: "2025-10-25",
+ scheduledTime: "08:00",
+ duration: 480, // minutes (8 hours)
+ status: "scheduled",
+ priority: "high",
+ estimatedCost: 4500,
+ notes: "Residential front and back yard coverage, 12 zones",
+ },
+ {
+ id: "service_2",
+ title: "Sprinkler Winterization - Jane Smith",
+ customer: "Jane Smith",
+ address: "456 Oak St, Townsville, CA",
+ serviceType: "Sprinkler Winterization",
+ foreman: "Sarah Johnson",
+ crew: ["Technician C"],
+ scheduledDate: "2025-10-25",
+ scheduledTime: "14:00",
+ duration: 90, // minutes (1.5 hours)
+ status: "scheduled",
+ priority: "medium",
+ estimatedCost: 150,
+ notes: "Blow out all lines before first freeze",
+ },
+ {
+ id: "service_3",
+ title: "Drip Line Repair - Mike Johnson",
+ customer: "Mike Johnson",
+ address: "789 Pine Rd, Villagetown, TX",
+ serviceType: "Drip Line Repair",
+ foreman: "David Martinez",
+ crew: ["Technician D"],
+ scheduledDate: "2025-10-26",
+ scheduledTime: "09:00",
+ duration: 120, // minutes (2 hours)
+ status: "scheduled",
+ priority: "high",
+ estimatedCost: 280,
+ notes: "Multiple leaks in flower bed drip system",
+ },
+ {
+ id: "service_4",
+ title: "Controller Programming - Emily Davis",
+ customer: "Emily Davis",
+ address: "321 Maple Ave, Hamlet, FL",
+ serviceType: "Controller Programming",
+ foreman: "Chris Wilson",
+ crew: ["Technician E"],
+ scheduledDate: "2025-10-27",
+ scheduledTime: "10:00",
+ duration: 60, // minutes (1 hour)
+ status: "scheduled",
+ priority: "medium",
+ estimatedCost: 125,
+ notes: "Seasonal schedule update and zone testing",
+ },
+ {
+ id: "service_5",
+ title: "Spring Startup - David Wilson",
+ customer: "David Wilson",
+ address: "654 Cedar Blvd, Borough, NY",
+ serviceType: "Spring Startup",
+ foreman: "Lisa Anderson",
+ crew: ["Technician F"],
+ scheduledDate: "2025-10-28",
+ scheduledTime: "11:00",
+ duration: 75, // minutes (1.25 hours)
+ status: "scheduled",
+ priority: "low",
+ estimatedCost: 95,
+ notes: "Annual system startup and inspection",
+ },
+ {
+ id: "service_6",
+ title: "Zone Expansion - Sarah Brown",
+ customer: "Sarah Brown",
+ address: "987 Birch Ln, Metropolis, IL",
+ serviceType: "Zone Expansion",
+ foreman: "Robert Thomas",
+ crew: ["Technician G", "Technician H"],
+ scheduledDate: "2025-10-29",
+ scheduledTime: "08:30",
+ duration: 300, // minutes (5 hours)
+ status: "scheduled",
+ priority: "high",
+ estimatedCost: 1800,
+ notes: "Add 4 new zones to existing system for landscaped areas",
+ },
+ {
+ id: "service_13",
+ title: "Backflow Testing - Robert Green",
+ customer: "Robert Green",
+ address: "445 Elm St, Riverside, CA",
+ serviceType: "Backflow Testing",
+ foreman: "Mike Thompson",
+ crew: ["Technician I"],
+ scheduledDate: "2025-10-27",
+ scheduledTime: "14:30",
+ duration: 60, // minutes (1 hour)
+ status: "scheduled",
+ priority: "medium",
+ estimatedCost: 120,
+ notes: "Annual backflow preventer inspection",
+ },
+ {
+ id: "service_14",
+ title: "Smart Controller Install - Lisa Park",
+ customer: "Lisa Park",
+ address: "892 Maple Dr, Springfield, TX",
+ serviceType: "Smart Controller Install",
+ foreman: "Sarah Johnson",
+ crew: ["Technician J"],
+ scheduledDate: "2025-10-28",
+ scheduledTime: "09:30",
+ duration: 120, // minutes (2 hours)
+ status: "scheduled",
+ priority: "low",
+ estimatedCost: 450,
+ notes: "Upgrade to WiFi-enabled smart controller",
+ },
+ {
+ id: "service_15",
+ title: "Pump Station Repair - Mark Wilson",
+ customer: "Mark Wilson",
+ address: "123 Oak Ave, Laketown, FL",
+ serviceType: "Pump Station Repair",
+ foreman: "David Martinez",
+ crew: ["Technician K", "Technician L"],
+ scheduledDate: "2025-10-29",
+ scheduledTime: "13:00",
+ duration: 180, // minutes (3 hours)
+ status: "scheduled",
+ priority: "urgent",
+ estimatedCost: 680,
+ notes: "Pump not priming, possible impeller issue",
+ },
+
+ // Unscheduled services
+ {
+ id: "service_7",
+ title: "Emergency Leak Repair - Amanda Martinez",
+ customer: "Amanda Martinez",
+ address: "753 Willow Dr, Smalltown, OH",
+ serviceType: "Emergency Leak Repair",
+ foreman: null,
+ crew: [],
+ scheduledDate: null,
+ scheduledTime: null,
+ duration: 90, // minutes (1.5 hours)
+ status: "unscheduled",
+ priority: "urgent",
+ estimatedCost: 200,
+ notes: "Main line leak flooding driveway",
+ },
+ {
+ id: "service_8",
+ title: "Broken Sprinkler Head - Joshua Anderson",
+ customer: "Joshua Anderson",
+ address: "852 Aspen Rd, Bigcity, NJ",
+ serviceType: "Sprinkler Head Replacement",
+ foreman: null,
+ crew: [],
+ scheduledDate: null,
+ scheduledTime: null,
+ duration: 45, // minutes
+ status: "unscheduled",
+ priority: "medium",
+ estimatedCost: 75,
+ notes: "Multiple heads damaged by mower",
+ },
+ {
+ id: "service_9",
+ title: "System Inspection - Olivia Thomas",
+ customer: "Olivia Thomas",
+ address: "147 Cypress St, Uptown, GA",
+ serviceType: "System Inspection",
+ foreman: null,
+ crew: [],
+ scheduledDate: null,
+ scheduledTime: null,
+ duration: 60, // minutes (1 hour)
+ status: "unscheduled",
+ priority: "low",
+ estimatedCost: 85,
+ notes: "Annual maintenance check requested",
+ },
+ {
+ id: "service_10",
+ title: "New Installation Quote - Daniel Jackson",
+ customer: "Daniel Jackson",
+ address: "369 Fir Ave, Downtown, MI",
+ serviceType: "Installation Quote",
+ foreman: null,
+ crew: [],
+ scheduledDate: null,
+ scheduledTime: null,
+ duration: 45, // minutes
+ status: "unscheduled",
+ priority: "medium",
+ estimatedCost: 0,
+ notes: "Estimate for new construction sprinkler system",
+ },
+ {
+ id: "service_11",
+ title: "Valve Replacement - Sophia White",
+ customer: "Sophia White",
+ address: "258 Palm Blvd, Riverside, AZ",
+ serviceType: "Valve Replacement",
+ foreman: null,
+ crew: [],
+ scheduledDate: null,
+ scheduledTime: null,
+ duration: 120, // minutes (2 hours)
+ status: "unscheduled",
+ priority: "medium",
+ estimatedCost: 350,
+ notes: "Zone 3 valve not closing properly",
+ },
+ {
+ id: "service_12",
+ title: "Controller Repair - Matthew Harris",
+ customer: "Matthew Harris",
+ address: "951 Olive Ln, Seaside, OR",
+ serviceType: "Controller Repair",
+ foreman: null,
+ crew: [],
+ scheduledDate: null,
+ scheduledTime: null,
+ duration: 90, // minutes (1.5 hours)
+ status: "unscheduled",
+ priority: "urgent",
+ estimatedCost: 250,
+ notes: "Controller display not working, possible storm damage",
+ },
+ ];
+
+ static dummyRouteData = [
+ {
+ routeId: "TECH-001",
+ routeName: "North Valley Tech Route",
+ routeType: "Tech Route",
+ technician: "Mike Thompson",
+ date: "2025-10-25",
+ status: "in progress",
+ totalStops: 6,
+ completedStops: 2,
+ estimatedDuration: "8 hours",
+ startTime: "07:00",
+ vehicleId: "TECH-101",
+ totalMileage: 52.3,
+ stops: [
+ {
+ stopId: 1,
+ customer: "John Doe",
+ address: "123 Lane Dr, Cityville, MN",
+ serviceType: "Complete Sprinkler System Install",
+ estimatedTime: "07:30",
+ duration: 240,
+ status: "completed",
+ coordinates: { lat: 44.9778, lng: -93.2650 }
+ },
+ {
+ stopId: 2,
+ customer: "Sarah Johnson",
+ address: "456 Oak St, Northfield, MN",
+ serviceType: "Zone Expansion Install",
+ estimatedTime: "11:45",
+ duration: 180,
+ status: "completed",
+ coordinates: { lat: 44.4583, lng: -93.1614 }
+ },
+ {
+ stopId: 3,
+ customer: "Mike Wilson",
+ address: "789 Pine Rd, Faribault, MN",
+ serviceType: "Drip System Installation",
+ estimatedTime: "15:00",
+ duration: 120,
+ status: "in progress",
+ coordinates: { lat: 44.2950, lng: -93.2688 }
+ },
+ {
+ stopId: 4,
+ customer: "Emily Davis",
+ address: "321 Maple Ave, Owatonna, MN",
+ serviceType: "Smart Controller Install",
+ estimatedTime: "17:30",
+ duration: 90,
+ status: "not started",
+ coordinates: { lat: 44.0839, lng: -93.2261 }
+ },
+ {
+ stopId: 5,
+ customer: "David Brown",
+ address: "654 Cedar Blvd, Austin, MN",
+ serviceType: "Backflow Preventer Install",
+ estimatedTime: "19:15",
+ duration: 75,
+ status: "not started",
+ coordinates: { lat: 43.6667, lng: -92.9746 }
+ },
+ {
+ stopId: 6,
+ customer: "Lisa Garcia",
+ address: "987 Elm St, Albert Lea, MN",
+ serviceType: "Pump Station Installation",
+ estimatedTime: "20:45",
+ duration: 150,
+ status: "not started",
+ coordinates: { lat: 43.6481, lng: -93.3687 }
+ }
+ ]
+ },
+ {
+ routeId: "MAT-002",
+ routeName: "South Metro Materials Route",
+ routeType: "Materials Route",
+ technician: "Sarah Johnson",
+ date: "2025-10-25",
+ status: "completed",
+ totalStops: 5,
+ completedStops: 5,
+ estimatedDuration: "4 hours",
+ startTime: "06:00",
+ vehicleId: "MAT-102",
+ totalMileage: 42.1,
+ stops: [
+ {
+ stopId: 1,
+ customer: "Jennifer White - Job #2245",
+ address: "555 Main St, Burnsville, MN",
+ serviceType: "Deliver Pipes & Fittings",
+ estimatedTime: "06:30",
+ duration: 30,
+ status: "completed",
+ coordinates: { lat: 44.7677, lng: -93.2777 }
+ },
+ {
+ stopId: 2,
+ customer: "Mark Anderson - Job #2248",
+ address: "777 First Ave, Eagan, MN",
+ serviceType: "Deliver Sprinkler Heads & Valves",
+ estimatedTime: "07:15",
+ duration: 25,
+ status: "completed",
+ coordinates: { lat: 44.8041, lng: -93.1668 }
+ },
+ {
+ stopId: 3,
+ customer: "Carol Thompson - Job #2250",
+ address: "999 Second St, Apple Valley, MN",
+ serviceType: "Deliver Controller & Wire",
+ estimatedTime: "08:00",
+ duration: 20,
+ status: "completed",
+ coordinates: { lat: 44.7319, lng: -93.2177 }
+ },
+ {
+ stopId: 4,
+ customer: "Steven Clark - Job #2253",
+ address: "111 Third Ave, Rosemount, MN",
+ serviceType: "Deliver Backflow Preventer",
+ estimatedTime: "08:45",
+ duration: 25,
+ status: "completed",
+ coordinates: { lat: 44.7391, lng: -93.0658 }
+ },
+ {
+ stopId: 5,
+ customer: "Nancy Rodriguez - Job #2256",
+ address: "222 Fourth St, Lakeville, MN",
+ serviceType: "Deliver Pump & Pressure Tank",
+ estimatedTime: "09:30",
+ duration: 35,
+ status: "completed",
+ coordinates: { lat: 44.6497, lng: -93.2427 }
+ }
+ ]
+ },
+ {
+ routeId: "WAR-003",
+ routeName: "West Metro Warranty Route",
+ routeType: "Warranty Route",
+ technician: "David Martinez",
+ date: "2025-10-26",
+ status: "not started",
+ totalStops: 6,
+ completedStops: 0,
+ estimatedDuration: "5.5 hours",
+ startTime: "08:00",
+ vehicleId: "SRV-103",
+ totalMileage: 48.7,
+ stops: [
+ {
+ stopId: 1,
+ customer: "Rebecca Johnson - Warranty #W-445",
+ address: "444 West St, Minnetonka, MN",
+ serviceType: "Warranty: Valve Not Closing",
+ estimatedTime: "08:30",
+ duration: 60,
+ status: "not started",
+ coordinates: { lat: 44.9211, lng: -93.4687 }
+ },
+ {
+ stopId: 2,
+ customer: "Kevin Brown - Warranty #W-448",
+ address: "666 Lake Rd, Wayzata, MN",
+ serviceType: "Warranty: Controller Malfunction",
+ estimatedTime: "10:00",
+ duration: 75,
+ status: "not started",
+ coordinates: { lat: 44.9744, lng: -93.5066 }
+ },
+ {
+ stopId: 3,
+ customer: "Michelle Davis - Warranty #W-451",
+ address: "888 Shore Dr, Orono, MN",
+ serviceType: "Warranty: Sprinkler Head Broken",
+ estimatedTime: "11:30",
+ duration: 45,
+ status: "not started",
+ coordinates: { lat: 45.0541, lng: -93.6091 }
+ },
+ {
+ stopId: 4,
+ customer: "Daniel Wilson - Warranty #W-453",
+ address: "101 Bay Ln, Mound, MN",
+ serviceType: "Warranty: Pipe Leak Repair",
+ estimatedTime: "12:30",
+ duration: 90,
+ status: "not started",
+ coordinates: { lat: 44.9364, lng: -93.6719 }
+ },
+ {
+ stopId: 5,
+ customer: "Laura Smith - Warranty #W-456",
+ address: "202 Hill St, Chanhassen, MN",
+ serviceType: "Warranty: Low Water Pressure",
+ estimatedTime: "14:15",
+ duration: 60,
+ status: "not started",
+ coordinates: { lat: 44.8619, lng: -93.5272 }
+ },
+ {
+ stopId: 6,
+ customer: "James Lee - Warranty #W-458",
+ address: "303 Valley Rd, Chaska, MN",
+ serviceType: "Warranty: Zone Not Working",
+ estimatedTime: "15:30",
+ duration: 75,
+ status: "not started",
+ coordinates: { lat: 44.7886, lng: -93.6022 }
+ }
+ ]
+ },
+ {
+ routeId: "SOD-004",
+ routeName: "East Metro Sod Route",
+ routeType: "Sod Route",
+ technician: "Chris Wilson",
+ date: "2025-10-26",
+ status: "in progress",
+ totalStops: 4,
+ completedStops: 1,
+ estimatedDuration: "6 hours",
+ startTime: "07:30",
+ vehicleId: "SOD-104",
+ totalMileage: 35.8,
+ stops: [
+ {
+ stopId: 1,
+ customer: "Thomas Anderson - Job #2301",
+ address: "505 East St, Woodbury, MN",
+ serviceType: "Install 2,500 sq ft Sod",
+ estimatedTime: "08:00",
+ duration: 120,
+ status: "completed",
+ coordinates: { lat: 44.9237, lng: -92.9594 }
+ },
+ {
+ stopId: 2,
+ customer: "Patricia Miller - Job #2305",
+ address: "707 North Ave, Oakdale, MN",
+ serviceType: "Install 1,800 sq ft Sod",
+ estimatedTime: "10:30",
+ duration: 90,
+ status: "in progress",
+ coordinates: { lat: 44.9633, lng: -92.9652 }
+ },
+ {
+ stopId: 3,
+ customer: "Michael Taylor - Job #2308",
+ address: "909 South Blvd, Maplewood, MN",
+ serviceType: "Install 3,200 sq ft Sod",
+ estimatedTime: "12:15",
+ duration: 150,
+ status: "not started",
+ coordinates: { lat: 44.9530, lng: -92.9952 }
+ },
+ {
+ stopId: 4,
+ customer: "Lisa Roberts - Job #2312",
+ address: "121 Center St, North St. Paul, MN",
+ serviceType: "Install 1,200 sq ft Sod",
+ estimatedTime: "15:00",
+ duration: 75,
+ status: "not started",
+ coordinates: { lat: 45.0119, lng: -93.0074 }
+ }
+ ]
+ },
+ {
+ routeId: "MACH-005",
+ routeName: "Northwest Machine Route",
+ routeType: "Machine Route",
+ technician: "Lisa Anderson",
+ date: "2025-10-27",
+ status: "not started",
+ totalStops: 3,
+ completedStops: 0,
+ estimatedDuration: "5 hours",
+ startTime: "07:00",
+ vehicleId: "MACH-105",
+ totalMileage: 45.2,
+ stops: [
+ {
+ stopId: 1,
+ customer: "Ashley White - Job #2320",
+ address: "141 Northwest Dr, Plymouth, MN",
+ serviceType: "Deliver Trenching Machine",
+ estimatedTime: "07:30",
+ duration: 90,
+ status: "not started",
+ coordinates: { lat: 45.0105, lng: -93.4555 }
+ },
+ {
+ stopId: 2,
+ customer: "Brian Johnson - Job #2325",
+ address: "151 Maple St, Maple Grove, MN",
+ serviceType: "Deliver Boring Machine",
+ estimatedTime: "09:15",
+ duration: 75,
+ status: "not started",
+ coordinates: { lat: 45.0724, lng: -93.4557 }
+ },
+ {
+ stopId: 3,
+ customer: "Christina Davis - Job #2328",
+ address: "161 Oak Ave, Osseo, MN",
+ serviceType: "Deliver Compactor & Tools",
+ estimatedTime: "10:45",
+ duration: 60,
+ status: "not started",
+ coordinates: { lat: 45.1188, lng: -93.4025 }
+ }
+ ]
+ },
+ {
+ routeId: "TRK-006",
+ routeName: "Regional Truck Route",
+ routeType: "Truck Route",
+ technician: "Mark Thompson",
+ date: "2025-10-27",
+ status: "not started",
+ totalStops: 4,
+ completedStops: 0,
+ estimatedDuration: "6 hours",
+ startTime: "06:30",
+ vehicleId: "TRUCK-106",
+ totalMileage: 78.5,
+ stops: [
+ {
+ stopId: 1,
+ customer: "Metro Landscaping - Pickup #445",
+ address: "2250 Highway 55, Plymouth, MN",
+ serviceType: "Equipment Pickup",
+ estimatedTime: "07:00",
+ duration: 30,
+ status: "not started",
+ coordinates: { lat: 45.0153, lng: -93.4233 }
+ },
+ {
+ stopId: 2,
+ customer: "Irrigation Supply Co - Order #889",
+ address: "1875 Industrial Blvd, Maple Grove, MN",
+ serviceType: "Material Pickup",
+ estimatedTime: "08:00",
+ duration: 45,
+ status: "not started",
+ coordinates: { lat: 45.0845, lng: -93.4321 }
+ },
+ {
+ stopId: 3,
+ customer: "Johnson Properties - Delivery",
+ address: "3456 Elm Street, Brooklyn Park, MN",
+ serviceType: "Equipment Drop-off",
+ estimatedTime: "09:15",
+ duration: 60,
+ status: "not started",
+ coordinates: { lat: 45.0941, lng: -93.3563 }
+ },
+ {
+ stopId: 4,
+ customer: "Storage Facility - Return",
+ address: "5200 Bass Lake Rd, Crystal, MN",
+ serviceType: "Equipment Return",
+ estimatedTime: "11:00",
+ duration: 45,
+ status: "not started",
+ coordinates: { lat: 45.0341, lng: -93.3678 }
+ }
+ ]
+ }
+ ];
}
export default DataUtils;