Ver código fonte

商城线上支付

zhengjinyi 5 anos atrás
pai
commit
ee90a484cf

+ 35 - 0
api/order.js

@@ -260,4 +260,39 @@ export function clearOrderHistory(params) {
 		})
 	})
 }
+/**
+ *清楚订单历史记录
+ *@param  orderId 订单ID
+ */
+export function PayOrderCheckoutCounter(params) {
+	return new Promise(function(resolve,reject) {
+		request.lodingGet('/PayOrder/checkoutCounter',params, res => {
+			if(res.code == 0){
+				resolve(res)
+			}else{
+				reject(res)
+			}
+		})
+	})
+}
+
+/**
+ *微信支付
+ *@param  amount支付金额,单位分,必须大于2
+ *@param  payWay银联:UNIONPAY,微信:WEIXIN,支付宝:ALIPAY
+ *@param  payType 微信小程序支付: MINIAPP_WEIXIN ,微信公众号支付: JSAPI_WEIXIN
+ *@param  code  微信小程序code,微信小程序支付使用
+ *@param  orderId  主订单ID
+ */
+export function WeChatMiniWxPay(params) {
+	return new Promise(function(resolve,reject) {
+		request.post('/PayOrder/miniWxPay',params,true,res => {
+			if(res.code == 0){
+				resolve(res)
+			}else{
+				reject(res)
+			}
+		})
+	})
+}
 

+ 13 - 1
common/css/iconfont.scss

@@ -4,7 +4,7 @@
 	font-family: iconfont;
 	font-weight: normal;
 	font-style: normal;
-	src: url('https://at.alicdn.com/t/font_1519039_uvnf5k2lnc.ttf') format('truetype');
+	src: url('https://at.alicdn.com/t/font_1519039_awwryhp1s7o.ttf') format('truetype');
 }
 .iconfont {
 	font-family: "iconfont" !important;
@@ -13,6 +13,18 @@
 	-webkit-font-smoothing: antialiased;
 	-moz-osx-font-smoothing: grayscale;
 }
+.icon-gougou:before {
+  content: "\e6a3";
+}
+
+.icon-weixinzhifu:before {
+  content: "\e62a";
+}
+
+.icon-yinlianzhifu:before {
+  content: "\e62d";
+}
+
 .icon-kefunv:before {
   content: "\e672";
 }

+ 6 - 1
components/cm-module/orderDetails/orderButton.vue

@@ -2,6 +2,7 @@
 	<view class="button-template" :style="{paddingBottom :isIphoneX ? '68rpx' : '0rpx'}">
 		<!-- 底部按钮 -->
 		<view class="button-content">
+			<view class="btn btn-pay" v-if="btnState.isPay" @click.stop="btnConfirm('pay')">付款</view>
 			<view class="btn btn-share" @click.stop="onShareCode">
 				<view class="tips" v-if="shareCode">分享码:{{shareCode}}</view>
 				分享订单
@@ -44,6 +45,7 @@
 					{label:'isCancel',val:[0,111],status: true},
 					{label:'isConfirm',val:[33],status: true},
 					{label:'isConfirmation',val:[0],status: true},
+					{label:'isPay',val:[11,12,13,21,22,23,111],status: true},
 				]
 			}
 		},
@@ -146,9 +148,12 @@
 			.btn-confirm{
 				background:linear-gradient(315deg,rgba(231,0,0,1) 0%,rgba(255,104,1,1) 100%);
 			}
+			.btn-pay{
+				background:linear-gradient(135deg,rgba(242,143,49,1) 0%,rgba(225,86,22,1) 100%);
+				margin-right: 0;
+			}
 			.btn-share{
 				background:linear-gradient(315deg,rgba(0,212,150,1) 0%,rgba(126,243,174,1) 100%);
-				margin-right: 0;
 				position: relative;
 				.tips{
 					width: 160rpx;

+ 6 - 1
components/cm-module/orderDetails/orderListButton.vue

@@ -2,6 +2,7 @@
 	<view class="button-template">
 		<!-- 底部按钮 -->
 		<view class="button-content">
+			<view class="btn btn-pay" v-if="btnState.isPay" @click.stop="btnConfirm('pay',orderID)">付款</view>
 			<view class="btn btn-share"  @click.stop="onShareCode(orderID)">分享订单</view>	
 			<view class="btn btn-confirm" v-if="btnState.isConfirmation" @click.stop="btnConfirm('confirmation',orderID)">确认订单</view>
 			<view class="btn btn-cancel" v-if="btnState.isCancel" @click.stop="btnConfirm('cancel',orderID)">取消订单</view>
@@ -34,6 +35,7 @@
 					{label:'isCancel',val:[0,111],status: true},
 					{label:'isConfirm',val:[33],status: true},
 					{label:'isConfirmation',val:[0],status: true},
+					{label:'isPay',val:[11,12,13,21,22,23,111],status: true},
 				]
 			}
 		},
@@ -147,9 +149,12 @@
 			.btn-confirm{
 				background:linear-gradient(315deg,rgba(231,0,0,1) 0%,rgba(255,104,1,1) 100%);
 			}
+			.btn-pay{
+				background:linear-gradient(135deg,rgba(242,143,49,1) 0%,rgba(225,86,22,1) 100%);
+				margin-right: 0;
+			}
 			.btn-share{
 				background:linear-gradient(315deg,rgba(0,212,150,1) 0%,rgba(126,243,174,1) 100%);
-				margin-right: 0;
 				position: relative;
 				.tips{
 					width: 160rpx;

+ 1 - 1
components/cm-module/productDetails/cm-price.vue

@@ -42,7 +42,7 @@
 				<text>价格仅会员可见</text>
 			</view>
 			<view class="wrap-main-none" v-if="product.price1TextFlag == '2'" @click.stop="goUpgradeApply">
-				<text>上传营业执照升级为会员机构即可查看价格 >></text>
+				<text>去升级会员机构 >></text>
 			</view>
 			<view class="wrap-main-price" v-if="product.price1TextFlag == '0'">
 				<view class="p-main" v-if="product.ladderPriceFlag == '0' || product.actStatus == 1">

+ 5 - 6
components/cu-custom.vue

@@ -1,13 +1,13 @@
 <template name="headerNavbar">
 	<!-- 自定义导航栏 -->
 	<view class='navbar-wrap' :style="{height:CustomBar+'px',paddingTop:StatusBar+'px'}"> 
-	  	<view class="navbar-text" :style="{lineHeight:(CustomBar - StatusBar)+'px;',fontSize:fontSizeSetting+'px;',paddingLeft:navbarData.textLeft ? 18+'rpx' : ''}" :class="platformClass">
+	  	<view class="navbar-text" :style="{lineHeight:(CustomBar - StatusBar)+'px;',fontSize:fontSizeSetting+'px;',paddingLeft:navbarData.textLeft ? capsule.height+'px' : ''}" :class="platformClass">
 	    	{{navbarData.title ? navbarData.title : " "}}
 	  	</view>
 	  	<view class="navbar-icon" v-if="navbarData.showCapsule == 1 ? true : false" 
 			  :style="{top:capsule.top +'px;',left:((screenWidth-capsule.right)+5)+'px;',height:capsule.height+'px;',lineHeight:capsule.height+'px;'}">
-			  <text v-if="haveBack" @tap="BackPage" class="iconfont icon-fanhui"></text>
-			  <text v-else @tap="_goHome" class="iconfont icon-shouyeyong"></text>
+			  <text v-if="navbarData.haveBack" @tap="BackPage" class="iconfont icon-fanhui"></text>
+			  <text v-else @tap="_goHome" class="iconfont icon-shouye"></text>
 	  	</view>
 		<view class="navbar-icon" v-if="navbarData.showSearch == 1 ? true : false"
 			  :style="{top:capsule.top+'px;',right:(capsule.width)+'px;',height:capsule.height+'px;',lineHeight:capsule.height+'px;'}">
@@ -27,7 +27,6 @@
 		},
 		data() {
 			return{
-				haveBack: true,// 是否有返回按钮,true 有 false 没有 若从分享页进入则为 false
 				CustomBar:this.CustomBar,// 顶部导航栏高度
 				StatusBar: this.StatusBar,
 				fontSizeSetting:this.fontSizeSetting,
@@ -38,9 +37,9 @@
 		},
 		created() {
 			if (getCurrentPages().length === 1) { // 当只有一个页面时
-			      this.haveBack = false;
+			      this.navbarData.haveBack = false;
 			} else {
-			      this.haveBack = true;
+			      this.navbarData.haveBack = true;
 			}
 		},
 		onLoad(){

+ 296 - 0
components/keyboard-package/keyboard-package.vue

@@ -0,0 +1,296 @@
+<template>
+	<uni-popup :custom="true" type="bottom" ref="keyboardPackage">
+		<view class="keyboardbox">
+			<view class="numkeyboard" v-if="type==='number'">
+				<view class="num-area">
+					<view class="row" v-for="(item,index) in numKeybordList" :key="index">
+						<view :class="['item',ite===0?'z':'',(disableDot && ite==='.')?'disabled':'']" v-for="(ite,idx) in item"
+						 hover-class="active" :hover-start-time="0" :hover-stay-time="5" :key="idx" @tap="input(ite)">{{ite}}</view>
+					</view>
+				</view>
+				<view class="btn-area">
+					<view :class="['item','del']" hover-class="active" :hover-start-time="0" :hover-stay-time="5" @tap="deleteVal">
+						删除
+					</view>
+					<view class="confirem item" hover-class="active" :hover-start-time="0" :hover-stay-time="5" @tap="confirm">
+						完成
+					</view>
+				</view>
+			</view>
+
+			<view class="numkeyboard" v-if="type==='idCard'">
+				<view class="num-area">
+					<view class="row" v-for="(item,index) in idCardList" :key="index">
+						<view :class="['item',ite===0?'z':'',(disableDot && ite==='.')?'disabled':'']" v-for="(ite,idx) in item"
+						 hover-class="active" :hover-start-time="0" :hover-stay-time="5" :key="idx" @tap="input(ite)">{{ite}}</view>
+					</view>
+				</view>
+				<view class="btn-area">
+					<view :class="['item','del']" hover-class="active" :hover-start-time="0" :hover-stay-time="5" @tap="deleteVal">
+						删除
+					</view>
+					<view class="confirem item" hover-class="active" :hover-start-time="0" :hover-stay-time="5" @tap="confirm">
+						完成
+					</view>
+				</view>
+			</view>
+
+			<view class="platenumber" v-if="type==='plateNumber'">
+				<view class="header">
+					<view @tap="active=active===1?2:1" hover-class="active" :hover-start-time="0" :hover-stay-time="5">{{active===1?'地区':'车牌号'}}</view>
+					<view hover-class="active" :hover-start-time="0" :hover-stay-time="5" @tap="confirm">完成</view>
+				</view>
+				<view class="main">
+					<view class="normal" v-if="active===1">
+						<view class="row" v-for="(item,index) in EngKeyBoardList" :key="index">
+							<view class="item" v-for="(ite,idx) in item" :key="idx" hover-class="active" :hover-start-time="0" :hover-stay-time="5" @tap="input(ite)">
+								{{ite}}
+							</view>
+							<view class="item img" v-if="index===EngKeyBoardList.length-1" hover-class="active" :hover-start-time="0" :hover-stay-time="5" @tap="deleteVal">
+								<image src="/static/delete.png" mode=""></image>
+							</view>
+						</view>
+					</view>
+					<view class="area" v-if="active===2">
+						<view class="row" v-for="(item,index) in areaList" :key="index">
+							<view class="item" v-for="(ite,idx) in item" :key="idx" hover-class="active" :hover-start-time="0" :hover-stay-time="5" @tap="input(ite)">
+								{{ite}}
+							</view>
+							<view class="item img" v-if="index===EngKeyBoardList.length-1" hover-class="active" :hover-start-time="0" :hover-stay-time="5" @tap="deleteVal">
+								<image src="/static/delete.png" mode=""></image>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="safe-area" v-if="safeAreaInsetBottom"></view>
+	</uni-popup>
+</template>
+
+<script>
+	import uniPopup from "@/components/uni-popup/uni-popup.vue"
+	export default {
+		components: {
+			uniPopup
+		},
+		props: {
+			type: {
+				type: String,
+				default: 'number'
+			},
+			safeAreaInsetBottom: { //是否设置安全区
+				type: Boolean,
+				default: false
+			},
+			disableDot: { //数字键盘是否禁止点击.仅type为number生效
+				type: Boolean,
+				default: false
+			}
+		},
+		data() {
+			return {
+				numKeybordList: [
+					[1, 2, 3],
+					[4, 5, 6],
+					[7, 8, 9],
+					[0, '.']
+				],
+				idCardList: [
+					[1, 2, 3],
+					[4, 5, 6],
+					[7, 8, 9],
+					[0, 'X']
+				],
+				areaList: [
+					['京', '沪', '粤', '津', '冀', '豫', '云', '辽', '黑', '湘'],
+					['皖', '鲁', '苏', '浙', '赣', '鄂', '桂', '甘', '晋', '陕'],
+					['蒙', '吉', '闽', '贵', '渝', '川', '青', '琼', '宁'],
+					['藏', '新', '使', '港', '澳', '学']
+				],
+				EngKeyBoardList: [
+					[1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
+					['Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P'],
+					['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L'],
+					['Z', 'X', 'C', 'V', 'B', 'N', 'M']
+				],
+				active: 1
+			};
+		},
+		methods: {
+			open() {
+				this.$refs.keyboardPackage.open();
+			},
+			confirm() {
+				this.close();
+				this.$emit('onConfirm');
+			},
+			deleteVal() {
+				this.$emit('onDelete');
+			},
+			input(val) {
+				if (val === '.' && this.disableDot) return;
+				this.$emit('onInput', val);
+			},
+			close() {
+				this.$refs.keyboardPackage.close();
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.keyboardbox {
+		background-color: #FFFFFF;
+
+		.numkeyboard {
+			height: 432rpx;
+			display: flex;
+			background-color: #ebedf0;
+
+			.btn-area {
+				width: 180rpx;
+				height: 100%;
+				display: flex;
+				flex-direction: column;
+
+				.item {
+					width: 100%;
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					flex-grow: 1;
+				}
+
+				.del {
+					background-color: #ebedf0;
+					color: #333;
+
+					&.active {
+						background-color: #f1f3f5;
+					}
+				}
+
+				.confirem {
+					background: linear-gradient(151deg,rgba(255,154,22,1) 0%,rgba(235,109,22,1) 66%,rgba(225,86,22,1) 100%);
+					color: #FFFFFF;
+
+					&.active {
+						background-color: #0570db;
+					}
+				}
+			}
+
+			.num-area {
+				flex-grow: 1;
+				display: flex;
+				flex-wrap: wrap;
+
+				.row {
+					width: 100%;
+					height: 25%;
+					display: flex;
+					margin-top: 1px;
+
+					.item {
+						flex-grow: 1;
+						height: 100%;
+						display: flex;
+						justify-content: center;
+						align-items: center;
+						background-color: #FFFFFF;
+						border-right: 1px solid #ebedf0;
+						width: 33.33%;
+						
+						&.active {
+							background-color: #ebedf0;
+						}
+
+						&.z {
+							flex-grow: 2;
+							width: 66.66%;
+						}
+
+						&.disabled {
+							background: #FFFFFF;
+							color: #B9B9B9;
+						}
+					}
+				}
+
+			}
+		}
+	}
+
+	.safe-area {
+		padding-bottom: 0rpx;
+		padding-bottom: constant(safe-area-inset-bottom);
+		padding-bottom: env(safe-area-inset-bottom);
+	}
+
+	.platenumber {
+		background-color: #f5f5f5;
+
+		.header {
+			height: 76rpx;
+			background-color: #FFFFFF;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			font-size: 28rpx;
+			border-top: 1px solid #f5f5f5;
+
+			&>view {
+				padding: 0 45rpx;
+				color: #00a7ea;
+				height: 100%;
+				display: flex;
+				align-items: center;
+				&.active {
+					background-color: #ebedf0;
+				}
+			}
+		}
+
+		.main {
+			height: 435rpx;
+
+			.row {
+				margin: 13rpx 0;
+				display: flex;
+				justify-content: center;
+				align-items: center;
+
+				.item {
+					width: 56rpx;
+					height: 94rpx;
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					background-color: #FFFFFF;
+					border-radius: 6rpx;
+					margin: 0 7rpx;
+					font-size: 24rpx;
+					&.active {
+						background-color: #ebedf0;
+					}
+
+					&.img {
+						background-color: #c2cacc;
+						width: 94rpx;
+
+						&.active {
+							background-color: #ddd;
+						}
+
+						&>image {
+							width: 49rpx;
+							height: 48rpx;
+						}
+					}
+				}
+			}
+
+		}
+	}
+</style>

+ 266 - 0
components/keyboard/keyboard.vue

@@ -0,0 +1,266 @@
+<template>
+  <view class="modal" :animation="animationData1" @touchmove.stop.prevent>
+    <view class=" content-wrap" :animation="animationData2">
+      <view class="content-header">
+        <view class="cancel-btn" @click="close">取消</view>
+        <view class="input-contant">{{ inputValue.join("") }}</view>
+        <view class="confirm-btn" @click="confirm">完成</view>
+      </view>
+      <view class="key-box">
+        <view
+          :class="{
+            'handel-btn': ['.', '删除', ''].includes(item),
+            'active-btn': activeKey === item,
+            'active-handel-btn':
+              activeKey === item && ['.', '删除'].includes(item),
+          }"
+          v-for="(item, index) in keyboardList"
+          :key="index"
+          @click="setValue(item)"
+          >{{ item }}</view
+        >
+      </view>
+    </view>
+  </view>
+</template>
+<script>
+export default {
+  data() {
+    return {
+      animationData1: {},
+      animationData2: {},
+      activeKey: "",
+      inputValue: [],
+    };
+  },
+  props: {
+    visible: {
+      type: Boolean,
+      default: false,
+    },
+    //是否为带小数的数字键盘
+    decimals: {
+      type: Boolean,
+      default: true,
+    },
+    //小数点前整数的位数
+    maxLength: {
+      type: [Number, String],
+      default: 9,
+    },
+    //小数点后的位数
+    pointLength: {
+      type: [Number, String],
+      default: 2,
+    },
+    //最大的值
+    max: {
+      type: [Number, String],
+      default: 999999999,
+    },
+    //最小的值
+    min: {
+      type: [Number, String],
+      default: 0,
+    },
+  },
+  computed: {
+    keyboardList() {
+      return this.decimals
+        ? ["1", "2", "3", "4", "5", "6", "7", "8", "9", ".", "0", "删除"]
+        : ["1", "2", "3", "4", "5", "6", "7", "8", "9", "", "0", "删除"];
+    },
+  },
+  watch: {
+    visible(val) {
+      this.inputValue = [];
+      if (val) this.enterAnimate();
+      else this.leaveAnimate();
+    },
+  },
+  methods: {
+    setValue(data) {
+      this.activeKey = data;
+      let timer = setTimeout(() => {
+        this.activeKey = "-";
+        clearTimeout(timer);
+      }, 100);
+
+      if (
+        !data ||
+        (data !== "删除" &&
+          this.inputValue.includes(".") &&
+          this.inputValue.join("").split(".")[1].length === this.pointLength)
+      )
+        return false;
+
+      if (
+        this.inputValue.length === 1 &&
+        this.inputValue[0] === "0" &&
+        !["删除", "."].includes(data)
+      ) {
+        return (this.inputValue = [data]);
+      }
+
+      if (data !== "删除") {
+        if (this.inputValue.includes(".")) {
+          if (
+            this.inputValue.join("").split(".")[0].length === this.maxLength
+          ) {
+            return false;
+          }
+        } else if (this.inputValue.length === this.maxLength) {
+          return false;
+        }
+      }
+
+      if (data === "删除") {
+        return this.inputValue.length && this.inputValue.pop();
+      }
+      if (data === ".") {
+        if (!this.inputValue.length || this.inputValue.includes("."))
+          return false;
+      }
+      this.inputValue.push(data);
+    },
+    close() {
+      this.$emit("update:visible", false);
+      this.$emit("close");
+    },
+    confirm() {
+      let result = Number(this.inputValue.join(""));
+      if (result < this.min) {
+        uni.showToast({
+          title: `最小值为${this.min}`,
+          duration: 1500,
+          icon: "none",
+        });
+        return;
+      } else if (result > this.max) {
+        uni.showToast({
+          title: `最大值为${this.max}`,
+          duration: 1500,
+          icon: "none",
+        });
+        return;
+      }
+      this.$emit("confirm", result);
+      this.close();
+    },
+    enterAnimate() {
+      this.animation1 = uni.createAnimation();
+      this.animation2 = uni.createAnimation();
+      this.animation1.backgroundColor("rgba(0,0,0,0.5)").step({
+        duration: 500,
+        timingFunction: "ease",
+      });
+      this.animation2.translateY(0).step({
+        timingFunction: "ease-out",
+        duration: 500,
+      });
+      this.animationData1 = this.animation1.export();
+      this.animationData2 = this.animation2.export();
+    },
+    leaveAnimate() {
+      this.animation1 = uni.createAnimation();
+      this.animation2 = uni.createAnimation();
+      this.animation1.backgroundColor("rgba(0,0,0,0)").step({
+        duration: 500,
+        timingFunction: "ease",
+      });
+      this.animation2.translateY(500).step({
+        timingFunction: "ease-out",
+        duration: 500,
+      });
+      this.animationData1 = this.animation1.export();
+      this.animationData2 = this.animation2.export();
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.modal {
+  position: fixed;
+  bottom: 0;
+  width: 100%;
+  background: rgba(0, 0, 0, 0);
+  z-index: 9999;
+
+  .content-wrap {
+    position: fixed;
+    bottom: 0;
+    left: 0;
+    width: 100%;
+    background: #fff;
+    box-sizing: border-box;
+    transform: translateY(100%);
+
+    .content-header {
+      width: 100%;
+      height: 80upx;
+      background: rgba(255, 255, 255, 1);
+      float: right;
+
+      .input-contant {
+        text-align: center;
+        line-height: 80upx;
+        font-size: 40upx;
+      }
+
+      .cancel-btn {
+        padding-left: 30upx;
+        color: #147ff2;
+        line-height: 80upx;
+        position: absolute;
+        top: 0;
+        left: 0;
+      }
+
+      .confirm-btn {
+        padding-right: 30upx;
+        color: #147ff2;
+        line-height: 80upx;
+        position: absolute;
+        top: 0;
+        right: 0;
+      }
+    }
+
+    .key-box {
+      margin-top: 60upx;
+      display: flex;
+      flex-flow: wrap;
+      width: 100%;
+
+      view {
+        width: 251upx;
+        height: 100upx;
+        border: 1upx solid rgb(235, 237, 240);
+        box-sizing: border-box;
+        text-align: center;
+        line-height: 100upx;
+        font-size: 40upx;
+        font-weight: bold;
+        margin: 0 -1upx -1upx 0;
+
+        &:hover {
+          z-index: 1;
+          border: 1upx solid rgb(235, 237, 240);
+        }
+      }
+
+      .handel-btn {
+        background: rgb(235, 237, 240);
+        font-size: 30upx;
+      }
+      .active-btn {
+        background: rgb(235, 237, 240);
+      }
+      .active-handel-btn {
+        background: rgb(252, 252, 252);
+      }
+    }
+  }
+}
+</style>

+ 187 - 0
components/uni-popup/uni-popup.vue

@@ -0,0 +1,187 @@
+<template>
+	<view v-if="showPopup" class="uni-popup">
+		<view :class="[ani, animation ? 'ani' : '', !custom ? 'uni-custom' : '']" class="uni-popup__mask" @click="close(true)" />
+		<view :class="[type, ani, animation ? 'ani' : '', !custom ? 'uni-custom' : '']" class="uni-popup__wrapper" @click="close(true)">
+			<view class="uni-popup__wrapper-box" @click.stop="clear">
+				<slot />
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: 'UniPopup',
+		props: {
+			// 开启动画
+			animation: {
+				type: Boolean,
+				default: true
+			},
+			// 弹出层类型,可选值,top: 顶部弹出层;bottom:底部弹出层;center:全屏弹出层
+			type: {
+				type: String,
+				default: 'center'
+			},
+			// 是否开启自定义
+			custom: {
+				type: Boolean,
+				default: false
+			},
+			// maskClick
+			maskClick: {
+				type: Boolean,
+				default: true
+			},
+			show: {
+				type: Boolean,
+				default: true
+			}
+		},
+		data() {
+			return {
+				ani: '',
+				showPopup: false
+			}
+		},
+		watch: {
+			show(newValue) {
+				if (newValue) {
+					this.open()
+				} else {
+					this.close()
+				}
+			}
+		},
+		created() {},
+		methods: {
+			clear() {},
+			open() {
+				this.$emit('change', {
+					show: true
+				})
+				this.showPopup = true
+				this.$nextTick(() => {
+					setTimeout(() => {
+						this.ani = 'uni-' + this.type
+					}, 30)
+				})
+			},
+			close(type) {
+				if (!this.maskClick && type) return
+				this.$emit('change', {
+					show: false
+				})
+				this.ani = ''
+				this.$nextTick(() => {
+					setTimeout(() => {
+						this.showPopup = false
+					}, 300)
+				})
+			}
+		}
+	}
+</script>
+<style>
+	@charset "UTF-8";
+
+	.uni-popup {
+		position: fixed;
+		top: 0;
+		top: 0;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		z-index: 99999;
+		overflow: hidden
+	}
+
+	.uni-popup__mask {
+		position: absolute;
+		top: 0;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		z-index: 998;
+		/* background: rgba(0, 0, 0, .4); */
+		opacity: 0
+	}
+
+	.uni-popup__mask.ani {
+		transition: all .3s
+	}
+
+	.uni-popup__mask.uni-bottom,
+	.uni-popup__mask.uni-center,
+	.uni-popup__mask.uni-top {
+		opacity: 1
+	}
+
+	.uni-popup__wrapper {
+		position: absolute;
+		z-index: 999;
+		box-sizing: border-box
+	}
+
+	.uni-popup__wrapper.ani {
+		transition: all .3s
+	}
+
+	.uni-popup__wrapper.top {
+		top: 0;
+		left: 0;
+		width: 100%;
+		transform: translateY(-100%)
+	}
+
+	.uni-popup__wrapper.bottom {
+		bottom: 0;
+		left: 0;
+		width: 100%;
+		transform: translateY(100%)
+	}
+
+	.uni-popup__wrapper.center {
+		width: 100%;
+		height: 100%;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		transform: scale(1.2);
+		opacity: 0
+	}
+
+	.uni-popup__wrapper-box {
+		position: relative;
+		box-sizing: border-box
+	}
+
+	.uni-popup__wrapper.uni-custom .uni-popup__wrapper-box {
+		padding: 30upx;
+		background: #fff
+	}
+
+	.uni-popup__wrapper.uni-custom.center .uni-popup__wrapper-box {
+		position: relative;
+		max-width: 80%;
+		max-height: 80%;
+		overflow-y: scroll
+	}
+
+	.uni-popup__wrapper.uni-custom.bottom .uni-popup__wrapper-box,
+	.uni-popup__wrapper.uni-custom.top .uni-popup__wrapper-box {
+		width: 100%;
+		max-height: 500px;
+		overflow-y: scroll
+	}
+
+	.uni-popup__wrapper.uni-bottom,
+	.uni-popup__wrapper.uni-top {
+		transform: translateY(0)
+	}
+
+	.uni-popup__wrapper.uni-center {
+		transform: scale(1);
+		opacity: 1
+	}
+</style>

+ 18 - 0
pages.json

@@ -114,8 +114,26 @@
 			"style": {
 				"navigationBarTitleText": "确认订单"			
 			}
+		},{
+			"path": "pages/user/order/success",
+			"style": {
+				"navigationBarTitleText": "收银台",
+				"navigationStyle":"custom"
+			}
+		},{
+			"path": "pages/user/order/order-payment",
+			"style": {
+				"navigationBarTitleText": "选择支付方式",
+				"navigationStyle":"custom"
+			}
 		},{
 			"path": "pages/user/order/order-cashier",
+			"style": {
+				"navigationBarTitleText": "支付结果",
+				"navigationStyle":"custom"
+			}
+		},{
+			"path": "pages/user/order/order-pay",
 			"style": {
 				"navigationBarTitleText": "收银台",
 				"navigationStyle":"custom"

+ 1 - 1
pages/login/apply.vue

@@ -180,7 +180,7 @@
 				</view>
 				<view class="register-from group btn" v-show="isShowAustomItem">
 					<view class="content-class btn">
-						<input class="row-input other" type="text" v-model="customItemValue" placeholder="请输入自定义项目"  @blur="onBlurInput" maxlength="5"/>
+						<input class="row-input other" type="text" v-model="customItemValue" placeholder="请输入自定义项目"  @input="onBlurInput" maxlength="5"/>
 						<button type="default" 
 								class="confirm-btn" 
 								:class="[isDisabled === true ? 'disabled' : 'none']" 

+ 1 - 1
pages/login/information.vue

@@ -152,7 +152,7 @@
 				</view>
 				<view class="register-from group btn" v-show="isShowAustomItem">
 					<view class="content-class btn">
-						<input class="row-input other" type="text" v-model="customItemValue" placeholder="请输入自定义项目"  @blur="onBlurInput" maxlength="5"/>
+						<input class="row-input other" type="text" v-model="customItemValue" placeholder="请输入自定义项目"  @input="onBlurInput" maxlength="5"/>
 						<button type="default" 
 								class="confirm-btn" 
 								:class="[isDisabled ? 'disabled' : 'none']" 

+ 1 - 1
pages/login/register.vue

@@ -230,7 +230,7 @@
 				</view>
 				<view class="register-from group btn" v-show="isShowAustomItem">
 					<view class="content-class btn">
-						<input class="row-input other" type="text" v-model="customItemValue" placeholder="请输入自定义项目"  @blur="onBlurInput" maxlength="5"/>
+						<input class="row-input other" type="text" v-model="customItemValue" placeholder="请输入自定义项目"  @input="onBlurInput" maxlength="5"/>
 						<button type="default" 
 								class="confirm-btn" 
 								:class="[isDisabled === true ? 'disabled' : 'none']" 

+ 3 - 4
pages/user/order/create-order.vue

@@ -268,7 +268,7 @@
 					if(response.code === 1){
 						this.submitState ='success'
 						let data = {orderID:response.data.orderID}
-						this.$api.navigateTo(`/pages/user/order/order-cashier?type=${this.submitState}&data=${JSON.stringify({data:data})}`)
+						this.$api.navigateTo(`/pages/user/order/success?data=${JSON.stringify({data:data})}`)
 					}else if(response.code === 2){
 						this.submitState ='nosuccess'
 						let data = {
@@ -276,8 +276,8 @@
 								orderNo:response.data.orderNo,
 								orderMark:response.data.orderMark,
 								payableAmount:response.data.payableAmount
-						}
-						this.$api.navigateTo(`/pages/user/order/order-cashier?type=${this.submitState}&data=${JSON.stringify({data:data})}`)
+							}
+						this.$api.redirectTo(`/pages/user/order/order-payment?type=${this.submitState}&data=${JSON.stringify({data:data})}`)
 					}else{
 						this.$util.msg(response.msg,2000);
 					}
@@ -289,7 +289,6 @@
 			hideFreight(){//关闭邮费弹窗
 				this.isfreightTip = false;
 			},
-			
 		},
 		onShow() {
 			// this.addressID = ''		

+ 1 - 1
pages/user/order/order-cashier.vue

@@ -5,7 +5,7 @@
 			<view class="container-wrapper">
 				<view v-if="isSuccess" class="cashier-wrapper-empty" :style="{height:emptyWrapperH+'px'}">
 					<image class="cashier-wrapper-empty-image" src="https://img.caimei365.com/group1/M00/03/81/Cmis214BwaGANmv9AAE432FGJ5Q324.png"></image>
-					<view class="txt">订单提交成功</view>
+					<view class="txt">订单提交并支付成功</view>
 				</view>
 				<view v-else class="cashier-wrapper">
 					<image src="https://img.caimei365.com/group1/M00/03/95/Cmis216Sk_SAKGNWAAEaFsvZ8c0647.png" mode=""></image>

+ 3 - 0
pages/user/order/order-list.vue

@@ -303,6 +303,9 @@
 					case 'confirm':
 						this.handOrderConfirm(data.orderId);
 						break
+					case 'pay':
+						this.$api.navigateTo('/pages/user/order/order-pay?orderID='+data.orderId)
+						break
 					case 'confirmation':
 						this.handOrderConfirmation(data.orderId);
 						break

+ 469 - 0
pages/user/order/order-pay.vue

@@ -0,0 +1,469 @@
+<template>
+	<view class="container cashier">
+		<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">¥{{payableAmount.toFixed(2)}}</text>
+						</view>
+						<view class="pay-paid">
+							<text class="txt-m">已支付金额</text>
+							<text class="txt-b">¥{{receiptAmount.toFixed(2)}}</text>
+						</view>
+					</view>
+					<view class="pay-bot">
+						<view class="bot-title"><text>本次支付金额</text></view>
+						<view class="bot-input">
+							<text>¥</text>
+							<view class="input" @tap="openKeyBoard('idCard')">
+								<text class="text" v-if="passStr>0">{{passStr}}</text>
+								<text class="none" v-else>输入金额不能大于待付金额</text>
+							</view>
+			<!-- 				<input class="" 
+								   type="button" 
+								   value="" 
+								   @focus="focusInput"  
+								   @input="inputMoney" 
+								   @blur="blurInput" 
+								   v-model="" 
+								   placeholder="" maxlength="10"/> -->
+						</view>
+						<view class="bot-resid">
+							<text>订单剩余¥{{balanceAmount.toFixed(2)}}</text>
+						</view>
+					</view>
+				</view>
+				<view class="pay-record">
+					<view class="record-title"><text>支付记录</text></view>
+					<view class="record-list">
+						<view class="list-main" v-if="discernReceipt.length>0">
+							<view class="list-item" v-for="(item,index) in discernReceipt" :key="index">
+								<text class="text row-1">¥{{item.receiptAmount}}</text>
+								<text class="text row-2">{{payTypeText(item.payType)}}</text>
+								<text class="text row-3">{{item.receiptDate}}</text>
+							</view>
+						</view>
+						<view class="list-none" v-else>暂无支付记录</view>
+					</view>
+				</view>
+			</view>
+			<view class="pay-button">
+				<view class="btn" @click.stop="MiniWxPayFor">{{buttonText}}</view>
+			</view>
+		</view>
+		<view class="alert spec" :class="specClass" v-if="isShowTip">
+			<!-- 选择支付弹窗说明 -->
+			<view class="freight-alert"  @tap="hideTips">
+				<view class="content">
+					<view class="title">
+						<text>提示</text>
+						<text class="iconfont icon-iconfontguanbi" @click.stop="hideTips"></text>
+					</view>
+					<view class="text-content">
+						<view class="text">除了以下两种支付方式,您还可以通过线下直接转账的方式付款。获取转账信息请联系您的采美销售人员或直接拨打客服热线。</view>
+						<view class="text-p">客服热线:</view>
+						<view class="text-p">0755-22907771 / 15338851365</view>
+						<view class="text-p">(周一至周五 09:00-18:00)</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<!-- 数字键盘 -->
+		<keyboard-package ref="idCard" type="number"  @onInput="onInput" @onDelete="onDelete" @onConfirm="onConfirm"/>
+	</view>
+</template>
+
+<script>
+	import authorize from '@/common/config/authorize.js'
+	import keyboardPackage from "@/components/keyboard-package/keyboard-package.vue"
+	import { PayOrderCheckoutCounter,WeChatMiniWxPay } from "@/api/order.js"
+	export default{
+		components:{
+			keyboardPackage
+		}, 
+		data(){
+			return{
+				orderID:'',
+				payableAmount:0,
+				receiptAmount:0,
+				balanceAmount:0,
+				payAmount:0,
+				nvabarData: {		//顶部自定义导航
+					haveBack:true,
+					showCapsule:1, // 是否显示左上角图标  1表示显示  0表示不显示,
+					showSearch: 0,
+					title: '收银台',  // 导航栏 中间的标题
+					textLeft:true
+				},
+				idCardList:[],
+				isIphoneX:this.$store.state.isIphoneX,
+				CustomBar:this.CustomBar,// 顶部导航栏高度
+				tabCurrentIndex:0,
+				isShowTip:false,
+				buttonText:'去支付',
+				discernReceipt:[],
+				type:'number'
+			}
+		},
+		onLoad(option) {
+			this.initData(option)
+			
+		},
+		computed:{
+			passStr(){
+				let str='';
+				this.idCardList.forEach(item=>{
+					str+=item.toString();
+				})
+				return str;
+			}
+		},
+		methods:{
+			initData(e){
+				this.orderID = e.orderID
+				PayOrderCheckoutCounter({orderId:this.orderID}).then(response =>{
+					console.log(response)
+					this.discernReceipt = response.data.discernReceipt 		//支付记录
+					this.receiptAmount = response.data.order.receiptAmount  //已付金额
+					this.payableAmount = response.data.order.payableAmount - this.receiptAmount  //待付金额
+					this.payAmount = this.payableAmount.toFixed(2)	//自定义金额
+					this.balanceAmount = this.payableAmount - this.payAmount// 计算剩余支付金额
+				}).catch(error =>{
+					this.$util.msg(error.msg,2000)
+				})
+			},
+			MiniWxPayFor(){
+				let self = this
+				authorize.getCode('weixin').then(wechatcode =>{
+					if(this.payAmount == 0){
+						this.$util.msg("请输入本次支付的金额",2000)
+						return
+					}
+					let params ={
+							payAmount:this.payAmount*100,
+							payWay:"WEIXIN",
+							payType:"MINIAPP_WEIXIN",
+							code:wechatcode,
+							orderId:this.orderID
+						}
+					WeChatMiniWxPay(params).then(response =>{
+						let PayInfo = JSON.parse(response.data.data.payInfo);
+						uni.setStorageSync('payInfo',PayInfo)
+						console.log(PayInfo)
+						wx.requestPayment({
+							'timeStamp': PayInfo.timeStamp,
+							'nonceStr': PayInfo.nonceStr,
+							'package': PayInfo.package,
+							'signType': PayInfo.signType,
+							'paySign': PayInfo.paySign,
+							'success':function(res){
+								console.log('支付成功');
+								this.$api.redirectTo('/pages/user/order/order-details?orderID='+this.orderID)
+							},
+							'fail':function(res){
+								self.$util.msg('支付失败')
+							},
+							'complete':function(res){
+								
+							}
+						})
+					}).catch(error =>{
+						this.$util.msg(error.msg,2000)
+					})
+				})
+				
+			},
+			openKeyBoard(key) {
+				this.type=key;
+				this.$refs[key].open();
+			},
+			onInput(val){
+				switch(this.type){
+					case 'idCard':
+						this.idCardList.push(val);
+						break;
+				}
+			},
+			onDelete(){
+				switch (this.type){
+					case 'idCard':
+						this.idCardList.pop();
+						break;
+				}
+			},
+			onConfirm(){
+				uni.showToast({
+					title:'完成输入!',
+					duration:2000,
+					icon:'none'
+				})
+			},
+			close(){
+				this.$refs[this.type].close();
+			},
+			chechValue(value){
+				console.log(parseInt(value))
+				if(value == 0){
+					this.payAmount = 0
+					this.balanceAmount = this.payableAmount
+				}else if(parseInt(value)>this.payableAmount){
+					this.payAmount = this.payableAmount
+					this.balanceAmount = this.payableAmount - this.payAmount
+				}else{
+					this.payAmount = value
+					this.balanceAmount = this.payableAmount - this.payAmount
+				}
+			},
+			hanldNavigateBack(){
+				uni.navigateBack({
+					delta: 1
+				});
+			},
+			payTypeText (state){
+				let stateText = '',
+					stateTextObject={
+						12:'PC-B2B网银',
+						13:'PC-微信支付',
+						14:'PC-支付宝',
+						15:'小程序-微信支付',
+						16:'余额抵扣',
+					}
+				Object.keys(stateTextObject).forEach(key => {
+					if(key == state){
+						stateText = stateTextObject[key]
+					}
+				})
+				return stateText;
+			},
+		},
+		onShow() {
+			
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{height: auto !important;background-color: #F7F7F7;}
+	.container-cash{
+		width: 100%;
+		.container-wrapper{
+			width:100%;
+			margin: 0 auto;
+			.pay-content{
+				width: 662rpx;
+				height: 512rpx;
+				padding: 48rpx 44rpx;
+				background: url(https://admin-b.caimei365.com/userfiles/1/images/photo/2020/05/%E6%94%B6%E9%93%B6%E5%8F%B0bg%402x.png) no-repeat;
+				background-size: cover;
+				float: left;
+				.pay-top{
+					width: 100%;
+					height: auto;
+					.pay-paid{
+						width: 100%;
+						height: auto;
+						margin-bottom: 38rpx;
+						text{
+							display: inline-block;
+							line-height: 48rpx;
+							text-align: left;
+							color: #FFFFFF;
+							width: 100%;
+						}
+						.txt-m{
+							font-size: $font-size-26;
+							opacity: 0.7;
+						}
+						.txt-b{
+							font-size: $font-size-32;
+						}
+					}
+				}
+				.pay-bot{
+					width: 614rpx;
+					height: 184rpx;
+					padding: 24rpx;
+					background: #FFFFFF;
+					border-radius: 10rpx;
+					.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-28;
+							width: 500rpx;
+							height: 66rpx;
+							padding: 0 10rpx;
+							line-height: 66rpx;
+							float: left;
+							.none{
+								color:$text-color;
+								opacity: 0.3;
+							}
+							.text{
+								color:$text-color;
+							}
+						}
+					}
+					.bot-resid{
+						line-height: 36rpx;
+						font-size: $font-size-26;
+						color: #666666;
+						margin-top: 24rpx;
+					}
+				}
+			}
+			.pay-record{
+				float: left;
+				background: #FFFFFF;
+				width: 702rpx;
+				height: auto;
+				padding: 0 24rpx;
+				.record-title{
+					width: 100%;
+					float: left;
+					font-size: $font-size-28;
+					color: $text-color;
+					line-height: 80rpx;
+					height: 80rpx;
+					border-bottom: 1px solid #F8F8F8;
+				}
+				.record-list{
+					width: 100%;
+					height: auto;
+					float: left;
+					.list-none{
+						line-height: 80rpx;
+						font-size: $font-size-26;
+						color: #999999;
+						text-align: left;
+					}
+					.list-main{
+						height: auto;
+						display: flex;
+						flex-direction:column;
+						.list-item{
+							width: 100%;
+							height:80rpx;
+							display: flex;
+							flex: 1;
+							line-height: 80rpx;
+							font-size: $font-size-26;
+							color: $text-color;
+							.text{
+								&.row-1{
+									flex: 3;
+								}
+								&.row-2{
+									flex: 3;
+								}
+								&.row-3{
+									flex: 4;
+									text-align: right;
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+		.pay-button{
+			width: 100%;
+			position: fixed;
+			bottom: 40rpx;
+			.btn{
+				width: 702rpx;
+				height: 88rpx;
+				border-radius: 14rpx;
+				font-size: $font-size-28;
+				line-height: 88rpx;
+				color: #FFFFFF;
+				margin: 0 auto;
+				text-align: center;
+				background: $btn-confirm;
+			}
+		}
+	}
+	.freight-alert{
+		width: 100%;
+		height: 100%;
+		background: rgba(0,0,0,.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;
+					line-height: 44rpx;
+					font-size: $font-size-26;
+					color:#666666;
+					text-align: justify;
+				}
+				.text-p{
+					line-height: 44rpx;
+					font-size: $font-size-26;
+					color:$color-system;
+					text-align: left;
+				}
+			}
+		}
+	}
+</style>

+ 357 - 0
pages/user/order/order-payment.vue

@@ -0,0 +1,357 @@
+<template>
+	<view class="container cashier">
+		<cu-custom :navbar-data='nvabarData'></cu-custom>
+		<view class="container-cash clearfix" :style="{marginTop:CustomBar+'px'}">
+			<view class="container-wrapper">
+				<view class="pay-title">
+					<text>订单提交成功,请支付订单</text>
+				</view>
+				<view class="pay-content">
+					<view class="pay-p"><text>待付金额</text></view>
+					<view class="pay-money">
+						<text class="pay-sm">¥</text>
+						<text class="pay-bg">{{payableAmount}}</text>
+					</view>
+				</view>
+				<view class="pay-check">
+					<view class="check-title">
+						<view class="text">选择支付方式</view>
+						<view class="icon" @click="showTips">i</view>
+					</view>
+					<view class="pay-checked">
+						<view  class="pay-item" :class="{ 'current' : tabCurrentIndex === 0}"   @click="tabClick(0)" >
+							<view class="item-l">
+								<view class="item-icon"><text class="iconfont icon-weixinzhifu"></text></view>
+								<view class="item-texts"><text>微信支付</text></view>
+							</view>
+							<view class="item-r">
+								<text class="iconfont icon-gougou"></text>
+							</view>
+						</view>
+						<view  class="pay-item" :class="{ 'current' : tabCurrentIndex === 1}"   @click="tabClick(1)" >
+							<view class="item-l">
+								<view class="item-icon"><text class="iconfont icon-yinlianzhifu"></text></view>
+								<view class="item-text">
+									<view class="txt-p">企业网银支付</view>
+									<view class="txt-t">需要在电脑端汇款</view>
+								</view>
+							</view>
+							<view class="item-r">
+								<text class="iconfont icon-gougou"></text>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="pay-button">
+				<view class="btn" @click.stop="goOrderCash">{{buttonText}}</view>
+			</view>
+		</view>
+		<view class="alert spec" :class="specClass" v-if="isShowTip">
+			<!-- 选择支付弹窗说明 -->
+			<view class="freight-alert"  @tap="hideTips">
+				<view class="content">
+					<view class="title">
+						<text>提示</text>
+						<text class="iconfont icon-iconfontguanbi" @click.stop="hideTips"></text>
+					</view>
+					<view class="text-content">
+						<view class="text">除了以下两种支付方式,您还可以通过线下直接转账的方式付款。获取转账信息请联系您的采美销售人员或直接拨打客服热线。</view>
+						<view class="text-p">客服热线:</view>
+						<view class="text-p">0755-22907771 / 15338851365</view>
+						<view class="text-p">(周一至周五 09:00-18:00)</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		data(){
+			return{
+				orderID:'',
+				stateType:'',
+				payableAmount:0,
+				emptyWrapperH: '',
+				nvabarData: {		//顶部自定义导航
+					haveBack:false,
+					showCapsule:1, // 是否显示左上角图标  1表示显示  0表示不显示,
+					showSearch: 0,
+					title: '选择支付方式',  // 导航栏 中间的标题
+					textLeft:true
+				},
+				isIphoneX:this.$store.state.isIphoneX,
+				CustomBar:this.CustomBar,// 顶部导航栏高度
+				tabCurrentIndex:0,
+				isShowTip:false,
+				buttonText:'使用微信支付',
+			}
+		},
+		onLoad(option) {
+			this.initData(option)
+		},
+		methods:{
+			initData(e){
+				let data = JSON.parse(e.data);
+				console.log(data)
+				this.orderID = parseInt(data.data.orderID) 
+				this.payableAmount = data.data.payableAmount
+			},
+			goOrderCash(){
+				switch(this.tabCurrentIndex){
+					case 0:
+						this.$api.navigateTo(`/pages/user/order/order-pay?type=0&orderID=${this.orderID}`)
+						break;
+					case 1:
+						this.$api.navigateTo(`/pages/user/order/order-pay?type=1&orderID=${this.orderID}`)
+						break;
+				}
+			},
+			tabClick(index) {//tab切换
+				this.tabCurrentIndex = index;
+				switch(index){
+					case 0:
+						this.buttonText='使用微信支付';
+						break;
+					case 1:
+						this.buttonText='使用网银支付';
+						break;
+				}
+			},
+			showTips(){
+				this.isShowTip=true
+			},
+			hideTips(){
+				this.isShowTip=false
+			}
+		},
+		onShow() {
+			
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+		height: auto !important;
+	}
+	.container-cash{
+		width: 100%;
+		.container-wrapper{
+			width:662rpx;
+			margin: 0 auto;
+			.pay-title{
+				font-size: $font-size-32;
+				line-height: 44rpx;
+				text-align: center;
+				color: #2A86FF;
+				margin: 54rpx 0;
+				width: 100%;
+				float: left;
+			}
+			.pay-content{
+				width: 574rpx;
+				height: 136rpx;
+				padding: 52rpx 44rpx;
+				background: url(https://admin-b.caimei365.com/userfiles/1/images/photo/2020/05/%E4%BB%A3%E4%BB%98%E9%87%91%E9%A2%9Dbg%402x.png) no-repeat;
+				background-size: cover;
+				float: left;
+				margin-bottom: 40rpx;
+				.pay-p{
+					font-size: $font-size-26;
+					color: #FFFFFF;
+					line-height: 36rpx;
+				}
+				.pay-money{
+					color: #FFFFFF;
+					line-height: 84rpx;
+					font-weight: bold;
+					.pay-sm{
+						font-size: $font-size-26;
+					}
+					.pay-bg{
+						font-size: 50rpx;
+					}
+				}
+			}
+			.pay-check{
+				width: 100%;
+				height: auto;
+				float: left;
+				.check-title{
+					width: 622rpx;
+					height: 40rpx;
+					line-height: 40rpx;
+					padding: 0 20rpx;
+					margin-top: 24rpx;
+					.text{
+						font-size: $font-size-28;
+						color: $text-color;
+						text-align: left;
+						float: left;
+					}
+					.icon{
+						width: 40rpx;
+						height: 40rpx;
+						border-radius: 50%;
+						line-height: 40rpx;
+						text-align: center;
+						color: #FFFFFF;
+						font-size: $font-size-24;
+						background: radial-gradient(circle,rgba(225,86,22,1) 0%,rgba(255,170,0,1) 67%,rgba(249,185,156,1) 100%);
+						float: right;
+					}
+				}
+				.pay-checked{
+					width: 100%;
+					height: auto;
+					.pay-item{
+						width: 618rpx;
+						height: 96rpx;
+						border: 2px solid #F5F5F5;
+						border-radius: 30rpx;
+						padding: 20rpx;
+						margin: 24rpx 0;
+						display: flex;
+						&.current{
+							border-color:$color-system;
+							.item-r{
+								.icon-gougou{
+									color: $color-system;
+								}
+							}
+						}
+						.item-l{
+							flex: 8;
+							.item-icon{
+								width: 96rpx;
+								height: 96rpx;
+								float: left;
+								text-align: center;
+								line-height: 96rpx;
+								margin-right: 20rpx;
+								.iconfont{
+									font-size:88rpx;
+								}
+								.icon-weixinzhifu{
+									color: #09BB07;
+								}
+								.icon-yinlianzhifu{
+									color: #034582;
+								}
+							}
+							.item-texts{
+								line-height: 96rpx;
+								font-size:$font-size-26;
+								color: $text-color;
+							}
+							.item-text{
+								line-height: 48rpx;
+								font-size:$font-size-26;
+								.txt-p{
+									color: $text-color;
+								}
+								.txt-t{
+									color: #999999;
+								}
+							}
+						}
+						.item-r{
+							flex: 2;
+							text-align: right;
+							line-height: 96rpx;
+							.icon-gougou{
+								font-size: 66rpx;
+								color: #FFFFFF;
+							}
+						}
+					}
+				}
+			}
+		}
+		.pay-button{
+			width: 100%;
+			float: left;
+			margin-top: 100rpx;
+			.btn{
+				width: 662rpx;
+				height: 88rpx;
+				border-radius: 14rpx;
+				font-size: $font-size-28;
+				line-height: 88rpx;
+				color: #FFFFFF;
+				margin: 0 auto;
+				text-align: center;
+				background:$btn-confirm;
+			}
+		}
+	}
+	.freight-alert{
+		width: 100%;
+		height: 100%;
+		background: rgba(0,0,0,.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;
+					line-height: 44rpx;
+					font-size: $font-size-26;
+					color:#666666;
+					text-align: justify;
+				}
+				.text-p{
+					line-height: 44rpx;
+					font-size: $font-size-26;
+					color:$color-system;
+					text-align: left;
+				}
+			}
+		}
+	}
+</style>

+ 101 - 0
pages/user/order/success.vue

@@ -0,0 +1,101 @@
+<template>
+	<view class="container cashier">
+		<cu-custom :navbar-data='nvabarData'></cu-custom>
+		<view class="container-cash clearfix" :style="{marginTop:CustomBar+'px'}">
+			<view class="container-wrapper">
+				<view class="cash-icon">
+					<image src="https://admin-b.caimei365.com/userfiles/1/images/photo/2020/05/%E8%AE%A2%E5%8D%95%E6%94%AF%E4%BB%98%E6%88%90%E5%8A%9F%402x.png" mode=""></image>
+				</view>
+				<view class="cash-text">
+					<text>订单提交并支付成功</text>
+				</view>
+				<view class="cash-btn">
+					<view class="btn btn-open" @click="this.$api.navigateTo('/pages/user/order/order-details?type=confim&orderID='+orderID)">查看订单</view>
+					<view class="btn btn-home" @click="this.$api.switchTabTo('/pages/tabBar/home/home')">继续采购</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		data(){
+			return{
+				orderID:'',
+				nvabarData: {		//顶部自定义导航
+					haveBack:false,
+					showCapsule:1, // 是否显示左上角图标  1表示显示  0表示不显示,
+					showSearch: 0,
+					title: '收银台',  // 导航栏 中间的标题
+					textLeft:true
+				},
+				isIphoneX:this.$store.state.isIphoneX,
+				CustomBar:this.CustomBar,// 顶部导航栏高度
+				
+			}
+		},
+		onLoad(option) {
+			this.initData(option)
+		},
+		methods:{
+			initData(e){
+				let data = JSON.parse(e.data);
+				this.orderID = data.data.orderID
+			}
+		},
+		onShow() {
+			
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+		height: auto !important;
+	}
+	.container-cash{
+		width: 100%;
+		.container-wrapper{
+			width:662rpx;
+			margin: 0 auto;
+			margin-top: 120rpx;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			.cash-icon{
+				width: 348rpx;
+				height: 348rpx;
+				margin-top: 120rpx;
+				image{
+					width: 348rpx;
+					height: 348rpx;
+				}
+			}
+			.cash-text{
+				font-size: $font-size-40;
+				color: $color-system;
+				line-height: 104rpx;
+			}
+			.cash-btn{
+				margin-top: 120rpx;
+				.btn{
+					width: 256rpx;
+					height: 80rpx;
+					border-radius: 40rpx;
+					line-height: 80rpx;
+					text-align: center;
+					font-size: $font-size-26;
+					color: #FFFFFF;
+					margin: 12rpx 0;
+					&.btn-open{
+						background:linear-gradient(315deg,rgba(0,212,150,1) 0%,rgba(126,243,174,1) 100%);
+					}
+					&.btn-home{
+						background:$btn-confirm;
+					}
+				}
+			}
+		}
+	}
+</style>

+ 1 - 1
seller/pages/index/index.vue

@@ -52,7 +52,7 @@
 					showCapsule: 0, // 是否显示左上角图标  1表示显示  0表示不显示,
 					showSearch: 0,
 					title: '账户中心',  // 导航栏 中间的标题
-					textLeft:true
+					textLeft:false
 				},
 				isIphoneX:this.$store.state.isIphoneX,
 				CustomBar:this.CustomBar,// 顶部导航栏高度

+ 1 - 1
seller/pages/login/apply.vue

@@ -245,7 +245,7 @@
 				</view>
 				<view class="register-from group btn" v-show="isShowAustomItem">
 					<view class="content-class btn">
-						<input class="row-input other" type="text" v-model="customItemValue" placeholder="请输入自定义项目"  @blur="onBlurInput" maxlength="5"/>
+						<input class="row-input other" type="text" v-model="customItemValue" placeholder="请输入自定义项目"  @input="onBlurInput" maxlength="5"/>
 						<button type="default" 
 								class="confirm-btn" 
 								:class="[isDisabled === true ? 'disabled' : 'none']" 

+ 1 - 1
seller/pages/login/information.vue

@@ -225,7 +225,7 @@
 				</view>
 				<view class="register-from group btn" v-show="isShowAustomItem">
 					<view class="content-class btn">
-						<input class="row-input other" type="text" v-model="customItemValue" placeholder="请输入自定义项目"  @blur="onBlurInput" maxlength="5"/>
+						<input class="row-input other" type="text" v-model="customItemValue" placeholder="请输入自定义项目"  @input="onBlurInput" maxlength="5"/>
 						<button type="default" 
 								class="confirm-btn" 
 								:class="[isDisabled ? 'disabled' : 'none']" 

+ 1 - 1
seller/pages/login/register.vue

@@ -181,7 +181,7 @@
 				</view>
 				<view class="register-from group btn" v-show="isShowAustomItem">
 					<view class="content-class btn">
-						<input class="row-input other" type="text" v-model="customItemValue" placeholder="请输入自定义项目"  @blur="onBlurInput" maxlength="5"/>
+						<input class="row-input other" type="text" v-model="customItemValue" placeholder="请输入自定义项目"  @input="onBlurInput" maxlength="5"/>
 						<button type="default" 
 								class="confirm-btn other" 
 								:class="[isDisabled === true ? 'disabled' : 'none']"