fix
This commit is contained in:
@@ -63,32 +63,38 @@ request.interceptors.response.use(
|
||||
const { status, data } = error.response
|
||||
let message = '请求失败'
|
||||
|
||||
switch (status) {
|
||||
case 400:
|
||||
message = data?.message || '请求参数错误'
|
||||
break
|
||||
case 401: {
|
||||
message = '未授权,请重新登录'
|
||||
// 清除登录状态并跳转到登录页
|
||||
const authStore = useAuthStore()
|
||||
authStore.logout()
|
||||
router.push({
|
||||
name: 'login',
|
||||
query: { redirect: router.currentRoute.value.fullPath }
|
||||
})
|
||||
break
|
||||
// 优先从后端返回的 BaseResponse 中提取 message
|
||||
if (data && data.message) {
|
||||
message = data.message
|
||||
} else {
|
||||
// 如果后端没有返回 message,使用默认提示
|
||||
switch (status) {
|
||||
case 400:
|
||||
message = '请求参数错误'
|
||||
break
|
||||
case 401: {
|
||||
message = '未授权,请重新登录'
|
||||
// 清除登录状态并跳转到登录页
|
||||
const authStore = useAuthStore()
|
||||
authStore.logout()
|
||||
router.push({
|
||||
name: 'login',
|
||||
query: { redirect: router.currentRoute.value.fullPath }
|
||||
})
|
||||
break
|
||||
}
|
||||
case 403:
|
||||
message = '拒绝访问'
|
||||
break
|
||||
case 404:
|
||||
message = '请求的资源不存在'
|
||||
break
|
||||
case 500:
|
||||
message = '服务器内部错误'
|
||||
break
|
||||
default:
|
||||
message = `请求失败 (${status})`
|
||||
}
|
||||
case 403:
|
||||
message = '拒绝访问'
|
||||
break
|
||||
case 404:
|
||||
message = '请求的资源不存在'
|
||||
break
|
||||
case 500:
|
||||
message = '服务器内部错误'
|
||||
break
|
||||
default:
|
||||
message = data?.message || `请求失败 (${status})`
|
||||
}
|
||||
|
||||
showToast(message)
|
||||
|
||||
@@ -2,14 +2,38 @@ import request from './request'
|
||||
|
||||
/**
|
||||
* 统计相关 API
|
||||
* 注:统计接口定义在 TransactionRecordController 中
|
||||
* 注:统计接口定义在 TransactionStatisticsController 中
|
||||
*/
|
||||
|
||||
// ===== 新统一接口(推荐使用) =====
|
||||
|
||||
/**
|
||||
* 获取月度统计数据
|
||||
* 按日期范围获取每日统计(新统一接口)
|
||||
* @param {Object} params - 查询参数
|
||||
* @param {number} params.year - 年份
|
||||
* @param {number} params.month - 月份
|
||||
* @param {string} params.startDate - 开始日期(包含)格式: YYYY-MM-DD
|
||||
* @param {string} params.endDate - 结束日期(不包含)格式: YYYY-MM-DD
|
||||
* @param {string} [params.savingClassify] - 储蓄分类(可选,不传则使用系统配置)
|
||||
* @returns {Promise<{success: boolean, data: Array}>}
|
||||
* @returns {Array} data - 每日统计列表
|
||||
* @returns {number} data[].day - 日期(天)
|
||||
* @returns {number} data[].count - 交易笔数
|
||||
* @returns {number} data[].expense - 支出金额
|
||||
* @returns {number} data[].income - 收入金额
|
||||
* @returns {number} data[].saving - 储蓄金额
|
||||
*/
|
||||
export const getDailyStatisticsByRange = (params) => {
|
||||
return request({
|
||||
url: '/TransactionStatistics/GetDailyStatisticsByRange',
|
||||
method: 'get',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 按日期范围获取汇总统计(新统一接口)
|
||||
* @param {Object} params - 查询参数
|
||||
* @param {string} params.startDate - 开始日期(包含)格式: YYYY-MM-DD
|
||||
* @param {string} params.endDate - 结束日期(不包含)格式: YYYY-MM-DD
|
||||
* @returns {Promise<{success: boolean, data: Object}>}
|
||||
* @returns {Object} data.totalExpense - 总支出
|
||||
* @returns {Object} data.totalIncome - 总收入
|
||||
@@ -18,19 +42,19 @@ import request from './request'
|
||||
* @returns {Object} data.incomeCount - 收入笔数
|
||||
* @returns {Object} data.totalCount - 总笔数
|
||||
*/
|
||||
export const getMonthlyStatistics = (params) => {
|
||||
export const getSummaryByRange = (params) => {
|
||||
return request({
|
||||
url: '/TransactionStatistics/GetMonthlyStatistics',
|
||||
url: '/TransactionStatistics/GetSummaryByRange',
|
||||
method: 'get',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取分类统计数据
|
||||
* 按日期范围获取分类统计(新统一接口)
|
||||
* @param {Object} params - 查询参数
|
||||
* @param {number} params.year - 年份
|
||||
* @param {number} params.month - 月份
|
||||
* @param {string} params.startDate - 开始日期(包含)格式: YYYY-MM-DD
|
||||
* @param {string} params.endDate - 结束日期(不包含)格式: YYYY-MM-DD
|
||||
* @param {number} params.type - 交易类型 (0:支出, 1:收入, 2:不计入收支)
|
||||
* @returns {Promise<{success: boolean, data: Array}>}
|
||||
* @returns {Array} data - 分类统计列表
|
||||
@@ -39,30 +63,9 @@ export const getMonthlyStatistics = (params) => {
|
||||
* @returns {number} data[].percent - 百分比
|
||||
* @returns {number} data[].count - 交易笔数
|
||||
*/
|
||||
export const getCategoryStatistics = (params) => {
|
||||
export const getCategoryStatisticsByRange = (params) => {
|
||||
return request({
|
||||
url: '/TransactionStatistics/GetCategoryStatistics',
|
||||
method: 'get',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 按日期范围获取分类统计数据
|
||||
* @param {Object} params - 查询参数
|
||||
* @param {string} params.startDate - 开始日期 (格式: YYYY-MM-DD)
|
||||
* @param {string} params.endDate - 结束日期 (格式: YYYY-MM-DD)
|
||||
* @param {number} params.type - 交易类型 (0:支出, 1:收入, 2:不计入收支)
|
||||
* @returns {Promise<{success: boolean, data: Array}>}
|
||||
* @returns {Array} data - 分类统计列表
|
||||
* @returns {string} data[].classify - 分类名称
|
||||
* @returns {number} data[].amount - 金额
|
||||
* @returns {number} data[].percent - 百分比
|
||||
* @returns {number} data[].count - 交易笔数
|
||||
*/
|
||||
export const getCategoryStatisticsByDateRange = (params) => {
|
||||
return request({
|
||||
url: '/TransactionStatistics/GetCategoryStatisticsByDateRange',
|
||||
url: '/TransactionStatistics/GetCategoryStatisticsByRange',
|
||||
method: 'get',
|
||||
params
|
||||
})
|
||||
@@ -89,16 +92,65 @@ export const getTrendStatistics = (params) => {
|
||||
})
|
||||
}
|
||||
|
||||
// ===== 旧接口(保留用于向后兼容,建议迁移到新接口) =====
|
||||
|
||||
/**
|
||||
* 获取月度统计数据
|
||||
* @deprecated 请使用 getSummaryByRange
|
||||
* @param {Object} params - 查询参数
|
||||
* @param {number} params.year - 年份
|
||||
* @param {number} params.month - 月份
|
||||
* @returns {Promise<{success: boolean, data: Object}>}
|
||||
*/
|
||||
export const getMonthlyStatistics = (params) => {
|
||||
return request({
|
||||
url: '/TransactionStatistics/GetMonthlyStatistics',
|
||||
method: 'get',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取分类统计数据
|
||||
* @deprecated 请使用 getCategoryStatisticsByRange
|
||||
* @param {Object} params - 查询参数
|
||||
* @param {number} params.year - 年份
|
||||
* @param {number} params.month - 月份
|
||||
* @param {number} params.type - 交易类型 (0:支出, 1:收入, 2:不计入收支)
|
||||
* @returns {Promise<{success: boolean, data: Array}>}
|
||||
*/
|
||||
export const getCategoryStatistics = (params) => {
|
||||
return request({
|
||||
url: '/TransactionStatistics/GetCategoryStatistics',
|
||||
method: 'get',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 按日期范围获取分类统计数据
|
||||
* @deprecated 请使用 getCategoryStatisticsByRange(DateTime 参数版本)
|
||||
* @param {Object} params - 查询参数
|
||||
* @param {string} params.startDate - 开始日期 (格式: YYYY-MM-DD)
|
||||
* @param {string} params.endDate - 结束日期 (格式: YYYY-MM-DD)
|
||||
* @param {number} params.type - 交易类型 (0:支出, 1:收入, 2:不计入收支)
|
||||
* @returns {Promise<{success: boolean, data: Array}>}
|
||||
*/
|
||||
export const getCategoryStatisticsByDateRange = (params) => {
|
||||
return request({
|
||||
url: '/TransactionStatistics/GetCategoryStatisticsByDateRange',
|
||||
method: 'get',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取指定月份每天的消费统计
|
||||
* @deprecated 请使用 getDailyStatisticsByRange
|
||||
* @param {Object} params - 查询参数
|
||||
* @param {number} params.year - 年份
|
||||
* @param {number} params.month - 月份
|
||||
* @returns {Promise<{success: boolean, data: Array}>}
|
||||
* @returns {Array} data - 每日统计列表
|
||||
* @returns {string} data[].date - 日期
|
||||
* @returns {number} data[].count - 交易笔数
|
||||
* @returns {number} data[].amount - 交易金额
|
||||
*/
|
||||
export const getDailyStatistics = (params) => {
|
||||
return request({
|
||||
@@ -110,13 +162,11 @@ export const getDailyStatistics = (params) => {
|
||||
|
||||
/**
|
||||
* 获取累积余额统计数据(用于余额卡片)
|
||||
* @deprecated 请使用 getDailyStatisticsByRange 并在前端计算累积余额
|
||||
* @param {Object} params - 查询参数
|
||||
* @param {number} params.year - 年份
|
||||
* @param {number} params.month - 月份
|
||||
* @returns {Promise<{success: boolean, data: Array}>}
|
||||
* @returns {Array} data - 每日累积余额列表
|
||||
* @returns {string} data[].date - 日期
|
||||
* @returns {number} data[].cumulativeBalance - 累积余额
|
||||
*/
|
||||
export const getBalanceStatistics = (params) => {
|
||||
return request({
|
||||
@@ -128,14 +178,11 @@ export const getBalanceStatistics = (params) => {
|
||||
|
||||
/**
|
||||
* 获取指定周范围的每天的消费统计
|
||||
* @deprecated 请使用 getDailyStatisticsByRange
|
||||
* @param {Object} params - 查询参数
|
||||
* @param {string} params.startDate - 开始日期 (yyyy-MM-dd)
|
||||
* @param {string} params.endDate - 结束日期 (yyyy-MM-dd)
|
||||
* @returns {Promise<{success: boolean, data: Array}>}
|
||||
* @returns {Array} data - 每日统计列表
|
||||
* @returns {string} data[].date - 日期
|
||||
* @returns {number} data[].count - 交易笔数
|
||||
* @returns {number} data[].amount - 交易金额
|
||||
*/
|
||||
export const getWeeklyStatistics = (params) => {
|
||||
return request({
|
||||
@@ -147,16 +194,11 @@ export const getWeeklyStatistics = (params) => {
|
||||
|
||||
/**
|
||||
* 获取指定日期范围的统计汇总数据
|
||||
* @deprecated 请使用 getSummaryByRange
|
||||
* @param {Object} params - 查询参数
|
||||
* @param {string} params.startDate - 开始日期 (yyyy-MM-dd)
|
||||
* @param {string} params.endDate - 结束日期 (yyyy-MM-dd)
|
||||
* @returns {Promise<{success: boolean, data: Object}>}
|
||||
* @returns {Object} data.totalExpense - 总支出
|
||||
* @returns {Object} data.totalIncome - 总收入
|
||||
* @returns {Object} data.balance - 结余
|
||||
* @returns {Object} data.expenseCount - 支出笔数
|
||||
* @returns {Object} data.incomeCount - 收入笔数
|
||||
* @returns {Object} data.totalCount - 总笔数
|
||||
*/
|
||||
export const getRangeStatistics = (params) => {
|
||||
return request({
|
||||
|
||||
@@ -137,7 +137,17 @@ import ExpenseCategoryCard from './modules/ExpenseCategoryCard.vue'
|
||||
import IncomeNoneCategoryCard from './modules/IncomeNoneCategoryCard.vue'
|
||||
import CategoryBillPopup from '@/components/CategoryBillPopup.vue'
|
||||
import GlassBottomNav from '@/components/GlassBottomNav.vue'
|
||||
import { getMonthlyStatistics, getCategoryStatistics, getCategoryStatisticsByDateRange, getDailyStatistics, getTrendStatistics, getWeeklyStatistics, getRangeStatistics } from '@/api/statistics'
|
||||
import {
|
||||
// 新统一接口
|
||||
getDailyStatisticsByRange,
|
||||
getSummaryByRange,
|
||||
getCategoryStatisticsByRange,
|
||||
getTrendStatistics,
|
||||
// 旧接口(兼容性保留)
|
||||
getMonthlyStatistics,
|
||||
getCategoryStatistics,
|
||||
getDailyStatistics
|
||||
} from '@/api/statistics'
|
||||
import { useMessageStore } from '@/stores/message'
|
||||
import { getCssVar } from '@/utils/theme'
|
||||
|
||||
@@ -351,12 +361,15 @@ const loadWeeklyData = async () => {
|
||||
// 周统计 - 计算当前周的开始和结束日期
|
||||
const weekStart = getWeekStartDate(currentDate.value)
|
||||
const weekEnd = new Date(weekStart)
|
||||
weekEnd.setDate(weekStart.getDate() + 6)
|
||||
weekEnd.setDate(weekStart.getDate() + 7) // 修改:+7 天,因为 endDate 是不包含的
|
||||
|
||||
// 获取周统计汇总
|
||||
const weekSummaryResult = await getRangeStatistics({
|
||||
startDate: formatDateToString(weekStart),
|
||||
endDate: formatDateToString(weekEnd)
|
||||
const startDateStr = formatDateToString(weekStart)
|
||||
const endDateStr = formatDateToString(weekEnd)
|
||||
|
||||
// 使用新的统一接口获取周统计汇总
|
||||
const weekSummaryResult = await getSummaryByRange({
|
||||
startDate: startDateStr,
|
||||
endDate: endDateStr
|
||||
})
|
||||
|
||||
if (weekSummaryResult?.success && weekSummaryResult.data) {
|
||||
@@ -369,10 +382,10 @@ const loadWeeklyData = async () => {
|
||||
}
|
||||
}
|
||||
|
||||
// 获取周内每日统计
|
||||
const dailyResult = await getWeeklyStatistics({
|
||||
startDate: formatDateToString(weekStart),
|
||||
endDate: formatDateToString(weekEnd)
|
||||
// 使用新的统一接口获取周内每日统计
|
||||
const dailyResult = await getDailyStatisticsByRange({
|
||||
startDate: startDateStr,
|
||||
endDate: endDateStr
|
||||
})
|
||||
|
||||
if (dailyResult?.success && dailyResult.data) {
|
||||
@@ -392,23 +405,23 @@ const loadWeeklyData = async () => {
|
||||
const loadCategoryStatistics = async (year, month) => {
|
||||
try {
|
||||
const categoryYear = year
|
||||
const categoryMonth = month
|
||||
// 如果是年度统计,month应该传0表示查询全年
|
||||
const categoryMonth = currentPeriod.value === 'year' ? 0 : month
|
||||
|
||||
// 对于周统计,使用日期范围进行分类统计
|
||||
if (currentPeriod.value === 'week') {
|
||||
const weekStart = getWeekStartDate(currentDate.value)
|
||||
const weekEnd = new Date(weekStart)
|
||||
weekEnd.setDate(weekStart.getDate() + 6)
|
||||
weekEnd.setHours(23, 59, 59, 999)
|
||||
weekEnd.setDate(weekStart.getDate() + 7) // 修改:+7 天,因为 endDate 是不包含的
|
||||
|
||||
const startDateStr = formatDateToString(weekStart)
|
||||
const endDateStr = formatDateToString(weekEnd)
|
||||
|
||||
// 并发加载支出、收入和不计收支分类(使用日期范围)
|
||||
// 使用新的统一接口并发加载支出、收入和不计收支分类
|
||||
const [expenseResult, incomeResult, noneResult] = await Promise.allSettled([
|
||||
getCategoryStatisticsByDateRange({ startDate: startDateStr, endDate: endDateStr, type: 0 }),
|
||||
getCategoryStatisticsByDateRange({ startDate: startDateStr, endDate: endDateStr, type: 1 }),
|
||||
getCategoryStatisticsByDateRange({ startDate: startDateStr, endDate: endDateStr, type: 2 })
|
||||
getCategoryStatisticsByRange({ startDate: startDateStr, endDate: endDateStr, type: 0 }),
|
||||
getCategoryStatisticsByRange({ startDate: startDateStr, endDate: endDateStr, type: 1 }),
|
||||
getCategoryStatisticsByRange({ startDate: startDateStr, endDate: endDateStr, type: 2 })
|
||||
])
|
||||
|
||||
// 获取图表颜色配置
|
||||
|
||||
Reference in New Issue
Block a user