feat: 新增标签体系、微信账单导入与收支记录体验优化
- 标签:新增 t_tag / t_transaction_tag 表与标签 CRUD,支持交易打标签、按标签筛选、批量添加/移除标签、导入账单默认标签,新增标签管理页 - 账单导入:新增微信支付 xlsx 解析器(WechatBillParser),支持支付宝 / 微信按类型导入;解析行保存原始完整数据(raw_data)并可在列表查看 - 收支记录:排序移至顶部并改为服务端排序(交易时间 / 金额,记忆偏好);筛选条件收纳为「更多筛选」弹层;分类筛选显示图标;一键设置支持「计入统计」;导入预览支持关键字 / 类型 / 状态 / 金额筛选 - 数据库:init.sql 新增 raw_data 字段与标签表,新增 init_tags.sql 默认标签种子 - 其他:更新 README 测试账号
This commit is contained in:
@@ -17,6 +17,9 @@ export function getTransactionPage(params: {
|
||||
minAmount?: number
|
||||
maxAmount?: number
|
||||
remark?: string
|
||||
sortField?: string
|
||||
sortOrder?: string
|
||||
tagIds?: number[]
|
||||
}) {
|
||||
return request.get('/transaction/page', { params })
|
||||
}
|
||||
@@ -30,6 +33,7 @@ export function createTransaction(data: {
|
||||
remark?: string
|
||||
transactionTime: string
|
||||
includeInStats?: boolean
|
||||
tagIds?: number[]
|
||||
}) {
|
||||
return request.post('/transaction', data)
|
||||
}
|
||||
@@ -43,6 +47,7 @@ export function updateTransaction(id: number, data: {
|
||||
remark?: string
|
||||
transactionTime: string
|
||||
includeInStats?: boolean
|
||||
tagIds?: number[]
|
||||
}) {
|
||||
return request.put(`/transaction/${id}`, data)
|
||||
}
|
||||
@@ -62,8 +67,8 @@ export function toggleRemarkHidden(id: number, remarkHidden: boolean) {
|
||||
return request.put(`/transaction/${id}/remark-hidden`, { remarkHidden })
|
||||
}
|
||||
|
||||
/** 支持的账单类型,当前仅支付宝 */
|
||||
export type BillType = 'ALIPAY'
|
||||
/** 支持的账单类型,当前支持支付宝与微信 */
|
||||
export type BillType = 'ALIPAY' | 'WECHAT'
|
||||
|
||||
/** 账单解析结果行 */
|
||||
export interface ParsedBillRow {
|
||||
@@ -80,6 +85,7 @@ export interface ParsedBillRow {
|
||||
importable: boolean
|
||||
selected: boolean
|
||||
duplicate: boolean
|
||||
rawData: string | null
|
||||
error: string | null
|
||||
}
|
||||
|
||||
@@ -92,6 +98,7 @@ export interface BillImportItem {
|
||||
counterparty: string
|
||||
product: string
|
||||
includeInStats: boolean
|
||||
rawData: string | null
|
||||
}
|
||||
|
||||
/** 解析账单文件(不落库),返回预览数据 */
|
||||
@@ -117,10 +124,20 @@ export function batchUpdateCategory(data: {
|
||||
ids: number[]
|
||||
expenseCategoryId?: number | null
|
||||
incomeCategoryId?: number | null
|
||||
includeInStats?: boolean | null
|
||||
}) {
|
||||
return request.put('/transaction/batch-category', data)
|
||||
}
|
||||
|
||||
/** 批量给交易记录添加/移除标签 */
|
||||
export function batchTags(data: {
|
||||
ids: number[]
|
||||
addTagIds?: number[]
|
||||
removeTagIds?: number[]
|
||||
}) {
|
||||
return request.put('/transaction/batch-tags', data)
|
||||
}
|
||||
|
||||
/** 导出交易记录为 Excel 文件,支持按条件筛选 */
|
||||
export function exportTransaction(params: {
|
||||
types?: string[]
|
||||
@@ -133,6 +150,9 @@ export function exportTransaction(params: {
|
||||
minAmount?: number
|
||||
maxAmount?: number
|
||||
remark?: string
|
||||
sortField?: string
|
||||
sortOrder?: string
|
||||
tagIds?: number[]
|
||||
}) {
|
||||
const userStore = useUserStore()
|
||||
return axios.get('/api/transaction/export', {
|
||||
|
||||
Reference in New Issue
Block a user