瀏覽代碼

feat: master type vehicle

Muhammad Iqbal Afandi 3 年之前
父節點
當前提交
0c8701a190
共有 33 個檔案被更改,包括 5834 行新增7 行删除
  1. 106
    0
      app/Http/Controllers/TypeVehicleController.php
  2. 30
    0
      app/Http/Requests/TypeVehicle/StoreTypeVehicleRequest.php
  3. 30
    0
      app/Http/Requests/TypeVehicle/UpdateTypeVehicleRequest.php
  4. 9
    0
      app/Models/TypeVehicle.php
  5. 3
    0
      lang/en/messages.php
  6. 3
    0
      lang/id/messages.php
  7. 5
    0
      public/js/resources_js_pages_expense_Create_vue.js
  8. 5
    0
      public/js/resources_js_pages_expense_Index_vue.js
  9. 5
    0
      public/js/resources_js_pages_expense_Show_vue.js
  10. 5
    0
      public/js/resources_js_pages_home_Index_vue.js
  11. 5
    0
      public/js/resources_js_pages_member_Create_vue.js
  12. 5
    0
      public/js/resources_js_pages_member_Edit_vue.js
  13. 5
    0
      public/js/resources_js_pages_member_Index_vue.js
  14. 5
    0
      public/js/resources_js_pages_topup_Create_vue.js
  15. 5
    0
      public/js/resources_js_pages_topup_Index_vue.js
  16. 5
    0
      public/js/resources_js_pages_typemember_Create_vue.js
  17. 5
    0
      public/js/resources_js_pages_typemember_Edit_vue.js
  18. 5
    0
      public/js/resources_js_pages_typemember_Index_vue.js
  19. 1641
    0
      public/js/resources_js_pages_typevehicle_Create_vue.js
  20. 1868
    0
      public/js/resources_js_pages_typevehicle_Edit_vue.js
  21. 1782
    0
      public/js/resources_js_pages_typevehicle_Index_vue.js
  22. 24
    0
      public/js/resources_js_pages_typevehicle_TableHeader_js.js
  23. 5
    0
      public/js/resources_js_pages_user_Create_vue.js
  24. 5
    0
      public/js/resources_js_pages_user_Edit_vue.js
  25. 5
    0
      public/js/resources_js_pages_user_Index_vue.js
  26. 5
    0
      public/js/resources_js_pages_user_Show_vue.js
  27. 33
    1
      public/js/vue.js
  28. 57
    0
      resources/js/pages/typevehicle/Create.vue
  29. 92
    0
      resources/js/pages/typevehicle/Edit.vue
  30. 60
    0
      resources/js/pages/typevehicle/Index.vue
  31. 4
    0
      resources/js/pages/typevehicle/TableHeader.js
  32. 4
    1
      resources/js/utils/menu.js
  33. 8
    5
      routes/web.php

+ 106
- 0
app/Http/Controllers/TypeVehicleController.php 查看文件

@@ -0,0 +1,106 @@
1
+<?php
2
+
3
+namespace App\Http\Controllers;
4
+
5
+use App\Http\Requests\TypeVehicle\StoreTypeVehicleRequest;
6
+use App\Http\Requests\TypeVehicle\UpdateTypeVehicleRequest;
7
+use App\Models\TypeVehicle;
8
+
9
+class TypeVehicleController extends Controller
10
+{
11
+    /**
12
+     * Display a listing of the resource.
13
+     *
14
+     * @return \Inertia\Response
15
+     */
16
+    public function index()
17
+    {
18
+        return inertia('typevehicle/Index', [
19
+            'typeVehicles' => TypeVehicle::latest()
20
+                ->paginate(10)
21
+                ->withQueryString()
22
+                ->through(fn($typeVehicle) => [
23
+                    'id' => $typeVehicle->id,
24
+                    'updatedAt' => $typeVehicle->updated_at,
25
+                    'type' => $typeVehicle->type,
26
+                ]),
27
+        ]);
28
+    }
29
+
30
+    /**
31
+     * Show the form for creating a new resource.
32
+     *
33
+     * @return \Inertia\Response
34
+     */
35
+    public function create()
36
+    {
37
+        return inertia('typevehicle/Create');
38
+    }
39
+
40
+    /**
41
+     * Store a newly created resource in storage.
42
+     *
43
+     * @param  \Illuminate\Http\Request  $request
44
+     * @return \Illuminate\Http\Response
45
+     */
46
+    public function store(StoreTypeVehicleRequest $request)
47
+    {
48
+        TypeVehicle::create($request->validated());
49
+
50
+        return back()->with('success', __('messages.success.store.type_vehicle'));
51
+    }
52
+
53
+    /**
54
+     * Display the specified resource.
55
+     *
56
+     * @param  int  $id
57
+     * @return \Illuminate\Http\Response
58
+     */
59
+    public function show($id)
60
+    {
61
+        //
62
+    }
63
+
64
+    /**
65
+     * Show the form for editing the specified resource.
66
+     *
67
+     * @param  TypeVehicle  $typeVehicle
68
+     * @return \Inertia\Response
69
+     */
70
+    public function edit(TypeVehicle $typeVehicle)
71
+    {
72
+        return inertia('typevehicle/Edit', [
73
+            'typeVehicle' => [
74
+                'id' => $typeVehicle->id,
75
+                'type' => $typeVehicle->type,
76
+            ],
77
+        ]);
78
+    }
79
+
80
+    /**
81
+     * Update the specified resource in storage.
82
+     *
83
+     * @param  \Illuminate\Http\Request  $request
84
+     * @param  TypeVehicle  $typeVehicle
85
+     * @return \Illuminate\Http\Response
86
+     */
87
+    public function update(UpdateTypeVehicleRequest $request, TypeVehicle $typeVehicle)
88
+    {
89
+        $typeVehicle->update($request->validated());
90
+
91
+        return back()->with('success', __('messages.success.update.type_vehicle'));
92
+    }
93
+
94
+    /**
95
+     * Remove the specified resource from storage.
96
+     *
97
+     * @param  TypeVehicle  $typeVehicle
98
+     * @return \Illuminate\Http\Response
99
+     */
100
+    public function destroy(TypeVehicle $typeVehicle)
101
+    {
102
+        $typeVehicle->delete();
103
+
104
+        return to_route('type-vehicles.index')->with('success', __('messages.success.destroy.type_vehicle'));
105
+    }
106
+}

+ 30
- 0
app/Http/Requests/TypeVehicle/StoreTypeVehicleRequest.php 查看文件

@@ -0,0 +1,30 @@
1
+<?php
2
+
3
+namespace App\Http\Requests\TypeVehicle;
4
+
5
+use Illuminate\Foundation\Http\FormRequest;
6
+
7
+class StoreTypeVehicleRequest 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|max:25',
28
+        ];
29
+    }
30
+}

+ 30
- 0
app/Http/Requests/TypeVehicle/UpdateTypeVehicleRequest.php 查看文件

@@ -0,0 +1,30 @@
1
+<?php
2
+
3
+namespace App\Http\Requests\TypeVehicle;
4
+
5
+use Illuminate\Foundation\Http\FormRequest;
6
+
7
+class UpdateTypeVehicleRequest 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|max:25',
28
+        ];
29
+    }
30
+}

+ 9
- 0
app/Models/TypeVehicle.php 查看文件

@@ -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
 
@@ -12,4 +14,11 @@ class TypeVehicle extends Model
12 14
     protected $fillable = [
13 15
         'type',
14 16
     ];
17
+
18
+    protected function updatedAt(): Attribute
19
+    {
20
+        return Attribute::make(
21
+            get:fn($value) => Carbon::parse($value)->translatedFormat('l d/m/Y')
22
+        );
23
+    }
15 24
 }

+ 3
- 0
lang/en/messages.php 查看文件

@@ -22,6 +22,7 @@ return [
22 22
             'verify_email' => 'Email Verification link successfully sent',
23 23
         ],
24 24
         'store' => [
25
+            'type_vehicle' => 'Type vehicle successfully added',
25 26
             'top_up' => 'Top Up successfully',
26 27
             'member' => 'Member successfully added',
27 28
             'type_member' => 'Jenis member successfully added',
@@ -31,6 +32,7 @@ return [
31 32
             'user' => 'User Account successfully added',
32 33
         ],
33 34
         'update' => [
35
+            'type_vehicle' => 'Type vehicle successfully changed',
34 36
             'top_up' => 'Top Up successfully changed',
35 37
             'member' => 'Member successfully changed',
36 38
             'type_member' => 'Jenis member successfully changed',
@@ -39,6 +41,7 @@ return [
39 41
             'user' => 'User Account successfully changed',
40 42
         ],
41 43
         'destroy' => [
44
+            'type_vehicle' => 'Type vehicle successfully deleted',
42 45
             'top_up' => 'Top Up successfully deleted',
43 46
             'member' => 'Member Account successfully deleted',
44 47
             'user' => 'User Account successfully deleted',

+ 3
- 0
lang/id/messages.php 查看文件

@@ -22,6 +22,7 @@ return [
22 22
             'verify_email' => 'Link verifikasi email berhasil terkirim',
23 23
         ],
24 24
         'store' => [
25
+            'type_vehicle' => 'Jenis kendaraan berhasil ditambahkan',
25 26
             'top_up' => 'Top Up berhasil',
26 27
             'member' => 'Member berhasil ditambahkan',
27 28
             'type_member' => 'Jenis member berhasil ditambahkan',
@@ -31,6 +32,7 @@ return [
31 32
             'user' => 'Akun user berhasil ditambahkan',
32 33
         ],
33 34
         'update' => [
35
+            'type_vehicle' => 'Jenis kendaraan berhasil diubah',
34 36
             'top_up' => 'Top Up berhasil diubah',
35 37
             'member' => 'Member berhasil diubah',
36 38
             'type_member' => 'Jenis member berhasil diubah',
@@ -39,6 +41,7 @@ return [
39 41
             'user' => 'Akun user berhasil diubah',
40 42
         ],
41 43
         'destroy' => [
44
+            'type_vehicle' => 'Jenis kendaraan berhasil dihapus',
42 45
             'top_up' => 'Top Up berhasil dihapus',
43 46
             'member' => 'Akun member berhasil dihapus',
44 47
             'user' => 'Akun user berhasil dihapus',

+ 5
- 0
public/js/resources_js_pages_expense_Create_vue.js 查看文件

@@ -1395,6 +1395,11 @@ __webpack_require__.r(__webpack_exports__);
1395 1395
       icon: 'pi pi-id-card',
1396 1396
       to: '/type-members',
1397 1397
       component: 'typemember/Index'
1398
+    }, {
1399
+      label: 'Jenis Kendaraan',
1400
+      icon: 'pi pi-car',
1401
+      to: '/type-vehicles',
1402
+      component: 'typevehicle/Index'
1398 1403
     }]
1399 1404
   }],
1400 1405
   // Operator

+ 5
- 0
public/js/resources_js_pages_expense_Index_vue.js 查看文件

@@ -1337,6 +1337,11 @@ __webpack_require__.r(__webpack_exports__);
1337 1337
       icon: 'pi pi-id-card',
1338 1338
       to: '/type-members',
1339 1339
       component: 'typemember/Index'
1340
+    }, {
1341
+      label: 'Jenis Kendaraan',
1342
+      icon: 'pi pi-car',
1343
+      to: '/type-vehicles',
1344
+      component: 'typevehicle/Index'
1340 1345
     }]
1341 1346
   }],
1342 1347
   // Operator

+ 5
- 0
public/js/resources_js_pages_expense_Show_vue.js 查看文件

@@ -1064,6 +1064,11 @@ __webpack_require__.r(__webpack_exports__);
1064 1064
       icon: 'pi pi-id-card',
1065 1065
       to: '/type-members',
1066 1066
       component: 'typemember/Index'
1067
+    }, {
1068
+      label: 'Jenis Kendaraan',
1069
+      icon: 'pi pi-car',
1070
+      to: '/type-vehicles',
1071
+      component: 'typevehicle/Index'
1067 1072
     }]
1068 1073
   }],
1069 1074
   // Operator

+ 5
- 0
public/js/resources_js_pages_home_Index_vue.js 查看文件

@@ -934,6 +934,11 @@ __webpack_require__.r(__webpack_exports__);
934 934
       icon: 'pi pi-id-card',
935 935
       to: '/type-members',
936 936
       component: 'typemember/Index'
937
+    }, {
938
+      label: 'Jenis Kendaraan',
939
+      icon: 'pi pi-car',
940
+      to: '/type-vehicles',
941
+      component: 'typevehicle/Index'
937 942
     }]
938 943
   }],
939 944
   // Operator

+ 5
- 0
public/js/resources_js_pages_member_Create_vue.js 查看文件

@@ -1626,6 +1626,11 @@ __webpack_require__.r(__webpack_exports__);
1626 1626
       icon: 'pi pi-id-card',
1627 1627
       to: '/type-members',
1628 1628
       component: 'typemember/Index'
1629
+    }, {
1630
+      label: 'Jenis Kendaraan',
1631
+      icon: 'pi pi-car',
1632
+      to: '/type-vehicles',
1633
+      component: 'typevehicle/Index'
1629 1634
     }]
1630 1635
   }],
1631 1636
   // Operator

+ 5
- 0
public/js/resources_js_pages_member_Edit_vue.js 查看文件

@@ -1528,6 +1528,11 @@ __webpack_require__.r(__webpack_exports__);
1528 1528
       icon: 'pi pi-id-card',
1529 1529
       to: '/type-members',
1530 1530
       component: 'typemember/Index'
1531
+    }, {
1532
+      label: 'Jenis Kendaraan',
1533
+      icon: 'pi pi-car',
1534
+      to: '/type-vehicles',
1535
+      component: 'typevehicle/Index'
1531 1536
     }]
1532 1537
   }],
1533 1538
   // Operator

+ 5
- 0
public/js/resources_js_pages_member_Index_vue.js 查看文件

@@ -1304,6 +1304,11 @@ __webpack_require__.r(__webpack_exports__);
1304 1304
       icon: 'pi pi-id-card',
1305 1305
       to: '/type-members',
1306 1306
       component: 'typemember/Index'
1307
+    }, {
1308
+      label: 'Jenis Kendaraan',
1309
+      icon: 'pi pi-car',
1310
+      to: '/type-vehicles',
1311
+      component: 'typevehicle/Index'
1307 1312
     }]
1308 1313
   }],
1309 1314
   // Operator

+ 5
- 0
public/js/resources_js_pages_topup_Create_vue.js 查看文件

@@ -1884,6 +1884,11 @@ __webpack_require__.r(__webpack_exports__);
1884 1884
       icon: 'pi pi-id-card',
1885 1885
       to: '/type-members',
1886 1886
       component: 'typemember/Index'
1887
+    }, {
1888
+      label: 'Jenis Kendaraan',
1889
+      icon: 'pi pi-car',
1890
+      to: '/type-vehicles',
1891
+      component: 'typevehicle/Index'
1887 1892
     }]
1888 1893
   }],
1889 1894
   // Operator

+ 5
- 0
public/js/resources_js_pages_topup_Index_vue.js 查看文件

@@ -1380,6 +1380,11 @@ __webpack_require__.r(__webpack_exports__);
1380 1380
       icon: 'pi pi-id-card',
1381 1381
       to: '/type-members',
1382 1382
       component: 'typemember/Index'
1383
+    }, {
1384
+      label: 'Jenis Kendaraan',
1385
+      icon: 'pi pi-car',
1386
+      to: '/type-vehicles',
1387
+      component: 'typevehicle/Index'
1383 1388
     }]
1384 1389
   }],
1385 1390
   // Operator

+ 5
- 0
public/js/resources_js_pages_typemember_Create_vue.js 查看文件

@@ -1513,6 +1513,11 @@ __webpack_require__.r(__webpack_exports__);
1513 1513
       icon: 'pi pi-id-card',
1514 1514
       to: '/type-members',
1515 1515
       component: 'typemember/Index'
1516
+    }, {
1517
+      label: 'Jenis Kendaraan',
1518
+      icon: 'pi pi-car',
1519
+      to: '/type-vehicles',
1520
+      component: 'typevehicle/Index'
1516 1521
     }]
1517 1522
   }],
1518 1523
   // Operator

+ 5
- 0
public/js/resources_js_pages_typemember_Edit_vue.js 查看文件

@@ -1514,6 +1514,11 @@ __webpack_require__.r(__webpack_exports__);
1514 1514
       icon: 'pi pi-id-card',
1515 1515
       to: '/type-members',
1516 1516
       component: 'typemember/Index'
1517
+    }, {
1518
+      label: 'Jenis Kendaraan',
1519
+      icon: 'pi pi-car',
1520
+      to: '/type-vehicles',
1521
+      component: 'typevehicle/Index'
1517 1522
     }]
1518 1523
   }],
1519 1524
   // Operator

+ 5
- 0
public/js/resources_js_pages_typemember_Index_vue.js 查看文件

@@ -1144,6 +1144,11 @@ __webpack_require__.r(__webpack_exports__);
1144 1144
       icon: 'pi pi-id-card',
1145 1145
       to: '/type-members',
1146 1146
       component: 'typemember/Index'
1147
+    }, {
1148
+      label: 'Jenis Kendaraan',
1149
+      icon: 'pi pi-car',
1150
+      to: '/type-vehicles',
1151
+      component: 'typevehicle/Index'
1147 1152
     }]
1148 1153
   }],
1149 1154
   // Operator

+ 1641
- 0
public/js/resources_js_pages_typevehicle_Create_vue.js
文件差異過大導致無法顯示
查看文件


+ 1868
- 0
public/js/resources_js_pages_typevehicle_Edit_vue.js
文件差異過大導致無法顯示
查看文件


+ 1782
- 0
public/js/resources_js_pages_typevehicle_Index_vue.js
文件差異過大導致無法顯示
查看文件


+ 24
- 0
public/js/resources_js_pages_typevehicle_TableHeader_js.js 查看文件

@@ -0,0 +1,24 @@
1
+"use strict";
2
+(self["webpackChunk"] = self["webpackChunk"] || []).push([["resources_js_pages_typevehicle_TableHeader_js"],{
3
+
4
+/***/ "./resources/js/pages/typevehicle/TableHeader.js":
5
+/*!*******************************************************!*\
6
+  !*** ./resources/js/pages/typevehicle/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 Kendaraan'
20
+}]);
21
+
22
+/***/ })
23
+
24
+}]);

+ 5
- 0
public/js/resources_js_pages_user_Create_vue.js 查看文件

@@ -1360,6 +1360,11 @@ __webpack_require__.r(__webpack_exports__);
1360 1360
       icon: 'pi pi-id-card',
1361 1361
       to: '/type-members',
1362 1362
       component: 'typemember/Index'
1363
+    }, {
1364
+      label: 'Jenis Kendaraan',
1365
+      icon: 'pi pi-car',
1366
+      to: '/type-vehicles',
1367
+      component: 'typevehicle/Index'
1363 1368
     }]
1364 1369
   }],
1365 1370
   // Operator

+ 5
- 0
public/js/resources_js_pages_user_Edit_vue.js 查看文件

@@ -1650,6 +1650,11 @@ __webpack_require__.r(__webpack_exports__);
1650 1650
       icon: 'pi pi-id-card',
1651 1651
       to: '/type-members',
1652 1652
       component: 'typemember/Index'
1653
+    }, {
1654
+      label: 'Jenis Kendaraan',
1655
+      icon: 'pi pi-car',
1656
+      to: '/type-vehicles',
1657
+      component: 'typevehicle/Index'
1653 1658
     }]
1654 1659
   }],
1655 1660
   // Operator

+ 5
- 0
public/js/resources_js_pages_user_Index_vue.js 查看文件

@@ -1296,6 +1296,11 @@ __webpack_require__.r(__webpack_exports__);
1296 1296
       icon: 'pi pi-id-card',
1297 1297
       to: '/type-members',
1298 1298
       component: 'typemember/Index'
1299
+    }, {
1300
+      label: 'Jenis Kendaraan',
1301
+      icon: 'pi pi-car',
1302
+      to: '/type-vehicles',
1303
+      component: 'typevehicle/Index'
1299 1304
     }]
1300 1305
   }],
1301 1306
   // Operator

+ 5
- 0
public/js/resources_js_pages_user_Show_vue.js 查看文件

@@ -1380,6 +1380,11 @@ __webpack_require__.r(__webpack_exports__);
1380 1380
       icon: 'pi pi-id-card',
1381 1381
       to: '/type-members',
1382 1382
       component: 'typemember/Index'
1383
+    }, {
1384
+      label: 'Jenis Kendaraan',
1385
+      icon: 'pi pi-car',
1386
+      to: '/type-vehicles',
1387
+      component: 'typevehicle/Index'
1383 1388
     }]
1384 1389
   }],
1385 1390
   // Operator

+ 33
- 1
public/js/vue.js 查看文件

@@ -57912,6 +57912,38 @@ var map = {
57912 57912
 		"./resources/js/pages/typemember/TableHeader.js",
57913 57913
 		"resources_js_pages_typemember_TableHeader_js"
57914 57914
 	],
57915
+	"./typevehicle/Create": [
57916
+		"./resources/js/pages/typevehicle/Create.vue",
57917
+		"resources_js_pages_typevehicle_Create_vue"
57918
+	],
57919
+	"./typevehicle/Create.vue": [
57920
+		"./resources/js/pages/typevehicle/Create.vue",
57921
+		"resources_js_pages_typevehicle_Create_vue"
57922
+	],
57923
+	"./typevehicle/Edit": [
57924
+		"./resources/js/pages/typevehicle/Edit.vue",
57925
+		"resources_js_pages_typevehicle_Edit_vue"
57926
+	],
57927
+	"./typevehicle/Edit.vue": [
57928
+		"./resources/js/pages/typevehicle/Edit.vue",
57929
+		"resources_js_pages_typevehicle_Edit_vue"
57930
+	],
57931
+	"./typevehicle/Index": [
57932
+		"./resources/js/pages/typevehicle/Index.vue",
57933
+		"resources_js_pages_typevehicle_Index_vue"
57934
+	],
57935
+	"./typevehicle/Index.vue": [
57936
+		"./resources/js/pages/typevehicle/Index.vue",
57937
+		"resources_js_pages_typevehicle_Index_vue"
57938
+	],
57939
+	"./typevehicle/TableHeader": [
57940
+		"./resources/js/pages/typevehicle/TableHeader.js",
57941
+		"resources_js_pages_typevehicle_TableHeader_js"
57942
+	],
57943
+	"./typevehicle/TableHeader.js": [
57944
+		"./resources/js/pages/typevehicle/TableHeader.js",
57945
+		"resources_js_pages_typevehicle_TableHeader_js"
57946
+	],
57915 57947
 	"./user/Create": [
57916 57948
 		"./resources/js/pages/user/Create.vue",
57917 57949
 		"resources_js_pages_user_Create_vue"
@@ -58069,7 +58101,7 @@ module.exports = JSON.parse('{"name":"axios","version":"0.21.4","description":"P
58069 58101
 /******/ 		// This function allow to reference async chunks
58070 58102
 /******/ 		__webpack_require__.u = (chunkId) => {
58071 58103
 /******/ 			// return url for filenames based on template
58072
-/******/ 			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":"54b97ae6c316abfa","resources_js_pages_expense_Index_vue":"7e4675bef5384e18","resources_js_pages_expense_Show_vue":"076b6af6a74ae394","resources_js_pages_expense_TableHeader_js":"eed3f0613f167cfd","resources_js_pages_home_Index_vue":"974feaa7a6242a6a","resources_js_pages_member_Create_vue":"b82c7658d250d1e9","resources_js_pages_member_Edit_vue":"112590bfb9d36785","resources_js_pages_member_Index_vue":"7311f392b54954c7","resources_js_pages_member_TableHeader_js":"9e189bc69c98169d","resources_js_pages_topup_Create_vue":"e41982f4330265c4","resources_js_pages_topup_Edit_vue":"258c3b0746574dc0","resources_js_pages_topup_Index_vue":"6be7c2a056e3e85a","resources_js_pages_topup_Show_vue":"cb35ad21e9ce163f","resources_js_pages_topup_TableHeader_js":"c803a04362b71855","resources_js_pages_typemember_Create_vue":"df16d8a936e5a9aa","resources_js_pages_typemember_Edit_vue":"38e1734003de8485","resources_js_pages_typemember_Index_vue":"1bfac1a233119d8e","resources_js_pages_typemember_TableHeader_js":"de81088b132d3e90","resources_js_pages_user_Create_vue":"6fffb95dab72cc3b","resources_js_pages_user_Edit_vue":"7e8601af1be1d211","resources_js_pages_user_Index_vue":"a82ee15061ab051d","resources_js_pages_user_Show_vue":"5c3fc30a8d575515","resources_js_pages_user_TableHeader_js":"0d87fd422fe40491"}[chunkId] + "";
58104
+/******/ 			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":"1772093ec9ad8e1f","resources_js_pages_expense_Index_vue":"51f7facd5c3c3ea6","resources_js_pages_expense_Show_vue":"6e60ec4571b580bb","resources_js_pages_expense_TableHeader_js":"eed3f0613f167cfd","resources_js_pages_home_Index_vue":"6cd0224828ac8129","resources_js_pages_member_Create_vue":"e560dbe95154c5fa","resources_js_pages_member_Edit_vue":"05b5081c82d41225","resources_js_pages_member_Index_vue":"80015a0d2c0ee954","resources_js_pages_member_TableHeader_js":"9e189bc69c98169d","resources_js_pages_topup_Create_vue":"9d958cbaf19eb892","resources_js_pages_topup_Edit_vue":"258c3b0746574dc0","resources_js_pages_topup_Index_vue":"5c7eced88af886fa","resources_js_pages_topup_Show_vue":"cb35ad21e9ce163f","resources_js_pages_topup_TableHeader_js":"c803a04362b71855","resources_js_pages_typemember_Create_vue":"79728a0314d12450","resources_js_pages_typemember_Edit_vue":"94fb9b5b49338c01","resources_js_pages_typemember_Index_vue":"cd93651ebf36d5a5","resources_js_pages_typemember_TableHeader_js":"de81088b132d3e90","resources_js_pages_typevehicle_Create_vue":"0f937d93865a1ea2","resources_js_pages_typevehicle_Edit_vue":"edba97a3715ba957","resources_js_pages_typevehicle_Index_vue":"53c702d33feb6196","resources_js_pages_typevehicle_TableHeader_js":"a40378918fbe74e1","resources_js_pages_user_Create_vue":"361bf2589467f820","resources_js_pages_user_Edit_vue":"fdb844cf830ec11c","resources_js_pages_user_Index_vue":"16d93eb7e5210300","resources_js_pages_user_Show_vue":"138fd92d6ae36518","resources_js_pages_user_TableHeader_js":"0d87fd422fe40491"}[chunkId] + "";
58073 58105
 /******/ 		};
58074 58106
 /******/ 	})();
58075 58107
 /******/ 	

+ 57
- 0
resources/js/pages/typevehicle/Create.vue 查看文件

@@ -0,0 +1,57 @@
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 AppInputText from '@/components/AppInputText.vue'
6
+const errors = computed(() => usePage().props.value.errors)
7
+
8
+watch(errors, () => {
9
+  form.clearErrors()
10
+})
11
+
12
+const form = useForm({
13
+  type: null,
14
+})
15
+
16
+const submit = () => {
17
+  form.post(route('type-vehicles.store'), { onSuccess: () => form.reset() })
18
+}
19
+</script>
20
+
21
+<template>
22
+  <Head title="Tambah Jenis Kendaraan" />
23
+
24
+  <AppLayout>
25
+    <div class="grid">
26
+      <div class="col-12 md:col-8">
27
+        <Card>
28
+          <template #title> Tambah Jenis Kendaraan </template>
29
+          <template #content>
30
+            <div class="grid">
31
+              <div class="col-12 md:col-6">
32
+                <AppInputText
33
+                  v-model="form.type"
34
+                  label="Jenis Kendaraan"
35
+                  placeholder="jenis kendaraan"
36
+                  :error="form.errors.type"
37
+                />
38
+              </div>
39
+            </div>
40
+          </template>
41
+
42
+          <template #footer>
43
+            <div class="flex flex-column md:flex-row justify-content-end">
44
+              <Button
45
+                label="Simpan"
46
+                icon="pi pi-check"
47
+                class="p-button-outlined"
48
+                :disabled="form.processing"
49
+                @click="submit"
50
+              />
51
+            </div>
52
+          </template>
53
+        </Card>
54
+      </div>
55
+    </div>
56
+  </AppLayout>
57
+</template>

+ 92
- 0
resources/js/pages/typevehicle/Edit.vue 查看文件

@@ -0,0 +1,92 @@
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 AppInputText from '@/components/AppInputText.vue'
8
+
9
+const props = defineProps({
10
+  typeVehicle: Object,
11
+})
12
+
13
+const errors = computed(() => usePage().props.value.errors)
14
+
15
+watch(errors, () => {
16
+  form.clearErrors()
17
+})
18
+
19
+const visibleDialog = ref(false)
20
+
21
+const confirmDialog = () => {
22
+  visibleDialog.value = true
23
+}
24
+
25
+const onAgree = () => Inertia.delete(route('type-vehicles.destroy', props.typeVehicle.id))
26
+
27
+const onCancel = () => (visibleDialog.value = false)
28
+
29
+const form = useForm({
30
+  type: props.typeVehicle.type,
31
+})
32
+
33
+const submit = () => {
34
+  form.put(route('type-vehicles.update', props.typeVehicle.id))
35
+}
36
+</script>
37
+
38
+<template>
39
+  <Head title="Ubah Jenis Kendaraan" />
40
+
41
+  <AppLayout>
42
+    <div class="grid">
43
+      <div class="col-12 md:col-8">
44
+        <Card>
45
+          <template #title>Ubah Jenis Kendaraan </template>
46
+          <template #content>
47
+            <div class="grid">
48
+              <div class="col-12 md:col-6">
49
+                <AppInputText
50
+                  v-model="form.type"
51
+                  label="Jenis Kendaraan"
52
+                  placeholder="jenis kendaraan"
53
+                  :error="form.errors.type"
54
+                />
55
+              </div>
56
+            </div>
57
+          </template>
58
+
59
+          <template #footer>
60
+            <div class="grid">
61
+              <div class="col-12 md:col-6 flex flex-column md:flex-row justify-content-center md:justify-content-start">
62
+                <AppDialog
63
+                  message="Yakin akan menghapus data ini?"
64
+                  v-model:visible="visibleDialog"
65
+                  @agree="onAgree"
66
+                  @cancel="onCancel"
67
+                />
68
+
69
+                <Button
70
+                  label="Hapus"
71
+                  icon="pi pi-trash"
72
+                  class="p-button-outlined p-button-danger"
73
+                  @click="confirmDialog"
74
+                />
75
+              </div>
76
+
77
+              <div class="col-12 md:col-6 flex flex-column md:flex-row justify-content-center md:justify-content-end">
78
+                <Button
79
+                  label="Simpan"
80
+                  icon="pi pi-check"
81
+                  class="p-button-outlined"
82
+                  :disabled="form.processing"
83
+                  @click="submit"
84
+                />
85
+              </div>
86
+            </div>
87
+          </template>
88
+        </Card>
89
+      </div>
90
+    </div>
91
+  </AppLayout>
92
+</template>

+ 60
- 0
resources/js/pages/typevehicle/Index.vue 查看文件

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

+ 4
- 0
resources/js/pages/typevehicle/TableHeader.js 查看文件

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

+ 4
- 1
resources/js/utils/menu.js 查看文件

@@ -23,7 +23,10 @@ export default {
23 23
     },
24 24
     {
25 25
       label: 'Master',
26
-      items: [{ label: 'Jenis Member', icon: 'pi pi-id-card', to: '/type-members', component: 'typemember/Index' }],
26
+      items: [
27
+        { label: 'Jenis Member', icon: 'pi pi-id-card', to: '/type-members', component: 'typemember/Index' },
28
+        { label: 'Jenis Kendaraan', icon: 'pi pi-car', to: '/type-vehicles', component: 'typevehicle/Index' },
29
+      ],
27 30
     },
28 31
   ],
29 32
 

+ 8
- 5
routes/web.php 查看文件

@@ -5,6 +5,7 @@ use App\Http\Controllers\ExpenseController;
5 5
 use App\Http\Controllers\MemberController;
6 6
 use App\Http\Controllers\TopUpController;
7 7
 use App\Http\Controllers\TypeMemberController;
8
+use App\Http\Controllers\TypeVehicleController;
8 9
 use App\Http\Controllers\UserController;
9 10
 use Illuminate\Support\Facades\Route;
10 11
 
@@ -24,17 +25,19 @@ Route::middleware(['auth', 'verified'])->group(function () {
24 25
 
25 26
     Route::get('/dashboards', DashboardController::class);
26 27
 
28
+    Route::resource('/expenses', ExpenseController::class);
29
+
30
+    Route::resource('/members', MemberController::class);
31
+
32
+    Route::resource('/top-ups', TopUpController::class);
33
+
27 34
     Route::delete('/users/block/{user}', [UserController::class, 'block'])->name('users.block');
28 35
     Route::post('/users/change-password/{user}', [UserController::class, 'changePassword'])->name('users.change-password');
29 36
     Route::resource('/users', UserController::class);
30 37
 
31
-    Route::resource('/expenses', ExpenseController::class);
32
-
33 38
     Route::resource('/type-members', TypeMemberController::class);
34 39
 
35
-    Route::resource('/members', MemberController::class);
36
-
37
-    Route::resource('/top-ups', TopUpController::class);
40
+    Route::resource('/type-vehicles', TypeVehicleController::class);
38 41
 });
39 42
 
40 43
 require __DIR__ . '/auth.php';