fix(mgmt-perf): 차트 탭 동기화, 한글 파일명 복원

- 섹션 id를 ASCII(mgmt-sec-*)로 통일하고 isSectionActive를 state 기준으로 변경
- multipart 파일명 UTF-8 복원(decodeMultipartFilename) 후 스냅샷 메타에 저장
- Chart.js 미로드·UM 누락 시 조기 종료 및 README 정리

Made-with: Cursor
This commit is contained in:
2026-04-13 18:48:04 +09:00
parent f6b94eea64
commit 419f529d06
4 changed files with 46 additions and 17 deletions

View File

@@ -28,6 +28,22 @@ const {
const { fetchOpenGraphImageUrl } = require("./lib/link-preview");
const mgmtPerf = require("./lib/mgmt-perf");
/**
* multipart `filename`이 Latin-1로 잘못 해석된 UTF-8 바이트일 때 복원합니다.
* 이미 한글이 올바른 유니코드로 들어온 경우는 그대로 둡니다.
*/
function decodeMultipartFilename(name) {
if (name == null || typeof name !== "string") return "";
if (/[\uAC00-\uD7A3]/.test(name)) return name;
try {
const dec = Buffer.from(name, "latin1").toString("utf8");
if (dec && !dec.includes("\uFFFD") && /[\uAC00-\uD7A3]/.test(dec)) return dec;
} catch (_) {
/* ignore */
}
return name;
}
const app = express();
const PORT = process.env.PORT || 8030;
/** 로컬 전용으로만 열 때: HOST=127.0.0.1 (기본은 모든 인터페이스) */
@@ -1241,7 +1257,7 @@ app.post(
const payload = mgmtPerf.buildPayloadFromWorkbook(buf, defaultPayload);
await mgmtPerf.saveUploadAndSnapshot(pgPool, {
userEmail: email,
originalFilename: req.file.originalname,
originalFilename: decodeMultipartFilename(req.file.originalname),
filePath: req.file.path,
fiscalYear,
quarter,