증상: 품목 추가 모달에서 행 클릭과 체크박스 클릭 둘 다 toggle 호출 →
두 번 발생해서 체크 상태가 변하지 않음.
수정:
- 체크박스 td 에 stopPropagation 추가 (행 onClick 으로 버블되지 않게)
- 행 클릭은 그대로 행 전체 토글로 동작
- 체크박스 명시 cursor:pointer + 크기 18px + 색상 accent-emerald-600
- select-none 추가 (드래그 시 글자 선택 방지)
- 헤더 전체선택 체크박스도 동일 처리
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
[새 API: /api/m/orders/items/update]
- 본인 또는 관리자가 자기 발주의 품목(ITEM) 라인 수량 변경 또는 삭제
- REQUESTED 상태에서만 허용. 단가는 변경 불가 (momo_items.unit_price 기준 자동 재계산)
- 재고 / max_order_qty 한도 자동 검증 (unlimited_qty 권한이면 한도 우회)
- 트랜잭션으로 라인 수정 + momo_orders 합계 7종 자동 재집계
[/m/orders 거래명세표 모달 UI]
- 출고요청 상태 거래처 본인 화면에서 품목 라인 직접 편집:
· 수량 인풋 (블러 시 자동 저장)
· 행 끝의 [×] 버튼으로 그 품목만 삭제
- 택배/용차 라인은 인풋 안 보이고 "자동" 표시 — 모모 담당자가 조정
- 저장/삭제 후 onReload 로 모달 + 리스트 동시 갱신
- 안내 배너: "수량 수정 / 품목 삭제 / 주문 취소" 모두 가능 명시
[매뉴얼]
- 가-2 내 발주 이력 섹션에 수량 수정 / 품목 삭제 / 주문 취소 사용법 추가
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
[새 통계 — 거래처×일자 매출 피벗]
- API: POST /api/m/statistics/monthly-pivot
· 입력: { year, month }
· 응답: dates[] / rows[ {거래처, BY_DAY:{날짜:{면세,과세}}, TOTAL_TAXFREE/TAXABLE} ] / totalsByDay / grandTotal
· 출고완료/입금완료/계산서발행 상태 발주만 집계
- 화면: /m/admin/statistics/pivot
· 가로 스크롤 피벗 표 (왼쪽 sticky 업체명)
· TOT 행: 월간 일자별 총합 (부가세 신고용)
· 거래처별 정렬: 매출 큰 순
· 합계 카드 3종: 면세/과세/총
· 엑셀 다운로드 (거래처 행 × 일자 컬럼 평면화)
- 메뉴 등록: 018 마이그레이션 (objid 9000504, 통계 그룹)
[세금계산서 중복 발행 차단]
- /api/m/einvoices/issue: orderObjid 가 이미 발행됨(FAIL/CANCELED 제외) 이면 400
· "이미 발행된 발주입니다 (상태/승인번호)" 메시지 + alreadyIssued=true 플래그
- /m/admin/einvoices: 발행 가능 발주 리스트에서 이미 발행된 건 자동 제외
· orders/list 와 einvoices/list 동시 조회 후 클라이언트 측 필터
· DRAFT/QUEUED/SENT/ACK 모두 발행 완료로 간주 — 재발행 불가
· FAIL/CANCELED 만 다시 발행 가능
[매뉴얼]
- 통계 표에 "거래처×일자 매출 (피벗)" 항목 추가, 부가세 신고 자료 활용 안내
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
증상: 마스터 품목 관리 화면에 품목이 하나도 안 보임.
원인: 마이그레이션 016 (vendor_objid) 이 운영 DB 에 적용 안 된 상태에서
SELECT I.vendor_objid 가 'column does not exist' 로 실패 → 빈 배열 응답.
해결: API 첫 호출 시 ALTER TABLE ... ADD COLUMN IF NOT EXISTS 로
vendor_objid + max_order_qty + is_hidden + requires_delivery 모두 자동 보장.
idempotent 하므로 이미 적용된 환경에서도 NOOP.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
[발주서 엑셀 다운로드]
- /api/m/procurements/excel/[id] 신설
- 이미지의 표준 발주서 양식대로 .xlsx 생성
· 분류번호/발주서번호/발주일/공급업체/연락처/이메일
· 1.물품의 표시 (품목코드·품명·단위·수량·단가·금액)
· 총액 + V.A.T 별도
· 2.비고 + 발주자 정보
[발주서 이미지 공유]
- 매입 발주서 양식 우상단에 [📤 이미지 공유] [⬇ 엑셀 다운로드] 버튼
- html-to-image 로 PNG 캡처 → Web Share API (카톡 등) 또는 PNG 다운로드
- 거래명세표(출고/정산)와 동일한 사용자 경험
[버그 수정 — 품목 모달에 결과 안 나옴]
- /api/m/items/list 의 supply_mng JOIN 캐스팅 누락
· momo_items.vendor_objid (TEXT) vs supply_mng.objid (NUMERIC) 타입 충돌로 SQL 에러 → 빈 배열 응답
- LEFT JOIN supply_mng V ON I.vendor_objid = V.objid::text 로 명시적 캐스팅
[매뉴얼]
- 매입 발주 섹션에 "발주서 공유 / 엑셀 다운로드" 안내 추가
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
[화면 — /m/admin/procurements 전면 개편]
- 좌측: 발주서 리스트 (상태 필터, 발주번호, 공급업체, 금액)
- 우측: 발주서 양식 (이미지의 표준 발주서 형태)
· 분류번호/발주서번호/발주일/공급업체 표
· "1. 물품의 표시" 표 (품명·단위·수량·단가·금액)
· "2. 비고" 텍스트 영역
· 합계 자동 계산
- [+ 새 발주] / [발주 요청] 상단 버튼
- 작성중(OPEN) 상태에서만 인라인 편집 가능, 발주요청 후 잠김
[품목 추가 모달]
- 검색 + [공급업체 필터(현재/전체)] + [결과 내 검색]
- 다중 선택 + 헤더 체크박스로 전체 선택
- 이미 담긴 품목은 '이미' 표시
- 한 번에 N개 일괄 추가 (수량 1, 원가는 품목 마스터의 cost_price)
[API 4종 신설]
- POST /api/m/procurements/create-empty: 빈 발주서 1건 생성 (proc_no 자동 부여, status=OPEN)
- POST /api/m/procurements/lines/save: 라인 추가/수정/삭제 + 합계 재집계 (트랜잭션)
· 같은 품목 중복 추가 시 수량 누적
- POST /api/m/procurements/update-header: 공급업체/메모 수정
- POST /api/m/procurements/send: 발주 요청 — status OPEN→REQUESTED + 공급업체 이메일로 발주서 HTML 메일 발송
· 메일 실패해도 상태는 변경 (mailSent/mailError 응답)
[매뉴얼]
- 다-1 매입 발주 단계별 가이드 재작성
- "공급업체별 품목 일괄 불러오기" 팁 추가
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
[공급자 정보 박스 (우측 상단)]
- 결제계좌번호 / 전화번호 / 이메일 표를 거래명세표 우측 상단에 표시
- 환경변수: MOMO_BANK_ACCOUNT / MOMO_PHONE / MOMO_EMAIL / MOMO_COMPANY_CEO 등
- detail API 응답에 supplier 객체 추가
[비고(remark) 컬럼]
- 모든 라인(품목/택배/용차)에 비고 입력 가능
- /api/m/orders/items/remark 신설 — REQUESTED 상태에서만 본인/관리자 수정
- 인풋에서 포커스 이탈/엔터 시 자동 저장
- 모든 라인에 momo_order_items.remark 컬럼 활용 (이미 존재)
[이미지 공유 + 인쇄]
- 거래명세표 위쪽에 [📤 이미지 공유] [🖨 인쇄] 버튼 신설
- html-to-image 라이브러리로 PNG 캡처 → Web Share API 가 있으면 카톡/메신저로 직접 공유,
없으면 PNG 파일 다운로드 (모바일/PC 호환)
- statementRef 로 캡처 영역 분리 (버튼은 영역 밖)
[엑셀 다운로드 수정]
- 기존: SELECT 쿼리에 alias 빠져 있어(`U.user_name, NULL, NULL`) 회사명/대표자/사업자번호가 모두 빈 값
- 수정: company_name/ceo_name/biz_no/phone/address/email 명시 alias
- 택배/용차 라인은 [택배]/[용차] 라벨로 출력
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
[매뉴얼]
- 영어/기술용어/환경변수 코드 노출 제거
- 초등학생 수준 친절한 설명체로 전면 재작성
- 역할별 시나리오 박스 + 화면 도식 + FAQ 한글 위주
- URL/코드 참조 최소화
[ExtraRow 버그]
- 거래명세표에서 [+ 택배/용차 추가] 클릭해도 인풋 칸의 수량이 화면에 안 바뀌던 문제
- 같은 OBJID 라서 컴포넌트가 unmount 안 되어 useState 초기값 무시되던 케이스
- useEffect 로 line prop 변경 시 인풋 state 동기화
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
URL: https://momotogether.com/manual.html
- 거래처(USER) 가이드: 회원가입 / 출고 요청 / 발주 이력 / 회원정보 수정
- 관리자(ADMIN) 가이드: 발주서 관리·출고처리·거래명세표·인라인 편집·세금계산서 발행
- 마스터 관리: 품목·거래처·매입처·창고·제조사
- 매입/입고: 매입 발주·입고·재고
- 통계: 대시보드·월간/일자별/원가마진 + 엑셀 다운로드
- 전체 업무 흐름도
- FAQ: 택배 라인 / 권한 / 메일 / STUB / 모바일
단일 HTML 파일 — 인쇄 가능, 모바일 대응, 외부 폰트 X
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
증상: + 택배 추가 / + 용차 추가 버튼을 누를 때마다 같은 종류 라인이 새로 생성됨.
변경: 같은 kind 의 라인이 이미 있으면 그 라인의 qty 를 +1, 없으면 신규 추가.
- /m/admin/orders (관리자 거래명세표): 기존 라인 찾아 lines/save 로 qty+1 업데이트
- /m/orders/new (거래처 발주 작성): extras 배열에서 같은 kind 라인의 qty +1
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
[거래명세표 행 순서]
- 택배(DELIVERY)/용차(CHARTER) 라인이 품목(ITEM) 위로 표시되도록 정렬
- /api/m/orders/detail, /api/m/orders/statement/[id]: ORDER BY CASE kind 추가
- /m/admin/orders 화면 + xlsx 출력: 표시 순서 기준으로 SEQ 재부여 (DB seq 와 무관)
[메뉴 014]
- 마스터 관리 (9000200) → 마지막 (seq 900)
- 대시보드 (9000001) → 통계 그룹(9000500) 자식으로 이동, parent 변경
- 빈 [DASHBOARD] 대메뉴(1837127121) 비활성화
- 최종 순서: 거래처 주문 → 매입/입고 → 출고/정산 → 통계(대시보드 포함) → 마스터 관리
[로그인 랜딩]
- 기존: 모든 사용자 /m/dashboard
- 변경: 역할별 분기
· ADMIN/관리자 → /m/admin/orders (발주서 관리·출고처리)
· USER/거래처 → /m/orders/new (출고 요청)
- 회원가입 직후도 /m/orders/new 로
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
[정책]
- 발주/출고/입금 흐름과 분리된 별도 메뉴 (월말 일괄 또는 신고 시점 발행 가능)
- 출고 시 자동 발행은 향후 토글 옵션으로 추가
[DB 012]
- momo_einvoices: 발행 이력 (공급자/받는자/금액/승인번호/상태/원본XML)
- momo_einvoice_items: 라인별 상세
- 상태: DRAFT → QUEUED → SENT → ACK | FAIL | CANCELED
[발행 어댑터 추상화 (lib/einvoice)]
- InvoiceProvider 인터페이스 — issue/status/cancel
- adapters/manual.ts: 자체 거래명세서 (국세청 전송 X, 기본)
- adapters/nts-esero.ts: 국세청 e-세로 직접 연동 골격
· NTS_ESERO_MODE: stub | test | prod
· stub 모드는 DB 기록만 (개발/CI 안전)
· 실 통신은 사업자 공동인증서 + ERP 연계 승인 후 활성화
· SOAP/XMLDSig 페이로드 빌더 골격 작성, 인증서 받으면 서명+전송 추가
- index.ts: EINVOICE_PROVIDER 환경변수로 어댑터 선택
[API]
- POST /api/m/einvoices/list: 발행 이력 조회 + 필터 (관리자)
- POST /api/m/einvoices/issue: 발주(orderObjid)로부터 또는 수동 입력으로 발행
· 어댑터 결과를 momo_einvoices/_items 에 트랜잭션 기록 (성공/실패 모두)
[UI]
- /m/admin/einvoices 페이지 신설
· 발행 가능 발주 리스트 (출고/입금 완료된 건)
· 한 번 클릭으로 세금계산서 발행 → 결과 모달
· 발행 이력 (날짜/상태/승인번호 필터, 엑셀 다운로드)
· STUB 모드 안내 배너 — 운영 활성화 절차 명시
[문서]
- docs/MOMO_DISTRIBUTION_SPEC.md 부록 B (v0.6) 추가
다음 단계 (인증서 + ERP 연계 승인 후):
- nts-esero.ts 의 SOAP + XMLDSig 실제 구현
- NTS_ESERO_MODE=test 로 100건 검증
- NTS_ESERO_MODE=prod 전환
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
증상: 거래명세표에서 [+ 택배/용차 추가] 클릭 시
null value in column "item_objid" of relation "momo_order_items" violates not-null constraint
원인: 001_momo_init.sql 에서 item_objid 가 TEXT NOT NULL 로 정의됨.
택배/용차 라인(kind=DELIVERY/CHARTER)은 품목이 아니라 가상 부가 라인이라 NULL 이 정상.
해결: ALTER ... DROP NOT NULL. ITEM 라인은 어차피 코드 레벨에서 항상 값을 넣고 있어 무영향.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
증상: /m/admin/orders 거래명세표에서 [+ 택배/용차 추가] 클릭 시 "라인 저장 중 오류" 500.
원인: 마이그레이션 010 (momo_order_items.kind/extra_label, momo_orders.total_delivery/charter)이
운영 DB에 적용되지 않음. deploy.yml 의 docker compose exec 가 silent fail 했을 가능성.
[deploy.yml]
- 컨테이너 안 마이그레이션 실패 시 → 호스트에서 docker run node:20 + pg 임시 컨테이너 폴백
- 호스트는 source 디렉토리를 /work 로 마운트해서 db/migrations 와 scripts/migrate-momo.mjs 직접 실행
- 모두 실패하면 ::error:: 로 명확히 표시 (warning 무시 방지)
[lines/save]
- catch 블록에서 실제 PG 에러 메시지 노출
- 'column does not exist'(42703) 감지 시 마이그레이션 미적용 힌트 추가
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
[요구사항 반영]
- 택배비/용차비는 매번 달라지므로 수기 입력 (담당자명+단가+수량)
- 용차 추가 버튼 → 한 라인 생성, 기본 단가 5000원
- 단가×수량 = 합계 자동 계산 (예: 5000 × 6 = 30,000)
- 거래명세표(관리자 발주 상세)에서 바로 수정 가능
[API]
- /api/m/orders/save extras 입력 형태 변경: amount → unitPrice + qty (amount 호환 유지)
- /api/m/orders/lines/save 신설: REQUESTED 상태 발주에 택배/용차 라인 추가/수정/삭제
· 본인 또는 관리자만 가능, ITEM 라인은 보호됨
· 라인 변경 후 momo_orders 합계 컬럼 (total_supply/vat/amount/taxfree/taxable/delivery/charter) 자동 재집계
[UI]
- /m/orders/new (거래처 발주 작성):
· 택배/용차 라인 단가+수량 분리 입력, 기본 단가 4000(택배)/5000(용차)
· 라인별 합계 실시간 표시 (단가 × 수량 = 합계)
- /m/admin/orders (관리자 거래명세표):
· REQUESTED 상태에서 [+ 택배 추가] [+ 용차 추가] 버튼 노출
· 택배/용차 라인은 인라인 편집 (담당자명/단가/수량 즉시 수정, 체크 클릭 → 저장)
· 삭제는 X 버튼
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
deploy.yml 의 docker compose exec ... npm run migrate:momo 가 컨테이너 안에서
실행되려면 마이그레이션 SQL 과 실행 스크립트가 standalone 번들에 포함되어야 함.
outputFileTracingIncludes 옵션으로 자동 복사되도록 설정.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- docker-compose.prod.yml: Traefik Host 라벨 (apex + www)
- .gitea/workflows/deploy.yml: NEXTAUTH_URL + 헬스체크 URL
- CICD_SETUP.md, docs/proposal.html, docs/MOMO_DISTRIBUTION_SPEC.md 도메인 표기 수정
DNS 입력 (가비아):
A @ 183.99.177.40
A www 183.99.177.40
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- /admin-panel/user-form 페이지 신설 (기존 /admin/user-form 만 있었음)
- 거래처(user_type='C') 회원 수정 시 unlimited_qty/view_hidden 토글 노출
- /api/admin/users/detail 응답에 address/ceo_name/biz_no/status/unlimited_qty/view_hidden 추가
- /api/admin/users/save 업데이트 시 위 필드 처리
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- r.user.objid 가 없는 FITO 세션(plm_admin 등)에서 발주 요청 시 INSERT 실패하던 문제: r.user.objid || r.user.userId 폴백
- customer_objid 와 regid 에 같은 $3 재사용하던 부분 분리 ($10) — 42P18 회피
- try/catch 범위 확장: req.json 파싱 실패, 존재하지 않는 품목, 수량 유효성 모두 400 응답
- enriched.map 의 throw 가 catch 밖이라 generic 500 으로 떨어지던 동작 개선
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- 제조사 관리 페이지/API CRUD (momo_makers)
- 재고 이력 조회 페이지/API (momo_stock_moves)
- 품목 관리: 제조관리 JSONB 섹션(소비기한·입고가·원산지·보관온도·바코드) 추가
- 품목 목록 API: onlyAvailable 서브쿼리 WHERE 절로 수정
- 재고 관리 페이지: 재고 이력 버튼 추가
- admin-panel: 메뉴 관리 DB 상태 무관 최상단 고정
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
사용자 명시적 운영 배포 승인 ('운영배포까지 진행 ... 될때까지 하라고').
- 로그인 후 redirectTo /dashboard → /m/dashboard 로 통일 (plm_admin 도 모모로)
- 세션 있으면 / · /login · /signup → /m/dashboard 리다이렉트 (middleware)
- /m/items 페이지를 /m/orders/new 로 redirect — 메뉴 통합
- 출고요청 카트를 상단 sticky bar 로 이동, 클릭 시 펼침 + 발주 버튼 항상 노출
- user_info 에 biz_no/ceo_name 컬럼 추가 (migration 006)
- signupMomoUser 가 biz_no/ceo_name 저장하도록 수정
- 메뉴: 9000101 품목 검색 비활성화 (출고요청과 통합으로 중복)
- admin-panel: 메뉴관리 섹션 idempotent 복구 (migration 006)
문제: 사용자가 '물건 담고 등록하는 곳이 안 보인다' 보고.
원인: cart.length>0 분기 안에 합계+발주버튼이 묶여있어 빈 카트에서 미렌더.
수정:
- 합계/발주요청 버튼을 분기 밖으로 분리 (빈 상태=비활성 버튼)
- 좁은 화면용 상단 요약 배지 + 발주 버튼 추가
- 좌우 분리 브레이크포인트 md → lg 로 변경
E2E 영향 없음(/api/m/orders/save 인터페이스 동일). 사용자 명시적 운영 배포 승인.
호스트 바인드 마운트는 docker compose 가 root 소유로 자동 생성해
컨테이너 nextjs(uid 1001) 가 mkdir 불가. named volume(momo_data_storage)
은 Dockerfile 의 chown nextjs:nodejs 를 그대로 복제하여 권한 문제 사라짐.
deploy.sh 의 host-side mkdir/chmod 도 더 이상 불필요하므로 제거.
admin-panel 좌측 메뉴:
- 정적 ADMIN_MENUS 배열 → menu_info [관리자] 트리 동적 로딩
- /api/admin/sidebar-menus: status='active' 자식만 반환
- 메뉴 관리에서 비활성화/삭제하면 사이드바에서 즉시 빠짐
- LABEL_TO_TAB 매핑으로 기존 탭 동작 유지
사용자/부서 삭제:
- /api/admin/users/delete: 진짜 DELETE FROM user_info (+ authority_sub_user 정리, 본인 보호)
- /api/admin/users/deactivate: status=inActive 비활성화 별도
- /api/admin/dept/delete: 진짜 DELETE (자식 부서/소속 사용자 검사)
- /api/admin/dept/deactivate: 비활성화 별도
문서:
- docs/MOMO_DISTRIBUTION_SPEC.md v0.2: 기존 user_info/dept_info/supply_mng/menu_info/comm_code 재사용 정책 명시
- 신규 momo_* 는 모모 비즈니스 도메인(품목/창고/재고/출고/매입) 만 한정
- TODO: momo_users 등 → 기존 테이블로 이전 마이그레이션
- src/app/api/* (FITO 백엔드 API 약 70개) 복원 — (main) 페이지들이
/api/product/bom, /api/sales/* 등을 호출하므로 복원 필요
- /api/admin/menus/delete: rel_menu_auth 컬럼명 오타 수정 (menu_obj_id → menu_objid)
- /api/admin/menus/delete: cascade 옵션 — 하위 메뉴까지 재귀 일괄 삭제
- /api/admin/users/delete 신규 (soft delete: status=inActive)
- /api/admin/dept/delete 신규 (자식 부서/소속 사용자 검사 후 soft delete)
- admin-panel 사용자 관리: handleDelete 빈 껍데기였음 → 실제 API 호출 + 체크박스 선택 연결
- admin-panel 부서 관리 모달: 삭제 버튼 추가
문제: /m/* 별도 레이아웃 때문에 메뉴 클릭 시 사이드바·헤더·디자인이 통째로
바뀜. 사용자가 원한 건 기존 (main) 레이아웃 안에서 같은 디자인으로 동작.
조치:
- src/app/m/* 전체를 src/app/(main)/m/* 로 이동
- src/app/m/layout.tsx + src/components/momo/{sidebar,header} 삭제
- (main)/layout.tsx 가 자동으로 모든 모모 페이지를 감싸 → Sidebar + Header
+ Content 일관 표시
- URL은 그대로 (/m/dashboard 등) — menu_info DB 변경 불필요
→ plm_admin 로그인 후 [사용자] 그룹의 모모 메뉴 클릭 시 동일한 (main)
사이드바/헤더 유지하면서 콘텐츠만 교체. 디자인 일관 + 작동 정상.
DB:
- [사용자] 그룹 아래에 5개 대메뉴 신규 (거래처 주문/마스터 관리/매입·입고/출고·정산/통계)
- 각 대메뉴 아래에 모모 페이지 소메뉴로 배치 (URL 직접 연결)
- 기존 [DASHBOARD] 대메뉴 활용 — 자식 [대시보드 → /m/dashboard] 추가, 기존 dashboard.do 비활성화
코드:
- /m/admin/users, /m/admin/roles, /m/admin/menus 페이지 삭제
- /api/m/users, /api/m/roles, /api/m/menus 삭제
- 모모 사이드바 [시스템] 그룹 제거 (기존 admin-panel 사용자/권한/메뉴 관리 활용)
→ plm_admin 로그인 후 [사용자] 그룹 펼치면 깔끔한 2단 트리 표시,
각 소메뉴 클릭 시 /m/* 페이지로 정상 이동
- DB: menu_info(9000000) parent_obj_id를 0 → -395553955 (사용자) 로 변경
→ 상단 [사용자] 탭 안에 '모모유통' 그룹으로 표시
- /api/admin/menus/delete: cascade=true 시 자손까지 재귀 삭제 (rel_menu_auth 동시 정리)
- admin-panel 메뉴 관리: 하위 메뉴가 있으면 사용자에게 confirm 후 일괄 삭제
- src/app/(main), admin, admin-panel, common, api/{admin,common,menu} 복원
- /api/auth/login: FITO 인증 다시 활성화 (plm_admin 등 FITO 사용자 로그인 가능)
- 미들웨어: 옛 경로 강제 리다이렉트 제거
- /m/layout.tsx: FITO 슈퍼관리자(isAdmin)도 ADMIN 으로 받아 모모 페이지 진입 허용
- DB 005: menu_info 에 모모유통 루트(9000000) + 자식 19개(/m/* URL 직접 연결)
→ plm_admin 로그인 후 사이드바 [모모유통] 그룹에서 클릭 시 동작
→ 메뉴 관리 UI 에서 추가/수정/삭제 가능