Browse Source

feat: type member

Muhammad Iqbal Afandi 4 years ago
parent
commit
9f1a939635
28 changed files with 5885 additions and 92 deletions
  1. 104
    0
      app/Http/Controllers/TypeMemberController.php
  2. 31
    0
      app/Http/Requests/TypeMember/StoreTypeMemberRequest.php
  3. 31
    0
      app/Http/Requests/TypeMember/UpdateTypeMemberRequest.php
  4. 23
    0
      app/Models/TypeMember.php
  5. 1
    1
      database/migrations/2022_04_20_031727_create_type_members_table.php
  6. 1
    1
      designs/diagrams/database.puml
  7. BIN
      designs/diagrams/database/Database.png
  8. 2
    12
      lang/id/messages.php
  9. 5
    8
      public/js/resources_js_pages_expense_Create_vue.js
  10. 5
    8
      public/js/resources_js_pages_expense_Index_vue.js
  11. 5
    8
      public/js/resources_js_pages_expense_Show_vue.js
  12. 5
    8
      public/js/resources_js_pages_home_Index_vue.js
  13. 1884
    0
      public/js/resources_js_pages_typemember_Create_vue.js
  14. 1889
    0
      public/js/resources_js_pages_typemember_Edit_vue.js
  15. 1607
    0
      public/js/resources_js_pages_typemember_Index_vue.js
  16. 27
    0
      public/js/resources_js_pages_typemember_TableHeader_js.js
  17. 9
    12
      public/js/resources_js_pages_user_Create_vue.js
  18. 5
    8
      public/js/resources_js_pages_user_Edit_vue.js
  19. 5
    8
      public/js/resources_js_pages_user_Index_vue.js
  20. 5
    8
      public/js/resources_js_pages_user_Show_vue.js
  21. 33
    1
      public/js/vue.js
  22. 67
    0
      resources/js/pages/typemember/Create.vue
  23. 71
    0
      resources/js/pages/typemember/Edit.vue
  24. 54
    0
      resources/js/pages/typemember/Index.vue
  25. 5
    0
      resources/js/pages/typemember/TableHeader.js
  26. 4
    4
      resources/js/pages/user/Create.vue
  27. 4
    5
      resources/js/utils/menu.js
  28. 3
    0
      routes/web.php

+ 104
- 0
app/Http/Controllers/TypeMemberController.php View File

@@ -0,0 +1,104 @@
1
+<?php
2
+
3
+namespace App\Http\Controllers;
4
+
5
+use App\Http\Requests\TypeMember\StoreTypeMemberRequest;
6
+use App\Http\Requests\TypeMember\UpdateTypeMemberRequest;
7
+use App\Models\TypeMember;
8
+use Illuminate\Http\Request;
9
+
10
+class TypeMemberController 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('typemember/Index', [
20
+            'typeMembers' => TypeMember::get()->transform(fn($typeMember) => [
21
+                'id' => $typeMember->id,
22
+                'updatedAt' => $typeMember->updated_at,
23
+                'type' => $typeMember->type,
24
+                'price' => $typeMember->price,
25
+            ]),
26
+        ]);
27
+    }
28
+
29
+    /**
30
+     * Show the form for creating a new resource.
31
+     *
32
+     * @return \Inertia\Response
33
+     */
34
+    public function create()
35
+    {
36
+        return inertia('typemember/Create');
37
+    }
38
+
39
+    /**
40
+     * Store a newly created resource in storage.
41
+     *
42
+     * @param  \Illuminate\Http\Request  $request
43
+     * @return \Illuminate\Http\Response
44
+     */
45
+    public function store(StoreTypeMemberRequest $request)
46
+    {
47
+        TypeMember::create($request->validated());
48
+
49
+        return back()->with('success', __('messages.success.store.type-member'));
50
+    }
51
+
52
+    /**
53
+     * Display the specified resource.
54
+     *
55
+     * @param  int  $id
56
+     * @return \Illuminate\Http\Response
57
+     */
58
+    public function show($id)
59
+    {
60
+        //
61
+    }
62
+
63
+    /**
64
+     * Show the form for editing the specified resource.
65
+     *
66
+     * @param  TypeMember  $typeMember
67
+     * @return \Inertia\Response
68
+     */
69
+    public function edit(TypeMember $typeMember)
70
+    {
71
+        return inertia('typemember/Edit', [
72
+            'typeMember' => [
73
+                'id' => $typeMember->id,
74
+                'type' => $typeMember->type,
75
+                'price' => $typeMember->getRawOriginal('price'),
76
+            ],
77
+        ]);
78
+    }
79
+
80
+    /**
81
+     * Update the specified resource in storage.
82
+     *
83
+     * @param  \Illuminate\Http\Request  $request
84
+     * @param  TypeMember  $typeMember
85
+     * @return \Illuminate\Http\Response
86
+     */
87
+    public function update(UpdateTypeMemberRequest $request, TypeMember $typeMember)
88
+    {
89
+        $typeMember->update($request->validated());
90
+
91
+        return back()->with('success', __('messages.success.update.type-member'));
92
+    }
93
+
94
+    /**
95
+     * Remove the specified resource from storage.
96
+     *
97
+     * @param  int  $id
98
+     * @return \Illuminate\Http\Response
99
+     */
100
+    public function destroy($id)
101
+    {
102
+        //
103
+    }
104
+}

+ 31
- 0
app/Http/Requests/TypeMember/StoreTypeMemberRequest.php View File

@@ -0,0 +1,31 @@
1
+<?php
2
+
3
+namespace App\Http\Requests\TypeMember;
4
+
5
+use Illuminate\Foundation\Http\FormRequest;
6
+
7
+class StoreTypeMemberRequest 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
+            'type' => 'required|string',
28
+            'price' => 'required|numeric',
29
+        ];
30
+    }
31
+}

+ 31
- 0
app/Http/Requests/TypeMember/UpdateTypeMemberRequest.php View File

@@ -0,0 +1,31 @@
1
+<?php
2
+
3
+namespace App\Http\Requests\TypeMember;
4
+
5
+use Illuminate\Foundation\Http\FormRequest;
6
+
7
+class UpdateTypeMemberRequest 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
+            'type' => 'required|string',
28
+            'price' => 'required|numeric',
29
+        ];
30
+    }
31
+}

+ 23
- 0
app/Models/TypeMember.php View File

@@ -2,10 +2,33 @@
2 2
 
3 3
 namespace App\Models;
4 4
 
5
+use App\Services\CurrencyFormatService;
6
+use Carbon\Carbon;
7
+use Illuminate\Database\Eloquent\Casts\Attribute;
5 8
 use Illuminate\Database\Eloquent\Factories\HasFactory;
6 9
 use Illuminate\Database\Eloquent\Model;
7 10
 
8 11
 class TypeMember extends Model
9 12
 {
10 13
     use HasFactory;
14
+
15
+    protected $fillable = [
16
+        'type',
17
+        'price',
18
+    ];
19
+
20
+    protected function updatedAt(): Attribute
21
+    {
22
+        return Attribute::make(
23
+            get:fn($value) => Carbon::parse($value)->translatedFormat('l d/m/Y')
24
+        );
25
+    }
26
+
27
+    protected function price(): Attribute
28
+    {
29
+        return Attribute::make(
30
+            get:fn($value) => (new CurrencyFormatService)->setRupiahFormat($value, true)
31
+        );
32
+    }
33
+
11 34
 }

+ 1
- 1
database/migrations/2022_04_20_031727_create_type_members_table.php View File

@@ -15,7 +15,7 @@ return new class extends Migration
15 15
     {
16 16
         Schema::create('type_members', function (Blueprint $table) {
17 17
             $table->id();
18
-            $table->string('name');
18
+            $table->string('type');
19 19
             $table->unsignedInteger('price');
20 20
             $table->timestamps();
21 21
         });

+ 1
- 1
designs/diagrams/database.puml View File

@@ -84,7 +84,7 @@ entity TopUp {
84 84
 entity TypeMember {
85 85
   * id
86 86
   __
87
-  * name
87
+  * type
88 88
   * price
89 89
 }
90 90
 

BIN
designs/diagrams/database/Database.png View File


+ 2
- 12
lang/id/messages.php View File

@@ -22,30 +22,20 @@ return [
22 22
             'verify_email' => 'Link verifikasi email berhasil terkirim',
23 23
         ],
24 24
         'store' => [
25
+            'type-member' => 'Jenis member berhasil ditambahkan',
25 26
             'discount' => 'Diskon berhasil diubah',
26 27
             'expense' => 'Pengeluaran berhasil ditambahkan',
27 28
             'transaction' => 'Transaksi berhasil ditambahkan',
28 29
             'user' => 'Akun user berhasil ditambahkan',
29
-            'customer' => 'Akun customer berhasil ditambahkan',
30
-            'outlet' => 'Data outlet berhasil ditambahkan',
31
-            'laundry' => 'Data laundry berhasil ditambahkan',
32
-            'product' => 'Data product berhasil ditambahkan',
33 30
         ],
34 31
         'update' => [
32
+            'type-member' => 'Jenis member berhasil diubah',
35 33
             'change-password' => 'Password berhasil diubah',
36 34
             'transaction_status' => 'Status transaksi berhasil diubah',
37 35
             'user' => 'Akun user berhasil diubah',
38
-            'customer' => 'Akun customer berhasil diubah',
39
-            'outlet' => 'Data outlet berhasil diubah',
40
-            'laundry' => 'Data laundry berhasil diubah',
41
-            'product' => 'Data product berhasil diubah',
42 36
         ],
43 37
         'destroy' => [
44 38
             'user' => 'Akun user berhasil dihapus',
45
-            'customer' => 'Akun customer berhasil dihapus',
46
-            'outlet' => 'Data outlet berhasil dihapus',
47
-            'laundry' => 'Data laundry berhasil dihapus',
48
-            'product' => 'Data product berhasil dihapus',
49 39
         ],
50 40
     ],
51 41
 

+ 5
- 8
public/js/resources_js_pages_expense_Create_vue.js View File

@@ -1362,14 +1362,6 @@ __webpack_require__.r(__webpack_exports__);
1362 1362
       to: '/dashboards',
1363 1363
       component: 'home/Index'
1364 1364
     }]
1365
-  }, {
1366
-    label: 'Menu',
1367
-    items: [{
1368
-      label: 'Pengeluaran',
1369
-      icon: 'pi pi-wallet',
1370
-      to: '/expenses',
1371
-      component: 'expense/Index'
1372
-    }]
1373 1365
   }, {
1374 1366
     label: 'Master',
1375 1367
     items: [{
@@ -1395,6 +1387,11 @@ __webpack_require__.r(__webpack_exports__);
1395 1387
       icon: 'pi pi-wallet',
1396 1388
       to: '/expenses',
1397 1389
       component: 'expense/Index'
1390
+    }, {
1391
+      label: 'Jenis Member',
1392
+      icon: 'pi pi-id-card',
1393
+      to: '/type-members',
1394
+      component: 'typemember/Index'
1398 1395
     }]
1399 1396
   }],
1400 1397
   // Operator

+ 5
- 8
public/js/resources_js_pages_expense_Index_vue.js View File

@@ -1304,14 +1304,6 @@ __webpack_require__.r(__webpack_exports__);
1304 1304
       to: '/dashboards',
1305 1305
       component: 'home/Index'
1306 1306
     }]
1307
-  }, {
1308
-    label: 'Menu',
1309
-    items: [{
1310
-      label: 'Pengeluaran',
1311
-      icon: 'pi pi-wallet',
1312
-      to: '/expenses',
1313
-      component: 'expense/Index'
1314
-    }]
1315 1307
   }, {
1316 1308
     label: 'Master',
1317 1309
     items: [{
@@ -1337,6 +1329,11 @@ __webpack_require__.r(__webpack_exports__);
1337 1329
       icon: 'pi pi-wallet',
1338 1330
       to: '/expenses',
1339 1331
       component: 'expense/Index'
1332
+    }, {
1333
+      label: 'Jenis Member',
1334
+      icon: 'pi pi-id-card',
1335
+      to: '/type-members',
1336
+      component: 'typemember/Index'
1340 1337
     }]
1341 1338
   }],
1342 1339
   // Operator

+ 5
- 8
public/js/resources_js_pages_expense_Show_vue.js View File

@@ -1028,14 +1028,6 @@ __webpack_require__.r(__webpack_exports__);
1028 1028
       to: '/dashboards',
1029 1029
       component: 'home/Index'
1030 1030
     }]
1031
-  }, {
1032
-    label: 'Menu',
1033
-    items: [{
1034
-      label: 'Pengeluaran',
1035
-      icon: 'pi pi-wallet',
1036
-      to: '/expenses',
1037
-      component: 'expense/Index'
1038
-    }]
1039 1031
   }, {
1040 1032
     label: 'Master',
1041 1033
     items: [{
@@ -1061,6 +1053,11 @@ __webpack_require__.r(__webpack_exports__);
1061 1053
       icon: 'pi pi-wallet',
1062 1054
       to: '/expenses',
1063 1055
       component: 'expense/Index'
1056
+    }, {
1057
+      label: 'Jenis Member',
1058
+      icon: 'pi pi-id-card',
1059
+      to: '/type-members',
1060
+      component: 'typemember/Index'
1064 1061
     }]
1065 1062
   }],
1066 1063
   // Operator

+ 5
- 8
public/js/resources_js_pages_home_Index_vue.js View File

@@ -901,14 +901,6 @@ __webpack_require__.r(__webpack_exports__);
901 901
       to: '/dashboards',
902 902
       component: 'home/Index'
903 903
     }]
904
-  }, {
905
-    label: 'Menu',
906
-    items: [{
907
-      label: 'Pengeluaran',
908
-      icon: 'pi pi-wallet',
909
-      to: '/expenses',
910
-      component: 'expense/Index'
911
-    }]
912 904
   }, {
913 905
     label: 'Master',
914 906
     items: [{
@@ -934,6 +926,11 @@ __webpack_require__.r(__webpack_exports__);
934 926
       icon: 'pi pi-wallet',
935 927
       to: '/expenses',
936 928
       component: 'expense/Index'
929
+    }, {
930
+      label: 'Jenis Member',
931
+      icon: 'pi pi-id-card',
932
+      to: '/type-members',
933
+      component: 'typemember/Index'
937 934
     }]
938 935
   }],
939 936
   // Operator

+ 1884
- 0
public/js/resources_js_pages_typemember_Create_vue.js
File diff suppressed because it is too large
View File


+ 1889
- 0
public/js/resources_js_pages_typemember_Edit_vue.js
File diff suppressed because it is too large
View File


+ 1607
- 0
public/js/resources_js_pages_typemember_Index_vue.js
File diff suppressed because it is too large
View File


+ 27
- 0
public/js/resources_js_pages_typemember_TableHeader_js.js View File

@@ -0,0 +1,27 @@
1
+"use strict";
2
+(self["webpackChunk"] = self["webpackChunk"] || []).push([["resources_js_pages_typemember_TableHeader_js"],{
3
+
4
+/***/ "./resources/js/pages/typemember/TableHeader.js":
5
+/*!******************************************************!*\
6
+  !*** ./resources/js/pages/typemember/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: 'type',
19
+  header: 'Jenis Member'
20
+}, {
21
+  field: 'price',
22
+  header: 'Tarif Member'
23
+}]);
24
+
25
+/***/ })
26
+
27
+}]);

+ 9
- 12
public/js/resources_js_pages_user_Create_vue.js View File

@@ -524,10 +524,10 @@ __webpack_require__.r(__webpack_exports__);
524 524
       form.clearErrors();
525 525
     });
526 526
     var form = (0,_inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_1__.useForm)({
527
-      name: '',
528
-      phone: '',
529
-      email: '',
530
-      role_id: ''
527
+      name: null,
528
+      phone: null,
529
+      email: null,
530
+      role_id: null
531 531
     });
532 532
 
533 533
     var submit = function submit() {
@@ -1327,14 +1327,6 @@ __webpack_require__.r(__webpack_exports__);
1327 1327
       to: '/dashboards',
1328 1328
       component: 'home/Index'
1329 1329
     }]
1330
-  }, {
1331
-    label: 'Menu',
1332
-    items: [{
1333
-      label: 'Pengeluaran',
1334
-      icon: 'pi pi-wallet',
1335
-      to: '/expenses',
1336
-      component: 'expense/Index'
1337
-    }]
1338 1330
   }, {
1339 1331
     label: 'Master',
1340 1332
     items: [{
@@ -1360,6 +1352,11 @@ __webpack_require__.r(__webpack_exports__);
1360 1352
       icon: 'pi pi-wallet',
1361 1353
       to: '/expenses',
1362 1354
       component: 'expense/Index'
1355
+    }, {
1356
+      label: 'Jenis Member',
1357
+      icon: 'pi pi-id-card',
1358
+      to: '/type-members',
1359
+      component: 'typemember/Index'
1363 1360
     }]
1364 1361
   }],
1365 1362
   // Operator

+ 5
- 8
public/js/resources_js_pages_user_Edit_vue.js View File

@@ -1619,14 +1619,6 @@ __webpack_require__.r(__webpack_exports__);
1619 1619
       to: '/dashboards',
1620 1620
       component: 'home/Index'
1621 1621
     }]
1622
-  }, {
1623
-    label: 'Menu',
1624
-    items: [{
1625
-      label: 'Pengeluaran',
1626
-      icon: 'pi pi-wallet',
1627
-      to: '/expenses',
1628
-      component: 'expense/Index'
1629
-    }]
1630 1622
   }, {
1631 1623
     label: 'Master',
1632 1624
     items: [{
@@ -1652,6 +1644,11 @@ __webpack_require__.r(__webpack_exports__);
1652 1644
       icon: 'pi pi-wallet',
1653 1645
       to: '/expenses',
1654 1646
       component: 'expense/Index'
1647
+    }, {
1648
+      label: 'Jenis Member',
1649
+      icon: 'pi pi-id-card',
1650
+      to: '/type-members',
1651
+      component: 'typemember/Index'
1655 1652
     }]
1656 1653
   }],
1657 1654
   // Operator

+ 5
- 8
public/js/resources_js_pages_user_Index_vue.js View File

@@ -1263,14 +1263,6 @@ __webpack_require__.r(__webpack_exports__);
1263 1263
       to: '/dashboards',
1264 1264
       component: 'home/Index'
1265 1265
     }]
1266
-  }, {
1267
-    label: 'Menu',
1268
-    items: [{
1269
-      label: 'Pengeluaran',
1270
-      icon: 'pi pi-wallet',
1271
-      to: '/expenses',
1272
-      component: 'expense/Index'
1273
-    }]
1274 1266
   }, {
1275 1267
     label: 'Master',
1276 1268
     items: [{
@@ -1296,6 +1288,11 @@ __webpack_require__.r(__webpack_exports__);
1296 1288
       icon: 'pi pi-wallet',
1297 1289
       to: '/expenses',
1298 1290
       component: 'expense/Index'
1291
+    }, {
1292
+      label: 'Jenis Member',
1293
+      icon: 'pi pi-id-card',
1294
+      to: '/type-members',
1295
+      component: 'typemember/Index'
1299 1296
     }]
1300 1297
   }],
1301 1298
   // Operator

+ 5
- 8
public/js/resources_js_pages_user_Show_vue.js View File

@@ -1347,14 +1347,6 @@ __webpack_require__.r(__webpack_exports__);
1347 1347
       to: '/dashboards',
1348 1348
       component: 'home/Index'
1349 1349
     }]
1350
-  }, {
1351
-    label: 'Menu',
1352
-    items: [{
1353
-      label: 'Pengeluaran',
1354
-      icon: 'pi pi-wallet',
1355
-      to: '/expenses',
1356
-      component: 'expense/Index'
1357
-    }]
1358 1350
   }, {
1359 1351
     label: 'Master',
1360 1352
     items: [{
@@ -1380,6 +1372,11 @@ __webpack_require__.r(__webpack_exports__);
1380 1372
       icon: 'pi pi-wallet',
1381 1373
       to: '/expenses',
1382 1374
       component: 'expense/Index'
1375
+    }, {
1376
+      label: 'Jenis Member',
1377
+      icon: 'pi pi-id-card',
1378
+      to: '/type-members',
1379
+      component: 'typemember/Index'
1383 1380
     }]
1384 1381
   }],
1385 1382
   // Operator

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

@@ -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
+	"./typemember/Create": [
57663
+		"./resources/js/pages/typemember/Create.vue",
57664
+		"resources_js_pages_typemember_Create_vue"
57665
+	],
57666
+	"./typemember/Create.vue": [
57667
+		"./resources/js/pages/typemember/Create.vue",
57668
+		"resources_js_pages_typemember_Create_vue"
57669
+	],
57670
+	"./typemember/Edit": [
57671
+		"./resources/js/pages/typemember/Edit.vue",
57672
+		"resources_js_pages_typemember_Edit_vue"
57673
+	],
57674
+	"./typemember/Edit.vue": [
57675
+		"./resources/js/pages/typemember/Edit.vue",
57676
+		"resources_js_pages_typemember_Edit_vue"
57677
+	],
57678
+	"./typemember/Index": [
57679
+		"./resources/js/pages/typemember/Index.vue",
57680
+		"resources_js_pages_typemember_Index_vue"
57681
+	],
57682
+	"./typemember/Index.vue": [
57683
+		"./resources/js/pages/typemember/Index.vue",
57684
+		"resources_js_pages_typemember_Index_vue"
57685
+	],
57686
+	"./typemember/TableHeader": [
57687
+		"./resources/js/pages/typemember/TableHeader.js",
57688
+		"resources_js_pages_typemember_TableHeader_js"
57689
+	],
57690
+	"./typemember/TableHeader.js": [
57691
+		"./resources/js/pages/typemember/TableHeader.js",
57692
+		"resources_js_pages_typemember_TableHeader_js"
57693
+	],
57662 57694
 	"./user/Create": [
57663 57695
 		"./resources/js/pages/user/Create.vue",
57664 57696
 		"resources_js_pages_user_Create_vue"
@@ -57816,7 +57848,7 @@ module.exports = JSON.parse('{"name":"axios","version":"0.21.4","description":"P
57816 57848
 /******/ 		// This function allow to reference async chunks
57817 57849
 /******/ 		__webpack_require__.u = (chunkId) => {
57818 57850
 /******/ 			// return url for filenames based on template
57819
-/******/ 			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":"03698a8fc0a00db8","resources_js_pages_expense_Index_vue":"3c1bfc495309cf77","resources_js_pages_expense_Show_vue":"68d19153681b3e33","resources_js_pages_expense_TableHeader_js":"eed3f0613f167cfd","resources_js_pages_home_Index_vue":"1a4bd9f2687cb4ae","resources_js_pages_user_Create_vue":"23843882c1f595ab","resources_js_pages_user_Edit_vue":"1418ba2da9528095","resources_js_pages_user_Index_vue":"3f2d10986a4fe5ae","resources_js_pages_user_Show_vue":"678accea5657b8b1","resources_js_pages_user_TableHeader_js":"0d87fd422fe40491"}[chunkId] + "";
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] + "";
57820 57852
 /******/ 		};
57821 57853
 /******/ 	})();
57822 57854
 /******/ 	

+ 67
- 0
resources/js/pages/typemember/Create.vue View File

@@ -0,0 +1,67 @@
1
+<script setup>
2
+import { computed, watch } from 'vue'
3
+import { useForm, usePage } from '@inertiajs/inertia-vue3'
4
+import AppLayout from '@/layouts/AppLayout.vue'
5
+import AppInputText from '@/components/AppInputText.vue'
6
+import AppInputNumber from '@/components/AppInputNumber.vue'
7
+
8
+const errors = computed(() => usePage().props.value.errors)
9
+
10
+watch(errors, () => {
11
+  form.clearErrors()
12
+})
13
+
14
+const form = useForm({
15
+  type: null,
16
+  price: null,
17
+})
18
+
19
+const submit = () => {
20
+  form.post(route('type-members.store'), { onSuccess: () => form.reset() })
21
+}
22
+</script>
23
+
24
+<template>
25
+  <AppLayout>
26
+    <div class="grid">
27
+      <div class="col-12 md:col-8">
28
+        <Card>
29
+          <template #title> Tambah Jenis Member </template>
30
+          <template #content>
31
+            <div class="grid">
32
+              <div class="col-12 md:col-6">
33
+                <AppInputText
34
+                  v-model="form.type"
35
+                  label="Jenis Member"
36
+                  placeholder="jenis member"
37
+                  :error="form.errors.type"
38
+                />
39
+              </div>
40
+
41
+              <div class="col-12 md:col-6">
42
+                <AppInputNumber
43
+                  v-model="form.price"
44
+                  label="Tarif Member"
45
+                  placeholder="tarif member"
46
+                  :error="form.errors.price"
47
+                />
48
+              </div>
49
+            </div>
50
+          </template>
51
+
52
+          <template #footer>
53
+            <div class="flex flex-column md:flex-row justify-content-end">
54
+              <Button
55
+                label="Simpan"
56
+                icon="pi pi-check"
57
+                class="p-button-outlined"
58
+                :disabled="form.processing"
59
+                @click="submit"
60
+              />
61
+            </div>
62
+          </template>
63
+        </Card>
64
+      </div>
65
+    </div>
66
+  </AppLayout>
67
+</template>

+ 71
- 0
resources/js/pages/typemember/Edit.vue View File

@@ -0,0 +1,71 @@
1
+<script setup>
2
+import { computed, watch } from 'vue'
3
+import { useForm, usePage } from '@inertiajs/inertia-vue3'
4
+import AppLayout from '@/layouts/AppLayout.vue'
5
+import AppInputText from '@/components/AppInputText.vue'
6
+import AppInputNumber from '@/components/AppInputNumber.vue'
7
+
8
+const props = defineProps({
9
+  typeMember: Object,
10
+})
11
+
12
+const errors = computed(() => usePage().props.value.errors)
13
+
14
+watch(errors, () => {
15
+  form.clearErrors()
16
+})
17
+
18
+const form = useForm({
19
+  type: props.typeMember.type,
20
+  price: props.typeMember.price,
21
+})
22
+
23
+const submit = () => {
24
+  form.put(route('type-members.update', props.typeMember.id), { onSuccess: () => form.reset() })
25
+}
26
+</script>
27
+
28
+<template>
29
+  <AppLayout>
30
+    <div class="grid">
31
+      <div class="col-12 md:col-8">
32
+        <Card>
33
+          <template #title> Ubah Jenis Member </template>
34
+          <template #content>
35
+            <div class="grid">
36
+              <div class="col-12 md:col-6">
37
+                <AppInputText
38
+                  v-model="form.type"
39
+                  label="Jenis Member"
40
+                  placeholder="jenis member"
41
+                  :error="form.errors.type"
42
+                />
43
+              </div>
44
+
45
+              <div class="col-12 md:col-6">
46
+                <AppInputNumber
47
+                  v-model="form.price"
48
+                  label="Tarif Member"
49
+                  placeholder="tarif member"
50
+                  :error="form.errors.price"
51
+                />
52
+              </div>
53
+            </div>
54
+          </template>
55
+
56
+          <template #footer>
57
+            <div class="flex flex-column md:flex-row justify-content-end">
58
+              <Button
59
+                label="Simpan"
60
+                icon="pi pi-check"
61
+                class="p-button-outlined"
62
+                :disabled="form.processing"
63
+                @click="submit"
64
+              />
65
+            </div>
66
+          </template>
67
+        </Card>
68
+      </div>
69
+    </div>
70
+  </AppLayout>
71
+</template>

+ 54
- 0
resources/js/pages/typemember/Index.vue View File

@@ -0,0 +1,54 @@
1
+<script setup>
2
+import AppButton from '@/components/AppButton.vue'
3
+import AppLayout from '@/layouts/AppLayout.vue'
4
+
5
+import TableHeader from './TableHeader'
6
+
7
+defineProps({
8
+  typeMembers: Object,
9
+})
10
+</script>
11
+
12
+<template>
13
+  <AppLayout>
14
+    <DataTable
15
+      responsive-layout="scroll"
16
+      column-resize-mode="expand"
17
+      :value="typeMembers"
18
+      :row-hover="true"
19
+      :striped-rows="true"
20
+    >
21
+      <template #header>
22
+        <h1>Jenis Member</h1>
23
+
24
+        <div class="grid">
25
+          <div class="col-12 flex flex-column md:flex-row justify-content-end">
26
+            <AppButton
27
+              label="Tambah Jenis Member"
28
+              class="p-button-outlined"
29
+              icon="pi pi-pencil"
30
+              :href="route('type-members.create')"
31
+            />
32
+          </div>
33
+        </div>
34
+      </template>
35
+
36
+      <Column
37
+        v-for="tableHeader in TableHeader"
38
+        :field="tableHeader.field"
39
+        :header="tableHeader.header"
40
+        :key="tableHeader.field"
41
+      />
42
+
43
+      <Column>
44
+        <template #body="{ data }">
45
+          <AppButton
46
+            icon="pi pi-angle-double-right"
47
+            class="p-button-text p-button-icon-only p-button-rounded p-button-text"
48
+            :href="route('type-members.edit', data.id)"
49
+          />
50
+        </template>
51
+      </Column>
52
+    </DataTable>
53
+  </AppLayout>
54
+</template>

+ 5
- 0
resources/js/pages/typemember/TableHeader.js View File

@@ -0,0 +1,5 @@
1
+export default [
2
+  { field: 'updatedAt', header: 'Diperbaharui' },
3
+  { field: 'type', header: 'Jenis Member' },
4
+  { field: 'price', header: 'Tarif Member' },
5
+]

+ 4
- 4
resources/js/pages/user/Create.vue View File

@@ -16,10 +16,10 @@ watch(errors, () => {
16 16
 })
17 17
 
18 18
 const form = useForm({
19
-  name: '',
20
-  phone: '',
21
-  email: '',
22
-  role_id: '',
19
+  name: null,
20
+  phone: null,
21
+  email: null,
22
+  role_id: null,
23 23
 })
24 24
 
25 25
 const submit = () => {

+ 4
- 5
resources/js/utils/menu.js View File

@@ -5,10 +5,6 @@ export default {
5 5
       label: 'Home',
6 6
       items: [{ label: 'Dashboard', icon: 'pi pi-home', to: '/dashboards', component: 'home/Index' }],
7 7
     },
8
-    {
9
-      label: 'Menu',
10
-      items: [{ label: 'Pengeluaran', icon: 'pi pi-wallet', to: '/expenses', component: 'expense/Index' }],
11
-    },
12 8
     {
13 9
       label: 'Master',
14 10
       items: [{ label: 'User', icon: 'pi pi-user', to: '/users', component: 'user/Index' }],
@@ -23,7 +19,10 @@ export default {
23 19
     },
24 20
     {
25 21
       label: 'Menu',
26
-      items: [{ label: 'Pengeluaran', icon: 'pi pi-wallet', to: '/expenses', component: 'expense/Index' }],
22
+      items: [
23
+        { label: 'Pengeluaran', icon: 'pi pi-wallet', to: '/expenses', component: 'expense/Index' },
24
+        { label: 'Jenis Member', icon: 'pi pi-id-card', to: '/type-members', component: 'typemember/Index' },
25
+      ],
27 26
     },
28 27
   ],
29 28
 

+ 3
- 0
routes/web.php View File

@@ -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\TypeMemberController;
5 6
 use App\Http\Controllers\UserController;
6 7
 use Illuminate\Support\Facades\Route;
7 8
 
@@ -26,6 +27,8 @@ Route::middleware(['auth', 'verified'])->group(function () {
26 27
     Route::resource('/users', UserController::class);
27 28
 
28 29
     Route::resource('/expenses', ExpenseController::class);
30
+
31
+    Route::resource('/type-members', TypeMemberController::class);
29 32
 });
30 33
 
31 34
 require __DIR__ . '/auth.php';