瀏覽代碼

2025-3-20

cmy 5 天之前
父節點
當前提交
ed880e1671

+ 1 - 1
.hbuilderx/launch.json

@@ -16,7 +16,7 @@
             "type" : "uniCloud"
         },
         {
-            "playground" : "standard",
+            "playground" : "custom",
             "type" : "uni-app:app-android"
         }
     ]

+ 0 - 159
App.nvue

@@ -1,159 +0,0 @@
-<script>
-	export default {
-		globalData:{
-			webSocket:''
-		},
-		onLaunch: function() {
-			//console.log('App Launch')
-		},
-		onShow: function() {
-			//console.log('App Show')
-		},
-		onHide: function() {
-			//console.log('App Hide')
-		}
-	}
-</script>
-
-
-<style>
-	.fx-r {
-		display: flex;
-		flex-direction: row;
-		flex-wrap: wrap;
-	}
-
-	.fx-h {
-		display: flex;
-		flex-direction: column;
-	}
-
-	.fx-ac {
-		justify-content: center;
-	}
-
-	.fx-as {
-		justify-content: flex-start;
-	}
-
-	.fx-ae {
-		justify-content: flex-end;
-	}
-
-	.fx-bc {
-		align-items: center;
-	}
-
-	.fx-be {
-		align-items: flex-end;
-	}
-
-	.fx-bs {
-		align-items: flex-start;
-	}
-
-
-	.pr {
-		position: relative;
-	}
-
-	.pa {
-		position: absolute;
-	}
-
-
-	.font-14 {
-		font-size: 14px !important;
-	}
-
-	.font-12 {
-		font-size: 12px !important;
-	}
-
-
-	.text-r {
-		text-align: right
-	}
-
-	.text-l {
-		text-align: left
-	}
-
-
-	.mk {
-		background: #000;
-		opacity: 0.5;
-		position: fixed;
-		top: 0px;
-		left: 0px;
-		right: 0px;
-		bottom: 0px;
-		z-index: 100
-	}
-
-
-
-	.ihover:active {
-		opacity: .5
-	}
-
-
-	.app-more {
-		text-align: center;
-		height: 30px;
-	}
-
-
-	.app-more-button {
-		position: relative;
-		height: 30px;
-	}
-
-
-	.app-more-button .a-m-c {
-		position: absolute;
-		z-index: 9;
-		width: 100%;
-		height: 30px;
-	}
-
-	.placeholder-style {
-		color: #d5d5d9;
-		font-size: 15px;
-	}
-
-	.placeholder-style2 {
-		color: #666666;
-		font-size: 14px;
-	}
-
-	.placeholder-999 {
-		color: #999999;
-		font-size: 12px;
-	}
-
-
-
-	.bgChangColor {
-		background-image: linear-gradient(to right, #ff6879, #e81a62)
-	}
-
-	.scrollHide::-webkit-scrollbar {
-		width: 0;
-		height: 0;
-		color: transparent;
-	}
-
-	.font-size18 {
-		font-size: 18px !important;
-	}
-
-
-
-
-	.loading.complete {
-		font-size: 14px;
-		color: #ccc;
-		padding: 10px 0;
-	}
-</style>

+ 14 - 3
App.vue

@@ -18,7 +18,7 @@
 </script>
 
 
-<style>
+<style lang="scss">
 	.fx-r {
 		display: flex;
 		flex-direction: row;
@@ -164,7 +164,6 @@
 	.loading .lodingImage {
 		width: 20px;
 		height: 20px;
-		animation: rotate 1.5s linear infinite;
 		margin-right: 4px;
 	}
 	
@@ -173,7 +172,19 @@
 		position: relative;
 		font-size: 12px;
 	}
-	
+	.update-btn{
+		width: 690rpx;
+		background: #ef4034;
+		border-radius: 100rpx;
+		position: fixed;
+		bottom: 30rpx;
+		left: 30rpx;
+		height: 80rpx;
+		.btn-text{
+			color: #fff;
+			font-size: 32rpx;
+		}
+	}
 	/* #endif */
 	/* #ifndef APP-PLUS-NVUE */
 

+ 0 - 3
components/ui-pay/payDialog.nvue

@@ -39,7 +39,6 @@
 		width: 750rpx;
 		height: 1000rpx;
 		background: rgba(245, 245, 245, 0.9);
-		box-sizing: border-box;
 		justify-content: space-between;
 
 		.main_title {
@@ -47,7 +46,6 @@
 			height: 100rpx;
 			flex-direction: row;
 			align-items: center;
-			box-sizing: border-box;
 			justify-content: center;
 			padding: 0px 20rpx;
 			border-bottom: 2rpx solid #e1e1e1;
@@ -64,7 +62,6 @@
 
 		.main_content {
 			width: 750rpx;
-			box-sizing: border-box;
 			padding: 0px 30rpx;
 			margin-top: 40rpx;
 

+ 1 - 2
config/global.js

@@ -6,8 +6,7 @@ export default {
 	cachekey: "appview",
 
 	putoken: "u$ii#uH!uF7LJkz&a4fcE50AdzHIbBAH",
-
-	version: "0.0.1",
+	version: "3.4.6",
 
 	app_code: 1,
 

+ 144 - 231
pages/index/index.nvue

@@ -39,24 +39,7 @@
 						<image class="icon" mode="aspectFill" src="/static/ad/4.png"></image>
 						<text class="label">抢购订单</text>
 					</view>
-					<!-- <view v-if="showData" class="item" @tap="tapOpen" data-url="/pages/news/about">
-						<image class="icon" mode="aspectFill" src="/static/ad/5.png"></image>
-						<text class="label">关于我们</text>
-					</view> -->
 				</view>
-				<!--消息通知-->
-				<!-- <view class="news-panel" v-if="showData">
-					<image src="/static/img/news-icon.png" class="icon"></image>
-					<text class="label">消息通知</text>
-					<maoScroll class="box-panel" :data="topData.notice" :showNum="1" :lineHeight="15"
-						:animationScroll="800" :animation="4000">
-						<template v-slot="{line}">
-							<text @tap="tapOpen" :data-url="'../news/index?id=' + line.id" class="line">{{ line.title }}
-							</text>
-						</template>
-					</maoScroll>
-					<image @tap="tapNews" src="/static/img/news-right.png" class="icon-right"></image>
-				</view> -->
 			</view>
 			<view v-if="sysData.is_audit == 0">
 				<!--CBB潮贝抢货通道-->
@@ -119,25 +102,16 @@
 						</view>
 					</view>
 				</view>
-				<view class="shop-items">
+				<view class="goods-items">
 					<view class="item" @tap="tapOpen" :data-url="'../merchant/index?id=' + item.id"
 						v-for="item in merchantData">
-						<image :src="item.logo" class="img" mode="aspectFill"></image>
+						<image :src="item.logo" class="nimg" mode="aspectFill"></image>
+						<text class="title">{{ item.name }}</text>
 						<view class="info">
-							<view class="iview-top">
-								<text class="title">{{ item.name }}</text>
-								<view class="ii">
-									<image class="shopTipIcon" src="/static/img/shop-small-location.png"></image>
-									<text class="iiText">
-										距离{{ item.dis_km }}
-									</text>
-								</view>
-							</view>
 							<view class="address">
 								<image src="/static/img/address-shop.png" class="icon"></image>
 								<text class="value">{{ item.address }}</text>
 							</view>
-
 							<view class="tel">
 								<image src="/static/img/tel-shop.png" class="icon"></image>
 								<text class="value">{{ item.tel }}</text>
@@ -147,17 +121,6 @@
 									营业时间: {{ item.business }}
 								</text>
 							</view>
-
-							<view class="wiget">
-								<view class="witem" @tap.stop="tapTel(item)">
-									<image class="witeIcon" src="/static/img/shop-tel.png"></image>
-									<text class="text">电话</text>
-								</view>
-								<view class="witem" @tap.stop="tapLbs(item)">
-									<image class="witeIcon" src="/static/img/shop-location.png"></image>
-									<text class="text">导航</text>
-								</view>
-							</view>
 						</view>
 					</view>
 				</view>
@@ -244,6 +207,7 @@
 			this.isShowInit(false);
 			upApp();
 		},
+		onShow() {},
 		onReady() {
 			const that = this;
 			uni.getSystemInfo({
@@ -702,31 +666,35 @@
 		padding-top: 30rpx;
 		position: relative;
 		height: 123rpx;
+
 		.topBgImg {
 			width: 690rpx;
 			height: 74rpx;
 		}
+
 		.icon {
-			width: 99rpx;
-			height: 99rpx;
+			width: 96rpx;
+			height: 96rpx;
 			position: absolute;
 			top: 0rpx;
-			left: 15rpx;
+			left: 0;
 			z-index: 999;
 		}
+
 		.topTitle {
-			margin-top: -70rpx;
+			margin-top: -60rpx;
 			flex: 1;
 			position: relative;
 			flex-direction: row;
 			padding-left: 86rpx;
 			padding-right: 50rpx;
 			justify-content: space-between;
+
 			.label {
 				color: #fff;
 				font-weight: bold;
 				font-size: 34rpx;
-				margin-left: 50rpx;
+				margin-left: 12rpx;
 				padding-top: 10rpx;
 			}
 
@@ -744,211 +712,156 @@
 	//产品中心
 	.goods {
 		padding: 0rpx 30rpx 30rpx;
-
-		.goods-items {
-			border: 2px solid #AE322E;
-			border-bottom-left-radius: 20rpx;
-			border-bottom-right-radius: 20rpx;
-			padding: 20rpx;
-			margin-top: -24rpx;
-			flex-direction: row;
-			flex-wrap: wrap;
-			justify-content: space-between;
-
-			.item {
-				width: 310rpx;
-				margin-bottom: 20rpx;
-				box-shadow: 0px 0px 20px 0px rgba(50, 50, 52, 0.1);
-				border-radius: 20rpx;
-				background-color: #FFF;
-
-				.nimg {
-					flex: 1;
-					height: 310rpx;
-					border-radius: 20rpx 20rpx 0 0;
+	}
+	//最新门店
+	.shop {
+		padding: 20rpx 30rpx;
+	}
+	.goods-items {
+		border: 2px solid rgba(255, 51, 44, 1);
+		border-bottom-left-radius: 20rpx;
+		border-bottom-right-radius: 20rpx;
+		padding: 20rpx;
+		margin-top: -24rpx;
+		flex-direction: row;
+		flex-wrap: wrap;
+		justify-content: space-between;
+	
+		.item {
+			width: 310rpx;
+			margin-bottom: 20rpx;
+			box-shadow: 0px 0px 20px 0px rgba(50, 50, 52, 0.1);
+			border-radius: 20rpx;
+			background-color: #FFF;
+	
+			.nimg {
+				flex: 1;
+				height: 310rpx;
+				border-radius: 20rpx 20rpx 0 0;
+			}
+	
+			.title {
+				padding: 20rpx 20rpx 0;
+				text-overflow: ellipsis;
+				lines: 2;
+				color: #333333;
+				font-weight: bold;
+				font-size: 30rpx;
+			}
+	
+			.iview {
+				padding: 20rpx 20rpx;
+				flex-direction: row;
+				justify-content: space-between;
+	
+				.score {
+					flex-direction: row;
+					align-items: flex-end;
+	
+					.goods-name {
+						color: #FF4C4C;
+						font-weight: bold;
+						font-size: 36rpx;
+					}
+	
+					.tag {
+						font-weight: bold;
+						font-size: 18rpx;
+						color: #FF4C4C;
+					}
 				}
-
-				.title {
-					padding: 20rpx 20rpx 0;
-					text-overflow: ellipsis;
-					lines: 2;
-					color: #333333;
-					font-weight: bold;
-					font-size: 30rpx;
+	
+				.btn {
+					background-image: linear-gradient(143.2747deg, #FF6A00, #EE0979);
+					border-radius: 40rpx;
+					padding: 10rpx 28rpx;
+					font-size: 22rpx;
+					color: #FFFFFF;
 				}
-
-				.iview {
-					padding: 20rpx 20rpx;
+			}
+			.info {
+				border-bottom: 1px solid #F8F8F8;
+				padding: 0 20rpx 20rpx;
+				.address {
 					flex-direction: row;
-					justify-content: space-between;
-
-					.score {
-						flex-direction: row;
-						align-items: flex-end;
-
-						.goods-name {
-							color: #FF4C4C;
-							font-weight: bold;
-							font-size: 36rpx;
-						}
-
-						.tag {
-							font-weight: bold;
-							font-size: 18rpx;
-							color: #FF4C4C;
-						}
+					margin-top: 20rpx;
+					.icon {
+						width: 28rpx;
+						height: 28rpx;
 					}
-
-					.btn {
-						background-image: linear-gradient(143.2747deg, #FF6A00, #EE0979);
-						border-radius: 40rpx;
-						padding: 10rpx 28rpx;
+					.value {
+						width: 240rpx;
 						font-size: 22rpx;
-						color: #FFFFFF;
+						text-overflow: ellipsis;
+						lines: 2;
+						color: #666666;
+						opacity: 0.5;
+						padding-left: 10rpx;
 					}
+			
 				}
-			}
-		}
-	}
-
-	//最新门店
-	.shop {
-		padding: 0rpx 30rpx 30rpx;
-		.shop-items {
-			border: 2px solid #AE322E;
-			border-bottom-left-radius: 20rpx;
-			border-bottom-right-radius: 20rpx;
-			padding: 20rpx;
-			margin-top: -24rpx;
-			.item {
-				margin-top: 30rpx;
-				flex-direction: row;
-				.img {
-					width: 180rpx;
-					height: 180rpx;
-					border-radius: 10rpx;
-				}
-
-				.info {
-					position: relative;
-					margin-left: 20rpx;
-					width: 440rpx;
-					border-bottom: 1px solid #F8F8F8;
-					align-items: flex-start;
-					.iview-top {
-						flex-direction: row;
-						justify-content: space-between;
-						align-items: center;
-						.title {
-							font-weight: bold;
-							font-size: 34rpx;
-							color: #333333;
-							width: 300rpx;
-							text-overflow: ellipsis;
-							lines: 1;
-						}
-
-						.ii {
-							flex-direction: row;
-							.shopTipIcon {
-								width: 20rpx;
-								height: 28rpx;
-								margin-right: 8rpx
-							}
-
-							.iiText {
-								font-weight: 400;
-								font-size: 22rpx;
-								color: #666666;
-							}
-						}
+			
+				.tel {
+					flex-direction: row;
+					margin-top: 10rpx;
+					.icon {
+						width: 28rpx;
+						height: 28rpx;
 					}
-
-					.address {
-						flex-direction: row;
-						margin-top: 20rpx;
-						.icon {
-							width: 28rpx;
-							height: 28rpx;
-						}
-
-						.value {
-							width: 400rpx;
-							text-overflow: ellipsis;
-							lines: 1;
-							font-size: 22rpx;
-							color: #666666;
-							opacity: 0.5;
-							padding-left: 10rpx;
-						}
-
+			
+					.value {
+						font-size: 22rpx;
+						color: #666666;
+						opacity: 0.5;
+						margin-left: 10rpx;
 					}
-
-					.tel {
-						flex-direction: row;
-						margin-top: 16rpx;
-
-						.icon {
-							width: 28rpx;
-							height: 28rpx;
-						}
-
-						.value {
-							font-size: 22rpx;
-							color: #666666;
-							opacity: 0.5;
-							margin-left: 10rpx;
-						}
+				}
+			
+				.business {
+					margin-top: 10rpx;
+					.businessText {
+						font-size: 22rpx;
+						color: #666666;
+						opacity: 0.5;
 					}
-
-					.business {
-						background: rgba(252, 243, 240, 0.8);
-						border-radius: 16rpx 16rpx 16rpx 0px;
-						padding: 10rpx 10rpx;
-						margin-bottom: 20rpx;
-
-						.businessText {
-							font-weight: bold;
-							font-size: 24rpx;
-							color: #FF6F0F;
-						}
+				}
+			
+				.wiget {
+					position: absolute;
+					flex-direction: row;
+					justify-content: space-between;
+					right: 0;
+					bottom: 20rpx;
+					width: 120rpx;
+					.wline {
+						margin: 0px 24rpx;
+						height: 40rpx;
+						width: 1px;
+						background: #eee;
+			
 					}
-
-					.wiget {
-						position: absolute;
-						flex-direction: row;
-						justify-content: space-between;
-						right: 0;
-						bottom: 20rpx;
-						width: 120rpx;
-						.wline {
-							margin: 0px 24rpx;
-							height: 40rpx;
-							width: 1px;
-							background: #eee;
-
+			
+					.witem {
+						align-items: center;
+						.witeIcon {
+							width: 46rpx;
+							height: 46rpx;
 						}
-
-						.witem {
-							align-items: center;
-							.witeIcon {
-								width: 46rpx;
-								height: 46rpx;
-							}
-
-							.text {
-								font-size: 28rpx;
-								color: #666666;
-								margin-top: 8rpx;
-							}
+			
+						.text {
+							font-size: 28rpx;
+							color: #666666;
+							margin-top: 8rpx;
 						}
 					}
-
 				}
+			
 			}
 		}
 	}
 
+	
+
 
 	/**弹出框 **/
 	.popwin {

+ 6 - 7
pages/login/index.nvue

@@ -225,19 +225,14 @@
 		},
 		computed: {
 			getWebSocket() {
-				// #ifdef APP-PLUS
 				const webSocket = getApp().globalData.webSocket
-				// #endif
-				// #ifndef APP-PLUS
-				const webSocket = this.webSocket
-				// #endif
 				return webSocket
 			}
 		},
 		data() {
 			return {
 				statusBarHeight: 30,
-				passWordType: 'text',
+				passWordType: 'password',
 				form: {
 					mobile: "",
 					password: ""
@@ -333,10 +328,14 @@
 					.then(res => {
 						uni.hideLoading();
 						if (res.code == 200) {
+							console.log('进入首页')
 							this.setUser(res.data);
 							this.getWebSocket.connect();
 							uni.reLaunch({
-								url: "../index/index"
+								url: "/pages/index/index",
+								fail(err) {
+									console.log(err,'err')
+								}
 							});
 						} else {
 							uni.showToast({

+ 10 - 20
pages/user/address/add/add.nvue

@@ -38,12 +38,12 @@
 					<text  class="text">详细地址</text>
 				</view>
 				<view class="al-right">
-					<textarea class="textarea" placeholder-class="p-size" name="address"
+					<textarea auto-height class="textarea" placeholder-class="p-size" name="address"
 						placeholder="详细省份,城市,道路,门牌号,小区,楼栋号,单元室等(必填)" v-model="data.address" />
 				</view>
 			</view>
-			<button class="nt add-btn" formType="submit">
-				<text class="add-btn-text">保存</text>
+			<button class="update-btn" formType="submit">
+				<text class="btn-text">保存</text>
 			</button>
 		</view>
 		<mpvue-city-picker :themeColor="themeColor" ref="mpvueCityPicker" :pickerValueDefault="cityPickerValueDefault"
@@ -178,7 +178,12 @@
 </script>
 
 <style lang="scss">
+	.box{
+		padding: 30rpx;
+	}
 	.add-line {
+		border-radius: 20rpx;
+		margin-bottom: 20rpx;
 		padding: 15px;
 		align-items: center;
 		background: #fff;
@@ -213,15 +218,14 @@
 	}
 
 	.al-right .textarea {
-		width: 100%;
-		height: 40px;
 		font-size: 13px;
 		flex: 1;
+		text-align: right;
 	}
 
 	.p-size {
 		color: #9B9B9B;
-		font-size: 13px;
+		font-size: 12rpx;
 	}
 
 	.alr-jiantou {
@@ -231,18 +235,4 @@
 			height: 20px;
 		}
 	}
-
-	.add-btn {
-		width: 690rpx;
-		height: 80rpx;
-		background: #db292b;
-		border-radius: 100px;
-		position: fixed;
-		bottom: 20rpx;
-		left: 30rpx;
-
-		.add-btn-text {
-			color: #fff;
-		}
-	}
 </style>

+ 31 - 43
pages/user/address/address.nvue

@@ -16,46 +16,50 @@
 
 				<view class="item-foot">
 					<view class="default" @tap="set_default_address(item.id,index)">
-						<image class="itemDefaultTip" src="/static/img/radio_buttons_btn.png" v-if="item.status == 1"></image>
+						<image class="itemDefaultTip" src="/static/img/radio_buttons_btn.png" v-if="item.status == 1">
+						</image>
 						<image class="itemDefaultTip" src="/static/img/radio_buttons.png" v-else></image>
 						<text class="defaultText">
-						默认地址
+							默认地址
 						</text>
 					</view>
 					<text class="del" @tap="del_address(item.id,index)">删除</text>
 				</view>
 			</view>
 		</view>
-		<view style="height: 100rpx;"></view>
-		<view class="foot-wiget">
-			<view class="foot-btn" @tap="addClick">
-				<text class="foot-btn-text">
+		<button class="update-btn" @tap="addClick">
+			<text class="btn-text">
 				新增地址
-				</text>
-			</view>
-		</view>
-
+			</text>
+		</button>
 	</view>
 </template>
 
 <style lang="scss">
 	.app {
-		padding: 20rpx 30rpx;
+		background: #f5f5f5;
+		padding-bottom: 140rpx;
 
 		.app-items {
+			padding: 30rpx;
+
 			.item {
 				background: #fff;
 				border-radius: 10px;
 				padding: 10px 15px;
-				margin-bottom: 10px;
-				.title{
+				margin-bottom: 20rpx;
+				box-shadow: 5rpx 5rpx 8rpx rgba(0, 0, 0, 0.1);
+
+				.title {
 					flex-direction: row;
 					justify-content: space-between;
+
 					.name {
 						color: #333;
 						font-size: 16px;
 						font-weight: 600;
 					}
+
 					.tag {
 						background: #aaaaaa;
 						font-size: 12px;
@@ -65,17 +69,20 @@
 						border-radius: 4px;
 					}
 				}
-				.editBox{
+
+				.editBox {
+					margin-top: 10rpx;
 					justify-content: space-between;
 					flex-direction: row;
 					align-items: center;
+
 					.address {
 						width: 580rpx;
 						color: #333;
 						font-size: 28rpx;
 						padding: 4px 0;
 					}
-					
+
 					.edit {
 						.editTip {
 							width: 16px;
@@ -83,61 +90,42 @@
 						}
 					}
 				}
+
 				.mobile {
 					color: #919191;
 					font-size: 14px;
 					margin: 4px 0;
 				}
-				.item-foot{
+
+				.item-foot {
 					flex-direction: row;
 					justify-content: space-between;
 					align-items: center;
+
 					.default {
 						flex-direction: row;
 						align-items: center;
+
 						.itemDefaultTip {
 							width: 14px;
 							height: 14px;
 							margin-right: 4px;
 						}
-						.defaultText{
+
+						.defaultText {
 							color: #727272;
 							font-size: 14px;
 						}
 					}
-					
+
 					.del {
-						color: #727272;
+						color: #999999;
 						font-size: 14px;
 					}
 				}
-				
-			}
-		}
 
-		.foot-wiget {
-			position: fixed;
-			bottom: 20rpx;
-			left: 30rpx;
-			width: 690rpx;
-			justify-content: center;
-			.foot-btn {
-				height: 80rpx;
-				background: #db292b;
-				border-radius: 25px;
-				flex-direction: row;
-				align-items: center;
-				justify-content: center;
-				.foot-btn-text{
-					color: #FFF;
-				}
-				.addTip {
-					width: 15px;
-					height: 15px;
-				}
 			}
 		}
-
 	}
 </style>
 <script>

+ 183 - 0
pages/user/approve.nvue

@@ -0,0 +1,183 @@
+<template>
+	<view>
+		<view class="app-bg">
+			<image mode="widthFix" class='image' src="/static/img/tream_bg.jpg"></image>
+		</view>
+		<uni-nav-bar color="#fff" :border="false" statusBar backgroundColor="transparent" left-icon="left"
+				@clickLeft="backPage" fixed title="实名认证"></uni-nav-bar>
+		<view class="app-body">
+			<view class="input-view">
+				<view class="form-item">
+					<text class="label">姓名</text>
+					<input class="input" type="text" v-model="name" placeholder="请输入姓名" />
+				</view>
+				<view class="form-item ">
+					<text class="label">身份证号码</text>
+					<input class="input" type="idcard" v-model="idcard" placeholder="请输入身份证号码" />
+					
+				</view>
+			</view>
+		</view>
+		<button class="update-btn">
+			<text class="btn-text" @tap="formSubmit">实名认证</text>
+		</button>
+	</view>
+</template>
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	const aliyunVerify = uni.requireNativePlugin('AP-FaceDetectModule');
+	import utils from "@/library/utils/Comm.js"
+	import Request from '@/library/Request';
+	export default {
+		computed: mapState(['user']),
+		data() {
+			return {
+				name: "",
+				idcard: ""
+			}
+		},
+		onLoad(options) {},
+		methods: {
+			backPage(){
+				utils.navigateBack()
+			},
+			formSubmit: function(e) {
+				if (!utils.isDefine(this.name)) {
+					utils.Tip("输入正确的姓名");
+					return;
+				}
+
+				if (!utils.isDefine(this.idcard)) {
+					utils.Tip("请输入身份证号码");
+					return;
+				}
+				var regIdNo = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
+				if (!regIdNo.test(this.idcard)) {
+					utils.Tip("请输入正确身份证号码");
+					return;
+				}
+				let post = {
+					name: this.name,
+					idcard: this.idcard
+				};
+
+				post.metaInfo = aliyunVerify.getMetaInfo();
+				let p = uni.getSystemInfoSync().platform;
+				if (p === "ios") {
+					post.metaInfo = JSON.stringify(post.metaInfo);
+				}
+				post.url = "";
+				utils.loadIng("提交中..")
+				Request
+					.post("setUserCert", post)
+					.then(res => {
+						uni.hideLoading();
+						if (res.code == 200) {
+							aliyunVerify.verify({
+									"certifyId": res.data.id,
+								},
+								function(response) {
+									if (response.code == 1000) {
+										uni.redirectTo({
+											url: "approve_ok"
+										});
+										return;
+									}
+
+									if (res.code == 1001) {
+										utils.showAlert({
+											content: "验证失败,系统错误请重启APP重新验证"
+										});
+										return;
+									}
+
+									if (res.code == 1003) {
+										return;
+									}
+
+									if (res.code == 2002) {
+										utils.showAlert({
+											content: "网络错误请检查是否开启网络连接"
+										});
+										return;
+									}
+
+									if (res.code == 2003) {
+										utils.showAlert({
+											content: "设备时间错误,请校验时候后重试"
+										});
+										return;
+									}
+
+									if (res.code == 2003) {
+										utils.showAlert({
+											content: "刷脸失败"
+										});
+										return;
+									}
+									//
+									utils.showAlert({
+										content: "验证失败,可能你当前手机环境存在异常!请更换在尝试。"
+									});
+								}
+							);
+						} else {
+							uni.showModal({
+								title: '系统提示',
+								content: res.msg,
+								showCancel: false
+							});
+						}
+
+					})
+					.catch(res => {
+						uni.hideLoading();
+						that.utils.showModal("加载失败,重新点击尝试!");
+					});
+			}
+		},
+	}
+</script>
+
+
+<style lang="scss">
+	.app-bg {
+		.image {
+			width: 750rpx;
+		}
+	}
+
+	.app-body {
+		margin-top: -120px;
+		.input-view {
+			padding: 30rpx;
+			.form-item {
+				box-shadow: 5rpx 5rpx 8rpx rgba(0, 0, 0, 0.1);
+				line-height: 36px;
+				height: 100rpx;
+				padding: 0 30rpx;
+				margin-bottom: 20rpx;
+				background-color: #FFF;
+				flex-direction: row;
+				align-items: center;
+				border-radius: 20rpx;
+
+				.label {
+					font-size: 28rpx;
+					width: 100px;
+					color: #303133;
+				}
+
+				.input {
+					flex:1;
+					font-size: 26rpx;
+					text-align: right;
+				}
+			}
+
+		}
+	}
+</style>

+ 131 - 0
pages/user/bank/bank.nvue

@@ -0,0 +1,131 @@
+<style lang="scss">
+	.bank-list {
+		padding: 30rpx;
+
+		.item {
+			height: 100rpx;
+			border-bottom: 1px solid #f1f1f1;
+			align-items: center;
+			background-color: #FFF;
+			padding: 0 30rpx;
+			border-radius: 20rpx;
+			margin-bottom: 20rpx;
+			box-shadow: 5rpx 5rpx 8rpx rgba(0, 0, 0, 0.1);
+			.icon {
+				width: 40rpx;
+				height: 40rpx;
+				margin-right: 25rpx;
+			}
+
+			.name {
+				font-weight: 500;
+				font-size: 26rpx;
+				color: #333333;
+			}
+
+			.bank_name {
+				font-weight: 500;
+				font-size: 26rpx;
+				color: #999999;
+				flex: 1;
+			}
+
+			.pev {
+				width: 40rpx;
+				height: 40rpx;
+			}
+		}
+	}
+</style>
+<template>
+	<view class="app-body">
+		<view class="bank-list">
+			<view class="item fx-r" @tap="tapOpen" data-url="save/bank">
+				<image class="icon" src="/static/img/bank_bank.png"></image>
+				<text class="name">银行卡</text>
+				<text class="bank_name">{{ getBank(3) || '未添加' }}</text>
+				<image class="pev" src="/static/img/ic_next.png"></image>
+			</view>
+
+			<view class="item fx-r" @tap="tapOpen" data-url="save/alipay">
+				<image class="icon" src="/static/img/bank_alipay.png"></image>
+				<text class="name">支付宝</text>
+				<text class="bank_name">{{ getBank(2) || '未添加' }}</text>
+				<image class="pev" src="/static/img/ic_next.png"></image>
+			</view>
+
+			<view class="item fx-r" @tap="tapOpen" data-url="save/weixin">
+				<image class="icon" src="/static/img/bank_weixin.png"></image>
+				<text class="name">微信</text>
+				<text class="bank_name">{{ getBank(1) || '未添加' }}</text>
+				<image class="pev" src="/static/img/ic_next.png"></image>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	import utils from "@/library/utils/Comm.js"
+	import Request from '@/library/Request';
+	export default {
+		computed: mapState(['user']),
+		data() {
+			return {
+				data: [],
+				isFirst: false
+			}
+		},
+		onShow() {
+			this.getData();
+		},
+		methods: {
+			//获取事件传递
+			onEvent: function(type, data) {
+				this.getData();
+			},
+			getData: function() {
+				Request
+					.post("getBank")
+					.then(res => {
+						if (res.code == 200) {
+							this.data = res.data
+							this.isFirst = true;
+						} else {
+							utils.Tip(res.msg);
+						}
+					})
+					.catch(err => {
+						utils.Tip(res.msg);
+					});
+			},
+			tapBack: function() {
+				uni.navigateBack();
+			},
+
+			getBank: function(type) {
+				for (let i in this.data) {
+					if (this.data[i].type == type) {
+						return this.data[i].name;
+					}
+				}
+
+				return null;
+			},
+
+			/**
+			 * 打开
+			 * @param {Object} ev
+			 */
+			tapOpen: function(ev) {
+				let url = ev.currentTarget.dataset.url
+				uni.navigateTo({
+					url: url
+				});
+			}
+		}
+	}
+</script>

+ 304 - 0
pages/user/bank/save/alipay.nvue

@@ -0,0 +1,304 @@
+<style lang="scss">
+	.app-body {
+		.input-form {
+			padding: 30rpx;
+
+			.upImageBox {
+				background: #fff;
+				border-radius: 20rpx;
+				margin-bottom: 20rpx;
+				box-shadow: 5rpx 5rpx 8rpx rgba(0, 0, 0, 0.1);
+				padding: 30rpx;
+				flex: 1;
+				flex-direction: row;
+				justify-content: space-between;
+				align-items: center;
+				.img {
+					width: 160rpx;
+					height: 160rpx;
+				}
+			}
+
+			.item {
+				background: #fff;
+				border-radius: 20rpx;
+				margin-bottom: 20rpx;
+				padding: 0 30rpx;
+				height: 100rpx;
+				box-shadow: 5rpx 5rpx 8rpx rgba(0, 0, 0, 0.1);
+				flex-direction: row;
+				align-items: center;
+				justify-content: center;
+
+			}
+
+			.label {
+				width: 86px;
+				font-weight: 400;
+				color: #585858;
+				font-size: 28rpx;
+				color: #333;
+			}
+
+			.value {
+				flex: 1;
+				align-items: center;
+				justify-content: center;
+				flex-direction: row;
+
+				.input {
+					flex: 1;
+					font-size: 26rpx;
+					text-align: right;
+				}
+			}
+		}
+	}
+
+	.sbtn {
+		font-size: 28rpx;
+		color: #DB292B;
+		padding-left: 20rpx;
+
+		&.no {
+			color: #999999;
+		}
+	}
+</style>
+<template>
+	<view class="app-body">
+		<view class="input-form">
+			<view class="item">
+				<text class="label">真实姓名</text>
+				<view class="value">
+					<input class="input" type="text" v-model="form.name" placeholder="请输入真实姓名" />
+				</view>
+			</view>
+			<view class="item">
+				<text class="label">支付宝账号</text>
+				<view class="value">
+					<input class="input" type="text" v-model="form.payment" placeholder="请输入支付宝账号" />
+				</view>
+			</view>
+			<view class="item">
+				<text class="label">验证码</text>
+				<view class="value">
+					<input class="input" type="number" v-model="form.verify" placeholder="请输入验证码" />
+					<text v-if="verifyCount <= 0" class="sbtn" @tap="getVcode">验证码</text>
+					<text v-else class="sbtn no">{{ verifyCount }} S</text>
+				</view>
+			</view>
+
+
+			<view class="upImageBox" @tap="upImg">
+				<text class="label">收款码</text>
+				<image src="/static/img/upimg.png" v-if="form.img == ''" class="img"></image>
+				<image :src="form.img" v-else mode="aspectFill" class="img"></image>
+			</view>
+		</view>
+		<button class="update-btn" @tap="tapSubmit">
+			<text class="btn-text">保存</text>
+		</button>
+	</view>
+</template>
+
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	import utils from "@/library/utils/Comm.js"
+	import Request from '@/library/Request';
+	export default {
+		computed: mapState(['user']),
+		data() {
+			return {
+				form: {
+					img: "",
+					name: ""
+				},
+				verifyCount: 0,
+				type: 2
+			}
+		},
+		onLoad(options) {
+			this.getData();
+		},
+		methods: {
+
+			getData: function(e) {
+				uni.showLoading({
+					title: '获取数据中..'
+				});
+				var that = this;
+				Request
+					.post("getBankItem", {
+						type: this.type
+					})
+					.then(res => {
+						uni.hideLoading();
+						if (res.code == 200) {
+							if (res.data != null) this.form = res.data;
+						} else {
+							utils.Tip(res.msg);
+						}
+					}).catch(res => {
+						uni.hideLoading();
+						utils.Tip(res.msg);
+					});
+			},
+
+			getVcode: function() {
+				if (this.verifyCount > 0) return;
+				uni.showLoading({
+					title: "获取中..."
+				});
+				Request
+					.post("userYzm", {
+						type: "bank"
+					})
+					.then(res => {
+						uni.hideLoading();
+						if (res.code == 200) {
+							if (res.data.status == 2) {
+								utils.CountDowm(res.data.time, (e, s) => {
+									this.verifyCount = e;
+								});
+							}
+
+							if (res.data.status == 1) {
+								utils.CountDowm(120, (e, s) => {
+									this.verifyCount = e;
+								});
+							}
+						} else {
+							uni.showToast({
+								title: res.msg,
+								mask: true,
+								icon: 'none'
+							});
+						}
+					})
+					.catch(err => {
+						uni.showToast({
+							title: '获取失败',
+							mask: true,
+							icon: 'none'
+						});
+						uni.hideLoading();
+					});
+			},
+
+			upImg() {
+				this.$store.dispatch('permission/requestPermissions', 'WRITE_EXTERNAL_STORAGE').then(res => {
+					if (res !== 1) return;
+					this.upImgS();
+				});
+			},
+
+
+			upImgS() {
+				uni.chooseImage({
+					count: 1,
+					sizeType: ['compressed'],
+					success: (res) => {
+						let img = res.tempFilePaths[0];
+						utils.loadIng();
+						Request
+							.post("qiniu")
+							.then(res => {
+								uni.uploadFile({
+									url: 'https://up-z0.qiniup.com',
+									filePath: img,
+									name: 'file',
+									formData: {
+										'key': res.data.mk_str,
+										'token': res.data.token
+									},
+									success: (uploadFileRes) => {
+										uni.hideLoading();
+										if (uploadFileRes.statusCode == 200) {
+											this.form.img = res.data.url;
+										} else {
+											utils.Tip("上传失败,请重新尝试," + JSON.stringify(
+												uploadFileRes));
+										}
+
+									},
+									fail: () => {
+										uni.hideLoading();
+										utils.Tip("上传失败,请重新尝试");
+									}
+								});
+							})
+							.catch(err => {
+								uni.hideLoading();
+								utils.Tip("请重新上传图片");
+							});
+					}
+				});
+			},
+
+			tapSubmit: function(e) {
+
+				if (this.form.name == "") {
+					uni.showToast({
+						title: "请输入真实姓名",
+						icon: "none",
+						mask: true
+					})
+					return;
+				}
+
+				if (this.form.payment == "") {
+					uni.showToast({
+						title: "请输入支付宝账号",
+						icon: "none",
+						mask: true
+					})
+					return;
+				}
+
+
+				if (this.form.verify == '') {
+					uni.showToast({
+						title: '请输入验证码',
+						mask: true,
+						icon: 'none'
+					});
+					return;
+				}
+
+				uni.showLoading({
+					title: '提交数据中..'
+				});
+				Request
+					.post("bankSave", {
+						...this.form,
+						type: this.type
+					})
+					.then(res => {
+						uni.hideLoading();
+						if (res.code == 200) {
+							uni.navigateBack();
+						} else {
+							uni.showToast({
+								title: res.msg,
+								icon: "none",
+								mask: true
+							});
+						}
+					})
+					.catch(res => {
+						uni.hideLoading();
+						uni.showModal({
+							title: '系统提示',
+							content: '加载失败,重新点击尝试!',
+							showCancel: false
+						});
+					});
+			}
+		}
+	}
+</script>

+ 247 - 0
pages/user/bank/save/bank.nvue

@@ -0,0 +1,247 @@
+<style lang="scss">
+	.app-body {
+		.input-form {
+			padding: 30rpx;
+
+			.item {
+				background: #fff;
+				height: 100rpx;
+				border-radius: 20rpx;
+				margin-bottom: 20rpx;
+				padding: 0 30rpx;
+				box-shadow: 5rpx 5rpx 8rpx rgba(0, 0, 0, 0.1);
+				flex-direction: row;
+				align-items: center;
+				justify-content: center;
+
+				.label {
+					width: 86px;
+					font-weight: 400;
+					color: #585858;
+					font-size: 28rpx;
+					color: #333;
+				}
+
+				.value {
+					flex: 1;
+					align-items: center;
+					justify-content: center;
+					flex-direction: row;
+
+					.input {
+						flex: 1;
+						font-size: 26rpx;
+						text-align: right;
+					}
+				}
+			}
+
+		}
+	}
+
+	.sbtn {
+		font-size: 28rpx;
+		color: #DB292B;
+		padding-left: 20rpx;
+
+		&.no {
+			color: #999999;
+		}
+	}
+</style>
+<template>
+	<view class="app-body">
+		<view class="input-form">
+			<view class="item">
+				<text class="label">姓名</text>
+				<view class="value">
+					<input class="input" type="text" v-model="form.name" placeholder="请输入真实姓名" />
+				</view>
+			</view>
+			<view class="item">
+				<text class="label">银行卡号</text>
+				<view class="value">
+					<input class="input" type="number" v-model="form.payment" placeholder="请输入银行卡号" />
+				</view>
+			</view>
+			<view class="item">
+				<text class="label">所属银行</text>
+				<view class="value">
+					<input class="input" type="text" v-model="form.bank_name" placeholder="请输入所属银行" />
+				</view>
+			</view>
+			<view class="item">
+				<text class="label">所属支行</text>
+				<view class="value">
+					<input class="input" type="text" v-model="form.bank" placeholder="请输入所属支行" />
+				</view>
+			</view>
+
+			<view class="item">
+				<text class="label">验证码</text>
+				<view class="value">
+					<input class="input" type="number" v-model="form.verify" placeholder="请输入验证码" />
+					<text v-if="verifyCount <= 0" class="sbtn" @tap="getVcode">验证码</text>
+					<text v-else class="sbtn no">{{ verifyCount }} S</text>
+				</view>
+			</view>
+		</view>
+		<button class="update-btn" @tap="tapSubmit">
+			<text class="btn-text">保存</text>
+		</button>
+	</view>
+</template>
+
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	import utils from "@/library/utils/Comm.js"
+	import Request from '@/library/Request';
+	export default {
+		computed: mapState(['user']),
+		data() {
+			return {
+				form: {},
+				verifyCount: 0,
+				type: 3
+			}
+		},
+		onLoad(options) {
+			this.getData();
+		},
+		methods: {
+
+			getData: function(e) {
+				uni.showLoading({
+					title: '获取数据中..'
+				});
+				var that = this;
+				Request
+					.post("getBankItem", {
+						type: this.type
+					})
+					.then(res => {
+						uni.hideLoading();
+						if (res.code == 200) {
+							if (res.data != null) this.form = res.data;
+						} else {
+							utils.Tip(res.msg);
+						}
+					}).catch(res => {
+						uni.hideLoading();
+						utils.Tip(res.msg);
+					});
+			},
+
+			getVcode: function() {
+				if (this.verifyCount > 0) return;
+				uni.showLoading({
+					title: "获取中..."
+				});
+				Request
+					.post("userYzm", {
+						type: "bank"
+					})
+					.then(res => {
+						uni.hideLoading();
+						if (res.code == 200) {
+							if (res.data.status == 2) {
+								utils.CountDowm(res.data.time, (e, s) => {
+									this.verifyCount = e;
+								});
+							}
+
+							if (res.data.status == 1) {
+								utils.CountDowm(120, (e, s) => {
+									this.verifyCount = e;
+								});
+							}
+						} else {
+							uni.showToast({
+								title: res.msg,
+								mask: true,
+								icon: 'none'
+							});
+						}
+					})
+					.catch(err => {
+						uni.showToast({
+							title: '获取失败',
+							mask: true,
+							icon: 'none'
+						});
+						uni.hideLoading();
+					});
+			},
+			tapSubmit: function(e) {
+				if (this.form.name == "") {
+					uni.showToast({
+						title: "请输入真实姓名",
+						icon: "none",
+						mask: true
+					})
+					return;
+				}
+
+				if (this.form.payment == "") {
+					uni.showToast({
+						title: "请输入银行卡号",
+						icon: "none",
+						mask: true
+					})
+					return;
+				}
+
+				if (this.form.bank == "") {
+					uni.showToast({
+						title: "请输入卡归属银行",
+						icon: "none",
+						mask: true
+					})
+					return;
+				}
+
+				if (this.form.verify == '') {
+					uni.showToast({
+						title: '请输入验证码',
+						mask: true,
+						icon: 'none'
+					});
+					return;
+				}
+
+				uni.showLoading({
+					title: '提交数据中..'
+				});
+				Request
+					.post("bankSave", {
+						...this.form,
+						type: this.type
+					})
+					.then(res => {
+						uni.hideLoading();
+						if (res.code == 200) {
+							uni.navigateBack();
+						} else {
+							uni.showToast({
+								title: res.msg,
+								icon: "none",
+								mask: true
+							});
+						}
+					})
+					.catch(res => {
+						uni.hideLoading();
+						uni.showModal({
+							title: '系统提示',
+							content: '加载失败,重新点击尝试!',
+							showCancel: false
+						});
+					});
+			}
+		}
+	}
+</script>

+ 311 - 0
pages/user/bank/save/weixin.nvue

@@ -0,0 +1,311 @@
+<style lang="scss">
+	.app-body {
+		.input-form {
+			padding: 30rpx;
+
+			.upImageBox {
+				background: #fff;
+				border-radius: 20rpx;
+				margin-bottom: 20rpx;
+				box-shadow: 5rpx 5rpx 8rpx rgba(0, 0, 0, 0.1);
+				padding: 30rpx;
+				flex: 1;
+				flex-direction: row;
+				justify-content: space-between;
+				align-items: center;
+
+				.img {
+					width: 160rpx;
+					height: 160rpx;
+				}
+			}
+
+			.label {
+				width: 86px;
+				font-weight: 400;
+				color: #585858;
+				font-size: 28rpx;
+				color: #333;
+			}
+
+			.value {
+				flex: 1;
+				align-items: center;
+				justify-content: center;
+				flex-direction: row;
+
+				.input {
+					flex: 1;
+					font-size: 26rpx;
+					text-align: right;
+				}
+			}
+
+			.item {
+				background: #fff;
+				height: 100rpx;
+				border-radius: 20rpx;
+				margin-bottom: 20rpx;
+				padding: 0 30rpx;
+				box-shadow: 5rpx 5rpx 8rpx rgba(0, 0, 0, 0.1);
+				flex-direction: row;
+				align-items: center;
+				justify-content: center;
+			}
+		}
+	}
+
+	.sbtn {
+		font-size: 28rpx;
+		color: #DB292B;
+		padding-left: 20rpx;
+
+		&.no {
+			color: #999999;
+		}
+	}
+</style>
+<template>
+	<view class="app-body">
+		<view class="input-form">
+			<view class="item">
+				<text class="label">真实姓名</text>
+				<view class="value">
+					<input class="input" type="text" v-model="form.name" placeholder="请输入真实姓名" />
+				</view>
+			</view>
+
+			<view class="item">
+				<text class="label">微信号</text>
+				<view class="value">
+					<input class="input" type="text" v-model="form.payment" placeholder="请输入微信号" />
+				</view>
+			</view>
+			<view class="item">
+				<text class="label">手机号码</text>
+				<view class="value">
+					<input class="input" type="number" v-model="form.phone" placeholder="请输入手机号码" />
+				</view>
+			</view>
+			<view class="item">
+				<text class="label">验证码</text>
+				<view class="value">
+					<input class="input" type="number" v-model="form.verify" placeholder="请输入验证码" />
+					<text v-if="verifyCount <= 0" class="sbtn" @tap="getVcode">验证码</text>
+					<text v-else class="sbtn no">{{ verifyCount }} S</text>
+				</view>
+			</view>
+
+			<view class="upImageBox" @tap="upImg">
+				<text class="label">收款码</text>
+				<image src="/static/img/upimg.png" v-if="form.img == ''" class="img"></image>
+				<image :src="form.img" v-else mode="aspectFill" class="img"></image>
+			</view>
+		</view>
+		<button class="update-btn" @tap="tapSubmit">
+			<text class="btn-text">保存</text>
+		</button>
+	</view>
+</template>
+
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	import utils from "@/library/utils/Comm.js"
+	import Request from '@/library/Request';
+	export default {
+		computed: mapState(['user']),
+		data() {
+			return {
+				form: {
+					img: "",
+					name: "",
+					phone: ""
+				},
+				verifyCount: 0,
+				type: 1
+			}
+		},
+		onLoad(options) {
+			this.getData();
+		},
+		methods: {
+
+			getData: function(e) {
+				uni.showLoading({
+					title: '获取数据中..'
+				});
+				var that = this;
+				Request
+					.post("getBankItem", {
+						type: this.type
+					})
+					.then(res => {
+						uni.hideLoading();
+						if (res.code == 200) {
+							if (res.data != null) this.form = res.data;
+						} else {
+							utils.Tip(res.msg);
+						}
+					}).catch(res => {
+						uni.hideLoading();
+						utils.Tip(res.msg);
+					});
+			},
+
+			getVcode: function() {
+				if (this.verifyCount > 0) return;
+				uni.showLoading({
+					title: "提交数据中..."
+				});
+				Request
+					.post("userYzm", {
+						type: "bank"
+					})
+					.then(res => {
+						uni.hideLoading();
+						if (res.code == 200) {
+							if (res.data.status == 2) {
+								utils.CountDowm(res.data.time, (e, s) => {
+									this.verifyCount = e;
+								});
+							}
+
+							if (res.data.status == 1) {
+								utils.CountDowm(120, (e, s) => {
+									this.verifyCount = e;
+								});
+							}
+						} else {
+							uni.showToast({
+								title: res.msg,
+								mask: true,
+								icon: 'none'
+							});
+						}
+					})
+					.catch(err => {
+						uni.showToast({
+							title: '获取失败',
+							mask: true,
+							icon: 'none'
+						});
+						uni.hideLoading();
+					});
+			},
+
+			upImg() {
+				uni.chooseImage({
+					count: 1,
+					sizeType: ['compressed'],
+					success: (res) => {
+						let img = res.tempFilePaths[0];
+						utils.loadIng();
+						Request
+							.post("qiniu")
+							.then(res => {
+								uni.uploadFile({
+									url: 'https://up-z0.qiniup.com',
+									filePath: img,
+									name: 'file',
+									formData: {
+										'key': res.data.mk_str,
+										'token': res.data.token
+									},
+									success: (uploadFileRes) => {
+										uni.hideLoading();
+										if (uploadFileRes.statusCode == 200) {
+											this.form.img = res.data.url;
+										} else {
+											utils.Tip("上传失败,请重新尝试," + JSON.stringify(
+												uploadFileRes));
+										}
+
+									},
+									fail: () => {
+										uni.hideLoading();
+										utils.Tip("上传失败,请重新尝试");
+									}
+								});
+							})
+							.catch(err => {
+								uni.hideLoading();
+								utils.Tip("请重新上传图片");
+							});
+					}
+				});
+			},
+
+			tapSubmit: function(e) {
+
+				if (this.form.name == "") {
+					uni.showToast({
+						title: "请输入真实姓名",
+						icon: "none",
+						mask: true
+					})
+					return;
+				}
+
+				if (this.form.payment == "") {
+					uni.showToast({
+						title: "请输入微信号",
+						icon: "none",
+						mask: true
+					})
+					return;
+				}
+
+				if (this.form.phone == "") {
+					uni.showToast({
+						title: "请输入手机号码",
+						icon: "none",
+						mask: true
+					})
+					return;
+				}
+
+				if (this.form.verify == '') {
+					uni.showToast({
+						title: '请输入验证码',
+						mask: true,
+						icon: 'none'
+					});
+					return;
+				}
+
+				uni.showLoading({
+					title: '提交数据中..'
+				});
+				Request
+					.post("bankSave", {
+						...this.form,
+						type: this.type
+					})
+					.then(res => {
+						uni.hideLoading();
+						if (res.code == 200) {
+							uni.navigateBack();
+						} else {
+							uni.showToast({
+								title: res.msg,
+								icon: "none",
+								mask: true
+							});
+						}
+					})
+					.catch(res => {
+						uni.hideLoading();
+						uni.showModal({
+							title: '系统提示',
+							content: '加载失败,重新点击尝试!',
+							showCancel: false
+						});
+					});
+			}
+		}
+	}
+</script>

+ 327 - 0
pages/user/detail/integral_chu.nvue

@@ -0,0 +1,327 @@
+<template>
+	<view>
+		
+		<uni-nav-bar :border="false" statusBar left-icon="left" @clickLeft="utils.navigateBack()"  @clickRight="tapOpenLog" fixed title="趣豆转出">
+			
+		</uni-nav-bar>
+		
+		<view style="height: 10px;"></view>
+		
+		<view class="topinfo fx-h fx-bc fx-ac">
+			<view class="count">{{ user.integral || 0 }}</view>
+			<view class="text">当前可用(趣豆)</view>
+		</view>
+		<view style="height: 10px;"></view>
+		<!-- <view class="info-line">
+			<view class="il-top">
+				<text>转账类型</text> 
+			</view>
+			<view class="il-bot fx-r fx-bc fx-ac">
+				<u-radio-group v-model="type">
+					<u-radio activeColor="red" name="id" label="收款ID"></u-radio>
+					<view style="width: 40px;"></view>
+					<u-radio activeColor="red" name="phone" label="收款手机号"></u-radio>
+				</u-radio-group>
+			</view>
+		</view> -->
+		
+		<view class="info-line" v-if="type == 'id'">
+			<view class="il-top">
+				<text>商城接收人uid</text> 
+			</view>
+			<view class="il-bot">
+				<input placeholder="收款人id" @input="tapGetId" type="number" v-model="uid" />
+				<view class="name">{{ sendname }}</view>
+			</view>
+		</view>
+		
+		
+		<view class="info-line" v-if="type == 'phone'">
+			<view class="il-top">
+				<text>手机号码</text> 
+			</view>
+			<view class="il-bot">
+				<input placeholder="转账手机号码" @input="tapGetMobile" type="number" v-model="new_mobile" />
+				<view class="name">{{ sendname }}</view>
+			</view>
+		</view>
+		
+		
+		<view class="info-line">
+			<view class="il-top">
+				<text>转账金额</text>
+			</view>
+			<view class="il-code">
+				<view class="etb-left">
+					<input placeholder="请输入转账金额"  placeholder-class="placeholder-class" v-model="num" />
+				</view>
+				<!-- <view class="etb-right" @click="num = allMoney()">
+					<text>全部</text>
+				</view> -->
+			</view>
+		</view>
+		<view class="info-line">
+			<view class="update-btn"  @click="tapSubmit">
+				<text>确认转出</text>
+			</view>
+			<view style="height: 10px;"></view>
+		</view>
+		
+		
+		
+	<PayDialog ref="payDialog" @getPassword="getPassword"></PayDialog>
+		
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	import PayDialog from "@/components/ui-pay/payDialog.vue";
+	export default {
+		computed: mapState(['user','sysData']),
+		components:{
+			PayDialog
+		},
+		data() {
+			return {
+				num:'',
+				type : "id",
+				new_mobile : "",
+				uid : "",
+				sendname : "",
+				data : {
+					lv : 0
+				}
+			}
+		},
+		onLoad(options) {
+			this.checkUserLogin({page:this,isLogion:false});
+		},
+		methods: {
+			...mapMutations(['checkUserLogin']),
+			
+			tapGetId:function(ev){
+				let id = ev.detail.value;
+				if(id == "") {
+					this.sendname = '';
+					return;
+				}
+				this
+					.request
+					.post("userCkUserName",{uid : id,type : 2})
+					.then(res => {
+						if(res.code == 200) {
+							this.sendname = res.data.name;
+						} else {
+							this.sendname = "";
+						}
+					});
+			},
+			
+			
+			tapGetMobile:function(ev){
+				let mobile = ev.detail.value;
+				if(!this.utils.isPoneAvailable(mobile)) {
+					this.sendname = '';
+					return;
+				}
+				this
+					.request
+					.post("userCkUserName",{mobile : mobile,type : 2})
+					.then(res => {
+						if(res.code == 200) {
+							this.sendname = res.data.name;
+						} else {
+							//this.utils.Tip(res.msg);
+						}
+					});
+				
+			},
+			
+			tapOpenLog:function(){
+				uni.navigateTo({ url:"integral_gift_log"});
+			},
+			
+			
+			/**
+			 * 预计扣除
+			 */
+			getKc:function(){
+				if(isNaN(this.num)) return "0.00";
+				let val = this.utils.returnFloat(this.num * (this.data.lv / 100));
+				return val;
+			},
+			/**
+			 * 全部
+			 */
+			allMoney:function(){
+				if(this.user.integral <= 0) return 0;
+				let val = this.utils.returnFloat(this.user.integral * (this.data.lv / 100));
+				return this.user.integral - parseFloat(val);
+			},
+			
+			/**
+			 * 提交数据
+			 */
+			tapSubmit:function(){
+				if(this.new_mobile == '' && this.type == 'phone'){
+					this.utils.Tip("请输入转账号码");
+					return;
+				}
+				if(this.uid == '' && this.type == 'id'){
+					this.utils.Tip("请输入转账id");
+					return;
+				}
+				if(this.num <= 0 || this.num == ''){
+					this.utils.Tip("请输入正确转账金额!");
+					return;
+				}
+				if(parseFloat(this.num) > this.allMoney()){
+					this.utils.Tip("转账金额超过剩余金额");
+					return;
+				}
+				this.$refs['payDialog'].show();
+			},
+			getPassword : function(val){
+				var password = val.password;
+				this.utils.loadIng("提交中..");
+				this.request.post("outTradeIntegral",
+					{
+							payment	:	password,
+							num				:	this.num,
+							uid 			: 	this.uid,
+						})
+					.then(res=>{
+						uni.hideLoading();
+						if(res.code == 200) {
+							this.utils.Tip(res.msg);
+							setTimeout(function(){ uni.navigateBack();},1000);
+						}else{
+							this.utils.Tip(res.msg);
+							this.$refs['payDialog'].cleanNum();
+						}
+					}).catch(function(){
+						uni.hideLoading();
+						this.utils.Tip("网络错误,请稍后尝试");
+					});
+			}
+			
+		},
+
+	}
+</script>
+
+
+<style>
+	page {
+		background: #F5F5F5;
+	}
+
+	#box {
+		padding-top: 90px;
+		z-index: -1;
+	}
+	
+	.topinfo{
+		    background: #fff;
+			padding: 40rpx 0;
+			.count{
+				background-size: 100%;
+				font-size: 24px;
+				color: #303133;
+				font-weight: 700;
+				background-repeat: no-repeat;
+				background-position: 50%;
+			}
+			.text{
+				color: #909399;
+				font-size: 18px;
+			}
+		
+	}
+
+	.info-line {
+		min-height: 80px;
+		padding: 0 15px;
+		background-color: #fff;
+		border-top: 1px #f5f5f5 solid;
+	}
+
+	.il-top {
+		color: #ef4034;
+		font-size: 14px;
+		margin-top: 10px;
+	}
+
+	.il-bot {
+		margin-top: 10px;
+		position: relative;
+	}
+
+	.il-bot input {
+		width: 100%;
+		height: 100%;
+	}
+	.il-bot .name{position: absolute;right: 10px;top: 0px;}
+
+	.update-btn {
+		width: 90%;
+		height: 40px;
+		text-align: center;
+		line-height: 40px;
+		margin: 30px auto;
+		background: #ef4034;
+		color: #fff;
+		border-radius: 100px;
+		font-size: 16px;
+	}
+
+	.il-code {
+		display: flex;
+		align-items: center;
+		margin-top: 10px;
+	}
+
+	.il-code input {
+		width: 50%;
+		height: 100%;
+		font-size: 13px;
+	}
+
+	.ilc-btn {
+		width: 90px;
+		height: 30px;
+		text-align: center;
+		line-height: 30px;
+		margin-left: auto;
+		font-size: 12px;
+		background: #ef4034;
+		color: #fff;
+		border-radius: 100px;
+	}
+
+	.ilc-no-show {
+		width: 90px;
+		height: 30px;
+		text-align: center;
+		line-height: 30px;
+		margin-left: auto;
+		font-size: 12px;
+		background: #eee;
+		color: #999;
+		border-radius: 100px;
+	}
+	
+	.etb-left{width:80%;height:100%}
+	.placeholder-class{color:#7e7e7e;font-size:13px;font-weight:400}
+	.etb-left input{width:100%;height:100%;color:#484747;font-size:22px;font-weight:600}
+	.etb-right{margin-left:auto;color:#2d2438;font-size:13px}
+	
+	.tip{font-size: 14px;padding: 10px 0;color: #ef4034;}
+	.tip-info{padding: 5px 0;}
+	.tip-info .label{color: #000;font-weight: bold;}
+	.tip-info .money{color: orangered;}
+</style>

+ 381 - 0
pages/user/detail/integral_gift.nvue

@@ -0,0 +1,381 @@
+<template>
+	<view>
+		<uni-nav-bar :border="false" statusBar left-icon="left" @clickLeft="utils.navigateBack()"
+			@clickRight="tapOpenLog" fixed title="趣豆转账">
+			<view style="color: #ef4034;" slot="right">
+				转账记录
+			</view>
+		</uni-nav-bar>
+		<view style="height: 10px;"></view>
+		<view class="topinfo fx-h fx-bc fx-ac">
+			<view class="count">{{ user.integral || 0 }}</view>
+			<view class="text">当前可用(趣豆)</view>
+		</view>
+		<view style="height: 10px;"></view>
+		<view class="info-line">
+			<view class="il-top">
+				<text>转账类型</text>
+			</view>
+			<view class="il-bot fx-r fx-bc fx-ac">
+				<uv-radio-group v-model="type">
+					<uv-radio activeColor="red" name="id" label="收款ID"></uv-radio>
+					<view style="width: 40px;"></view>
+					<uv-radio activeColor="red" name="phone" label="收款手机号"></uv-radio>
+				</uv-radio-group>
+			</view>
+		</view>
+
+		<view class="info-line" v-if="type == 'id'">
+			<view class="il-top">
+				<text>收款人id</text>
+			</view>
+			<view class="il-bot">
+				<input placeholder="收款人id" @input="tapGetId" type="number" v-model="uid" />
+				<view class="name">{{ sendname }}</view>
+			</view>
+		</view>
+		<view class="info-line" v-if="type == 'phone'">
+			<view class="il-top">
+				<text>手机号码</text>
+			</view>
+			<view class="il-bot">
+				<input placeholder="转账手机号码" @input="tapGetMobile" type="number" v-model="new_mobile" />
+				<view class="name">{{ sendname }}</view>
+			</view>
+		</view>
+		<view class="info-line">
+			<view class="il-top">
+				<text>转账金额</text>
+			</view>
+			<view class="il-code">
+				<view class="etb-left">
+					<input placeholder="请输入转账金额" placeholder-class="placeholder-class" v-model="num" />
+				</view>
+				<!-- <view class="etb-right" @click="num = allMoney()">
+					<text>全部</text>
+				</view> -->
+			</view>
+		</view>
+		<view class="info-line">
+			<view class="update-btn" @click="tapSubmit">
+				<text>确认转账</text>
+			</view>
+			<view style="height: 10px;"></view>
+		</view>
+		<PayDialog ref="payDialog" @getPassword="getPassword"></PayDialog>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	import PayDialog from "@/components/ui-pay/payDialog.vue";
+	export default {
+		computed: mapState(['user', 'sysData']),
+		components: {
+			PayDialog
+		},
+		data() {
+			return {
+				num: '',
+				type: "id",
+				new_mobile: "",
+				uid: "",
+				sendname: "",
+				data: {
+					lv: 0
+				}
+			}
+		},
+		onLoad(options) {
+			this.checkUserLogin({
+				page: this,
+				isLogion: false
+			});
+		},
+		methods: {
+			...mapMutations(['checkUserLogin']),
+
+			tapGetId: function(ev) {
+				let id = ev.detail.value;
+				if (id == "") {
+					this.sendname = '';
+					return;
+				}
+				this
+					.request
+					.post("userCkUserName", {
+						uid: id,
+						type: 2
+					})
+					.then(res => {
+						if (res.code == 200) {
+							this.sendname = res.data.name;
+						} else {
+							this.sendname = "";
+						}
+					});
+			},
+
+
+			tapGetMobile: function(ev) {
+				let mobile = ev.detail.value;
+				if (!this.utils.isPoneAvailable(mobile)) {
+					this.sendname = '';
+					return;
+				}
+				this
+					.request
+					.post("userCkUserName", {
+						mobile: mobile,
+						type: 2
+					})
+					.then(res => {
+						if (res.code == 200) {
+							this.sendname = res.data.name;
+						} else {
+							//this.utils.Tip(res.msg);
+						}
+					});
+
+			},
+
+			tapOpenLog: function() {
+				uni.navigateTo({
+					url: "integral_gift_log"
+				});
+			},
+
+
+			/**
+			 * 预计扣除
+			 */
+			getKc: function() {
+				if (isNaN(this.num)) return "0.00";
+				let val = this.utils.returnFloat(this.num * (this.data.lv / 100));
+				return val;
+			},
+			/**
+			 * 全部
+			 */
+			allMoney: function() {
+				if (this.user.integral <= 0) return 0;
+				let val = this.utils.returnFloat(this.user.integral * (this.data.lv / 100));
+				return this.user.integral - parseFloat(val);
+			},
+
+			/**
+			 * 提交数据
+			 */
+			tapSubmit: function() {
+
+				if (this.new_mobile == '' && this.type == 'phone') {
+					this.utils.Tip("请输入转账号码");
+					return;
+				}
+
+				if (this.uid == '' && this.type == 'id') {
+					this.utils.Tip("请输入转账id");
+					return;
+				}
+
+				if (this.num <= 0 || this.num == '') {
+					this.utils.Tip("请输入正确转账金额!");
+					return;
+				}
+				if (parseFloat(this.num) > this.allMoney()) {
+					this.utils.Tip("转账金额超过剩余金额");
+					return;
+				}
+
+				this.$refs['payDialog'].show();
+			},
+
+			getPassword: function(val) {
+				var password = val.password;
+				this.utils.loadIng("提交中..");
+				this
+					.request
+					.post("integralGive", {
+						new_password: password,
+						new_mobile: this.new_mobile,
+						num: this.num,
+						uid: this.uid,
+						type: this.type
+					})
+					.then(res => {
+						uni.hideLoading();
+						if (res.code == 200) {
+							this.utils.Tip(res.msg);
+							setTimeout(function() {
+								uni.navigateBack();
+							}, 1000);
+						} else {
+							this.utils.Tip(res.msg);
+							this.$refs['payDialog'].cleanNum();
+						}
+					}).catch(function() {
+						uni.hideLoading();
+						this.utils.Tip("网络错误,请稍后尝试");
+					});
+			}
+
+		},
+
+	}
+</script>
+
+
+<style>
+	page {
+		background: #F5F5F5;
+	}
+
+	#box {
+		padding-top: 90px;
+		z-index: -1;
+	}
+
+	.topinfo {
+		background: #fff;
+		padding: 40rpx 0;
+
+		.count {
+			background-size: 100%;
+			font-size: 24px;
+			color: #303133;
+			font-weight: 700;
+			background-repeat: no-repeat;
+			background-position: 50%;
+		}
+
+		.text {
+			color: #909399;
+			font-size: 18px;
+		}
+
+	}
+
+	.info-line {
+		min-height: 80px;
+		padding: 0 15px;
+		background-color: #fff;
+		border-top: 1px #f5f5f5 solid;
+	}
+
+	.il-top {
+		color: #ef4034;
+		font-size: 14px;
+		margin-top: 10px;
+	}
+
+	.il-bot {
+		margin-top: 10px;
+		position: relative;
+	}
+
+	.il-bot input {
+		width: 100%;
+		height: 100%;
+	}
+
+	.il-bot .name {
+		position: absolute;
+		right: 10px;
+		top: 0px;
+	}
+
+	.update-btn {
+		width: 90%;
+		height: 40px;
+		text-align: center;
+		line-height: 40px;
+		margin: 30px auto;
+		background: #ef4034;
+		color: #fff;
+		border-radius: 100px;
+		font-size: 16px;
+	}
+
+	.il-code {
+		display: flex;
+		align-items: center;
+		margin-top: 10px;
+	}
+
+	.il-code input {
+		width: 50%;
+		height: 100%;
+		font-size: 13px;
+	}
+
+	.ilc-btn {
+		width: 90px;
+		height: 30px;
+		text-align: center;
+		line-height: 30px;
+		margin-left: auto;
+		font-size: 12px;
+		background: #ef4034;
+		color: #fff;
+		border-radius: 100px;
+	}
+
+	.ilc-no-show {
+		width: 90px;
+		height: 30px;
+		text-align: center;
+		line-height: 30px;
+		margin-left: auto;
+		font-size: 12px;
+		background: #eee;
+		color: #999;
+		border-radius: 100px;
+	}
+
+	.etb-left {
+		width: 80%;
+		height: 100%
+	}
+
+	.placeholder-class {
+		color: #7e7e7e;
+		font-size: 13px;
+		font-weight: 400
+	}
+
+	.etb-left input {
+		width: 100%;
+		height: 100%;
+		color: #484747;
+		font-size: 22px;
+		font-weight: 600
+	}
+
+	.etb-right {
+		margin-left: auto;
+		color: #2d2438;
+		font-size: 13px
+	}
+
+	.tip {
+		font-size: 14px;
+		padding: 10px 0;
+		color: #ef4034;
+	}
+
+	.tip-info {
+		padding: 5px 0;
+	}
+
+	.tip-info .label {
+		color: #000;
+		font-weight: bold;
+	}
+
+	.tip-info .money {
+		color: orangered;
+	}
+</style>

+ 148 - 112
pages/user/detail/integral_gift.vue

@@ -1,25 +1,20 @@
 <template>
 	<view>
-		
-		<uni-nav-bar :border="false" statusBar left-icon="left" @clickLeft="utils.navigateBack()"  @clickRight="tapOpenLog" fixed title="趣豆转账">
+		<uni-nav-bar :border="false" statusBar left-icon="left" @clickLeft="utils.navigateBack()"
+			@clickRight="tapOpenLog" fixed title="趣豆转账">
 			<view style="color: #ef4034;" slot="right">
 				转账记录
 			</view>
 		</uni-nav-bar>
-		
 		<view style="height: 10px;"></view>
-		
 		<view class="topinfo fx-h fx-bc fx-ac">
 			<view class="count">{{ user.integral || 0 }}</view>
 			<view class="text">当前可用(趣豆)</view>
 		</view>
-		
 		<view style="height: 10px;"></view>
-	
-		
 		<view class="info-line">
 			<view class="il-top">
-				<text>转账类型</text> 
+				<text>转账类型</text>
 			</view>
 			<view class="il-bot fx-r fx-bc fx-ac">
 				<uv-radio-group v-model="type">
@@ -29,57 +24,45 @@
 				</uv-radio-group>
 			</view>
 		</view>
-		
+
 		<view class="info-line" v-if="type == 'id'">
 			<view class="il-top">
-				<text>收款人id</text> 
+				<text>收款人id</text>
 			</view>
 			<view class="il-bot">
 				<input placeholder="收款人id" @input="tapGetId" type="number" v-model="uid" />
 				<view class="name">{{ sendname }}</view>
 			</view>
 		</view>
-		
-		
 		<view class="info-line" v-if="type == 'phone'">
 			<view class="il-top">
-				<text>手机号码</text> 
+				<text>手机号码</text>
 			</view>
 			<view class="il-bot">
 				<input placeholder="转账手机号码" @input="tapGetMobile" type="number" v-model="new_mobile" />
 				<view class="name">{{ sendname }}</view>
 			</view>
 		</view>
-		
-		
 		<view class="info-line">
 			<view class="il-top">
 				<text>转账金额</text>
 			</view>
 			<view class="il-code">
 				<view class="etb-left">
-					<input placeholder="请输入转账金额"  placeholder-class="placeholder-class" v-model="num" />
+					<input placeholder="请输入转账金额" placeholder-class="placeholder-class" v-model="num" />
 				</view>
 				<!-- <view class="etb-right" @click="num = allMoney()">
 					<text>全部</text>
 				</view> -->
 			</view>
 		</view>
-		
 		<view class="info-line">
-	
-			
-			<view class="update-btn"  @click="tapSubmit">
+			<view class="update-btn" @click="tapSubmit">
 				<text>确认转账</text>
 			</view>
-			
 			<view style="height: 10px;"></view>
 		</view>
-		
-		
-		
-	<PayDialog ref="payDialog" @getPassword="getPassword"></PayDialog>
-		
+		<PayDialog ref="payDialog" @getPassword="getPassword"></PayDialog>
 	</view>
 </template>
 
@@ -90,143 +73,155 @@
 	} from 'vuex';
 	import PayDialog from "@/components/ui-pay/payDialog.vue";
 	export default {
-		computed: mapState(['user','sysData']),
-		components:{
+		computed: mapState(['user', 'sysData']),
+		components: {
 			PayDialog
 		},
 		data() {
 			return {
-				num:'',
-				type : "id",
-				new_mobile : "",
-				uid : "",
-				sendname : "",
-				data : {
-					lv : 0
+				num: '',
+				type: "id",
+				new_mobile: "",
+				uid: "",
+				sendname: "",
+				data: {
+					lv: 0
 				}
 			}
 		},
 		onLoad(options) {
-			this.checkUserLogin({page:this,isLogion:false});
+			this.checkUserLogin({
+				page: this,
+				isLogion: false
+			});
 		},
 		methods: {
 			...mapMutations(['checkUserLogin']),
-			
-			tapGetId:function(ev){
+
+			tapGetId: function(ev) {
 				let id = ev.detail.value;
-				if(id == "") {
+				if (id == "") {
 					this.sendname = '';
 					return;
 				}
 				this
 					.request
-					.post("userCkUserName",{uid : id,type : 2})
+					.post("userCkUserName", {
+						uid: id,
+						type: 2
+					})
 					.then(res => {
-						if(res.code == 200) {
+						if (res.code == 200) {
 							this.sendname = res.data.name;
 						} else {
 							this.sendname = "";
 						}
 					});
 			},
-			
-			
-			tapGetMobile:function(ev){
+
+
+			tapGetMobile: function(ev) {
 				let mobile = ev.detail.value;
-				if(!this.utils.isPoneAvailable(mobile)) {
+				if (!this.utils.isPoneAvailable(mobile)) {
 					this.sendname = '';
 					return;
 				}
 				this
 					.request
-					.post("userCkUserName",{mobile : mobile,type : 2})
+					.post("userCkUserName", {
+						mobile: mobile,
+						type: 2
+					})
 					.then(res => {
-						if(res.code == 200) {
+						if (res.code == 200) {
 							this.sendname = res.data.name;
 						} else {
 							//this.utils.Tip(res.msg);
 						}
 					});
-				
+
 			},
-			
-			tapOpenLog:function(){
-				uni.navigateTo({ url:"integral_gift_log"});
+
+			tapOpenLog: function() {
+				uni.navigateTo({
+					url: "integral_gift_log"
+				});
 			},
-			
-			
+
+
 			/**
 			 * 预计扣除
 			 */
-			getKc:function(){
-				if(isNaN(this.num)) return "0.00";
+			getKc: function() {
+				if (isNaN(this.num)) return "0.00";
 				let val = this.utils.returnFloat(this.num * (this.data.lv / 100));
 				return val;
 			},
 			/**
 			 * 全部
 			 */
-			allMoney:function(){
-				if(this.user.integral <= 0) return 0;
+			allMoney: function() {
+				if (this.user.integral <= 0) return 0;
 				let val = this.utils.returnFloat(this.user.integral * (this.data.lv / 100));
 				return this.user.integral - parseFloat(val);
 			},
-			
+
 			/**
 			 * 提交数据
 			 */
-			tapSubmit:function(){
-				
-				if(this.new_mobile == '' && this.type == 'phone'){
+			tapSubmit: function() {
+
+				if (this.new_mobile == '' && this.type == 'phone') {
 					this.utils.Tip("请输入转账号码");
 					return;
 				}
-				
-				if(this.uid == '' && this.type == 'id'){
+
+				if (this.uid == '' && this.type == 'id') {
 					this.utils.Tip("请输入转账id");
 					return;
 				}
-				
-				if(this.num <= 0 || this.num == ''){
+
+				if (this.num <= 0 || this.num == '') {
 					this.utils.Tip("请输入正确转账金额!");
 					return;
 				}
-				if(parseFloat(this.num) > this.allMoney()){
+				if (parseFloat(this.num) > this.allMoney()) {
 					this.utils.Tip("转账金额超过剩余金额");
 					return;
 				}
-				
+
 				this.$refs['payDialog'].show();
 			},
-			
-			getPassword : function(val){
+
+			getPassword: function(val) {
 				var password = val.password;
 				this.utils.loadIng("提交中..");
 				this
 					.request
-					.post("integralGive",
-					{
-							new_password	:	password,
-							new_mobile		:	this.new_mobile,
-							num				:	this.num,
-							uid 			: 	this.uid,
-							type			:	this.type
-						})
-					.then(res=>{
+					.post("integralGive", {
+						new_password: password,
+						new_mobile: this.new_mobile,
+						num: this.num,
+						uid: this.uid,
+						type: this.type
+					})
+					.then(res => {
 						uni.hideLoading();
-						if(res.code == 200) {
+						if (res.code == 200) {
 							this.utils.Tip(res.msg);
-							setTimeout(function(){ uni.navigateBack();},1000);
-						}else{
+							setTimeout(function() {
+								uni.navigateBack();
+							}, 1000);
+						} else {
 							this.utils.Tip(res.msg);
 							this.$refs['payDialog'].cleanNum();
 						}
-					}).catch(function(){
+					}).catch(function() {
 						uni.hideLoading();
 						this.utils.Tip("网络错误,请稍后尝试");
 					});
 			}
-			
+
 		},
 
 	}
@@ -242,23 +237,25 @@
 		padding-top: 90px;
 		z-index: -1;
 	}
-	
-	.topinfo{
-		    background: #fff;
-			padding: 40rpx 0;
-			.count{
-				background-size: 100%;
-				font-size: 24px;
-				color: #303133;
-				font-weight: 700;
-				background-repeat: no-repeat;
-				background-position: 50%;
-			}
-			.text{
-				color: #909399;
-				font-size: 18px;
-			}
-		
+
+	.topinfo {
+		background: #fff;
+		padding: 40rpx 0;
+
+		.count {
+			background-size: 100%;
+			font-size: 24px;
+			color: #303133;
+			font-weight: 700;
+			background-repeat: no-repeat;
+			background-position: 50%;
+		}
+
+		.text {
+			color: #909399;
+			font-size: 18px;
+		}
+
 	}
 
 	.info-line {
@@ -283,7 +280,12 @@
 		width: 100%;
 		height: 100%;
 	}
-	.il-bot .name{position: absolute;right: 10px;top: 0px;}
+
+	.il-bot .name {
+		position: absolute;
+		right: 10px;
+		top: 0px;
+	}
 
 	.update-btn {
 		width: 90%;
@@ -332,14 +334,48 @@
 		color: #999;
 		border-radius: 100px;
 	}
-	
-	.etb-left{width:80%;height:100%}
-	.placeholder-class{color:#7e7e7e;font-size:13px;font-weight:400}
-	.etb-left input{width:100%;height:100%;color:#484747;font-size:22px;font-weight:600}
-	.etb-right{margin-left:auto;color:#2d2438;font-size:13px}
-	
-	.tip{font-size: 14px;padding: 10px 0;color: #ef4034;}
-	.tip-info{padding: 5px 0;}
-	.tip-info .label{color: #000;font-weight: bold;}
-	.tip-info .money{color: orangered;}
-</style>
+
+	.etb-left {
+		width: 80%;
+		height: 100%
+	}
+
+	.placeholder-class {
+		color: #7e7e7e;
+		font-size: 13px;
+		font-weight: 400
+	}
+
+	.etb-left input {
+		width: 100%;
+		height: 100%;
+		color: #484747;
+		font-size: 22px;
+		font-weight: 600
+	}
+
+	.etb-right {
+		margin-left: auto;
+		color: #2d2438;
+		font-size: 13px
+	}
+
+	.tip {
+		font-size: 14px;
+		padding: 10px 0;
+		color: #ef4034;
+	}
+
+	.tip-info {
+		padding: 5px 0;
+	}
+
+	.tip-info .label {
+		color: #000;
+		font-weight: bold;
+	}
+
+	.tip-info .money {
+		color: orangered;
+	}
+</style>

+ 160 - 0
pages/user/setting/index.nvue

@@ -0,0 +1,160 @@
+<style>
+	.page {
+		background: #f5f5f5;
+		padding: 30rpx;
+	}
+
+	.user-line {
+		padding:0 30rpx;
+		height: 100rpx;
+		background: #fff;
+		border-top: 1px #f5f5f5 solid;
+		flex-direction: row;
+		align-items: center;
+		justify-content: space-between;
+		border-radius: 20rpx;
+		margin-bottom: 20rpx;
+		box-shadow: 5rpx 5rpx 8rpx rgba(0, 0, 0, 0.1);
+	}
+
+	.ul-left-text {
+		color: #585858;
+		font-size: 14px
+	}
+
+	.ul-right {
+		flex: 1;
+		flex-direction: row;
+		align-items: center;
+		justify-content: flex-end
+	}
+
+	.ulr-name-text {
+		color: #9b9b9b;
+		font-size: 13px
+	}
+
+	.ulr-img {
+		width: 50px;
+		height: 50px;
+		border-radius: 100%
+	}
+
+	.ulr-jiantou {
+		width: 16px;
+		height: 16px;
+		margin-left: 10px
+	}
+</style>
+<template>
+	<view class="page">
+		<view class="user-line" @tap="tapOpen" data-url="/pages/user/userinfo/password">
+			<view class="ul-left"><text class="ul-left-text">修改密码</text></view>
+			<view class="ul-right">
+				<view class="ulr-name">
+					<text></text>
+				</view>
+				<image class="ulr-jiantou" src="/static/img/ic_next.png"></image>
+			</view>
+		</view>
+
+		<view class="user-line" @tap="tapOpen" data-url="/pages/user/userinfo/cancellation">
+			<view class="ul-left"><text class="ul-left-text">注销账号</text></view>
+			<view class="ul-right">
+				<view class="ulr-name">
+					<text></text>
+				</view>
+				<image class="ulr-jiantou" src="/static/img/ic_next.png"></image>
+			</view>
+		</view>
+
+
+
+		<view class="user-line" @tap="tapOpen" data-url="/pages/operation/user">
+			<view class="ul-left"><text class="ul-left-text">用户协议</text></view>
+			<view class="ul-right">
+				<view class="ulr-name">
+					<text></text>
+				</view>
+				<image class="ulr-jiantou" src="/static/img/ic_next.png"></image>
+			</view>
+		</view>
+
+
+		<view class="user-line" @tap="tapOpen" data-url="/pages/operation/agreement">
+			<view class="ul-left"><text class="ul-left-text">隐私条款</text></view>
+			<view class="ul-right">
+				<view class="ulr-name">
+					<text></text>
+				</view>
+				<image class="ulr-jiantou" src="/static/img/ic_next.png"></image>
+			</view>
+		</view>
+		<view class="user-line">
+			<view class="ul-left"><text class="ul-left-text">当前版本</text></view>
+			<view class="ul-right">
+				<view class="ulr-name">
+					<text class="ulr-name-text">{{version}}</text>
+				</view>
+				<image class="ulr-jiantou" src="/static/img/ic_next.png"></image>
+			</view>
+		</view>
+		<view class="user-line" @tap="outClick()">
+			<view class="ul-left"><text class="ul-left-text">退出登陆</text></view>
+			<view class="ul-right">
+				<view class="ulr-name">
+					<text></text>
+				</view>
+				<image class="ulr-jiantou" src="/static/img/ic_next.png"></image>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+	import utils from "@/library/utils/Comm.js"
+	import Request from '@/library/Request';
+	import global from "@/config/global.js";
+	export default {
+		computed: mapState(['user']),
+		data() {
+			return {
+				version: ""
+			}
+		},
+		onLoad() {
+			this.version = global.version;
+		},
+		methods: {
+			...mapMutations(['loginOut', 'sysInit', 'setSys']),
+			/**
+			 * 打开文件
+			 * @param {Object} ev
+			 */
+			tapOpen: function(ev) {
+				console.log(ev)
+				let url = ev.currentTarget.dataset.url
+				uni.navigateTo({
+					url: url
+				});
+			},
+			outClick: function() {
+				utils.showModal("确认要退出吗", () => {
+					this.loginOut();
+					uni.showToast({
+						title: '退出成功',
+						mask: true,
+						icon: 'none'
+					});
+					uni.reLaunch({
+						url: "/pages/login/index"
+					});
+				});
+			}
+		},
+	}
+</script>

+ 148 - 0
pages/user/userinfo/area.nvue

@@ -0,0 +1,148 @@
+<style>
+	.page {
+		background: #f5f5f5;
+		padding: 30rpx;
+	}
+
+	.user-line {
+		padding: 30rpx;
+		background: #fff;
+		border-top: 1px #f5f5f5 solid;
+		flex-direction: row;
+		align-items: center;
+		justify-content: space-between;
+		border-radius: 20rpx;
+		margin-bottom: 20rpx;
+		box-shadow: 5rpx 5rpx 8rpx rgba(0, 0, 0, 0.1);
+	}
+
+	.ul-left-text {
+		color: #585858;
+		font-size: 14px
+	}
+
+	.ul-right {
+		flex: 1;
+		flex-direction: row;
+		align-items: center;
+		justify-content: flex-end
+	}
+
+	.ulr-name-text {
+		color: #9b9b9b;
+		font-size: 13px
+	}
+	.ulr-jiantou {
+		width: 16px;
+		height: 16px;
+		margin-left: 10px
+	}
+</style>
+<template>
+	<view class="page">
+		<view class="user-line" @tap="showMulLinkageThreePicker">
+			<view class="ul-left"><text class="ul-left-text">所在地区</text></view>
+			<view class="ul-right">
+				<view class="ulr-name">
+					<text class="ulr-name-text">{{data.region ? data.region : "请选择:省-市-区"}}</text>
+				</view>
+				<image class="ulr-jiantou" src="/static/img/ic_next.png"></image>
+			</view>
+		</view>
+
+		<button class="update-btn" @tap="formSubmit">
+			<text class="btn-text">确认保存</text>
+		</button>
+		<mpvue-city-picker :themeColor="themeColor" ref="mpvueCityPicker" :pickerValueDefault="cityPickerValueDefault"
+			@onCancel="onCancel" @onConfirm="onConfirm"></mpvue-city-picker>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+	import mpvueCityPicker from '@/components/mpvue-citypicker/mpvueCityPicker.nvue'
+	import utils from "@/library/utils/Comm.js"
+	import Request from '@/library/Request';
+	export default {
+		components: {
+			'mpvue-city-picker': mpvueCityPicker
+		},
+		computed: mapState(['user']),
+		data() {
+			return {
+				val: 0,
+				cityPickerValueDefault: [0, 0, 0],
+				themeColor: '#db292b',
+				data: {
+					region: "",
+					City: 0
+				}
+			}
+		},
+		onLoad(options) {
+			var val = options.val || "";
+			this.val = val;
+			this.data.region = val;
+
+		},
+		methods: {
+			// 省市区选择
+			showMulLinkageThreePicker() {
+				this.$refs.mpvueCityPicker.show()
+			},
+			onCancel(e) {
+				this.data.region = "";
+			},
+			onConfirm(e) {
+				this.data.region = e.label;
+				this.data.City = e.cityCode;
+			},
+			radioChange: function(e) {
+				this.val = parseInt(e.detail.value);
+			},
+			formSubmit: function() {
+				var that = this,
+					token = this.user.token;
+				if (this.data.region == "") {
+					utils.Tip("请选择省市区");
+					return;
+				}
+				let formData = {};
+				formData.val = this.data.City;
+				formData.token = token;
+				formData.code = "region_id";
+				utils.loadIng("提交中..");
+				Request
+					.post("userInfoSave", formData)
+					.then(res => {
+						uni.hideLoading();
+						if (res.code == 200) {
+							utils.Tip(res.msg);
+							setTimeout(function() {
+								uni.navigateBack();
+							}, 1000);
+						} else {
+							utils.Tip(res.msg);
+						}
+					}).catch(function() {
+						uni.hideLoading();
+						utils.Tip("网络错误,请稍后尝试");
+					});
+			}
+
+		},
+		onBackPress() {
+			if (this.$refs.mpvueCityPicker.showPicker) {
+				this.$refs.mpvueCityPicker.pickerCancel();
+			}
+		},
+		onUnload() {
+			if (this.$refs.mpvueCityPicker.showPicker) {
+				this.$refs.mpvueCityPicker.pickerCancel()
+			}
+		}
+	}
+</script>

+ 223 - 0
pages/user/userinfo/index.nvue

@@ -0,0 +1,223 @@
+<style>
+	.user-line {
+		padding:0 30rpx;
+		height: 100rpx;
+		background: #fff;
+		border-top: 1px #f5f5f5 solid;
+		flex-direction: row;
+		align-items: center;
+		justify-content: space-between;
+		border-radius: 20rpx;
+		margin-bottom: 20rpx;
+		box-shadow: 5rpx 5rpx 8rpx rgba(0, 0, 0, 0.1);
+	}
+
+	.ul-left-text {
+		color: #555555;
+		font-size: 28rpx
+	}
+
+	.ul-right {
+		flex: 1;
+		flex-direction: row;
+		align-items: center;
+		justify-content: flex-end
+	}
+
+	.ulr-name-text {
+		color: #9c9c9c;
+		font-size: 26rpx
+	}
+
+	.ulr-img {
+		width: 40px;
+		height: 40px;
+	}
+
+	.ulr-img .image {
+		width: 40px;
+		height: 40px;
+		border-radius: 100%
+	}
+
+	.ulr-jiantou {
+		width: 16px;
+		height: 16px;
+		margin-left: 10px
+	}
+
+	.page {
+		padding: 20rpx;
+	}
+</style>
+<template>
+	<view class="page">
+
+		<view class="user-line">
+			<view class="ul-left"><text class="ul-left-text">头像</text></view>
+			<view class="ul-right" @tap="upImgs">
+				<view class="ulr-img">
+					<image class="image" :src="userInfo.avatar ? userInfo.avatar : '/static/img/user-avatar2.png'"
+						mode="aspectFill">
+					</image>
+				</view>
+				<image class="ulr-jiantou" src="/static/img/ic_next.png"></image>
+			</view>
+		</view>
+		<view class="user-line" @tap="tapOpen" :data-url="'/pages/user/userinfo/mobile'">
+			<view class="ul-left"><text class="ul-left-text">手机号码</text></view>
+			<view class="ul-right">
+				<view class="ulr-name">
+					<text class="ulr-name-text">{{userInfo.mobile}}</text>
+				</view>
+			</view>
+		</view>
+
+		<view class="user-line" @tap="tapOpen" :data-url="'/pages/user/userinfo/area?val='+ userInfo.region">
+			<view class="ul-left"><text class="ul-left-text">地区</text></view>
+			<view class="ul-right">
+				<view class="ulr-name">
+					<text class="ulr-name-text">{{userInfo.region || "请输入省市区"}}</text>
+				</view>
+				<image class="ulr-jiantou" src="/static/img/ic_next.png"></image>
+			</view>
+		</view>
+
+		<view class="user-line" @tap="tapOpen" :data-url="'/pages/user/userinfo/nickname?val='+ userInfo.nickname">
+			<view class="ul-left"><text class="ul-left-text">昵称</text></view>
+			<view class="ul-right">
+				<view class="ulr-name">
+					<text class="ulr-name-text">{{userInfo.nickname}}</text>
+				</view>
+				<image class="ulr-jiantou" src="/static/img/ic_next.png"></image>
+			</view>
+		</view>
+
+
+		<view class="user-line" @tap="tapOpen" data-url="/pages/user/address/address">
+			<view class="ul-left"><text class="ul-left-text">地址管理</text></view>
+			<view class="ul-right">
+				<view class="ulr-name">
+					<text></text>
+				</view>
+				<image class="ulr-jiantou" src="/static/img/ic_next.png"></image>
+			</view>
+		</view>
+
+		<view class="user-line" @tap="tapOpen" data-url="/pages/user/userinfo/password">
+			<view class="ul-left"><text class="ul-left-text">修改密码</text></view>
+			<view class="ul-right">
+				<view class="ulr-name">
+					<text></text>
+				</view>
+				<image class="ulr-jiantou" src="/static/img/ic_next.png"></image>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+	import utils from "@/library/utils/Comm.js"
+	import Request from '@/library/Request';
+	export default {
+		computed: mapState(['user']),
+		data() {
+			return {
+				userInfo: {}
+			}
+		},
+		onShow() {
+			this.getData();
+		},
+		methods: {
+			...mapMutations(['loginOut']),
+			getData() {
+				Request
+					.post("userInfo")
+					.then(res => {
+						if (res.code == 200) {
+							this.userInfo = res.data;
+						} else {
+							utils.Tip(res.msg);
+						}
+					})
+					.catch(err => {
+						utils.Tip("网络错误,请稍后尝试");
+					});
+			},
+			/**
+			 * 打开文件
+			 * @param {Object} ev
+			 */
+			tapOpen: function(ev) {
+				console.log(ev)
+				let url = ev.currentTarget.dataset.url
+				uni.navigateTo({
+					url: url
+				});
+			},
+
+
+			upImgs: function() {
+				this.$store.dispatch('permission/requestPermissions', 'WRITE_EXTERNAL_STORAGE').then(res => {
+					// if (res !== 1) return;
+					console.log(res, '11');
+					this.upImg();
+				});
+				return;
+			},
+
+			upImg: function() {
+				uni.chooseImage({
+					count: 1,
+					sizeType: ['compressed'],
+					success: (res) => {
+						let img = res.tempFilePaths[0];
+						utils.loadIng();
+						Request
+							.post("qiniu")
+							.then(res => {
+								uni.uploadFile({
+									url: 'https://up-z0.qiniup.com',
+									filePath: img,
+									name: 'file',
+									formData: {
+										'key': res.data.mk_str,
+										'token': res.data.token
+									},
+									success: (uploadFileRes) => {
+										this.request.post("saveAvatar", {
+											img: res.data.url
+										}).then(
+											(res2) => {
+												uni.hideLoading();
+												if (res2.code == 200) {
+													this.userInfo.avatar = res.data
+														.url;
+												} else {
+													utils.Tip(res2.msg);
+												}
+											}).catch(err => {
+											utils.Tip("网络错误,请稍后尝试");
+										});
+									},
+									fail: () => {
+										uni.hideLoading();
+										utils.Tip("上传失败,请重新尝试");
+									}
+								});
+							})
+							.catch(err => {
+								uni.hideLoading();
+								utils.Tip("请重新上传图片");
+							});
+					}
+				});
+			},
+		},
+	}
+</script>

+ 69 - 0
pages/user/userinfo/nickname.nvue

@@ -0,0 +1,69 @@
+<style>
+	page{background: #ffffff;}
+	.m-app{width:100vw}
+	button.sub-btn{width:100%;height:40px;line-height: 40px; background:#db292b;border-radius:20px;font-size:15px;font-weight:500;color:#ffffff;margin-top: 30px;}
+    .form-body{width:calc(100% - 24px);background: #ffffff;padding: 0px 12px;}
+	.form-title{width:100%;text-align: left;font-size: 14px;color:#333333;height:38px;line-height: 38px;}
+	.form-content{width:100%}
+	input.form-input{height:38px;width:100%;text-align: left;color:#db292b;border-bottom: 1px solid #db292b;font-size: 14px;}
+	.form-msg{font-size: 12px;text-align: left;width:100%;height:30px;line-height: 30px;color:#303033}
+</style>
+<template>
+	<view class="m-app">
+		<form report-submit="true" @submit="formSubmit">
+		<view class='form-body'>
+			<view class="form-title">
+				用户昵称:
+			</view>
+			<view class="form-content">
+				<input class="form-input" type="text" name="val" :value="val"/>
+			</view>
+			<view class="form-msg">限4-16个字符,一个汉字为两个字符</view>
+			<button class="nt sub-btn" formType="submit">确认保存</button>
+		</view>
+		</form>
+	</view>
+</template>
+
+<script>
+	import {mapState,mapMutations} from 'vuex'
+	export default {
+		computed: mapState(['user']),
+		data() {
+			return {
+				val:""
+			}
+		},
+		onLoad(options) {
+			this.val = options.val || "";
+			
+		},
+		methods: {
+			formSubmit:function(e){
+				var that = this , formData = e.detail.value;
+				if(!this.utils.isDefine(formData.val)){
+					this.utils.Tip("输入正确的用户昵称");
+					return;
+				}
+				formData.code = "nickname";
+				this.utils.loadIng("提交中..")
+				this
+					.request
+					.post("userInfoSave",formData)
+					.then(res=>{
+						uni.hideLoading();
+						if(res.code == 200) {
+							this.utils.Tip(res.msg);
+							setTimeout(function(){ uni.navigateBack();},1000);
+						}else{
+							that.utils.Tip(res.msg);
+						}
+					}).catch(function(){
+						uni.hideLoading();
+						that.utils.Tip("网络错误,请稍后尝试");
+					});
+			}
+			
+		},
+	}
+</script>

+ 229 - 0
pages/user/userinfo/password.nvue

@@ -0,0 +1,229 @@
+<template>
+	<view class="body">
+		<view class="info-line">
+			<view class="il-top">
+				<text class="il-top-text">手机账号</text>
+			</view>
+			<text class="il-code" style="color: #ccc;">
+				{{ getHideMobile(user.mobile) }}
+			</text>
+		</view>
+		<view class="info-line">
+			<view class="il-top">
+				<text class="il-top-text">验证码</text>
+			</view>
+			<view class="il-code">
+				<input class="input" placeholder="验证码" type="number" v-model="verify_code" />
+				<text class="ilc-btn" v-if="verifyCount == 0" @click="getverifyPhone">获取验证码</text>
+				<text class="ilc-btn text" v-else>{{verifyCount}} s</text>
+			</view>
+		</view>
+		<view class="info-line">
+			<view class="il-top">
+				<text class="il-top-text">输入密码</text>
+			</view>
+			<view class="il-bot">
+				<input class="input" placeholder="输入密码" v-model="new_password" password />
+			</view>
+		</view>
+		<view class="info-line">
+			<view class="il-top">
+				<text class="il-top-text">再次输入密码</text>
+			</view>
+			<view class="il-bot">
+				<input class="input" placeholder="再次输入密码" v-model="two_password" password />
+			</view>
+		</view>
+		<button class="update-btn" @click="tapSubmit">
+			<text class="btn-text">修改</text>
+		</button>
+
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+	import utils from "@/library/utils/Comm.js"
+	import Request from '@/library/Request';
+	export default {
+		computed: mapState(['user']),
+		data() {
+			return {
+				verify_code: "",
+				verifyCount: 0,
+				new_password: "",
+				two_password: ""
+			}
+		},
+		onLoad(options) {
+
+		},
+		methods: {
+
+			getverifyPhone: function() {
+				if (this.verifyCount > 0) return;
+				uni.showLoading({
+					title: "获取中..."
+				});
+				Request
+					.post("userYzm", {
+						type: "mobile"
+					})
+					.then(res => {
+						console.log(res);
+						uni.hideLoading();
+						if (res.code == 200) {
+							if (res.data.status == 2) {
+								utils.CountDowm(res.data.time, (e, s) => {
+									this.verifyCount = e;
+								});
+							}
+
+							if (res.data.status == 1) {
+								utils.CountDowm(120, (e, s) => {
+									this.verifyCount = e;
+								});
+							}
+
+						} else {
+							uni.showToast({
+								title: res.msg,
+								mask: true,
+								icon: 'none'
+							});
+						}
+					})
+					.catch(err => {
+						uni.showToast({
+							title: '获取失败',
+							mask: true,
+							icon: 'none'
+						});
+						uni.hideLoading();
+					});
+			},
+			/**
+			 * 提交数据
+			 */
+			tapSubmit: function() {
+
+				if (this.verify_code == '') {
+					utils.Tip("请输入验证码");
+					return;
+				}
+
+				if (this.new_password == '') {
+					utils.Tip("请输入新密码");
+					return;
+				}
+
+
+				if (this.new_password.length < 5) {
+					utils.Tip("新密码不能少于5位");
+					return;
+				}
+
+				if (this.new_password != this.two_password) {
+					utils.Tip("两次密码不相等");
+					return;
+				}
+				utils.loadIng("提交中..");
+				Request
+					.post("updatePassword", {
+						new_password: this.new_password,
+						verify_code: this.verify_code
+					})
+					.then(res => {
+						uni.hideLoading();
+						if (res.code == 200) {
+							utils.Tip(res.msg, () => {
+								uni.navigateBack();
+							});
+						} else {
+							utils.Tip(res.msg);
+						}
+					}).catch(function() {
+						uni.hideLoading();
+						utils.Tip("网络错误,请稍后尝试");
+					});
+
+			},
+
+
+			getHideMobile: function(text) {
+				if (!utils.isDefine(text)) {
+					return "";
+				}
+				return text.substr(0, 3) + "******" + text.substr(text.length - 3, 3);
+			},
+
+		},
+
+	}
+</script>
+
+
+<style lang="scss">
+	.body {
+		background: #F5F5F5;
+		padding: 30rpx;
+	}
+
+	.info-line {
+		padding:0 30rpx;
+		height: 100rpx;
+		background: #fff;
+		border-top: 1px #f5f5f5 solid;
+		flex-direction: row;
+		align-items: center;
+		justify-content: space-between;
+		border-radius: 20rpx;
+		margin-bottom: 20rpx;
+		box-shadow: 5rpx 5rpx 8rpx rgba(0, 0, 0, 0.1);
+	}
+
+	.il-top-text {
+		color: #333;
+		font-size: 28rpx;
+	}
+
+
+	.il-bot {
+		flex: 1;
+
+		.input {
+			text-align: right;
+			flex: 1;
+			font-size: 26rpx;
+		}
+	}
+
+	.il-code {
+		text-align: right;
+		flex: 1;
+		flex-direction: row;
+		align-items: center;
+	}
+
+	.il-code .input {
+		padding-left: 10rpx;
+		text-align: right;
+		flex: 1;
+		font-size: 13px;
+	}
+
+	.ilc-btn {
+		width: 70px;
+		text-align: center;
+		line-height: 30px;
+		font-size: 12px;
+		color: #db292b;
+
+		&.text {
+			color: #999;
+		}
+	}
+</style>

二進制
static/ad/5.png


二進制
static/img/indexTopBg.png


二進制
static/img/tream_bg.jpg


二進制
static/img/tream_bg.png


二進制
unpackage/cache.rar


二進制
unpackage/unpackage.rar