Jelajahi Sumber

活动模块更新

vaecebyZ 1 tahun lalu
induk
melakukan
02bb82ace7
8 mengubah file dengan 1869 tambahan dan 508 penghapusan
  1. 17 0
      api/activity.js
  2. 462 0
      my/activityManage/detail.vue
  3. 76 17
      my/activityManage/index.vue
  4. 10 3
      my/order/index.vue
  5. 13 1
      pages.json
  6. 11 3
      pages/activity/index.vue
  7. 451 484
      signUp/makeOut.vue
  8. 829 0
      signUp/orderDetail.vue

+ 17 - 0
api/activity.js

@@ -58,3 +58,20 @@ export function getOrderDetail(data) {
 	})
 }
 
+// 通过订单查询报名详情
+// activitySignupOrder/getActivityOrdersByOrderNo
+export function getActivityOrdersByOrderNo(data) {
+	return request({
+		url: '/zswl-cloud-shop/activitySignupOrder/getActivityOrdersByOrderNo',
+		data
+	})
+}
+
+// activitySignupOrder/search
+// 订单活动管理列表
+export function search(data) {
+	return request({
+		url: '/zswl-cloud-shop/activitySignupOrder/search',
+		data
+	})
+}

+ 462 - 0
my/activityManage/detail.vue

@@ -0,0 +1,462 @@
+<template>
+  <view class="order-detail">
+
+    <view class="content info">
+      <view class="order-info">
+        <!-- <image class="icon" :src="info.goodsList[0].goodsInfo.goodsPath" mode=""></image> -->
+        <view class="shop-info">
+          <view class="title">
+            {{ info.goodsList[0].goodsInfo.activityName }}
+          </view>
+          <view class="goods-desc">
+            活动时间: {{ info.goodsList[0].goodsInfo.activityStartTime }} 至 {{ info.goodsList[0].goodsInfo.activityEndTime
+            }}
+          </view>
+          <view class="price-box">
+            <view class="goods-desc">
+              报名人数:
+            </view>
+            <view class="goods-desc">
+              {{ signupDetailList.length || 0 }}人
+            </view>
+          </view>
+        </view>
+      </view>
+    </view>
+
+    <view class="content">
+      <view class="title"> 报名信息 </view>
+      <view v-for="(item, index) in signupDetailList">
+        <view class="item" v-for=" obj in item">
+          <view class="label"> {{ obj.name }} </view>
+          <view class="value" v-for="o in obj.value" v-if="!obj.isImg">
+            {{ o }}
+          </view>
+          <view class="value" v-else>
+            <image v-for="(img, index) in obj.value" @click="clickImg(obj.value, index)" :src="img" mode="widthFix"
+              style="width: 150rpx; height: 150rpx;"></image>
+          </view>
+        </view>
+        <!-- uniapp 下划线 -->
+        <u-divider v-if="signupDetailList.length - 1 != index"></u-divider>
+      </view>
+
+    </view>
+
+
+  </view>
+</template>
+
+<script>
+import { qrCode } from "@/api/order.js";
+import { payDetails, queryPayOrder, unRefund } from "@/api/payment.js";
+import { getActivityOrdersByOrderNo } from '@/api/activity.js'
+export default {
+  data() {
+    return {
+      isVisual: false, //是否是虚拟商品
+      codeData: "123",
+      show: false,
+      isJumped: false,
+      loading: false,
+      btnLoading: false,
+      oldBright: 0,
+      info: {
+        goodsList: [{ goodsState: "" }],
+        payment: {
+          paymentWay: "",
+          pay: false
+        },
+        extend: "",
+      },
+      dataCollectVo: null,
+      signupDetail: null,
+      signupDetailList: [],
+      isNotTime: false,
+    };
+  },
+  watch: {
+    // isNotTime(val) {
+    // 	if(this.isNotTime){
+    // 		this.payDetails(this.info.orderNo)
+    // 	}
+    // }
+  },
+  filters: {
+
+  },
+  computed: {
+  },
+  methods: {
+    clickImg(list, index) {
+      uni.previewImage({
+        urls: list,
+        current: list[index]
+      })
+    },
+    // 获取订单详情
+    payDetails(orderNo) {
+      payDetails(orderNo).then((res) => {
+        this.info = res.content;
+        this.$forceUpdate()
+        // 查询报名的人数信息
+        // getOrderDetail()
+        getActivityOrdersByOrderNo({
+          orderNo: orderNo,
+        }).then(({ content }) => {
+          const { list, dataCollectVo } = content;
+          try {
+
+            this.signupDetail = list.map(e => e.signupDetail);
+            // 报名信息
+            this.signupDetailList = this.signupDetail.map(e => {
+              const list = JSON.parse(e);
+              console.log('list', list);
+              return list.map(e => {
+                // 判断是否为附件
+                let type = e.hasOwnProperty('uploadType') && !!e.uploadType ? true : false;
+                return {
+                  name: e.dataName,
+                  value: e.content,
+                  isImg: type
+                }
+              })
+            })
+            console.log('报名信息', this.signupDetail);
+            // 表单模板数据
+            this.dataCollectVo = dataCollectVo.data;
+            this.$forceUpdate()
+          } catch (error) {
+            uni.showToast({
+              title: "获取报名信息失败。",
+              icon: "error",
+            });
+          }
+
+        })
+
+
+
+      });
+    },
+
+  },
+  onReady() { },
+  onLoad(options) {
+    this.info.orderNo = options.id;
+  },
+  onShow() {
+    this.payDetails(this.info.orderNo);
+  },
+  created() {
+    // this.info = JSON.parse(uni.getStorageSync('order'))
+  },
+};
+</script>
+
+<style lang="scss">
+.order-detail {
+  background: #f9f9f9;
+  min-height: 100vh;
+
+  // padding-bottom: 100rpx;
+  .status-box {
+    padding: 24rpx 24rpx 4rpx;
+    display: flex;
+    justify-content: space-between;
+
+    .text-box {
+      color: #181818;
+
+      .status {
+        font-weight: bold;
+        font-size: 32rpx;
+        display: flex;
+
+        .u-count-down__text {
+          color: #ff4d3a !important;
+        }
+      }
+
+      .notice {
+        font-size: 24rpx;
+        margin-top: 20rpx;
+      }
+    }
+  }
+
+  .progress {
+    .progress-title {
+      font-weight: 600;
+      font-size: 32rpx;
+      color: #181818;
+    }
+
+    .progress-desc {
+      font-weight: 300;
+      font-size: 24rpx;
+      color: #aaaaaa;
+      margin-top: 15rpx;
+    }
+  }
+
+  .shop-box {
+    width: 690rpx;
+    // margin: 0 30rpx;
+    // padding: 24rpx 24rpx 30rpx;
+    background: #fff;
+    border-radius: 16rpx;
+    margin-top: -30rpx;
+    box-sizing: border-box;
+
+    .shop-name {
+      font-weight: 600;
+      font-size: 32rpx;
+      color: #181818;
+      width: 100%;
+      white-space: nowrap;
+      overflow: hidden;
+      text-overflow: ellipsis;
+    }
+
+    .address {
+      font-weight: 300;
+      font-size: 24rpx;
+      color: #aaaaaa;
+      margin-top: 20rpx;
+      width: 100%;
+      white-space: nowrap;
+      overflow: hidden;
+      text-overflow: ellipsis;
+    }
+  }
+
+  .black {
+    color: #222222 !important;
+  }
+
+  .red {
+    color: red !important;
+  }
+
+  .fs28 {
+    font-size: 28rpx !important;
+    font-weight: bold;
+  }
+
+  .code-box {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+
+    .left {
+      .title {
+        font-weight: 500;
+        font-size: 28rpx;
+        color: #222222;
+      }
+
+      .codeNum {
+        font-weight: 300;
+        font-size: 24rpx;
+        color: #aaaaaa;
+        margin-top: 15rpx;
+      }
+    }
+
+    .code-btn {
+      display: flex;
+      align-items: center;
+      font-weight: 300;
+      font-size: 24rpx;
+      color: #aaaaaa;
+
+      .jiantou {
+        width: 24rpx;
+        height: 24rpx;
+      }
+    }
+  }
+
+  .input-box {
+    margin: 20rpx 30rpx;
+    padding: 28rpx 24rpx;
+    background: #ffffff;
+    border-radius: 16rpx 16rpx 16rpx 16rpx;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+
+    .label {
+      color: #222;
+      font-size: 28rpx;
+    }
+
+    .value {
+      font-size: 28rpx;
+      color: #aaaaaa;
+    }
+  }
+
+  .input-box-address {
+    margin: 20rpx 30rpx;
+    padding: 28rpx 24rpx;
+    background: #ffffff;
+    border-radius: 16rpx 16rpx 16rpx 16rpx;
+    // display: flex;
+    // align-items: center;
+    // justify-content: space-between;
+
+    .value {
+      color: #222;
+      font-size: 28rpx;
+    }
+
+    .label {
+      font-size: 28rpx;
+      margin: 10rpx 0;
+      color: #aaaaaa;
+    }
+  }
+
+
+  .content {
+    margin: 20rpx 30rpx;
+    padding: 28rpx 24rpx;
+    border-radius: 16rpx;
+    background: #fff;
+
+    .title {
+      font-weight: 600;
+      font-size: 28rpx;
+      color: #222222;
+    }
+
+    .item {
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      margin-top: 28rpx;
+
+      .label {
+        color: #222222;
+        font-size: 28rpx;
+      }
+
+      .value {
+        color: #999999;
+        font-size: 28rpx;
+      }
+    }
+  }
+
+  .pay-btn {
+    position: fixed;
+    bottom: 30px;
+    left: 4%;
+    background: $uni-color-primary;
+    width: 688rpx;
+    height: 80rpx;
+    line-height: 80rpx;
+    border-radius: 46rpx;
+    color: #fff;
+    margin-top: 50rpx;
+  }
+
+  .refund-box {
+    .refund-msg {
+      font-weight: 300;
+      font-size: 24rpx;
+      color: #222222;
+      margin-top: 15rpx;
+      line-height: 40rpx;
+    }
+  }
+
+  .apply-box {
+    position: relative;
+
+    .label {
+      font-weight: 600;
+      font-size: 28rpx;
+      color: #222222;
+    }
+
+    .value {
+      color: #999999;
+      font-size: 24rpx;
+      margin-top: 15rpx;
+    }
+
+    .jiantou {
+      position: absolute;
+      top: 50%;
+      right: 24rpx;
+      transform: translateY(-50%);
+      width: 24rpx;
+      height: 24rpx;
+    }
+  }
+
+  .info {
+    .order-info {
+      display: flex;
+
+      .icon {
+        width: 164rpx;
+        height: 164rpx;
+        border-radius: 16rpx;
+        flex-shrink: 0;
+      }
+
+      .shop-info {
+        display: flex;
+        flex-direction: column;
+        justify-content: space-between;
+        padding-left: 24rpx;
+        flex: 1;
+        box-sizing: border-box;
+
+        .title {
+          color: #181818;
+          font-size: 28rpx;
+          width: 450rpx;
+          white-space: nowrap;
+          overflow: hidden;
+          text-overflow: ellipsis;
+        }
+
+        .price-box {
+          display: flex;
+          align-items: center;
+          justify-content: space-between;
+
+          .price {
+            color: #181818;
+            font-size: 32rpx;
+            font-weight: bold;
+          }
+        }
+
+        .start-time,
+        .goods-desc {
+          font-size: 24rpx;
+          color: #aaaaaa;
+          width: 560rpx;
+          white-space: nowrap;
+          overflow: hidden;
+          text-overflow: ellipsis;
+        }
+      }
+    }
+  }
+
+  .wrap {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    height: 100vh;
+    overflow: hidden;
+  }
+}
+</style>

+ 76 - 17
my/activityManage/index.vue

@@ -14,8 +14,8 @@
         item.name }}</view>
     </view>
 
-    <zs-list mt="0" @load="loadMore" :status="listStatus">
-      <uni-card v-for="item in list" :key="item" padding="0" spacing="0">
+    <zs-list class="lsit-box" mt="0" @load="loadMore" :status="listStatus">
+      <uni-card v-for="item in dataList" :key="item" padding="0" spacing="0">
         <view @click.stop="onClick(item)">
           <view class='img-veiew'>
             <view class="badge">{{ item.status }}</view>
@@ -33,13 +33,13 @@
             </view>
             <u-line :customStyle="{ marginTop: '20rpx' }"></u-line>
             <view class="actionBox">
-              <view class="actionItem">
+              <view @click.stop="activityInfo(item)" class="actionItem">
                 <view>活动介绍</view>
               </view>
-              <view class="actionItem">
+              <view @click.stop="signUp(item)" class="actionItem">
                 <view>报名记录</view>
               </view>
-              <view class="actionItem">
+              <view @click.stop="orderInfo(item)" class="actionItem">
                 <view>查看订单</view>
               </view>
             </view>
@@ -53,7 +53,7 @@
 
 <script>
 import uniCard from "@/uni_modules/uni-card/components/uni-card/uni-card.vue";
-import { getActivityList } from "../../api/activity";
+import { search } from "../../api/activity";
 export default {
   components: {
     uniCard,
@@ -63,6 +63,7 @@ export default {
       navBarHeight: 0,
       statusBarHeight: 0,
       list: [],
+      dataList: [],
       triggered: false,
       loading: false,
       status: [
@@ -75,7 +76,7 @@ export default {
       shopId: uni.getStorageSync("gdShopId"),
       query: {
         currentPage: 1,
-        pageSize: 10,
+        pageSize: 3,
         activityEnable: 1,
         state: null,
       },
@@ -83,9 +84,15 @@ export default {
 
     };
   },
-  onShow() {
-    this.getList();
-    this.query.state = null;
+  onLoad() {
+    this.getList("onLoad");
+    this.listStatus = "loading"
+    this.query = {
+      currentPage: 1,
+      pageSize: 3,
+      activityEnable: 1,
+      state: null,
+    }
   },
   created() {
     this.navBarHeight = this.$navHight(1);
@@ -93,26 +100,43 @@ export default {
     this.navBarHeight = this.navBarHeight + 10 + "px";
   },
   methods: {
-    getList() {
-      getActivityList({
+    getList(where) {
+      console.log('触发了!', where, this.query.currentPage);
+      this.listStatus = "loading"
+      search({
         shopId: this.shopId,
         ...this.query,
       }).then(res => {
         this.list = res.content.records || [];
+        this.dataList = this.dataList.concat(this.list.map(e => {
+          return {
+            ...e.signupVo,
+            orderNo: e.orderNo,
+          }
+        }));
+        this.$forceUpdate();
         this.loading = false;
-        this.list = res.content.records;
-        let total = this.list.length
+        // this.list = res.content.records;
+        let total = this.dataList.length
         if (total >= res.content.total) {
           this.listStatus = "noMore";
         } else {
           this.listStatus = "more";
-          this.query.currentPage++;
+          console.log('pageChange', this.query.currentPage);
+          this.query.currentPage = this.query.currentPage + 1;
+
         }
       })
     },
     onClickStatus(item) {
+      this.dataList = []
+      this.query = {
+        currentPage: 1,
+        pageSize: 3,
+        activityEnable: 1,
+      }
       this.query.state = item.value;
-      this.getList();
+      this.getList("click");
     },
     onClick(row) {
       uni.navigateTo({
@@ -127,9 +151,26 @@ export default {
       }, 1000)
     },
     loadMore() {
-      console.log("加载更多了");
+      // console.log("加载更多了");  
+      this.getList("loadMore")
     },
 
+    signUp(row) {
+      uni.navigateTo({
+        url: "/my/activityManage/detail?id=" + row.orderNo,
+      });
+    },
+    orderInfo(row) {
+      uni.navigateTo({
+        url: "/signUp/orderDetail?id=" + row.orderNo,
+      });
+    },
+    activityInfo(row) {
+      uni.navigateTo({
+        url: "/signUp/index?scene=" + row.id,
+      });
+    }
+
   },
 };
 </script>
@@ -156,6 +197,11 @@ page {
   align-items: center;
 }
 
+::v-deep .zs-list {
+  height: 80vh;
+  overflow-y: scroll;
+}
+
 .content {
   // padding-top: 24%;
 }
@@ -178,6 +224,19 @@ page {
   .active {
     color: #333333;
     font-weight: bold;
+    position: relative;
+
+    &:after {
+      content: "";
+      display: block;
+      width: 100%;
+      height: 4rpx;
+      background-color: $uni-color-primary;
+      border-radius: 2rpx;
+      position: absolute;
+      bottom: -4rpx;
+      left: 0;
+    }
   }
 }
 

+ 10 - 3
my/order/index.vue

@@ -124,9 +124,16 @@ export default {
 						}
 						uni.hideLoading()
 						uni.setStorageSync('activity', JSON.stringify(obj))
-						uni.navigateTo({
-							url: '/signUp/makeOut?id=' + item.activityId
-						})
+						// uni.navigateTo({
+						// 	url: '/signUp/makeOut?id=' + item.activityId
+						// })
+						uni.redirectTo({
+							url: "/signUp/orderDetail?id=" + item.orderNo,
+							success() {
+								// this.loading = false;
+								uni.hideLoading();
+							},
+						});
 					})
 				} else {
 					uni.showToast({

+ 13 - 1
pages.json

@@ -107,7 +107,7 @@
 				{
 					"path": "index",
 					"style": {
-						"navigationBarTitleText": "体验农耕文化,传承中国传统"
+						"navigationBarTitleText": ""
 					}
 				},
 				{
@@ -115,6 +115,12 @@
 					"style": {
 						"navigationBarTitleText": "填写资料"
 					}
+				},
+				{
+					"path":"orderDetail",
+					"style": {
+						"navigationBarTitleText": "支付订单"
+					}
 				}
 			]
 		},
@@ -292,6 +298,12 @@
 						"navigationBarTitleText": "活动管理",
 						"navigationStyle": "custom"
 					}
+				},
+				{
+					"path":"activityManage/detail",
+					"style": {
+						"navigationBarTitleText": "报名信息"
+					}
 				}
 
 			]

+ 11 - 3
pages/activity/index.vue

@@ -14,7 +14,7 @@
     </view> -->
 
     <zs-list mt="0" @load="loadMore" :status="listStatus">
-      <uni-card v-for="item in list" :key="item" padding="0" spacing="0">
+      <uni-card v-for="item in list" :key="item.activityCover" padding="0" spacing="0">
         <view @click.stop="onClick(item)">
           <view class='img-veiew'>
             <!-- <view class="badge">{{ item.status }}</view> -->
@@ -81,13 +81,14 @@ export default {
   },
   methods: {
     getList() {
+      this.listStatus="loading"
       getActivityList({
         shopId: this.shopId,
         ...this.query,
       }).then(res => {
-        this.list = res.content.records || [];
+        this.list =  this.list.concat(res.content.records);
         this.loading = false;
-        this.list = res.content.records;
+        // this.list = res.content.records;
         let total = this.list.length
         if (total >= res.content.total) {
           this.listStatus = "noMore";
@@ -142,6 +143,13 @@ page {
 }
 </style>
 <style lang="scss" scoped>
+
+::v-deep .zs-list {
+  height: 80vh;
+  overflow-y: scroll;
+}
+
+
 .navBarBox .navBar .logo {
   width: 0rpx;
   height: 82rpx;

File diff ditekan karena terlalu besar
+ 451 - 484
signUp/makeOut.vue


+ 829 - 0
signUp/orderDetail.vue

@@ -0,0 +1,829 @@
+<template>
+  <view class="order-detail">
+    <view class="status-box">
+      <view class="text-box">
+        <!-- {{ info.orderType }} -->
+        <!-- <view class="status" v-if="info.orderType == 'WAIT_PAYMENT' && !isNotTime">
+          等待支付,剩余<u-count-down :time="closeTime" format="HH:mm:ss" @finish="finish"></u-count-down>
+        </view> -->
+        <view class="status">
+          {{ filterType(info.orderType) }}
+        </view>
+      </view>
+    </view>
+
+    <view class="content progress" v-if="
+      info.goodsList[0].goodsState == 'APPLY_REFUND' ||
+      info.goodsList[0].goodsState == 'REFUNDED'
+    " @click="refundDetail">
+      <view class="progress-title"> 退款进度 </view>
+
+      <view class="progress-desc"> 查看退款详情 </view>
+    </view>
+
+
+    <view class="content info">
+      <view class="order-info">
+        <!-- <image class="icon" :src="info.goodsList[0].goodsInfo.goodsPath" mode=""></image> -->
+        <view class="shop-info">
+          <view class="title">
+            {{ info.goodsList[0].goodsInfo.activityName }}
+          </view>
+          <view class="goods-desc">
+            活动时间: {{ info.goodsList[0].goodsInfo.activityStartTime }} 至 {{ info.goodsList[0].goodsInfo.activityEndTime }}
+          </view>
+          <view class="price-box">
+            <view class="goods-desc">
+              报名人数:
+            </view>
+            <view class="goods-desc">
+              {{ signupDetailList.length }}人
+            </view>
+          </view>
+
+          <!-- 有extend并且不是虚拟商品 -->
+          <!-- <view class="start-time" v-if="info.extend&&!isVisual">
+							出发时间:{{info.extend}}
+						</view> -->
+        </view>
+      </view>
+    </view>
+
+    <view class="content code-box" v-if="
+      info.goodsList[0].goodsState == 'WAIT_USE' &&
+      info.goodsList[0].goodsName != '二维码支付'
+    ">
+      <view class="left">
+        <view class="title"> 券码信息 </view>
+        <view class="codeNum"> </view>
+      </view>
+      <view class="code-btn" @click="checkCode">
+        查看券码
+        <image class="jiantou" src="../../static/jiantou-icon.png" mode=""></image>
+      </view>
+    </view>
+    <view class="content" v-if="info.goodsList[0].goodsState == 'USED'">
+      <view class="title"> 消费记录 </view>
+
+      <view class="item">
+        <view class="label"> 消费时间 </view>
+        <view class="value">
+          {{
+            $u.timeFormat(
+              info.goodsList[0].verifyModel.checkTime,
+              "yyyy-mm-dd hh:MM:ss"
+            )
+          }}
+        </view>
+      </view>
+      <view class="item">
+        <view class="label"> 消费门店 </view>
+        <view class="value">
+          {{ info.goodsList[0].verifyModel.shopName }}
+        </view>
+      </view>
+    </view>
+
+    <view class="content">
+      <view class="title"> 报名信息 </view>
+      <view v-for="(item, index) in signupDetailList" :key="index">
+        <view class="item" v-for=" obj in item" :key="obj.name">
+          <view class="label"> {{ obj.name }} </view>
+          <view class="value" v-for="o in obj.value" :key="o" v-if="!obj.isImg">
+            {{ o }}
+          </view>
+          <view class="value" v-else>
+            <image v-for="(img, index) in obj.value" :key="index" @click="clickImg(obj.value, index)" :src="img" mode="widthFix"
+              style="width: 150rpx; height: 150rpx;"></image>
+          </view>
+        </view>
+        <!-- uniapp 下划线 -->
+        <u-divider v-if="signupDetailList.length - 1 != index"></u-divider>
+      </view>
+
+    </view>
+
+
+    <view class="content">
+      <view class="title"> 订单信息 </view>
+      <view class="item">
+        <view class="label"> 订单编号 </view>
+        <view class="value">
+          {{ info.orderNo }}
+        </view>
+      </view>
+
+      <view class="item">
+        <view class="label"> 付款方式 </view>
+        <!-- <view class="value">
+          {{ info.payment.pay ? filterPay(info.payment.paymentWay) : "未支付" }}
+        </view> -->
+      </view>
+      <view class="item">
+        <view class="label"> 下单时间 </view>
+        <view class="value">
+          {{
+            $u.timeFormat(info.createTime, "yyyy-mm-dd hh:MM:ss") || "未支付"
+          }}
+        </view>
+      </view>
+
+      <view class="item" v-if="
+        info.goodsList[0].goodsState != 'WAIT_PAYMENT' &&
+        info.goodsList[0].goodsState != 'CLOSE'
+      ">
+        <view class="label"> 支付时间 </view>
+        <view class="value">
+          {{ $u.timeFormat(info.payment.paymentTime, "yyyy-mm-dd hh:MM:ss") }}
+        </view>
+      </view>
+
+      <view class="item">
+        <view class="label"> 订单备注 </view>
+        <view class="value">
+          {{
+            info.extend.remark || "无"
+          }}
+        </view>
+      </view>
+    </view>
+
+    <view class="content">
+      <view class="title"> 交易信息 </view>
+
+      <view class="item">
+        <view class="label"> 金额 </view>
+        <view class="value black">
+          ¥{{ info.payAmount }}
+        </view>
+      </view>
+
+      <!-- <view class="item">
+        <view class="label"> 优惠券 </view>
+        <view class="value red"> -¥{{ info.discountAmount }} </view>
+      </view> -->
+
+      <view class="item">
+        <view class="label"> 合计 </view>
+        <view class="value">
+          <text class="red fs28">¥{{ info.payAmount }}</text>
+        </view>
+      </view>
+    </view>
+
+    <view class="input-box" v-if="isVisual">
+      <view class="label"> 充值账号 </view>
+      <view class="value">
+        {{ JSON.parse(info.extend).account }}
+      </view>
+    </view>
+
+    <template v-if="info.goodsList[0].goodsState == 'APPLY_REFUND'">
+      <view class="content refund-box">
+        <view class="title"> 退款原因 </view>
+
+        <view class="refund-msg">
+          {{ info.goodsList[0].refundLog.remark }}
+        </view>
+      </view>
+      <button type="default" :loading="btnLoading" v-if="!info.payment.transferAll" class="pay-btn"
+        @click="cancelReply">
+        取消退款
+      </button>
+    </template>
+
+    <button type="default" :loading="btnLoading" class="pay-btn" v-if="info.goodsList[0].goodsState == 'WAIT_PAYMENT'"
+      @click="pay">
+      立即支付
+    </button>
+    <view class="content apply-box" v-else-if="
+      (info.goodsList[0].goodsState == 'WAIT_USE' ||
+        info.goodsList[0].goodsState == 'USED') &&
+      isRefund()
+    " @click="apply">
+      <view class="label"> 退款申请 </view>
+      <view class="value"> 如引发商品争议,可申请平台介入处理 </view>
+      <image class="jiantou" src="../../static/jiantou-icon.png" mode=""></image>
+    </view>
+
+    <!-- 二维码 -->
+    <u-overlay :show="show" v-if="show" :opacity="0.6">
+      <view class="wrap" @click.stop="close">
+        <uqrcode ref="uqrcode" type="2d" auto canvas-id="qrcode" :value="codeData" :loading="loading"
+          :options="{ margin: 20 }">
+          <template v-slot:loading>
+            <text style="color: black">拼命加载中...</text>
+          </template>
+        </uqrcode>
+      </view>
+    </u-overlay>
+  </view>
+</template>
+
+<script>
+import { qrCode } from "@/api/order.js";
+import { payDetails, queryPayOrder, unRefund } from "@/api/payment.js";
+import { getActivityOrdersByOrderNo } from '@/api/activity.js'
+export default {
+  data() {
+    return {
+      isVisual: false, //是否是虚拟商品
+      codeData: "123",
+      show: false,
+      isJumped: false,
+      loading: false,
+      btnLoading: false,
+      oldBright: 0,
+      info: {
+        goodsList: [{ goodsState: "" }],
+        payment: {
+          paymentWay: "",
+          pay: false
+        },
+        extend: "",
+      },
+      dataCollectVo: null,
+      signupDetail: null,
+      signupDetailList: null,
+      isNotTime: false,
+    };
+  },
+  watch: {
+    // isNotTime(val) {
+    // 	if(this.isNotTime){
+    // 		this.payDetails(this.info.orderNo)
+    // 	}
+    // }
+  },
+  filters: {
+
+  },
+  computed: {
+  },
+  methods: {
+    clickImg(list, index) {
+      uni.previewImage({
+        urls: list,
+        current: list[index]
+      })
+    },
+    filterType: function (val) {
+      console.log(val, val == "WAIT_PAYMENT");
+      if (val == "APPLY_REFUND") {
+        return "退款审核中";
+      } else if (val == "CLOSE") {
+        return "关闭订单";
+      } else if (val == "REFUNDED") {
+        return "已退款";
+      } else if (val == "REFUSAL_REFUND") {
+        return "拒绝退款";
+      } else if (val == "USED") {
+        return "订单已完成";
+      } else if (val == "WAIT_PAYMENT") {
+        return "待付款";
+      } else if (val == "WAIT_USE") {
+        return "待使用";
+      }
+    },
+    filterPay(val) {
+      if (val == "wx.unifiedOrder") {
+        return "微信支付";
+      } else if (val == "trade.create") {
+        return "支付宝支付";
+      } else if (val == "uac.miniOrder") {
+        return "云闪付支付";
+      } else if (val == "wx.miniPreOrder") {
+        return "银联支付"
+      } else {
+        return "-";
+      }
+    },
+    isRefund() {
+      if (!this.info.goodsList[0].verifyModel) {
+        //没核销
+        return true;
+      } else if (
+        this.info.goodsList[0].verifyModel &&
+        new Date().getTime() <
+        this.info.goodsList[0].verifyModel.checkTime + 1000 * 60 * 60 * 48
+      ) {
+        // 已核销 并且没超过48小时
+        return true;
+      } else {
+        return false;
+      }
+    },
+    finish() {
+      this.isNotTime = true;
+      console.log(222222, this.isNotTime);
+      this.payDetails(this.info.orderNo);
+    },
+    refundDetail() {
+      uni.navigateTo({
+        url: `/my/order/refundDetail?id=${this.info.orderNo}`,
+      });
+    },
+    checkCode() {
+      this.codeData = "";
+      this.$nextTick(() => {
+        this.show = true;
+        this.loading = true;
+        // let that = this;
+        // uni.getScreenBrightness({
+        // 	success(res) {
+        // 		// 获取用户手机亮度 保存起来
+        // 		that.oldBright = res.value
+        // 		setTimeout(()=>{
+        // 			uni.setScreenBrightness({
+        // 				value:1
+        // 			})
+        // 		},200)
+        // 	}
+        // })
+        qrCode(this.info.goodsList[0].id).then((res) => {
+          this.loading = false;
+          if (res.state == "Success") {
+            this.codeData = res.content;
+          }
+        });
+      });
+    },
+    close() {
+      this.show = false;
+      // uni.setScreenBrightness({
+      // 	value:this.oldBright
+      // })
+    },
+    apply() {
+      let that = this;
+      uni.navigateTo({
+        url: "./refund",
+        success: function (res) {
+          // 通过eventChannel向被打开页面传送数据
+          res.eventChannel.emit("orderInfo", that.info);
+        },
+      });
+    },
+    // 获取订单详情
+    payDetails(orderNo) {
+      payDetails(orderNo).then((res) => {
+        this.info = res.content;
+        this.$forceUpdate()
+        queryPayOrder(this.info.orderNo)
+        this.info.extend = JSON.parse(this.info.goodsList[0].extend);
+
+        // 查询报名的人数信息
+        // getOrderDetail()
+        getActivityOrdersByOrderNo({
+          orderNo: orderNo,
+        }).then(({ content }) => {
+          const { list, dataCollectVo } = content;
+          try {
+
+            this.signupDetail = list.map(e => e.signupDetail);
+            // 报名信息
+            this.signupDetailList = this.signupDetail.map(e => {
+              const list = JSON.parse(e);
+              console.log('list', list);
+              return list.map(e => {
+                // 判断是否为附件
+                let type = e.hasOwnProperty('uploadType') && !!e.uploadType ? true : false;
+                return {
+                  name: e.dataName,
+                  value: e.content,
+                  isImg: type
+                }
+              })
+            })
+            console.log('报名信息', this.signupDetail);
+            // 表单模板数据
+            this.dataCollectVo = dataCollectVo.data;
+            this.$forceUpdate()
+          } catch (error) {
+            uni.showToast({
+              title: "获取报名信息失败。",
+              icon: "error",
+            });
+          }
+
+        })
+        // 如果跳转过支付页面则定时获取订单更新的信息
+        if (this.isJumped) {
+          this.isJumped = false;
+          const that = this;
+          let checkTime = 0;
+          uni.showLoading({
+            title: "支付中",
+          });
+          const checkOrder = setInterval(() => {
+            queryPayOrder(that.info.orderNo).then((res1) => {
+              // 支付成功
+              if (res1.content.status == "TRADE_SUCCESS") {
+                that.payDetails(that.info.orderNo);
+                uni.showToast({
+                  title: "支付成功!",
+                  icon: "none",
+                });
+                clearInterval(checkOrder)
+                uni.hideLoading();
+                that.btnLoading = false;
+              } else {
+                checkTime++;
+              }
+              if (checkTime > 5) {
+                clearInterval(checkOrder)
+                that.btnLoading = false;
+                uni.showToast({
+                  title: "订单查询失败",
+                  icon: "none",
+                });
+                uni.hideLoading();
+              }
+            });
+          }, 1000);
+        }
+      });
+    },
+    toMap() {
+      uni.openLocation({
+        latitude: 26.4401,
+        longitude: 106.664,
+        name: "印象贵大文创店",
+        address: "贵州大学西校区西一区体育场楼下",
+      });
+    },
+    // 支付
+    pay() {
+      if (this.btnLoading) return;
+      this.btnLoading = true;
+      uni.showLoading({
+        title: "支付中",
+      });
+      let that = this;
+      let miniPayRequest = this.info.payment.miniPayRequest;
+      miniPayRequest = JSON.parse(miniPayRequest);
+      let query = encodeURIComponent(JSON.stringify({
+        sign: miniPayRequest.sign,
+        prepayid: miniPayRequest.prepayid,
+      }))
+
+      // 打开银联小程序
+      uni.navigateToMiniProgram({
+        appId: miniPayRequest.miniuser,
+        path: `${miniPayRequest.minipath}?appPayRequest=${query}`,
+        success: (res) => {
+          // 打开成功
+          this.isJumped = true;
+        },
+        fail: (err) => {
+          // console.log(err);
+          uni.hideLoading();
+          uni.showToast({
+            title: "取消支付",
+            icon: "none",
+          });
+          that.btnLoading = false
+        },
+      });
+
+    },
+    // 取消退款申请
+    cancelReply() {
+      if (this.btnLoading) return;
+      this.btnLoading = true;
+      uni.showLoading({
+        title: "取消中",
+      });
+      unRefund({ id: this.info.goodsList[0].id }).then((res) => {
+        this.btnLoading = false;
+        uni.hideLoading();
+
+        if (res.state == "Success") {
+          this.payDetails(this.info.orderNo);
+          uni.showToast({
+            title: "取消成功",
+            icon: "success",
+          });
+        }
+      });
+    },
+  },
+  onReady() { },
+  onLoad(options) {
+    this.info.orderNo = options.id;
+  },
+  onShow() {
+    this.payDetails(this.info.orderNo);
+  },
+  created() {
+    // this.info = JSON.parse(uni.getStorageSync('order'))
+  },
+};
+</script>
+
+<style lang="scss">
+.order-detail {
+  background: #f9f9f9;
+  min-height: 100vh;
+
+  // padding-bottom: 100rpx;
+  .status-box {
+    padding: 24rpx 24rpx 4rpx;
+    display: flex;
+    justify-content: space-between;
+
+    .text-box {
+      color: #181818;
+
+      .status {
+        font-weight: bold;
+        font-size: 32rpx;
+        display: flex;
+
+        .u-count-down__text {
+          color: #ff4d3a !important;
+        }
+      }
+
+      .notice {
+        font-size: 24rpx;
+        margin-top: 20rpx;
+      }
+    }
+  }
+
+  .progress {
+    .progress-title {
+      font-weight: 600;
+      font-size: 32rpx;
+      color: #181818;
+    }
+
+    .progress-desc {
+      font-weight: 300;
+      font-size: 24rpx;
+      color: #aaaaaa;
+      margin-top: 15rpx;
+    }
+  }
+
+  .shop-box {
+    width: 690rpx;
+    // margin: 0 30rpx;
+    // padding: 24rpx 24rpx 30rpx;
+    background: #fff;
+    border-radius: 16rpx;
+    margin-top: -30rpx;
+    box-sizing: border-box;
+
+    .shop-name {
+      font-weight: 600;
+      font-size: 32rpx;
+      color: #181818;
+      width: 100%;
+      white-space: nowrap;
+      overflow: hidden;
+      text-overflow: ellipsis;
+    }
+
+    .address {
+      font-weight: 300;
+      font-size: 24rpx;
+      color: #aaaaaa;
+      margin-top: 20rpx;
+      width: 100%;
+      white-space: nowrap;
+      overflow: hidden;
+      text-overflow: ellipsis;
+    }
+  }
+
+  .black {
+    color: #222222 !important;
+  }
+
+  .red {
+    color: red !important;
+  }
+
+  .fs28 {
+    font-size: 28rpx !important;
+    font-weight: bold;
+  }
+
+  .code-box {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+
+    .left {
+      .title {
+        font-weight: 500;
+        font-size: 28rpx;
+        color: #222222;
+      }
+
+      .codeNum {
+        font-weight: 300;
+        font-size: 24rpx;
+        color: #aaaaaa;
+        margin-top: 15rpx;
+      }
+    }
+
+    .code-btn {
+      display: flex;
+      align-items: center;
+      font-weight: 300;
+      font-size: 24rpx;
+      color: #aaaaaa;
+
+      .jiantou {
+        width: 24rpx;
+        height: 24rpx;
+      }
+    }
+  }
+
+  .input-box {
+    margin: 20rpx 30rpx;
+    padding: 28rpx 24rpx;
+    background: #ffffff;
+    border-radius: 16rpx 16rpx 16rpx 16rpx;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+
+    .label {
+      color: #222;
+      font-size: 28rpx;
+    }
+
+    .value {
+      font-size: 28rpx;
+      color: #aaaaaa;
+    }
+  }
+
+  .input-box-address {
+    margin: 20rpx 30rpx;
+    padding: 28rpx 24rpx;
+    background: #ffffff;
+    border-radius: 16rpx 16rpx 16rpx 16rpx;
+    // display: flex;
+    // align-items: center;
+    // justify-content: space-between;
+
+    .value {
+      color: #222;
+      font-size: 28rpx;
+    }
+
+    .label {
+      font-size: 28rpx;
+      margin: 10rpx 0;
+      color: #aaaaaa;
+    }
+  }
+
+
+  .content {
+    margin: 20rpx 30rpx;
+    padding: 28rpx 24rpx;
+    border-radius: 16rpx;
+    background: #fff;
+
+    .title {
+      font-weight: 600;
+      font-size: 28rpx;
+      color: #222222;
+    }
+
+    .item {
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      margin-top: 28rpx;
+
+      .label {
+        color: #222222;
+        font-size: 28rpx;
+      }
+
+      .value {
+        color: #999999;
+        font-size: 28rpx;
+      }
+    }
+  }
+
+  .pay-btn {
+    position: fixed;
+    bottom: 30px;
+    left: 4%;
+    background: $uni-color-primary;
+    width: 688rpx;
+    height: 80rpx;
+    line-height: 80rpx;
+    border-radius: 46rpx;
+    color: #fff;
+    margin-top: 50rpx;
+  }
+
+  .refund-box {
+    .refund-msg {
+      font-weight: 300;
+      font-size: 24rpx;
+      color: #222222;
+      margin-top: 15rpx;
+      line-height: 40rpx;
+    }
+  }
+
+  .apply-box {
+    position: relative;
+
+    .label {
+      font-weight: 600;
+      font-size: 28rpx;
+      color: #222222;
+    }
+
+    .value {
+      color: #999999;
+      font-size: 24rpx;
+      margin-top: 15rpx;
+    }
+
+    .jiantou {
+      position: absolute;
+      top: 50%;
+      right: 24rpx;
+      transform: translateY(-50%);
+      width: 24rpx;
+      height: 24rpx;
+    }
+  }
+
+  .info {
+    .order-info {
+      display: flex;
+
+      .icon {
+        width: 164rpx;
+        height: 164rpx;
+        border-radius: 16rpx;
+        flex-shrink: 0;
+      }
+
+      .shop-info {
+        display: flex;
+        flex-direction: column;
+        justify-content: space-between;
+        padding-left: 24rpx;
+        flex: 1;
+        box-sizing: border-box;
+
+        .title {
+          color: #181818;
+          font-size: 28rpx;
+          width: 450rpx;
+          white-space: nowrap;
+          overflow: hidden;
+          text-overflow: ellipsis;
+        }
+
+        .price-box {
+          display: flex;
+          align-items: center;
+          justify-content: space-between;
+
+          .price {
+            color: #181818;
+            font-size: 32rpx;
+            font-weight: bold;
+          }
+        }
+
+        .start-time,
+        .goods-desc {
+          font-size: 24rpx;
+          color: #aaaaaa;
+          width: 560rpx;
+          white-space: nowrap;
+          overflow: hidden;
+          text-overflow: ellipsis;
+        }
+      }
+    }
+  }
+
+  .wrap {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    height: 100vh;
+    overflow: hidden;
+  }
+}
+</style>

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini