-- ============================================================ -- 08_contact_form.sql -- 联系表单:全局配置、字段配置、提交记录 -- 对应 proposal.md 第 9 节 -- ============================================================ -- ----------------------------------------------------------- -- 9.1 表单全局配置(单行) -- ----------------------------------------------------------- CREATE TABLE IF NOT EXISTS `www_form_settings` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `recipient_email` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '通知接收邮箱', `success_message_zh` VARCHAR(300) NOT NULL DEFAULT '感谢您的留言,我们会尽快回复!' COMMENT '提交成功提示(中文)', `success_message_en` VARCHAR(300) NOT NULL DEFAULT 'Thank you for your message. We will get back to you soon!' COMMENT '提交成功提示(英文)', `error_message_zh` VARCHAR(300) NOT NULL DEFAULT '提交失败,请稍后重试。' COMMENT '提交失败提示(中文)', `error_message_en` VARCHAR(300) NOT NULL DEFAULT 'Submission failed. Please try again later.' COMMENT '提交失败提示(英文)', `cooldown_seconds` INT NOT NULL DEFAULT 60 COMMENT '防重复提交间隔(秒)', `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='表单全局配置(单行)'; -- ----------------------------------------------------------- -- 9.2 表单字段配置 -- ----------------------------------------------------------- CREATE TABLE IF NOT EXISTS `www_form_fields` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `name_zh` VARCHAR(50) NOT NULL COMMENT '字段名称(中文)', `name_en` VARCHAR(50) NOT NULL COMMENT '字段名称(英文)', `field_type` VARCHAR(20) NOT NULL COMMENT '字段类型: text / textarea / email / phone / select', `is_required` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否必填', `placeholder_zh` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '占位文本(中文)', `placeholder_en` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '占位文本(英文)', `options_json` JSON DEFAULT NULL COMMENT '下拉选项 JSON: [{label_zh, label_en, value}](仅 select 类型)', `sort_order` INT NOT NULL DEFAULT 0 COMMENT '字段排序', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='表单字段配置'; -- ----------------------------------------------------------- -- 预置默认表单字段 -- ----------------------------------------------------------- INSERT INTO `www_form_fields` (`name_zh`, `name_en`, `field_type`, `is_required`, `placeholder_zh`, `placeholder_en`, `sort_order`) VALUES ('姓名', 'Name', 'text', 1, '请输入您的姓名', 'Your name', 1), ('邮箱', 'Email', 'email', 1, '请输入您的邮箱', 'Your email', 2), ('电话', 'Phone', 'phone', 0, '请输入您的电话', 'Your phone', 3), ('咨询内容', 'Message', 'textarea', 1, '请输入您的咨询内容', 'Your message', 4) ON DUPLICATE KEY UPDATE `name_zh` = VALUES(`name_zh`); -- ----------------------------------------------------------- -- 表单提交记录 -- ----------------------------------------------------------- CREATE TABLE IF NOT EXISTS `www_form_submissions` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `form_data` JSON NOT NULL COMMENT '提交数据 JSON: {field_name: value}', `visitor_ip` VARCHAR(45) NOT NULL DEFAULT '' COMMENT '访客 IP', `user_agent` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '浏览器 UA', `is_read` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否已读(admin 端标记)', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_created` (`created_at`), KEY `idx_read` (`is_read`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='表单提交记录';