delete insert selesai, show data masih belum sesuai

This commit is contained in:
2025-06-08 11:25:59 +07:00
parent 5d1301ddae
commit cabb052b21
12 changed files with 90 additions and 130 deletions

View File

@@ -1,6 +1,5 @@
<script setup lang="ts">
import {Icon} from "@iconify/vue";
import {boolean} from "zod/v4";
const props = withDefaults(defineProps<{
item: Record<string, any>;
@@ -19,17 +18,10 @@ const state = ref(false)
</template>
<template v-slot:title>
<h4>{{ item.display }}</h4>
<!-- <h3>{{ item.subject.display }}</h3> -->
</template>
<!-- <template v-slot:subtitle> </template> -->
<!-- <template v-slot:actions>
<v-btn color="primary" class="ms-auto" @click="emit('detail', props?.item)">Detail</v-btn>
</template> -->
<slot name="actions"></slot>
</v-card>
<!-- <MasterDialogModal v-if="state" :stateValue="state" @stateValue="val => state = val" /> -->
</template>

View File

@@ -40,7 +40,6 @@ watch(() => props.stateValue, (newValue) => {
</slot>
<v-card-actions>
<!-- <v-btn text @click="$emit('stateValue', false)">Disagree</v-btn>-->
</v-card-actions>
</v-card>
</template>

View File

@@ -2,8 +2,7 @@
import {useSettingStore} from "@/stores/api/setting/setting";
const {getTypeUser, getMenu, postRoleUserMenu} = useSettingStore();
const {listMenu, listTypeUser,typeUser, roleMenuById,} = storeToRefs(useSettingStore());
const {listMenu, listTypeUser, typeUser, roleMenuById,messages} = storeToRefs(useSettingStore());
const data = ref<any>([]);
const menuItem = ref<any>([]);
const type_user = ref<any>([]);
@@ -15,9 +14,8 @@ const dataMenu = async () => {
getTypeUser()
])
// filtering role akses menu terhadap tipe user
if (roleMenuById.value.data != null && roleMenuById.value.data != "") {
console.log('lidt menu',listMenu.value)
console.log('lidt menu', listMenu.value)
return roleMenuById.value.data.map((role_menu: any) => {
menuItem.value = listMenu.value.find(
(menu: any) =>
@@ -26,7 +24,6 @@ const dataMenu = async () => {
type_user.value = listTypeUser.value.find(
(type_user: any) => type_user._id == role_menu.type_user_id
);
console.log('menu item', menuItem.value);
return {
_id: role_menu._id,
idTipeUser: type_user.value._id,
@@ -50,8 +47,6 @@ const checkMenu = () => {
!roleMenuById.value.data ||
!roleMenuById.value.data.map((r: any) => r.menu_id).includes(i._id)
);
console.log(' menu arr ',arr);
console.log('list menu arr ',listMenu.value);
// Check if arr is not empty or roleMenuById.value.data is null
if (arr.length !== 0 || !roleMenuById.value.data) {
arr.forEach((i: any, index: number) => {
@@ -69,60 +64,17 @@ const checkMenu = () => {
}
}
// const onSubmit = async () => {
// // try {
// const formData = dataDetail.value?.form$.data
// console.log('form ',formData)
// console.log(' data value',data.value)
// // Struktur data untuk dikirim ke backend
// const payload = {
// menus: data.value.map(menu => ({
// type_user_id: formData.idTipeUser, // ID tipe user dari hidden field
// menu_id: menu._id,
// // menu_name: formData[`name_menu_${menu._id}`], // Nama menu dari static element
// access: [
// {type: 'add', value: formData[`accessAdd_${menu._id}`] || '0'},
// {type: 'update', value: formData[`accessUpdate_${menu._id}`] || '0'},
// {type: 'read', value: formData[`accessRead_${menu._id}`] || '0'},
// {type: 'delete', value: formData[`accessDelete_${menu._id}`] || '0'}
// ]
// }))
// }
//
// // console.log('Data yang dikirim:', payload)
// await postRoleUserMenu(payload)
// // Panggil action dari store untuk mengirim data ke backend
// // const response = await saveRoleMenu(payload)
//
// // Handle response dari backend
// // if (response.success) {
// // alert('Data berhasil disimpan!')
// // // Refresh data jika perlu
// // data.value = await dataMenu()
// // } else {
// // alert('Gagal menyimpan data: ' + response.message)
// // }
// // } catch (error) {
// // console.error('Error saat menyimpan data:', error)
// // alert('Terjadi kesalahan saat menyimpan data')
// // }
// }
const onSubmit = async () => {
const formData = dataDetail.value?.form$.data;
console.log('form ', formData);
// Jika data.value kosong, kita akan mengambil data dari form
const menusToProcess = data.value!==undefined ? data.value : listMenu.value;
console.log(formData);
console.log(listTypeUser.value);
console.log(data.value);
console.log(menusToProcess);
const menusToProcess = data.value !== undefined ? data.value : listMenu.value;
// Struktur data untuk dikirim ke backend
const payload = {
menus: menusToProcess.map(menu => {
const menuId = menu.menu_id || menu._id; // Gunakan _id atau id tergantung struktur data
return {
type_user_id: formData.idTipeUser||typeUser.value, // ID tipe user dari hidden field
menu_id: menuId ,
type_user_id: formData.idTipeUser || typeUser.value, // ID tipe user dari hidden field
menu_id: menuId,
access: [
{type: 'add', value: formData[`accessAdd_${menuId}`] || 0},
{type: 'update', value: formData[`accessUpdate_${menuId}`] || 0},
@@ -133,20 +85,20 @@ console.log(menusToProcess);
})
};
console.log('Payload yang dikirim:', payload);
// console.log('Payload yang dikirim:', payload);
await postRoleUserMenu(payload);
reloadNuxtApp()
// console.log(messages.value);
// if(messages.value.type==='success'){
// sweetalert(messages.value.title,'',messages.value.type);
// }
window.location.reload();
};
onMounted(async () => {
data.value = await dataMenu();
console.log('aaaaa', data.value);
console.log('user select', typeUser.value);
console.log('listTypeUser', listTypeUser.value);
checkMenu()
});
const form = ref({})
// Helper function to create checkbox config
const createCheckbox = (namePrefix: string, menu: any) => {
const accessMap = {
@@ -172,13 +124,10 @@ const createCheckbox = (namePrefix: string, menu: any) => {
// Helper function to create a menu row
let count = 0
const createMenuRow = (menu: any) => {
console.log('create menu',menu);
count += 1; // Use the current counter value and then increment it
count += 1;
const multiElement = {
nama_menu: {
name: 'name_menu',
type: 'static',
content: menu.menu,
type: 'static', content: menu.menu,
builder: {
type: 'p',
},
@@ -191,7 +140,7 @@ const createMenuRow = (menu: any) => {
},
},
idTipeUser: {
type: 'text',
type: 'hidden',
default: menu.idTipeUser,
builder: {
type: 'text',
@@ -200,25 +149,14 @@ const createMenuRow = (menu: any) => {
}
const result = [
[`${count}`, 1, 1],
[
{
[{
name: 'container1',
type: 'group',
schema: {
column: {
name: 'column',
type: 'group',
schema: multiElement
column: {name: 'column', type: 'group', schema: multiElement},
},
},
builder: {
type: 'container2',
label: '2 columns',
},
},
1,
1
],
builder: {type: 'container2', label: '2 columns',},
}, 1, 1],
[createCheckbox('accessAdd', menu), 1, 1],
[createCheckbox('accessUpdate', menu), 1, 1],
[createCheckbox('accessRead', menu), 1, 1],
@@ -230,8 +168,6 @@ const createMenuRow = (menu: any) => {
<template>
<div class="d-flex flex-column gap-1 mx-1 pa-7 pt-0 pb-0">
<pre>{{console.log("ini data value:",data)}}</pre>
<pre>{{ console.log('role menu',roleMenuById)}}</pre>
<Vueform ref="dataDetail" validate-on="change|step" method="post" :endpoint="onSubmit">
<!-- <v-text-field v-model="data[0].idTipeUser"></v-text-field>-->
<GridElement

View File

@@ -1,4 +0,0 @@
export default defineEventHandler(async(event)=> {
const a = await $fetch("http://10.10.150.131:8080/api/menu/getlist")
return a
})

View File

@@ -1,11 +0,0 @@
export default defineEventHandler(async(event)=> {
const body = await readBody(event)
console.log(body)
const a = await $fetch(`http://10.10.150.131:8080/api/menu/role/type/${body}`,{
headers: {
"Content-Type": "application/json",
},
method: "GET",
})
return a
})

View File

@@ -0,0 +1,9 @@
export default defineEventHandler(async (event) => {
const body = await readBody(event)
const res = await $fetch(`http://10.10.150.131:8080/api/menu/delete/${body.key}`, {
method: "DELETE",
headers: {"Content-Type": "application/json"},
})
console.log(res)
return res
})

View File

@@ -0,0 +1,11 @@
export default defineEventHandler(async(event)=> {
const body = await readBody(event)
console.log(body)
const a = await $fetch(`http://10.10.150.131:8080/api/menu/role/type/${body}`,{
headers: {
"Content-Type": "application/json",
},
method: "GET",
})
return a
})

View File

@@ -1,11 +1,9 @@
export default defineEventHandler(async (event) => {
const body = await readBody(event)
console.log(body)
const res = await $fetch(`http://10.10.150.131:8080/api/menu/role/insert`, {
method: "POST",
headers: {"Content-Type": "application/json"},
body:body
})
// console.log(res)
return res
})

View File

@@ -1,4 +0,0 @@
export default defineEventHandler(async(event)=> {
const a = await $fetch("http://10.10.150.131:8080/api/menu/type")
return a
})

View File

@@ -1,10 +1,14 @@
import {defineStore} from "pinia";
import type {RoleMenuUser} from "~/types/setting/RoleMenuUser";
import type {MessagesHandler} from "~/types/messagesHandler";
const messages = ref<MessagesHandler>({});
export const useSettingStore = defineStore("SettingStore", () => {
messages.value = {}
const listMenu = ref<any>([]);
const getMenu = async () => {
await $fetch("/api/menu/listMenu", {
await $fetch("/api/setting/getListMenu", {
// mode: "no-cors",
headers: {
"Content-Type": "application/json",
@@ -37,7 +41,7 @@ export const useSettingStore = defineStore("SettingStore", () => {
const listTypeUser = ref<any>([]);
const getTypeUser = async () => {
await $fetch("/api/typeUser/listTypeUser", {
await $fetch("/api/setting/getTipeUser", {
// mode: 'no-cors',
// headers: {
// 'Access-Control-Allow-Origin': '*',
@@ -66,22 +70,35 @@ export const useSettingStore = defineStore("SettingStore", () => {
}
]
}))
{
}
console.log('role', roleUserMenu);
await $fetch(`/api/setting/deleteRoleMenuUser`, {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({key: body.menus[0].type_user_id})
}).then(async (res) => {
await $fetch(`/api/setting/postRoleMenuUser`, {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify(roleUserMenu)
})
.then((res) => {
console.log('success')
messages.value.type = 'success'
messages.value.title = 'Akses User Sudah Disimpan'
})
.catch((err) => {
console.log(err)
})
})
}
return {getMenu, getRoleMenuById, getTypeUser, postRoleUserMenu, listMenu, roleMenuById, typeUser, listTypeUser};
return {
getMenu,
getRoleMenuById,
getTypeUser,
postRoleUserMenu,
messages,
listMenu,
roleMenuById,
typeUser,
listTypeUser
};
})

5
types/messagesHandler.ts Normal file
View File

@@ -0,0 +1,5 @@
export interface MessagesHandler {
title?: string;
text?: string,
type?: string,
}

View File

@@ -0,0 +1,12 @@
export interface RoleMenuUser {
type_user_id: string,
menu_id: string,
access: [
{
add: number,
update: number,
read: number,
delete: number
}
]
}