-- ============================================================ -- SuperLink Web 后台管理系统 - 系统表(含 v1.0.16 数据字典表) -- 数据库:mysuperlink (utf8mb4 / utf8mb4_unicode_ci) -- 说明: -- 1) 原库已有14张业务表(companies/persons/social_accounts/company_needs 等),本文件不改动它们。 -- 2) 本文件定义系统表:system_users / system_roles / system_logs / channels, -- 以及 v1.0.16 新增的数据字典表:date_dict_country / date_dict_area / -- date_dict_industry / date_dict_certificate / source_channels。 -- 3) 按需求文档:所有时间字段调整为"年-月-日"(DATE 类型,不保留时分秒)。 -- 注意:DATE 默认值使用表达式 DEFAULT (CURRENT_DATE),需 MySQL 8.0.13+; -- 若为 MySQL 5.7,请将时间字段保留为 DATETIME 或由应用层写入日期。 -- 4) 数据字典的完整数据由官方 Excel 生成,见 sql/dict_seed.sql(建表后执行)。 -- 执行方式:Navicat / phpMyAdmin / mysql 命令行执行本文件即可(可重复执行前请先删除旧表)。 -- ============================================================ SET NAMES utf8mb4; -- ------------------------------------------------------------ -- 1. 系统用户表 -- ------------------------------------------------------------ DROP TABLE IF EXISTS `system_users`; CREATE TABLE `system_users` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', `username` VARCHAR(50) NOT NULL COMMENT '登录账号', `password` VARCHAR(64) NOT NULL COMMENT '密码(sha1加密)', `real_name` VARCHAR(50) DEFAULT NULL COMMENT '真实姓名', `role_id` INT UNSIGNED NOT NULL COMMENT '角色ID', `is_active` TINYINT(1) UNSIGNED DEFAULT 1 COMMENT '启用状态(0禁用,1启用)', `last_login_time` DATE DEFAULT NULL COMMENT '最后登录时间(年-月-日)', `last_login_ip` VARCHAR(50) DEFAULT NULL COMMENT '最后登录IP', `created_at` DATE DEFAULT (CURRENT_DATE) COMMENT '创建时间(年-月-日)', `updated_at` DATE DEFAULT (CURRENT_DATE) COMMENT '更新时间(年-月-日)', PRIMARY KEY (`id`), UNIQUE KEY `uk_username` (`username`), KEY `idx_role_id` (`role_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统用户表'; -- ------------------------------------------------------------ -- 2. 系统角色表 -- ------------------------------------------------------------ DROP TABLE IF EXISTS `system_roles`; CREATE TABLE `system_roles` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', `role_name` VARCHAR(50) NOT NULL COMMENT '角色名称', `permissions` JSON NOT NULL COMMENT '权限列表(菜单标识数组)', `is_active` TINYINT(1) UNSIGNED DEFAULT 1 COMMENT '启用状态', `created_at` DATE DEFAULT (CURRENT_DATE) COMMENT '创建时间(年-月-日)', PRIMARY KEY (`id`), UNIQUE KEY `uk_role_name` (`role_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统角色表'; -- ------------------------------------------------------------ -- 3. 操作日志表 -- ------------------------------------------------------------ DROP TABLE IF EXISTS `system_logs`; CREATE TABLE `system_logs` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', `user_id` INT UNSIGNED NOT NULL COMMENT '操作人ID', `username` VARCHAR(50) NOT NULL COMMENT '操作人账号', `action` VARCHAR(50) NOT NULL COMMENT '操作类型(login/logout/add/update/delete/import/export/audit/convert)', `module` VARCHAR(50) NOT NULL COMMENT '操作模块(company/person/media/need/preliminary/system等)', `target_table` VARCHAR(50) DEFAULT NULL COMMENT '操作对象表名', `target_id` INT UNSIGNED DEFAULT NULL COMMENT '操作对象记录ID', `content` JSON DEFAULT NULL COMMENT '操作内容(变更前后数据)', `ip` VARCHAR(50) DEFAULT NULL COMMENT '客户端IP', `created_at` DATE DEFAULT (CURRENT_DATE) COMMENT '操作时间(年-月-日)', PRIMARY KEY (`id`), KEY `idx_user_id` (`user_id`), KEY `idx_action` (`action`), KEY `idx_created_at` (`created_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='操作日志表'; -- ------------------------------------------------------------ -- 4. 默认数据(必须插入) -- ------------------------------------------------------------ -- 超级管理员角色 INSERT INTO `system_roles` (`role_name`, `permissions`) VALUES ('超级管理员', '["dashboard","company","person","media","need","marketing","channel","document","preliminary","system","log"]'); -- 默认管理员账号(密码:admin123,sha1加密) INSERT INTO `system_users` (`username`, `password`, `real_name`, `role_id`) VALUES ('admin', SHA1('admin123'), '系统管理员', 1); -- 基础角色(可选,建议一并创建) INSERT INTO `system_roles` (`role_name`, `permissions`) VALUES ('数据管理员', '["dashboard","company","person","media","document","preliminary"]'), ('业务专员', '["dashboard","need","marketing"]'), ('只读访客', '["dashboard"]'); -- ------------------------------------------------------------ -- 5. 渠道管理业务表(原14张表中无渠道表,渠道模块所需,按需创建) -- ------------------------------------------------------------ DROP TABLE IF EXISTS `channels`; CREATE TABLE `channels` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', `channel_name` VARCHAR(100) NOT NULL COMMENT '渠道名称', `channel_type` VARCHAR(50) DEFAULT NULL COMMENT '渠道类型(线上/线下/展会/转介绍等)', `contact_person` VARCHAR(50) DEFAULT NULL COMMENT '联系人', `contact_phone` VARCHAR(50) DEFAULT NULL COMMENT '联系电话', `contact_email` VARCHAR(100) DEFAULT NULL COMMENT '联系邮箱', `efficiency_score` DECIMAL(5,2) DEFAULT 0 COMMENT '效率评分(0-100)', `remark` VARCHAR(255) DEFAULT NULL COMMENT '备注', `is_active` TINYINT(1) UNSIGNED DEFAULT 1 COMMENT '启用状态', `created_at` DATE DEFAULT (CURRENT_DATE) COMMENT '创建时间(年-月-日)', `updated_at` DATE DEFAULT (CURRENT_DATE) COMMENT '更新时间(年-月-日)', PRIMARY KEY (`id`), KEY `idx_channel_type` (`channel_type`), KEY `idx_is_active` (`is_active`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='渠道管理表'; -- ------------------------------------------------------------ -- 6. v1.0.16 数据字典表 -- ------------------------------------------------------------ -- 6.1 国家地区编码字典 DROP TABLE IF EXISTS `date_dict_country`; CREATE TABLE `date_dict_country` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', `code` VARCHAR(50) NOT NULL COMMENT '国家/地区编码', `name` VARCHAR(100) NOT NULL COMMENT '国家/地区中文名', `sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序', `is_active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '启用状态', PRIMARY KEY (`id`), UNIQUE KEY `uk_code` (`code`), KEY `idx_name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='国家地区编码字典'; -- 6.2 行政区划编码字典(省/市/区县三级,parent_code 关联) DROP TABLE IF EXISTS `date_dict_area`; CREATE TABLE `date_dict_area` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', `code` VARCHAR(50) NOT NULL COMMENT '行政区划编码', `name` VARCHAR(100) NOT NULL COMMENT '行政区划名称', `parent_code` VARCHAR(50) DEFAULT NULL COMMENT '上级行政区划编码(省级为NULL)', `sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序', `is_active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '启用状态', PRIMARY KEY (`id`), UNIQUE KEY `uk_code` (`code`), KEY `idx_parent` (`parent_code`), KEY `idx_name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='行政区划编码字典'; -- 6.3 招标行业分类字典(parent_code 预留大类/细分层级) DROP TABLE IF EXISTS `date_dict_industry`; CREATE TABLE `date_dict_industry` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', `code` VARCHAR(50) NOT NULL COMMENT '行业编码', `name` VARCHAR(100) NOT NULL COMMENT '行业名称', `parent_code` VARCHAR(50) DEFAULT NULL COMMENT '上级行业编码(大类为NULL)', `sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序', `is_active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '启用状态', PRIMARY KEY (`id`), UNIQUE KEY `uk_code` (`code`), KEY `idx_parent` (`parent_code`), KEY `idx_name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='招标行业分类字典'; -- 6.4 证书类型枚举字典(原 certification_types 表改名而来;新装环境在此创建) DROP TABLE IF EXISTS `date_dict_certificate`; CREATE TABLE `date_dict_certificate` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', `code` VARCHAR(50) DEFAULT NULL COMMENT '证书类型枚举编码', `name` VARCHAR(100) NOT NULL COMMENT '证书类型名称', `sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序', `is_active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '启用状态', PRIMARY KEY (`id`), UNIQUE KEY `uk_code` (`code`), KEY `idx_name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='证书类型枚举字典'; -- 6.5 来源渠道字典(source_channel 枚举) DROP TABLE IF EXISTS `source_channels`; CREATE TABLE `source_channels` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', `name` VARCHAR(50) NOT NULL COMMENT '渠道名称', `sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序', `is_active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '启用状态', PRIMARY KEY (`id`), UNIQUE KEY `uk_name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='来源渠道字典'; -- 6.6 来源渠道默认数据 INSERT INTO `source_channels` (`name`, `sort_order`) VALUES ('展会', 1), ('SNS/社交媒体', 2), ('竞价广告', 3), ('搜索引擎自然流量', 4), ('行业媒体/门户', 5), ('转介绍', 6), ('电话销售', 7), ('邮件营销', 8), ('地推', 9), ('代理商/渠道', 10), ('官网咨询', 11), ('其他', 99); -- 6.7 数据字典完整数据(国家/行政区划/行业/证书)由官方 Excel 生成: -- 请执行 sql/dict_seed.sql