Sfoglia il codice sorgente

commit 快捷支付

zhengjinyi 2 anni fa
parent
commit
34fc7a0462

+ 7 - 3
common/css/iconfont.scss

@@ -1,8 +1,8 @@
 @font-face {
   font-family: "iconfont"; /* Project id 1519039 */
-  src: url('//at.alicdn.com/t/c/font_1519039_vj73i9j8tkm.woff2?t=1679652049039') format('woff2'),
-       url('//at.alicdn.com/t/c/font_1519039_vj73i9j8tkm.woff?t=1679652049039') format('woff'),
-       url('//at.alicdn.com/t/c/font_1519039_vj73i9j8tkm.ttf?t=1679652049039') format('truetype');
+  src: url('//at.alicdn.com/t/c/font_1519039_dfhum6nnq6r.woff2?t=1680766548825') format('woff2'),
+       url('//at.alicdn.com/t/c/font_1519039_dfhum6nnq6r.woff?t=1680766548825') format('woff'),
+       url('//at.alicdn.com/t/c/font_1519039_dfhum6nnq6r.ttf?t=1680766548825') format('truetype');
 }
 
 .iconfont {
@@ -13,6 +13,10 @@
   -moz-osx-font-smoothing: grayscale;
 }
 
+.icon-yixuanze3:before {
+  content: "\e6d1";
+}
+
 .icon-xiaoshou:before {
   content: "\e74b";
 }

+ 13 - 0
pages.json

@@ -534,6 +534,19 @@
 					"style": {
 						"navigationBarTitleText": "确认信息"
 					}
+				},
+				{
+					"path": "pay/card-comfirm-sub",
+					"style": {
+						"navigationBarTitleText": "输入短信验证码"
+					}
+				},
+				{
+					"path": "pay/card-order",
+					"style": {
+						"navigationBarTitleText": "收银台",
+						"navigationStyle": "custom"
+					}
 				}
 				
 			]

+ 1 - 1
pages/user/order/order-pay-list.vue

@@ -92,7 +92,7 @@ export default {
 			})
 		},
 		handlePayOrder(shopOrderId){
-			this.$api.navigateTo(`/pages/user/order/order-payment?shopOrderId=${shopOrderId}`)
+			this.$api.navigateTo(`/pages/user/pay/card-order?shopOrderId=${shopOrderId}`)
 		},
 		handlePayunder(){
 			this.$api.navigateTo(`/pages/user/order/order-payunder?orderId=${this.orderId}`)

+ 15 - 7
pages/user/order/order-payhlb.vue

@@ -24,10 +24,6 @@
 						<view class="bot-title"><text>本次支付金额</text></view>
 						<view class="bot-input">
 							<text>¥</text>
- 					<!-- 	<view class="input" @click.stop="focusInput">
-								<text class="text" v-if="payAmount>=0">{{payAmount}}</text>
-								<text class="none" v-else>输入金额不能大于待付金额</text>
-							</view> -->
 							<input  class="input"
 									type="digit"
 									v-model="payAmount"
@@ -37,7 +33,8 @@
 									placeholder-class="placeholder"/>
 						</view>
 						<view class="bot-resid">
-							<text>应付剩余¥{{balanceAmount|NumFormat}}</text>
+							<text class="bot-resid-le">应付剩余¥{{balanceAmount|NumFormat}}</text>
+							<text class="bot-resid-ri">支付记录 <text class="iconfont icon-xiayibu"></text> </text>
 						</view>
 					</view>
 				</view>
@@ -511,9 +508,20 @@
 					.bot-resid{
 						line-height: 36rpx;
 						font-size: $font-size-26;
-						color: #666666;
 						margin-top: 24rpx;
-						color: $color-system;
+						.bot-resid-le{
+							display: inline-block;
+							float: left;
+							color: $color-system;
+						}
+						.bot-resid-ri{
+							display: inline-block;
+							float: right;
+							color: #1890F9;
+							.icon-xiayibu{
+								margin-left: 5rpx;
+							}
+						}
 					}
 				}
 			}

+ 2 - 6
pages/user/order/order-sharedetails.vue

@@ -139,13 +139,9 @@ export default {
 						this.$util.modal('', '订单已申请全部退款,无需再付款!', '确定', '', false, () => {})
 					} else {
 						if (response.data.onlinePayFlag === 1) {
-							this.$api.navigateTo(
-								`/pages/user/order/order-payment?type=onlinePay&Amount=${
-									response.data.pendingPayments
-								}&orderId=${orderId}`
-							)
+							this.$api.navigateTo(`/pages/user/order/order-payunder?orderId=${orderId}`)
 						} else {
-							this.$api.navigateTo(`/pages/user/order/order-payment?type=payfirm&orderId=${orderId}`)
+							this.$api.navigateTo(`/pages/user/order/order-pay-list?orderId=${orderId}`,)
 						}
 					}
 				})

+ 1 - 2
pages/user/pay/card-add.vue

@@ -34,8 +34,7 @@ export default {
 			},
 			showCardNumber: '',
 			maxLen:30,
-			subType:1 // 1直接绑卡  2// 
-			
+			subType: 2, // 1直接绑卡  2//首次绑卡并支付 3//确认支付
 		}
 	},
 	onLoad() {

+ 271 - 0
pages/user/pay/card-comfirm-sub.vue

@@ -0,0 +1,271 @@
+<template>
+	<view class="container card clearfix">
+		<view class="card-content">
+			<view class="card-title" v-if="subType === 2">
+				<view class="card-pay-text">¥{{ payMoney }}</view>
+			</view>
+			<view class="card-mains">
+				<view class="card-form-text">已发送至手机号 {{ phoneNumbe }}</view>
+				<view class="card-form">
+					<input
+						class="card-input"
+						v-model="params.code"
+						@input="handleInput"
+						type="number"
+						maxlength="6"
+						placeholder="请输入短信验证码"
+					/>
+					<view class="card-form-code" @click.stop="handleMobileCode"> {{ mobileCodeText }} </view>
+				</view>
+			</view>
+			<view class="card-mains-btn">
+				<button
+					class="add-btn"
+					:disabled="disabled"
+					:class="[disabled ? 'disabled' : '']"
+					@click="handleAddCard"
+				>
+					{{ suBbtnText }}
+				</button>
+			</view>
+		</view>
+	</view>
+</template>
+<script>
+export default {
+	data() {
+		return {
+			params: {
+				code: '',
+				mobile: '15817887257',
+				payMoney: '1000'
+			},
+			payMoney: '1000',
+			subType: 2, // 1直接绑卡  2//首次绑卡并支付 3//确认支付
+			isMobileDisabled: false, //手机验证码按钮控制
+			mobilCount: '', //倒计时
+			mobileCodeText: '获取验证码',
+			mobilTime: null
+		}
+	},
+	onLoad() {
+		// this.GetAccountInitData()
+	},
+	filters: {
+		NumFormat(value) {
+			//处理金额
+			if (value) {
+				return Number(value).toFixed(2)
+			} else {
+				return '0.00'
+			}
+		}
+	},
+	computed: {
+		phoneNumbe() {
+			// 手机号仅显示前三位及后四位数字,隐藏信息用*代替
+			return this.params.mobile.substr(0, 3) + '****' + this.params.mobile.substring(7)
+		},
+		disabled() {
+			if (this.params.code.length > 6) {
+				return false
+			} else {
+				return true
+			}
+		},
+		suBbtnText() {
+			const textMap = {
+				1: '确认绑定',
+				2: '确认绑定支付',
+				3: '确认支付'
+			}
+			return textMap[this.subType]
+		}
+	},
+	methods: {
+		handleAddCard() {
+			//提交卡号
+		},
+		handleClearInput() {
+			//清空银行卡
+			this.params.cardNumber = this.showCardNumber = ''
+		},
+		handleInput(e) {
+			this.params.cardNumber = e.detail.value
+			this.showCardNumber = this.formatAccNo(e.detail.value)
+		},
+		handleMobileCode() {
+			// 获取短信验证码
+			if (this.smsCodeParams.mobile == '') {
+				this.$util.msg('请输入手机号', 2000)
+				return
+			}
+			if (!this.$reg.isMobile(this.smsCodeParams.mobile)) {
+				this.$util.msg('请输入正确的手机号', 2000)
+				return
+			}
+			this.isMobileDisabled = true
+			this.userLoginCode(this.smsCodeParams)
+		},
+		userLoginCode(params) {
+			// 获取登录短息验证码
+			this.UserService.userLoginCode(params)
+				.then(response => {
+					this.$util.msg('获取验证码成功', 2000)
+					const TIME_COUNT = 60
+					if (!this.mobilTime) {
+						this.mobilCount = TIME_COUNT
+						this.isMobileDisabled = true
+						this.mobilTime = setInterval(() => {
+							if (this.mobilCount > 1 && this.mobilCount <= TIME_COUNT) {
+								this.mobilCount--
+								this.mobileCodeText = this.mobilCount + 's'
+							} else {
+								this.isMobileDisabled = false
+								clearInterval(this.mobilTime)
+								this.mobilTime = null
+								this.mobileCodeText = '获取验证码'
+							}
+						}, 1000)
+					}
+				})
+				.catch(error => {
+					this.$util.msg(error.msg, 2000)
+					this.isMobileDisabled = false
+				})
+		},
+		handleGoSusList() {
+			// 跳转支持银行
+			this.$api.navigateTo(`/pages/user/pay/card-sus-list`)
+		},
+		formatAccNo(value) {
+			const newValue = value.replace(/([^0-9])/g, '') // 只允许输入数字
+			const formatValue = newValue.replace(/(\d{4})(?=\d)/g, '$1 ') // 每4个数字后面加一个空格
+			const inputLen = this.getOriginValue().length
+			if (inputLen > this.maxLen) {
+				// 如果输入的字符大于最大输入长度则禁止继续输入
+				// this.inputRef.inputRef.value = this.state.recharge_phone
+				return
+			}
+
+			// const end = () => {
+			// 	setTimeout(() => {
+			// 		this.end()
+			// 	}, 10)
+			// }
+
+			// if (inputLen >= this.minLen) {
+			// 	this.setState({ isValidNo: true, recharge_phone: formatValue }, end)
+			// } else {
+			// 	this.setState({ isValidNo: false, recharge_phone: formatValue, activeItem: -1 }, end)
+			// }
+			return formatValue
+		},
+		getOriginValue() {
+			//获取input的原始值
+			return this.showCardNumber.split(' ').join('')
+		}
+	},
+	onShow() {
+		// this.beansList = []
+	}
+}
+</script>
+
+<style lang="scss">
+page,
+.container {
+	background: #ffffff;
+	height: 100%;
+}
+.card-content {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	padding-top: 70rpx;
+}
+.card-title {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	padding: 0 0 70rpx 0;
+	.card-pay-text {
+		width: 100%;
+		height: 90rpx;
+		line-height: 90rpx;
+		text-align: center;
+		font-size: 56rpx;
+		color: #333;
+		font-weight: bold;
+		box-sizing: border-box;
+	}
+}
+.card-mains {
+	width: 100%;
+	height: 100rpx;
+	box-sizing: border-box;
+	padding: 0 50rpx 0 32rpx;
+	.card-form-text {
+		width: 100%;
+		height: 40rpx;
+		line-height: 40rpx;
+		text-align: left;
+		font-size: $font-size-28;
+		color: #333;
+		box-sizing: border-box;
+		margin-bottom: 16rpx;
+	}
+	.card-form {
+		width: 100%;
+		height: 100%;
+		box-sizing: border-box;
+		border: 1px solid #cccccc;
+		padding: 14rpx 0;
+		border-radius: 16rpx;
+		position: relative;
+		.card-input {
+			width: 460rpx;
+			height: 100%;
+			line-height: 96rpx;
+			padding-left: 32rpx;
+			box-sizing: border-box;
+			font-size: $font-size-30;
+			color: #333;
+			border-right: 1px solid #e1e1e1;
+			float: left;
+		}
+		.card-form-code {
+			width: 204rpx;
+			height: 72rpx;
+			line-height: 72rpx;
+			text-align: center;
+			color: $color-system;
+			font-size: $font-size-26;
+			float: left;
+		}
+	}
+}
+.card-mains-btn {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	padding: 0 75rpx;
+	margin-top: 180rpx;
+	.add-btn {
+		width: 100%;
+		height: 90rpx;
+		font-size: $font-size-30;
+		line-height: 90rpx;
+		color: #ffffff;
+		text-align: center;
+		background: $btn-confirm;
+		border-radius: 45rpx;
+		border-radius: 44rpx;
+		margin-top: 80rpx;
+		&.disabled {
+			background: #e1e1e1;
+			border-radius: 44rpx;
+		}
+	}
+}
+</style>

+ 881 - 0
pages/user/pay/card-order.vue

@@ -0,0 +1,881 @@
+<template>
+	<view class="container cashier">
+		<tui-skeleton
+			v-if="skeletonShow"
+			backgroundColor="#fafafa"
+			borderRadius="10rpx"
+			:isLoading="true"
+			:loadingType="5"
+		></tui-skeleton>
+		<template v-else>
+			<cu-custom :navbar-data="nvabarData" @navigateBack="hanldNavigateBack"></cu-custom>
+			<view class="container-cash clearfix" :style="{ marginTop: CustomBar + 'px' }">
+				<view class="container-wrapper">
+					<view class="pay-content">
+						<view class="pay-top">
+							<view class="pay-paid">
+								<text class="txt-m">待付金额</text>
+								<text class="txt-b"><text class="small">¥</text>{{ obligation | NumFormat }}</text>
+							</view>
+							<view class="pay-payd">
+								<view class="pay-paids">
+									<text class="txt-m">应付总额</text>
+									<text class="txt-b">¥{{ payableAmount | NumFormat }}</text>
+								</view>
+								<view class="pay-paids">
+									<text class="txt-m">已支付金额</text>
+									<text class="txt-b">¥{{ receiptAmount | NumFormat }}</text>
+								</view>
+							</view>
+						</view>
+						<view class="pay-bot">
+							<view class="bot-title"><text>本次支付金额</text></view>
+							<view class="bot-input">
+								<text>¥</text>
+								<input
+									class="input"
+									type="digit"
+									v-model="payAmount"
+									@focus="focusInput"
+									@blur="blurInput"
+									placeholder="输入金额不能大于待付金额"
+									placeholder-class="placeholder"
+								/>
+							</view>
+							<view class="bot-resid">
+								<text class="bot-resid-le">应付剩余¥{{ balanceAmount | NumFormat }}</text>
+								<text class="bot-resid-ri" @click="hanldeShowPopup(0)"
+									>支付记录 <text class="iconfont icon-xiayibu"></text>
+								</text>
+							</view>
+						</view>
+					</view>
+					<view class="pay-checked">
+						<view class="pay-card-main"> 
+							<view class="pay-item-cell" @click="tabClick(3)">
+								<view class="item-icon"><image :src="handleLogo(cards.B2B)"></image></view>
+								<view class="item-texts"><text>{{ cards.name }}</text></view>
+								<view class="item-checked">
+									<text
+										class="iconfont"
+										:class="[tabCurrentIndex === 3 ? 'icon-yixuanze3' : 'icon-weixuanze']"
+									></text>
+								</view>
+							</view>
+							<view class="pay-item-cell add" @click="hanldeShowPopup(1)">
+								<view class="item-texts add" ><text>查看全部银行卡 / 添加新卡支付</text></view>
+								<view class="item-checked"> <text class="iconfont icon-xiayibu"></text> </view>
+							</view>
+						</view>
+						<view class="pay-item" @click="handleAddCard(2)">
+							<view class="pay-item-cell">
+								<view class="item-texts add"><text>添加银行卡快捷付款</text></view>
+								<view class="item-checked"> <text class="iconfont icon-xiayibu"></text> </view>
+							</view>
+						</view>
+						<view class="pay-item" @click="tabClick(0)">
+							<view class="pay-item-cell">
+								<view class="item-icon"><text class="iconfont icon-weixinzhifu"></text></view>
+								<view class="item-texts"><text>微信支付</text></view>
+								<view class="item-checked">
+									<text
+										class="iconfont"
+										:class="[tabCurrentIndex === 0 ? 'icon-yixuanze3' : 'icon-weixuanze']"
+									></text>
+								</view>
+							</view>
+						</view>
+						<view class="pay-item" @click="tabClick(1)">
+							<view class="pay-item-cell">
+								<view class="item-icon"><text class="iconfont icon-qiyewangyinzhifu"></text></view>
+								<view class="item-texts"><text>企业网银支付</text></view>
+								<view class="item-checked">
+									<text
+										class="iconfont"
+										:class="[tabCurrentIndex === 1 ? 'icon-yixuanze3' : 'icon-weixuanze']"
+									></text>
+								</view>
+							</view>
+						</view>
+						<view class="pay-item" @click="tabClick(2)">
+							<view class="pay-item-cell">
+								<view class="item-icon"><text class="iconfont icon-gerenwangyinzhifu"></text></view>
+								<view class="item-texts"><text>个人网银支付</text></view>
+								<view class="item-checked">
+									<text
+										class="iconfont"
+										:class="[tabCurrentIndex === 2 ? 'icon-yixuanze3' : 'icon-weixuanze']"
+									></text>
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+				<view class="pay-button" :style="{ paddingBottom: isIphoneX ? '68rpx' : '24rpx' }">
+					<view class="btn" @click.stop="buttonSubMit" :style="{ background: btnColor }">{{
+						buttonText
+					}}</view>
+				</view>
+			</view>
+		</template>
+		<!-- 支付链接弹窗 -->
+		<view class="alert spec" :class="specClass" v-if="isShowTip">
+			<!-- 选择支付弹窗说明 -->
+			<view class="freight-alert" @tap="hideTips">
+				<view class="content">
+					<view class="title">
+						<text>支付链接</text> <text class="iconfont icon-iconfontguanbi" @click.stop="hideTips"></text>
+					</view>
+					<view class="text-content">
+						<view class="text"
+							>请复制以下链接,并发送至电脑端,在浏览器访问该链接并选择银行尽快完成支付</view
+						>
+						<view class="text-p">{{ payHttpUrl }}</view> <view class="text-b">链接有效期为72小时</view>
+					</view>
+					<view class="text-button" @click.stop="clipboard(payHttpUrl)">复制链接</view>
+				</view>
+			</view>
+		</view>
+		<!-- 支付记录 -->
+		<cm-record :show="popupShow" :list="discernReceipt"></cm-record>
+		<!-- 选择快捷支付银行 -->
+		<cm-cards :show="popupShow1" :list="cardsList" @handleChoiceaCards="handleChoiceaCards"></cm-cards>
+		<!-- 弹窗提示 -->
+		<tui-modal
+			:show="modal"
+			@click="handleClick"
+			:content="contentModalText"
+			:button="modalButton"
+			color="#333"
+			:size="32"
+			shape="circle"
+			:maskClosable="false"
+		>
+		</tui-modal>
+	</view>
+</template>
+
+<script>
+import authorize from '@/common/config/authorize.js'
+import thorui from '@/components/clipboard/clipboard.thorui.js'
+import payMixins from '@/mixins/payMixins.js'
+import cardMixins from './mixins/cardMixins.js'
+import cmCards from './components/cm-cards-popup'
+import cmRecord from './components/cm-record-popup'
+export default {
+	mixins: [payMixins, cardMixins],
+	components: {
+		cmRecord,
+		cmCards
+	},
+	data() {
+		return {
+			skeletonShow: true,
+			orderId: 0,
+			shopOrderId: 0,
+			shopOrderInfo: 0,
+			payType: '',
+			realPay: 0, //应付金额
+			payableAmount: 0, // 应付总额
+			receiptAmount: 0, // 已付金额
+			obligation: 0, //待付金额
+			balanceAmount: 0,
+			payAmount: 0,
+			nvabarData: {
+				//顶部自定义导航
+				showCapsule: 1, // 是否显示左上角图标  1表示显示  0表示不显示,
+				showSearch: 0,
+				title: '收银台', // 导航栏 中间的标题
+				haveBack: true,
+				textLeft: this.$store.state.isIphone
+			},
+			idCardList: [],
+			isIphoneX: this.$store.state.isIphoneX,
+			CustomBar: this.CustomBar, // 顶部导航栏高度
+			isShowTip: false,
+			discernReceipt: [],
+			showDigitKeyboard: false,
+			payHttpUrl: '',
+			mbOrderId: 0, // 支付记录订单Id
+			modal: false,
+			contentModalText: '本次支付金额已超出微信支付限额,请输入小于5千的金额。', //操作文字提示语句
+			modalButton: [
+				{
+					text: '知道了',
+					customStyle: {
+						color: '#fff',
+						bgColor: 'linear-gradient(90deg, #F28F31 0%, #FF5B00 100%)'
+					},
+					plain: false
+				}
+			],
+			cardsList:[]//查看银行列表
+		}
+	},
+	onLoad(option) {
+		this.initData(option)
+	},
+	filters: {
+		NumFormat(value) {
+			if (!value) return '0.00'
+			/*原来用的是Number(value).toFixed(0),这样取整时有问题,例如0.51取整之后为1,感谢Nils指正*/
+			/*后来改成了 Number(value)|0,但是输入超过十一位就为负数了,具体见评论 */
+			var intPart = Number(value) - (Number(value) % 1) //获取整数部分(这里是windy93的方法)
+			var intPartFormat = intPart.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,') //将整数部分逢三一断
+			var floatPart = '.00' //预定义小数部分
+			var value2Array = value.toString().split('.')
+			//=2表示数据有小数位
+			if (value2Array.length == 2) {
+				floatPart = value2Array[1].toString() //拿到小数部分
+				if (floatPart.length == 1) {
+					//补0,实际上用不着
+					return intPartFormat + '.' + floatPart + '0'
+				} else {
+					return intPartFormat + '.' + floatPart
+				}
+			} else {
+				return intPartFormat + floatPart
+			}
+		}
+	},
+	methods: {
+		initData(e) {
+			this.payType = e.type
+			console.log(this.payType)
+			this.shopOrderId = e.shopOrderId
+			this.GetPayOrderInfo()
+		},
+		GetPayOrderInfo() {
+			//初始化支付信息
+			this.PayService.PayOrderCheckoutShoporders({ shopOrderId: this.shopOrderId })
+				.then(response => {
+					let data = response.data
+					this.discernReceipt = data.discernReceipt // 支付记录
+					this.shopOrderInfo = data.shopOrder // 子订单
+					this.obligation = data.shopOrder.obligation // 待付金额
+					this.orderId = data.shopOrder.orderId // 主订单Id
+					this.receiptAmount = data.shopOrder.receiptAmount // 已付金额
+					this.payableAmount = data.shopOrder.realPay // 应付金额
+					this.payAmount = this.toFixedFn(this.obligation) // 自定义金额
+					this.balanceAmount = this.obligation - this.payAmount // 计算剩余支付金额
+					// 支付方式配置
+					// this.checkPayMode(data.onlinePayWays)
+					setTimeout(() => {
+						this.skeletonShow = false
+					}, 500)
+				})
+				.catch(error => {
+					this.$util.msg(error.msg, 2000)
+				})
+		},
+		buttonSubMit() {
+			switch (this.tabCurrentIndex) {
+				case 0: // 微信支付
+					this.handleUmTrackEvent('Um_Event_ConfirmWechatPay','微信支付')
+					this.MiniWxPayFor()
+					break
+				case 1: // 企业网银
+					this.handleUmTrackEvent('Um_Event_ConfirmEbankPay','企业网银')
+					this.BuildCatenate()
+					break
+				case 2: // 个人网银
+					this.handleUmTrackEvent('Um_Event_ConfirmAbankPay','个人网银')
+					this.BuildCatenate()
+					break
+				case 3: // 快捷支付
+					this.handleUmTrackEvent('Um_Event_ConfirmAbankPay','快捷支付')
+					break
+			}
+		},
+		handleUmTrackEvent(UmName,UmPageName){
+			// 友盟埋点收集
+			if (process.env.NODE_ENV != 'development') {
+				this.$uma.trackEvent(UmName, {
+					Um_Key_PageName: UmPageName,
+					Um_Key_SourcePage: '线上支付',
+					Um_Key_PayName: `${this.buttonText}`,
+					Um_Key_PayOrderID: `${this.shopOrderId}`
+				})
+			}
+		},
+		BuildCatenate() {
+			// 企业网银  个人网银
+			if (this.payAmount == 0) {
+				this.$util.msg('请输入本次支付的金额', 2000)
+				return
+			}
+			if (this.payAmount <= 10) {
+				this.$util.msg('网银支付的金额必须大于¥10.00', 2000)
+				return
+			}
+			if (this.payType == '1') {
+				if (this.payAmount != this.payableAmount) {
+					this.contentModalText = '企业网银支付每次收取的手续费较高,建议一次性全额付款。'
+					this.modal = true
+					return
+				}
+			}
+			this.PayService.PayOrderPayLink({
+				unpaidAmount: this.payAmount,
+				shopOrderId: this.shopOrderId,
+				payType: this.payType
+			}).then(response => {
+				this.payHttpUrl = response.data
+				this.isShowTip = true
+			})
+		},
+		async MiniWxPayFor() {
+			// 微信支付
+			if (this.payAmount > 5000) {
+				this.modal = true
+				return
+			}
+			if (this.payAmount == 0) {
+				this.$util.msg('请输入本次支付的金额', 2000)
+				return
+			}
+			if (this.payAmount * 100 < 2) {
+				this.$util.msg('本次支付的金额必须大于¥0.02', 2000)
+				return
+			}
+			// 获取微信code
+			const wechatCode = await authorize.getCode('weixin')
+			const params = {
+				payAmount: this.payAmount,
+				payType: 'XCX',
+				code: wechatCode,
+				shopOrderId: this.shopOrderId
+			}
+			this.weChatMiniOrderWxPay(params)
+		},
+		handleClick() {
+			this.modal = false
+		},
+		confirmEvent(value) {
+			//点击自定义键盘完成的回调函数
+			this.chechValue(value)
+			this.showDigitKeyboard = false
+		},
+		blurInput(e) {
+			this.chechValue(e.detail.value)
+		},
+		focusInput() {
+			// this.showDigitKeyboard = true
+		},
+		hideKeyboard() {
+			this.showDigitKeyboard = false
+		},
+		chechValue(value) {
+			let patern = /\d+\.\d+/g
+			if (value && value.split('.').length > 2) {
+				value = patern.exec(value)
+			}
+			if (value == '' || value < 0) {
+				this.payAmount = ''
+				this.balanceAmount = this.obligation
+			} else if (value > this.obligation) {
+				this.payAmount = this.toFixedFn(this.obligation)
+				this.balanceAmount = this.toFixedFn(this.obligation - this.payAmount)
+			} else {
+				this.payAmount = this.toFixedFn(value)
+				this.balanceAmount = this.toFixedFn(this.obligation - this.payAmount)
+			}
+		},
+		hanldNavigateBack() {
+			//页面返回
+			uni.navigateBack({
+				delta: 1
+			})
+		},
+		hideTips() {
+			//隐藏弹窗
+			this.isShowTip = false
+		},
+		toFixedFn(text) {
+			//处理小数点后两位数
+			return Number(text).toFixed(2)
+		},
+		copyClipboard(data) {
+			//复制账号
+			thorui.getClipboardData(data, res => {
+				if (res) {
+					this.$util.msg('已复制', 2000)
+				} else {
+					this.$util.msg('复制失败', 2000)
+				}
+			})
+		},
+		clipboard(data) {
+			//复制链接
+			console.log('data', data)
+			thorui.getClipboardData(data, res => {
+				if (res) {
+					this.isShowTip = false
+					this.$util.msg('已复制', 2000)
+					// 友盟埋点收集复制网银链接
+					if (process.env.NODE_ENV != 'development') {
+						this.$uma.trackEvent('Um_Event_CopyUnionPay', {
+							Um_Key_PageName: '网银支付',
+							Um_Key_SourcePage: '线上支付',
+							Um_Key_PayName: `${this.buttonText}`,
+							Um_Key_PayOrderID: `${this.shopOrderId}`
+						})
+					}
+				} else {
+					this.$util.msg('复制失败', 2000)
+				}
+			})
+		},
+		discard() {
+			//丢弃
+		}
+	},
+	onShow() {}
+}
+</script>
+
+<style lang="scss">
+page {
+	height: auto !important;
+	background-color: #ffffff;
+}
+.container-cash {
+	width: 100%;
+	.container-wrapper {
+		width: 100%;
+		margin: 0 auto;
+		.pay-content {
+			width: 100%;
+			height: 420rpx;
+			box-sizing: border-box;
+			padding: 64rpx 35rpx 0 35rpx;
+			background: url(https://img.caimei365.com/group1/M00/03/BD/Cmis218elN6AY6VeAAqw4n3n4nw186.png) no-repeat;
+			background-size: cover;
+			float: left;
+			position: relative;
+			.pay-top {
+				width: 100%;
+				height: auto;
+				float: left;
+				margin-bottom: 44rpx;
+				.pay-paid {
+					width: 100%;
+					height: auto;
+					margin-bottom: 38rpx;
+					text {
+						line-height: 48rpx;
+						text-align: left;
+						color: #ffffff;
+						width: 100%;
+					}
+					.txt-m {
+						font-size: $font-size-26;
+						opacity: 0.7;
+						display: inline-block;
+					}
+					.txt-b {
+						font-size: $font-size-48;
+						display: inline-block;
+						.small {
+							font-size: $font-size-32;
+						}
+					}
+				}
+				.pay-payd {
+					width: 100%;
+					height: auto;
+					.pay-paids {
+						height: auto;
+						float: left;
+						margin-right: 48rpx;
+						text {
+							line-height: 48rpx;
+							text-align: left;
+							color: #ffffff;
+						}
+						.txt-m {
+							width: 100%;
+							display: inline-block;
+							font-size: $font-size-26;
+							opacity: 0.7;
+						}
+						.txt-b {
+							width: 100%;
+							display: inline-block;
+							font-size: $font-size-32;
+						}
+					}
+				}
+			}
+			.pay-bot {
+				width: 680rpx;
+				height: 240rpx;
+				padding: 24rpx;
+				box-sizing: border-box;
+				background: #ffffff;
+				border-radius: 28rpx;
+				box-shadow: 0 2px 6px rgba(255, 77, 0, 0.17);
+				position: absolute;
+				bottom: -150rpx;
+				left: 35rpx;
+				.bot-title {
+					line-height: 36rpx;
+					font-size: $font-size-26;
+					color: #666666;
+				}
+				.bot-input {
+					width: 100%;
+					height: 66rpx;
+					margin: 15rpx 0;
+					border-bottom: 1px solid #ebebeb;
+					line-height: 66rpx;
+					font-size: $font-size-32;
+					color: $text-color;
+					text {
+						display: block;
+						float: left;
+					}
+					.input {
+						font-size: $font-size-40;
+						width: 500rpx;
+						height: 66rpx;
+						padding: 0 10rpx;
+						line-height: 66rpx;
+						float: left;
+						.none {
+							color: $text-color;
+							opacity: 0.3;
+						}
+						.text {
+							color: $text-color;
+						}
+					}
+					.placeholder {
+						font-size: $font-size-26;
+					}
+				}
+				.bot-resid {
+					line-height: 36rpx;
+					font-size: $font-size-26;
+					margin-top: 24rpx;
+					.bot-resid-le {
+						display: inline-block;
+						float: left;
+						color: $color-system;
+					}
+					.bot-resid-ri {
+						display: inline-block;
+						float: right;
+						color: #1890f9;
+						.iconfont {
+							font-size: 32rpx;
+						}
+					}
+				}
+			}
+		}
+		.pay-checked {
+			width: 100%;
+			height: auto;
+			float: left;
+			box-sizing: border-box;
+			padding: 0 0 32rpx 0;
+			border-top: 1px solid #e1e1e1;
+			margin-top: 180rpx;
+			.pay-card-main{
+				width: 100%;
+				height: auto;
+				float: left;
+				border-top: 12px solid #F7F7F7;
+				border-bottom: 12px solid #F7F7F7;
+				box-sizing: border-box;
+				padding: 0 32rpx;
+				.pay-item-cell {
+					height: 100rpx;
+					box-sizing: border-box;
+					padding: 26rpx 0;
+					background-color: #ffffff;
+					border-bottom: 1px solid #e1e1e1;
+					&.add{
+						border-bottom: none;
+						padding-left: 66rpx;
+					}
+					.item-icon {
+						width: 48rpx;
+						height: 48rpx;
+						margin-right: 20rpx;
+						float: left;
+						image{
+							width: 48rpx;
+							height: 48rpx;
+							display: block;
+						}
+					}
+					.item-texts {
+						line-height: 48rpx;
+						font-size: $font-size-28;
+						color: $text-color;
+						float: left;
+						&.add {
+							font-weight: bold;
+						} 
+					}
+					.item-checked {
+						width: 48rpx;
+						height: 48rpx;
+						float: right;
+						text-align: center;
+						line-height: 48rpx;
+						font-size: $font-size-40;
+						color: #ffffff;
+						.icon-weixuanze {
+							color: #b2b2b2;
+						}
+						.icon-yixuanze3 {
+							color: #ff5b00;
+						}
+						.icon-xiayibu {
+							color: #b2b2b2;
+						}
+					}
+				}
+			}
+			.pay-item {
+				width: 100%;
+				height: auto;
+				box-sizing: border-box;
+				float: left;
+				padding: 0 32rpx;
+				.pay-item-cell {
+					height: 100rpx;
+					box-sizing: border-box;
+					padding: 26rpx 0;
+					background-color: #ffffff;
+					border-bottom: 1px solid #e1e1e1;
+					.item-icon {
+						width: 48rpx;
+						height: 48rpx;
+						float: left;
+						text-align: center;
+						line-height: 48rpx;
+						margin-right: 20rpx;
+						.iconfont {
+							font-size: 48rpx;
+						}
+						.icon-weixinzhifu {
+							color: #0ABC64;
+						}
+						.icon-gerenwangyinzhifu {
+							color: #16afe8;
+						}
+						.icon-qiyewangyinzhifu {
+							color: #007acc;
+						}
+					}
+					.item-texts {
+						line-height: 48rpx;
+						font-size: $font-size-28;
+						color: $text-color;
+						float: left;
+						&.add {
+							font-weight: bold;
+						}
+					}
+					.item-checked {
+						width: 48rpx;
+						height: 48rpx;
+						float: right;
+						text-align: center;
+						line-height: 48rpx;
+						font-size: $font-size-40;
+						color: #ffffff;
+						.icon-weixuanze {
+							color: #b2b2b2;
+						}
+						.icon-yixuanze3 {
+							color: #ff5b00;
+						}
+						.icon-xiayibu {
+							color: #b2b2b2;
+						}
+					}
+				}
+			}
+		}
+	}
+	.pay-button {
+		width: 600rpx;
+		background-color: #ffffff;
+		position: fixed;
+		height: 88rpx;
+		padding: 24rpx 75rpx 0 75rpx;
+		bottom: 0;
+		.btn {
+			width: 100%;
+			height: 88rpx;
+			border-radius: 44rpx;
+			font-size: $font-size-28;
+			line-height: 88rpx;
+			color: #ffffff;
+			margin: 0 auto;
+			text-align: center;
+			background: $btn-confirm;
+		}
+	}
+}
+.freight-alert {
+	width: 100%;
+	height: 100%;
+	background: rgba(0, 0, 0, 0.5);
+	position: fixed;
+	top: 0;
+	left: 0;
+	z-index: 8888;
+	transition: all 0.4s;
+	&.none {
+		display: none;
+	}
+	&.show {
+		display: block;
+	}
+	.content {
+		width: 422rpx;
+		height: 434rpx;
+		position: absolute;
+		background: $bg-color;
+		left: 0;
+		right: 0;
+		bottom: 0;
+		top: 0;
+		margin: auto;
+		padding: 20rpx 32rpx;
+		border-radius: 12rpx;
+		.title {
+			width: 100%;
+			height: 68rpx;
+			line-height: 68rpx;
+			font-size: $font-size-28;
+			color: $text-color;
+			text-align: center;
+			position: relative;
+			.icon-iconfontguanbi {
+				width: 68rpx;
+				height: 68rpx;
+				text-align: center;
+				line-height: 68rpx;
+				position: absolute;
+				right: 0;
+				top: 0;
+				font-size: $font-size-36;
+				color: #999999;
+			}
+		}
+		.text-content {
+			width: 100%;
+			height: auto;
+			.text {
+				padding: 20rpx 0 0 0;
+				line-height: 44rpx;
+				font-size: $font-size-26;
+				color: #666666;
+				text-align: justify;
+			}
+			.text-p {
+				width: 100%;
+				line-height: 44rpx;
+				font-size: $font-size-26;
+				color: $color-system;
+				text-align: left;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				word-break: break-all;
+				-webkit-box-orient: vertical;
+				-webkit-line-clamp: 1;
+				overflow: hidden;
+			}
+			.text-b {
+				line-height: 44rpx;
+				font-size: $font-size-24;
+				color: #999999;
+				text-align: left;
+			}
+		}
+		.text-button {
+			width: 100%;
+			height: 88rpx;
+			line-height: 88rpx;
+			background: $btn-confirm;
+			font-size: $font-size-28;
+			border-radius: 44rpx;
+			color: #ffffff;
+			text-align: center;
+			margin-top: 20rpx;
+		}
+	}
+}
+.tui-prompt-title {
+	width: 100%;
+	height: 44rpx;
+	line-height: 44rpx;
+	padding: 20rpx 0;
+	text-align: center;
+	color: #333333;
+	border-bottom: 1px solid #e2e7ef;
+}
+.tui-prompt-text {
+	padding-top: 20rpx;
+	.tui-prompt-tips {
+		width: 100%;
+		line-height: 36rpx;
+		font-size: $font-size-22;
+		color: #ff5b00;
+		text-align: justify;
+		margin-bottom: 24rpx;
+	}
+	.tui-prompt-item {
+		width: 100%;
+		line-height: 60rpx;
+		color: #333333;
+		font-size: $font-size-26;
+		.text {
+			font-weight: bold;
+		}
+		.copy {
+			height: 38rpx;
+			box-sizing: border-box;
+			padding: 0 24rpx;
+			text-align: center;
+			line-height: 36rpx;
+			display: inline-block;
+			.iconfont {
+				font-size: $font-size-40;
+				color: #666666;
+			}
+		}
+	}
+}
+.tui-prompt-flex {
+	width: 100%;
+	height: auto;
+	margin-top: 20rpx;
+	box-sizing: border-box;
+	padding: 0 35rpx;
+	.btn {
+		width: 100%;
+		line-height: 84rpx;
+		font-size: $font-size-26;
+		text-align: center;
+		color: #ffffff;
+		border-radius: 44rpx;
+		margin: 20rpx 0;
+		&.btn-cancel {
+			background: #ffffff;
+			color: #333333;
+			border: 1px solid #979797;
+		}
+		&.btn-confirm {
+			background: $btn-confirm;
+		}
+	}
+}
+</style>

+ 244 - 0
pages/user/pay/components/cm-cards-popup.vue

@@ -0,0 +1,244 @@
+<template name="record">
+	<view class="record-template">
+		<!-- 全部银行卡 -->
+		<tui-bottom-popup :radius="true" :show="show">
+			<view class="tui-popup-box clearfix">
+				<view class="title">
+					全部银行卡
+					<view class="title-close">
+						<text class="iconfont icon-iconfontguanbi" @click="hidePopup"></text>
+					</view>
+				</view>
+				<view class="tui-popup-main coupon">
+					<scroll-view class="tui-popup-scroll" scroll-y="true">
+						<view class="pay-card-main">
+							<view
+								class="pay-item-cell"
+								v-for="(cards, index) in dataList"
+								:key="index"
+								@click="handleChoose(index, cards)"
+							>
+								<view class="item-icon"><image :src="handleLogo(cards.B2B)"></image></view>
+								<view class="item-texts"
+									><text>{{ cards.name }}</text></view
+								>
+								<view class="item-checked">
+									<text
+										class="iconfont"
+										:class="[checkedIndex === index ? 'icon-yixuanze3' : 'icon-weixuanze']"
+									></text>
+								</view>
+							</view>
+							<view class="pay-item-cell add" @click="handleAddCard(3)">
+								<view class="item-icon"><text class="iconfont icon-gerenwangyinzhifu"></text></view>
+								<view class="item-texts add"><text>添加新卡支付</text></view>
+								<view class="item-checked"> <text class="iconfont icon-xiayibu"></text> </view>
+							</view>
+						</view>
+					</scroll-view>
+				</view>
+			</view>
+		</tui-bottom-popup>
+	</view>
+</template>
+
+<script>
+export default {
+	name: 'record',
+	props: {
+		show: {
+			type: Boolean,
+			default: false
+		},
+		list: {
+			type: Array,
+			default: []
+		}
+	},
+	data() {
+		return {
+			isIphoneX: this.$store.state.isIphoneX,
+			checkedIndex: 0,
+			dataList: [
+				{
+					type: 1,
+					flag: 0,
+					B2B: 'CCB',
+					name: '建设银行借记卡(0023)',
+					code: '45454545454521212'
+				},
+				{
+					type: 1,
+					flag: 0,
+					B2B: 'ICBC',
+					name: '工商银行借记卡(0023)',
+					code: '45454545454521212'
+				},
+				{
+					type: 0,
+					flag: 0,
+					B2B: 'ABC',
+					name: '农业银行借记卡(0023)',
+					code: '45454545454521212'
+				}
+			]
+		}
+	},
+	filters: {
+		NumFormat(value) {
+			//处理金额
+			if (value) {
+				return Number(value).toFixed(2)
+			} else {
+				return '0.00'
+			}
+		},
+		payTypeText(vaule) {
+			//处理支付记录文字
+			const map = {
+				12: '企业网银',
+				13: '微信支付',
+				14: '支付宝',
+				15: '微信支付',
+				16: '余额抵扣',
+				17: '建设银行借记卡(0053)'
+			}
+			return map[vaule]
+		}
+	},
+	created() {
+		// this.dataList = this.list
+	},
+	methods: {
+		handleChoose(index,cards) {
+			//选择银行卡
+			this.checkedIndex = index
+			this.$emit('handleChoiceaCards', cards)
+			this.hidePopup()
+		},
+		handleAddCard(index) { 
+			//跳转添加卡号
+			this.$api.navigateTo(`/pages/user/pay/card-add?type=${index}`)
+		},
+		handleLogo(type) {
+			const LogoMap = {
+				'CCB':'https://img2.baidu.com/it/u=4262210206,1883697020&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=501',
+				'ICBC':'https://www.weixinyunduan.com/ups/2016/01/309212/edf5a48e69afa569eb31a52fc36de450.jpg',
+				'ABC':'https://userfile.yksup.com/userdata/18039/img/brand-20170315232223_e0p18k.jpg'
+			}
+			return LogoMap[type]
+		},
+		hidePopup() {
+			this.$parent.popupShow1 = false
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.record-template {
+	width: 100%;
+	height: auto;
+	background: #ffffff;
+	float: left;
+	margin-top: 24rpx;
+}
+.tui-popup-box {
+	position: relative;
+	box-sizing: border-box;
+	min-height: 220rpx;
+	padding: 24rpx 32rpx 0 32rpx;
+	.title {
+		font-size: $font-size-32;
+		color: $text-color;
+		line-height: 68rpx;
+		text-align: center;
+		float: left;
+		width: 100%;
+		height: 68rpx;
+		box-sizing: border-box;
+		padding: 0 24rpx;
+		position: relative;
+		font-weight: bold;
+		.title-close {
+			width: 68rpx;
+			height: 68rpx;
+			text-align: center;
+			line-height: 68rpx;
+			position: absolute;
+			right: 0;
+			top: 0;
+			.iconfont {
+				color: #b2b2b2;
+				font-size: 40rpx;
+			}
+		}
+	}
+	.tui-popup-main {
+		width: 100%;
+		float: left;
+		padding-top: 10rpx;
+		.tui-popup-scroll {
+			width: 100%;
+			height: 600rpx;
+			.pay-card-main {
+				width: 100%;
+				height: auto;
+				float: left;
+				box-sizing: border-box;
+				.pay-item-cell {
+					height: 100rpx;
+					box-sizing: border-box;
+					padding: 26rpx 0;
+					background-color: #ffffff;
+					border-bottom: 1px solid #e1e1e1;
+					.item-icon {
+						width: 48rpx;
+						height: 48rpx;
+						margin-right: 20rpx;
+						float: left;
+						image {
+							width: 48rpx;
+							height: 48rpx;
+							display: block;
+						}
+						.iconfont {
+							font-size: 48rpx;
+							&.icon-gerenwangyinzhifu {
+								color: #004889;
+							}
+						}
+					}
+					.item-texts {
+						line-height: 48rpx;
+						font-size: $font-size-28;
+						color: $text-color;
+						float: left;
+						&.add {
+							font-weight: bold;
+						}
+					}
+					.item-checked {
+						width: 48rpx;
+						height: 48rpx;
+						float: right;
+						text-align: center;
+						line-height: 48rpx;
+						font-size: $font-size-40;
+						color: #ffffff;
+						.icon-weixuanze {
+							color: #b2b2b2;
+						}
+						.icon-yixuanze3 {
+							color: #ff5b00;
+						}
+						.icon-xiayibu {
+							color: #b2b2b2;
+						}
+					}
+				}
+			}
+		}
+	}
+}
+</style>

+ 197 - 0
pages/user/pay/components/cm-record-popup.vue

@@ -0,0 +1,197 @@
+<template name="record">
+	<view class="record-template">
+		<!-- 支付记录 -->
+		<tui-bottom-popup :radius="true" :show="show">
+			<view class="tui-popup-box clearfix">
+				<view class="title">
+					支付记录
+					<view class="title-close">
+						<text class="iconfont icon-iconfontguanbi" @click="hidePopup"></text>
+					</view>
+				</view>
+				<view class="tui-popup-main coupon">
+					<scroll-view class="tui-popup-scroll" scroll-y="true">
+						<view class="list-main" v-if="dataList.length > 0">
+							<view class="list-item" v-for="(record, index) in dataList" :key="index">
+								<view class="list-item-cell">
+									<text class="text row-1">¥{{ record.receiptAmount | NumFormat }}</text>
+									<text class="text row-2">{{ record.payType | payTypeText }}</text>
+								</view>
+								<view class="list-item-cell">
+									<text class="text row-3">{{ record.receiptDate }}</text>
+								</view>
+							</view>
+						</view>
+						<view class="list-none" v-else>暂无支付记录</view>
+					</scroll-view>
+				</view>
+			</view>
+		</tui-bottom-popup>
+	</view>
+</template>
+
+<script>
+export default {
+	name: 'record',
+	props: {
+		show: {
+			type: Boolean,
+			default: false
+		},
+		list: {
+			type: Array,
+			default: []
+		}
+	},
+	data() {
+		return {
+			isIphoneX: this.$store.state.isIphoneX,
+			dataList: [
+				{
+					receiptAmount: '1000',
+					payType: 12,
+					receiptDate: '2022-10-31 17:24:35'
+				},
+				{
+					receiptAmount: '1000',
+					payType: 13,
+					receiptDate: '2022-10-31 17:24:35'
+				},
+				{
+					receiptAmount: '1000',
+					payType: 15,
+					receiptDate: '2022-10-31 17:24:35'
+				},
+				{
+					receiptAmount: '1000',
+					payType: 17,
+					receiptDate: '2022-10-31 17:24:35'
+				}
+			]
+		}
+	},
+	filters: {
+		NumFormat(value) {
+			//处理金额
+			if (value) {
+				return Number(value).toFixed(2)
+			} else {
+				return '0.00'
+			}
+		},
+		payTypeText(vaule) {
+			//处理支付记录文字
+			const map = {
+				12: '企业网银',
+				13: '微信支付',
+				14: '支付宝',
+				15: '微信支付',
+				16: '余额抵扣',
+				17: '建设银行借记卡(0053)'
+			}
+			return map[vaule]
+		}
+	},
+	created() {
+		// this.dataList = this.list
+	},
+	methods: {
+		hidePopup() {
+			this.$parent.popupShow = false
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.record-template {
+	width: 100%;
+	height: auto;
+	background: #ffffff;
+	float: left;
+	margin-top: 24rpx;
+}
+.tui-popup-box {
+	position: relative;
+	box-sizing: border-box;
+	min-height: 220rpx;
+	padding: 24rpx 32rpx 0 32rpx;
+	.title {
+		font-size: $font-size-32;
+		color: $text-color;
+		line-height: 68rpx;
+		text-align: center;
+		float: left;
+		width: 100%;
+		height: 68rpx;
+		box-sizing: border-box;
+		padding: 0 24rpx;
+		position: relative;
+		font-weight: bold;
+		.title-close {
+			width: 68rpx;
+			height: 68rpx;
+			text-align: center;
+			line-height: 68rpx;
+			position: absolute;
+			right: 0;
+			top: 0;
+			.iconfont {
+				color: #b2b2b2;
+				font-size: 40rpx;
+			}
+		}
+	}
+	.tui-popup-main {
+		width: 100%;
+		float: left;
+		padding-top: 10rpx;
+		.tui-popup-scroll {
+			width: 100%;
+			height: 600rpx;
+			.list-none {
+				line-height: 80rpx;
+				font-size: $font-size-26;
+				color: #999999;
+				text-align: left;
+			}
+			.list-main {
+				height: auto;
+				display: flex;
+				flex-direction: column;
+				.list-item {
+					width: 100%;
+					height: auto;
+					box-sizing: border-box;
+					padding: 24rpx 0;
+					border-bottom: 1px solid #e1e1e1;
+					&:last-child {
+						border-bottom: none;
+					}
+					.list-item-cell {
+						width: 100%;
+						height: 44rpx;
+						display: flex;
+						flex: 1;
+						line-height: 44rpx;
+						font-size: $font-size-26;
+						color: $text-color;
+						.text {
+							flex: 1;
+							&.row-1 {
+								flex: 3;
+							}
+							&.row-2 {
+								flex: 7;
+							}
+							&.row-3 {
+								color: #999999;
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+}
+</style>

+ 117 - 0
pages/user/pay/mixins/cardMixins.js

@@ -0,0 +1,117 @@
+// 收银台
+import Vue from 'vue'
+const cardMixins = {
+    data() {
+        return {
+            popupShow: false,// 控制支付记录弹窗
+            popupShow1: false,// 控制快捷支付银行弹窗
+            tabCurrentIndex: 0,
+            weChatFlag:false, // 微信支付开关
+            B2BpayFlag: false,//企业网银支付开关
+            buttonText:'微信支付',
+            btnColor:'#0ABC64',
+            cards:{
+                type: 1,
+                flag: 0,
+                B2B: 'CCB',
+                name: '建设银行借记卡(0023)',
+                code:'45454545454521212'
+            },
+            list: [
+                {
+                    type: 1,
+                    flag: 0,
+                    B2B: 'CCB',
+                    name: '建设银行借记卡(0023)',
+                    code:'45454545454521212'
+                },
+                {
+                    type: 1,
+                    flag: 0,
+                    B2B: 'ICBC',
+                    name: '工商银行借记卡(0023)',
+                    code:'45454545454521212'
+                },
+                {
+                    type: 0,
+                    flag: 0,
+                    B2B: 'ABC',
+                    name: '农业银行借记卡(0023)',
+                    code:'45454545454521212'
+                }
+            ]
+        }
+    },
+    computed: {
+        showWeChatPayMode() {
+            return this.weChatFlag
+        },
+        showB2BpayMode() {
+            return this.B2BpayFlag
+        }
+    },
+    methods: {
+        handleChoiceaCards(data){
+            //选择的银行
+            console.log('选择的银行',data)
+            this.cards = data
+            this.tabClick(3)
+        },
+        hanldeShowPopup(index) {
+            switch (index) {
+            case 0:
+                this.popupShow = true
+                break
+            case 1:
+                this.popupShow1 = true
+                break
+            default:
+                break
+            }
+        },
+        tabClick(index) {//tab切换
+            this.tabCurrentIndex = index
+            switch(index){
+            case 0:
+                this.btnColor='#0ABC64'
+                this.buttonText='微信支付'
+                break
+            case 1:
+                this.btnColor='#007ACC'
+                this.buttonText='企业网银支付'
+                break
+            case 2:
+                this.btnColor='#16AFE8'
+                this.buttonText='个人网银支付'
+                break
+            case 3:
+                this.btnColor='linear-gradient(90deg, #FF9300 0%, #FF5B00 100%)'
+                this.buttonText='使用银行卡快捷支付'
+                break
+            }
+        },
+        handleAddCard(index){
+            //跳转添加卡号
+            this.$api.navigateTo(`/pages/user/pay/card-add?type=${index}`)
+        },
+        checkPayMode(range) {
+            // 校验支付模式
+            // test range = '4'
+            // 1微信 2支付宝 3个人网银 4企业网银
+            this.weChatFlag = range.indexOf('1') > -1
+            this.B2BpayFlag = range.indexOf('4') > -1
+            // 设置默认支付方式
+            this.tabCurrentIndex = this.weChatFlag ? 0 : this.B2BpayFlag ? 1 : 2
+        },
+        handleLogo(type) {
+            const LogoMap = {
+                'CCB':'https://img2.baidu.com/it/u=4262210206,1883697020&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=501',
+                'ICBC':'https://www.weixinyunduan.com/ups/2016/01/309212/edf5a48e69afa569eb31a52fc36de450.jpg',
+                'ABC':'https://userfile.yksup.com/userdata/18039/img/brand-20170315232223_e0p18k.jpg'
+            }
+            return LogoMap[type]
+        },
+    }
+}
+
+export default cardMixins