buddhism/pages/future/future.vue
2025-08-29 15:33:14 +08:00

590 lines
16 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 winB_List"
: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 v-if="winB_NoMore === false" class="more" @click="loadMore"
>查看更多{{ remainingItems }}条进展
</view>
<view v-else class="more">到底了</view>
</view>
</view>
</view>
<button>捐一笔</button>
</view>
</template>
<script>
import CommonEnum from "../../enum/common";
import {
getInstitutionalDetail,
getProjectSchedule,
} from "../../api/institutionalStructure/institutionalStructureDetail";
import { createPagination } from "../../composables/winB_Pagination";
export default {
mixins: [
createPagination({
fetchData: getProjectSchedule,
mode: "loadMore",
pageSize: 2,
}),
],
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: "施工情况01",
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",
},
{
id: "19",
templeId: "12",
title: "施工情况01232",
content: "<p>施工情况02施工情况02...</p>",
status: "1",
templeName: "寒山寺",
createTime: "2025-07-09 13:50:57",
coverUrl: "https://api.ccttiot.com/IMG01-1751968117197.jpg",
},
{
id: "19",
templeId: "12",
title: "施工情况01232",
content: "<p>施工情况02施工情况02...</p>",
status: "1",
templeName: "寒山寺",
createTime: "2025-07-09 13:50:57",
coverUrl: "https://api.ccttiot.com/IMG01-1751968117197.jpg",
},
{
id: "19",
templeId: "12",
title: "施工情况01232",
content: "<p>施工情况02施工情况02...</p>",
status: "1",
templeName: "寒山寺",
createTime: "2025-07-09 13:50:57",
coverUrl: "https://api.ccttiot.com/IMG01-1751968117197.jpg",
},
{
id: "19",
templeId: "12",
title: "施工情况01232",
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();
this.winB_GetList();
},
methods: {
// 加载页面数据
async loadPageData() {
try {
const [detailResponse] = await Promise.all([
getInstitutionalDetail(this.formedId),
]);
// 处理机构详情数据
if (detailResponse?.code === 200) {
this.projectDetails = detailResponse.data;
} else {
console.warn("获取机构详情失败:", detailResponse?.message);
uni.showToast({
title: "获取详情失败",
icon: "none",
});
}
} catch (error) {
console.error("获取页面数据失败:", error);
uni.showToast({
title: "数据加载失败",
icon: "none",
});
} 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;
},
loadMore() {
this.winB_LoadMore();
},
},
computed: {
remainingItems() {
return (
this.winB_Pagination.total -
this.winB_Pagination.currentPage * this.winB_Pagination.pageSize
);
},
},
};
</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 {
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: 100%;
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;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
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;
max-height: 114rpx; /* 3行 × 1.5行高 */
overflow: hidden;
text-overflow: ellipsis;
}
}
.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>