king
a22bb1e043
feat(project): 업무추가·알림벨을 상단바로 이동, 보드 단계추가 제거
...
- erp_base 토픈바에 {% block topbar_actions %} 추가
- 프로젝트 페이지: 알림벨 + '업무 추가' 를 탭 줄 → 상단 메뉴 오른쪽(사용자
칩 옆)으로 이동. 탭 줄은 뷰 탭만 남김
- 보드 뷰의 '+ 단계 추가' 트레일링 컬럼 제거(단계 추가 기능 삭제)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-25 13:13:12 +09:00
king
ef7f76821d
feat(admin): 슈퍼관리자가 admin 의 개별 프로그램 접근 제어
...
기존엔 admin 역할이면 모든 모듈을 무조건 전체 ON+잠금이라 슈퍼관리자도
admin 의 특정 프로그램 접근을 끌 수 없었다.
- _normalize_modules: admin 강제 전체 ON 덮어쓰기 제거 → 저장된 칩 상태 존중
- has_module: admin 단축 통과 제거, 슈퍼관리자만 항상 전체. admin 은 칩 따름
- admin.html: admin 칩 잠금 해제(슈퍼관리자만 잠금), 역할→admin 전환 시
편의상 전체 ON(잠금 아님)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-25 12:15:51 +09:00
king
4008eee088
feat(admin): 권한 열을 칩 토글로 — 모듈 늘어도 가로 안 넓어짐
...
모듈마다 토글 열을 두던 방식은 모듈이 늘수록 표가 가로로 무한 확장됐다.
모듈 열 전체를 단일 '접근 권한' 셀의 칩(pill) 토글로 교체. 칩이 줄바꿈되어
모듈이 늘어도 세로로만 늘고 한 화면에서 관리 가능. 칩 클릭=토글, admin/슈퍼는
잠금(전체 ON). 승인 권한 칩은 켜지면 파랑으로 구분.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-25 12:12:14 +09:00
king
b970542482
fix(shell): 모바일에서 grid 해제로 본문 풀폭 강제
...
특이도 조정만으론 부족. 모바일(≤900px)에서 .erp-app grid를 아예
display:block 으로 해제해 데스크탑 collapsed :has 규칙과의 칸 분배
충돌을 원천 제거. 사이드바는 fixed 오버레이(z-index 1000), 본문은
width:100%. body 높이/overflow도 모바일에선 auto로 풀어 콘텐츠 잘림
방지. CSS 캐시버스트 v20260615b.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-15 14:40:31 +09:00
king
438f309178
fix(shell): 모바일에서 사이드바 칸이 본문을 가리는 문제
...
데스크탑 접힘 규칙 .erp-app:has([data-collapsed=true])(특이도 높음)가
모바일 미디어 .erp-app{...0 1fr}(특이도 낮음)를 이겨, 폰에서도
사이드바가 64px grid 칸을 차지해 본문이 좁게 짜부러짐. 미디어쿼리는
특이도를 올리지 않음. 모바일 미디어에 :has 셀렉터를 함께 명시해
특이도를 맞추고 사이드바 칸을 0으로 강제. CSS 캐시버스트 갱신.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-15 14:24:58 +09:00
king
8f3761aeae
ui(shell): 브랜드 'DBX ERP System' 통일 + 사이드바 접힘 시 아이콘 아래 메뉴명 표시
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-05-30 18:21:05 +09:00
king
9f361c4e6a
ui(shell): 뷰포트(1883x938) 고정 — 문서 세로 스크롤 제거
...
- erp 셸 height:100vh + body overflow:hidden, .erp-page 가 남은 높이 채우고 내부 스크롤
- 휴가 달력: 6주 행이 가용 높이 균등 분할(유동), 날짜 셀 height:100%, 선택일 패널 내부 스크롤
- 쿠팡 출고 폼: 라인 패널 고정 900px 높이 → 가용 높이 채움
- CORM/Order 는 별도 창이라 해당 없음
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-05-30 18:12:41 +09:00
king
32fc12e283
ui: 검정 배경 요소 글자 흰색 강제 (a:visited 가 덮어쓰던 문제 차단, 전역)
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-05-30 08:39:46 +09:00
king
8c6539d6cb
ui(sidebar): 아이콘/글자 크기 확대 + 운영·관리 그룹 묶음 정렬
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-05-30 08:29:28 +09:00
king
652e53c3e8
feat(cupang): 선택일 출고 항목 hover 툴팁(제품명+수량, 커서 따라감)
...
- index sel_shipments 에 품목 요약(name/qty) 첨부
- 리스트 항목 hover 시 커서 왼쪽에 따라다니는 툴팁 표시
- 캐시 버전 m
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-05-30 06:55:52 +09:00
king
5c7730d4a1
ui(cupang): 달력 상단 설정 버튼을 달력 컬럼 오른쪽 끝에 정렬 (Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>)
2026-05-30 06:41:11 +09:00
king
57f0c3426f
refactor(cupang): UI에서 제거된 기능의 죽은 코드 정리
...
- 엑셀 내보내기 전체 제거: /export, /{id}/export, _build_xlsx,
_flatten_for_sheet, shipments_for_export, SHEET_COLUMNS
- 미사용 라우트 제거: /api/calendar, /api/products/search, /api/box-calc,
/{id}/status(상태변경 UI 삭제됨)
- 미사용 db 메서드 제거: deactivate_box_rule, get_box_rule, box_rule_map
- form.html window.CPG + cpg-search-pop, cupang.js CFG, 검색 드롭다운 CSS 제거
- 템플릿 미사용 statuses 컨텍스트 제거, router import 정리
- 캐시 버전 k
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-05-30 06:37:51 +09:00
king
bcbf3de24c
ui(cupang): 달력 상단 엑셀 버튼 삭제 + 설정 버튼 이름/우측정렬
...
- 엑셀(N월) 버튼 제거
- 제품명 설정 / 입고센터 관리 / 박스 입수량 설정 로 명칭 통일, 우측 정렬
- 캐시 버전 j
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-05-30 06:29:22 +09:00
king
2f16457ac6
ui(cupang): 품목 라인 체크박스 칸 가운데 정렬 (Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>)
2026-05-30 06:25:07 +09:00
king
fdabeec4e3
ui(cupang): 품목 라인 번호열을 체크박스로 + 선택 라인 삭제 + 전체선택
...
- # 열 → 체크박스(헤더 전체선택, indeterminate 지원)
- "라인 삭제" → "선택 라인 삭제": 체크된 행 삭제(최소 1줄 유지)
- 캐시 버전 h
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-05-30 06:23:16 +09:00
king
f25948185b
ui(cupang): 박스이름 180px로 맞춰 박스당 입수량을 제품코드와 세로 정렬 (Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>)
2026-05-30 06:14:54 +09:00
king
90e286dc4d
ui(cupang): 박스룰 폼 3행 배치 + 목록 컬럼 정리/하드삭제
...
- 폼: 1행 제품명180/제품코드100, 2행 박스이름/박스당입수량, 3행 메모(전체폭)
- 목록 순서 제품명·제품코드·박스명·입수량·메모, 상태열/비활성 제거
- 삭제 버튼=완전삭제(delete_box_rule, 참조 라인 box_rule_id NULL 처리)
- 캐시 버전 f
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-05-30 06:11:57 +09:00
king
2e3ea610b7
ui(cupang): 박스 입수량 2열 배치 + 고정폭 + 입수량 "개" 단위
...
- 추가/수정 480px(좌), 입수량 규칙 900px(우)
- 제품명/제품코드/박스이름 입력 140px, 박스당 입수량 60px + "개" 접미
- 캐시 버전 e
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-05-30 06:03:02 +09:00
king
c11c5733de
ui(cupang): 박스 입수량 폼 제품명 드롭다운 + 라벨 정리
...
- 제품명*(등록 제품 드롭다운, 코드 오름차순) 선택 시 제품코드/스냅샷 자동
- 라벨: 제품명* / 제품코드 / 박스이름 / 박스당 입수량*
- 캐시 버전 d
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-05-30 05:52:57 +09:00
king
478cde8caf
fix(cupang): 헤더 입력 185px — erp.css min-width:240 오버라이드
...
진짜 원인: erp.css .erp-input{min-width:240px} 가 width:185 를 눌러 240 고정.
헤더 입력 규칙에 min-width:185px 추가로 해결. 캐시 버전 c 로 bump.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-05-30 05:43:37 +09:00
king
574c053077
fix(ui): 정적 CSS/JS 캐시 무효화 쿼리(?v=) 추가
...
브라우저가 옛 cupang.css/erp-shell.css 를 캐시해 최근 레이아웃 변경
(헤더 185px, 콘텐츠 1550px 등)이 반영되지 않던 문제. 링크에 버전 쿼리 추가.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-05-30 05:40:44 +09:00
king
151de492ad
feat(expense): 첨부 뷰어 모달 — 이미지 미리보기 + 펜 주석
...
승인 대기 페이지의 "첨부" 텍스트 링크를 클립 아이콘 버튼으로 교체.
클릭 시 모달 팝업으로 이미지 미리보기 + 마우스 펜 주석 + 다운로드.
뷰어 컴포넌트 (전역, 다른 페이지에서도 재사용 가능):
- 좌측: 첨부 목록 (썸네일/메타)
- 우측: 캔버스 스택 (img + 투명 canvas)
- 도구: 펜/지우개, 색상 4종, 굵기 3종, 전체 지우기, 합성 PNG 저장, 원본 열기
- 이미지 외 파일은 다운로드 링크만 표시
- ESC/배경 클릭으로 닫기, pointer events 지원
전역 노출: window.ErpAttachViewer.{open, openFor, close}
2026-05-29 03:40:03 +09:00
king
550867ba0c
feat(expense+admin): 결재 워크플로 + 첨부 + 집계 + 엑셀 + 사용자 직접 등록
...
[admin]
- POST /api/users 사용자 직접 등록 (이메일만으로). UserStore.create_user 추가
- admin.html: 등록 폼 + 삭제 버튼 + 한글 라벨 + 신규 권한 표시
- 신규 권한 키: expense_approver, vacation_approver (APPROVER_KEYS)
- is_approver(user_rec, kind) 헬퍼
[expense 워크플로]
- 상태 전이: 작성중 → 제출 → 승인/반려 → 정산완료
- API: /api/items/{id}/{submit,revert,approve,reject,settle}
- 권한: submit/revert=owner, approve/reject/settle=expense_approver 또는 admin
- expense_items 컬럼: approver_email, decided_at, reject_reason
- 작성중/반려 상태에서만 수정/삭제/첨부 가능
[expense 첨부]
- 영수증/기타 (kind: receipt|other). 최대 20MB, 확장자 화이트리스트
- 저장: DATA_DIR/uploads/expense/{item_id}/{att_id}_{filename}
- expense_attachments 테이블 (CASCADE on item delete)
- API: 업로드/목록/다운로드/삭제
[expense 집계]
- /expense/reports: 연도별 월×카테고리 피벗 표
[expense 엑셀]
- GET /expense/api/export.xlsx?from&to&scope=mine|all
- scope=all 은 승인자/관리자만
[DDL]
- expense_db_init.sql: 신규 컬럼/테이블 포함 (멱등)
- expense_db_002_workflow_attachments.sql: 운영 DB 마이그레이션용
[deps]
- openpyxl>=3.1, python-multipart>=0.0.20
[docs]
- DATABASES.md: 워크플로 다이어그램, attachments 테이블, 마이그레이션
- PROJECT_OVERVIEW.md: 권한 키 표
- DEPLOYMENT.md: DATA_DIR/uploads 안내
2026-05-29 02:52:44 +09:00
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
king
316e3fe8d1
feat(erp): ERP 대시보드 + 관리자 권한 시스템 도입
...
- 로그인: dbxcorp.co.kr 도메인 화이트리스트만 사용. ALLOWED_EMAILS 게이트 제거
- king@dbxcorp.co.kr 슈퍼관리자 자동 부여 (강등/삭제 불가)
- 신규 로그인 사용자는 JSON 저장소에 자동 등록 (기본 모듈 권한 0)
- 관리자 페이지(/admin): 역할/모듈별 토글로 직원 권한 수정
- 메인 대시보드를 ERP 시스템(monochromatic shadcn)으로 재설계
· 모듈: CORM, Order, 개인경비(준비중), 휴가(준비중)
· 권한 없는 모듈은 '권한 없음' 배지 + 클릭 불가
- DESIGN.md 토큰 기반 styles → app/static/erp.css
- docker-compose: dbx-main-data 볼륨 마운트 (DATA_DIR=/data)
으로 권한 JSON 영구 보관
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-28 23:36:51 +09:00
king
e8a85be36c
feat: 주문리스트를 /orderlist/ 리버스 프록시 경로로 통합
...
- 메뉴 카드 새 탭 열기 + /orderlist/health/db 헬스 배지 (온라인/오프라인) 추가
- CUSTOMER_ORDER_LIST_URL 기본값을 /orderlist/ 로 (NPM 같은 도메인 하위 경로)
- orderlist 측 compose 정리 스크립트 추가 (ports 제거, npm_default 외부 네트워크 attach)
2026-05-24 05:04:29 +09:00
king
0c007e6432
fix: 로고 크기 페이지별 분리 (denied 284px, 나머지 100px)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-24 01:26:37 +09:00
king
b070fabb96
fix: 메인 헤더 로고 284x284 원본 크기로 표시
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-24 01:23:20 +09:00
king
bad5d04d8b
fix: 메인 헤더 텍스트로 변경/높이 축소, 로그인 로고 44px 복원
...
- main.html 헤더: 로고 제거 → "DBX 업무포털" 흰색 텍스트, 높이 64px→44px
- login/denied 브랜드 패널 로고: 44px 복원
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-24 01:18:38 +09:00
king
6c82415e02
fix: 메인 헤더 로고 크게(48px), 로그인/접근거부 로고 작게(30px)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-24 01:13:43 +09:00
king
cd545d723e
fix: 메인 헤더 원복 및 로그인 로고 크기 조정 (28px → 36px)
...
- main.html 헤더: SVG 아이콘+텍스트 방식으로 원복
- 로그인/접근거부 브랜드 패널 로고: 36px로 조정
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-24 01:09:07 +09:00
king
f93eac9ce5
design: DBX 로고 이미지 적용 (로그인·접근거부·메인 헤더)
...
- dbx-logo.png를 app/static에 추가
- login.html / denied.html 브랜드 패널 SVG 아이콘 → 로고 이미지로 교체
- main.html 헤더 SVG 아이콘 → 로고 이미지로 교체
- styles.css에 .brand-logo-img / .header-logo-img 스타일 추가
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-23 23:36:11 +09:00
king
c4ae1ab3e6
UI: King 텍스트 움직임 범위 확장, 별 도형 제거, 도형 밝기 조정
...
- kingFloat 애니메이션 translate 범위를 ±16px → ±70px 로 확장
- login.html / denied.html 에서 shape-7(별) div 제거
- shape-1~6 도형 밝기 은은하게 감소 (이전 수준으로 복구)
- .shape-king text-transform: none → "King" 으로 표시
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-22 02:04:54 +09:00
king
672a99ef80
design: shape-8 삭제, 별 위치 우측 이동, King 반짝 텍스트 추가
2026-05-22 01:19:19 +09:00
king
d2b145576b
design: 브랜드 패널 도형 강화 — 세모·별 추가, 두께·밝기 증가, 모션 가속
2026-05-22 01:15:23 +09:00
king
e1af7285a1
design: DBX Corporation 명칭 수정, 폰트 확대, 브랜드 패널 애니메이션 도형 추가
...
- 모든 페이지 'DBX Corp' → 'DBX Corporation' 통일
- 브랜드 패널 좌측에 천천히 움직이는 도형 5개 추가 (CSS 애니메이션)
- 전체 기본 폰트 15px → 16px, 제목/카드 크기 확대
- 'Google Workspace 계정...' 문장 한 줄 표시 처리
2026-05-22 01:05:47 +09:00
king
60a1426a23
design: 기업용 UI 리디자인 및 로컬 실행 스크립트 추가
...
- 로그인/접근거부 페이지: 좌우 분할 레이아웃(다크 네이비 브랜드 패널 + 흰색 폼),
실제 Google G 컬러 버튼, 자물쇠·안내 아이콘 적용
- 메인 페이지: 다크 네이비 헤더, 웰컴 히어로 배너(오늘 날짜 JS 자동 표시),
SVG 아이콘이 있는 업무 카드 그리드, 호버 시 상단 블루 액센트 라인
- styles.css: 코퍼레이트 네이비/블루 색상 토큰 체계로 전면 재작성,
Pretendard 폰트 유지, 모바일 반응형 포함
- run-local.bat / run-local.ps1: 더블클릭 또는 인수(stop/logs/ps/restart)로
로컬 Docker 컨테이너를 간편하게 관리하는 스크립트 추가
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-05-21 23:38:32 +09:00
king
c93e2be0a7
feat: 초기 커밋 — Pretendard 폰트 적용 및 Docker 배포 구성
...
- Pretendard Regular/Bold/Thin 폰트를 app/static/fonts/ 에 추가하고
@font-face 로 등록하여 전체 페이지에 적용
- Dockerfile(python:3.12-slim + uvicorn --proxy-headers) 작성
- docker-compose.yml: NPM 뒤 운영 서버용 (포트 80)
- docker-compose.local.yml: 로컬 테스트용 (포트 8080)
- .env.local.example: 로컬 OAuth 설정 가이드 포함
- .dockerignore: 이미지 빌드 컨텍스트 최소화
- .gitignore: .env / .env.local 제외 명시
- README: Docker 빌드·배포·업데이트 절차 문서화
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-05-21 22:43:41 +09:00