123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312 |
- <template>
- <view class="cashier-list-content">
- <view v-if="show">
- <u-radio-group v-model="paymentMode" placement="row" icon-placement="right" @change="handleChangePaymentMode">
- <view v-for="payment in paymentList" :key="payment.id" class="cashier">
- <view class="cashier-item" @click="handleChangePaymentMode(payment.paymentMode, payment.disabled)">
- <view class="icon-text">
- <image class="pay-type-img-inner" :src="payment.icon" mode="widthFix" />
- {{ payment.label }}
- <span v-if="paymentMode === 3 && paymentMode === payment.paymentMode">
- (手续费:¥{{ flowerObj.hbServiceChargeTotal }})
- </span>
- </view>
- <view class="radio">
- <u-radio :disabled="payment.disabled" active-color="#c5aa7b" :name="payment.paymentMode" />
- </view>
- </view>
- <!-- 花呗分期 -->
- <view v-if="paymentMode === 3 && paymentMode === payment.paymentMode" class="ali-hb-content">
- <u-radio-group
- v-model="flowerObj.hbByStagesPeriods" placement="row" icon-placement="right"
- @change="handleChangePeriods"
- >
- <view v-for="(flowerItem, index) in flowerObj.hbByStagesList" :key="index" class="cashier">
- <view class="cashier-item" @click="handleChangePeriods(flowerItem.numberOfStages, flowerItem.disabled)">
- <view class="icon-text">
- {{ flowerItem.numberOfStages }}期(¥{{ flowerItem.price }}/期)
- </view>
- <view class="radio-context">
- 手续费:¥{{ flowerItem.serviceCharge }}/期
- <u-radio
- class="radio" active-color="#c5aa7b" :disabled="flowerItem.disabled"
- :name="flowerItem.numberOfStages"
- />
- </view>
- </view>
- </view>
- </u-radio-group>
- </view>
- </view>
- </u-radio-group>
- </view>
- </view>
- </template>
- <script>
- import { getOrderHuabeiConfigApi } from '../../api/user'
- export default {
- name: 'CashierList',
- props: {
- totalPrice: {
- type: Number,
- default: () => 200
- },
- // 是否显示,用于默认某一个支付
- show: {
- type: Boolean,
- default: false
- }
- },
- data() {
- return {
- paymentMode: 1, // 支付方式 1微信 2支付宝 3花呗分期
- paymentList: [
- // {
- // id: 1,
- // label: '微信支付',
- // paymentMode: 1,
- // icon: require('../../static/images/user/pay/wechat_pay.png'),
- // disabled: false
- // },
- // {
- // id: 2,
- // label: '支付宝支付',
- // paymentMode: 2,
- // icon: require('../../static/images/user/pay/alipay.png'),
- // disabled: false
- // },
- // {
- // id: 3,
- // label: '花呗分期',
- // paymentMode: 3,
- // icon: require('../../static/images/user/pay/huabei.png'),
- // disabled: false
- // },
- {
- id: 4,
- label: '通联支付',
- paymentMode: 4,
- icon: require('../../static/images/user/pay/tonglian.png'),
- disabled: false
- }
- ],
- // 花呗相关
- flowerObj: {
- hbChargeType: 1, // 花呗手续费支付方式 1-商户支付 2-用户支付 后端接口返回
- hbByStagesPeriods: -1, // 花呗分期期数 3 6 12
- hbByStagesList: [
- {
- rate: 0,
- price: 0,
- numberOfStages: 3,
- serviceCharge: 0,
- disabled: false
- },
- {
- rate: 0,
- price: 0,
- numberOfStages: 6,
- serviceCharge: 0,
- disabled: false
- },
- {
- rate: 0,
- price: 0,
- numberOfStages: 12,
- serviceCharge: 0,
- disabled: false
- }
- ], // 花呗手续费比例列表 【{3期},{6期},{12期}】
- hbServiceChargeTotal: 0 // 花呗支付总手续费
- }
- }
- },
- mounted() {
- this.getTheFlowerConfig()
- this.handleSetDisable()
- this.handleNoticeFather()
- },
- methods: {
- /**
- * 根据环境更改可选支付项
- */
- handleSetDisable() {
- // #ifdef MP-WEIXIN
- // this.paymentList[0].disabled = false
- // this.paymentList[1].disabled = true
- // this.paymentList[2].disabled = true
- this.paymentList[0].disabled = false
- this.paymentMode = 4 // 1
- // #endif
- // #ifdef MP-ALIPAY
- // this.paymentList[0].disabled = true
- // this.paymentList[1].disabled = false
- // this.paymentList[2].disabled = false
- this.paymentList[0].disabled = false
- this.paymentMode = 4 // 2
- // #endif
- // #ifdef APP || H5
- // this.paymentList[0].disabled = false
- // this.paymentList[1].disabled = true
- // this.paymentList[2].disabled = true
- this.paymentList[0].disabled = false
- this.paymentMode = 4 // 1
- // #endif
- },
- /**
- * 支付方式改变事件
- * @param paymentMode
- * @param disabled
- */
- handleChangePaymentMode(paymentMode, disabled = false) {
- if (disabled) return
- this.paymentMode = paymentMode
- const { flowerObj } = this
- if ([1, 2].includes(paymentMode)) {
- // 支付宝支付,取消分期选择
- flowerObj.hbByStagesPeriods = -1
- // 3 6 12 全部禁止
- flowerObj.hbByStagesList.map((item) => {
- item.disabled = true
- })
- } else {
- // 分期支付,默认选三期
- flowerObj.hbByStagesPeriods = 3
- }
- this.handleHbStagesAndPrice()
- this.handleNoticeFather()
- },
- /**
- * 获取花呗分期配置
- */
- async getTheFlowerConfig() {
- const { data } = await getOrderHuabeiConfigApi({})
- const { flowerObj } = this
- flowerObj.hbChargeType = data.huabeiChargeType
- // 如果后端返回的是用户支付手续费,设置费率信息
- if (data.huabeiChargeType === 1) {
- data.huabeiFeeRateList.forEach((rate, index) => {
- flowerObj.hbByStagesList[index].rate = rate
- })
- }
- },
- /**
- * 处理花呗期数选择
- * @param periods 期数
- * @param disabled
- */
- handleChangePeriods(periods, disable = false) {
- if (disable) return
- const { flowerObj } = this
- flowerObj.hbByStagesPeriods = periods
- this.handleHbStagesAndPrice()
- this.handleNoticeFather()
- },
- /**
- * 处理花呗价格和手续费显示
- */
- handleHbStagesAndPrice() {
- // const { flowerObj, totalPrice } = this
- const flowerObj = this.flowerObj
- const totalPrice = this.totalPrice || 0
- if (this.paymentMode !== 3) return
- flowerObj.hbByStagesList.forEach((stages) => {
- // 根据价格填充每一期价格和手续费信息
- stages.price = ((totalPrice * (1 + stages.rate / 100)) / stages.numberOfStages).toFixed(2) // 每一期价格
- stages.serviceCharge = ((totalPrice * (stages.rate / 100)) / stages.numberOfStages).toFixed(2) // 每一期手续费
- // 计算总手续费
- if (stages.numberOfStages === Number(flowerObj.hbByStagesPeriods)) {
- flowerObj.hbServiceChargeTotal = (totalPrice * (stages.rate / 100)).toFixed(2)
- }
- // 处理允许分期的区间,公式为总价格要大于分期数/100
- this.totalPrice < stages.numberOfStages / 100 ? stages.disabled = true : stages.disabled = false
- })
- },
- /**
- * 通知父组件
- */
- handleNoticeFather() {
- const { paymentMode, flowerObj } = this
- const params = {
- paymentMode,
- huabeiPeriod: flowerObj.hbByStagesPeriods
- }
- this.$emit('change', params)
- }
- }
- }
- </script>
- <style
- lang="scss"
- scoped
- >
- .cashier-list-content {
- width: 100%;
- padding: 0rpx 15rpx;
- box-sizing: border-box;
- background: #fff;
- .u-radio-group {
- display: block !important;
- }
- .cashier {
- border-bottom: 2rpx solid #d0d0d0;
- &:last-child {
- border-bottom: none
- }
- .cashier-item {
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 20rpx 0;
- box-sizing: border-box;
- position: relative;
- .icon-text {
- display: flex;
- align-items: center;
- justify-content: center;
- image {
- width: 50rpx;
- height: 50rpx;
- margin-right: 15rpx;
- }
- }
- .radio-context {
- display: flex;
- align-items: center;
- font-size: 14rpx;
- .radio {
- margin-left: 15rpx;
- }
- }
- }
- .ali-hb-content {
- padding: 10rpx 20px;
- box-sizing: border-box;
- border-top: 2rpx solid #d0d0d0;
- }
- }
- }
- </style>
|