[as frontend] 체크 리스트 표시 여부 적용
This commit is contained in:
@@ -156,7 +156,7 @@ function CnfmRegistPage({ initialData }: { initialData?: any } = {}) {
|
||||
// userInfo?.dtlInstCd 테스트 코드 ENV.ROLE_USER03 , KECO 권한 테스트용 (실제 권한에 맞게 변경 필요)
|
||||
const userInfo = {
|
||||
...userInfo2,
|
||||
dtlInstCd: "ROLE_USER03",
|
||||
dtlInstCd: "ROLE_USER02", //ROLE_USER03, ROLE_USER02, ROLE_USER01 KECO 권한 테스트용 (실제 권한에 맞게 변경 필요)
|
||||
};
|
||||
const alert = useAlertStore((state) => state.setMessage);
|
||||
const qc = useQueryClient();
|
||||
@@ -764,8 +764,10 @@ function CnfmRegistPage({ initialData }: { initialData?: any } = {}) {
|
||||
if (!selectedReviewStep) {
|
||||
return { total: 0, completed: 0, percent: 0 };
|
||||
}
|
||||
const total = cklstRows.length;
|
||||
const completed = cklstRows.reduce((acc, row) => {
|
||||
// only include rows that are marked for checkbox use (bchckUseYn === "Y")
|
||||
const relevantRows = cklstRows.filter((row) => row.bchckUseYn === "Y");
|
||||
const total = relevantRows.length;
|
||||
const completed = relevantRows.reduce((acc, row) => {
|
||||
const val = checkResults[cklstKey(row, selectedReviewStep)] ?? "";
|
||||
return acc + (val ? 1 : 0);
|
||||
}, 0);
|
||||
@@ -782,8 +784,10 @@ function CnfmRegistPage({ initialData }: { initialData?: any } = {}) {
|
||||
});
|
||||
visibleReviewStepCodes.forEach((code) => persistedStepCodeSet.add(code));
|
||||
|
||||
// only persist rows that are enabled for checkbox (`bchckUseYn === "Y")
|
||||
const relevantRows = cklstRows.filter((row) => row.bchckUseYn === "Y");
|
||||
return Array.from(persistedStepCodeSet).flatMap((rvwStpComCd) =>
|
||||
cklstRows.map((row) => ({
|
||||
relevantRows.map((row) => ({
|
||||
cklstSn: row.cklstSn,
|
||||
cklstArtclSn: row.cklstArtclSn,
|
||||
cklstRvwSn: row.cklstRvwSn,
|
||||
@@ -804,9 +808,11 @@ function CnfmRegistPage({ initialData }: { initialData?: any } = {}) {
|
||||
visibleReviewStepCodes.forEach((code) => persistedStepCodeSet.add(code));
|
||||
|
||||
const result: Record<string, any[]> = {};
|
||||
// only persist rows that are enabled for checkbox
|
||||
const relevantRows = cklstRows.filter((row) => row.bchckUseYn === "Y");
|
||||
Array.from(persistedStepCodeSet).forEach((rvwStpComCd) => {
|
||||
// use code as key (e.g., "LOCAL") and set rvwStpComCd to the same code
|
||||
result[rvwStpComCd] = cklstRows.map((row) => ({
|
||||
result[rvwStpComCd] = relevantRows.map((row) => ({
|
||||
cklstSn: row.cklstSn,
|
||||
cklstArtclSn: row.cklstArtclSn,
|
||||
cklstRvwSn: row.cklstRvwSn,
|
||||
@@ -987,6 +993,7 @@ function CnfmRegistPage({ initialData }: { initialData?: any } = {}) {
|
||||
}
|
||||
|
||||
// 현재 입력 단계의 체크리스트 미선택 항목이 있으면 진행 불가
|
||||
/*
|
||||
const hasUncheckedChecklist = cklstRows.some(
|
||||
(row) => !checkResults[cklstKey(row, editableReviewStep)],
|
||||
);
|
||||
@@ -994,6 +1001,7 @@ function CnfmRegistPage({ initialData }: { initialData?: any } = {}) {
|
||||
alert("체크리스트를 모두 체크하세요.");
|
||||
return false;
|
||||
}
|
||||
*/
|
||||
// 저장 시: 필수 첨부파일(esntlAtchYn=Y) 업로드 여부 검증
|
||||
if (mode === "SAVE") {
|
||||
const missingRequiredFile = requiredAttachmentDefs.find((item) => {
|
||||
@@ -1012,6 +1020,7 @@ function CnfmRegistPage({ initialData }: { initialData?: any } = {}) {
|
||||
);
|
||||
if (invalidYesRow) {
|
||||
const invalidKey = cklstKey(invalidYesRow, editableReviewStep);
|
||||
// console.warn("검토 결과가 예(Y)가 아닌 항목 발견:", invalidKey, invalidYesRow);
|
||||
const invalidRowEl = cklstRowRefs.current[invalidKey];
|
||||
invalidRowEl?.scrollIntoView({ behavior: "smooth", block: "center" });
|
||||
const yesRadio = invalidRowEl?.querySelector<HTMLInputElement>(
|
||||
@@ -1598,7 +1607,8 @@ function CnfmRegistPage({ initialData }: { initialData?: any } = {}) {
|
||||
cklstRows.map((row) => {
|
||||
const key = cklstKey(row, selectedReviewStep);
|
||||
const rvwPaddingLeft = `${Math.max(0, row.treeLevel - 1) * 16 + 8}px`;
|
||||
|
||||
//bchckUseYn 의 값이 "Y"인 항목은 라디오 박스가 보이고 없으면 안보이게 처리
|
||||
const showRadios = row.bchckUseYn === "Y";
|
||||
return (
|
||||
<tr
|
||||
key={key}
|
||||
@@ -1611,34 +1621,44 @@ function CnfmRegistPage({ initialData }: { initialData?: any } = {}) {
|
||||
{row.treeLevel > 1 ? "└ " : ""}
|
||||
{row.rvwCn}
|
||||
</td>
|
||||
<td className="text-center">
|
||||
<label className="flex cursor-pointer items-center justify-center gap-1 text-[1.2rem] text-green-600">
|
||||
<input
|
||||
type="radio"
|
||||
name={`chk_${key}`}
|
||||
value="Y"
|
||||
checked={checkResults[key] === "Y"}
|
||||
disabled={editableReviewStep !== selectedReviewStep}
|
||||
onChange={() => setCheckResults((prev) => ({ ...prev, [key]: "Y" }))}
|
||||
/>
|
||||
</label>
|
||||
</td>
|
||||
<td className="text-center">
|
||||
<label className="flex cursor-pointer items-center justify-center gap-1 text-[1.2rem] text-red-500">
|
||||
<input
|
||||
type="radio"
|
||||
name={`chk_${key}`}
|
||||
value="N"
|
||||
checked={checkResults[key] === "N"}
|
||||
disabled={editableReviewStep !== selectedReviewStep}
|
||||
onChange={() => setCheckResults((prev) => ({ ...prev, [key]: "N" }))}
|
||||
/>
|
||||
</label>
|
||||
</td>
|
||||
{selectedReviewStep !== "LOCAL" ? (
|
||||
{!showRadios ? (
|
||||
<>
|
||||
<td className="text-center"></td>
|
||||
<td className="text-center"></td>
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<td className="text-center">
|
||||
<label className="flex cursor-pointer items-center justify-center gap-1 text-[1.2rem] text-green-600">
|
||||
<input
|
||||
type="radio"
|
||||
name={`chk_${key}`}
|
||||
value="Y"
|
||||
checked={checkResults[key] === "Y"}
|
||||
disabled={editableReviewStep !== selectedReviewStep}
|
||||
onChange={() => setCheckResults((prev) => ({ ...prev, [key]: "Y" }))}
|
||||
/>
|
||||
</label>
|
||||
</td>
|
||||
<td className="text-center">
|
||||
<label className="flex cursor-pointer items-center justify-center gap-1 text-[1.2rem] text-red-500">
|
||||
<input
|
||||
type="radio"
|
||||
name={`chk_${key}`}
|
||||
value="N"
|
||||
checked={checkResults[key] === "N"}
|
||||
disabled={editableReviewStep !== selectedReviewStep}
|
||||
onChange={() => setCheckResults((prev) => ({ ...prev, [key]: "N" }))}
|
||||
/>
|
||||
</label>
|
||||
</td>
|
||||
</>
|
||||
)}
|
||||
|
||||
{showRadios && selectedReviewStep !== "LOCAL" ? (
|
||||
<td className="text-left">
|
||||
<textarea
|
||||
className="cnfm-input w-full h-20"
|
||||
className="cnfm-input w-full"
|
||||
value={checkComments[key] ?? ""}
|
||||
readOnly={editableReviewStep !== selectedReviewStep}
|
||||
onChange={(e) =>
|
||||
|
||||
@@ -418,9 +418,9 @@ function CnfmViewPage({ id }: { id: string }) {
|
||||
</tr>
|
||||
) : (
|
||||
selectedChecklistRows.map((row: any) => {
|
||||
const key = `${row.cklstSn}_${row.cklstRvwSn}_${row.rvwStpComCd ?? "STEP01"}`;
|
||||
const key = `${row.cklstSn}_${row.cklstRvwSn}_${row.rvwStpComCd ?? "LOCAL"}`;
|
||||
const hasResult = row.rvwRsltAnmlyYn === "Y" || row.rvwRsltAnmlyYn === "N";
|
||||
const showRadios = row.bchckUseYn === "Y" || hasResult;
|
||||
const showRadios = row.bchckUseYn === "Y" ;
|
||||
|
||||
return (
|
||||
<tr key={key}>
|
||||
|
||||
Reference in New Issue
Block a user