Files
freedom-admin/sql/init.sql
T
zhangjiaxun bf3939c415
CI/CD Deploy (Admin) / 构建后端镜像并部署 (push) Successful in 1m6s
fix(sql): 菜单SQL 改用自增分配 id,修复主键冲突
实测执行时发现硬编码 id 会撞主键:
- t_sys_permission 自增起点 1000,但 t_sys_role_permission 已单独用到 1005
- 写死 1005/1006 插入关联表时触发 Duplicate entry '1005'

改动:
- add_tools_text_diff.sql 改用 LAST_INSERT_ID() 取自增 id
- 授权改为 INSERT...SELECT,覆盖全部有效角色,不再写死 role_id=1
- 清理语句用 JOIN 按 permission_code 定位,避免误删他人菜单
- init.sql 同步修正 id,并补上遗漏的 user:getUserInfo 权限点(id=8)
- 两文件均已实测通过(含连续执行两次的幂等验证)
2026-10-20 22:40:36 +08:00

190 lines
11 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ============================================================
-- freedom 系统初始化脚本
-- 数据库: freedom_db
-- 目标: 远程 MySQL 124.221.214.237:3306
-- 说明: 需在数据库外部执行 `CREATE DATABASE` 权限
-- ============================================================
CREATE DATABASE IF NOT EXISTS `freedom_db` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE `freedom_db`;
-- 外键约束关闭
SET FOREIGN_KEY_CHECKS = 0;
-- ============================================================
-- 1. 用户表 t_sys_user
-- ============================================================
DROP TABLE IF EXISTS `t_sys_user`;
CREATE TABLE `t_sys_user` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`username` VARCHAR(50) NOT NULL COMMENT '登录用户名',
`password` VARCHAR(100) NOT NULL COMMENT '登陆密码',
`encode_type` VARCHAR(20) DEFAULT 'BCRYPT' COMMENT '加密方式(默认BCRYPT)',
`user_type` VARCHAR(20) DEFAULT NULL COMMENT '用户类型',
`nickname` VARCHAR(50) DEFAULT NULL COMMENT '用户昵称',
`avatar` VARCHAR(255) DEFAULT NULL COMMENT '用户头像',
`phone` VARCHAR(20) DEFAULT NULL COMMENT '手机号',
`email` VARCHAR(100) DEFAULT NULL COMMENT '电子邮箱',
`signature` VARCHAR(255) DEFAULT NULL COMMENT '个性签名',
`status` INT DEFAULT 0 COMMENT '状态',
`create_by` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`create_date` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` VARCHAR(50) DEFAULT NULL COMMENT '更新者',
`update_date` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`del_flag` TINYINT DEFAULT 0 COMMENT '删除标记',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_username` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
-- ============================================================
-- 2. 部门表 t_sys_dept
-- ============================================================
DROP TABLE IF EXISTS `t_sys_dept`;
CREATE TABLE `t_sys_dept` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`parent_id` BIGINT DEFAULT 0 COMMENT '父ID',
`dept_code` VARCHAR(50) DEFAULT NULL COMMENT '编码',
`dept_name` VARCHAR(100) NOT NULL COMMENT '名称',
`dept_desc` VARCHAR(255) DEFAULT NULL COMMENT '描述',
`level` INT DEFAULT 1 COMMENT '级别',
`sort` INT DEFAULT 0 COMMENT '排序',
`create_by` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`create_date` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` VARCHAR(50) DEFAULT NULL COMMENT '更新者',
`update_date` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`del_flag` TINYINT DEFAULT 0 COMMENT '删除标记',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8mb4 COMMENT='部门表';
-- ============================================================
-- 3. 角色表 t_sys_role
-- ============================================================
DROP TABLE IF EXISTS `t_sys_role`;
CREATE TABLE `t_sys_role` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`role_name` VARCHAR(50) NOT NULL COMMENT '角色名称',
`role_code` VARCHAR(50) DEFAULT NULL COMMENT '角色编号',
`role_desc` VARCHAR(255) DEFAULT NULL COMMENT '角色描述',
`is_default` VARCHAR(10) DEFAULT '0' COMMENT '默认角色',
`dept_id` BIGINT DEFAULT NULL COMMENT '该角色归属部门',
`sort` INT DEFAULT 0 COMMENT '角色排序',
`create_by` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`create_date` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` VARCHAR(50) DEFAULT NULL COMMENT '更新者',
`update_date` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`del_flag` TINYINT DEFAULT 0 COMMENT '删除标记',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8mb4 COMMENT='角色表';
-- ============================================================
-- 4. 权限表 t_sys_permission
-- ============================================================
DROP TABLE IF EXISTS `t_sys_permission`;
CREATE TABLE `t_sys_permission` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`parent_id` BIGINT DEFAULT 0 COMMENT '父ID',
`permission_code` VARCHAR(50) DEFAULT NULL COMMENT '编码',
`permission_name` VARCHAR(100) NOT NULL COMMENT '名称',
`permission_desc` VARCHAR(255) DEFAULT NULL COMMENT '描述',
`level` INT DEFAULT 1 COMMENT '级别',
`icon` VARCHAR(100) DEFAULT NULL COMMENT '图标',
`url` VARCHAR(255) DEFAULT NULL COMMENT '链接地址',
`component` VARCHAR(255) DEFAULT NULL COMMENT '组件地址',
`sort` INT DEFAULT 0 COMMENT '排序',
`create_by` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`create_date` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` VARCHAR(50) DEFAULT NULL COMMENT '更新者',
`update_date` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`del_flag` TINYINT DEFAULT 0 COMMENT '删除标记',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8mb4 COMMENT='权限表';
-- ============================================================
-- 5. 角色权限关联表 t_sys_role_permission
-- ============================================================
DROP TABLE IF EXISTS `t_sys_role_permission`;
CREATE TABLE `t_sys_role_permission` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`role_id` BIGINT NOT NULL COMMENT '角色ID',
`permission_id` BIGINT NOT NULL COMMENT '权限ID',
`create_by` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`create_date` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `idx_role_permission_role` (`role_id`),
KEY `idx_role_permission_perm` (`permission_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8mb4 COMMENT='角色权限关联表';
-- ============================================================
-- 6. 用户角色关联表 t_sys_user_role
-- ============================================================
DROP TABLE IF EXISTS `t_sys_user_role`;
CREATE TABLE `t_sys_user_role` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`user_id` BIGINT NOT NULL COMMENT '用户ID',
`role_id` BIGINT NOT NULL COMMENT '角色ID',
`create_by` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `idx_user_role_user` (`user_id`),
KEY `idx_user_role_role` (`role_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8mb4 COMMENT='用户角色关联表';
SET FOREIGN_KEY_CHECKS = 1;
-- ============================================================
-- 基础数据
-- ============================================================
-- 部门:总公司 / 技术部
INSERT INTO `t_sys_dept` (`id`, `parent_id`, `dept_code`, `dept_name`, `dept_desc`, `level`, `sort`, `create_by`, `create_date`, `del_flag`)
VALUES
(1, 0, 'HEAD', '总公司', '总公司', 1, 1, 'admin', NOW(), 0),
(2, 1, 'TECH', '技术部', '技术部', 2, 1, 'admin', NOW(), 0);
-- 用户:admin / 123456 (BCRYPT)
INSERT INTO `t_sys_user` (`id`, `username`, `password`, `encode_type`, `user_type`, `nickname`, `avatar`, `phone`, `email`, `signature`, `status`, `create_by`, `create_date`, `del_flag`)
VALUES
(1, 'admin', '$2a$10$re0cfTCIYGaxSjme0fTNEOk4K4hGNDwYNTjJ3dz6R8SZWfGV994M2', 'BCRYPT', 'SYSTEM', '超级管理员', NULL, '13800000000', 'admin@freedom.com', 'Freedom 系统管理员', 0, 'admin', NOW(), 0);
-- 角色:超级管理员
INSERT INTO `t_sys_role` (`id`, `role_name`, `role_code`, `role_desc`, `is_default`, `dept_id`, `sort`, `create_by`, `create_date`, `del_flag`)
VALUES
(1, '超级管理员', 'admin', '超级管理员,拥有所有权限', '1', 1, 1, 'admin', NOW(), 0);
-- 权限菜单
-- component 必须带前导斜杠且与 src/view 下的实际文件名一致:
-- 前端 formatMenuList() 会拼成 import('@/view' + component + '.vue')
-- 说明:此处 id 硬编码仅适用于全新建库(此时两张表都为空)。
-- 已有数据的库请用 sql/add_tools_text_diff.sql,它改用自增避免撞主键。
INSERT INTO `t_sys_permission` (`id`, `parent_id`, `permission_code`, `permission_name`, `permission_desc`, `level`, `icon`, `url`, `component`, `sort`, `create_by`, `create_date`, `del_flag`)
VALUES
(1, 0, 'system', '系统管理', '系统管理菜单', 1, 'ios-settings', '', '', 1, 'admin', NOW(), 0),
(2, 1, 'sys:user', '用户管理', '用户管理', 2, 'ios-person', '/sys/user', '/sys/sys-user', 1, 'admin', NOW(), 0),
(3, 1, 'sys:role', '角色管理', '角色管理', 2, 'ios-people', '/sys/role', '/sys/sys-role', 2, 'admin', NOW(), 0),
(4, 1, 'sys:dept', '部门管理', '部门管理', 2, 'ios-home', '/sys/dept', '/sys/sys-dept', 3, 'admin', NOW(), 0),
(5, 1, 'sys:permission', '权限管理', '权限管理', 2, 'ios-key', '/sys/permission', '/sys/sys-permission', 4, 'admin', NOW(), 0),
(6, 0, 'user:getUserInfo', '获取用户信息', '登录后获取当前用户信息的前端权限点', 1, '', '', '', 99, 'admin', NOW(), 0),
(1003, 0, 'todo', '待办', '个人与公开待办', 1, 'md-checkmark-circle', '', '', 10, 'admin', NOW(), 0),
(1004, 1003, 'todo:list', '待办清单', '个人待办清单', 2, 'md-list-box', '/todo/list', '/todo/todo-list', 1, 'admin', NOW(), 0),
(1007, 0, 'tools', '工具列表', '与系统管理同级的工具集合', 1, 'ios-apps', '', '', 20, 'admin', NOW(), 0),
(1008, 1007, 'tools:text-diff', '文本比对', '左右文本并排比对,支持字符级高亮、忽略空白与结果导出', 2, 'md-git-compare', '/tools/text-diff', '/tools/text-diff', 1, 'admin', NOW(), 0);
-- 用户-角色关联:admin -> 超级管理员
INSERT INTO `t_sys_user_role` (`id`, `user_id`, `role_id`, `create_by`, `create_time`)
VALUES (1, 1, 1, 'admin', NOW());
-- 角色-权限关联:超级管理员 -> 所有权限
-- 关联表自增起点同为 1000,这里也按实际 id 顺排,避免与 t_sys_permission 混淆
INSERT INTO `t_sys_role_permission` (`id`, `role_id`, `permission_id`, `create_by`, `create_date`)
VALUES
(1, 1, 1, 'admin', NOW()),
(2, 1, 2, 'admin', NOW()),
(3, 1, 3, 'admin', NOW()),
(4, 1, 4, 'admin', NOW()),
(5, 1, 5, 'admin', NOW()),
(8, 1, 6, 'admin', NOW()),
(1003, 1, 1003, 'admin', NOW()),
(1004, 1, 1004, 'admin', NOW()),
(1005, 1, 1007, 'admin', NOW()),
(1006, 1, 1008, 'admin', NOW());