2025-12-25 11:20:56 +08:00
|
|
|
|
import request from './request'
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 交易记录相关 API
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取交易记录列表(分页)
|
|
|
|
|
|
* @param {Object} params - 查询参数
|
|
|
|
|
|
* @param {number} [params.latestId] - 最后一条记录的ID,用于游标分页
|
|
|
|
|
|
* @param {string} [params.searchKeyword] - 搜索关键词
|
|
|
|
|
|
* @returns {Promise<{success: boolean, data: Array, total: number, lastId: number}>}
|
|
|
|
|
|
*/
|
|
|
|
|
|
export const getTransactionList = (params = {}) => {
|
|
|
|
|
|
return request({
|
|
|
|
|
|
url: '/TransactionRecord/GetList',
|
|
|
|
|
|
method: 'get',
|
|
|
|
|
|
params
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 根据ID获取交易记录详情
|
|
|
|
|
|
* @param {number} id - 交易记录ID
|
|
|
|
|
|
* @returns {Promise<{success: boolean, data: Object}>}
|
|
|
|
|
|
*/
|
|
|
|
|
|
export const getTransactionDetail = (id) => {
|
|
|
|
|
|
return request({
|
|
|
|
|
|
url: `/TransactionRecord/GetById/${id}`,
|
|
|
|
|
|
method: 'get'
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 创建交易记录
|
|
|
|
|
|
* @param {Object} data - 交易记录数据
|
|
|
|
|
|
* @param {string} data.card - 卡号
|
|
|
|
|
|
* @param {string} data.occurredAt - 交易时间
|
|
|
|
|
|
* @param {string} data.reason - 交易摘要
|
|
|
|
|
|
* @param {number} data.amount - 交易金额
|
|
|
|
|
|
* @param {number} data.balance - 交易后余额
|
|
|
|
|
|
* @param {number} data.type - 交易类型 (0:支出, 1:收入, 2:不计入收支)
|
|
|
|
|
|
* @param {string} data.classify - 交易分类
|
|
|
|
|
|
* @param {string} data.subClassify - 交易子分类
|
|
|
|
|
|
* @returns {Promise<{success: boolean}>}
|
|
|
|
|
|
*/
|
|
|
|
|
|
export const createTransaction = (data) => {
|
|
|
|
|
|
return request({
|
|
|
|
|
|
url: '/TransactionRecord/Create',
|
|
|
|
|
|
method: 'post',
|
|
|
|
|
|
data
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 更新交易记录
|
|
|
|
|
|
* @param {Object} data - 交易记录数据
|
|
|
|
|
|
* @param {number} data.id - 交易记录ID
|
|
|
|
|
|
* @param {number} data.amount - 交易金额
|
|
|
|
|
|
* @param {number} data.balance - 交易后余额
|
|
|
|
|
|
* @param {number} data.type - 交易类型 (0:支出, 1:收入, 2:不计入收支)
|
|
|
|
|
|
* @param {string} data.classify - 交易分类
|
|
|
|
|
|
* @param {string} data.subClassify - 交易子分类
|
|
|
|
|
|
* @returns {Promise<{success: boolean}>}
|
|
|
|
|
|
*/
|
|
|
|
|
|
export const updateTransaction = (data) => {
|
|
|
|
|
|
return request({
|
|
|
|
|
|
url: '/TransactionRecord/Update',
|
|
|
|
|
|
method: 'post',
|
|
|
|
|
|
data
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 删除交易记录
|
|
|
|
|
|
* @param {number} id - 交易记录ID
|
|
|
|
|
|
* @returns {Promise<{success: boolean}>}
|
|
|
|
|
|
*/
|
|
|
|
|
|
export const deleteTransaction = (id) => {
|
|
|
|
|
|
return request({
|
|
|
|
|
|
url: `/TransactionRecord/DeleteById`,
|
|
|
|
|
|
method: 'post',
|
|
|
|
|
|
params: { id }
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取指定日期的交易记录
|
|
|
|
|
|
* @param {string} date - 日期字符串 (格式: yyyy-MM-dd)
|
|
|
|
|
|
* @returns {Promise<{success: boolean, data: Array}>}
|
|
|
|
|
|
*/
|
|
|
|
|
|
export const getTransactionsByDate = (date) => {
|
|
|
|
|
|
return request({
|
|
|
|
|
|
url: '/TransactionRecord/GetByDate',
|
|
|
|
|
|
method: 'get',
|
|
|
|
|
|
params: { date }
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 注意:分类相关的API已迁移到 transactionCategory.js
|
|
|
|
|
|
// 请使用 getCategoryTree 等新接口
|
2025-12-25 15:40:50 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取未分类的账单数量
|
|
|
|
|
|
* @returns {Promise<{success: boolean, data: number}>}
|
|
|
|
|
|
*/
|
|
|
|
|
|
export const getUnclassifiedCount = () => {
|
|
|
|
|
|
return request({
|
|
|
|
|
|
url: '/TransactionRecord/GetUnclassifiedCount',
|
|
|
|
|
|
method: 'get'
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取未分类的账单列表
|
|
|
|
|
|
* @param {number} pageSize - 每页数量,默认10条
|
|
|
|
|
|
* @returns {Promise<{success: boolean, data: Array}>}
|
|
|
|
|
|
*/
|
|
|
|
|
|
export const getUnclassified = (pageSize = 10) => {
|
|
|
|
|
|
return request({
|
|
|
|
|
|
url: '/TransactionRecord/GetUnclassified',
|
|
|
|
|
|
method: 'get',
|
|
|
|
|
|
params: { pageSize }
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 智能分类 - 使用AI对账单进行分类(EventSource流式响应)
|
|
|
|
|
|
* @param {number} pageSize - 每次分类的账单数量
|
|
|
|
|
|
* @returns {EventSource} 返回EventSource对象用于接收流式数据
|
|
|
|
|
|
*/
|
|
|
|
|
|
export const smartClassify = (pageSize = 10) => {
|
|
|
|
|
|
const baseURL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:5000'
|
|
|
|
|
|
const token = localStorage.getItem('token')
|
|
|
|
|
|
const url = `${baseURL}/api/TransactionRecord/SmartClassify`
|
|
|
|
|
|
|
|
|
|
|
|
return fetch(url, {
|
|
|
|
|
|
method: 'POST',
|
|
|
|
|
|
headers: {
|
|
|
|
|
|
'Content-Type': 'application/json',
|
|
|
|
|
|
'Authorization': `Bearer ${token}`
|
|
|
|
|
|
},
|
|
|
|
|
|
body: JSON.stringify({ pageSize })
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 批量更新账单分类
|
|
|
|
|
|
* @param {Array} items - 要更新的账单分类数据数组
|
|
|
|
|
|
* @param {number} items[].id - 账单ID
|
|
|
|
|
|
* @param {string} items[].classify - 一级分类
|
|
|
|
|
|
* @param {string} items[].subClassify - 子分类
|
|
|
|
|
|
* @returns {Promise<{success: boolean, message: string}>}
|
|
|
|
|
|
*/
|
|
|
|
|
|
export const batchUpdateClassify = (items) => {
|
|
|
|
|
|
return request({
|
|
|
|
|
|
url: '/TransactionRecord/BatchUpdateClassify',
|
|
|
|
|
|
method: 'post',
|
|
|
|
|
|
data: items
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|