Commit 1b34bb1c authored by lydxa01's avatar lydxa01
Browse files

coba

parents a010cf7c 7a1a6513
Showing with 688 additions and 131 deletions
+688 -131
...@@ -4,8 +4,9 @@ ...@@ -4,8 +4,9 @@
namespace App\Http\Controllers\CRUD; namespace App\Http\Controllers\CRUD;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Models\Alat;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
use App\Models\Alat;
use App\Models\JenisAlat;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
...@@ -26,6 +27,7 @@ class AlatController extends Controller ...@@ -26,6 +27,7 @@ class AlatController extends Controller
'kondisi' => 'required', 'kondisi' => 'required',
'id_jenis_alat' => 'required', 'id_jenis_alat' => 'required',
'id_ruang' => 'required', 'id_ruang' => 'required',
'tahun' => 'required',
]); ]);
if ($validator->fails()) { if ($validator->fails()) {
...@@ -37,8 +39,16 @@ class AlatController extends Controller ...@@ -37,8 +39,16 @@ class AlatController extends Controller
'kondisi' => $request->kondisi, 'kondisi' => $request->kondisi,
'id_jenis_alat' => $request->id_jenis_alat, 'id_jenis_alat' => $request->id_jenis_alat,
'id_ruang' => $request->id_ruang, 'id_ruang' => $request->id_ruang,
'tahun' => $request->tahun,
]); ]);
$jenisAlat = JenisAlat::find($request->id_jenis_alat);
if ($request->kondisi == 'rusak') {
if ($jenisAlat->stok > 0) {
$jenisAlat->decrement('stok');
}
}
return response()->json(['message' => 'Alat berhasil ditambahkan']); return response()->json(['message' => 'Alat berhasil ditambahkan']);
} }
...@@ -63,6 +73,7 @@ class AlatController extends Controller ...@@ -63,6 +73,7 @@ class AlatController extends Controller
'kondisi' => 'required', 'kondisi' => 'required',
'id_jenis_alat' => 'required', 'id_jenis_alat' => 'required',
'id_ruang' => 'required', 'id_ruang' => 'required',
'tahun' => 'required',
]); ]);
if ($validator->fails()) { if ($validator->fails()) {
...@@ -74,10 +85,18 @@ class AlatController extends Controller ...@@ -74,10 +85,18 @@ class AlatController extends Controller
'kondisi' => $request->kondisi, 'kondisi' => $request->kondisi,
'id_jenis_alat' => $request->id_jenis_alat, 'id_jenis_alat' => $request->id_jenis_alat,
'id_ruang' => $request->id_ruang, 'id_ruang' => $request->id_ruang,
'tahun' => $request->tahun,
]; ];
$db_alat->update($data); $db_alat->update($data);
$jenisAlat = JenisAlat::find($request->id_jenis_alat);
if ($request->kondisi == 'rusak') {
if ($jenisAlat->stok > 0) {
$jenisAlat->decrement('stok');
}
}
return response()->json(['message' => 'Alat berhasil diupdate'], 200); return response()->json(['message' => 'Alat berhasil diupdate'], 200);
} }
......
...@@ -12,7 +12,10 @@ ...@@ -12,7 +12,10 @@
"@fortawesome/fontawesome-svg-core": "^6.5.2", "@fortawesome/fontawesome-svg-core": "^6.5.2",
"@fortawesome/free-solid-svg-icons": "^6.5.2", "@fortawesome/free-solid-svg-icons": "^6.5.2",
"@fortawesome/vue-fontawesome": "^3.0.8", "@fortawesome/vue-fontawesome": "^3.0.8",
<<<<<<< HEAD
"@popperjs/core": "^2.11.8", "@popperjs/core": "^2.11.8",
=======
>>>>>>> dhilaaaaa
"axios": "^1.6.8", "axios": "^1.6.8",
"bootstrap": "^5.3.3", "bootstrap": "^5.3.3",
"bootstrap-vue": "^2.23.1", "bootstrap-vue": "^2.23.1",
......
...@@ -12,7 +12,10 @@ ...@@ -12,7 +12,10 @@
"@fortawesome/fontawesome-svg-core": "^6.5.2", "@fortawesome/fontawesome-svg-core": "^6.5.2",
"@fortawesome/free-solid-svg-icons": "^6.5.2", "@fortawesome/free-solid-svg-icons": "^6.5.2",
"@fortawesome/vue-fontawesome": "^3.0.8", "@fortawesome/vue-fontawesome": "^3.0.8",
<<<<<<< HEAD
"@popperjs/core": "^2.11.8", "@popperjs/core": "^2.11.8",
=======
>>>>>>> dhilaaaaa
"axios": "^1.6.8", "axios": "^1.6.8",
"bootstrap": "^5.3.3", "bootstrap": "^5.3.3",
"bootstrap-vue": "^2.23.1", "bootstrap-vue": "^2.23.1",
......
...@@ -12,14 +12,25 @@ ...@@ -12,14 +12,25 @@
<title>APLAB</title> <title>APLAB</title>
<!-- Custom fonts for this template--> <!-- Custom fonts for this template-->
<<<<<<< HEAD
<link href="assets/vendor/fontawesome-free/css/all.min.css" rel="stylesheet" type="text/css"> <link href="assets/vendor/fontawesome-free/css/all.min.css" rel="stylesheet" type="text/css">
=======
<link href="../../assets/vendor/fontawesome-free/css/all.min.css" rel="stylesheet" type="text/css">
>>>>>>> dhilaaaaa
<link <link
href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i" href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i"
rel="stylesheet"> rel="stylesheet">
<!-- Custom styles for this template--> <!-- Custom styles for this template-->
<<<<<<< HEAD
<link href="assets/css/sb-admin-2.min.css" rel="stylesheet"> <link href="assets/css/sb-admin-2.min.css" rel="stylesheet">
=======
<link href="../../assets/css/sb-admin-2.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
>>>>>>> dhilaaaaa
</head> </head>
<body> <body>
...@@ -28,6 +39,11 @@ ...@@ -28,6 +39,11 @@
</noscript> </noscript>
<div id="app"></div> <div id="app"></div>
<!-- Bootstrap core JavaScript--> <!-- Bootstrap core JavaScript-->
<<<<<<< HEAD
=======
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.bundle.min.js"></script>
>>>>>>> dhilaaaaa
<script src="../../assets/vendor/jquery/jquery.min.js"></script> <script src="../../assets/vendor/jquery/jquery.min.js"></script>
<script src="../../assets/vendor/bootstrap/js/bootstrap.bundle.min.js"></script> <script src="../../assets/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
<script src="../../assets/vendor/jquery-easing/jquery.easing.min.js"></script> <script src="../../assets/vendor/jquery-easing/jquery.easing.min.js"></script>
......
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title><%= htmlWebpackPlugin.options.title %></title>
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
...@@ -14,6 +14,7 @@ export default { ...@@ -14,6 +14,7 @@ export default {
</script> </script>
<style> <style>
@import '@fortawesome/fontawesome-free/css/all.css';
/* Gaya CSS untuk App.vue jika diperlukan */ /* Gaya CSS untuk App.vue jika diperlukan */
@import "~bootstrap/dist/css/bootstrap.css"; @import "~bootstrap/dist/css/bootstrap.css";
</style> </style>
...@@ -7,21 +7,33 @@ ...@@ -7,21 +7,33 @@
$(".sidebar").toggleClass("toggled"); $(".sidebar").toggleClass("toggled");
if ($(".sidebar").hasClass("toggled")) { if ($(".sidebar").hasClass("toggled")) {
$('.sidebar .collapse').collapse('hide'); $('.sidebar .collapse').collapse('hide');
<<<<<<< HEAD
} }
=======
};
>>>>>>> dhilaaaaa
}); });
// Close any open menu accordions when window is resized below 768px // Close any open menu accordions when window is resized below 768px
$(window).resize(function() { $(window).resize(function() {
if ($(window).width() < 768) { if ($(window).width() < 768) {
$('.sidebar .collapse').collapse('hide'); $('.sidebar .collapse').collapse('hide');
<<<<<<< HEAD
} }
=======
};
>>>>>>> dhilaaaaa
// Toggle the side navigation when window is resized below 480px // Toggle the side navigation when window is resized below 480px
if ($(window).width() < 480 && !$(".sidebar").hasClass("toggled")) { if ($(window).width() < 480 && !$(".sidebar").hasClass("toggled")) {
$("body").addClass("sidebar-toggled"); $("body").addClass("sidebar-toggled");
$(".sidebar").addClass("toggled"); $(".sidebar").addClass("toggled");
$('.sidebar .collapse').collapse('hide'); $('.sidebar .collapse').collapse('hide');
<<<<<<< HEAD
} }
=======
};
>>>>>>> dhilaaaaa
}); });
// Prevent the content wrapper from scrolling when the fixed side navigation hovered over // Prevent the content wrapper from scrolling when the fixed side navigation hovered over
......
...@@ -17753,7 +17753,11 @@ var moment = createCommonjsModule(function (module, exports) { ...@@ -17753,7 +17753,11 @@ var moment = createCommonjsModule(function (module, exports) {
} else { } else {
duration.milliseconds = input; duration.milliseconds = input;
} }
<<<<<<< HEAD
} else if (match = aspNetRegex.exec(input)) { } else if (match = aspNetRegex.exec(input)) {
=======
} else if (!!(match = aspNetRegex.exec(input))) {
>>>>>>> dhilaaaaa
sign = (match[1] === '-') ? -1 : 1; sign = (match[1] === '-') ? -1 : 1;
duration = { duration = {
y : 0, y : 0,
...@@ -17763,7 +17767,11 @@ var moment = createCommonjsModule(function (module, exports) { ...@@ -17763,7 +17767,11 @@ var moment = createCommonjsModule(function (module, exports) {
s : toInt(match[SECOND]) * sign, s : toInt(match[SECOND]) * sign,
ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match
}; };
<<<<<<< HEAD
} else if (match = isoRegex.exec(input)) { } else if (match = isoRegex.exec(input)) {
=======
} else if (!!(match = isoRegex.exec(input))) {
>>>>>>> dhilaaaaa
sign = (match[1] === '-') ? -1 : 1; sign = (match[1] === '-') ? -1 : 1;
duration = { duration = {
y : parseIso(match[2], sign), y : parseIso(match[2], sign),
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -629,7 +629,11 @@ ...@@ -629,7 +629,11 @@
console.info(progressIndicator); console.info(progressIndicator);
} }
<<<<<<< HEAD
if (result) { if (result) {
=======
if (!!result) {
>>>>>>> dhilaaaaa
// eslint-disable-line no-extra-boolean-cast // eslint-disable-line no-extra-boolean-cast
resolve(result); resolve(result);
} else { } else {
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
<template> <template>
<div class="container mt-5"> <div id="wrapper">
<div class="row"> <SidebarAdmintes />
<div class="col-md-12"> <div id="content-wrapper" class="service_section layout_padding">
<div class="card border-0 rounded shadow"> <Navbar />
<div class="card-body"> <div class="container mt-5">
<h4>TAMBAH ALAT</h4> <div class="row">
<hr /> <div class="col-md-12">
<div class="card border-0 rounded shadow">
<form @submit.prevent="store"> <div class="card-body">
<h4>TAMBAH ALAT</h4>
<div class="form-group"> <hr />
<label for="no_inventaris" class="font-weight-bold">No Inventaris</label>
<input <form @submit.prevent="store">
type="text"
class="form-control" <div class="form-group">
v-model="post.no_inventaris" <label for="no_inventaris" class="font-weight-bold">No Inventaris</label>
placeholder="Masukkan nomor inventaris alat" <input
/> type="text"
class="form-control"
<div v-if="validation.no_inventaris" class="mt-2 alert alert-danger"> v-model="post.no_inventaris"
{{ validation.no_inventaris[0] }} placeholder="Masukkan nomor inventaris alat"
</div> />
</div>
<div v-if="validation.no_inventaris" class="mt-2 alert alert-danger">
<div class="form-group"> {{ validation.no_inventaris[0] }}
<label for="kondisi" class="font-weight-bold">Kondisi</label> </div>
<input </div>
type="text"
class="form-control" <div class="form-group">
v-model="post.kondisi" <label for="kondisi" class="font-weight-bold">Kondisi</label>
placeholder="Masukkan kondisi alat" <div class="form-check">
/> <input
class="form-check-input"
<div v-if="validation.kondisi" class="mt-2 alert alert-danger"> type="radio"
{{ validation.kondisi[0] }} name="kondisi"
</div> id="bagus"
value="bagus"
v-model="post.kondisi"
/>
<label class="form-check-label" for="bagus">Bagus</label>
</div>
<div class="form-check">
<input
class="form-check-input"
type="radio"
name="kondisi"
id="rusak"
value="rusak"
v-model="post.kondisi"
/>
<label class="form-check-label" for="rusak">Rusak</label>
</div>
<div v-if="validation.kondisi" class="mt-2 alert alert-danger">
{{ validation.kondisi[0] }}
</div>
</div>
<div class="form-group">
<label for="id_jenis_alat" class="font-weight-bold">ID Jenis Alat</label>
<select class="form-control" v-model="post.id_jenis_alat">
<option v-for="jalat in jalat" :key="jalat.id_jenis_alat" :value="jalat.id_jenis_alat">{{ jalat.nama_alat }}</option>
</select>
<div v-if="validation.id_jenis_alat" class="mt-2 alert alert-danger">
{{ validation.id_jenis_alat[0] }}
</div>
</div>
<div class="form-group">
<label for="id_ruang" class="font-weight-bold">ID ruang</label>
<select class="form-control" v-model="post.id_ruang">
<option v-for="ruang in ruang" :key="ruang.id_ruang" :value="ruang.id_ruang">{{ ruang.nama_ruang }}</option>
</select>
<div v-if="validation.id_ruang" class="mt-2 alert alert-danger">
{{ validation.id_ruang[0] }}
</div>
</div>
<div class="form-group">
<label for="tahun" class="font-weight-bold">Tahun</label>
<input
type="number"
class="form-control"
v-model="post.tahun"
placeholder="Masukkan tahun alat"
/>
<div v-if="validation.tahun" class="mt-2 alert alert-danger">
{{ validation.tahun[0] }}
</div>
</div>
<button type="submit" class="btn btn-primary">SIMPAN</button>
<router-link :to="{ name: 'allAlat' }" class="btn btn-secondary"
>CANCEL</router-link
>
</form>
</div> </div>
</div>
<div class="form-group">
<label for="id_jenis_alat" class="font-weight-bold">ID Jenis Alat</label>
<select class="form-control" v-model="post.id_jenis_alat">
<option v-for="jalat in jalat" :key="jalat.id_jenis_alat" :value="jalat.id_jenis_alat">{{ jalat.nama_alat }}</option>
</select>
<div v-if="validation.id_jenis_alat" class="mt-2 alert alert-danger">
{{ validation.id_jenis_alat[0] }}
</div>
</div>
<div class="form-group">
<label for="id_ruang" class="font-weight-bold">ID ruang</label>
<select class="form-control" v-model="post.id_ruang">
<option v-for="ruang in ruang" :key="ruang.id_ruang" :value="ruang.id_ruang">{{ ruang.nama_ruang }}</option>
</select>
<div v-if="validation.id_ruang" class="mt-2 alert alert-danger">
{{ validation.id_ruang[0] }}
</div>
</div>
<button type="submit" class="btn btn-primary">SIMPAN</button>
<router-link :to="{ name: 'allAlat' }" class="btn btn-secondary"
>CANCEL</router-link
>
</form>
</div> </div>
</div> </div>
</div> </div>
</div> <Footer />
</div>
</div> </div>
</template> </template>
<script> <script>
import Footer from "../../includes/Footer.vue";
import SidebarAdmintes from "../../includes/SidebarAdmintes.vue";
import Navbar from "../../includes/navbar.vue";
import { reactive, ref, onMounted } from "vue"; import { reactive, ref, onMounted } from "vue";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import axios from "axios"; import axios from "axios";
export default { export default {
components: {
Footer,
SidebarAdmintes,
Navbar,
},
setup() { setup() {
const post = reactive({ const post = reactive({
no_inventaris: "", no_inventaris: "",
kondisi: "", kondisi: "",
id_jenis_alat: "", id_jenis_alat: "",
id_ruang: "", id_ruang: "",
tahun: "",
}); });
const jalat = ref([]); const jalat = ref([]);
...@@ -123,6 +170,7 @@ export default { ...@@ -123,6 +170,7 @@ export default {
formData.append('kondisi', post.kondisi); formData.append('kondisi', post.kondisi);
formData.append('id_jenis_alat', post.id_jenis_alat); formData.append('id_jenis_alat', post.id_jenis_alat);
formData.append('id_ruang', post.id_ruang); formData.append('id_ruang', post.id_ruang);
formData.append('tahun', post.tahun);
axios axios
.post('/api/alat/add_alat', formData, { .post('/api/alat/add_alat', formData, {
...@@ -154,4 +202,4 @@ export default { ...@@ -154,4 +202,4 @@ export default {
body { body {
background: lightgray; background: lightgray;
} }
</style> </style>
\ No newline at end of file
<template> <template>
<div class="main-container"> <div id="wrapper">
<Sidebar /> <SidebarAdmintes />
<div class="content"> <div id="content-wrapper" class="service_section layout_padding">
<section class="service_section layout_padding d-flex justify-content-center align-items-center"> <Navbar />
<div class="container align-content-center"> <div class="container-fluid">
<router-link to="/admin/add_alat" class="btn btn-success mb-3"> <div class="button-container">
<router-link to="" class="btn btn-success mb-3">
Tambah Alat Tambah Alat
</router-link> </router-link>
<router-link to="" class="btn btn-success mb-3 btn-download">
<table class="table table-bordered table-hover"> Export
<thead class="thead-dark"> </router-link>
<tr> </div>
<th scope="col">No</th>
<th scope="col">No Inventaris</th> <div class="search-container mb-3">
<th scope="col">Kondisi</th> <i class="fas fa-search search-icon"></i>
<th scope="col">ID Jenis Alat</th> <input
<th scope="col">ID Ruang</th> v-model="searchQuery"
<th scope="col">Action</th> type="text"
</tr> placeholder="Search Alat..."
</thead> class="form-control search-input"
<tbody> />
<tr v-for="(alat, index) in ListAlat" :key="alat.id_alat">
<td>{{ index + 1 }}</td>
<td>{{ alat.no_inventaris }}</td>
<td>{{ alat.kondisi }}</td>
<td>{{ alat.id_jenis_alat }}</td>
<td>{{ alat.id_ruang }}</td>
<td>
<button @click="updateAlat(alat.id_alat)" class="btn btn-info">Update</button>
<button @click="deleteAlat(alat.id_alat)" class="btn btn-danger">Delete</button>
</td>
</tr>
</tbody>
</table>
</div> </div>
</section>
<table class="table table-bordered table-hover">
<thead class="thead-dark">
<tr>
<th scope="col" @click="sortTable('id_alat')">
No
<span class="sort-icon">
<i :class="sortBy === 'id_alat' ? (sortDirection === 'asc' ? 'fas fa-sort-up' : 'fas fa-sort-down') : 'fas fa-sort'"></i>
</span>
</th>
<th scope="col" @click="sortTable('no_inventaris')">
No Inventaris
<span class="sort-icon">
<i :class="sortBy === 'no_inventaris' ? (sortDirection === 'asc' ? 'fas fa-sort-up' : 'fas fa-sort-down') : 'fas fa-sort'"></i>
</span>
</th>
<th scope="col" @click="sortTable('id_jenis_alat')">
ID Jenis Alat
<span class="sort-icon">
<i :class="sortBy === 'id_jenis_alat' ? (sortDirection === 'asc' ? 'fas fa-sort-up' : 'fas fa-sort-down') : 'fas fa-sort'"></i>
</span>
</th>
<!-- <th scope="col" @click="sortTable('merk_alat')">
Merk
<span class="sort-icon">
<i :class="sortBy === 'merk_alat' ? (sortDirection === 'asc' ? 'fas fa-sort-up' : 'fas fa-sort-down') : 'fas fa-sort'"></i>
</span>
</th> -->
<th scope="col" @click="sortTable('id_ruang')">
ID Ruang
<span class="sort-icon">
<i :class="sortBy === 'id_ruang' ? (sortDirection === 'asc' ? 'fas fa-sort-up' : 'fas fa-sort-down') : 'fas fa-sort'"></i>
</span>
</th>
<th scope="col" @click="sortTable('tahun')">
Tahun
<span class="sort-icon">
<i :class="sortBy === 'tahun' ? (sortDirection === 'asc' ? 'fas fa-sort-up' : 'fas fa-sort-down') : 'fas fa-sort'"></i>
</span>
</th>
<th scope="col" @click="sortTable('kondisi')">
Kondisi
<span class="sort-icon">
<i :class="sortBy === 'kondisi' ? (sortDirection === 'asc' ? 'fas fa-sort-up' : 'fas fa-sort-down') : 'fas fa-sort'"></i>
</span>
</th>
<th scope="col">Action</th>
</tr>
</thead>
<tbody>
<tr v-for="(alat, index) in sortedAlat" :key="alat.id_alat">
<td>{{ index + 1 }}</td>
<td>{{ alat.no_inventaris }}</td>
<td>{{ alat.id_jenis_alat }}</td>
<td>{{ alat.id_ruang }}</td>
<td>{{ alat.tahun }}</td>
<td>{{ alat.kondisi }}</td>
<td>
<button @click="updateAlat(alat.id_alat)" class="btn btn-info">Update</button>
<button @click="deleteAlat(alat.id_alat)" class="btn btn-danger">Delete</button>
</td>
</tr>
</tbody>
</table>
</div>
<Footer />
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import Sidebar from '@/components/includes/SidebarAdmin.vue'; import Footer from "../../includes/Footer.vue";
import SidebarAdmintes from "../../includes/SidebarAdmintes.vue";
import Navbar from "../../includes/navbar.vue";
export default { export default {
components: { components: {
Sidebar Footer,
SidebarAdmintes,
Navbar,
}, },
data() { data() {
return { return {
ListAlat: [], ListAlat: [],
searchQuery: '',
sortBy: '',
sortDirection: 'asc',
}; };
}, },
mounted() { mounted() {
...@@ -77,33 +137,68 @@ export default { ...@@ -77,33 +137,68 @@ export default {
} }
} }
}, },
sortTable(column) {
if (this.sortBy === column) {
this.sortDirection = this.sortDirection === 'asc' ? 'desc' : 'asc';
} else {
this.sortBy = column;
this.sortDirection = 'asc';
}
},
},
computed: {
sortedAlat() {
let sortedList = [...this.ListAlat];
if (this.sortBy) {
sortedList.sort((a, b) => {
let modifier = 1;
if (this.sortDirection === 'desc') modifier = -1;
if (a[this.sortBy] < b[this.sortBy]) return -1 * modifier;
if (a[this.sortBy] > b[this.sortBy]) return 1 * modifier;
return 0;
});
}
if (this.searchQuery) {
sortedList = sortedList.filter(alat =>
alat.no_inventaris.toLowerCase().includes(this.searchQuery.toLowerCase()) ||
alat.kondisi.toLowerCase().includes(this.searchQuery.toLowerCase()) ||
alat.id_jenis_alat.toString().includes(this.searchQuery.toLowerCase()) ||
alat.id_ruang.toString().includes(this.searchQuery.toLowerCase()) ||
alat.tahun.toString().includes(this.searchQuery.toLowerCase())
);
}
return sortedList;
},
}, },
}; };
</script> </script>
<style scoped> <style scoped>
@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap'); html, body, #wrapper, #content-wrapper, .service_section {
height: 100%;
body {
font-family: 'Roboto', sans-serif;
margin: 0; margin: 0;
padding: 0;
background-color: #f8f9fa;
} }
.main-container { #content-wrapper {
display: flex; display: flex;
flex-direction: column;
} }
.content { .container-fluid {
flex-grow: 1; flex: 1;
padding: 20px; display: flex;
margin-left: 5px; flex-direction: column;
transition: margin-left 0.3s ease-in-out; padding: 30px;
} }
.container { .button-container {
padding: 10px; display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
} }
.btn-success { .btn-success {
...@@ -120,10 +215,54 @@ body { ...@@ -120,10 +215,54 @@ body {
.table td { .table td {
text-align: center; text-align: center;
vertical-align: middle; vertical-align: middle;
cursor: pointer;
}
.btn-info {
width: 80px;
margin-right: 5px;
} }
.btn-info,
.btn-danger { .btn-danger {
width: 80px; width: 80px;
margin-left: 5px;
}
.btn-download {
margin-left: auto;
}
.search-container {
position: relative;
display: flex;
align-items: center;
}
.search-icon {
position: absolute;
left: 10px;
font-size: 14px;
color: #aaa;
}
.search-input {
padding-left: 30px;
font-size: 14px;
height: 30px;
width: 200px;
}
.form-control {
width: 30%;
}
#content-wrapper {
display: flex;
flex-direction: column;
min-height: 100vh;
}
.container-fluid {
flex: 1;
} }
</style> </style>
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
<SidebarAdmintes /> <SidebarAdmintes />
<div id="content-wrapper" class="service_section layout_padding"> <div id="content-wrapper" class="service_section layout_padding">
<Navbar /> <Navbar />
<<<<<<< HEAD
<div class="container mt-5"> <div class="container mt-5">
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
...@@ -10,6 +11,31 @@ ...@@ -10,6 +11,31 @@
<div class="card-body"> <div class="card-body">
<h4>TAMBAH ALAT</h4> <h4>TAMBAH ALAT</h4>
<hr /> <hr />
=======
<div class="container mt-5">
<div class="row">
<div class="col-md-12">
<div class="card border-0 rounded shadow">
<div class="card-body">
<h4>TAMBAH JENIS ALAT</h4>
<hr />
<form @submit.prevent="store">
<div class="form-group">
<label for="nama_alat" class="font-weight-bold">Nama Alat</label>
<input
type="text"
class="form-control"
v-model="post.nama_alat"
placeholder="Masukkan nama alat"
/>
<div v-if="validation.nama_alat" class="mt-2 alert alert-danger">
{{ validation.nama_alat[0] }}
</div>
</div>
>>>>>>> dhilaaaaa
<form @submit.prevent="store"> <form @submit.prevent="store">
<div class="form-group"> <div class="form-group">
...@@ -106,20 +132,34 @@ ...@@ -106,20 +132,34 @@
</div> </div>
</div> </div>
<Footer /> <Footer />
<<<<<<< HEAD
</div> </div>
</template> </template>
=======
</div>
</div>
</template>
>>>>>>> dhilaaaaa
<script> <script>
import Footer from "../../../includes/Footer.vue"; import Footer from "../../../includes/Footer.vue";
import SidebarAdmintes from "../../../includes/SidebarAdmintes.vue"; import SidebarAdmintes from "../../../includes/SidebarAdmintes.vue";
import Navbar from "../../../includes/navbar.vue"; import Navbar from "../../../includes/navbar.vue";
<<<<<<< HEAD
import { reactive, ref } from "vue"; import { reactive, ref } from "vue";
=======
import { reactive, ref, onMounted } from "vue";
>>>>>>> dhilaaaaa
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import axios from "axios"; import axios from "axios";
export default { export default {
<<<<<<< HEAD
name: "AddJenis", name: "AddJenis",
components: { components: {
=======
components: {
>>>>>>> dhilaaaaa
Footer, Footer,
SidebarAdmintes, SidebarAdmintes,
Navbar, Navbar,
......
...@@ -3,10 +3,28 @@ ...@@ -3,10 +3,28 @@
<SidebarAdmintes /> <SidebarAdmintes />
<div id="content-wrapper" class="service_section layout_padding"> <div id="content-wrapper" class="service_section layout_padding">
<Navbar /> <Navbar />
<<<<<<< HEAD
<div class="container"> <div class="container">
<router-link to="/admin/add-jenis" class="btn btn-success mb-3"> <router-link to="/admin/add-jenis" class="btn btn-success mb-3">
Tambah Alat Tambah Alat
</router-link> </router-link>
=======
<div class="container-fluid">
<div class="container">
<router-link to="/admin/add_jenis_alat" class="btn btn-success mb-3">
Tambah Jenis Alat
</router-link>
<div class="search-container mb-3">
<i class="fas fa-search search-icon"></i>
<input
v-model="searchQuery"
type="text"
placeholder="Search Jenis Alat..."
class="form-control search-input"
/>
</div>
>>>>>>> dhilaaaaa
<table class="table table-bordered table-hover"> <table class="table table-bordered table-hover">
<thead class="thead-dark"> <thead class="thead-dark">
...@@ -46,6 +64,11 @@ ...@@ -46,6 +64,11 @@
</table> </table>
</div> </div>
</div> </div>
<<<<<<< HEAD
=======
<Footer />
</div>
>>>>>>> dhilaaaaa
</div> </div>
<Footer /> <Footer />
</template> </template>
...@@ -55,8 +78,12 @@ import Footer from "../../../includes/Footer.vue"; ...@@ -55,8 +78,12 @@ import Footer from "../../../includes/Footer.vue";
import SidebarAdmintes from "../../../includes/SidebarAdmintes.vue"; import SidebarAdmintes from "../../../includes/SidebarAdmintes.vue";
import Navbar from "../../../includes/navbar.vue"; import Navbar from "../../../includes/navbar.vue";
export default { export default {
<<<<<<< HEAD
name: "AllJenis", name: "AllJenis",
components: { components: {
=======
components: {
>>>>>>> dhilaaaaa
Footer, Footer,
SidebarAdmintes, SidebarAdmintes,
Navbar, Navbar,
...@@ -100,6 +127,7 @@ import Navbar from "../../../includes/navbar.vue"; ...@@ -100,6 +127,7 @@ import Navbar from "../../../includes/navbar.vue";
</script> </script>
<style scoped> <style scoped>
<<<<<<< HEAD
.product-image { .product-image {
max-width: 100px; max-width: 100px;
max-height: 75px; max-height: 75px;
...@@ -131,4 +159,95 @@ import Navbar from "../../../includes/navbar.vue"; ...@@ -131,4 +159,95 @@ import Navbar from "../../../includes/navbar.vue";
width: 80px; width: 80px;
} }
</style> </style>
\ No newline at end of file =======
html, body, #wrapper, #content-wrapper, .service_section {
height: 100%;
margin: 0;
}
#content-wrapper {
display: flex;
flex-direction: column;
}
.container-fluid {
flex: 1;
display: flex;
flex-direction: column;
padding: 30px;
}
.button-container {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
}
.btn-success {
background-color: #28a745;
border-color: #28a745;
}
.btn-success:hover {
background-color: #218838;
border-color: #1e7e34;
}
.table th,
.table td {
text-align: center;
vertical-align: middle;
}
.btn-info {
width: 80px;
margin-right: 5px;
}
.btn-danger {
width: 80px;
margin-left: 5px;
}
.btn-download {
margin-left: auto;
}
.search-container {
position: relative;
display: flex;
align-items: center;
}
.search-icon {
position: absolute;
left: 10px;
font-size: 14px;
color: #aaa;
}
.search-input {
padding-left: 30px;
font-size: 14px;
height: 30px;
width: 200px;
}
.form-control {
width: 30%;
}
#content-wrapper {
display: flex;
flex-direction: column;
min-height: 100vh;
}
.container-fluid {
flex: 1;
}
</style>
>>>>>>> dhilaaaaa
...@@ -105,6 +105,9 @@ ...@@ -105,6 +105,9 @@
</div> </div>
</div> </div>
</div> </div>
</div>
<Footer />
</div>
</div> </div>
</div> </div>
<Footer /> <Footer />
...@@ -115,13 +118,21 @@ ...@@ -115,13 +118,21 @@
import Footer from "../../../includes/Footer.vue"; import Footer from "../../../includes/Footer.vue";
import SidebarAdmintes from "../../../includes/SidebarAdmintes.vue"; import SidebarAdmintes from "../../../includes/SidebarAdmintes.vue";
import Navbar from "../../../includes/navbar.vue"; import Navbar from "../../../includes/navbar.vue";
<<<<<<< HEAD
import { reactive, ref } from "vue"; import { reactive, ref } from "vue";
=======
import { reactive, ref, onMounted } from "vue";
>>>>>>> dhilaaaaa
import { useRouter, useRoute } from "vue-router"; import { useRouter, useRoute } from "vue-router";
import axios from "axios"; import axios from "axios";
export default { export default {
<<<<<<< HEAD
name: "EditJenis", name: "EditJenis",
components: { components: {
=======
components: {
>>>>>>> dhilaaaaa
Footer, Footer,
SidebarAdmintes, SidebarAdmintes,
Navbar, Navbar,
......
<template> <template>
<div id="wrapper">
<SidebarAdmintes />
<div id="content-wrapper" class="service_section layout_padding">
<Navbar />
<div class="container mt-5"> <div class="container mt-5">
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
...@@ -32,14 +36,25 @@ ...@@ -32,14 +36,25 @@
</div> </div>
</div> </div>
</div> </div>
<Footer />
</div>
</div>
</template> </template>
<script> <script>
import Footer from "../../../includes/Footer.vue";
import SidebarAdmintes from "../../../includes/SidebarAdmintes.vue";
import Navbar from "../../../includes/navbar.vue";
import { reactive, ref } from "vue"; import { reactive, ref } from "vue";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import axios from "axios"; import axios from "axios";
export default { export default {
components: {
Footer,
SidebarAdmintes,
Navbar,
},
setup() { setup() {
const post = reactive({ const post = reactive({
nama_merk: "", nama_merk: "",
......
<template> <template>
<div> <div id="wrapper">
<section class="service_section layout_padding d-flex justify-content-center align-items-center"> <SidebarAdmintes />
<div class="container align-content-center"> <div id="content-wrapper" class="service_section layout_padding">
<router-link to="/admin/add_merk" class="btn btn-success mb-3"> <Navbar />
Tambah Merk <div class="container-fluid">
</router-link> <div class="container">
<router-link to="/admin/add_merk" class="btn btn-success mb-3">
Tambah Merk
</router-link>
<div class="search-container mb-3">
<i class="fas fa-search search-icon"></i>
<input
v-model="searchQuery"
type="text"
placeholder="Search Merk..."
class="form-control search-input"
/>
</div>
<table class="table table-bordered table-hover"> <table class="table table-bordered table-hover">
<thead class="thead-dark"> <thead class="thead-dark">
...@@ -27,12 +40,22 @@ ...@@ -27,12 +40,22 @@
</table> </table>
</div> </div>
</section> </div>
<Footer />
</div>
</div> </div>
</template> </template>
<script> <script>
import Footer from "../../../includes/Footer.vue";
import SidebarAdmintes from "../../../includes/SidebarAdmintes.vue";
import Navbar from "../../../includes/navbar.vue";
export default { export default {
components: {
Footer,
SidebarAdmintes,
Navbar,
},
data() { data() {
return { return {
ListMerk: [], ListMerk: [],
...@@ -70,11 +93,30 @@ export default { ...@@ -70,11 +93,30 @@ export default {
</script> </script>
<style scoped> <style scoped>
html, body, #wrapper, #content-wrapper, .service_section {
height: 100%;
margin: 0;
}
.container { #content-wrapper {
display: flex;
flex-direction: column;
}
.container-fluid {
flex: 1;
display: flex;
flex-direction: column;
padding: 30px; padding: 30px;
} }
.button-container {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
}
.btn-success { .btn-success {
background-color: #28a745; background-color: #28a745;
border-color: #28a745; border-color: #28a745;
...@@ -91,8 +133,52 @@ export default { ...@@ -91,8 +133,52 @@ export default {
vertical-align: middle; vertical-align: middle;
} }
.btn-info, .btn-info {
width: 80px;
margin-right: 5px;
}
.btn-danger { .btn-danger {
width: 80px; width: 80px;
margin-left: 5px;
} }
.btn-download {
margin-left: auto;
}
.search-container {
position: relative;
display: flex;
align-items: center;
}
.search-icon {
position: absolute;
left: 10px;
font-size: 14px;
color: #aaa;
}
.search-input {
padding-left: 30px;
font-size: 14px;
height: 30px;
width: 200px;
}
.form-control {
width: 30%;
}
#content-wrapper {
display: flex;
flex-direction: column;
min-height: 100vh;
}
.container-fluid {
flex: 1;
}
</style> </style>
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment