Files
dbx-main/app/templates/erp_home.html
T
king 9c58b022e2 feat(expense): 개인경비 모듈 + ERP 좌측메뉴 셸 + expense_db 연결
- ERP 셸: 좌측 사이드바 + 상단 헤더 + 콘텐츠 영역(erp_base.html)
- 분기: 슈퍼관리자 → 업무모듈 카드, 일반사용자 → ERP 메인(erp_home.html)
- 신규 라우트: /modules (슈퍼관리자 모듈 카드 재진입)
- 개인경비 모듈: app/modules/expense/ (라우터/저장소/템플릿)
  - JSON 저장소(ExpenseStore) + PostgreSQL 저장소(ExpenseDBStore)
  - 팩토리: EXPENSE_DB_URL 있으면 DB, 없으면 JSON 폴백
- DB: scripts/sql/expense_db_init.sql (멱등 DDL, postgres-db 컨테이너)
  - expense_db, 역할 expense_app, 테이블 expense_items, 인덱스/트리거
- 마이그레이션: scripts/migrate_expense_json_to_db.py (멱등, --dry-run)
- 의존성: psycopg[binary,pool]>=3.2
- 환경변수: EXPENSE_DB_URL 추가
- 문서: CLAUDE.md 작업 기준 + docs/{PROJECT_OVERVIEW,SERVER_ARCHITECTURE,DATABASES,DEPLOYMENT}.md
  - main-app 배포 경로 /opt/www/main 고정 명시
  - 위험 명령(DROP/TRUNCATE/rm -rf/volume 삭제) 사용자 승인 정책
2026-05-29 02:21:03 +09:00

65 lines
2.4 KiB
HTML

{% extends "erp_base.html" %}
{% block content %}
<section class="erp-home">
<div class="erp-hero">
<h2 class="erp-hero-title">안녕하세요, {{ user.name }}님</h2>
<p class="erp-hero-sub" id="erp-hero-sub"></p>
</div>
<div class="erp-home-grid">
<article class="erp-tile">
<div class="erp-tile-head">
<span class="erp-tile-label">바로가기</span>
<span class="erp-badge erp-badge-neutral">개인업무</span>
</div>
<h3 class="erp-tile-title">개인경비</h3>
<p class="erp-tile-desc">법인카드/개인지출 등록과 정산 신청.</p>
<a class="erp-btn erp-btn-primary" href="/expense/">개인경비 열기</a>
</article>
<article class="erp-tile">
<div class="erp-tile-head">
<span class="erp-tile-label">바로가기</span>
<span class="erp-badge erp-badge-outline">준비중</span>
</div>
<h3 class="erp-tile-title">휴가</h3>
<p class="erp-tile-desc">연차/반차 신청과 잔여일수 확인.</p>
<button class="erp-btn erp-btn-outline" disabled>오픈 예정</button>
</article>
<article class="erp-tile">
<div class="erp-tile-head">
<span class="erp-tile-label">알림</span>
<span class="erp-badge erp-badge-outline">공지</span>
</div>
<h3 class="erp-tile-title">시스템 안내</h3>
<ul class="erp-tile-list">
<li>좌측 메뉴에서 사용 가능한 업무 모듈을 확인하세요.</li>
<li>외부 모듈(주문/CORM)은 새 창에서 열립니다.</li>
<li>권한이 필요한 모듈은 관리자에게 요청하세요.</li>
</ul>
</article>
</div>
</section>
<script>
(function() {
const d = new Date();
const h = d.getHours();
let greet = "오늘도 좋은 하루 되세요.";
if (h < 5) greet = "늦은 시간까지 수고 많으세요.";
else if (h < 12) greet = "활기찬 아침입니다.";
else if (h < 18) greet = "오후 업무 화이팅입니다.";
else greet = "오늘도 고생 많으셨습니다.";
const days = ["일","월","화","수","목","금","토"];
const dateStr = `${d.getFullYear()}.${String(d.getMonth()+1).padStart(2,"0")}.${String(d.getDate()).padStart(2,"0")} (${days[d.getDay()]})`;
const el = document.getElementById("erp-hero-sub");
if (el) el.textContent = `${dateStr} · ${greet}`;
})();
</script>
{% endblock %}