-- 酷冰甲降温服官网 MySQL 结构 SET NAMES utf8mb4; CREATE TABLE IF NOT EXISTS `categories` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(120) NOT NULL, `slug` VARCHAR(120) DEFAULT '', `icon` VARCHAR(20) DEFAULT '', `description` TEXT, `sort_order` INT DEFAULT 0, `status` TINYINT DEFAULT 1, `layout` TEXT, `mode` VARCHAR(16) NOT NULL DEFAULT 'fixed', KEY idx_categories_slug (slug) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `products` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `category_id` INT DEFAULT 0, `name` VARCHAR(200) NOT NULL, `slug` VARCHAR(200) DEFAULT '', `cover` VARCHAR(255) DEFAULT '', `summary` TEXT, `description` TEXT, `price` DECIMAL(10,2) DEFAULT 0, `specs` TEXT, `gallery` TEXT, `tags` VARCHAR(255) DEFAULT '', `sort_order` INT DEFAULT 0, `status` TINYINT DEFAULT 1, `created_at` VARCHAR(20) DEFAULT '', `layout` TEXT, `mode` VARCHAR(16) NOT NULL DEFAULT 'fixed', KEY idx_products_category_id (category_id), KEY idx_products_slug (slug), KEY idx_products_status (status) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `news` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `title` VARCHAR(200) NOT NULL, `slug` VARCHAR(200) DEFAULT '', `cover` VARCHAR(255) DEFAULT '', `summary` TEXT, `content` TEXT, `author` VARCHAR(60) DEFAULT '', `published_at` VARCHAR(20) DEFAULT '', `status` TINYINT DEFAULT 1, `views` INT DEFAULT 0, `layout` TEXT, `mode` VARCHAR(16) NOT NULL DEFAULT 'fixed', KEY idx_news_slug (slug), KEY idx_news_status (status) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `cases` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `title` VARCHAR(200) NOT NULL, `slug` VARCHAR(200) DEFAULT '', `customer` VARCHAR(120) DEFAULT '', `industry` VARCHAR(60) DEFAULT '', `cover` VARCHAR(255) DEFAULT '', `summary` TEXT, `content` TEXT, `published_at` VARCHAR(20) DEFAULT '', `sort_order` INT DEFAULT 0, `status` TINYINT DEFAULT 1, `views` INT DEFAULT 0, `layout` TEXT, `mode` VARCHAR(16) NOT NULL DEFAULT 'fixed', KEY idx_cases_slug (slug), KEY idx_cases_status (status) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `pages` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `slug` VARCHAR(120) DEFAULT '', `title` VARCHAR(200) DEFAULT '', `content` TEXT, `layout` TEXT, `mode` VARCHAR(16) NOT NULL DEFAULT 'fixed', `updated_at` VARCHAR(20) DEFAULT '', KEY idx_pages_slug (slug) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `banners` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `title` VARCHAR(200) DEFAULT '', `subtitle` VARCHAR(255) DEFAULT '', `image` VARCHAR(255) DEFAULT '', `link` VARCHAR(255) DEFAULT '', `sort_order` INT DEFAULT 0, `status` TINYINT DEFAULT 1, KEY idx_banners_status (status), KEY idx_banners_sort (sort_order) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `admin_users` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `username` VARCHAR(60) NOT NULL, `password` VARCHAR(255) NOT NULL, `name` VARCHAR(60) DEFAULT '', `role` VARCHAR(20) DEFAULT 'user', `crm_role` VARCHAR(20) DEFAULT 'none', `psi_role` VARCHAR(20) DEFAULT 'none', `crm_perms` TEXT, `psi_perms` TEXT, `status` TINYINT DEFAULT 1, `created_at` VARCHAR(20) DEFAULT '', KEY idx_admin_users_role (role) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; /* ===================== CRM 客户管理系统 ===================== */ CREATE TABLE IF NOT EXISTS `crm_customers` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(120) NOT NULL, `company` VARCHAR(160) DEFAULT '', `contact` VARCHAR(60) DEFAULT '', `phone` VARCHAR(40) DEFAULT '', `email` VARCHAR(120) DEFAULT '', `country` VARCHAR(60) DEFAULT '', `type` VARCHAR(20) DEFAULT 'brand', `source` VARCHAR(40) DEFAULT '', `level` VARCHAR(20) DEFAULT 'C', `customer_no` VARCHAR(40) DEFAULT '', `industry` VARCHAR(20) DEFAULT '', `region` VARCHAR(40) DEFAULT '', `credit_limit` DECIMAL(12,2) DEFAULT 0, `status` VARCHAR(20) DEFAULT 'lead', `remark` TEXT, `owner` VARCHAR(60) DEFAULT '', `created_at` VARCHAR(20) DEFAULT '', KEY idx_customers_status (status) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `crm_contacts` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `customer_id` INT NOT NULL, `name` VARCHAR(80) NOT NULL, `title` VARCHAR(80) DEFAULT '', `phone` VARCHAR(60) DEFAULT '', `email` VARCHAR(120) DEFAULT '', `wechat` VARCHAR(60) DEFAULT '', `is_primary` TINYINT DEFAULT 0, `remark` TEXT, `created_at` VARCHAR(20) DEFAULT '', KEY idx_contacts_customer_id (customer_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `crm_leads` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `customer_id` INT DEFAULT 0, `title` VARCHAR(200) NOT NULL, `amount` DECIMAL(12,2) DEFAULT 0, `stage` VARCHAR(20) DEFAULT 'new', `expected_close` VARCHAR(20) DEFAULT '', `source` VARCHAR(30) DEFAULT '', `probability` TINYINT DEFAULT 0, `owner` VARCHAR(60) DEFAULT '', `remark` TEXT, `created_at` VARCHAR(20) DEFAULT '', KEY idx_leads_customer_id (customer_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `crm_followups` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `customer_id` INT DEFAULT 0, `lead_id` INT DEFAULT 0, `content` TEXT, `next_at` VARCHAR(20) DEFAULT '', `way` VARCHAR(20) DEFAULT '', `result` VARCHAR(60) DEFAULT '', `owner` VARCHAR(60) DEFAULT '', `created_at` VARCHAR(20) DEFAULT '', KEY idx_followups_customer_id (customer_id), KEY idx_followups_lead_id (lead_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; /* ===================== 进销存 PSI 系统 ===================== */ CREATE TABLE IF NOT EXISTS `psi_materials` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `code` VARCHAR(40) DEFAULT '', `name` VARCHAR(160) NOT NULL, `spec` VARCHAR(120) DEFAULT '', `unit` VARCHAR(10) DEFAULT '个', `category` VARCHAR(40) DEFAULT '', `composition` VARCHAR(60) DEFAULT '', `weight_gsm` DECIMAL(8,2) DEFAULT 0, `width_cm` DECIMAL(8,2) DEFAULT 0, `color` VARCHAR(40) DEFAULT '', `batch_no` VARCHAR(40) DEFAULT '', `stock` DECIMAL(12,2) DEFAULT 0, `price` DECIMAL(10,2) DEFAULT 0, `supplier_id` INT DEFAULT 0, `remark` TEXT, `created_at` VARCHAR(20) DEFAULT '', KEY idx_materials_supplier_id (supplier_id), KEY idx_materials_code (code) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `psi_products` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `code` VARCHAR(40) DEFAULT '', `name` VARCHAR(160) NOT NULL, `spec` VARCHAR(120) DEFAULT '', `unit` VARCHAR(10) DEFAULT '件', `category` VARCHAR(40) DEFAULT '', `style_no` VARCHAR(40) DEFAULT '', `color` VARCHAR(40) DEFAULT '', `size_run` VARCHAR(60) DEFAULT '', `season` VARCHAR(20) DEFAULT '', `year` VARCHAR(10) DEFAULT '', `stock` DECIMAL(12,2) DEFAULT 0, `cost` DECIMAL(10,2) DEFAULT 0, `price` DECIMAL(10,2) DEFAULT 0, `remark` TEXT, `created_at` VARCHAR(20) DEFAULT '', KEY idx_psi_products_code (code) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `psi_suppliers` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(160) NOT NULL, `contact` VARCHAR(60) DEFAULT '', `phone` VARCHAR(40) DEFAULT '', `country` VARCHAR(60) DEFAULT '', `type` VARCHAR(20) DEFAULT '', `grade` VARCHAR(20) DEFAULT '', `ontime_rate` DECIMAL(5,2) DEFAULT 0, `qc_rate` DECIMAL(5,2) DEFAULT 0, `remark` TEXT, `created_at` VARCHAR(20) DEFAULT '' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `psi_purchases` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `order_no` VARCHAR(40) NOT NULL, `supplier_id` INT DEFAULT 0, `item_type` VARCHAR(10) DEFAULT 'material', `item_id` INT DEFAULT 0, `qty` DECIMAL(12,2) DEFAULT 0, `price` DECIMAL(10,2) DEFAULT 0, `amount` DECIMAL(12,2) DEFAULT 0, `status` VARCHAR(20) DEFAULT 'pending', `batch_no` VARCHAR(40) DEFAULT '', `expected_at` VARCHAR(20) DEFAULT '', `remark` TEXT, `created_at` VARCHAR(20) DEFAULT '', KEY idx_purchases_supplier_id (supplier_id), KEY idx_purchases_order_no (order_no) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `psi_sales` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `order_no` VARCHAR(40) NOT NULL, `customer` VARCHAR(160) DEFAULT '', `channel` VARCHAR(20) DEFAULT 'domestic', `item_id` INT DEFAULT 0, `qty` DECIMAL(12,2) DEFAULT 0, `price` DECIMAL(10,2) DEFAULT 0, `amount` DECIMAL(12,2) DEFAULT 0, `status` VARCHAR(20) DEFAULT 'pending', `region` VARCHAR(40) DEFAULT '', `batch_no` VARCHAR(40) DEFAULT '', `remark` TEXT, `created_at` VARCHAR(20) DEFAULT '', KEY idx_sales_order_no (order_no) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `psi_stock_moves` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `item_type` VARCHAR(10) DEFAULT 'product', `item_id` INT DEFAULT 0, `direction` VARCHAR(10) DEFAULT 'in', `qty` DECIMAL(12,2) DEFAULT 0, `ref_no` VARCHAR(40) DEFAULT '', `batch_no` VARCHAR(40) DEFAULT '', `remark` TEXT, `created_at` VARCHAR(20) DEFAULT '', KEY idx_stock_moves_item (item_type, item_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `settings` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `skey` VARCHAR(120) NOT NULL, `sval` TEXT, `sgroup` VARCHAR(40) DEFAULT 'site', KEY idx_settings_sgroup (sgroup) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `orders` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `order_no` VARCHAR(40) NOT NULL, `product_id` INT DEFAULT 0, `product_name` VARCHAR(200) DEFAULT '', `customer_name` VARCHAR(120) DEFAULT '', `phone` VARCHAR(40) DEFAULT '', `email` VARCHAR(120) DEFAULT '', `qty` INT DEFAULT 1, `amount` DECIMAL(10,2) DEFAULT 0, `channel` VARCHAR(20) DEFAULT '', `status` VARCHAR(20) DEFAULT 'pending', `gateway_trade_no` VARCHAR(120) DEFAULT '', `paid_at` VARCHAR(20) DEFAULT '', `created_at` VARCHAR(20) DEFAULT '', KEY idx_orders_order_no (order_no), KEY idx_orders_status (status), KEY idx_orders_product_id (product_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `payments` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `order_id` INT DEFAULT 0, `order_no` VARCHAR(40) NOT NULL, `channel` VARCHAR(20) DEFAULT '', `amount` DECIMAL(10,2) DEFAULT 0, `trade_no` VARCHAR(120) DEFAULT '', `status` VARCHAR(20) DEFAULT '', `created_at` VARCHAR(20) DEFAULT '', `paid_at` VARCHAR(20) DEFAULT '', KEY idx_payments_order_id (order_id), KEY idx_payments_order_no (order_no) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `psi_events` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `sys` VARCHAR(20) NOT NULL DEFAULT 'psi', `type` VARCHAR(40) NOT NULL DEFAULT '', `level` VARCHAR(20) NOT NULL DEFAULT 'urgent', `title` VARCHAR(255) NOT NULL DEFAULT '', `body` TEXT, `url` VARCHAR(255) NOT NULL DEFAULT '', `ref_no` VARCHAR(64) NOT NULL DEFAULT '', `recipients` TEXT, `channels` VARCHAR(255) NOT NULL DEFAULT '["inapp"]', `read_by` TEXT, `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, KEY idx_events_sys (sys), KEY idx_events_level (level) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;