From 061d96036541c1d0c88eea95c25b58950de8d289 Mon Sep 17 00:00:00 2001 From: wangxiaoxian <1094175543@qq.com> Date: Sun, 15 Mar 2026 20:40:46 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B4=B9=E7=94=A8=E6=94=AF=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/api.js | 13 +- src/router/index.js | 16 ++ src/views/expenses/Add.vue | 143 ++++++++++++++ src/views/expenses/Edit.vue | 150 +++++++++++++++ src/views/expenses/List.vue | 351 ++++++++++++++++++++++++++++++++++ src/views/statistics/Rent.vue | 18 ++ 6 files changed, 690 insertions(+), 1 deletion(-) create mode 100644 src/views/expenses/Add.vue create mode 100644 src/views/expenses/Edit.vue create mode 100644 src/views/expenses/List.vue diff --git a/src/api/api.js b/src/api/api.js index 1276501..f6c88f0 100644 --- a/src/api/api.js +++ b/src/api/api.js @@ -84,6 +84,16 @@ export const electricityBillApi = { delete: (id) => del(`/electricity-bills/${id}`) }; +// 费用支出管理API +export const expenseApi = { + getAll: (params = {}) => get('/expenses', params), + list: (params = {}) => get('/expenses/list', params), + getById: (id) => get(`/expenses/${id}`), + create: (data) => post('/expenses', data), + update: (id, data) => put(`/expenses/${id}`, data), + delete: (id) => del(`/expenses/${id}`) +}; + export default { apartment: apartmentApi, room: roomApi, @@ -92,5 +102,6 @@ export default { rental: rentalApi, statistics: statisticsApi, waterBill: waterBillApi, - electricityBill: electricityBillApi + electricityBill: electricityBillApi, + expense: expenseApi }; diff --git a/src/router/index.js b/src/router/index.js index e3fd71f..dbf1231 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -135,6 +135,22 @@ const routes = [ path: '/menu/list', name: 'MenuList', component: () => import('@/views/menu/List.vue') + }, + // 费用支出管理 + { + path: '/expenses', + name: 'ExpenseList', + component: () => import('@/views/expenses/List.vue') + }, + { + path: '/expenses/add', + name: 'ExpenseAdd', + component: () => import('@/views/expenses/Add.vue') + }, + { + path: '/expenses/edit/:id', + name: 'ExpenseEdit', + component: () => import('@/views/expenses/Edit.vue') } ] }, diff --git a/src/views/expenses/Add.vue b/src/views/expenses/Add.vue new file mode 100644 index 0000000..ad317e9 --- /dev/null +++ b/src/views/expenses/Add.vue @@ -0,0 +1,143 @@ + + + + + \ No newline at end of file diff --git a/src/views/expenses/Edit.vue b/src/views/expenses/Edit.vue new file mode 100644 index 0000000..37ffc80 --- /dev/null +++ b/src/views/expenses/Edit.vue @@ -0,0 +1,150 @@ + + + + + \ No newline at end of file diff --git a/src/views/expenses/List.vue b/src/views/expenses/List.vue new file mode 100644 index 0000000..c640808 --- /dev/null +++ b/src/views/expenses/List.vue @@ -0,0 +1,351 @@ + + + + + \ No newline at end of file diff --git a/src/views/statistics/Rent.vue b/src/views/statistics/Rent.vue index 5c81357..3b02c40 100644 --- a/src/views/statistics/Rent.vue +++ b/src/views/statistics/Rent.vue @@ -27,12 +27,24 @@ ¥{{ scope.row.depositRefunded || 0 }} + + + + + +
总租金收入:{{ totalAmount }} 元 已收押金:{{ totalDepositReceived }} 元 已退押金:{{ totalDepositRefunded }} 元 + 总费用支出:{{ totalExpense }} 元 + 总合计收入:{{ totalIncome }} 元
@@ -57,6 +69,12 @@ export default { }, totalDepositRefunded() { return this.rentData.reduce((sum, item) => sum + (item.depositRefunded || 0), 0) + }, + totalExpense() { + return this.rentData.reduce((sum, item) => sum + (item.expense || 0), 0) + }, + totalIncome() { + return this.rentData.reduce((sum, item) => sum + (item.amount || 0) + (item.depositReceived || 0) - (item.depositRefunded || 0) - (item.expense || 0), 0) } }, mounted() {