2.1 版本文件

This commit is contained in:
2026-08-14 10:55:06 +08:00
commit a3434ec620
67 changed files with 12559 additions and 0 deletions
+280
View File
@@ -0,0 +1,280 @@
-- =================================
-- 自由云商城 数据库结构 + 初始数据
-- 安装程序会自动把 __PREFIX__ 替换为用户填写的表前缀
-- 编码:utf8mb4 / InnoDB
-- =================================
-- 用户表(普通用户与后台管理员共用,is_admin=1 为管理员;status=0 表示被封禁)
CREATE TABLE `__PREFIX__users` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`username` VARCHAR(50) NOT NULL,
`password` VARCHAR(255) NOT NULL,
`email` VARCHAR(120) NOT NULL DEFAULT '',
`is_admin` TINYINT(1) NOT NULL DEFAULT 0,
`role` VARCHAR(10) NOT NULL DEFAULT 'user' COMMENT 'admin管理员 cs客服 user普通用户(后台登录用 role IN admin/cs',
`avatar` VARCHAR(255) DEFAULT '' COMMENT '头像文件路径',
`status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '1正常 0已封禁',
`nickname` VARCHAR(60) NOT NULL DEFAULT '' COMMENT '昵称',
`verified` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '邮箱是否验证 0未验证 1已验证',
`email_token` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '邮箱验证令牌',
`reg_ip` VARCHAR(45) NOT NULL DEFAULT '' COMMENT '注册 IP(限频用)',
`points` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '积分余额',
`invite_code` VARCHAR(12) NOT NULL DEFAULT '' COMMENT '我的邀请码(唯一,用于邀请奖励)',
`invited_by` INT UNSIGNED DEFAULT NULL COMMENT '邀请人 user_id(通过邀请注册时记录)',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_username` (`username`),
UNIQUE KEY `uk_invite_code` (`invite_code`),
KEY `idx_invited_by` (`invited_by`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 商品表
CREATE TABLE `__PREFIX__products` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(120) NOT NULL,
`price` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
`stock` INT UNSIGNED NOT NULL DEFAULT 0,
`category` VARCHAR(40) NOT NULL DEFAULT '其他',
`icon` VARCHAR(40) NOT NULL DEFAULT 'fa-box',
`image` VARCHAR(255) DEFAULT '',
`description` TEXT,
`period_days` INT NOT NULL DEFAULT 0 COMMENT '周期天数:0=一次性/实物,>0=按天计的周期商品(如 30/90/365)',
`points_price` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '积分价:0=不可用积分购买,>0=可用该积分数购买',
`status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '1上架 0下架',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_category` (`category`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 商品分组(后台可增删,用于首页分类筛选与商品归类)
CREATE TABLE `__PREFIX__product_groups` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(40) NOT NULL,
`icon` VARCHAR(40) NOT NULL DEFAULT 'fa-tags',
`sort_order` INT NOT NULL DEFAULT 0,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 订单表(status: pending待付款 paid已付款 shipped已发货 completed已完成 cancelled已取消)
CREATE TABLE `__PREFIX__orders` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`order_no` VARCHAR(32) NOT NULL,
`user_id` INT UNSIGNED NOT NULL,
`total` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
`status` VARCHAR(20) NOT NULL DEFAULT 'pending',
`contact` VARCHAR(60) DEFAULT '',
`contact_email` VARCHAR(120) DEFAULT '' COMMENT '联系邮箱(下单人填写)',
`address` VARCHAR(255) DEFAULT '',
`note` VARCHAR(255) DEFAULT '',
`period_days` INT NOT NULL DEFAULT 0 COMMENT '本单周期天数(取商品最大值)',
`expires_at` DATETIME DEFAULT NULL COMMENT '到期时间(周期商品有值)',
`expire_notify_sent` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '到期前提醒邮件是否已发送 0未发 1已发',
`pay_type` VARCHAR(10) NOT NULL DEFAULT 'cash' COMMENT 'cash现金 points积分支付',
`points_used` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '积分支付时扣减的积分数',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_order_no` (`order_no`),
KEY `idx_user` (`user_id`),
KEY `idx_expires` (`expires_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 订单明细表
CREATE TABLE `__PREFIX__order_items` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`order_id` INT UNSIGNED NOT NULL,
`product_id` INT UNSIGNED NOT NULL,
`name` VARCHAR(120) NOT NULL,
`price` DECIMAL(10,2) NOT NULL,
`qty` INT UNSIGNED NOT NULL,
`subtotal` DECIMAL(10,2) NOT NULL,
`period_days` INT NOT NULL DEFAULT 0 COMMENT '下单时商品的周期天数',
PRIMARY KEY (`id`),
KEY `idx_order` (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 发货信息表(管理员发货时填写:连接信息/登录凭据)
CREATE TABLE `__PREFIX__order_deliveries` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`order_id` INT UNSIGNED NOT NULL,
`server_ip` VARCHAR(60) DEFAULT '' COMMENT '服务器 IP',
`conn_addr` VARCHAR(255) DEFAULT '' COMMENT '连接地址/域名',
`login_user` VARCHAR(120) DEFAULT '' COMMENT '登录账户',
`login_pass` VARCHAR(255) DEFAULT '' COMMENT '登录密码',
`remark` TEXT,
`activated` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '激活状态:0未激活 1已激活(管理员填写,用户端展示)',
`product_info` TEXT COMMENT '商品信息(管理员填写后展示给用户)',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_order` (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 系统设置表(SMTP 等键值对)
CREATE TABLE `__PREFIX__settings` (
`k` VARCHAR(64) NOT NULL,
`v` TEXT,
PRIMARY KEY (`k`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 工单部门表
CREATE TABLE `__PREFIX__ticket_departments` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(60) NOT NULL,
`description` VARCHAR(255) DEFAULT '',
`sort` INT NOT NULL DEFAULT 0,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 工单表
CREATE TABLE `__PREFIX__tickets` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` INT UNSIGNED NOT NULL,
`dept_id` INT UNSIGNED NOT NULL DEFAULT 0,
`order_id` INT UNSIGNED DEFAULT NULL COMMENT '关联订单(续期工单用)',
`type` VARCHAR(20) NOT NULL DEFAULT 'general' COMMENT 'general普通 renewal续期申请',
`subject` VARCHAR(160) NOT NULL,
`message` TEXT NOT NULL,
`status` VARCHAR(20) NOT NULL DEFAULT 'open' COMMENT 'open待处理 pending处理中 resolved已解决 closed已关闭',
`priority` TINYINT(1) NOT NULL DEFAULT 2 COMMENT '1低 2普通 3高',
`admin_reply` TEXT,
`admin_id` INT UNSIGNED DEFAULT NULL,
`assignee_id` INT UNSIGNED DEFAULT NULL COMMENT '负责人(客服/管理员)用户ID,NULL=未分配(仅管理员可见)',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`closed_at` DATETIME DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_status` (`status`),
KEY `idx_user` (`user_id`),
KEY `idx_dept` (`dept_id`),
KEY `idx_order` (`order_id`),
KEY `idx_assignee` (`assignee_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 工单回复表(多轮对话,is_admin=1 表示客服/管理员回复)
CREATE TABLE `__PREFIX__ticket_replies` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`ticket_id` INT UNSIGNED NOT NULL,
`user_id` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '回复人 user_id(管理员/客服回复时填其 id,用户回复时填下单用户 id)',
`is_admin` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1=管理员/客服回复 0=用户回复',
`message` TEXT NOT NULL,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_ticket` (`ticket_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 公告中心
CREATE TABLE `__PREFIX__announcements` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`title` VARCHAR(160) NOT NULL,
`content` TEXT NOT NULL,
`pinned` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1置顶',
`status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '1显示 0隐藏',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_status` (`status`),
KEY `idx_pinned` (`pinned`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 积分流水表(签到 / 邀请 / 消费 / 后台调整 等记录)
CREATE TABLE `__PREFIX__points_log` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` INT UNSIGNED NOT NULL,
`type` VARCHAR(20) NOT NULL DEFAULT 'sign' COMMENT 'sign签到 invite邀请 purchase消费 admin后台调整 refund退还',
`amount` INT NOT NULL DEFAULT 0 COMMENT '变动量:正=增加 负=扣减',
`balance` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '变动后余额',
`remark` VARCHAR(255) DEFAULT '',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_user` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 每日签到记录(每人每天一条,防止重复签到)
CREATE TABLE `__PREFIX__sign_logs` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` INT UNSIGNED NOT NULL,
`sign_date` DATE NOT NULL,
`points` INT UNSIGNED NOT NULL DEFAULT 0,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_date` (`user_id`, `sign_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ============================================================
-- 初始示例商品(分类:周边 / 数码 / 虚拟 / 图书)
-- ============================================================
INSERT INTO `__PREFIX__products` (`name`, `price`, `stock`, `category`, `icon`, `image`, `description`) VALUES
('自由云定制帆布包', 39.00, 100, '周边', 'fa-shopping-bag', '', '印有自由云科技团队 Logo 的环保帆布包,简约实用,容量充足。'),
('自由云贴纸套装', 9.90, 500, '周边', 'fa-sticky-note', '', '多种尺寸防水贴纸,装点你的电脑、水杯与笔记本。'),
('机械键盘 87 键', 199.00, 50, '数码', 'fa-keyboard', '', '热插拔轴体,RGB 背光,打字手感顺滑,附赠拔轴器。'),
('10000mAh 移动电源', 79.00, 80, '数码', 'fa-battery-full', '', '轻薄便携,支持双向快充,可为手机平板多次续电。'),
('MC 服务器 VIP 月卡', 12.00, 9999, '虚拟', 'fa-cube', '', '自由 MC 服务器专属 VIP 月卡,享优先进入与专属昵称色。'),
('图床扩容包 10GB', 5.00, 9999, '虚拟', 'fa-images', '', '为你的公益图床账号扩容 10GB 存储空间。'),
('《从零学 PHP》实体书', 49.00, 30, '图书', 'fa-book', '', '面向中学生的 PHP 入门教程,案例丰富、通俗易懂。'),
('《网络安全小百科》', 35.00, 40, '图书', 'fa-shield-alt', '', '图文并茂的网络安全科普读物,适合青少年阅读。');
-- =======================
-- 初始商品分组(与上面商品 category 对应:周边 / 数码 / 虚拟 / 图书)
-- =======================
INSERT INTO `__PREFIX__product_groups` (`name`, `icon`, `sort_order`) VALUES
('周边', 'fa-shopping-bag', 1),
('数码', 'fa-microchip', 2),
('虚拟', 'fa-cube', 3),
('图书', 'fa-book', 4);
-- =====================
-- 初始工单部门
-- =====================
INSERT INTO `__PREFIX__ticket_departments` (`name`, `description`, `sort`) VALUES
('技术支持', '产品使用、功能咨询', 1),
('售后服务', '退换货、订单与物流问题', 2),
('财务与支付', '发票、支付异常', 3),
('其他', '其他无法归类的问题', 9);
-- =======================
-- 初始系统设置(SMTP 留空,安装后在后台「设置」中填写)
-- =======================
INSERT INTO `__PREFIX__settings` (`k`, `v`) VALUES
('smtp_host', ''),
('smtp_port', ''),
('smtp_enc', ''),
('smtp_user', ''),
('smtp_pass', ''),
('smtp_from', ''),
('smtp_fromname', '自由云商城'),
('notify_emails', ''),
('mall_about', '自由云商城是自由云科技团队旗下的公益电商,坚持「公益 · 实惠 · 用心挑选」的理念,为社区提供周边、数码、虚拟服务与图书等好物。所有收益用于支持团队的公益技术服务。'),
('points_enabled', '1'),
('points_sign', '5'),
('points_invite', '20');
-- 支付日志表(记录支付宝/微信支付流水)
CREATE TABLE `__PREFIX__pay_logs` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`order_id` VARCHAR(64) NOT NULL COMMENT '商户订单号',
`pay_method` VARCHAR(20) NOT NULL DEFAULT 'alipay' COMMENT 'alipay / wechat',
`amount` DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '支付金额',
`trade_no` VARCHAR(64) DEFAULT '' COMMENT '第三方交易号',
`status` ENUM('pending','paid','failed','refunded') NOT NULL DEFAULT 'pending',
`raw_response TEXT DEFAULT NULL COMMENT '原始回调数据(调试用)',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_order_method` (`order_id`, `pay_method`),
KEY `idx_status` (`status`),
KEY `idx_trade_no` (`trade_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 支付配置初始值
INSERT INTO `__PREFIX__settings` (`k`, `v`) VALUES
('pay_alipay_enabled', '0'),
('pay_alipay_appid', ''),
('pay_alipay_private_key',''),
('pay_alipay_public_key', ''),
('pay_alipay_sandbox', '0'),
('pay_wechat_enabled', '0'),
('pay_wechat_mch_id', ''),
('pay_wechat_api_key', ''),
('pay_wechat_appid', '');