fix(frontend): 메뉴 중복 해소 + system-flow 노드 동기화 + V019 권한 트리
- /map-control labelKey nav.riskMap → nav.mapControl (위험도 지도 중복 해소) - i18n nav.mapControl 키 추가 (ko: 해역 관리, en: Map Control) - V019 마이그레이션: ai-operations:llm-ops 권한 트리 항목 추가 (PR #22 누락분) - system-flow 08-frontend.json: 누락 노드 14개 추가 - ui.map_control, ui.risk_map, ui.patrol_route, ui.fleet_optimization - ui.report_management, ui.external_service - ui.ai_model, ui.mlops, ui.llm_ops - ui.mobile_service, ui.ship_agent - ui.admin_panel, ui.permissions Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
부모
e401c07dd3
커밋
d08d614b5f
@ -0,0 +1,16 @@
|
|||||||
|
-- ============================================================
|
||||||
|
-- V019: LLM 운영 페이지 권한 트리 항목 추가
|
||||||
|
-- PR #22에서 추가된 /llm-ops 페이지에 대응하는 권한 리소스
|
||||||
|
-- ============================================================
|
||||||
|
|
||||||
|
INSERT INTO kcg.auth_perm_tree(rsrc_cd, parent_cd, rsrc_nm, rsrc_level, sort_ord)
|
||||||
|
VALUES ('ai-operations:llm-ops', 'ai-operations', 'LLM 운영', 1, 35)
|
||||||
|
ON CONFLICT (rsrc_cd) DO NOTHING;
|
||||||
|
|
||||||
|
-- ADMIN 역할에 자동 부여
|
||||||
|
INSERT INTO kcg.auth_perm(role_sn, rsrc_cd, oper_cd, grant_yn)
|
||||||
|
SELECT r.role_sn, 'ai-operations:llm-ops', op.oper_cd, 'Y'
|
||||||
|
FROM kcg.auth_role r
|
||||||
|
CROSS JOIN (VALUES ('READ'), ('CREATE'), ('UPDATE'), ('DELETE'), ('EXPORT')) AS op(oper_cd)
|
||||||
|
WHERE r.role_cd = 'ADMIN'
|
||||||
|
ON CONFLICT (role_sn, rsrc_cd, oper_cd) DO NOTHING;
|
||||||
@ -47,7 +47,7 @@ const NAV_ENTRIES: NavEntry[] = [
|
|||||||
{ to: '/dashboard', icon: LayoutDashboard, labelKey: 'nav.dashboard' },
|
{ to: '/dashboard', icon: LayoutDashboard, labelKey: 'nav.dashboard' },
|
||||||
{ to: '/monitoring', icon: Activity, labelKey: 'nav.monitoring' },
|
{ to: '/monitoring', icon: Activity, labelKey: 'nav.monitoring' },
|
||||||
{ to: '/events', icon: Radar, labelKey: 'nav.realtimeEvent' },
|
{ to: '/events', icon: Radar, labelKey: 'nav.realtimeEvent' },
|
||||||
{ to: '/map-control', icon: Map, labelKey: 'nav.riskMap' },
|
{ to: '/map-control', icon: Map, labelKey: 'nav.mapControl' },
|
||||||
// ── 위험도·단속 ──
|
// ── 위험도·단속 ──
|
||||||
{ to: '/risk-map', icon: Layers, labelKey: 'nav.riskMap' },
|
{ to: '/risk-map', icon: Layers, labelKey: 'nav.riskMap' },
|
||||||
{ to: '/enforcement-plan', icon: Shield, labelKey: 'nav.enforcementPlan' },
|
{ to: '/enforcement-plan', icon: Shield, labelKey: 'nav.enforcementPlan' },
|
||||||
|
|||||||
@ -153,6 +153,50 @@
|
|||||||
"status": "implemented",
|
"status": "implemented",
|
||||||
"file": "frontend/src/features/parent-inference/LabelSession.tsx"
|
"file": "frontend/src/features/parent-inference/LabelSession.tsx"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "ui.map_control",
|
||||||
|
"label": "해역 관리",
|
||||||
|
"shortDescription": "해역 구역 설정/관리 화면",
|
||||||
|
"stage": "UI",
|
||||||
|
"menu": "감시",
|
||||||
|
"kind": "ui",
|
||||||
|
"trigger": "on_demand",
|
||||||
|
"status": "implemented",
|
||||||
|
"file": "frontend/src/features/surveillance/MapControl.tsx"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ui.risk_map",
|
||||||
|
"label": "위험도 지도",
|
||||||
|
"shortDescription": "해역별 위험도 히트맵",
|
||||||
|
"stage": "UI",
|
||||||
|
"menu": "위험평가",
|
||||||
|
"kind": "ui",
|
||||||
|
"trigger": "on_demand",
|
||||||
|
"status": "implemented",
|
||||||
|
"file": "frontend/src/features/risk-assessment/RiskMap.tsx"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ui.patrol_route",
|
||||||
|
"label": "순찰경로 추천",
|
||||||
|
"shortDescription": "AI 기반 순찰 경로 최적화",
|
||||||
|
"stage": "UI",
|
||||||
|
"menu": "순찰",
|
||||||
|
"kind": "ui",
|
||||||
|
"trigger": "on_demand",
|
||||||
|
"status": "implemented",
|
||||||
|
"file": "frontend/src/features/patrol/PatrolRoute.tsx"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ui.fleet_optimization",
|
||||||
|
"label": "다함정 최적화",
|
||||||
|
"shortDescription": "다수 함정 배치 최적화",
|
||||||
|
"stage": "UI",
|
||||||
|
"menu": "순찰",
|
||||||
|
"kind": "ui",
|
||||||
|
"trigger": "on_demand",
|
||||||
|
"status": "implemented",
|
||||||
|
"file": "frontend/src/features/patrol/FleetOptimization.tsx"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "ui.statistics",
|
"id": "ui.statistics",
|
||||||
"label": "통계",
|
"label": "통계",
|
||||||
@ -164,6 +208,28 @@
|
|||||||
"status": "implemented",
|
"status": "implemented",
|
||||||
"file": "frontend/src/features/statistics/Statistics.tsx"
|
"file": "frontend/src/features/statistics/Statistics.tsx"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "ui.report_management",
|
||||||
|
"label": "보고서 관리",
|
||||||
|
"shortDescription": "보고서 생성/조회",
|
||||||
|
"stage": "UI",
|
||||||
|
"menu": "통계",
|
||||||
|
"kind": "ui",
|
||||||
|
"trigger": "on_demand",
|
||||||
|
"status": "implemented",
|
||||||
|
"file": "frontend/src/features/statistics/ReportManagement.tsx"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ui.external_service",
|
||||||
|
"label": "외부 서비스",
|
||||||
|
"shortDescription": "외부 연동 서비스 설정",
|
||||||
|
"stage": "UI",
|
||||||
|
"menu": "통계",
|
||||||
|
"kind": "ui",
|
||||||
|
"trigger": "on_demand",
|
||||||
|
"status": "implemented",
|
||||||
|
"file": "frontend/src/features/statistics/ExternalService.tsx"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "ui.ai_alert",
|
"id": "ui.ai_alert",
|
||||||
"label": "현장 AI 경보",
|
"label": "현장 AI 경보",
|
||||||
@ -185,5 +251,82 @@
|
|||||||
"trigger": "on_demand",
|
"trigger": "on_demand",
|
||||||
"status": "implemented",
|
"status": "implemented",
|
||||||
"file": "frontend/src/features/ai-operations/AIAssistant.tsx"
|
"file": "frontend/src/features/ai-operations/AIAssistant.tsx"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ui.ai_model",
|
||||||
|
"label": "AI 모델관리",
|
||||||
|
"shortDescription": "AI 모델 배포/모니터링",
|
||||||
|
"stage": "UI",
|
||||||
|
"menu": "AI",
|
||||||
|
"kind": "ui",
|
||||||
|
"trigger": "on_demand",
|
||||||
|
"status": "implemented",
|
||||||
|
"file": "frontend/src/features/ai-operations/AIModelManagement.tsx"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ui.mlops",
|
||||||
|
"label": "MLOps",
|
||||||
|
"shortDescription": "ML 파이프라인 운영",
|
||||||
|
"stage": "UI",
|
||||||
|
"menu": "AI",
|
||||||
|
"kind": "ui",
|
||||||
|
"trigger": "on_demand",
|
||||||
|
"status": "implemented",
|
||||||
|
"file": "frontend/src/features/ai-operations/MLOpsPage.tsx"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ui.llm_ops",
|
||||||
|
"label": "LLM 운영",
|
||||||
|
"shortDescription": "LLM 모델 운영 관리",
|
||||||
|
"stage": "UI",
|
||||||
|
"menu": "AI",
|
||||||
|
"kind": "ui",
|
||||||
|
"trigger": "on_demand",
|
||||||
|
"status": "implemented",
|
||||||
|
"file": "frontend/src/features/ai-operations/LLMOpsPage.tsx"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ui.mobile_service",
|
||||||
|
"label": "모바일 서비스",
|
||||||
|
"shortDescription": "현장 모바일 서비스",
|
||||||
|
"stage": "UI",
|
||||||
|
"menu": "현장",
|
||||||
|
"kind": "ui",
|
||||||
|
"trigger": "on_demand",
|
||||||
|
"status": "implemented",
|
||||||
|
"file": "frontend/src/features/field-ops/MobileService.tsx"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ui.ship_agent",
|
||||||
|
"label": "함정 Agent",
|
||||||
|
"shortDescription": "함정 단말 에이전트",
|
||||||
|
"stage": "UI",
|
||||||
|
"menu": "현장",
|
||||||
|
"kind": "ui",
|
||||||
|
"trigger": "on_demand",
|
||||||
|
"status": "implemented",
|
||||||
|
"file": "frontend/src/features/field-ops/ShipAgent.tsx"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ui.admin_panel",
|
||||||
|
"label": "시스템 관리",
|
||||||
|
"shortDescription": "사용자/역할/권한 관리",
|
||||||
|
"stage": "UI",
|
||||||
|
"menu": "관리",
|
||||||
|
"kind": "ui",
|
||||||
|
"trigger": "on_demand",
|
||||||
|
"status": "implemented",
|
||||||
|
"file": "frontend/src/features/admin/AdminPanel.tsx"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ui.permissions",
|
||||||
|
"label": "권한 관리",
|
||||||
|
"shortDescription": "RBAC 트리 권한 매트릭스",
|
||||||
|
"stage": "UI",
|
||||||
|
"menu": "관리",
|
||||||
|
"kind": "ui",
|
||||||
|
"trigger": "on_demand",
|
||||||
|
"status": "implemented",
|
||||||
|
"file": "frontend/src/features/admin/AccessControl.tsx"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
"dashboard": "Dashboard",
|
"dashboard": "Dashboard",
|
||||||
"monitoring": "Alert Monitor",
|
"monitoring": "Alert Monitor",
|
||||||
"riskMap": "Risk Map",
|
"riskMap": "Risk Map",
|
||||||
|
"mapControl": "Map Control",
|
||||||
"enforcementPlan": "Enforcement Plan",
|
"enforcementPlan": "Enforcement Plan",
|
||||||
"darkVessel": "Dark Vessel",
|
"darkVessel": "Dark Vessel",
|
||||||
"gearDetection": "Gear Detection",
|
"gearDetection": "Gear Detection",
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
"dashboard": "종합 상황판",
|
"dashboard": "종합 상황판",
|
||||||
"monitoring": "경보 현황판",
|
"monitoring": "경보 현황판",
|
||||||
"riskMap": "위험도 지도",
|
"riskMap": "위험도 지도",
|
||||||
|
"mapControl": "해역 관리",
|
||||||
"enforcementPlan": "단속 계획",
|
"enforcementPlan": "단속 계획",
|
||||||
"darkVessel": "다크베셀 탐지",
|
"darkVessel": "다크베셀 탐지",
|
||||||
"gearDetection": "어구 탐지",
|
"gearDetection": "어구 탐지",
|
||||||
|
|||||||
불러오는 중...
Reference in New Issue
Block a user