fix: 修复移动端API路径错误,统一归集到api/index.ts

问题:
- Vue文件中直接使用错误的API路径 /api/v1/xxx
- 导致请求URL重复包含/api/v1,被当作静态资源处理

修复:
1. 重构src/api/index.ts,按模块分类集中定义所有API
   - 用户认证:login, getUserInfo, logout
   - 项目管理:getProjectList, getProjectById
   - 客户管理:getCustomerList
   - 支出管理:createExpense, getExpenseList, getExpenseTypeTree, getTodayExpense
   - 应收款管理:getReceivableList, getUpcomingDueList, getTodayIncome, getUnpaidAmount, getOverdueCount

2. 修复各Vue文件,使用集中的API定义
   - Home.vue: 使用getTodayIncome, getTodayExpense, getUnpaidAmount
   - receivable/List.vue: 使用getReceivableList
   - expense/Add.vue: 使用createExpense, getExpenseTypeTree
   - Login.vue: 使用login

正确的API路径:
- 前端请求: /fund/receipt/receivable/page
- Gateway转发: /api/v1/receipt/receivable/page
This commit is contained in:
zhangjf 2026-02-23 11:18:44 +08:00
parent 610054918a
commit 2e7fb5f5d4
5 changed files with 29 additions and 28 deletions

View File

@ -1,6 +1,7 @@
import request from './request'
// 用户认证
// ===================== 用户认证 =====================
export function login(data: { username: string; password: string }) {
return request.post('/auth/login', data)
}
@ -13,7 +14,8 @@ export function logout() {
return request.post('/auth/logout')
}
// 项目管理
// ===================== 项目管理 =====================
export function getProjectList(params?: { pageNum: number; pageSize: number; projectName?: string }) {
return request.get('/project/page', { params })
}
@ -22,12 +24,14 @@ export function getProjectById(id: number) {
return request.get(`/project/${id}`)
}
// 客户管理
// ===================== 客户管理 =====================
export function getCustomerList(params?: { pageNum: number; pageSize: number; customerName?: string }) {
return request.get('/customer/page', { params })
}
// 支出管理
// ===================== 支出管理 =====================
export function createExpense(data: any) {
return request.post('/exp/expense', data)
}
@ -36,7 +40,16 @@ export function getExpenseList(params: { pageNum: number; pageSize: number }) {
return request.get('/exp/expense/page', { params })
}
// 应收款管理
export function getExpenseTypeTree() {
return request.get('/exp/expense-type/tree')
}
export function getTodayExpense() {
return request.get('/exp/expense/stats/today-expense')
}
// ===================== 应收款管理 =====================
export function getReceivableList(params: { pageNum: number; pageSize: number; status?: string }) {
return request.get('/receipt/receivable/page', { params })
}
@ -45,15 +58,10 @@ export function getUpcomingDueList(daysWithin: number = 7) {
return request.get(`/receipt/receivable/upcoming-due?daysWithin=${daysWithin}`)
}
// 统计数据
export function getTodayIncome() {
return request.get('/receipt/receivable/stats/today-income')
}
export function getTodayExpense() {
return request.get('/exp/expense/stats/today-expense')
}
export function getUnpaidAmount() {
return request.get('/receipt/receivable/stats/unpaid-amount')
}
@ -61,8 +69,3 @@ export function getUnpaidAmount() {
export function getOverdueCount() {
return request.get('/receipt/receivable/stats/overdue-count')
}
// 支出类型
export function getExpenseTypeTree() {
return request.get('/exp/expense-type/tree')
}

View File

@ -86,7 +86,7 @@
<script setup lang="ts">
import { ref, computed, onMounted } from 'vue'
import request from '@/api/request'
import { getTodayIncome, getTodayExpense, getUnpaidAmount } from '@/api'
const summary = ref({
todayIncome: 0,
@ -114,9 +114,9 @@ const formatMoney = (value: number) => {
const loadSummary = async () => {
try {
const [incomeRes, expenseRes, unpaidRes] = await Promise.all([
request.get('/receipt/api/v1/receipt/receivable/stats/today-income'),
request.get('/exp/api/v1/exp/expense/stats/today-expense'),
request.get('/receipt/api/v1/receipt/receivable/stats/unpaid-amount')
getTodayIncome(),
getTodayExpense(),
getUnpaidAmount()
])
summary.value.todayIncome = (incomeRes as any).data || 0

View File

@ -51,7 +51,7 @@
import { ref, reactive } from 'vue'
import { useRouter } from 'vue-router'
import { showToast, showSuccessToast } from 'vant'
import request from '@/api/request'
import { login } from '@/api'
const router = useRouter()
const loading = ref(false)
@ -74,7 +74,7 @@ const handleLogin = async () => {
loading.value = true
try {
const res: any = await request.post('/auth/login', form)
const res: any = await login(form)
const data = res.data
localStorage.setItem('token', data.token)
localStorage.setItem('userInfo', JSON.stringify({

View File

@ -70,7 +70,7 @@
import { ref, reactive, onMounted } from 'vue'
import { useRouter } from 'vue-router'
import { showToast, showSuccessToast } from 'vant'
import request from '@/api/request'
import { createExpense, getExpenseTypeTree } from '@/api'
const router = useRouter()
const loading = ref(false)
@ -127,7 +127,7 @@ const handleSubmit = async () => {
payeeName: '待填写'
}
console.log('提交支出数据:', requestData)
await request.post('/exp/api/v1/exp/expense', requestData)
await createExpense(requestData)
showSuccessToast('提交成功')
router.back()
} catch (e: any) {
@ -141,7 +141,7 @@ const handleSubmit = async () => {
onMounted(async () => {
//
try {
const res: any = await request.get('/exp/api/v1/exp/expense-type/tree')
const res: any = await getExpenseTypeTree()
const types = res.data || []
typeColumns.value = types.map((t: any) => ({
text: t.typeName,

View File

@ -43,7 +43,7 @@
<script setup lang="ts">
import { ref, onMounted } from 'vue'
import { showToast } from 'vant'
import request from '@/api/request'
import { getReceivableList } from '@/api'
const loading = ref(false)
const refreshing = ref(false)
@ -74,9 +74,7 @@ const getStatusName = (status: string) => {
const onLoad = async () => {
try {
const res: any = await request.get('/receipt/api/v1/receipt/receivable/page', {
params: { pageNum: pageNum.value, pageSize }
})
const res: any = await getReceivableList({ pageNum: pageNum.value, pageSize })
const records = res.data?.records || []
list.value.push(...records)
loading.value = false