lhl 2 years ago
parent
commit
00a1fab312

+ 20 - 3
api/api.js

@@ -454,8 +454,25 @@ export function newcomerList(data) {
 	return request.get('diy/newcomer_list', data,{
 		noAuth: true
 	});
-}
-
-
+}
 
+/**
+ * 设置支付密码
+ * 
+ */
+export function tradePassword(data) {
+	return request.post('trade_password', data,{
+		noAuth: true
+	});
+}
+
+/**
+ * 设置节点
+ * 
+ */
+export function setPoint(data) {
+	return request.post('user/link', data,{
+		noAuth: true
+	});
+}
 

+ 4 - 2
main.js

@@ -14,10 +14,12 @@ import store from './store'
 import Cache from './utils/cache'
 import util from 'utils/util'
 import configs from './config/app.js'
-import socket from './libs/new_chat.js'
+import socket from './libs/new_chat.js'
+import io from './utils/io.js'
 Vue.prototype.$util = util;
 Vue.prototype.$config = configs;
-Vue.prototype.$Cache = Cache;
+Vue.prototype.$Cache = Cache;
+Vue.prototype.$io = io
 Vue.prototype.$eventHub = new Vue();
 Vue.prototype.$socket = new socket();
 Vue.config.productionTip = false

+ 2 - 2
manifest.json

@@ -2,8 +2,8 @@
     "name" : "易博优购",
     "appid" : "__UNI__331F6F8",
     "description" : "易博优购",
-    "versionName" : "1.4.7",
-    "versionCode" : 147,
+    "versionName" : "1.4.9",
+    "versionCode" : 149,
     "transformPx" : false,
     /* 5+App特有相关 */
     "app-plus" : {

+ 65 - 5
pages.json

@@ -3,6 +3,15 @@
 		"^w-(.*)": "@/uni_modules/wmf-code/components/w-$1/index.vue" //二维码条形码的配置 如果是uni_modules
 	},
 	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+		// #ifdef APP-PLUS
+		{
+			"path": "pages/index/index",
+			"style": {
+				"navigationBarTitleText": "",
+				"navigationStyle": "custom",
+				"navigationBarTextStyle": "white"
+			}
+		},
 		{
 			"path": "pages/guide/index",
 			"style": {
@@ -12,7 +21,6 @@
 				"navigationStyle": "custom"
 			}
 		},
-		// #ifdef APP-PLUS
 		{
 			"path": "pages/index/downLoad",
 			"style": {
@@ -23,12 +31,14 @@
 			}
 		},
 		// #endif
+		// #ifndef APP-PLUS
 		{
-			"path": "pages/store_cate/store_cate",
+			"path": "pages/guide/index",
 			"style": {
-				"navigationBarTitleText": "门店",
-				"navigationStyle": "custom",
-				"navigationBarTextStyle": "white"
+				"app-plus": {
+					"titleNView": false //禁用原生导航栏
+				},
+				"navigationStyle": "custom"
 			}
 		},
 		{
@@ -39,6 +49,16 @@
 				"navigationBarTextStyle": "white"
 			}
 		},
+		// #endif
+		{
+			"path": "pages/store_cate/store_cate",
+			"style": {
+				"navigationBarTitleText": "门店",
+				"navigationStyle": "custom",
+				"navigationBarTextStyle": "white"
+			}
+		},
+		
 		{
 			"path": "pages/order_addcart/order_addcart",
 			"style": {
@@ -591,6 +611,46 @@
 						}
 					}
 				},
+				{
+					"path": "user_bus_edit/index",
+					"style": {
+						"navigationBarTitleText": "设置支付密码"
+				
+							// #ifdef MP
+							// 	,
+							// "navigationBarTextStyle": "white"
+							// "navigationBarBackgroundColor": "#e93323"
+							// #endif
+							,
+						"app-plus": {
+							// #ifdef APP-PLUS
+							"titleNView": {
+								"type": "default"
+							}
+							// #endif
+						}
+					}
+				},
+				{
+					"path": "user_point/index",
+					"style": {
+						"navigationBarTitleText": "设置节点"
+				
+							// #ifdef MP
+							// 	,
+							// "navigationBarTextStyle": "white"
+							// "navigationBarBackgroundColor": "#e93323"
+							// #endif
+							,
+						"app-plus": {
+							// #ifdef APP-PLUS
+							"titleNView": {
+								"type": "default"
+							}
+							// #endif
+						}
+					}
+				},
 				{
 					"path": "promoter-list/index",
 					"style": {

+ 8 - 4
pages/guide/index.vue

@@ -1,6 +1,7 @@
 <template>
 	<view class="main">
-		<guide v-if="guidePages" :advData="advData"></guide>
+		<guide v-if="guidePages" :advData="advData"></guide>
+		<view class="" v-else></view>
 	</view>
 </template>
 
@@ -37,16 +38,19 @@
 						url: '/pages/index/index'
 					});
 					return
-				}
+				}
+				console.log(new Date().getTime(),'start')
 				getOpenAdv().then(res => {
 					if (res.data.status == 0 || res.data.value.length == 0) {
 						uni.switchTab({
 							url: '/pages/index/index'
-						});
+						});
+						console.log(new Date().getTime(),'indexend')
 					} else if (res.data.status && (res.data.value.length || res.data.video_link)) {
 						this.advData = res.data
 						uni.setStorageSync('guideDate', new Date().toLocaleDateString());
-						this.guidePages = true
+						this.guidePages = true
+						console.log(new Date().getTime(),'end')
 					}
 				}).catch(err => {
 					uni.switchTab({

+ 427 - 398
pages/index/components/goodList.vue

@@ -1,399 +1,428 @@
-<template>
-	<!-- 商品列表 -->
-	<view v-show="!isSortType" :style="{padding:'0 '+prConfig+'px'}">
-		<view class="index-product-wrapper" :class="bgStyle===0?'':'borderRadius15'" :style="{ marginTop: mbConfig*2 + 'rpx', background: themeColor }" v-if="tempArr.length">
-			<!-- 单列 -->
-			<block v-if="itemStyle == 0">
-				<view class="list-box listA" :class="tempArr.length > 0 ? 'fadeIn on' : ''">
-					<view class="item" :class="conStyle?'borderRadius15':''" v-for="(item, index) in tempArr" :key="index" @click="goDetail(item)">
-						<view class="pictrue">
-							<span class="pictrue_log pictrue_log_class" :style="'background-color:'+labelColor" v-if="item.activity && item.activity.type === '1'">秒杀</span>
-							<span class="pictrue_log pictrue_log_class" :style="'background-color:'+labelColor" v-if="item.activity && item.activity.type === '2'">砍价</span>
-							<span class="pictrue_log pictrue_log_class" :style="'background-color:'+labelColor" v-if="item.activity && item.activity.type === '3'">拼团</span>
-							<image :src="item.image" mode="aspectFill"></image>
-						</view>
-						<view class="text-info text-add" >
-							<view>
-								<view class="title line2" v-if="titleShow">{{ item.store_name }}</view>
-								<slot name="center"></slot>
-								<view class="old-price" v-if="opriceShow">
-									<text>¥</text>
-									{{ item.ot_price }}
-								</view>
-							</view>
-							<view class="price" :style="'color:'+fontColor">
-								<view v-if="priceShow">
-									<text>¥</text>
-									{{ item.price }}
-								</view>
-								<view class="txt" :style="'border:1px solid '+labelColor+';color:'+labelColor" :class="priceShow?'':'on'" v-if="item.checkCoupon && couponShow">券</view>
-							</view>
-						</view>
-					</view>
-				</view>
-			</block>
-			<!-- 两列 -->
-			<block v-if="itemStyle == 1">
-				<view class="list-box listC" :class="tempArr.length > 0 ? 'fadeIn on' : ''">
-					<view class="item" :class="conStyle?'borderRadius15':''" v-for="(item, index) in tempArr" :key="index" @click="goDetail(item)">
-						<view class="pictrue">
-							<span class="pictrue_log pictrue_log_class" :style="'background-color:'+labelColor" v-if="item.activity && item.activity.type === '1'">秒杀</span>
-							<span class="pictrue_log pictrue_log_class" :style="'background-color:'+labelColor" v-if="item.activity && item.activity.type === '2'">砍价</span>
-							<span class="pictrue_log pictrue_log_class" :style="'background-color:'+labelColor" v-if="item.activity && item.activity.type === '3'">拼团</span>
-							<image :src="item.image" mode="aspectFill"></image>
-						</view>
-						<view class="text-info">
-							<view class="title line1" v-if="titleShow">{{ item.store_name }}</view>
-							<slot name="center"></slot>
-							<view class="old-price" v-if="opriceShow">
-								<text>¥</text>
-								{{ item.ot_price }}
-							</view>
-							<view class="price" :style="'color:'+fontColor">
-								<view v-if="priceShow">
-									<text>¥</text>
-									{{ item.price }}
-								</view>
-								<view class="txt" :style="'border:1px solid '+labelColor+';color:'+labelColor" :class="priceShow?'':'on'" v-if="item.checkCoupon && couponShow">券</view>
-							</view>
-						</view>
-					</view>
-				</view>
-			</block>
-			<!-- 三列 -->
-			<block v-if="itemStyle == 2">
-				<view class="list-box listB" :class="tempArr.length > 0 ? 'fadeIn on' : ''">
-					<view class="item" :class="conStyle?'borderRadius15':''" v-for="(item, index) in tempArr" :key="index" @click="goDetail(item)">
-						<view class="pictrue">
-							<span class="pictrue_log pictrue_log_class" :style="'background-color:'+labelColor" v-if="item.activity && item.activity.type === '1'">秒杀</span>
-							<span class="pictrue_log pictrue_log_class" :style="'background-color:'+labelColor" v-if="item.activity && item.activity.type === '2'">砍价</span>
-							<span class="pictrue_log pictrue_log_class" :style="'background-color:'+labelColor" v-if="item.activity && item.activity.type === '3'">拼团</span>
-							<image :src="item.image" mode="aspectFill"></image>
-						</view>
-						<view class="text-info text-add">
-							<view>
-								<view class="title line1" v-if="titleShow">{{ item.store_name }}</view>
-								<slot name="center"></slot>
-								<view class="old-price" v-if="opriceShow">
-									<text>¥</text>
-									{{ item.ot_price }}
-								</view>
-							</view>
-							<view class="price" :style="'color:'+fontColor">
-								<view v-if="priceShow">
-									<text>¥</text>
-									{{ item.price }}
-								</view>
-								<view class="txt" :style="'border:1px solid '+labelColor+';color:'+labelColor" :class="priceShow?'':'on'" v-if="item.checkCoupon && couponShow">券</view>
-							</view>
-						</view>
-					</view>
-				</view>
-			</block>
-		</view>
-		<!-- 大图 -->
-		<block v-if="itemStyle == 3 && tempArr.length" :style="{ marginTop: mbConfig + 'rpx' }">
-			<view class="listBig" :class="bgStyle===0?'':'borderRadius15'" :style="{ background: themeColor }">
-				<view class="itemBig" :class="conStyle?'borderRadius15':''" v-for="(item,index) in tempArr" :key="index" @click="goDetail(item)">
-					<view class="img-box">
-						<span class="pictrue_log_big pictrue_log_class" :style="'background-color:'+labelColor" v-if="item.activity && item.activity.type === '1'">秒杀</span>
-						<span class="pictrue_log_big pictrue_log_class" :style="'background-color:'+labelColor" v-if="item.activity && item.activity.type === '2'">砍价</span>
-						<span class="pictrue_log_big pictrue_log_class" :style="'background-color:'+labelColor" v-if="item.activity && item.activity.type === '3'">拼团</span>
-						<image :src="item.recommend_image" mode="aspectFill" v-if="item.recommend_image"></image>
-						<image :src="item.image" mode="aspectFill" v-else></image>
-					</view>
-					<view class="name line2"><span class="coupon" :style="'border:1px solid '+labelColor+';color:'+labelColor" v-if="item.checkCoupon && couponShow">券</span><span v-if="titleShow">{{item.store_name}}</span></view>
-					<slot name="center"></slot>
-					<view class="price" :style="'color:'+fontColor"><span v-if="priceShow">¥<span class="num">{{item.price}}</span></span><span class="old-price"
-						 v-if="opriceShow">¥{{item.ot_price}}</span></view>
-				</view>
-			</view>
-		</block>
-	</view>
-</template>
-
-<script>
-	import {
-		getProductslist
-	} from '@/api/store.js';
-	export default {
-		name: 'goodList',
-		props: {
-			dataConfig: {
-				type: Object,
-				default: () => {}
-			},
-			isSortType: {
-				type: String | Number,
-				default: 0
-			}
-		},
-		data() {
-			return {
-				tempArr: [],
-       // scrollTop:0,
-				mbConfig: this.dataConfig.mbConfig.val,
-				numConfig: this.dataConfig.numConfig.val,
-				themeColor: this.dataConfig.themeColor.color[0].item,
-				itemStyle: this.dataConfig.itemStyle.type,
-				sortType: this.dataConfig.goodsSort.type,
-				type: this.dataConfig.tabConfig.tabVal || 0,
-				selectId: this.dataConfig.selectConfig.activeValue,
-				productIds: this.dataConfig.goodsList.ids || [],
-				opriceShow: this.dataConfig.opriceShow.val, //商品原价
-				priceShow: this.dataConfig.priceShow.val, //商品价格
-				titleShow: this.dataConfig.titleShow.val, //商品名称
-				couponShow: this.dataConfig.couponShow.val, //商品优惠券
-				prConfig: this.dataConfig.prConfig.val, //左右边距
-				bgStyle: this.dataConfig.bgStyle.type,//背景样式
-				conStyle: this.dataConfig.conStyle.type,//内容样式
-				fontColor: this.dataConfig.fontColor.color?this.dataConfig.fontColor.color[0].item:'',
-				labelColor: this.dataConfig.labelColor.color?this.dataConfig.labelColor.color[0].item:''
-			};
-		},
-		created() {},
-		mounted() {
-			this.productslist();
-		},
-    // onPageScroll({scrollTop}) {
-    //     // 传入scrollTop值并触发所有easy-loadimage组件下的滚动监听事件
-    //     this.scrollTop = scrollTop;
-    // },
-		methods: {
-			productslist() {
-				let limit = this.$config.LIMIT;
-				let data = {};
-				if (this.type == 1) {
-					data = {
-						ids: this.productIds.join(','),
-					};
-				} else {
-					data = {
-						priceOrder: this.sortType == 2 ? 'desc' : '',
-						salesOrder: this.sortType == 1 ? 'desc' : '',
-						selectId: this.selectId[this.selectId.length-1] || 0,
-						limit: this.numConfig
-					};
-				}
-				getProductslist(data).then(res => {
-					this.tempArr = res.data;
-				});
-			},
-			goDetail(item) {
-				this.$emit('detail', item);
-			}
-		}
-	};
-</script>
-
-<style lang="scss">
-  .text-add {
-    display: flex;
-    flex-direction: column;
-    justify-content: space-between;
-  }
-	.listBig {
-		padding: 1px 20rpx 20rpx 20rpx;
-		.borderRadius15{
-			image{
-				border-radius: 20rpx 20rpx 0 0;
-			}
-		}
-
-		.itemBig {
-			width: 100%;
-			margin-top: 20rpx;
-			background-color: #fff;
-			padding-bottom: 15rpx;
-			
-			.img-box {
-				width: 100%;
-				height: 284rpx;
-				position: relative;
-				.pictrue_log_big{
-					border-radius: 20rpx 0 20rpx 0;
-				}
-				image {
-					width: 100%;
-					height: 100%;
-				}
-			}
-
-			.name {
-				font-size: 28rpx;
-				font-weight: bold;
-				margin-top: 16rpx;
-				padding: 0 8px;
-
-				.coupon {
-					display: inline-block;
-					text-align: center;
-					width: 32rpx;
-					border-radius: 4rpx;
-					font-size: 20rpx;
-					font-weight: normal;
-					margin-right: 10rpx;
-				}
-			}
-
-			.price {
-				font-weight: bold;
-				font-size: 12px;
-				margin-top: 10rpx;
-				padding: 0 8px;
-
-				.num {
-					font-size: 32rpx;
-					margin-right: 10rpx;
-				}
-
-				.old-price {
-					color: #aaa;
-					font-weight: normal;
-					text-decoration: line-through;
-				}
-			}
-		}
-	}
-
-	.index-product-wrapper {
-
-		.list-box {
-			display: flex;
-			flex-wrap: wrap;
-			justify-content: space-between;
-			padding: 20rpx 20rpx 0;
-
-			.item {
-				width: 345rpx;
-				margin-bottom: 20rpx;
-				background-color: #fff;
-				overflow: hidden;
-				position: relative;
-
-				&.on {
-					border-radius: 0;
-				}
-
-				.pictrue {
-					width: 347rpx;
-					height: 347rpx;
-				}
-
-				.pictrue_log {
-					width: 92rpx;
-					height: 44rpx;
-					font-size: 26rpx;
-					line-height: 44rpx;
-					border-radius: 0 0 20rpx 0!important;
-				}
-
-				image {
-					width: 100%;
-					// height: 346rpx;
-					height: 100%;
-					display: block;
-				}
-
-				.text-info {
-					padding: 10rpx 20rpx 15rpx;
-
-					.title {
-						color: #222222;
-					}
-
-					.old-price {
-						margin-top: 4rpx;
-						font-size: 26rpx;
-						color: #aaaaaa;
-						text-decoration: line-through;
-
-						text {
-							margin-right: 2px;
-							font-size: 20rpx;
-						}
-					}
-
-					.price {
-						display: flex;
-						align-items: flex-end;
-						font-size: 36rpx;
-						font-weight: 550;
-
-						text {
-							padding-bottom: 4rpx;
-							font-size: 26rpx;
-							font-weight: normal;
-						}
-
-						.txt {
-							display: flex;
-							align-items: center;
-							justify-content: center;
-							width: 28rpx;
-							height: 28rpx;
-							margin-left: 15rpx;
-							margin-bottom: 10rpx;
-							border-radius: 4rpx;
-							font-size: 20rpx;
-							font-weight: normal;
-
-							&.on {
-								margin-left: 0;
-							}
-						}
-					}
-				}
-			}
-
-			&.on {
-				display: flex;
-			}
-
-			&.listA {
-				.item {
-					display: flex;
-					width: 100%;
-
-					.pictrue {
-						width: 220rpx;
-						height: 220rpx;
-					}
-
-					.text-info {
-						// width: 490rpx;
-						flex: 1
-					}
-				}
-			}
-
-			&.listC {
-				.item{
-					width: 48.5%;
-				}
-				.pictrue {
-					width: 100%;
-					height: 345rpx;
-				}
-			}
-
-			&.listB {
-				justify-content: inherit;
-
-				.item {
-					width: 31.6%;
-					margin-right: 16rpx;
-
-					.pictrue {
-						width: 100%;
-						height: 220rpx;
-					}
-
-					&:nth-child(3n) {
-						margin-right: 0;
-					}
-				}
-			}
-		}
-	}
+<template>
+	<!-- 商品列表 -->
+	<view v-show="!isSortType" :style="{padding:'0 '+prConfig+'px'}">
+		<view class="index-product-wrapper" :class="bgStyle===0?'':'borderRadius15'"
+			:style="{ marginTop: mbConfig*2 + 'rpx', background: themeColor }" v-if="tempArr.length">
+			<!-- 单列 -->
+			<block v-if="itemStyle == 0">
+				<view class="list-box listA" :class="tempArr.length > 0 ? 'fadeIn on' : ''">
+					<view class="item" :class="conStyle?'borderRadius15':''" v-for="(item, index) in tempArr"
+						:key="index" @click="goDetail(item)">
+						<view class="pictrue">
+							<span class="pictrue_log pictrue_log_class" :style="'background-color:'+labelColor"
+								v-if="item.activity && item.activity.type === '1'">秒杀</span>
+							<span class="pictrue_log pictrue_log_class" :style="'background-color:'+labelColor"
+								v-if="item.activity && item.activity.type === '2'">砍价</span>
+							<span class="pictrue_log pictrue_log_class" :style="'background-color:'+labelColor"
+								v-if="item.activity && item.activity.type === '3'">拼团</span>
+							<image :src="item.image" mode="aspectFill"></image>
+						</view>
+						<view class="text-info text-add">
+							<view>
+								<view class="title line2" v-if="titleShow">{{ item.store_name }}</view>
+								<slot name="center"></slot>
+								<view class="old-price" v-if="opriceShow" :style="'color:'+fontColor">
+									<text>¥</text>
+									{{ item.ot_price }}
+								</view>
+							</view>
+							<view class="price" :style="'color:'+fontColor">
+								<view v-if="priceShow">
+									<text>¥</text>
+									{{ item.price }}
+								</view>
+								<view class="txt" :style="'border:1px solid '+labelColor+';color:'+labelColor"
+									:class="priceShow?'':'on'" v-if="item.checkCoupon && couponShow">券</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</block>
+			<!-- 两列 -->
+			<block v-if="itemStyle == 1">
+				<view class="list-box listC" :class="tempArr.length > 0 ? 'fadeIn on' : ''">
+					<view class="item" :class="conStyle?'borderRadius15':''" v-for="(item, index) in tempArr"
+						:key="index" @click="goDetail(item)">
+						<view class="pictrue">
+							<span class="pictrue_log pictrue_log_class" :style="'background-color:'+labelColor"
+								v-if="item.activity && item.activity.type === '1'">秒杀</span>
+							<span class="pictrue_log pictrue_log_class" :style="'background-color:'+labelColor"
+								v-if="item.activity && item.activity.type === '2'">砍价</span>
+							<span class="pictrue_log pictrue_log_class" :style="'background-color:'+labelColor"
+								v-if="item.activity && item.activity.type === '3'">拼团</span>
+							<image :src="item.image" mode="aspectFill"></image>
+						</view>
+						<view class="text-info">
+							<view class="title line1" v-if="titleShow">{{ item.store_name }}</view>
+							<slot name="center"></slot>
+							<view class="old-price" v-if="opriceShow" :style="'color:'+fontColor">
+								<text>¥</text>
+								{{ item.ot_price }}
+							</view>
+							<view class="price" :style="'color:'+fontColor">
+								<view v-if="priceShow">
+									<text>¥</text>
+									{{ item.price }}
+								</view>
+								<view class="txt" :style="'border:1px solid '+labelColor+';color:'+labelColor"
+									:class="priceShow?'':'on'" v-if="item.checkCoupon && couponShow">券</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</block>
+			<!-- 三列 -->
+			<block v-if="itemStyle == 2">
+				<view class="list-box listB" :class="tempArr.length > 0 ? 'fadeIn on' : ''">
+					<view class="item" :class="conStyle?'borderRadius15':''" v-for="(item, index) in tempArr"
+						:key="index" @click="goDetail(item)">
+						<view class="pictrue">
+							<span class="pictrue_log pictrue_log_class" :style="'background-color:'+labelColor"
+								v-if="item.activity && item.activity.type === '1'">秒杀</span>
+							<span class="pictrue_log pictrue_log_class" :style="'background-color:'+labelColor"
+								v-if="item.activity && item.activity.type === '2'">砍价</span>
+							<span class="pictrue_log pictrue_log_class" :style="'background-color:'+labelColor"
+								v-if="item.activity && item.activity.type === '3'">拼团</span>
+							<image :src="item.image" mode="aspectFill"></image>
+						</view>
+						<view class="text-info text-add">
+							<view>
+								<view class="title line1" v-if="titleShow">{{ item.store_name }}</view>
+								<slot name="center"></slot>
+								<view class="old-price" v-if="opriceShow">
+									<text>¥</text>
+									{{ item.ot_price }}
+								</view>
+							</view>
+							<view class="price" :style="'color:'+fontColor">
+								<view v-if="priceShow">
+									<text>¥</text>
+									{{ item.price }}
+								</view>
+								<view class="txt" :style="'border:1px solid '+labelColor+';color:'+labelColor"
+									:class="priceShow?'':'on'" v-if="item.checkCoupon && couponShow">券</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</block>
+		</view>
+		<!-- 大图 -->
+		<block v-if="itemStyle == 3 && tempArr.length" :style="{ marginTop: mbConfig + 'rpx' }">
+			<view class="listBig" :class="bgStyle===0?'':'borderRadius15'" :style="{ background: themeColor }">
+				<view class="itemBig" :class="conStyle?'borderRadius15':''" v-for="(item,index) in tempArr" :key="index"
+					@click="goDetail(item)">
+					<view class="img-box">
+						<span class="pictrue_log_big pictrue_log_class" :style="'background-color:'+labelColor"
+							v-if="item.activity && item.activity.type === '1'">秒杀</span>
+						<span class="pictrue_log_big pictrue_log_class" :style="'background-color:'+labelColor"
+							v-if="item.activity && item.activity.type === '2'">砍价</span>
+						<span class="pictrue_log_big pictrue_log_class" :style="'background-color:'+labelColor"
+							v-if="item.activity && item.activity.type === '3'">拼团</span>
+						<image :src="item.recommend_image" mode="aspectFill" v-if="item.recommend_image"></image>
+						<image :src="item.image" mode="aspectFill" v-else></image>
+					</view>
+					<view class="name line2"><span class="coupon"
+							:style="'border:1px solid '+labelColor+';color:'+labelColor"
+							v-if="item.checkCoupon && couponShow">券</span><span
+							v-if="titleShow">{{item.store_name}}</span></view>
+					<slot name="center"></slot>
+					<view class="price" :style="'color:'+fontColor"><span v-if="priceShow">¥<span
+								class="num">{{item.price}}</span></span><span class="old-price"
+							v-if="opriceShow">¥{{item.ot_price}}</span></view>
+				</view>
+			</view>
+		</block>
+	</view>
+</template>
+
+<script>
+	import {
+		getProductslist
+	} from '@/api/store.js';
+	export default {
+		name: 'goodList',
+		props: {
+			dataConfig: {
+				type: Object,
+				default: () => {}
+			},
+			isSortType: {
+				type: String | Number,
+				default: 0
+			}
+		},
+		data() {
+			return {
+				tempArr: [],
+				// scrollTop:0,
+				mbConfig: this.dataConfig.mbConfig.val,
+				numConfig: this.dataConfig.numConfig.val,
+				themeColor: this.dataConfig.themeColor.color[0].item,
+				itemStyle: this.dataConfig.itemStyle.type,
+				sortType: this.dataConfig.goodsSort.type,
+				type: this.dataConfig.tabConfig.tabVal || 0,
+				selectId: this.dataConfig.selectConfig.activeValue,
+				productIds: this.dataConfig.goodsList.ids || [],
+				opriceShow: this.dataConfig.opriceShow.val, //商品原价
+				priceShow: this.dataConfig.priceShow.val, //商品价格
+				titleShow: this.dataConfig.titleShow.val, //商品名称
+				couponShow: this.dataConfig.couponShow.val, //商品优惠券
+				prConfig: this.dataConfig.prConfig.val, //左右边距
+				bgStyle: this.dataConfig.bgStyle.type, //背景样式
+				conStyle: this.dataConfig.conStyle.type, //内容样式
+				fontColor: this.dataConfig.fontColor.color ? this.dataConfig.fontColor.color[0].item : '',
+				labelColor: this.dataConfig.labelColor.color ? this.dataConfig.labelColor.color[0].item : ''
+			};
+		},
+		created() {},
+		mounted() {
+			this.productslist();
+		},
+		// onPageScroll({scrollTop}) {
+		//     // 传入scrollTop值并触发所有easy-loadimage组件下的滚动监听事件
+		//     this.scrollTop = scrollTop;
+		// },
+		methods: {
+			productslist() {
+				let limit = this.$config.LIMIT;
+				let data = {};
+				if (this.type == 1) {
+					data = {
+						ids: this.productIds.join(','),
+					};
+				} else {
+					data = {
+						priceOrder: this.sortType == 2 ? 'desc' : '',
+						salesOrder: this.sortType == 1 ? 'desc' : '',
+						selectId: this.selectId[this.selectId.length - 1] || 0,
+						limit: this.numConfig
+					};
+				}
+				getProductslist(data).then(res => {
+					this.tempArr = res.data;
+				});
+			},
+			goDetail(item) {
+				this.$emit('detail', item);
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	.text-add {
+		display: flex;
+		flex-direction: column;
+		justify-content: space-between;
+	}
+
+	.listBig {
+		padding: 1px 20rpx 20rpx 20rpx;
+
+		.borderRadius15 {
+			image {
+				border-radius: 20rpx 20rpx 0 0;
+			}
+		}
+
+		.itemBig {
+			width: 100%;
+			margin-top: 20rpx;
+			background-color: #fff;
+			padding-bottom: 15rpx;
+
+			.img-box {
+				width: 100%;
+				height: 284rpx;
+				position: relative;
+
+				.pictrue_log_big {
+					border-radius: 20rpx 0 20rpx 0;
+				}
+
+				image {
+					width: 100%;
+					height: 100%;
+				}
+			}
+
+			.name {
+				font-size: 28rpx;
+				font-weight: bold;
+				margin-top: 16rpx;
+				padding: 0 8px;
+
+				.coupon {
+					display: inline-block;
+					text-align: center;
+					width: 32rpx;
+					border-radius: 4rpx;
+					font-size: 20rpx;
+					font-weight: normal;
+					margin-right: 10rpx;
+				}
+			}
+
+			.price {
+				font-weight: bold;
+				font-size: 12px;
+				margin-top: 10rpx;
+				padding: 0 8px;
+
+				.num {
+					font-size: 32rpx;
+					margin-right: 10rpx;
+				}
+
+				.old-price {
+					color: #aaa;
+					font-weight: normal;
+					text-decoration: line-through;
+				}
+			}
+		}
+	}
+
+	.index-product-wrapper {
+
+		.list-box {
+			display: flex;
+			flex-wrap: wrap;
+			justify-content: space-between;
+			padding: 20rpx 20rpx 0;
+
+			.item {
+				width: 345rpx;
+				margin-bottom: 20rpx;
+				background-color: #fff;
+				overflow: hidden;
+				position: relative;
+
+				&.on {
+					border-radius: 0;
+				}
+
+				.pictrue {
+					width: 347rpx;
+					height: 347rpx;
+				}
+
+				.pictrue_log {
+					width: 92rpx;
+					height: 44rpx;
+					font-size: 26rpx;
+					line-height: 44rpx;
+					border-radius: 0 0 20rpx 0 !important;
+				}
+
+				image {
+					width: 100%;
+					// height: 346rpx;
+					height: 100%;
+					display: block;
+				}
+
+				.text-info {
+					padding: 10rpx 20rpx 15rpx;
+
+					.title {
+						color: #222222;
+					}
+
+					.old-price {
+						margin-top: 4rpx;
+						font-size: 26rpx;
+						color: #aaaaaa;
+						text-decoration: line-through;
+
+						text {
+							margin-right: 2px;
+							font-size: 20rpx;
+						}
+					}
+
+					.price {
+						display: flex;
+						align-items: flex-end;
+						font-size: 36rpx;
+						font-weight: 550;
+
+						text {
+							padding-bottom: 4rpx;
+							font-size: 26rpx;
+							font-weight: normal;
+						}
+
+						.txt {
+							display: flex;
+							align-items: center;
+							justify-content: center;
+							width: 28rpx;
+							height: 28rpx;
+							margin-left: 15rpx;
+							margin-bottom: 10rpx;
+							border-radius: 4rpx;
+							font-size: 20rpx;
+							font-weight: normal;
+
+							&.on {
+								margin-left: 0;
+							}
+						}
+					}
+				}
+			}
+
+			&.on {
+				display: flex;
+			}
+
+			&.listA {
+				.item {
+					display: flex;
+					width: 100%;
+
+					.pictrue {
+						width: 220rpx;
+						height: 220rpx;
+					}
+
+					.text-info {
+						// width: 490rpx;
+						flex: 1
+					}
+				}
+			}
+
+			&.listC {
+				.item {
+					width: 48.5%;
+				}
+
+				.pictrue {
+					width: 100%;
+					height: 345rpx;
+				}
+			}
+
+			&.listB {
+				justify-content: inherit;
+
+				.item {
+					width: 31.6%;
+					margin-right: 16rpx;
+
+					.pictrue {
+						width: 100%;
+						height: 220rpx;
+					}
+
+					&:nth-child(3n) {
+						margin-right: 0;
+					}
+				}
+			}
+		}
+	}
 </style>

+ 3 - 2
pages/index/components/promotionList.vue

@@ -23,7 +23,8 @@
 					<!-- #ifdef MP -->
 					<slot name="center{{index}}"></slot>
 					<!-- #endif -->
-					<view class="old-price" v-if="opriceShow"><text>¥</text>{{item.ot_price}}</view>
+					<!-- <view class="old-price" v-if="opriceShow" :style="{color:fontColor}"><text>¥</text>{{item.ot_price}}</view> -->
+					<view class="old-price" v-if="opriceShow" :style="{color:fontColor}">¥ {{item.ot_price}}</view>
 					<view class="price" :style="{color:fontColor}">
 						<view v-if="priceShow">
 							<text>¥</text>{{item.price}}
@@ -219,7 +220,7 @@
 						font-size: 26rpx;
 						color: #AAAAAA;
 						text-decoration: line-through;
-
+						text-decoration: line-through 2px;
 						text {
 							margin-right: 2px;
 							font-size: 20rpx;

+ 31 - 2
pages/users/login/index.vue

@@ -643,10 +643,19 @@
 						getUserInfo().then(res => {
 							this.keyLock = true
 							that.$store.commit("SETUID", res.data.uid);
-							that.$store.commit("UPDATE_USERINFO", res.data);
+							that.$store.commit("UPDATE_USERINFO", res.data);
+							
 							uni.reLaunch({
 								url: backUrl
-							});
+							});
+							// that.setMen({
+							// 	avatar: res.data.avatar,
+							// 	uid: res.data.uid,
+							// 	nickname: res.data.nickname,
+							// 	account: that.account,
+							// 	password: that.password,
+							// })
+							
 						}).catch(error => {
 							this.keyLock = true
 						})
@@ -662,6 +671,26 @@
 				uni.navigateTo({
 					url: "/pages/users/privacy/index?type=" + type
 				})
+			},
+			// 保存用户基础信息
+			setMen(data) {
+				let that = this
+				try{
+					that.$io.read("MenList.json").then(res => {
+						// res 读取的文件内容
+						console.log('读取结果:',res)
+						if(!res) {
+							that.$io.storage("MenList.json", data)
+						}
+					}).catch(err => {
+						// 找不到该文件就写入一个空白文件。
+						that.$io.storage("MenList.json", date)
+						console.log(err, "err")
+					})
+				}catch(e){
+					//TODO handle the exception
+				}
+				
 			}
 		}
 	};

+ 269 - 0
pages/users/user_bus_edit/index.vue

@@ -0,0 +1,269 @@
+<template>
+	<view :style="colorStyle">
+		<view class="ChangePassword">
+			<form @submit="editBus">
+				<view class="phone">当前手机号:{{phone}}</view>
+				<view class="list">
+					<view class="item">
+						<input type='password' placeholder='设置新支付密码' placeholder-class='placeholder' name="password" :value="password"></input>
+					</view>
+					<view class="item">
+						<input type='password' placeholder='确认新密码' placeholder-class='placeholder' name="qr_password" :value="qr_password"></input>
+					</view>
+					<view class="item acea-row row-between-wrapper">
+						<input type='number' placeholder='填写验证码' placeholder-class='placeholder' class="codeIput" name="captcha" :value="captcha"></input>
+						<button class="code font-num" :class="disabled === true ? 'on' : ''" :disabled='disabled' @click="code">
+							{{ text }}
+						</button>
+					</view>
+				</view>
+				<button form-type="submit" class="confirmBnt bg-color">确认修改</button>
+			</form>
+		</view>
+		<Verify @success="success" :captchaType="'blockPuzzle'" :imgSize="{ width: '330px', height: '155px' }"
+			ref="verify"></Verify>
+		<!-- #ifdef MP -->
+		<authorize v-if="isShowAuth" @authColse="authColse" @onLoadFun="onLoadFun"></authorize>
+		<!-- #endif -->	
+	</view>
+</template>
+
+<script>
+	import sendVerifyCode from "@/mixins/SendVerifyCode";
+	import {
+		tradePassword,
+		registerVerify,
+		verifyCode
+	} from '@/api/api.js';
+	import {
+		getUserInfo,
+		getCodeApi
+	} from '@/api/user.js';
+	import {
+		toLogin
+	} from '@/libs/login.js';
+	import {
+		mapGetters
+	} from "vuex";
+	import colors from '@/mixins/color.js';
+	import Verify from '@/components/verify/verify.vue';
+	export default {
+		mixins: [sendVerifyCode,colors],
+		components: {
+			Verify
+		},
+		data() {
+			return {
+				captcha: '',
+				userInfo: {},
+				phone: '',
+				password: '',
+				qr_password: '',
+				isAuto: false, //没有授权的不会自动授权
+				isShowAuth: false ,//是否隐藏授权
+				key: '',
+			};
+		},
+		computed: mapGetters(['isLogin']),
+		watch:{
+			isLogin:{
+				handler:function(newV,oldV){
+					if(newV){
+						//#ifndef MP
+						this.getUserInfo();
+						this.getVerifyCode();
+						//#endif
+					}
+				},
+				deep:true
+			}
+		},
+		onLoad() {
+			if (this.isLogin) {
+				this.getUserInfo();
+				this.getVerifyCode();
+			} else {
+				//#ifndef MP
+				toLogin();
+				//#endif
+				//#ifdef MP
+				this.isShowAuth = true;
+				//#endif
+			}
+		},
+		onShow() {
+			uni.removeStorageSync('form_type_cart');
+		},
+		methods: {
+			/**
+			 * 授权回调
+			 */
+			onLoadFun: function(e) {
+				this.getUserInfo();
+				this.getVerifyCode();
+				this.isShowAuth = false;
+			},
+			// 授权关闭
+			authColse: function(e) {
+				this.isShowAuth = e
+			},
+			getVerifyCode(){
+				verifyCode().then(res=>{
+					this.$set(this, 'key', res.data.key)
+				});
+			},
+			/**
+			 * 获取个人用户信息
+			 */
+			getUserInfo: function() {
+				let that = this;
+				getUserInfo().then(res => {
+					let tel = res.data.phone;
+					let phone = tel.substr(0, 3) + "****" + tel.substr(7);
+					that.$set(that, 'userInfo', res.data);
+					that.phone = phone;
+				});
+			},
+			success(data) {
+				console.log(data,'data');
+				this.$refs.verify.hide()
+				getCodeApi()
+					.then(res => {
+						this.keyCode = res.data.key;
+						this.getCode(data);
+					})
+					.catch(res => {
+						this.$util.Tips({
+							title: res
+						});
+					});
+			},
+			/**
+			 * 发送验证码
+			 * 
+			 */
+			code(data) {
+				let that = this;
+				if (!that.userInfo.phone) return that.$util.Tips({
+					title: '手机号码不存在,无法发送验证码!'
+				});
+				this.$refs.verify.show()
+			},
+			async getCode(data){
+				console.log('data-------',data);
+				let that = this;
+				await registerVerify({
+						phone: that.userInfo.phone,
+						type: 'reset', 
+						key: that.key,
+						captchaType: 'blockPuzzle',
+						captchaVerification: data.captchaVerification,
+					})
+					.then(res => {
+						that.$util.Tips({
+							title: res.msg
+						});
+						that.sendCode();
+					})
+					.catch(res => {
+						that.$util.Tips({
+							title: res
+						});
+					});
+			},
+			/**
+			 * H5登录 修改密码
+			 * 
+			 */
+			editBus: function(e) {
+				let that = this,
+					password = e.detail.value.password,
+					qr_password = e.detail.value.qr_password,
+					captcha = e.detail.value.captcha;
+				if (!password) return that.$util.Tips({
+					title: '请输入新支付密码'
+				});
+				if (qr_password != password) return that.$util.Tips({
+					title: '两次输入的密码不一致!'
+				});
+				if (!captcha) return that.$util.Tips({
+					title: '请输入验证码'
+				});
+				tradePassword({
+					// account: that.userInfo.phone,
+					captcha: captcha,
+					password: password
+				}).then(res => {
+					return that.$util.Tips({
+						title: res.msg
+					}, {
+						tab: 3,
+						url: 1
+					});
+				}).catch(err => {
+					return that.$util.Tips({
+						title: err
+					});
+				});
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	page {
+		background-color: #fff !important;
+	}
+
+	.ChangePassword .phone {
+		font-size: 32rpx;
+		font-weight: bold;
+		text-align: center;
+		margin-top: 55rpx;
+	}
+
+	.ChangePassword .list {
+		width: 580rpx;
+		margin: 53rpx auto 0 auto;
+	}
+
+	.ChangePassword .list .item {
+		width: 100%;
+		height: 110rpx;
+		border-bottom: 2rpx solid #f0f0f0;
+	}
+
+	.ChangePassword .list .item input {
+		width: 100%;
+		height: 100%;
+		font-size: 32rpx;
+	}
+
+	.ChangePassword .list .item .placeholder {
+		color: #b9b9bc;
+	}
+
+	.ChangePassword .list .item input.codeIput {
+		width: 340rpx;
+	}
+
+	.ChangePassword .list .item .code {
+		font-size: 32rpx;
+		background-color: #fff;
+	}
+
+	.ChangePassword .list .item .code.on {
+		color: #b9b9bc !important;
+	}
+
+	.ChangePassword .confirmBnt {
+		font-size: 32rpx;
+		width: 580rpx;
+		height: 90rpx;
+		border-radius: 45rpx;
+		color: #fff;
+		margin: 92rpx auto 0 auto;
+		text-align: center;
+		line-height: 90rpx;
+	}
+</style>

+ 5 - 1
pages/users/user_payment/index.vue

@@ -48,6 +48,7 @@
 				<view class="tip" v-else>
 					<view class='input'><input placeholder="请输入收款人手机号" type='number' placeholder-class='placeholder' :value="to_phone" name="to_phone" style="width: 100%;padding-right: 0;"></input></view>
 					<view class='input'><text style="padding-left: 0;">¥</text><input @input='inputNum' :maxlength="moneyMaxLeng" placeholder="0.00" type='number' placeholder-class='placeholder' :value="number" name="number" style="width: 100%;padding-right: 0;"></input></view>
+					<view class='input'><input placeholder="请输入支付密码" type='password' placeholder-class='placeholder' :value="tradepassword" name="tradepassword" style="width: 100%;padding-right: 0;"></input></view>
 					<view class="tips-box">
 						<view class="tips mt-30">注意事项:</view>
 						<view class="tips-samll" v-for="item in rechargeAttention" :key="item">
@@ -106,7 +107,8 @@
 				navRecharge: ['账户充值', '佣金转入','余额转账'],
 				active: 1,
 				number: '',
-				to_phone: '',
+				to_phone: '',
+				tradepassword: '',
 				userinfo: {},
 				placeholder: "0.00",
 				from: '',
@@ -485,9 +487,11 @@
 					this.totalPrice = this.rechar_id == 0 ? parseFloat(this.money) : parseFloat(this.numberPic);
 				} else {
 					let to_phone = e.detail.value.to_phone
+					let tradepassword = e.detail.value.tradepassword
 					console.log(value,'ddddd')
 					trade({
 						to_phone: to_phone,
+						trade_password: tradepassword,
 						money: value*1
 					}).then(res => {
 						return that.$util.Tips({

+ 272 - 0
pages/users/user_point/index.vue

@@ -0,0 +1,272 @@
+<template>
+	<view :style="colorStyle">
+		<view class="ChangePassword">
+			<form @submit="editPoint">
+				<!-- <view class="phone">当前手机号:{{phone}}</view> -->
+				<view class="list">
+					<view class="item">
+						<input type='number' placeholder='请输入节点ID' placeholder-class='placeholder' name="point" :value="point"></input>
+					</view>
+					<!-- <view class="item">
+						<input type='password' placeholder='确认新密码' placeholder-class='placeholder' name="qr_password" :value="qr_password"></input>
+					</view>
+					<view class="item acea-row row-between-wrapper">
+						<input type='number' placeholder='填写验证码' placeholder-class='placeholder' class="codeIput" name="captcha" :value="captcha"></input>
+						<button class="code font-num" :class="disabled === true ? 'on' : ''" :disabled='disabled' @click="code">
+							{{ text }}
+						</button>
+					</view> -->
+				</view>
+				<button form-type="submit" class="confirmBnt bg-color">确认提交</button>
+			</form>
+		</view>
+		<Verify @success="success" :captchaType="'blockPuzzle'" :imgSize="{ width: '330px', height: '155px' }"
+			ref="verify"></Verify>
+		<!-- #ifdef MP -->
+		<authorize v-if="isShowAuth" @authColse="authColse" @onLoadFun="onLoadFun"></authorize>
+		<!-- #endif -->	
+	</view>
+</template>
+
+<script>
+	import sendVerifyCode from "@/mixins/SendVerifyCode";
+	import {
+		tradePassword,
+		registerVerify,
+		verifyCode,
+		setPoint
+	} from '@/api/api.js';
+	import {
+		getUserInfo,
+		getCodeApi
+	} from '@/api/user.js';
+	import {
+		toLogin
+	} from '@/libs/login.js';
+	import {
+		mapGetters
+	} from "vuex";
+	import colors from '@/mixins/color.js';
+	import Verify from '@/components/verify/verify.vue';
+	export default {
+		mixins: [sendVerifyCode,colors],
+		components: {
+			Verify
+		},
+		data() {
+			return {
+				point: '',
+				captcha: '',
+				userInfo: {},
+				phone: '',
+				password: '',
+				qr_password: '',
+				isAuto: false, //没有授权的不会自动授权
+				isShowAuth: false ,//是否隐藏授权
+				key: '',
+			};
+		},
+		computed: mapGetters(['isLogin']),
+		watch:{
+			isLogin:{
+				handler:function(newV,oldV){
+					if(newV){
+						//#ifndef MP
+						this.getUserInfo();
+						this.getVerifyCode();
+						//#endif
+					}
+				},
+				deep:true
+			}
+		},
+		onLoad() {
+			if (this.isLogin) {
+				this.getUserInfo();
+				this.getVerifyCode();
+			} else {
+				//#ifndef MP
+				toLogin();
+				//#endif
+				//#ifdef MP
+				this.isShowAuth = true;
+				//#endif
+			}
+		},
+		onShow() {
+			uni.removeStorageSync('form_type_cart');
+		},
+		methods: {
+			/**
+			 * 授权回调
+			 */
+			onLoadFun: function(e) {
+				this.getUserInfo();
+				this.getVerifyCode();
+				this.isShowAuth = false;
+			},
+			// 授权关闭
+			authColse: function(e) {
+				this.isShowAuth = e
+			},
+			getVerifyCode(){
+				verifyCode().then(res=>{
+					this.$set(this, 'key', res.data.key)
+				});
+			},
+			/**
+			 * 获取个人用户信息
+			 */
+			getUserInfo: function() {
+				let that = this;
+				getUserInfo().then(res => {
+					let tel = res.data.phone;
+					let phone = tel.substr(0, 3) + "****" + tel.substr(7);
+					that.$set(that, 'userInfo', res.data);
+					that.phone = phone;
+				});
+			},
+			success(data) {
+				console.log(data,'data');
+				this.$refs.verify.hide()
+				getCodeApi()
+					.then(res => {
+						this.keyCode = res.data.key;
+						this.getCode(data);
+					})
+					.catch(res => {
+						this.$util.Tips({
+							title: res
+						});
+					});
+			},
+			/**
+			 * 发送验证码
+			 * 
+			 */
+			code(data) {
+				let that = this;
+				if (!that.userInfo.phone) return that.$util.Tips({
+					title: '手机号码不存在,无法发送验证码!'
+				});
+				this.$refs.verify.show()
+			},
+			async getCode(data){
+				console.log('data-------',data);
+				let that = this;
+				await registerVerify({
+						phone: that.userInfo.phone,
+						type: 'reset', 
+						key: that.key,
+						captchaType: 'blockPuzzle',
+						captchaVerification: data.captchaVerification,
+					})
+					.then(res => {
+						that.$util.Tips({
+							title: res.msg
+						});
+						that.sendCode();
+					})
+					.catch(res => {
+						that.$util.Tips({
+							title: res
+						});
+					});
+			},
+			/**
+			 * 设置节点
+			 * 
+			 */
+			editPoint: function(e) {
+				let that = this,
+					point = e.detail.value.point;
+					// qr_password = e.detail.value.qr_password,
+					// captcha = e.detail.value.captcha;
+				if (!point) return that.$util.Tips({
+					title: '请输入节点ID'
+				});
+				// if (qr_password != password) return that.$util.Tips({
+				// 	title: '两次输入的密码不一致!'
+				// });
+				// if (!captcha) return that.$util.Tips({
+				// 	title: '请输入验证码'
+				// });
+				setPoint({
+					// account: that.userInfo.phone,
+					// captcha: captcha,
+					// password: password
+					puid: point
+				}).then(res => {
+					return that.$util.Tips({
+						title: res.msg
+					}, {
+						tab: 3,
+						url: 1
+					});
+				}).catch(err => {
+					return that.$util.Tips({
+						title: err
+					});
+				});
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	page {
+		background-color: #fff !important;
+	}
+
+	.ChangePassword .phone {
+		font-size: 32rpx;
+		font-weight: bold;
+		text-align: center;
+		margin-top: 55rpx;
+	}
+
+	.ChangePassword .list {
+		width: 580rpx;
+		margin: 53rpx auto 0 auto;
+	}
+
+	.ChangePassword .list .item {
+		width: 100%;
+		height: 110rpx;
+		border-bottom: 2rpx solid #f0f0f0;
+	}
+
+	.ChangePassword .list .item input {
+		width: 100%;
+		height: 100%;
+		font-size: 32rpx;
+	}
+
+	.ChangePassword .list .item .placeholder {
+		color: #b9b9bc;
+	}
+
+	.ChangePassword .list .item input.codeIput {
+		width: 340rpx;
+	}
+
+	.ChangePassword .list .item .code {
+		font-size: 32rpx;
+		background-color: #fff;
+	}
+
+	.ChangePassword .list .item .code.on {
+		color: #b9b9bc !important;
+	}
+
+	.ChangePassword .confirmBnt {
+		font-size: 32rpx;
+		width: 580rpx;
+		height: 90rpx;
+		border-radius: 45rpx;
+		color: #fff;
+		margin: 92rpx auto 0 auto;
+		text-align: center;
+		line-height: 90rpx;
+	}
+</style>

+ 236 - 197
pages/users/user_set/index.vue

@@ -1,198 +1,237 @@
-<template>
-	<!-- 设置 -->
-	<view class="userSet">
-		<navigator url="/pages/users/user_info/index" hover-class="none" class="userInfo acea-row row-between-wrapper">
-			<view class="picTxt acea-row row-middle">
-				<view class="pictrue">
-					<image :src="userInfo.avatar"></image>
-				</view>
-				<view class="text">
-					<view class="name line1">{{userInfo.nickname}}</view>
-					<view class="info">ID:{{userInfo.uid}}</view>
-				</view>
-			</view>
-			<view class="iconfont icon-xiangyou"></view>
-		</navigator>
-		<view class="list">
-			<!-- #ifdef H5 -->
-			<view class="item acea-row row-between-wrapper" v-if="userInfo.phone && !this.$wechat.isWeixin()">
-				<view>密码</view>
-				<navigator url="/pages/users/user_pwd_edit/index" hover-class="none" class="input grab">
-					点击修改密码<text class="iconfont icon-xiangyou"></text>
-				</navigator>
-			</view>
-			<!-- #endif -->
-
-			<!-- #ifdef APP-PLUS -->
-			<view class="item acea-row row-between-wrapper" v-if="userInfo.phone">
-				<view>密码</view>
-				<navigator url="/pages/users/user_pwd_edit/index" hover-class="none" class="grab">
-					点击修改密码<text class="iconfont icon-xiangyou"></text>
-				</navigator>
-			</view>
-			<!-- #endif -->
-			<view class="item acea-row row-between-wrapper" v-if="userInfo.phone">
-				<view>更换手机号码</view>
-				<navigator url="/pages/users/user_phone/index?type=1" hover-class="none" class="grab">
-					点击更换手机号码<text class="iconfont icon-xiangyou"></text>
-				</navigator>
-			</view>
-		</view>
-		<view class="list">
-			<view class="item acea-row row-between-wrapper">
-				<view>地址管理</view>
-				<navigator url="/pages/users/user_address_list/index" hover-class="none" class="grab">
-					点击前往<text class="iconfont icon-xiangyou"></text>
-				</navigator>
-			</view>
-			<view class="item acea-row row-between-wrapper">
-				<view>发票管理</view>
-				<navigator url="/pages/users/user_invoice_list/index" hover-class="none" class="grab">
-					点击前往<text class="iconfont icon-xiangyou"></text>
-				</navigator>
-			</view>
-		</view>
-		<view class="list">
-			<!-- #ifdef MP -->
-			<view class='item acea-row row-between-wrapper'>
-				<view>权限设置</view>
-				<view class="input grab" @click="Setting">
-					点击管理<text class="iconfont icon-xiangyou"></text>
-				</view>
-			</view>
-			<!-- #endif -->
-			<view class="item acea-row row-between-wrapper">
-				<view>账号注销</view>
-				<navigator url="/pages/users/user_cancellation/index" hover-class="none" class="input grab">
-					注销后无法恢复<text class="iconfont icon-xiangyou"></text>
-				</navigator>
-			</view>
-		</view>
-		<!-- #ifdef MP -->
-		<authorize v-if="isShowAuth" @authColse="authColse" @onLoadFun="onLoadFun"></authorize>
-		<!-- #endif -->	
-	</view>
-</template>
-<style lang="scss">
-	.userSet {
-		.userInfo {
-			margin-top: 20rpx;
-			background-color: #fff;
-			padding: 0 30rpx;
-			height: 144rpx;
-
-			.iconfont {
-				font-size: 30rpx;
-				color: #868686;
-			}
-
-			.picTxt {
-				.text {
-					width: 524rpx;
-					margin-left: 30rpx;
-					font-weight: 400;
-
-					.name {
-						font-size: 32rpx;
-						color: #333;
-					}
-
-					.info {
-						font-size: 24rpx;
-						color: #999;
-						margin-top: 5rpx;
-					}
-				}
-
-				.pictrue {
-					width: 88rpx;
-					height: 88rpx;
-
-					image {
-						width: 100%;
-						height: 100%;
-						border: 1px solid #eee;
-						border-radius: 50%;
-					}
-				}
-			}
-		}
-		.list{
-			background-color: #fff;
-			margin-top: 20rpx;
-			.item{
-				padding: 30rpx 30rpx 30rpx 0;
-				border-bottom: 1rpx solid #f2f2f2;
-				margin-left: 30rpx;
-				font-size: 32rpx;
-				color: #333;
-				.grab{
-					color: #ccc;
-					.iconfont{
-						font-size: 30rpx;
-						color: #868686;
-						margin-left: 6rpx;
-					}
-				}
-			}
-		}
-	}
-</style>
-<script>
-	import {
-		getUserInfo
-	} from '@/api/user.js';
-	import {
-		toLogin
-	} from '@/libs/login.js';
-	import {
-		mapGetters
-	} from "vuex";
-	export default {
-		computed: mapGetters(['isLogin']),
-		data() {
-			return {
-				userInfo:{},
-				isShowAuth: false
-			}
-		},
-		onLoad() {},
-		onShow() {
-			if (this.isLogin) {
-				this.getUserInfo();
-			} else {
-				//#ifndef MP
-				toLogin();
-				//#endif
-				//#ifdef MP
-				this.isShowAuth = true;
-				//#endif
-			}
-		},
-		methods: {
-			/**
-			 * 小程序设置
-			 */
-			Setting: function() {
-				uni.openSetting({
-					success: function(res) {
-					}
-				});
-			},
-			onLoadFun(){
-				this.getUserInfo();
-				this.isShowAuth = false
-			},
-			// 授权关闭
-			authColse: function(e) {
-			  this.isShowAuth = e
-			},
-			getUserInfo(){
-				let that = this;
-				getUserInfo().then(res => {
-					that.userInfo = res.data;
-				});
-			}
-		}
-	}
+<template>
+	<!-- 设置 -->
+	<view class="userSet">
+		<navigator url="/pages/users/user_info/index" hover-class="none" class="userInfo acea-row row-between-wrapper">
+			<view class="picTxt acea-row row-middle">
+				<view class="pictrue">
+					<image :src="userInfo.avatar"></image>
+				</view>
+				<view class="text">
+					<view class="name line1">{{userInfo.nickname}}</view>
+					<view class="info">ID:{{userInfo.uid}}</view>
+				</view>
+			</view>
+			<view class="iconfont icon-xiangyou"></view>
+		</navigator>
+		<view class="list">
+			<view class="item acea-row row-between-wrapper" v-if="userInfo.link_uid">
+				<view>节点</view>
+				<view hover-class="none" class="input grab">
+					{{userInfo.link_uid}}
+				</view>
+			</view>
+			<view class="item acea-row row-between-wrapper" v-if="!userInfo.link_uid">
+				<view>节点</view>
+				<navigator url="/pages/users/user_point/index" hover-class="none" class="input grab">
+					点击设置节点<text class="iconfont icon-xiangyou"></text>
+				</navigator>
+			</view>
+			<view class="item acea-row row-between-wrapper">
+				<view>支付密码</view>
+				<navigator url="/pages/users/user_bus_edit/index" hover-class="none" class="input grab">
+					点击设置支付密码<text class="iconfont icon-xiangyou"></text>
+				</navigator>
+			</view>
+			<!-- #ifdef H5 -->
+			<view class="item acea-row row-between-wrapper" v-if="userInfo.phone && !this.$wechat.isWeixin()">
+				<view>密码</view>
+				<navigator url="/pages/users/user_pwd_edit/index" hover-class="none" class="input grab">
+					点击修改密码<text class="iconfont icon-xiangyou"></text>
+				</navigator>
+			</view>
+			<!-- #endif -->
+
+			<!-- #ifdef APP-PLUS -->
+			<view class="item acea-row row-between-wrapper" v-if="userInfo.phone">
+				<view>密码</view>
+				<navigator url="/pages/users/user_pwd_edit/index" hover-class="none" class="grab">
+					点击修改密码<text class="iconfont icon-xiangyou"></text>
+				</navigator>
+			</view>
+			<!-- #endif -->
+			<view class="item acea-row row-between-wrapper" v-if="userInfo.phone">
+				<view>更换手机号码</view>
+				<navigator url="/pages/users/user_phone/index?type=1" hover-class="none" class="grab">
+					点击更换手机号码<text class="iconfont icon-xiangyou"></text>
+				</navigator>
+			</view>
+		</view>
+		<view class="list">
+			<view class="item acea-row row-between-wrapper">
+				<view>地址管理</view>
+				<navigator url="/pages/users/user_address_list/index" hover-class="none" class="grab">
+					点击前往<text class="iconfont icon-xiangyou"></text>
+				</navigator>
+			</view>
+			<view class="item acea-row row-between-wrapper">
+				<view>发票管理</view>
+				<navigator url="/pages/users/user_invoice_list/index" hover-class="none" class="grab">
+					点击前往<text class="iconfont icon-xiangyou"></text>
+				</navigator>
+			</view>
+		</view>
+		<view class="list">
+			<!-- #ifdef MP -->
+			<view class='item acea-row row-between-wrapper'>
+				<view>权限设置</view>
+				<view class="input grab" @click="Setting">
+					点击管理<text class="iconfont icon-xiangyou"></text>
+				</view>
+			</view>
+			<!-- #endif -->
+			<view class="item acea-row row-between-wrapper">
+				<view>账号注销</view>
+				<navigator url="/pages/users/user_cancellation/index" hover-class="none" class="input grab">
+					注销后无法恢复<text class="iconfont icon-xiangyou"></text>
+				</navigator>
+			</view>
+		</view>
+		<!-- #ifdef MP -->
+		<authorize v-if="isShowAuth" @authColse="authColse" @onLoadFun="onLoadFun"></authorize>
+		<!-- #endif -->
+	</view>
+</template>
+<style lang="scss">
+	.userSet {
+		.userInfo {
+			margin-top: 20rpx;
+			background-color: #fff;
+			padding: 0 30rpx;
+			height: 144rpx;
+
+			.iconfont {
+				font-size: 30rpx;
+				color: #868686;
+			}
+
+			.picTxt {
+				.text {
+					width: 524rpx;
+					margin-left: 30rpx;
+					font-weight: 400;
+
+					.name {
+						font-size: 32rpx;
+						color: #333;
+					}
+
+					.info {
+						font-size: 24rpx;
+						color: #999;
+						margin-top: 5rpx;
+					}
+				}
+
+				.pictrue {
+					width: 88rpx;
+					height: 88rpx;
+
+					image {
+						width: 100%;
+						height: 100%;
+						border: 1px solid #eee;
+						border-radius: 50%;
+					}
+				}
+			}
+		}
+
+		.list {
+			background-color: #fff;
+			margin-top: 20rpx;
+
+			.item {
+				padding: 30rpx 30rpx 30rpx 0;
+				border-bottom: 1rpx solid #f2f2f2;
+				margin-left: 30rpx;
+				font-size: 32rpx;
+				color: #333;
+
+				.grab {
+					color: #ccc;
+
+					.iconfont {
+						font-size: 30rpx;
+						color: #868686;
+						margin-left: 6rpx;
+					}
+				}
+			}
+		}
+	}
+</style>
+<script>
+	import {
+		getUserInfo
+	} from '@/api/user.js';
+	import {
+		toLogin
+	} from '@/libs/login.js';
+	import {
+		mapGetters
+	} from "vuex";
+	export default {
+		computed: mapGetters(['isLogin']),
+		data() {
+			return {
+				userInfo: {},
+				isShowAuth: false
+			}
+		},
+		onLoad() {},
+		onShow() {
+			if (this.isLogin) {
+				this.getUserInfo();
+			} else {
+				//#ifndef MP
+				toLogin();
+				//#endif
+				//#ifdef MP
+				this.isShowAuth = true;
+				//#endif
+			}
+		},
+		methods: {
+			/**
+			 * 小程序设置
+			 */
+			Setting: function() {
+				uni.openSetting({
+					success: function(res) {}
+				});
+			},
+			onLoadFun() {
+				this.getUserInfo();
+				this.isShowAuth = false
+			},
+			// 授权关闭
+			authColse: function(e) {
+				this.isShowAuth = e
+			},
+			getUserInfo() {
+				let that = this;
+				getUserInfo().then(res => {
+					that.userInfo = res.data;
+				});
+			},
+			// 获取用户列表
+			getMenList() {
+				let that = this
+				try{
+					that.$io.read("MenList.json").then(res => {
+						// res 读取的文件内容
+						console.log(res)
+					}).catch(err => {
+						// 找不到该文件就写入一个空白文件。
+						that.$io.storage("MenList.json", [])
+						console.log(err, "err")
+					})
+				}catch(e){
+					//TODO handle the exception
+					console.log(e)
+				}
+				
+			}
+		}
+	}
 </script>

+ 73 - 0
utils/io.js

@@ -0,0 +1,73 @@
+export default {
+	storage(addr,data) {
+		plus.io.requestFileSystem(
+			plus.io.PUBLIC_DOCUMENTS, // 程序公用文档目录常量
+			fs => {
+				// 创建或打开文件, fs.root是根目录操作对象,直接fs表示当前操作对象
+				fs.root.getFile(
+					addr, {
+						create: true // 文件不存在则创建
+					},
+					fileEntry => {
+						// 文件在手机中的路径
+						//console.log(fileEntry.fullPath)
+						fileEntry.createWriter(writer => {
+							// 写入文件成功完成的回调函数
+							writer.onwrite = e => {
+								console.log('写入成功');
+							};
+							// 向文件中写入数据
+							writer.write(
+								JSON.stringify(data)
+							);
+						});
+					},
+					e => {
+						console.log('getFile failed: ' + e.message);
+					}
+				);
+			},
+			e => {
+				console.log(e.message);
+			}
+		);
+	},
+	read(addr) {
+		let that = this;
+		return new Promise((resolve, reject) => {
+			plus.io.requestFileSystem(
+				plus.io.PUBLIC_DOCUMENTS,
+				fs => {
+					fs.root.getFile(
+						addr, {
+							create: false
+						},
+						fileEntry => {
+							fileEntry.file(function(file) {
+								console.log('文件大小:' + file.size + '-- 文件名:' + file.name);
+								//创建读取文件对象
+								let fileReader = new plus.io.FileReader();
+								//以文本格式读取文件数据内容
+								fileReader.readAsText(file, 'utf-8');
+								//文件读取操作完成时的回调函数
+								fileReader.onloadend = function(evt) {
+									resolve(evt.target.result)
+									//console.log("提取的服务器地址:", sURL);
+								};
+							});
+						},
+						e => {
+							reject(e)
+							console.log(e)
+						}
+					);
+				},
+				e => {
+					reject(e);
+					console.log(e.message);
+				}
+			);
+		})
+ 
+	}
+}