/** * 捐款记录相关 Mixin * 提供捐款记录的数据获取、搜索、分页等功能 * 基于重构后的 data-manager.js */ import { dataManagerMixin } from "./data-manager.js"; import { getDonorList } from "@/api/donor/donor.js"; import { getInstitutionalDetail } from "@/api/institutionalStructure/institutionalStructureDetail.js"; export const donationMixin = { mixins: [dataManagerMixin], data() { return { // 项目信息 projectInfo: {}, // 搜索关键词 searchKeyword: "", // 项目ID formedId: "", getBaseParams: { minAmount: 0, maxAmount: 10000, sortAmount: "amount", orderAmount: "asc", sortTime: "time", orderTime: "desc", }, }; }, computed: { // 计算总造价(从项目详情获取,如果没有则计算捐款总和) totalAmount() { return ( this.projectInfo.totalAmount || this.dataList.reduce((sum, item) => sum + item.amount, 0) ); }, // 计算参与捐款人次(从项目详情获取,如果没有则计算捐款记录数量) participantCount() { return this.projectInfo.donorCount || this.dataList.length; }, }, methods: { /** * 获取项目详情 */ async loadProjectInfo() { if (!this.formedId) { console.error("缺少项目ID"); return; } try { const response = await getInstitutionalDetail(this.formedId); console.log("项目详情API响应:", response); if (response.code === 200) { if (response.data) { this.projectInfo = response.data; console.log("使用 response.data 作为项目信息"); } } } catch (error) { console.error("获取项目信息失败:", error); uni.showToast({ title: "网络错误", icon: "none", }); } }, /** * 捐款记录数据转换器 */ transformDonationData(dataArray) { return dataArray.map((item) => ({ id: item.id, name: item.realName, amount: item.amount, // time: this.formatDate(item.donationDate), time: this.formatDate(item.createTime), })); }, /** * 格式化日期 * @param {string} dateStr 日期字符串 * @returns {string} 格式化后的日期 */ 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}`; }, /** * 获取捐款记录 * @param {string} keyword 搜索关键词 */ async loadDonationRecords(keyword = "") { const baseParams = { ...this.getBaseParams, formedId: this.formedId }; // 如果有搜索关键词,添加姓名搜索 if (keyword) { baseParams.realName = keyword; } await this.refreshData({ apiCall: getDonorList, dataTransformer: this.transformDonationData, params: baseParams, dataPath: "data.list.rows", totalPath: "data.list.total", onSuccess: (data, response) => { console.log("捐款记录加载成功:", data.length, "条"); }, onError: (errorMsg) => { console.error("捐款记录加载失败:", errorMsg); }, }); }, /** * 搜索捐款记录 * @param {string} val 搜索关键词 */ async onSearch(val) { console.log("val", val); this.searchKeyword = val; console.log("this.searchKeyword", this.searchKeyword); await this.searchData( { ...this.getBaseParams, formedId: this.formedId, realName: val.trim(), }, { apiCall: getDonorList, dataTransformer: this.transformDonationData, dataPath: "data.list.rows", totalPath: "data.list.total", onSuccess: (data, response) => { console.log("搜索完成,找到:", data.length, "条记录"); }, }, ); }, /** * 筛选功能 */ async filterSearch(params) { this.getBaseParams = params; console.log("this.searchKeyword", this.searchKeyword); await this.searchData( { ...this.getBaseParams, formedId: this.formedId, realName: this.searchKeyword.trim(), }, { apiCall: getDonorList, dataTransformer: this.transformDonationData, dataPath: "data.list.rows", totalPath: "data.list.total", onSuccess: (data, response) => { console.log("搜索完成,找到:", data.length, "条记录"); }, }, ); }, /** * 加载更多捐款记录 */ async loadMoreDonationRecords() { const currentParams = this.getDataState().currentParams; await this.loadMoreData({ apiCall: getDonorList, dataTransformer: this.transformDonationData, params: currentParams, dataPath: "data.list.rows", totalPath: "data.list.total", onSuccess: (data, response) => { console.log("加载更多完成,新增:", data.length, "条记录"); }, }); }, /** * 初始化数据 * @param {string} formedId 建制ID */ async initData(formedId) { console.log("初始化捐款记录数据, formedId:", formedId); try { this.formedId = formedId; await this.loadProjectInfo(); await this.loadDonationRecords(); console.log("捐款记录数据初始化完成"); } catch (error) { console.error("初始化捐款记录数据失败:", error); uni.showToast({ title: "初始化数据失败", icon: "none", }); } }, /** * 重置搜索 */ resetSearch() { this.searchKeyword = ""; this.loadDonationRecords(); }, /** * 刷新数据 */ async refreshDonationData() { await this.loadDonationRecords(this.searchKeyword); }, }, };