Muhammad Iqbal Afandi преди 3 години
родител
ревизия
25f8b9dca3

+ 6
- 7
app/Http/Controllers/MemberController.php Целия файл

@@ -184,16 +184,15 @@ class MemberController extends Controller
184 184
      */
185 185
     public function update(UpdateMemberRequest $request, Member $member)
186 186
     {
187
-        dd($request);
187
+        if ($member->type_member_id !== $request->type_member_id) {
188
+            dd('type member changes');
189
+        } else {
190
+            dd('old member');
191
+        }
188 192
         // DB::beginTransaction();
189 193
 
190 194
         // try {
191
-        //     $member->update([
192
-        //         'name' => $request->name,
193
-        //         'phone' => $request->phone,
194
-        //         'exp_date' => now()->addDays(30),
195
-        //         'type_member_id' => $request->type_member_id,
196
-        //     ]);
195
+        //     $member->update($request->validated());
197 196
 
198 197
         //     foreach ($request->vehicles as $vehicle) {
199 198
         //         $member->vehicles()->create([

+ 2
- 1
app/Http/Requests/Member/UpdateMemberRequest.php Целия файл

@@ -3,6 +3,7 @@
3 3
 namespace App\Http\Requests\Member;
4 4
 
5 5
 use Illuminate\Foundation\Http\FormRequest;
6
+use Illuminate\Validation\Rule;
6 7
 
7 8
 class UpdateMemberRequest extends FormRequest
8 9
 {
@@ -27,7 +28,7 @@ class UpdateMemberRequest extends FormRequest
27 28
             'name' => 'required|string|max:50',
28 29
             'phone' => 'required|numeric|min:12|unique:members,phone,' . $this->member->id,
29 30
             'type_member_id' => 'required|numeric',
30
-            'vehicles.*.platNumber' => 'unique:vehicles,plat_number',
31
+            'vehicles.*.platNumber' => [Rule::unique('vehicles', 'plat_number')->ignore($this->member->id, 'member_id')],
31 32
         ];
32 33
     }
33 34
 }

+ 131
- 0
public/js/resources_js_pages_member_ConfirmBill_vue.js Целия файл

@@ -0,0 +1,131 @@
1
+"use strict";
2
+(self["webpackChunk"] = self["webpackChunk"] || []).push([["resources_js_pages_member_ConfirmBill_vue"],{
3
+
4
+/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/pages/member/ConfirmBill.vue?vue&type=script&setup=true&lang=js":
5
+/*!******************************************************************************************************************************************************************************************************************!*\
6
+  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/pages/member/ConfirmBill.vue?vue&type=script&setup=true&lang=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 import */ var primevue_useconfirm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! primevue/useconfirm */ "./node_modules/primevue/useconfirm/useconfirm.esm.js");
15
+
16
+/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
17
+  setup: function setup(__props, _ref) {
18
+    var expose = _ref.expose;
19
+    expose();
20
+    var __returned__ = {
21
+      useConfirm: primevue_useconfirm__WEBPACK_IMPORTED_MODULE_0__.useConfirm
22
+    };
23
+    Object.defineProperty(__returned__, '__isScriptSetup', {
24
+      enumerable: false,
25
+      value: true
26
+    });
27
+    return __returned__;
28
+  }
29
+});
30
+
31
+/***/ }),
32
+
33
+/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/pages/member/ConfirmBill.vue?vue&type=template&id=4da27a0a":
34
+/*!***********************************************************************************************************************************************************************************************************************************************************************************!*\
35
+  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/pages/member/ConfirmBill.vue?vue&type=template&id=4da27a0a ***!
36
+  \***********************************************************************************************************************************************************************************************************************************************************************************/
37
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
38
+
39
+__webpack_require__.r(__webpack_exports__);
40
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
41
+/* harmony export */   "render": () => (/* binding */ render)
42
+/* harmony export */ });
43
+/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js");
44
+
45
+function render(_ctx, _cache, $props, $setup, $data, $options) {
46
+  var _component_ConfirmDialog = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("ConfirmDialog");
47
+
48
+  return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_ConfirmDialog);
49
+}
50
+
51
+/***/ }),
52
+
53
+/***/ "./node_modules/vue-loader/dist/exportHelper.js":
54
+/*!******************************************************!*\
55
+  !*** ./node_modules/vue-loader/dist/exportHelper.js ***!
56
+  \******************************************************/
57
+/***/ ((__unused_webpack_module, exports) => {
58
+
59
+
60
+Object.defineProperty(exports, "__esModule", ({ value: true }));
61
+// runtime helper for setting properties on components
62
+// in a tree-shakable way
63
+exports["default"] = (sfc, props) => {
64
+    const target = sfc.__vccOpts || sfc;
65
+    for (const [key, val] of props) {
66
+        target[key] = val;
67
+    }
68
+    return target;
69
+};
70
+
71
+
72
+/***/ }),
73
+
74
+/***/ "./resources/js/pages/member/ConfirmBill.vue":
75
+/*!***************************************************!*\
76
+  !*** ./resources/js/pages/member/ConfirmBill.vue ***!
77
+  \***************************************************/
78
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
79
+
80
+__webpack_require__.r(__webpack_exports__);
81
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
82
+/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
83
+/* harmony export */ });
84
+/* harmony import */ var _ConfirmBill_vue_vue_type_template_id_4da27a0a__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ConfirmBill.vue?vue&type=template&id=4da27a0a */ "./resources/js/pages/member/ConfirmBill.vue?vue&type=template&id=4da27a0a");
85
+/* harmony import */ var _ConfirmBill_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ConfirmBill.vue?vue&type=script&setup=true&lang=js */ "./resources/js/pages/member/ConfirmBill.vue?vue&type=script&setup=true&lang=js");
86
+/* harmony import */ var _home_dijitalcode_Projects_parkirin_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ "./node_modules/vue-loader/dist/exportHelper.js");
87
+
88
+
89
+
90
+
91
+;
92
+const __exports__ = /*#__PURE__*/(0,_home_dijitalcode_Projects_parkirin_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__["default"])(_ConfirmBill_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"], [['render',_ConfirmBill_vue_vue_type_template_id_4da27a0a__WEBPACK_IMPORTED_MODULE_0__.render],['__file',"resources/js/pages/member/ConfirmBill.vue"]])
93
+/* hot reload */
94
+if (false) {}
95
+
96
+
97
+/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (__exports__);
98
+
99
+/***/ }),
100
+
101
+/***/ "./resources/js/pages/member/ConfirmBill.vue?vue&type=script&setup=true&lang=js":
102
+/*!**************************************************************************************!*\
103
+  !*** ./resources/js/pages/member/ConfirmBill.vue?vue&type=script&setup=true&lang=js ***!
104
+  \**************************************************************************************/
105
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
106
+
107
+__webpack_require__.r(__webpack_exports__);
108
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
109
+/* harmony export */   "default": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_ConfirmBill_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"])
110
+/* harmony export */ });
111
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_ConfirmBill_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./ConfirmBill.vue?vue&type=script&setup=true&lang=js */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/pages/member/ConfirmBill.vue?vue&type=script&setup=true&lang=js");
112
+ 
113
+
114
+/***/ }),
115
+
116
+/***/ "./resources/js/pages/member/ConfirmBill.vue?vue&type=template&id=4da27a0a":
117
+/*!*********************************************************************************!*\
118
+  !*** ./resources/js/pages/member/ConfirmBill.vue?vue&type=template&id=4da27a0a ***!
119
+  \*********************************************************************************/
120
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
121
+
122
+__webpack_require__.r(__webpack_exports__);
123
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
124
+/* harmony export */   "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_ConfirmBill_vue_vue_type_template_id_4da27a0a__WEBPACK_IMPORTED_MODULE_0__.render)
125
+/* harmony export */ });
126
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_ConfirmBill_vue_vue_type_template_id_4da27a0a__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./ConfirmBill.vue?vue&type=template&id=4da27a0a */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/pages/member/ConfirmBill.vue?vue&type=template&id=4da27a0a");
127
+
128
+
129
+/***/ })
130
+
131
+}]);

+ 70
- 32
public/js/resources_js_pages_member_Create_vue.js Целия файл

@@ -503,10 +503,12 @@ __webpack_require__.r(__webpack_exports__);
503 503
 /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js");
504 504
 /* harmony import */ var _inertiajs_inertia__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @inertiajs/inertia */ "./node_modules/@inertiajs/inertia/dist/index.js");
505 505
 /* harmony import */ var _inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @inertiajs/inertia-vue3 */ "./node_modules/@inertiajs/inertia-vue3/dist/index.js");
506
-/* harmony import */ var _layouts_AppLayout_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/layouts/AppLayout.vue */ "./resources/js/layouts/AppLayout.vue");
507
-/* harmony import */ var _components_AppDropdown_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/AppDropdown.vue */ "./resources/js/components/AppDropdown.vue");
508
-/* harmony import */ var _components_AppInputText_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/AppInputText.vue */ "./resources/js/components/AppInputText.vue");
509
-/* harmony import */ var _TableHeader__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./TableHeader */ "./resources/js/pages/member/TableHeader.js");
506
+/* harmony import */ var primevue_useconfirm__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! primevue/useconfirm */ "./node_modules/primevue/useconfirm/useconfirm.esm.js");
507
+/* harmony import */ var _layouts_AppLayout_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/layouts/AppLayout.vue */ "./resources/js/layouts/AppLayout.vue");
508
+/* harmony import */ var _components_AppDropdown_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/AppDropdown.vue */ "./resources/js/components/AppDropdown.vue");
509
+/* harmony import */ var _components_AppInputText_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/AppInputText.vue */ "./resources/js/components/AppInputText.vue");
510
+/* harmony import */ var _TableHeader__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./TableHeader */ "./resources/js/pages/member/TableHeader.js");
511
+
510 512
 
511 513
 
512 514
 
@@ -540,17 +542,19 @@ __webpack_require__.r(__webpack_exports__);
540 542
       (0,_inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_2__.usePage)().props.value.errors = {};
541 543
     };
542 544
 
543
-    var addPlatNumber = function addPlatNumber() {
544
-      form.clearErrors('plat_number', 'max_vehicle_id');
545
-
545
+    var addPlatNumberValidation = function addPlatNumberValidation() {
546 546
       if (!form.plat_number) {
547 547
         form.setError('plat_number', 'Plat kendaraan tidak boleh kosong');
548
-        return;
548
+        return {
549
+          error: true
550
+        };
549 551
       }
550 552
 
551 553
       if (!form.max_vehicle_id) {
552 554
         form.setError('max_vehicle_id', 'Tidak boleh kosong');
553
-        return;
555
+        return {
556
+          error: true
557
+        };
554 558
       }
555 559
 
556 560
       var listPlatNumberExist = listPlatNumber.filter(function (val) {
@@ -559,7 +563,9 @@ __webpack_require__.r(__webpack_exports__);
559 563
 
560 564
       if (listPlatNumberExist.length) {
561 565
         form.setError('plat_number', 'Nomor plat kendaraan tidak boleh sama');
562
-        return;
566
+        return {
567
+          error: true
568
+        };
563 569
       }
564 570
 
565 571
       var maxVehicles = listPlatNumber.filter(function (val) {
@@ -569,10 +575,25 @@ __webpack_require__.r(__webpack_exports__);
569 575
       if (maxVehicles.length) {
570 576
         if (maxVehicles.length + 1 > maxVehicles[0].maxVehicle) {
571 577
           form.setError('plat_number', 'Melibihi batas maksimal kendaraan');
572
-          return;
578
+          return {
579
+            error: true
580
+          };
573 581
         }
574 582
       }
575 583
 
584
+      return {
585
+        error: false
586
+      };
587
+    };
588
+
589
+    var addPlatNumber = function addPlatNumber() {
590
+      form.clearErrors('plat_number', 'max_vehicle_id');
591
+      var validation = addPlatNumberValidation();
592
+
593
+      if (validation.error) {
594
+        return;
595
+      }
596
+
576 597
       var typeVehicle = props.typeMember.maxVehicles.filter(function (val) {
577 598
         return val.value === form.max_vehicle_id;
578 599
       })[0];
@@ -605,27 +626,39 @@ __webpack_require__.r(__webpack_exports__);
605 626
         }
606 627
       });
607 628
     });
629
+    var confirm = (0,primevue_useconfirm__WEBPACK_IMPORTED_MODULE_3__.useConfirm)();
608 630
 
609 631
     var submit = function submit() {
610
-      form.transform(function (data) {
611
-        return {
612
-          name: data.name,
613
-          phone: data.phone,
614
-          vehicles: listPlatNumber,
615
-          type_member_id: data.type_member_id
616
-        };
617
-      }).post(route('members.store'), {
618
-        onError: function onError() {
619
-          _inertiajs_inertia__WEBPACK_IMPORTED_MODULE_1__.Inertia.reload({
620
-            only: ['typeMember'],
621
-            data: {
622
-              id: form.type_member_id
632
+      confirm.require({
633
+        message: "Tagihan dikenakan untuk member baru sebesar ".concat(props.typeMember.price),
634
+        header: 'Tagihan',
635
+        acceptLabel: 'Bayar dan simpan',
636
+        rejectLabel: 'Batalkan',
637
+        accept: function accept() {
638
+          form.transform(function (data) {
639
+            return {
640
+              name: data.name,
641
+              phone: data.phone,
642
+              vehicles: listPlatNumber,
643
+              type_member_id: data.type_member_id
644
+            };
645
+          }).post(route('members.store'), {
646
+            onError: function onError() {
647
+              _inertiajs_inertia__WEBPACK_IMPORTED_MODULE_1__.Inertia.reload({
648
+                only: ['typeMember'],
649
+                data: {
650
+                  id: form.type_member_id
651
+                }
652
+              });
653
+            },
654
+            onSuccess: function onSuccess() {
655
+              listPlatNumberClear();
656
+              form.reset();
623 657
             }
624 658
           });
625 659
         },
626
-        onSuccess: function onSuccess() {
627
-          listPlatNumberClear();
628
-          form.reset();
660
+        reject: function reject() {
661
+          console.info('transaksi digagalkan');
629 662
         }
630 663
       });
631 664
     };
@@ -636,8 +669,10 @@ __webpack_require__.r(__webpack_exports__);
636 669
       listPlatNumber: listPlatNumber,
637 670
       listPlatNumberClear: listPlatNumberClear,
638 671
       listPlatNumberOnDelete: listPlatNumberOnDelete,
672
+      addPlatNumberValidation: addPlatNumberValidation,
639 673
       addPlatNumber: addPlatNumber,
640 674
       form: form,
675
+      confirm: confirm,
641 676
       submit: submit,
642 677
       computed: vue__WEBPACK_IMPORTED_MODULE_0__.computed,
643 678
       watch: vue__WEBPACK_IMPORTED_MODULE_0__.watch,
@@ -646,10 +681,11 @@ __webpack_require__.r(__webpack_exports__);
646 681
       Head: _inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_2__.Head,
647 682
       useForm: _inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_2__.useForm,
648 683
       usePage: _inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_2__.usePage,
649
-      AppLayout: _layouts_AppLayout_vue__WEBPACK_IMPORTED_MODULE_3__["default"],
650
-      AppDropdown: _components_AppDropdown_vue__WEBPACK_IMPORTED_MODULE_4__["default"],
651
-      AppInputText: _components_AppInputText_vue__WEBPACK_IMPORTED_MODULE_5__["default"],
652
-      PlatNumberTable: _TableHeader__WEBPACK_IMPORTED_MODULE_6__.PlatNumberTable
684
+      useConfirm: primevue_useconfirm__WEBPACK_IMPORTED_MODULE_3__.useConfirm,
685
+      AppLayout: _layouts_AppLayout_vue__WEBPACK_IMPORTED_MODULE_4__["default"],
686
+      AppDropdown: _components_AppDropdown_vue__WEBPACK_IMPORTED_MODULE_5__["default"],
687
+      AppInputText: _components_AppInputText_vue__WEBPACK_IMPORTED_MODULE_6__["default"],
688
+      PlatNumberTable: _TableHeader__WEBPACK_IMPORTED_MODULE_7__.PlatNumberTable
653 689
     };
654 690
     Object.defineProperty(__returned__, '__isScriptSetup', {
655 691
       enumerable: false,
@@ -1388,6 +1424,8 @@ var _hoisted_25 = {
1388 1424
   "class": "flex flex-column md:flex-row justify-content-end"
1389 1425
 };
1390 1426
 function render(_ctx, _cache, $props, $setup, $data, $options) {
1427
+  var _component_ConfirmDialog = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("ConfirmDialog");
1428
+
1391 1429
   var _component_Card = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("Card");
1392 1430
 
1393 1431
   var _component_Button = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("Button");
@@ -1400,7 +1438,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
1400 1438
     title: "Tambah Member"
1401 1439
   }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup["AppLayout"], null, {
1402 1440
     "default": (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
1403
-      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, {
1441
+      return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_ConfirmDialog), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_Card, null, {
1404 1442
         title: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
1405 1443
           return [_hoisted_3];
1406 1444
         }),

+ 17418
- 244
public/js/resources_js_pages_member_Edit_vue.js
Файловите разлики са ограничени, защото са твърде много
Целия файл


+ 282
- 18
public/js/vue.js Целия файл

@@ -32356,6 +32356,235 @@ var PrimeVue = {
32356 32356
 
32357 32357
 
32358 32358
 
32359
+/***/ }),
32360
+
32361
+/***/ "./node_modules/primevue/confirmationeventbus/confirmationeventbus.esm.js":
32362
+/*!********************************************************************************!*\
32363
+  !*** ./node_modules/primevue/confirmationeventbus/confirmationeventbus.esm.js ***!
32364
+  \********************************************************************************/
32365
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32366
+
32367
+"use strict";
32368
+__webpack_require__.r(__webpack_exports__);
32369
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32370
+/* harmony export */   "default": () => (/* binding */ ConfirmationEventBus)
32371
+/* harmony export */ });
32372
+/* harmony import */ var primevue_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! primevue/utils */ "./node_modules/primevue/utils/utils.esm.js");
32373
+
32374
+
32375
+var ConfirmationEventBus = (0,primevue_utils__WEBPACK_IMPORTED_MODULE_0__.EventBus)();
32376
+
32377
+
32378
+
32379
+
32380
+/***/ }),
32381
+
32382
+/***/ "./node_modules/primevue/confirmationservice/confirmationservice.esm.js":
32383
+/*!******************************************************************************!*\
32384
+  !*** ./node_modules/primevue/confirmationservice/confirmationservice.esm.js ***!
32385
+  \******************************************************************************/
32386
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32387
+
32388
+"use strict";
32389
+__webpack_require__.r(__webpack_exports__);
32390
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32391
+/* harmony export */   "default": () => (/* binding */ ConfirmationService)
32392
+/* harmony export */ });
32393
+/* harmony import */ var primevue_confirmationeventbus__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! primevue/confirmationeventbus */ "./node_modules/primevue/confirmationeventbus/confirmationeventbus.esm.js");
32394
+/* harmony import */ var primevue_useconfirm__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! primevue/useconfirm */ "./node_modules/primevue/useconfirm/useconfirm.esm.js");
32395
+
32396
+
32397
+
32398
+var ConfirmationService = {
32399
+    install: (app) => {
32400
+        const ConfirmationService = {
32401
+            require: (options) => {
32402
+                primevue_confirmationeventbus__WEBPACK_IMPORTED_MODULE_0__["default"].emit('confirm', options);
32403
+            },
32404
+            close: () => {
32405
+                primevue_confirmationeventbus__WEBPACK_IMPORTED_MODULE_0__["default"].emit('close');
32406
+            }
32407
+        };
32408
+        app.config.globalProperties.$confirm = ConfirmationService;
32409
+        app.provide(primevue_useconfirm__WEBPACK_IMPORTED_MODULE_1__.PrimeVueConfirmSymbol, ConfirmationService);
32410
+    }
32411
+};
32412
+
32413
+
32414
+
32415
+
32416
+/***/ }),
32417
+
32418
+/***/ "./node_modules/primevue/confirmdialog/confirmdialog.esm.js":
32419
+/*!******************************************************************!*\
32420
+  !*** ./node_modules/primevue/confirmdialog/confirmdialog.esm.js ***!
32421
+  \******************************************************************/
32422
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32423
+
32424
+"use strict";
32425
+__webpack_require__.r(__webpack_exports__);
32426
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32427
+/* harmony export */   "default": () => (/* binding */ script)
32428
+/* harmony export */ });
32429
+/* harmony import */ var primevue_confirmationeventbus__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! primevue/confirmationeventbus */ "./node_modules/primevue/confirmationeventbus/confirmationeventbus.esm.js");
32430
+/* harmony import */ var primevue_dialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! primevue/dialog */ "./node_modules/primevue/dialog/dialog.esm.js");
32431
+/* harmony import */ var primevue_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! primevue/button */ "./node_modules/primevue/button/button.esm.js");
32432
+/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js");
32433
+
32434
+
32435
+
32436
+
32437
+
32438
+var script = {
32439
+    name: 'ConfirmDialog',
32440
+    props: {
32441
+        group: String,
32442
+        breakpoints: {
32443
+            type: Object,
32444
+            default: null
32445
+        }
32446
+    },
32447
+    confirmListener: null,
32448
+    closeListener: null,
32449
+    data() {
32450
+        return {
32451
+            visible: false,
32452
+            confirmation: null,
32453
+        }
32454
+    },
32455
+    mounted() {
32456
+        this.confirmListener = (options) => {
32457
+            if (!options) {
32458
+                return;
32459
+            }
32460
+
32461
+            if (options.group === this.group) {
32462
+                this.confirmation = options;
32463
+                this.visible = true;
32464
+            }
32465
+        };
32466
+
32467
+        this.closeListener = () => {
32468
+            this.visible = false;
32469
+            this.confirmation = null;
32470
+        };
32471
+        primevue_confirmationeventbus__WEBPACK_IMPORTED_MODULE_0__["default"].on('confirm', this.confirmListener);
32472
+        primevue_confirmationeventbus__WEBPACK_IMPORTED_MODULE_0__["default"].on('close', this.closeListener);
32473
+    },
32474
+    beforeUnmount() {
32475
+        primevue_confirmationeventbus__WEBPACK_IMPORTED_MODULE_0__["default"].off('confirm', this.confirmListener);
32476
+        primevue_confirmationeventbus__WEBPACK_IMPORTED_MODULE_0__["default"].off('close', this.closeListener);
32477
+    },
32478
+    methods: {
32479
+        accept() {
32480
+            if (this.confirmation.accept) {
32481
+                this.confirmation.accept();
32482
+            }
32483
+
32484
+            this.visible = false;
32485
+        },
32486
+        reject() {
32487
+            if (this.confirmation.reject) {
32488
+                this.confirmation.reject();
32489
+            }
32490
+
32491
+            this.visible = false;
32492
+        }
32493
+    },
32494
+    computed: {
32495
+        header() {
32496
+            return this.confirmation ? this.confirmation.header : null;
32497
+        },
32498
+        message() {
32499
+            return this.confirmation ? this.confirmation.message : null;
32500
+        },
32501
+        blockScroll() {
32502
+            return this.confirmation ? this.confirmation.blockScroll : true;
32503
+        },
32504
+        position() {
32505
+            return this.confirmation ? this.confirmation.position : null;
32506
+        },
32507
+        iconClass() {
32508
+            return ['p-confirm-dialog-icon', this.confirmation ? this.confirmation.icon : null];
32509
+        },
32510
+        acceptLabel() {
32511
+            return this.confirmation ? (this.confirmation.acceptLabel || this.$primevue.config.locale.accept) : null;
32512
+        },
32513
+        rejectLabel() {
32514
+            return this.confirmation ? (this.confirmation.rejectLabel || this.$primevue.config.locale.reject) : null;
32515
+        },
32516
+        acceptIcon() {
32517
+            return this.confirmation ? this.confirmation.acceptIcon : null;
32518
+        },
32519
+        rejectIcon() {
32520
+            return this.confirmation ? this.confirmation.rejectIcon : null;
32521
+        },
32522
+        acceptClass() {
32523
+            return ['p-confirm-dialog-accept', this.confirmation ? this.confirmation.acceptClass : null];
32524
+        },
32525
+        rejectClass() {
32526
+            return ['p-confirm-dialog-reject', this.confirmation ? (this.confirmation.rejectClass || 'p-button-text') : null];
32527
+        },
32528
+        autoFocusAccept() {
32529
+            return (this.confirmation.defaultFocus === undefined || this.confirmation.defaultFocus === 'accept') ? true : false;
32530
+        },
32531
+        autoFocusReject() {
32532
+            return this.confirmation.defaultFocus === 'reject' ? true : false;
32533
+        }
32534
+    },
32535
+    components: {
32536
+        'CDialog': primevue_dialog__WEBPACK_IMPORTED_MODULE_1__["default"],
32537
+        'CDButton': primevue_button__WEBPACK_IMPORTED_MODULE_2__["default"]
32538
+    }
32539
+};
32540
+
32541
+const _hoisted_1 = { class: "p-confirm-dialog-message" };
32542
+
32543
+function render(_ctx, _cache, $props, $setup, $data, $options) {
32544
+  const _component_CDButton = (0,vue__WEBPACK_IMPORTED_MODULE_3__.resolveComponent)("CDButton");
32545
+  const _component_CDialog = (0,vue__WEBPACK_IMPORTED_MODULE_3__.resolveComponent)("CDialog");
32546
+
32547
+  return ((0,vue__WEBPACK_IMPORTED_MODULE_3__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_3__.createBlock)(_component_CDialog, {
32548
+    visible: $data.visible,
32549
+    "onUpdate:visible": _cache[2] || (_cache[2] = $event => (($data.visible) = $event)),
32550
+    modal: true,
32551
+    header: $options.header,
32552
+    blockScroll: $options.blockScroll,
32553
+    position: $options.position,
32554
+    class: "p-confirm-dialog",
32555
+    breakpoints: $props.breakpoints
32556
+  }, {
32557
+    footer: (0,vue__WEBPACK_IMPORTED_MODULE_3__.withCtx)(() => [
32558
+      (0,vue__WEBPACK_IMPORTED_MODULE_3__.createVNode)(_component_CDButton, {
32559
+        label: $options.rejectLabel,
32560
+        icon: $options.rejectIcon,
32561
+        class: (0,vue__WEBPACK_IMPORTED_MODULE_3__.normalizeClass)($options.rejectClass),
32562
+        onClick: _cache[0] || (_cache[0] = $event => ($options.reject())),
32563
+        autofocus: $options.autoFocusReject
32564
+      }, null, 8, ["label", "icon", "class", "autofocus"]),
32565
+      (0,vue__WEBPACK_IMPORTED_MODULE_3__.createVNode)(_component_CDButton, {
32566
+        label: $options.acceptLabel,
32567
+        icon: $options.acceptIcon,
32568
+        class: (0,vue__WEBPACK_IMPORTED_MODULE_3__.normalizeClass)($options.acceptClass),
32569
+        onClick: _cache[1] || (_cache[1] = $event => ($options.accept())),
32570
+        autofocus: $options.autoFocusAccept
32571
+      }, null, 8, ["label", "icon", "class", "autofocus"])
32572
+    ]),
32573
+    default: (0,vue__WEBPACK_IMPORTED_MODULE_3__.withCtx)(() => [
32574
+      (0,vue__WEBPACK_IMPORTED_MODULE_3__.createElementVNode)("i", {
32575
+        class: (0,vue__WEBPACK_IMPORTED_MODULE_3__.normalizeClass)($options.iconClass)
32576
+      }, null, 2),
32577
+      (0,vue__WEBPACK_IMPORTED_MODULE_3__.createElementVNode)("span", _hoisted_1, (0,vue__WEBPACK_IMPORTED_MODULE_3__.toDisplayString)($options.message), 1)
32578
+    ]),
32579
+    _: 1
32580
+  }, 8, ["visible", "header", "blockScroll", "position", "breakpoints"]))
32581
+}
32582
+
32583
+script.render = render;
32584
+
32585
+
32586
+
32587
+
32359 32588
 /***/ }),
32360 32589
 
32361 32590
 /***/ "./node_modules/primevue/datatable/datatable.esm.js":
@@ -42713,6 +42942,37 @@ const Tooltip = {
42713 42942
 
42714 42943
 
42715 42944
 
42945
+/***/ }),
42946
+
42947
+/***/ "./node_modules/primevue/useconfirm/useconfirm.esm.js":
42948
+/*!************************************************************!*\
42949
+  !*** ./node_modules/primevue/useconfirm/useconfirm.esm.js ***!
42950
+  \************************************************************/
42951
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
42952
+
42953
+"use strict";
42954
+__webpack_require__.r(__webpack_exports__);
42955
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
42956
+/* harmony export */   "PrimeVueConfirmSymbol": () => (/* binding */ PrimeVueConfirmSymbol),
42957
+/* harmony export */   "useConfirm": () => (/* binding */ useConfirm)
42958
+/* harmony export */ });
42959
+/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js");
42960
+
42961
+
42962
+const PrimeVueConfirmSymbol = Symbol();
42963
+
42964
+function useConfirm() {
42965
+    const PrimeVueConfirm = (0,vue__WEBPACK_IMPORTED_MODULE_0__.inject)(PrimeVueConfirmSymbol);
42966
+    if (!PrimeVueConfirm) {
42967
+        throw new Error('No PrimeVue Confirmation provided!');
42968
+    } 
42969
+
42970
+    return PrimeVueConfirm;
42971
+}
42972
+
42973
+
42974
+
42975
+
42716 42976
 /***/ }),
42717 42977
 
42718 42978
 /***/ "./node_modules/primevue/utils/utils.esm.js":
@@ -58120,7 +58380,7 @@ module.exports = JSON.parse('{"name":"axios","version":"0.21.4","description":"P
58120 58380
 /******/ 		// This function allow to reference async chunks
58121 58381
 /******/ 		__webpack_require__.u = (chunkId) => {
58122 58382
 /******/ 			// return url for filenames based on template
58123
-/******/ 			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":"bb79e50a3f9cc936","resources_js_pages_expense_Show_vue":"6200e318fe2f7fed","resources_js_pages_expense_TableHeader_js":"eed3f0613f167cfd","resources_js_pages_home_Index_vue":"6cd0224828ac8129","resources_js_pages_member_Create_vue":"edbba0c4457eb3b4","resources_js_pages_member_Edit_vue":"0dba027c7041b01c","resources_js_pages_member_Index_vue":"4c8d34b88ca81ceb","resources_js_pages_member_TableHeader_js":"51dbf053f7ddd45c","resources_js_pages_topup_Create_vue":"24940afcdac09553","resources_js_pages_topup_Edit_vue":"258c3b0746574dc0","resources_js_pages_topup_Index_vue":"0733ef204a4ec33e","resources_js_pages_topup_Show_vue":"cb35ad21e9ce163f","resources_js_pages_topup_TableHeader_js":"c0dc89df0e3b8b7d","resources_js_pages_typemember_Create_vue":"e9028dd632c51636","resources_js_pages_typemember_Edit_vue":"c51c01c7afe7241d","resources_js_pages_typemember_Index_vue":"f9b93dac2e59fcc5","resources_js_pages_typemember_TableHeader_js":"ac1d31a59f8d464e","resources_js_pages_typevehicle_Create_vue":"0f937d93865a1ea2","resources_js_pages_typevehicle_Edit_vue":"edba97a3715ba957","resources_js_pages_typevehicle_Index_vue":"a150bdc8e5ca38d8","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":"28306eabc84a84d1","resources_js_pages_user_Show_vue":"138fd92d6ae36518","resources_js_pages_user_TableHeader_js":"0d87fd422fe40491"}[chunkId] + "";
58383
+/******/ 			return "js/" + chunkId + ".js?id=" + {"node_modules_chart_js_auto_auto_esm_js":"10c6b388645ceb22","resources_js_pages_auth_ForgotPassword_vue":"5b9f0529bda25a9b","resources_js_pages_auth_Login_vue":"61b9c9ae1ae9da32","resources_js_pages_auth_ResetPassword_vue":"b091193a1e114ce8","resources_js_pages_auth_VerifyEmail_vue":"a7b9a99e5a331088","resources_js_pages_expense_Create_vue":"1772093ec9ad8e1f","resources_js_pages_expense_Index_vue":"bb79e50a3f9cc936","resources_js_pages_expense_Show_vue":"6200e318fe2f7fed","resources_js_pages_expense_TableHeader_js":"eed3f0613f167cfd","resources_js_pages_home_Index_vue":"6cd0224828ac8129","resources_js_pages_member_Create_vue":"65532cf5d3ca8ed2","resources_js_pages_member_Edit_vue":"8953f866891a3551","resources_js_pages_member_Index_vue":"4c8d34b88ca81ceb","resources_js_pages_member_TableHeader_js":"51dbf053f7ddd45c","resources_js_pages_topup_Create_vue":"24940afcdac09553","resources_js_pages_topup_Edit_vue":"258c3b0746574dc0","resources_js_pages_topup_Index_vue":"0733ef204a4ec33e","resources_js_pages_topup_Show_vue":"cb35ad21e9ce163f","resources_js_pages_topup_TableHeader_js":"c0dc89df0e3b8b7d","resources_js_pages_typemember_Create_vue":"e9028dd632c51636","resources_js_pages_typemember_Edit_vue":"c51c01c7afe7241d","resources_js_pages_typemember_Index_vue":"f9b93dac2e59fcc5","resources_js_pages_typemember_TableHeader_js":"ac1d31a59f8d464e","resources_js_pages_typevehicle_Create_vue":"0f937d93865a1ea2","resources_js_pages_typevehicle_Edit_vue":"edba97a3715ba957","resources_js_pages_typevehicle_Index_vue":"a150bdc8e5ca38d8","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":"28306eabc84a84d1","resources_js_pages_user_Show_vue":"138fd92d6ae36518","resources_js_pages_user_TableHeader_js":"0d87fd422fe40491"}[chunkId] + "";
58124 58384
 /******/ 		};
58125 58385
 /******/ 	})();
58126 58386
 /******/ 	
@@ -58337,21 +58597,25 @@ __webpack_require__.r(__webpack_exports__);
58337 58597
 /* harmony import */ var primevue_card__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! primevue/card */ "./node_modules/primevue/card/card.esm.js");
58338 58598
 /* harmony import */ var primevue_chart__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! primevue/chart */ "./node_modules/primevue/chart/chart.esm.js");
58339 58599
 /* harmony import */ var primevue_column__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! primevue/column */ "./node_modules/primevue/column/column.esm.js");
58340
-/* harmony import */ var primevue_datatable__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! primevue/datatable */ "./node_modules/primevue/datatable/datatable.esm.js");
58341
-/* harmony import */ var primevue_dialog__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! primevue/dialog */ "./node_modules/primevue/dialog/dialog.esm.js");
58342
-/* harmony import */ var primevue_divider__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! primevue/divider */ "./node_modules/primevue/divider/divider.esm.js");
58343
-/* harmony import */ var primevue_dropdown__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! primevue/dropdown */ "./node_modules/primevue/dropdown/dropdown.esm.js");
58344
-/* harmony import */ var primevue_editor__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! primevue/editor */ "./node_modules/primevue/editor/editor.esm.js");
58345
-/* harmony import */ var primevue_inputnumber__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! primevue/inputnumber */ "./node_modules/primevue/inputnumber/inputnumber.esm.js");
58346
-/* harmony import */ var primevue_inputtext__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! primevue/inputtext */ "./node_modules/primevue/inputtext/inputtext.esm.js");
58347
-/* harmony import */ var primevue_message__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! primevue/message */ "./node_modules/primevue/message/message.esm.js");
58348
-/* harmony import */ var primevue_paginator__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! primevue/paginator */ "./node_modules/primevue/paginator/paginator.esm.js");
58349
-/* harmony import */ var primevue_password__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! primevue/password */ "./node_modules/primevue/password/password.esm.js");
58350
-/* harmony import */ var primevue_ripple__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! primevue/ripple */ "./node_modules/primevue/ripple/ripple.esm.js");
58351
-/* harmony import */ var primevue_tabview__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! primevue/tabview */ "./node_modules/primevue/tabview/tabview.esm.js");
58352
-/* harmony import */ var primevue_tabpanel__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! primevue/tabpanel */ "./node_modules/primevue/tabpanel/tabpanel.esm.js");
58353
-/* harmony import */ var primevue_textarea__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! primevue/textarea */ "./node_modules/primevue/textarea/textarea.esm.js");
58354
-/* harmony import */ var primevue_tooltip__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! primevue/tooltip */ "./node_modules/primevue/tooltip/tooltip.esm.js");
58600
+/* harmony import */ var primevue_confirmationservice__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! primevue/confirmationservice */ "./node_modules/primevue/confirmationservice/confirmationservice.esm.js");
58601
+/* harmony import */ var primevue_confirmdialog__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! primevue/confirmdialog */ "./node_modules/primevue/confirmdialog/confirmdialog.esm.js");
58602
+/* harmony import */ var primevue_datatable__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! primevue/datatable */ "./node_modules/primevue/datatable/datatable.esm.js");
58603
+/* harmony import */ var primevue_dialog__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! primevue/dialog */ "./node_modules/primevue/dialog/dialog.esm.js");
58604
+/* harmony import */ var primevue_divider__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! primevue/divider */ "./node_modules/primevue/divider/divider.esm.js");
58605
+/* harmony import */ var primevue_dropdown__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! primevue/dropdown */ "./node_modules/primevue/dropdown/dropdown.esm.js");
58606
+/* harmony import */ var primevue_editor__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! primevue/editor */ "./node_modules/primevue/editor/editor.esm.js");
58607
+/* harmony import */ var primevue_inputnumber__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! primevue/inputnumber */ "./node_modules/primevue/inputnumber/inputnumber.esm.js");
58608
+/* harmony import */ var primevue_inputtext__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! primevue/inputtext */ "./node_modules/primevue/inputtext/inputtext.esm.js");
58609
+/* harmony import */ var primevue_message__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! primevue/message */ "./node_modules/primevue/message/message.esm.js");
58610
+/* harmony import */ var primevue_paginator__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! primevue/paginator */ "./node_modules/primevue/paginator/paginator.esm.js");
58611
+/* harmony import */ var primevue_password__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! primevue/password */ "./node_modules/primevue/password/password.esm.js");
58612
+/* harmony import */ var primevue_ripple__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! primevue/ripple */ "./node_modules/primevue/ripple/ripple.esm.js");
58613
+/* harmony import */ var primevue_tabview__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! primevue/tabview */ "./node_modules/primevue/tabview/tabview.esm.js");
58614
+/* harmony import */ var primevue_tabpanel__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! primevue/tabpanel */ "./node_modules/primevue/tabpanel/tabpanel.esm.js");
58615
+/* harmony import */ var primevue_textarea__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! primevue/textarea */ "./node_modules/primevue/textarea/textarea.esm.js");
58616
+/* harmony import */ var primevue_tooltip__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! primevue/tooltip */ "./node_modules/primevue/tooltip/tooltip.esm.js");
58617
+
58618
+
58355 58619
 
58356 58620
 
58357 58621
 
@@ -58402,11 +58666,11 @@ __webpack_require__.r(__webpack_exports__);
58402 58666
       }
58403 58667
     }).use(plugin).use(primevue_config__WEBPACK_IMPORTED_MODULE_8__["default"], {
58404 58668
       ripple: true
58405
-    }).mixin({
58669
+    }).use(primevue_confirmationservice__WEBPACK_IMPORTED_MODULE_17__["default"]).mixin({
58406 58670
       methods: {
58407 58671
         route: route
58408 58672
       }
58409
-    }).directive('styleclass', primevue_styleclass__WEBPACK_IMPORTED_MODULE_9__["default"]).directive('ripple', primevue_ripple__WEBPACK_IMPORTED_MODULE_27__["default"]).directive('tooltip', primevue_tooltip__WEBPACK_IMPORTED_MODULE_31__["default"]).component('AutoComplete', primevue_autocomplete__WEBPACK_IMPORTED_MODULE_10__["default"]).component('Button', primevue_button__WEBPACK_IMPORTED_MODULE_12__["default"]).component('Badge', primevue_badge__WEBPACK_IMPORTED_MODULE_11__["default"]).component('Card', primevue_card__WEBPACK_IMPORTED_MODULE_14__["default"]).component('Calendar', primevue_calendar__WEBPACK_IMPORTED_MODULE_13__["default"]).component('Chart', primevue_chart__WEBPACK_IMPORTED_MODULE_15__["default"]).component('Column', primevue_column__WEBPACK_IMPORTED_MODULE_16__["default"]).component('DataTable', primevue_datatable__WEBPACK_IMPORTED_MODULE_17__["default"]).component('Dialog', primevue_dialog__WEBPACK_IMPORTED_MODULE_18__["default"]).component('Divider', primevue_divider__WEBPACK_IMPORTED_MODULE_19__["default"]).component('Dropdown', primevue_dropdown__WEBPACK_IMPORTED_MODULE_20__["default"]).component('Editor', primevue_editor__WEBPACK_IMPORTED_MODULE_21__["default"]).component('InputNumber', primevue_inputnumber__WEBPACK_IMPORTED_MODULE_22__["default"]).component('InputText', primevue_inputtext__WEBPACK_IMPORTED_MODULE_23__["default"]).component('Message', primevue_message__WEBPACK_IMPORTED_MODULE_24__["default"]).component('Paginator', primevue_paginator__WEBPACK_IMPORTED_MODULE_25__["default"]).component('Password', primevue_password__WEBPACK_IMPORTED_MODULE_26__["default"]).component('TabView', primevue_tabview__WEBPACK_IMPORTED_MODULE_28__["default"]).component('TabPanel', primevue_tabpanel__WEBPACK_IMPORTED_MODULE_29__["default"]).component('Textarea', primevue_textarea__WEBPACK_IMPORTED_MODULE_30__["default"]).mount(el);
58673
+    }).directive('styleclass', primevue_styleclass__WEBPACK_IMPORTED_MODULE_9__["default"]).directive('ripple', primevue_ripple__WEBPACK_IMPORTED_MODULE_29__["default"]).directive('tooltip', primevue_tooltip__WEBPACK_IMPORTED_MODULE_33__["default"]).component('AutoComplete', primevue_autocomplete__WEBPACK_IMPORTED_MODULE_10__["default"]).component('Button', primevue_button__WEBPACK_IMPORTED_MODULE_12__["default"]).component('Badge', primevue_badge__WEBPACK_IMPORTED_MODULE_11__["default"]).component('Card', primevue_card__WEBPACK_IMPORTED_MODULE_14__["default"]).component('Calendar', primevue_calendar__WEBPACK_IMPORTED_MODULE_13__["default"]).component('Chart', primevue_chart__WEBPACK_IMPORTED_MODULE_15__["default"]).component('Column', primevue_column__WEBPACK_IMPORTED_MODULE_16__["default"]).component('ConfirmDialog', primevue_confirmdialog__WEBPACK_IMPORTED_MODULE_18__["default"]).component('DataTable', primevue_datatable__WEBPACK_IMPORTED_MODULE_19__["default"]).component('Dialog', primevue_dialog__WEBPACK_IMPORTED_MODULE_20__["default"]).component('Divider', primevue_divider__WEBPACK_IMPORTED_MODULE_21__["default"]).component('Dropdown', primevue_dropdown__WEBPACK_IMPORTED_MODULE_22__["default"]).component('Editor', primevue_editor__WEBPACK_IMPORTED_MODULE_23__["default"]).component('InputNumber', primevue_inputnumber__WEBPACK_IMPORTED_MODULE_24__["default"]).component('InputText', primevue_inputtext__WEBPACK_IMPORTED_MODULE_25__["default"]).component('Message', primevue_message__WEBPACK_IMPORTED_MODULE_26__["default"]).component('Paginator', primevue_paginator__WEBPACK_IMPORTED_MODULE_27__["default"]).component('Password', primevue_password__WEBPACK_IMPORTED_MODULE_28__["default"]).component('TabView', primevue_tabview__WEBPACK_IMPORTED_MODULE_30__["default"]).component('TabPanel', primevue_tabpanel__WEBPACK_IMPORTED_MODULE_31__["default"]).component('Textarea', primevue_textarea__WEBPACK_IMPORTED_MODULE_32__["default"]).mount(el);
58410 58674
   }
58411 58675
 });
58412 58676
 _inertiajs_progress__WEBPACK_IMPORTED_MODULE_7__.InertiaProgress.init({

+ 57
- 24
resources/js/pages/member/Create.vue Целия файл

@@ -2,6 +2,7 @@
2 2
 import { computed, watch, reactive } from 'vue'
3 3
 import { Inertia } from '@inertiajs/inertia'
4 4
 import { Head, useForm, usePage } from '@inertiajs/inertia-vue3'
5
+import { useConfirm } from 'primevue/useconfirm'
5 6
 import AppLayout from '@/layouts/AppLayout.vue'
6 7
 import AppDropdown from '@/components/AppDropdown.vue'
7 8
 import AppInputText from '@/components/AppInputText.vue'
@@ -31,33 +32,50 @@ const listPlatNumberOnDelete = (index) => {
31 32
   usePage().props.value.errors = {}
32 33
 }
33 34
 
34
-const addPlatNumber = () => {
35
-  form.clearErrors('plat_number', 'max_vehicle_id')
36
-
35
+const addPlatNumberValidation = () => {
37 36
   if (!form.plat_number) {
38 37
     form.setError('plat_number', 'Plat kendaraan tidak boleh kosong')
39
-    return
38
+    return {
39
+      error: true,
40
+    }
40 41
   }
41 42
 
42 43
   if (!form.max_vehicle_id) {
43 44
     form.setError('max_vehicle_id', 'Tidak boleh kosong')
44
-    return
45
+    return {
46
+      error: true,
47
+    }
45 48
   }
46 49
 
47 50
   const listPlatNumberExist = listPlatNumber.filter((val) => val.platNumber === form.plat_number.toUpperCase())
48 51
   if (listPlatNumberExist.length) {
49 52
     form.setError('plat_number', 'Nomor plat kendaraan tidak boleh sama')
50
-    return
53
+    return {
54
+      error: true,
55
+    }
51 56
   }
52 57
 
53 58
   const maxVehicles = listPlatNumber.filter((val) => val.maxVehicleId === form.max_vehicle_id)
54 59
   if (maxVehicles.length) {
55 60
     if (maxVehicles.length + 1 > maxVehicles[0].maxVehicle) {
56 61
       form.setError('plat_number', 'Melibihi batas maksimal kendaraan')
57
-      return
62
+      return {
63
+        error: true,
64
+      }
58 65
     }
59 66
   }
60 67
 
68
+  return { error: false }
69
+}
70
+
71
+const addPlatNumber = () => {
72
+  form.clearErrors('plat_number', 'max_vehicle_id')
73
+
74
+  const validation = addPlatNumberValidation()
75
+  if (validation.error) {
76
+    return
77
+  }
78
+
61 79
   const typeVehicle = props.typeMember.maxVehicles.filter((val) => val.value === form.max_vehicle_id)[0]
62 80
   listPlatNumber.push({
63 81
     platNumber: form.plat_number.toUpperCase(),
@@ -88,24 +106,37 @@ watch(
88 106
   }
89 107
 )
90 108
 
109
+const confirm = useConfirm()
110
+
91 111
 const submit = () => {
92
-  form
93
-    .transform((data) => ({
94
-      name: data.name,
95
-      phone: data.phone,
96
-      vehicles: listPlatNumber,
97
-      type_member_id: data.type_member_id,
98
-    }))
99
-    .post(route('members.store'), {
100
-      onError: () => {
101
-        Inertia.reload({ only: ['typeMember'], data: { id: form.type_member_id } })
102
-      },
103
-      onSuccess: () => {
104
-        listPlatNumberClear()
105
-
106
-        form.reset()
107
-      },
108
-    })
112
+  confirm.require({
113
+    message: `Tagihan dikenakan untuk member baru sebesar ${props.typeMember.price}`,
114
+    header: 'Tagihan',
115
+    acceptLabel: 'Bayar dan simpan',
116
+    rejectLabel: 'Batalkan',
117
+    accept: () => {
118
+      form
119
+        .transform((data) => ({
120
+          name: data.name,
121
+          phone: data.phone,
122
+          vehicles: listPlatNumber,
123
+          type_member_id: data.type_member_id,
124
+        }))
125
+        .post(route('members.store'), {
126
+          onError: () => {
127
+            Inertia.reload({ only: ['typeMember'], data: { id: form.type_member_id } })
128
+          },
129
+          onSuccess: () => {
130
+            listPlatNumberClear()
131
+
132
+            form.reset()
133
+          },
134
+        })
135
+    },
136
+    reject: () => {
137
+      console.info('transaksi digagalkan')
138
+    },
139
+  })
109 140
 }
110 141
 </script>
111 142
 
@@ -113,6 +144,8 @@ const submit = () => {
113 144
   <Head title="Tambah Member" />
114 145
 
115 146
   <AppLayout>
147
+    <ConfirmDialog></ConfirmDialog>
148
+
116 149
     <div class="grid">
117 150
       <div class="col-12 md:col-8">
118 151
         <Card>

+ 103
- 22
resources/js/pages/member/Edit.vue Целия файл

@@ -1,9 +1,10 @@
1 1
 <script setup>
2
-import { computed, watch, ref, reactive, onMounted } from 'vue'
2
+import { computed, watch, reactive, ref, onMounted } from 'vue'
3 3
 import { Inertia } from '@inertiajs/inertia'
4 4
 import { Head, useForm, usePage } from '@inertiajs/inertia-vue3'
5
+import { groupBy } from 'lodash'
6
+import { useConfirm } from 'primevue/useconfirm'
5 7
 import AppLayout from '@/layouts/AppLayout.vue'
6
-import AppDialog from '@/components/AppDialog.vue'
7 8
 import AppDropdown from '@/components/AppDropdown.vue'
8 9
 import AppInputText from '@/components/AppInputText.vue'
9 10
 
@@ -21,12 +22,12 @@ watch(errors, () => {
21 22
   form.clearErrors()
22 23
 })
23 24
 
25
+const listPlatNumber = reactive([])
26
+
24 27
 onMounted(() => {
25 28
   props.member.vehicles.forEach((val) => listPlatNumber.push(val))
26 29
 })
27 30
 
28
-const listPlatNumber = reactive([])
29
-
30 31
 const listPlatNumberClear = () => {
31 32
   listPlatNumber.splice(0)
32 33
 }
@@ -37,33 +38,50 @@ const listPlatNumberOnDelete = (index) => {
37 38
   usePage().props.value.errors = {}
38 39
 }
39 40
 
40
-const addPlatNumber = () => {
41
-  form.clearErrors('plat_number', 'max_vehicle_id')
42
-
41
+const addPlatNumberValidation = () => {
43 42
   if (!form.plat_number) {
44 43
     form.setError('plat_number', 'Plat kendaraan tidak boleh kosong')
45
-    return
44
+    return {
45
+      error: true,
46
+    }
46 47
   }
47 48
 
48 49
   if (!form.max_vehicle_id) {
49 50
     form.setError('max_vehicle_id', 'Tidak boleh kosong')
50
-    return
51
+    return {
52
+      error: true,
53
+    }
51 54
   }
52 55
 
53 56
   const listPlatNumberExist = listPlatNumber.filter((val) => val.platNumber === form.plat_number.toUpperCase())
54 57
   if (listPlatNumberExist.length) {
55 58
     form.setError('plat_number', 'Nomor plat kendaraan tidak boleh sama')
56
-    return
59
+    return {
60
+      error: true,
61
+    }
57 62
   }
58 63
 
59 64
   const maxVehicles = listPlatNumber.filter((val) => val.maxVehicleId === form.max_vehicle_id)
60 65
   if (maxVehicles.length) {
61 66
     if (maxVehicles.length + 1 > maxVehicles[0].maxVehicle) {
62 67
       form.setError('plat_number', 'Melibihi batas maksimal kendaraan')
63
-      return
68
+      return {
69
+        error: true,
70
+      }
64 71
     }
65 72
   }
66 73
 
74
+  return { error: false }
75
+}
76
+
77
+const addPlatNumber = () => {
78
+  form.clearErrors('plat_number', 'max_vehicle_id')
79
+
80
+  const validation = addPlatNumberValidation()
81
+  if (validation.error) {
82
+    return
83
+  }
84
+
67 85
   const typeVehicle = props.typeMember.maxVehicles.filter((val) => val.value === form.max_vehicle_id)[0]
68 86
   listPlatNumber.push({
69 87
     platNumber: form.plat_number.toUpperCase(),
@@ -76,16 +94,6 @@ const addPlatNumber = () => {
76 94
   form.reset('plat_number', 'max_vehicle_id')
77 95
 }
78 96
 
79
-const visibleDialog = ref(false)
80
-
81
-const confirmDialog = () => {
82
-  visibleDialog.value = true
83
-}
84
-
85
-const onAgree = () => Inertia.delete(route('members.destroy', props.member.id))
86
-
87
-const onCancel = () => (visibleDialog.value = false)
88
-
89 97
 const form = useForm({
90 98
   name: props.member.name,
91 99
   phone: props.member.phone,
@@ -104,7 +112,45 @@ watch(
104 112
   }
105 113
 )
106 114
 
107
-const submit = () => {
115
+const errorSubmitVisible = ref(false)
116
+
117
+const errorSubmitText = ref()
118
+
119
+const submitValidation = () => {
120
+  const listPlatNumberGroup = groupBy(listPlatNumber, 'typeVehicleId')
121
+  const listVehicles = []
122
+  const error = ref(false)
123
+
124
+  for (let key in listPlatNumberGroup) {
125
+    listVehicles.push({
126
+      typeVehicleId: listPlatNumberGroup[key][0]['typeVehicleId'],
127
+      maxVehicle: listPlatNumberGroup[key][0]['maxVehicle'],
128
+      count: listPlatNumberGroup[key].length,
129
+    })
130
+  }
131
+
132
+  listVehicles.forEach((val) => {
133
+    if (val.count > val.maxVehicle) {
134
+      errorSubmitVisible.value = true
135
+      errorSubmitText.value = 'Ada perubahan pada batas maksimal kendaraan'
136
+      error.value = true
137
+    }
138
+  })
139
+
140
+  if (error.value) {
141
+    return {
142
+      error: true,
143
+    }
144
+  } else {
145
+    return {
146
+      error: false,
147
+    }
148
+  }
149
+}
150
+
151
+const confirm = useConfirm()
152
+
153
+const formSent = () => {
108 154
   form
109 155
     .transform((data) => ({
110 156
       name: data.name,
@@ -114,12 +160,38 @@ const submit = () => {
114 160
     }))
115 161
     .put(route('members.update', props.member.id))
116 162
 }
163
+
164
+const submit = () => {
165
+  const validation = submitValidation()
166
+  if (validation.error) {
167
+    return
168
+  }
169
+
170
+  if (props.member.typeMemberId != form.type_member_id) {
171
+    confirm.require({
172
+      message: `Tagihan dikenakan untuk jenis member yang berbeda sebesar ${props.typeMember.price}`,
173
+      header: 'Tagihan',
174
+      acceptLabel: 'Bayar dan simpan',
175
+      rejectLabel: 'Batalkan',
176
+      accept: () => {
177
+        formSent()
178
+      },
179
+      reject: () => {
180
+        console.info('transaksi digagalkan')
181
+      },
182
+    })
183
+  } else {
184
+    formSent()
185
+  }
186
+}
117 187
 </script>
118 188
 
119 189
 <template>
120 190
   <Head title="Ubah Member" />
121 191
 
122 192
   <AppLayout>
193
+    <ConfirmDialog></ConfirmDialog>
194
+
123 195
     <div class="grid">
124 196
       <div class="col-12 md:col-8">
125 197
         <Card>
@@ -261,5 +333,14 @@ const submit = () => {
261 333
         </Card>
262 334
       </div>
263 335
     </div>
336
+
337
+    <Dialog
338
+      header="Error"
339
+      v-model:visible="errorSubmitVisible"
340
+      :style="{ width: '40vw' }"
341
+      contentStyle="color: #b71c1c"
342
+    >
343
+      <p>{{ errorSubmitText }}</p>
344
+    </Dialog>
264 345
   </AppLayout>
265 346
 </template>

+ 4
- 0
resources/js/vue.js Целия файл

@@ -16,6 +16,8 @@ import Calendar from 'primevue/calendar'
16 16
 import Card from 'primevue/card'
17 17
 import Chart from 'primevue/chart'
18 18
 import Column from 'primevue/column'
19
+import ConfirmationService from 'primevue/confirmationservice'
20
+import ConfirmDialog from 'primevue/confirmdialog'
19 21
 import DataTable from 'primevue/datatable'
20 22
 import Dialog from 'primevue/dialog'
21 23
 import Divider from 'primevue/divider'
@@ -39,6 +41,7 @@ createInertiaApp({
39 41
     createApp({ render: () => h(App, props) })
40 42
       .use(plugin)
41 43
       .use(PrimeVue, { ripple: true })
44
+      .use(ConfirmationService)
42 45
       .mixin({ methods: { route } })
43 46
       .directive('styleclass', StyleClass)
44 47
       .directive('ripple', Ripple)
@@ -50,6 +53,7 @@ createInertiaApp({
50 53
       .component('Calendar', Calendar)
51 54
       .component('Chart', Chart)
52 55
       .component('Column', Column)
56
+      .component('ConfirmDialog', ConfirmDialog)
53 57
       .component('DataTable', DataTable)
54 58
       .component('Dialog', Dialog)
55 59
       .component('Divider', Divider)