feat: 5-tier pricing UI, market ticker, delivery map, and stats dashboard
Full frontend companion to the API updates: - Pricing: Oil price admin page now supports 5-tier configuration for same-day/prime/emergency fees with collapsible tier sections - Market Ticker: Add GlobalMarketTicker and OilPriceTicker components with real-time commodity + competitor prices in header bar - Delivery Map: New interactive Leaflet map view for daily deliveries - Stats: Add PricingHistoryChart component and info pages for market trends with daily/weekly/monthly gallon charts and YoY comparisons - Layout: Refactor header navbar to separate search into navbar-center, add oilPrice Pinia store with polling, update sidebar navigation - Forms: Wire tier selection into delivery create/edit flows, update types and services for new pricing and scraper API endpoints Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -111,13 +111,13 @@
|
||||
<td class="text-right">
|
||||
<div class="flex items-center justify-end gap-1">
|
||||
<router-link :to="{ name: 'deliveryCreate', params: { id: person.id } }"
|
||||
class="btn btn-xs btn-warning btn-outline" title="New Delivery">
|
||||
class="btn btn-xs btn-success btn-outline" title="New Delivery">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
||||
stroke="currentColor" class="w-3 h-3">
|
||||
<path stroke-linecap="round" stroke-linejoin="round"
|
||||
d="M15.59 14.37a6 6 0 01-5.84 7.38v-4.8m5.84-2.58a14.98 14.98 0 006.16-12.12A14.98 14.98 0 009.631 8.41m5.96 5.96a14.926 14.926 0 01-5.841 2.58m-.119-8.54a6 6 0 00-7.381 5.84h4.8m2.581-5.84a14.927 14.927 0 00-2.58 5.84m2.699 2.7c-.103.021-.207.041-.311.06a15.09 15.09 0 01-2.448-2.448 14.9 14.9 0 01.06-.312m-2.24 2.39a4.493 4.493 0 00-1.757 4.306 4.493 4.493 0 004.306-1.758M16.5 9a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0z" />
|
||||
</svg>
|
||||
<span class="hidden 2xl:inline ml-1">Deliv</span>
|
||||
Delivery
|
||||
</router-link>
|
||||
|
||||
<router-link :to="{ name: 'CalenderCustomer', params: { id: person.id } }"
|
||||
@@ -127,11 +127,11 @@
|
||||
<path stroke-linecap="round" stroke-linejoin="round"
|
||||
d="M11.42 15.17L17.25 21A2.652 2.652 0 0021 17.25l-5.877-5.877M11.42 15.17l2.496-3.03c.317-.384.74-.626 1.208-.766M11.42 15.17l-4.655 5.653a2.548 2.548 0 11-3.586-3.586l6.837-5.63m5.108-.233c.55-.164 1.163-.188 1.743-.14a4.5 4.5 0 004.486-6.336l-3.276 3.277a3.004 3.004 0 01-2.25-2.25l3.276-3.276a4.5 4.5 0 00-6.336 4.486c.091 1.076-.071 2.264-.904 2.95l-.102.085m-1.745 1.437L5.909 7.5H4.5L2.25 3.75l1.5-1.5L7.5 4.5v1.409l4.26 4.26m-1.745 1.437l1.745-1.437m6.615 8.206L15.75 15.75M4.867 19.125h.008v.008h-.008v-.008z" />
|
||||
</svg>
|
||||
<span class="hidden 2xl:inline ml-1">Svc</span>
|
||||
Service
|
||||
</router-link>
|
||||
|
||||
<router-link :to="{ name: 'customerProfile', params: { id: person.id } }"
|
||||
class="btn btn-xs btn-success btn-outline">View</router-link>
|
||||
class="btn btn-xs btn-neutral btn-outline">View</router-link>
|
||||
<router-link :to="{ name: 'customerEdit', params: { id: person.id } }"
|
||||
class="btn btn-xs btn-info btn-outline">Edit</router-link>
|
||||
</div>
|
||||
@@ -194,7 +194,7 @@
|
||||
|
||||
<div class="flex gap-2 pt-3 mt-3 border-t border-base-content/10 flex-wrap">
|
||||
<router-link :to="{ name: 'deliveryCreate', params: { id: person.id } }"
|
||||
class="btn btn-sm btn-warning btn-outline flex-1">
|
||||
class="btn btn-sm btn-success btn-outline flex-1">
|
||||
Delivery
|
||||
</router-link>
|
||||
<router-link :to="{ name: 'CalenderCustomer', params: { id: person.id } }"
|
||||
@@ -206,7 +206,7 @@
|
||||
Edit
|
||||
</router-link>
|
||||
<router-link :to="{ name: 'customerProfile', params: { id: person.id } }"
|
||||
class="btn btn-sm btn-success btn-outline flex-1">
|
||||
class="btn btn-sm btn-neutral btn-outline flex-1">
|
||||
View
|
||||
</router-link>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user