Implementasi Frontent Vue JS Dan Backend Laravel Tanpa JQUERY #3

Ditahap ke-3 kita akan menampilkan mockup dashboard atau halaman utama ketika user sudah login maka akan muncul halaman pertama. Untuk memulai langkah-langkahnya adalah seperti berikut ini :
Tambahkan route baru pada router vuejs src/router/index.js
....
{
path:'/home',
name: 'home',
component: () => import ("../views/Home.vue"),
meta: {
requiresAuth: true,
}
}
.....
Jika kita lihat router yang kita tambahkan ini membutuhkan sebuah jalam Home.vue maka perlu kita buat file tersebut di src/views/Home.vue dan isikan dengan kodingan seperti berikut ini.
<template>
<Sidebar/>
<div class="main--content">
<div class="header--wrapper">
<div class="header--title">
<span>Primary</span>
<h2>Dashboard</h2>
</div>
<div class="user--info">
<div class="searh--box">
<i class="fa-solid fa-search"></i>
<input type="text" placeholder="Search" />
</div>
<img :src="'ft.jpg'" alt="">
</div>
</div>
<div class="card--container">
<h3 class="main--title">Today's data</h3>
<div class="card--wrapper">
<div class="payment--card light-red">
<div class="card--header">
<div class="amount">
<span class="title">Payment amount</span>
<span class="amount--value">$500.00</span>
</div>
<i class="fas fa-dollar-sign icon"></i>
</div>
<span class="card-detail">**** **** **** 3484</span>
</div>
<div class="payment--card light-purple">
<div class="card--header">
<div class="amount">
<span class="title">Payment order</span>
<span class="amount--value">$200.00</span>
</div>
<i class="fas fa-list icon dark-purple"></i>
</div>
<span class="card-detail">**** **** **** 5524</span>
</div>
<div class="payment--card light-green">
<div class="card--header">
<div class="amount">
<span class="title">Payment customer</span>
<span class="amount--value">$350.00</span>
</div>
<i class="fas fa-users icon dark-green"></i>
</div>
<span class="card-detail">**** **** **** 8886</span>
</div>
<div class="payment--card light-blue">
<div class="card--header">
<div class="amount">
<span class="title">Payment order</span>
<span class="amount--value">$150.00</span>
</div>
<i class="fa-solid fa-check icon dark-blue"></i>
</div>
<span class="card-detail">**** **** **** 7732</span>
</div>
</div>
</div>
<div class="tabular--wrapper">
<h3 class="main--title">Finance data</h3>
<div class="table-container">
<table>
<thead>
<tr>
<th>Date</th>
<th>Transaction Type</th>
<th>Description</th>
<th>Amount</th>
<th>Category</th>
<th>Status</th>
<th>Action</th>
</tr>
</thead>
<body>
<tr>
<td>2023-12-28</td>
<td>Expenses</td>
<td>Office Supplies</td>
<td>$250</td>
<td>Office Expenses</td>
<td>Pading</td>
<td><button>Edit</button></td>
</tr>
<tr>
<td>2023-12-28</td>
<td>Expenses</td>
<td>Office Supplies</td>
<td>$250</td>
<td>Office Expenses</td>
<td>Pading</td>
<td><button>Edit</button></td>
</tr>
<tr>
<td>2023-12-28</td>
<td>Expenses</td>
<td>Office Supplies</td>
<td>$250</td>
<td>Office Expenses</td>
<td>Pading</td>
<td><button>Edit</button></td>
</tr>
</body>
<tfoot>
<tr><td colspan="7">Testimonials: $1,000</td></tr>
</tfoot>
</table>
</div>
</div>
</div>
</template>
<script>
import Sidebar from '../components/Sidebar.vue';
export default {
name: 'Home',
components: {
Sidebar
}
}
</script>
Karena kita membutuhkan component tambahan dengan nama component src/components/Sidebar.vue maka kita perlu membuat file tersebut dan isikan file tersebut dengan kodingan seperti berikut ini.
<template>
<div class="sidebar">
<div class="logo"></div>
<ul class="menu">
<li class="active">
<a href="#">
<i class="fas fa-tachometer-alt"></i>
<span>Dashboard</span>
</a>
</li>
<li>
<a href="#">
<i class="fas fa-user"></i>
<span>profile</span>
</a>
</li>
<li class="logout">
<a href="#">
<i class="fas fa-sign-out-alt"></i>
<span>Logout</span>
</a>
</li>
</ul>
</div>
</template>
<script>
export default {
name: 'Sidebar'
}
</script>
Setelah kita buat, kita perlu memodifikasi file src/index.html dan tambahan style untuk halaman dashboard aplikasi, menjadi seperti ini:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="style.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"/>
<title>Vite + Vue</title>
</head>
<body id="app">
<script type="module" src="/src/main.js"></script>
</body>
</html>
Jika kita telaah bersama, ketika membutuhkan style.css dibawah folder src/public/style.css dengan isian kodingan seperti ini.
/* Import Google Font cdn link */
@import url("https://fonts.googleapis.com/css2family=Poppins:wght@400;600&display=swap");
* {
margin: 0;
padding: 0;
border: none;
outline: none;
box-sizing: border-box;
font-family: "Poppins", sans-serif;
}
body {
display: flex;
}
.sidebar {
position: sticky;
top: 0;
left: 0;
bottom: 0;
width: 116px;
height: 100vh;
padding: 0 1.7rem;
color: #fff;
overflow: hidden;
transition: all 0.5s linear;
background: rgb(113, 99, 186, 255);
}
.sidebar:hover {
width: 240px;
transition: 0.5s;
}
.logo {
height: 80px;
padding: 16px;
}
.menu {
height: 88%;
position: relative;
list-style: none;
padding: 0;
}
.menu li{
padding: 1rem;
margin: 8px 0;
border-radius: 8px;
transition: all 0.5s ease-in-out;
}
.menu li:hover,
.active {
background: #e0e0e058;
}
.menu a{
color: #fff;
font-size: 14px;
text-decoration: none;
display: flex;
align-items: center;
gap: 1.5rem;
}
.menu a span {
overflow: hidden;
}
.menu a i{
font-size: 1.2rem;
}
.logout {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
}
/* **** main body section **** */
.main--content {
position: relative;
background: #ebe9e9;
width: 100%;
padding: 1rem;
}
.header--wrapper img {
width: 50px;
height: 50px;
cursor: pointer;
border-radius: 50%;
}
.header--wrapper {
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
background: #fff;
border-radius: 10px;
padding: 10px 2rem;
margin-bottom: 1rem;
}
.heder--title {
color: rgba(133, 99, 186, 255);
}
.user--info {
display: flex;
align-items: center;
gap: 1rem;
}
.searh--box {
background: rgb(237, 237, 237);
border-radius: 15px;
color: rgba(113, 99, 186, 255);
display: flex;
align-items: center;
gap: 5px;
padding: 4px 12px;
}
.searh--box input {
background: transparent;
padding: 10px;
}
.searh--box i {
font-size: 1.2rem;
cursor: pointer;
transition: all 0.5s ease-out;
}
.searh--box i:hover {
transform: scale(1.2);
}
/* ****** card container ****** */
.card--container{
background: #fff;
padding: 2rem;
border-radius: 10px
}
.card--wrapper {
display: flex;
flex-wrap: wrap;
gap: 1rem;
}
.main--title {
color: rgba(113, 99, 186, 255);
padding-bottom: 10px;
font-size: 15px;
}
.payment--card {
background: rgb(229, 223, 223);
border-radius: 10px;
padding: 1.2rem;
width: 290px;
height: 150px;
display: flex;
flex-direction: column;
justify-content: space-between;
transition: all 0.5s ease-in-out;
}
.payment--card:hover{
transform: translateY(-5px);
}
.card--header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.amount {
display: flex;
flex-direction: column;
}
.title{
font-size: 12px;
font-weight: 200;
}
.amount--value {
font-size: 24px;
font-family: "Courier New", Courier, monospace;
font-weight: 600;
}
.icon {
color: #fff;
padding: 1rem;
height: 60px;
width: 60px;
text-align: center;
border-radius: 50%;
font-size: 1.5rem;
background: red;
}
.card-detail{
font-size: 18px;
color: #777777;
letter-spacing: 2px;
font-family: "Courier New", Courier, monospace;
}
/* color css */
.light-red {
background: rgb(251,233,233);
}
.light-purple{
background: rgb(254,226,254);
}
.light-green {
background: rgb(235, 254, 235);
}
.light-blue {
background: rgb(236, 236, 254);
}
.dark-red {
background: red;
}
.dark-purple {
background: purple;
}
.dark-green {
background: green;
}
.dark-blue {
background: blue;
}
/* tabular--wrapper */
.tabular--wrapper {
background: #fff;
margin-top: 1rem;
border-radius: 10px;
padding: 2rem;
}
.table-container{
width: 100%;
}
table {
width: 100%;
border-collapse: collapse;
}
thead{
background: rgba(113, 99, 186, 255);
color: #fff;
}
th{
padding: 15px;
text-align: left;
}
tbody{
background: #f2f2f2;
}
td{
padding: 15px;
font-size: 14px;
color: #333;
}
tr:nth-child(even) {
background: #fff;
}
tfoot {
background: rgba(113, 99, 186, 255);
font-weight:bold;
color: #fff;
}
tfoot td {
padding: 15px;
color: #fff;
}
.table-container button {
color: green;
background: none;
cursor: pointer;
}
Setelah style/css kita lakukan perubahan, selanjutnya coba kita panggil dengan memanggil nama route yang telah dibuat http://localhost:5173/home
Demikianlah untuk bagian #3 ini, selanjutnya kita akan menyiapkan bagian Backend yang dimana kita akan menggunakan framework laravel sebagai Backendnya.
Comments