feat: 엑셀 다운로드 파일명을 메뉴 이름으로 변경
- 메뉴 클릭 시 localStorage에 메뉴 이름 저장 (useMenu, AppLayout)
- 엑셀 다운로드 시 localStorage의 메뉴 이름을 파일명으로 사용
- 백엔드 카테고리 컬럼 조회 쿼리 파라미터 버그 수정
- API 호출 시 불필요한 autoFilter 파라미터 제거
파일명 형식: {메뉴이름}_{날짜}.xlsx
예시: 품목등록테스트_2025-11-11.xlsx
This commit is contained in:
parent
f6edf8c313
commit
bab960b50e
|
|
@ -62,7 +62,9 @@ class TableCategoryValueService {
|
||||||
logger.info("회사별 카테고리 컬럼 조회", { companyCode });
|
logger.info("회사별 카테고리 컬럼 조회", { companyCode });
|
||||||
}
|
}
|
||||||
|
|
||||||
const result = await pool.query(query, [tableName, companyCode]);
|
// 쿼리 파라미터는 company_code에 따라 다름
|
||||||
|
const params = companyCode === "*" ? [tableName] : [tableName, companyCode];
|
||||||
|
const result = await pool.query(query, params);
|
||||||
|
|
||||||
logger.info(`카테고리 컬럼 ${result.rows.length}개 조회 완료`, {
|
logger.info(`카테고리 컬럼 ${result.rows.length}개 조회 완료`, {
|
||||||
tableName,
|
tableName,
|
||||||
|
|
|
||||||
|
|
@ -259,6 +259,12 @@ function AppLayoutInner({ children }: AppLayoutProps) {
|
||||||
if (menu.hasChildren) {
|
if (menu.hasChildren) {
|
||||||
toggleMenu(menu.id);
|
toggleMenu(menu.id);
|
||||||
} else {
|
} else {
|
||||||
|
// 메뉴 이름 저장 (엑셀 다운로드 파일명에 사용)
|
||||||
|
const menuName = menu.label || menu.name || "메뉴";
|
||||||
|
if (typeof window !== "undefined") {
|
||||||
|
localStorage.setItem("currentMenuName", menuName);
|
||||||
|
}
|
||||||
|
|
||||||
// 먼저 할당된 화면이 있는지 확인 (URL 유무와 관계없이)
|
// 먼저 할당된 화면이 있는지 확인 (URL 유무와 관계없이)
|
||||||
try {
|
try {
|
||||||
const menuObjid = menu.objid || menu.id;
|
const menuObjid = menu.objid || menu.id;
|
||||||
|
|
|
||||||
|
|
@ -160,6 +160,12 @@ export const useMenu = (user: any, authLoading: boolean) => {
|
||||||
if (menu.children && menu.children.length > 0) {
|
if (menu.children && menu.children.length > 0) {
|
||||||
toggleMenu(String(menu.OBJID));
|
toggleMenu(String(menu.OBJID));
|
||||||
} else {
|
} else {
|
||||||
|
// 메뉴 이름 저장 (엑셀 다운로드 파일명에 사용)
|
||||||
|
const menuName = menu.MENU_NAME_KOR || menu.menuNameKor || menu.TRANSLATED_NAME || "메뉴";
|
||||||
|
if (typeof window !== "undefined") {
|
||||||
|
localStorage.setItem("currentMenuName", menuName);
|
||||||
|
}
|
||||||
|
|
||||||
// 먼저 할당된 화면이 있는지 확인 (URL 유무와 관계없이)
|
// 먼저 할당된 화면이 있는지 확인 (URL 유무와 관계없이)
|
||||||
try {
|
try {
|
||||||
const menuObjid = menu.OBJID || menu.objid;
|
const menuObjid = menu.OBJID || menu.objid;
|
||||||
|
|
|
||||||
|
|
@ -1970,7 +1970,7 @@ export class ButtonActionExecutor {
|
||||||
sortOrder: (context.sortOrder || storedData?.sortOrder || "asc") as "asc" | "desc",
|
sortOrder: (context.sortOrder || storedData?.sortOrder || "asc") as "asc" | "desc",
|
||||||
search: filterConditions, // ✅ 필터 조건
|
search: filterConditions, // ✅ 필터 조건
|
||||||
enableEntityJoin: true, // ✅ Entity 조인
|
enableEntityJoin: true, // ✅ Entity 조인
|
||||||
autoFilter: true, // ✅ company_code 자동 필터링 (멀티테넌시)
|
// autoFilter는 entityJoinApi.getTableDataWithJoins 내부에서 자동으로 적용됨
|
||||||
};
|
};
|
||||||
|
|
||||||
// 🔒 멀티테넌시 준수: autoFilter로 company_code 자동 적용
|
// 🔒 멀티테넌시 준수: autoFilter로 company_code 자동 적용
|
||||||
|
|
@ -2027,8 +2027,18 @@ export class ButtonActionExecutor {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 파일명 생성
|
// 파일명 생성 (메뉴 이름 우선 사용)
|
||||||
const fileName = config.excelFileName || `${context.tableName || "데이터"}_${new Date().toISOString().split("T")[0]}.xlsx`;
|
let defaultFileName = context.tableName || "데이터";
|
||||||
|
|
||||||
|
// localStorage에서 메뉴 이름 가져오기
|
||||||
|
if (typeof window !== "undefined") {
|
||||||
|
const menuName = localStorage.getItem("currentMenuName");
|
||||||
|
if (menuName) {
|
||||||
|
defaultFileName = menuName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const fileName = config.excelFileName || `${defaultFileName}_${new Date().toISOString().split("T")[0]}.xlsx`;
|
||||||
const sheetName = config.excelSheetName || "Sheet1";
|
const sheetName = config.excelSheetName || "Sheet1";
|
||||||
const includeHeaders = config.excelIncludeHeaders !== false;
|
const includeHeaders = config.excelIncludeHeaders !== false;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue