This commit is contained in:
2026-04-15 16:55:58 +09:00
110 changed files with 1259 additions and 761 deletions
@@ -157,9 +157,9 @@ function LoginPage() {
<h1>
유역하수도통합플랫폼
<br />
<span>하수도 포탈</span>
<span>유역하수도 포탈</span>
</h1>
<p>유역하수도통합플랫폼 하수도 포탈에 오신 것을 환영합니다.</p>
<p>유역하수도통합플랫폼 유역하수도포탈에 오신 것을 환영합니다.</p>
</div>
<div className="img">
<Image src={images.logo} width={229} height={46} alt="logo" />
+17
View File
@@ -0,0 +1,17 @@
import "@/app/styles/base.css";
export const metadata = {
title: "유역하수도 통합 정보플랫폼",
};
export default function AuthLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="ko">
<body>{children}</body>
</html>
);
}
@@ -1,4 +1,5 @@
import type { Metadata } from "next";
import { App } from "@/app";
export const metadata: Metadata = {
@@ -1,7 +1,9 @@
import { client } from "@/shared/api";
import { ENDPOINT } from "@/shared/config";
import {
type NtftalkTemp,
type NtftalkTempDeleteMultiPayload,
type NtftalkTempPageList,
type NtftalkTempSavePayload,
type NtftalkTempSearchParams,
@@ -51,6 +53,12 @@ class NtftalkTempApiService implements NtftalkTempService {
`${ENDPOINT.NTFTALK_SERVICE.NTFTALK_TEMP}/${encodeURIComponent(templateCode)}`,
);
}
async deleteMultiNtftalkTemp(
payload: NtftalkTempDeleteMultiPayload,
): Promise<void> {
await client.post(`${ENDPOINT.NTFTALK_SERVICE.NTFTALK_TEMP}/delmulti`, payload);
}
}
export const NtftalkTempApi = new NtftalkTempApiService();
@@ -1,5 +1,6 @@
import { client } from "@/shared/api";
import { ENDPOINT } from "@/shared/config";
import {
type NtftalkVar,
type NtftalkVarPageList,
@@ -27,8 +28,10 @@ class NtftalkVarApiService implements NtftalkVarService {
return response.data;
}
async saveNtftalkVar(payload: NtftalkVarSavePayload): Promise<NtftalkVar> {
const response = await client.post<NtftalkVar>(
async saveNtftalkVar(
payload: NtftalkVarSavePayload[],
): Promise<NtftalkVar[]> {
const response = await client.post<NtftalkVar[]>(
`${ENDPOINT.NTFTALK_SERVICE.NTFTALK_VAR}`,
payload,
);
@@ -40,10 +40,14 @@ export interface NtftalkTemp {
templateName: string;
templateContent: string;
templateMessageType: string;
templateMessageTypeNm: string;
templateEmphasizeType: string;
templateEmphasizeTypeNm: string;
templateImageUrl: string;
inspectionStatus: string;
inspectionStatusNm: string;
status: string;
statusNm: string;
createdAt: string;
modifiedAt: string;
buttons?: NtftalkBtnTemp[];
@@ -94,6 +98,10 @@ export interface NtftalkTempUpdatePayload {
quickReplies?: NtftalkQuickTempSavePayload[];
}
export interface NtftalkTempDeleteMultiPayload {
templateCodes: string[];
}
export type NtftalkTempPageList = PageableList<NtftalkTemp>;
export interface NtftalkTempService {
@@ -107,4 +115,5 @@ export interface NtftalkTempService {
payload: NtftalkTempUpdatePayload,
): Promise<NtftalkTemp>;
deleteNtftalkTemp(templateCode: string): Promise<void>;
deleteMultiNtftalkTemp(payload: NtftalkTempDeleteMultiPayload): Promise<void>;
}
@@ -11,17 +11,29 @@ export interface NtftalkVar {
sender: string;
varNm: string;
varDesc: string;
regDt: string;
regDt?: string;
regr: string;
}
export interface NtftalkVarSavePayload {
varCd: string;
sender?: string;
varNm: string;
varDesc?: string;
regr?: string;
}
export type NtftalkVarSavePayload =
| {
mode: "C";
varCd: string;
varNm: string;
sender?: string;
varDesc?: string;
regr?: string;
}
| {
mode: "U";
varCd: string;
varNm: string;
varDesc?: string;
}
| {
mode: "D";
varCd: string;
};
export interface NtftalkVarUpdatePayload {
varNm: string;
@@ -31,9 +43,11 @@ export interface NtftalkVarUpdatePayload {
export type NtftalkVarPageList = PageableList<NtftalkVar>;
export interface NtftalkVarService {
getNtftalkVarPage(params: NtftalkVarSearchParams): Promise<NtftalkVarPageList>;
getNtftalkVarPage(
params: NtftalkVarSearchParams,
): Promise<NtftalkVarPageList>;
getNtftalkVar(varCd: string): Promise<NtftalkVar>;
saveNtftalkVar(payload: NtftalkVarSavePayload): Promise<NtftalkVar>;
saveNtftalkVar(payload: NtftalkVarSavePayload[]): Promise<NtftalkVar[]>;
updateNtftalkVar(
varCd: string,
payload: NtftalkVarUpdatePayload,
@@ -31,12 +31,12 @@ function LoginPage() {
<div className="login fx">
<div className="left_box fx">
<div className="text">
<h1>
하수도정보시스템
<h1>
유역하수도통합플랫폼
<br />
<span>CMS 통합관리시스템</span>
<span>하수도플랫폼 통합관리(CMS)시스템</span>
</h1>
<p>하수도정보시스템 CMS 통합관리시스템에 오신 것을 환영합니다.</p>
<p>유역하수도통합플랫폼 통합관리(CMS)시스템에 오신 것을 환영합니다.</p>
</div>
<div className="img">
<Image src={images.logo} width={229} height={46} alt="logo" />
@@ -0,0 +1,17 @@
import { z } from "zod";
export const ntftalkVarAdditionalSchema = z.object({
draftVars: z.array(
z.object({
varCd: z.string().min(1, "변수코드를 입력하세요."),
varNm: z.string().min(1, "변수명을 입력하세요."),
varDesc: z.string().default(""),
sender: z.string().default(""),
regr: z.string().default(""),
}),
),
});
export type NtftalkVarAdditionalFormData = z.infer<
typeof ntftalkVarAdditionalSchema
>;
@@ -0,0 +1,52 @@
import { z } from "zod";
import type { NtftalkVarSavePayload } from "@/entities/ntftalk";
import type { NtftalkVarGridRow } from "./ntftalk-var-grid";
export const varDraftRowSchema = z.object({
varCd: z.string().min(1),
varNm: z.string().min(1),
varDesc: z.string().optional(),
sender: z.string().optional(),
});
export function buildNtftalkVarBatchPayload(input: {
pendingDeleteVarCds: ReadonlySet<string>;
draftVars?: NtftalkVarGridRow[];
regr?: string;
}): NtftalkVarSavePayload[] {
const { draftVars, pendingDeleteVarCds, regr } = input;
const payloads: NtftalkVarSavePayload[] = [];
if (!draftVars) {
for (const varCd of pendingDeleteVarCds) {
payloads.push({ mode: "D", varCd });
}
return payloads;
}
for (const d of draftVars) {
const parsed = varDraftRowSchema.safeParse({
varCd: d.varCd,
varNm: d.varNm,
varDesc: d.varDesc || undefined,
sender: d.sender || undefined,
});
if (!parsed.success) {
throw new Error(
parsed.error.issues[0]?.message ?? "유효하지 않은 입력입니다.",
);
}
payloads.push({
mode: "C",
varCd: parsed.data.varCd,
varNm: parsed.data.varNm,
varDesc: parsed.data.varDesc,
sender: parsed.data.sender,
regr,
});
}
return payloads;
}
@@ -2,13 +2,11 @@ import type { NtftalkVar } from "@/entities/ntftalk";
export interface NtftalkVarGridRow extends NtftalkVar {
clientId?: string;
isDraft?: boolean;
}
export function createEmptyVarDraft(clientId: string): NtftalkVarGridRow {
return {
clientId,
isDraft: true,
varCd: "",
varNm: "",
varDesc: "",

Some files were not shown because too many files have changed in this diff Show More