feat(mail): 支持邮件标签与富文本写信

- 新增标签数据结构、接口与路由,支持创建/删除邮件标签、按标签筛选邮件和查看星标邮件。
- 邮件详情与列表补充标签展示,发送/移动/删除/已读等操作同步刷新相关数据。
- 前端重构邮件页,加入标签侧栏、标签管理弹层,并将写信编辑器升级为 Markdown 富文本。
- 顺带优化登录态超时处理与部分导航入口,调整前端依赖版本。
This commit is contained in:
LanQin_
2026-06-15 17:37:40 +08:00
parent 1f964eefe2
commit 96822486af
14 changed files with 1398 additions and 1253 deletions
+17
View File
@@ -253,9 +253,26 @@ func (a *App) migrate(ctx context.Context) error {
updated_at TEXT NOT NULL,
UNIQUE(user_id, mailbox_id, email)
)`,
`CREATE TABLE IF NOT EXISTS mail_labels (
id TEXT PRIMARY KEY,
mailbox_id TEXT NOT NULL REFERENCES mailboxes(id) ON DELETE CASCADE,
name TEXT NOT NULL,
color TEXT NOT NULL DEFAULT '#64748b',
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL,
UNIQUE(mailbox_id, name)
)`,
`CREATE TABLE IF NOT EXISTS message_labels (
message_id TEXT NOT NULL REFERENCES messages(id) ON DELETE CASCADE,
label_id TEXT NOT NULL REFERENCES mail_labels(id) ON DELETE CASCADE,
created_at TEXT NOT NULL,
PRIMARY KEY(message_id, label_id)
)`,
`CREATE INDEX IF NOT EXISTS idx_contacts_user ON contacts(user_id, email)`,
`CREATE INDEX IF NOT EXISTS idx_mail_rules_user_mailbox ON mail_rules(user_id, mailbox_id, enabled)`,
`CREATE INDEX IF NOT EXISTS idx_blocked_senders_user_mailbox ON blocked_senders(user_id, mailbox_id, email)`,
`CREATE INDEX IF NOT EXISTS idx_mail_labels_mailbox ON mail_labels(mailbox_id, name)`,
`CREATE INDEX IF NOT EXISTS idx_message_labels_label ON message_labels(label_id, message_id)`,
}
for _, stmt := range stmts {
if _, err := a.db.ExecContext(ctx, stmt); err != nil {