SPipe 데모 v2 (2026-10-30) 서버 배포본
- SPipe_server_2026-10-30.zip 내용을 풀어서 등록 (압축 파일은 올리지 않음) - README에 데모 v2 서버 업데이트 순서 추가, 저장소에 없는 문서 목차 정리 - 패치내역을 docs/로 이동, _worklog.md 추가 - 임시 파일(backend/temp.*)과 API 키가 든 파일은 제외
This commit is contained in:
commit
21ebb16fb7
181 files changed
+57207
No files matched your search
@@ -0,0 +1,107 @@
|
||||
import React from 'react';
|
||||
import { Camera, ChevronDown, Download, FileText, Layers, Table } from 'lucide-react';
|
||||
|
||||
interface ExportMenuProps {
|
||||
open: boolean;
|
||||
onToggle: () => void;
|
||||
onClose: () => void;
|
||||
disabled: boolean;
|
||||
hasResult: boolean;
|
||||
onExportInp: () => void;
|
||||
onExportNet: () => void;
|
||||
onExportXlsx: () => void;
|
||||
onExportDxf: () => void;
|
||||
onExportCsv: () => void;
|
||||
onCaptureMap: () => void;
|
||||
onExportShapefile: () => void;
|
||||
onShowInpText: () => void;
|
||||
onOpenAttributeTable: () => void;
|
||||
}
|
||||
|
||||
/** Header "내보내기" dropdown. Result-based exports are disabled until a run exists. */
|
||||
export const ExportMenu: React.FC<ExportMenuProps> = ({
|
||||
open,
|
||||
onToggle,
|
||||
onClose,
|
||||
disabled,
|
||||
hasResult,
|
||||
onExportInp,
|
||||
onExportNet,
|
||||
onExportXlsx,
|
||||
onExportDxf,
|
||||
onExportCsv,
|
||||
onCaptureMap,
|
||||
onExportShapefile,
|
||||
onShowInpText,
|
||||
onOpenAttributeTable,
|
||||
}) => {
|
||||
const act = (fn: () => void) => () => {
|
||||
fn();
|
||||
onClose();
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="dropdown-container">
|
||||
<button
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
onToggle();
|
||||
}}
|
||||
disabled={disabled}
|
||||
className="btn btn-secondary"
|
||||
title="INP, DXF, XLSX, CSV 등 내보내기"
|
||||
>
|
||||
<Download size={14} />
|
||||
<span>내보내기</span>
|
||||
<ChevronDown size={12} style={{ opacity: 0.6 }} />
|
||||
</button>
|
||||
|
||||
{open && (
|
||||
<div className="dropdown-menu align-right" style={{ width: '220px' }}>
|
||||
<div className="dropdown-header">EPANET 모델 파일</div>
|
||||
<button className="dropdown-item" onClick={act(onExportInp)}>
|
||||
<FileText size={14} />
|
||||
<span>.inp 모델 파일 다운로드</span>
|
||||
</button>
|
||||
<button className="dropdown-item" onClick={act(onExportNet)}>
|
||||
<FileText size={14} />
|
||||
<span>.net 네트워크 바이너리</span>
|
||||
</button>
|
||||
|
||||
<div className="dropdown-divider" />
|
||||
<div className="dropdown-header">엔지니어링 산출물</div>
|
||||
<button className="dropdown-item" disabled={!hasResult} onClick={act(onExportXlsx)}>
|
||||
<Table size={14} />
|
||||
<span>검토용 수리계산서 (.xlsx)</span>
|
||||
</button>
|
||||
<button className="dropdown-item" onClick={act(onExportDxf)}>
|
||||
<Layers size={14} />
|
||||
<span>AutoCAD 표준 도면 (.dxf)</span>
|
||||
</button>
|
||||
<button className="dropdown-item" disabled={!hasResult} onClick={act(onExportCsv)}>
|
||||
<FileText size={14} />
|
||||
<span>24h 시계열 수치 (.csv)</span>
|
||||
</button>
|
||||
|
||||
<div className="dropdown-divider" />
|
||||
<button className="dropdown-item" onClick={act(onCaptureMap)}>
|
||||
<Camera size={14} />
|
||||
<span>지도 화면 캡처 (.png)</span>
|
||||
</button>
|
||||
<button className="dropdown-item" onClick={act(onExportShapefile)}>
|
||||
<Layers size={14} />
|
||||
<span>GIS Shapefile (.zip)</span>
|
||||
</button>
|
||||
<button className="dropdown-item" onClick={act(onShowInpText)}>
|
||||
<FileText size={14} />
|
||||
<span>INP 텍스트 전문 보기</span>
|
||||
</button>
|
||||
<button className="dropdown-item" onClick={act(onOpenAttributeTable)}>
|
||||
<Table size={14} />
|
||||
<span>속성 테이블 열기</span>
|
||||
</button>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
Reference in new issue
Block a user