@@ -142,12 +131,7 @@ export function createDesignCnstnColumns() {
id: "progress",
header: "진행상황",
meta: { align: "center" },
- cell: ({ row }) => (
-
- ),
+ cell: ({ row }) =>
,
}),
columnHelper.accessor("regDt", {
header: "신청일",
diff --git a/apps/as/src/pages/design-cnstn/ui/components/floating-action-buttons.tsx b/apps/as/src/pages/design-cnstn/ui/components/floating-action-buttons.tsx
index 9159fcdae..37af44b48 100644
--- a/apps/as/src/pages/design-cnstn/ui/components/floating-action-buttons.tsx
+++ b/apps/as/src/pages/design-cnstn/ui/components/floating-action-buttons.tsx
@@ -11,7 +11,7 @@ import { ENDPOINT } from "@/shared/config";
import { useAlertStore, useUserStore } from "@/shared/lib";
import {
type DesignCnstnApplySaveRequestDto,
- designCnstnMngBaseKey,
+ designCnstnKeys,
type DesignCnstnMngDetResponseDto,
designCnstnMngService,
} from "@/entities/design-cnstn";
@@ -134,7 +134,7 @@ function FloatingActionButtons({
onSuccess: () => {
if (successMessage) alert(successMessage);
queryClient.invalidateQueries({
- queryKey: [...designCnstnMngBaseKey, "findById", designCnstnDocNo],
+ queryKey: designCnstnKeys.detail(designCnstnDocNo),
});
},
onError: (error) => {
@@ -168,7 +168,7 @@ function FloatingActionButtons({
request: payload,
successMessage: "신청 완료되었습니다.",
});
- queryClient.invalidateQueries({ queryKey: designCnstnMngBaseKey });
+ queryClient.invalidateQueries({ queryKey: designCnstnKeys.all });
}
async function handleDelClick() {
@@ -189,6 +189,8 @@ function FloatingActionButtons({
elaprDocNo: docNo,
dmndTtl: data.detDto?.bizNm ?? "",
dmndCn: data.detDto?.bizCn ?? "",
+ elaprCycl: 1,
+ docPrgrsSttsComCd: data.detDto?.prgrsSttsComCd,
elaprPrgrsSttsList: buildElaprPrgrsSttsListFromAplnRows(aplnRows),
};
await executeAction({
@@ -306,7 +308,7 @@ function FloatingActionButtons({
currentUserUuid={userInfo?.userUnqId ?? ""}
onSuccess={() => {
queryClient.invalidateQueries({
- queryKey: [...designCnstnMngBaseKey, "findById", designCnstnDocNo],
+ queryKey: designCnstnKeys.detail(designCnstnDocNo),
});
}}
/>
diff --git a/apps/as/src/pages/design-cnstn/ui/design-detail-gate.tsx b/apps/as/src/pages/design-cnstn/ui/design-detail-gate.tsx
new file mode 100644
index 000000000..723ae5f03
--- /dev/null
+++ b/apps/as/src/pages/design-cnstn/ui/design-detail-gate.tsx
@@ -0,0 +1,35 @@
+"use client";
+
+import { useUserStore } from "@/shared/lib";
+import { useDesignCnstnMng } from "@/entities/design-cnstn";
+import { canEditPbadmsDoc, PbadmsDetailGate } from "@/widgets/pbadms-sprt";
+
+import { DesignViewPage } from "./design-view-page";
+
+interface DesignDetailGateProps {
+ id: string;
+}
+
+function DesignDetailGate({ id }: DesignDetailGateProps) {
+ const userInfo = useUserStore((state) => state.userInfo);
+ const { data, isLoading, isError } = useDesignCnstnMng(id);
+ const shouldRedirectToEdit = canEditPbadmsDoc({
+ docSeComCd: "CNFM",
+ prgrsSttsComCd: data?.detDto?.prgrsSttsComCd,
+ rgtr: data?.detDto?.rgtr,
+ loggedInUserUnqId: userInfo?.userUnqId,
+ });
+
+ return (
+
+
+
+ );
+}
+
+export { DesignDetailGate };
diff --git a/apps/as/src/pages/design-cnstn/ui/design-edit-page.tsx b/apps/as/src/pages/design-cnstn/ui/design-edit-page.tsx
index af2e71ace..1edb29d7f 100644
--- a/apps/as/src/pages/design-cnstn/ui/design-edit-page.tsx
+++ b/apps/as/src/pages/design-cnstn/ui/design-edit-page.tsx
@@ -35,7 +35,7 @@ function DesignEditPage({ id }: DesignEditPageProps) {
return
상세 정보를 찾을 수 없습니다.
;
}
- return
;
+ return
;
}
export { DesignEditPage };
diff --git a/apps/as/src/pages/design-cnstn/ui/design-form-page.tsx b/apps/as/src/pages/design-cnstn/ui/design-form-page.tsx
index 63d4eda75..4e5a5ad76 100644
--- a/apps/as/src/pages/design-cnstn/ui/design-form-page.tsx
+++ b/apps/as/src/pages/design-cnstn/ui/design-form-page.tsx
@@ -9,17 +9,21 @@ import { zodResolver } from "@hookform/resolvers/zod";
import { useQueryClient } from "@tanstack/react-query";
import { useAlertStore, useUserStore } from "@/shared/lib";
+import { SectionCollapsibleGroup, SectionCollapsibleToggle } from "@/shared/ui";
import {
type DesignCnstnApplySaveRequestDto,
- designCnstnMngBaseKey,
+ designCnstnKeys,
type DesignCnstnMngDetResponseDto,
designCnstnMngService,
} from "@/entities/design-cnstn";
+import { useEsntlAtchFileMngTree } from "@/entities/esntl";
import {
AttachmentsFormSection,
BusinessScaleFormSection,
ContactInfoFormSection,
+ isFormEsntlAtchComplete,
PrivacyConsentSection,
+ ProgressStatusSection,
} from "@/widgets/pbadms-sprt";
import { Button } from "@common/components";
@@ -29,11 +33,11 @@ import {
formatTaskSeComCdForApi,
} from "../lib/design-cnstn-regist-schema";
import { getCreateDefaultValues, mapDetailToFormData } from "../lib/form-data-mapper";
+import { PROGRESS_STATUS_COLUMNS } from "../model/columns";
import { BasicInfoFormSection } from "./sections/basic-info-form-section";
interface DesignFormPageProps {
- id?: string;
mode: "create" | "edit";
initialData?: DesignCnstnMngDetResponseDto;
createDefaults?: {
@@ -44,7 +48,7 @@ interface DesignFormPageProps {
};
}
-function DesignFormPage({ id, mode, initialData, createDefaults }: DesignFormPageProps) {
+function DesignFormPage({ mode, initialData, createDefaults }: DesignFormPageProps) {
const queryClient = useQueryClient();
const router = useRouter();
const { confirm } = useConfirm();
@@ -53,6 +57,8 @@ function DesignFormPage({ id, mode, initialData, createDefaults }: DesignFormPag
const [isSubmitting, setIsSubmitting] = useState(false);
const isEditMode = mode === "edit";
+ const { data: essentialFiles = [] } = useEsntlAtchFileMngTree({ docSeComCd: "CNFM" });
+
const form = useForm
({
resolver: zodResolver(designCnstnRegistSchema),
mode: "onChange",
@@ -96,12 +102,8 @@ function DesignFormPage({ id, mode, initialData, createDefaults }: DesignFormPag
if (!designCnstnDocNo) return;
alert("저장되었습니다.");
+ queryClient.invalidateQueries({ queryKey: designCnstnKeys.all });
router.push(`/design-cnstn/${designCnstnDocNo}/edit`);
- if (isEditMode && id) {
- queryClient.invalidateQueries({
- queryKey: [...designCnstnMngBaseKey, "findById", id],
- });
- }
} catch (error) {
console.error("저장 실패:", error);
alert("저장 중 오류가 발생했습니다.");
@@ -113,19 +115,19 @@ function DesignFormPage({ id, mode, initialData, createDefaults }: DesignFormPag
async function onApply(data: DesignCnstnRegistFormData) {
if (isSubmitting) return;
+ if (!isFormEsntlAtchComplete(essentialFiles, data.esntlAtchFileList)) {
+ alert("필수 첨부파일을 모두 등록해야 신청이 가능합니다.");
+ return;
+ }
+
try {
setIsSubmitting(true);
const designCnstnDocNo = await submitForm(data, "CT");
if (!designCnstnDocNo) return;
alert("신청 완료되었습니다.");
+ queryClient.invalidateQueries({ queryKey: designCnstnKeys.all });
router.push(`/design-cnstn/${designCnstnDocNo}`);
- queryClient.invalidateQueries({ queryKey: designCnstnMngBaseKey });
- if (id) {
- queryClient.invalidateQueries({
- queryKey: [...designCnstnMngBaseKey, "findById", id],
- });
- }
} catch (error) {
console.error("신청 실패:", error);
alert("신청 중 오류가 발생했습니다.");
@@ -153,6 +155,7 @@ function DesignFormPage({ id, mode, initialData, createDefaults }: DesignFormPag
setIsSubmitting(true);
await designCnstnMngService.delete(docNo);
alert("삭제되었습니다.");
+ queryClient.invalidateQueries({ queryKey: designCnstnKeys.list() });
router.push("/design-cnstn");
} catch (error) {
console.error("삭제 실패:", error);
@@ -165,47 +168,64 @@ function DesignFormPage({ id, mode, initialData, createDefaults }: DesignFormPag
return (