사용자 매뉴얼·번호알기·gov-portal 대시보드와 메뉴 동선·수불 리포트를 보강한다.

- 사용자 매뉴얼: league/commonmark 기반 bag/manual(로그인 전용),
  ManualRenderer + Config\Manual manifest, 콘텐츠 8종, E2E
- 번호알기(봉투번호확인): bag/number-lookup, BagNumberLookup, E2E
- gov-portal 대시보드 시안(기본/strip)·기본코드관리 화면
- 메뉴 관리: 등록·수정 후 메뉴 화면 유지, 수정 버튼 클릭 시 상단 스크롤
- 수불/분석 리포트(LOT 수불·반품/파기·수급계획·추이) 표시 보강
- .gitignore: docs/ → /docs/ 앵커링(최상위 개발문서만 제외, app/Docs는 추적)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
taekyoungc
2026-06-08 00:46:51 +09:00
parent 0f1d414f37
commit 8763876f19
77 changed files with 6139 additions and 182 deletions

View File

@@ -0,0 +1,143 @@
<?php
declare(strict_types=1);
/**
* 공공 포털형 — 기본 코드관리 (NDMS 스타일 본문 + gov-portal 상단·사이드 메뉴)
*/
helper('admin');
$govPortalNavPartial = gov_portal_nav_partial_vars(get_defined_vars());
$activeVariant = $activeVariant ?? 'base';
?>
<!DOCTYPE html>
<html lang="ko">
<head>
<?= view('home/_dashboard_gov_portal_head') ?>
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/static/pretendard.min.css"/>
<style>
:root {
--navy: #1a2b4b;
--navy-deep: #002b4e;
--blue: #0056b3;
--blue-ui: #007bff;
--blue-menu: #4a69bd;
--blue-light: #eef6ff;
--teal: #009688;
--bg: #f0f4f8;
--text: #444;
--border: #dde4ec;
--font-scale: 1;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
html {
font-size: calc(14px * var(--font-scale));
-webkit-text-size-adjust: 100%;
}
body {
font-family: 'Pretendard', 'Malgun Gothic', 'Apple SD Gothic Neo', 'Noto Sans KR', sans-serif;
font-size: 0.8125rem;
font-weight: 400;
line-height: 1.45;
letter-spacing: -0.01em;
color: var(--text);
background: var(--bg);
min-height: 100vh;
display: flex;
flex-direction: column;
}
<?php include __DIR__ . '/_dashboard_gov_portal_brand_css.php'; ?>
<?php include __DIR__ . '/_dashboard_gov_portal_topnav_css.php'; ?>
<?php include __DIR__ . '/_dashboard_gov_portal_workpage_css.php'; ?>
.layout {
display: flex;
flex: 1;
min-height: 0;
}
.sidebar {
width: 168px;
flex-shrink: 0;
background: #fff;
border-right: 1px solid var(--border);
display: flex;
flex-direction: column;
font-size: 0.8125rem;
}
.my-menu-hd {
background: var(--navy);
color: #fff;
padding: 0.5rem 0.625rem;
font-weight: 700;
font-size: 0.6875rem;
letter-spacing: 0.04em;
}
.my-menu-list { list-style: none; padding: 0.375rem 0.25rem; flex: 1; }
.my-menu-list li { margin: 0.1875rem 0.375rem; }
.my-menu-list a,
.my-menu-list .menu-sub {
display: flex;
align-items: center;
gap: 0.375rem;
padding: 0.4375rem 0.625rem;
border-radius: 10px;
border: 1px solid rgba(255, 255, 255, 0.22);
text-decoration: none;
font-size: 0.8125rem;
font-weight: 600;
line-height: 1.35;
letter-spacing: -0.02em;
}
.my-menu-list a {
color: #fff;
background: var(--blue-menu);
}
.my-menu-list a .menu-ico { font-size: 0.625rem; width: 0.75rem; text-align: center; }
.my-menu-list a.active {
background: #3d5a9e;
font-weight: 700;
border-color: rgba(255, 255, 255, 0.4);
}
.sidebar-blocks { padding: 0.5rem; font-size: 0.6875rem; }
.sb-teal {
background: var(--teal);
color: #fff;
padding: 0.5rem;
border-radius: 8px;
margin-bottom: 0.35rem;
line-height: 1.4;
}
.sb-gray {
background: #6b7280;
color: #fff;
padding: 0.5rem;
border-radius: 8px;
margin-bottom: 0.35rem;
line-height: 1.4;
}
.sb-links a { display: block; color: #3366ff; margin-top: 0.25rem; font-size: 0.6875rem; }
</style>
</head>
<body>
<header class="portal-header">
<div class="portal-header-inner">
<?= view('home/_dashboard_gov_portal_brand', ['brandHref' => base_url('dashboard/gov-portal')]) ?>
<?= view('home/_dashboard_gov_portal_topnav_click', $govPortalNavPartial) ?>
<?= view('home/_dashboard_gov_portal_header_utils', [
'activeVariant' => $activeVariant,
'portalVariants' => $portalVariants,
'mbName' => $mbName,
'levelName' => $levelName,
'lgLabel' => $lgLabel,
]) ?>
</div>
</header>
<div class="layout">
<?= view('home/_dashboard_gov_portal_sidebar', $govPortalNavPartial) ?>
<main class="main work-main">
<?= view('home/_gov_portal_code_kinds_body', get_defined_vars()) ?>
</main>
</div>
<?= view('home/_dashboard_gov_portal_nav_script_base', $govPortalNavPartial) ?>
<?= view('home/_dashboard_gov_portal_font_zoom_script') ?>
</body>
</html>