/** * 建制数据格式化工具类 */ export class InstitutionalDataFormatter { /** * 格式化金额 * @param {number} amount 金额 * @returns {string} 格式化后的金额字符串 */ static formatAmount(amount) { if (!amount) return "不详"; // 超过一亿以亿为单位 if (amount >= 100000000) { return `约${(amount / 100000000).toFixed(1)}亿`; } else if (amount >= 10000) { return `约${(amount / 10000).toFixed(1)}万`; } else { return `约${amount.toLocaleString()}元`; } } /** * 格式化历史金额(适用于古代项目) * @param {number} amount 金额 * @param {string} currency 货币单位 * @returns {string} 格式化后的金额字符串 */ static formatHistoricalAmount(amount, currency = "银元") { if (!amount) return "不详"; // 超过一亿以亿为单位 if (amount >= 100000000) { return `约${currency}${(amount / 100000000).toFixed(1)}亿`; } else if (amount >= 10000) { return `约${currency}${(amount / 10000).toFixed(0)}万`; } else { return `约${currency}${amount.toLocaleString()}`; } } /** * 格式化左上角内容 * @param {string} projectName 项目名称 * @returns {string} 格式化后的内容 */ static formatTopLeft(projectName) { // 如果年份和项目名称都为空,返回暂无数据 if (!projectName) return "暂无数据"; return projectName; } /** * 格式化项目名称 * @param {string} projectName 项目名称 * @param {boolean} isHistorical 是否为历史项目 * @returns {string} 格式化后的项目名称 */ static formatProjectName(projectName, isHistorical = false) { if (!projectName) return "暂无数据"; // 如果是历史项目,可能需要特殊处理 if (isHistorical && projectName.includes("寺")) { // 对于寺庙项目,保持原有格式 return projectName; } return projectName; } /** * 格式化年份显示 * @param {string} year 年份 * @returns {string} 格式化后的年份 */ static formatYear(year) { if (!year) return "暂无数据"; // 如果已经是格式化过的字符串(包含"年"字),直接返回 if (typeof year === "string" && year.includes("年")) { return year; } return `${year}年`; } /** * 格式化历史年份(适用于古代项目) * @param {string} year 年份 * @returns {string} 格式化后的年份 */ static formatHistoricalYear(year) { if (!year) return "暂无数据"; // 如果已经是格式化过的字符串,直接返回 if (typeof year === "string") { if (year.includes("年")) { return year; } if (year.includes("时期") || year.includes("朝代")) { return year; } } // 如果是公元前的年份 if (year < 0) { return `公元前${Math.abs(year)}年`; } // 如果是公元后的年份,但小于1000年 if (year < 1000) { return `${year}年`; } // 正常年份 return `${year}年`; } /** * 获取状态文本 * @param {string} state 状态码 * @returns {string} 状态文本 */ static getStatusText(state) { switch (state) { case "1": return "规划"; case "2": return "进行中"; case "3": return "已完成"; case "4": return "已取消"; default: return "未知状态"; } } /** * 判断是否为历史项目 * @param {string} year 年份 * @returns {boolean} 是否为历史项目 */ static isHistoricalProject(year) { if (!year) return false; // 处理字符串格式的年份(如"916年"、"明末时期") if (typeof year === "string") { // 如果包含"年"字,提取数字部分 if (year.includes("年")) { const yearNum = parseInt(year.replace("年", "")); return yearNum < 1900; } // 如果包含历史时期描述,认为是历史项目 if ( year.includes("时期") || year.includes("朝代") || year.includes("古代") ) { return true; } // 尝试解析纯数字 const yearNum = parseInt(year); if (!isNaN(yearNum)) { return yearNum < 1900; } } // 处理数字格式的年份 const yearNum = parseInt(year); return yearNum < 1900; } /** * 格式化捐赠人数 * @param {number} count 人数 * @param {boolean} isHistorical 是否为历史项目 * @returns {string} 格式化后的人数 */ static formatDonorCount(count, isHistorical = false) { if (!count || count === 0) return "持续招募中"; if (isHistorical) { return `约${count}人`; } else { return `${count}人`; } } /** * 转换后端数据为前端格式 * @param {Array} rows 后端数据 * @returns {Array} 转换后的数据 */ static transformData(rows) { console.log("原始数据:", rows); // 添加调试日志 return rows.map((item) => { console.log("处理项目:", item); // 添加调试日志 const year = item.formedYear || item.startYear || item.start_year || item.year; const isHistorical = InstitutionalDataFormatter.isHistoricalProject(year); const projectName = item.proName || item.pro_name || item.projectName; return { topLeft: InstitutionalDataFormatter.formatTopLeft( InstitutionalDataFormatter.formatProjectName( projectName, isHistorical, ), ), topRight: InstitutionalDataFormatter.getStatusText(item.state), year: isHistorical ? InstitutionalDataFormatter.formatHistoricalYear(year) : InstitutionalDataFormatter.formatYear(year), amount: isHistorical ? // ? InstitutionalDataFormatter.formatHistoricalAmount( InstitutionalDataFormatter.formatAmount( item.totalAmount || item.total_amount, ) : InstitutionalDataFormatter.formatAmount( item.totalAmount || item.total_amount, ), donorCount: InstitutionalDataFormatter.formatDonorCount( item.donorCount || item.donor_count || 0, isHistorical, ), // 保存原始数据,用于跳转 formedId: item.id, // 保存项目类型信息 isHistorical: isHistorical, }; }); } }