feat(B03): 선택 영역 설명 이관 · 임시 보관함 이름·테두리 정리 · 계획노선은 shapefile만
사용자 지시 4건(2026-09-03). - 선택 영역의 설명 문구를 좌측 안내 패널로 옮기고 본문에는 「입력 파일 선택」만 남김. - [임시 보관함에서 불러오기] → [임시 보관함]. 버튼을 감싸던 점선 테두리 삭제 — 버튼 자신의 테두리와 이중이었음. - 계획노선 도형 카드는 `.shp` 만 받음. CSV 는 내부 계산이 만드는 파일이라 사용자가 넣는 자료가 아님(사용자 확인). 컨테이너의 CSV 안내 문구도 삭제. - 이미 `.csv` 로 올라간 옛 프로젝트가 「미등록」으로 보이지 않도록 **서버 파일 매핑에만** `.csv → 계획노선 도형` 예외를 둠. 새로 받는 확장자와 이미 받은 것을 갈라 둔다. 좌측 안내 문구도 함께 갱신 — CSV 언급 제거, 버튼 새 이름 반영. 검증: 실측 — 선택 영역 텍스트 「입력 파일 선택」, 보관함 테두리 none·라벨 「임시 보관함」, 계획노선 안내 문구 없음, 카드 확장자 `.shp`, 옛 CSV 는 「완료 · 용화_계획노선.csv」 유지. typecheck·prettier 통과. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -95,9 +95,8 @@ export async function renderB03FileInput(root: HTMLElement): Promise<void> {
|
||||
dropzone.tabIndex = 0;
|
||||
const dropzoneLabel = document.createElement("strong");
|
||||
dropzoneLabel.textContent = L("B03_File_Select_Label");
|
||||
const dropzoneHint = document.createElement("span");
|
||||
dropzoneHint.textContent = L("B03_File_Select_Hint");
|
||||
dropzone.append(dropzoneLabel, dropzoneHint, fileInput);
|
||||
// 설명은 좌측 안내 패널 몫이다(2026-09-03 사용자 지시) — 여기는 자리 이름만 남긴다.
|
||||
dropzone.append(dropzoneLabel, fileInput);
|
||||
|
||||
const pageError = document.createElement("p");
|
||||
pageError.className = "b03-file__error";
|
||||
@@ -435,10 +434,14 @@ export async function renderB03FileInput(root: HTMLElement): Promise<void> {
|
||||
? inRouteSet
|
||||
? "route_prj"
|
||||
: "prj"
|
||||
: Array.from(slots.values()).find(
|
||||
(candidate) =>
|
||||
candidate.slot !== "route_prj" && candidate.extensions.includes(extension),
|
||||
)?.slot;
|
||||
: // 옛 프로젝트의 노선은 `.csv`로 올라가 있다 — 이제 받지는 않지만(2026-09-03)
|
||||
// 이미 올라간 것은 계획노선 도형 카드에 그대로 보여야 한다.
|
||||
extension === ".csv"
|
||||
? "csv"
|
||||
: Array.from(slots.values()).find(
|
||||
(candidate) =>
|
||||
candidate.slot !== "route_prj" && candidate.extensions.includes(extension),
|
||||
)?.slot;
|
||||
const state = slot ? slots.get(slot) : undefined;
|
||||
if (state) {
|
||||
state.serverUploaded = {
|
||||
@@ -752,11 +755,12 @@ export async function renderB03FileInput(root: HTMLElement): Promise<void> {
|
||||
// 자료의 출처가 둘로 갈린다 — 원청이 준 계획노선, 측량이 준 지형(LAS·래스터).
|
||||
// 좌표계 파일(.prj)도 각각 하나씩 오므로 컨테이너를 나눠야 어느 칸에 무엇을 넣는지
|
||||
// 화면만 보고 안다(2026-08-31 사용자 지시).
|
||||
// 안내 문구 없음 — CSV 관련 설명이 붙어 있었으나 CSV는 사용자가 넣는 자료가 아니다
|
||||
// (2026-09-03 사용자 지시: 내부 계산 파일).
|
||||
const routeGroup = createCardGroup(
|
||||
L("B03_File_Group_Route"),
|
||||
ROUTE_SLOTS,
|
||||
"b03-file__group--route",
|
||||
L("B03_File_Group_Route_Hint"),
|
||||
);
|
||||
const terrainGroup = createCardGroup(
|
||||
L("B03_File_Group_Terrain"),
|
||||
|
||||
@@ -4,14 +4,11 @@
|
||||
* 모달 껍데기(.b03-file__modal / -backdrop)는 기존 확인 모달 스타일을 그대로 쓴다.
|
||||
* ========================================================================== */
|
||||
|
||||
/* 버튼 하나만 담는 자리 — 테두리를 또 두르면 버튼 테두리와 이중이 된다
|
||||
(2026-09-03 사용자 지시). */
|
||||
.b03-file__temp-picker {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: var(--spacing-12);
|
||||
flex-wrap: wrap;
|
||||
padding: var(--spacing-12);
|
||||
border: 1px dashed var(--color-border);
|
||||
border-radius: var(--radius-cards);
|
||||
}
|
||||
|
||||
.b03-file__temp-modal {
|
||||
|
||||
@@ -60,7 +60,9 @@ const SLOT_CONFIGS: readonly SlotConfig[] = [
|
||||
slot: "csv",
|
||||
labelKey: "B03_File_Slot_PlannedRoute",
|
||||
icon: "⌁",
|
||||
extensions: [".csv", ".shp"],
|
||||
// `.csv`는 받지 않는다 — 내부 계산이 만드는 파일이라 사용자가 넣는 자료가 아니다
|
||||
// (2026-09-03 사용자 지시). 슬롯 키 `csv`는 저장·서버 규약이라 그대로 둔다.
|
||||
extensions: [".shp"],
|
||||
isRequired: true,
|
||||
},
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user