|
|
- <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>
|