Improve 8092 default contract detail loading
This commit is contained in:
@@ -833,7 +833,11 @@
|
||||
|
||||
detailTitle.textContent = `${detail.projectName || '-'} [${detail.projectCode}]`;
|
||||
detailMeta.textContent = `사업코드 ${detail.businessCode || '-'} · 마지막 동기화 ${detail.syncedAt || '-'}`;
|
||||
renderDetailRows(detail);
|
||||
renderMergedBridgeRows(detail.scaleRows || [], state.bridgeOverviews || [], state.budgetPlan);
|
||||
}
|
||||
|
||||
function renderDetailRows(detail) {
|
||||
const rows = [
|
||||
['사업코드', detail.businessCode],
|
||||
['약칭', detail.projectName],
|
||||
@@ -856,8 +860,6 @@
|
||||
<td>${typeof value === 'string' && value.includes('<table') ? value : escapeHtml(value || '-')}</td>
|
||||
</tr>
|
||||
`).join('');
|
||||
|
||||
renderMergedBridgeRows(detail.scaleRows || [], state.bridgeOverviews || [], state.budgetPlan);
|
||||
}
|
||||
|
||||
function normalizeBridgeName(value) {
|
||||
@@ -1168,12 +1170,45 @@
|
||||
|
||||
if (!detailResponse.ok) {
|
||||
if (!refresh && detailResponse.status === 404) {
|
||||
state.detail = null;
|
||||
state.bridgeOverviews = overviewResponse.ok ? (Array.isArray(overviewData.overviews) ? overviewData.overviews : []) : [];
|
||||
state.budgetPlan = budgetPlanResponse.ok ? (budgetPlanData.plan || null) : null;
|
||||
detailTitle.textContent = `${projectName || '-'} [${projectCode}]`;
|
||||
detailMeta.textContent = 'DB 캐시에 계약정보가 없습니다. 새 정보 다시 가져오기를 누르면 ERP에서 수집합니다.';
|
||||
detailBody.innerHTML = '<tr><td colspan="2" class="empty">저장된 계약정보가 없습니다. 최신 정보가 필요하면 오른쪽 상단 버튼을 눌러주세요.</td></tr>';
|
||||
detailMeta.textContent = 'DB 캐시에 계약정보가 없어 ERP에서 기본 계약정보를 가져오는 중입니다.';
|
||||
try {
|
||||
const freshDetailResponse = await fetch(
|
||||
`/api/erp-contract-detail?page=const&projectCode=${encodeURIComponent(projectCode)}&projectName=${encodeURIComponent(projectName || '')}&refresh=1`,
|
||||
{ cache: 'no-store' }
|
||||
);
|
||||
const freshDetailData = await freshDetailResponse.json();
|
||||
if (freshDetailResponse.ok) {
|
||||
state.detail = freshDetailData.detail || null;
|
||||
if (state.selectedRow && state.detail) {
|
||||
state.selectedRow.businessCode = state.detail.businessCode || state.selectedRow.businessCode || '';
|
||||
state.selectedRow.siteLocation = state.detail.siteLocation || state.selectedRow.siteLocation || '';
|
||||
state.selectedRow.clientName = state.detail.clientName || state.selectedRow.clientName || '';
|
||||
state.selectedRow.finalContractAmountText = state.detail.finalContractAmountText || state.selectedRow.finalContractAmountText || '';
|
||||
state.selectedRow.contractType = state.detail.contractType || state.selectedRow.contractType || '';
|
||||
state.selectedRow.syncedAt = state.detail.syncedAt || state.selectedRow.syncedAt || '';
|
||||
}
|
||||
renderDetail(state.detail);
|
||||
return;
|
||||
}
|
||||
} catch (error) {
|
||||
}
|
||||
|
||||
state.detail = null;
|
||||
const selectedSummary = state.selectedRow || {};
|
||||
detailMeta.textContent = '기본 계약정보를 아직 가져오지 않았습니다. 새 정보 다시 가져오기를 누르면 ERP에서 수집합니다.';
|
||||
renderDetailRows({
|
||||
businessCode: selectedSummary.businessCode || '',
|
||||
projectName: projectName || selectedSummary.projectName || '',
|
||||
projectCode,
|
||||
siteLocation: selectedSummary.siteLocation || '',
|
||||
clientName: selectedSummary.clientName || '',
|
||||
finalContractAmountText: selectedSummary.finalContractAmountText || '',
|
||||
contractType: selectedSummary.contractType || '',
|
||||
syncedAt: selectedSummary.syncedAt || '',
|
||||
});
|
||||
renderMergedBridgeRows([], state.bridgeOverviews || [], state.budgetPlan);
|
||||
return;
|
||||
}
|
||||
@@ -1184,7 +1219,12 @@
|
||||
state.bridgeOverviews = Array.isArray(overviewData.overviews) ? overviewData.overviews : [];
|
||||
state.budgetPlan = budgetPlanResponse.ok ? (budgetPlanData.plan || null) : null;
|
||||
if (state.selectedRow && state.detail) {
|
||||
state.selectedRow.businessCode = state.detail.businessCode || state.selectedRow.businessCode || '';
|
||||
state.selectedRow.siteLocation = state.detail.siteLocation || state.selectedRow.siteLocation || '';
|
||||
state.selectedRow.clientName = state.detail.clientName || state.selectedRow.clientName || '';
|
||||
state.selectedRow.finalContractAmountText = state.detail.finalContractAmountText || state.selectedRow.finalContractAmountText || '';
|
||||
state.selectedRow.contractType = state.detail.contractType || state.selectedRow.contractType || '';
|
||||
state.selectedRow.syncedAt = state.detail.syncedAt || state.selectedRow.syncedAt || '';
|
||||
state.selectedRow.applicationType = Array.from(new Set(
|
||||
state.bridgeOverviews.map((item) => String(item.applicationType || '').trim()).filter(Boolean)
|
||||
)).sort((a, b) => a.localeCompare(b, 'ko')).join('||') || state.selectedRow.applicationType || '';
|
||||
|
||||
Reference in New Issue
Block a user