buddhism/pages/future/future.vue

590 lines
16 KiB
Vue
Raw Normal View History

2025-07-30 16:14:56 +08:00
<template>
2025-08-06 16:00:05 +08:00
<view class="page">
2025-08-28 15:49:17 +08:00
<custom-navbar ref="customNavbar" title="未来规划" />
2025-08-14 11:22:53 +08:00
<tile-grid />
2025-08-28 12:00:35 +08:00
<view class="bg">
<view class="container">
<text class="proName">{{ projectDetails.proName }}</text>
2025-08-28 15:49:17 +08:00
<image
:src="projectDetails.imgUrl"
class="imgUrl"
mode="aspectFill"
></image>
2025-08-28 12:00:35 +08:00
<text class="tip">{{ projectDetails.proName }}效果图</text>
<text class="planTitle">用善意筑就明天的模样</text>
<text class="proProfile">{{ projectDetails.proProfile }}</text>
<text class="introduce">项目介绍</text>
2025-08-28 18:01:59 +08:00
<rich-text
:nodes="formatRichText(projectDetails.proIntroduce)"
class="rich-text-content"
></rich-text>
2025-08-28 12:00:35 +08:00
<view class="donorContainer">
<text>项目筹款情况</text>
<view class="donorData">
2025-08-28 15:49:17 +08:00
<view class="CircleProgress"></view>
2025-08-28 12:00:35 +08:00
<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>
2025-08-28 15:49:17 +08:00
</view>
<view class="new-develop-container">
<text class="section-title">最新进展</text>
<view
2025-08-29 15:33:14 +08:00
v-for="item in winB_List"
2025-08-28 15:49:17 +08:00
: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>
2025-08-28 12:00:35 +08:00
</view>
</view>
2025-08-29 15:33:14 +08:00
<view v-if="winB_NoMore === false" class="more" @click="loadMore"
>查看更多{{ remainingItems }}条进展
</view>
<view v-else class="more">到底了</view>
2025-08-28 12:00:35 +08:00
</view>
</view>
2025-08-06 16:00:05 +08:00
</view>
2025-08-28 15:49:17 +08:00
<button>捐一笔</button>
2025-08-06 16:00:05 +08:00
</view>
2025-07-30 16:14:56 +08:00
</template>
2025-08-06 16:00:05 +08:00
<script>
2025-08-28 12:00:35 +08:00
import CommonEnum from "../../enum/common";
2025-08-28 17:40:24 +08:00
import {
getInstitutionalDetail,
getProjectSchedule,
} from "../../api/institutionalStructure/institutionalStructureDetail";
2025-08-29 15:33:14 +08:00
import { createPagination } from "../../composables/winB_Pagination";
2025-08-06 16:00:05 +08:00
2025-08-28 12:00:35 +08:00
export default {
2025-08-29 15:33:14 +08:00
mixins: [
createPagination({
fetchData: getProjectSchedule,
mode: "loadMore",
pageSize: 2,
}),
],
2025-08-28 15:49:17 +08:00
components: {},
2025-08-28 12:00:35 +08:00
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,
2025-08-28 15:49:17 +08:00
id: "6",
2025-08-28 12:00:35 +08:00
templeId: "11",
2025-08-28 15:49:17 +08:00
proName: "123",
2025-08-28 12:00:35 +08:00
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: "少林寺",
2025-08-28 15:49:17 +08:00
donorCount: 6,
amountSum: 6666,
2025-08-14 11:22:53 +08:00
},
2025-08-28 12:00:35 +08:00
listData: [
{
id: "18",
templeId: "12",
2025-08-29 15:33:14 +08:00
title: "施工情况01",
2025-08-28 12:00:35 +08:00
content: "<p>施工情况02施工情况02...</p>",
status: "1",
templeName: "寒山寺",
createTime: "2025-07-09 13:50:57",
2025-08-28 15:49:17 +08:00
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",
2025-08-28 12:00:35 +08:00
},
2025-08-29 15:33:14 +08:00
{
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",
},
2025-08-28 12:00:35 +08:00
],
};
},
onLoad(options) {
if (options) {
console.log("接收到的参数:", options.formedId);
this.formedId = options.formedId;
}
2025-08-28 12:00:35 +08:00
// 页面加载时获取数据
this.loadPageData();
2025-08-29 15:33:14 +08:00
this.winB_GetList();
2025-08-28 12:00:35 +08:00
},
methods: {
// 加载页面数据
async loadPageData() {
try {
2025-08-29 15:33:14 +08:00
const [detailResponse] = await Promise.all([
2025-08-28 17:40:24 +08:00
getInstitutionalDetail(this.formedId),
]);
// 处理机构详情数据
if (detailResponse?.code === 200) {
this.projectDetails = detailResponse.data;
} else {
console.warn("获取机构详情失败:", detailResponse?.message);
uni.showToast({
title: "获取详情失败",
icon: "none",
});
}
2025-08-28 12:00:35 +08:00
} catch (error) {
console.error("获取页面数据失败:", error);
2025-08-28 17:40:24 +08:00
uni.showToast({
title: "数据加载失败",
icon: "none",
});
} finally {
2025-08-28 12:00:35 +08:00
this.loading = false;
}
2025-08-14 11:22:53 +08:00
},
2025-08-28 18:01:59 +08:00
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;
},
2025-08-29 15:33:14 +08:00
loadMore() {
this.winB_LoadMore();
},
},
computed: {
remainingItems() {
return (
this.winB_Pagination.total -
this.winB_Pagination.currentPage * this.winB_Pagination.pageSize
);
},
2025-08-28 12:00:35 +08:00
},
};
2025-07-30 16:14:56 +08:00
</script>
<style lang="scss" scoped>
2025-08-28 12:00:35 +08:00
.page {
2025-08-28 15:49:17 +08:00
background: linear-gradient(to bottom, #f5f0e7 500rpx, #fff 500rpx);
2025-08-28 12:00:35 +08:00
.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%;
2025-08-28 15:49:17 +08:00
2025-08-28 12:00:35 +08:00
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 {
2025-08-28 15:49:17 +08:00
margin-bottom: 34rpx;
2025-08-28 12:00:35 +08:00
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;
}
}
2025-08-28 15:49:17 +08:00
.new-develop-container {
width: 708rpx;
2025-08-28 18:01:59 +08:00
2025-08-28 15:49:17 +08:00
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;
2025-08-29 09:16:06 +08:00
height: 100%;
2025-08-28 15:49:17 +08:00
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;
2025-08-29 09:16:06 +08:00
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
2025-08-28 15:49:17 +08:00
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;
2025-08-29 09:16:06 +08:00
max-height: 114rpx; /* 3行 × 1.5行高 */
overflow: hidden;
text-overflow: ellipsis;
2025-08-28 15:49:17 +08:00
}
}
.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;
}
}
2025-08-28 12:00:35 +08:00
}
2025-08-14 11:22:53 +08:00
}
2025-08-28 12:00:35 +08:00
}
2025-08-28 15:49:17 +08:00
button {
position: fixed;
left: 51rpx;
bottom: 24rpx;
width: 648rpx;
height: 90rpx;
background: #a24242;
border-radius: 45rpx 45rpx 45rpx 45rpx;
color: #fff;
2025-08-28 12:00:35 +08:00
}
2025-08-28 18:01:59 +08:00
.rich-text-content {
/* 全局限制富文本内容宽度 */
img {
max-width: 100% !important;
height: auto !important;
display: block;
margin: 10rpx auto;
}
/* 其他富文本样式 */
p {
margin-bottom: 20rpx;
line-height: 1.6;
}
}
2025-08-14 11:22:53 +08:00
</style>