瀏覽代碼

供应商落地页

xiebaomin 2 年之前
父節點
當前提交
3e7542839e
共有 41 個文件被更改,包括 4417 次插入1035 次删除
  1. 1 1
      common/config/caimeiApi.js
  2. 5 0
      common/config/common.js
  3. 7 3
      common/css/iconfont.scss
  4. 31 27
      components/cm-module/homeIndex/navbars.vue
  5. 1 1
      components/cm-module/homeIndex/pageSpecial.vue
  6. 47 39
      components/cm-module/orderDetails/paymentRecord.vue
  7. 352 379
      components/thorui/tui-modal/tui-modal.vue
  8. 38 1
      pages.json
  9. 112 18
      pages/goods/components/cm-product-doc.vue
  10. 4 4
      pages/goods/components/cm-unit-price.vue
  11. 1 1
      pages/h5/activity/activity-list.vue
  12. 5 1
      pages/login/login.vue
  13. 21 2
      pages/notice/shop/components/notice-cell.vue
  14. 5 1
      pages/notice/shop/mixins/notice.mixins.js
  15. 1 1
      pages/seller/club/components/echart-info.vue
  16. 1 1
      pages/seller/components/cm-clubpopup.vue
  17. 5 4
      pages/seller/order/create-order.vue
  18. 2 2
      pages/seller/remarks/list.vue
  19. 1 1
      pages/seller/remarks/record-list.vue
  20. 1 1
      pages/seller/remarks/relation-consult-list.vue
  21. 1 1
      pages/seller/remarks/report-list.vue
  22. 1 1
      pages/supplier/deliver/deliver-record.vue
  23. 39 79
      pages/tabBar/user/user.vue
  24. 257 114
      pages/user/member/member-pay.vue
  25. 1 1
      pages/user/member/member.vue
  26. 412 335
      pages/user/order/create-order.vue
  27. 1 1
      pages/user/order/order-pay-list.vue
  28. 15 7
      pages/user/order/order-payhlb.vue
  29. 2 6
      pages/user/order/order-sharedetails.vue
  30. 187 0
      pages/user/pay/card-add.vue
  31. 296 0
      pages/user/pay/card-comfirm-sub.vue
  32. 416 0
      pages/user/pay/card-comfirm.vue
  33. 312 0
      pages/user/pay/card-list.vue
  34. 1028 0
      pages/user/pay/card-order.vue
  35. 205 0
      pages/user/pay/card-sus-list.vue
  36. 222 0
      pages/user/pay/components/cm-cards-popup.vue
  37. 199 0
      pages/user/pay/components/cm-record-popup.vue
  38. 94 0
      pages/user/pay/mixins/cardMixins.js
  39. 75 0
      services/pay.service.js
  40. 12 1
      services/user.service.js
  41. 1 1
      utils/router.config.js

+ 1 - 1
common/config/caimeiApi.js

@@ -271,7 +271,7 @@ const caimeiApi = {
             const typeMap = {
                 1:`/pages/goods/goods-instrument?linkId=${linkId}`,
                 2:`/pages/goods/instrument-details?id=${linkId}`,
-                4:`/pages/h5/activity/activity?id=${linkId}`,
+                4:`/pages/h5/activity/activity?link=${linkHref}&linkId=${linkId}`,
                 5:`/pages/goods/product?id=${linkId}`, 
                 7:`/pages/supplier/user/my-shop?shopId=${linkId}`,
                 8:'/pages/h5/activity/activity-list',

+ 5 - 0
common/config/common.js

@@ -20,6 +20,10 @@ const utils = {
         //是否为手机号
         return RegExp(/^1[1-9][0-9]{9}$/).test(value)
     },
+    isIdCard: function(value) {
+        //是否为手机号
+        return RegExp(/^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/).test(value)
+    },
     isFloat: function(value) {
         //金额,只允许保留两位小数
         return RegExp(/^([0-9]*[.]?[0-9])[0-9]{0,1}$/).test(value)
@@ -185,6 +189,7 @@ module.exports = {
     isMobile: utils.isMobile,
     isEmail: utils.isEmail,
     isWebsite:utils.isWebsite,
+    isIdCard:utils.isIdCard,
     isFloat: utils.isFloat,
     isNum: utils.isNum,
     isEmailCode:utils.isEmailCode,

+ 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";
 }

+ 31 - 27
components/cm-module/homeIndex/navbars.vue

@@ -36,34 +36,38 @@
 				this.navList = list
 			},
 			NavToDetailPage(pros,index) {//跳转
-				/**
-				 * 页面跳转类型
-				 * 1、二级页面,2、搜索项目仪器,3、直播页面,4、自由页面,5、商品详情,6、仪器项目详情,7、供应商主页
-				 * 8、专题活动页,9、二手市场介绍,10、二手商品列表,11、二手商品发布,12、商品搜索,13、信息详情
-				 * 14、品牌招商介绍页,15、维修保养介绍页,16、首页,17、注册页,18、信息中心,19、供应商列表
-				 * 23、新活动专题页面
-				 **/
-				console.log(pros)
-				if(pros.linkType){
-					 const typeMap = {
-						1:`/pages/goods/goods-instrument?linkId=${pros.linkParam.id}&title=${pros.name}`,
-						3:'/pages/h5/article/path-live',
-						4:'/pages/h5/other/brands',
-						10:'/pages/second/product/product-list',
-						14:'/pages/h5/other/brand',
-						15:'/pages/h5/other/repair',
-						18:`/pages/h5/article/path?link=${pros.link}`,
-						20:`/pages/goods/good-floor?linkId=${pros.linkParam.id}&title=${pros.name}`,
-						21:'/pages/h5/activity/meobohui',
-						22:`/pages/goods/good-floor-temp?linkId=${pros.linkParam.id}&title=${pros.name}`,
-						23:`/pages/h5/activity/activity-topic?linkId=${pros.linkParam.id}`,  //活动专题页面
-                        25:'/pages/goods/goods-doc-list' ,//美业资料
-                        28:`/pages/h5/article/path?link=${pros.link}`, // 采美认证通
-						29:'/pages/user/coupon/coupon-collection',//领券中心
-						
+				if(index === 3){
+					let linkPath = 'https://static.caimei365.com/app/caimei-activity-h5/html/2023/activity_02.html'
+					this.$api.navigateTo(`/pages/h5/activity/activity?link=${linkPath}&linkId=382`)
+				}else{
+					/**
+					 * 页面跳转类型
+					 * 1、二级页面,2、搜索项目仪器,3、直播页面,4、自由页面,5、商品详情,6、仪器项目详情,7、供应商主页
+					 * 8、专题活动页,9、二手市场介绍,10、二手商品列表,11、二手商品发布,12、商品搜索,13、信息详情
+					 * 14、品牌招商介绍页,15、维修保养介绍页,16、首页,17、注册页,18、信息中心,19、供应商列表
+					 * 23、新活动专题页面
+					 **/
+					 if(pros.linkType){
+					 	 const typeMap = {
+					 		1:`/pages/goods/goods-instrument?linkId=${pros.linkParam.id}&title=${pros.name}`,
+					 		3:'/pages/h5/article/path-live',
+					 		4:'/pages/h5/other/brands',
+					 		10:'/pages/second/product/product-list',
+					 		14:'/pages/h5/other/brand',
+					 		15:'/pages/h5/other/repair',
+					 		18:`/pages/h5/article/path?link=${pros.link}`,
+					 		20:`/pages/goods/good-floor?linkId=${pros.linkParam.id}&title=${pros.name}`,
+					 		21:'/pages/h5/activity/meobohui',
+					 		22:`/pages/goods/good-floor-temp?linkId=${pros.linkParam.id}&title=${pros.name}`,
+					 		23:`/pages/h5/activity/activity-topic?linkId=${pros.linkParam.id}`,  //活动专题页面
+					         25:'/pages/goods/goods-doc-list' ,//美业资料
+					         28:`/pages/h5/article/path?link=${pros.link}`, // 采美认证通
+					 		29:'/pages/user/coupon/coupon-collection',//领券中心
+					 		
+					 	 }
+					 	const url = typeMap[pros.linkType]
+					 	this.$api.navigateTo(url)
 					 }
-					const url = typeMap[pros.linkType]
-					this.$api.navigateTo(url)
 				}
 			}
 		}

+ 1 - 1
components/cm-module/homeIndex/pageSpecial.vue

@@ -192,7 +192,7 @@ export default {
 				const typeMap = {
 					1: `/pages/goods/goods-instrument?linkId=${pros.linkParam.id}&title=${pros.name}`,
 					2: `/pages/goods/instrument-details?id=${pros.linkParam.id}`,
-					4: `/pages/h5/activity/activity?title=${pros.title}&link=${pros.appletsLink}`,
+					4:`/pages/h5/activity/activity?link=${pros.appletsLink}&linkId=${pros.linkParam.id}`,
 					5: `/pages/goods/product?id=${pros.linkParam.id}`,
 					// 7:`/pages/supplier/user/my-shop?shopId=${pros.linkParam.id}`,
 					8: '/pages/h5/activity/activity-list',

+ 47 - 39
components/cm-module/orderDetails/paymentRecord.vue

@@ -12,10 +12,14 @@
 			 	<text>暂无支付记录</text>
 			</view>
 			<view class="record-list" v-else>
-				<view class="record-item" v-for="(item,index) in discernReceiptList" :key="index">
-					<view class="item-time tt">{{ item.receiptDate }}</view>
-					<view class="item-time pp">{{ item.payTypeStr }}</view>
-					<view class="item-time mm">¥{{item.associateAmount.toFixed(2)}}</view>
+				<view class="record-item" v-for="(record,index) in discernReceiptList" :key="index">
+					<view class="record-item-t">
+						<view class="item-time mm">¥{{record.associateAmount.toFixed(2)}}</view>
+					</view>
+					<view class="record-item-t">
+						<view class="item-time tt">{{ record.receiptDate }}</view>
+						<view class="item-time pp">{{ payTypeText(record) }}</view>
+					</view>	
 				</view>
 			</view>
 		</view>
@@ -56,23 +60,21 @@
 					this.isEmpty = true
 				}
 			},
-			payTypeText (state){//处理支付记录文字
-				let stateText = '',
-					stateTextObject={
-						12:'企业网银',
-						13:'微信支付',
-						14:'支付宝',
-						15:'微信支付',
-						16:'余额抵扣',
-						18:'大额银联转账',
-					}
-				Object.keys(stateTextObject).forEach(key => {
-					if(key == state){
-						stateText = stateTextObject[key]
-					}
-				})
-				return stateText
-			},
+			payTypeText(record) {
+				//处理支付记录文字
+				const map = {
+					12: '企业网银',
+					13: '微信支付',
+					14: '支付宝',
+					15: '微信支付',
+					16: '余额抵扣',
+				}
+				if(record.payType === 28 || record.payType === 29 ){
+					return record.quickPayStr
+				}else{
+					return map[record.payType]
+				}
+			}
 		}
 	}
 </script>
@@ -120,28 +122,34 @@
 				float: left;
 				margin-top: 12rpx;
 				.record-item{
-					height: 40rpx;
+					height: auto;
 					width: 100%;
 					padding: 12rpx 0;
 					font-size: $font-size-28;
-					line-height: 40rpx;
 					float: left;
-					display: flex;
-					justify-content: center;
-					flex-direction: row;
-					.item-time{
-						&.mm{
-							flex: 3;
-							color: $text-color;
-							text-align: right;
-						}
-						&.pp{
-							flex: 3;
-							color: $text-color;
-						}
-						&.tt{
-							flex: 4;
-							color: #999999;
+					.record-item-t{
+						width: 100%;
+						height: 40rpx;
+						display: flex;
+						justify-content: center;
+						flex-direction: row;
+						.item-time{
+							line-height: 48rpx;
+							&.mm{
+								flex: 1;
+								color: $text-color;
+								text-align: left;
+							}
+							&.pp{
+								flex: 5;
+								color: #999999;
+								text-align: right;
+							}
+							&.tt{
+								flex: 5;
+								color: #999999;
+								text-align: left;
+							}
 						}
 					}
 				}

+ 352 - 379
components/thorui/tui-modal/tui-modal.vue

@@ -1,289 +1,262 @@
 <template>
-    <view @touchmove.stop.prevent>
-        <view
-            class="tui-modal-box"
-            :style="{ width: width, padding: padding, borderRadius: radius }"
-            :class="[fadeIn || show ? 'tui-modal-normal' : 'tui-modal-scale', show ? 'tui-modal-show' : '']"
-        >
-            <view v-if="!custom">
-                <view class="tui-modal-title" v-if="title">{{ title }}</view>
-                <view
-                    class="tui-modal-content"
-                    :class="[title ? '' : 'tui-mtop']"
-                    :style="{ color: color, fontSize: size + 'rpx' }"
-                >
-                    {{ content }}
-                </view>
-                <view class="tui-modalBtn-box" :class="[button.length != 2 ? 'tui-flex-column' : '']">
-                    <block v-for="(item, index) in button" :key="index">
+	<view @touchmove.stop.prevent>
+		<view class="tui-modal-box" :style="{width:width,padding:padding,borderRadius:radius}" :class="[(fadeIn || show)?'tui-modal-normal':'tui-modal-scale',show?'tui-modal-show':'']">
+			<view v-if="!custom">
+				<view class="tui-modal-title" v-if="title">{{title}}</view>
+				<view class="tui-modal-content" :class="[title?'':'tui-mtop']" :style="{color:color,fontSize:size+'rpx'}">{{content}}</view>
+				<view class="tui-modalBtn-box" :class="[button.length!=2?'tui-flex-column':'']">
+					<block v-for="(item,index) in button" :key="index">
                         <!-- :style="{background: item.customStyle.bgColor ? item.customStyle.bgColor : '',color: item.customStyle.color ? item.customStyle.color : ''}" -->
-                        <button
-                            class="tui-modal-btn"
-                            :class="[
-                                !item.customStyle && 'tui-' + (item.type || 'primary') + (item.plain ? '-outline' : ''),
-                                button.length != 2 ? 'tui-btn-width' : '',
-                                button.length > 2 ? 'tui-mbtm' : '',
-                                shape == 'circle' ? 'tui-circle-btn' : ''
-                            ]"
-                            :style="{
-                                background: item.customStyle.bgColor ? item.customStyle.bgColor : '',
-                                color: item.customStyle.color ? item.customStyle.color : '',
-                                fontSize: item.customStyle.fontSize ? item.customStyle.fontSize : ''
-                            }"
-                            :hover-class="
-                                !item.customStyle &&
-                                    'tui-' + (item.plain ? 'outline' : item.type || 'primary') + '-hover'
-                            "
-                            :data-index="index"
-                            @tap="handleClick"
-                        >
-                            {{ item.text || '确定' }}
-                        </button>
-                    </block>
-                </view>
-            </view>
-            <view v-else><slot></slot></view>
-        </view>
-        <view class="tui-modal-mask" :class="[show ? 'tui-mask-show' : '']" @tap="handleClickCancel"></view>
-    </view>
+						<button class="tui-modal-btn" :class="[(!item.customStyle && ('tui-'+(item.type || 'primary')+(item.plain?'-outline':''))),button.length!=2?'tui-btn-width':'',button.length>2?'tui-mbtm':'',shape=='circle'?'tui-circle-btn':'']"
+                         :style="{background: item.customStyle.bgColor ? item.customStyle.bgColor : '',color: item.customStyle.color ? item.customStyle.color : '',fontSize: item.customStyle.fontSize ? item.customStyle.fontSize : ''}"
+						 :hover-class="!item.customStyle && ('tui-'+(item.plain?'outline':(item.type || 'primary'))+'-hover')"  :data-index="index" @tap="handleClick">{{item.text || "确定"}}</button>
+					</block>
+				</view>
+			</view>
+			<view v-else>
+				<slot></slot>
+			</view>
+		</view>
+		<view class="tui-modal-mask" :class="[show?'tui-mask-show':'']" @tap="handleClickCancel"></view>
+
+	</view>
 </template>
 
 <script>
-export default {
-    name: 'tuiModal',
-    props: {
-        //是否显示
-        show: {
-            type: Boolean,
-            default: false
-        },
-        width: {
-            type: String,
-            default: '84%'
-        },
-        padding: {
-            type: String,
-            default: '40rpx 64rpx'
-        },
-        radius: {
-            type: String,
-            default: '24rpx'
-        },
-        //标题
-        title: {
-            type: String,
-            default: ''
-        },
-        //内容
-        content: {
-            type: String,
-            default: ''
-        },
-        //内容字体颜色
-        color: {
-            type: String,
-            default: '#999'
-        },
-        //内容字体大小 rpx
-        size: {
-            type: Number,
-            default: 28
-        },
-        //形状 circle, square
-        shape: {
-            type: String,
-            default: 'square'
-        },
-        button: {
-            type: Array,
-            default: function() {
-                return [
-                    {
-                        text: '取消',
-                        type: 'danger',
-                        plain: true //是否空心
-                    },
-                    {
-                        text: '确定',
-                        type: 'danger',
-                        plain: false
-                    }
-                ]
-            }
-        },
-        //点击遮罩 是否可关闭
-        maskClosable: {
-            type: Boolean,
-            default: true
-        },
-        //淡入效果,自定义弹框插入input输入框时传true
-        fadeIn: {
-            type: Boolean,
-            default: false
-        },
-        //自定义弹窗内容
-        custom: {
-            type: Boolean,
-            default: false
-        }
-    },
-    data() {
-        return {}
-    },
-    methods: {
-        handleClick(e) {
-            if (!this.show) return
-            const dataset = e.currentTarget.dataset
-            this.$emit('click', {
-                index: Number(dataset.index)
-            })
-        },
-        handleClickCancel() {
-            if (!this.maskClosable) return
-            this.$emit('cancel')
-        }
-    }
-}
+	export default {
+		name: 'tuiModal',
+		props: {
+			//是否显示
+			show: {
+				type: Boolean,
+				default: false
+			},
+			width: {
+				type: String,
+				default: '84%'
+			},
+			padding: {
+				type: String,
+				default: '40rpx 64rpx'
+			},
+			radius: {
+				type: String,
+				default: '24rpx'
+			},
+			//标题
+			title: {
+				type: String,
+				default: ''
+			},
+			//内容
+			content: {
+				type: String,
+				default: ''
+			},
+			//内容字体颜色
+			color: {
+				type: String,
+				default: '#999'
+			},
+			//内容字体大小 rpx
+			size: {
+				type: Number,
+				default: 28
+			},
+			//形状 circle, square
+			shape: {
+				type: String,
+				default: 'square'
+			},
+			button: {
+				type: Array,
+				default: function() {
+					return [{
+						text: '取消',
+						type: 'danger',
+						plain: true //是否空心
+					}, {
+						text: '确定',
+						type: 'danger',
+						plain: false
+					}]
+				}
+			},
+			//点击遮罩 是否可关闭
+			maskClosable: {
+				type: Boolean,
+				default: true
+			},
+			//淡入效果,自定义弹框插入input输入框时传true
+			fadeIn: {
+				type: Boolean,
+				default: false
+			},
+			//自定义弹窗内容
+			custom: {
+				type: Boolean,
+				default: false
+			}
+		},
+		data() {
+			return {
+
+			}
+		},
+		methods: {
+			handleClick(e) {
+				if (!this.show) return
+				const dataset = e.currentTarget.dataset
+				this.$emit('click', {
+					index: Number(dataset.index)
+				})
+			},
+			handleClickCancel() {
+				if (!this.maskClosable) return
+				this.$emit('cancel')
+			}
+		}
+	}
 </script>
 
 <style scoped>
-.tui-modal-box {
-    position: fixed;
-    left: 50%;
-    top: 50%;
-    margin: auto;
-    background-color: #fff;
-    z-index: 9999998;
-    transition: all 0.3s ease-in-out;
-    opacity: 0;
-    box-sizing: border-box;
-    visibility: hidden;
-}
-
-.tui-modal-scale {
-    transform: translate(-50%, -50%) scale(0);
-}
-
-.tui-modal-normal {
-    transform: translate(-50%, -50%) scale(1);
-}
-
-.tui-modal-show {
-    opacity: 1;
-    visibility: visible;
-}
-
-.tui-modal-mask {
-    position: fixed;
-    top: 0;
-    left: 0;
-    right: 0;
-    bottom: 0;
-    background-color: rgba(0, 0, 0, 0.6);
-    z-index: 9999996;
-    transition: all 0.3s ease-in-out;
-    opacity: 0;
-    visibility: hidden;
-}
-
-.tui-mask-show {
-    visibility: visible;
-    opacity: 1;
-}
-
-.tui-modal-title {
-    text-align: center;
-    font-size: 34rpx;
-    color: #333;
-    padding-top: 20rpx;
-    font-weight: bold;
-}
-
-.tui-modal-content {
-    text-align: center;
-    color: #999;
-    font-size: 28rpx;
-    padding-top: 20rpx;
-    padding-bottom: 60rpx;
-}
-
-.tui-mtop {
-    margin-top: 30rpx;
-}
-
-.tui-mbtm {
-    margin-bottom: 30rpx;
-}
-
-.tui-modalBtn-box {
-    width: 100%;
-    display: flex;
-    align-items: center;
-    justify-content: space-between;
-}
-
-.tui-flex-column {
-    flex-direction: column;
-}
-
-.tui-modal-btn {
-    width: 46%;
-    height: 68rpx;
-    line-height: 68rpx;
-    position: relative;
-    border-radius: 10rpx;
-    font-size: 26rpx;
-    overflow: visible;
-    margin-left: 0;
-    margin-right: 0;
-}
-
-.tui-modal-btn::after {
-    content: ' ';
-    position: absolute;
-    width: 200%;
-    height: 200%;
-    -webkit-transform-origin: 0 0;
-    transform-origin: 0 0;
-    -webkit-transform: scale(0.5, 0.5);
-    transform: scale(0.5, 0.5);
-    left: 0;
-    top: 0;
-    border-radius: 20rpx;
-}
-
-.tui-btn-width {
-    width: 80% !important;
-}
-
-.tui-primary {
-    background: #5677fc;
-    color: #fff;
-}
-
-.tui-primary-hover {
-    background: #4a67d6;
-    color: #e5e5e5;
-}
-
-.tui-primary-outline {
-    color: #5677fc;
-    background: transparent;
-}
-
-.tui-primary-outline::after {
-    border: 1px solid #5677fc;
-}
+	.tui-modal-box {
+		position: fixed;
+		left: 50%;
+		top: 50%;
+		margin: auto;
+		background-color: #fff;
+		z-index: 9999998;
+		transition: all 0.3s ease-in-out;
+		opacity: 0;
+		box-sizing: border-box;
+		visibility: hidden;
+	}
+
+	.tui-modal-scale {
+		transform: translate(-50%, -50%) scale(0);
+	}
+
+	.tui-modal-normal {
+		transform: translate(-50%, -50%) scale(1);
+	}
+
+	.tui-modal-show {
+		opacity: 1;
+		visibility: visible;
+	}
+
+	.tui-modal-mask {
+		position: fixed;
+		top: 0;
+		left: 0;
+		right: 0;
+		bottom: 0;
+		background-color: rgba(0, 0, 0, 0.6);
+		z-index: 9999996;
+		transition: all 0.3s ease-in-out;
+		opacity: 0;
+		visibility: hidden;
+	}
+
+	.tui-mask-show {
+		visibility: visible;
+		opacity: 1;
+	}
+
+	.tui-modal-title {
+		text-align: center;
+		font-size: 34rpx;
+		color: #333;
+		padding-top: 20rpx;
+		font-weight: bold;
+	}
+
+	.tui-modal-content {
+		text-align: center;
+		color: #999;
+		font-size: 28rpx;
+		padding-top: 20rpx;
+		padding-bottom: 60rpx;
+	}
+
+	.tui-mtop {
+		margin-top: 30rpx;
+	}
+
+	.tui-mbtm {
+		margin-bottom: 30rpx;
+	}
+
+	.tui-modalBtn-box {
+		width: 100%;
+		display: flex;
+		align-items: center;
+		justify-content: space-between
+	}
+
+	.tui-flex-column {
+		flex-direction: column;
+	}
+
+	.tui-modal-btn {
+		width: 46%;
+		height: 68rpx;
+		line-height: 68rpx;
+		position: relative;
+		border-radius: 10rpx;
+		font-size: 26rpx;
+		overflow: visible;
+		margin-left: 0;
+		margin-right: 0;
+	}
+
+	.tui-modal-btn::after {
+		content: " ";
+		position: absolute;
+		width: 200%;
+		height: 200%;
+		-webkit-transform-origin: 0 0;
+		transform-origin: 0 0;
+		-webkit-transform: scale(0.5, 0.5);
+		transform: scale(0.5, 0.5);
+		left: 0;
+		top: 0;
+		border-radius: 20rpx;
+	}
+
+	.tui-btn-width {
+		width: 80% !important;
+	}
+
+	.tui-primary {
+		background: #5677fc;
+		color: #fff;
+	}
+
+	.tui-primary-hover {
+		background: #4a67d6;
+		color: #e5e5e5;
+	}
+
+	.tui-primary-outline {
+		color: #5677fc;
+		background: transparent;
+	}
+
+	.tui-primary-outline::after {
+		border: 1px solid #5677fc;
+	}
 
 	.tui-danger {
 		background: #FF5B00;
 		color: #fff;
 	}
 
-.tui-danger-hover {
-    background: #d53912;
-    color: #e5e5e5;
-}
+	.tui-danger-hover {
+		background: #d53912;
+		color: #e5e5e5;
+	}
 
 	.tui-danger-outline {
 		color: #FF5B00;
@@ -294,110 +267,110 @@ export default {
 		border: 1px solid #FF5B00;
 	}
 
-.tui-red {
-    background: #e41f19;
-    color: #fff;
-}
-
-.tui-red-hover {
-    background: #c51a15;
-    color: #e5e5e5;
-}
-
-.tui-red-outline {
-    color: #e41f19;
-    background: transparent;
-}
-
-.tui-red-outline::after {
-    border: 1px solid #e41f19;
-}
-
-.tui-warning {
-    background: #ff7900;
-    color: #fff;
-}
-
-.tui-warning-hover {
-    background: #e56d00;
-    color: #e5e5e5;
-}
-
-.tui-warning-outline {
-    color: #ff7900;
-    background: transparent;
-}
-
-.tui-warning-outline::after {
-    border: 1px solid #ff7900;
-}
-
-.tui-green {
-    background: #19be6b;
-    color: #fff;
-}
-
-.tui-green-hover {
-    background: #16ab60;
-    color: #e5e5e5;
-}
-
-.tui-green-outline {
-    color: #19be6b;
-    background: transparent;
-}
-
-.tui-green-outline::after {
-    border: 1px solid #19be6b;
-}
-
-.tui-white {
-    background: #fff;
-    color: #333;
-}
-
-.tui-white-hover {
-    background: #f7f7f9;
-    color: #666;
-}
-
-.tui-white-outline {
-    color: #333;
-    background: transparent;
-}
-
-.tui-white-outline::after {
-    border: 1px solid #333;
-}
-
-.tui-gray {
-    background: #ededed;
-    color: #999;
-}
-
-.tui-gray-hover {
-    background: #d5d5d5;
-    color: #898989;
-}
-
-.tui-gray-outline {
-    color: #999;
-    background: transparent;
-}
-
-.tui-gray-outline::after {
-    border: 1px solid #999;
-}
-
-.tui-outline-hover {
-    opacity: 0.6;
-}
-
-.tui-circle-btn {
-    border-radius: 40rpx !important;
-}
-
-.tui-circle-btn::after {
-    border-radius: 80rpx !important;
-}
-</style>
+	.tui-red {
+		background: #e41f19;
+		color: #fff;
+	}
+
+	.tui-red-hover {
+		background: #c51a15;
+		color: #e5e5e5;
+	}
+
+	.tui-red-outline {
+		color: #e41f19;
+		background: transparent;
+	}
+
+	.tui-red-outline::after {
+		border: 1px solid #e41f19;
+	}
+
+	.tui-warning {
+		background: #ff7900;
+		color: #fff;
+	}
+
+	.tui-warning-hover {
+		background: #e56d00;
+		color: #e5e5e5;
+	}
+
+	.tui-warning-outline {
+		color: #ff7900;
+		background: transparent;
+	}
+
+	.tui-warning-outline::after {
+		border: 1px solid #ff7900;
+	}
+
+	.tui-green {
+		background: #19be6b;
+		color: #fff;
+	}
+
+	.tui-green-hover {
+		background: #16ab60;
+		color: #e5e5e5;
+	}
+
+	.tui-green-outline {
+		color: #19be6b;
+		background: transparent;
+	}
+
+	.tui-green-outline::after {
+		border: 1px solid #19be6b;
+	}
+
+	.tui-white {
+		background: #fff;
+		color: #333;
+	}
+
+	.tui-white-hover {
+		background: #f7f7f9;
+		color: #666;
+	}
+
+	.tui-white-outline {
+		color: #333;
+		background: transparent;
+	}
+
+	.tui-white-outline::after {
+		border: 1px solid #333;
+	}
+
+	.tui-gray {
+		background: #ededed;
+		color: #999;
+	}
+
+	.tui-gray-hover {
+		background: #d5d5d5;
+		color: #898989;
+	}
+
+	.tui-gray-outline {
+		color: #999;
+		background: transparent;
+	}
+
+	.tui-gray-outline::after {
+		border: 1px solid #999;
+	}
+
+	.tui-outline-hover {
+		opacity: 0.6;
+	}
+
+	.tui-circle-btn {
+		border-radius: 40rpx !important;
+	}
+
+	.tui-circle-btn::after {
+		border-radius: 80rpx !important;
+	}
+</style>

+ 38 - 1
pages.json

@@ -281,7 +281,7 @@
 					"style": {
 						"navigationBarTitleText": "采美豆明细",
 						"enablePullDownRefresh": true,
-						"navigationStyle": "custom"
+						"navigationStyle": "custom" 
 					}
 				},
 				{
@@ -510,6 +510,43 @@
 						"navigationBarTitleText": "专享价商品",
 						"enablePullDownRefresh": true
 					}
+				},
+				{
+					"path": "pay/card-list",
+					"style": {
+						"navigationBarTitleText": "银行卡"
+					}
+				},
+				{
+					"path": "pay/card-sus-list",
+					"style": {
+						"navigationBarTitleText": "支持银行"
+					}
+				},
+				{
+					"path": "pay/card-add",
+					"style": {
+						"navigationBarTitleText": "添加银行卡"
+					}
+				},
+				{
+					"path": "pay/card-comfirm",
+					"style": {
+						"navigationBarTitleText": "确认信息"
+					}
+				},
+				{
+					"path": "pay/card-comfirm-sub",
+					"style": {
+						"navigationBarTitleText": "输入短信验证码"
+					}
+				},
+				{
+					"path": "pay/card-order",
+					"style": {
+						"navigationBarTitleText": "收银台",
+						"navigationStyle": "custom"
+					}
 				}
 				
 			]

+ 112 - 18
pages/goods/components/cm-product-doc.vue

@@ -18,7 +18,7 @@
                                     :src="image.url"
                                     @click="previewImage(i, item.imageList)"
                                     mode="aspectFill"
-                                    v-for="(image, i) in imageFormat(item.imageList)"
+                                    v-for="(image, i) in imageFormat(item.imageList, index)"
                                     :key="i"
                                     :style="image.style"
                                 ></image>
@@ -48,6 +48,7 @@
                         <view class="cm-video-list">
                             <video
                                 class="cm-video"
+                                ref="myVideo"
                                 :id="'myVideo' + index"
                                 :src="item.fileUrl"
                                 :style="videoStyle['myVideo' + index]"
@@ -55,6 +56,7 @@
                                 show-fullscreen-btn
                                 show-mute-btn
                                 play-btn-position="center"
+                                @timeupdate="onPlayVideo($event)"
                                 @play="handlePlayer('myVideo' + index)"
                                 v-if="item.fileUrl"
                                 @loadedmetadata="loadedmetadata"
@@ -165,6 +167,8 @@ export default {
             videoStyle: {},
             timer: null,
             tipStatus: true, // 状态
+            userInfo: {}, // 用户信息
+            num: 0,
         }
     },
     computed: {
@@ -192,13 +196,14 @@ export default {
                     clearTimeout(this.timer)
                 }, 10000)
             }
-            console.log(val)
             this.$emit('tipStatus', this.TipStatus)
         }
     },
     created() {
         this.userId = uni.getStorageSync('userInfo').userId || -1
         this.getDetail()
+        this.userInfo = uni.getStorageSync('userInfo')
+        console.log(uni.getStorageSync('userInfo'))
     },
     methods: {
         // 获取商品资料详情
@@ -211,6 +216,18 @@ export default {
                 this.videoArchiveList = res.data.videoArchiveList
                 this.fileArchiveList = res.data.fileArchiveList
                 this.permission = res.data.permission
+                this.imageArchiveList.forEach((item, index) => {
+                    if (item.imageNum !== item.imageList.length) {
+                        this.num = item.imageNum - item.imageList.length
+                        for (let i = 0; i < this.num; i++) {
+                            item.imageList.push(this.defaultImage)
+                        }
+                    }
+                })
+                this.videoArchiveList.forEach(item => {
+                    item.fileUrl = decodeURIComponent(item.fileUrl)
+                })
+                // console.log(res.data.videoArchiveList)
             })
         },
         //采美豆抵扣
@@ -257,10 +274,11 @@ export default {
         },
         // 视频播放
         handlePlayer(id) {
-            if (this.checkPermission()) {
-                this.handleStop(id)
-                return
-            }
+            // if (this.checkPermission()) {
+            //     this.handleStop(id)
+            //     return
+            // }
+            console.log('视频播放id', id)
             // 如果点击同一个播放器,就
             if (this.prevVideoId === id) return
             // this.handleFullScreen(id) // 点击播放时全屏
@@ -269,6 +287,22 @@ export default {
             // 保存当前播放器id
             this.prevVideoId = id
         },
+        // 监听video时长
+        onPlayVideo(e) {
+            console.log(e)
+            const allTime = parseInt(((e.detail.duration)% 3600) / 60) // 获取分钟
+            const inPlay = parseInt(((e.detail.duration)% 3600) / 60)
+            if (this.permission === 2 || this.permission === 4 || this.permission === 1) {
+                if(allTime >= 10 && (3 < inPlay)) {
+                    this.handleStop(e.target.id)
+                    this.checkPermission()
+                }
+                if (allTime < 10) {
+                    this.handleStop(e.target.id)
+                    this.checkPermission()
+                }
+            }
+        },
         // 开始播放
         handelPlay(id) {
             if (!id) return
@@ -295,17 +329,75 @@ export default {
         },
         // 预览图片
         previewImage(index, previewImageList) {
-            if (this.checkPermission()) return
-            const that = this
-            uni.previewImage({
-                current: index,
-                indicator: 'number',
-                urls: previewImageList,
-                loop: true,
-                success() {
-                    that.$emit('previewImage', true)
+            // if (this.permission === 1) {
+            //     if(previewImageList.length >= 5) {
+            //         if (index < 3) {
+            //             uni.previewImage({
+            //                 current: index,
+            //                 indicator: 'number',
+            //                 urls: previewImageList,
+            //                 loop: true,
+            //                 success() {
+            //                     that.$emit('previewImage', true)
+            //                 }
+            //             })
+            //         }else {
+            //             this.checkPermission()
+            //         }
+            //     } else {
+            //         this.checkPermission()
+            //     }
+            // }else if (this.permission === 2) {
+            if (this.permission === 2 || this.permission === 4 || this.permission === 1) {
+                if(previewImageList.length >= 5) {
+                    if(index < 2) {
+                        uni.previewImage({
+                            current: index,
+                            indicator: 'number',
+                            urls: previewImageList,
+                            loop: true,
+                            success() {
+                                that.$emit('previewImage', true)
+                            }
+                        })
+                    } else {
+                        if (this.checkPermission()) return
+                    }
+                }else {
+                    if (this.checkPermission()) return
                 }
-            })
+            }
+            // } else if (this.permission === 3) {
+            //     if(previewImageList.length >= 5) {
+            //         if (index < 3) {
+            //             uni.previewImage({
+            //                 current: index,
+            //                 indicator: 'number',
+            //                 urls: previewImageList,
+            //                 loop: true,
+            //                 success() {
+            //                     that.$emit('previewImage', true)
+            //                 }
+            //             })
+            //         } else {
+            //             if (this.checkPermission()) return
+            //         }
+            //     } else {
+            //         if (this.checkPermission()) return
+            //     }
+            else {
+               if (this.checkPermission()) return
+               const that = this
+               uni.previewImage({
+                   current: index,
+                   indicator: 'number',
+                   urls: previewImageList,
+                   loop: true,
+                   success() {
+                       that.$emit('previewImage', true)
+                   }
+               })
+            }
         },
         //用户权限校验拦截
         checkPermission() {
@@ -328,7 +420,7 @@ export default {
             }
         },
         //图片列表处理
-        imageFormat(list) {
+        imageFormat(list, index) {
             const imageList = []
             if (list.length > 2) {
                 list.forEach((item, index) => {
@@ -377,7 +469,7 @@ export default {
         },
         // 文件预览
         previewFile(file) {
-            if (this.checkPermission()) return
+            // if (this.checkPermission()) return
             // 获取文件后缀
             // const index = file.fileName.lastIndexOf('.')
             // const suffix = file.fileName.substring(index)
@@ -414,11 +506,13 @@ export default {
                 success(res) {
                     const filePath = res.tempFilePath
                     console.log(filePath) 
+                    console.log(file, res, '文件数据')
                     // 打开文件
                     uni.openDocument({
                         filePath: filePath,
                         fileType: suffix,
                         success(res) {
+                            console.log(res)
                             uni.showToast({
                                 icon:'success',
                                 title:'打开成功',

+ 4 - 4
pages/goods/components/cm-unit-price.vue

@@ -108,7 +108,7 @@
 							{{ skuProduct.promotions.name
 							}}<text v-if="hasLogin"
 								>:¥{{
-									skuProduct.promotions == null ? '0.00' : skuProduct.promotions.touchPrice | NumFormat
+									skuProduct.promotions == null ? '0.00' : skuProduct.price | NumFormat
 								}}</text
 							>
 						</view>
@@ -130,7 +130,7 @@
 							{{ skuProduct.promotions.name
 							}}<text v-if="hasLogin && skuProduct.priceFlag != 1"
 								>:¥{{
-									skuProduct.promotions == null ? '0.00' : skuProduct.promotions.touchPrice | NumFormat
+									skuProduct.promotions == null ? '0.00' : skuProduct.price | NumFormat
 								}}</text
 							>
 						</view>
@@ -153,7 +153,7 @@
 							{{ skuProduct.promotions.name
 							}}<text v-if="hasLogin && skuProduct.priceFlag != 1"
 								>:¥{{
-									skuProduct.promotions == null ? '0.00' : skuProduct.promotions.touchPrice | NumFormat
+									skuProduct.promotions == null ? '0.00' : skuProduct.price | NumFormat
 								}}</text
 							>
 						</view>
@@ -178,7 +178,7 @@
 							{{ skuProduct.promotions.name
 							}}<text v-if="hasLogin && skuProduct.priceFlag != 1"
 								>:¥{{
-									skuProduct.promotions == null ? '0.00' : skuProduct.promotions.touchPrice | NumFormat
+									skuProduct.promotions == null ? '0.00' : skuProduct.price | NumFormat
 								}}</text
 							>
 						</view>

+ 1 - 1
pages/h5/activity/activity-list.vue

@@ -102,7 +102,7 @@
 				if(item.status!=3 ){
 					if(item.crmLink){
 						this.cmsSysStatistics(6)
-						this.$api.navigateTo(`/pages/h5/activity/activity?title=${item.title}&link=${item.crmLink}`)
+						this.$api.navigateTo(`/pages/h5/activity/activity?link=${item.crmLink}&linkId=${item.linkParam.id}`)
 					}
 				}else{
 					this.$util.msg('活动已经结束',2000)

+ 5 - 1
pages/login/login.vue

@@ -92,7 +92,11 @@ export default {
 				unionId: ''
 			},
 			smsCodeParams: {
-				mobile: '' //用户登录手机号
+				mobile: '' ,//用户登录手机号
+				imgCode:'',
+				platformType:0,
+				isCheckCaptcha:1,
+				activateCodeType:7
 			},
 			loginType: 0,
 			isMobileDisabled: false, //手机验证码按钮控制

+ 21 - 2
pages/notice/shop/components/notice-cell.vue

@@ -3,7 +3,7 @@
 	<view>
 		<!-- 供应商账户通知 -->
 		<template v-if="cellType === 1">
-			<view class="tui-notice-cell clearfix">
+			<view class="tui-notice-cell clearfix" v-if="cell.shopMessType < 6">
 				<view class="tui-cell-top">
 					<view class="cell-title"> {{ cell.shopMessType | noticeUsersFilters }} </view>
 					<view class="cell-time"> {{ cell.time }} </view>
@@ -18,6 +18,23 @@
 					<view class="tui-cell-content"> {{ noticeUsersText(cell) }} </view>
 				</template>
 			</view>
+            <view class="" v-if="cell.shopMessType >= 6">
+                <view class="tui-notice-cell clearfix">
+                	<view class="tui-cell-top">
+                		<view class="cell-title"> {{ cell.content }} </view>
+                		<view class="cell-time"> {{ cell.time }} </view>
+                	</view>
+                	<template v-if="cell.shopMessType === 3 || cell.shopMessType === 4 || cell.shopMessType === 6">
+                		<view class="tui-cell-content">
+                			<view class="cell-image"> <img :src="cell.mainImage" alt="" /> </view>
+                			<view class="cell-content"> {{ noticeUsersText(cell) }} </view>
+                		</view>
+                	</template>
+                	<template v-else>
+                		<view class="tui-cell-content"> {{ noticeUsersText(cell) }} </view>
+                	</template>
+                </view>
+            </view>
 		</template>
 		<!-- 供应商服务通知 -->
 		<template v-if="cellType === 2">
@@ -49,7 +66,9 @@ export default {
 	data() {
 		return {}
 	},
-	created() {},
+	created() {
+        console.log(this.cellType, this.cell, 1111)
+    },
 	methods: {}
 }
 </script>

+ 5 - 1
pages/notice/shop/mixins/notice.mixins.js

@@ -104,7 +104,11 @@ const noticeMixins = {
                 2: `恭喜您(微信昵称:${cell.content})成功成为【${cell.shopName}】的运营人员。`,
                 3: '该商品上架审核未通过,暂时不能上架采美商城。请登录采美网站修改商品资料重新提交。',
                 4: '该商品新品展示审核未通过,未能展示在采美商城新品橱窗。',
-                5: `该商品的资质证书将于${cell.content}后失效,请及时登录采美网站上传新证书。` 
+                5: `该商品的资质证书将于${cell.content}后失效,请及时登录采美网站上传新证书。` ,
+                6: `恭喜您发布的采美百科词条“${cell.content}”审核已通过。`,
+                7: `很遗憾!您发布的采美百科词条“${cell.content}”审核未通过,原因是“${cell.reasonContent}”,可前往电脑端“我的词条”进行修改后,重新提交审核。`,
+                8: `恭喜您发布的采美文章“${cell.content}”审核已通过。`,
+                9: `很遗憾!您发布的采美文章“${cell.content}”审核未通过,原因是“${cell.reasonContent}”,可前往电脑端“文章管理”进行修改后,重新提交审核。`
             }
             return map[cell.shopMessType]
         },

+ 1 - 1
pages/seller/club/components/echart-info.vue

@@ -2,7 +2,7 @@
 	<view class="echart-content"> 
 		<view class="echart-title">
 			<view class="e-icon e1"><text class="iconfont icon-gongsi"></text></view>
-			<view class="e-name">采美信息技术有限公司</view>
+			<view class="e-name">{{ data.name }}</view>
 			<view class="e-start">{{ data.status | statusFilters }}</view>
 		</view>
 		<view class="echart-main clearfix" @click="handleClubInfo">

+ 1 - 1
pages/seller/components/cm-clubpopup.vue

@@ -14,7 +14,7 @@
 							v-model="listQuery.name"
 							@input="onShowClose"
 							@confirm="initclubList()"
-							placeholder="机构名称/联系人"
+							placeholder="机构名称/联系人/手机号"
 							maxlength="16"
 						/>
 						<text class="iconfont icon-shanchu1" v-if="isShowClose" @click="delInputText()"></text>

+ 5 - 4
pages/seller/order/create-order.vue

@@ -220,6 +220,7 @@
 					orderInvoice:{type:0},	// 订单发票信息
 					orderSeen:1,		// 订单对机构可见度 1可见  2不可见
 					payInfo:{			// 订单金额数据
+						isColdChina:0, 		//是否勾选冷链费
 						orderShouldPayFee: 0,	// 订单最终支付金额
 						balancePayFlag: 0,		// 勾选余额的状态(1使用,0不使用)
 						clauseId:0,				// 条款Id
@@ -309,7 +310,7 @@
 					this.allPrice = data.totalPrice
 					this.rechargeGoods = data.includeRecharge
 					this.clauseList = data.clauseList
-					this.postageParam.productIds  = this.getProductIds(data.list)
+					this.postageParam.skuIds  = this.getProductIds(data.list)
 					this.isCouponShow = true
 					if(this.couponList.length>0){
 						this.couponAmount = data.couponList[0].couponAmount
@@ -340,13 +341,13 @@
 				})
 			},
 			getProductIds(list){// 获取订单商品id列表
-				let productIds = []
+				let skuId = []
 				list.forEach(function(supplier){
 					supplier.cartList.forEach(function(product){
-						productIds.push(product.productId)
+						skuId.push(product.skuId)
 					})
 				})
-				return productIds.join(',')
+				return skuId.join(',')
 			},
 			getFreightData(){//获取邮费信息
 				this.OrderService.GetOrderPostage(this.postageParam).then(response =>{

+ 2 - 2
pages/seller/remarks/list.vue

@@ -11,7 +11,7 @@
 						v-model="listQuery.keyWord"
 						@input="onShowClose"
 						@confirm="getUserClubRemarksList"
-						placeholder="搜索关键词 / 咨询人 / 机构名称"
+						placeholder="搜索关键词/咨询人/机构名称/手机号"
 						maxlength="16"
 					/>
 					<text class="iconfont icon-shanchu1" v-if="isShowClose" @click="delInputText()"></text>
@@ -107,7 +107,7 @@
 							{{ label.label }}
 						</text>
 					</view>
-					<view class="tui-remarks-button" v-if="remark.serviceProviderId === listQuery.serviceProviderId">
+					<view class="tui-remarks-button" v-if="remark.createServiceProviderId === listQuery.serviceProviderId">
 						<view class="btn edit" @click.stop="handEditRemark(remark.remarksId)">修改</view>
 						<view class="btn del" @click.stop="deleteRemark(remark.remarksId)">删除</view>
 					</view>

+ 1 - 1
pages/seller/remarks/record-list.vue

@@ -97,7 +97,7 @@
 								{{ label.label }}
 							</text>
 						</view>
-						<view class="tui-remarks-button" v-if="remark.serviceProviderId === listQuery.serviceProviderId">
+						<view class="tui-remarks-button" v-if="remark.createServiceProviderId === listQuery.serviceProviderId">
 							<view class="btn edit" @click.stop="handEditRemark(remark.remarksId)">修改</view>
 							<view class="btn del" @click.stop="deleteRemark(remark.remarksId)">删除</view>
 						</view>

+ 1 - 1
pages/seller/remarks/relation-consult-list.vue

@@ -94,7 +94,7 @@
 							{{ label.label }}
 						</text>
 					</view>
-					<view class="tui-remarks-button" v-if="remark.serviceProviderId === listQuery.serviceProviderId">
+					<view class="tui-remarks-button" v-if="remark.createServiceProviderId === listQuery.serviceProviderId">
 						<view class="btn edit" @click.stop="cancelReport(remark.remarksId)">取消关联</view>
 					</view>
 				</view>

+ 1 - 1
pages/seller/remarks/report-list.vue

@@ -77,7 +77,7 @@
 								</view>
 							</view>
 						</view>
-						<view class="tui-remarks-button" v-if="report.serviceProviderId === listQuery.serviceProviderId" >
+						<view class="tui-remarks-button" v-if="report.createServiceProviderId === listQuery.serviceProviderId" >
 							<view class="btn edit" @click.stop="handReportDetails(report.reportId)">查看关联咨询记录</view>
 							<view class="btn del" @click.stop="deleteReport(report.reportId)"> 删除</view>
 						</view>

+ 1 - 1
pages/supplier/deliver/deliver-record.vue

@@ -58,7 +58,7 @@
 								</view>
 							</view>
 						</view>
-						<view class="goods-pros-b clearfix" v-show="item.remarkImages.length > 0">
+						<view class="goods-pros-b clearfix" v-show="item.remarkImages && item.remarkImages.length > 0">
 							<view class="b-label">拍照备注</view>
 							<view class="b-photo">
 								<view class="b-imageView" v-for="(imgItem, imgIdx) in item.remarkImages" :key="imgIdx">

+ 39 - 79
pages/tabBar/user/user.vue

@@ -91,39 +91,43 @@
 					</view>
 					<view class="main-account">
 						<view class="main-cell">
-							<view class="main-account-le">
-								<view class="main-account-icon"> <text class="iconfont icon-zichan"></text> </view>
-								<view class="main-account-text">我的资产</view>
+							<view
+								class="main-account-ri-view account"
+								@click="navigator('/pages/user/account/account')"
+							>
+								<view class="main-account-icon" v-if="hasLogin">{{ userMoney }}</view>
+								<view class="main-account-icon none" v-else>-</view>
+								<view class="main-account-text">账户余额</view>
 							</view>
-							<view class="main-account-ri">
-								<view
-									class="main-account-ri-view account"
-									@click="navigator('/pages/user/account/account')"
-								>
-									<view class="main-account-icon" v-if="hasLogin">{{ userMoney }}</view>
-									<view class="main-account-icon none" v-else>-</view>
-									<view class="main-account-text">账户余额</view>
-								</view>
-								<view
-									class="main-account-ri-view beans"
-									@click="navigator('/pages/user/account/account-bean')"
-								>
-									<view class="main-account-icon" v-if="hasLogin">{{
-										userBeans ? userBeans : 0
-									}}</view>
-									<view class="main-account-icon none" v-else>-</view>
-									<view class="main-account-text">采美豆</view>
-								</view>
-								<view
-									class="main-account-ri-view coupon"
-									@click="navigator('/pages/user/coupon/coupon')"
-								>
-									<view class="main-account-icon" v-if="hasLogin">{{
-										couponNum ? couponNum : 0
-									}}</view>
-									<view class="main-account-icon none" v-else>-</view>
-									<view class="main-account-text">优惠券</view>
-								</view>
+							<view
+								class="main-account-ri-view beans"
+								@click="navigator('/pages/user/account/account-bean')"
+							>
+								<view class="main-account-icon" v-if="hasLogin">{{
+									userBeans ? userBeans : 0
+								}}</view>
+								<view class="main-account-icon none" v-else>-</view>
+								<view class="main-account-text">采美豆</view>
+							</view>
+							<view
+								class="main-account-ri-view coupon"
+								@click="navigator('/pages/user/coupon/coupon')"
+							>
+								<view class="main-account-icon" v-if="hasLogin">{{
+									couponNum ? couponNum : 0
+								}}</view>
+								<view class="main-account-icon none" v-else>-</view>
+								<view class="main-account-text">优惠券</view>
+							</view>
+							<view
+								class="main-account-ri-view coupon"
+								@click="navigator('/pages/user/pay/card-list')"
+							>
+								<view class="main-account-icon" v-if="hasLogin">{{
+									bankNum ? bankNum : 0
+								}}</view>
+								<view class="main-account-icon none" v-else>-</view>
+								<view class="main-account-text">银行卡</view>
 							</view>
 						</view>
 					</view>
@@ -411,6 +415,7 @@ export default {
 			userBeans: 0,
 			userMoney: '0.00',
 			couponNum: 0,
+			bankNum:0,
 			contactNumber: '',
 			openid: '',
 			aboutHtml: '',
@@ -480,6 +485,7 @@ export default {
 					this.bindMobile = data.user.bindMobile // 登录手机号
 					this.clubStatus = data.user.clubStatus // 机构审核状态
 					this.couponNum = data.couponNum // 优惠券数量
+					this.bankNum = data.bankNum // 银行卡数量
 					this.isModify = data.isModify // 是否显示采美豆
 					this.contactNumber = data.contactNumber // 联系电话
 					let clubInfo = { name: this.name, image: this.headpic, userId: data.user.userId }
@@ -960,56 +966,10 @@ page {
 			border-radius: 20rpx;
 			box-sizing: border-box;
 			padding: 24rpx 0;
-		}
-		.main-account-le {
-			width: 165rpx;
-			height: 100%;
-			position: relative;
-			float: left;
-			&::before {
-				content: '';
-				width: 2rpx;
-				height: 64rpx;
-				background-color: #c4c4c4;
-				position: absolute;
-				right: 0;
-				top: 30rpx;
-			}
-			.main-account-icon {
-				width: 100%;
-				height: 74rpx;
-				line-height: 74rpx;
-				text-align: center;
-				.icon-zichan {
-					font-size: 50rpx;
-					color: #f94b4b;
-				}
-			}
-			.main-account-text {
-				width: 100%;
-				height: 44rpx;
-				line-height: 44rpx;
-				font-size: $font-size-28;
-				text-align: center;
-				color: #333333;
-			}
-		}
-		.main-account-ri {
-			width: 537rpx;
-			height: 100%;
-			float: right;
 			.main-account-ri-view {
 				height: 100%;
+				width: 25%;
 				float: left;
-				&.account {
-					width: 40%;
-				}
-				&.beans {
-					width: 32%;
-				}
-				&.coupon {
-					width: 28%;
-				}
 				.main-account-icon {
 					width: 100%;
 					height: 74rpx;

+ 257 - 114
pages/user/member/member-pay.vue

@@ -10,44 +10,87 @@
 					<view class="pay-mouth">套餐:{{ handelPayMsg.duration }}个月</view>
 				</view>
 				<view class="pay-check">
-					<view class="check-title"><view class="text">选择支付方式</view></view>
 					<view class="pay-checked">
-						<view class="pay-item" :class="{ current: tabCurrentIndex === 0 }" @click="tabClick(0)">
-							<view class="item-l">
+						<view class="pay-card-main" v-if="cardsList.length > 0">
+							<view class="pay-item-cell" @click="tabClick(3)">
+								<view class="item-icon">
+									<image
+										:src="
+											'https://static.caimei365.com/app/img/pay/icon_' +
+												defaultCards.bankCode +
+												'_@2x.png'
+										"
+									></image>
+								</view>
+								<view class="item-texts"
+									>{{ defaultCards.bankName }}(
+									{{ defaultCards.quickPayBankNumber | bankNumeberFilter }} )</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)" v-else>
+							<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 class="item-r"> <text class="iconfont icon-duigou"></text> </view>
 						</view>
-						<view class="pay-item" :class="{ current: tabCurrentIndex === 1 }" @click="tabClick(1)">
-							<view class="item-l">
+						<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-text">
-									<view class="txt-p">企业网银支付</view> <view class="txt-t">需要在电脑端汇款</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 class="item-r"> <text class="iconfont icon-duigou"></text> </view>
 						</view>
-						<view class="pay-item" :class="{ current: tabCurrentIndex === 2 }" @click="tabClick(2)">
-							<view class="item-l">
+						<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-text">
-									<view class="txt-p">个人网银支付</view> <view class="txt-t">需要在电脑端汇款</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 class="item-r"> <text class="iconfont icon-duigou"></text> </view>
 						</view>
 					</view>
 				</view>
 			</view>
-			<view class="pay-button">
-				<view class="btn" @click.stop="payConfirmClick" :style="{ background: btnColor }">{{
-					buttonText
-				}}</view>
+			<view class="pay-button" :style="{ paddingBottom: isIphoneX ? '68rpx' : '24rpx' }">
+				<view class="btn" @click.stop="buttonSubMit" :style="{ background: btnColor }">{{ buttonText }}</view>
 			</view>
 		</view>
+		<!-- 选择快捷支付银行 -->
+		<cm-cards :show="popupShow1" :list="cardsList" @handleChoiceaCards="handleChoiceaCards" v-if="popupShow1"></cm-cards>
+		<!-- 网银链接说明弹窗 -->
 		<view class="alert spec" :class="specClass" v-if="isShowTip">
-			<!-- 选择支付弹窗说明 -->
 			<view class="payun-alert" @tap="hideTips">
 				<view class="content">
 					<view class="title">
@@ -70,25 +113,39 @@
 import authorize from '@/common/config/authorize.js'
 const thorui = require('@/components/clipboard/clipboard.thorui.js')
 import payMixins from '@/mixins/payMixins.js'
+import cardMixins from '../pay/mixins/cardMixins.js'
+import cmCards from '../pay/components/cm-cards-popup'
 export default {
-	mixins: [payMixins],
+	mixins: [payMixins, cardMixins],
+	components: {
+		cmCards
+	},
 	data() {
 		return {
 			isIphoneX: this.$store.state.isIphoneX,
 			CustomBar: this.CustomBar, // 顶部导航栏高度
-			tabCurrentIndex: 0,
 			isShowTip: false,
-			buttonText: '使用微信支付',
-			btnColor: '#09BB07',
 			handelPayMsg: {},
 			payType: 0,
 			isPaySwitch: true,
 			payParams: {
-				payType:'XCX',
+				payType: 'XCX',
 				code: 0,
 				vipRecordId: 0
 			},
-			payHttpUrl: 'https://www.caimei365.com'
+			payHttpUrl: 'https://www.caimei365.com',
+			popupShow1: false,
+			quickParams: {
+			    userId: 0, 					//机构UserId
+			    quickPayBankNumber: '', 	//快捷支付用户银行卡号/信用卡号
+			    quickPayMobile: '', 		//快捷支付银行卡绑定手机号
+			    quickPayBankExpireTime: '', //快捷支付信用卡过期时间,只包含年月,格式yy-MM
+			    quickPayUserName: '', 		//快捷支付用户姓名
+			    idCard: '', 				//身份证号
+			    cvvCode: '',				//信用卡安全码
+			    quickPayFlag: 2,
+			    vipRecordId: 0,
+			},
 		}
 	},
 	onLoad(option) {
@@ -121,14 +178,15 @@ export default {
 	methods: {
 		async initGetStotage(option) {
 			let data = JSON.parse(option.data)
-			this.payParams.vipRecordId = data.vipRecordId
+			this.payParams.vipRecordId = this.quickParams.vipRecordId = data.vipRecordId
 			this.handelPayMsg = data
 			this.PayOrderOnLineSwitch()
+			this.GetUserClubBanks()
 			console.log(this.handelPayMsg)
 		},
 		PayOrderOnLineSwitch() {
 			// 线上支付开关
-			this.PayService.PayOrderOnLineSwitch()  
+			this.PayService.PayOrderOnLineSwitch()
 				.then(response => {
 					if (response.data === 0) {
 						this.isPaySwitch = true
@@ -140,14 +198,44 @@ export default {
 					console.log('线上支付开关异常')
 				})
 		},
-		payConfirmClick() {
+		async GetUserClubBanks() {
+		    //获取列表
+		    try {
+		        const user = await this.$api.getStorage()
+		        const res = await this.UserService.userClubBanks({ userId:user.userId })
+		        this.cardsList = res.data
+		        this.defaultCards = this.cardsList[0]
+		        this.quickParams.userId = user.userId 
+		        this.quickParams.quickPayBankNumber = this.defaultCards.quickPayBankNumber 
+		        this.quickParams.quickPayMobile = this.defaultCards.quickPayMobile 
+		        this.quickParams.quickPayBankExpireTime = this.defaultCards.quickPayBankExpireTime ? this.defaultCards.quickPayBankExpireTime : ''
+		        this.quickParams.quickPayUserName = this.defaultCards.quickPayUserName 
+		        this.quickParams.idCard = this.defaultCards.idCard 
+		        this.quickParams.cvvCode = this.defaultCards.cvvCode ? this.defaultCards.cvvCode : '' 
+		    } catch (error) {
+		        console.log(error)
+		    }
+		},
+		handleAddCard(index) {
+			//跳转添加卡号支付
+			//quickPayFlag 2超级会员,vipRecordId :会员购买记录Id
+			const data = {
+				payData: {
+					quickPayFlag: 2,
+					vipRecordId: this.payParams.vipRecordId
+				},
+				payAmount: this.handelPayMsg.price
+			}
+			this.$api.navigateTo(`/pages/user/pay/card-comfirm?type=${index}&data=${JSON.stringify(data)}`)
+		},
+		buttonSubMit() {
 			// 友盟埋点收集选择支付方式
-			if(process.env.NODE_ENV != 'development'){
+			if (process.env.NODE_ENV != 'development') {
 				this.$uma.trackEvent('Um_Event_userClubMemberChooseWechatPay', {
 					Um_Key_PageName: '支付超级会员',
 					Um_Key_SourcePage: '支付超级会员',
-					Um_Key_PayName:`${this.buttonText}`,
-					Um_Key_Month: `${this.handelPayMsg.duration}个月`,
+					Um_Key_PayName: `${this.buttonText}`,
+					Um_Key_Month: `${this.handelPayMsg.duration}个月`
 				})
 			}
 			if (this.isPaySwitch) {
@@ -159,30 +247,56 @@ export default {
 					this.MiniWxPayFor()
 					break
 				case 1: // 生成企业网银链接
-					this.BuildCatenate()
+					this.handlePayOrderPayLink()
 					break
 				case 2: // 生成个人网银链接
-					this.BuildCatenate()
+					this.handlePayOrderPayLink()
+					break
+				case 3: // 快捷支付
+					this.orderPayQuickPay()
 					break
 			}
 		},
+		async orderPayQuickPay() {
+			//快捷支付
+			try {
+				const res = await this.PayService.orderPayQuickPay(this.quickParams)
+				const data = {
+					params: this.quickParams,
+					payData: res.data,
+					payAmount: this.handelPayMsg.price
+				}
+				this.$api.navigateTo(
+					`/pages/user/pay/card-comfirm-sub?type=3&data=${JSON.stringify(data)}`
+				)
+			} catch (error) {
+				this.$util.msg(error.msg, 2000)
+			}
+		},
+		async handlePayOrderPayLink() {
+			// 生成网银支付链接
+			try {
+				const linkParams = {
+					vipRecordId: this.payParams.vipRecordId,
+					payType: this.payType
+				}
+			    const res = await this.PayService.PayOrderPayLink(linkParams)
+				this.payHttpUrl = res.data
+				this.isShowTip = true
+				console.log('isShowTip',this.isShowTip)
+			} catch (error) {
+			    console.log(error)
+			}
+		},
 		async MiniWxPayFor() {
 			// 使用微信支付
 			this.payParams.code = await authorize.getCode('weixin')
 			this.weChatMiniVipWxPay(this.payParams)
-			// this.PayService.PayOrderVipWechat(this.payParams)
-			// 	.then(response => {
-			// 		let PayInfo = JSON.parse(response.data.rt10_payInfo)
-			// 		this.WxRequestPayment(PayInfo)
-			// 	})
-			// 	.catch(error => {
-			// 		this.$util.msg(error.msg, 2000)
-			// 	})
 		},
 		WxRequestPayment(data) {
 			// 微信支付Api
 			let self = this
-			console.log('data',data)
+			console.log('data', data)
 			wx.requestPayment({
 				timeStamp: data.timeStamp,
 				nonceStr: data.nonceStr,
@@ -198,34 +312,6 @@ export default {
 				complete: function(res) {}
 			})
 		},
-		BuildCatenate() {
-			// 生成网银支付链接
-			this.PayService.PayOrderPayLink({
-				vipRecordId: this.payParams.vipRecordId,
-				payType: this.payType
-			}).then(response => {
-				this.payHttpUrl = response.data
-				this.isShowTip = true
-			})
-		},
-		tabClick(index) {
-			//tab切换
-			this.tabCurrentIndex = this.payType = index
-			switch (index) {
-				case 0:
-					this.btnColor = '#09BB07'
-					this.buttonText = '使用微信支付'
-					break
-				case 1:
-					this.btnColor = '#034582'
-					this.buttonText = '生成企业网银链接'
-					break
-				case 2:
-					this.btnColor = '#034582'
-					this.buttonText = '生成个人网银链接'
-					break
-			}
-		},
 		hideTips() {
 			//隐藏弹窗
 			this.isShowTip = false
@@ -304,6 +390,7 @@ page {
 			width: 100%;
 			height: auto;
 			float: left;
+			margin-top: 40rpx;
 			.check-title {
 				width: 622rpx;
 				height: 40rpx;
@@ -336,69 +423,122 @@ page {
 			.pay-checked {
 				width: 100%;
 				height: auto;
-				.pay-item {
+				.pay-card-main {
 					width: 100%;
-					height: 120rpx;
+					height: auto;
+					float: left;
+					border-top: 12px solid #f7f7f7;
+					border-bottom: 12px solid #f7f7f7;
 					box-sizing: border-box;
-					border: 1px solid #e1e1e1;
-					border-radius: 8rpx;
-					padding: 20rpx;
-					margin: 24rpx 0;
-					display: flex;
-					background-color: #ffffff;
-					&.current {
-						border-color: #e4aa43;
-						.item-r {
-							.icon-duigou {
-								color: #e4aa43;
+					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;
 							}
 						}
 					}
-					.item-l {
-						flex: 8;
+				}
+				.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: 72rpx;
-							height: 72rpx;
+							width: 48rpx;
+							height: 48rpx;
 							float: left;
 							text-align: center;
-							line-height: 72rpx;
+							line-height: 48rpx;
 							margin-right: 20rpx;
 							.iconfont {
-								font-size: 78rpx;
+								font-size: 48rpx;
 							}
 							.icon-weixinzhifu {
-								color: #09bb07;
+								color: #0abc64;
 							}
 							.icon-gerenwangyinzhifu {
-								color: #034582;
+								color: #16afe8;
 							}
 							.icon-qiyewangyinzhifu {
-								color: #004889;
+								color: #007acc;
 							}
 						}
 						.item-texts {
-							line-height: 66rpx;
-							font-size: $font-size-26;
+							line-height: 48rpx;
+							font-size: $font-size-28;
 							color: $text-color;
-						}
-						.item-text {
-							line-height: 36rpx;
-							font-size: $font-size-26;
-							.txt-p {
-								color: $text-color;
-							}
-							.txt-t {
-								color: #999999;
+							float: left;
+							&.add {
+								font-weight: bold;
 							}
 						}
-					}
-					.item-r {
-						flex: 2;
-						text-align: center;
-						line-height: 72rpx;
-						.icon-duigou {
-							font-size: 54rpx;
+						.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;
+							}
 						}
 					}
 				}
@@ -406,11 +546,14 @@ page {
 		}
 	}
 	.pay-button {
-		width: 100%;
-		float: left;
-		margin-top: 30rpx;
+		width: 600rpx;
+		background-color: #ffffff;
+		position: fixed;
+		height: 88rpx;
+		padding: 24rpx 75rpx 0 75rpx;
+		bottom: 0;
 		.btn {
-			width: 662rpx;
+			width: 100%;
 			height: 88rpx;
 			border-radius: 44rpx;
 			font-size: $font-size-28;

+ 1 - 1
pages/user/member/member.vue

@@ -56,7 +56,7 @@
 			</view>
 		</view>
 		<view class="cm-member-main" v-if="productCouponList.length > 0">
-			<view class="title">专属优惠券<text class="small">每三个月可领4张</text></view>
+			<view class="title">专属优惠券<text class="small">每三个月可领</text></view>
 			<view class="cm-member-coupon clearfix">
 				<view
 					v-for="(coupon, index) in productCouponList"

+ 412 - 335
pages/user/order/create-order.vue

@@ -177,10 +177,10 @@ import invoiceTent from './components/invoiceTent'
 import coupon from './components/coupon'
 import exchangeCoupon from './components/exchangeCoupon'
 import freight from './components/freight'
-   import cmReturnInstructions from './components/cm-return-instructions.vue'
+import cmReturnInstructions from './components/cm-return-instructions.vue'
 import freightAlert from '@/components/cm-module/modelAlert/freightAlert'
 export default {
-	components:{
+	components: {
 		choiceAddress,
 		goodsList,
 		invoiceTent,
@@ -188,87 +188,93 @@ export default {
 		exchangeCoupon,
 		freight,
 		freightAlert,
-           cmReturnInstructions
+		cmReturnInstructions
 	},
 	data() {
 		return {
-			isIphoneX:this.$store.state.isIphoneX,
-			isSubLoading:false,
-			confirmType:1,
-			orderID:0,
-			cartParam: {// 购物车立即结算确认订单参数
-				skuIds:0,		// 商品Id(逗号隔开)
-				source:2,			// 来源:1WWW 2小程序
-				userId:0			// 用户Id
+			isIphoneX: this.$store.state.isIphoneX,
+			isSubLoading: false,
+			confirmType: 1,
+			orderID: 0,
+			cartParam: {
+				// 购物车立即结算确认订单参数
+				skuIds: 0, // 商品Id(逗号隔开)
+				source: 2, // 来源:1WWW 2小程序
+				userId: 0 // 用户Id
 			},
-			productParam: {// 商品立即购买确认订单参数
-				productCount:0, 	// 商品数量
-				productId:0,		// 商品Id
-				source:2,			// 来源:1WWW 2小程序
-				userId:0			// 用户Id
+			productParam: {
+				// 商品立即购买确认订单参数
+				productCount: 0, // 商品数量
+				productId: 0, // 商品Id
+				source: 2, // 来源:1WWW 2小程序
+				userId: 0 // 用户Id
 			},
-			supportParm:{// 组合商品立即购买确认订单参数
-				productInfo:'',
-				source:2,			// 来源:1WWW 2小程序
-				userId:0			// 用户Id
+			supportParm: {
+				// 组合商品立即购买确认订单参数
+				productInfo: '',
+				source: 2, // 来源:1WWW 2小程序
+				userId: 0 // 用户Id
 			},
-			postageParam: {// 邮费计算参数
-				skuIds:0,		// 商品Id(逗号隔开)
-				userId:0,			// 用户Id
-				townId:0			// 地区Id
+			postageParam: {
+				// 邮费计算参数
+				skuIds: 0, // 商品Id(逗号隔开)
+				userId: 0, // 用户Id
+				townId: 0 // 地区Id
 			},
 			confirmParam: {
-				cartType:1, 		// 购买类型:(1自主下单, 3协销下单)
-				orderMiniType:0,    // 订单提交状态 0初始提交 1 继续提交
-				orderSource:6,		// 订单来源 1WWW 6小程序[采美,星范]
-				addressId:0,		// 收货地址Id
-				clubCouponId:0,		// 关联优惠券Id
-				clubId:0,			// 机构Id
-				orderInfo:[],		// 订单商品数据
-				orderInvoice:{type:0},	// 订单发票信息
-				payInfo:{			// 订单金额数据
-					orderShouldPayFee: 0,	// 订单最终支付金额
-					balancePayFlag: 0,		// 勾选余额的状态(1使用,0不使用)
-					clauseId:0,				// 条款Id
-					postage: 0,				// 运费金额
-					postageFlag: 0,			// 运费类型
-					userBeans: 0,			// 抵扣采美豆数量
-					rebateFlag:0			// 是否返佣订单
+				cartType: 1, // 购买类型:(1自主下单, 3协销下单)
+				orderMiniType: 0, // 订单提交状态 0初始提交 1 继续提交
+				orderSource: 6, // 订单来源 1WWW 6小程序[采美,星范]
+				addressId: 0, // 收货地址Id
+				clubCouponId: 0, // 关联优惠券Id
+				clubId: 0, // 机构Id
+				orderInfo: [], // 订单商品数据
+				orderInvoice: { type: 0 }, // 订单发票信息
+				payInfo: {
+					// 订单金额数据
+					isColdChina: 0, //是否勾选冷链费
+					orderShouldPayFee: 0, // 订单最终支付金额
+					balancePayFlag: 0, // 勾选余额的状态(1使用,0不使用)
+					clauseId: 0, // 条款Id
+					postage: 0, // 运费金额
+					postageFlag: 0, // 运费类型
+					userBeans: 0, // 抵扣采美豆数量
+					rebateFlag: 0 // 是否返佣订单
 				},
-				unionId:uni.getStorageSync('unionId'),// 用户unionId
-			}, 	// 提交订单参数
-			productIds:'',			  // 获取上一级页面商品信息
-			submitState:'',  		  // 提交状态
-			totalCount:1,			  // 订单提交总数量
-			reducedPrice:0,			  // 满减金额
-			couponAmount:0,	  		  // 优惠券金额
-			totalDiscountAmount:0,	  // 共减金额
-			allPrice:0.00,			  // 订单总金额
-			orderShouldPayFee:0,	  // 订单最终支付金额
-			surplusMoney:0.00,		  // 显示勾选后的剩余抵扣
-			userMoney:0.00,			  // 显示可使用余额
-			deductMoney:0.00,		  // 显示已使用的余额
-			isRequest:false,		  // 是否加载完成渲染子组件
-			isFreight:false,		  // 是否加载完成渲染子组件
-			isAddress:false,		  // 是否加载完成地址
-			isExchangePopup:false, 	  // 控制兑换优惠券弹窗
-			isfreightTip:false,		  // 控制邮费弹窗
-			ischecked:false,	      // 是否勾选余额
-			hanldFreePostFlag:'',	  // 邮费状态
-			hanldFreight:'',		  // 邮费
-			addressData:{},			  // 初始化地址信息
-			goodsData:[],			  // 初始化商品信息
-			couponList:[],		  	  // 初始化优惠券信息
-			invoiceData:{type:0},	  // 初始化发票信息
-			freightData:{},			  // 邮费数据
-			orderInfo:[],			  // 提交的商品信息
-			rechargeGoods:null,		  // 判断订单里有定金商品或者充值商品时,余额抵扣部分不显示
-			freightBeansMoney:0,	  // 存储采美豆抵扣金额
-			isCouponShow:false,		  // 是否显示可选优惠券
-			isCheckedBeans:false,     // 是否抵扣采美豆
-			isCouponModel:false,	  // 兑换优惠券成功提示
-			ExchangeCouponData:{},	  // 兑换优惠券信息
-			contentModalText: '采购金额过小,将扣除500采美豆,建议您前往采美旗下“颜选美学”小程序购买小额商品。',     //操作文字提示语句
+				unionId: uni.getStorageSync('unionId') // 用户unionId
+			}, // 提交订单参数
+			productIds: '', // 获取上一级页面商品信息
+			submitState: '', // 提交状态
+			totalCount: 1, // 订单提交总数量
+			reducedPrice: 0, // 满减金额
+			couponAmount: 0, // 优惠券金额
+			totalDiscountAmount: 0, // 共减金额
+			allPrice: 0.0, // 订单总金额
+			orderShouldPayFee: 0, // 订单最终支付金额
+			surplusMoney: 0.0, // 显示勾选后的剩余抵扣
+			userMoney: 0.0, // 显示可使用余额
+			deductMoney: 0.0, // 显示已使用的余额
+			isRequest: false, // 是否加载完成渲染子组件
+			isFreight: false, // 是否加载完成渲染子组件
+			isAddress: false, // 是否加载完成地址
+			isExchangePopup: false, // 控制兑换优惠券弹窗
+			isfreightTip: false, // 控制邮费弹窗
+			ischecked: false, // 是否勾选余额
+			hanldFreePostFlag: '', // 邮费状态
+			hanldFreight: '', // 邮费
+			addressData: {}, // 初始化地址信息
+			goodsData: [], // 初始化商品信息
+			couponList: [], // 初始化优惠券信息
+			invoiceData: { type: 0 }, // 初始化发票信息
+			freightData: {}, // 邮费数据
+			orderInfo: [], // 提交的商品信息
+			rechargeGoods: null, // 判断订单里有定金商品或者充值商品时,余额抵扣部分不显示
+			freightBeansMoney: 0, // 存储采美豆抵扣金额
+			isCouponShow: false, // 是否显示可选优惠券
+			isCheckedBeans: false, // 是否抵扣采美豆
+			isCouponModel: false, // 兑换优惠券成功提示
+			ExchangeCouponData: {}, // 兑换优惠券信息
+			contentModalText: '采购金额过小,将扣除500采美豆,建议您前往采美旗下“颜选美学”小程序购买小额商品。', //操作文字提示语句
 			modalButton: [
 				{
 					text: '前往颜选美学',
@@ -285,44 +291,47 @@ export default {
 				}
 			],
 			showModal: false,
-			showModalstauts:0,
-               returnGoodsStutas: false,
-               helpContent: '',
-               agreementActive: false,
-               agreementModel: false,
-               agreementModelButtons: [{
-                   text: '确定',
-                   customStyle: {
-                       color: '#fff',
-                       bgColor: 'linear-gradient(90deg, #F28F31 0%, #FF5B00 100%)'
-                   },
-                   plain: false
-               }]
+			showModalstauts: 0,
+			returnGoodsStutas: false,
+			helpContent: '',
+			agreementActive: false,
+			agreementModel: false,
+			agreementModelButtons: [
+				{
+					text: '确定',
+					customStyle: {
+						color: '#fff',
+						bgColor: 'linear-gradient(90deg, #F28F31 0%, #FF5B00 100%)'
+					},
+					plain: false
+				}
+			]
 		}
 	},
-	onLoad(option){//商品数据
+	onLoad(option) {
+		//商品数据
 		this.initStorage(option)
 	},
-	filters:{
-		NumFormat(value) {//处理金额
+	filters: {
+		NumFormat(value) {
+			//处理金额
 			return Number(value).toFixed(2)
-		},
+		}
 	},
 	methods: {
-           onAgreementChange(val){
-               this.agreementActive = val
-           },
-		async initStorage(option){
+		onAgreementChange(val) {
+			this.agreementActive = val
+		},
+		async initStorage(option) {
 			const data = JSON.parse(option.data)
 			const userInfo = await this.$api.getStorage()
-			console.log('data',data)
-			this.productParam.userId =
-			this.cartParam.userId =
-			this.supportParm.userId =
-			this.postageParam.userId = userInfo.userId ? userInfo.userId : 0
+			console.log('data', data)
+			this.productParam.userId = this.cartParam.userId = this.supportParm.userId = this.postageParam.userId = userInfo.userId
+				? userInfo.userId
+				: 0
 			this.confirmParam.clubId = userInfo.clubId ? userInfo.clubId : 0
-			switch(option.type){
-				case '1':// 商品详情立即购买
+			switch (option.type) {
+				case '1': // 商品详情立即购买
 					this.confirmParam.cartType = 2
 					this.productParam.productCount = data.data.productCount
 					this.productParam.productId = data.data.productIds
@@ -330,44 +339,52 @@ export default {
 					this.productIds = data.data.productIds
 					this.GetProductCreateOrderInfo()
 					break
-				case '2':// 购物车结算
+				case '2': // 购物车结算
 					this.confirmParam.cartType = 1
 					this.confirmType = 2
+					
 					this.cartParam.skuIds = data.data.skuIds
 					this.CartCreateOrderInfo()
 					break
-				case '3':// 组合商品立即购买
+				case '3': // 组合商品立即购买
 					this.confirmParam.cartType = 2
 					this.confirmType = 2
 					this.supportParm.productInfo = JSON.stringify(data.data)
 					this.GetOrderClubProductSupporting()
 			}
 		},
-		GetProductCreateOrderInfo(){// 商品立即购买确认订单数据初始化
-			this.OrderService.ProductCreateOrderInfo(this.productParam).then(response =>{
-				this.setCreatDataInfo(response.data)
-			})
-			.catch(error =>{
-				this.$util.msg(error.msg,2000)
-			})
+		GetProductCreateOrderInfo() {
+			// 商品立即购买确认订单数据初始化
+			this.OrderService.ProductCreateOrderInfo(this.productParam)
+				.then(response => {
+					this.setCreatDataInfo(response.data)
+				})
+				.catch(error => {
+					this.$util.msg(error.msg, 2000)
+				})
 		},
-		GetOrderClubProductSupporting(){// 组合商品立即购买确认订单数据初始化
-			this.OrderService.OrderClubProductSupporting(this.supportParm).then(response =>{
-				this.setCreatDataInfo(response.data)
-			})
-			.catch(error =>{
-				this.$util.msg(error.msg,2000)
-			})
+		GetOrderClubProductSupporting() {
+			// 组合商品立即购买确认订单数据初始化
+			this.OrderService.OrderClubProductSupporting(this.supportParm)
+				.then(response => {
+					this.setCreatDataInfo(response.data)
+				})
+				.catch(error => {
+					this.$util.msg(error.msg, 2000)
+				})
 		},
-		CartCreateOrderInfo(){// 购物车去结算确认订单数据初始化
-			this.OrderService.CartCreateOrderInfo(this.cartParam).then(response =>{
-				this.setCreatDataInfo(response.data)
-			})
-			.catch(error =>{
-				this.$util.msg(error.msg,2000)
-			})
+		CartCreateOrderInfo() {
+			// 购物车去结算确认订单数据初始化
+			this.OrderService.CartCreateOrderInfo(this.cartParam)
+				.then(response => {
+					this.setCreatDataInfo(response.data)
+				})
+				.catch(error => {
+					this.$util.msg(error.msg, 2000)
+				})
 		},
-		setCreatDataInfo(data){// 公共初始化数据
+		setCreatDataInfo(data) {
+			// 公共初始化数据
 			this.isRequest = true
 			this.goodsData = data.list
 			this.couponList = data.couponList
@@ -376,7 +393,7 @@ export default {
 			this.totalCount = data.totalCount
 			this.allPrice = data.totalPrice
 			this.rechargeGoods = data.rechargeGoods
-			if(this.couponList.length>0){
+			if (this.couponList.length > 0) {
 				this.isCouponShow = true
 				this.couponAmount = data.couponList[0].couponAmount
 				this.confirmParam.clubCouponId = data.couponList[0].clubCouponId
@@ -384,16 +401,16 @@ export default {
 			this.orderShouldPayFee = this.allPrice - this.couponAmount
 			this.totalDiscountAmount = this.reducedPrice + this.couponAmount
 			this.postageParam.skuIds = this.getProductIds(data.list)
-               // 特殊商品退货须知
-               this.returnGoodsStutas = data.returnGoodsStutas && data.returnGoodsStutas === 2 // 1:可以 2:不可以
-               this.helpContent = data.helpContent
+			// 特殊商品退货须知
+			this.returnGoodsStutas = data.returnGoodsStutas && data.returnGoodsStutas === 2 // 1:可以 2:不可以
+			this.helpContent = data.helpContent
 			this.getAddressData()
 		},
 		// 获取订单SKUId列表
-		getProductIds(list){
+		getProductIds(list) {
 			const skuId = []
-			list.forEach(function(supplier){
-				supplier.cartList.forEach(function(product){
+			list.forEach(function(supplier) {
+				supplier.cartList.forEach(function(product) {
 					skuId.push(product.skuId)
 				})
 			})
@@ -401,28 +418,29 @@ export default {
 			return skuId.join(',')
 		},
 
-		getFreightData(){// 获取邮费信息
+		getFreightData() {
+			// 获取邮费信息
 			this.isFreight = false
-			this.OrderService.GetOrderPostage(this.postageParam).then(response =>{
+			this.OrderService.GetOrderPostage(this.postageParam).then(response => {
 				const data = response.data
 				this.isFreight = true
 				this.isCheckedBeans = false
 				this.freightData = data
 				this.hanldFreePostFlag = data.postageFlag
 				this.hanldFreight = data.postage
-				if(this.hanldFreePostFlag == 1){
-					if( this.freightData.userBeans > 0 ){
+				if (this.hanldFreePostFlag == 1) {
+					if (this.freightData.userBeans > 0) {
 						this.freightBeansMoney = this.hanldFreight
-					}else{
+					} else {
 						this.freightBeansMoney = 0
 					}
 					this.orderShouldPayFee = this.allPrice + data.postage
 					this.attributePallPrice()
 					this.hanldFreightBeans(this.isCheckedBeans)
-				}else{
-					if( this.freightData.userBeans > 0 ){
+				} else {
+					if (this.freightData.userBeans > 0) {
 						this.freightBeansMoney = 30
-					}else{
+					} else {
 						this.freightBeansMoney = 0
 					}
 					this.orderShouldPayFee = this.allPrice
@@ -431,42 +449,44 @@ export default {
 				}
 			})
 		},
-		async getAddressData(){//获取地址信息
+		async getAddressData() {
+			//获取地址信息
 			const userInfo = await this.$api.getStorage()
-			this.UserService.QueryAddressList(
-				{
-					pageNum:1,
-					pageSize:1,
-					userId:userInfo.userId,
-				}
-			).then(response =>{
+			this.UserService.QueryAddressList({
+				pageNum: 1,
+				pageSize: 1,
+				userId: userInfo.userId
+			}).then(response => {
 				let data = response.data
 				this.isAddress = true
 				this.addressData = {}
-				if( data.list && data.list.length > 0 ){
+				if (data.list && data.list.length > 0) {
 					this.confirmParam.addressId = data.list[0].addressId
 					this.postageParam.townId = data.list[0].townId
 					this.addressData = data.list[0]
 					this.getFreightData()
-				}else{
+				} else {
 					this.addressData = this.addressData
 				}
 			})
 		},
-		handChangeInputGoodsList(data){//对应供应商的留言信息
+		handChangeInputGoodsList(data) {
+			//对应供应商的留言信息
 			this.goodsData = data
 		},
-		handleChoiceaInvoiceData(data){//获取发票信息
+		handleChoiceaInvoiceData(data) {
+			//获取发票信息
 			this.confirmParam.orderInvoice = data
 		},
-		hanldFreightFn(data){//显示邮费弹窗
-			console.log('邮费信息',data)
-			switch(data.postageFlag){
+		hanldFreightFn(data) {
+			//显示邮费弹窗
+			console.log('邮费信息', data)
+			switch (data.postageFlag) {
 				case 1:
 					this.hanldFreight = this.freightData.postage
 					this.hanldFreePostFlag = data.postageFlag
 					this.freightBeansMoney = data.freightBeansMoney
-					this.orderShouldPayFee =this.allPrice + this.hanldFreight
+					this.orderShouldPayFee = this.allPrice + this.hanldFreight
 					this.attributePallPrice()
 					this.hanldFreightBeans(this.isCheckedBeans)
 					break
@@ -480,158 +500,181 @@ export default {
 					break
 			}
 		},
-		hanldFreightBeans(data){//是否勾选采美豆抵扣
+		hanldFreightBeans(data) {
+			//是否勾选采美豆抵扣
 			this.isCheckedBeans = data
 			console.log(this.confirmParam.payInfo)
-			if(this.isCheckedBeans){
+			if (this.isCheckedBeans) {
 				// 判断如果采美豆大于等于运费*100
-				if( this.freightData.userBeans > 0 ){
-					this.confirmParam.payInfo.userBeans = this.freightBeansMoney*100
-				}else{
+				if (this.freightData.userBeans > 0) {
+					this.confirmParam.payInfo.userBeans = this.freightBeansMoney * 100
+				} else {
 					this.confirmParam.payInfo.userBeans = 0
 				}
 				// 计算抵扣后的总价
-				if(this.hanldFreePostFlag == 1){
+				if (this.hanldFreePostFlag == 1) {
 					// 如果使用了余额 最终价格
-					if(this.ischecked){
+					if (this.ischecked) {
 						let totalAmount = this.allPrice - this.couponAmount
-						if(this.userMoney >= totalAmount){
-							this.orderShouldPayFee = 0.00
-							this.deductMoney = this.allPrice - this.couponAmount		// 当前使用金额等于订单金额
-							this.surplusMoney = this.userMoney - this.deductMoney	    // 剩余金额等于余额-当前使用金额
-						}else{
+						if (this.userMoney >= totalAmount) {
+							this.orderShouldPayFee = 0.0
+							this.deductMoney = this.allPrice - this.couponAmount // 当前使用金额等于订单金额
+							this.surplusMoney = this.userMoney - this.deductMoney // 剩余金额等于余额-当前使用金额
+						} else {
 							this.orderShouldPayFee = this.allPrice - this.userMoney - this.couponAmount // 订单最终支付金额等于订单金额-账户余额
-							this.deductMoney = this.userMoney				            // 当前使用金额等于总余额
-							this.surplusMoney = this.userMoney - this.deductMoney	    // 剩余余额等于总余额-当前使用金额
+							this.deductMoney = this.userMoney // 当前使用金额等于总余额
+							this.surplusMoney = this.userMoney - this.deductMoney // 剩余余额等于总余额-当前使用金额
 						}
-					}else{
-						this.orderShouldPayFee = this.allPrice + this.hanldFreight - this.freightBeansMoney - this.couponAmount
+					} else {
+						this.orderShouldPayFee =
+							this.allPrice + this.hanldFreight - this.freightBeansMoney - this.couponAmount
 					}
-					console.log('抵扣',this.orderShouldPayFee)
+					console.log('抵扣', this.orderShouldPayFee)
 				}
-			}else{// 采美豆不抵扣运费
+			} else {
+				// 采美豆不抵扣运费
 				this.confirmParam.payInfo.userBeans = 0
 				// 不抵扣时计算总价
-				if(this.hanldFreePostFlag == 1){
+				if (this.hanldFreePostFlag == 1) {
 					this.attributeHashfreight(this.hanldFreight)
 				}
 			}
 		},
-		handleChoiceaCouponData(data){// 勾选使用优惠券
-			console.log('优惠券信息',data)
+		handleChoiceaCouponData(data) {
+			// 勾选使用优惠券
+			console.log('优惠券信息', data)
 			this.couponAmount = data.couponAmount
 			this.totalDiscountAmount = this.reducedPrice + this.couponAmount
 			this.confirmParam.clubCouponId = data.clubCouponId
 			this.attributePallPrice()
 			this.hanldFreightBeans(this.isCheckedBeans)
 		},
-		checkedBalabce(){//勾选使用余额
-			if(this.userMoney > 0){
+		checkedBalabce() {
+			//勾选使用余额
+			if (this.userMoney > 0) {
 				this.ischecked = !this.ischecked
-				if(this.ischecked){
+				if (this.ischecked) {
 					this.confirmParam.payInfo.balancePayFlag = 1
 					this.attributePallPrice()
-				}else{
+				} else {
 					this.confirmParam.payInfo.balancePayFlag = 0
-					if(this.hanldFreePostFlag == 1 || this.hanldFreePostFlag == '1'){ //如果是有运费时
-						if(this.isCheckedBeans){
-							this.orderShouldPayFee =  this.allPrice - this.couponAmount
-						}else{
-							this.orderShouldPayFee = this.allPrice+parseInt(this.freightData.postage) - this.couponAmount
+					if (this.hanldFreePostFlag == 1 || this.hanldFreePostFlag == '1') {
+						//如果是有运费时
+						if (this.isCheckedBeans) {
+							this.orderShouldPayFee = this.allPrice - this.couponAmount
+						} else {
+							this.orderShouldPayFee =
+								this.allPrice + parseInt(this.freightData.postage) - this.couponAmount
 						}
-					}else{
+					} else {
 						this.orderShouldPayFee = this.allPrice - this.couponAmount
 					}
 				}
-				console.log('最终订单支付金额',this.orderShouldPayFee)
-				console.log('优惠券金额',this.couponAmount)
-			}else{
+				console.log('最终订单支付金额', this.orderShouldPayFee)
+				console.log('优惠券金额', this.couponAmount)
+			} else {
 				return
 			}
 		},
-		attributePallPrice(){// 计算价格
-			if(this.hanldFreePostFlag == 1 || this.hanldFreePostFlag == '1'){
+		attributePallPrice() {
+			// 计算价格
+			if (this.hanldFreePostFlag == 1 || this.hanldFreePostFlag == '1') {
 				this.attributeHashfreight(this.freightData.postage)
-			}else{
+			} else {
 				this.attributeNofreight()
 			}
 		},
-		attributeNofreight(){// 计算没有邮费的支付价格
-			if(this.ischecked){
+		attributeNofreight() {
+			// 计算没有邮费的支付价格
+			if (this.ischecked) {
 				let totalAmount = this.allPrice - this.couponAmount
-				if(this.userMoney >= totalAmount){
-					this.orderShouldPayFee = 0.00
-					this.deductMoney = this.allPrice - this.couponAmount 		// 当前使用金额等于订单金额
-					this.surplusMoney = this.userMoney - this.deductMoney	    // 剩余金额等于余额-当前使用金额
-				}else{
+				if (this.userMoney >= totalAmount) {
+					this.orderShouldPayFee = 0.0
+					this.deductMoney = this.allPrice - this.couponAmount // 当前使用金额等于订单金额
+					this.surplusMoney = this.userMoney - this.deductMoney // 剩余金额等于余额-当前使用金额
+				} else {
 					this.orderShouldPayFee = this.allPrice - this.userMoney - this.couponAmount // 订单最终支付金额等于订单金额-账户余额
-					this.deductMoney = this.userMoney				            // 当前使用金额等于总余额
-					this.surplusMoney = this.userMoney - this.deductMoney	    // 剩余余额等于总余额-当前使用金额
+					this.deductMoney = this.userMoney // 当前使用金额等于总余额
+					this.surplusMoney = this.userMoney - this.deductMoney // 剩余余额等于总余额-当前使用金额
 				}
-			}else{
+			} else {
 				this.orderShouldPayFee = this.allPrice - this.couponAmount
-				this.deductMoney = 0.00 // 当前使用
+				this.deductMoney = 0.0 // 当前使用
 				this.surplusMoney = this.userMoney // 剩余余额
 			}
-			console.log('最终订单支付金额',this.orderShouldPayFee)
-			console.log('优惠券金额',this.couponAmount)
+			console.log('最终订单支付金额', this.orderShouldPayFee)
+			console.log('优惠券金额', this.couponAmount)
 		},
-		attributeHashfreight(postage){// 计算需要邮费的支付价格
+		attributeHashfreight(postage) {
+			// 计算需要邮费的支付价格
 			console.log()
-			let totalAmount = this.allPrice + parseInt(postage) - this.couponAmount//计算不包邮的价格 总价等于商品价格+邮费
-			if(this.ischecked){
-				if(this.userMoney >= totalAmount){// 全部抵扣
-					this.orderShouldPayFee =0.00
-					if(this.isCheckedBeans){// 抵扣运费了
-						this.deductMoney =  this.allPrice - this.couponAmount			// 当前使用金额等于订单金额
-						this.surplusMoney = this.userMoney - this.deductMoney	    	// 剩余金额等于余额减去当前使用金额
-					}else{
-						this.deductMoney = this.allPrice + parseInt(postage)- this.couponAmount	// 当前使用金额等于订单金额+运费金额
-						this.surplusMoney = this.userMoney - this.deductMoney	    	// 剩余余额等于总余额-当前使用金额
+			let totalAmount = this.allPrice + parseInt(postage) - this.couponAmount //计算不包邮的价格 总价等于商品价格+邮费
+			if (this.ischecked) {
+				if (this.userMoney >= totalAmount) {
+					// 全部抵扣
+					this.orderShouldPayFee = 0.0
+					if (this.isCheckedBeans) {
+						// 抵扣运费了
+						this.deductMoney = this.allPrice - this.couponAmount // 当前使用金额等于订单金额
+						this.surplusMoney = this.userMoney - this.deductMoney // 剩余金额等于余额减去当前使用金额
+					} else {
+						this.deductMoney = this.allPrice + parseInt(postage) - this.couponAmount // 当前使用金额等于订单金额+运费金额
+						this.surplusMoney = this.userMoney - this.deductMoney // 剩余余额等于总余额-当前使用金额
 					}
-				}else{// 部分抵扣
-					if(this.isCheckedBeans){// 抵扣运费了
+				} else {
+					// 部分抵扣
+					if (this.isCheckedBeans) {
+						// 抵扣运费了
 						this.orderShouldPayFee = this.allPrice - this.userMoney - this.couponAmount // 订单最终支付金额等于总订单金额-账户余额-优惠券金额
-						this.deductMoney = this.userMoney				            		// 当前使用金额等于账户余额
-						this.surplusMoney = this.userMoney - this.deductMoney	    		// 剩余余额等于账户余额-当前使用金额
-					}else{
-						this.orderShouldPayFee = this.allPrice + parseInt(postage) - this.userMoney - this.couponAmount//订单支付金额等于订单金额+运费-账户余额-优惠券
-						this.deductMoney = this.userMoney				            		// 当前使用金额等于账户余额
-						this.surplusMoney = this.userMoney - this.deductMoney	    		// 剩余余额等于账户余额-当前使用金额
+						this.deductMoney = this.userMoney // 当前使用金额等于账户余额
+						this.surplusMoney = this.userMoney - this.deductMoney // 剩余余额等于账户余额-当前使用金额
+					} else {
+						this.orderShouldPayFee = this.allPrice + parseInt(postage) - this.userMoney - this.couponAmount //订单支付金额等于订单金额+运费-账户余额-优惠券
+						this.deductMoney = this.userMoney // 当前使用金额等于账户余额
+						this.surplusMoney = this.userMoney - this.deductMoney // 剩余余额等于账户余额-当前使用金额
 					}
 				}
-			}else{
+			} else {
 				this.orderShouldPayFee = this.allPrice + parseInt(postage) - this.couponAmount
-				this.deductMoney = 0.00 // 当前使用金额
+				this.deductMoney = 0.0 // 当前使用金额
 				this.surplusMoney = this.userMoney // 剩余余额
 			}
-			console.log('最终订单支付金额',this.orderShouldPayFee)
-			console.log('优惠券金额',this.couponAmount)
+			console.log('最终订单支付金额', this.orderShouldPayFee)
+			console.log('优惠券金额', this.couponAmount)
 		},
-		orderSubmitMit(){// 提交订单按钮点击事件
-		   if(this.returnGoodsStutas && !this.agreementActive){
-                   this.agreementModel = true
-		   }else{
+		orderSubmitMit() {
+			// 提交订单按钮点击事件
+			if (this.returnGoodsStutas && !this.agreementActive) {
+				this.agreementModel = true
+			} else {
 				this.handleClickOrderSubmitMit()
 			}
 		},
-		handleClickOrderSubmitMit(){// 提交订单
-			if(this.isSubLoading){ return }
-			if(this.confirmParam.addressId == ''){
-				this.$util.msg('请先添加收货地址~',2000)
+		handleClickOrderSubmitMit() {
+			// 提交订单
+			if (this.isSubLoading) {
+				return
+			}
+			if (this.confirmParam.addressId == '') {
+				this.$util.msg('请先添加收货地址~', 2000)
 				return
 			}
 			this.confirmParam.orderInfo = this.goodsData.map(el => {
 				let productInfo = []
 				el.cartList.forEach(pros => {
 					productInfo.push({
-						skuId:pros.skuId,
-						productNum:pros.number,
-						presentNum:0,
-						productType:pros.giftType
+						skuId: pros.skuId,
+						productNum: pros.number,
+						presentNum: 0,
+						productType: pros.giftType
 					})
 				})
-				return {splitCode:el.splitCode,shopId:el.shopId,note:el.note?el.note:'',productInfo:productInfo}
+				return {
+					splitCode: el.splitCode,
+					shopId: el.shopId,
+					note: el.note ? el.note : '',
+					productInfo: productInfo
+				}
 			})
 			this.confirmParam.payInfo.postage = parseInt(this.hanldFreight).toFixed(2)
 			this.confirmParam.payInfo.postageFlag = parseInt(this.hanldFreePostFlag)
@@ -643,148 +686,181 @@ export default {
 			this.isSubLoading = true
 			this.hanldeOrderSubmit(this.confirmParam)
 		},
-		hanldeOrderSubmit(params){// 提交订单
-			this.OrderService.CreatedOrderSubmit(params).then(response =>{
-				let data = response.data
-				// 友盟埋点收集机构自主提交订单
-				if(process.env.NODE_ENV != 'development'){
-					this.$uma.trackEvent('Um_Event_ConfirmOrder', {
-						Um_Key_PageName: '机构提交订单',
-						Um_Key_SourcePage: '确认订单',
-						Um_Key_OrderID:`${data.orderId}`
-					})
-				}
-				if(data.code === 1){
-					this.submitState ='success'
-					setTimeout(()=>{
-						this.isSubLoading = false
-					},2000)
-					this.$api.redirectTo(`/pages/user/order/success?data=${JSON.stringify({data:{orderId:data.orderId}})}`)
-				}else{
-					this.submitState ='confirm'
-					this.$util.msg('订单提交成功',2000,true,'success')
-					setTimeout(()=>{
-						this.isSubLoading = false
-						if(data.onlinePayFlag === 1){
-							this.$api.redirectTo(`/pages/user/order/order-payunder?orderId=${data.orderId}`)
-						}else{
-							this.$api.redirectTo(`/pages/user/order/order-pay-list?orderId=${data.orderId}`)
-						}
-					},2000)
-				}
-			}).catch(error =>{
-				this.isSubLoading = false
-				this.handleError(error)
-			})
+		hanldeOrderSubmit(params) {
+			// 提交订单
+			this.OrderService.CreatedOrderSubmit(params)
+				.then(response => {
+					let data = response.data
+					// 友盟埋点收集机构自主提交订单
+					if (process.env.NODE_ENV != 'development') {
+						this.$uma.trackEvent('Um_Event_ConfirmOrder', {
+							Um_Key_PageName: '机构提交订单',
+							Um_Key_SourcePage: '确认订单',
+							Um_Key_OrderID: `${data.orderId}`
+						})
+					}
+					if (data.code === 1) {
+						this.submitState = 'success'
+						setTimeout(() => {
+							this.isSubLoading = false
+						}, 2000)
+						this.$api.redirectTo(
+							`/pages/user/order/success?data=${JSON.stringify({ data: { orderId: data.orderId } })}`
+						)
+					} else {
+						this.submitState = 'confirm'
+						this.$util.msg('订单提交成功', 2000, true, 'success')
+						setTimeout(() => {
+							this.isSubLoading = false
+							if (data.onlinePayFlag === 1) {
+								this.$api.redirectTo(`/pages/user/order/order-payunder?orderId=${data.orderId}`)
+							} else {
+								this.$api.redirectTo(`/pages/user/order/order-pay-list?orderId=${data.orderId}`)
+							}
+						}, 2000)
+					}
+				})
+				.catch(error => {
+					this.isSubLoading = false
+					this.handleError(error)
+				})
 		},
-		handleError(data){// 提交订单异常处理
+		handleError(data) {
+			// 提交订单异常处理
 			const buttonMap = {
-					1:{
-						contentModalText : '您已有2个采购金额过小的订单,本次不能再进行采购。建议您前往采美旗下“颜选美学”小程序购买小额商品。',
-						modalButton : [
-							{ text: '了解', type: 'gray', plain: true },
-							{ text: '前往颜选美学', customStyle: { color: '#fff',bgColor: 'linear-gradient(90deg, #F28F31 0%, #FF5B00 100%)' },plain: false}
-						]
-					},
-					2:{
-						contentModalText :  '采美豆不足,不能提交订单。建议您前往采美旗下“颜选美学”小程序购买小额商品。',
-						modalButton :  [
-							{ text: '了解', type: 'gray', plain: true },
-							{ text: '前往颜选美学', customStyle: { color: '#fff',bgColor: 'linear-gradient(90deg, #F28F31 0%, #FF5B00 100%)' },plain: false}
-						]
-					},
-					3:{
-						contentModalText :  '采购金额过小,将扣除500采美豆,建议您前往采美旗下“颜选美学”小程序购买小额商品。' ,
-						modalButton :  [
-							{ text: '前往颜选美学', type: 'gray', plain: true },
-							{ text: '继续提交', customStyle: { color: '#fff',bgColor: 'linear-gradient(90deg, #F28F31 0%, #FF5B00 100%)' },plain: false}
-						]
-					},
-					4:{
-						contentModalText :  '订单内存在械字号三类商品,需要拥有医疗执业许可证的医美机构才能购买。建议升级医美机构后再下单,否则会导致订单退款或影响发货。',
-						modalButton :  [
-							{ text: '继续提交',  type: 'gray', plain: true },
-							{ text: '去升级', customStyle: { color: '#fff', bgColor: 'linear-gradient(90deg, #F28F31 0%, #FF5B00 100%)' },plain: false }
-						]
-					}
+				1: {
+					contentModalText:
+						'您已有2个采购金额过小的订单,本次不能再进行采购。建议您前往采美旗下“颜选美学”小程序购买小额商品。',
+					modalButton: [
+						{ text: '了解', type: 'gray', plain: true },
+						{
+							text: '前往颜选美学',
+							customStyle: { color: '#fff', bgColor: 'linear-gradient(90deg, #F28F31 0%, #FF5B00 100%)' },
+							plain: false
+						}
+					]
+				},
+				2: {
+					contentModalText: '采美豆不足,不能提交订单。建议您前往采美旗下“颜选美学”小程序购买小额商品。',
+					modalButton: [
+						{ text: '了解', type: 'gray', plain: true },
+						{
+							text: '前往颜选美学',
+							customStyle: { color: '#fff', bgColor: 'linear-gradient(90deg, #F28F31 0%, #FF5B00 100%)' },
+							plain: false
+						}
+					]
+				},
+				3: {
+					contentModalText: '采购金额过小,将扣除500采美豆,建议您前往采美旗下“颜选美学”小程序购买小额商品。',
+					modalButton: [
+						{ text: '前往颜选美学', type: 'gray', plain: true },
+						{
+							text: '继续提交',
+							customStyle: { color: '#fff', bgColor: 'linear-gradient(90deg, #F28F31 0%, #FF5B00 100%)' },
+							plain: false
+						}
+					]
+				},
+				4: {
+					contentModalText:
+						'订单内存在械字号三类商品,需要拥有医疗执业许可证的医美机构才能购买。建议升级医美机构后再下单,否则会导致订单退款或影响发货。',
+					modalButton: [
+						{ text: '继续提交', type: 'gray', plain: true },
+						{
+							text: '去升级',
+							customStyle: { color: '#fff', bgColor: 'linear-gradient(90deg, #F28F31 0%, #FF5B00 100%)' },
+							plain: false
+						}
+					]
+				}
 			}
-			if(data.code === -3){// 已提交2个小于1000元的订单提示
+			if (data.code === -3) {
+				// 已提交2个小于1000元的订单提示
 				this.showModal = true
 				this.showModalstauts = 3
 				this.contentModalText = buttonMap[1].contentModalText
-				this.modalButton= buttonMap[1].modalButton
+				this.modalButton = buttonMap[1].modalButton
 				this.formatConfirmParam()
-			}else if(data.code === -4){// 采美豆为负数
+			} else if (data.code === -4) {
+				// 采美豆为负数
 				this.showModal = true
 				this.showModalstauts = 3
 				this.contentModalText = buttonMap[2].contentModalText
-				this.modalButton= buttonMap[2].modalButton
+				this.modalButton = buttonMap[2].modalButton
 				this.formatConfirmParam()
-			}else if(data.code === -5){// 订单总金额低于500
+			} else if (data.code === -5) {
+				// 订单总金额低于500
 				this.showModal = true
 				this.showModalstauts = 1
 				this.contentModalText = buttonMap[3].contentModalText
-				this.modalButton= buttonMap[3].modalButton
+				this.modalButton = buttonMap[3].modalButton
 				this.formatConfirmParam()
-			}else if(data.code === -6){// 非医美机构下三类商品订单
+			} else if (data.code === -6) {
+				// 非医美机构下三类商品订单
 				this.showModal = true
 				this.showModalstauts = 2
 				this.contentModalText = buttonMap[4].contentModalText
-				this.modalButton= buttonMap[4].modalButton
+				this.modalButton = buttonMap[4].modalButton
 				this.formatConfirmParam()
-			}else{
-				this.$util.msg(data.msg,3000)
+			} else {
+				this.$util.msg(data.msg, 3000)
 			}
 		},
-		formatConfirmParam(){// 还原提交订单参数格式
+		formatConfirmParam() {
+			// 还原提交订单参数格式
 			this.confirmParam.payInfo = JSON.parse(this.confirmParam.payInfo)
 			this.confirmParam.orderInfo = JSON.parse(this.confirmParam.orderInfo)
 			this.confirmParam.orderInvoice = JSON.parse(this.confirmParam.orderInvoice)
 		},
-		handFreightAlertShow(){//显示邮费弹窗
+		handFreightAlertShow() {
+			//显示邮费弹窗
 			this.isfreightTip = true
 		},
-		handleClickCancel(){// 关闭优惠券弹窗
+		handleClickCancel() {
+			// 关闭优惠券弹窗
 			this.isCouponModel = false
-			if(this.confirmType == 1){
+			if (this.confirmType == 1) {
 				this.GetProductCreateOrderInfo()
-			}else{
+			} else {
 				this.CartCreateOrderInfo()
 			}
 		},
-		handleClick(e){// 采购量过小提示弹窗
+		handleClick(e) {
+			// 采购量过小提示弹窗
 			if (e.index === 1) {
-				if( this.showModalstauts === 1){
+				if (this.showModalstauts === 1) {
 					this.showModal = false
 					this.confirmParam.orderMiniType = 1
 					this.handleClickOrderSubmitMit()
-				}else if(this.showModalstauts === 2){
+				} else if (this.showModalstauts === 2) {
 					this.showModal = false
 					this.isSubLoading = false
 					this.$api.navigateTo('/pages/login/apply')
-				}else{
+				} else {
 					this.showModal = false
 					this.handleClickHeHeMiniApplet()
 				}
-			}else{
-				if( this.showModalstauts == 1 ){
+			} else {
+				if (this.showModalstauts == 1) {
 					this.showModal = false
 					this.handleClickHeHeMiniApplet()
-				}else if(this.showModalstauts === 2){
+				} else if (this.showModalstauts === 2) {
 					this.showModal = false
 					this.confirmParam.orderMiniType = 2
 					this.handleClickOrderSubmitMit()
-				}else{
+				} else {
 					this.showModal = false
 				}
 			}
 		},
-		handleClickHeHeMiniApplet(){ // 跳转颜选美学小程序
+		handleClickHeHeMiniApplet() {
+			// 跳转颜选美学小程序
 			uni.navigateToMiniProgram({
 				appId: 'wx2c3b0a7f343235b1',
 				path: '/pages/tabBar/index/index',
 				extraData: {
-					'data1': 'test'
+					data1: 'test'
 				},
 				envVersion: 'develop',
 				success(res) {
@@ -793,21 +869,22 @@ export default {
 				}
 			})
 		},
-		hideFreight(){//关闭邮费弹窗
+		hideFreight() {
+			//关闭邮费弹窗
 			this.isfreightTip = false
-		},
+		}
 	},
 	onShow() {
 		let pages = getCurrentPages()
-		let currPage = pages[pages.length-1]
-		if(currPage.data.select =='select'){
+		let currPage = pages[pages.length - 1]
+		if (currPage.data.select == 'select') {
 			this.isAddress = true
 			let SelectData = uni.getStorageSync('selectAddress')
 			this.confirmParam.addressId = SelectData.addressId
 			this.postageParam.townId = SelectData.townId
 			this.addressData = SelectData
 			this.getFreightData()
-		}else{
+		} else {
 			this.getAddressData()
 		}
 	}

+ 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}`,)
 						}
 					}
 				})

+ 187 - 0
pages/user/pay/card-add.vue

@@ -0,0 +1,187 @@
+<template>
+	<view class="container card clearfix">
+		<view class="card-title">输入卡号添加</view>
+		<view class="card-mains">
+			<view class="card-form">
+				<input
+					class="card-input"
+					v-model="showCardNumber"
+					@input="handleInput"
+					type="number"
+					:maxlength="maxLen"
+					placeholder="请输入本人的银行卡号"
+				/>
+				<view class="card-clear" v-if="!disabled" @click="handleClearInput"
+					><text class="iconfont icon-shanchu1"></text
+				></view>
+			</view>
+		</view>
+		<view class="card-mains-text" @click="handleGoSusList">查看支持银行 ></view>
+		<view class="card-mains-btn">
+			<button class="add-btn" :disabled="disabled" :class="[disabled ? 'disabled' : '']" @click="handleAddCard">
+				提交卡号
+			</button>
+		</view>
+	</view>
+</template>
+<script>
+export default {
+	data() {
+		return {
+			params: {
+				clubId: 0,
+				cardNumber: ''
+			},
+			showCardNumber: '',
+			maxLen:30,
+			subType: 2, // 1直接绑卡  2//首次绑卡并支付 3//确认支付
+		}
+	},
+	onLoad() {
+		// this.GetAccountInitData()
+	},
+	filters: {},
+	computed: {
+		disabled: function() {
+			if (this.params.cardNumber.length > 12) {
+				return false
+			} else {
+				return true
+			}
+		}
+	},
+	methods: {
+		handleAddCard() {
+			//提交卡号
+		},
+		handleClearInput() {
+			//清空银行卡
+			this.params.cardNumber = this.showCardNumber = ''
+		},
+		handleInput(e) {
+			this.params.cardNumber = e.detail.value
+			this.showCardNumber = this.formatAccNo(e.detail.value)
+		},
+		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-title {
+	width: 100%;
+	height: 100rpx;
+	line-height: 100rpx;
+	font-size: $font-size-32;
+	color: #333;
+	font-weight: bold;
+	box-sizing: border-box;
+	padding: 0 32rpx;
+}
+.card-mains {
+	width: 100%;
+	height: 100rpx;
+	box-sizing: border-box;
+	padding: 0 50rpx 0 32rpx;
+	.card-form {
+		width: 100%;
+		height: 100%;
+		box-sizing: border-box;
+		border: 1px solid #cccccc;
+		padding-right: 96rpx;
+		border-radius: 16rpx;
+		position: relative;
+		.card-input {
+			width: 568rpx;
+			height: 100%;
+			line-height: 96rpx;
+			padding-left: 20rpx;
+			box-sizing: border-box;
+			font-size: $font-size-30;
+			color: #333;
+		}
+		.card-clear {
+			width: 96rpx;
+			height: 96rpx;
+			position: absolute;
+			right: 0;
+			top: 0;
+			line-height: 96rpx;
+			text-align: center;
+			.icon-shanchu1 {
+				font-size: $font-size-32;
+				color: #d5d5d5;
+			}
+		}
+	}
+}
+.card-mains-text {
+	width: 100%;
+	line-height: 88rpx;
+	box-sizing: border-box;
+	padding: 0 56rpx;
+	font-size: $font-size-28;
+	color: #1890f9;
+}
+.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>

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

@@ -0,0 +1,296 @@
+<template>
+	<view class="container card clearfix">
+		<tui-skeleton
+			v-if="skeletonShow"
+			backgroundColor="#fafafa"
+			borderRadius="10rpx"
+			:isLoading="true"
+			:loadingType="5"
+		></tui-skeleton>
+		<template v-else>
+			<view class="card-content">
+				<view class="card-title" v-if="subType === 2 || subType === 3">
+					<view class="card-pay-text">¥{{ payAmount }}</view>
+				</view>
+				<view class="card-mains">
+					<view class="card-form-text">已发送至手机号 {{ phoneNumbe }}</view>
+					<view class="card-form">
+						<input
+							class="card-input"
+							v-model="codeParams.bindCode"
+							@input="handleInput"
+							type="number"
+							maxlength="6"
+							placeholder="请输入短信验证码"
+						/>
+						<view
+							class="card-form-code"
+							:class="isMobileDisabled ? 'disabled' : ''"
+							@click.stop="handleMobileCode"
+						>
+							<text>{{ mobileCodeText }}</text>
+						</view>
+					</view>
+				</view>
+				<view class="card-mains-btn">
+					<button
+						class="add-btn"
+						:disabled="disabled"
+						:class="[disabled ? 'disabled' : '']"
+						@click="handleAddCard"
+					>
+						{{ suBbtnText }}
+					</button>
+				</view>
+			</view>
+		</template>
+	</view>
+</template>
+<script>
+export default {
+	data() {
+		return {
+			orderId: 0,
+			params: {},
+			payAmount: '',
+			subType: 1, // 1直接绑卡  2//首次绑卡并支付 3//确认支付
+			isMobileDisabled: true, //手机验证码按钮控制
+			mobilCount: '', //倒计时
+			mobileCodeText: '重新发送',
+			mobilTime: null,
+			codeParams: {
+				orderId: '',
+				infoId: '',
+				bindCode: '',
+				flag: 1 // 1绑卡 2 付款
+			},
+			skeletonShow: true,
+			suBbtnText: '确认绑定'
+		}
+	},
+	onLoad(option) {
+		this.initOption(option)
+	},
+	filters: {},
+	computed: {
+		phoneNumbe() {
+			// 手机号仅显示前三位及后四位数字,隐藏信息用*代替
+			return this.params.quickPayMobile.substr(0, 3) + '****' + this.params.quickPayMobile.substring(7)
+		},
+		disabled() {
+			return !(this.codeParams.bindCode.length > 4)
+		}
+	},
+	methods: {
+		initOption(option) {
+			console.log('option', option)
+			const data = JSON.parse(option.data)
+			this.subType = Number(option.type)
+			this.params = data.params
+			this.codeParams = Object.assign(this.codeParams, data.payData)
+			if (this.subType === 1) {
+				this.codeParams.flag = 1
+			} else {
+				this.codeParams.flag = 2
+				this.orderId = data.orderId
+				this.payAmount = this.params.quickPayFlag === 2 ? data.payAmount : this.params.payAmount
+			}
+			this.handleCodeTime()
+			this.handleBbtnText(this.subType)
+			setTimeout(() => {
+				this.skeletonShow = false
+			}, 500)
+		},
+		handleCodeTime() {
+			// 倒计时
+			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 + '秒后重发'
+					} else {
+						this.isMobileDisabled = false
+						clearInterval(this.mobilTime)
+						this.mobilTime = null
+						this.mobileCodeText = '重新发送'
+					}
+				}, 1000)
+			}
+		},
+		handleBbtnText(value) {
+			const textMap = {
+				1: '确认绑定',
+				2: '确认绑定支付',
+				3: '确认支付'
+			}
+			this.suBbtnText = textMap[value]
+		},
+		async handleAddCard() {
+			//提交绑定或支付
+			try {
+				const loadText = this.subType === 1 ? '绑定中...' : '支付中...'
+				const successMsg = this.subType === 1 ? '绑定成功' : '支付成功'
+				const res = await this.PayService.orderPayQuickBindCode(this.codeParams, loadText)
+				this.$util.msg(successMsg, 2000, true, 'success')
+				setTimeout(() => {
+					this.handleSuccessHref()
+				}, 2000)
+			} catch (error) {
+				console.log(error)
+				this.$util.msg(error.msg, 2000)
+			}
+		},
+		handleSuccessHref() {
+			//  tiaozhuan
+			if (this.subType === 1) {
+				this.$api.navigateBack(2)
+			} else {
+				if (this.params.quickPayFlag === 1) {
+					const linkData = {
+						payAmount: this.params.payAmount,
+						orderId: this.orderId,
+						type: 'success'
+					}
+					this.$api.redirectTo(`/pages/user/order/order-success?data=${JSON.stringify({ data: linkData })}`)
+				} else {
+					this.$api.redirectTo(`/pages/user/member/member`)
+				}
+			}
+		},
+		handleMobileCode() {
+			// 获取短信验证码
+			this.isMobileDisabled = true
+			if (this.subType === 1) {
+				this.orderPayQuickBindCard()
+			} else {
+				this.orderPayQuickPay()
+			}
+		},
+		async orderPayQuickBindCard() {
+			//直只绑卡
+			try {
+				const res = await this.PayService.orderPayQuickBindCard(this.params)
+				this.handleCodeTime()
+			} catch (error) {
+				this.isMobileDisabled = false
+			}
+		},
+		async orderPayQuickPay() {
+			//绑卡并支付
+			try {
+				const res = await this.PayService.orderPayQuickPay(this.params)
+				this.handleCodeTime()
+			} catch (error) {
+				console.log(error)
+				this.isMobileDisabled = false
+			}
+		}
+	},
+	onShow() {
+	}
+}
+</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: #ff5b00;
+		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;
+			&.disabled {
+				color: #999;
+			}
+		}
+	}
+}
+.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>

+ 416 - 0
pages/user/pay/card-comfirm.vue

@@ -0,0 +1,416 @@
+<template>
+	<view class="container card clearfix">
+		<tui-skeleton
+			v-if="skeletonShow"
+			backgroundColor="#fafafa"
+			borderRadius="10rpx"
+			:isLoading="true"
+			:loadingType="5"
+		></tui-skeleton>
+		<template v-else>
+			<view class="card-content">
+				<view class="card-row">
+					<view class="form-label">卡号</view>
+					<view class="form-input">
+						<input
+							class="card-input"
+							v-model="showCardNumber"
+							@input="handleInput"
+							type="number"
+							:maxlength="maxLen"
+							placeholder="请输入本人的银行卡号"
+						/>
+						<view class="card-clear" v-if="!showClear" @click="handleClearInput"
+							><text class="iconfont icon-shanchu1"></text
+						></view>
+					</view>
+				</view>
+				<view class="card-row picker">
+					<view class="form-label">卡类型</view>
+					<view class="form-input">
+						<picker @change="handleBindPicker($event)" :value="index" :range="stateActions" range-key="name">
+							<input
+								class="form-input"
+								type="text"
+								disabled="false"
+								v-model="cardTytpeText"
+								placeholder="请选择"
+							/>
+						</picker>
+					</view>
+					<view class="iconfont icon-xiayibu"></view>
+				</view>
+				<view class="card-row">
+					<view class="form-label">姓名</view>
+					<input
+						class="form-input"
+						type="text"
+						name="input"
+						v-model="params.quickPayUserName"
+						placeholder="请输入您的姓名"
+						maxlength="10"
+					/>
+				</view>
+				<view class="card-row">
+					<view class="form-label">身份证</view>
+					<input
+						class="form-input"
+						type="text"
+						name="input"
+						v-model="params.idCard"
+						placeholder="请输入您的身份证号"
+						maxlength="18"
+					/>
+				</view>
+				<view class="card-row">
+					<view class="form-label">预留手机号</view>
+					<input
+						class="form-input"
+						type="number"
+						name="input"
+						v-model="params.quickPayMobile"
+						placeholder="请输入您的银行预留手机号"
+						maxlength="11"
+					/>
+				</view>
+				<view class="card-row picker" v-if="pickerIndex === 2">
+					<view class="form-label">有效期</view>
+					<view class="form-input">
+						<picker
+							mode="date"
+							fields="month"
+							:value="date"
+							:start="startDate"
+							:end="endDate"
+							@change="handleDateChange($event)"
+						>
+							<input
+								class="form-input"
+								type="text"
+								disabled="false"
+								:class="handleBankExpireTime === '请选择信用卡有效期' ? 'none' : '' "
+								v-model="handleBankExpireTime"
+								placeholder="请选择信用卡有效期"
+							/>
+						</picker>
+					</view>	
+					<view class="iconfont icon-xiayibu"></view>
+				</view>
+				<view class="card-row" v-if="pickerIndex === 2">
+					<view class="form-label">CVV2</view>
+					<input
+						class="form-input"
+						type="text"
+						name="input"
+						v-model="params.cvvCode"
+						placeholder="请输入贷记卡背面的安全码"
+						maxlength="3"
+					/>
+				</view>
+				<view class="card-mains-btn">
+					<button
+						class="add-btn"
+						:disabled="disabled"
+						:class="[disabled ? 'disabled' : '']"
+						@click="handleAddCard"
+					>
+						{{ subButtonText }}
+					</button>
+				</view>
+				<view class="card-mains-text" @click="handleGoSusList">查看支持银行 ></view>
+			</view>
+		</template>		
+	</view>
+</template>
+<script>
+export default {
+	data() {
+		const currentDate = this.getDate({
+		    format: true
+		})
+		return {
+			date: currentDate,
+			skeletonShow:true,
+			pickerIndex: 1,
+			orderId: 0,
+			payAmount: '',
+			params: {
+				userId: 0, //机构UserId
+				quickPayBankNumber: '', //快捷支付用户银行卡号/信用卡号
+				quickPayMobile: '', //快捷支付银行卡绑定手机号
+				quickPayBankExpireTime: '', //快捷支付信用卡过期时间,只包含年月,格式yy-MM
+				quickPayUserName: '', //快捷支付用户姓名
+				idCard: '', //身份证号
+				cvvCode: '' //信用卡安全码
+			},
+			showCardNumber: '',
+			maxLen: 26,
+			subType: 0, // 1直接绑卡  2//首次绑卡并支付 3//确认支付
+			handleBankExpireTime:'请选择信用卡有效期',
+			cardTytpeText: '借记卡',
+			subButtonText: '下一步',
+			stateActions: [{ name: '借记卡', value: 1 }, { name: '贷记卡', value: 2 }]
+		}
+	},
+	onLoad(option) {
+		this.subType = Number(option.type)
+		this.initGetStotage(option)
+	},
+	filters: {},
+	computed: {
+		startDate() {
+		    return this.getDate('start')
+		},
+		endDate() {
+		    return this.getDate('end')
+		},
+		showClear() {
+			return this.params.quickPayBankNumber.length <= 12
+		},
+		disabled() {
+			if (this.pickerIndex === 1) {
+				return !(
+					this.params.quickPayBankNumber.length > 12 &&
+					this.params.quickPayUserName != '' &&
+					this.params.idCard != '' &&
+					this.params.quickPayMobile != ''
+				)
+			} else {
+				return !(
+					this.params.quickPayBankNumber.length > 12 &&
+					this.params.quickPayUserName != '' &&
+					this.params.idCard != '' &&
+					this.params.quickPayMobile != '' &&
+					this.params.quickPayBankExpireTime != '' &&
+					this.params.cvvCode != ''
+				)
+			}
+		}
+	},
+	methods: {
+		async initGetStotage(option) {
+			const userInfo = await this.$api.getStorage()
+			this.params.userId = userInfo.userId ? userInfo.userId : 0
+			if (this.subType != 1) {
+				const data = JSON.parse(option.data)
+				this.params = { ...this.params, ...data.payData }
+				this.orderId = data.orderId ? data.orderId : 0
+				this.payAmount = data.payAmount ? data.payAmount :0
+			}
+			console.log('params', this.params)
+			setTimeout(()=>{
+				this.skeletonShow = false
+			},500)
+		},
+		handleAddCard() {
+			//提交卡号
+			if (!this.$reg.isIdCard(this.params.idCard)) {
+				this.$util.msg('请输入正确的身份证号', 2000)
+				return
+			}
+			if (!this.$reg.isMobile(this.params.quickPayMobile)) {
+				this.$util.msg('请输入正确的手机号', 2000)
+				return
+			}
+			if (this.subType === 1) {
+				this.orderPayQuickBindCard()
+			} else {
+				this.orderPayQuickPay()
+			}
+		},
+		async orderPayQuickBindCard() {
+			//直接绑卡
+			try {
+				const res = await this.PayService.orderPayQuickBindCard(this.params)
+				console.log('res', res.data)
+				const data = JSON.stringify({ params: this.params, payData: res.data })
+				this.$api.navigateTo(`/pages/user/pay/card-comfirm-sub?type=${this.subType}&data=${data}`)
+			} catch (error) {
+				this.$util.msg(error.msg, 2000)
+			}
+		},
+		async orderPayQuickPay() {
+			//绑卡并支付
+			try {
+				const res = await this.PayService.orderPayQuickPay(this.params)
+				console.log('res', res.data)
+				const data = {
+					params: this.params,
+					payData: res.data,
+					orderId: this.orderId,
+					payAmount: this.payAmount
+				}
+				this.$api.navigateTo(`/pages/user/pay/card-comfirm-sub?type=${this.subType}&data=${JSON.stringify(data)}`)
+			} catch (error) {
+				this.$util.msg(error.msg, 2000)
+			}
+		},
+		handleDateChange(event) {
+		    //开始时间
+			console.log('event',event)
+		    this.handleBankExpireTime = this.params.quickPayBankExpireTime = event.detail.value
+		},
+		handleBindPicker(e) {
+			//选择银行卡类型
+			this.cardTytpeText = this.stateActions[e.target.value].name
+			this.pickerIndex = this.stateActions[e.target.value].value
+		},
+		handleClearInput() {
+			//清空银行卡
+			this.params.quickPayBankNumber = this.showCardNumber = ''
+		},
+		handleInput(e) {
+			this.showCardNumber = this.formatAccNo(e.detail.value)
+			this.params.quickPayBankNumber = this.showCardNumber.split(/[\t\r\f\n\s]*/g).join('')
+		},
+		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) {
+				// 如果输入的字符大于最大输入长度则禁止继续输入
+				return
+			}
+			return formatValue
+		},
+		getOriginValue() {
+			//获取input的原始值
+			return this.showCardNumber.split(' ').join('')
+		},
+		getDate(type) {
+		    const date = new Date()
+		    let year = date.getFullYear()
+		    let month = date.getMonth() + 1
+		    let day = date.getDate()
+		    if (type === 'start') {
+		        year = year - 1
+		    } else if (type === 'end') {
+		        year = year + 1
+		    }
+		    month = month > 9 ? month : '0' + month
+		    day = day > 9 ? day : '0' + day
+		    return `${year}-${month}`
+		}
+	},
+	onShow() {
+		// this.beansList = []
+	}
+}
+</script>
+
+<style lang="scss">
+page,
+.container {
+	background: #ffffff;
+	height: 100%;
+}
+.card-content {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	padding: 32rpx;
+	.card-row {
+		width: 100%;
+		height: 100rpx;
+		box-sizing: border-box;
+		border-bottom: 1px solid #e1e1e1;
+		position: relative;
+		float: left;
+		&.picker {
+			padding-right: 60rpx;
+		}
+		.form-label {
+			float: left;
+			height: 100%;
+			line-height: 98rpx;
+			font-size: $font-size-28;
+			text-align: left;
+			color: #666666;
+		}
+		.form-input {
+			min-width: 500rpx;
+			height: 98rpx;
+			line-height: 98rpx;
+			font-size: $font-size-28;
+			text-align: right;
+			color: #333333;
+			float: right;
+			position: relative;
+			&.none{
+				color: #999999;
+			}
+			.card-input {
+				width: 568rpx;
+				height: 100%;
+				line-height: 96rpx;
+				padding-left: 20rpx;
+				box-sizing: border-box;
+				font-size: $font-size-30;
+				color: #333;
+				padding-right: 60rpx;
+			}
+			.card-clear {
+				width: 60rpx;
+				height: 96rpx;
+				position: absolute;
+				right: 0;
+				top: 0;
+				line-height: 96rpx;
+				text-align: center;
+				.icon-shanchu1 {
+					font-size: $font-size-32;
+					color: #d5d5d5;
+				}
+			}
+		}
+		.icon-xiayibu {
+			width: 60rpx;
+			height: 100rpx;
+			position: absolute;
+			right: 0;
+			top: 0;
+			line-height: 100rpx;
+			text-align: center;
+			color: #b2b2b2;
+		}
+	}
+	.card-mains-btn {
+		width: 100%;
+		height: auto;
+		box-sizing: border-box;
+		padding: 0 43rpx;
+		margin-top: 180rpx;
+		float: left;
+		.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;
+			}
+		}
+	}
+	.card-mains-text {
+		width: 100%;
+		line-height: 88rpx;
+		box-sizing: border-box;
+		padding: 0 56rpx;
+		font-size: $font-size-28;
+		color: #1890f9;
+		text-align: center;
+		float: left;
+	}
+}
+</style>

+ 312 - 0
pages/user/pay/card-list.vue

@@ -0,0 +1,312 @@
+<template>
+	<view class="container card clearfix">
+		<tui-skeleton
+			v-if="skeletonShow"
+			backgroundColor="#fafafa"
+			borderRadius="10rpx"
+			:isLoading="true"
+			:loadingType="5"
+		></tui-skeleton>
+		<template v-else>
+			<view class="card-title">我的银行卡 <text>{{ list.length }}张</text></view>
+			<view class="card-content">
+				<template  v-if="list.length > 0">
+					<view class="list" v-for="(card, index) in list" :key="index" :style="{ backgroundImage: handleStyle(card.bankCode) }">
+						<view class="list-logo"> 
+							<view class="logo"><image :src="'https://static.caimei365.com/app/img/pay/icon_'+ card.bankCode+'_@2x.png'"></image></view>
+						</view> 
+						<view class="list-main">  
+							<view class="list-main-name">{{ card.bankName }}</view>
+							<view class="list-main-tag"> <text class="tag"> {{ card.bankType === 1 ? '借记卡' : '贷记卡' }} </text> </view>
+							<view class="list-main-code">
+								{{ card.quickPayBankNumber | cardsFormat }}
+							</view>
+						</view> 
+						<view class="list-btn" @click="handleUnbind(card)">解绑</view>
+					</view>
+				</template>
+				<view class="list-none" v-else>
+					<text>暂无银行卡~</text>
+				</view>
+			</view>
+		</template>
+		<!-- 取消收藏操作 -->
+		<tui-bottom-popup :radius="false" :mask="false" :show="popupShow">
+			<view class="tui-popup-box clearfix">
+				<view class="tui-right-flex tui-popup-btn" :style="{ paddingBottom: isIphoneX ? '68rpx' : '34rpx' }">
+					<view class="tui-flex-1">
+						<view class="tui-button" @click="handleAddCard(1)">添加银行卡</view>
+					</view>
+				</view>
+			</view>
+		</tui-bottom-popup>
+		<!-- 弹窗提示 -->
+		<tui-modal
+			:show="modal"
+			@click="handleClick"
+			@cancel="hideMobel"
+			:content="contentModalText"
+			:button="modalButton"
+			color="#333"
+			:size="32"
+			shape="circle"
+			:maskClosable="false"
+		>
+		</tui-modal>
+	</view>
+</template>
+<script>
+export default {
+	data() {
+		return {
+			StaticUrl: this.$Static,
+			isIphoneX:this.$store.state.isIphoneX,
+			skeletonShow:true,
+			popupShow:true,
+			contentModalText: '', //操作文字提示语句
+			modal: false,
+			modalButton: [
+				{
+					text: '保持绑定',
+					type: 'gray',
+					plain: true //是否空心
+				},
+				{
+					text: '继续解绑',
+					customStyle: {
+						color: '#fff',
+						bgColor: 'linear-gradient(90deg, #F28F31 0%, #FF5B00 100%)'
+					},
+					plain: false
+				}
+			],
+			list: []
+		}
+	},
+	onLoad() {
+		this.GetUserClubBanks()
+	},
+	filters: {
+		cardsFormat(valus) {
+			// 银行卡只显示最后四位数 ,隐藏信息用*代替
+			return  valus.replace(/^(\d{4})\d+(\d{4})$/,"$1****$2")
+		},
+	},
+	methods: {
+		async GetUserClubBanks() {
+			//获取列表
+			try {
+				const user = await this.$api.getStorage()
+				const res = await this.UserService.userClubBanks({ userId:user.userId })
+				this.list = res.data
+				this.skeletonShow = false
+			} catch (error) {
+				console.log(error)
+			}
+		},
+		handleAddCard(index){
+			// 跳转添加银行卡页面
+			this.$api.navigateTo(`/pages/user/pay/card-comfirm?type=${index}`)
+		},
+		handleUnbind(card){
+			//点击解绑
+			this.handleCardId = card.id
+			this.modal = true
+			this.contentModalText = '解绑后此卡需要重新绑定才能继续使用'
+		},
+		handleClick(e) {
+			//确认解绑
+			if (e.index == 1) {
+				this.orderPayUnboundCard()
+			}
+			this.modal = false
+		},
+		async orderPayUnboundCard(){
+			//请求
+			try {
+				const res = await this.PayService.orderPayUnboundCard({ cardId : this.handleCardId })
+				console.log('res', res.data)
+				this.$util.msg('解绑成功',2000,true,'success')
+				this.GetUserClubBanks()
+			} catch (error) {
+				this.$util.msg(error.msg, 2000)
+			}
+		},
+		hideMobel(){
+			// 取消解绑
+			this.modal = false
+		},
+		handleStyle(type) {
+			// 设置各个银行卡配色
+			const styleMap = {
+				'ABC':'linear-gradient(90deg, #19B8B2 0%, #009C96 100%);',
+				'BCCB':'linear-gradient(90deg, #4D8CD8 0%, #3C66C9 100%);',
+				'BOC':'linear-gradient(90deg, #FB6965 0%, #CE4343 100%);',
+				'BOCO':'linear-gradient(90deg, #7275BE 0%, #434492 100%);',
+				'CCB':'linear-gradient(90deg, #4D8CD8 0%, #3C66C9 100%);',
+				'CEB':'linear-gradient(90deg, #B673CB 0%, #843C9A 100%);',
+				'CGB':'linear-gradient(90deg, #FB6965 0%, #CE4343 100%);',
+				'CIB':'linear-gradient(90deg, #457EBC 0%, #1B518A 100%);',
+				'CMBC':'linear-gradient(90deg, #3C9EC2 0%, #0584B4 100%);',
+				'CMBCHINA':'linear-gradient(90deg, #FB6965 0%, #CE4343 100%);',
+				'ECITIC':'linear-gradient(90deg, #ED796B 0%, #EF585E 100%);',
+				'HXB':'linear-gradient(90deg, #ED796B 0%, #EF585E 100%);',
+				'ICBC':'linear-gradient(90deg, #ED796B 0%, #EF585E 100%);',
+				'PINGAN':'linear-gradient(90deg, #F5A15A 0%, #E47F29 100%);',
+				'POST':'linear-gradient(90deg, #3EB97B 0%, #11874B 100%);',
+				'SHB':'linear-gradient(90deg, #6479C8 0%, #314693 100%);',
+				'SPDB':'linear-gradient(90deg, #4D8CD8 0%, #3C66C9 100%);',
+			}
+			return styleMap[type]
+		},
+	},
+	onPullDownRefresh() {
+		//下拉刷新
+		this.GetUserClubBanks()
+		uni.stopPullDownRefresh()
+	},
+	onShow() {
+		
+	}
+}
+</script>
+
+<style lang="scss">
+page,
+.container {
+	background: #ffffff;
+	height: 100%;
+}
+.card-title {
+	width: 100%;
+	height: 100rpx;
+	line-height: 100rpx;
+	font-size: $font-size-32;
+	color: #333;
+	font-weight: bold;
+	box-sizing: border-box;
+	padding: 0 24rpx;
+	text {
+		font-size: $font-size-28;
+		color: #999;
+		font-weight: normal;
+		margin-left: 10rpx;
+	}
+}
+.card-content {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	padding: 0 40rpx;
+	.list-none{
+		width: 100%;
+		height: 900rpx;
+		line-height: 900rpx;
+		font-size: $font-size-28;
+		text-align: center;
+		color: #999;
+	}
+	.list {
+		width: 100%;
+		height: 240rpx;
+		border-radius: 16rpx;
+		box-sizing: border-box;
+		padding: 32rpx;
+		position: relative;
+		margin-bottom: 32rpx;
+		background: url(https://static.caimei365.com/app/img/pay/icon_bg_cards@2x.png);
+		background-size: cover;
+		&:last-child{
+			margin-bottom: 0;
+		}
+		.list-logo{
+			width: 80rpx;
+			height: 100%;
+			float: left;
+			.logo{
+				width: 80rpx;
+				height: 80rpx;
+				border-radius: 50%;
+				box-sizing: border-box;
+				float: left;
+				image{
+					width: 80rpx;
+					height: 80rpx;
+					border-radius: 50%;
+					display: block;
+				}
+			}
+		}
+		.list-main{
+			width: 452rpx;
+			float: left;
+			margin-left: 32rpx;
+			.list-main-name{
+				width: 100%;
+				height: 50rpx;
+				line-height: 50rpx;
+				font-size: $font-size-34;
+				color: #ffffff;
+			}
+			.list-main-tag{
+				width: 100%;
+				height: 37rpx;
+				margin: 8rpx 0 36rpx 0;
+				.tag{
+					display: inline-block;
+					line-height: 37rpx;
+					padding: 0 12rpx;
+					border-radius: 19rpx;
+					font-size: $font-size-24;
+					color: #ffffff;
+					background: rgba(255, 255, 255, 0.2);
+					float: left;
+				}
+			}
+			.list-main-code{
+				width: 100%;
+				height: 50rpx;
+				line-height: 50rpx;
+				font-size: $font-size-34;
+				color: #ffffff;
+			}
+		}
+		.list-btn{
+			font-size: $font-size-24;
+			color: #ffffff;
+			height: 30rpx;
+			line-height: 30rpx;
+			position: absolute;
+			right: 32rpx;
+			top: 32rpx;
+		}
+	}
+}
+.tui-popup-box {
+	position: relative;
+	box-sizing: border-box;
+	min-height: 100rpx;
+	padding: 6rpx 24rpx;
+	.tui-popup-content {
+		padding-top: 30rpx;
+	}
+}
+.tui-popup-btn {
+	width: 100%;
+	height: auto;
+	float: left;
+	box-sizing: border-box;
+	margin-top: 30rpx;
+	.tui-button {
+		width: 600rpx;
+		height: 88rpx;
+		background: $btn-confirm;
+		line-height: 88rpx;
+		text-align: center;
+		color: #ffffff;
+		font-size: $font-size-28;
+		border-radius: 44rpx;
+		margin: 0 auto;
+	}
+}
+</style>

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

@@ -0,0 +1,1028 @@
+<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">
+						<template v-if="showQuickpayMode">
+							<view class="pay-card-main" v-if="cardsList.length > 0">
+								<view class="pay-item-cell" @click="tabClick(3)">
+									<view class="item-icon">
+										<image
+											:src="
+												'https://static.caimei365.com/app/img/pay/icon_' +
+													defaultCards.bankCode +
+													'_@2x.png'
+											"
+										></image>
+									</view>
+									<view class="item-texts"
+										>{{ defaultCards.bankName }}(
+										{{ defaultCards.quickPayBankNumber | bankNumeberFilter }} )</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)" v-else>
+								<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>
+						</template>
+						<view class="pay-item" @click="tabClick(0)" v-if="showWeChatPayMode">
+							<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)" v-if="showB2BpayMode">
+							<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 class="pay-statustext">
+						<view class="pay-statustext-inner">
+							<view class="pay-icon"> <text class="iconfont icon-gantanhao-yuankuang"></text> </view>
+							<view class="pay-text">
+								<view
+									>使用任何一种线上支付方式支付全部金额后,供应商会在24小时后发货(周末、节假日顺延)。</view
+								>
+							</view>
+						</view>
+					</view>
+				</view>
+				<view class="pay-button" :style="{ paddingBottom: isIphoneX ? '68rpx' : '24rpx' }">
+					<view class="btn" @click.stop="buttonSubMit" :class="isSubLoding ? 'disabled' : ''" :style="{ background: btnColor }">{{
+						buttonText
+					}}</view>
+				</view>
+			</view>
+		</template>
+		<!-- 支付链接弹窗 -->
+		<view class="alert spec" 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" v-if="popupShow"></cm-record>
+		<!-- 选择快捷支付银行 -->
+		<cm-cards
+			:show="popupShow1"
+			:list="cardsList"
+			@handleChoiceaCards="handleChoiceaCards"
+			@addCards="handleAddCard"
+			v-if="popupShow1"
+		></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
+				}
+			],
+			quickParams: {
+			    userId: 0, 					//机构UserId
+			    quickPayBankNumber: '', 	//快捷支付用户银行卡号/信用卡号
+			    quickPayMobile: '', 		//快捷支付银行卡绑定手机号
+			    quickPayBankExpireTime: '', //快捷支付信用卡过期时间,只包含年月,格式yy-MM
+			    quickPayUserName: '', 		//快捷支付用户姓名
+			    idCard: '', 				//身份证号
+			    cvvCode: '',				//信用卡安全码
+			    quickPayFlag: 1,
+			    payAmount: 0,
+			    shopOrderId: 0
+			},
+			isSubLoding:false
+		}
+	},
+	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.shopOrderId = e.shopOrderId
+			this.GetPayOrderInfo()
+			this.GetUserClubBanks()
+		},
+		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 // 计算剩余支付金额
+					// 支付方式配置
+					if(data.onlinePayWays){
+						this.checkPayMode(data.onlinePayWays)
+					}
+					setTimeout(() => {
+						this.skeletonShow = false
+					}, 500)
+				})
+				.catch(error => {
+					this.$util.msg(error.msg, 2000)
+				})
+		},
+		async GetUserClubBanks() {
+		    //获取列表
+		    try {
+		        const user = await this.$api.getStorage()
+		        const res = await this.UserService.userClubBanks({ userId:user.userId })
+		        this.cardsList = res.data
+		        this.defaultCards = this.cardsList[0]
+		        this.quickParams.userId = user.userId 
+		        this.quickParams.shopOrderId = Number(this.shopOrderId)
+		        this.quickParams.quickPayBankNumber = this.defaultCards.quickPayBankNumber 
+		        this.quickParams.quickPayMobile = this.defaultCards.quickPayMobile 
+		        this.quickParams.quickPayBankExpireTime = this.defaultCards.quickPayBankExpireTime ? this.defaultCards.quickPayBankExpireTime : ''
+		        this.quickParams.quickPayUserName = this.defaultCards.quickPayUserName 
+		        this.quickParams.idCard = this.defaultCards.idCard 
+		        this.quickParams.cvvCode = this.defaultCards.cvvCode ? this.defaultCards.cvvCode : '' 
+		    } catch (error) {
+		        console.log(error)
+		    }
+		},
+		handleAddCard(index) {
+			//跳转添加卡号支付
+			//quickPayFlag 1普通订单 ,payAmount 支付金额,单位元,shopOrderId 子订单Id
+			const data = {
+				payData: {
+					quickPayFlag: 1,
+					payAmount: this.payAmount,
+					shopOrderId: Number(this.shopOrderId)
+				},
+				orderId: this.orderId
+			}
+			this.$api.navigateTo(`/pages/user/pay/card-comfirm?type=${index}&data=${JSON.stringify(data)}`)
+		},
+		buttonSubMit() {
+			if(this.isSubLoding){ return }
+			switch (this.tabCurrentIndex) {
+				case 0: // 微信支付
+					this.handleUmTrackEvent('Um_Event_ConfirmWechatPay', '微信支付')
+					this.MiniWxPayFor()
+					break
+				case 1: // 企业网银
+					this.payType = '1'
+					this.handleUmTrackEvent('Um_Event_ConfirmEbankPay', '企业网银')
+					this.handlePayOrderPayLink()
+					break
+				case 2: // 个人网银
+					this.payType = '2'
+					this.handleUmTrackEvent('Um_Event_ConfirmAbankPay', '个人网银')
+					this.handlePayOrderPayLink()
+					break
+				case 3: // 快捷支付
+					this.handleUmTrackEvent('Um_Event_ConfirmAbankPay', '快捷支付')
+					this.orderPayQuickPay()
+					break
+			}
+			this.isSubLoding = true
+		},
+		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}`
+				})
+			}
+		},
+		async orderPayQuickPay() {
+			//快捷支付
+			try {
+				this.quickParams.payAmount = this.payAmount
+				console.log('payAmount',this.quickParams.payAmount)
+				const res = await this.PayService.orderPayQuickPay(this.quickParams)
+				const data = {
+					params: this.quickParams,
+					payData: res.data,
+					orderId: this.orderId,
+					payAmount: this.payAmount
+				}
+				this.isSubLoding = false
+				this.$api.navigateTo(
+					`/pages/user/pay/card-comfirm-sub?type=3&data=${JSON.stringify(data)}`
+				)
+			} catch (error) {
+				this.$util.msg(error.msg, 2000)
+				this.isSubLoding = false
+			}
+		},
+		async handlePayOrderPayLink() {
+			// 企业网银  个人网银
+			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.obligation) {
+					this.contentModalText = '企业网银支付每次收取的手续费较高,建议一次性全额付款。'
+					this.modal = true
+					return
+				}
+			}
+			try {
+				const linkParams = {
+					unpaidAmount: this.payAmount,
+					shopOrderId: this.shopOrderId,
+					payType: this.payType
+				}
+			    const res = await this.PayService.PayOrderPayLink(linkParams)
+				this.payHttpUrl = res.data
+				this.isSubLoding = false
+				this.isShowTip = true
+				console.log('isShowTip',this.isShowTip)
+			} catch (error) {
+			    console.log(error)
+				this.isSubLoding = false
+			}
+		},
+		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)
+			this.isSubLoding = false
+		},
+		handleClick() {
+			this.modal = false
+			this.isSubLoding = 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.quickParams.payAmount =  ''
+				this.balanceAmount = this.obligation
+			} else if (value > this.obligation) {
+				this.payAmount = this.quickParams.payAmount = this.toFixedFn(this.obligation)
+				this.balanceAmount = this.toFixedFn(this.obligation - this.payAmount)
+			} else {
+				this.payAmount = this.quickParams.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-statustext {
+			width: 100%;
+			height: auto;
+			float: left;
+			margin-top: 40rpx;
+			padding-bottom: 160rpx;
+			.pay-statustext-inner {
+				width: 662rpx;
+				height: 80rpx;
+				margin: 0 auto;
+				border: 1px solid #cccccc;
+				padding: 20rpx;
+				border-radius: 8rpx;
+				.pay-icon {
+					width: 62rpx;
+					height: 100%;
+					float: left;
+					text-align: center;
+					.iconfont {
+						color: #999999;
+						font-size: $font-size-36;
+						line-height: 20rpx;
+					}
+				}
+				.pay-text {
+					width: 560rpx;
+					height: 100%;
+					float: left;
+					line-height: 40rpx;
+					font-size: $font-size-24;
+					color: #999999;
+					text-align: justify;
+				}
+			}
+		}
+	}
+	.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;
+			&.disabled{
+				background: #e1e1e1 !important;
+			}
+		}
+	}
+}
+.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>

+ 205 - 0
pages/user/pay/card-sus-list.vue

@@ -0,0 +1,205 @@
+<template>
+	<view class="container card clearfix">
+		<tui-skeleton
+			v-if="skeletonShow"
+			backgroundColor="#fafafa"
+			borderRadius="10rpx"
+			:isLoading="true"
+			:loadingType="5"
+		></tui-skeleton>
+		<template v-else>
+			<view class="card-title">
+				<view class="card-tabs" @click="handleCurrent(1)">
+					<view class="card-tabs-text" :class="{ current : current === 1 }">借记卡</view>
+				</view>
+				<view class="card-tabs" @click="handleCurrent(2)">
+					<view class="card-tabs-text" :class="{ current : current === 2 }">贷记卡</view>
+				</view>
+			</view>
+			<view class="card-content">
+				<view class="list" v-for="(item, index) in list" :key="index">
+					<view class="list-pin">{{ item.initial }}</view>
+					<view class="list-card">
+						<view class="list-card-item" v-for="(card, index) in item.banks" :key="index">
+							<view class="logo"><image :src="'https://static.caimei365.com/app/img/pay/icon_'+card.bankCode+'_@2x.png'"></image></view>
+							<view class="name">
+								<text>{{ card.bankName }}</text>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</template>
+	</view>
+</template>
+<script>
+export default {
+	data() {
+		return {
+			StaticUrl: this.$Static,
+			isIphoneX:this.$store.state.isIphoneX,
+			skeletonShow:true,
+			current:1,
+			listQuery: {
+				cardType: 1, // 页数
+			},
+			list: []
+		}
+	},
+	onLoad() {
+		this.getQuickBankInfos()
+	},
+	filters: {},
+	methods: {
+		async getQuickBankInfos() {
+			//获取余额明细数据列表
+			try {
+				const res = await this.PayService.getQuickBankInfos(this.listQuery)
+				console.log('res',res)
+				this.list =  res.data
+				setTimeout(() => {
+					this.skeletonShow = false
+				}, 1000)
+			} catch (error) {
+				console.log(error)
+			}
+		},
+		handleCurrent(index){
+			// tabs 切换
+			this.current = this.listQuery.cardType = index
+			this.getQuickBankInfos()
+		}
+	},
+	onReachBottom() {
+		if (this.hasNextPage) {
+			this.loadding = true
+			this.pullUpOn = true
+			this.GetOnReachBottomData()
+		}
+	},
+	onPullDownRefresh() {
+		//下拉刷新
+		this.listQuery.pageNum = 1
+		this.GetAccountInitData()
+		uni.stopPullDownRefresh()
+	},
+	onShow() {
+		// this.beansList = []
+	}
+}
+</script>
+
+<style lang="scss">
+page,
+.container {
+	background: #ffffff;
+	height: 100%;
+}
+.card-title {
+	width: 100%;
+	height: 100rpx;
+	.card-tabs{
+		width: 50%;
+		height: 100%;
+		float: left;
+		.card-tabs-text{
+			width: 100rpx;
+			line-height: 96rpx;
+			margin: 0 auto;
+			font-size: $font-size-32;
+			color: #333;
+			font-weight: bold;
+			box-sizing: border-box;
+			border-bottom: 2px solid #ffffff;
+			&.current{
+				color: #FF5B00;
+				border-color: #FF5B00;
+			}
+		}
+	}
+}
+.card-content {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	.list {
+		width: 100%;
+		height: auto;
+		box-sizing: border-box;
+		position: relative;
+		.list-pin{
+			width: 100%;
+			line-height: 48rpx;
+			box-sizing: border-box;
+			padding-left: 47rpx;
+			background-color: #F7F7F7;
+			font-size: 28rpx;
+			color: #333;
+			float: left;
+		}
+		.list-card{
+			width: 100%;
+			height: auto;
+			box-sizing: border-box;
+			position: relative;
+			padding: 0 32rpx;
+			float: left;
+			.list-card-item{
+				width: 100%;
+				height: 100rpx;
+				box-sizing: border-box;
+				padding: 20rpx 0;
+				border-bottom: 1px solid #E1E1E1;
+				&:last-child{
+					border-bottom: none;
+				}
+				.logo{
+					width: 60rpx;
+					height: 60rpx;
+					margin-right: 34rpx;
+					float: left;
+					border-radius: 50%;
+					image{
+						width: 60rpx;
+						height: 60rpx;
+						border-radius: 50%;
+						display: block;
+					}
+				}
+				.name{
+					line-height: 60rpx;
+					font-size: 28rpx;
+					color: #333;
+				}
+			}
+		}
+	}
+}
+.tui-popup-box {
+	position: relative;
+	box-sizing: border-box;
+	min-height: 100rpx;
+	padding: 6rpx 24rpx;
+	.tui-popup-content {
+		padding-top: 30rpx;
+	}
+}
+.tui-popup-btn {
+	width: 100%;
+	height: auto;
+	float: left;
+	box-sizing: border-box;
+	margin-top: 30rpx;
+	.tui-button {
+		width: 600rpx;
+		height: 88rpx;
+		background: $btn-confirm;
+		line-height: 88rpx;
+		text-align: center;
+		color: #ffffff;
+		font-size: $font-size-28;
+		border-radius: 44rpx;
+		margin: 0 auto;
+	}
+}
+</style>

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

@@ -0,0 +1,222 @@
+<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="
+											'https://static.caimei365.com/app/img/pay/icon_' +
+												cards.bankCode +
+												'_@2x.png'
+										"
+									></image
+								></view>
+								<view class="item-texts"
+									><text
+										>{{ cards.bankName }}( {{ cards.quickPayBankNumber | bankNumeberFilter }} )</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(2)">
+								<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: '',
+			dataList: []
+		}
+	},
+	filters: {
+		bankNumeberFilter(value) {
+			return value.substring(value.length - 4, value.length)
+		}
+	},
+	created() {
+		this.initDataList(this.list)
+	},
+	methods: {
+		initDataList(list){
+			// 初始化
+			this.dataList = list
+			console.log('list',this.dataList)
+		},
+		handleChoose(index, cards) {
+			//选择银行卡
+			this.checkedIndex = index
+			const data = {
+				quickPayBankNumber:cards.quickPayBankNumber,
+				quickPayMobile:cards.quickPayMobile,
+				quickPayBankExpireTime:cards.quickPayBankExpireTime,
+				quickPayUserName:cards.quickPayUserName,
+				bankName:cards.bankName,
+				bankCode:cards.bankCode,
+				idCard:cards.idCard,
+				cvvCode:cards.cvvCode
+			}
+			this.$emit('handleChoiceaCards', data)
+			this.hidePopup()
+		},
+		handleAddCard(index) {
+			//跳转添加卡号
+			this.$emit('addCards', index)
+		},
+		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>

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

@@ -0,0 +1,199 @@
+<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">{{ payTypeText(record) }}</text>
+								</view>
+								<view class="list-item-cell">
+									<text class="text row-3">{{ record.receiptDate }}</text>
+								</view>
+							</view>
+						</view>
+						<view class="list-main-none" v-else>
+							<image
+								class="none-image"
+								src="https://static.caimei365.com/app/img/bg/icon_echart_none@2x.png"
+								mode=""
+							></image>
+							<view class="none-text">暂无支付记录</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,
+			dataList: []
+		}
+	},
+	filters: {
+		NumFormat(value) {
+			//处理金额
+			if (value) {
+				return Number(value).toFixed(2)
+			} else {
+				return '0.00'
+			}
+		},
+		
+	},
+	created() {
+		this.dataList = this.list
+	},
+	methods: {
+		hidePopup() {
+			this.$parent.popupShow = false
+		},
+		payTypeText(record) {
+			//处理支付记录文字
+			const map = {
+				12: '企业网银',
+				13: '微信支付',
+				14: '支付宝',
+				15: '微信支付',
+				16: '余额抵扣',
+			}
+			if(record.payType === 28 || record.payType === 29 ){
+				return record.quickPayStr
+			}else{
+				return map[record.payType]
+			}
+		}
+	}
+}
+</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-main-none{
+				width: 100%;
+				height: 100%;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				flex-direction: column;
+				.none-image {
+					width: 220rpx;
+					height: 220rpx;
+					margin-bottom: 20rpx;
+				}
+				.none-text {
+					font-size: $font-size-28;
+					color: #999999;
+					line-height: 44rpx;
+				}
+			}
+			.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>

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

@@ -0,0 +1,94 @@
+// 收银台
+import Vue from 'vue'
+const cardMixins = {
+    data() {
+        return {
+            popupShow: false, // 控制支付记录弹窗
+            popupShow1: false, // 控制快捷支付银行弹窗
+            tabCurrentIndex: 0,
+            weChatFlag: false, // 微信支付开关
+            B2BpayFlag: false, //企业网银支付开关
+            QuickPayFlag: false, // 快捷支付开发
+            buttonText: '微信支付',
+            btnColor: '#0ABC64',
+            cardsList:[],//查看银行列表
+            defaultCards: null,
+        }
+    },
+    filters:{
+        bankNumeberFilter(value){
+            return value.substring(value.length-4,value.length)
+        }
+    },
+    computed: {
+        showWeChatPayMode() {
+            return this.weChatFlag
+        },
+        showB2BpayMode() {
+            return this.B2BpayFlag
+        },
+        showQuickpayMode() {
+            return this.QuickPayFlag
+        }
+    },
+    methods: {
+        handleChoiceaCards(data) {
+            //选择的银行
+            this.tabCurrentIndex = 3
+            this.tabClick(3)
+            this.defaultCards = data
+            this.quickParams = { ...this.quickParams , ...data}
+        },
+        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
+            }
+        },
+        checkPayMode(range) {
+            // 校验支付模式
+            // test range = '4'
+            // 1微信 2支付宝 3个人网银 4企业网银 5快捷支付
+            this.weChatFlag = range.indexOf('1') > -1
+            this.B2BpayFlag = range.indexOf('4') > -1
+            this.QuickPayFlag = range.indexOf('5') > -1
+            // 设置默认支付方式
+            if(this.QuickPayFlag){
+                this.tabCurrentIndex = 3
+            }else{
+                this.tabCurrentIndex = this.weChatFlag ? 0 : this.B2BpayFlag ? 1 : 2
+            }
+            
+            this.tabClick(this.tabCurrentIndex)
+        }
+    }
+}
+
+export default cardMixins

+ 75 - 0
services/pay.service.js

@@ -213,4 +213,79 @@ export default class PayService {
             isLoading: false ,
         }) 
     } 
+    /**
+	 *@param 获取快捷支付银行信息
+	 */
+    getQuickBankInfos (data = {}) {
+        return this.AjaxService.get({
+            url:'/order/pay/quick/bank/infos', 
+            data, 
+            isLoading: false ,
+        }) 
+    } 
+    /**
+	 *@param 银行卡绑定信息提交
+	 Int userId  									机构用户Id
+	 String quickPayBankNumber  				快捷支付用户银行卡号/信用卡号  
+	 String quickPayMobile  					快捷支付银行卡绑定手机号  
+	 String quickPayBankExpireTime  			快捷支付信用卡过期时间,只包含年月,格式yy-MM
+	 String quickPayUserName  					快捷支付用户姓名
+	 String idCard  							身份证号
+	 String cvvCode  							信用卡安全码
+	 */
+    orderPayQuickBindCard (data = {}) {
+        return this.AjaxService.post({
+            url:'/order/pay/quick/bind/card', 
+            data, 
+            isLoading: true ,
+        }) 
+    } 
+    /**
+	 *@param 银行卡绑定信息校验
+	 String orderId  							订单
+	 String infoId  							记录Id
+	 String bindCode  							短信验证码
+	 */
+    orderPayQuickBindCode (data = {},loadText) {
+        return this.AjaxService.get({
+            url:'/order/pay/quick/bind/code', 
+            data, 
+            isLoading: true ,
+            loadText: loadText
+        }) 
+    } 
+    /**
+	 *@param 银行卡绑定信息校验
+	 Int userId  								机构用户Id
+	 String quickPayBankNumber  				快捷支付用户银行卡号/信用卡号  
+	 String quickPayMobile  					快捷支付银行卡绑定手机号  
+	 String quickPayBankExpireTime  			快捷支付信用卡过期时间,只包含年月,格式yy-MM
+	 String quickPayUserName  					快捷支付用户姓名
+	 String idCard  							身份证号
+	 String cvvCode  							信用卡安全码
+	 Int quickPayFlag     						快捷支付类型标记1订单2超级会员3认证通会员4优惠券
+	 quickPayFlag=1普通订单  String payAmount 支付金额,单位元 int shopOrderId	子订单Id
+	 quickPayFlag=2 超级会员 vipRecordId会员购买记录Id
+	 quickPayFlag=3 认证通会员 vipRecordId会员购买记录Id
+	 quickPayFlag=4 优惠券购买 couponRecordId 优惠券购买记录id couponId购买优惠券Id
+	 source领取渠道1小程序 2网站
+	 */
+    orderPayQuickPay (data = {}) {
+        return this.AjaxService.post({
+            url:'/order/pay/quick/pay', 
+            data, 
+            isLoading: true ,
+        }) 
+    } 
+    /**
+	 *@param 快捷支付解绑银行卡
+	 cardId 银行卡绑定Id
+	 */
+    orderPayUnboundCard (data = {}) {
+        return this.AjaxService.get({
+            url:'/order/pay/quick/unbound/card', 
+            data, 
+            isLoading: true ,
+        }) 
+    } 
 }

+ 12 - 1
services/user.service.js

@@ -82,7 +82,7 @@ export default class UserService {
 	 */
     userLoginCode(data = {}) {
         return this.AjaxService.get({
-            url: '/user/login/code',
+            url: '/user/sms/code',
             data,
             isLoading: true
         })
@@ -940,5 +940,16 @@ export default class UserService {
 	        isLoading: false,
 	    }) 
     }
+    /**
+	 *@param 我的银行卡
+	 userId 用户
+	 */
+    userClubBanks (data = {}) {
+	    return this.AjaxService.get({
+	        url:'/user/club/banks', 
+	        data, 
+	        isLoading: false ,
+	    }) 
+    } 
 	 
 }

+ 1 - 1
utils/router.config.js

@@ -14,7 +14,7 @@ export const includeList = [
     {title:'网页列表', url:'/pages/goods/good-floor-temp',pageLabel:'网页列表', pageType:13 },
     {title:'活动专题', url:'/pages/h5/activity/activity',pageLabel:'活动专题', pageType:13 },
     {title:'美博会', url:'/pages/h5/activity/activity-topic',pageLabel:'美博会', pageType:13 },
-    {title:'供应商首页', url:'/pages/supplier/user/my-shop',pageLabel:'供应商首页', pageType:14 },
+    {title:'供应商主页', url:'/pages/supplier/user/my-shop',pageLabel:'供应商主页', pageType:14 },
     {title:'公告列表', url:'/pages/service/news-list',pageLabel:'公告列表', pageType:15 },
     {title:'公告详情', url:'/pages/service/news-detailes',pageLabel:'公告详情', pageType:16 },
     {title:'二手介绍', url:'/pages/second/form/introduce',pageLabel:'二手介绍', pageType:17 },