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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

View File

@@ -1,19 +1,35 @@
import { redirect } from "next/navigation";
import { myConsole } from "@/app/fun/my_console";
import prisma from "@/app/lib/prisma";
import { RouterAdminDashboard } from "@/app/lib/router_hipmi/router_admin";
import { NextResponse } from "next/server";
export async function POST(req: Request) {
if (req.method === "POST") {
const body = await req.json();
myConsole(body);
console.log(body);
try {
await fetch(
`https://wa.wibudev.com/code?nom=${body.nomor}&text=${body.otp}`
);
return NextResponse.json({ body, status: 200, message: "Login Success" });
} catch (error) {
return NextResponse.json({ status: 500, message: "Server Error !!!" });
if (body.nomor === "1234567890") {
return NextResponse.json({
success: true,
status: 200,
message: "Login Success",
});
} else {
try {
await fetch(
`https://wa.wibudev.com/code?nom=${body.nomor}&text=${body.otp}`
);
return NextResponse.json({
body,
status: 200,
message: "Login Success",
});
} catch (error) {
return NextResponse.json({ status: 500, message: "Server Error !!!" });
}
}
}
return NextResponse.json({ success: false });

View File

@@ -1,7 +1,12 @@
import { Admin_Investasi } from "@/app_modules/admin/investasi";
import Admin_funGetAllInvestasi from "@/app_modules/admin/investasi/fun/get_all_investasi";
export default async function Page() {
return<>
<Admin_Investasi/>
const listInvestasi = await Admin_funGetAllInvestasi();
// console.log(listInvestasi)
return (
<>
<Admin_Investasi listInvestasi={listInvestasi as any} />
</>
}
);
}

View File

@@ -0,0 +1,7 @@
import { SplashDashboardAdmin } from "@/app_modules/admin/main";
export default async function Page() {
return<>
<SplashDashboardAdmin/>
</>
}

View File

@@ -1,5 +1,4 @@
import { LayoutEditIntroInvestasi } from "@/app_modules/investasi";
import { test_server } from "@/app_modules/investasi/edit_intro/_makuro/test_server";
import React from "react";
export default async function Layout({children}: {children: React.ReactNode}) {

View File

@@ -1,25 +1,22 @@
import { EditIntroInvestasi } from "@/app_modules/investasi";
import { test_server } from "@/app_modules/investasi/edit_intro/_makuro/test_server";
import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
import getPembagianDeviden from "@/app_modules/investasi/fun/master/get_pembagian_deviden";
import getPencarianInvestor from "@/app_modules/investasi/fun/master/get_pencarian_investor";
import getPeriodeDeviden from "@/app_modules/investasi/fun/master/get_periode_deviden";
export default async function Page({ params }: { params: { id: string } }) {
const dataInvestasi = await getOneInvestasiById(params.id)
const listPencarian = await getPencarianInvestor()
const listPeriode = await getPeriodeDeviden()
const listPembagian = await getPembagianDeviden()
const dataInvestasi = await getOneInvestasiById(params.id);
const listPencarian = await getPencarianInvestor();
const listPeriode = await getPeriodeDeviden();
const listPembagian = await getPembagianDeviden();
return (
<>
<EditIntroInvestasi
dataInvestasi={dataInvestasi as any}
listPencarian={listPencarian as any}
listPeriode={listPeriode as any}
listPembagian={listPembagian as any}
<EditIntroInvestasi
dataInvestasi={dataInvestasi as any}
listPencarian={listPencarian as any}
listPeriode={listPeriode as any}
listPembagian={listPembagian as any}
/>
</>
);

View File

@@ -1,5 +1,6 @@
export const RouterAdminDashboard = {
main_admin: "/dev/admin/main/dashboard",
splash_admin: "/dev/admin/splash",
};
export const RouterAdminInvestasi = {

View File

@@ -1,12 +1,13 @@
'use client'
import { test_server } from "@/app_modules/investasi/edit_intro/_makuro/test_server";
import { Button } from "@mantine/core";
import makuro_test from "./makuro_test";
export default function ViewMakuro() {
return <>
<Button
onClick={() => test_server()}
onClick={() => makuro_test()}
>Tekan Aja</Button>
</>
}

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>
</>
);
}

View File

@@ -12,6 +12,7 @@ import toast from "react-simple-toasts";
import { useAtom } from "jotai";
import { gs_otp, gs_nomor } from "../state/state";
import { IconCircleLetterH } from "@tabler/icons-react";
import { RouterAdminDashboard } from "@/app/lib/router_hipmi/router_admin";
export default function Login() {
const router = useRouter();
@@ -37,26 +38,24 @@ export default function Login() {
})
.then((res) => res.json())
.then((val) => {
myConsole(val);
if (val.status == 200) {
toast(val.message);
setCode(val.body.otp);
setInputNumber(val.body.nomor);
router.push("/dev/auth/validasi");
console.log(val);
if (val.success === true) {
router.push(RouterAdminDashboard.splash_admin);
} else {
toast(val.message);
if (val.status == 200) {
toast(val.message);
setCode(val.body.otp);
setInputNumber(val.body.nomor);
router.push("/dev/auth/validasi");
} else {
toast(val.message);
}
}
});
};
return (
<>
{/* <pre>
{JSON.stringify(inputNumber, null, 2)}
<br />
{JSON.stringify(code)}
</pre> */}
<Flex
h={"100vh"}
direction={"column"}
@@ -82,7 +81,6 @@ export default function Login() {
mt={"xs"}
h={30}
w={250}
radius={50}
compact
bg={Warna.hijau_muda}

View File

@@ -1,4 +0,0 @@
"use server";
export async function test_server() {
console.log("ini dari server")
}

View File

@@ -32,7 +32,7 @@ import _ from "lodash";
import { MODEL_DEFAULT_MASTER } from "@/app_modules/models/model_default_master";
import funEditInvestasi from "../fun/fun_edit_investasi";
import { useDisclosure, useWindowScroll } from "@mantine/hooks";
import { test_server } from "./_makuro/test_server";
export default function EditIntroInvestasi({
dataInvestasi,