595 lines
16 KiB
Vue
595 lines
16 KiB
Vue
<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" @click="goDonationRecord"
|
||
>查看捐款记录
|
||
<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"
|
||
>查看更多{{ winB_Pagination.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();
|
||
},
|
||
goDonationRecord() {
|
||
// 跳转到捐款记录页面,传递建制ID
|
||
uni.navigateTo({
|
||
url: `/pages/institutionalStructure/donationRecord?formedId=${this.formedId}`,
|
||
fail: (err) => {
|
||
console.error("跳转失败:", err);
|
||
uni.showToast({
|
||
title: "页面跳转失败",
|
||
icon: "none",
|
||
});
|
||
},
|
||
});
|
||
},
|
||
},
|
||
};
|
||
</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>
|