@@ -1,162 +1,162 @@
|
||||
"use client";
|
||||
|
||||
import { useEffect, useState } from "react";
|
||||
|
||||
import {
|
||||
Button,
|
||||
Dialog,
|
||||
DialogClose,
|
||||
DialogContent,
|
||||
DialogFooter,
|
||||
DialogHeader,
|
||||
DialogTitle,
|
||||
Input,
|
||||
Label,
|
||||
} from "@common/components";
|
||||
|
||||
export interface ApprovalFormData {
|
||||
lastCfmtnPicNm: string;
|
||||
lastCfmtnPicTelNo: string;
|
||||
lastCfmtnPicDeptNm: string;
|
||||
lastCfmtnPicJbgdNm: string;
|
||||
}
|
||||
|
||||
export interface ApprovalInputDialogProps {
|
||||
open: boolean;
|
||||
onOpenChange: (open: boolean) => void;
|
||||
onConfirm?: (data: ApprovalFormData) => void | Promise<void>;
|
||||
}
|
||||
|
||||
export function ApprovalInputDialog({
|
||||
open,
|
||||
onOpenChange,
|
||||
onConfirm,
|
||||
}: ApprovalInputDialogProps) {
|
||||
const [lastCfmtnPicNm, setLastCfmtnPicNm] = useState("");
|
||||
const [lastCfmtnPicTelNo, setLastCfmtnPicTelNo] = useState("");
|
||||
const [lastCfmtnPicDeptNm, setLastCfmtnPicDeptNm] = useState("");
|
||||
const [lastCfmtnPicJbgdNm, setLastCfmtnPicJbgdNm] = useState("");
|
||||
|
||||
const [isSubmitting, setIsSubmitting] = useState(false);
|
||||
|
||||
const resetForm = () => {
|
||||
setLastCfmtnPicNm("");
|
||||
setLastCfmtnPicTelNo("");
|
||||
setLastCfmtnPicDeptNm("");
|
||||
setLastCfmtnPicJbgdNm("");
|
||||
};
|
||||
|
||||
const handleDialogOpenChange = (nextOpen: boolean) => {
|
||||
if (!nextOpen) resetForm();
|
||||
onOpenChange(nextOpen);
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
if (!open) {
|
||||
resetForm();
|
||||
}
|
||||
}, [open]);
|
||||
|
||||
const handleConfirm = async () => {
|
||||
try {
|
||||
setIsSubmitting(true);
|
||||
const formData: ApprovalFormData = {
|
||||
lastCfmtnPicNm: lastCfmtnPicNm.trim(),
|
||||
lastCfmtnPicTelNo: lastCfmtnPicTelNo.trim(),
|
||||
lastCfmtnPicDeptNm: lastCfmtnPicDeptNm.trim(),
|
||||
lastCfmtnPicJbgdNm: lastCfmtnPicJbgdNm.trim(),
|
||||
};
|
||||
await onConfirm?.(formData);
|
||||
} finally {
|
||||
setIsSubmitting(false);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<Dialog open={open} onOpenChange={handleDialogOpenChange}>
|
||||
<DialogContent
|
||||
className="max-w-[56rem]"
|
||||
aria-describedby={undefined}
|
||||
>
|
||||
<DialogHeader>
|
||||
<DialogTitle>승인 정보 입력</DialogTitle>
|
||||
</DialogHeader>
|
||||
<div className="flex flex-col gap-4 py-2">
|
||||
<div className="flex flex-col gap-2">
|
||||
<Label className="text-label">최종 확인 담당자명</Label>
|
||||
<Input
|
||||
value={lastCfmtnPicNm}
|
||||
onChange={(e) => {
|
||||
setLastCfmtnPicNm(e.target.value);
|
||||
}}
|
||||
className="!text-[1.3rem]"
|
||||
placeholder="담당자명을 입력하세요."
|
||||
disabled={isSubmitting}
|
||||
/>
|
||||
</div>
|
||||
<div className="flex flex-col gap-2">
|
||||
<Label className="text-label">
|
||||
최종 확인 담당자 전화번호
|
||||
</Label>
|
||||
<Input
|
||||
value={lastCfmtnPicTelNo}
|
||||
onChange={(e) => {
|
||||
setLastCfmtnPicTelNo(e.target.value);
|
||||
}}
|
||||
className="!text-[1.3rem]"
|
||||
placeholder="전화번호를 입력하세요."
|
||||
disabled={isSubmitting}
|
||||
/>
|
||||
</div>
|
||||
<div className="flex flex-col gap-2">
|
||||
<Label className="text-label">
|
||||
최종 확인 담당자 부서명
|
||||
</Label>
|
||||
<Input
|
||||
value={lastCfmtnPicDeptNm}
|
||||
onChange={(e) => {
|
||||
setLastCfmtnPicDeptNm(e.target.value);
|
||||
}}
|
||||
className="!text-[1.3rem]"
|
||||
placeholder="부서명을 입력하세요."
|
||||
disabled={isSubmitting}
|
||||
/>
|
||||
</div>
|
||||
<div className="flex flex-col gap-2">
|
||||
<Label className="text-label">
|
||||
최종 확인 담당자 직급명
|
||||
</Label>
|
||||
<Input
|
||||
value={lastCfmtnPicJbgdNm}
|
||||
onChange={(e) => {
|
||||
setLastCfmtnPicJbgdNm(e.target.value);
|
||||
}}
|
||||
className="!text-[1.3rem]"
|
||||
placeholder="직급명을 입력하세요."
|
||||
disabled={isSubmitting}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<DialogFooter>
|
||||
<DialogClose asChild>
|
||||
<Button
|
||||
type="button"
|
||||
color="gray"
|
||||
disabled={isSubmitting}
|
||||
>
|
||||
취소
|
||||
</Button>
|
||||
</DialogClose>
|
||||
<Button
|
||||
type="button"
|
||||
color="primary"
|
||||
disabled={isSubmitting}
|
||||
onClick={() => void handleConfirm()}
|
||||
>
|
||||
확인
|
||||
</Button>
|
||||
</DialogFooter>
|
||||
</DialogContent>
|
||||
</Dialog>
|
||||
);
|
||||
}
|
||||
"use client";
|
||||
|
||||
import { useEffect, useState } from "react";
|
||||
|
||||
import {
|
||||
Button,
|
||||
Dialog,
|
||||
DialogClose,
|
||||
DialogContent,
|
||||
DialogFooter,
|
||||
DialogHeader,
|
||||
DialogTitle,
|
||||
Input,
|
||||
Label,
|
||||
} from "@common/components";
|
||||
|
||||
export interface ApprovalFormData {
|
||||
lastCfmtnPicNm: string;
|
||||
lastCfmtnPicTelnoCn: string;
|
||||
lastCfmtnPicDeptNm: string;
|
||||
lastCfmtnPicJbgdNm: string;
|
||||
}
|
||||
|
||||
export interface ApprovalInputDialogProps {
|
||||
open: boolean;
|
||||
onOpenChange: (open: boolean) => void;
|
||||
onConfirm?: (data: ApprovalFormData) => void | Promise<void>;
|
||||
}
|
||||
|
||||
export function ApprovalInputDialog({
|
||||
open,
|
||||
onOpenChange,
|
||||
onConfirm,
|
||||
}: ApprovalInputDialogProps) {
|
||||
const [lastCfmtnPicNm, setLastCfmtnPicNm] = useState("");
|
||||
const [lastCfmtnPicTelnoCn, setLastCfmtnPicTelnoCn] = useState("");
|
||||
const [lastCfmtnPicDeptNm, setLastCfmtnPicDeptNm] = useState("");
|
||||
const [lastCfmtnPicJbgdNm, setLastCfmtnPicJbgdNm] = useState("");
|
||||
|
||||
const [isSubmitting, setIsSubmitting] = useState(false);
|
||||
|
||||
const resetForm = () => {
|
||||
setLastCfmtnPicNm("");
|
||||
setLastCfmtnPicTelnoCn("");
|
||||
setLastCfmtnPicDeptNm("");
|
||||
setLastCfmtnPicJbgdNm("");
|
||||
};
|
||||
|
||||
const handleDialogOpenChange = (nextOpen: boolean) => {
|
||||
if (!nextOpen) resetForm();
|
||||
onOpenChange(nextOpen);
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
if (!open) {
|
||||
resetForm();
|
||||
}
|
||||
}, [open]);
|
||||
|
||||
const handleConfirm = async () => {
|
||||
try {
|
||||
setIsSubmitting(true);
|
||||
const formData: ApprovalFormData = {
|
||||
lastCfmtnPicNm: lastCfmtnPicNm.trim(),
|
||||
lastCfmtnPicTelnoCn: lastCfmtnPicTelnoCn.trim(),
|
||||
lastCfmtnPicDeptNm: lastCfmtnPicDeptNm.trim(),
|
||||
lastCfmtnPicJbgdNm: lastCfmtnPicJbgdNm.trim(),
|
||||
};
|
||||
await onConfirm?.(formData);
|
||||
} finally {
|
||||
setIsSubmitting(false);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<Dialog open={open} onOpenChange={handleDialogOpenChange}>
|
||||
<DialogContent
|
||||
className="max-w-[56rem]"
|
||||
aria-describedby={undefined}
|
||||
>
|
||||
<DialogHeader>
|
||||
<DialogTitle>승인 정보 입력</DialogTitle>
|
||||
</DialogHeader>
|
||||
<div className="flex flex-col gap-4 py-2">
|
||||
<div className="flex flex-col gap-2">
|
||||
<Label className="text-label">최종 확인 담당자명</Label>
|
||||
<Input
|
||||
value={lastCfmtnPicNm}
|
||||
onChange={(e) => {
|
||||
setLastCfmtnPicNm(e.target.value);
|
||||
}}
|
||||
className="!text-[1.3rem]"
|
||||
placeholder="담당자명을 입력하세요."
|
||||
disabled={isSubmitting}
|
||||
/>
|
||||
</div>
|
||||
<div className="flex flex-col gap-2">
|
||||
<Label className="text-label">
|
||||
최종 확인 담당자 전화번호
|
||||
</Label>
|
||||
<Input
|
||||
value={lastCfmtnPicTelnoCn}
|
||||
onChange={(e) => {
|
||||
setLastCfmtnPicTelnoCn(e.target.value);
|
||||
}}
|
||||
className="!text-[1.3rem]"
|
||||
placeholder="전화번호를 입력하세요."
|
||||
disabled={isSubmitting}
|
||||
/>
|
||||
</div>
|
||||
<div className="flex flex-col gap-2">
|
||||
<Label className="text-label">
|
||||
최종 확인 담당자 부서명
|
||||
</Label>
|
||||
<Input
|
||||
value={lastCfmtnPicDeptNm}
|
||||
onChange={(e) => {
|
||||
setLastCfmtnPicDeptNm(e.target.value);
|
||||
}}
|
||||
className="!text-[1.3rem]"
|
||||
placeholder="부서명을 입력하세요."
|
||||
disabled={isSubmitting}
|
||||
/>
|
||||
</div>
|
||||
<div className="flex flex-col gap-2">
|
||||
<Label className="text-label">
|
||||
최종 확인 담당자 직급명
|
||||
</Label>
|
||||
<Input
|
||||
value={lastCfmtnPicJbgdNm}
|
||||
onChange={(e) => {
|
||||
setLastCfmtnPicJbgdNm(e.target.value);
|
||||
}}
|
||||
className="!text-[1.3rem]"
|
||||
placeholder="직급명을 입력하세요."
|
||||
disabled={isSubmitting}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<DialogFooter>
|
||||
<DialogClose asChild>
|
||||
<Button
|
||||
type="button"
|
||||
color="gray"
|
||||
disabled={isSubmitting}
|
||||
>
|
||||
취소
|
||||
</Button>
|
||||
</DialogClose>
|
||||
<Button
|
||||
type="button"
|
||||
color="primary"
|
||||
disabled={isSubmitting}
|
||||
onClick={() => void handleConfirm()}
|
||||
>
|
||||
확인
|
||||
</Button>
|
||||
</DialogFooter>
|
||||
</DialogContent>
|
||||
</Dialog>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -15,7 +15,12 @@ export class StatisticsInputStatusApiService implements StatisticsInputStatusSer
|
||||
): Promise<StatsInputStatusListApiResponse> {
|
||||
const response = await stClient.get<StatsInputStatusListApiResponse>(
|
||||
`${ENDPOINT.ST_SERVICE.INPUT}/stats-input-status`,
|
||||
{ params: param },
|
||||
{
|
||||
params: param,
|
||||
paramsSerializer: {
|
||||
indexes: null,
|
||||
},
|
||||
},
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
@@ -6,7 +6,8 @@ export interface StatsInputStatusListRequestParams {
|
||||
sewerBzmnCd?: string | null;
|
||||
statsYr: string;
|
||||
statsCd?: string | null;
|
||||
laeSbmsnSttsCd?: string | null;
|
||||
/** 지자체 제출 상태 코드 목록 (쿼리스트링 lclgvSbmsnSttsCd=2&lclgvSbmsnSttsCd=3 형태로 전송) */
|
||||
lclgvSbmsnSttsCd?: string[] | null;
|
||||
}
|
||||
|
||||
export interface StatsInputStatusList {
|
||||
@@ -46,37 +47,43 @@ export interface ReportSearchRequestDto {
|
||||
|
||||
/** 통계 검증 리포트 현황 조회 ResponseDto */
|
||||
export interface ReportStatusResponseDto {
|
||||
ctpvNm?: string;
|
||||
sggNm?: string;
|
||||
sewerBzmnCd?: string;
|
||||
statsCd?: string;
|
||||
menuTabName?: string;
|
||||
laeSbmsnSttsCd?: string;
|
||||
laeSbmsnSttsNm?: string;
|
||||
laeSbmsnYmd?: string;
|
||||
statPicSbmsnSttsCd?: string;
|
||||
statPicSbmsnSttsNm?: string;
|
||||
ctpvSbmsnYmd?: string;
|
||||
pbcpSbmsnSttsCd?: string;
|
||||
pbcpSbmsnSttsNm?: string;
|
||||
pbcpCfmtnYmd?: string;
|
||||
laePicNm?: string;
|
||||
laePicTelNo?: string;
|
||||
laeKbrdrDeptNm?: string;
|
||||
laeKbrdrJbgdNm?: string;
|
||||
laeIdfrNm?: string;
|
||||
laeIdfrTelNo?: string;
|
||||
laeIdfrDeptNm?: string;
|
||||
laeIdfrJbgdNm?: string;
|
||||
mctpvIdfrNm?: string;
|
||||
mctpvIdfrTelNo?: string;
|
||||
mctpvIdfrDeptNm?: string;
|
||||
mctpvIdfrJbgdNm?: string;
|
||||
lastCfmtnPicNm?: string;
|
||||
lastCfmtnPicTelNo?: string;
|
||||
lastCfmtnPicDeptNm?: string;
|
||||
lastCfmtnPicJbgdNm?: string;
|
||||
rjctOpnnCn?: string;
|
||||
ctpvNm?: string | null;
|
||||
sggNm?: string | null;
|
||||
sewerBzmnCd?: string | null;
|
||||
statsCd?: string | null;
|
||||
menuTabName?: string | null;
|
||||
lclgvSbmsnSttsCd?: string | null;
|
||||
lclgvSbmsnSttsNm?: string | null;
|
||||
lclgvSbmsnYmd?: string | null;
|
||||
mctpvPicSbmsnSttsCd?: string | null;
|
||||
mctpvPicSbmsnSttsNm?: string | null;
|
||||
ctpvSbmsnYmd?: string | null;
|
||||
pbcpSbmsnSttsCd?: string | null;
|
||||
pbcpSbmsnSttsNm?: string | null;
|
||||
pbcpCfmtnYmd?: string | null;
|
||||
lclgvPicNm?: string | null;
|
||||
lclgvPicTelnoCn?: string | null;
|
||||
lclgvKbrdrDeptNm?: string | null;
|
||||
lclgvKbrdrJbgdNm?: string | null;
|
||||
lclgvIdfrNm?: string | null;
|
||||
lclgvIdfrTelnoCn?: string | null;
|
||||
lclgvIdfrDeptNm?: string | null;
|
||||
lclgvIdfrJbgdNm?: string | null;
|
||||
mctpvIdfrNm?: string | null;
|
||||
mctpvIdfrTelnoCn?: string | null;
|
||||
mctpvIdfrDeptNm?: string | null;
|
||||
mctpvIdfrJbgdNm?: string | null;
|
||||
pbcpPicNm?: string | null;
|
||||
pbcpPicTelnoCn?: string | null;
|
||||
rvwrDeptNm?: string | null;
|
||||
rvwrJbgdNm?: string | null;
|
||||
lastCfmtnPicNm?: string | null;
|
||||
lastCfmtnPicTelnoCn?: string | null;
|
||||
lastCfmtnPicDeptNm?: string | null;
|
||||
lastCfmtnPicJbgdNm?: string | null;
|
||||
splmntRsltCn?: string | null;
|
||||
splmntOpnnCn?: string | null;
|
||||
rjctOpnnCn?: string | null;
|
||||
}
|
||||
|
||||
export type ReportStatusListApiResponse = ApiResponse<
|
||||
|
||||
@@ -4,7 +4,7 @@ export interface ApproveRequest {
|
||||
statsCd: string;
|
||||
mdfrUuid: string;
|
||||
lastCfmtnPicNm?: string;
|
||||
lastCfmtnPicTelNo?: string;
|
||||
lastCfmtnPicTelnoCn?: string;
|
||||
lastCfmtnPicDeptNm?: string;
|
||||
lastCfmtnPicJbgdNm?: string;
|
||||
}
|
||||
|
||||
+21
-21
@@ -27,51 +27,51 @@ export const statisticsVerificationReportColumnInfo: ColumnInfo = {
|
||||
editable: false,
|
||||
},
|
||||
{
|
||||
name: "laePicNm",
|
||||
fieldName: "laePicNm",
|
||||
name: "lclgvPicNm",
|
||||
fieldName: "lclgvPicNm",
|
||||
header: { text: "지자체작성자" },
|
||||
styleName: READ_ONLY_STYLE,
|
||||
editable: false,
|
||||
},
|
||||
{
|
||||
name: "laePicTelNo",
|
||||
fieldName: "laePicTelNo",
|
||||
name: "lclgvPicTelnoCn",
|
||||
fieldName: "lclgvPicTelnoCn",
|
||||
header: { text: "연락처" },
|
||||
width: 130,
|
||||
styleName: READ_ONLY_STYLE,
|
||||
editable: false,
|
||||
},
|
||||
{
|
||||
name: "laeKbrdrDeptNm",
|
||||
fieldName: "laeKbrdrDeptNm",
|
||||
name: "lclgvKbrdrDeptNm",
|
||||
fieldName: "lclgvKbrdrDeptNm",
|
||||
header: { text: "부서" },
|
||||
styleName: READ_ONLY_STYLE,
|
||||
editable: false,
|
||||
},
|
||||
{
|
||||
name: "laeKbrdrJbgdNm",
|
||||
fieldName: "laeKbrdrJbgdNm",
|
||||
name: "lclgvKbrdrJbgdNm",
|
||||
fieldName: "lclgvKbrdrJbgdNm",
|
||||
header: { text: "직급" },
|
||||
styleName: READ_ONLY_STYLE,
|
||||
editable: false,
|
||||
},
|
||||
{
|
||||
name: "laeIdfrNm",
|
||||
fieldName: "laeIdfrNm",
|
||||
name: "lclgvIdfrNm",
|
||||
fieldName: "lclgvIdfrNm",
|
||||
header: { text: "지자체승인자" },
|
||||
styleName: READ_ONLY_STYLE,
|
||||
editable: false,
|
||||
},
|
||||
{
|
||||
name: "laeIdfrDeptNm",
|
||||
fieldName: "laeIdfrDeptNm",
|
||||
name: "lclgvIdfrDeptNm",
|
||||
fieldName: "lclgvIdfrDeptNm",
|
||||
header: { text: "부서" },
|
||||
styleName: READ_ONLY_STYLE,
|
||||
editable: false,
|
||||
},
|
||||
{
|
||||
name: "laeIdfrJbgdNm",
|
||||
fieldName: "laeIdfrJbgdNm",
|
||||
name: "lclgvIdfrJbgdNm",
|
||||
fieldName: "lclgvIdfrJbgdNm",
|
||||
header: { text: "직급" },
|
||||
styleName: READ_ONLY_STYLE,
|
||||
editable: false,
|
||||
@@ -122,13 +122,13 @@ export const statisticsVerificationReportColumnInfo: ColumnInfo = {
|
||||
"ctpvNm",
|
||||
"sggNm",
|
||||
"menuTabName",
|
||||
"laePicNm",
|
||||
"laePicTelNo",
|
||||
"laeKbrdrDeptNm",
|
||||
"laeKbrdrJbgdNm",
|
||||
"laeIdfrNm",
|
||||
"laeIdfrDeptNm",
|
||||
"laeIdfrJbgdNm",
|
||||
"lclgvPicNm",
|
||||
"lclgvPicTelnoCn",
|
||||
"lclgvKbrdrDeptNm",
|
||||
"lclgvKbrdrJbgdNm",
|
||||
"lclgvIdfrNm",
|
||||
"lclgvIdfrDeptNm",
|
||||
"lclgvIdfrJbgdNm",
|
||||
"lastCfmtnPicNm",
|
||||
"lastCfmtnPicDeptNm",
|
||||
"lastCfmtnPicJbgdNm",
|
||||
|
||||
Reference in New Issue
Block a user