feat: 用户级偏好配置与外观设置,枚举统一抽取与账单类型后端下发

- 新增用户偏好表 t_user_preference 与进程内缓存,账单来源统计默认值由全局改为按用户存储(/api/setting)
- 新增外观设置:不计入统计记录支持删除线与灰色标签两种展示样式
- 抽取 ChannelType / TransactionType / StatisticsScope 枚举,替换各处硬编码的渠道、类型与统计口径
- BillType 内聚各来源扩展名,新增 /transaction/import/types 接口,前端改为按后端下发渲染
- 仪表盘趋势图支持点击柱子跳转收支记录并带入筛选条件
- 布局内容区按路由记忆滚动位置;已登录访问登录/注册页自动跳转
This commit is contained in:
2026-09-21 10:51:15 +08:00
parent 2976b85967
commit 1f520f4376
46 changed files with 1565 additions and 284 deletions
-12
View File
@@ -1,12 +0,0 @@
// 应用级配置接口:按账单来源的「计入统计」默认值
import request from './request'
/** 查询按账单来源的「计入统计」默认值(key 为账单来源编码) */
export function getBillSourceIncludeInStats() {
return request.get('/app/bill-source-include-in-stats')
}
/** 更新按账单来源的「计入统计」默认值 */
export function updateBillSourceIncludeInStats(defaults: Record<string, boolean>) {
return request.put('/app/bill-source-include-in-stats', { defaults })
}
+22
View File
@@ -0,0 +1,22 @@
// 用户设置接口:当前登录用户的账单来源统计默认值与「不计入统计」展示样式
import request from './request'
/** 查询当前用户按账单来源的「计入统计」默认值(key 为账单来源编码) */
export function getBillSourceIncludeInStats() {
return request.get('/setting/bill-source-include-in-stats')
}
/** 更新当前用户按账单来源的「计入统计」默认值 */
export function updateBillSourceIncludeInStats(defaults: Record<string, boolean>) {
return request.put('/setting/bill-source-include-in-stats', { defaults })
}
/** 查询当前用户「不计入统计」记录的展示样式(strikethrough / muted) */
export function getExcludedDisplayStyle() {
return request.get('/setting/excluded-display-style')
}
/** 更新当前用户「不计入统计」记录的展示样式 */
export function updateExcludedDisplayStyle(style: string) {
return request.put('/setting/excluded-display-style', { style })
}
+13 -2
View File
@@ -77,8 +77,19 @@ export function toggleRemarkHidden(id: number, remarkHidden: boolean) {
return request.put(`/transaction/${id}/remark-hidden`, { remarkHidden })
}
/** 支持的账单类型,当前支持支付宝、微信、美团、招商银行与交通银行 */
export type BillType = 'ALIPAY' | 'WECHAT' | 'MEITUAN' | 'CMB' | 'BOCOM'
/** 支持的账单类型编码(由后端 /transaction/import/types 下发,此处为已知值提示) */
export type BillType = string
/** 账单类型选项(后端下发),extensions 为该来源允许的账单文件扩展名 */
export interface BillTypeOption {
code: string
extensions: string[]
}
/** 获取系统支持的账单类型及允许的文件扩展名 */
export function getBillTypes() {
return request.get('/transaction/import/types')
}
/** 账单解析结果行 */
export interface ParsedBillRow {