Admin dashboard

# feat:
- Tampilan admin (web view)
- Tampilan dashboard investasi
- Get data review
### no issue
This commit is contained in:
2023-11-10 15:21:07 +08:00
parent 4c04137713
commit 65548de7c8
16 changed files with 233 additions and 132 deletions

View File

@@ -0,0 +1,36 @@
"use server"
import prisma from "@/app/lib/prisma"
export default async function Admin_funGetAllInvestasi() {
const res = await prisma.investasi.findMany({
where: {
MasterStatusInvestasi: {
name: {
not: "Draft"
}
}
},
select: {
id: true,
title: true,
authorId: true,
hargaLembar: true,
targetDana: true,
totalLembar: true,
roi: true,
active: true,
imagesId: true,
MasterStatusInvestasi: true,
BeritaInvestasi: true,
DokumenInvestasi: true,
ProspektusInvestasi: true,
MasterPembagianDeviden: true,
MasterPencarianInvestor: true,
MasterPeriodeDeviden: true,
SahamTerbeli: true,
},
})
// console.log(res)
return res
}

View File

@@ -1,6 +1,7 @@
"use client";
import { RouterAdminInvestasi } from "@/app/lib/router_hipmi/router_admin";
import { MODEL_Investasi } from "@/app_modules/investasi/model/model_investasi";
import {
ActionIcon,
Badge,
@@ -15,6 +16,7 @@ import {
} from "@mantine/core";
import { IconEdit } from "@tabler/icons-react";
import { useRouter } from "next/navigation";
import { useState } from "react";
const listBox = [
{
@@ -34,64 +36,40 @@ const listBox = [
},
{
id: 4,
name: "Total Proyek INvestasi",
name: "Total Proyek Investasi",
jumlah: 2,
},
];
const listTable = [
{
id: 1,
status: {
id: 1,
name: "Publish",
},
name: "Subway Kuta",
},
{
id: 2,
status: {
id: 2,
name: "Review",
},
name: "Event MCD",
},
{
id: 3,
status: {
id: 2,
name: " Review",
},
name: "Villa Batubulan",
},
{
id: 4,
status: {
id: 1,
name: "Publish",
},
name: "Kost Alif Denpasar",
},
{
id: 5,
status: {
id: 1,
name: "Publish",
},
name: "Pabrik Rokok Surya Gandum",
},
];
export default function Admin_Investasi({
listInvestasi,
}: {
listInvestasi: MODEL_Investasi[];
}) {
const [investasi, setInvestasi] = useState(listInvestasi);
export default function Admin_Investasi() {
const router = useRouter();
const tableBody = listTable.map((e) => (
const tableBody = investasi.map((e) => (
<tr key={e.id}>
<td>{e.name}</td>
<td>{e.status.id === 1 ? <Badge variant="dot" color="green" >{e.status.name}</Badge> : <Badge variant="dot" color="red">{e.status.name}</Badge> }</td>
<td>{e.title}</td>
<td>
<ActionIcon variant="transparent"
onClick={() => router.push(RouterAdminInvestasi.halaman_aksi + `${e.id}`)}
{e.MasterStatusInvestasi.id === "3" ? (
<Badge variant="dot" color="green">
{e.MasterStatusInvestasi.name}
</Badge>
) : (
<Badge variant="dot" color="red">
{e.MasterStatusInvestasi.name}
</Badge>
)}
</td>
<td>
<ActionIcon
variant="transparent"
onClick={() =>
router.push(RouterAdminInvestasi.halaman_aksi + `${e.id}`)
}
>
<IconEdit />
</ActionIcon>
@@ -125,18 +103,61 @@ export default function Admin_Investasi() {
<Text>List Investasi</Text>
</Center>
<ScrollArea w={"100%"}>
<Table withBorder highlightOnHover >
<thead>
<tr>
<th>Nama Proyek Investasi</th>
<th>Status</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>{tableBody}</tbody>
</Table>
<Table withBorder highlightOnHover>
<thead>
<tr>
<th>Nama Proyek Investasi</th>
<th>Status</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>{tableBody}</tbody>
</Table>
</ScrollArea>
</Box>
</>
);
}
// const listTable = [
// {
// id: 1,
// status: {
// id: 1,
// name: "Publish",
// },
// name: "Subway Kuta",
// },
// {
// id: 2,
// status: {
// id: 2,
// name: "Review",
// },
// name: "Event MCD",
// },
// {
// id: 3,
// status: {
// id: 2,
// name: " Review",
// },
// name: "Villa Batubulan",
// },
// {
// id: 4,
// status: {
// id: 1,
// name: "Publish",
// },
// name: "Kost Alif Denpasar",
// },
// {
// id: 5,
// status: {
// id: 1,
// name: "Publish",
// },
// name: "Pabrik Rokok Surya Gandum",
// },
// ];

View File

@@ -1,5 +1,5 @@
import AdminMain from "./view";
import AdminLayout from "./layout";
import SplashDashboardAdmin from "./splash";
export {AdminMain ,AdminLayout}
export { AdminMain, AdminLayout, SplashDashboardAdmin };

View File

@@ -3,6 +3,7 @@
import {
ActionIcon,
AppShell,
Avatar,
Box,
Burger,
Drawer,
@@ -10,6 +11,7 @@ import {
Group,
Header,
MediaQuery,
NavLink,
Navbar,
Stack,
Text,
@@ -19,7 +21,7 @@ import {
import React, { useState } from "react";
import HeaderTamplate from "../../component/header_tamplate";
import { useDisclosure } from "@mantine/hooks";
import { IconLogout } from "@tabler/icons-react";
import { IconLetterH, IconLogout } from "@tabler/icons-react";
import {
RouterAdminAward,
RouterAdminDashboard,
@@ -27,6 +29,7 @@ import {
} from "@/app/lib/router_hipmi/router_admin";
import { useRouter } from "next/navigation";
import { RouterHome } from "@/app/lib/router_hipmi/router_home";
import { Logout } from "@/app_modules/auth";
export default function AdminLayout({
children,
@@ -36,6 +39,7 @@ export default function AdminLayout({
const theme = useMantineTheme();
const [opened, setOpened] = useState(false);
const router = useRouter();
// const [active, setActive] = useState(false)
const listAdminPage = [
{
@@ -58,24 +62,26 @@ export default function AdminLayout({
return (
<>
<AppShell
// footer={
// <Footer height={50}>
// {/* Web View */}
// <MediaQuery smallerThan={"md"} styles={{ display: "none" }}>
// <Group position="apart">
// <Text>1</Text>
// <Text>1</Text>
// <Text>1</Text>
// </Group>
// </MediaQuery>
// {/* <MediaQuery smallerThan={"md"} styles={{ display: "none", borderStyle: "transparent" }}>
// <Text>ok</Text>
// </MediaQuery> */}
// </Footer>
// }
padding="sm"
navbarOffsetBreakpoint="md"
asideOffsetBreakpoint="sm"
navbar={
<MediaQuery smallerThan={"md"} styles={{ display: "none" }}>
<Navbar width={{ lg: 200, md: 200, sm: 200, base: 200 }} hiddenBreakpoint="md" hidden={!opened} p="xs" bg={"gray.2"}>
{listAdminPage.map((e) => (
<NavLink
key={e.id}
label={e.name}
onClick={() => {
router.push(e.route);
}}
/>
))}
</Navbar>
</MediaQuery>
}
header={
<Header height={50}>
<Header height={50} bg={"gray.2"}>
{/* Mobile View */}
<MediaQuery largerThan="md" styles={{ display: "none" }}>
<Group h={50} align="center" px={"md"} position="apart">
@@ -99,20 +105,16 @@ export default function AdminLayout({
{/* Web View */}
<MediaQuery smallerThan={"md"} styles={{ display: "none" }}>
<Group position="apart" align="center" h={50} px={"md"}>
<Text fw={"lighter"}>HIPMI</Text>
<Title order={4}>Dashboard Admin</Title>
<Group>
{/* <Group>
{listAdminPage.map((e) => (
<Text key={e.id} onClick={() => router.push(e.route)}>
{e.name}
</Text>
))}
</Group>
<ActionIcon
variant="transparent"
onClick={() => router.push(RouterHome.main_home)}
>
<IconLogout color="red" />
</ActionIcon>
</Group> */}
<Logout />
</Group>
</MediaQuery>
</Header>

View File

@@ -0,0 +1,22 @@
"use client";
import { RouterAdminDashboard } from "@/app/lib/router_hipmi/router_admin";
import { Stack, Text, Title } from "@mantine/core";
import { useShallowEffect } from "@mantine/hooks";
import { useRouter } from "next/navigation";
export default function SplashDashboardAdmin() {
const router = useRouter()
useShallowEffect(() => {
setTimeout(() => router.push(RouterAdminDashboard.main_admin), 2000)
},[])
return (
<>
<Stack align="center" justify="center" h={"100vh"}>
<Title order={4} c={"orange"}>Selamat Datang, ADMIN</Title>
<Title c={"red"}>HIPMI</Title>
</Stack>
</>
);
}