<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">
              <circle-progress
                :canvas-size="65"
                :progress="getProgressPercentage"
                progress-color="#A24242"
                strokeWidth="5"
              ></circle-progress>
            </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" @click="goProjectDetail(item)">
              <view class="line-left">
                <image :src="buddhaIcon" mode="aspectFill"></image>
                <view class="line"></view>
              </view>
              <view class="info" @click="">
                <view class="time">
                  {{ item.createTime }}
                </view>
                <text>{{ item.title }}</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 v-if="projectDetails.state === '2'" @click="handleDonate">
      捐一笔
    </button>
    <u-popup v-model="show" border-radius="30" height="614rpx" mode="bottom">
      <view class="donation">
        <view class="title-row">
          <view class="title">为寺庙建设捐出</view>
          <u-icon
            class="close-icon"
            name="close"
            @click="show = false"
          ></u-icon>
        </view>

        <view class="donation-tip">
          <view class="amount">100元</view>
          <view class="equivalent">，相当于1次健康祈福</view>
        </view>

        <u-line color="#D8D8D8" />

        <view class="select">
          <view
            v-for="(item, index) in donationList"
            :key="index"
            :class="{ active: selectedIndex === index }"
            class="donation-option"
            @click="selectOption(index)"
          >
            {{ item }}次健康祈福
          </view>
        </view>

        <view class="customMoney">
          <input
            v-model="customAmount"
            class="custom-input"
            placeholder="自定义金额"
            type="number"
            @input="handleCustomInput"
          />
          <u-icon
            class="reload-icon"
            name="reload"
            @click="randomAmount"
          ></u-icon>
          <text class="random-text" @click="randomAmount">随缘</text>
        </view>

        <button class="confirm-btn" @click="toDonation">
          确认支付￥{{ payAmount }}
        </button>
      </view>
    </u-popup>

    <goToCertification
      :visible="visible"
      @goToCertification="goToCertification"
      @handleClose="handleClose"
    ></goToCertification>
  </view>
</template>

<script>
import CommonEnum from "../../enum/common";
import {
  getInstitutionalDetail,
  getProjectSchedule,
} from "../../api/institutionalStructure/institutionalStructureDetail";
import { createPagination } from "../../composables/winB_Pagination";
import GoToCertification from "./components/goToCertification.vue";
import { ordersFormed } from "../../api/order/order";

export default {
  components: { GoToCertification },
  mixins: [
    createPagination({
      fetchData: getProjectSchedule,
      mode: "loadMore",
      pageSize: 2,
      autoLoad: false, // 设置为 false，不自动加载
    }),
  ],
  data() {
    return {
      visible: false,
      show: false,
      CommonEnum,
      buddhaIcon: "https://api.ccttiot.com/image-1756353071821.png",
      loading: false,
      donationList: [1, 5, 10],
      selectedIndex: 0,
      customAmount: "",
      payAmount: "100",
      formedId: null, // 添加 formedId 到 data 中

      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: 6666666,
      },
      winB_List: [
        // {
        //   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: "19",
        //   templeId: "12",
        //   title: "施工情况01232",
        //   content:
        //     "<p>施工情况02施工情况02施工情况02施工情况02施工情况02施工情况02施工情况02施工情况02施工情况02施工情况02施工情况02施工情况02施工情况02施工情况02施工情况02施工情况02施工情况02施工情况02施工情况02施工情况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.winB_UpdateParams({ formedId: this.formedId });
    }
    // 页面加载时获取数据
    this.loadPageData();
  },
  methods: {
    handleClose() {
      this.visible = false;
    },
    goToCertification() {
      uni.navigateTo({
        url: "/pages/realName/realName",
      });
    },
    // 加载页面数据
    async loadPageData() {
      try {
        const [detailResponse] = await Promise.all([
          getInstitutionalDetail(this.formedId),
        ]);

        // 处理机构详情数据
        if (detailResponse?.code === 200) {
          this.projectDetails = detailResponse.data;
          console.log("projectDetails.state:", this.projectDetails.state);
        } 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",
          });
        },
      });
    },
    goProjectDetail(item) {
      uni.navigateTo({
        url: `/pages/institutionalStructure/projectDetail?title=${encodeURIComponent(item.title)}&content=${encodeURIComponent(item.content)}&createTime=${encodeURIComponent(item.createTime)}&coverUrl=${encodeURIComponent(item.coverUrl)}`,
      });
    },
    handleDonate() {
      console.log("根据state进行弹窗", this.projectDetails.state);
      if (this.projectDetails.state === "1") {
        uni.showToast({
          title: "捐款暂未开始",
          icon: "none",
          duration: 2000,
        });
      }

      if (this.projectDetails.state !== "1") {
        // 执行捐赠逻辑
        this.show = true;
      }
    },
    selectOption(index) {
      this.selectedIndex = index;
      this.payAmount = this.donationList[index] * 100;
      this.customAmount = "";
    },
    handleCustomInput() {
      if (this.customAmount) {
        this.payAmount = parseInt(this.customAmount);
        this.selectedIndex = -1;
      } else {
        this.payAmount = "";
      }
    },
    randomAmount() {
      // 生成随机金额（50-1000）
      const randomAmount = Math.floor(Math.random() * (1000 - 50 + 1)) + 50;
      this.customAmount = randomAmount.toString();
      this.payAmount = randomAmount;
      this.selectedIndex = -1;
    },

    async toDonation() {
      let res = await ordersFormed({
        payAmount: this.payAmount,
        formedId: this.formedId,
      });
      if (res.code === 200) {
        // this.openPaymentUrl(res.data.payParams.payUrl);
        console.log("已经支付");
      } else if (res.code === 10001) {
        this.show = false;
        this.visible = true; //打开实名弹窗
        // uni.showModal({
        //   title: "去实名",
        //   content: "需要实名",
        //   showCancel: true,
        //   confirmText: "yes",
        //   cancelText: "no",
        //   success: function () {
        //     uni.navigateTo({ url: "/pages/realName/realName" });
        //   },
        // });
        console.log("10001", res.msg);
      }
    },

    // 封装打开支付链接的方法
    openPaymentUrl(payUrl) {
      window.location.href = payUrl;
    },
  },
  computed: {
    // 计算筹款进度百分比
    getProgressPercentage() {
      if (
        !this.projectDetails.totalAmount ||
        this.projectDetails.totalAmount <= 0
      ) {
        return 0;
      }
      const percentage =
        (this.projectDetails.amountSum / this.projectDetails.totalAmount) * 100;
      return Math.min(parseFloat(percentage.toFixed(2)), 100); // 保留两位小数且不超过100%
    },
  },
};
</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;
        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 {
                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;
              }
            }
          }
        }

        u-line-progress {
          width: 400rpx !important;
        }

        .record {
          margin-top: 20rpx;
          display: flex;
          justify-content: center;
          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 {
        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;
  }
}

//捐款

.donation {
  background: #ffffff;
  padding: 32rpx;
}

.title-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 30rpx;

  .title {
    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;
  }

  .close-icon {
    font-size: 36rpx;
    color: #999;
  }
}

.donation-tip {
  display: flex;
  align-items: baseline;
  margin-bottom: 30rpx;

  .amount {
    height: 54rpx;
    font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
    font-weight: 400;
    font-size: 40rpx;
    color: #a24242;
    line-height: 54rpx;
    text-align: left;
    font-style: normal;
    text-transform: none;
  }

  .equivalent {
    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;
  }
}

.select {
  display: flex;
  gap: 20rpx;
  margin: 40rpx 0;

  .donation-option {
    padding: 24rpx;

    border: 2rpx solid #eeeeee;

    text-align: center;
    font-size: 28rpx;
    color: #666;
    transition: all 0.3s ease;

    background: #fff1dd;
    border-radius: 6rpx 6rpx 6rpx 6rpx;

    &.active {
      color: #a24242;
      font-weight: bold;
      background: #ffcdcd;
      border-radius: 6rpx 6rpx 6rpx 6rpx;
      border: 1rpx solid #a24242;
    }
  }
}

.customMoney {
  display: flex;
  align-items: center;
  margin: 40rpx 0;
  padding: 20rpx;
  background: #f8f8f8;
  border-radius: 12rpx;

  .custom-input {
    flex: 1;
    font-size: 28rpx;
    color: #333;
    background: transparent;
    border: none;
    outline: none;

    &::placeholder {
      color: #999;
    }
  }

  .reload-icon {
    margin: 0 20rpx;
    font-size: 32rpx;
    color: #666;
  }

  .random-text {
    font-size: 28rpx;
    color: #3d3d3d;
    font-weight: 500;
  }
}

.confirm-btn {
  width: 686rpx;
  height: 90rpx;
  background: #a24242;
  border-radius: 45rpx 45rpx 45rpx 45rpx;

  border: none;

  color: #ffffff;
  font-size: 32rpx;
  font-weight: bold;
  box-shadow: 0 4rpx 16rpx rgba(255, 68, 68, 0.3);

  &:active {
    transform: translateY(2rpx);
    box-shadow: 0 2rpx 8rpx rgba(255, 68, 68, 0.3);
  }
}
</style>
