From f8909e10a7d7e809a6d16d318862deeaa4b99341 Mon Sep 17 00:00:00 2001 From: minimaxagent1 Date: Fri, 1 Aug 2025 11:54:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8D=90=E6=AC=BE=E5=8A=A8=E6=80=81=E7=95=8C?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/donor/donor.js | 24 +++++ .../institutionalStructure/donationRecord.vue | 88 ++++++++++++++----- .../institutionalStructure.vue | 14 ++- .../utils/data-formatter.js | 31 +++++-- 4 files changed, 122 insertions(+), 35 deletions(-) create mode 100644 api/donor/donor.js diff --git a/api/donor/donor.js b/api/donor/donor.js new file mode 100644 index 0000000..3ca4e3f --- /dev/null +++ b/api/donor/donor.js @@ -0,0 +1,24 @@ +import { request } from '@/utils/request' + +/** + * 获取捐款记录列表 + * @param {Object} params 查询参数 + * @param {string} params.formedId 建制id + * @param {number} params.pageNum 分页页码 + * @param {number} params.pageSize 分页大小 + * @param {number} params.minAmount 最小金额 + * @param {number} params.maxAmount 最大金额 + * @param {string} params.sortAmount 根据amount金额排序 + * @param {string} params.orderAmount asc/desc排序方式 + * @param {string} params.sortTime 根据time捐款时间排序 + * @param {string} params.orderTime asc/desc排序方式 + * @param {string} params.realName 根据姓名模糊搜索 + * @returns {Promise} 返回捐款记录列表 + */ +export function getDonorList(params) { + return request({ + url: '/app/donor/listDonor', + method: 'get', + params + }) +} \ No newline at end of file diff --git a/pages/institutionalStructure/donationRecord.vue b/pages/institutionalStructure/donationRecord.vue index bb2fe78..2fe3cf6 100644 --- a/pages/institutionalStructure/donationRecord.vue +++ b/pages/institutionalStructure/donationRecord.vue @@ -73,6 +73,7 @@ import TileGrid from "../../components/tile-grid/tile-grid.vue"; import CommonEnum from "../../enum/common"; import StatusDisplay from "../../components/status-display/status-display.vue"; import SearchBox from "../../components/search-box/search-box.vue"; +import { getDonorList } from '@/api/donor/donor.js'; export default { components: { @@ -86,7 +87,12 @@ export default { CommonEnum, loading: false, searchKeyword: '', - donationList: [] + donationList: [], + formedId: '', // 建制ID + // 分页参数 + pageNum: 1, + pageSize: 10, + hasMore: true } }, computed: { @@ -99,7 +105,11 @@ export default { return this.donationList.length } }, - onLoad() { + onLoad(options) { + // 获取页面参数 + if (options.formedId) { + this.formedId = options.formedId + } // 页面加载时获取数据 this.loadDonationRecords() }, @@ -107,40 +117,60 @@ export default { onSearch(val) { // 搜索逻辑 console.log('搜索内容:', val) + this.pageNum = 1 // 重置页码 this.loadDonationRecords(val) }, onFilter() { // 筛选逻辑 uni.showToast({ title: '筛选功能开发中', icon: 'none' }) }, - // 模拟获取捐款记录API + // 获取捐款记录API async loadDonationRecords(keyword = '') { this.loading = true try { - // 模拟API调用 - await new Promise(resolve => setTimeout(resolve, 1000)) + const params = { + formedId: this.formedId, + pageNum: this.pageNum, + pageSize: this.pageSize, + minAmount: 1, + maxAmount: 10000, + sortAmount: 'amount', + orderAmount: 'asc', + sortTime: 'time', + orderTime: 'desc' + } - // 模拟数据 - const mockData = [ - { id: 9, name: '张珊珊', amount: 1000, time: '2025/03/11' }, - { id: 8, name: '李小明', amount: 500, time: '2025/03/09' }, - { id: 7, name: '王大力', amount: 2000, time: '2025/03/01' }, - { id: 6, name: '赵美丽', amount: 800, time: '2025/02/27' }, - { id: 5, name: '刘志强', amount: 1500, time: '2025/02/27' }, - { id: 4, name: '陈小红', amount: 1200, time: '2025/02/24' }, - { id: 3, name: '杨建国', amount: 3000, time: '2025/02/12' }, - { id: 2, name: '孙丽华', amount: 600, time: '2025/02/08' }, - { id: 1, name: '周志明', amount: 2500, time: '2025/02/01' } - ] - - // 如果有搜索关键词,过滤数据 + // 如果有搜索关键词,添加姓名搜索 if (keyword) { - this.donationList = mockData.filter(item => - item.name.includes(keyword) || - item.amount.toString().includes(keyword) - ) + params.realName = keyword + } + + const response = await getDonorList(params) + + if (response.code === 200) { + // 转换数据格式 + const newData = response.data.map(item => ({ + id: item.id, + name: item.realName, + amount: item.amount, + time: this.formatDate(item.donationDate) + })) + + // 如果是第一页,直接替换数据 + if (this.pageNum === 1) { + this.donationList = newData + } else { + // 如果是加载更多,追加数据 + this.donationList = [...this.donationList, ...newData] + } + + // 判断是否还有更多数据 + this.hasMore = newData.length === this.pageSize } else { - this.donationList = mockData + uni.showToast({ + title: response.msg || '获取数据失败', + icon: 'none' + }) } } catch (error) { @@ -152,6 +182,16 @@ export default { } finally { this.loading = false } + }, + + // 格式化日期 + formatDate(dateStr) { + if (!dateStr) return '' + const date = new Date(dateStr) + const year = date.getFullYear() + const month = String(date.getMonth() + 1).padStart(2, '0') + const day = String(date.getDate()).padStart(2, '0') + return `${year}/${month}/${day}` } } } diff --git a/pages/institutionalStructure/institutionalStructure.vue b/pages/institutionalStructure/institutionalStructure.vue index 9bb985b..c35faea 100644 --- a/pages/institutionalStructure/institutionalStructure.vue +++ b/pages/institutionalStructure/institutionalStructure.vue @@ -80,10 +80,16 @@ export default { // 处理查看详细 handleViewDetail(data) { console.log('查看详细:', data.item) - // 这里可以添加跳转到详情页面的逻辑 - uni.showToast({ - title: '查看详细功能开发中', - icon: 'none' + // 跳转到捐款记录页面,传递建制ID + uni.navigateTo({ + url: `/pages/institutionalStructure/donationRecord?formedId=${data.item.formedId}`, + fail: (err) => { + console.error('跳转失败:', err); + uni.showToast({ + title: '页面跳转失败', + icon: 'none' + }); + } }) } } diff --git a/pages/institutionalStructure/utils/data-formatter.js b/pages/institutionalStructure/utils/data-formatter.js index e78bd9e..9f73cc8 100644 --- a/pages/institutionalStructure/utils/data-formatter.js +++ b/pages/institutionalStructure/utils/data-formatter.js @@ -25,7 +25,16 @@ export class InstitutionalDataFormatter { * @returns {string} 格式化后的内容 */ static formatTopLeft(year, projectName) { - if (!year || !projectName) return '暂无数据' + // 如果年份和项目名称都为空,返回暂无数据 + if (!year && !projectName) return '暂无数据' + + // 如果只有年份,只显示年份 + if (year && !projectName) return `${year}年` + + // 如果只有项目名称,只显示项目名称 + if (!year && projectName) return projectName + + // 如果都有,显示完整格式 return `${year}年 ${projectName}` } @@ -55,11 +64,19 @@ export class InstitutionalDataFormatter { * @returns {Array} 转换后的数据 */ static transformData(rows) { - return rows.map(item => ({ - topLeft: InstitutionalDataFormatter.formatTopLeft(item.startYear, item.proName), - topRight: InstitutionalDataFormatter.getStatusText(item.state), - bottomLeft: `建造金额:${InstitutionalDataFormatter.formatAmount(item.totalAmount)}`, - bottomRight: `捐赠人数:${item.donorCount}人` - })) + console.log('原始数据:', rows) // 添加调试日志 + + return rows.map(item => { + console.log('处理项目:', item) // 添加调试日志 + + return { + topLeft: InstitutionalDataFormatter.formatTopLeft(item.startYear || item.start_year || item.year, item.proName || item.pro_name || item.projectName), + topRight: InstitutionalDataFormatter.getStatusText(item.state), + bottomLeft: `建造金额:${InstitutionalDataFormatter.formatAmount(item.totalAmount || item.total_amount)}`, + bottomRight: `捐赠人数:${item.donorCount || item.donor_count || 0}人`, + // 保存原始数据,用于跳转 + formedId: item.id + } + }) } } \ No newline at end of file