Browse Source

feat: chart discount given

Muhammad Iqbal Afandi 3 years ago
parent
commit
65e6e26f6f

+ 9
- 0
app/Http/Controllers/DashboardController.php View File

@@ -33,6 +33,8 @@ class DashboardController extends Controller
33 33
 
34 34
         $products = Product::get();
35 35
 
36
+        $transactionDiscount = Transaction::whereMonth('created_at', date('m'))->whereNotIn('discount', [0])->get();
37
+
36 38
         $transactionChart = Transaction::get()
37 39
             ->groupBy([
38 40
                 fn($transaction) => Carbon::parse($transaction->getRawOriginal('created_at'))->format('Y'),
@@ -73,6 +75,13 @@ class DashboardController extends Controller
73 75
                     'amountLabel' => __('words.today'),
74 76
                     'value' => (new ExpenseService)->totalPriceAsString($expenses),
75 77
                 ],
78
+                [
79
+                    'title' => __('words.discount_given'),
80
+                    'icon' => 'pi pi-percentage',
81
+                    'amount' => $transactionDiscount->count(),
82
+                    'amountLabel' => __('words.this_month'),
83
+                    'value' => (new TransactionService)->totalDiscountGivenGroupAsString($transactionDiscount),
84
+                ],
76 85
                 [
77 86
                     'title' => __('words.laundry_type'),
78 87
                     'icon' => 'pi pi-table',

+ 10
- 0
app/Models/Transaction.php View File

@@ -116,6 +116,16 @@ class Transaction extends Model
116 116
         }
117 117
     }
118 118
 
119
+    public function totalDiscountGiven()
120
+    {
121
+        $totalDiscountGiven = $this->getRawOriginal('discount') - $this->subTotal();
122
+        if ($totalDiscountGiven < 0) {
123
+            return abs($totalDiscountGiven);
124
+        } else {
125
+            return $totalDiscountGiven;
126
+        }
127
+    }
128
+
119 129
     public function totalPriceAsString()
120 130
     {
121 131
         return (new CurrencyFormatService)->setRupiahFormat($this->totalPrice());

+ 8
- 3
app/Services/TransactionService.php View File

@@ -7,7 +7,7 @@ use Illuminate\Database\Eloquent\Collection as EloquentCollection;
7 7
 use Illuminate\Pagination\LengthAwarePaginator;
8 8
 use Illuminate\Support\Collection as SupportCollection;
9 9
 
10
-class TransactionService
10
+class TransactionService extends CurrencyFormatService
11 11
 {
12 12
     public function getPaginator(array $items)
13 13
     {
@@ -25,7 +25,7 @@ class TransactionService
25 25
 
26 26
     public function totalPrice(EloquentCollection $collections)
27 27
     {
28
-        return $collections->transform(fn($transactions) => $transactions->totalPrice());
28
+        return $collections->transform(fn($collect) => $collect->totalPrice());
29 29
     }
30 30
 
31 31
     public function totalPriceGroup(EloquentCollection $collections)
@@ -35,7 +35,12 @@ class TransactionService
35 35
 
36 36
     public function totalPriceGroupAsString(EloquentCollection $collections)
37 37
     {
38
-        return (new CurrencyFormatService)->setRupiahFormat($this->totalPriceGroup($collections), true);
38
+        return $this->setRupiahFormat($this->totalPriceGroup($collections), true);
39
+    }
40
+
41
+    public function totalDiscountGivenGroupAsString(EloquentCollection $collections)
42
+    {
43
+        return $this->setRupiahFormat($collections->sum(fn($collect) => $collect->totalDiscountGiven()), true);
39 44
     }
40 45
 
41 46
     public function totalPerMonth(EloquentCollection $collections)

+ 2
- 0
lang/en/words.php View File

@@ -18,7 +18,9 @@ return [
18 18
     'income' => 'Income',
19 19
     'expense' => 'Expense',
20 20
     'today' => 'Today',
21
+    'this_month' => 'This Month',
21 22
     'total' => 'Total',
23
+    'discount_given' => 'Discount Given',
22 24
     'transaction' => 'Transaction',
23 25
     'expense' => 'Expense',
24 26
     'laundry_type' => 'Laundry Type',

+ 2
- 0
lang/id/words.php View File

@@ -18,7 +18,9 @@ return [
18 18
     'income' => 'Pendapatan',
19 19
     'expense' => 'Pengeluaran',
20 20
     'today' => 'Hari ini',
21
+    'this_month' => 'Bulan ini',
21 22
     'total' => 'Total',
23
+    'discount_given' => 'Diskon yang diberikan',
22 24
     'transaction' => 'Transaksi',
23 25
     'expense' => 'Pengeluaran',
24 26
     'laundry_type' => 'Jenis Laundry',

+ 123
- 45
public/js/resources_js_pages_home_Index_vue.js View File

@@ -933,10 +933,10 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
933 933
 
934 934
 /***/ }),
935 935
 
936
-/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/pages/home/Index.vue?vue&type=template&id=9329f6aa":
937
-/*!***************************************************************************************************************************************************************************************************************************************************************************!*\
938
-  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/pages/home/Index.vue?vue&type=template&id=9329f6aa ***!
939
-  \***************************************************************************************************************************************************************************************************************************************************************************/
936
+/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/pages/home/Index.vue?vue&type=template&id=9329f6aa&scoped=true":
937
+/*!***************************************************************************************************************************************************************************************************************************************************************************************!*\
938
+  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/pages/home/Index.vue?vue&type=template&id=9329f6aa&scoped=true ***!
939
+  \***************************************************************************************************************************************************************************************************************************************************************************************/
940 940
 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
941 941
 
942 942
 "use strict";
@@ -946,60 +946,68 @@ __webpack_require__.r(__webpack_exports__);
946 946
 /* harmony export */ });
947 947
 /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js");
948 948
 
949
+
950
+var _withScopeId = function _withScopeId(n) {
951
+  return (0,vue__WEBPACK_IMPORTED_MODULE_0__.pushScopeId)("data-v-9329f6aa"), n = n(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.popScopeId)(), n;
952
+};
953
+
949 954
 var _hoisted_1 = {
950 955
   "class": "grid"
951 956
 };
952 957
 var _hoisted_2 = {
953
-  "class": "col-12 md:col-3"
958
+  "class": "col-12 flex flex-wrap justify-content-between card-statistic"
954 959
 };
955 960
 var _hoisted_3 = {
956
-  "class": "flex justify-content-between mb-3"
961
+  "class": "flex-grow-1"
957 962
 };
958 963
 var _hoisted_4 = {
959
-  "class": "block text-500 font-medium mb-3"
964
+  "class": "flex justify-content-between mb-3"
960 965
 };
961 966
 var _hoisted_5 = {
967
+  "class": "block text-500 font-medium mb-3"
968
+};
969
+var _hoisted_6 = {
962 970
   key: 0,
963 971
   "class": "text-900 font-medium text-xl"
964 972
 };
965
-var _hoisted_6 = {
973
+var _hoisted_7 = {
966 974
   "class": "flex align-items-center justify-content-center bg-orange-100 border-round",
967 975
   style: {
968 976
     "width": "2.5rem",
969 977
     "height": "2.5rem"
970 978
   }
971 979
 };
972
-var _hoisted_7 = {
980
+var _hoisted_8 = {
973 981
   "class": "text-green-500 font-medium"
974 982
 };
975
-var _hoisted_8 = {
983
+var _hoisted_9 = {
976 984
   "class": "text-500"
977 985
 };
978
-var _hoisted_9 = {
986
+var _hoisted_10 = {
979 987
   "class": "col-12 md:col-6"
980 988
 };
981
-var _hoisted_10 = {
989
+var _hoisted_11 = {
982 990
   "class": "flex flex-column"
983 991
 };
984
-var _hoisted_11 = {
992
+var _hoisted_12 = {
985 993
   "class": "text-base font-normal"
986 994
 };
987
-var _hoisted_12 = {
995
+var _hoisted_13 = {
988 996
   "class": "col-12 md:col-6"
989 997
 };
990
-var _hoisted_13 = {
998
+var _hoisted_14 = {
991 999
   "class": "flex flex-column"
992 1000
 };
993
-var _hoisted_14 = {
1001
+var _hoisted_15 = {
994 1002
   "class": "text-base font-normal"
995 1003
 };
996
-var _hoisted_15 = {
1004
+var _hoisted_16 = {
997 1005
   "class": "col-12 md:col-6"
998 1006
 };
999
-var _hoisted_16 = {
1007
+var _hoisted_17 = {
1000 1008
   "class": "flex flex-column"
1001 1009
 };
1002
-var _hoisted_17 = {
1010
+var _hoisted_18 = {
1003 1011
   "class": "text-base font-normal"
1004 1012
 };
1005 1013
 function render(_ctx, _cache, $props, $setup, $data, $options) {
@@ -1011,22 +1019,22 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
1011 1019
     "default": (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
1012 1020
       return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup["Head"], {
1013 1021
         title: "Dashboard"
1014
-      }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_1, [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($props.cardStatistics, function (cardStatistic) {
1015
-        return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_Card, {
1022
+      }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_2, [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($props.cardStatistics, function (cardStatistic) {
1023
+        return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_3, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_Card, {
1016 1024
           "class": "h-full"
1017 1025
         }, {
1018 1026
           content: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
1019
-            return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_3, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_4, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(cardStatistic.title), 1
1027
+            return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_4, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_5, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(cardStatistic.title), 1
1020 1028
             /* TEXT */
1021
-            ), cardStatistic.value ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_5, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(cardStatistic.value), 1
1029
+            ), cardStatistic.value ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_6, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(cardStatistic.value), 1
1022 1030
             /* TEXT */
1023
-            )) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_6, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("i", {
1031
+            )) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_7, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("i", {
1024 1032
               "class": (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)(["text-orange-500 text-xl", cardStatistic.icon])
1025 1033
             }, null, 2
1026 1034
             /* CLASS */
1027
-            )])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_7, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(cardStatistic.amount), 1
1035
+            )])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_8, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(cardStatistic.amount), 1
1028 1036
             /* TEXT */
1029
-            ), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_8, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(' ' + cardStatistic.amountLabel), 1
1037
+            ), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_9, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(' ' + cardStatistic.amountLabel), 1
1030 1038
             /* TEXT */
1031 1039
             )];
1032 1040
           }),
@@ -1038,12 +1046,12 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
1038 1046
         )]);
1039 1047
       }), 256
1040 1048
       /* UNKEYED_FRAGMENT */
1041
-      )), ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($props.chartTransactionStatistics, function (statistic) {
1042
-        return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_9, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_Card, null, {
1049
+      ))]), ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($props.chartTransactionStatistics, function (statistic) {
1050
+        return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_10, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_Card, null, {
1043 1051
           title: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
1044
-            return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_10, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(statistic.title), 1
1052
+            return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_11, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(statistic.title), 1
1045 1053
             /* TEXT */
1046
-            ), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_11, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(statistic.description), 1
1054
+            ), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_12, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(statistic.description), 1
1047 1055
             /* TEXT */
1048 1056
             )])];
1049 1057
           }),
@@ -1064,11 +1072,11 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
1064 1072
         )]);
1065 1073
       }), 256
1066 1074
       /* UNKEYED_FRAGMENT */
1067
-      )), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_12, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_Card, null, {
1075
+      )), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_13, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_Card, null, {
1068 1076
         title: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
1069
-          return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_13, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.chartOutletStatistic.title), 1
1077
+          return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_14, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.chartOutletStatistic.title), 1
1070 1078
           /* TEXT */
1071
-          ), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_14, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.chartOutletStatistic.description), 1
1079
+          ), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_15, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.chartOutletStatistic.description), 1
1072 1080
           /* TEXT */
1073 1081
           )])];
1074 1082
         }),
@@ -1086,11 +1094,11 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
1086 1094
         _: 1
1087 1095
         /* STABLE */
1088 1096
 
1089
-      })]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_15, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_Card, null, {
1097
+      })]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_16, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_Card, null, {
1090 1098
         title: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
1091
-          return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_16, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.chartTopTransactionStatistic.title), 1
1099
+          return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_17, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.chartTopTransactionStatistic.title), 1
1092 1100
           /* TEXT */
1093
-          ), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_17, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.chartTopTransactionStatistic.description), 1
1101
+          ), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_18, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.chartTopTransactionStatistic.description), 1
1094 1102
           /* TEXT */
1095 1103
           )])];
1096 1104
         }),
@@ -1313,6 +1321,30 @@ __webpack_require__.r(__webpack_exports__);
1313 1321
   }]
1314 1322
 });
1315 1323
 
1324
+/***/ }),
1325
+
1326
+/***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-8.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-8.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/pages/home/Index.vue?vue&type=style&index=0&id=9329f6aa&scoped=true&lang=css":
1327
+/*!************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
1328
+  !*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-8.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-8.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/pages/home/Index.vue?vue&type=style&index=0&id=9329f6aa&scoped=true&lang=css ***!
1329
+  \************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
1330
+/***/ ((module, __webpack_exports__, __webpack_require__) => {
1331
+
1332
+"use strict";
1333
+__webpack_require__.r(__webpack_exports__);
1334
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1335
+/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
1336
+/* harmony export */ });
1337
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
1338
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
1339
+// Imports
1340
+
1341
+var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
1342
+// Module
1343
+___CSS_LOADER_EXPORT___.push([module.id, "\n.card-statistic[data-v-9329f6aa] {\n  gap: 1rem;\n}\n", ""]);
1344
+// Exports
1345
+/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
1346
+
1347
+
1316 1348
 /***/ }),
1317 1349
 
1318 1350
 /***/ "./node_modules/lodash/_DataView.js":
@@ -5900,6 +5932,36 @@ function toString(value) {
5900 5932
 module.exports = toString;
5901 5933
 
5902 5934
 
5935
+/***/ }),
5936
+
5937
+/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-8.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-8.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/pages/home/Index.vue?vue&type=style&index=0&id=9329f6aa&scoped=true&lang=css":
5938
+/*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
5939
+  !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-8.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-8.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/pages/home/Index.vue?vue&type=style&index=0&id=9329f6aa&scoped=true&lang=css ***!
5940
+  \****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
5941
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
5942
+
5943
+"use strict";
5944
+__webpack_require__.r(__webpack_exports__);
5945
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
5946
+/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
5947
+/* harmony export */ });
5948
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
5949
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
5950
+/* harmony import */ var _node_modules_css_loader_dist_cjs_js_clonedRuleSet_8_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_8_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Index_vue_vue_type_style_index_0_id_9329f6aa_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-8.use[1]!../../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-8.use[2]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./Index.vue?vue&type=style&index=0&id=9329f6aa&scoped=true&lang=css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-8.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-8.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/pages/home/Index.vue?vue&type=style&index=0&id=9329f6aa&scoped=true&lang=css");
5951
+
5952
+            
5953
+
5954
+var options = {};
5955
+
5956
+options.insert = "head";
5957
+options.singleton = false;
5958
+
5959
+var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_clonedRuleSet_8_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_8_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Index_vue_vue_type_style_index_0_id_9329f6aa_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_1__["default"], options);
5960
+
5961
+
5962
+
5963
+/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_clonedRuleSet_8_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_8_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Index_vue_vue_type_style_index_0_id_9329f6aa_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_1__["default"].locals || {});
5964
+
5903 5965
 /***/ }),
5904 5966
 
5905 5967
 /***/ "./node_modules/vue-loader/dist/exportHelper.js":
@@ -6101,15 +6163,18 @@ __webpack_require__.r(__webpack_exports__);
6101 6163
 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
6102 6164
 /* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
6103 6165
 /* harmony export */ });
6104
-/* harmony import */ var _Index_vue_vue_type_template_id_9329f6aa__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Index.vue?vue&type=template&id=9329f6aa */ "./resources/js/pages/home/Index.vue?vue&type=template&id=9329f6aa");
6166
+/* harmony import */ var _Index_vue_vue_type_template_id_9329f6aa_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Index.vue?vue&type=template&id=9329f6aa&scoped=true */ "./resources/js/pages/home/Index.vue?vue&type=template&id=9329f6aa&scoped=true");
6105 6167
 /* harmony import */ var _Index_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Index.vue?vue&type=script&setup=true&lang=js */ "./resources/js/pages/home/Index.vue?vue&type=script&setup=true&lang=js");
6106
-/* harmony import */ var _home_dijitalcode_Projects_bambslaundry_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ "./node_modules/vue-loader/dist/exportHelper.js");
6168
+/* harmony import */ var _Index_vue_vue_type_style_index_0_id_9329f6aa_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Index.vue?vue&type=style&index=0&id=9329f6aa&scoped=true&lang=css */ "./resources/js/pages/home/Index.vue?vue&type=style&index=0&id=9329f6aa&scoped=true&lang=css");
6169
+/* harmony import */ var _home_dijitalcode_Projects_bambslaundry_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ "./node_modules/vue-loader/dist/exportHelper.js");
6107 6170
 
6108 6171
 
6109 6172
 
6110 6173
 
6111 6174
 ;
6112
-const __exports__ = /*#__PURE__*/(0,_home_dijitalcode_Projects_bambslaundry_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__["default"])(_Index_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"], [['render',_Index_vue_vue_type_template_id_9329f6aa__WEBPACK_IMPORTED_MODULE_0__.render],['__file',"resources/js/pages/home/Index.vue"]])
6175
+
6176
+
6177
+const __exports__ = /*#__PURE__*/(0,_home_dijitalcode_Projects_bambslaundry_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__["default"])(_Index_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"], [['render',_Index_vue_vue_type_template_id_9329f6aa_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render],['__scopeId',"data-v-9329f6aa"],['__file',"resources/js/pages/home/Index.vue"]])
6113 6178
 /* hot reload */
6114 6179
 if (false) {}
6115 6180
 
@@ -6310,18 +6375,31 @@ __webpack_require__.r(__webpack_exports__);
6310 6375
 
6311 6376
 /***/ }),
6312 6377
 
6313
-/***/ "./resources/js/pages/home/Index.vue?vue&type=template&id=9329f6aa":
6314
-/*!*************************************************************************!*\
6315
-  !*** ./resources/js/pages/home/Index.vue?vue&type=template&id=9329f6aa ***!
6316
-  \*************************************************************************/
6378
+/***/ "./resources/js/pages/home/Index.vue?vue&type=template&id=9329f6aa&scoped=true":
6379
+/*!*************************************************************************************!*\
6380
+  !*** ./resources/js/pages/home/Index.vue?vue&type=template&id=9329f6aa&scoped=true ***!
6381
+  \*************************************************************************************/
6317 6382
 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
6318 6383
 
6319 6384
 "use strict";
6320 6385
 __webpack_require__.r(__webpack_exports__);
6321 6386
 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
6322
-/* harmony export */   "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Index_vue_vue_type_template_id_9329f6aa__WEBPACK_IMPORTED_MODULE_0__.render)
6387
+/* harmony export */   "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Index_vue_vue_type_template_id_9329f6aa_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render)
6323 6388
 /* harmony export */ });
6324
-/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Index_vue_vue_type_template_id_9329f6aa__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./Index.vue?vue&type=template&id=9329f6aa */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/pages/home/Index.vue?vue&type=template&id=9329f6aa");
6389
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Index_vue_vue_type_template_id_9329f6aa_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./Index.vue?vue&type=template&id=9329f6aa&scoped=true */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/pages/home/Index.vue?vue&type=template&id=9329f6aa&scoped=true");
6390
+
6391
+
6392
+/***/ }),
6393
+
6394
+/***/ "./resources/js/pages/home/Index.vue?vue&type=style&index=0&id=9329f6aa&scoped=true&lang=css":
6395
+/*!***************************************************************************************************!*\
6396
+  !*** ./resources/js/pages/home/Index.vue?vue&type=style&index=0&id=9329f6aa&scoped=true&lang=css ***!
6397
+  \***************************************************************************************************/
6398
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
6399
+
6400
+"use strict";
6401
+__webpack_require__.r(__webpack_exports__);
6402
+/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_8_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_8_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Index_vue_vue_type_style_index_0_id_9329f6aa_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-8.use[1]!../../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-8.use[2]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./Index.vue?vue&type=style&index=0&id=9329f6aa&scoped=true&lang=css */ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-8.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-8.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/pages/home/Index.vue?vue&type=style&index=0&id=9329f6aa&scoped=true&lang=css");
6325 6403
 
6326 6404
 
6327 6405
 /***/ })

+ 1
- 1
public/js/vue.js View File

@@ -58088,7 +58088,7 @@ module.exports = JSON.parse('{"name":"axios","version":"0.21.4","description":"P
58088 58088
 /******/ 		// This function allow to reference async chunks
58089 58089
 /******/ 		__webpack_require__.u = (chunkId) => {
58090 58090
 /******/ 			// return url for filenames based on template
58091
-/******/ 			return "js/" + chunkId + ".js?id=" + {"node_modules_chart_js_auto_auto_esm_js":"10c6b388645ceb22","resources_js_pages_auth_ForgotPassword_vue":"06e3fde2f6b5dfa3","resources_js_pages_auth_Login_vue":"0d70b4f828bb2ae3","resources_js_pages_auth_ResetPassword_vue":"2ba70d514b47ecff","resources_js_pages_auth_VerifyEmail_vue":"ebac28cf5fb51cfc","resources_js_pages_customer_Create_vue":"1220be5949d46569","resources_js_pages_customer_Edit_vue":"9b1098714289a805","resources_js_pages_customer_Index_vue":"89aeb69bc7bf9125","resources_js_pages_customer_TableHeader_js":"71be5afdca048a9c","resources_js_pages_discount_Index_vue":"7a73e2119e6e6c6f","resources_js_pages_error_Error_vue":"39121f9961877130","resources_js_pages_expense_Create_vue":"8fa047c8fcff0fa3","resources_js_pages_expense_Index_vue":"b56d8a0027fef24c","resources_js_pages_expense_Show_vue":"e46cf4a28b9e732b","resources_js_pages_expense_TableHeader_js":"72e3dee74175b1c0","resources_js_pages_home_Index_vue":"bf3cb4af92334410","resources_js_pages_laundry_Create_vue":"f5731b3f078c4bff","resources_js_pages_laundry_Edit_vue":"430f285b197d2fc1","resources_js_pages_laundry_Index_vue":"ee761f9e7d6e4502","resources_js_pages_laundry_TableHeader_js":"494e577855bbcaf6","resources_js_pages_mutation_Report_vue":"0c16f00427eb4815","resources_js_pages_mutation_TableHeader_js":"82c2999bd7d098a1","resources_js_pages_outlet_Create_vue":"4958b1a88d1e03d1","resources_js_pages_outlet_Edit_vue":"3ce4dea5bd8e134a","resources_js_pages_outlet_Index_vue":"f58972cb6db52f4a","resources_js_pages_outlet_TableHeader_js":"498bf7e64bc0d0c4","resources_js_pages_product_Create_vue":"6f7ae2bf0addfd2c","resources_js_pages_product_Edit_vue":"aec56d000e33fbe6","resources_js_pages_product_Index_vue":"e73d3cd965bdbfb3","resources_js_pages_product_TableHeader_js":"b8eaaa9de25a2322","resources_js_pages_transaction_Create_vue":"04881653c83db0e8","resources_js_pages_transaction_Index_vue":"54a40dce85162abd","resources_js_pages_transaction_Report_vue":"a3646e1ede56ed0d","resources_js_pages_transaction_Show_vue":"bc1cb7b5161b5386","resources_js_pages_transaction_TableHeader_js":"be63e672e103818b","resources_js_pages_user_Create_vue":"9328027e33f14038","resources_js_pages_user_Edit_vue":"5e97bc1dbb553877","resources_js_pages_user_Index_vue":"bc60d10f530734f1","resources_js_pages_user_Show_vue":"0acbc3d158904cf1","resources_js_pages_user_TableHeader_js":"5653ecbcd70fd235"}[chunkId] + "";
58091
+/******/ 			return "js/" + chunkId + ".js?id=" + {"node_modules_chart_js_auto_auto_esm_js":"10c6b388645ceb22","resources_js_pages_auth_ForgotPassword_vue":"06e3fde2f6b5dfa3","resources_js_pages_auth_Login_vue":"0d70b4f828bb2ae3","resources_js_pages_auth_ResetPassword_vue":"2ba70d514b47ecff","resources_js_pages_auth_VerifyEmail_vue":"ebac28cf5fb51cfc","resources_js_pages_customer_Create_vue":"1220be5949d46569","resources_js_pages_customer_Edit_vue":"9b1098714289a805","resources_js_pages_customer_Index_vue":"89aeb69bc7bf9125","resources_js_pages_customer_TableHeader_js":"71be5afdca048a9c","resources_js_pages_discount_Index_vue":"7a73e2119e6e6c6f","resources_js_pages_error_Error_vue":"39121f9961877130","resources_js_pages_expense_Create_vue":"8fa047c8fcff0fa3","resources_js_pages_expense_Index_vue":"b56d8a0027fef24c","resources_js_pages_expense_Show_vue":"e46cf4a28b9e732b","resources_js_pages_expense_TableHeader_js":"72e3dee74175b1c0","resources_js_pages_home_Index_vue":"360fa25802d127cb","resources_js_pages_laundry_Create_vue":"f5731b3f078c4bff","resources_js_pages_laundry_Edit_vue":"430f285b197d2fc1","resources_js_pages_laundry_Index_vue":"ee761f9e7d6e4502","resources_js_pages_laundry_TableHeader_js":"494e577855bbcaf6","resources_js_pages_mutation_Report_vue":"0c16f00427eb4815","resources_js_pages_mutation_TableHeader_js":"82c2999bd7d098a1","resources_js_pages_outlet_Create_vue":"4958b1a88d1e03d1","resources_js_pages_outlet_Edit_vue":"3ce4dea5bd8e134a","resources_js_pages_outlet_Index_vue":"f58972cb6db52f4a","resources_js_pages_outlet_TableHeader_js":"498bf7e64bc0d0c4","resources_js_pages_product_Create_vue":"6f7ae2bf0addfd2c","resources_js_pages_product_Edit_vue":"aec56d000e33fbe6","resources_js_pages_product_Index_vue":"e73d3cd965bdbfb3","resources_js_pages_product_TableHeader_js":"b8eaaa9de25a2322","resources_js_pages_transaction_Create_vue":"04881653c83db0e8","resources_js_pages_transaction_Index_vue":"54a40dce85162abd","resources_js_pages_transaction_Report_vue":"a3646e1ede56ed0d","resources_js_pages_transaction_Show_vue":"bc1cb7b5161b5386","resources_js_pages_transaction_TableHeader_js":"be63e672e103818b","resources_js_pages_user_Create_vue":"9328027e33f14038","resources_js_pages_user_Edit_vue":"5e97bc1dbb553877","resources_js_pages_user_Index_vue":"bc60d10f530734f1","resources_js_pages_user_Show_vue":"0acbc3d158904cf1","resources_js_pages_user_TableHeader_js":"5653ecbcd70fd235"}[chunkId] + "";
58092 58092
 /******/ 		};
58093 58093
 /******/ 	})();
58094 58094
 /******/ 	

+ 26
- 19
resources/js/pages/home/Index.vue View File

@@ -111,27 +111,28 @@ const topTransactionOption = {
111 111
     <Head title="Dashboard" />
112 112
 
113 113
     <div class="grid">
114
-      <div v-for="cardStatistic in cardStatistics" class="col-12 md:col-3">
115
-        <Card class="h-full">
116
-          <template #content>
117
-            <div class="flex justify-content-between mb-3">
118
-              <div>
119
-                <span class="block text-500 font-medium mb-3">{{ cardStatistic.title }}</span>
120
-                <div v-if="cardStatistic.value" class="text-900 font-medium text-xl">{{ cardStatistic.value }}</div>
121
-              </div>
122
-              <div
123
-                class="flex align-items-center justify-content-center bg-orange-100 border-round"
124
-                style="width: 2.5rem; height: 2.5rem"
125
-              >
126
-                <i class="text-orange-500 text-xl" :class="cardStatistic.icon"></i>
114
+      <div class="col-12 flex flex-wrap justify-content-between card-statistic">
115
+        <div v-for="cardStatistic in cardStatistics" class="flex-grow-1">
116
+          <Card class="h-full">
117
+            <template #content>
118
+              <div class="flex justify-content-between mb-3">
119
+                <div>
120
+                  <span class="block text-500 font-medium mb-3">{{ cardStatistic.title }}</span>
121
+                  <div v-if="cardStatistic.value" class="text-900 font-medium text-xl">{{ cardStatistic.value }}</div>
122
+                </div>
123
+                <div
124
+                  class="flex align-items-center justify-content-center bg-orange-100 border-round"
125
+                  style="width: 2.5rem; height: 2.5rem"
126
+                >
127
+                  <i class="text-orange-500 text-xl" :class="cardStatistic.icon"></i>
128
+                </div>
127 129
               </div>
128
-            </div>
129
-            <span class="text-green-500 font-medium">{{ cardStatistic.amount }} </span>
130
-            <span class="text-500"> {{ ' ' + cardStatistic.amountLabel }}</span>
131
-          </template>
132
-        </Card>
130
+              <span class="text-green-500 font-medium">{{ cardStatistic.amount }} </span>
131
+              <span class="text-500"> {{ ' ' + cardStatistic.amountLabel }}</span>
132
+            </template>
133
+          </Card>
134
+        </div>
133 135
       </div>
134
-
135 136
       <div v-for="statistic in chartTransactionStatistics" class="col-12 md:col-6">
136 137
         <Card>
137 138
           <template #title>
@@ -188,3 +189,9 @@ const topTransactionOption = {
188 189
     </div>
189 190
   </AppLayout>
190 191
 </template>
192
+
193
+<style scoped>
194
+.card-statistic {
195
+  gap: 1rem;
196
+}
197
+</style>