Compare commits
6
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
70db7662bb | ||
|
|
bb57ff72e7 | ||
|
|
9eef99a435 | ||
|
|
daff1610e3 | ||
|
|
5e3d263750 | ||
|
|
ced62ec0c4 |
@@ -1,17 +1,17 @@
|
|||||||
import "@/app/styles/base.css";
|
import "@/app/styles/base.css";
|
||||||
|
|
||||||
export const metadata = {
|
export const metadata = {
|
||||||
title: "유역하수도 통합 정보플랫폼",
|
title: "하수도플랫폼 통합관리시스템",
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function AuthLayout({
|
export default function AuthLayout({
|
||||||
children,
|
children,
|
||||||
}: {
|
}: {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
}) {
|
}) {
|
||||||
return (
|
return (
|
||||||
<html lang="ko">
|
<html lang="ko">
|
||||||
<body>{children}</body>
|
<body>{children}</body>
|
||||||
</html>
|
</html>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import type { Metadata } from "next";
|
|||||||
import { App } from "@/app";
|
import { App } from "@/app";
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: "유역하수도 통합 정보플랫폼",
|
title: "하수도플랫폼 통합관리시스템",
|
||||||
};
|
};
|
||||||
|
|
||||||
export default App;
|
export default App;
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
import { cookies } from "next/headers";
|
||||||
|
import { NextResponse } from "next/server";
|
||||||
|
|
||||||
|
import { COOKIE_DOMAIN, REFRESH_TOKEN } from "@/shared/config";
|
||||||
|
|
||||||
|
export async function POST() {
|
||||||
|
const cookieStore = await cookies();
|
||||||
|
cookieStore.delete({ name: REFRESH_TOKEN, domain: COOKIE_DOMAIN });
|
||||||
|
return NextResponse.json({ message: "Logged out" }, { status: 200 });
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
import type { Metadata } from "next";
|
||||||
|
import Image from "next/image";
|
||||||
|
|
||||||
|
import "@/app/styles/base.css";
|
||||||
|
import "@/app/styles/components.css";
|
||||||
|
|
||||||
|
export const metadata: Metadata = {
|
||||||
|
title: "하수도플랫폼 통합관리시스템",
|
||||||
|
description: "페이지가 존재하지 않습니다. 관리자에게 문의하여 주십시오.",
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function GlobalNotFound() {
|
||||||
|
return (
|
||||||
|
<html lang="ko">
|
||||||
|
<body>
|
||||||
|
<main className="flex min-h-screen flex-col items-center justify-center bg-[#f0f4f8] px-4 py-16">
|
||||||
|
<div className="mb-16 text-center">
|
||||||
|
<h1 className="text-[3.2rem] font-bold leading-snug tracking-tight">
|
||||||
|
<span className="text-primary">하수도플랫폼 통합관리시스템</span>
|
||||||
|
에 오신 것을 환영합니다.
|
||||||
|
</h1>
|
||||||
|
<p className="mt-6 text-[2rem] text-[#666]">
|
||||||
|
오류가 발생하였습니다.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<section className="card card-border flex w-full max-w-[72rem] flex-col items-center !rounded-2xl !py-16">
|
||||||
|
<Image
|
||||||
|
src="/images/magnifying-glass-with-warning.png"
|
||||||
|
alt=""
|
||||||
|
width={280}
|
||||||
|
height={280}
|
||||||
|
className="size-[28rem] object-contain"
|
||||||
|
/>
|
||||||
|
<p className="mt-4 text-[2.4rem] font-bold text-[#444]">
|
||||||
|
페이지가 존재하지 않습니다.
|
||||||
|
</p>
|
||||||
|
<p className="mt-2 text-[1.6rem] text-[#666]">
|
||||||
|
관리자에게 문의하여 주십시오
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -7,6 +7,7 @@ const nextConfig: NextConfig = {
|
|||||||
output: "standalone",
|
output: "standalone",
|
||||||
experimental: {
|
experimental: {
|
||||||
proxyTimeout: 600000,
|
proxyTimeout: 600000,
|
||||||
|
globalNotFound: true,
|
||||||
},
|
},
|
||||||
eslint: {
|
eslint: {
|
||||||
ignoreDuringBuilds: true,
|
ignoreDuringBuilds: true,
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 483 KiB |
@@ -92,6 +92,7 @@ async function silentRefresh(): Promise<void> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function logout(): Promise<void> {
|
async function logout(): Promise<void> {
|
||||||
|
await fetch("/api/auth/logout", { method: "POST" });
|
||||||
tokenManager.clearAuthToken();
|
tokenManager.clearAuthToken();
|
||||||
clearDeviceId();
|
clearDeviceId();
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
|
||||||
import type { PageableList, PageableParams } from "@/shared/model";
|
import type { PageableList, PageableParams } from "@/shared/model";
|
||||||
|
|
||||||
export interface AuthorizationsParams extends PageableParams {
|
export interface AuthorizationsParams extends PageableParams {
|
||||||
keywordType?: string;
|
keywordType?: string;
|
||||||
keyword?: string;
|
keyword?: string;
|
||||||
authorizationName?: string;
|
authorizationName?: string;
|
||||||
|
urlPatternValue?: string;
|
||||||
httpMethodCode?: string;
|
httpMethodCode?: string;
|
||||||
useYn?: string;
|
useYn?: string;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import { columns } from "../model/authorizations-table-columns";
|
|||||||
|
|
||||||
const DEFAULT_PARAMS = {
|
const DEFAULT_PARAMS = {
|
||||||
authorizationName: "",
|
authorizationName: "",
|
||||||
|
urlPatternValue: "",
|
||||||
httpMethodCode: "",
|
httpMethodCode: "",
|
||||||
sort: "regDt,desc",
|
sort: "regDt,desc",
|
||||||
page: 0,
|
page: 0,
|
||||||
@@ -36,6 +37,9 @@ function ModulePage() {
|
|||||||
const [authorizationName, setAuthorizationName] = useState(
|
const [authorizationName, setAuthorizationName] = useState(
|
||||||
params.authorizationName,
|
params.authorizationName,
|
||||||
);
|
);
|
||||||
|
const [urlPatternValue, setUrlPatternValue] = useState(
|
||||||
|
params.urlPatternValue,
|
||||||
|
);
|
||||||
const [httpMethodCode, setHttpMethodCode] = useState(params.httpMethodCode);
|
const [httpMethodCode, setHttpMethodCode] = useState(params.httpMethodCode);
|
||||||
|
|
||||||
const query = useQuery({
|
const query = useQuery({
|
||||||
@@ -43,6 +47,7 @@ function ModulePage() {
|
|||||||
queryFn: () =>
|
queryFn: () =>
|
||||||
AuthorizationsApi.getAuthorizationsList({
|
AuthorizationsApi.getAuthorizationsList({
|
||||||
authorizationName: params.authorizationName,
|
authorizationName: params.authorizationName,
|
||||||
|
urlPatternValue: params.urlPatternValue,
|
||||||
httpMethodCode: params.httpMethodCode,
|
httpMethodCode: params.httpMethodCode,
|
||||||
sort: params.sort,
|
sort: params.sort,
|
||||||
page: params.page,
|
page: params.page,
|
||||||
@@ -63,11 +68,12 @@ function ModulePage() {
|
|||||||
|
|
||||||
const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
|
const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
setParams({ authorizationName, httpMethodCode, page: 0 });
|
setParams({ authorizationName, urlPatternValue, httpMethodCode, page: 0 });
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleReset = () => {
|
const handleReset = () => {
|
||||||
setAuthorizationName("");
|
setAuthorizationName("");
|
||||||
|
setUrlPatternValue("");
|
||||||
setHttpMethodCode("");
|
setHttpMethodCode("");
|
||||||
resetParams();
|
resetParams();
|
||||||
};
|
};
|
||||||
@@ -113,12 +119,23 @@ function ModulePage() {
|
|||||||
API명
|
API명
|
||||||
</Label>
|
</Label>
|
||||||
<Input
|
<Input
|
||||||
id="keyword"
|
id="authorizationName"
|
||||||
className="h-[3.2rem] w-[24rem] rounded-sm !text-[1.3rem]"
|
className="h-[3.2rem] w-[24rem] rounded-sm !text-[1.3rem]"
|
||||||
value={authorizationName}
|
value={authorizationName}
|
||||||
onChange={(e) => setAuthorizationName(e.target.value)}
|
onChange={(e) => setAuthorizationName(e.target.value)}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
<div className="flex items-center gap-2">
|
||||||
|
<Label htmlFor="urlPatternValue" className="text-label">
|
||||||
|
API URL
|
||||||
|
</Label>
|
||||||
|
<Input
|
||||||
|
id="urlPatternValue"
|
||||||
|
className="h-[3.2rem] w-[24rem] rounded-sm !text-[1.3rem]"
|
||||||
|
value={urlPatternValue}
|
||||||
|
onChange={(e) => setUrlPatternValue(e.target.value)}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<Button className="h-[3.2rem]" type="submit">
|
<Button className="h-[3.2rem]" type="submit">
|
||||||
조회
|
조회
|
||||||
|
|||||||
@@ -1,10 +1,17 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import dayjs from "dayjs";
|
|
||||||
import Image from "next/image";
|
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
|
import Image from "next/image";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
|
|
||||||
import { useQuery } from "@tanstack/react-query";
|
import { useQuery } from "@tanstack/react-query";
|
||||||
|
import dayjs from "dayjs";
|
||||||
|
|
||||||
|
import { ENDPOINT } from "@/shared/config";
|
||||||
|
import { useAlertStore, useMenuStore, useMutationWrapper } from "@/shared/lib";
|
||||||
|
import { AttachmentApi } from "@/entities/attachment";
|
||||||
|
import { BoardApi } from "@/entities/board";
|
||||||
|
import { PostApi } from "@/entities/post";
|
||||||
import {
|
import {
|
||||||
Button,
|
Button,
|
||||||
Label,
|
Label,
|
||||||
@@ -12,14 +19,11 @@ import {
|
|||||||
RadioGroupItem,
|
RadioGroupItem,
|
||||||
Skeleton,
|
Skeleton,
|
||||||
} from "@common/components";
|
} from "@common/components";
|
||||||
import { AttachmentApi } from "@/entities/attachment";
|
|
||||||
import { PostApi } from "@/entities/post";
|
import { PostEvaluationApi } from "../api/post-evaluation-service";
|
||||||
import { BoardApi } from "@/entities/board";
|
|
||||||
import { ENDPOINT } from "@/shared/config";
|
|
||||||
import { useAlertStore, useMutationWrapper, useMenuStore } from "@/shared/lib";
|
|
||||||
import { PostAction } from "./post-action";
|
import { PostAction } from "./post-action";
|
||||||
import { PostComment } from "./post-comment";
|
import { PostComment } from "./post-comment";
|
||||||
import { PostEvaluationApi } from "../api/post-evaluation-service";
|
|
||||||
|
|
||||||
function Post({ bbsId, pstNo }: { bbsId: string; pstNo: string }) {
|
function Post({ bbsId, pstNo }: { bbsId: string; pstNo: string }) {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
@@ -255,7 +259,9 @@ function Post({ bbsId, pstNo }: { bbsId: string; pstNo: string }) {
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</PostAction>
|
</PostAction>
|
||||||
<PostComment bbsId={parseInt(bbsId)} pstNo={parseInt(pstNo)} />
|
{bbsInfo?.cmntUseYn === "Y" && (
|
||||||
|
<PostComment bbsId={parseInt(bbsId)} pstNo={parseInt(pstNo)} />
|
||||||
|
)}
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
import type { Config } from "tailwindcss";
|
import type { Config } from "tailwindcss";
|
||||||
import tailwindcssAnimate from "tailwindcss-animate";
|
import tailwindcssAnimate from "tailwindcss-animate";
|
||||||
|
|
||||||
import presetConfig from "../../tailwind.config.preset";
|
import presetConfig from "../../tailwind.config.preset";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
presets: [presetConfig],
|
presets: [presetConfig],
|
||||||
content: [
|
content: [
|
||||||
|
"./app/**/*.{js,ts,jsx,tsx}",
|
||||||
"./src/**/*.{js,ts,jsx,tsx}",
|
"./src/**/*.{js,ts,jsx,tsx}",
|
||||||
"../../packages/common/components/src/ui/**/*.{js,ts,jsx,tsx}",
|
"../../packages/common/components/src/ui/**/*.{js,ts,jsx,tsx}",
|
||||||
],
|
],
|
||||||
|
|||||||
Reference in New Issue
Block a user