Files
jongryangje/writable/database/menu_tables.sql

77 lines
4.6 KiB
MySQL
Raw Normal View History

-- 메뉴 종류 (admin=관리자 상단 메뉴, site=사이트 첫페이지 등)
CREATE TABLE IF NOT EXISTS `menu_type` (
`mt_idx` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '메뉴종류 PK',
`mt_code` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '코드(admin, site 등)',
`mt_name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '표시명',
`mt_sort` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '정렬',
PRIMARY KEY (`mt_idx`),
UNIQUE KEY `uk_mt_code` (`mt_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='메뉴 종류';
-- 메뉴 항목 (지자체별 관리, 트리: mm_pidx=0 최상위, mm_dep 깊이, mm_num 형제순서)
CREATE TABLE IF NOT EXISTS `menu` (
`mm_idx` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '메뉴 PK',
`mt_idx` INT UNSIGNED NOT NULL COMMENT '메뉴종류 FK',
`lg_idx` INT UNSIGNED NOT NULL COMMENT '지자체 FK',
`mm_name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '메뉴명',
`mm_link` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '링크(예: admin/users)',
`mm_pidx` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '부모 메뉴 PK(0=최상위)',
`mm_dep` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '깊이(0,1,2)',
`mm_num` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '형제 내 순서',
`mm_cnode` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '자식 개수',
`mm_level` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '노출 허용 mb_level 쉼표구분(빈값=전체)',
`mm_is_view` CHAR(1) NOT NULL DEFAULT 'Y' COMMENT 'Y=노출, N=숨김',
PRIMARY KEY (`mm_idx`),
KEY `idx_mt_lg` (`mt_idx`, `lg_idx`),
KEY `idx_mm_pidx` (`mm_pidx`),
KEY `idx_mm_dep_num` (`mm_dep`, `mm_num`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='메뉴';
-- 초기 데이터: 메뉴 종류 (admin, site) + lg_idx=1 지자체용 기본 1차 메뉴
INSERT INTO `menu_type` (`mt_code`, `mt_name`, `mt_sort`) VALUES
('admin', '관리자 메뉴', 10),
('site', '사이트 메뉴', 20);
-- admin 타입, lg_idx=1 기본 1차 관리자 메뉴
INSERT INTO `menu` (`mt_idx`, `lg_idx`, `mm_name`, `mm_link`, `mm_pidx`, `mm_dep`, `mm_num`, `mm_cnode`, `mm_level`, `mm_is_view`) VALUES
-- mt_idx=1 (admin)
(1, 1, '대시보드', 'admin', 0, 0, 0, 0, '3', 'Y'),
(1, 1, '회원 관리', 'admin/users', 0, 0, 1, 0, '', 'Y'),
(1, 1, '로그인 이력', 'admin/access/login-history', 0, 0, 2, 0, '', 'Y'),
(1, 1, '승인 대기', 'admin/access/approvals', 0, 0, 3, 0, '', 'Y'),
(1, 1, '역할', 'admin/roles', 0, 0, 4, 0, '', 'Y'),
(1, 1, '메뉴', 'admin/menus', 0, 0, 5, 0, '', 'Y'),
(1, 1, '지자체 전환', 'admin/select-local-government', 0, 0, 6, 0, '', 'Y'),
(1, 1, '지자체', 'admin/local-governments', 0, 0, 7, 0, '', 'Y'),
(1, 1, '지정판매소', 'bag/designated-shops', 0, 0, 8, 0, '3', 'Y'),
-- mt_idx=2 (site) 기본 1차 사이트 메뉴 (링크는 추후 실제 라우트로 변경)
(2, 1, '기본정보관리', 'bag/basic-info', 0, 0, 0, 0, '', 'Y'),
(2, 1, '발주 입고 관리', 'bag/purchase-inbound', 0, 0, 1, 0, '', 'Y'),
(2, 1, '불출 관리', 'bag/issue', 0, 0, 2, 0, '', 'Y'),
(2, 1, '재고 관리', 'bag/inventory', 0, 0, 3, 0, '', 'Y'),
(2, 1, '판매 관리', 'bag/sales', 0, 0, 4, 0, '', 'Y'),
(2, 1, '판매 현황', 'bag/sales-stats', 0, 0, 5, 0, '', 'Y'),
(2, 1, '봉투 수불 관리', 'bag/flow', 0, 0, 6, 0, '', 'Y'),
(2, 1, '통계 분석 관리', 'bag/analytics', 0, 0, 7, 0, '', 'Y'),
(2, 1, '', 'bag/window', 0, 0, 8, 0, '', 'Y'),
(2, 1, '도움말', 'bag/help', 0, 0, 9, 0, '', 'Y');
-- site: 기본정보관리 하위 "기본코드관리" (기존 DB 중복 방지: bag/code-kinds 없을 때만 추가)
INSERT INTO `menu` (`mt_idx`, `lg_idx`, `mm_name`, `mm_link`, `mm_pidx`, `mm_dep`, `mm_num`, `mm_cnode`, `mm_level`, `mm_is_view`)
SELECT m.mt_idx, m.lg_idx, '기본코드관리', 'bag/code-kinds', m.mm_idx, 1, 0, 0, '', 'Y'
FROM `menu` m
JOIN `menu_type` t ON t.mt_idx = m.mt_idx AND t.mt_code = 'site'
WHERE m.lg_idx = 1 AND m.mm_link = 'bag/basic-info' AND m.mm_pidx = 0
AND NOT EXISTS (
SELECT 1 FROM `menu` c WHERE c.mt_idx = m.mt_idx AND c.lg_idx = m.lg_idx AND c.mm_link = 'bag/code-kinds'
)
LIMIT 1;
UPDATE `menu` m
JOIN `menu_type` t ON t.mt_idx = m.mt_idx AND t.mt_code = 'site'
SET m.mm_cnode = (
SELECT COUNT(*) FROM `menu` c WHERE c.mm_pidx = m.mm_idx AND c.mt_idx = m.mt_idx AND c.lg_idx = m.lg_idx
)
WHERE m.lg_idx = 1 AND m.mm_link = 'bag/basic-info' AND m.mm_pidx = 0;