-- =============================================================================
-- 前后端项目模板 · 初始化库表与基础数据（MySQL 5.7+ / 8.x，utf8mb4）
-- 执行前请创建空库并 USE 到目标 database（库名须与 config/config.development.js 里 db.database 一致）；会 DROP 后重建系统表，请勿在生产库直接全量执行。
-- 默认账号：admin / 123456；zc / zc123（密码为 MD5 小写十六进制，与 node_core tokenService.getMd5 一致）
-- =============================================================================

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------------------------------------------------------- 删表（依赖顺序）
DROP TABLE IF EXISTS `sys_log`;
DROP TABLE IF EXISTS `sys_user`;
DROP TABLE IF EXISTS `sys_menu`;
DROP TABLE IF EXISTS `sys_role`;
DROP TABLE IF EXISTS `sys_parameter`;
DROP TABLE IF EXISTS `sys_tenant`;

-- ----------------------------------------------------------------------------- sys_tenant
CREATE TABLE `sys_tenant` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL DEFAULT '' COMMENT '租户名称',
  `code` varchar(64) NOT NULL DEFAULT '' COMMENT '租户编码（登录 tenant_code）',
  `remark` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
  `status` int NOT NULL DEFAULT 1 COMMENT '1启用 0停用',
  `is_platform` int NOT NULL DEFAULT 0 COMMENT '1平台租户',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `last_modify_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `is_delete` int NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_sys_tenant_code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户';

-- ----------------------------------------------------------------------------- sys_role
-- menus：JSON；普通角色 type=0 时为菜单 id 数组；系统角色 type=1 时 authorityMenus 不按 menus 过滤（查全部菜单）
CREATE TABLE `sys_role` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL DEFAULT '' COMMENT '角色名称',
  `type` int NOT NULL DEFAULT 0 COMMENT '0普通 1系统',
  `menus` json DEFAULT NULL COMMENT '权限菜单id数组等',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `last_modify_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `is_delete` int NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色';

-- ----------------------------------------------------------------------------- sys_user
-- 列名与 Sequelize 模型一致：roleId 驼峰、tenant_id 下划线
CREATE TABLE `sys_user` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL DEFAULT '' COMMENT '登录名',
  `password` varchar(100) NOT NULL DEFAULT '' COMMENT 'MD5密码',
  `roleId` int NOT NULL COMMENT '角色id',
  `tenant_id` int NOT NULL DEFAULT 1 COMMENT '租户id',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `last_modify_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `is_delete` int NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  KEY `idx_sys_user_tenant` (`tenant_id`),
  KEY `idx_sys_user_role` (`roleId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户';

-- ----------------------------------------------------------------------------- sys_menu
CREATE TABLE `sys_menu` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL DEFAULT '' COMMENT '菜单名称',
  `parent_id` int unsigned DEFAULT 0 COMMENT '父id',
  `icon` varchar(100) NOT NULL DEFAULT '' COMMENT '图标',
  `path` varchar(255) NOT NULL DEFAULT '' COMMENT '路径',
  `type` varchar(255) NOT NULL DEFAULT '页面' COMMENT '菜单/页面/外链/功能',
  `model_id` int unsigned DEFAULT 0 COMMENT '模型id',
  `form_id` int unsigned DEFAULT 0 COMMENT '表单id',
  `component` varchar(100) NOT NULL DEFAULT '' COMMENT '组件地址',
  `api_path` varchar(100) NOT NULL DEFAULT '' COMMENT 'api地址',
  `is_show_menu` int NOT NULL DEFAULT 1 COMMENT '是否显示在菜单',
  `is_show` int NOT NULL DEFAULT 1 COMMENT '是否展示',
  `sort` int NOT NULL DEFAULT 0 COMMENT '排序',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `last_modify_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `is_delete` int NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  KEY `idx_sys_menu_parent` (`parent_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='菜单';

-- ----------------------------------------------------------------------------- sys_parameter（站点标题、Logo 等）
CREATE TABLE `sys_parameter` (
  `id` int NOT NULL AUTO_INCREMENT,
  `key` varchar(100) NOT NULL DEFAULT '' COMMENT '参数key',
  `value` varchar(500) NOT NULL DEFAULT '' COMMENT '值（标题/Logo路径等，适当加长避免 Logo URL 被截断）',
  `remark` varchar(500) NOT NULL DEFAULT '' COMMENT '备注',
  `is_modified` int NOT NULL DEFAULT 0 COMMENT '0允许修改 1不允许',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `last_modify_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `is_delete` int NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_sys_parameter_key` (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统参数';

-- ----------------------------------------------------------------------------- sys_log
CREATE TABLE `sys_log` (
  `id` int NOT NULL AUTO_INCREMENT,
  `table_name` varchar(100) NOT NULL DEFAULT '' COMMENT '表名',
  `operate` varchar(100) NOT NULL DEFAULT '' COMMENT '操作',
  `content` json DEFAULT NULL COMMENT '内容',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `last_modify_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `is_delete` int NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='操作日志';

SET FOREIGN_KEY_CHECKS = 1;

-- ============================================================================= 基础数据
-- 租户
INSERT INTO `sys_tenant` (`id`, `name`, `code`, `remark`, `status`, `is_platform`, `is_delete`)
VALUES (1, '默认平台租户', 'default', '初始化数据', 1, 1, 0);

-- 角色：系统管理员（type=1 拥有全部菜单，无需维护 menus 数组）
INSERT INTO `sys_role` (`id`, `name`, `type`, `menus`, `is_delete`)
VALUES (1, '超级管理员', 1, CAST('[]' AS JSON), 0);

-- 用户 admin / 123456  → MD5
INSERT INTO `sys_user` (`id`, `name`, `password`, `roleId`, `tenant_id`, `is_delete`)
VALUES (1, 'admin', 'e10adc3949ba59abbe56e057f20f883e', 1, 1, 0);

-- 用户 zc / zc123 → MD5（同为超级管理员角色）
INSERT INTO `sys_user` (`id`, `name`, `password`, `roleId`, `tenant_id`, `is_delete`)
VALUES (2, 'zc', 'd3df61764ee9a26091f714b88958caef', 1, 1, 0);

-- 站点标题与 Logo（与 admin_core paramSetupServer / sys_title 页一致）
INSERT INTO `sys_parameter` (`key`, `value`, `remark`, `is_modified`, `is_delete`) VALUES
('sys_title', '管理系统', '登录页与顶栏标题', 0, 0),
('sys_logo', '', '顶栏 Logo 图片地址，可填上传后的相对路径', 0, 0);

-- ----------------------------------------------------------------------------- 菜单（与 admin_core defaultMenus 对齐，便于权限与动态路由）
INSERT INTO `sys_menu` (`id`, `name`, `parent_id`, `icon`, `path`, `type`, `model_id`, `form_id`, `component`, `api_path`, `is_show_menu`, `is_show`, `sort`, `is_delete`) VALUES
(1, '首页', 0, 'md-home', '/home', '页面', 0, 0, 'home/index', '', 1, 1, 1, 0),
(200, '业务演示', 0, 'md-bulb', '/demo', '菜单', 0, 0, '', '', 1, 1, 4, 0),
(201, '演示数据', 200, 'md-grid', '/demo/tpl-demo', '页面', 0, 0, 'demo/tpl_demo', '', 1, 1, 1, 0),
(5, '系统管理', 0, 'md-settings', '/system', '菜单', 0, 0, '', '', 1, 1, 2, 0),
(11, '用户管理', 5, 'md-person', '/system/user', '页面', 0, 0, 'system/sys_user', '', 1, 1, 1, 0),
(12, '角色管理', 5, 'md-people', '/system/role', '页面', 0, 0, 'system/sys_role', '', 1, 1, 2, 0),
(13, '系统日志', 5, 'md-list', '/system/log', '页面', 0, 0, 'system/sys_log', '', 1, 1, 3, 0),
(14, '操作日志', 5, 'md-pulse', '/system/log-operate', '页面', 0, 0, 'system/sys_log_operate', '', 1, 1, 4, 0),
(15, '参数设置', 5, 'md-options', '/system/param', '页面', 0, 0, 'system/sys_param_setup', '', 1, 1, 5, 0),
(120, '高级管理', 0, 'md-construct', '/system', '菜单', 0, 0, '', '', 1, 1, 3, 0),
(122, '菜单管理', 120, 'md-menu', '/system/menu', '页面', 0, 0, 'system/sys_menu', '', 1, 1, 1, 0),
(124, '系统标题', 120, 'md-text', '/system/title', '页面', 0, 0, 'system/sys_title', '', 1, 1, 2, 0),
(125, '租户管理', 120, 'md-git-branch', '/system/tenant', '页面', 0, 0, 'system/sys_tenant', '', 1, 1, 3, 0),
(126, '同步框架', 120, 'md-cloud-download', '/system/framework-sync', '页面', 0, 0, 'system/sys_framework_sync', '', 1, 1, 4, 0);

-- ----------------------------------------------------------------------------- sys_log 示例数据（表结构见上；content 与 Sequelize JSON 包装一致，含 value 键）
INSERT INTO `sys_log` (`table_name`, `operate`, `content`, `is_delete`) VALUES
('sys_user', '登录', JSON_OBJECT('value', '<p>初始化示例：管理员 <span class="bold">admin</span> 登录系统</p>'), 0),
('sys_menu', '新增', JSON_OBJECT('value', '<p>初始化菜单与权限数据已写入 <span class="bold">sys_menu</span></p>'), 0),
('sys_parameter', '修改', JSON_OBJECT('value', '<p><span class="bold">sys_title</span> 默认值为「管理系统」</p>'), 0);

-- =============================================================================
-- 说明：
-- 1. sys_parameter.value 建表为 varchar(500) 便于 Logo URL；若与 node_core 模型 STRING(100) 不一致，可后续 ALTER 或改模型。
-- 2. 若项目另有业务表，请在业务 migrations 中扩展，勿与本文件系统表冲突。
-- 3. 登录可不传 tenant_code 时由后端按用户 tenant_id 解析；传 tenant_code 时用 default 对应本租户。
-- =============================================================================
