|
|
- <template>
- <view class="page__view">
- <navbar title="支付" leftClick @leftClick="$utils.navigateBack" />
-
- <view class="flex flex-column info">
- <view>实付金额</view>
- <view class="flex price">
- <view>¥</view>
- <view class="highlight">{{ payAmount }}</view>
- </view>
- <view class="flex flex-column contact">
- <view>联系客服获取抵扣码</view>
- <image class="qr" :src="configList.customer_service_qrcode" :show-menu-by-longpress="true" mode="widthFix"></image>
- </view>
- </view>
-
- <view class="form">
- <uv-form
- ref="form"
- :model="form"
- :rules="rules"
- errorType="toast"
- >
- <view class="form-item">
- <uv-form-item prop="payment" :customStyle="formItemStyle">
- <view class="form-item-label">选择支付方式</view>
- <view class="form-item-content">
- <uv-radio-group
- v-model="form.payment"
- placement="column"
- shape="circle"
- size="30rpx"
- iconSize="30rpx"
- activeColor="#014FA2"
- >
- <view class="payment">
- <view class="flex payment-content">
- <view class="flex payment-content-info">
- <image class="icon" src="@/pages_order/static/report/icon-wx.png" mode="widthFix"></image>
- <view>微信支付</view>
- </view>
- <view>
- <uv-radio :name="0"></uv-radio>
- </view>
- </view>
- </view>
- <view class="payment">
- <view class="flex payment-content">
- <view class="flex payment-content-info">
- <image class="icon" src="@/pages_order/static/report/icon-coupon.png" mode="widthFix"></image>
- <view>兑换码抵扣支付</view>
- </view>
- <view>
- <uv-radio :name="1"></uv-radio>
- </view>
- </view>
- </view>
- </uv-radio-group>
- </view>
- </uv-form-item>
- </view>
- <view class="form-item is-child" v-if="form.payment == 1">
- <uv-form-item prop="code" :customStyle="formItemStyle">
- <view class="flex row">
- <view class="form-item-label">兑换码</view>
- <view class="form-item-content">
- <input
- v-model="form.code"
- placeholder="请输入兑换码"
- placeholderStyle="color: #999999; font-size: 30rpx; font-weight: 400;"
- />
- </view>
- </view>
- </uv-form-item>
- </view>
- </uv-form>
- </view>
-
- <view class="bottom">
- <button class="btn" @click="onPay">立即支付</button>
- </view>
-
- <codeErrorPopup ref="codeErrorPopup"></codeErrorPopup>
- </view>
- </template>
-
- <script>
- import codeErrorPopup from './codeErrorPopup.vue'
-
- export default {
- components: {
- codeErrorPopup,
- },
- data() {
- return {
- batchNo: null,
- form: {
- payment: 0,
- code: null,
- },
- rules: {
- 'payment': {
- type: 'number',
- required: false,
- message: '请选择支付方式',
- },
- 'code': {
- type: 'string',
- required: true,
- message: '请输入兑换码',
- },
- },
- formItemStyle: { padding: 0 },
- }
- },
- computed: {
- payAmount() {
- return Number(this.configList.pay_amount)
- }
- },
- onLoad(arg) {
- const { batchNo } = arg
- this.batchNo = batchNo
- },
- methods: {
- async onPay() {
- try {
- await this.$refs.form.validate()
-
- const {
- payment,
- code,
- } = this.form
-
- let payAmount = this.payAmount
- let discountAmount = 0
-
- if (payment == 1) { // 兑换码
- const infoRes = await this.$fetch('queryCodeById', { code }, false, null, true)
- const { result: infoResult } = infoRes
-
- if (!infoResult || infoResult?.isUse !== '0') {
- this.$refs.codeErrorPopup.open()
- return
- }
-
- discountAmount = infoResult.discountAmount
- payAmount -= discountAmount
- }
-
- const params = {
- batchNo: this.batchNo,
- payAmount,
- discountAmount,
- code,
- }
-
- const result = await this.$fetch('createOrder', params)
-
- await uni.requestPaymentWxPay({ result })
-
- uni.showToast({
- title: '支付成功',
- icon: 'none'
- })
-
- setTimeout(() => {
- uni.redirectTo({
- url: `/pages_order/report/userInfo?batchNo=${this.batchNo}`
- })
- }, 700)
- } catch (err) {
-
- }
- },
- },
- }
- </script>
-
- <style scoped lang="scss">
-
- .info {
- width: 100%;
- padding: 96rpx 62rpx 51rpx 62rpx;
- box-sizing: border-box;
- font-size: 28rpx;
- line-height: 50rpx;
- color: #000000;
-
- .price {
- margin-top: 23rpx;
- align-items: baseline;
- column-gap: 13rpx;
- font-size: 51rpx;
- line-height: 72rpx;
- color: #000000;
-
- .highlight {
- font-size: 78rpx;
- line-height: 110rpx;
- }
- }
-
- .contact {
- margin-top: 52rpx;
- row-gap: 40rpx;
- width: 100%;
- padding: 30rpx 0 26rpx 0;
- box-sizing: border-box;
- border: 1rpx dashed #014FA2;
-
- .qr {
- width: 157rpx;
- height: auto;
- }
- }
- }
-
- .form {
-
- &-item {
- &-label {
- padding: 0 38rpx;
- font-size: 28rpx;
- line-height: 50rpx;
- color: #000000;
- }
-
- &-content {
- }
-
- }
- }
-
- .payment {
- &:first-child {
- margin-top: 24rpx;
- }
-
- & + & {
- border-top: 20rpx solid #F7F7F7;
- }
-
- &-content {
- justify-content: space-between;
- padding: 32rpx 60rpx 32rpx 50rpx;
-
-
- &-info {
- column-gap: 15rpx;
- font-size: 30rpx;
- color: #000000;
-
- .icon {
- width: 58rpx;
- height: auto;
- }
- }
- }
- }
-
- .form-item.is-child {
- padding: 22rpx 60rpx 0 123rpx;
-
- .form-item-label,
- .form-item-content {
- padding: 0;
- }
-
- .form-item-label {
- padding-right: 16rpx;
- font-size: 30rpx;
- }
-
- .form-item-content {
- flex: 1;
- padding: 11rpx;
- background: #F7F7F7;
- }
- }
-
- .bottom {
- position: fixed;
- left: 0;
- bottom: 0;
- width: 100%;
- padding: 35rpx 56rpx;
- padding-bottom: calc(env(safe-area-inset-bottom) + 35rpx);
- background: #FFFFFF;
- box-sizing: border-box;
-
- .btn {
- width: 100%;
- padding: 29rpx 0;
- font-size: 30rpx;
- line-height: 1.5;
- color: #FFFFFF;
- background: #014FA2;
- border-radius: 50rpx;
- }
- }
-
- </style>
|