[feat] kasir menu
This commit is contained in:
parent
9b2d50ac65
commit
20c844a98b
@ -20,10 +20,15 @@ class DatabaseSeeder extends Seeder
|
|||||||
public function run(): void
|
public function run(): void
|
||||||
{
|
{
|
||||||
User::factory()->create([
|
User::factory()->create([
|
||||||
'nama' => 'Test',
|
'nama' => 'Owner',
|
||||||
'role' => 'owner',
|
'role' => 'owner',
|
||||||
'password' => bcrypt('123123'),
|
'password' => bcrypt('123123'),
|
||||||
]);
|
]);
|
||||||
|
User::factory()->create([
|
||||||
|
'nama' => 'Kasir',
|
||||||
|
'role' => 'kasir',
|
||||||
|
'password' => bcrypt('123123'),
|
||||||
|
]);
|
||||||
|
|
||||||
User::factory(2)->create();
|
User::factory(2)->create();
|
||||||
Sales::factory(5)->create();
|
Sales::factory(5)->create();
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { ref, provide } from "vue";
|
import { ref, provide, computed } from "vue";
|
||||||
import NavDesktop from "./NavDesktop.vue";
|
import NavDesktop from "./NavDesktop.vue";
|
||||||
import NavMobile from "./NavMobile.vue";
|
import NavMobile from "./NavMobile.vue";
|
||||||
import logo from "../../images/logo.png";
|
import logo from "../../images/logo.png";
|
||||||
@ -9,9 +9,10 @@ const isOpen = ref(false);
|
|||||||
const isMobileMenuOpen = ref(false);
|
const isMobileMenuOpen = ref(false);
|
||||||
const openDropdownIndex = ref(null);
|
const openDropdownIndex = ref(null);
|
||||||
|
|
||||||
const items = [
|
const baseItems = [
|
||||||
{
|
{
|
||||||
label: "Manajemen Produk", subItems: [
|
label: "Manajemen Produk",
|
||||||
|
subItems: [
|
||||||
{ label: "Brankas", route: "/brankas" },
|
{ label: "Brankas", route: "/brankas" },
|
||||||
{ label: "Nampan", route: "/nampan" },
|
{ label: "Nampan", route: "/nampan" },
|
||||||
{ label: "Produk", route: "/produk" },
|
{ label: "Produk", route: "/produk" },
|
||||||
@ -24,6 +25,18 @@ const items = [
|
|||||||
{ label: "Akun", route: "/akun" },
|
{ label: "Akun", route: "/akun" },
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const role = localStorage.getItem("role");
|
||||||
|
|
||||||
|
const items = computed(() => {
|
||||||
|
if (role === "owner") {
|
||||||
|
return baseItems;
|
||||||
|
}
|
||||||
|
if (role === "kasir") {
|
||||||
|
return baseItems.filter(item => !["Akun", "Laporan"].includes(item.label));
|
||||||
|
}
|
||||||
|
return baseItems;
|
||||||
|
});
|
||||||
|
|
||||||
const toggleDropdown = (index = null) => {
|
const toggleDropdown = (index = null) => {
|
||||||
if (index !== null) {
|
if (index !== null) {
|
||||||
openDropdownIndex.value = openDropdownIndex.value === index ? null : index;
|
openDropdownIndex.value = openDropdownIndex.value === index ? null : index;
|
||||||
@ -46,15 +59,20 @@ const closeMobileMenu = () => {
|
|||||||
|
|
||||||
const logout = async () => {
|
const logout = async () => {
|
||||||
try {
|
try {
|
||||||
await axios.post('/api/logout', {
|
await axios.post("/api/logout", null, {
|
||||||
headers: {
|
headers: {
|
||||||
Authorization: `Bearer ${localStorage.getItem("token")}`,
|
Authorization: `Bearer ${localStorage.getItem("token")}`,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
window.location.href = '/';
|
localStorage.removeItem("token");
|
||||||
|
localStorage.removeItem("role");
|
||||||
|
|
||||||
|
window.location.href = "/";
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
if (error.response && error.response.status === 401) {
|
if (error.response && error.response.status === 401) {
|
||||||
window.location.href = '/';
|
localStorage.removeItem("token");
|
||||||
|
localStorage.removeItem("role");
|
||||||
|
window.location.href = "/";
|
||||||
} else {
|
} else {
|
||||||
console.error("Logout failed:", error);
|
console.error("Logout failed:", error);
|
||||||
}
|
}
|
||||||
@ -63,7 +81,7 @@ const logout = async () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Provide shared data to child components
|
// Provide shared data to child components
|
||||||
provide('navigationData', {
|
provide("navigationData", {
|
||||||
logo,
|
logo,
|
||||||
items,
|
items,
|
||||||
isOpen,
|
isOpen,
|
||||||
|
@ -12,9 +12,9 @@ import Laporan from "../pages/Laporan.vue";
|
|||||||
import Login from "../pages/Login.vue";
|
import Login from "../pages/Login.vue";
|
||||||
import Akun from "../pages/Akun.vue";
|
import Akun from "../pages/Akun.vue";
|
||||||
|
|
||||||
import auth from "../middleware/auth";
|
import auth from "../middlewares/auth";
|
||||||
import guest from "../middleware/guest";
|
import guest from "../middlewares/guest";
|
||||||
import owner from "../middleware/owner";
|
import owner from "../middlewares/owner";
|
||||||
|
|
||||||
const middlewareMap = { auth, guest, owner };
|
const middlewareMap = { auth, guest, owner };
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user