From 54b9aaf9f62e9e4b006c3c1126c9f67c6f3ca1b2 Mon Sep 17 00:00:00 2001 From: WindowBird <13870814+windows-bird@user.noreply.gitee.com> Date: Thu, 14 Aug 2025 14:56:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B4=BB=E5=8A=A8=E6=97=B6=E9=97=B4=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E5=B9=B4=E6=9C=88=E6=97=A5=E5=88=B0=E5=B9=B4=E6=9C=88?= =?UTF-8?q?=E6=97=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/activity/activity.vue | 394 ++++++++-------- pages/activity/activityDetail.vue | 758 +++++++++++++++--------------- utils/activity-data-formatter.js | 163 ++++--- 3 files changed, 682 insertions(+), 633 deletions(-) diff --git a/pages/activity/activity.vue b/pages/activity/activity.vue index d3834d2..22dba9a 100644 --- a/pages/activity/activity.vue +++ b/pages/activity/activity.vue @@ -1,29 +1,37 @@ diff --git a/pages/activity/activityDetail.vue b/pages/activity/activityDetail.vue index 1177638..bee11ba 100644 --- a/pages/activity/activityDetail.vue +++ b/pages/activity/activityDetail.vue @@ -1,12 +1,17 @@ diff --git a/utils/activity-data-formatter.js b/utils/activity-data-formatter.js index cab4294..9750c01 100644 --- a/utils/activity-data-formatter.js +++ b/utils/activity-data-formatter.js @@ -1,4 +1,4 @@ -import { ACTIVITY_STATUS, ACTIVITY_TYPE } from '../enum/activity' +import { ACTIVITY_STATUS, ACTIVITY_TYPE } from "../enum/activity"; /** * 活动数据格式化工具 @@ -11,10 +11,10 @@ export default { */ formatActivityList(apiData) { if (!Array.isArray(apiData)) { - return [] + return []; } - return apiData.map(item => this.formatActivityItem(item)) + return apiData.map((item) => this.formatActivityItem(item)); }, /** @@ -23,16 +23,20 @@ export default { * @returns {Object} 格式化后的活动数据 */ formatActivityItem(item) { - if (!item) return null + if (!item) return null; return { - id: item.id || '', - name: item.title || '未命名活动', - theme: item.content ? `活动主题: ${item.content}` : '', + id: item.id || "", + name: item.title || "未命名活动", + theme: item.content ? `活动主题: ${item.content}` : "", type: this.getActivityType(item.type), - status: this.getActivityStatus(item.status, item.actStartTime, item.actEndTime), + status: this.getActivityStatus( + item.status, + item.actStartTime, + item.actEndTime, + ), time: this.formatActivityTime(item.actStartTime, item.actEndTime), - location: item.address || '', + location: item.address || "", backgroundImage: item.imgUrl || this.getDefaultImageByType(item.type), // 额外信息 templeId: item.templeId, @@ -42,7 +46,7 @@ export default { phone: item.phone, lon: item.lon, lat: item.lat, - } + }; }, /** @@ -51,17 +55,22 @@ export default { * @returns {Object} 格式化后的活动详情数据 */ formatActivityDetail(apiData) { - if (!apiData) return null + if (!apiData) return null; return { - id: apiData.id || '', - name: apiData.title || '未命名活动', + id: apiData.id || "", + name: apiData.title || "未命名活动", type: this.getActivityType(apiData.type), - status: this.getActivityStatus(apiData.status, apiData.actStartTime, apiData.actEndTime), + status: this.getActivityStatus( + apiData.status, + apiData.actStartTime, + apiData.actEndTime, + ), time: this.formatActivityTime(apiData.actStartTime, apiData.actEndTime), - location: apiData.address || '', - backgroundImage: apiData.imgUrl || this.getDefaultImageByType(apiData.type), + location: apiData.address || "", + backgroundImage: + apiData.imgUrl || this.getDefaultImageByType(apiData.type), // 详情页额外信息 templeId: apiData.templeId, currentBooking: apiData.currentBooking || 0, @@ -73,7 +82,7 @@ export default { content: apiData.content, createTime: apiData.createTime, updateTime: apiData.updateTime, - } + }; }, /** @@ -82,21 +91,21 @@ export default { * @returns {string} 纯文本内容 */ extractTextFromHtml(htmlContent) { - if (!htmlContent) return '' + if (!htmlContent) return ""; try { // 简单的HTML标签移除 return htmlContent - .replace(/<[^>]*>/g, '') // 移除HTML标签 - .replace(/ /g, ' ') // 替换空格实体 - .replace(/&/g, '&') // 替换&实体 - .replace(/</g, '<') // 替换<实体 - .replace(/>/g, '>') // 替换>实体 + .replace(/<[^>]*>/g, "") // 移除HTML标签 + .replace(/ /g, " ") // 替换空格实体 + .replace(/&/g, "&") // 替换&实体 + .replace(/</g, "<") // 替换<实体 + .replace(/>/g, ">") // 替换>实体 .replace(/"/g, '"') // 替换"实体 - .trim() + .trim(); } catch (error) { - console.error('提取HTML文本失败:', error) - return htmlContent + console.error("提取HTML文本失败:", error); + return htmlContent; } }, @@ -106,7 +115,7 @@ export default { * @returns {string} 标准化的活动类型 */ getActivityType(type) { - if (!type) return ACTIVITY_TYPE.PRAYER + if (!type) return ACTIVITY_TYPE.PRAYER; const typeMap = { 1: ACTIVITY_TYPE.PRAYER, // 祈福活动 @@ -114,9 +123,9 @@ export default { 3: ACTIVITY_TYPE.MEDITATION, // 禅修活动 4: ACTIVITY_TYPE.DONATION, // 捐赠活动 5: ACTIVITY_TYPE.VOLUNTEER, // 义工活动 - } + }; - return typeMap[type] || ACTIVITY_TYPE.PRAYER + return typeMap[type] || ACTIVITY_TYPE.PRAYER; }, /** @@ -127,22 +136,22 @@ export default { * @returns {string} 标准化的活动状态 */ getActivityStatus(status, startTime, endTime) { - if (!status || status === '0') { - return ACTIVITY_STATUS.FINISHED + if (!status || status === "0") { + return ACTIVITY_STATUS.FINISHED; } // 如果有时间信息,根据时间判断状态 if (startTime && endTime) { - const now = new Date() - const start = this.parseDateForIOS(startTime) - const end = this.parseDateForIOS(endTime) + const now = new Date(); + const start = this.parseDateForIOS(startTime); + const end = this.parseDateForIOS(endTime); if (now < start) { - return ACTIVITY_STATUS.REGISTERING + return ACTIVITY_STATUS.REGISTERING; } else if (now >= start && now <= end) { - return ACTIVITY_STATUS.ONGOING + return ACTIVITY_STATUS.ONGOING; } else { - return ACTIVITY_STATUS.FINISHED + return ACTIVITY_STATUS.FINISHED; } } @@ -151,9 +160,9 @@ export default { 1: ACTIVITY_STATUS.REGISTERING, 2: ACTIVITY_STATUS.ONGOING, 3: ACTIVITY_STATUS.FINISHED, - } + }; - return statusMap[status] || ACTIVITY_STATUS.REGISTERING + return statusMap[status] || ACTIVITY_STATUS.REGISTERING; }, /** @@ -162,15 +171,15 @@ export default { * @returns {Date} 解析后的日期对象 */ parseDateForIOS(dateString) { - if (!dateString) return new Date() + if (!dateString) return new Date(); try { // 将 "yyyy-MM-dd HH:mm:ss" 格式转换为 "yyyy-MM-ddTHH:mm:ss" 格式以兼容iOS - const iosCompatibleDate = dateString.replace(' ', 'T') - return new Date(iosCompatibleDate) + const iosCompatibleDate = dateString.replace(" ", "T"); + return new Date(iosCompatibleDate); } catch (error) { - console.error('解析日期失败:', error) - return new Date() + console.error("解析日期失败:", error); + return new Date(); } }, @@ -181,38 +190,46 @@ export default { * @returns {string} 格式化后的时间字符串 */ formatActivityTime(startTime, endTime) { - if (!startTime) return '' + if (!startTime) return ""; try { - const start = this.parseDateForIOS(startTime) - const end = endTime ? this.parseDateForIOS(endTime) : null + const start = this.parseDateForIOS(startTime); + const end = endTime ? this.parseDateForIOS(endTime) : null; // 格式化日期 - const formatDate = date => { - const year = date.getFullYear() - const month = String(date.getMonth() + 1).padStart(2, '0') - const day = String(date.getDate()).padStart(2, '0') - const weekdays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'] - const weekday = weekdays[date.getDay()] - const hours = String(date.getHours()).padStart(2, '0') - const minutes = String(date.getMinutes()).padStart(2, '0') + const formatDate = (date) => { + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, "0"); + const day = String(date.getDate()).padStart(2, "0"); + // const weekdays = [ + // "周日", + // "周一", + // "周二", + // "周三", + // "周四", + // "周五", + // "周六", + // ]; + // const weekday = weekdays[date.getDay()]; + // const hours = String(date.getHours()).padStart(2, "0"); + // const minutes = String(date.getMinutes()).padStart(2, "0"); + //${weekday} ${hours}:${minutes} - return `${year}年${month}月${day}日 ${weekday} ${hours}:${minutes}` - } + return `${year}年${month}月${day}日`; + }; - let timeStr = formatDate(start) + let timeStr = formatDate(start); // 如果有结束时间,添加结束时间 if (end && end.getTime() !== start.getTime()) { - const endHours = String(end.getHours()).padStart(2, '0') - const endMinutes = String(end.getMinutes()).padStart(2, '0') - timeStr += `~${endHours}:${endMinutes}` + timeStr += "至"; + timeStr += formatDate(end); } - return timeStr + return timeStr; } catch (error) { - console.error('格式化时间失败:', error) - return startTime + console.error("格式化时间失败:", error); + return startTime; } }, @@ -223,14 +240,14 @@ export default { */ getDefaultImageByType(type) { const typeMap = { - 1: '/static/image/a1.png', // 祈福活动 - 2: '/static/image/a2.png', // 法会活动 - 3: '/static/image/a3.png', // 禅修活动 - 4: '/static/image/a4.png', // 捐赠活动 - 5: '/static/image/a5.png', // 义工活动 - } + 1: "/static/image/a1.png", // 祈福活动 + 2: "/static/image/a2.png", // 法会活动 + 3: "/static/image/a3.png", // 禅修活动 + 4: "/static/image/a4.png", // 捐赠活动 + 5: "/static/image/a5.png", // 义工活动 + }; - return typeMap[type] || '/static/image/a1.png' + return typeMap[type] || "/static/image/a1.png"; }, /** @@ -239,6 +256,6 @@ export default { * @returns {boolean} 是否有效 */ isValidActivity(activity) { - return activity && activity.id && activity.title && activity.status !== '0' + return activity && activity.id && activity.title && activity.status !== "0"; }, -} +};