|                                                                                                                                                                                                                                |  | <template>  <view class="page__view">		<navbar leftClick @leftClick="$utils.navigateBack" >      <view class="flex">        <view>待支付</view>        <template v-if="time">          <uv-count-down             :time="time"             format="mm:ss"             autoStart             millisecond             @change="onChange">            <view class="flex countdown">              <text>剩余</text>              <text>{{ `${timeData.minutes}:${timeData.seconds}` }}</text>            </view>          </uv-count-down>          <view>后关闭</view>        </template>      </view>    </navbar>
    <view class="main">
      <productCard :data="productCardData"></productCard>
      <orderInfoView :data="detail"></orderInfoView>
      <view class="notice">        <view class="notice-header">下单须知</view>        <view class="notice-content">				  <uv-parse :content="configList['order_instructions']"></uv-parse>        </view>      </view>
    </view>  		<view class="bottom">      <view class="agreement">				<uv-checkbox-group					v-model="checkboxValue"					shape="circle"				>					<uv-checkbox						size="40rpx"						icon-size="40rpx"						activeColor="#00A9FF"						:name="1"					></uv-checkbox>				</uv-checkbox-group>				<view class="desc">          我已阅读并同意					<text class="highlight" @click="$refs.modal.open('unsubscribe_policy', '退订政策')">《退订政策》</text>					<text class="highlight" @click="$refs.modal.open('model_contract', '合同范本')">《合同范本》</text>					<text class="highlight" @click="$refs.modal.open('booking_instructions', '预订须知')">《预订须知》</text>					<text class="highlight" @click="$refs.modal.open('safety_reminder', '安全提示')">《安全提示》</text>				</view>			</view>      <view class="flex bar">        <button plain class="flex flex-column btn btn-simple" open-type="contact">          <image class="icon" src="@/pages_order/static/product/icon-service.png" mode="widthFix"></image>          <view>联系客服</view>        </button>        <view class="col flex price">          <view class="price-label">            合计          </view>          <view class="price-unit">¥</view>          <view class="price-value">            {{ detail.payAmount }}          </view>        </view>        <button class="col btn btn-primary" @click="onPay">立即支付</button>      </view>    </view>
		<agreementModal ref="modal" @confirm="onConfirmAgreement"></agreementModal>
  </view></template>
<script>	import { mapState } from 'vuex'
  import productCard from '@/pages_order/order/components/productCard.vue'  import orderInfoView from '@/pages_order/order/components/orderInfoView.vue'	import agreementModal from '@/pages_order/components/agreementModal.vue'
  export default {    components: {      productCard,      orderInfoView,      agreementModal,    },    data() {      return {        id: null,        detail: {},        time: null,        timeData: {},        checkboxValue: [],      }    },    computed: {			...mapState(['configList', 'userInfo', 'orderInfo']),      productCardData() {        const {           activityId,          activityTitle,            activityBrief,          activityTag,          startDate,          endDate,        } = this.detail
        return {          time: 'time',          product: {            id: activityId,            title: activityTitle,            brief: activityBrief,            tagDetails: activityTag,            dateList: [              {                id: 'time',                startDate,                endDate,              }            ]          }        }      },    },    async onLoad({ id }) {      this.id = id
      await this.fetchOrderDetail()      // todo
      // this.updateCountdown()
    },    async onPullDownRefresh() {      await this.fetchOrderDetail()      uni.stopPullDownRefresh()    },    methods: {      async fetchOrderDetail() {        try {
          this.detail = await this.$fetch('queryOrderById', { orderId: this.id })          console.log('orderInfo', this.detail)
        } catch (err) {
        }
        uni.stopPullDownRefresh()      },      onConfirmAgreement(confirm) {        if (confirm) {          this.checkboxValue = [1]        } else {          this.checkboxValue = []        }      },      async onPay() {        if(!this.checkboxValue.length){          return uni.showToast({            title: '请先同意《退订政策》《合同范本》《预订须知》《安全提示》',            icon:'none'          })        }
        try {               const result = await this.$fetch('payOrder', { orderId: this.id })                    await uni.requestPaymentWxPay({ result })                 uni.showToast({            title: '支付成功',            icon: 'none'          })                    setTimeout(() => {            // todo: check → jump to order list page ?
            uni.reLaunch({              url: `/pages_order/order/orderList/index`            });          }, 700)        } catch (err) {
        }      },      updateCountdown() {
        let current = dayjs()        let startTime = dayjs(this.detail.createTime)
        if (startTime.isSameOrBefore(current)) {          this.time = null          return        }
        this.time = startTime.diff(current, 'second')
      },			onChange(e) {				this.timeData = e			},    },  }</script>
<style scoped lang="scss">
  @import '../styles/style.scss';
  .bottom {    .bar {      .price {        justify-content: flex-start;        column-gap: 8rpx;                &-label {          font-size: 24rpx;          color: #626262;        }
        &-unit,        &-value {          font-weight: 500;          color: #FF4800;        }
        &-unit {          font-size: 24rpx;        }
        &-value {          font-size: 40rpx;        }      }
      .btn-simple {        flex: none;        width: auto;        font-family: PingFang SC;        font-weight: 400;        font-size: 22rpx;        line-height: 1.1;        color: #999999;        border: none;        border-radius: unset;
        .icon {          width: 52rpx;          height: auto;          margin-bottom: 4rpx;        }      }    }  }  </style>
 |