diff --git a/backend-spring/src/main/java/com/erp/controller/AdminController.java b/backend-spring/src/main/java/com/erp/controller/AdminController.java index 598bf486..434c5c7a 100644 --- a/backend-spring/src/main/java/com/erp/controller/AdminController.java +++ b/backend-spring/src/main/java/com/erp/controller/AdminController.java @@ -308,7 +308,7 @@ public class AdminController { * 부서 목록 조회 */ @GetMapping("/departments") - public ResponseEntity>>> getDepartmentList( + public ResponseEntity>> getDepartmentList( @RequestAttribute("companyCode") String companyCode, @RequestParam Map params) { params.put("companyCode", companyCode); diff --git a/backend-spring/src/main/java/com/erp/controller/ApprovalController.java b/backend-spring/src/main/java/com/erp/controller/ApprovalController.java index df440dd3..15192fbe 100644 --- a/backend-spring/src/main/java/com/erp/controller/ApprovalController.java +++ b/backend-spring/src/main/java/com/erp/controller/ApprovalController.java @@ -13,7 +13,7 @@ import java.util.List; import java.util.Map; @RestController -@RequestMapping("/api/approvals") +@RequestMapping("/api/approval") @RequiredArgsConstructor @Slf4j public class ApprovalController { diff --git a/backend-spring/src/main/java/com/erp/controller/ScreenManagementController.java b/backend-spring/src/main/java/com/erp/controller/ScreenManagementController.java index 55d9d572..b5d7285a 100644 --- a/backend-spring/src/main/java/com/erp/controller/ScreenManagementController.java +++ b/backend-spring/src/main/java/com/erp/controller/ScreenManagementController.java @@ -1,6 +1,7 @@ package com.erp.controller; import com.erp.dto.ApiResponse; +import com.erp.service.CommonService; import com.erp.service.ScreenManagementService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -17,6 +18,7 @@ import java.util.Map; public class ScreenManagementController { private final ScreenManagementService service; + private final CommonService commonService; // ─── 화면 목록 / 단건 ───────────────────────────────────── @@ -42,7 +44,7 @@ public class ScreenManagementController { if (screen == null) { return ResponseEntity.status(404).body(ApiResponse.error("화면을 찾을 수 없습니다.")); } - return ResponseEntity.ok(ApiResponse.success(screen)); + return ResponseEntity.ok(ApiResponse.success(commonService.toCamelCaseKeys(screen))); } @GetMapping("/screens/{id}/menu") @@ -336,9 +338,10 @@ public class ScreenManagementController { } @GetMapping("/screens/{screenId}/layout") - public ResponseEntity>>> getLayout( + public ResponseEntity>> getLayout( + @RequestAttribute("companyCode") String companyCode, @PathVariable Integer screenId) { - return ResponseEntity.ok(ApiResponse.success(service.getLayoutV1(screenId))); + return ResponseEntity.ok(ApiResponse.success(service.getLayout(screenId, companyCode))); } @GetMapping("/screens/{screenId}/layout-v1") diff --git a/backend-spring/src/main/java/com/erp/service/AdminService.java b/backend-spring/src/main/java/com/erp/service/AdminService.java index bbf15640..002e6ed4 100644 --- a/backend-spring/src/main/java/com/erp/service/AdminService.java +++ b/backend-spring/src/main/java/com/erp/service/AdminService.java @@ -25,7 +25,9 @@ public class AdminService extends BaseService { public List> getAdminMenuList(Map params) { params.putIfAbsent("userLang", "ko"); - params.putIfAbsent("includeInactive", false); + // String "false"/"true" → Boolean (OGNL !includeInactive 오작동 방지) + Object includeInactiveRaw = params.get("includeInactive"); + params.put("includeInactive", Boolean.TRUE.equals(includeInactiveRaw) || "true".equals(includeInactiveRaw)); params.putIfAbsent("isManagementScreen", false); return sqlSession.selectList("admin.selectAdminMenuList", params); } @@ -124,7 +126,7 @@ public class AdminService extends BaseService { pagination.put("totalPages", totalPages); Map result = new HashMap<>(); - result.put("data", users); + result.put("data", commonService.toCamelCaseKeysList(users)); result.put("total", total); result.put("searchType", rawSearch != null ? "v2" : "none"); result.put("pagination", pagination); @@ -336,15 +338,18 @@ public class AdminService extends BaseService { // ── 부서 관리 ────────────────────────────────────────────────────────── - public List> getDepartmentList(Map params) { + public Map getDepartmentList(Map params) { commonService.applyCompanyCodeFilter(params); - return sqlSession.selectList("admin.selectDepartmentList", params); + List> list = sqlSession.selectList("admin.selectDepartmentList", params); + return commonService.buildListResponse(list, list.size(), params); } // ── 회사 관리 ────────────────────────────────────────────────────────── public List> getCompanyList() { - return sqlSession.selectList("admin.selectCompanyList", new HashMap<>()); + List> list = sqlSession.selectList("admin.selectCompanyList", new HashMap<>()); + list.forEach(row -> row.put("data_type", "company")); + return list; } public Map getCompanyByCode(String companyCode) { diff --git a/backend-spring/src/main/java/com/erp/service/ScheduleService.java b/backend-spring/src/main/java/com/erp/service/ScheduleService.java index 91e65515..7e120d23 100644 --- a/backend-spring/src/main/java/com/erp/service/ScheduleService.java +++ b/backend-spring/src/main/java/com/erp/service/ScheduleService.java @@ -25,7 +25,10 @@ public class ScheduleService extends BaseService { Integer totalObj = sqlSession.selectOne(NS + "getScheduleListCnt", params); int totalCount = totalObj != null ? totalObj : 0; List> list = sqlSession.selectList(NS + "getScheduleList", params); - return commonService.buildListResponse(list, totalCount, params); + Map result = new LinkedHashMap<>(); + result.put("data", list); + result.put("total", totalCount); + return result; } public Map getScheduleInfo(Map params) { diff --git a/backend-spring/src/main/java/com/erp/service/ScreenManagementService.java b/backend-spring/src/main/java/com/erp/service/ScreenManagementService.java index a652329b..14a7bf42 100644 --- a/backend-spring/src/main/java/com/erp/service/ScreenManagementService.java +++ b/backend-spring/src/main/java/com/erp/service/ScreenManagementService.java @@ -498,6 +498,17 @@ public class ScreenManagementService extends BaseService { return sqlSession.selectList(NS + "selectLayoutV1ByScreen", params); } + /** GET /layout — V2 우선 조회 (layer_id=1), 없으면 V1을 { components: [...] } 로 감싸서 반환 */ + public Map getLayout(Integer screenId, String companyCode) { + Map v2 = getLayoutV2(screenId, companyCode, 1); + if (v2 != null) return v2; + + List> v1 = getLayoutV1(screenId); + Map result = new LinkedHashMap<>(); + result.put("components", v1 != null ? v1 : Collections.emptyList()); + return result; + } + // ═══════════════════════════════════════════════════════════ // Layout V2 // ═══════════════════════════════════════════════════════════ diff --git a/backend-spring/src/main/java/com/erp/service/TableManagementService.java b/backend-spring/src/main/java/com/erp/service/TableManagementService.java index e10666ff..424dbd92 100644 --- a/backend-spring/src/main/java/com/erp/service/TableManagementService.java +++ b/backend-spring/src/main/java/com/erp/service/TableManagementService.java @@ -32,10 +32,14 @@ public class TableManagementService extends BaseService { public List> getTableList() { List> tables = sqlSession.selectList(NS + "getTableList"); - // column_count BigInt → Integer 변환 + // column_count BigInt → Integer 변환 + camelCase 키 추가 (Node 호환) for (Map t : tables) { Object cnt = t.get("column_count"); - if (cnt instanceof Number) t.put("column_count", ((Number) cnt).intValue()); + if (cnt instanceof Number) { + int intVal = ((Number) cnt).intValue(); + t.put("column_count", intVal); + t.put("columnCount", intVal); + } } return tables; } diff --git a/backend-spring/src/main/resources/mapper/admin.xml b/backend-spring/src/main/resources/mapper/admin.xml index 5233b046..49ed0445 100644 --- a/backend-spring/src/main/resources/mapper/admin.xml +++ b/backend-spring/src/main/resources/mapper/admin.xml @@ -111,6 +111,16 @@ LIMIT 1), V.MENU_NAME_KOR ) AS TRANSLATED_NAME + , COALESCE( + (SELECT MLT.LANG_TEXT + FROM MULTI_LANG_KEY_MASTER MLKM + JOIN MULTI_LANG_TEXT MLT + ON MLKM.KEY_ID = MLT.KEY_ID + WHERE MLKM.LANG_KEY = V.LANG_KEY_DESC + AND MLT.LANG_CODE = #{userLang} + LIMIT 1), + V.MENU_DESC + ) AS TRANSLATED_DESC , CASE UPPER(V.STATUS) WHEN 'ACTIVE' THEN '활성화' WHEN 'INACTIVE' THEN '비활성화' @@ -208,6 +218,16 @@ LIMIT 1), V.MENU_NAME_KOR ) AS TRANSLATED_NAME + , COALESCE( + (SELECT MLT.LANG_TEXT + FROM MULTI_LANG_KEY_MASTER MLKM + JOIN MULTI_LANG_TEXT MLT + ON MLKM.KEY_ID = MLT.KEY_ID + WHERE MLKM.LANG_KEY = V.LANG_KEY_DESC + AND MLT.LANG_CODE = #{userLang} + LIMIT 1), + V.MENU_DESC + ) AS TRANSLATED_DESC , CASE UPPER(V.STATUS) WHEN 'ACTIVE' THEN '활성화' WHEN 'INACTIVE' THEN '비활성화' diff --git a/backend-spring/src/main/resources/mapper/screenManagement.xml b/backend-spring/src/main/resources/mapper/screenManagement.xml index f70ae309..738e0db9 100644 --- a/backend-spring/src/main/resources/mapper/screenManagement.xml +++ b/backend-spring/src/main/resources/mapper/screenManagement.xml @@ -393,12 +393,12 @@ SELECT LAYER_ID , LAYER_NAME - , CONDITION_CONFIG + , COALESCE(CONDITION_CONFIG, '{}') AS CONDITION_CONFIG , JSONB_ARRAY_LENGTH(COALESCE(LAYOUT_DATA->'components', '[]'::jsonb)) AS COMPONENT_COUNT , UPDATED_AT FROM SCREEN_LAYOUTS_V2 WHERE SCREEN_ID = #{screenId} - + AND (COMPANY_CODE = #{companyCode} OR COMPANY_CODE = '*') ORDER BY LAYER_ID