[as elapr] 전자결재 forkjoin 통합 개발 화면 추가 브랜치 항목

This commit is contained in:
2026-10-13 14:05:44 +09:00
parent 3f2938df1c
commit b088918cd9
5 changed files with 33 additions and 8 deletions
@@ -13,6 +13,8 @@ export interface PrgrsSttsServerRow {
atrzSeComCd?: string;
atrzSeqNo?: number;
dcarbYn?: string;
branchId?: string;
branchSeCd?: string;
}
/** 결재선 그리드 로컬 행 — 진행상태 API 응답 + UI 보조 필드 */
@@ -20,6 +22,9 @@ export interface ElaprPrgrsSttsRow {
rowKey: string;
elaprPrgrsId?: string;
elaprDmndId?: string;
branchId?: string;
branchSeCd?: string;
branchNm?: string;
aprvrUuid?: string;
aprvrNm?: string;
atrzSeComCd?: string;
@@ -52,8 +57,22 @@ function getVisibleRows(rows: ElaprPrgrsSttsRow[]): ElaprPrgrsSttsRow[] {
return rows.filter((row) => !row.isDeleted);
}
/** 그리드 행 순서(1-based)로 결재순서번호 일괄 채번 */
/** 그리드 행 순서(1-based)로 결재순서번호 채번 (브랜치가 분기된 Fork-Join의 경우 각 브랜치별 독립 순번 채번) */
export function assignPrgrsSttsAtrzSeqNumbers(rows: ElaprPrgrsSttsRow[]): ElaprPrgrsSttsRow[] {
const branchKeys = new Set(rows.map((r) => r.branchId || r.branchSeCd).filter(Boolean));
if (branchKeys.size > 1) {
const branchCounters = new Map<string, number>();
return rows.map((row) => {
const key = row.branchId || row.branchSeCd;
if (key) {
const current = (branchCounters.get(key) ?? 0) + 1;
branchCounters.set(key, current);
return { ...row, atrzSeqNo: current };
}
return row;
});
}
return rows.map((row, index) => ({ ...row, atrzSeqNo: index + 1 }));
}
@@ -92,7 +111,7 @@ function rowDiffersFromServer(row: ElaprPrgrsSttsRow, serverRow: PrgrsSttsServer
return (
row.aprvrUuid !== serverRow.aprvrUuid ||
row.atrzSeComCd !== serverRow.atrzSeComCd ||
row.atrzSeqNo !== serverRow.atrzSeqNo ||
Number(row.atrzSeqNo) !== Number(serverRow.atrzSeqNo) ||
(row.dcarbYn ?? "N") !== (serverRow.dcarbYn ?? "N")
);
}
@@ -23,6 +23,9 @@ function toRow(item: ElaprDocPrgrsClientResponseDto): ElaprPrgrsSttsRow {
rowKey: item.elaprPrgrsId ?? createDraftRowKey(),
elaprPrgrsId: item.elaprPrgrsId,
elaprDmndId: item.elaprDmndId,
branchId: item.branchId,
branchSeCd: item.branchSeCd,
branchNm: item.branchNm,
aprvrUuid: item.aprvrUuid,
aprvrNm: item.aprvrNm,
atrzSeComCd: item.atrzSeComCd,
@@ -344,7 +344,7 @@ function ElaprApprovalDialog({
size="sm"
type="button"
color="white"
disabled={!elaprDmndId || isEditingLocked || isBusy}
disabled={isForkJoin || !elaprDmndId || isEditingLocked || isBusy}
onClick={addRow}
>
결재선 추가
@@ -409,11 +409,11 @@ function ElaprApprovalDialog({
<SortablePrgrsSttsRow
key={row.rowKey}
row={row}
displaySeqNo={index + 1}
displaySeqNo={isForkJoin ? Number(row.atrzSeqNo ?? index + 1) : index + 1}
isEditing={editingRowKey === row.rowKey}
isLocked={isEditingLocked}
dragDisabled={
isEditingLocked || !isPrgrsSttsRowEditable(row) || !row.atrzSeComCd
isForkJoin || isEditingLocked || !isPrgrsSttsRowEditable(row) || !row.atrzSeComCd
}
onStartEdit={() => startEdit(row.rowKey)}
onSave={() => handleRowSave(row.rowKey)}
@@ -73,12 +73,12 @@ export function ElaprDocPrgrsForkJoinStep({ steps }: ElaprDocPrgrsForkJoinStepPr
const agg: ElaprDocPrgrsClientResponseDto[] = [];
steps.forEach((step) => {
const seCd = (step as { branchSeCd?: string }).branchSeCd;
const seCd = step.branchSeCd;
if (seCd === "PIPE") {
pipe.push(step);
} else if (seCd === "FACILITY" || seCd === "FAC") {
} else if (seCd === "FACILITY" ) {
fac.push(step);
} else if (seCd === "TOTAL_AGG" || seCd === "POL_JOIN" || seCd === "AGG") {
} else if (seCd === "TOTAL_AGG") {
agg.push(step);
} else {
// 순번 fallback (6인 체제: 2/2/2)
+3
View File
@@ -152,6 +152,9 @@ export interface ElaprDocPrgrsClientResponseDto {
ognzNm?: string;
dcarbYn?: string;
elaprCycl?: number;
branchId?: string;
branchSeCd?: string;
branchNm?: string;
}
/** 문서 상태 변경 이력 응답 DTO */