- 新增 sys_config 表,存储应用版本号、标语、描述 - 关于小菜弹窗版本号改为从数据库动态获取 - 用户表新增 slogan 字段(个性签名) - 编辑资料页面支持修改签名 - 管理后台新增系统配置管理页面 - 更新 CLAUDE.md 文档
140 lines
6.2 KiB
SQL
140 lines
6.2 KiB
SQL
CREATE TABLE IF NOT EXISTS users (
|
||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||
openid VARCHAR(100) UNIQUE,
|
||
session_key VARCHAR(100),
|
||
nickname VARCHAR(50) DEFAULT '小菜' COMMENT '用户昵称',
|
||
avatar_url VARCHAR(500) DEFAULT '' COMMENT '头像URL',
|
||
slogan VARCHAR(100) DEFAULT '记账小能手' COMMENT '个性签名',
|
||
role ENUM('user', 'admin') DEFAULT 'user' COMMENT '角色',
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||
|
||
CREATE TABLE IF NOT EXISTS categories (
|
||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||
user_id INT DEFAULT 0 COMMENT '0=默认分类, 其他=用户自定义',
|
||
name VARCHAR(50) NOT NULL,
|
||
icon VARCHAR(50) NOT NULL,
|
||
color VARCHAR(20) NOT NULL,
|
||
type ENUM('expense', 'income') NOT NULL,
|
||
sort_order INT DEFAULT 0,
|
||
is_custom TINYINT(1) DEFAULT 0,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
UNIQUE KEY uk_user_name_type (user_id, name, type),
|
||
INDEX idx_user_custom (user_id, is_custom)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||
|
||
CREATE TABLE IF NOT EXISTS transactions (
|
||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||
user_id INT NOT NULL,
|
||
amount INT NOT NULL COMMENT '单位:分',
|
||
type ENUM('expense', 'income') NOT NULL,
|
||
category_id INT,
|
||
note VARCHAR(200),
|
||
date DATE NOT NULL,
|
||
group_id INT DEFAULT NULL COMMENT '群组标签(仅标记,群组账单通过 user_id 关联 group_members 统计)',
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
INDEX idx_user_date (user_id, date),
|
||
INDEX idx_user_type_date (user_id, type, date),
|
||
INDEX idx_group_date (group_id, date),
|
||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||
FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE SET NULL
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||
|
||
CREATE TABLE IF NOT EXISTS budgets (
|
||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||
user_id INT NOT NULL,
|
||
amount INT NOT NULL COMMENT '单位:分',
|
||
month VARCHAR(7) NOT NULL COMMENT '格式:2026-05',
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
UNIQUE KEY uk_user_month (user_id, month),
|
||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||
|
||
CREATE TABLE IF NOT EXISTS `groups` (
|
||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||
name VARCHAR(100) NOT NULL COMMENT '群组名称',
|
||
invite_code VARCHAR(10) UNIQUE NOT NULL COMMENT '邀请码',
|
||
created_by INT NOT NULL COMMENT '创建者',
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE CASCADE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||
|
||
CREATE TABLE IF NOT EXISTS group_members (
|
||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||
group_id INT NOT NULL,
|
||
user_id INT NOT NULL,
|
||
role ENUM('owner', 'member') DEFAULT 'member' COMMENT '角色',
|
||
nickname VARCHAR(50) DEFAULT '' COMMENT '群内昵称',
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
UNIQUE KEY uk_group_user (group_id, user_id),
|
||
FOREIGN KEY (group_id) REFERENCES `groups`(id) ON DELETE CASCADE,
|
||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||
|
||
CREATE TABLE IF NOT EXISTS notifications (
|
||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||
user_id INT DEFAULT NULL COMMENT 'NULL=系统公告,非NULL=个人通知',
|
||
group_id INT DEFAULT NULL COMMENT '群组通知关联',
|
||
type ENUM('system', 'group', 'personal') NOT NULL,
|
||
title VARCHAR(100) NOT NULL,
|
||
content TEXT,
|
||
is_read TINYINT(1) DEFAULT 0 COMMENT '仅用于个人通知,系统/群组公告使用 notification_reads 表',
|
||
is_pinned TINYINT(1) DEFAULT 0 COMMENT '是否置顶',
|
||
is_urgent TINYINT(1) DEFAULT 0 COMMENT '是否强提醒弹窗',
|
||
publish_at TIMESTAMP NULL COMMENT '定时发布时间(NULL=立即发布)',
|
||
expire_at TIMESTAMP NULL COMMENT '过期时间(NULL=永不过期)',
|
||
image_url VARCHAR(500) DEFAULT '' COMMENT '公告配图',
|
||
link_url VARCHAR(500) DEFAULT '' COMMENT '公告链接',
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
INDEX idx_user_read (user_id, is_read),
|
||
INDEX idx_type (type),
|
||
INDEX idx_pinned (is_pinned, created_at),
|
||
INDEX idx_expire (expire_at)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||
|
||
-- 公告已读记录表(解决系统/群组公告已读状态共享问题)
|
||
CREATE TABLE IF NOT EXISTS notification_reads (
|
||
notification_id INT NOT NULL,
|
||
user_id INT NOT NULL,
|
||
read_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
PRIMARY KEY (notification_id, user_id),
|
||
INDEX idx_user (user_id),
|
||
FOREIGN KEY (notification_id) REFERENCES notifications(id) ON DELETE CASCADE,
|
||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||
|
||
CREATE TABLE IF NOT EXISTS saved_filters (
|
||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||
user_id INT NOT NULL,
|
||
name VARCHAR(50) NOT NULL,
|
||
filters JSON NOT NULL COMMENT '筛选条件:{type, categories[], startDate, endDate, minAmount, maxAmount, keyword}',
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||
|
||
CREATE TABLE IF NOT EXISTS feedbacks (
|
||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||
user_id INT NOT NULL,
|
||
type ENUM('bug', 'feature', 'ux', 'other') NOT NULL DEFAULT 'other' COMMENT '反馈类型',
|
||
content TEXT NOT NULL COMMENT '反馈内容',
|
||
contact VARCHAR(100) DEFAULT '' COMMENT '联系方式',
|
||
status ENUM('pending', 'processed', 'ignored') DEFAULT 'pending' COMMENT '处理状态',
|
||
admin_reply TEXT DEFAULT '' COMMENT '管理员回复',
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
INDEX idx_user (user_id),
|
||
INDEX idx_status (status),
|
||
INDEX idx_created (created_at),
|
||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||
|
||
CREATE TABLE IF NOT EXISTS sys_config (
|
||
config_key VARCHAR(50) PRIMARY KEY COMMENT '配置键',
|
||
config_value TEXT NOT NULL COMMENT '配置值',
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|