Muhammad Iqbal Afandi пре 3 година
родитељ
комит
6e39085d01

+ 48
- 18
app/Http/Controllers/TopUpController.php Прегледај датотеку

@@ -6,6 +6,10 @@ use App\Http\Requests\TopUp\StoreTopUpRequest;
6 6
 use App\Http\Requests\TopUp\UpdateTopUpRequest;
7 7
 use App\Models\Member;
8 8
 use App\Models\TopUp;
9
+use App\Models\TypeMember;
10
+use Carbon\Carbon;
11
+use Illuminate\Database\QueryException;
12
+use Illuminate\Support\Facades\DB;
9 13
 use Inertia\Inertia;
10 14
 
11 15
 class TopUpController extends Controller
@@ -51,6 +55,7 @@ class TopUpController extends Controller
51 55
                     'phone' => $member->phone,
52 56
                     'platNumber' => $member->vehicleDetail(),
53 57
                     'type' => $member->typeMember->type,
58
+                    'price' => $member->typeMember->price,
54 59
                     'expDate' => $member->exp_date,
55 60
                 ])
56 61
             ),
@@ -65,14 +70,32 @@ class TopUpController extends Controller
65 70
      */
66 71
     public function store(StoreTopUpRequest $request)
67 72
     {
68
-        TopUp::create([
69
-            'balance' => $request->balance,
70
-            'exp_date' => $request->exp_date,
71
-            'member_id' => $request->member_id,
72
-            'user_id' => auth()->user()->id,
73
-        ]);
73
+        $member = Member::find($request->member_id);
74
+
75
+        $latest = $member->topUps->last()->getRawOriginal('exp_date');
76
+
77
+        DB::beginTransaction();
78
+
79
+        try {
80
+            $topUp = $member->topUps()->create([
81
+                'amount' => TypeMember::find($member->typeMember->id)->getRawOriginal('price'),
82
+                'exp_date' => Carbon::create($latest)->addDays(30),
83
+                'user_id' => auth()->user()->id,
84
+            ]);
85
+
86
+            $topUp->mutation()->create([
87
+                'type' => 1,
88
+                'amount' => TypeMember::find($member->typeMember->id)->getRawOriginal('price'),
89
+            ]);
90
+
91
+            DB::commit();
74 92
 
75
-        return back()->with('success', __('messages.success.store.top_up'));
93
+            return back()->with('success', __('messages.success.store.top_up'));
94
+        } catch (QueryException $qe) {
95
+            DB::rollBack();
96
+
97
+            return back()->with('error', __('messages.error.store.top_up'));
98
+        }
76 99
     }
77 100
 
78 101
     /**
@@ -83,20 +106,27 @@ class TopUpController extends Controller
83 106
      */
84 107
     public function show(TopUp $topUp)
85 108
     {
109
+        $member = $topUp->member;
110
+
86 111
         return inertia('topup/Show', [
87
-            'topUp' => [
88
-                'updatedAt' => $topUp->updated_at,
89
-                'name' => $topUp->member->name,
90
-                'phone' => $topUp->member->phone,
91
-                'platNumber' => $topUp->member->plat_number,
92
-                'balance' => $topUp->balance,
93
-                'expDate' => $topUp->exp_date,
94
-                'user' => [
112
+            'member' => [
113
+                'name' => $member->name,
114
+                'phone' => $member->phone,
115
+            ],
116
+            'topUp' => $member->topUps
117
+                ->last()
118
+                ->paginate(15)
119
+                ->withQueryString()
120
+                ->through(fn($topUp) => [
121
+                    'id' => $topUp->id,
122
+                    'updatedAt' => $topUp->updated_at,
95 123
                     'name' => $topUp->user->name,
96 124
                     'phone' => $topUp->user->phone,
97
-                    'email' => $topUp->user->email,
98
-                ],
99
-            ],
125
+                    'platNumber' => $topUp->member->vehicleDetail(),
126
+                    'amount' => $topUp->amount,
127
+                    'type' => $topUp->member->typeMember->type,
128
+                    'expDate' => $topUp->exp_date,
129
+                ]),
100 130
         ]);
101 131
     }
102 132
 

+ 0
- 1
app/Http/Requests/TopUp/StoreTopUpRequest.php Прегледај датотеку

@@ -24,7 +24,6 @@ class StoreTopUpRequest extends FormRequest
24 24
     public function rules()
25 25
     {
26 26
         return [
27
-            'balance' => 'required|numeric',
28 27
             'member_id' => 'required|numeric',
29 28
         ];
30 29
     }

+ 1
- 1
app/Models/TopUp.php Прегледај датотеку

@@ -60,7 +60,7 @@ class TopUp extends Model
60 60
         $query->when($filters['search'] ?? null, function ($query, $search) {
61 61
             $query->where(function ($query) use ($search) {
62 62
                 $query->orWhereHas('member', function ($query) use ($search) {
63
-                    $query->where('plat_number', 'like', '%' . $search . '%')
63
+                    $query->where('name', 'like', '%' . $search . '%')
64 64
                         ->orWhere('phone', 'like', '%' . $search . '%');
65 65
                 });
66 66
             });

+ 1
- 0
lang/en/messages.php Прегледај датотеку

@@ -51,6 +51,7 @@ return [
51 51
 
52 52
     'error' => [
53 53
         'store' => [
54
+            'top_up' => 'Top up failed to be added',
54 55
             'type_member' => 'Type member failed to be added',
55 56
             'member' => 'member failed to be added',
56 57
             'change_password' => 'Password invalid',

+ 1
- 0
lang/id/messages.php Прегледај датотеку

@@ -51,6 +51,7 @@ return [
51 51
 
52 52
     'error' => [
53 53
         'store' => [
54
+            'top_up' => 'Top up gagal ditambahkan',
54 55
             'type_member' => 'Jenis member gagal ditambahkan',
55 56
             'member' => 'Member gagal ditambahkan',
56 57
             'change_password' => 'Password lama salah',

+ 2
- 2
public/js/resources_js_pages_member_Create_vue.js Прегледај датотеку

@@ -654,7 +654,7 @@ __webpack_require__.r(__webpack_exports__);
654 654
 
655 655
     var submit = function submit() {
656 656
       confirm.require({
657
-        message: "Tagihan dikenakan untuk member baru sebesar ".concat(props.typeMember.price),
657
+        message: "Dikenakan tagihan untuk member baru sebesar ".concat(props.typeMember.price),
658 658
         header: 'Tagihan',
659 659
         acceptLabel: 'Bayar dan simpan',
660 660
         rejectLabel: 'Batalkan',
@@ -662,7 +662,7 @@ __webpack_require__.r(__webpack_exports__);
662 662
           formSent();
663 663
         },
664 664
         reject: function reject() {
665
-          console.info('transaksi digagalkan');
665
+          console.info('transaksi dibatalkan');
666 666
         }
667 667
       });
668 668
     };

+ 126
- 47
public/js/resources_js_pages_topup_Create_vue.js Прегледај датотеку

@@ -420,8 +420,10 @@ __webpack_require__.r(__webpack_exports__);
420 420
 /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js");
421 421
 /* harmony import */ var _inertiajs_inertia__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @inertiajs/inertia */ "./node_modules/@inertiajs/inertia/dist/index.js");
422 422
 /* harmony import */ var _inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @inertiajs/inertia-vue3 */ "./node_modules/@inertiajs/inertia-vue3/dist/index.js");
423
-/* harmony import */ var _components_AppAutocompleteBasic_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/AppAutocompleteBasic.vue */ "./resources/js/components/AppAutocompleteBasic.vue");
424
-/* harmony import */ var _layouts_AppLayout_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/layouts/AppLayout.vue */ "./resources/js/layouts/AppLayout.vue");
423
+/* harmony import */ var primevue_useconfirm__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! primevue/useconfirm */ "./node_modules/primevue/useconfirm/useconfirm.esm.js");
424
+/* harmony import */ var _components_AppAutocompleteBasic_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/AppAutocompleteBasic.vue */ "./resources/js/components/AppAutocompleteBasic.vue");
425
+/* harmony import */ var _layouts_AppLayout_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/layouts/AppLayout.vue */ "./resources/js/layouts/AppLayout.vue");
426
+
425 427
 
426 428
 
427 429
 
@@ -464,21 +466,43 @@ __webpack_require__.r(__webpack_exports__);
464 466
     var form = (0,_inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_2__.useForm)({
465 467
       member: null
466 468
     });
467
-
468
-    var submit = function submit() {
469
-      form.post(route('top-ups.store'), {
469
+    var confirm = (0,primevue_useconfirm__WEBPACK_IMPORTED_MODULE_3__.useConfirm)();
470
+
471
+    var formSent = function formSent() {
472
+      form.transform(function (data) {
473
+        return {
474
+          member_id: data.member.id
475
+        };
476
+      }).post(route('top-ups.store'), {
470 477
         onSuccess: function onSuccess() {
471 478
           return form.reset();
472 479
         }
473 480
       });
474 481
     };
475 482
 
483
+    var submit = function submit() {
484
+      confirm.require({
485
+        message: "Dikenakan tagihan sebesar ".concat(form.member.price),
486
+        header: 'Top Up',
487
+        acceptLabel: 'Bayar dan simpan',
488
+        rejectLabel: 'Batalkan',
489
+        accept: function accept() {
490
+          formSent();
491
+        },
492
+        reject: function reject() {
493
+          console.info('transaksi dibatalkan');
494
+        }
495
+      });
496
+    };
497
+
476 498
     var __returned__ = {
477 499
       errors: errors,
478 500
       memberOnComplete: memberOnComplete,
479 501
       memberOnSelected: memberOnSelected,
480 502
       gotoMember: gotoMember,
481 503
       form: form,
504
+      confirm: confirm,
505
+      formSent: formSent,
482 506
       submit: submit,
483 507
       computed: vue__WEBPACK_IMPORTED_MODULE_0__.computed,
484 508
       watch: vue__WEBPACK_IMPORTED_MODULE_0__.watch,
@@ -486,8 +510,9 @@ __webpack_require__.r(__webpack_exports__);
486 510
       Head: _inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_2__.Head,
487 511
       useForm: _inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_2__.useForm,
488 512
       usePage: _inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_2__.usePage,
489
-      AppAutocompleteBasic: _components_AppAutocompleteBasic_vue__WEBPACK_IMPORTED_MODULE_3__["default"],
490
-      AppLayout: _layouts_AppLayout_vue__WEBPACK_IMPORTED_MODULE_4__["default"]
513
+      useConfirm: primevue_useconfirm__WEBPACK_IMPORTED_MODULE_3__.useConfirm,
514
+      AppAutocompleteBasic: _components_AppAutocompleteBasic_vue__WEBPACK_IMPORTED_MODULE_4__["default"],
515
+      AppLayout: _layouts_AppLayout_vue__WEBPACK_IMPORTED_MODULE_5__["default"]
491 516
     };
492 517
     Object.defineProperty(__returned__, '__isScriptSetup', {
493 518
       enumerable: false,
@@ -1090,71 +1115,116 @@ var _hoisted_2 = {
1090 1115
 
1091 1116
 var _hoisted_3 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)("Detail Member");
1092 1117
 
1093
-var _hoisted_4 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("h3", {
1094
-  "class": "text-base font-bold mb-0"
1095
-}, "Nama", -1
1118
+var _hoisted_4 = {
1119
+  key: 0
1120
+};
1121
+
1122
+var _hoisted_5 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", {
1123
+  "class": "text-base font-bold"
1124
+}, " Nama ", -1
1125
+/* HOISTED */
1126
+);
1127
+
1128
+var _hoisted_6 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("br", null, null, -1
1096 1129
 /* HOISTED */
1097 1130
 );
1098 1131
 
1099
-var _hoisted_5 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("h3", {
1100
-  "class": "text-base font-bold mb-0"
1101
-}, "Nomor HP", -1
1132
+var _hoisted_7 = {
1133
+  key: 1
1134
+};
1135
+
1136
+var _hoisted_8 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", {
1137
+  "class": "text-base font-bold"
1138
+}, " Nomor HP ", -1
1102 1139
 /* HOISTED */
1103 1140
 );
1104 1141
 
1105
-var _hoisted_6 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("h3", {
1106
-  "class": "text-base font-bold mb-0"
1107
-}, "Plat Kendaraan", -1
1142
+var _hoisted_9 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("br", null, null, -1
1108 1143
 /* HOISTED */
1109 1144
 );
1110 1145
 
1111
-var _hoisted_7 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("h3", {
1112
-  "class": "text-base font-bold mb-0"
1113
-}, "Jenis Member", -1
1146
+var _hoisted_10 = {
1147
+  key: 2
1148
+};
1149
+
1150
+var _hoisted_11 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", {
1151
+  "class": "text-base font-bold"
1152
+}, " Jenis Member ", -1
1114 1153
 /* HOISTED */
1115 1154
 );
1116 1155
 
1117
-var _hoisted_8 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("h3", {
1118
-  "class": "text-base font-bold mb-0"
1119
-}, "Berakhir", -1
1156
+var _hoisted_12 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("br", null, null, -1
1120 1157
 /* HOISTED */
1121 1158
 );
1122 1159
 
1123
-var _hoisted_9 = {
1160
+var _hoisted_13 = {
1161
+  key: 3
1162
+};
1163
+
1164
+var _hoisted_14 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", {
1165
+  "class": "text-base font-bold"
1166
+}, " Tarif Member ", -1
1167
+/* HOISTED */
1168
+);
1169
+
1170
+var _hoisted_15 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("br", null, null, -1
1171
+/* HOISTED */
1172
+);
1173
+
1174
+var _hoisted_16 = {
1175
+  key: 4
1176
+};
1177
+
1178
+var _hoisted_17 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", {
1179
+  "class": "text-base font-bold"
1180
+}, " Berakhir ", -1
1181
+/* HOISTED */
1182
+);
1183
+
1184
+var _hoisted_18 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("br", null, null, -1
1185
+/* HOISTED */
1186
+);
1187
+
1188
+var _hoisted_19 = {
1124 1189
   "class": "grid"
1125 1190
 };
1126
-var _hoisted_10 = {
1191
+var _hoisted_20 = {
1127 1192
   "class": "col-12 md:col-8"
1128 1193
 };
1129 1194
 
1130
-var _hoisted_11 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Top Up ");
1195
+var _hoisted_21 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Top Up ");
1131 1196
 
1132
-var _hoisted_12 = {
1197
+var _hoisted_22 = {
1133 1198
   "class": "grid"
1134 1199
 };
1135
-var _hoisted_13 = {
1200
+var _hoisted_23 = {
1136 1201
   "class": "col-12 md:col-6"
1137 1202
 };
1138
-var _hoisted_14 = {
1203
+var _hoisted_24 = {
1139 1204
   key: 0,
1140 1205
   "class": "flex flex-column"
1141 1206
 };
1142
-var _hoisted_15 = {
1207
+var _hoisted_25 = {
1143 1208
   "class": "font-bold"
1144 1209
 };
1145
-var _hoisted_16 = {
1210
+var _hoisted_26 = {
1146 1211
   "class": "font-bold"
1147 1212
 };
1213
+var _hoisted_27 = {
1214
+  "class": "flex flex-column md:flex-row justify-content-end"
1215
+};
1148 1216
 function render(_ctx, _cache, $props, $setup, $data, $options) {
1217
+  var _component_ConfirmDialog = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("ConfirmDialog");
1218
+
1149 1219
   var _component_Card = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("Card");
1150 1220
 
1151
-  var _component_Divider = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("Divider");
1221
+  var _component_Button = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("Button");
1152 1222
 
1153 1223
   return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup["Head"], {
1154 1224
     title: "Top Up"
1155 1225
   }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup["AppLayout"], null, {
1156 1226
     "default": (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
1157
-      return [(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__.createVNode)(_component_Card, {
1227
+      return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_ConfirmDialog), (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__.createVNode)(_component_Card, {
1158 1228
         "class": "surface-200"
1159 1229
       }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createSlots)({
1160 1230
         title: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
@@ -1166,26 +1236,26 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
1166 1236
       }, [$setup.form.member ? {
1167 1237
         name: "content",
1168 1238
         fn: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
1169
-          return [_hoisted_4, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("p", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.form.member.name), 1
1239
+          return [$setup.form.member.name ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("p", _hoisted_4, [_hoisted_5, _hoisted_6, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" " + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.form.member.name), 1
1170 1240
           /* TEXT */
1171
-          ), _hoisted_5, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("p", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.form.member.phone), 1
1241
+          )])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true), $setup.form.member.phone ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("p", _hoisted_7, [_hoisted_8, _hoisted_9, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" " + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.form.member.phone), 1
1172 1242
           /* TEXT */
1173
-          ), _hoisted_6, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("p", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.form.member.platNumber), 1
1243
+          )])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true), $setup.form.member.type ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("p", _hoisted_10, [_hoisted_11, _hoisted_12, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" " + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.form.member.type), 1
1174 1244
           /* TEXT */
1175
-          ), _hoisted_7, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("p", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.form.member.type), 1
1245
+          )])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true), $setup.form.member.price ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("p", _hoisted_13, [_hoisted_14, _hoisted_15, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" " + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.form.member.price), 1
1176 1246
           /* TEXT */
1177
-          ), _hoisted_8, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("p", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.form.member.expDate), 1
1247
+          )])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true), $setup.form.member.expDate ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("p", _hoisted_16, [_hoisted_17, _hoisted_18, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" " + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.form.member.expDate), 1
1178 1248
           /* TEXT */
1179
-          )];
1249
+          )])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)];
1180 1250
         })
1181 1251
       } : undefined]), 1024
1182 1252
       /* DYNAMIC_SLOTS */
1183
-      )])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_9, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_10, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_Card, null, {
1253
+      )])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_19, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_20, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_Card, null, {
1184 1254
         title: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
1185
-          return [_hoisted_11];
1255
+          return [_hoisted_21];
1186 1256
         }),
1187 1257
         content: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
1188
-          return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_12, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_13, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup["AppAutocompleteBasic"], {
1258
+          return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_22, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_23, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup["AppAutocompleteBasic"], {
1189 1259
             empty: "",
1190 1260
             label: "Member",
1191 1261
             field: "name",
@@ -1200,11 +1270,11 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
1200 1270
             onItemSelect: $setup.memberOnSelected
1201 1271
           }, {
1202 1272
             item: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function (slotProps) {
1203
-              return [slotProps.item ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_14, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(slotProps.item.name), 1
1273
+              return [slotProps.item ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_24, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(slotProps.item.name), 1
1204 1274
               /* TEXT */
1205
-              ), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_15, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(slotProps.item.phone), 1
1275
+              ), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_25, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(slotProps.item.phone), 1
1206 1276
               /* TEXT */
1207
-              ), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_16, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(slotProps.item.type), 1
1277
+              ), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_26, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(slotProps.item.type), 1
1208 1278
               /* TEXT */
1209 1279
               )])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)];
1210 1280
             }),
@@ -1222,9 +1292,18 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
1222 1292
 
1223 1293
           }, 8
1224 1294
           /* PROPS */
1225
-          , ["modelValue", "error", "suggestions"])])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_Divider, {
1226
-            type: "dashed"
1227
-          })];
1295
+          , ["modelValue", "error", "suggestions"])])])];
1296
+        }),
1297
+        footer: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
1298
+          return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_27, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_Button, {
1299
+            label: "Topup",
1300
+            icon: "pi pi-check",
1301
+            "class": "p-button-outlined",
1302
+            disabled: $setup.form.processing,
1303
+            onClick: $setup.submit
1304
+          }, null, 8
1305
+          /* PROPS */
1306
+          , ["disabled"])])];
1228 1307
         }),
1229 1308
         _: 1
1230 1309
         /* STABLE */

+ 31
- 8
public/js/resources_js_pages_topup_Index_vue.js Прегледај датотеку

@@ -504,7 +504,7 @@ __webpack_require__.r(__webpack_exports__);
504 504
       AppLayout: _layouts_AppLayout_vue__WEBPACK_IMPORTED_MODULE_5__["default"],
505 505
       AppPagination: _components_AppPagination_vue__WEBPACK_IMPORTED_MODULE_6__["default"],
506 506
       AppButton: _components_AppButton_vue__WEBPACK_IMPORTED_MODULE_7__["default"],
507
-      TableHeader: _TableHeader__WEBPACK_IMPORTED_MODULE_8__["default"]
507
+      IndexTable: _TableHeader__WEBPACK_IMPORTED_MODULE_8__.IndexTable
508 508
     };
509 509
     Object.defineProperty(__returned__, '__isScriptSetup', {
510 510
       enumerable: false,
@@ -1246,11 +1246,11 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
1246 1246
           , ["href"])])])];
1247 1247
         }),
1248 1248
         "default": (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
1249
-          return [((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)($setup.TableHeader, function (tableHeader) {
1249
+          return [((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)($setup.IndexTable, function (indexTable) {
1250 1250
             return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_Column, {
1251
-              field: tableHeader.field,
1252
-              header: tableHeader.header,
1253
-              key: tableHeader.field
1251
+              field: indexTable.field,
1252
+              header: indexTable.header,
1253
+              key: indexTable.field
1254 1254
             }, null, 8
1255 1255
             /* PROPS */
1256 1256
             , ["field", "header"]);
@@ -1302,9 +1302,10 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
1302 1302
 "use strict";
1303 1303
 __webpack_require__.r(__webpack_exports__);
1304 1304
 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1305
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
1305
+/* harmony export */   "IndexTable": () => (/* binding */ IndexTable),
1306
+/* harmony export */   "TopUpsTable": () => (/* binding */ TopUpsTable)
1306 1307
 /* harmony export */ });
1307
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ([{
1308
+var IndexTable = [{
1308 1309
   field: 'updatedAt',
1309 1310
   header: 'Diperbaharui'
1310 1311
 }, {
@@ -1325,7 +1326,29 @@ __webpack_require__.r(__webpack_exports__);
1325 1326
 }, {
1326 1327
   field: 'expDate',
1327 1328
   header: 'Berakhir'
1328
-}]);
1329
+}];
1330
+var TopUpsTable = [{
1331
+  field: 'updatedAt',
1332
+  header: 'Diperbaharui'
1333
+}, {
1334
+  field: 'name',
1335
+  header: 'Nama User'
1336
+}, {
1337
+  field: 'phone',
1338
+  header: 'Nomor HP User'
1339
+}, {
1340
+  field: 'platNumber',
1341
+  header: 'Plat Kendaraan'
1342
+}, {
1343
+  field: 'type',
1344
+  header: 'Jenis Member'
1345
+}, {
1346
+  field: 'amount',
1347
+  header: 'Tarif Member'
1348
+}, {
1349
+  field: 'expDate',
1350
+  header: 'Berakhir'
1351
+}];
1329 1352
 
1330 1353
 /***/ }),
1331 1354
 

+ 1642
- 3
public/js/resources_js_pages_topup_Show_vue.js
Разлика између датотеке није приказан због своје велике величине
Прегледај датотеку


+ 26
- 3
public/js/resources_js_pages_topup_TableHeader_js.js Прегледај датотеку

@@ -9,9 +9,10 @@
9 9
 
10 10
 __webpack_require__.r(__webpack_exports__);
11 11
 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
12
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
12
+/* harmony export */   "IndexTable": () => (/* binding */ IndexTable),
13
+/* harmony export */   "TopUpsTable": () => (/* binding */ TopUpsTable)
13 14
 /* harmony export */ });
14
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ([{
15
+var IndexTable = [{
15 16
   field: 'updatedAt',
16 17
   header: 'Diperbaharui'
17 18
 }, {
@@ -32,7 +33,29 @@ __webpack_require__.r(__webpack_exports__);
32 33
 }, {
33 34
   field: 'expDate',
34 35
   header: 'Berakhir'
35
-}]);
36
+}];
37
+var TopUpsTable = [{
38
+  field: 'updatedAt',
39
+  header: 'Diperbaharui'
40
+}, {
41
+  field: 'name',
42
+  header: 'Nama User'
43
+}, {
44
+  field: 'phone',
45
+  header: 'Nomor HP User'
46
+}, {
47
+  field: 'platNumber',
48
+  header: 'Plat Kendaraan'
49
+}, {
50
+  field: 'type',
51
+  header: 'Jenis Member'
52
+}, {
53
+  field: 'amount',
54
+  header: 'Tarif Member'
55
+}, {
56
+  field: 'expDate',
57
+  header: 'Berakhir'
58
+}];
36 59
 
37 60
 /***/ })
38 61
 

+ 1
- 9
public/js/vue.js Прегледај датотеку

@@ -58127,14 +58127,6 @@ var map = {
58127 58127
 		"./resources/js/pages/topup/Create.vue",
58128 58128
 		"resources_js_pages_topup_Create_vue"
58129 58129
 	],
58130
-	"./topup/Edit": [
58131
-		"./resources/js/pages/topup/Edit.vue",
58132
-		"resources_js_pages_topup_Edit_vue"
58133
-	],
58134
-	"./topup/Edit.vue": [
58135
-		"./resources/js/pages/topup/Edit.vue",
58136
-		"resources_js_pages_topup_Edit_vue"
58137
-	],
58138 58130
 	"./topup/Index": [
58139 58131
 		"./resources/js/pages/topup/Index.vue",
58140 58132
 		"resources_js_pages_topup_Index_vue"
@@ -58380,7 +58372,7 @@ module.exports = JSON.parse('{"name":"axios","version":"0.21.4","description":"P
58380 58372
 /******/ 		// This function allow to reference async chunks
58381 58373
 /******/ 		__webpack_require__.u = (chunkId) => {
58382 58374
 /******/ 			// return url for filenames based on template
58383
-/******/ 			return "js/" + chunkId + ".js?id=" + {"node_modules_chart_js_auto_auto_esm_js":"10c6b388645ceb22","resources_js_pages_auth_ForgotPassword_vue":"5b9f0529bda25a9b","resources_js_pages_auth_Login_vue":"61b9c9ae1ae9da32","resources_js_pages_auth_ResetPassword_vue":"b091193a1e114ce8","resources_js_pages_auth_VerifyEmail_vue":"a7b9a99e5a331088","resources_js_pages_expense_Create_vue":"66e7c99b236f0deb","resources_js_pages_expense_Index_vue":"f85b8a458475c32f","resources_js_pages_expense_Show_vue":"8aec315380095efc","resources_js_pages_expense_TableHeader_js":"eed3f0613f167cfd","resources_js_pages_home_Index_vue":"77d2cc7e0ffbf90e","resources_js_pages_member_Create_vue":"095d1e304d77aaa8","resources_js_pages_member_Edit_vue":"48baae4f4480f54d","resources_js_pages_member_Index_vue":"220ea5d5cd363228","resources_js_pages_member_TableHeader_js":"51dbf053f7ddd45c","resources_js_pages_topup_Create_vue":"5699ce5235a0af54","resources_js_pages_topup_Edit_vue":"258c3b0746574dc0","resources_js_pages_topup_Index_vue":"f3a415d3c1ec52df","resources_js_pages_topup_Show_vue":"cb35ad21e9ce163f","resources_js_pages_topup_TableHeader_js":"c0dc89df0e3b8b7d","resources_js_pages_typemember_Create_vue":"a79f5122dd4d955c","resources_js_pages_typemember_Edit_vue":"339a293819be91a7","resources_js_pages_typemember_Index_vue":"b6d16dc9b5f2b3b6","resources_js_pages_typemember_TableHeader_js":"ac1d31a59f8d464e","resources_js_pages_typevehicle_Create_vue":"913e399451308fbb","resources_js_pages_typevehicle_Edit_vue":"659302538c3304bb","resources_js_pages_typevehicle_Index_vue":"a5da2be987ea0ce5","resources_js_pages_typevehicle_TableHeader_js":"a40378918fbe74e1","resources_js_pages_user_Create_vue":"9407a7ca1e9268c7","resources_js_pages_user_Edit_vue":"68b60f3e274f7cd8","resources_js_pages_user_Index_vue":"f3269e9d78d4fe78","resources_js_pages_user_Show_vue":"e1c2622b8345f329","resources_js_pages_user_TableHeader_js":"0d87fd422fe40491"}[chunkId] + "";
58375
+/******/ 			return "js/" + chunkId + ".js?id=" + {"node_modules_chart_js_auto_auto_esm_js":"10c6b388645ceb22","resources_js_pages_auth_ForgotPassword_vue":"5b9f0529bda25a9b","resources_js_pages_auth_Login_vue":"61b9c9ae1ae9da32","resources_js_pages_auth_ResetPassword_vue":"b091193a1e114ce8","resources_js_pages_auth_VerifyEmail_vue":"a7b9a99e5a331088","resources_js_pages_expense_Create_vue":"66e7c99b236f0deb","resources_js_pages_expense_Index_vue":"f85b8a458475c32f","resources_js_pages_expense_Show_vue":"8aec315380095efc","resources_js_pages_expense_TableHeader_js":"eed3f0613f167cfd","resources_js_pages_home_Index_vue":"77d2cc7e0ffbf90e","resources_js_pages_member_Create_vue":"9b0395de1134f447","resources_js_pages_member_Edit_vue":"48baae4f4480f54d","resources_js_pages_member_Index_vue":"220ea5d5cd363228","resources_js_pages_member_TableHeader_js":"51dbf053f7ddd45c","resources_js_pages_topup_Create_vue":"73efcea746438335","resources_js_pages_topup_Index_vue":"4213bf188c295a33","resources_js_pages_topup_Show_vue":"a8c55ac0b35fc72b","resources_js_pages_topup_TableHeader_js":"601b7c0a855ce64e","resources_js_pages_typemember_Create_vue":"a79f5122dd4d955c","resources_js_pages_typemember_Edit_vue":"339a293819be91a7","resources_js_pages_typemember_Index_vue":"b6d16dc9b5f2b3b6","resources_js_pages_typemember_TableHeader_js":"ac1d31a59f8d464e","resources_js_pages_typevehicle_Create_vue":"913e399451308fbb","resources_js_pages_typevehicle_Edit_vue":"659302538c3304bb","resources_js_pages_typevehicle_Index_vue":"a5da2be987ea0ce5","resources_js_pages_typevehicle_TableHeader_js":"a40378918fbe74e1","resources_js_pages_user_Create_vue":"9407a7ca1e9268c7","resources_js_pages_user_Edit_vue":"68b60f3e274f7cd8","resources_js_pages_user_Index_vue":"f3269e9d78d4fe78","resources_js_pages_user_Show_vue":"e1c2622b8345f329","resources_js_pages_user_TableHeader_js":"0d87fd422fe40491"}[chunkId] + "";
58384 58376
 /******/ 		};
58385 58377
 /******/ 	})();
58386 58378
 /******/ 	

+ 2
- 2
resources/js/pages/member/Create.vue Прегледај датотеку

@@ -130,7 +130,7 @@ const formSent = () => {
130 130
 
131 131
 const submit = () => {
132 132
   confirm.require({
133
-    message: `Tagihan dikenakan untuk member baru sebesar ${props.typeMember.price}`,
133
+    message: `Dikenakan tagihan untuk member baru sebesar ${props.typeMember.price}`,
134 134
     header: 'Tagihan',
135 135
     acceptLabel: 'Bayar dan simpan',
136 136
     rejectLabel: 'Batalkan',
@@ -138,7 +138,7 @@ const submit = () => {
138 138
       formSent()
139 139
     },
140 140
     reject: () => {
141
-      console.info('transaksi digagalkan')
141
+      console.info('transaksi dibatalkan')
142 142
     },
143 143
   })
144 144
 }

+ 70
- 14
resources/js/pages/topup/Create.vue Прегледај датотеку

@@ -2,6 +2,7 @@
2 2
 import { computed, watch } from 'vue'
3 3
 import { Inertia } from '@inertiajs/inertia'
4 4
 import { Head, useForm, usePage } from '@inertiajs/inertia-vue3'
5
+import { useConfirm } from 'primevue/useconfirm'
5 6
 import AppAutocompleteBasic from '@/components/AppAutocompleteBasic.vue'
6 7
 import AppLayout from '@/layouts/AppLayout.vue'
7 8
 
@@ -37,8 +38,29 @@ const form = useForm({
37 38
   member: null,
38 39
 })
39 40
 
41
+const confirm = useConfirm()
42
+
43
+const formSent = () => {
44
+  form
45
+    .transform((data) => ({
46
+      member_id: data.member.id,
47
+    }))
48
+    .post(route('top-ups.store'), { onSuccess: () => form.reset() })
49
+}
50
+
40 51
 const submit = () => {
41
-  form.post(route('top-ups.store'), { onSuccess: () => form.reset() })
52
+  confirm.require({
53
+    message: `Dikenakan tagihan sebesar ${form.member.price}`,
54
+    header: 'Top Up',
55
+    acceptLabel: 'Bayar dan simpan',
56
+    rejectLabel: 'Batalkan',
57
+    accept: () => {
58
+      formSent()
59
+    },
60
+    reject: () => {
61
+      console.info('transaksi dibatalkan')
62
+    },
63
+  })
42 64
 }
43 65
 </script>
44 66
 
@@ -46,27 +68,52 @@ const submit = () => {
46 68
   <Head title="Top Up" />
47 69
 
48 70
   <AppLayout>
71
+    <ConfirmDialog></ConfirmDialog>
72
+
49 73
     <div class="grid">
50 74
       <div class="col-12 md:col-8">
51 75
         <Card class="surface-200">
52 76
           <template #title>Detail Member</template>
53 77
           <template v-if="form.member" #content>
54
-            <h3 class="text-base font-bold mb-0">Nama</h3>
55
-            <p>{{ form.member.name }}</p>
78
+            <p v-if="form.member.name">
79
+              <span class="text-base font-bold"> Nama </span>
80
+
81
+              <br />
82
+
83
+              {{ form.member.name }}
84
+            </p>
85
+
86
+            <p v-if="form.member.phone">
87
+              <span class="text-base font-bold"> Nomor HP </span>
88
+
89
+              <br />
90
+
91
+              {{ form.member.phone }}
92
+            </p>
93
+
94
+            <p v-if="form.member.type">
95
+              <span class="text-base font-bold"> Jenis Member </span>
96
+
97
+              <br />
98
+
99
+              {{ form.member.type }}
100
+            </p>
101
+
102
+            <p v-if="form.member.price">
103
+              <span class="text-base font-bold"> Tarif Member </span>
56 104
 
57
-            <h3 class="text-base font-bold mb-0">Nomor HP</h3>
58
-            <p>{{ form.member.phone }}</p>
105
+              <br />
59 106
 
60
-            <h3 class="text-base font-bold mb-0">Plat Kendaraan</h3>
61
-            <p>
62
-              {{ form.member.platNumber }}
107
+              {{ form.member.price }}
63 108
             </p>
64 109
 
65
-            <h3 class="text-base font-bold mb-0">Jenis Member</h3>
66
-            <p>{{ form.member.type }}</p>
110
+            <p v-if="form.member.expDate">
111
+              <span class="text-base font-bold"> Berakhir </span>
67 112
 
68
-            <h3 class="text-base font-bold mb-0">Berakhir</h3>
69
-            <p>{{ form.member.expDate }}</p>
113
+              <br />
114
+
115
+              {{ form.member.expDate }}
116
+            </p>
70 117
           </template>
71 118
         </Card>
72 119
       </div>
@@ -108,8 +155,17 @@ const submit = () => {
108 155
                 </AppAutocompleteBasic>
109 156
               </div>
110 157
             </div>
111
-
112
-            <Divider type="dashed" />
158
+          </template>
159
+          <template #footer>
160
+            <div class="flex flex-column md:flex-row justify-content-end">
161
+              <Button
162
+                label="Topup"
163
+                icon="pi pi-check"
164
+                class="p-button-outlined"
165
+                :disabled="form.processing"
166
+                @click="submit"
167
+              />
168
+            </div>
113 169
           </template>
114 170
         </Card>
115 171
       </div>

+ 0
- 0
resources/js/pages/topup/Edit.vue Прегледај датотеку


+ 5
- 5
resources/js/pages/topup/Index.vue Прегледај датотеку

@@ -8,7 +8,7 @@ import AppLayout from '@/layouts/AppLayout.vue'
8 8
 import AppPagination from '@/components/AppPagination.vue'
9 9
 import AppButton from '@/components/AppButton.vue'
10 10
 
11
-import TableHeader from './TableHeader'
11
+import { IndexTable } from './TableHeader'
12 12
 
13 13
 const props = defineProps({
14 14
   topUp: Object,
@@ -117,10 +117,10 @@ const filterReset = () => {
117 117
       </template>
118 118
 
119 119
       <Column
120
-        v-for="tableHeader in TableHeader"
121
-        :field="tableHeader.field"
122
-        :header="tableHeader.header"
123
-        :key="tableHeader.field"
120
+        v-for="indexTable in IndexTable"
121
+        :field="indexTable.field"
122
+        :header="indexTable.header"
123
+        :key="indexTable.field"
124 124
       />
125 125
 
126 126
       <Column>

+ 67
- 0
resources/js/pages/topup/Show.vue Прегледај датотеку

@@ -0,0 +1,67 @@
1
+<script setup>
2
+import { onMounted } from 'vue'
3
+import { Head } from '@inertiajs/inertia-vue3'
4
+import AppPagination from '@/components/AppPagination.vue'
5
+import AppLayout from '@/layouts/AppLayout.vue'
6
+
7
+import { TopUpsTable } from './TableHeader'
8
+
9
+const props = defineProps({
10
+  member: Object,
11
+  topUp: Object,
12
+})
13
+
14
+onMounted(() => {
15
+  console.info(props.member)
16
+  console.table(props.topUp)
17
+})
18
+</script>
19
+
20
+<template>
21
+  <Head title="Detail Top Up" />
22
+
23
+  <AppLayout>
24
+    <DataTable
25
+      responsive-layout="scroll"
26
+      column-resize-mode="expand"
27
+      :value="topUp.data"
28
+      :row-hover="true"
29
+      :striped-rows="true"
30
+    >
31
+      <template #header>
32
+        <h1 class="text-2xl font-bold">Detail Top Up</h1>
33
+
34
+        <div class="grid px-2">
35
+          <div class="col-auto mr-7">
36
+            <h2>
37
+              <span class="text-base"> <i class="pi pi-user" /> Nama</span>
38
+
39
+              <br />
40
+
41
+              <span class="text-lg">{{ member.name }}</span>
42
+            </h2>
43
+          </div>
44
+
45
+          <div class="col-auto">
46
+            <h2>
47
+              <span class="text-base"> <i class="pi pi-phone" /> Nomor HP </span>
48
+
49
+              <br />
50
+
51
+              <span class="text-lg">{{ member.phone }}</span>
52
+            </h2>
53
+          </div>
54
+        </div>
55
+      </template>
56
+
57
+      <Column
58
+        v-for="topUpsTable in TopUpsTable"
59
+        :field="topUpsTable.field"
60
+        :header="topUpsTable.header"
61
+        :key="topUpsTable.field"
62
+      />
63
+    </DataTable>
64
+
65
+    <AppPagination :links="topUp.links" />
66
+  </AppLayout>
67
+</template>

+ 11
- 1
resources/js/pages/topup/TableHeader.js Прегледај датотеку

@@ -1,4 +1,4 @@
1
-export default [
1
+export const IndexTable = [
2 2
   { field: 'updatedAt', header: 'Diperbaharui' },
3 3
   { field: 'name', header: 'Nama' },
4 4
   { field: 'phone', header: 'Nomor HP' },
@@ -7,3 +7,13 @@ export default [
7 7
   { field: 'amount', header: 'Tarif Member' },
8 8
   { field: 'expDate', header: 'Berakhir' },
9 9
 ]
10
+
11
+export const TopUpsTable = [
12
+  { field: 'updatedAt', header: 'Diperbaharui' },
13
+  { field: 'name', header: 'Nama User' },
14
+  { field: 'phone', header: 'Nomor HP User' },
15
+  { field: 'platNumber', header: 'Plat Kendaraan' },
16
+  { field: 'type', header: 'Jenis Member' },
17
+  { field: 'amount', header: 'Tarif Member' },
18
+  { field: 'expDate', header: 'Berakhir' },
19
+]