feat: 新增标签体系、微信账单导入与收支记录体验优化
- 标签:新增 t_tag / t_transaction_tag 表与标签 CRUD,支持交易打标签、按标签筛选、批量添加/移除标签、导入账单默认标签,新增标签管理页 - 账单导入:新增微信支付 xlsx 解析器(WechatBillParser),支持支付宝 / 微信按类型导入;解析行保存原始完整数据(raw_data)并可在列表查看 - 收支记录:排序移至顶部并改为服务端排序(交易时间 / 金额,记忆偏好);筛选条件收纳为「更多筛选」弹层;分类筛选显示图标;一键设置支持「计入统计」;导入预览支持关键字 / 类型 / 状态 / 金额筛选 - 数据库:init.sql 新增 raw_data 字段与标签表,新增 init_tags.sql 默认标签种子 - 其他:更新 README 测试账号
This commit is contained in:
@@ -34,6 +34,7 @@ CREATE TABLE IF NOT EXISTS t_transaction (
|
||||
external_no VARCHAR(64) COMMENT '外部账单交易号,用于账单导入去重',
|
||||
transaction_time DATETIME NOT NULL COMMENT '交易发生时间',
|
||||
include_in_stats TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否计入统计:1-计入,0-不计入(如借款、转账等)',
|
||||
raw_data JSON COMMENT '账单导入的原始完整数据(结构化JSON),手动记录为空',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
INDEX idx_user_id (user_id) COMMENT '用户ID索引',
|
||||
@@ -42,3 +43,25 @@ CREATE TABLE IF NOT EXISTS t_transaction (
|
||||
INDEX idx_user_time (user_id, transaction_time) COMMENT '用户ID+交易时间联合索引',
|
||||
UNIQUE INDEX uk_user_external (user_id, external_no) COMMENT '用户ID+外部交易号唯一索引,用于导入去重'
|
||||
);
|
||||
|
||||
-- 标签表:存储用户自定义标签,用于给交易打标签
|
||||
CREATE TABLE IF NOT EXISTS t_tag (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '标签ID,主键自增',
|
||||
user_id BIGINT NOT NULL COMMENT '所属用户ID',
|
||||
name VARCHAR(50) NOT NULL COMMENT '标签名称',
|
||||
color VARCHAR(20) COMMENT '标签颜色,用于前端展示',
|
||||
sort_order INT NOT NULL DEFAULT 0 COMMENT '排序序号,数值越小越靠前',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
INDEX idx_user_id (user_id) COMMENT '用户ID索引',
|
||||
UNIQUE INDEX uk_user_name (user_id, name) COMMENT '用户ID+标签名唯一索引'
|
||||
);
|
||||
|
||||
-- 交易标签关联表:交易与标签的多对多关系
|
||||
CREATE TABLE IF NOT EXISTS t_transaction_tag (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '关联ID,主键自增',
|
||||
transaction_id BIGINT NOT NULL COMMENT '交易记录ID',
|
||||
tag_id BIGINT NOT NULL COMMENT '标签ID',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
UNIQUE INDEX uk_transaction_tag (transaction_id, tag_id) COMMENT '交易+标签唯一索引',
|
||||
INDEX idx_tag_id (tag_id) COMMENT '标签ID索引'
|
||||
);
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
-- 初始化默认标签种子脚本
|
||||
-- 用途:为现有用户补齐一套通用标签
|
||||
-- 特性:幂等,按「用户ID + 标签名称」去重,可重复执行
|
||||
-- 编码:utf8mb4
|
||||
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_default_tag (
|
||||
name VARCHAR(50) NOT NULL,
|
||||
color VARCHAR(20),
|
||||
sort_order INT NOT NULL
|
||||
);
|
||||
|
||||
DELETE FROM tmp_default_tag;
|
||||
|
||||
INSERT INTO tmp_default_tag (name, color, sort_order) VALUES
|
||||
('报销', '#2080f0', 10),
|
||||
('待报销', '#f0a020', 20),
|
||||
('旅行', '#18a058', 30),
|
||||
('家庭', '#8a2be2', 40),
|
||||
('工作', '#d03050', 50),
|
||||
('学习', '#0ea5e9', 60),
|
||||
('医疗', '#e11d48', 70),
|
||||
('大额消费', '#f97316', 80),
|
||||
('订阅', '#7c3aed', 90),
|
||||
('礼物', '#ec4899', 100),
|
||||
('投资', '#16a34a', 110),
|
||||
('宠物', '#a16207', 120),
|
||||
('电影', '#14b8a6', 130);
|
||||
|
||||
INSERT INTO t_tag (user_id, name, color, sort_order)
|
||||
SELECT u.id, d.name, d.color, d.sort_order
|
||||
FROM t_user u
|
||||
JOIN tmp_default_tag d
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM t_tag t
|
||||
WHERE t.user_id = u.id AND t.name = d.name
|
||||
);
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_default_tag;
|
||||
Reference in New Issue
Block a user