From 1e8fd5b59516967cb141ec4c741db31f96a488f0 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Mon, 20 Jul 2026 22:35:10 +0700 Subject: [PATCH] feat: enhance permissions and layout in Analysis component for better role-based display --- app/Enums/Role.php | 4 +- resources/js/pages/admin/Analysis.vue | 406 ++++++++++++++------------ 2 files changed, 227 insertions(+), 183 deletions(-) diff --git a/app/Enums/Role.php b/app/Enums/Role.php index f59a5a1..d1e0b15 100644 --- a/app/Enums/Role.php +++ b/app/Enums/Role.php @@ -132,7 +132,8 @@ public function permissions(): array Permission::ANALYSIS_EXPENSE, Permission::ANALYSIS_BUSY_HOURS, Permission::ANALYSIS_PROFIT_ORDERS, - Permission::ANALYSIS_TOP_SUPPLIERS, + Permission::ANALYSIS_PROFIT_HPP, + Permission::ANALYSIS_PROFIT_GROSS, Permission::ANALYSIS_TOP_CUSTOMERS, Permission::ANALYSIS_TOP_PRODUCTS, Permission::ANALYSIS_MARKETING_SALES, @@ -332,6 +333,7 @@ public function permissions(): array Permission::ANALYSIS_REVENUE, Permission::ANALYSIS_PROFIT_ORDERS, Permission::ANALYSIS_TOP_PRODUCTS, + Permission::ANALYSIS_TOP_CUSTOMERS, Permission::ATTENDANCES_VIEW, Permission::ATTENDANCES_CREATE, diff --git a/resources/js/pages/admin/Analysis.vue b/resources/js/pages/admin/Analysis.vue index daac1cb..2f8b551 100644 --- a/resources/js/pages/admin/Analysis.vue +++ b/resources/js/pages/admin/Analysis.vue @@ -382,6 +382,49 @@ const busyHourTickValues = computed(() => { return all; }); +const sectionOrder = computed(() => { + if (hasAnyRole(['owner', 'developer'])) { + return { + statCards: 1, + revenue: 5, + expense: 6, + profitGross: 7, + totalOrder: 8, + marketingSales: 9, + topSuppliers: 10, + topProducts: 11, + topCustomers: 12, + busyHours: 13, + }; + } + + if (hasAnyRole(['admin_toko', 'direktur'])) { + return { + statCards: 1, + revenue: 4, + expense: 5, + profitGross: 6, + totalOrder: 7, + marketingSales: 8, + topProducts: 9, + topCustomers: 10, + busyHours: 11, + }; + } + + if (hasRole('marketing')) { + return { + statCards: 1, + revenue: 2, + totalOrder: 3, + topProducts: 4, + topCustomers: 5, + }; + } + + return {}; +}); + // Top 5 Chart configs type SupplierData = { name: string; amount: number }; type CustomerData = { name: string; amount: number }; @@ -609,8 +652,8 @@ watch([startDate, endDate], () => { - -
+ +
+
Pendapatan @@ -775,7 +818,7 @@ watch([startDate, endDate], () => { - +
Pengeluaran @@ -830,191 +873,57 @@ watch([startDate, endDate], () => { - - - -
-
- Jam Sibuk Toko -
-
-

- Jam Tersibuk -

-

- {{ peakHour.hour }} -

-

- {{ peakHour.orders }} pesanan -

-
-
-
- - - - - - - - - -
- Belum ada data pesanan -
-
-
- - -
- - - -
+ ] : []), + ]" :style="{ order: sectionOrder.profitGross ?? 99 }" /> - -
- - - Top 5 Supplier - Berdasarkan total harga pembelian - - - - - - - - - - -
- Belum ada data supplier -
-
-
- - - - Top 5 Pelanggan - Berdasarkan total nilai pesanan - - - - - - - - - - -
- Belum ada data pelanggan -
-
-
- - - - Top 5 Produk - Berdasarkan jumlah terjual - - - - - - - - - - -
- Belum ada data produk -
-
-
-
+ + - + Penjualan Marketing Rekap penjualan per marketing @@ -1092,6 +1001,139 @@ watch([startDate, endDate], () => {
+ + + + + Top 5 Supplier + Berdasarkan total harga pembelian + + + + + + + + + + +
+ Belum ada data supplier +
+
+
+ + + + + Top 5 Produk + Berdasarkan jumlah terjual + + + + + + + + + + +
+ Belum ada data produk +
+
+
+ + + + + Top 5 Pelanggan + Berdasarkan total nilai pesanan + + + + + + + + + + +
+ Belum ada data pelanggan +
+
+
+ + + + +
+
+ Jam Sibuk Toko +
+
+

+ Jam Tersibuk +

+

+ {{ peakHour.hour }} +

+

+ {{ peakHour.orders }} pesanan +

+
+
+
+ + + + + + + + + +
+ Belum ada data pesanan +
+
+