buddhism/pages/future/future.vue
2025-08-28 18:01:59 +08:00

540 lines
15 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="page">
<custom-navbar ref="customNavbar" title="未来规划" />
<tile-grid />
<view class="bg">
<view class="container">
<text class="proName">{{ projectDetails.proName }}</text>
<image
:src="projectDetails.imgUrl"
class="imgUrl"
mode="aspectFill"
></image>
<text class="tip">{{ projectDetails.proName }}效果图</text>
<text class="planTitle">用善意筑就明天的模样</text>
<text class="proProfile">{{ projectDetails.proProfile }}</text>
<text class="introduce">项目介绍</text>
<rich-text
:nodes="formatRichText(projectDetails.proIntroduce)"
class="rich-text-content"
></rich-text>
<view class="donorContainer">
<text>项目筹款情况</text>
<view class="donorData">
<view class="CircleProgress"></view>
<view class="data-info">
<view class="data-row">
<view class="label">公众筹款目标():</view>
<view class="value">{{ projectDetails.totalAmount }}</view>
</view>
<view class="data-row">
<view class="label">当前筹款金额():</view>
<view class="value">{{ projectDetails.amountSum }}</view>
</view>
<view class="data-row">
<view class="label">当前捐款人次:</view>
<view class="value">{{ projectDetails.donorCount }}</view>
</view>
</view>
</view>
<view class="record"
>查看捐款记录
<u-icon name="arrow-right"></u-icon>
</view>
</view>
<view class="new-develop-container">
<text class="section-title">最新进展</text>
<view
v-for="item in listData"
:key="item.id"
class="constructionSituation"
>
<view class="project-info">
<view class="line-left">
<image :src="buddhaIcon" mode="aspectFill"></image>
<view class="line"></view>
</view>
<view class="info">
<view class="time">
{{ item.createTime }}
</view>
<text>施工情况</text>
<rich-text :nodes="item.content"></rich-text>
</view>
<image
v-if="item.coverUrl"
:src="item.coverUrl"
class="content-image"
mode="aspectFill"
></image>
</view>
</view>
<view class="more">查看更多{{ listData.length }}条数据</view>
</view>
</view>
</view>
<button>捐一笔</button>
</view>
</template>
<script>
import CommonEnum from "../../enum/common";
import {
getInstitutionalDetail,
getProjectSchedule,
} from "../../api/institutionalStructure/institutionalStructureDetail";
export default {
components: {},
data() {
return {
CommonEnum,
buddhaIcon: "https://api.ccttiot.com/image-1756353071821.png",
loading: false,
projectDetails: {
createBy: null,
createTime: "2025-07-08 17:50:26",
updateBy: null,
updateTime: null,
remark: null,
scope: null,
deleted: null,
areaPermissions: null,
id: "6",
templeId: "11",
proName: "123",
proProfile: "我们计划在202X-203X年完成这些重要建设邀您共同见证",
formedYear: null,
imgUrl: "https://api.ccttiot.com/IMG01-1751968117197.jpg",
proIntroduce:
"<p>项目介绍项目介绍项目介绍项目介绍项目介绍项目介</p><p>绍项目介绍项目介绍项目介绍项目介绍项目介绍</p><p>项目介绍项目介绍项目介绍项目介绍项目介绍项目介</p><p>绍项目介绍项目介绍项目</p><p>项目介绍项目介绍项目介绍项目介绍项目介绍项目介</p><p>绍项目介绍项目介绍项目介绍项目介绍项目介绍</p>",
totalAmount: 10000101.0,
state: "1",
createId: null,
templeName: "少林寺",
donorCount: 6,
amountSum: 6666,
},
listData: [
{
id: "18",
templeId: "12",
title: "施工情况02",
content: "<p>施工情况02施工情况02...</p>",
status: "1",
templeName: "寒山寺",
createTime: "2025-07-09 13:50:57",
coverUrl: "https://api.ccttiot.com/IMG01-1751968117197.jpg",
},
{
id: "17",
templeId: "12",
title: "施工情况02",
content: "<p>施工情况02施工情况02...</p>",
status: "1",
templeName: "寒山寺",
createTime: "2025-07-09 13:50:57",
coverUrl: "https://api.ccttiot.com/IMG01-1751968117197.jpg",
},
],
};
},
onLoad(options) {
if (options) {
console.log("接收到的参数:", options.formedId);
this.formedId = options.formedId;
}
// 页面加载时获取数据
this.loadPageData();
},
methods: {
// 加载页面数据
async loadPageData() {
try {
// 并行请求优化(如果两个请求无依赖关系)
const [detailResponse, scheduleResponse] = await Promise.all([
getInstitutionalDetail(this.formedId),
getProjectSchedule(this.formedId),
]);
// 处理机构详情数据
if (detailResponse?.code === 200) {
this.projectDetails = detailResponse.data;
} else {
console.warn("获取机构详情失败:", detailResponse?.message);
uni.showToast({
title: "获取详情失败",
icon: "none",
});
}
// 处理项目进度数据
if (scheduleResponse?.code === 200) {
console.log("123:", scheduleResponse.rows);
this.listData = scheduleResponse.rows;
} else {
console.warn("获取项目进度失败:", scheduleResponse?.message);
uni.showToast({
title: "获取进度失败",
icon: "none",
});
}
} catch (error) {
console.error("获取页面数据失败:", error);
uni.showToast({
title: "数据加载失败",
icon: "none",
});
// 可选:重试逻辑
// setTimeout(() => this.loadPageData(), 2000);
} finally {
// 可以在这里关闭加载状态
this.loading = false;
}
},
formatRichText(html) {
if (!html) return "";
// 为图片添加最大宽度限制
const formattedHtml = html.replace(
/<img([^>]*)>/gi,
'<img$1 style="max-width: 100%; height: auto; display: block; margin: 10rpx auto;">',
);
return formattedHtml;
},
},
};
</script>
<style lang="scss" scoped>
.page {
background: linear-gradient(to bottom, #f5f0e7 500rpx, #fff 500rpx);
.bg {
//background: #faf8f3;
background: #fff;
padding: 32rpx 22rpx 162rpx;
.container {
flex-direction: column;
display: flex;
.proName {
width: 100%;
height: 50rpx;
font-weight: 500;
font-size: 36rpx;
color: #522510;
line-height: 50rpx;
text-align: center;
font-style: normal;
text-transform: none;
}
.imgUrl {
margin-top: 22rpx;
width: 708rpx;
height: 370rpx;
}
.tip {
margin-top: 20rpx;
width: 100%;
height: 32rpx;
font-weight: 400;
font-size: 24rpx;
color: #695347;
line-height: 32rpx;
text-align: right;
font-style: normal;
text-transform: none;
}
/* 计划标题样式 */
.planTitle {
margin-top: 12rpx;
padding-left: 30rpx;
width: 100%;
height: 44rpx;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
font-weight: 400;
font-size: 32rpx;
color: #695347;
line-height: 44rpx;
text-align: left;
font-style: normal;
text-transform: none;
}
/* 项目简介样式 */
.proProfile {
margin-top: 16rpx;
padding-left: 30rpx;
width: 100%;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
font-weight: 400;
font-size: 24rpx;
color: #695347;
line-height: 32rpx;
text-align: left;
font-style: normal;
text-transform: none;
}
/* 介绍标题样式 */
.introduce {
margin-top: 38rpx;
margin-bottom: 42rpx;
width: 100%;
height: 54rpx;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
font-weight: 400;
font-size: 40rpx;
color: #695347;
line-height: 54rpx;
text-align: left;
font-style: normal;
text-transform: none;
}
/* 富文本容器样式 */
.rich-text {
width: 100%;
height: 270rpx;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
font-weight: 400;
font-size: 28rpx;
color: #695347;
line-height: 45rpx;
text-align: left;
font-style: normal;
text-transform: none;
}
.donorContainer {
margin-bottom: 34rpx;
padding: 30rpx;
margin-top: 30rpx;
width: 100%;
background: #fffbf5;
border-radius: 20rpx 20rpx 20rpx 20rpx;
border: 2rpx solid #c7a26d;
text {
width: 190rpx;
height: 44rpx;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
font-weight: 400;
font-size: 32rpx;
color: #695347;
line-height: 44rpx;
text-align: left;
font-style: normal;
text-transform: none;
}
.donorData {
margin-top: 30rpx;
display: flex;
.CircleProgress {
flex: 1;
}
.data-info {
flex: 3;
.data-row {
display: flex;
justify-content: space-between;
.label {
width: 192rpx;
height: 32rpx;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
font-weight: 400;
font-size: 24rpx;
color: #808080;
line-height: 32rpx;
text-align: left;
font-style: normal;
text-transform: none;
}
.value {
width: 188rpx;
height: 50rpx;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
font-weight: 400;
font-size: 36rpx;
color: #3d3d3d;
line-height: 50rpx;
text-align: right;
font-style: normal;
text-transform: none;
}
}
}
}
.record {
width: 100%;
height: 32rpx;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
font-weight: 400;
font-size: 24rpx;
color: #522510;
line-height: 32rpx;
text-align: center;
font-style: normal;
text-transform: none;
}
}
.new-develop-container {
width: 708rpx;
background: #fffbf5;
border-radius: 20rpx 20rpx 20rpx 20rpx;
border: 2rpx solid #c7a26d;
padding: 30rpx;
display: flex;
flex-direction: column;
.section-title {
width: 100%;
height: 44rpx;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
font-weight: 400;
font-size: 32rpx;
color: #695347;
line-height: 44rpx;
text-align: left;
font-style: normal;
text-transform: none;
}
.constructionSituation {
.project-info {
display: flex;
.line-left {
margin-right: 16rpx;
image {
width: 18rpx;
height: 19rpx;
}
.line {
margin-left: 8rpx;
width: 0;
height: 189rpx;
border: 2rpx #d8d8d8 dashed;
}
}
.info {
margin-right: 46rpx;
width: 368rpx;
.time {
width: 100%;
height: 28rpx;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
font-weight: 400;
font-size: 20rpx;
color: #808080;
line-height: 28rpx;
text-align: left;
font-style: normal;
text-transform: none;
}
text {
width: 112rpx;
height: 38rpx;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
font-weight: 400;
font-size: 28rpx;
color: #695347;
line-height: 38rpx;
text-align: left;
font-style: normal;
text-transform: none;
}
rich-text {
width: 368rpx;
height: 114rpx;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
font-weight: 400;
font-size: 24rpx;
color: #808080;
line-height: 38rpx;
letter-spacing: 2px;
text-align: left;
font-style: normal;
text-transform: none;
}
}
.content-image {
width: 198rpx;
height: 198rpx;
background: #d8d8d8;
border-radius: 8rpx 8rpx 8rpx 8rpx;
}
}
}
.more {
width: 100%;
height: 32rpx;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
font-weight: 400;
font-size: 24rpx;
color: #522510;
line-height: 32rpx;
text-align: center;
font-style: normal;
text-transform: none;
}
}
}
}
}
button {
position: fixed;
left: 51rpx;
bottom: 24rpx;
width: 648rpx;
height: 90rpx;
background: #a24242;
border-radius: 45rpx 45rpx 45rpx 45rpx;
color: #fff;
}
.rich-text-content {
/* 全局限制富文本内容宽度 */
img {
max-width: 100% !important;
height: auto !important;
display: block;
margin: 10rpx auto;
}
/* 其他富文本样式 */
p {
margin-bottom: 20rpx;
line-height: 1.6;
}
}
</style>