238 lines
6.1 KiB
JavaScript
238 lines
6.1 KiB
JavaScript
/**
|
|
* 捐款记录相关 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);
|
|
},
|
|
},
|
|
};
|