v1.0.19: 修复人员编辑入口缺失(person.js addPerson/editPerson) + 渠道明细数量字段名(analysis.php cnt) + CDP全量验证43项PASS

This commit is contained in:
nanguaboss
2026-08-08 19:29:14 +08:00
parent 2cb688ed46
commit 1c8b374a72
40 changed files with 2313 additions and 658 deletions
+9 -9
View File
@@ -2,7 +2,7 @@
-- 数据字典种子数据(由官方 Excel 文件生成,勿手工修改)
-- 来源:国家地区编码.xls / 行政区划编码.xls / 招标行业分类.xls / 证书类型枚举.xls
--
-- ⚠️ 重要:date_dict_certificate 被 company_certifications.certification_type_id
-- ⚠️ 重要:data_dict_certificate 被 company_certifications.certification_type_id
-- 外键 ON DELETE CASCADE 引用,本文件会对证书表 DELETE 后重建!
-- 执行前必须先备份 company_certifications(及相关业务表)!!
-- 安全做法:
@@ -16,8 +16,8 @@ SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- 1) 国家地区编码(62 条,另补充 'CN 中国' 1 条供国内企业/人员使用)
DELETE FROM `date_dict_country`;
INSERT INTO `date_dict_country` (`code`, `name`, `sort_order`) VALUES
DELETE FROM `data_dict_country`;
INSERT INTO `data_dict_country` (`code`, `name`, `sort_order`) VALUES
('CN', '中国', 0),
('HK', '中国香港', 1),
('MO', '中国澳门', 2),
@@ -83,8 +83,8 @@ INSERT INTO `date_dict_country` (`code`, `name`, `sort_order`) VALUES
('BR', '巴西', 62);
-- 2) 行政区划编码(省/市/区县三级,共 3632 条)
DELETE FROM `date_dict_area`;
INSERT INTO `date_dict_area` (`code`, `name`, `parent_code`, `sort_order`) VALUES
DELETE FROM `data_dict_area`;
INSERT INTO `data_dict_area` (`code`, `name`, `parent_code`, `sort_order`) VALUES
('110000', '北京市', NULL, 1),
('110100', '北京市', '110000', 2),
('110101', '东城区', '110100', 3),
@@ -3719,8 +3719,8 @@ INSERT INTO `date_dict_area` (`code`, `name`, `parent_code`, `sort_order`) VALUE
('820000', '澳门特别行政区', NULL, 3632);
-- 3) 招标行业分类(24 条)
DELETE FROM `date_dict_industry`;
INSERT INTO `date_dict_industry` (`code`, `name`, `parent_code`, `sort_order`) VALUES
DELETE FROM `data_dict_industry`;
INSERT INTO `data_dict_industry` (`code`, `name`, `parent_code`, `sort_order`) VALUES
('1', '工程建筑', NULL, 1),
('2', '办公文教', NULL, 2),
('3', '医疗卫生', NULL, 3),
@@ -3747,8 +3747,8 @@ INSERT INTO `date_dict_industry` (`code`, `name`, `parent_code`, `sort_order`) V
('15', '其他', NULL, 24);
-- 4) 证书类型枚举(263 条)
DELETE FROM `date_dict_certificate`;
INSERT INTO `date_dict_certificate` (`code`, `name`, `sort_order`) VALUES
DELETE FROM `data_dict_certificate`;
INSERT INTO `data_dict_certificate` (`code`, `name`, `sort_order`) VALUES
('000001', '强制性产品认证', 1),
('000002001', '质量管理体系认证', 2),
('000002002', '环境管理体系认证', 3),
+118
View File
@@ -0,0 +1,118 @@
-- ============================================================
-- SuperLink Web 后台管理系统 - v1.0.18 数据库结构变更脚本
-- 对应需求文档:0807---29877584-0c3b-41d8-b102-e9aa9c1cea62.docx
-- 1) 数据字典表改名:date_dict_* -> data_dict_*(其它无变化)
-- 2) 新增企业类型字典表 data_dict_company_type(对应 companies.legal_form 企业类型)
-- 3) company_certifications 增加「级别」「颁证机构」
-- 4) company_products 增加「产品基本定位」「包含系列」
-- 5) 新增 EAV 产品参数表:company_products_attr / company_products_attr_value
-- 6) 新增渠道新增计划表 channel_plans
-- 执行方式:直接执行本文件(先备份数据库)
-- ============================================================
SET NAMES utf8mb4;
-- ------------------------------------------------------------
-- 1) 数据字典表改名(其它无变化)
-- ------------------------------------------------------------
RENAME TABLE `date_dict_area` TO `data_dict_area`;
RENAME TABLE `date_dict_certificate` TO `data_dict_certificate`;
RENAME TABLE `date_dict_country` TO `data_dict_country`;
RENAME TABLE `date_dict_industry` TO `data_dict_industry`;
-- ------------------------------------------------------------
-- 2) 企业类型字典表(对应 companies 表「企业类型」,后续按需增加具体类型)
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `data_dict_company_type`;
CREATE TABLE `data_dict_company_type` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`code` VARCHAR(50) NULL 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='企业类型字典(对应 companies.legal_form 企业类型)';
INSERT INTO `data_dict_company_type` (`code`, `name`, `sort_order`) VALUES
('llc', '有限责任公司', 1),
('joint_stock', '股份有限公司', 2),
('partnership', '合伙企业', 3),
('sole_proprietorship', '个人独资企业', 4),
('state_owned', '国有企业', 5),
('collective', '集体所有制企业', 6),
('foreign_invested', '外商投资企业', 7),
('joint_venture', '中外合资企业', 8),
('other', '其他', 99);
-- ------------------------------------------------------------
-- 3) 资质认证表增加「级别」「颁证机构」
-- ------------------------------------------------------------
ALTER TABLE `company_certifications`
ADD COLUMN `level` VARCHAR(50) NULL DEFAULT NULL COMMENT '级别' AFTER `certificate_number`,
ADD COLUMN `issuing_authority` VARCHAR(200) NULL DEFAULT NULL COMMENT '颁证机构' AFTER `level`;
-- ------------------------------------------------------------
-- 4) 产品基础表(company_products)增加「产品基本定位」「包含系列」
-- 说明:产品基本定位 = 介绍这一款产品的商业定位
-- ------------------------------------------------------------
ALTER TABLE `company_products`
ADD COLUMN `positioning` TEXT NULL COMMENT '产品基本定位(商业定位介绍)' AFTER `category_description`,
ADD COLUMN `series` VARCHAR(200) NULL COMMENT '包含系列' AFTER `positioning`;
-- ------------------------------------------------------------
-- 5) EAV 模式产品参数表(参考 DeepSeek 分享方案)
-- company_products_attr 参数属性定义表:按行业定义「有哪些参数」(元数据)
-- company_products_attr_value 产品参数值表:产品 + 参数属性 -> 具体值
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `company_products_attr`;
CREATE TABLE `company_products_attr` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '参数属性ID',
`industry` VARCHAR(100) NOT NULL COMMENT '所属行业(对应 companies.industry)',
`attr_name` VARCHAR(50) NOT NULL COMMENT '参数名称',
`attr_type` ENUM('string','number','boolean','date') NOT NULL DEFAULT 'string' COMMENT '参数类型',
`unit` VARCHAR(20) NULL DEFAULT NULL COMMENT '单位',
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '展示排序',
`is_active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '启用状态',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_industry_attr` (`industry`, `attr_name`),
KEY `idx_industry` (`industry`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='产品参数属性定义表(EAV,按行业定义参数)';
DROP TABLE IF EXISTS `company_products_attr_value`;
CREATE TABLE `company_products_attr_value` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`product_id` INT UNSIGNED NOT NULL COMMENT '产品ID(关联 company_products.id)',
`attr_id` INT UNSIGNED NOT NULL COMMENT '参数属性ID(关联 company_products_attr.id)',
`value_string` TEXT NULL COMMENT '字符串值',
`value_number` DECIMAL(20,4) NULL COMMENT '数值',
`value_boolean` TINYINT(1) NULL COMMENT '布尔值',
`value_date` DATE NULL COMMENT '日期值',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_product_attr` (`product_id`, `attr_id`),
KEY `idx_product` (`product_id`),
KEY `idx_attr` (`attr_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='产品参数值表(EAV,产品与参数属性关联存储具体值)';
-- ------------------------------------------------------------
-- 6) 渠道新增计划表(渠道管理 - 渠道新增计划)
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `channel_plans`;
CREATE TABLE `channel_plans` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`channel_type` VARCHAR(50) NOT NULL COMMENT '渠道类别(= source_channel 枚举)',
`source_detail` VARCHAR(255) NULL DEFAULT NULL COMMENT '来源详情',
`industry` VARCHAR(100) NULL DEFAULT NULL COMMENT '所属行业',
`start_date` DATE NULL DEFAULT NULL COMMENT '时间窗口开始',
`end_date` DATE NULL DEFAULT NULL COMMENT '时间窗口结束',
`remark` VARCHAR(255) NULL DEFAULT NULL COMMENT '备注说明',
`status` ENUM('待启动','已执行','错过') NOT NULL DEFAULT '待启动' COMMENT '状态反馈',
`is_active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '启用状态',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_channel_type` (`channel_type`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='渠道新增计划表';
-188
View File
@@ -1,188 +0,0 @@
-- ============================================================
-- 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