feat(ground): 해상 selectable with MSL levels, 고조위·저조위, and checks
- Rules confirmed (승인 2026-10-26): datum MSL; 고조위 HWL and 저조위 LWL as two levels; 세굴 깊이 as for 하상; 파랑과 선박 하중 excluded from this scope. - Checks: G13 levels missing, G10 해저면 not below 고조위, G11 저조위 not below 고조위, G14 pile wall at or below the corrosion allowance reference. - CORROSION_ALLOWANCE_MM = 1 is a PLACEHOLDER reference (not in the RAG documents); the card and G14 mark it as to be confirmed. - Card: the 해상 inputs; the section draws 고조위 (solid), 저조위 (dashed), and labels the ground line 해저면 EL. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
26a5aff517
commit
b6e7f36091
9 files changed
+132
-22
No files matched your search
+22
-3
@@ -17,7 +17,7 @@ import { DEFAULT_MATERIAL, FCK_MEMBERS, fyOf, GRADE_CHOICES, isAssumedMaterial,
|
||||
import { buildQuantity, quantityRows, type Quantity, type QuantityLine } from './core/rebar/quantity';
|
||||
import { parseDrawingRows } from './core/drawing-import';
|
||||
import { groundElFor, parseGroundModel, strataRowsFor, type GroundModelFile } from './core/ground-model';
|
||||
import { parseNValue, STRATA_NAMES } from './core/ground';
|
||||
import { CORROSION_ALLOWANCE_MM, parseNValue, SEA_DATUM, STRATA_NAMES } from './core/ground';
|
||||
import { groundSectionSvg } from './view/ground-svg';
|
||||
import { parseBearingElevationTable, parseSolplateTable, readDxfTexts } from './core/dxf-table';
|
||||
import { columnDiameterIssues } from './core/column-check';
|
||||
@@ -1515,10 +1515,10 @@ function valueText(key: EditableKey, v: unknown): string {
|
||||
}
|
||||
|
||||
/** Sets one 지반·지층 input in the draft (applied to the model by 다시 생성). */
|
||||
function editGround(name: string, key: 'groundPosition' | 'groundWaterOn' | 'groundWaterEl' | 'floodLevelEl' | 'scourDepthM', value: unknown): void {
|
||||
function editGround(name: string, key: 'groundPosition' | 'groundWaterOn' | 'groundWaterEl' | 'floodLevelEl' | 'scourDepthM' | 'highWaterEl' | 'lowWaterEl', value: unknown): void {
|
||||
const p = state.piers.find((q) => q.input.name === name);
|
||||
if (!p) return;
|
||||
const numeric = key === 'groundWaterEl' || key === 'floodLevelEl' || key === 'scourDepthM';
|
||||
const numeric = key !== 'groundPosition' && key !== 'groundWaterOn';
|
||||
if (numeric && value !== undefined && !Number.isFinite(value)) {
|
||||
setError(`${FIELD_LABELS[key]}은(는) 숫자로 입력하세요. 값을 되돌렸습니다.`);
|
||||
renderAll();
|
||||
@@ -1575,6 +1575,25 @@ function renderGroundModel(box: HTMLDivElement, pier: Pier): void {
|
||||
scourRow.append(el('span', label, 'muted small'), input);
|
||||
}
|
||||
wrap.appendChild(scourRow);
|
||||
} else if (position === '해상') {
|
||||
// 해상 (승인 2026-10-26, 기준면 MSL): 고조위·저조위와 세굴. 파랑과 선박 하중은 이번 범위에서 제외.
|
||||
wrap.appendChild(el('p', `해상 · 기준면 ${SEA_DATUM} · 지반고 칸은 해저면 EL`, 'lbl'));
|
||||
const seaRow = el('div', undefined, 'ground-water');
|
||||
seaRow.style.display = 'flex';
|
||||
seaRow.style.flexWrap = 'wrap';
|
||||
seaRow.style.alignItems = 'center';
|
||||
seaRow.style.gap = '8px';
|
||||
for (const [key, label, value] of [['highWaterEl', '고조위 HWL (m)', d.highWaterEl], ['lowWaterEl', '저조위 LWL (m)', d.lowWaterEl], ['scourDepthM', '세굴 깊이 (m)', d.scourDepthM]] as const) {
|
||||
const input = el('input');
|
||||
input.type = 'number';
|
||||
input.step = 'any';
|
||||
input.placeholder = label;
|
||||
input.value = value === undefined ? '' : String(value);
|
||||
input.addEventListener('change', () => editGround(name, key, input.value === '' ? undefined : Number(input.value)));
|
||||
seaRow.append(el('span', label, 'muted small'), input);
|
||||
}
|
||||
wrap.appendChild(seaRow);
|
||||
wrap.appendChild(el('p', `부식 여유 기준 ${CORROSION_ALLOWANCE_MM} mm (확인 필요) · 파랑과 선박 하중은 이번 범위에서 제외`, 'muted small'));
|
||||
} else {
|
||||
wrap.appendChild(el('p', '지하수위', 'lbl'));
|
||||
const water = el('div', undefined, 'ground-water');
|
||||
|
||||
Reference in new issue
Block a user