Procházet zdrojové kódy

feat: master member

Muhammad Iqbal Afandi před 4 roky
rodič
revize
361dbbb081
34 změnil soubory, kde provedl 11895 přidání a 67 odebrání
  1. 125
    0
      app/Http/Controllers/MemberController.php
  2. 33
    0
      app/Http/Requests/Member/StoreMemberRequest.php
  3. 33
    0
      app/Http/Requests/Member/UpdateMemberRequest.php
  4. 26
    0
      app/Models/Member.php
  5. 0
    1
      app/Models/TypeMember.php
  6. 7
    7
      designs/diagrams/database.puml
  7. binární
      designs/diagrams/database/Database.png
  8. 3
    0
      lang/id/messages.php
  9. 23
    0
      public/js/resources_js_pages_expense_Create_vue.js
  10. 23
    0
      public/js/resources_js_pages_expense_Index_vue.js
  11. 23
    0
      public/js/resources_js_pages_expense_Show_vue.js
  12. 23
    0
      public/js/resources_js_pages_home_Index_vue.js
  13. 1916
    0
      public/js/resources_js_pages_member_Create_vue.js
  14. 2141
    0
      public/js/resources_js_pages_member_Edit_vue.js
  15. 6912
    0
      public/js/resources_js_pages_member_Index_vue.js
  16. 36
    0
      public/js/resources_js_pages_member_TableHeader_js.js
  17. 30
    2
      public/js/resources_js_pages_typemember_Create_vue.js
  18. 31
    7
      public/js/resources_js_pages_typemember_Edit_vue.js
  19. 38
    8
      public/js/resources_js_pages_typemember_Index_vue.js
  20. 23
    0
      public/js/resources_js_pages_user_Create_vue.js
  21. 44
    23
      public/js/resources_js_pages_user_Edit_vue.js
  22. 23
    0
      public/js/resources_js_pages_user_Index_vue.js
  23. 23
    0
      public/js/resources_js_pages_user_Show_vue.js
  24. 33
    1
      public/js/vue.js
  25. 84
    0
      resources/js/pages/member/Create.vue
  26. 115
    0
      resources/js/pages/member/Edit.vue
  27. 82
    0
      resources/js/pages/member/Index.vue
  28. 8
    0
      resources/js/pages/member/TableHeader.js
  29. 3
    1
      resources/js/pages/typemember/Create.vue
  30. 4
    2
      resources/js/pages/typemember/Edit.vue
  31. 3
    0
      resources/js/pages/typemember/Index.vue
  32. 15
    15
      resources/js/pages/user/Edit.vue
  33. 9
    0
      resources/js/utils/menu.js
  34. 3
    0
      routes/web.php

+ 125
- 0
app/Http/Controllers/MemberController.php Zobrazit soubor

@@ -0,0 +1,125 @@
1
+<?php
2
+
3
+namespace App\Http\Controllers;
4
+
5
+use App\Http\Requests\Member\StoreMemberRequest;
6
+use App\Http\Requests\Member\UpdateMemberRequest;
7
+use App\Models\Member;
8
+use App\Models\TypeMember;
9
+
10
+class MemberController extends Controller
11
+{
12
+    /**
13
+     * Display a listing of the resource.
14
+     *
15
+     * @return \Inertia\Response
16
+     */
17
+    public function index()
18
+    {
19
+        return inertia('member/Index', [
20
+            'filters' => request()->all('search'),
21
+            'members' => Member::filter(request()->only('search'))
22
+                ->latest()
23
+                ->paginate(10)
24
+                ->withQueryString()
25
+                ->through(fn($member) => [
26
+                    'id' => $member->id,
27
+                    'updatedAt' => $member->updated_at,
28
+                    'name' => $member->name,
29
+                    'phone' => $member->phone,
30
+                    'platNumber' => $member->plat_number,
31
+                    'type' => $member->typeMember->type,
32
+                    'price' => $member->typeMember->price,
33
+                ]),
34
+        ]);
35
+    }
36
+
37
+    /**
38
+     * Show the form for creating a new resource.
39
+     *
40
+     * @return \Inertia\Response
41
+     */
42
+    public function create()
43
+    {
44
+        return inertia('member/Create', [
45
+            'typeMembers' => TypeMember::get()->transform(fn($typeMember) => [
46
+                'label' => $typeMember->type,
47
+                'value' => $typeMember->id,
48
+            ]),
49
+        ]);
50
+    }
51
+
52
+    /**
53
+     * Store a newly created resource in storage.
54
+     *
55
+     * @param  \Illuminate\Http\Request  $request
56
+     * @return \Illuminate\Http\Response
57
+     */
58
+    public function store(StoreMemberRequest $request)
59
+    {
60
+        Member::create($request->validated());
61
+
62
+        return back()->with('success', __('messages.success.store.member'));
63
+    }
64
+
65
+    /**
66
+     * Display the specified resource.
67
+     *
68
+     * @param  Member  $member
69
+     * @return \Inertia\Response
70
+     */
71
+    public function show(Member $member)
72
+    {
73
+        //
74
+    }
75
+
76
+    /**
77
+     * Show the form for editing the specified resource.
78
+     *
79
+     * @param  Member  $member
80
+     * @return \Inertia\Response
81
+     */
82
+    public function edit(Member $member)
83
+    {
84
+        return inertia('member/Edit', [
85
+            'member' => [
86
+                'id' => $member->id,
87
+                'name' => $member->name,
88
+                'phone' => $member->phone,
89
+                'plat_number' => $member->plat_number,
90
+                'type_member_id' => $member->type_member_id,
91
+            ],
92
+            'typeMembers' => TypeMember::get()->transform(fn($typeMember) => [
93
+                'label' => $typeMember->type,
94
+                'value' => $typeMember->id,
95
+            ]),
96
+        ]);
97
+    }
98
+
99
+    /**
100
+     * Update the specified resource in storage.
101
+     *
102
+     * @param  \Illuminate\Http\Request  $request
103
+     * @param  Member  $member
104
+     * @return \Illuminate\Http\Response
105
+     */
106
+    public function update(UpdateMemberRequest $request, Member $member)
107
+    {
108
+        $member->update($request->validated());
109
+
110
+        return back()->with('success', __('messages.success.update.member'));
111
+    }
112
+
113
+    /**
114
+     * Remove the specified resource from storage.
115
+     *
116
+     * @param  Member  $member
117
+     * @return \Illuminate\Http\Response
118
+     */
119
+    public function destroy($member)
120
+    {
121
+        $member->delete();
122
+
123
+        return to_route('members.index')->with('success', __('messages.success.destroy.member'));
124
+    }
125
+}

+ 33
- 0
app/Http/Requests/Member/StoreMemberRequest.php Zobrazit soubor

@@ -0,0 +1,33 @@
1
+<?php
2
+
3
+namespace App\Http\Requests\Member;
4
+
5
+use Illuminate\Foundation\Http\FormRequest;
6
+
7
+class StoreMemberRequest extends FormRequest
8
+{
9
+    /**
10
+     * Determine if the user is authorized to make this request.
11
+     *
12
+     * @return bool
13
+     */
14
+    public function authorize()
15
+    {
16
+        return true;
17
+    }
18
+
19
+    /**
20
+     * Get the validation rules that apply to the request.
21
+     *
22
+     * @return array
23
+     */
24
+    public function rules()
25
+    {
26
+        return [
27
+            'name' => 'required|string|max:50',
28
+            'phone' => 'required|numeric|min:12|unique:members,phone',
29
+            'plat_number' => 'required|string|unique:members,plat_number',
30
+            'type_member_id' => 'required|numeric',
31
+        ];
32
+    }
33
+}

+ 33
- 0
app/Http/Requests/Member/UpdateMemberRequest.php Zobrazit soubor

@@ -0,0 +1,33 @@
1
+<?php
2
+
3
+namespace App\Http\Requests\Member;
4
+
5
+use Illuminate\Foundation\Http\FormRequest;
6
+
7
+class UpdateMemberRequest extends FormRequest
8
+{
9
+    /**
10
+     * Determine if the user is authorized to make this request.
11
+     *
12
+     * @return bool
13
+     */
14
+    public function authorize()
15
+    {
16
+        return true;
17
+    }
18
+
19
+    /**
20
+     * Get the validation rules that apply to the request.
21
+     *
22
+     * @return array
23
+     */
24
+    public function rules()
25
+    {
26
+        return [
27
+            'name' => 'required|string|max:50',
28
+            'phone' => 'required|numeric|min:12|unique:members,phone,' . $this->member->id,
29
+            'plat_number' => 'required|string|unique:members,plat_number,' . $this->member->id,
30
+            'type_member_id' => 'required|numeric',
31
+        ];
32
+    }
33
+}

+ 26
- 0
app/Models/Member.php Zobrazit soubor

@@ -2,6 +2,8 @@
2 2
 
3 3
 namespace App\Models;
4 4
 
5
+use Carbon\Carbon;
6
+use Illuminate\Database\Eloquent\Casts\Attribute;
5 7
 use Illuminate\Database\Eloquent\Factories\HasFactory;
6 8
 use Illuminate\Database\Eloquent\Model;
7 9
 
@@ -13,5 +15,29 @@ class Member extends Model
13 15
         'name',
14 16
         'phone',
15 17
         'plat_number',
18
+        'type_member_id',
16 19
     ];
20
+
21
+    protected function updatedAt(): Attribute
22
+    {
23
+        return Attribute::make(
24
+            get:fn($value) => Carbon::parse($value)->translatedFormat('l d/m/Y')
25
+        );
26
+    }
27
+
28
+    public function typeMember()
29
+    {
30
+        return $this->belongsTo(TypeMember::class);
31
+    }
32
+
33
+    public function scopeFilter($query, array $filters)
34
+    {
35
+        $query->when($filters['search'] ?? null, function ($query, $search) {
36
+            $query->where(function ($query) use ($search) {
37
+                $query->where('name', 'like', '%' . $search . '%')
38
+                    ->orWhere('phone', 'like', '%' . $search . '%')
39
+                    ->orWhere('plat_number', 'like', '%' . $search . '%');
40
+            });
41
+        });
42
+    }
17 43
 }

+ 0
- 1
app/Models/TypeMember.php Zobrazit soubor

@@ -30,5 +30,4 @@ class TypeMember extends Model
30 30
             get:fn($value) => (new CurrencyFormatService)->setRupiahFormat($value, true)
31 31
         );
32 32
     }
33
-
34 33
 }

+ 7
- 7
designs/diagrams/database.puml Zobrazit soubor

@@ -43,14 +43,14 @@ entity ParkingFee {
43 43
 entity Transaction {
44 44
   * id
45 45
   __
46
-  * login_time
47
-  * time_out
48
-  * plat_number
49
-  * price
50
-  * input_by
51 46
   * capture_vehicle
52
-  * type_vehicle_id
53
-  * user_id
47
+  * transaction_number
48
+  * login_time
49
+  time_out
50
+  plat_number
51
+  price
52
+  type_vehicle_id
53
+  user_id
54 54
   member_id
55 55
 }
56 56
 

binární
designs/diagrams/database/Database.png Zobrazit soubor


+ 3
- 0
lang/id/messages.php Zobrazit soubor

@@ -22,6 +22,7 @@ return [
22 22
             'verify_email' => 'Link verifikasi email berhasil terkirim',
23 23
         ],
24 24
         'store' => [
25
+            'member' => 'Member berhasil ditambahkan',
25 26
             'type-member' => 'Jenis member berhasil ditambahkan',
26 27
             'discount' => 'Diskon berhasil diubah',
27 28
             'expense' => 'Pengeluaran berhasil ditambahkan',
@@ -29,12 +30,14 @@ return [
29 30
             'user' => 'Akun user berhasil ditambahkan',
30 31
         ],
31 32
         'update' => [
33
+            'member' => 'Member berhasil diubah',
32 34
             'type-member' => 'Jenis member berhasil diubah',
33 35
             'change-password' => 'Password berhasil diubah',
34 36
             'transaction_status' => 'Status transaksi berhasil diubah',
35 37
             'user' => 'Akun user berhasil diubah',
36 38
         ],
37 39
         'destroy' => [
40
+            'member' => 'Akun member berhasil dihapus',
38 41
             'user' => 'Akun user berhasil dihapus',
39 42
         ],
40 43
     ],

+ 23
- 0
public/js/resources_js_pages_expense_Create_vue.js Zobrazit soubor

@@ -1392,6 +1392,11 @@ __webpack_require__.r(__webpack_exports__);
1392 1392
       icon: 'pi pi-id-card',
1393 1393
       to: '/type-members',
1394 1394
       component: 'typemember/Index'
1395
+    }, {
1396
+      label: 'Member',
1397
+      icon: 'pi pi-id-card',
1398
+      to: '/members',
1399
+      component: 'member/Index'
1395 1400
     }]
1396 1401
   }],
1397 1402
   // Operator
@@ -1403,6 +1408,24 @@ __webpack_require__.r(__webpack_exports__);
1403 1408
       to: '/dashboards',
1404 1409
       component: 'home/Index'
1405 1410
     }]
1411
+  }, {
1412
+    label: 'Menu',
1413
+    items: [{
1414
+      label: 'Pengeluaran',
1415
+      icon: 'pi pi-wallet',
1416
+      to: '/expenses',
1417
+      component: 'expense/Index'
1418
+    }, {
1419
+      label: 'Jenis Member',
1420
+      icon: 'pi pi-id-card',
1421
+      to: '/type-members',
1422
+      component: 'typemember/Index'
1423
+    }, {
1424
+      label: 'Member',
1425
+      icon: 'pi pi-id-card',
1426
+      to: '/members',
1427
+      component: 'member/Index'
1428
+    }]
1406 1429
   }]
1407 1430
 });
1408 1431
 

+ 23
- 0
public/js/resources_js_pages_expense_Index_vue.js Zobrazit soubor

@@ -1334,6 +1334,11 @@ __webpack_require__.r(__webpack_exports__);
1334 1334
       icon: 'pi pi-id-card',
1335 1335
       to: '/type-members',
1336 1336
       component: 'typemember/Index'
1337
+    }, {
1338
+      label: 'Member',
1339
+      icon: 'pi pi-id-card',
1340
+      to: '/members',
1341
+      component: 'member/Index'
1337 1342
     }]
1338 1343
   }],
1339 1344
   // Operator
@@ -1345,6 +1350,24 @@ __webpack_require__.r(__webpack_exports__);
1345 1350
       to: '/dashboards',
1346 1351
       component: 'home/Index'
1347 1352
     }]
1353
+  }, {
1354
+    label: 'Menu',
1355
+    items: [{
1356
+      label: 'Pengeluaran',
1357
+      icon: 'pi pi-wallet',
1358
+      to: '/expenses',
1359
+      component: 'expense/Index'
1360
+    }, {
1361
+      label: 'Jenis Member',
1362
+      icon: 'pi pi-id-card',
1363
+      to: '/type-members',
1364
+      component: 'typemember/Index'
1365
+    }, {
1366
+      label: 'Member',
1367
+      icon: 'pi pi-id-card',
1368
+      to: '/members',
1369
+      component: 'member/Index'
1370
+    }]
1348 1371
   }]
1349 1372
 });
1350 1373
 

+ 23
- 0
public/js/resources_js_pages_expense_Show_vue.js Zobrazit soubor

@@ -1058,6 +1058,11 @@ __webpack_require__.r(__webpack_exports__);
1058 1058
       icon: 'pi pi-id-card',
1059 1059
       to: '/type-members',
1060 1060
       component: 'typemember/Index'
1061
+    }, {
1062
+      label: 'Member',
1063
+      icon: 'pi pi-id-card',
1064
+      to: '/members',
1065
+      component: 'member/Index'
1061 1066
     }]
1062 1067
   }],
1063 1068
   // Operator
@@ -1069,6 +1074,24 @@ __webpack_require__.r(__webpack_exports__);
1069 1074
       to: '/dashboards',
1070 1075
       component: 'home/Index'
1071 1076
     }]
1077
+  }, {
1078
+    label: 'Menu',
1079
+    items: [{
1080
+      label: 'Pengeluaran',
1081
+      icon: 'pi pi-wallet',
1082
+      to: '/expenses',
1083
+      component: 'expense/Index'
1084
+    }, {
1085
+      label: 'Jenis Member',
1086
+      icon: 'pi pi-id-card',
1087
+      to: '/type-members',
1088
+      component: 'typemember/Index'
1089
+    }, {
1090
+      label: 'Member',
1091
+      icon: 'pi pi-id-card',
1092
+      to: '/members',
1093
+      component: 'member/Index'
1094
+    }]
1072 1095
   }]
1073 1096
 });
1074 1097
 

+ 23
- 0
public/js/resources_js_pages_home_Index_vue.js Zobrazit soubor

@@ -931,6 +931,11 @@ __webpack_require__.r(__webpack_exports__);
931 931
       icon: 'pi pi-id-card',
932 932
       to: '/type-members',
933 933
       component: 'typemember/Index'
934
+    }, {
935
+      label: 'Member',
936
+      icon: 'pi pi-id-card',
937
+      to: '/members',
938
+      component: 'member/Index'
934 939
     }]
935 940
   }],
936 941
   // Operator
@@ -942,6 +947,24 @@ __webpack_require__.r(__webpack_exports__);
942 947
       to: '/dashboards',
943 948
       component: 'home/Index'
944 949
     }]
950
+  }, {
951
+    label: 'Menu',
952
+    items: [{
953
+      label: 'Pengeluaran',
954
+      icon: 'pi pi-wallet',
955
+      to: '/expenses',
956
+      component: 'expense/Index'
957
+    }, {
958
+      label: 'Jenis Member',
959
+      icon: 'pi pi-id-card',
960
+      to: '/type-members',
961
+      component: 'typemember/Index'
962
+    }, {
963
+      label: 'Member',
964
+      icon: 'pi pi-id-card',
965
+      to: '/members',
966
+      component: 'member/Index'
967
+    }]
945 968
   }]
946 969
 });
947 970
 

+ 1916
- 0
public/js/resources_js_pages_member_Create_vue.js
Diff nebyl zobrazen, protože je příliš veliký
Zobrazit soubor


+ 2141
- 0
public/js/resources_js_pages_member_Edit_vue.js
Diff nebyl zobrazen, protože je příliš veliký
Zobrazit soubor


+ 6912
- 0
public/js/resources_js_pages_member_Index_vue.js
Diff nebyl zobrazen, protože je příliš veliký
Zobrazit soubor


+ 36
- 0
public/js/resources_js_pages_member_TableHeader_js.js Zobrazit soubor

@@ -0,0 +1,36 @@
1
+"use strict";
2
+(self["webpackChunk"] = self["webpackChunk"] || []).push([["resources_js_pages_member_TableHeader_js"],{
3
+
4
+/***/ "./resources/js/pages/member/TableHeader.js":
5
+/*!**************************************************!*\
6
+  !*** ./resources/js/pages/member/TableHeader.js ***!
7
+  \**************************************************/
8
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
9
+
10
+__webpack_require__.r(__webpack_exports__);
11
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
12
+/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
13
+/* harmony export */ });
14
+/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ([{
15
+  field: 'updatedAt',
16
+  header: 'Diperbaharui'
17
+}, {
18
+  field: 'name',
19
+  header: 'Nama'
20
+}, {
21
+  field: 'phone',
22
+  header: 'Nomor HP'
23
+}, {
24
+  field: 'platNumber',
25
+  header: 'Plat Kendaraan'
26
+}, {
27
+  field: 'type',
28
+  header: 'Jenis Member'
29
+}, {
30
+  field: 'price',
31
+  header: 'Tarif Member'
32
+}]);
33
+
34
+/***/ })
35
+
36
+}]);

+ 30
- 2
public/js/resources_js_pages_typemember_Create_vue.js Zobrazit soubor

@@ -579,6 +579,7 @@ __webpack_require__.r(__webpack_exports__);
579 579
       submit: submit,
580 580
       computed: vue__WEBPACK_IMPORTED_MODULE_0__.computed,
581 581
       watch: vue__WEBPACK_IMPORTED_MODULE_0__.watch,
582
+      Head: _inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_1__.Head,
582 583
       useForm: _inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_1__.useForm,
583 584
       usePage: _inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_1__.usePage,
584 585
       AppLayout: _layouts_AppLayout_vue__WEBPACK_IMPORTED_MODULE_2__["default"],
@@ -1245,7 +1246,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
1245 1246
 
1246 1247
   var _component_Card = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("Card");
1247 1248
 
1248
-  return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)($setup["AppLayout"], null, {
1249
+  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"], {
1250
+    title: "Tambah Jenis Member"
1251
+  }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup["AppLayout"], null, {
1249 1252
     "default": (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
1250 1253
       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, null, {
1251 1254
         title: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
@@ -1293,7 +1296,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
1293 1296
     _: 1
1294 1297
     /* STABLE */
1295 1298
 
1296
-  });
1299
+  })], 64
1300
+  /* STABLE_FRAGMENT */
1301
+  );
1297 1302
 }
1298 1303
 
1299 1304
 /***/ }),
@@ -1348,6 +1353,11 @@ __webpack_require__.r(__webpack_exports__);
1348 1353
       icon: 'pi pi-id-card',
1349 1354
       to: '/type-members',
1350 1355
       component: 'typemember/Index'
1356
+    }, {
1357
+      label: 'Member',
1358
+      icon: 'pi pi-id-card',
1359
+      to: '/members',
1360
+      component: 'member/Index'
1351 1361
     }]
1352 1362
   }],
1353 1363
   // Operator
@@ -1359,6 +1369,24 @@ __webpack_require__.r(__webpack_exports__);
1359 1369
       to: '/dashboards',
1360 1370
       component: 'home/Index'
1361 1371
     }]
1372
+  }, {
1373
+    label: 'Menu',
1374
+    items: [{
1375
+      label: 'Pengeluaran',
1376
+      icon: 'pi pi-wallet',
1377
+      to: '/expenses',
1378
+      component: 'expense/Index'
1379
+    }, {
1380
+      label: 'Jenis Member',
1381
+      icon: 'pi pi-id-card',
1382
+      to: '/type-members',
1383
+      component: 'typemember/Index'
1384
+    }, {
1385
+      label: 'Member',
1386
+      icon: 'pi pi-id-card',
1387
+      to: '/members',
1388
+      component: 'member/Index'
1389
+    }]
1362 1390
   }]
1363 1391
 });
1364 1392
 

+ 31
- 7
public/js/resources_js_pages_typemember_Edit_vue.js Zobrazit soubor

@@ -570,11 +570,7 @@ __webpack_require__.r(__webpack_exports__);
570 570
     });
571 571
 
572 572
     var submit = function submit() {
573
-      form.put(route('type-members.update', props.typeMember.id), {
574
-        onSuccess: function onSuccess() {
575
-          return form.reset();
576
-        }
577
-      });
573
+      form.put(route('type-members.update', props.typeMember.id));
578 574
     };
579 575
 
580 576
     var __returned__ = {
@@ -584,6 +580,7 @@ __webpack_require__.r(__webpack_exports__);
584 580
       submit: submit,
585 581
       computed: vue__WEBPACK_IMPORTED_MODULE_0__.computed,
586 582
       watch: vue__WEBPACK_IMPORTED_MODULE_0__.watch,
583
+      Head: _inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_1__.Head,
587 584
       useForm: _inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_1__.useForm,
588 585
       usePage: _inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_1__.usePage,
589 586
       AppLayout: _layouts_AppLayout_vue__WEBPACK_IMPORTED_MODULE_2__["default"],
@@ -1250,7 +1247,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
1250 1247
 
1251 1248
   var _component_Card = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("Card");
1252 1249
 
1253
-  return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)($setup["AppLayout"], null, {
1250
+  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"], {
1251
+    title: "Ubah Jenis Member"
1252
+  }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup["AppLayout"], null, {
1254 1253
     "default": (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
1255 1254
       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, null, {
1256 1255
         title: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
@@ -1298,7 +1297,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
1298 1297
     _: 1
1299 1298
     /* STABLE */
1300 1299
 
1301
-  });
1300
+  })], 64
1301
+  /* STABLE_FRAGMENT */
1302
+  );
1302 1303
 }
1303 1304
 
1304 1305
 /***/ }),
@@ -1353,6 +1354,11 @@ __webpack_require__.r(__webpack_exports__);
1353 1354
       icon: 'pi pi-id-card',
1354 1355
       to: '/type-members',
1355 1356
       component: 'typemember/Index'
1357
+    }, {
1358
+      label: 'Member',
1359
+      icon: 'pi pi-id-card',
1360
+      to: '/members',
1361
+      component: 'member/Index'
1356 1362
     }]
1357 1363
   }],
1358 1364
   // Operator
@@ -1364,6 +1370,24 @@ __webpack_require__.r(__webpack_exports__);
1364 1370
       to: '/dashboards',
1365 1371
       component: 'home/Index'
1366 1372
     }]
1373
+  }, {
1374
+    label: 'Menu',
1375
+    items: [{
1376
+      label: 'Pengeluaran',
1377
+      icon: 'pi pi-wallet',
1378
+      to: '/expenses',
1379
+      component: 'expense/Index'
1380
+    }, {
1381
+      label: 'Jenis Member',
1382
+      icon: 'pi pi-id-card',
1383
+      to: '/type-members',
1384
+      component: 'typemember/Index'
1385
+    }, {
1386
+      label: 'Member',
1387
+      icon: 'pi pi-id-card',
1388
+      to: '/members',
1389
+      component: 'member/Index'
1390
+    }]
1367 1391
   }]
1368 1392
 });
1369 1393
 

+ 38
- 8
public/js/resources_js_pages_typemember_Index_vue.js Zobrazit soubor

@@ -380,9 +380,11 @@ __webpack_require__.r(__webpack_exports__);
380 380
 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
381 381
 /* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
382 382
 /* harmony export */ });
383
-/* harmony import */ var _components_AppButton_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/components/AppButton.vue */ "./resources/js/components/AppButton.vue");
384
-/* harmony import */ var _layouts_AppLayout_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/layouts/AppLayout.vue */ "./resources/js/layouts/AppLayout.vue");
385
-/* harmony import */ var _TableHeader__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./TableHeader */ "./resources/js/pages/typemember/TableHeader.js");
383
+/* harmony import */ var _inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @inertiajs/inertia-vue3 */ "./node_modules/@inertiajs/inertia-vue3/dist/index.js");
384
+/* harmony import */ var _components_AppButton_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/components/AppButton.vue */ "./resources/js/components/AppButton.vue");
385
+/* harmony import */ var _layouts_AppLayout_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/layouts/AppLayout.vue */ "./resources/js/layouts/AppLayout.vue");
386
+/* harmony import */ var _TableHeader__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./TableHeader */ "./resources/js/pages/typemember/TableHeader.js");
387
+
386 388
 
387 389
 
388 390
 
@@ -394,9 +396,10 @@ __webpack_require__.r(__webpack_exports__);
394 396
     var expose = _ref.expose;
395 397
     expose();
396 398
     var __returned__ = {
397
-      AppButton: _components_AppButton_vue__WEBPACK_IMPORTED_MODULE_0__["default"],
398
-      AppLayout: _layouts_AppLayout_vue__WEBPACK_IMPORTED_MODULE_1__["default"],
399
-      TableHeader: _TableHeader__WEBPACK_IMPORTED_MODULE_2__["default"]
399
+      Head: _inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_0__.Head,
400
+      AppButton: _components_AppButton_vue__WEBPACK_IMPORTED_MODULE_1__["default"],
401
+      AppLayout: _layouts_AppLayout_vue__WEBPACK_IMPORTED_MODULE_2__["default"],
402
+      TableHeader: _TableHeader__WEBPACK_IMPORTED_MODULE_3__["default"]
400 403
     };
401 404
     Object.defineProperty(__returned__, '__isScriptSetup', {
402 405
       enumerable: false,
@@ -994,7 +997,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
994 997
 
995 998
   var _component_DataTable = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("DataTable");
996 999
 
997
-  return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)($setup["AppLayout"], null, {
1000
+  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"], {
1001
+    title: "Daftar Jenis Member"
1002
+  }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup["AppLayout"], null, {
998 1003
     "default": (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
999 1004
       return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_DataTable, {
1000 1005
         "responsive-layout": "scroll",
@@ -1050,7 +1055,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
1050 1055
     _: 1
1051 1056
     /* STABLE */
1052 1057
 
1053
-  });
1058
+  })], 64
1059
+  /* STABLE_FRAGMENT */
1060
+  );
1054 1061
 }
1055 1062
 
1056 1063
 /***/ }),
@@ -1128,6 +1135,11 @@ __webpack_require__.r(__webpack_exports__);
1128 1135
       icon: 'pi pi-id-card',
1129 1136
       to: '/type-members',
1130 1137
       component: 'typemember/Index'
1138
+    }, {
1139
+      label: 'Member',
1140
+      icon: 'pi pi-id-card',
1141
+      to: '/members',
1142
+      component: 'member/Index'
1131 1143
     }]
1132 1144
   }],
1133 1145
   // Operator
@@ -1139,6 +1151,24 @@ __webpack_require__.r(__webpack_exports__);
1139 1151
       to: '/dashboards',
1140 1152
       component: 'home/Index'
1141 1153
     }]
1154
+  }, {
1155
+    label: 'Menu',
1156
+    items: [{
1157
+      label: 'Pengeluaran',
1158
+      icon: 'pi pi-wallet',
1159
+      to: '/expenses',
1160
+      component: 'expense/Index'
1161
+    }, {
1162
+      label: 'Jenis Member',
1163
+      icon: 'pi pi-id-card',
1164
+      to: '/type-members',
1165
+      component: 'typemember/Index'
1166
+    }, {
1167
+      label: 'Member',
1168
+      icon: 'pi pi-id-card',
1169
+      to: '/members',
1170
+      component: 'member/Index'
1171
+    }]
1142 1172
   }]
1143 1173
 });
1144 1174
 

+ 23
- 0
public/js/resources_js_pages_user_Create_vue.js Zobrazit soubor

@@ -1357,6 +1357,11 @@ __webpack_require__.r(__webpack_exports__);
1357 1357
       icon: 'pi pi-id-card',
1358 1358
       to: '/type-members',
1359 1359
       component: 'typemember/Index'
1360
+    }, {
1361
+      label: 'Member',
1362
+      icon: 'pi pi-id-card',
1363
+      to: '/members',
1364
+      component: 'member/Index'
1360 1365
     }]
1361 1366
   }],
1362 1367
   // Operator
@@ -1368,6 +1373,24 @@ __webpack_require__.r(__webpack_exports__);
1368 1373
       to: '/dashboards',
1369 1374
       component: 'home/Index'
1370 1375
     }]
1376
+  }, {
1377
+    label: 'Menu',
1378
+    items: [{
1379
+      label: 'Pengeluaran',
1380
+      icon: 'pi pi-wallet',
1381
+      to: '/expenses',
1382
+      component: 'expense/Index'
1383
+    }, {
1384
+      label: 'Jenis Member',
1385
+      icon: 'pi pi-id-card',
1386
+      to: '/type-members',
1387
+      component: 'typemember/Index'
1388
+    }, {
1389
+      label: 'Member',
1390
+      icon: 'pi pi-id-card',
1391
+      to: '/members',
1392
+      component: 'member/Index'
1393
+    }]
1371 1394
   }]
1372 1395
 });
1373 1396
 

+ 44
- 23
public/js/resources_js_pages_user_Edit_vue.js Zobrazit soubor

@@ -607,46 +607,46 @@ __webpack_require__.r(__webpack_exports__);
607 607
     var expose = _ref.expose;
608 608
     expose();
609 609
     var props = __props;
610
-    var form = (0,_inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_2__.useForm)({
611
-      name: props.user.name,
612
-      phone: props.user.phone,
613
-      email: props.user.email,
614
-      role_id: props.user.role_id
610
+    var errors = (0,vue__WEBPACK_IMPORTED_MODULE_0__.computed)(function () {
611
+      return (0,_inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_2__.usePage)().props.value.errors;
612
+    });
613
+    (0,vue__WEBPACK_IMPORTED_MODULE_0__.watch)(errors, function () {
614
+      form.clearErrors();
615 615
     });
616
-
617
-    var submit = function submit() {
618
-      form.put(route('users.update', props.user.id));
619
-    };
620
-
621 616
     var visibleDialog = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)(false);
622 617
 
623 618
     var confirmDialog = function confirmDialog() {
624 619
       visibleDialog.value = true;
625 620
     };
626 621
 
627
-    var onAgree = function onAgree(id) {
628
-      return _inertiajs_inertia__WEBPACK_IMPORTED_MODULE_1__.Inertia["delete"](route('users.destroy', id));
622
+    var onAgree = function onAgree() {
623
+      return _inertiajs_inertia__WEBPACK_IMPORTED_MODULE_1__.Inertia["delete"](route('users.destroy', props.user.id));
629 624
     };
630 625
 
631 626
     var onCancel = function onCancel() {
632 627
       return visibleDialog.value = false;
633 628
     };
634 629
 
635
-    var errors = (0,vue__WEBPACK_IMPORTED_MODULE_0__.computed)(function () {
636
-      return (0,_inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_2__.usePage)().props.value.errors;
637
-    });
638
-    (0,vue__WEBPACK_IMPORTED_MODULE_0__.watch)(errors, function () {
639
-      form.clearErrors();
630
+    var form = (0,_inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_2__.useForm)({
631
+      name: props.user.name,
632
+      phone: props.user.phone,
633
+      email: props.user.email,
634
+      role_id: props.user.role_id
640 635
     });
636
+
637
+    var submit = function submit() {
638
+      form.put(route('users.update', props.user.id));
639
+    };
640
+
641 641
     var __returned__ = {
642 642
       props: props,
643
-      form: form,
644
-      submit: submit,
643
+      errors: errors,
645 644
       visibleDialog: visibleDialog,
646 645
       confirmDialog: confirmDialog,
647 646
       onAgree: onAgree,
648 647
       onCancel: onCancel,
649
-      errors: errors,
648
+      form: form,
649
+      submit: submit,
650 650
       ref: vue__WEBPACK_IMPORTED_MODULE_0__.ref,
651 651
       watch: vue__WEBPACK_IMPORTED_MODULE_0__.watch,
652 652
       computed: vue__WEBPACK_IMPORTED_MODULE_0__.computed,
@@ -1554,9 +1554,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
1554 1554
             "onUpdate:visible": _cache[4] || (_cache[4] = function ($event) {
1555 1555
               return $setup.visibleDialog = $event;
1556 1556
             }),
1557
-            onAgree: _cache[5] || (_cache[5] = function ($event) {
1558
-              return $setup.onAgree($props.user.id);
1559
-            }),
1557
+            onAgree: $setup.onAgree,
1560 1558
             onCancel: $setup.onCancel
1561 1559
           }, null, 8
1562 1560
           /* PROPS */
@@ -1649,6 +1647,11 @@ __webpack_require__.r(__webpack_exports__);
1649 1647
       icon: 'pi pi-id-card',
1650 1648
       to: '/type-members',
1651 1649
       component: 'typemember/Index'
1650
+    }, {
1651
+      label: 'Member',
1652
+      icon: 'pi pi-id-card',
1653
+      to: '/members',
1654
+      component: 'member/Index'
1652 1655
     }]
1653 1656
   }],
1654 1657
   // Operator
@@ -1660,6 +1663,24 @@ __webpack_require__.r(__webpack_exports__);
1660 1663
       to: '/dashboards',
1661 1664
       component: 'home/Index'
1662 1665
     }]
1666
+  }, {
1667
+    label: 'Menu',
1668
+    items: [{
1669
+      label: 'Pengeluaran',
1670
+      icon: 'pi pi-wallet',
1671
+      to: '/expenses',
1672
+      component: 'expense/Index'
1673
+    }, {
1674
+      label: 'Jenis Member',
1675
+      icon: 'pi pi-id-card',
1676
+      to: '/type-members',
1677
+      component: 'typemember/Index'
1678
+    }, {
1679
+      label: 'Member',
1680
+      icon: 'pi pi-id-card',
1681
+      to: '/members',
1682
+      component: 'member/Index'
1683
+    }]
1663 1684
   }]
1664 1685
 });
1665 1686
 

+ 23
- 0
public/js/resources_js_pages_user_Index_vue.js Zobrazit soubor

@@ -1293,6 +1293,11 @@ __webpack_require__.r(__webpack_exports__);
1293 1293
       icon: 'pi pi-id-card',
1294 1294
       to: '/type-members',
1295 1295
       component: 'typemember/Index'
1296
+    }, {
1297
+      label: 'Member',
1298
+      icon: 'pi pi-id-card',
1299
+      to: '/members',
1300
+      component: 'member/Index'
1296 1301
     }]
1297 1302
   }],
1298 1303
   // Operator
@@ -1304,6 +1309,24 @@ __webpack_require__.r(__webpack_exports__);
1304 1309
       to: '/dashboards',
1305 1310
       component: 'home/Index'
1306 1311
     }]
1312
+  }, {
1313
+    label: 'Menu',
1314
+    items: [{
1315
+      label: 'Pengeluaran',
1316
+      icon: 'pi pi-wallet',
1317
+      to: '/expenses',
1318
+      component: 'expense/Index'
1319
+    }, {
1320
+      label: 'Jenis Member',
1321
+      icon: 'pi pi-id-card',
1322
+      to: '/type-members',
1323
+      component: 'typemember/Index'
1324
+    }, {
1325
+      label: 'Member',
1326
+      icon: 'pi pi-id-card',
1327
+      to: '/members',
1328
+      component: 'member/Index'
1329
+    }]
1307 1330
   }]
1308 1331
 });
1309 1332
 

+ 23
- 0
public/js/resources_js_pages_user_Show_vue.js Zobrazit soubor

@@ -1377,6 +1377,11 @@ __webpack_require__.r(__webpack_exports__);
1377 1377
       icon: 'pi pi-id-card',
1378 1378
       to: '/type-members',
1379 1379
       component: 'typemember/Index'
1380
+    }, {
1381
+      label: 'Member',
1382
+      icon: 'pi pi-id-card',
1383
+      to: '/members',
1384
+      component: 'member/Index'
1380 1385
     }]
1381 1386
   }],
1382 1387
   // Operator
@@ -1388,6 +1393,24 @@ __webpack_require__.r(__webpack_exports__);
1388 1393
       to: '/dashboards',
1389 1394
       component: 'home/Index'
1390 1395
     }]
1396
+  }, {
1397
+    label: 'Menu',
1398
+    items: [{
1399
+      label: 'Pengeluaran',
1400
+      icon: 'pi pi-wallet',
1401
+      to: '/expenses',
1402
+      component: 'expense/Index'
1403
+    }, {
1404
+      label: 'Jenis Member',
1405
+      icon: 'pi pi-id-card',
1406
+      to: '/type-members',
1407
+      component: 'typemember/Index'
1408
+    }, {
1409
+      label: 'Member',
1410
+      icon: 'pi pi-id-card',
1411
+      to: '/members',
1412
+      component: 'member/Index'
1413
+    }]
1391 1414
   }]
1392 1415
 });
1393 1416
 

+ 33
- 1
public/js/vue.js Zobrazit soubor

@@ -57659,6 +57659,38 @@ var map = {
57659 57659
 		"./resources/js/pages/home/Index.vue",
57660 57660
 		"resources_js_pages_home_Index_vue"
57661 57661
 	],
57662
+	"./member/Create": [
57663
+		"./resources/js/pages/member/Create.vue",
57664
+		"resources_js_pages_member_Create_vue"
57665
+	],
57666
+	"./member/Create.vue": [
57667
+		"./resources/js/pages/member/Create.vue",
57668
+		"resources_js_pages_member_Create_vue"
57669
+	],
57670
+	"./member/Edit": [
57671
+		"./resources/js/pages/member/Edit.vue",
57672
+		"resources_js_pages_member_Edit_vue"
57673
+	],
57674
+	"./member/Edit.vue": [
57675
+		"./resources/js/pages/member/Edit.vue",
57676
+		"resources_js_pages_member_Edit_vue"
57677
+	],
57678
+	"./member/Index": [
57679
+		"./resources/js/pages/member/Index.vue",
57680
+		"resources_js_pages_member_Index_vue"
57681
+	],
57682
+	"./member/Index.vue": [
57683
+		"./resources/js/pages/member/Index.vue",
57684
+		"resources_js_pages_member_Index_vue"
57685
+	],
57686
+	"./member/TableHeader": [
57687
+		"./resources/js/pages/member/TableHeader.js",
57688
+		"resources_js_pages_member_TableHeader_js"
57689
+	],
57690
+	"./member/TableHeader.js": [
57691
+		"./resources/js/pages/member/TableHeader.js",
57692
+		"resources_js_pages_member_TableHeader_js"
57693
+	],
57662 57694
 	"./typemember/Create": [
57663 57695
 		"./resources/js/pages/typemember/Create.vue",
57664 57696
 		"resources_js_pages_typemember_Create_vue"
@@ -57848,7 +57880,7 @@ module.exports = JSON.parse('{"name":"axios","version":"0.21.4","description":"P
57848 57880
 /******/ 		// This function allow to reference async chunks
57849 57881
 /******/ 		__webpack_require__.u = (chunkId) => {
57850 57882
 /******/ 			// return url for filenames based on template
57851
-/******/ 			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":"bfc05aeb74c8ce1f","resources_js_pages_expense_Index_vue":"7a309f6d0d26a727","resources_js_pages_expense_Show_vue":"789baa23c94364cd","resources_js_pages_expense_TableHeader_js":"eed3f0613f167cfd","resources_js_pages_home_Index_vue":"b14a4dbf22a954c7","resources_js_pages_typemember_Create_vue":"d826978506678e41","resources_js_pages_typemember_Edit_vue":"90ecf14e63ffd3c7","resources_js_pages_typemember_Index_vue":"cac37ec778c618a8","resources_js_pages_typemember_TableHeader_js":"8d2fb11e94b09b43","resources_js_pages_user_Create_vue":"fc5e95e89a96238a","resources_js_pages_user_Edit_vue":"af45e9f32617313e","resources_js_pages_user_Index_vue":"d159f071cd244236","resources_js_pages_user_Show_vue":"15c066cf5714885a","resources_js_pages_user_TableHeader_js":"0d87fd422fe40491"}[chunkId] + "";
57883
+/******/ 			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":"d3f715d838d15236","resources_js_pages_expense_Index_vue":"96e8d68371ce7d99","resources_js_pages_expense_Show_vue":"4b85cc3e6e442070","resources_js_pages_expense_TableHeader_js":"eed3f0613f167cfd","resources_js_pages_home_Index_vue":"8b3afe9151f60605","resources_js_pages_member_Create_vue":"c549bc2212a615c3","resources_js_pages_member_Edit_vue":"06c149d64ffc2793","resources_js_pages_member_Index_vue":"3d3ee415a9616cf1","resources_js_pages_member_TableHeader_js":"5148a502565e8023","resources_js_pages_typemember_Create_vue":"367262813dd38a32","resources_js_pages_typemember_Edit_vue":"7946208d9548e498","resources_js_pages_typemember_Index_vue":"34f670992e953910","resources_js_pages_typemember_TableHeader_js":"8d2fb11e94b09b43","resources_js_pages_user_Create_vue":"044835f5c4f7d9a1","resources_js_pages_user_Edit_vue":"c8c7d6749311d95f","resources_js_pages_user_Index_vue":"454ef4d9a4f8ba89","resources_js_pages_user_Show_vue":"906b6b7d596a3be8","resources_js_pages_user_TableHeader_js":"0d87fd422fe40491"}[chunkId] + "";
57852 57884
 /******/ 		};
57853 57885
 /******/ 	})();
57854 57886
 /******/ 	

+ 84
- 0
resources/js/pages/member/Create.vue Zobrazit soubor

@@ -0,0 +1,84 @@
1
+<script setup>
2
+import { computed, watch } from 'vue'
3
+import { Head, useForm, usePage } from '@inertiajs/inertia-vue3'
4
+import AppLayout from '@/layouts/AppLayout.vue'
5
+import AppDropdown from '@/components/AppDropdown.vue'
6
+import AppInputText from '@/components/AppInputText.vue'
7
+
8
+defineProps({
9
+  typeMembers: Array,
10
+})
11
+
12
+const errors = computed(() => usePage().props.value.errors)
13
+
14
+watch(errors, () => {
15
+  form.clearErrors()
16
+})
17
+
18
+const form = useForm({
19
+  name: null,
20
+  phone: null,
21
+  plat_number: null,
22
+  type_member_id: null,
23
+})
24
+
25
+const submit = () => {
26
+  form.post(route('members.store'), { onSuccess: () => form.reset() })
27
+}
28
+</script>
29
+
30
+<template>
31
+  <Head title="Tambah Member" />
32
+
33
+  <AppLayout>
34
+    <div class="grid">
35
+      <div class="col-12 md:col-8">
36
+        <Card>
37
+          <template #title> Tambah Member </template>
38
+          <template #content>
39
+            <div class="grid">
40
+              <div class="col-12 md:col-6">
41
+                <AppInputText v-model="form.name" label="Nama" placeholder="nama" :error="form.errors.name" />
42
+              </div>
43
+
44
+              <div class="col-12 md:col-6">
45
+                <AppInputText v-model="form.phone" label="Nomor HP" placeholder="nomor hp" :error="form.errors.phone" />
46
+              </div>
47
+
48
+              <div class="col-12 md:col-6">
49
+                <AppInputText
50
+                  v-model="form.plat_number"
51
+                  label="Plat Kendaraan"
52
+                  placeholder="plat kendaraan"
53
+                  :error="form.errors.plat_number"
54
+                />
55
+              </div>
56
+
57
+              <div class="col-12 md:col-6">
58
+                <AppDropdown
59
+                  label="Jenis member"
60
+                  placeholder="pilih satu"
61
+                  v-model="form.type_member_id"
62
+                  :options="typeMembers"
63
+                  :error="form.errors.type_member_id"
64
+                />
65
+              </div>
66
+            </div>
67
+          </template>
68
+
69
+          <template #footer>
70
+            <div class="flex flex-column md:flex-row justify-content-end">
71
+              <Button
72
+                label="Simpan"
73
+                icon="pi pi-check"
74
+                class="p-button-outlined"
75
+                :disabled="form.processing"
76
+                @click="submit"
77
+              />
78
+            </div>
79
+          </template>
80
+        </Card>
81
+      </div>
82
+    </div>
83
+  </AppLayout>
84
+</template>

+ 115
- 0
resources/js/pages/member/Edit.vue Zobrazit soubor

@@ -0,0 +1,115 @@
1
+<script setup>
2
+import { computed, watch, ref } from 'vue'
3
+import { Inertia } from '@inertiajs/inertia'
4
+import { Head, useForm, usePage } from '@inertiajs/inertia-vue3'
5
+import AppLayout from '@/layouts/AppLayout.vue'
6
+import AppDialog from '@/components/AppDialog.vue'
7
+import AppDropdown from '@/components/AppDropdown.vue'
8
+import AppInputText from '@/components/AppInputText.vue'
9
+
10
+const props = defineProps({
11
+  member: Object,
12
+  typeMembers: Array,
13
+})
14
+
15
+const errors = computed(() => usePage().props.value.errors)
16
+
17
+watch(errors, () => {
18
+  form.clearErrors()
19
+})
20
+
21
+const visibleDialog = ref(false)
22
+
23
+const confirmDialog = () => {
24
+  visibleDialog.value = true
25
+}
26
+
27
+const onAgree = () => Inertia.delete(route('users.destroy', props.member.id))
28
+
29
+const onCancel = () => (visibleDialog.value = false)
30
+
31
+const form = useForm({
32
+  name: props.member.name,
33
+  phone: props.member.phone,
34
+  plat_number: props.member.plat_number,
35
+  type_member_id: props.member.type_member_id,
36
+})
37
+
38
+const submit = () => {
39
+  form.put(route('members.update', props.member.id))
40
+}
41
+</script>
42
+
43
+<template>
44
+  <Head title="Ubah Member" />
45
+
46
+  <AppLayout>
47
+    <div class="grid">
48
+      <div class="col-12 md:col-8">
49
+        <Card>
50
+          <template #title> Ubah Member </template>
51
+          <template #content>
52
+            <div class="grid">
53
+              <div class="col-12 md:col-6">
54
+                <AppInputText v-model="form.name" label="Nama" placeholder="nama" :error="form.errors.name" />
55
+              </div>
56
+
57
+              <div class="col-12 md:col-6">
58
+                <AppInputText v-model="form.phone" label="Nomor HP" placeholder="nomor hp" :error="form.errors.phone" />
59
+              </div>
60
+
61
+              <div class="col-12 md:col-6">
62
+                <AppInputText
63
+                  v-model="form.plat_number"
64
+                  label="Plat Kendaraan"
65
+                  placeholder="plat kendaraan"
66
+                  :error="form.errors.plat_number"
67
+                />
68
+              </div>
69
+
70
+              <div class="col-12 md:col-6">
71
+                <AppDropdown
72
+                  label="Jenis member"
73
+                  placeholder="pilih satu"
74
+                  v-model="form.type_member_id"
75
+                  :options="typeMembers"
76
+                  :error="form.errors.type_member_id"
77
+                />
78
+              </div>
79
+            </div>
80
+          </template>
81
+
82
+          <template #footer>
83
+            <div class="grid">
84
+              <div class="col-12 md:col-6 flex flex-column md:flex-row justify-content-center md:justify-content-start">
85
+                <AppDialog
86
+                  message="Yakin akan menghapus data ini?"
87
+                  v-model:visible="visibleDialog"
88
+                  @agree="onAgree"
89
+                  @cancel="onCancel"
90
+                />
91
+
92
+                <Button
93
+                  label="Hapus"
94
+                  icon="pi pi-trash"
95
+                  class="p-button-outlined p-button-danger"
96
+                  @click="confirmDialog"
97
+                />
98
+              </div>
99
+
100
+              <div class="col-12 md:col-6 flex flex-column md:flex-row justify-content-center md:justify-content-end">
101
+                <Button
102
+                  label="Simpan"
103
+                  icon="pi pi-check"
104
+                  class="p-button-outlined"
105
+                  :disabled="form.processing"
106
+                  @click="submit"
107
+                />
108
+              </div>
109
+            </div>
110
+          </template>
111
+        </Card>
112
+      </div>
113
+    </div>
114
+  </AppLayout>
115
+</template>

+ 82
- 0
resources/js/pages/member/Index.vue Zobrazit soubor

@@ -0,0 +1,82 @@
1
+<script setup>
2
+import { watch } from 'vue'
3
+import { Inertia } from '@inertiajs/inertia'
4
+import { Head, useForm } from '@inertiajs/inertia-vue3'
5
+import throttle from 'lodash/throttle'
6
+import pickBy from 'lodash/pickBy'
7
+import AppButton from '@/components/AppButton.vue'
8
+import AppPagination from '@/components/AppPagination.vue'
9
+import AppLayout from '@/layouts/AppLayout.vue'
10
+
11
+import TableHeader from './TableHeader'
12
+
13
+const props = defineProps({
14
+  members: Object,
15
+  filters: Object,
16
+})
17
+
18
+const filterForm = useForm({
19
+  search: props.filters.search,
20
+})
21
+
22
+watch(
23
+  filterForm,
24
+  throttle(() => {
25
+    Inertia.get('/members', pickBy({ search: filterForm.search }), { preserveState: true })
26
+  }, 300)
27
+)
28
+</script>
29
+
30
+<template>
31
+  <Head title="Daftar Member" />
32
+
33
+  <AppLayout>
34
+    <DataTable
35
+      responsive-layout="scroll"
36
+      column-resize-mode="expand"
37
+      :value="members.data"
38
+      :row-hover="true"
39
+      :striped-rows="true"
40
+    >
41
+      <template #header>
42
+        <h1>Jenis Member</h1>
43
+
44
+        <div class="grid">
45
+          <div class="col-12 md:col-8">
46
+            <div class="flex align-items-center">
47
+              <InputText class="w-full md:w-27rem" placeholder="cari..." v-model="filterForm.search" />
48
+            </div>
49
+          </div>
50
+
51
+          <div class="col-12 md:col-4 flex flex-column md:flex-row justify-content-end">
52
+            <AppButton
53
+              label="Tambah Member"
54
+              class="p-button-outlined"
55
+              icon="pi pi-pencil"
56
+              :href="route('members.create')"
57
+            />
58
+          </div>
59
+        </div>
60
+      </template>
61
+
62
+      <Column
63
+        v-for="tableHeader in TableHeader"
64
+        :field="tableHeader.field"
65
+        :header="tableHeader.header"
66
+        :key="tableHeader.field"
67
+      />
68
+
69
+      <Column>
70
+        <template #body="{ data }">
71
+          <AppButton
72
+            icon="pi pi-angle-double-right"
73
+            class="p-button-text p-button-icon-only p-button-rounded p-button-text"
74
+            :href="route('members.edit', data.id)"
75
+          />
76
+        </template>
77
+      </Column>
78
+    </DataTable>
79
+
80
+    <AppPagination :links="members.links" />
81
+  </AppLayout>
82
+</template>

+ 8
- 0
resources/js/pages/member/TableHeader.js Zobrazit soubor

@@ -0,0 +1,8 @@
1
+export default [
2
+  { field: 'updatedAt', header: 'Diperbaharui' },
3
+  { field: 'name', header: 'Nama' },
4
+  { field: 'phone', header: 'Nomor HP' },
5
+  { field: 'platNumber', header: 'Plat Kendaraan' },
6
+  { field: 'type', header: 'Jenis Member' },
7
+  { field: 'price', header: 'Tarif Member' },
8
+]

+ 3
- 1
resources/js/pages/typemember/Create.vue Zobrazit soubor

@@ -1,6 +1,6 @@
1 1
 <script setup>
2 2
 import { computed, watch } from 'vue'
3
-import { useForm, usePage } from '@inertiajs/inertia-vue3'
3
+import { Head, useForm, usePage } from '@inertiajs/inertia-vue3'
4 4
 import AppLayout from '@/layouts/AppLayout.vue'
5 5
 import AppInputText from '@/components/AppInputText.vue'
6 6
 import AppInputNumber from '@/components/AppInputNumber.vue'
@@ -22,6 +22,8 @@ const submit = () => {
22 22
 </script>
23 23
 
24 24
 <template>
25
+  <Head title="Tambah Jenis Member" />
26
+
25 27
   <AppLayout>
26 28
     <div class="grid">
27 29
       <div class="col-12 md:col-8">

+ 4
- 2
resources/js/pages/typemember/Edit.vue Zobrazit soubor

@@ -1,6 +1,6 @@
1 1
 <script setup>
2 2
 import { computed, watch } from 'vue'
3
-import { useForm, usePage } from '@inertiajs/inertia-vue3'
3
+import { Head, useForm, usePage } from '@inertiajs/inertia-vue3'
4 4
 import AppLayout from '@/layouts/AppLayout.vue'
5 5
 import AppInputText from '@/components/AppInputText.vue'
6 6
 import AppInputNumber from '@/components/AppInputNumber.vue'
@@ -21,11 +21,13 @@ const form = useForm({
21 21
 })
22 22
 
23 23
 const submit = () => {
24
-  form.put(route('type-members.update', props.typeMember.id), { onSuccess: () => form.reset() })
24
+  form.put(route('type-members.update', props.typeMember.id))
25 25
 }
26 26
 </script>
27 27
 
28 28
 <template>
29
+  <Head title="Ubah Jenis Member" />
30
+
29 31
   <AppLayout>
30 32
     <div class="grid">
31 33
       <div class="col-12 md:col-8">

+ 3
- 0
resources/js/pages/typemember/Index.vue Zobrazit soubor

@@ -1,4 +1,5 @@
1 1
 <script setup>
2
+import { Head } from '@inertiajs/inertia-vue3'
2 3
 import AppButton from '@/components/AppButton.vue'
3 4
 import AppLayout from '@/layouts/AppLayout.vue'
4 5
 
@@ -10,6 +11,8 @@ defineProps({
10 11
 </script>
11 12
 
12 13
 <template>
14
+  <Head title="Daftar Jenis Member" />
15
+
13 16
   <AppLayout>
14 17
     <DataTable
15 18
       responsive-layout="scroll"

+ 15
- 15
resources/js/pages/user/Edit.vue Zobrazit soubor

@@ -13,16 +13,11 @@ const props = defineProps({
13 13
   roles: Array,
14 14
 })
15 15
 
16
-const form = useForm({
17
-  name: props.user.name,
18
-  phone: props.user.phone,
19
-  email: props.user.email,
20
-  role_id: props.user.role_id,
21
-})
16
+const errors = computed(() => usePage().props.value.errors)
22 17
 
23
-const submit = () => {
24
-  form.put(route('users.update', props.user.id))
25
-}
18
+watch(errors, () => {
19
+  form.clearErrors()
20
+})
26 21
 
27 22
 const visibleDialog = ref(false)
28 23
 
@@ -30,15 +25,20 @@ const confirmDialog = () => {
30 25
   visibleDialog.value = true
31 26
 }
32 27
 
33
-const onAgree = (id) => Inertia.delete(route('users.destroy', id))
28
+const onAgree = () => Inertia.delete(route('users.destroy', props.user.id))
34 29
 
35 30
 const onCancel = () => (visibleDialog.value = false)
36 31
 
37
-const errors = computed(() => usePage().props.value.errors)
38
-
39
-watch(errors, () => {
40
-  form.clearErrors()
32
+const form = useForm({
33
+  name: props.user.name,
34
+  phone: props.user.phone,
35
+  email: props.user.email,
36
+  role_id: props.user.role_id,
41 37
 })
38
+
39
+const submit = () => {
40
+  form.put(route('users.update', props.user.id))
41
+}
42 42
 </script>
43 43
 
44 44
 <template>
@@ -99,7 +99,7 @@ watch(errors, () => {
99 99
                 <AppDialog
100 100
                   message="Yakin akan menghapus data ini?"
101 101
                   v-model:visible="visibleDialog"
102
-                  @agree="onAgree(user.id)"
102
+                  @agree="onAgree"
103 103
                   @cancel="onCancel"
104 104
                 />
105 105
 

+ 9
- 0
resources/js/utils/menu.js Zobrazit soubor

@@ -22,6 +22,7 @@ export default {
22 22
       items: [
23 23
         { label: 'Pengeluaran', icon: 'pi pi-wallet', to: '/expenses', component: 'expense/Index' },
24 24
         { label: 'Jenis Member', icon: 'pi pi-id-card', to: '/type-members', component: 'typemember/Index' },
25
+        { label: 'Member', icon: 'pi pi-id-card', to: '/members', component: 'member/Index' },
25 26
       ],
26 27
     },
27 28
   ],
@@ -32,5 +33,13 @@ export default {
32 33
       label: 'Home',
33 34
       items: [{ label: 'Dashboard', icon: 'pi pi-home', to: '/dashboards', component: 'home/Index' }],
34 35
     },
36
+    {
37
+      label: 'Menu',
38
+      items: [
39
+        { label: 'Pengeluaran', icon: 'pi pi-wallet', to: '/expenses', component: 'expense/Index' },
40
+        { label: 'Jenis Member', icon: 'pi pi-id-card', to: '/type-members', component: 'typemember/Index' },
41
+        { label: 'Member', icon: 'pi pi-id-card', to: '/members', component: 'member/Index' },
42
+      ],
43
+    },
35 44
   ],
36 45
 }

+ 3
- 0
routes/web.php Zobrazit soubor

@@ -2,6 +2,7 @@
2 2
 
3 3
 use App\Http\Controllers\DashboardController;
4 4
 use App\Http\Controllers\ExpenseController;
5
+use App\Http\Controllers\MemberController;
5 6
 use App\Http\Controllers\TypeMemberController;
6 7
 use App\Http\Controllers\UserController;
7 8
 use Illuminate\Support\Facades\Route;
@@ -29,6 +30,8 @@ Route::middleware(['auth', 'verified'])->group(function () {
29 30
     Route::resource('/expenses', ExpenseController::class);
30 31
 
31 32
     Route::resource('/type-members', TypeMemberController::class);
33
+
34
+    Route::resource('/members', MemberController::class);
32 35
 });
33 36
 
34 37
 require __DIR__ . '/auth.php';