From de7ab9b7e302ef6b73e28616df7981ae21179242 Mon Sep 17 00:00:00 2001 From: gbpark Date: Thu, 16 Apr 2026 00:32:19 +0900 Subject: [PATCH] =?UTF-8?q?=EC=A4=91=EA=B0=84=EC=84=B8=EC=9D=B4=EB=B8=8C?= =?UTF-8?q?=20-=20=EB=A9=94=EB=89=B4=EC=88=98=EC=A0=95=20-=20INVYONE=20?= =?UTF-8?q?=EC=8A=A4=ED=8A=9C=EB=94=94=EC=98=A4=20=EC=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/erp/controller/AdminController.java | 21 +- .../java/com/erp/service/AdminService.java | 24 + .../src/main/resources/application.yml | 2 +- .../src/main/resources/mapper/admin.xml | 11 +- docker/dev/backend-spring.Dockerfile | 7 +- frontend/app/(main)/admin/builder/page.tsx | 336 ++- frontend/app/(main)/admin/menu/page.tsx | 1471 ++++--------- .../admin/menu/MenuActivityPanel.tsx | 65 + .../admin/menu/MenuOverviewPanel.tsx | 97 + .../components/admin/menu/MenuScopePanel.tsx | 67 + .../admin/menu/MenuSettingsPanel.tsx | 282 +++ .../components/admin/menu/MenuTreePanel.tsx | 352 +++ frontend/components/layout/AppLayout.tsx | 6 +- .../screen/InteractiveScreenViewer.tsx | 2 +- frontend/components/screen/ScreenDesigner.tsx | 336 +-- frontend/components/screen/ViewTabBar.tsx | 57 + .../screen/panels/ComponentsPanel.tsx | 397 ++-- .../components/screen/toolbar/SlimToolbar.tsx | 573 ++--- .../V2ApprovalStepConfigPanel.tsx | 2 +- .../V2ItemRoutingConfigPanel.tsx | 4 +- .../V2ProcessWorkStandardConfigPanel.tsx | 4 +- .../V2RackStructureConfigPanel.tsx | 2 +- .../V2TimelineSchedulerConfigPanel.tsx | 4 +- frontend/contexts/MenuContext.tsx | 5 +- .../lib/registry/DynamicComponentRenderer.tsx | 32 + .../components/button/ButtonConfigPanel.tsx | 21 + .../lib/registry/components/button/index.ts | 2 +- .../registry/components/common/IconPicker.tsx | 119 + .../registry/components/container/index.ts | 4 +- .../flow-widget/FlowWidgetRenderer.tsx | 4 +- .../{ => domain}/flow-widget/index.ts | 0 .../{ => domain}/map/MapComponent.tsx | 0 .../{ => domain}/map/MapConfigPanel.tsx | 0 .../{ => domain}/map/MapPreviewComponent.tsx | 0 .../{ => domain}/map/MapRenderer.tsx | 2 +- .../components/{ => domain}/map/index.ts | 0 .../ApprovalStepComponent.tsx | 0 .../ApprovalStepConfigPanel.tsx | 0 .../v2-approval-step/ApprovalStepRenderer.tsx | 2 +- .../{ => domain}/v2-approval-step/index.ts | 4 +- .../{ => domain}/v2-approval-step/types.ts | 0 .../BomItemEditorComponent.tsx | 0 .../BomItemEditorRenderer.tsx | 2 +- .../{ => domain}/v2-bom-item-editor/index.ts | 2 +- .../v2-bom-tree/BomDetailEditModal.tsx | 0 .../v2-bom-tree/BomExcelUploadModal.tsx | 0 .../v2-bom-tree/BomHistoryModal.tsx | 0 .../v2-bom-tree/BomTreeComponent.tsx | 0 .../v2-bom-tree/BomTreeRenderer.tsx | 2 +- .../v2-bom-tree/BomVersionModal.tsx | 0 .../{ => domain}/v2-bom-tree/index.ts | 2 +- .../v2-item-routing/ItemRoutingComponent.tsx | 0 .../ItemRoutingConfigPanel.tsx | 0 .../v2-item-routing/ItemRoutingRenderer.tsx | 2 +- .../{ => domain}/v2-item-routing/config.ts | 0 .../v2-item-routing/hooks/useItemRouting.ts | 0 .../{ => domain}/v2-item-routing/index.ts | 4 +- .../{ => domain}/v2-item-routing/types.ts | 0 .../LocationSwapSelectorComponent.tsx | 0 .../LocationSwapSelectorConfigPanel.tsx | 0 .../LocationSwapSelectorRenderer.tsx | 2 +- .../v2-location-swap-selector/index.ts | 2 +- .../ProcessWorkStandardComponent.tsx | 0 .../ProcessWorkStandardConfigPanel.tsx | 0 .../ProcessWorkStandardRenderer.tsx | 2 +- .../components/DetailFormModal.tsx | 0 .../components/InspectionStandardLookup.tsx | 0 .../components/ItemProcessSelector.tsx | 0 .../components/WorkItemAddModal.tsx | 0 .../components/WorkItemCard.tsx | 0 .../components/WorkItemDetailList.tsx | 0 .../components/WorkPhaseSection.tsx | 0 .../v2-process-work-standard/config.ts | 0 .../hooks/useProcessWorkStandard.ts | 0 .../v2-process-work-standard/index.ts | 4 +- .../v2-process-work-standard/types.ts | 0 .../v2-rack-structure/FormatSegmentEditor.tsx | 0 .../{ => domain}/v2-rack-structure/README.md | 0 .../RackStructureComponent.tsx | 0 .../RackStructureConfigPanel.tsx | 0 .../RackStructureRenderer.tsx | 2 +- .../{ => domain}/v2-rack-structure/config.ts | 0 .../{ => domain}/v2-rack-structure/index.ts | 4 +- .../{ => domain}/v2-rack-structure/types.ts | 0 .../ShippingPlanEditorComponent.tsx | 0 .../ShippingPlanEditorConfigPanel.tsx | 0 .../ShippingPlanEditorRenderer.tsx | 2 +- .../v2-shipping-plan-editor/index.ts | 4 +- .../v2-shipping-plan-editor/types.ts | 0 .../v2-timeline-scheduler/README.md | 0 .../TimelineSchedulerComponent.tsx | 0 .../TimelineSchedulerConfigPanel.tsx | 0 .../TimelineSchedulerRenderer.tsx | 2 +- .../components/ItemTimelineCard.tsx | 0 .../components/ResourceRow.tsx | 0 .../components/ScheduleBar.tsx | 0 .../components/SchedulePreviewDialog.tsx | 0 .../components/TimelineHeader.tsx | 0 .../components/TimelineLegend.tsx | 0 .../v2-timeline-scheduler/components/index.ts | 0 .../v2-timeline-scheduler/config.ts | 0 .../hooks/useTimelineData.ts | 0 .../v2-timeline-scheduler/index.ts | 4 +- .../v2-timeline-scheduler/types.ts | 0 .../utils/conflictDetection.ts | 0 frontend/lib/registry/components/index.ts | 22 +- .../lib/registry/components/input/index.ts | 4 +- .../components/search/SearchConfigPanel.tsx | 179 +- .../lib/registry/components/search/index.ts | 4 +- .../components/stats/StatsConfigPanel.tsx | 98 +- .../lib/registry/components/stats/index.ts | 4 +- .../components/table/TableComponent.tsx | 637 +++--- .../components/table/TableConfigPanel.tsx | 223 +- .../lib/registry/components/table/types.ts | 2 + .../registry/components/table/useTableData.ts | 150 ++ .../components/v2-aggregation-widget/index.ts | 1 + .../components/v2-card-display/index.ts | 1 + .../components/v2-category-manager/index.ts | 1 + .../lib/registry/components/v2-date/index.ts | 1 + .../components/v2-file-upload/index.ts | 1 + .../lib/registry/components/v2-input/index.ts | 1 + .../lib/registry/components/v2-media/index.ts | 1 + .../components/v2-numbering-rule/index.ts | 1 + .../components/v2-repeat-container/index.ts | 1 + .../components/v2-section-card/index.ts | 1 + .../components/v2-section-paper/index.ts | 1 + .../registry/components/v2-select/index.ts | 1 + .../SplitPanelLayoutComponent.tsx | 2 +- .../components/v2-split-panel-layout/index.ts | 1 + .../components/v2-status-count/index.ts | 1 + .../components/v2-table-grouped/index.ts | 1 + .../components/v2-table-list/index.ts | 1 + .../lib/utils/getComponentConfigPanel.tsx | 70 +- frontend/package-lock.json | 381 +++- frontend/package.json | 3 + frontend/styles/builder-ide.css | 1117 +++++++++- frontend/styles/v5-layout.css | 472 +++- .../2026-04-08-invyone-dev-session-log.md | 148 -- .../gbpark/2026-04-09-builder-session-log.md | 179 -- .../2026-04-10-card-engine-phase1-log.md | 323 --- .../2026-04-10-phase1-implementation-log.md | 298 --- .../2026-04-10-phase2-implementation-log.md | 305 --- .../2026-04-10-phase3-implementation-log.md | 480 ----- .../2026-04-10-phase4-implementation-log.md | 297 --- .../gbpark/2026-04-10-phase5-control-mode.md | 357 --- .../2026-04-10-phase5-implementation-log.md | 368 ---- .../2026-04-10-template-model-redesign.md | 1913 ----------------- ...2026-04-10-template-redesign-phase1-log.md | 527 ----- .../2026-04-11-card-engine-phase2.1-log.md | 273 --- ...6-04-11-card-engine-phase2.1-rework-log.md | 256 --- .../2026-04-13-builder-panel-mockup.html | 402 ++++ .../2026-04-14-builder-header-mockup.html | 380 ++++ .../2026-04-15-menu-mng-v5-mockup-b.html | 677 ++++++ .../2026-04-15-menu-mng-v5-mockup-c.html | 990 +++++++++ .../gbpark/2026-04-15-menu-mng-v5-mockup.html | 588 +++++ 155 files changed, 8227 insertions(+), 8277 deletions(-) create mode 100644 frontend/components/admin/menu/MenuActivityPanel.tsx create mode 100644 frontend/components/admin/menu/MenuOverviewPanel.tsx create mode 100644 frontend/components/admin/menu/MenuScopePanel.tsx create mode 100644 frontend/components/admin/menu/MenuSettingsPanel.tsx create mode 100644 frontend/components/admin/menu/MenuTreePanel.tsx create mode 100644 frontend/components/screen/ViewTabBar.tsx create mode 100644 frontend/lib/registry/components/common/IconPicker.tsx rename frontend/lib/registry/components/{ => domain}/flow-widget/FlowWidgetRenderer.tsx (86%) rename frontend/lib/registry/components/{ => domain}/flow-widget/index.ts (100%) rename frontend/lib/registry/components/{ => domain}/map/MapComponent.tsx (100%) rename frontend/lib/registry/components/{ => domain}/map/MapConfigPanel.tsx (100%) rename frontend/lib/registry/components/{ => domain}/map/MapPreviewComponent.tsx (100%) rename frontend/lib/registry/components/{ => domain}/map/MapRenderer.tsx (96%) rename frontend/lib/registry/components/{ => domain}/map/index.ts (100%) rename frontend/lib/registry/components/{ => domain}/v2-approval-step/ApprovalStepComponent.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-approval-step/ApprovalStepConfigPanel.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-approval-step/ApprovalStepRenderer.tsx (85%) rename frontend/lib/registry/components/{ => domain}/v2-approval-step/index.ts (92%) rename frontend/lib/registry/components/{ => domain}/v2-approval-step/types.ts (100%) rename frontend/lib/registry/components/{ => domain}/v2-bom-item-editor/BomItemEditorComponent.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-bom-item-editor/BomItemEditorRenderer.tsx (85%) rename frontend/lib/registry/components/{ => domain}/v2-bom-item-editor/index.ts (91%) rename frontend/lib/registry/components/{ => domain}/v2-bom-tree/BomDetailEditModal.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-bom-tree/BomExcelUploadModal.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-bom-tree/BomHistoryModal.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-bom-tree/BomTreeComponent.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-bom-tree/BomTreeRenderer.tsx (86%) rename frontend/lib/registry/components/{ => domain}/v2-bom-tree/BomVersionModal.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-bom-tree/index.ts (89%) rename frontend/lib/registry/components/{ => domain}/v2-item-routing/ItemRoutingComponent.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-item-routing/ItemRoutingConfigPanel.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-item-routing/ItemRoutingRenderer.tsx (90%) rename frontend/lib/registry/components/{ => domain}/v2-item-routing/config.ts (100%) rename frontend/lib/registry/components/{ => domain}/v2-item-routing/hooks/useItemRouting.ts (100%) rename frontend/lib/registry/components/{ => domain}/v2-item-routing/index.ts (94%) rename frontend/lib/registry/components/{ => domain}/v2-item-routing/types.ts (100%) rename frontend/lib/registry/components/{ => domain}/v2-location-swap-selector/LocationSwapSelectorComponent.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-location-swap-selector/LocationSwapSelectorConfigPanel.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-location-swap-selector/LocationSwapSelectorRenderer.tsx (91%) rename frontend/lib/registry/components/{ => domain}/v2-location-swap-selector/index.ts (96%) rename frontend/lib/registry/components/{ => domain}/v2-process-work-standard/ProcessWorkStandardComponent.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-process-work-standard/ProcessWorkStandardConfigPanel.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-process-work-standard/ProcessWorkStandardRenderer.tsx (90%) rename frontend/lib/registry/components/{ => domain}/v2-process-work-standard/components/DetailFormModal.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-process-work-standard/components/InspectionStandardLookup.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-process-work-standard/components/ItemProcessSelector.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-process-work-standard/components/WorkItemAddModal.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-process-work-standard/components/WorkItemCard.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-process-work-standard/components/WorkItemDetailList.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-process-work-standard/components/WorkPhaseSection.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-process-work-standard/config.ts (100%) rename frontend/lib/registry/components/{ => domain}/v2-process-work-standard/hooks/useProcessWorkStandard.ts (100%) rename frontend/lib/registry/components/{ => domain}/v2-process-work-standard/index.ts (94%) rename frontend/lib/registry/components/{ => domain}/v2-process-work-standard/types.ts (100%) rename frontend/lib/registry/components/{ => domain}/v2-rack-structure/FormatSegmentEditor.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-rack-structure/README.md (100%) rename frontend/lib/registry/components/{ => domain}/v2-rack-structure/RackStructureComponent.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-rack-structure/RackStructureConfigPanel.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-rack-structure/RackStructureRenderer.tsx (95%) rename frontend/lib/registry/components/{ => domain}/v2-rack-structure/config.ts (100%) rename frontend/lib/registry/components/{ => domain}/v2-rack-structure/index.ts (95%) rename frontend/lib/registry/components/{ => domain}/v2-rack-structure/types.ts (100%) rename frontend/lib/registry/components/{ => domain}/v2-shipping-plan-editor/ShippingPlanEditorComponent.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-shipping-plan-editor/ShippingPlanEditorConfigPanel.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-shipping-plan-editor/ShippingPlanEditorRenderer.tsx (83%) rename frontend/lib/registry/components/{ => domain}/v2-shipping-plan-editor/index.ts (88%) rename frontend/lib/registry/components/{ => domain}/v2-shipping-plan-editor/types.ts (100%) rename frontend/lib/registry/components/{ => domain}/v2-timeline-scheduler/README.md (100%) rename frontend/lib/registry/components/{ => domain}/v2-timeline-scheduler/TimelineSchedulerComponent.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-timeline-scheduler/TimelineSchedulerConfigPanel.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-timeline-scheduler/TimelineSchedulerRenderer.tsx (94%) rename frontend/lib/registry/components/{ => domain}/v2-timeline-scheduler/components/ItemTimelineCard.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-timeline-scheduler/components/ResourceRow.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-timeline-scheduler/components/ScheduleBar.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-timeline-scheduler/components/SchedulePreviewDialog.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-timeline-scheduler/components/TimelineHeader.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-timeline-scheduler/components/TimelineLegend.tsx (100%) rename frontend/lib/registry/components/{ => domain}/v2-timeline-scheduler/components/index.ts (100%) rename frontend/lib/registry/components/{ => domain}/v2-timeline-scheduler/config.ts (100%) rename frontend/lib/registry/components/{ => domain}/v2-timeline-scheduler/hooks/useTimelineData.ts (100%) rename frontend/lib/registry/components/{ => domain}/v2-timeline-scheduler/index.ts (92%) rename frontend/lib/registry/components/{ => domain}/v2-timeline-scheduler/types.ts (100%) rename frontend/lib/registry/components/{ => domain}/v2-timeline-scheduler/utils/conflictDetection.ts (100%) create mode 100644 frontend/lib/registry/components/table/useTableData.ts delete mode 100644 notes/gbpark/2026-04-08-invyone-dev-session-log.md delete mode 100644 notes/gbpark/2026-04-09-builder-session-log.md delete mode 100644 notes/gbpark/2026-04-10-card-engine-phase1-log.md delete mode 100644 notes/gbpark/2026-04-10-phase1-implementation-log.md delete mode 100644 notes/gbpark/2026-04-10-phase2-implementation-log.md delete mode 100644 notes/gbpark/2026-04-10-phase3-implementation-log.md delete mode 100644 notes/gbpark/2026-04-10-phase4-implementation-log.md delete mode 100644 notes/gbpark/2026-04-10-phase5-control-mode.md delete mode 100644 notes/gbpark/2026-04-10-phase5-implementation-log.md delete mode 100644 notes/gbpark/2026-04-10-template-model-redesign.md delete mode 100644 notes/gbpark/2026-04-10-template-redesign-phase1-log.md delete mode 100644 notes/gbpark/2026-04-11-card-engine-phase2.1-log.md delete mode 100644 notes/gbpark/2026-04-11-card-engine-phase2.1-rework-log.md create mode 100644 notes/gbpark/2026-04-13-builder-panel-mockup.html create mode 100644 notes/gbpark/2026-04-14-builder-header-mockup.html create mode 100644 notes/gbpark/2026-04-15-menu-mng-v5-mockup-b.html create mode 100644 notes/gbpark/2026-04-15-menu-mng-v5-mockup-c.html create mode 100644 notes/gbpark/2026-04-15-menu-mng-v5-mockup.html 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 4413e94d..978ad236 100644 --- a/backend-spring/src/main/java/com/erp/controller/AdminController.java +++ b/backend-spring/src/main/java/com/erp/controller/AdminController.java @@ -131,13 +131,24 @@ public class AdminController { * 메뉴 일괄 삭제 */ @DeleteMapping("/menus/batch") - public ResponseEntity> deleteMenusBatch(@RequestBody Map body) { - @SuppressWarnings("unchecked") - List menuIds = (List) body.get("menu_ids"); + public ResponseEntity>> deleteMenusBatch(@RequestBody List menuIds) { + int deletedCount = 0; + int failedCount = 0; if (menuIds != null) { - menuIds.forEach(adminService::deleteMenu); + for (String menuId : menuIds) { + try { + adminService.deleteMenu(menuId); + deletedCount++; + } catch (Exception e) { + failedCount++; + log.warn("메뉴 삭제 실패 menuId={} : {}", menuId, e.getMessage()); + } + } } - return ResponseEntity.ok(ApiResponse.success(null, "메뉴 일괄 삭제 성공")); + Map result = new HashMap<>(); + result.put("deletedCount", deletedCount); + result.put("failedCount", failedCount); + return ResponseEntity.ok(ApiResponse.success(result, "메뉴 일괄 삭제 성공")); } // ── 사용자 관리 ──────────────────────────────────────────────────────── 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 803c15f3..d114c911 100644 --- a/backend-spring/src/main/java/com/erp/service/AdminService.java +++ b/backend-spring/src/main/java/com/erp/service/AdminService.java @@ -80,6 +80,8 @@ public class AdminService extends BaseService { long objid = System.currentTimeMillis(); params.put("objid", objid); + normalizeMenuParams(params); + // Map frontend field names to DB column names if (params.get("menu_name_kor") == null && params.get("menu_name") != null) { params.put("menu_name_kor", params.get("menu_name")); @@ -91,10 +93,32 @@ public class AdminService extends BaseService { public Map updateMenu(String menuId, Map params) { params.put("menu_id", menuId); + normalizeMenuParams(params); sqlSession.update("admin.updateMenu", params); return params; } + // 프론트가 보내는 camelCase 키를 XML이 기대하는 snake_case 키로 복사한다. + // (XML #{menu_name_kor} 등 snake_case 파라미터로 바인딩하기 위함) + private void normalizeMenuParams(Map params) { + copyIfAbsent(params, "menuNameKor", "menu_name_kor"); + copyIfAbsent(params, "menuUrl", "menu_url"); + copyIfAbsent(params, "menuDesc", "menu_desc"); + copyIfAbsent(params, "parentObjId", "parent_obj_id"); + copyIfAbsent(params, "langKey", "lang_key"); + copyIfAbsent(params, "langKeyDesc", "lang_key_desc"); + copyIfAbsent(params, "menuIcon", "menu_icon"); + copyIfAbsent(params, "screenCode", "screen_code"); + copyIfAbsent(params, "menuType", "menu_type"); + copyIfAbsent(params, "companyCode", "company_code"); + } + + private void copyIfAbsent(Map params, String camelKey, String snakeKey) { + if (params.get(snakeKey) == null && params.get(camelKey) != null) { + params.put(snakeKey, params.get(camelKey)); + } + } + public void deleteMenu(String menuId) { Map params = new HashMap<>(); params.put("menu_id", menuId); diff --git a/backend-spring/src/main/resources/application.yml b/backend-spring/src/main/resources/application.yml index d58fdd04..85101ee2 100644 --- a/backend-spring/src/main/resources/application.yml +++ b/backend-spring/src/main/resources/application.yml @@ -14,7 +14,7 @@ spring: jackson: default-property-inclusion: always datasource: - url: jdbc:postgresql://211.115.91.141:11134/test_dev + url: jdbc:postgresql://183.99.177.40:5432/vexplor username: postgres password: "vexplor0909!!" driver-class-name: org.postgresql.Driver diff --git a/backend-spring/src/main/resources/mapper/admin.xml b/backend-spring/src/main/resources/mapper/admin.xml index a58d7ca5..d03428b5 100644 --- a/backend-spring/src/main/resources/mapper/admin.xml +++ b/backend-spring/src/main/resources/mapper/admin.xml @@ -313,7 +313,7 @@ FROM MENU_INFO M LEFT JOIN COMPANY_MNG C ON M.COMPANY_CODE = C.COMPANY_CODE - WHERE M.OBJID = #{menu_id}::NUMERIC + WHERE M.OBJID = #{menu_id} @@ -363,20 +363,23 @@ , LANG_KEY = #{lang_key} , LANG_KEY_DESC = #{lang_key_desc} , MENU_ICON = #{menu_icon} - WHERE OBJID = #{menu_id}::NUMERIC + , PARENT_OBJ_ID = #{parent_obj_id} + , MENU_TYPE = #{menu_type} + , COMPANY_CODE = #{company_code} + WHERE OBJID = #{menu_id} DELETE FROM MENU_INFO - WHERE OBJID = #{menu_id}::NUMERIC + WHERE OBJID = #{menu_id} UPDATE MENU_INFO SET STATUS = #{status} - WHERE OBJID = #{menu_id}::NUMERIC + WHERE OBJID = #{menu_id} +
+ + +
+ + +
+
+ + +
+
T
+
USER_INFO
+
30
+
+ + +
+ + +
+ + +
+ + +
+ +
+ +
+ + +
+
+ + 컴포넌트 +
+
+
+
+ 데이터 조회/선택 + +
+
+
+ 버튼 + +
+
+
+ 제목/텍스트 + +
+
+
+ 테이블 + +
+
+
+ 통계 카드 + +
+
+
+ 구분선 + +
+
+
+ 영역 + +
+
+
+ 입력 필드 + +
+
+
+ 검색 + +
+
+ +
+ 더보기 + 9 +
+
+
+ +
280px
+
+ + +
+ 캔버스 — 패널 경계를 드래그해서 리사이즈 +
+ + + + diff --git a/notes/gbpark/2026-04-14-builder-header-mockup.html b/notes/gbpark/2026-04-14-builder-header-mockup.html new file mode 100644 index 00000000..c2e7f9a5 --- /dev/null +++ b/notes/gbpark/2026-04-14-builder-header-mockup.html @@ -0,0 +1,380 @@ + + + + + +Builder Header v3 — 인비온 직각 + 구역 분리 + 구조 변경 + + + + +
+ + +
+ + +
+ + +
+
+ + STUDIO +
+
+ + +
+
+
+ +
+
+ +
+
+
+ + +
+
+ +
+
+ + +
+ 하이큐마그 기준정보 부서관리 사원 추가 모달 + + + user_info + +
+ + +
+
+
+ +
+
+ +
+
+ +
+
+
+ + +
+
+ + + +
+
+
+ + +
+ +
+
+ + Full HD + 1920×1080 + +
+
+ + +
+
+ +
캔버스 영역
+
+ +
+ 탭은 동적: 처음엔 "목록 화면"만. 등록/수정 버튼 배치 시 탭 자동 추가
+ + + +
+ + + + diff --git a/notes/gbpark/2026-04-15-menu-mng-v5-mockup-b.html b/notes/gbpark/2026-04-15-menu-mng-v5-mockup-b.html new file mode 100644 index 00000000..11cd1c6e --- /dev/null +++ b/notes/gbpark/2026-04-15-menu-mng-v5-mockup-b.html @@ -0,0 +1,677 @@ + + + + + +INVYONE — 메뉴 관리 (B · Soft Studio) + + + + +
+ +
+
+
+
+ +
+
+ 관리자/시스템/메뉴 관리 +
+
+
+
검색⌘K
+
+ + +
+
GP
+
+
+ +
+ + + +
+ +
+
+ 관리자 + + 시스템 + + 메뉴 관리 +
+
+
+

메뉴 관리

+ Active + 공용 * + L2 +
+
+ + + +
+
+
+ +
+ +
+
+ + 기본 정보 +
+
메뉴 이름과 다국어 키, 설명을 입력합니다.
+
+ +
+
+
+ +
+ +
+
+
+ +
+
+
+ +
+
+ + 연결 +
+
메뉴 클릭 시 어떤 콘텐츠로 이동할지 결정합니다.
+
+ +
+
+ + + + +
+
+
+
+ +
+
+
+ +
+
+
+ +
+
+ + 스코프 & 표시 +
+
어느 회사에 보이고, 어느 위치에 나타날지 설정합니다.
+
+ +
+ +
하위 메뉴는 상위 스코프를 상속합니다.
+
+
+
+ +
+
+
+ +
+
+
+ +
+ +
+
+
+ +
+
+ + 메타 +
+
+ +
mnu_00231
+
+
+ +
2026-04-12 14:23 · gbpark
+
+
+ +
+ +
+
+ + +
+
+ 저장되지 않음 + + +
+
+ +
+ +
+
+ + + + diff --git a/notes/gbpark/2026-04-15-menu-mng-v5-mockup-c.html b/notes/gbpark/2026-04-15-menu-mng-v5-mockup-c.html new file mode 100644 index 00000000..28343514 --- /dev/null +++ b/notes/gbpark/2026-04-15-menu-mng-v5-mockup-c.html @@ -0,0 +1,990 @@ + + + + + +INVYONE — 메뉴 관리 (C · Cascade, 심플 v3) + + + + +
+ +
+
+ +
+ 01스코프 + / + 02관리자 + / + 03시스템 · 요약 +
+
+
+ +
+ + +
+
GP
+
+
+ +
+ + +
+
+
01Scope
+

스코프

+

메뉴 타입을 선택하세요

+
+
+
+
+
+ +
+
37
+
+
+
관리자
+
시스템·업무·리포트 관리 화면
+
+
+
+
+
+ +
+
18
+
+
+
사용자
+
최종 사용자 대시보드·업무
+
+
+
+
+ + +
+
+
+
02Tree
+

관리자 메뉴

+

5개 · 37개 항목 · depth 3

+
+ +
+ +
+ + +
+ +
+ + +
+ + +
시스템
+ 10 +
+
+
+ + +
메뉴 관리
/admin/menu
+
+
+ + +
사용자 관리
/admin/userMng
+
+
+ + +
화면 관리
/admin/screenMng
+
+
+ + +
공통 코드
/admin/code
+ 3 +
+
+
+ + +
코드 그룹
/admin/code/groups
+
+
+ + +
코드 값
/admin/code/values
+
+
+ + +
다국어
/admin/i18n
+
+
+
+ + +
권한
/admin/roles
+
+
+ + +
+ + +
업무
+ 12 +
+
+
+ +
수주
/biz/orders
+
+
+ +
생산
/biz/production
+
+
+ + +
+ + +
AI Assistant
+ 5 +
+
+
+ +
대시보드
/ai/dashboard
+
+
+ +
채팅
/ai/chat
+
+
+ + +
+ + +
리포트
+ 7 +
+
+ + +
+ + +
자동화
+ 3 +
+
+ +
+
+ + +
+ +
+
+ + + +
+
+ +
+
+ +
+ + + +
+ +
+
03Overview
+
+

시스템

+ 10개 항목 +
+
+ 경로 관리자 / 시스템 + 스코프 공용 * + 최근 수정 2일 전 +
+
+ + +
+
+
전체
+
10items
+
+
+
활성
+
8/ 10
+
+
+
비활성
+
2disabled
+
+
+
화면 연결
+
7screens
+
+
+ + +
+
+ Sidebar Preview +
+
+
+
+
시스템
+
+ + 메뉴 관리 +
+
+ + 사용자 관리 +
+
+ + 화면 관리 +
+
+ + 공통 코드 +
+
+ + 권한 +
+
+
PREVIEW AREA
+
+
+ +
+ + +
+
+
+
+ +
+
+
관리자 · 시스템 · 메뉴 관리
+

+ 메뉴 관리 + + Active + 공용 * + L2 + +

+
+
+
+ OBJID mnu_00231 + 최근 수정 2026-04-12 14:23 · gbpark +
+
+ +
+
+

기본 정보

+

메뉴 이름, 다국어 키, 사용자에게 표시되는 설명을 설정합니다.

+
+
+
+ + +
+
+
+ + +
+
+ + +
+
+
+ + +
+
+
+ +
+
+

연결

+

메뉴 클릭 시 어떤 콘텐츠로 이동할지 결정합니다.

+
+
+
+ +
+ + + + +
+
+
+ + +
화면 검색 또는 직접 URL 입력. 유형이 URL일 때만 외부 링크로 동작합니다.
+
+
+
+ +
+
+

스코프 & 표시

+

어느 회사에서 보이고 트리 상 어디에 위치할지 결정합니다.

+
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ +
+
+ + +
+
+ 저장되지 않음 + + +
+
+
+ + +
+
+

활동 로그 · 최근 4건

+
이 카테고리에서 최근 발생한 변경 이력입니다.
+
+
+
+
+
+
gbpark 메뉴명 수정 · 메뉴 관리
+
mnu_00231 · 메뉴관리 → 메뉴 관리
+
+ 2일 전 +
+
+
+
+
gbpark 하위 메뉴 추가 · 공통 코드 / 다국어
+
mnu_00248 · /admin/i18n
+
+ 4일 전 +
+
+
+
+
park URL 변경 · 화면 관리
+
/admin/screen → /admin/screenMng
+
+ 6일 전 +
+
+
+
+
gbpark 메뉴 비활성화 · 테스트
+
mnu_00197 · status: inactive
+
+ 1주 전 +
+
+
+ +
+
+ +
+
+ + + + diff --git a/notes/gbpark/2026-04-15-menu-mng-v5-mockup.html b/notes/gbpark/2026-04-15-menu-mng-v5-mockup.html new file mode 100644 index 00000000..0799ad18 --- /dev/null +++ b/notes/gbpark/2026-04-15-menu-mng-v5-mockup.html @@ -0,0 +1,588 @@ + + + + + +INVYONE — 메뉴 관리 + + + + +
+ +
+
+ +
+ 관리자/시스템/메뉴 관리 +
+
+
+
+ + +
+
GP
+
+
+ +
+
+

메뉴 관리

+
트리에서 선택하면 우측에서 편집합니다.
+
+
+ +
+ + + +
+ +
+
+ 관리자 + + 시스템 + + 메뉴 관리 +
+
+

메뉴 관리

+ Active + 공용 * + L2 +
+
+ +
+ +
+
기본 정보
+
메뉴 이름과 다국어 키를 관리합니다.
+
+ +
+
+
+ +
+ +
+
+
+ +
+
+
+ +
+
연결
+
메뉴 클릭 시 어떤 콘텐츠로 이동할지 결정합니다.
+
+ +
+
+ + + + +
+
+
+
+ +
+
+
+ +
+
+
+ +
+
스코프 & 표시
+
어느 회사에서 보이고, 어느 위치에 나타날지 설정합니다.
+
+ +
+ +
하위 메뉴는 상위 스코프를 상속합니다.
+
+
+
+ +
+
+
+ +
+
+
+ +
+ +
+
+
+ +
+
메타
+
+ +
mnu_00231
+
+
+ +
2026-04-12 14:23 · gbpark
+
+
+ +
+ +
+
+ + +
+
+ ● 저장되지 않음 + + +
+
+ +
+ +
+
+ + + +