Selaa lähdekoodia

refactor: laundry master

Muhammad Iqbal Afandi 3 vuotta sitten
vanhempi
commit
1e44fea4ca

+ 802
- 1095
public/js/resources_js_pages_laundry_Create_vue.js
File diff suppressed because it is too large
Näytä tiedosto


+ 961
- 1441
public/js/resources_js_pages_laundry_Edit_vue.js
File diff suppressed because it is too large
Näytä tiedosto


+ 722
- 1249
public/js/resources_js_pages_laundry_Index_vue.js
File diff suppressed because it is too large
Näytä tiedosto


+ 27
- 0
public/js/resources_js_pages_laundry_TableHeader_js.js Näytä tiedosto

@@ -0,0 +1,27 @@
1
+"use strict";
2
+(self["webpackChunk"] = self["webpackChunk"] || []).push([["resources_js_pages_laundry_TableHeader_js"],{
3
+
4
+/***/ "./resources/js/pages/laundry/TableHeader.js":
5
+/*!***************************************************!*\
6
+  !*** ./resources/js/pages/laundry/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: 'name',
16
+  header: 'Nama'
17
+}, {
18
+  field: 'price',
19
+  header: 'Harga'
20
+}, {
21
+  field: 'unit',
22
+  header: 'Satuan'
23
+}]);
24
+
25
+/***/ })
26
+
27
+}]);

+ 9
- 1
public/js/vue.js Näytä tiedosto

@@ -49318,6 +49318,14 @@ var map = {
49318 49318
 		"./resources/js/pages/laundry/Index.vue",
49319 49319
 		"resources_js_pages_laundry_Index_vue"
49320 49320
 	],
49321
+	"./laundry/TableHeader": [
49322
+		"./resources/js/pages/laundry/TableHeader.js",
49323
+		"resources_js_pages_laundry_TableHeader_js"
49324
+	],
49325
+	"./laundry/TableHeader.js": [
49326
+		"./resources/js/pages/laundry/TableHeader.js",
49327
+		"resources_js_pages_laundry_TableHeader_js"
49328
+	],
49321 49329
 	"./outlet/Create": [
49322 49330
 		"./resources/js/pages/outlet/Create.vue",
49323 49331
 		"resources_js_pages_outlet_Create_vue"
@@ -49499,7 +49507,7 @@ module.exports = JSON.parse('{"name":"axios","version":"0.21.4","description":"P
49499 49507
 /******/ 		// This function allow to reference async chunks
49500 49508
 /******/ 		__webpack_require__.u = (chunkId) => {
49501 49509
 /******/ 			// return url for filenames based on template
49502
-/******/ 			return "js/" + chunkId + ".js?id=" + {"resources_js_pages_auth_ForgotPassword_vue":"30c9f46c66d8a730","resources_js_pages_auth_Login_vue":"83c27ad5e582a71f","resources_js_pages_auth_ResetPassword_vue":"fee80cdfce4206fb","resources_js_pages_auth_VerifyEmail_vue":"632c69e9e8e9c0af","resources_js_pages_customer_Create_vue":"935626d17b99c29a","resources_js_pages_customer_Edit_vue":"986cfff059399280","resources_js_pages_customer_Index_vue":"89afeac23faa853b","resources_js_pages_customer_TableHeader_js":"be6685f342bbd7c2","resources_js_pages_laundry_Create_vue":"caa3a15d5de03139","resources_js_pages_laundry_Edit_vue":"0a5134292fb1ca38","resources_js_pages_laundry_Index_vue":"00bc6dad90bff53d","resources_js_pages_outlet_Create_vue":"5c72446fc4abfb32","resources_js_pages_outlet_Edit_vue":"458b77e9d1813ab9","resources_js_pages_outlet_Index_vue":"19e833b73f2287ff","resources_js_pages_outlet_TableHeader_js":"960433b5f8e003c1","resources_js_pages_user_Create_vue":"9a026560c48a81c6","resources_js_pages_user_Edit_vue":"5910e5432eeceb00","resources_js_pages_user_Index_vue":"3dc5212ff1dc0b19","resources_js_pages_user_TableHeader_js":"c19ccf0fa7c2fb2b"}[chunkId] + "";
49510
+/******/ 			return "js/" + chunkId + ".js?id=" + {"resources_js_pages_auth_ForgotPassword_vue":"30c9f46c66d8a730","resources_js_pages_auth_Login_vue":"83c27ad5e582a71f","resources_js_pages_auth_ResetPassword_vue":"fee80cdfce4206fb","resources_js_pages_auth_VerifyEmail_vue":"632c69e9e8e9c0af","resources_js_pages_customer_Create_vue":"935626d17b99c29a","resources_js_pages_customer_Edit_vue":"986cfff059399280","resources_js_pages_customer_Index_vue":"89afeac23faa853b","resources_js_pages_customer_TableHeader_js":"be6685f342bbd7c2","resources_js_pages_laundry_Create_vue":"bc874286cd673c41","resources_js_pages_laundry_Edit_vue":"d7b5086ab3df24d0","resources_js_pages_laundry_Index_vue":"fbee86c7c6eb4e71","resources_js_pages_laundry_TableHeader_js":"494e577855bbcaf6","resources_js_pages_outlet_Create_vue":"5c72446fc4abfb32","resources_js_pages_outlet_Edit_vue":"458b77e9d1813ab9","resources_js_pages_outlet_Index_vue":"19e833b73f2287ff","resources_js_pages_outlet_TableHeader_js":"960433b5f8e003c1","resources_js_pages_user_Create_vue":"9a026560c48a81c6","resources_js_pages_user_Edit_vue":"5910e5432eeceb00","resources_js_pages_user_Index_vue":"3dc5212ff1dc0b19","resources_js_pages_user_TableHeader_js":"c19ccf0fa7c2fb2b"}[chunkId] + "";
49503 49511
 /******/ 		};
49504 49512
 /******/ 	})();
49505 49513
 /******/ 	

+ 0
- 1
resources/js/pages/customer/Index.vue Näytä tiedosto

@@ -1,6 +1,5 @@
1 1
 <script setup>
2 2
 import { Head, Link } from '@inertiajs/inertia-vue3'
3
-
4 3
 import AppButton from '@/components/AppButton.vue'
5 4
 import AppPagination from '@/components/AppPagination.vue'
6 5
 import AppLayout from '@/layouts/AppLayout.vue'

+ 32
- 31
resources/js/pages/laundry/Create.vue Näytä tiedosto

@@ -1,9 +1,8 @@
1 1
 <script setup>
2 2
 import { Head, useForm } from '@inertiajs/inertia-vue3'
3
-
4
-import AppButtonCreate from '@/components/AppButtonCreate.vue'
5
-import AppTextInput from '@/components/AppTextInput.vue'
6
-import DefaultLayout from '@/layouts/DefaultLayout.vue'
3
+import AppButton from '@/components/AppButton.vue'
4
+import AppInputText from '@/components/AppInputText.vue'
5
+import AppLayout from '@/layouts/AppLayout.vue'
7 6
 
8 7
 const form = useForm({
9 8
   name: '',
@@ -19,31 +18,33 @@ const submit = () => {
19 18
 <template>
20 19
   <Head title="Tambah tipe Laundry" />
21 20
 
22
-  <DefaultLayout>
23
-    <CRow>
24
-      <CCol md="8">
25
-        <CCard color="light" class="border-light">
26
-          <CForm @submit.prevent="submit">
27
-            <CRow class="p-4">
28
-              <CCol md="6" class="mb-4">
29
-                <AppTextInput label="Nama" placeholder="nama" :error="form.errors.name" v-model="form.name" />
30
-              </CCol>
31
-
32
-              <CCol md="6" class="mb-4">
33
-                <AppTextInput label="Harga" placeholder="harga" :error="form.errors.price" v-model="form.price" />
34
-              </CCol>
35
-
36
-              <CCol md="6" class="mb-4">
37
-                <AppTextInput label="Satuan" placeholder="unit" :error="form.errors.unit" v-model="form.unit" />
38
-              </CCol>
39
-            </CRow>
40
-
41
-            <CCardFooter class="d-flex justify-content-end">
42
-              <AppButtonCreate :disabled="form.processing">Tambah tipe Laundry</AppButtonCreate>
43
-            </CCardFooter>
44
-          </CForm>
45
-        </CCard>
46
-      </CCol>
47
-    </CRow>
48
-  </DefaultLayout>
21
+  <AppLayout>
22
+    <div class="grid">
23
+      <div class="col-12 lg:col-8">
24
+        <Card>
25
+          <template #content>
26
+            <div class="grid">
27
+              <div class="col-12 md:col-6">
28
+                <AppInputText label="Nama" placeholder="nama" :error="form.errors.name" v-model="form.name" />
29
+              </div>
30
+
31
+              <div class="col-12 md:col-6">
32
+                <AppInputText label="Harga" placeholder="harga" :error="form.errors.price" v-model="form.price" />
33
+              </div>
34
+
35
+              <div class="col-12 md:col-6">
36
+                <AppInputText label="Satuan" placeholder="satuan" :error="form.errors.unit" v-model="form.unit" />
37
+              </div>
38
+            </div>
39
+          </template>
40
+
41
+          <template #footer>
42
+            <div class="flex justify-content-end">
43
+              <AppButton @click="submit" label="Simpan" icon="pi pi-check" />
44
+            </div>
45
+          </template>
46
+        </Card>
47
+      </div>
48
+    </div>
49
+  </AppLayout>
49 50
 </template>

+ 51
- 39
resources/js/pages/laundry/Edit.vue Näytä tiedosto

@@ -1,12 +1,11 @@
1 1
 <script setup>
2
+import { ref } from 'vue'
3
+import { Inertia } from '@inertiajs/inertia'
2 4
 import { Head, useForm } from '@inertiajs/inertia-vue3'
3
-
4
-import AppTextInput from '@/components/AppTextInput.vue'
5
-import AppButtonCreate from '@/components/AppButtonCreate.vue'
6
-import AppButtonDelete from '@/components/AppButtonDelete.vue'
7
-import AppButtonAction from '@/components/AppButtonAction.vue'
8
-import AppModalAlert from '@/components/AppModalAlert.vue'
9
-import DefaultLayout from '@/layouts/DefaultLayout.vue'
5
+import AppButton from '@/components/AppButton.vue'
6
+import AppInputText from '@/components/AppInputText.vue'
7
+import AppDialog from '@/components/AppDialog.vue'
8
+import AppLayout from '@/layouts/AppLayout.vue'
10 9
 
11 10
 const props = defineProps({
12 11
   laundry: Object,
@@ -21,46 +20,59 @@ const form = useForm({
21 20
 const submit = () => {
22 21
   form.put(route('laundries.update', props.laundry.id))
23 22
 }
23
+
24
+const visibleDialog = ref(false)
25
+
26
+const confirmDialog = () => {
27
+  visibleDialog.value = true
28
+}
29
+
30
+const onAgree = (id) => Inertia.delete(route('laundries.destroy', id))
31
+
32
+const onCancel = () => (visibleDialog.value = false)
24 33
 </script>
25 34
 
26 35
 <template>
27 36
   <Head title="Ubah tipe Laundry" />
28 37
 
29
-  <DefaultLayout v-slot="{ toggleModalAlert }">
30
-    <CRow>
31
-      <CCol md="8">
32
-        <CCard color="light" class="border-light">
33
-          <CForm @submit.prevent="submit">
34
-            <CRow class="p-4">
35
-              <CCol md="6" class="mb-4">
36
-                <AppTextInput label="Nama" placeholder="nama" :error="form.errors.name" v-model="form.name" />
37
-              </CCol>
38
-
39
-              <CCol md="6" class="mb-4">
40
-                <AppTextInput label="Harga" placeholder="harga" :error="form.errors.price" v-model="form.price" />
41
-              </CCol>
38
+  <AppLayout>
39
+    <div class="grid">
40
+      <div class="col-12 lg:col-8">
41
+        <Card>
42
+          <template #content>
43
+            <div class="grid">
44
+              <div class="col-12 md:col-6">
45
+                <AppInputText label="Nama" placeholder="nama" :error="form.errors.name" v-model="form.name" />
46
+              </div>
42 47
 
43
-              <CCol md="6" class="mb-4">
44
-                <AppTextInput label="Satuan" placeholder="unit" :error="form.errors.unit" v-model="form.unit" />
45
-              </CCol>
46
-            </CRow>
48
+              <div class="col-12 md:col-6">
49
+                <AppInputText label="Harga" placeholder="harga" :error="form.errors.price" v-model="form.price" />
50
+              </div>
47 51
 
48
-            <CCardFooter class="d-flex justify-content-between">
49
-              <AppButtonAction @click="toggleModalAlert">Hapus tipe Laundry</AppButtonAction>
52
+              <div class="col-12 md:col-6">
53
+                <AppInputText label="Satuan" placeholder="satuan" :error="form.errors.unit" v-model="form.unit" />
54
+              </div>
55
+            </div>
56
+          </template>
50 57
 
51
-              <AppModalAlert>
52
-                Anda yakin ingin mengahapus tipe laundry ini?
58
+          <template #footer>
59
+            <div
60
+              class="flex flex-column sm:flex-row align-items-center sm:justify-content-center sm:justify-content-between"
61
+            >
62
+              <AppDialog
63
+                message="Yakin akan menghapus data ini?"
64
+                v-model:visible="visibleDialog"
65
+                @agree="onAgree(laundry.id)"
66
+                @cancel="onCancel"
67
+              />
53 68
 
54
-                <template #footer>
55
-                  <AppButtonDelete :href="route('laundries.destroy', laundry.id)">Hapus tipe Laundry</AppButtonDelete>
56
-                </template>
57
-              </AppModalAlert>
69
+              <Button label="Hapus" icon="pi pi-trash" class="p-button-text p-button-danger" @click="confirmDialog" />
58 70
 
59
-              <AppButtonCreate :disabled="form.processing">Ubah tipe Laundry</AppButtonCreate>
60
-            </CCardFooter>
61
-          </CForm>
62
-        </CCard>
63
-      </CCol>
64
-    </CRow>
65
-  </DefaultLayout>
71
+              <AppButton @click="submit" label="Simpan" icon="pi pi-check" />
72
+            </div>
73
+          </template>
74
+        </Card>
75
+      </div>
76
+    </div>
77
+  </AppLayout>
66 78
 </template>

+ 51
- 43
resources/js/pages/laundry/Index.vue Näytä tiedosto

@@ -1,11 +1,10 @@
1 1
 <script setup>
2
-import { Head } from '@inertiajs/inertia-vue3'
3
-
4
-import AppTable from '@/components/AppTable.vue'
5
-import AppButtonMove from '@/components/AppButtonMove.vue'
6
-import AppButtonDetail from '@/components/AppButtonDetail.vue'
2
+import { Head, Link } from '@inertiajs/inertia-vue3'
3
+import AppButton from '@/components/AppButton.vue'
7 4
 import AppPagination from '@/components/AppPagination.vue'
8
-import DefaultLayout from '@/layouts/DefaultLayout.vue'
5
+import AppLayout from '@/layouts/AppLayout.vue'
6
+
7
+import TableHeader from './TableHeader'
9 8
 
10 9
 defineProps({
11 10
   laundries: Object,
@@ -15,41 +14,50 @@ defineProps({
15 14
 <template>
16 15
   <Head title="Daftar Tipe Laundry" />
17 16
 
18
-  <DefaultLayout>
19
-    <CRow class="mb-4">
20
-      <CCol></CCol>
21
-
22
-      <CCol xs="auto">
23
-        <AppButtonMove :href="route('laundries.create')">Tambah tipe Laundry</AppButtonMove>
24
-      </CCol>
25
-    </CRow>
26
-
27
-    <CRow>
28
-      <CCol>
29
-        <AppTable>
30
-          <template #table-head>
31
-            <CTableRow>
32
-              <CTableHeaderCell>Nama</CTableHeaderCell>
33
-              <CTableHeaderCell>Harga</CTableHeaderCell>
34
-              <CTableHeaderCell>Satuan</CTableHeaderCell>
35
-            </CTableRow>
36
-          </template>
37
-          <template #table-body>
38
-            <CTableRow v-for="laundry in laundries.data" :key="laundry.id">
39
-              <CTableDataCell>{{ laundry.name }}</CTableDataCell>
40
-              <CTableDataCell>{{ laundry.price }}</CTableDataCell>
41
-              <CTableDataCell>{{ laundry.unit }}</CTableDataCell>
42
-              <CTableDataCell>
43
-                <AppButtonDetail :href="route('laundries.edit', laundry.id)" />
44
-              </CTableDataCell>
45
-            </CTableRow>
46
-          </template>
47
-        </AppTable>
48
-      </CCol>
49
-    </CRow>
50
-
51
-    <CRow>
52
-      <AppPagination :links="laundries.links" />
53
-    </CRow>
54
-  </DefaultLayout>
17
+  <AppLayout>
18
+    <DataTable
19
+      responsiveLayout="scroll"
20
+      columnResizeMode="expand"
21
+      :value="laundries.data"
22
+      :rowHover="true"
23
+      :stripedRows="true"
24
+    >
25
+      <template #header>
26
+        <div class="grid">
27
+          <div class="col-12 md:col-6">
28
+            <div class="flex align-items-center">
29
+              <h5 class="mr-3 mb-0">Laundry</h5>
30
+
31
+              <InputText class="w-full md:w-27rem" placeholder="cari..." />
32
+            </div>
33
+          </div>
34
+
35
+          <div class="col-12 md:col-6 flex justify-content-end">
36
+            <AppButton :href="route('laundries.create')" label="Tambah Laundry" icon="pi pi-pencil" />
37
+          </div>
38
+        </div>
39
+      </template>
40
+
41
+      <Column
42
+        v-for="tableHeader in TableHeader"
43
+        :field="tableHeader.field"
44
+        :header="tableHeader.header"
45
+        :key="tableHeader.field"
46
+      />
47
+
48
+      <Column>
49
+        <template #body="{ data }">
50
+          <Link
51
+            as="button"
52
+            :href="route('laundries.edit', data.id)"
53
+            class="p-button p-component p-button-icon-only p-button-rounded p-button-text"
54
+          >
55
+            <i class="pi pi-angle-double-right p-button-icon"></i>
56
+          </Link>
57
+        </template>
58
+      </Column>
59
+    </DataTable>
60
+
61
+    <AppPagination :links="laundries.links" />
62
+  </AppLayout>
55 63
 </template>

+ 5
- 0
resources/js/pages/laundry/TableHeader.js Näytä tiedosto

@@ -0,0 +1,5 @@
1
+export default [
2
+  { field: 'name', header: 'Nama' },
3
+  { field: 'price', header: 'Harga' },
4
+  { field: 'unit', header: 'Satuan' },
5
+]