Files
EmailBill/Web/src/api/transactionRecord.js
孙诚 e00b5cffb7 feat: Refactor transaction handling and add new features
- Updated ReasonGroupList.vue to modify classify button behavior for adding new classifications.
- Refactored TransactionDetail.vue to integrate PopupContainer and enhance transaction detail display.
- Improved TransactionDetailDialog.vue with updated classify button functionality.
- Simplified BalanceView.vue by removing manual entry button.
- Enhanced PeriodicRecord.vue to update classify button interactions.
- Removed unused add transaction dialog from TransactionsRecord.vue.
- Added new API endpoints in TransactionRecordController for parsing transactions and handling offsets.
- Introduced BillForm.vue and ManualBillAdd.vue for streamlined bill entry.
- Implemented OneLineBillAdd.vue for intelligent transaction parsing.
- Created GlobalAddBill.vue for a unified bill addition interface.
2026-01-01 14:43:43 +08:00

241 lines
6.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 - 交易分类
* @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 - 交易分类
* @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
// 请使用 getCategoryList 等新接口
/**
* 获取未分类的账单数量
* @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 {Array<number>} transactionIds - 要分类的账单ID列表
* @returns {Promise<Response>} 返回响应对象用于接收流式数据
*/
export const smartClassify = (transactionIds = []) => {
const baseURL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:5071/api'
const token = localStorage.getItem('token')
const url = `${baseURL}/TransactionRecord/SmartClassify`
return fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify({ transactionIds })
})
}
/**
* 批量更新账单分类
* @param {Array} items - 要更新的账单分类数据数组
* @param {number} items[].id - 账单ID
* @param {string} items[].classify - 分类
* @returns {Promise<{success: boolean, message: string}>}
*/
export const batchUpdateClassify = (items) => {
return request({
url: '/TransactionRecord/BatchUpdateClassify',
method: 'post',
data: items
})
}
/**
* 获取按交易摘要分组的统计信息(支持分页)
* @param {number} pageIndex - 页码从1开始
* @param {number} pageSize - 每页数量默认20
* @returns {Promise<{success: boolean, data: Array, total: number}>}
*/
export const getReasonGroups = (pageIndex = 1, pageSize = 20) => {
return request({
url: '/TransactionRecord/GetReasonGroups',
method: 'get',
params: { pageIndex, pageSize }
})
}
/**
* 按摘要批量更新分类
* @param {Object} data - 批量更新数据
* @param {string} data.reason - 交易摘要
* @param {number} data.type - 交易类型 (0:支出, 1:收入, 2:不计入收支)
* @param {string} data.classify - 分类名称
* @returns {Promise<{success: boolean, data: number, message: string}>}
*/
export const batchUpdateByReason = (data) => {
return request({
url: '/TransactionRecord/BatchUpdateByReason',
method: 'post',
data
})
}
/**
* NLP分析 - 根据用户自然语言输入查询交易记录并预设分类
* @param {string} userInput - 用户的自然语言输入
* @returns {Promise<{success: boolean, data: Object}>}
*/
export const nlpAnalysis = (userInput) => {
return request({
url: '/TransactionRecord/NlpAnalysis',
method: 'post',
data: { userInput }
})
}
/**
* 获取抵账候选列表
* @param {number} id - 当前交易ID
* @returns {Promise<{success: boolean, data: Array}>}
*/
export const getCandidatesForOffset = (id) => {
return request({
url: `/TransactionRecord/GetCandidatesForOffset/${id}`,
method: 'get'
})
}
/**
* 抵账(删除两笔交易)
* @param {number} id1 - 交易ID 1
* @param {number} id2 - 交易ID 2
* @returns {Promise<{success: boolean}>}
*/
export const offsetTransactions = (id1, id2) => {
return request({
url: '/TransactionRecord/OffsetTransactions',
method: 'post',
data: { id1, id2 }
})
}
/**
* 一句话录账解析
* @param {string} text - 用户输入的自然语言文本
* @returns {Promise<{success: boolean, data: Object}>}
*/
export const parseOneLine = (text) => {
return request({
url: '/TransactionRecord/ParseOneLine',
method: 'post',
data: { text }
})
}