hwq 4 years ago
parent
commit
201335a75f
100 changed files with 3956 additions and 1316 deletions
  1. 17 0
      api/product.js
  2. 9 9
      api/user.js
  3. 16 0
      api/wallet.js
  4. 5 0
      components/uni-number-box.vue
  5. 3 3
      manifest.json
  6. 59 13
      pages.json
  7. 9 3
      pages/cart/cart.vue
  8. 8 8
      pages/category/articleList.vue
  9. 186 87
      pages/category/category.vue
  10. 9 8
      pages/category/flList.vue
  11. 132 0
      pages/contract/agreement.vue
  12. 179 0
      pages/contract/privacy.vue
  13. 138 0
      pages/contract/start.vue
  14. 202 30
      pages/index/index.vue
  15. 52 19
      pages/index/vip.vue
  16. 1 1
      pages/money/account.vue
  17. 358 0
      pages/money/integral.vue
  18. 4 4
      pages/money/pay.vue
  19. 280 141
      pages/money/withdrawal.vue
  20. 361 0
      pages/money/xfIntegral.vue
  21. 11 1
      pages/order/createOrder.vue
  22. 2 2
      pages/order/orderDetail.vue
  23. 3 5
      pages/product/list.vue
  24. 8 4
      pages/product/product.vue
  25. 13 9
      pages/product/search.vue
  26. 1119 0
      pages/product/vipProduct.vue
  27. 113 96
      pages/public/forget.vue
  28. 212 222
      pages/public/login.vue
  29. 114 180
      pages/public/register.vue
  30. 77 52
      pages/redirect/redirect.vue
  31. 159 0
      pages/set/phone.vue
  32. 3 3
      pages/set/userinfo.vue
  33. 2 1
      pages/user/favorites.vue
  34. 6 0
      pages/user/shareQrCode.vue
  35. 65 6
      pages/user/team.vue
  36. 19 86
      pages/user/user.vue
  37. 0 321
      pages/user/withdrawal.vue
  38. BIN
      static/img/log.jpg
  39. BIN
      static/img/log.png
  40. BIN
      static/img/login-bg.png
  41. BIN
      static/img/login-weixin.png
  42. BIN
      static/img/phone.png
  43. BIN
      static/img/right.png
  44. BIN
      static/img/zfpwd.png
  45. BIN
      static/tabBar/tab-cate-current.png
  46. BIN
      static/tabBar/tab-cate.png
  47. BIN
      static/user/share.png
  48. BIN
      static/user/team.png
  49. BIN
      static/user/vipxy.png
  50. BIN
      static/user/yszc.png
  51. 1 1
      store/index.js
  52. BIN
      unpackage/dist/build/h5/1-15-1.rar
  53. BIN
      unpackage/dist/build/h5/12-23-02.rar
  54. 1 1
      unpackage/dist/build/h5/index.html
  55. BIN
      unpackage/dist/build/h5/static/img/Close.615d4005.png
  56. BIN
      unpackage/dist/build/h5/static/img/Close.png
  57. BIN
      unpackage/dist/build/h5/static/img/img010.becc4342.png
  58. BIN
      unpackage/dist/build/h5/static/img/log.7b9b5404.png
  59. BIN
      unpackage/dist/build/h5/static/img/log.jpg
  60. BIN
      unpackage/dist/build/h5/static/img/log.png
  61. BIN
      unpackage/dist/build/h5/static/img/login-bg.35ea668d.png
  62. BIN
      unpackage/dist/build/h5/static/img/login-bg.png
  63. BIN
      unpackage/dist/build/h5/static/img/login-weixin.png
  64. BIN
      unpackage/dist/build/h5/static/img/phone.png
  65. BIN
      unpackage/dist/build/h5/static/img/right.png
  66. BIN
      unpackage/dist/build/h5/static/img/weixin.c58b3b46.png
  67. BIN
      unpackage/dist/build/h5/static/img/weixin.png
  68. BIN
      unpackage/dist/build/h5/static/img/zfpwd.png
  69. 0 0
      unpackage/dist/build/h5/static/js/chunk-vendors.2aec0aa6.js
  70. 0 0
      unpackage/dist/build/h5/static/js/chunk-vendors.5f99fa38.js
  71. 0 0
      unpackage/dist/build/h5/static/js/index.6c471c5e.js
  72. 0 0
      unpackage/dist/build/h5/static/js/index.e0c379af.js
  73. 0 0
      unpackage/dist/build/h5/static/js/pages-cart-cart.bcd5519b.js
  74. 0 0
      unpackage/dist/build/h5/static/js/pages-cart-cart.d1309598.js
  75. 0 0
      unpackage/dist/build/h5/static/js/pages-category-articleList.51140648.js
  76. 0 0
      unpackage/dist/build/h5/static/js/pages-category-articleList.fd2883bb.js
  77. 0 0
      unpackage/dist/build/h5/static/js/pages-category-category.37103aeb.js
  78. 0 0
      unpackage/dist/build/h5/static/js/pages-category-category.e61d9763.js
  79. 0 0
      unpackage/dist/build/h5/static/js/pages-category-detail.22fab156.js
  80. 0 0
      unpackage/dist/build/h5/static/js/pages-category-detail.b42b6d59.js
  81. 0 0
      unpackage/dist/build/h5/static/js/pages-category-flList.34d96f93.js
  82. 0 0
      unpackage/dist/build/h5/static/js/pages-index-index.038477e0.js
  83. 0 0
      unpackage/dist/build/h5/static/js/pages-index-index.e4f7027a.js
  84. 0 0
      unpackage/dist/build/h5/static/js/pages-index-index~pages-set-addressManage~pages-user-user.45ed90a1.js
  85. 0 0
      unpackage/dist/build/h5/static/js/pages-index-index~pages-set-addressManage~pages-user-user.460d3a54.js
  86. 0 0
      unpackage/dist/build/h5/static/js/pages-index-vip.2bba28c6.js
  87. 0 0
      unpackage/dist/build/h5/static/js/pages-index-vip.3d5b10e2.js
  88. 0 0
      unpackage/dist/build/h5/static/js/pages-money-account.144fa2af.js
  89. 0 0
      unpackage/dist/build/h5/static/js/pages-money-account.60c93b4b.js
  90. 0 0
      unpackage/dist/build/h5/static/js/pages-money-integral.031f2046.js
  91. 0 0
      unpackage/dist/build/h5/static/js/pages-money-integral~pages-money-wallet~pages-money-xfIntegral~pages-order-order~pages-user-award~pa~b7a40db7.fd98b165.js
  92. 0 0
      unpackage/dist/build/h5/static/js/pages-money-pay.12b52c5a.js
  93. 0 0
      unpackage/dist/build/h5/static/js/pages-money-pay.b22d4fb1.js
  94. 0 0
      unpackage/dist/build/h5/static/js/pages-money-paySuccess.754fbccd.js
  95. 0 0
      unpackage/dist/build/h5/static/js/pages-money-paySuccess.afa31948.js
  96. 0 0
      unpackage/dist/build/h5/static/js/pages-money-recharge.849149d3.js
  97. 0 0
      unpackage/dist/build/h5/static/js/pages-money-recharge.d66ec822.js
  98. 0 0
      unpackage/dist/build/h5/static/js/pages-money-wallet.66ad1bb5.js
  99. 0 0
      unpackage/dist/build/h5/static/js/pages-money-wallet.bd9acc42.js
  100. 0 0
      unpackage/dist/build/h5/static/js/pages-money-wallet~pages-order-order~pages-user-award~pages-user-favorites.e9d5c02c.js

+ 17 - 0
api/product.js

@@ -184,3 +184,20 @@ export function reply_list(data,id) {
 	});
 }
 
+//身份商品
+export function dhList(data) {
+	return request({
+		url: '/api/exchange/list',
+		method: 'get',
+		data
+	});
+}
+
+//身份商品详情
+export function dhDateil(data,id) {
+	return request({
+		url: '/api/exchange/detail/'+id,
+		method: 'get',
+		data
+	});
+}

+ 9 - 9
api/user.js

@@ -84,14 +84,14 @@ export function cartDel(data) {
 		data
 	});
 }
-//获取二维码
-export function service(data) {
-	return request({
-		url: '/api/service',
-		method: 'GET',
-		data
-	})
-}
+// //获取二维码
+// export function service(data) {
+// 	return request({
+// 		url: '/api/service',
+// 		method: 'GET',
+// 		data
+// 	})
+// }
 //获取收藏夹列表
 export function getcollectList(data) {
 	return request({
@@ -152,4 +152,4 @@ export function edit(data) {
 		method: 'post',
 		data
 	});
-}
+}

+ 16 - 0
api/wallet.js

@@ -73,4 +73,20 @@ export function userEdit(data) {
 		method: 'post',
 		data
 	});
+}
+
+export function xfjf(data,type) {
+	return request({
+		url:'/api/spread/point/' + type,
+		method:'get',
+		data
+	})
+}
+
+export function integral(data) {
+	return request({
+		url:'/api/integral/list',
+		method:'get',
+		data
+	})
 }

+ 5 - 0
components/uni-number-box.vue

@@ -73,11 +73,16 @@
 		},
 		watch: {
 			inputValue(number) {
+				console.log(number,'123456')
 				const data = {
 					number: number,
 					index: this.index
 				}
 				this.$emit('eventChange', data);
+			},
+			value(number) {
+				console.log(number)
+				this.inputValue = number;
 			}
 		},
 		methods: {

+ 3 - 3
manifest.json

@@ -1,6 +1,6 @@
 {
-    "name" : "鼎立足行",
-    "appid" : "__UNI__F0EBD91",
+    "name" : "和合商城",
+    "appid" : "__UNI__F920061",
     "description" : "",
     "versionName" : "1.0.0",
     "versionCode" : "100",
@@ -74,7 +74,7 @@
         "devServer" : {
             "proxy" : {
                 "/api" : {
-                    "target" : "https://dlzx.liuniu946.com/api",
+                    "target" : "http://hhsc.liuniu946.com/api",
                     // "changeOrigin": true,
                     "pathRewrite" : {
                         "/api" : "" // rewrite path

+ 59 - 13
pages.json

@@ -18,9 +18,9 @@
 						}
 					}
 				},
-				"navigationBarTitleText": "鼎立足行",
-				"navigationBarBackgroundColor":"#0fc8e4",
-				"navigationBarTextStyle":"white",
+				"navigationBarTitleText": "和合商城",
+				"navigationBarBackgroundColor": "#0fc8e4",
+				"navigationBarTextStyle": "white",
 				"enablePullDownRefresh": true
 			}
 		},
@@ -68,7 +68,13 @@
 		{
 			"path": "pages/index/vip",
 			"style": {
-				"navigationBarTitleText": "升级礼包"
+				"navigationBarTitleText": "会员礼包"
+			}
+		},
+		{
+			"path": "pages/set/phone",
+			"style": {
+				"navigationBarTitleText": "绑定手机"
 			}
 		},
 		{
@@ -126,7 +132,17 @@
 				}
 			}
 		},
-
+		{
+			"path": "pages/product/vipProduct",
+			"style": {
+				"navigationBarTitleText": "详情展示",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
 		{
 			"path": "pages/product/list",
 			"style": {
@@ -165,6 +181,24 @@
 				"navigationBarTitleText": "搜索"
 			}
 		},
+		{
+			"path": "pages/contract/privacy",
+			"style": {
+				"navigationBarTitleText": "隐私政策"
+			}
+		},
+		{
+			"path": "pages/contract/start",
+			"style": {
+				"navigationBarTitleText": "温馨提示"
+			}
+		},
+		{
+			"path": "pages/contract/agreement",
+			"style": {
+				"navigationBarTitleText": "用户协议"
+			}
+		},
 		{
 			"path": "pages/product/classify",
 			"style": {
@@ -254,12 +288,6 @@
 				}
 			}
 		},
-		{
-			"path": "pages/user/withdrawal",
-			"style": {
-				"navigationBarTitleText": "奖励提现"
-			}
-		},
 
 		{
 			"path": "pages/user/favorites",
@@ -329,6 +357,24 @@
 				}
 			}
 		},
+		{
+			"path": "pages/money/integral",
+			"style": {
+				"navigationBarTitleText": "我的商城积分",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		},
+		{
+			"path": "pages/money/xfIntegral",
+			"style": {
+				"navigationBarTitleText": "我的消费积分",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		},
 		{
 			"path": "pages/money/account",
 			"style": {
@@ -350,7 +396,7 @@
 		{
 			"path": "pages/category/category",
 			"style": {
-				"navigationBarTitleText": "品牌故事"
+				"navigationBarTitleText": "分类"
 			}
 		},
 		{
@@ -390,7 +436,7 @@
 				"pagePath": "pages/category/category",
 				"iconPath": "static/tabBar/tab-cate.png",
 				"selectedIconPath": "static/tabBar/tab-cate-current.png",
-				"text": "品牌故事"
+				"text": "分类"
 			},
 			{
 				"pagePath": "pages/cart/cart",

+ 9 - 3
pages/cart/cart.vue

@@ -31,7 +31,8 @@
 						<view class="item-right">
 							<text class="clamp title">{{ item.productInfo.store_name }}</text>
 							<text class="attr">{{ item.attr_val }}</text>
-							<text class="price">¥{{ item.productInfo.price }}</text>
+							<text class="price" v-if="item.integral != 0">¥{{ item.productInfo.price }} + {{ item.integral}}积分</text>
+							<text class="price" v-else>¥{{ item.productInfo.price }}</text>
 							<uni-number-box
 								class="step"
 								:min="1"
@@ -54,7 +55,8 @@
 					<view class="clear-btn" @click="allChecked ? clearCart() : ''" :class="{ show: allChecked }"><text>清空</text></view>
 				</view>
 				<view class="total-box">
-					<text class="price">¥{{ total }}</text>
+					<text class="price" v-if="integral >0">¥{{ total }}+ {{ integral }}积分</text>
+					<text class="price" v-else>¥{{ total }}</text>
 					<!-- <text class="coupon">
 						已优惠
 						<text>74.35</text>
@@ -79,6 +81,7 @@ export default {
 	data() {
 		return {
 			total: 0, //总价格
+			integral: 0,//总积分
 			allChecked: false, //全选状态  true|false
 			empty: false, //空白页现实  true|false
 			cartList: []
@@ -215,16 +218,19 @@ export default {
 				return;
 			}
 			let total = 0;
+			let integral = 0
 			let checked = true;
 			list.forEach(item => {
 				if (item.checked === true) {
 					total += item.productInfo.price * item.cart_num;
+					integral += item.integral * item.cart_num;
 				} else if (checked === true) {
 					checked = false;
 				}
 			});
 			this.allChecked = checked;
 			this.total = Number(total.toFixed(2));
+			this.integral = Number(integral.toFixed(0))
 		},
 		//创建订单
 		createOrder() {
@@ -398,7 +404,7 @@ export default {
 		display: flex;
 		flex-direction: column;
 		text-align: right;
-		padding-right: 40rpx;
+		padding-right: 30rpx;
 		.price {
 			font-size: $font-lg;
 			color: $font-color-dark;

+ 8 - 8
pages/category/articleList.vue

@@ -3,11 +3,11 @@
 		<view class="main">
 			<view v-for="(item, index) in list">
 				<view class="item flex" @click="navToList(item.id)">
-					<!-- <view class="item-left"><image :src="item.image" mode=""></image></view>-->
-					<view class="item-left"><image :src="item.image_input[0]" mode=""></image></view>
+					<view class="item-left"><image :src="item.image" mode=""></image></view>
+					<!-- <view class="item-left"><image :src="item.image_input[0]" mode=""></image></view> -->
 					<view class="item-right">
 						<view class="item-font clamp">{{item.title}}</view>
-						<view class="item-time">更新时间:{{item.add_time}}</view>
+						<!-- <view class="item-time">更新时间:{{item.add_time}}</view> -->
 					</view>
 				</view>
 			</view>
@@ -31,18 +31,18 @@ export default {
 		// 载入数据
 		async loadData() {
 			let obj = this;
-			article({page:1,limit:1000},5).then(({data}) =>{
-			// articleList({page:1,limit:1000}).then(({data}) =>{
+			// article({page:1,limit:1000}).then(({data}) =>{
+			articleList({page:1,limit:1000}).then(({data}) =>{
 				this.list = data.filter(e => {
 					console.log(e.id,'123456789')
-					return (e.id !== 0 && e.id !== 4 )
+					return (e.id !== 0)
 				})
 			})
 		},
 		navToList(id) {
 			uni.navigateTo({
-				url:'/pages/category/detail?id=' + id
-				// url: '/pages/category/flList?id=' + id
+				// url:'/pages/category/detail?id=' + id
+				url: '/pages/category/flList?id=' + id
 			});
 		}
 	}

+ 186 - 87
pages/category/category.vue

@@ -1,46 +1,132 @@
 <template>
 	<view class="content">
-		<view class="main">
-			<view v-for="(item, index) in list">
-				<view class="first" v-if="index == 0" @click="navToList(item.id)">
-					<view class="title">{{item.title}}</view>
-					<view class="image"><image :src="item.image_input[0]" mode=""></image></view>
-					<view class="time">更新时间:{{item.add_time}}</view>
-				</view>
-				<view class="item flex" @click="navToList(item.id)" v-else>
-					<view class="item-left"><image :src="item.image_input[0]" mode=""></image></view>
-					<view class="item-right">
-						<view class="item-font clamp">{{item.title}}</view>
-						<view class="item-time">更新时间:{{item.add_time}}</view>
+		<scroll-view scroll-y class="left-aside">
+			<view v-for="item in flist" :key="item.id" class="f-item b-b" :class="{ active: item.id === currentId }" @click="tabtap(item)">{{ item.cate_name }}</view>
+		</scroll-view>
+		<scroll-view scroll-with-animation scroll-y class="right-aside" @scroll="asideScroll" :scroll-top="tabScrollTop">
+			<view v-for="item in flist" :key="item.id" class="s-list" :id="'main-' + item.id">
+				<text class="s-item">{{ item.cate_name }}</text>
+				<view class="t-list ">
+					<view @click="navToList(item.id, titem.id)" class="t-item" v-for="titem in item.children" :key="titem.id">
+						<image :src="titem.pic"></image>
+						<text>{{ titem.cate_name }}</text>
 					</view>
 				</view>
 			</view>
-		</view>
+		</scroll-view>
 	</view>
 </template>
 
 <script>
-import { article } from '@/api/user.js';
+// #ifndef APP-PLUS
+import weixinObj from '@/plugin/jweixin-module/index.js';
+// #endif
+import { getCategoryList } from '@/api/product.js';
 export default {
 	data() {
 		return {
-			list: []
+			sizeCalcState: false,
+			tabScrollTop: 0,
+			currentId: 9,
+			flist: [],
 		};
 	},
 	onLoad() {
 		this.loadData();
+		// #ifndef APP-PLUS
+		weixinObj.hideAllNonBaseMenuItem();
+		// #endif
+	},
+	// 监听导航栏输入框点击事件
+	onNavigationBarSearchInputClicked(e) {
+		uni.navigateTo({
+			url: '/pages/product/search'
+		});
 	},
 	methods: {
 		// 载入数据
 		async loadData() {
 			let obj = this;
-			article({page:1,limit:1000},4).then(({data}) =>{
-				this.list = data
-			})
+			getCategoryList({})
+				.then(({ data }) => {
+					obj.flist = data.map(function(s) {
+						return s;
+					});
+				})
+				.catch(err => {
+					console.log(err);
+				});
+		},
+		//一级分类点击
+		tabtap(item) {
+			console.log(item);
+			// 判断有没有初始化页面高度对象数据
+			if (!this.sizeCalcState) {
+				this.calcSize();
+			}
+			// 获取当前点击的id
+			this.currentId = item.id;
+			console.log(item.top);
+			this.tabScrollTop = item.top;
+			console.log(this.tabScrollTop);
+		},
+		//右侧栏滚动
+		asideScroll(e) {
+			// 判断有没有初始化页面高度对象数据
+			if (!this.sizeCalcState) {
+				this.calcSize();
+			}
+			let scrollTop = e.detail.scrollTop;
+			let box = 0; //列表包裹框高度初始化
+			let bottom = 10; //距离页面底部多少像素左侧列表切换到最后一个一级分类
+			// 查询当前页面对象
+			let view = uni.createSelectorQuery().select('.content');
+			view.fields(
+				{
+					id: true,
+					dataset: true,
+					rect: true,
+					size: true,
+					scrollOffset: true
+				},
+				function(e) {
+					// 保存包裹框高度
+					box = e.height;
+				}
+			).exec();
+			// 获取所有距离顶部大于滚轮距离页面高度的所有分类
+			let tabs = this.flist.filter(item =>( item.top-10) <= scrollTop).reverse();
+			if (tabs.length > 0) {
+				// 判断是否已经到达滚轮底部
+				if (box + scrollTop + bottom >= e.detail.scrollHeight) {
+					this.currentId = this.flist[this.flist.length - 1].id;
+				} else {
+					this.currentId = tabs[0].id;
+				}
+			}
 		},
-		navToList(id) {
+		//计算右侧栏每个tab的高度等信息
+		calcSize() {
+			let h = 0;
+			this.flist.forEach(item => {
+				let view = uni.createSelectorQuery().select('#main-' + item.id);
+				view.fields(
+					{
+						size: true
+					},
+					data => {
+						item.top = h;
+						h += data.height;
+						item.bottom = h;
+					}
+				).exec();
+			});
+			this.sizeCalcState = true;
+		},
+		navToList(sid, tid) {
+			// 点击导航跳转到详细页面
 			uni.navigateTo({
-				url: '/pages/category/detail?id=' + id
+				url: '/pages/product/list?fid='+this.currentId+'&sid='+sid+'&tid='+tid
 			});
 		}
 	}
@@ -50,76 +136,89 @@ export default {
 <style lang="scss">
 page,
 .content {
-	height: auto;
-	min-height: 100%;
-	background: #f5f5f5;
+	height: 100%;
+	background-color: #f8f8f8;
 }
-.main {
-	margin-top: 20rpx;
-	background: #ffffff;
-	.first {
-		padding: 50rpx 0 18rpx;
-		margin: 0 22rpx;
-		border-bottom: 1px solid #e0e0e0;
-		.title {
-			font-size: 32rpx;
-			font-family: PingFang SC;
-			font-weight: bold;
-			color: #333333;
-		}
-		.image {
-			width: 710rpx;
-			height: 400rpx;
-			background: #4cd964;
-			margin-top: 20rpx;
-			image {
-				width: 100%;
-				height: 100%;
-			}
-		}
-		.time {
-			margin-top: 20rpx;
-			font-size: 26rpx;
-			font-family: PingFang SC;
-			font-weight: 500;
-			color: #666666;
+
+.content {
+	display: flex;
+}
+.left-aside {
+	flex-shrink: 0;
+	width: 200rpx;
+	height: 100%;
+	background-color: #fff;
+}
+.f-item {
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	width: 100%;
+	height: 100rpx;
+	font-size: 28rpx;
+	color: $font-color-base;
+	position: relative;
+	&.active {
+		// color: $base-color;
+		color: #000;
+		font-weight: bold;
+		background: #f8f8f8;
+		&:before {
+			content: '';
+			position: absolute;
+			left: 0;
+			top: 50%;
+			transform: translateY(-50%);
+			height: 36rpx;
+			width: 8rpx;
+			background-color: $base-color;
+			border-radius: 0 4px 4px 0;
+			opacity: 0.8;
 		}
 	}
-	.item {
-		padding: 26rpx 0 18rpx;
-		margin: 0 22rpx;
-		justify-content: flex-start;
-		align-items: flex-start;
-		border-bottom: 1px solid #e0e0e0;
-		.item-left {
-			width: 224rpx;
-			height: 160rpx;
-			image {
-				width: 100%;
-				height: 100%;
-			}
-		}
-		.item-right {
-			width: 458rpx;
-			height: 160rpx;
-			margin-left: 24rpx;
-			padding: 18rpx 0;
-			display: flex;
-			flex-direction: column;
-			justify-content: space-between;
-			.item-font {
-				font-size: 32rpx;
-				font-family: PingFang SC;
-				font-weight: bold;
-				color: #333333;
-			}
-			.item-time {
-				font-size: 28rpx;
-				font-family: PingFang SC;
-				font-weight: 500;
-				color: #666666;
-			}
-		}
+}
+
+.right-aside {
+	flex: 1;
+	overflow: hidden;
+	padding-left: 20rpx;
+	padding-right: 20rpx;
+}
+.s-item {
+	display: flex;
+	align-items: center;
+	height: 70rpx;
+	padding-top: 8rpx;
+	font-size: 28rpx;
+	color: $font-color-dark;
+}
+.t-list {
+	display: flex;
+	flex-wrap: wrap;
+	border-radius: 15rpx;
+	width: 100%;
+	background: #fff;
+	padding-top: 12rpx;
+	&:after {
+		content: '';
+		flex: 99;
+		height: 0;
+	}
+}
+.t-item {
+	flex-shrink: 0;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	flex-direction: column;
+	width: 171rpx;
+	font-size: 26rpx;
+	color: #666;
+	padding-bottom: 20rpx;
+
+	image {
+		width: 140rpx;
+		height: 140rpx;
 	}
 }
 </style>

+ 9 - 8
pages/category/flList.vue

@@ -3,7 +3,7 @@
 		<view class="main">
 			<view v-for="(item, index) in list">
 				<view class="item flex" @click="navToList(item.id)">
-					<view class="item-left"><image :src="item.image" mode=""></image></view>
+					<view class="item-left"><image :src="item.image_input[0]" mode=""></image></view>
 					<view class="item-right">
 						<view class="item-font clamp">{{item.title}}</view>
 						<view class="item-time">更新时间:{{item.add_time}}</view>
@@ -33,13 +33,14 @@ export default {
 		async loadData() {
 			let obj = this;
 			article({page:1,limit:1000},obj.id).then(({data}) =>{
-				this.list = data.filter(e => {
-					console.log(e.id,'123456789')
-					return (e.id !== 0 && e.id !== 4 )
-				})
-				this.list.forEach(e =>{
-					e.add_time = getTime(e.add_time)
-				})
+				// this.list = data.filter(e => {
+				// 	console.log(e.id,'123456789')
+				// 	return (e.id !== 0 && e.id !== 4 )
+				// })
+				this.list = data;
+				// this.list.forEach(e =>{
+				// 	e.add_time = getTime(e.add_time)
+				// })
 			})
 		},
 		navToList(id) {

+ 132 - 0
pages/contract/agreement.vue

@@ -0,0 +1,132 @@
+<template>
+	<view class="box">
+		<view class="title pt20 pb30">和合商城用户/会员注册协议</view>
+		<view class="content">欢迎您访问并使用和合商城服务平台!本协议是您与和合商城平台所有者就和合商城平台服务的相关事宜所订立的协议。</view>
+		<view class="content">
+			为维护您自身权益,请您仔细阅读本协议,您点击“同意并继续”按钮后,本协议即构成对双方具有约束力的法律文件; 阅读本协议过程中,
+			如您不同意本协议或其中任何条款的约定,您应立即停止注册程序。
+		</view>
+		<view class="title">总则所有权和运营权归咪兔网络科技有限公司所有。</view>
+		<view class="title">一、用户协议细则</view>
+		<view class="content">1.1 、用户在注册之前,应当仔细阅读本协议,并同意遵守本协议后方可成为注册用户。一旦注册成功,则用户与咪兔网络科技有限公司间自动形成协议关系,用户应当受本协议的约束。用户在使用特殊的服务或产品时,应当同意接受相关协议后方能使用。</view>
+		<view class="content">1.2 、本协议则可由咪兔网络科技有限公司随时更新,用户应当及时关注并同意本站不承担通知义务。本站的通知、公告、声明或其它类似内容是本协议的一部分。</view>
+		<view class="title">二、服务内容</view>
+		<view class="content">2.1 、咪兔网络科技有限公司的具体内容由本站根据实际情况提供。</view>
+		<view class="content">2.2 、本站仅提供相关的网络服务,除此之外与相关网络服务有关的设备(如个人电脑、手机、及其他与接入互联网或移动网有关的装置)及所需的费用(如为接入互联网而支付的电话费及上网费、为使用移动网而支付的手机费)均应由用户自行负担。</view>
+		<view class="title">三、用户帐号</view>
+		<view class="content">
+			3.1 经本站注册系统完成注册程序并通过身份认证的用户即成为正式用户,可以获得本站规定用户所应享有的一切权限;未经认证仅享有本站规定的部分会员权限。咪兔网络科技有限公司有权对会员的权限设计进行变更。
+		</view>
+		<view class="content">3.2 用户只能按照注册要求使用真实姓名,及身份证号注册。用户有义务保证密码和帐号的安全,用户利用该密码和帐号所进行的一切活动引起的任何损失或损害,由用户自行承担全部责任,本站不承担任何责任。如用户发现帐号遭到未授权的使用或发生其他任何安全问题,应立即修改帐号密码并妥善保管,如有必要,请通知本站。因黑客行为或用户的保管疏忽导致帐号非法使用,本站不承担任何责任。</view>
+		<view class="title">四、使用规则</view>
+		<view class="content">
+			4.1
+			遵守中华人民共和国相关法律法规,包括但不限于《中华人民共和国计算机信息系统安全保护条例》、《计算机软件保护条例》、《最高人民法院关于审理涉及计算机网络著作权纠纷案件适用法律若干问题的解释(法释[2004]1号)》、《全国人大常委会关于维护互联网安全的决定》、《互联网电子公告服务管理规定》、《互联网新闻信息服务管理规定》、《互联网著作权行政保护办法》和《信息网络传播权保护条例》等有关计算机互联网规定和知识产权的法律和法规、实施办法。
+		</view>
+		<view class="content">4.2 用户对其自行发表、上传或传送的内容负全部责任,所有用户不得在本站任何页面发布、转载、传送含有下列内容之一的信息,否则本站有权自行处理并不通知用户:</view>
+		<view class="content">
+			①违反宪法确定的基本原则的;
+		</view>
+		<view class="content">②危害国家安全,泄漏国家机密,颠覆国家政权,破坏国家统一的;</view>
+		<view class="content">③损害国家荣誉和利益的;</view>
+		<view class="content">④煽动民族仇恨、民族歧视,破坏民族团结的;</view>
+		<view class="content">⑤破坏国家宗教政策,宣扬邪教和封建迷信的;</view>
+		<view class="content">⑥散布谣言,扰乱社会秩序,破坏社会稳定的;</view>
+		<view class="content">⑦散布淫秽、色情、赌博、暴力、恐怖或者教唆犯罪的;</view>
+		<view class="content">⑧侮辱或者诽谤他人,侵害他人合法权益的;</view>
+		<view class="content">⑨煽动非法集会、结社、游行、示威、聚众扰乱社会秩序的;</view>
+		<view class="content">⑩以非法民间组织名义活动的;</view>
+		<view class="content">⑪含有法律、行政法规禁止的其他内容的。</view>
+		<view class="content">4.3 用户承诺对其发表或者上传于本站的所有信息(即属于《中华人民共和国著作权法》规定的作品,包括但不限于文字、图片、音乐、电影、表演和录音录像制品和电脑程序等)均享有完整的知识产权,或者已经得到相关权利人的合法授权;如用户违反本条规定造成本站被第三人索赔的,用户应全额补偿本站一切费用(包括但不限于各种赔偿费、诉讼代理费及为此支出的其它合理费用);</view>
+		<view class="content">4.4 当第三方认为用户发表或者上传于本站的信息侵犯其权利,并根据《信息网络传播权保护条例》或者相关法律规定向本站发送权利通知书时,用户同意本站可以自行判断决定删除涉嫌侵权信息,除非用户提交书面证据材料排除侵权的可能性,本站将不会自动恢复上述删除的信息</view>
+		<view class="content">
+			①不得为任何非法目的而使用网络服务系统;
+		</view>
+		<view class="content">②遵守所有与网络服务有关的网络协议、规定和程序;</view>
+		<view class="content">③不得利用本站进行任何可能对互联网的正常运转造成不利影响的行;</view>
+		<view class="content">④不得利用本站进行任何不利于本站的行为。</view>
+		<view class="content">4.4 如用户在使用网络服务时违反上述任何规定,本站有权要求用户改正或直接采取一切必要的措施(包括但不限于删除用户张贴的内容、暂停或终止用户使用网络服务的权利)以减轻用户不当行为而造成的影响。</view>
+		<view class="title">五、隐私保护</view>
+		<view class="content">
+			5.1
+			本站不对外公开或向第三方提供单个用户的注册资料及用户在使用网络服务时存储在本站的非公开内容,但下列情况除外:(1)事先获得用户的明确授权;(2)根据有关的法律法规要求;(3)按照相关政府主管部门的要求;(4)为维护社会公众的利益。
+		</view>
+		<view class="content">
+			5.2 本站可能会与第三方合作向用户提供相关的网络服务,在此情况下,如该第三方同意承担与本站同等的保护用户隐私的责任,则本站有权将用户的注册资料等提供给该第三方。
+		</view>
+		<view class="content">
+			5.3 在不透露单个用户隐私资料的前提下,本站有权对整个用户数据库进行分析并对用户数据库进行商业上的利用。
+		</view>
+		<view class="title">六、版权声明</view>
+		<view class="content">
+			6.1 本站的文字、图、音频、视频等版权均归咪兔网络科技有限公司享有或与作者共同享有,未经本站许可,不得任意转载。
+		</view>
+		<view class="content">
+			6.2 本站特有的标识、版面设计、编排方式等版权均属咪兔网络科技有限公司享有,未经本站许可,不得任意复制或转载。
+		</view>
+		<view class="content">6.3 使用本站的任何内容均应注明“来源于合和商城”及署上作者姓名,按法律规定需要支付稿酬的,应当通知本站及作者及支付稿酬,并独立承担一切法律责任。</view>
+		<view class="content">6.4 本站享有所有作品用于其它用途的优先权,包括但不限于网站、电子杂志、平面出版等,但在使用前会通知作者,并按同行业的标准支付稿酬。</view>
+		<view class="content">6.5 本站所有内容仅代表作者自己的立场和观点,与本站无关,由作者本人承担一切法律责任。</view>
+		<view class="content">6.6 恶意转载本站内容的,本站保留将其诉诸法律的权利。</view>
+		<view class="content">七、责任声明</view>
+		<view class="content">
+			7.1 用户明确同意其使用本站网络服务所存在的风险及一切后果将完全由用户本人承担,合和商城对此不承担任何责任。
+		</view>
+		<view class="content">
+			7.2 本站无法保证网络服务一定能满足用户的要求,也不保证网络服务的及时性、安全性、准确性。
+		</view>
+		<view class="content">
+			7.3 本站不保证为方便用户而设置的外部链接的准确性和完整性,同时,对于该等外部链接指向的不由本站实际控制的任何网页上的内容,本站不承担任何责任。
+		</view>
+		<view class="content">
+			7.4 对于因不可抗力或本站不能控制的原因造成的网络服务中断或其它缺陷,本站不承担任何责任,但将尽力减少因此而给用户造成的损失和影响。
+		</view>
+		<view class="content">
+			7.5 对于站向用户提供的下列产品或者服务的质量缺陷本身及其引发的任何损失,本站无需承担任何责任:</br>
+			(1)本站向用户免费提供的各项网络服务;</br>(2)本站向用户赠送的任何产品或者服务。
+		</view>
+		<view class="content">
+			7.6 本站有权于任何时间暂时或永久修改或终止本服务(或其任何部分),而无论其通知与否,本站对用户和任何第三人均无需承担任何责任。
+		</view>
+		<view class="content">
+			7.7 任务补贴活动的特别提醒:
+		</view>
+		<view class="content">
+			①本站是为了前期推广才推出的任务补贴活动;
+		</view>
+		<view class="content">②您已经确认了参加任务补贴活动时购买的产品的价值了,您对产品的价值与你购买的价格没有异议。本站不会对您购买后的产品进行保价行为。</view>
+		<view class="content">③任务补贴活动时给您的总任务数只是一个最高补贴数,您只能作为参考不能当成您的报酬,只有通过您完成任务后获得的补贴才能算您的报酬。</view>
+		<view class="content">④您在参加任务补贴活动时一定按照自己需求购买产品,不能当成投资或投机行为购买产品,因此造成损失本站概不负责。</view>
+		<view class="content">⑤您不能听信任何人在推广活动时的口头承诺,一切以本协议为准。</view>
+		<view class="content">⑥任务补贴活动会根据总的推广量或分享量随时调整或取消,活动取消时本站只对您已经完成的补贴数进行约定兑付。</view>
+		<view class="content">⑦因政策不允许此种补贴活动时,本站立即取消本活动,但会对您已经完成的补贴数进行约定兑付。</view>
+		<view class="title">八、附则</view>
+		<view class="content">
+			8.1 本协议的订立、执行和解释及争议的解决均应适用中华人民共和国法律。
+		</view>
+		<view class="content">
+			8.2 如本协议中的任何条款无论因何种原因完全或部分无效或不具有执行力,本协议的其余条款仍应有效并且有约束力。
+		</view>
+		<view class="content">
+			8.3 本协议解释权及修订权归台州咪兔网络科技有限公司所有。
+		</view>
+	</view>
+</template>
+
+<script></script>
+
+<style>
+	.box{
+		padding: 30rpx;
+	}
+.title {
+	font-size: 32rpx;
+	font-weight: 700;
+	line-height: 2;
+}
+.content {
+	font-size: 28rpx;
+	color: #666;
+	line-height: 2;
+}
+</style>

+ 179 - 0
pages/contract/privacy.vue

@@ -0,0 +1,179 @@
+<template>
+	<view class="box">
+		<view class="title">隐私政策</view>
+
+		<view class="title">隐私政策引言</view>
+		<view class="content">
+			我们重视用户的隐私。您在使用我们的服务时,我们可能会收集和使用您的相关信息。我们希望通过本《隐私政策》向您说明,在使用我们的服务时,我们如何收集、使用、储存和分享这些信息,以及我们为您提供的访问、更新、控制和保护这些信息的方式。本《隐私政策》与您所使用的我们平台服务息息相关,希望您仔细阅读,在需要时,按照本《隐私政策》的指引,作出您认为适当的选择。本《隐私政策》中涉及的相关技术词汇,我们尽量以简明扼要的表述,并提供进一步说明的链接,以便您的理解。
+		</view>
+		<view class="content">您使用或继续使用我们的服务,即意味着同意我们按照本《隐私政策》收集、使用、储存和分享您的相关信息。</view>
+		<view class="content">
+			我们可能收集的信息
+			我们提供服务时,可能会收集、储存和使用下列与您有关的信息。如果您不提供相关信息,可能无法注册成为我们的用户或无法享受我们提供的某些服务,或者无法达到相关服务拟达到的效果。
+		</view>
+		<view class="title">1.您提供的信息:</view>
+		<view class="content">(1)您在注册账户或使用我们的服务时,向我们提供的相关个人信息,例如电话号码、电子邮件或银行卡号等;</view>
+		<view class="title">(2)您通过我们的服务向其他方提供的共享信息,以及您使用我们的服务时所储存的信息。</view>
+		<view class="content">2.其他方分享的您的信息</view>
+		<view class="content">(1)其他方使用我们的服务时所提供有关您的共享信息。</view>
+		<view class="content">1.日志信息,指您使用我们的服务时,系统可能通过 cookies 、 web beacon 或其他方式自动采集的技术信息,包括: :</view>
+		<view class="content">(1)设备或软件信息,例如您的移动设备、网页浏览器或用于接入我们服务的其他程序所提供的配置信息、您的 IP 地址和移动设备所用的版本和设备识别码</view>
+		<view class="content">
+			(2)在使用我们服务时搜索或浏览的信息,例如您使用的网页搜索词语、访问的社交媒体页面 url 地址,以及您在使用我们服务时浏览或要求提供的其他信息和内容详情;
+		</view>
+		<view class="content">(3)有关您曾使用的移动应用( APP )和其他软件的信息,以及您曾经使用该等移动应用和软件的信息;</view>
+		<view class="content">(4)您通过我们的服务进行通讯的信息,例如曾通讯的账号,以及通讯时间、数据和时长;</view>
+		<view class="content">(5)您通过我们的服务分享的内容所包含的信息(元数据),例如拍摄或上传的共享照片或录像的日期、时间或地点等。</view>
+		<view class="title">2.位置信息,指您开启设备定位功能并使用我们基于位置提供的相关服务时,收集的有关您位置的信息,包括:</view>
+		<view class="content">(1)您通过具有定位功能的移动设备使用我们的服务时,通过 GPS 或 WiFi 等方式收集的您的地理位置信息;</view>
+		<view class="content">
+			(2)您或其他用户提供的包含您所处地理位置的实时信息,例如您提供的账户信息中包含的您所在地区信息,您或其他人上传的显示您当前或曾经所处地理位置的共享信息,您或其他人共享的照片包含的地理标记信息;
+		</view>
+		<view class="content">(3)您可以通过关闭定位功能,停止对您的地理位置信息的收集。</view>
+		<view class="title">3.我们可能如何使用信息 我们可能将在向您提供服务的过程之中所收集的信息用作下列用途:</view>
+		<view class="content">1.向您提供服务;</view>
+		<view class="content">2.在我们提供服务时,用于身份验证、客户服务、安全防范、诈骗监测、存档和备份用途,确保我们向您提供的产品和服务的安全性</view>
+		<view class="content">3.帮助我们设计新服务,改善我们现有服务;</view>
+		<view class="content">
+			4.使我们更加了解您如何接入和使用我们的服务,从而针对性地回应您的个性化需求,例如语言设定、位置设定、个性化的帮助服务和指示,或对您和其他用户作出其他方面的回应;
+		</view>
+		<view class="content">5.向您提供与您更加相关的广告以替代普遍投放的广告;</view>
+		<view class="content">6.评估我们服务中的广告和其他促销及推广活动的效果,并加以改善;</view>
+		<view class="content">7.软件认证或管理软件升级;</view>
+		<view class="content">8.让您参与有关我们产品和服务的调查。</view>
+		<view class="content">
+			为了让您有更好的体验、改善我们的服务或您同意的其他用途,在符合相关法律法规的前提下,我们可能将通过某一项服务所收集的信息,以汇集信息或者个性化的方式,用于我们的其他服务。例如,在您使用我们的一项服务时所收集的信息,可能在另一服务中用于向您提供特定内容,或向您展示与您相关的、非普遍推送的信息。如果我们在相关服务中提供了相应选项,您也可以授权我们将该服务所提供和储存的信息用于我们的其他服务。
+		</view>
+		<view class="title">您如何访问和控制自己的个人信息</view>
+		<view class="content">
+			我们将尽一切可能采取适当的技术手段,保证您可以访问、更新和更正自己的注册信息或使用我们的服务时提供的其他个人信息。在访问、更新、更正和删除前述信息时,我们可能会要求您进行身份验证,以保障账户安全。
+		</view>
+		<view class="title">我们可能分享的信息</view>
+		<view class="content">除以下情形外,未经您同意,我们以及我们的关联公司不会与任何第三方分享您的个人信息:</view>
+		<view class="content">
+			1.我们以及我们的关联公司,可能将您的个人信息与我们的关联公司、合作伙伴及第三方服务供应商、承包商及代理(例如代表我们发出电子邮件或推送通知的通讯服务提供商、为我们提供位置数据的地图服务供应商)分享(他们可能并非位于您所在的法域),用作下列用途:
+		</view>
+		<view class="content">(1)向您提供我们的服务;</view>
+		<view class="content">(2)实现“我们可能如何使用信息”部分所述目的;</view>
+		<view class="content">(3)履行我们在《服务协议》或本《隐私政策》中的义务和行使我们的权利;</view>
+		<view class="content">(4)理解、维护和改善我们的服务。</view>
+		<view class="content">3、我们通过间接获得方式收集到的您的个人信息</view>
+		<view class="content">
+			如我们或我们的关联公司与任何上述第三方分享您的个人信息,我们将努力确保该等第三方在使用您的个人信息时遵守本《隐私政策》及我们要求其遵守的其他适当的保密和安全措施。
+		</view>
+		<view class="content">
+			2.随着我们业务的持续发展,我们以及我们的关联公司有可能进行合并、收购、资产转让或类似的交易,您的个人信息有可能作为此类交易的一部分而被转移。我们将在转移前通知您。
+			我们或我们的关联公司还可能为以下需要而保留、保存或披露您的个人信息:
+		</view>
+		<view class="content">(1)遵守适用的法律法规;</view>
+		<view class="content">(2)遵守法院命令或其他法律程序的规定;</view>
+		<view class="content">(3)遵守相关政府机关的要求;</view>
+		<view class="content">(4)为遵守适用的法律法规、维护社会公共利益,或保护我们的客户、我们或我们的集团公司、其他用户或雇员的人身和财产安全或合法权益所合理必需的用途。</view>
+		<view class="title">信息安全</view>
+		<view class="content">我们仅在本《隐私政策》所述目的所必需的期间和法律法规要求的时限内保留您的个人信息。</view>
+		<view class="content">
+			我们使用各种安全技术和程序,以防信息的丢失、不当使用、未经授权阅览或披露。例如,在某些服务中,我们将利用加密技术(例如 SSL
+			)来保护您提供的个人信息。但请您理解,由于技术的限制以及可能存在的各种恶意手段,在互联网行业,即便竭尽所能加强安全措施,也不可能始终保证信息百分之百的安全。您需要了解,您接入我们的服务所用的系统和通讯网络,有可能因我们可控范围外的因素而出现问题。
+		</view>
+		<view class="title">您分享的信息</view>
+		<view class="content">
+			我们的多项服务,可让您不仅与自己的社交网络,也与使用该服务的所有用户公开分享您的相关信息,例如,您在我们的服务中所上传或发布的信息(包括您公开的个人信息、您建立的名单)、您对其他人上传或发布的信息作出的回应,以及包括与这些信息有关的位置数据和日志信息。使用我们服务的其他用户也有可能分享与您有关的信息(包括位置数据和日志信息)。特别是,我们的社交媒体服务,是专为使您与世界各地的用户共享信息而设计,您可以使共享信息实时、广泛地传递。只要您不删除共享信息,有关信息会一直留存在公共领域;即使您删除共享信息,有关信息仍可能由其他用户或不受我们控制的非关联第三方独立地缓存、复制或储存,或由其他用户或该等第三方在公共领域保存。
+		</view>
+		<view class="content">
+			因此,请您谨慎考虑通过我们的服务上传、发布和交流的信息内容。在一些情况下,您可通过我们某些服务的隐私设定来控制有权浏览您共享信息的用户范围。如要求从我们的服务中删除您的相关信息,请通过该等特别服务条款提供的方式操作。
+		</view>
+		<view class="title">您分享的敏感个人信息</view>
+		<view class="content">某些个人信息因其特殊性可能被认为是敏感个人信息,例如您的种族、宗教、个人健康和医疗信息等。相比其他个人信息,敏感个人信息受到更加严格的保护。</view>
+		<view class="content">
+			请注意,您在使用我们的服务时所提供、上传或发布的内容和信息(例如有关您社交活动的照片等信息),可能会泄露您的敏感个人信息。您需要谨慎地考虑,是否在使用我们的服务时披露相关敏感个人信息。
+		</view>
+		<view class="content">您同意按本《隐私政策》所述的目的和方式来处理您的敏感个人信息。</view>
+		<view class="title">我们可能如何收集信息</view>
+		<view class="content">我们或我们的第三方合作伙伴,可能通过 cookies 和 web, beacon 收集和使用您的信息,并将该等信息储存为日志信息。</view>
+		<view class="content">我们使用自己的 cookies 和 web beacon ,目的是为您提供更个性化的用户体验和服务,并用于以下用途:</view>
+		<view class="content">1.记住您的身份。例如: cookies 和 web beacon 有助于我们辨认您作为我们的注册用户的身份,或保存您向我们提供的有关您的喜好或其他信息;</view>
+		<view class="content">2.分析您使用我们服务的情况。例如,我们可利用 cookies 和 web beacon 来了解您使用我们的服务进行什么活动,或哪些网页或服务最受您的欢迎;</view>
+		<view class="content">
+			3.广告优化。 Cookies 和 web beacon 有助于我们根据您的信息,向您提供与您相关的广告而非进行普遍的广告投放。我们为上述目的使用 cookies 和 web beacon 的同时,可能将通过
+			cookies 和 web beacon 收集的非个人身份信息,经统计加工后提供给广告商或其他合作伙伴,用于分析用户如何使用我们的服务,并用于广告服务。
+		</view>
+		<view class="content">
+			我们的产品和服务上可能会有广告商或其他合作方放置的 cookies 和 web beacon 。这些 cookies 和 web beacon
+			可能会收集与您相关的非个人身份信息,以用于分析用户如何使用该等服务、向您发送您可能感兴趣的广告,或用于评估广告服务的效果。这些第三方 cookies 和 web beacon
+			收集和使用该等信息,不受本《隐私政策》约束,而是受相关使用者的隐私政策约束,我们不对第三方的 cookies 或 web beacon 承担责任。
+		</view>
+		<view class="content">
+			您可以通过浏览器设置拒绝或管理 cookies 或 web beacon 。但请注意,如果停用 cookies 或 web beacon
+			,您有可能无法享受最佳的服务体验,某些服务也可能无法正常使用。同时,您还会收到同样数量的广告,但这些广告与您的相关性会降低。
+		</view>
+		<view class="title">广告服务</view>
+		<view class="content">我们可能使用您的相关信息,向您提供与您更加相关的广告。</view>
+		<view class="content">我们也可能使用您的信息,通过我们的服务、电子邮件或其他方式向您发送营销信息,提供或推广我们或第三方的如下商品和服务</view>
+		<view class="content">
+			1.我们的商品或服务,我们的关联公司和合作伙伴的商品或服务,包括即时通讯服务、网上媒体服务、互动娱乐服务、社交网络服务、付款服务、互联网搜索服务、位置和地图服务、应用软件和服务、数据管理软件和服务、网上广告服务、互联网金融,以及其他社交媒体、娱乐、电子商务、资讯和通讯软件或服务(统称“互联网服务”);:
+		</view>
+		<view class="content">
+			2.第三方互联网服务供应商,以及与下列有关的第三方商品或服务:食物和餐饮、体育、音乐、电影、电视、现场表演及其他艺术和娱乐、书册、杂志和其他刊物、服装和配饰、珠宝、化妆品、个人健康和卫生、电子、收藏品、家用器皿、电器、家居装饰和摆设、宠物、汽车、酒店、交通和旅游、银行、保险及其他金融服务、会员积分和奖励计划,以及我们认为可能与您相关的其他商品或服务。
+		</view>
+		<view class="content">
+			如您不希望我们将您的个人信息用作前述广告用途,您可以通过我们在广告中提供的相关提示,或在特定服务中提供的指引,要求我们停止为上述用途使用您的个人信息。
+		</view>
+		<view class="title">我们可能向您发送的邮件和信息。</view>
+		<view class="title">1.邮件和信息推送</view>
+		<view class="content">
+			您在使用我们的服务时,我们可能使用您的信息向您的设备发送电子邮件、新闻或推送通知。如您不希望收到这些信息,可以按照我们的相关提示,在设备上选择取消订阅。
+		</view>
+		<view class="title">2.与服务有关的公告</view>
+		<view class="content">我们可能在必要时(例如因系统维护而暂停某一项服务时)向您发出与服务有关的公告。您可能无法取消这些与服务有关、性质不属于推广的公告。</view>
+		<view class="title">隐私政策的适用例外</view>
+		<view class="content">
+			我们的服务可能包括或链接至第三方提供的社交媒体或其他服务(包括网站)。例如:您利用“分享”键将某些内容分享到我们的服务,或您利用第三方连线服务登录我们的服务。这些功能可能会收集您的相关信息(包括您的日志信息),并可能在您的电脑装置
+			cookies ,从而正常运行上述功能;
+		</view>
+		<view class="content">
+			我们通过广告或我们服务的其他方式向您提供链接,使您可以接入第三方的服务或网站。
+			该等第三方社交媒体或其他服务可能由相关的第三方或我们运营。您使用该等第三方的社交媒体服务或其他服务(包括您向该等第三方提供的任何个人信息),须受该第三方的服务条款及隐私政策(而非《通用服务条款》或本《隐私政策》)约束,您需要仔细阅读其条款。本《隐私政策》仅适用于我们所收集的信息,并不适用于任何第三方提供的服务或第三方的信息使用规则,我们对任何第三方使用由您提供的信息不承担任何责任。
+		</view>
+		<view class="title">未成年人使用我们的服务</view>
+		<view class="content">
+			我们鼓励父母或监护人指导未满十八岁的未成年人使用我们的服务。我们建议未成年人鼓励他们的父母或监护人阅读本《隐私政策》,并建议未成年人在提交的个人信息之前寻求父母或监护人的同意和指导。
+		</view>
+		<view class="title">隐私政策的适用范围</view>
+		<view class="content">
+			除某些特定服务外,我们所有的服务均适用本《隐私政策》。这些特定服务将适用特定的隐私政策。针对某些特定服务的特定隐私政策,将更具体地说明我们在该等服务中如何使用您的信息。该特定服务的隐私政策构成本《隐私政策》的一部分。如相关特定服务的隐私政策与本《隐私政策》有不一致之处,适用该特定服务的隐私政策。
+		</view>
+		<view class="content">除本《隐私政策》另有规定外,本《隐私条款》所用词语将与《服务协议》所定义的词语具有相同的涵义。请您注意,本《隐私政策》不适用于以下情况:</view>
+		<view class="content">1.通过我们的服务而接入的第三方服务(包括任何第三方网站)收集的信息;</view>
+		<view class="content">2.通过在我们服务中进行广告服务的其他公司或机构所收集的信息。</view>
+		<view class="title">变更</view>
+		<view class="content">
+			我们可能适时修订本《隐私政策》的条款,该等修订构成本《隐私政策》的一部分。如该等修订造成您在本《隐私政策》下权利的实质减少,我们将在修订生效前通过在主页上显著位置提示或向您发送电子邮件或以其他方式通知您。在该种情况下,若您继续使用我们的服务,即表示同意受经修订的本《隐私政策》的约束。
+		</view>
+		<view class="content">
+			本《隐私政策》尊重并保护所有使用服务用户的个人隐私权。为了给您提供更准确、更有个性化的服务,本《隐私政策》会按照本隐私权政策的规定使用和披露您的个人信息。但本《隐私政策》将以高度的勤勉、审慎义务对待这些信息。除本隐私权政策另有规定外,在未征得您事先许可的情况下,本《隐私政策》不会将这些信息对外披露或向第三方提供。本《隐私政策》会不时更新本隐私权政策。您在同意本《隐私政策》服务使用协议之时,即视为您已经同意本隐私权政策全部内容。本隐私权政策属于本《隐私政策》服务使用协议不可分割的一部分。
+		</view>
+	</view>
+</template>
+
+<script>
+export default {};
+</script>
+
+<style>
+.box {
+	padding: 30rpx;
+}
+.title {
+	font-size: 32rpx;
+	font-weight: 700;
+	line-height: 2;
+}
+.content {
+	font-size: 28rpx;
+	color: #666;
+	line-height: 2;
+}
+.pb10 {
+	font-size: 28rpx;
+}
+</style>

+ 138 - 0
pages/contract/start.vue

@@ -0,0 +1,138 @@
+<template>
+	<view class="start">
+		<view class="background"></view>
+		<view class="popup">
+			<view class="title">温馨提示</view>
+			<scroll-view :scroll-y="true" class="content">
+				<text>欢迎使用正一商城APP。我们非常重视您的用户权益和个人信息的保护,在您使用正一商城APP服务前,请认真阅读</text>
+				<text class="money" @click="goUser">《用户协议》</text>
+				<text>和</text>
+				<text class="money" @click="goYs">《隐私政策》</text>
+				<text>
+					全部条款。我们将通过上述协议向您说明我们如何为您提供服务并保障您的用户权益,
+					如何收集、使用、保存、共享和保护您的相关信息,以及我们为您提供的访问、更正、删除和申诉您信息相关问题的方式。
+					我们会严格按照您的授权,在上述协议约定的范围内收集、存储和使用您的注册信息、设备信息、位置信息、日志信息或其他经您授权的信息。
+					您点击“同意并继续”视为您已同意上述协议的全部内容
+				</text>
+			</scroll-view>
+			<view class="button flex">
+				<text class="disagree" @click="disagree">不同意</text>
+				<text class="agree" @click="agree">同意并继续</text>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {};
+	},
+	onLoad() {
+		let agree = uni.getStorageSync('agree');
+		if (agree) {
+			// this.agree()
+			console.log(uni.getStorageSync('agree'),'2222232');
+			uni.redirectTo({ url: '/pages/index/index' });
+		}
+	},
+	methods: {
+		//前往用户协议
+		goUser() {
+			uni.navigateTo({ url: './agreement' });
+		},
+		goYs() {
+			uni.navigateTo({ url: './privacy' });
+		},
+		//不同意
+		disagree() {
+			plus.runtime.quit();
+		},
+		//同意
+		agree() {
+			uni.setStorageSync('agree', true);
+			uni.switchTab({
+				url: '/pages/index/index',
+				success(e) {
+					console.log(e);
+				},
+				fail(e) {
+					console.log(e);
+				}
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+.money {
+	color: $base-color;
+}
+.disagree {
+	padding: 10rpx 30rpx;
+	font-size: 28rpx;
+	width: 200rpx;
+	height: 64rpx;
+	color: $base-color;
+	border-radius: 999rpx;
+	border: 2rpx solid $base-color;
+}
+.agree {
+	padding: 10rpx 30rpx;
+	width: 210rpx;
+	height: 64rpx;
+	font-size: 28rpx;
+	color: #fff;
+	background-color: $base-color;
+	border-radius: 999rpx;
+	border: 2rpx solid $base-color;
+}
+.button {
+	position: absolute;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	z-index: 0;
+	display: flex;
+	padding: 24rpx;
+	justify-content: center;
+	text-align: center;
+	justify-content: space-around;
+}
+.content {
+	position: absolute;
+	left: 0;
+	right: 0;
+	top: 100rpx;
+	bottom: 120rpx;
+	z-index: 0;
+	font-size: 28rpx;
+	padding: 0 50rpx;
+	line-height: 44rpx;
+}
+.title {
+	font-size: 36rpx;
+	padding: 20rpx 50rpx;
+}
+.background {
+	position: fixed;
+	left: 0;
+	right: 0;
+	top: 0;
+	bottom: 0;
+	z-index: 0;
+	background-color: rgba(0, 0, 0, 0.4);
+}
+.popup {
+	position: absolute;
+	z-index: 0;
+	left: 50%;
+	top: 50%;
+	transform: translate(-50%, -50%);
+	width: 600rpx;
+	height: 700rpx;
+	background-color: #fff;
+	border-radius: 30rpx;
+}
+</style>

+ 202 - 30
pages/index/index.vue

@@ -19,29 +19,80 @@
 		</view>
 		<view class="swiper-dot">
 			<template v-for="item in swiperLength">
-				<view class="swiper-dots-item" :key="item" :class="{ action: swiperCurrent === item }"></view>
+				<view class="swiper-dots-item" :key="item" :class="{ action: swiperCurrent + 1 === item }"></view>
 			</template>
 		</view>
 		<view class="cate-section">
-			<view class="cate-item" @click="nav('/pages/category/category')">
+			<view class="cate-item" @click="nav('/pages/index/vip')">
 				<image src="/static/icon/c3.png"></image>
-				<view class="cate-font">品牌故事</view>
+				<view class="cate-font">会员礼包</view>
 			</view>
 			<view class="cate-item" @click="nav('/pages/category/articleList')">
 				<image src="/static/icon/c5.png"></image>
-				<view class="cate-font">使用案例</view>
+				<view class="cate-font">产品百科</view>
 			</view>
-			<view class="cate-item" @click="showPopup()">
+			<!-- <view class="cate-item" @click="showPopup()">
 				<image src="/static/icon/c7.png"></image>
-				<view class="cate-font">康复天地</view>
-			</view>
+				<view class="cate-font">联系客服</view>
+			</view> -->
 			<view class="cate-item">
-				<image src="/static/icon/c8.png" @click="nav('/pages/index/vip')"></image>
-				<view class="cate-font">成为会员</view>
+				<image src="/static/icon/c8.png" @click="nav('/pages/user/shareQrCode')"></image>
+				<view class="cate-font">邀请有礼</view>
 			</view>
 		</view>
 		<view class="xian"></view>
-		<view class="main">
+		<view class="goldenBean" v-if="vipList.length > 0">
+			<view class="title">
+				<view class="shu"></view>
+				<view class="title-t">会员礼包</view>
+				<text class="about">超值体验</text>
+			</view>
+			<view class="box">
+				<view class="header">
+					<view class="left">
+						<view class="title">购买商品赠送消费积分</view>
+						<view class="about">买到就是赚到</view>
+					</view>
+					<view class="right"><image src="@/static/img/right.png" @click="navto('/pages/index/vip')"></image></view>
+				</view>
+				<view class="footer">
+					<view class="list">
+						<view class="item" v-for="d in vipList" @click="navToVipDetailPage(d)">
+							<view class="img"><image :src="d.image" mode=""></image></view>
+							<view class="name nowarp" :title="d.store_name">{{ d.store_name }}</view>
+							<view class="price">¥{{ d.price }}</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<!-- <view class="goldenBean" v-if="vipList.length > 0">
+			<view class="title">
+				<view class="shu"></view>
+				<view class="title-t">会员礼包</view>
+				<text class="about">超值体验</text>
+			</view>
+			<view class="box">
+				<view class="header">
+					<view class="left">
+						<view class="title">购买商品赠送消费积分</view>
+						<view class="about">买到就是赚到</view>
+					</view>
+					<view class="right"><image src="@/static/img/right.png" @click="navto('/pages/index/vip')"></image></view>
+				</view>
+				<view class="footer">
+					<view class="list">
+						<view class="item" v-for="d in vipList" @click="navToDetailPage(d)">
+							<view class="img"><image :src="d.image" mode=""></image></view>
+							<view class="name nowarp" :title="d.store_name">{{ d.store_name }}</view>
+							<view class="price">¥{{ d.price }}</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view> -->
+		<view class="xian"></view>
+		<view class="main" v-if="dataList.length > 0">
 			<view class="main-top flex">
 				<view class="main-left">
 					<view class="shu"></view>
@@ -59,7 +110,8 @@
 							<image src="../../static/img/jiantou.png" mode=""></image>
 							<view class="jiang">直降{{ (item.ot_price - item.price).toFixed(2) }}元</view>
 						</view>
-						<view class="price">¥{{ item.price }}</view>
+						<view class="price" v-if="item.integral != 0">¥{{ item.price }} + {{ item.integral }}积分</view>
+						<view class="price" v-else>¥{{ item.price }}</view>
 						<view class="btn">立即购买</view>
 					</view>
 				</view>
@@ -86,9 +138,10 @@
 
 <script>
 import { loadIndexs } from '@/api/index.js';
+import { dhList } from '@/api/product.js';
 import { mapState } from 'vuex';
 import { saveUrl, interceptor } from '@/utils/loginUtils.js';
-import { service } from '@/api/user.js';
+// import { service } from '@/api/user.js';
 // #ifdef H5
 import { weixindata, weixinlocation, shareLoad } from '@/utils/wxAuthorized';
 import weixinObj from '@/plugin/jweixin-module/index.js';
@@ -98,7 +151,8 @@ export default {
 		return {
 			carouselList: [], //轮播图
 			swiperCurrent: 0,
-			dataList: [],
+			dataList: [], //积分商品
+			vipList: [], //身份商品
 			erweima: '',
 			weixin: '', //客服微信
 			swiperLength: 1 //图片数量
@@ -188,8 +242,8 @@ export default {
 			path += 'spread=' + this.userInfo.uid;
 			let data = {
 				link: this.baseURL + '/index/' + path,
-				title: this.userInfo.nickname + '邀请您进入鼎立足行',
-				desc: '欢迎加入鼎立足行',
+				title: this.userInfo.nickname + '邀请您进入和合商城',
+				desc: '欢迎加入和合商城',
 				imgUrl: 'https://dlzx.liuniu946.com/index/static/img/logo.png'
 			};
 			shareLoad(data);
@@ -300,6 +354,11 @@ export default {
 		},
 		// 请求载入数据
 		async loadData() {
+			dhList({ page: 1, limit: 3 }).then(({ data }) => {
+				if (data.length > 0) {
+					this.vipList = data;
+				}
+			});
 			loadIndexs({})
 				.then(({ data }) => {
 					console.log(data);
@@ -311,10 +370,10 @@ export default {
 				.catch(e => {
 					uni.stopPullDownRefresh();
 				});
-			service({}).then(({ data }) => {
-				this.erweima = data.service_qr;
-				this.weixin = data.service_wechat;
-			});
+			// service({}).then(({ data }) => {
+			// 	this.erweima = data.service_qr;
+			// 	this.weixin = data.service_wechat;
+			// });
 		},
 		//详情页
 		navToDetailPage(item) {
@@ -322,6 +381,21 @@ export default {
 			uni.navigateTo({
 				url: '/pages/product/product?id=' + id
 			});
+		},
+		navToVipDetailPage(item) {
+			uni.navigateTo({
+				url: '/pages/product/vipProduct?id=' + item.id
+			});
+		},
+		navto(url) {
+			uni.switchTab({
+				url,
+				fail() {
+					uni.navigateTo({
+						url
+					});
+				}
+			});
 		}
 	}
 };
@@ -447,6 +521,12 @@ page,
 	height: 20rpx;
 	background: #f5f5f5;
 }
+.shu {
+	width: 8rpx;
+	height: 38rpx;
+	background: #05ab81;
+	border-radius: 4rpx;
+}
 .main {
 	margin-top: 40rpx;
 	padding: 0 40rpx;
@@ -456,12 +536,7 @@ page,
 			display: flex;
 			justify-content: flex-start;
 			align-items: center;
-			.shu {
-				width: 8rpx;
-				height: 38rpx;
-				background: #05ab81;
-				border-radius: 4rpx;
-			}
+
 			.main-title {
 				margin-left: 10rpx;
 				font-size: 36rpx;
@@ -491,15 +566,15 @@ page,
 	margin: 20rpx auto 0;
 	position: relative;
 	image {
-		width: 260rpx;
-		height: 260rpx;
+		width: 200rpx;
+		height: 200rpx;
 		border-radius: 10rpx;
 	}
 	.guess-box {
 		padding: 12rpx 0 0 24rpx;
 		width: 436rpx;
 		.title {
-			font-size: 30rpx;
+			font-size: 36rpx;
 			padding-left: 4rpx;
 			font-family: PingFang SC;
 			font-weight: 500;
@@ -551,7 +626,7 @@ page,
 			}
 		}
 		.price-box {
-			margin-top: 80rpx;
+			margin-top: 60rpx;
 			justify-content: flex-start;
 			.yuanprice {
 				font-size: 26rpx;
@@ -655,4 +730,101 @@ page,
 		width: 100%;
 		height: 100%;
 	}
-}</style>
+}
+$grey: #95a0b1;
+$text: #333333;
+$red: #ff4c4c;
+// 金豆专区
+.goldenBean {
+	font-family: PingFang-SC-Bold;
+	margin-top: 20rpx;
+	padding: 20rpx;
+	background-color: #fff;
+
+	.title {
+		display: flex;
+		line-height: 40rpx;
+		.title-t {
+			color: $text;
+			font-weight: bold;
+			margin: 0 20rpx;
+			font-size: 34rpx;
+		}
+		.about {
+			font-size: 24rpx;
+			color: $grey;
+		}
+		image {
+			width: 40rpx;
+			height: 40rpx;
+		}
+	}
+	.box {
+		margin: 20rpx 0;
+		border-radius: 10rpx;
+		overflow: hidden;
+		.header {
+			padding: 20rpx;
+			background: linear-gradient(90deg, #ff8f44 0%, #ffbd70 100%);
+			padding-bottom: 80rpx;
+			width: 100%;
+			display: flex;
+			justify-content: space-between;
+			color: #fff;
+			.left {
+				line-height: 40rpx;
+				.title {
+					font-size: 32rpx;
+				}
+				.about {
+					opacity: 0.9;
+					font-size: 24rpx;
+				}
+			}
+			.right {
+				margin: auto 0;
+				image {
+					width: 40rpx;
+					height: 40rpx;
+				}
+			}
+		}
+		.footer {
+			height: 300rpx;
+			background-color: $page-color-base;
+			padding: 20rpx;
+			margin-bottom: -50rpx;
+			.list {
+				display: flex;
+				overflow: auto;
+				border-radius: 10rpx;
+				position: relative;
+				top: -90rpx;
+				background-color: #fff;
+				.item {
+					padding: 30rpx;
+					border-right: solid 1rpx $page-color-base;
+					.name {
+						font-size: 24rpx;
+						color: #3f3f3f;
+						width: 150rpx;
+						overflow: hidden;
+						text-overflow: ellipsis;
+					}
+					.price {
+						font-size: 28rpx;
+						color: $red;
+						font-weight: bold;
+					}
+					.img {
+						image {
+							width: 150rpx;
+							height: 150rpx;
+						}
+					}
+				}
+			}
+		}
+	}
+}
+</style>

+ 52 - 19
pages/index/vip.vue

@@ -4,13 +4,11 @@
 			<view v-for="(item, index) in dataList" :key="index" class="guess-item" @click="navToDetailPage(item)">
 				<image :src="item.image"></image>
 				<view class="guess-box">
-					<view class="title clamp2">
-						{{ item.store_name }}
-					</view>
+					<view class="title clamp2">{{ item.title }}</view>
 					<view class="price-box flex">
 						<view class="yuanprice">{{ item.ot_price }}</view>
-						<!-- <image src="../../static/img/jiantou.png" mode=""></image>
-						<view class="jiang">直降{{ (item.vip_price - item.price).toFixed(2) }}元</view> -->
+						<image src="../../static/img/jiantou.png" mode=""></image>
+						<view class="jiang">直降{{ (item.ot_price - item.price).toFixed(2) }}元</view>
 					</view>
 					<view class="price">¥{{ item.price }}</view>
 					<view class="btn">立即购买</view>
@@ -21,24 +19,59 @@
 </template>
 
 <script>
-import { getProducts } from '@/api/product.js'
+import { dhList } from '@/api/product.js';
 export default {
-	data(){
+	data() {
 		return {
-			dataList:[],
-		}
+			dataList: [],
+			page: 1,
+			limit: 10,
+			loadingType:'more'
+		};
 	},
 	onLoad() {
 		this.loadData();
 	},
-	methods:{
-		loadData(){
-			getProducts({sid:47}).then(({data}) =>{
-				this.dataList = data;
+	onReachBottom(){
+		this.loadData()
+	},
+	methods: {
+		loadData() {
+			const obj = this;
+			if (this.loadingType === 'loading') {
+				//防止重复加载
+				return;
+			}
+			if (this.loadingType === 'noMore') {
+				//防止重复加载
+				return;
+			}
+			this.loadingType = 'loading';
+			dhList({ page: this.page, limit: this.limit }).then(({ data }) => {
+				console.log(data)
+				if(data.length > 0){
+					this.dataList = this.dataList.concat(data)
+				}
+				this.$nextTick(function() {
+					if (obj.limit == data.length) {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
+						obj.loadingType = 'more';
+						return;
+					} else {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
+						obj.loadingType = 'noMore';
+					}
+				});
+				this.$set(obj.dataList, 'loaded', true);
+			});
+		},
+		navToDetailPage(item){
+			uni.navigateTo({
+				url:'/pages/product/vipProduct?id=' + item.id
 			})
 		}
 	}
-}
+};
 </script>
 
 <style lang="scss">
@@ -60,15 +93,15 @@ page,
 	margin: 20rpx auto 0;
 	position: relative;
 	image {
-		width: 260rpx;
-		height: 260rpx;
+		width: 200rpx;
+		height: 200rpx;
 		border-radius: 10rpx;
 	}
 	.guess-box {
 		padding: 12rpx 0 0 24rpx;
 		width: 436rpx;
 		.title {
-			font-size: 30rpx;
+			font-size: 36rpx;
 			padding-left: 4rpx;
 			font-family: PingFang SC;
 			font-weight: 500;
@@ -151,12 +184,12 @@ page,
 		.btn {
 			width: 137rpx;
 			height: 56rpx;
-			background: #16CC9F;
+			background: #16cc9f;
 			border-radius: 28rpx;
 			font-size: 28rpx;
 			font-family: PingFang SC;
 			font-weight: 500;
-			color: #FFFFFF;
+			color: #ffffff;
 			line-height: 56rpx;
 			text-align: center;
 			position: absolute;

+ 1 - 1
pages/money/account.vue

@@ -1,5 +1,5 @@
 <template>
-	<view class="content" v-if="!sh">
+	<view class="content">
 		<view class="navbar">
 			<view v-for="(item, index) in navList" :key="index" class="nav-item" :class="{ current: tabCurrentIndex === index }" @click="tabClick(index)">{{ item.text }}</view>
 		</view>

+ 358 - 0
pages/money/integral.vue

@@ -0,0 +1,358 @@
+<template>
+	<view class="content">
+		<view class="content-money">
+			<view class="money-box">
+				<view class="goback-box" @click="toBack"><image class="goback" src="../../static/img/fanhui.png" mode=""></image></view>
+				<view class="header">我的商城积分</view>
+				<image class="money_bg" src="../../static/img/anchor12.png"></image>
+				<view class="money">{{ userInfo.integral | getMoneyStyle }}</view>
+			</view>
+
+		</view>
+		<view class="navbar">
+			<view v-for="(item, index) in navList" :key="index" class="nav-item" :class="{ current: tabCurrentIndex === index }" @click="tabClick(index)">{{ item.text }}</view>
+		</view>
+		<swiper :current="tabCurrentIndex" :style="{ height: maxheight }" class="swiper-box" duration="300" @change="changeTab">
+			<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
+				<scroll-view class="list-scroll-content" scroll-y @scrolltolower="loadData">
+					<!-- 空白页 -->
+					<empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty>
+					<!-- 订单列表 -->
+					<template>
+						<view v-for="(item, i) in tabItem.orderList" class="order-item flex">
+							<view class="title-box">
+								<view class="title">
+									<text>{{ item.title }}</text>
+								</view>
+
+								<view class="time">
+									<text>{{ item.add_time }}</text>
+								</view>
+							</view>
+							<view class="money">
+								<text>{{ (item.pm == 0 ? '-' : '+') + item.number }}</text>
+							</view>
+						</view>
+					</template>
+					<uni-load-more :status="tabItem.loadingType"></uni-load-more>
+				</scroll-view>
+			</swiper-item>
+		</swiper>
+	</view>
+</template>
+
+<script>
+import { integral, userBalance } from '@/api/wallet.js';
+import { mapState, mapMutations } from 'vuex';
+import { getMoneyStyle } from '@/utils/rocessor.js';
+import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+import empty from '@/components/empty';
+export default {
+	filters: {
+		getMoneyStyle
+	},
+	components: {
+		empty,
+		uniLoadMore
+	},
+	onReady(res) {
+		// 初始化获取页面宽度
+		var _this = this;
+		uni.getSystemInfo({
+			success: resu => {
+				const query = uni.createSelectorQuery();
+				query.select('.swiper-box').boundingClientRect();
+				query.exec(function(res) {
+					_this.maxheight = resu.windowHeight - res[0].top + 'px';
+					console.log('打印页面的剩余高度', _this.height);
+				});
+			},
+			fail: res => {}
+		});
+	},
+	data() {
+		return {
+			// 头部图高度
+			maxheight: '',
+			tabCurrentIndex: 0,
+			navList: [
+				{
+					state: 1,
+					text: '收入',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				},
+				{
+					state: 0,
+					text: '支出',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				}
+			],
+			money: ''
+		};
+	},
+	onLoad(options) {
+		this.loadData();
+	},
+	computed: {
+		...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
+	},
+	methods: {
+		// 页面跳转
+		navto(e) {
+			uni.navigateTo({
+				url: e
+			});
+		},
+		//获取收入支出信息
+		async loadData(source) {
+			//这里是将订单挂载到tab列表下
+			let index = this.tabCurrentIndex;
+			let navItem = this.navList[index];
+			let state = navItem.state;
+			if (source === 'tabChange' && navItem.loaded === true) {
+				//tab切换只有第一次需要加载数据
+				return;
+			}
+			if (navItem.loadingType === 'noMore') {
+				//防止重复加载
+				return;
+			}
+			// 修改当前对象状态为加载中
+			navItem.loadingType = 'loading';
+			integral(
+				{
+					page: navItem.page,
+					limit: navItem.limit,
+					pm: state
+				}
+			)
+				.then(({ data }) => {
+					console.log(data)
+					navItem.orderList = navItem.orderList.concat(data);
+					console.log(navItem.orderList,'123465')
+					navItem.page++;
+					if (navItem.limit == data.length) {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
+						navItem.loadingType = 'more';
+						return;
+					} else {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
+						navItem.loadingType = 'noMore';
+					}
+					uni.hideLoading();
+					this.$set(navItem, 'loaded', true);
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		},
+
+		//swiper 切换
+		changeTab(e) {
+			this.tabCurrentIndex = e.target.current;
+			this.loadData('tabChange');
+		},
+		//顶部tab点击
+		tabClick(index) {
+			this.tabCurrentIndex = index;
+		},
+		// 点击返回 我的页面
+		toBack() {
+			uni.switchTab({
+				url: '/pages/user/user'
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: #ffffff;
+	height: 100%;
+}
+.content-money {
+	padding-bottom: 30rpx;
+	background: $page-color-base;
+	// border: 2px solid #ffffff;
+	// padding-top: var(--status-bar-height);
+	.moneyTx {
+		position: absolute;
+		top: 120rpx;
+		right: 0rpx;
+		// width: 150rpx;
+		padding: 10rpx 10rpx;
+		border: 2px solid #ffffff;
+		border-top-left-radius: 15rpx;
+		border-bottom-left-radius: 15rpx;
+		line-height: 1;
+		font-size: $font-base;
+		background: #ffffff;
+	}
+	.buttom-box {
+		background-color: #ffffff;
+		text-align: center;
+		margin: 0 30rpx;
+		padding: 20rpx 0;
+		border-radius: $border-radius-sm;
+		margin-top: -60rpx;
+		.buttom {
+			font-size: $font-lg;
+			flex-grow: 1;
+		}
+		.interval {
+			width: 2px;
+			height: 60rpx;
+			background-color: #eeeeee;
+		}
+		.icon {
+			height: 36rpx;
+			width: 36rpx;
+			margin: 0 auto;
+			.icon-img {
+				width: 100%;
+				height: 100%;
+			}
+		}
+	}
+}
+.money-box {
+	color: #ffffff;
+	text-align: center;
+	position: relative;
+	.header {
+		position: absolute;
+		left: 0;
+		top: 0;
+		width: 100%;
+		height: 80rpx;
+		font-size: 32rpx;
+		font-weight: 700;
+		z-index: 99;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+	.goback-box {
+		position: absolute;
+		left: 18rpx;
+		top: 0;
+		height: 80rpx;
+		display: flex;
+		align-items: center;
+	}
+	.goback {
+		z-index: 100;
+		width: 34rpx;
+		height: 34rpx;
+	}
+	.money_bg {
+		width: 100%;
+		height: 360rpx;
+		display: block;
+	}
+	.text {
+		padding-top: 80rpx;
+		font-size: $font-lg;
+	}
+	.money {
+		position: absolute;
+		top: 0;
+		width: 100%;
+		padding-top: 186rpx;
+		font-size: 60rpx;
+		font-weight: bold;
+		&::before {
+			content: '¥';
+			font-size: 30rpx;
+		}
+	}
+}
+
+.navbar {
+	display: flex;
+	height: 40px;
+	padding: 0 5px;
+	background: #fff;
+	box-shadow: 0 1px 5px rgba(0, 0, 0, 0.06);
+	position: relative;
+	z-index: 10;
+	.nav-item {
+		flex: 1;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		height: 100%;
+		font-size: 15px;
+		color: #999999;
+		position: relative;
+		&.current {
+			color: #000000;
+			&:after {
+				content: '';
+				position: absolute;
+				left: 50%;
+				bottom: 0;
+				transform: translateX(-50%);
+				width: 44px;
+				height: 0;
+				border-bottom: 2px solid #27d4dd;
+			}
+		}
+	}
+}
+// 列表
+
+.swiper-box {
+	padding-top: 10rpx;
+	.order-item {
+		padding: 20rpx 30rpx;
+		line-height: 1.5;
+		.title-box {
+			.title {
+				font-size: $font-lg;
+				color: $font-color-base;
+			}
+			.time {
+				font-size: $font-base;
+				color: $font-color-light;
+			}
+		}
+		.money {
+			color: #ff0000;
+			font-size: $font-lg;
+		}
+	}
+}
+.list-scroll-content {
+	height: 100%;
+}
+.wallet-btn {
+	width: 674rpx;
+	height: 88rpx;
+	background: linear-gradient(90deg, #08c4e6, #50ead2);
+	border-radius: 44rpx;
+	font-size: $font-lg;
+	font-family: PingFang SC;
+	font-weight: 500;
+	color: #ffffff;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	position: fixed;
+	left: 38rpx;
+	bottom: 50rpx;
+}
+.content {
+	height: 100%;
+	.empty-content {
+		background-color: #ffffff;
+	}
+}
+</style>

+ 4 - 4
pages/money/pay.vue

@@ -188,10 +188,6 @@ export default {
 		//确认支付
 		confirm: async function() {
 			let obj = this;
-			uni.showLoading({
-				title: '支付中',
-				mask: true
-			})
 			// 判断是否余额不足
 			if (obj.payName == 'yue' && +obj.now_money < obj.money) {
 				uni.showModal({
@@ -204,6 +200,10 @@ export default {
 				});
 				return;
 			}
+			uni.showLoading({
+				title: '支付中',
+				mask: true
+			})
 			// 支付中
 			obj.payLoding = true;
 			// #ifdef H5

+ 280 - 141
pages/money/withdrawal.vue

@@ -1,27 +1,30 @@
 <template>
-	<view class="content" v-if="!sh">
+	<view class="content">
+		<!-- <uni-notice-bar single="true" text="每月25号到月底可提现上月结算余额"></uni-notice-bar> -->
 		<view class="content-money">
-			<view class="buttom">
-				<text class="text">可提现金额</text>
-				<view class="icon">
-					<text>¥</text>
-					{{ money }}
+			<view class="flex ">
+				<view class="buttom">
+					<view class="icon">{{ money | getMoneyStyle }}</view>
+					<text class="text">可提现金额</text>
 				</view>
-			</view>
-			<view class="interval"></view>
-			<view class="buttom">
-				<text class="text">申请提现金额</text>
-				<view class=" icon">
-					<input class="input" type="number" v-model="withdrawal" :placeholder="'最低提现金额' + minPrice + '元'" placeholder-class="placeholder" />
+				<view class="interval"></view>
+				<view class="buttom">
+					<view class=" icon">{{ freeze | getMoneyStyle }}</view>
+					<text class="text">待审核提现金额</text>
 				</view>
 			</view>
-			<view class="interval"></view>
-			<view class="tip">
-				<text class="tip-text">申请提现金额</text>
-				<view class=" tip-icon" @click="all()">全部提现</view>
+		</view>
+		<view class="row-box">
+			<view class="title">提现金额</view>
+			<view class="row">
+				<text class="tit">¥</text>
+				<input class="input" type="number" v-model="withdrawal" :placeholder="'最低提现金额' + minPrice + '元'" placeholder-class="placeholder" />
+				<view class="buttom" @click="withdrawal = money">全部提现</view>
+			</view>
+			<view class="tip" v-if="withdrawal > 0">
+				实际到账{{ realMoney }},剩余{{ integral }}转化为积分
 			</view>
 		</view>
-
 		<view class="list">
 			<radio-group @change="tabRadio">
 				<!-- <label>
@@ -37,95 +40,129 @@
 					<view class="box">
 						<view class="icon iconfont iconzhifubao"></view>
 						<view class="title-box">
-							<view class="title">
-								<text v-if="aliData.fullname != null">提现至支付宝</text>
-								<text v-else>请创建支付宝账号</text>
-							</view>
-							<view class="node">
-								<text v-if="aliData.fullname != null">真实姓名({{ aliData.fullname }})</text>
-							</view>
+							<view class="title"><text>提现至支付宝</text></view>
 						</view>
 						<view class="right"><radio value="alipay" color="#5dbc7c" :checked="type == 'alipay'" /></view>
 					</view>
 				</label>
 				<label>
+					<view class="box">
+						<view class="icon iconfont"><image class="icon-img" src="/static/icon/i8.png" mode="aspectFit"></image></view>
+						<view class="title-box">
+							<view class="title"><text>提现至银行卡</text></view>
+						</view>
+						<view class="right"><radio value="bank" color="#5dbc7c" :checked="type == 'bank'" /></view>
+					</view>
+				</label>
+				<!-- <label>
 					<view class="box">
 						<view class="icon iconfont"><image class="icon-img" src="/static/icon/i8.png" mode="aspectFit"></image></view>
 						<view class="title-box">
 							<view class="title">
-								<text v-if="bankData.bankno != null">{{ bankData.bank + ' ' + bankData.bankno }}</text>
+								<text v-if="bankData.bankno">{{ bankData.bank + ' ' + bankData.bankno }}</text>
 								<text v-else>请创建银行账号</text>
 							</view>
 							<view class="node">
-								<text v-if="bankData.fullname != null">真实姓名({{ bankData.fullname}})</text>
+								<text v-if="bankData.fullname">真实姓名({{ bankData.fullname }})</text>
 							</view>
 						</view>
 						<view class="right"><radio value="bank" color="#5dbc7c" :checked="type == 'bank'" /></view>
 					</view>
-				</label>
+				</label> -->
 			</radio-group>
 		</view>
+		<view class="row b-b" v-if="type == 'weixin'">
+			<text class="tit">微信号</text>
+			<input class="input" type="text" v-model="wiexin" placeholder="请输入微信号" placeholder-class="placeholder" />
+		</view>
+		<view class="row b-b" v-if="type == 'weixin'">
+			<text class="tit">真实姓名</text>
+			<input class="input" type="text" v-model="wiexin_name" placeholder="请输入真实姓名" placeholder-class="placeholder" />
+		</view>
+		<view class="box-item1" v-if="type == 'weixin'">
+			<view class="item-left">微信收款码:</view>
+			<view class="item-right">
+				<image :src="img_wei" mode="" class="upload-img" @click.stop="imgsubW" v-if="img_wei"></image>
+				<image src="../../static/img/phone.png" class="upload-img" mode="" v-if="!img_wei" @click.stop="imgsubW"></image>
+			</view>
+		</view>
+		<view class="row b-b" v-if="type == 'alipay'">
+			<text class="tit">支付宝账号</text>
+			<input class="input" type="text" v-model="alipay_code" placeholder="请输入支付宝账号" placeholder-class="placeholder" />
+		</view>
+		<view class="row b-b" v-if="type == 'alipay'">
+			<text class="tit">支付宝姓名</text>
+			<input class="input" type="text" v-model="alipay_name" placeholder="请输入支付宝姓名" placeholder-class="placeholder" />
+		</view>
+		<view class="row b-b" v-if="type == 'bank'">
+			<text class="tit">银行卡号</text>
+			<input class="input" type="text" v-model="bank_code" placeholder="请输入银行卡号" placeholder-class="placeholder" />
+		</view>
+		<view class="row b-b" v-if="type == 'bank'">
+			<text class="tit">姓名</text>
+			<input class="input" type="text" v-model="bank_people" placeholder="请输入银行卡姓名" placeholder-class="placeholder" />
+		</view>
+		<view class="row b-b" v-if="type == 'bank'">
+			<text class="tit">所属银行</text>
+			<input class="input" type="text" v-model="bank_name" placeholder="请输入所属银行" placeholder-class="placeholder" />
+		</view>
 		<button class="add-btn up" @click="confirm">提交申请</button>
-		<button class="add-btn modified" @click="navTo('/pages/money/account')">账号管理</button>
 	</view>
 </template>
-
 <script>
 import { getMoneyStyle } from '@/utils/rocessor.js';
-import { extractCash, extractBank, aliInfo, bankInfo } from '@/api/wallet.js';
-import { mapState, mapMutations } from 'vuex';
-import { loadIndexs } from '@/api/index.js';
+import { extractCash, extractBank } from '@/api/wallet.js';
+import { uploads } from '@/api/user.js';
+import uniNoticeBar from '@/components/uni-notice-bar/uni-notice-bar.vue';
 export default {
+	filters: {
+		getMoneyStyle
+	},
+	components: {
+		uniNoticeBar
+	},
 	data() {
 		return {
-			sh: true,
 			type: 'alipay', //提现方式
-			money: '', //可提现金额
+			money: '0.00', //可提现金额
+			freeze: '0.0', //冻结金额
 			withdrawal: '', //提现金额
 			minPrice: '', //最少提现金额
-			coldMoney: '', //冻结中的金额
-			aliData: { fullname: '', alino: '' },
-			bankData: { fullname: '', bank: '', bankno: '' },
-			// #ifdef H5
-			weichatBsrowser: false
-			// #endif
+			wiexin: '',
+			wiexin_name:'',//真实姓名
+			alipay_name: '', //支付宝姓名
+			alipay_code: '', //支付宝账号
+			img: '' ,//支付宝收款码
+			img_wei:'',//微信收款码
+			bank_people:'',//银行卡姓名
+			bank_code:'',//银行卡号
+			bank_name:'',//银行姓名
+			exchange:'',//转化率
 		};
 	},
-	computed: {
-		...mapState('user', ['userInfo', 'orderInfo', 'hasLogin']),
-		moneyMin() {
-			return '最低提现金额' + this.minPrice + '元';
+	computed:{
+		realMoney(){
+			return (this.withdrawal * this.exchange).toFixed(2)
+		},
+		integral(){
+			return (this.withdrawal * (1 - this.exchange)).toFixed(2)
 		}
 	},
-	onShow(options) {
-		loadIndexs({}).then(({data}) =>{
-			console.log(data,'123')
-			if(data.cash_switch == '1'){
-				this.sh = false
-			}
-		})
+	onLoad(options) {
 		// #ifdef H5
 		this.weichatBsrowser = uni.getStorageSync('weichatBrowser');
 		// #endif
 		//加载提现信息
 		this.loadData();
-		// 加载提款账号信息
-		this.aliData.fullname = this.userInfo.alipay_name;
-		console.log(this.aliData.fullname);
-		this.aliData.alino = this.userInfo.alipay_code;
-		this.bankData.fullname = this.userInfo.bank_user_name;
-		this.bankData.bank = this.userInfo.bank_name;
-		this.bankData.bankno = this.userInfo.bank_code;
 	},
 	methods: {
 		// 加载余额信息
 		async loadData() {
 			extractBank({}).then(({ data }) => {
-				console.log(data);
-				this.coldMoney = data.brokerage_price; //冻结中金额
-				this.money = data.commissionCount * 1; //可提现余额
+				this.money = data.brokerage_price; //可提现余额
 				this.minPrice = data.minPrice; //最小提现
-				this.freeze = data.inmoneyCount; //提现中的余额
+				this.freeze = data.extractPriceCount; //提现中的余额
+				this.exchange = data.real_get_ratio / 100;
 			});
 		},
 		// 跳转
@@ -134,53 +171,95 @@ export default {
 				url: url
 			});
 		},
-		all() {
-			this.withdrawal = this.money;
-		},
 		// 切换选中对象
 		tabRadio(e) {
 			this.type = e.detail.value;
+			console.log(this.type)
+		},
+		imgsub() {
+			console.log(1111)
+			uploads({
+				filename: ''
+			}).then(data => {
+				console.log('data', data);
+				this.img = data[0].url;
+			});
+		},
+		imgsubW() {
+			uploads({
+				filename: ''
+			}).then(data => {
+				console.log('data', data);
+				this.img_wei = data[0].url;
+			});
 		},
 		// 提交
 		confirm() {
-			console.log(this.withdrawal);
-			if (this.withdrawal === '') {
-				this.$api.msg('请填写需要提现的佣金');
-				return;
-			}
-			if (this.withdrawal == 0) {
-				this.$api.msg('提现佣金不能为0');
-				return;
-			}
-			if (this.withdrawal < this.minPrice) {
-				this.$api.msg('提现金额不能低于最小金额');
-				return;
+			const obj = this;
+			let data ={}
+			this.withdrawal = 1 * this.withdrawal
+			if(this.type == 'weixin'){
+				data = {
+					extract_type: this.type, //bank -银行卡 alipay-支付宝 weixin-微信
+					weixin: this.wiexin,
+					img:this.img_wei,
+					name:this.wiexin_name,
+					money: this.withdrawal, //金额
+					money_type: 1 //0佣金1余额
+				};
 			}
-			let data = {
-				extract_type: this.type, //bank -银行卡 alipay-支付宝 weixin-微信
-				money: this.withdrawal, //金额
-				money_type: 'brokerage' //0佣金1余额
-			};
-			if (this.type == 'alipay') {
-				data.name = this.aliData.fullname;
-				data.alipay_code = this.aliData.alino;
+			if(this.type == 'alipay'){
+				if(this.alipay_code == ''){
+					obj.$api.msg('请输入支付宝账号')
+					return
+				}
+				if(this.alipay_name == ''){
+					obj.$api.msg('请输入支付宝姓名')
+					return
+				}
+				data = {
+					extract_type: this.type, //bank -银行卡 alipay-支付宝 weixin-微信
+					name:this.alipay_name,
+					alipay_code:this.alipay_code,
+					// img:this.img,
+					money: this.withdrawal, //金额
+					money_type: 1 //0佣金1余额
+				};
 			}
-			if (this.type == 'bank') {
-				data.name = this.bankData.fullname;
-				data.bankname = this.bankData.bank;
-				data.cardnum = this.bankData.bankno;
+			if(this.type == 'bank') {
+				if(this.bank_code == ''){
+					obj.$api.msg('请输入银行卡卡号')
+					return
+				}
+				if(this.bank_people == ''){
+					obj.$api.msg('请输入银行卡姓名')
+					return
+				}
+				if(this.bank_name == ''){
+					obj.$api.msg('请输入所属银行')
+					return
+				}
+				data = {
+					extract_type: this.type, //bank -银行卡 alipay-支付宝 weixin-微信
+					name: this.bank_people,
+					bankname: this.bank_name,
+					cardnum: this.bank_code,
+					// img:this.img,
+					money: this.withdrawal, //金额
+					money_type: 1 //0佣金1余额
+				};
 			}
-
+			console.log(data)
 			extractCash(data)
 				.then(e => {
-					uni.navigateTo({
-						url: '/pages/money/success?type=1'
+					uni.showToast({
+						title: '提交成功',
+						duration: 2000,
+						position: 'top'
 					});
-					// uni.showToast({
-					// 	title: '提交成功',
-					// 	duration: 2000,
-					// 	position: 'top'
-					// });
+					this.withdrawal = '';
+					this.wiexin = '';
+					this.loadData();
 				})
 				.catch(e => {
 					console.log();
@@ -195,72 +274,106 @@ page {
 	height: 100%;
 }
 .content-money {
-	padding: 0 20rpx;
+	padding: 30rpx 0;
+	background: #ffffff;
+}
+.row {
+	display: flex;
+	align-items: center;
+	position: relative;
+	padding: 0 30upx;
+	height: 110upx;
+	background: #fff;
+
+	.tit {
+		flex-shrink: 0;
+		width: 250upx;
+		font-size: 30upx;
+		color: $font-color-dark;
+	}
+	.input {
+		flex: 1;
+		font-size: 30upx;
+		color: $font-color-dark;
+	}
+	.iconlocation {
+		font-size: 36upx;
+		color: $font-color-light;
+	}
+}
+.flex {
 	background-color: #ffffff;
+	text-align: center;
+	margin: 0 30rpx;
+	border-radius: $border-radius-sm;
 	.buttom {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		height: 110rpx;
+		font-size: $font-lg;
+		width: 50%;
 	}
 	.interval {
-		width: 100%;
-		height: 1px;
-		background: #e6e6e6;
+		width: 2px;
+		height: 60rpx;
+		background-color: #eeeeee;
 	}
 	.icon {
-		font-size: 48rpx;
-		font-family: SourceHanSansCN;
-		font-weight: 500;
-		color: #333333;
-		text {
-			font-size: 32rpx;
+		background-size: 100%;
+		font-size: 42rpx;
+		color: $font-color-dark;
+		font-weight: bold;
+		background-repeat: no-repeat;
+		background-position: center;
+	}
+	.text {
+		color: $font-color-light;
+	}
+}
+
+.row-box {
+	margin-top: 30rpx;
+	padding: 20rpx 30rpx;
+	background: #fff;
+	.title {
+		font-size: $font-base + 2rpx;
+		color: $font-color-dark;
+	}
+	.row {
+		display: flex;
+		align-items: center;
+		position: relative;
+		height: 80rpx;
+		.tit {
+			flex-shrink: 0;
+			width: 40rpx;
+			font-size: 30rpx;
+			color: $font-color-dark;
 		}
 		.input {
-			text-align: right;
 			flex: 1;
 			font-size: 30rpx;
 			color: $font-color-dark;
 		}
 		.iconlocation {
-			text-align: right;
 			font-size: 36rpx;
 			color: $font-color-light;
 		}
-	}
-	.text {
-		font-size: 32rpx;
-		font-family: PingFang SC;
-		font-weight: 500;
-		color: #333333;
+
+		.buttom {
+			color: $font-color-spec;
+			font-size: $font-base;
+		}
 	}
 	.tip {
-		height: 74rpx;
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		.tip-text {
-			font-size: 24rpx;
-			font-family: PingFang SC;
-			font-weight: 500;
-			color: #999999;
-		}
-		.tip-icon {
-			font-size: 26rpx;
-			font-family: SourceHanSansCN;
-			font-weight: 400;
-			color: #438bed;
-		}
+		color: #ff0000;
+		font-size: 28rpx;
+		padding: 10rpx 10rpx 10rpx 20rpx;
 	}
 }
-
 .add-btn {
 	&.modified {
-		color: #2ed8db;
-		border:1px solid  #2ed8db;
+		color: $base-color;
 	}
 	&.up {
-		background: linear-gradient(90deg, #08c4e6, #50ead2);
+		background-color: $base-color;
 		color: #fff;
 	}
 	display: flex;
@@ -276,8 +389,7 @@ page {
 }
 
 .list {
-	padding-left: 30rpx;
-	margin-top: 30rpx;
+	padding: 0rpx 30rpx;
 	background-color: #ffffff;
 	.box {
 		display: flex;
@@ -313,6 +425,33 @@ page {
 		}
 	}
 }
+.box-item1 {
+	display: flex;
+	padding: 32rpx 24rpx;
+	background-color: #FFFFFF;
+	.item-left{
+		font-size: 28rpx;
+		width: 160rpx;
+		flex-shrink: 0;
+	}
+	.item-right{
+		width: 100%;
+		margin-left: 24rpx;
+		font-size: 28rpx;
+		display: flex;
+		align-items: center;
+		color: #999999;
+		input{
+			font-size: 28rpx;
+		}
+		image{
+			width: 160rpx;
+			height: 160rpx;
+			margin-top: 24rpx;
+			margin-left: 60rpx;
+		}
+	}
+}
 /deep/ .uni-radio-input {
 	width: 45rpx;
 	height: 45rpx;

+ 361 - 0
pages/money/xfIntegral.vue

@@ -0,0 +1,361 @@
+<template>
+	<view class="content">
+		<view class="content-money">
+			<view class="money-box">
+				<view class="goback-box" @click="toBack"><image class="goback" src="../../static/img/fanhui.png" mode=""></image></view>
+				<view class="header">我的消费积分</view>
+				<image class="money_bg" src="../../static/img/anchor12.png"></image>
+				<view class="money">{{ userInfo.point | getMoneyStyle }}</view>
+			</view>
+
+		</view>
+		<view class="navbar">
+			<view v-for="(item, index) in navList" :key="index" class="nav-item" :class="{ current: tabCurrentIndex === index }" @click="tabClick(index)">{{ item.text }}</view>
+		</view>
+		<swiper :current="tabCurrentIndex" :style="{ height: maxheight }" class="swiper-box" duration="300" @change="changeTab">
+			<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
+				<scroll-view class="list-scroll-content" scroll-y @scrolltolower="loadData">
+					<!-- 空白页 -->
+					<empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty>
+					<!-- 订单列表 -->
+					<template>
+						<view v-for="(item, i) in tabItem.orderList" class="order-item flex">
+							<view class="title-box">
+								<view class="title">
+									<text>{{ item.title }}</text>
+								</view>
+
+								<view class="time">
+									<text>{{ item.add_time }}</text>
+								</view>
+							</view>
+							<view class="money">
+								<text>{{ (item.pm == 0 ? '-' : '+') + item.number }}</text>
+							</view>
+						</view>
+					</template>
+					<uni-load-more :status="tabItem.loadingType"></uni-load-more>
+				</scroll-view>
+			</swiper-item>
+		</swiper>
+	</view>
+</template>
+
+<script>
+import { xfjf, userBalance } from '@/api/wallet.js';
+import { mapState, mapMutations } from 'vuex';
+import { getMoneyStyle } from '@/utils/rocessor.js';
+import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+import empty from '@/components/empty';
+import { getTime } from '@/utils/rocessor.js';
+export default {
+	filters: {
+		getMoneyStyle
+	},
+	components: {
+		empty,
+		uniLoadMore
+	},
+	onReady(res) {
+		// 初始化获取页面宽度
+		var _this = this;
+		uni.getSystemInfo({
+			success: resu => {
+				const query = uni.createSelectorQuery();
+				query.select('.swiper-box').boundingClientRect();
+				query.exec(function(res) {
+					_this.maxheight = resu.windowHeight - res[0].top + 'px';
+					console.log('打印页面的剩余高度', _this.height);
+				});
+			},
+			fail: res => {}
+		});
+	},
+	data() {
+		return {
+			// 头部图高度
+			maxheight: '',
+			tabCurrentIndex: 0,
+			navList: [
+				{
+					state: 1,
+					text: '收入',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				},
+				{
+					state: 0,
+					text: '支出',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				}
+			],
+			money: ''
+		};
+	},
+	onLoad(options) {
+		this.loadData();
+	},
+	computed: {
+		...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
+	},
+	methods: {
+		// 页面跳转
+		navto(e) {
+			uni.navigateTo({
+				url: e
+			});
+		},
+		//获取收入支出信息
+		async loadData(source) {
+			//这里是将订单挂载到tab列表下
+			let index = this.tabCurrentIndex;
+			let navItem = this.navList[index];
+			let state = navItem.state;
+			if (source === 'tabChange' && navItem.loaded === true) {
+				//tab切换只有第一次需要加载数据
+				return;
+			}
+			if (navItem.loadingType === 'noMore') {
+				//防止重复加载
+				return;
+			}
+			// 修改当前对象状态为加载中
+			navItem.loadingType = 'loading';
+			xfjf(
+				{
+					page: navItem.page,
+					limit: navItem.limit
+				},
+				state
+			)
+				.then(({ data }) => {
+					data.list.forEach(e =>{
+						e.add_time = getTime(e.add_time)
+					})
+					navItem.orderList = navItem.orderList.concat(data.list);
+					console.log(navItem.orderList,'12345648972165')
+					navItem.page++;
+					if (navItem.limit == data.list.length) {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
+						navItem.loadingType = 'more';
+						return;
+					} else {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
+						navItem.loadingType = 'noMore';
+					}
+					uni.hideLoading();
+					this.$set(navItem, 'loaded', true);
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		},
+
+		//swiper 切换
+		changeTab(e) {
+			this.tabCurrentIndex = e.target.current;
+			this.loadData('tabChange');
+		},
+		//顶部tab点击
+		tabClick(index) {
+			this.tabCurrentIndex = index;
+		},
+		// 点击返回 我的页面
+		toBack() {
+			uni.switchTab({
+				url: '/pages/user/user'
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: #ffffff;
+	height: 100%;
+}
+.content-money {
+	padding-bottom: 30rpx;
+	background: $page-color-base;
+	// border: 2px solid #ffffff;
+	// padding-top: var(--status-bar-height);
+	.moneyTx {
+		position: absolute;
+		top: 120rpx;
+		right: 0rpx;
+		// width: 150rpx;
+		padding: 10rpx 10rpx;
+		border: 2px solid #ffffff;
+		border-top-left-radius: 15rpx;
+		border-bottom-left-radius: 15rpx;
+		line-height: 1;
+		font-size: $font-base;
+		background: #ffffff;
+	}
+	.buttom-box {
+		background-color: #ffffff;
+		text-align: center;
+		margin: 0 30rpx;
+		padding: 20rpx 0;
+		border-radius: $border-radius-sm;
+		margin-top: -60rpx;
+		.buttom {
+			font-size: $font-lg;
+			flex-grow: 1;
+		}
+		.interval {
+			width: 2px;
+			height: 60rpx;
+			background-color: #eeeeee;
+		}
+		.icon {
+			height: 36rpx;
+			width: 36rpx;
+			margin: 0 auto;
+			.icon-img {
+				width: 100%;
+				height: 100%;
+			}
+		}
+	}
+}
+.money-box {
+	color: #ffffff;
+	text-align: center;
+	position: relative;
+	.header {
+		position: absolute;
+		left: 0;
+		top: 0;
+		width: 100%;
+		height: 80rpx;
+		font-size: 32rpx;
+		font-weight: 700;
+		z-index: 99;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+	.goback-box {
+		position: absolute;
+		left: 18rpx;
+		top: 0;
+		height: 80rpx;
+		display: flex;
+		align-items: center;
+	}
+	.goback {
+		z-index: 100;
+		width: 34rpx;
+		height: 34rpx;
+	}
+	.money_bg {
+		width: 100%;
+		height: 360rpx;
+		display: block;
+	}
+	.text {
+		padding-top: 80rpx;
+		font-size: $font-lg;
+	}
+	.money {
+		position: absolute;
+		top: 0;
+		width: 100%;
+		padding-top: 186rpx;
+		font-size: 60rpx;
+		font-weight: bold;
+		&::before {
+			content: '¥';
+			font-size: 30rpx;
+		}
+	}
+}
+
+.navbar {
+	display: flex;
+	height: 40px;
+	padding: 0 5px;
+	background: #fff;
+	box-shadow: 0 1px 5px rgba(0, 0, 0, 0.06);
+	position: relative;
+	z-index: 10;
+	.nav-item {
+		flex: 1;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		height: 100%;
+		font-size: 15px;
+		color: #999999;
+		position: relative;
+		&.current {
+			color: #000000;
+			&:after {
+				content: '';
+				position: absolute;
+				left: 50%;
+				bottom: 0;
+				transform: translateX(-50%);
+				width: 44px;
+				height: 0;
+				border-bottom: 2px solid #27d4dd;
+			}
+		}
+	}
+}
+// 列表
+
+.swiper-box {
+	padding-top: 10rpx;
+	.order-item {
+		padding: 20rpx 30rpx;
+		line-height: 1.5;
+		.title-box {
+			.title {
+				font-size: $font-lg;
+				color: $font-color-base;
+			}
+			.time {
+				font-size: $font-base;
+				color: $font-color-light;
+			}
+		}
+		.money {
+			color: #ff0000;
+			font-size: $font-lg;
+		}
+	}
+}
+.list-scroll-content {
+	height: 100%;
+}
+.wallet-btn {
+	width: 674rpx;
+	height: 88rpx;
+	background: linear-gradient(90deg, #08c4e6, #50ead2);
+	border-radius: 44rpx;
+	font-size: $font-lg;
+	font-family: PingFang SC;
+	font-weight: 500;
+	color: #ffffff;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	position: fixed;
+	left: 38rpx;
+	bottom: 50rpx;
+}
+.content {
+	height: 100%;
+	.empty-content {
+		background-color: #ffffff;
+	}
+}
+</style>

+ 11 - 1
pages/order/createOrder.vue

@@ -37,6 +37,7 @@
 					<text class="spec">{{ ls.productInfo.attrInfo ? ls.productInfo.attrInfo.suk : '默认' }}</text>
 					<view class="price-box">
 						<text class="price">¥{{ ls.productInfo.attrInfo ? ls.productInfo.attrInfo.price : ls.productInfo.price }}</text>
+						<text class="price" v-if="ls.productInfo.integral > 0 || ls.productInfo.attrInfo.integral > 0">+{{ ls.productInfo.attrInfo ? ls.productInfo.attrInfo.integral : ls.productInfo.integral }}积分</text>
 						<text class="number">{{ 'x ' + ls.cart_num + (ls.productInfo.unit_name || '') }}</text>
 						<!-- <view><text class="price">¥{{lss.price}}</text></view> -->
 						<!-- <view class="number">
@@ -87,6 +88,10 @@
 				<text class="cell-tit clamp">商品金额</text>
 				<text class="cell-tip">¥{{ payAllMoney }}</text>
 			</view>
+			<view class="yt-list-cell b-b" v-if="moneyAll.totalIntegral > 0">
+				<text class="cell-tit clamp">商品积分</text>
+				<text class="cell-tip">{{ moneyAll.totalIntegral }}</text>
+			</view>
 			<view class="yt-list-cell b-b" v-if="checkedPoints && integralShow">
 				<text class="cell-tit clamp">积分抵扣</text>
 				<text class="cell-tip">-¥{{ integralMoney }}</text>
@@ -103,6 +108,8 @@
 				<text>实付款</text>
 				<text class="price-tip">¥</text>
 				<text class="price">{{ payPrice }}</text>
+				<text class="price-tip" v-if="payIntegral >0">+</text>
+				<text class="price" v-if="payIntegral >0">{{payIntegral}}积分</text>
 			</view>
 			<text class="submit" :class="{ submitNo: !payType }" @click="payType ? submit() : ''">提交订单</text>
 		</view>
@@ -167,9 +174,11 @@ export default {
 				storeFreePostage: 0, //邮费优惠
 				storePostage: 0, //邮费
 				totalPrice: 0, //总支付金额
-				vipPrice: 0 //vip优惠价
+				vipPrice: 0 ,//vip优惠价
+				totalIntegral: 0,// 商品积分
 			},
 			payPrice: 0, //总支付金额
+			payIntegral: 0, //总支付积分
 			orderKey: '', //订单id
 			checkedPoints: false, //判断是否积分抵扣
 			integralAll: 0, //可使用的积分
@@ -252,6 +261,7 @@ export default {
 					this.integralShow = true;
 					// 获取支付金额
 					this.payPrice = +data.result.pay_price;
+					this.payIntegral = +data.result.totalIntegral
 					this.integralMoney = data.result.deduction_price;
 				})
 				.catch(e => {

+ 2 - 2
pages/order/orderDetail.vue

@@ -68,8 +68,8 @@
 			<view class="input">-¥{{ item.coupon_price }}</view>
 		</view>
 		<view class="row b-b flex" v-if="item.use_integral > 0">
-			<text class="tit">积分抵扣</text>
-			<view class="input">-¥{{ item.use_integral }}</view>
+			<text class="tit">积分</text>
+			<view class="input">{{ item.use_integral }}</view>
 		</view>
 		<view class="row b-b flex">
 			<text class="tit ">实付</text>

+ 3 - 5
pages/product/list.vue

@@ -23,7 +23,8 @@
 				<view class="image-wrapper"><image :src="item.image" mode="aspectFill"></image></view>
 				<text class="title clamp">{{ item.title }}</text>
 				<view class="price-box">
-					<text class="price">{{ item.price }}</text>
+					<view class="price" v-if="item.integral > 0">¥{{ item.price }} + {{ item.integral }}积分</view>
+					<view class="price" v-else>¥{{ item.price }}</view>
 					<text>已售 {{ item.sales }}</text>
 				</view>
 			</view>
@@ -394,6 +395,7 @@ page,
 		line-height: 80rpx;
 	}
 	.price-box {
+		margin-top: 10rpx;
 		display: flex;
 		align-items: center;
 		justify-content: space-between;
@@ -405,10 +407,6 @@ page,
 		font-size: $font-lg;
 		color: $uni-color-primary;
 		line-height: 1;
-		&:before {
-			content: '¥';
-			font-size: 26rpx;
-		}
 	}
 }
 </style>

+ 8 - 4
pages/product/product.vue

@@ -13,8 +13,6 @@
 				<view class="title-box">
 					<text class="price-tip">¥</text>
 					<text class="price">{{ goodsObjact.price }}</text>
-					<!-- <text class="m-price" v-if="goodsObjact.ot_price > goodsObjact.price">¥{{ goodsObjact.ot_price }}</text> -->
-					<!-- <text class="coupon-tip">7折</text> -->
 				</view>
 				<view class="flex timeStop">
 					<view>距离结束</view>
@@ -36,6 +34,8 @@
 			<view class="price-box" v-if="goodsType == 0">
 				<text class="price-tip">¥</text>
 				<text class="price">{{ goodsObjact.price }}</text>
+				<text class="price-tip" v-if="goodsObjact.integral > 0">+</text>
+				<text class="price" v-if="goodsObjact.integral > 0">{{ goodsObjact.integral }}积分</text>
 				<text class="m-price" v-if="goodsObjact.ot_price > goodsObjact.price">¥{{ goodsObjact.ot_price }}</text>
 				<!-- <text class="coupon-tip">7折</text> -->
 			</view>
@@ -164,7 +164,8 @@
 					<image :src="actionImage"></image>
 					<view class="right">
 						<view class="good-name clamp">{{ goodsObjact.store_name }}</view>
-						<text class="price">¥{{ actionPrice }}</text>
+						<text class="price" v-if="actionIntegral != 0">¥{{ actionPrice }}+{{actionIntegral}}积分</text>
+						<text class="price" v-else>¥{{ actionPrice }}</text>
 						<!-- <text class="stock">库存:{{ goodsObjact.stock }}件</text> -->
 						<!-- <view class="selected" v-if="goodsType == 0">
 							已选:
@@ -242,6 +243,7 @@ export default {
 			// 对比对象
 			productValue: [],
 			actionPrice: 0, //默认选中商品价格
+			actionIntegral: 0,//默认选中商品积分
 			actionImage: '', //默认选中图片
 			uniqueId: '', //选中的商品分类
 			specSelected: [], //选中的分类
@@ -364,6 +366,7 @@ export default {
 				console.log(data.productAttr);
 				obj.productValue = data.productValue; //保存分类查询数据
 				obj.actionPrice = goods.price; //保存默认选中商品价格
+				obj.actionIntegral = goods.integral; //保存默认选中商品积分
 				obj.actionImage = goods.image_base; //保存默认选中商品价格
 				obj.goodsNumberMax = goods.stock; //保存默认选中最大可购买商品数量
 				obj.shopId = data.mer_id; //保存商店id
@@ -439,6 +442,7 @@ export default {
 			if (this.productValue[str]) {
 				let data = this.productValue[str];
 				this.actionPrice = data.price;
+				this.actionIntegral = data.integral
 				this.goodsNumberMax = data.stock;
 				this.actionImage = data.image;
 				this.uniqueId = data.unique;
@@ -943,7 +947,7 @@ page {
 				margin-bottom: 15rpx;
 			}
 			.price {
-				font-size: 60rpx;
+				font-size: 40rpx;
 				font-family: PingFang SC;
 				font-weight: bold;
 				color: #ff6f0f;

+ 13 - 9
pages/product/search.vue

@@ -39,14 +39,18 @@
 					</view>
 					<view class="nav-item" :class="{ current: newOrder == 1 }" @click="newGoodsTab()">新品</view>
 				</view>
-				<scroll-view scroll-y class="cate-list" @scrolltolower='getProducts'>
+				<scroll-view scroll-y class="cate-list" @scrolltolower="getProducts">
 					<view class="guess-section">
 						<view v-for="(item, index) in goodsList" :key="index" class="guess-item" @click="navToDetailPage(item)">
 							<view class="image-wrapper"><image :src="item.image" mode="aspectFill"></image></view>
 							<text class="title clamp margin-c-20">{{ item.store_name }}</text>
 							<view class="cmy-hr"></view>
 							<view class="price margin-c-20 flex">
-								<view>
+								<view v-if="item.integral > 0">
+									<text class="font-size-sm ">¥</text>
+									{{ item.price }} + {{ item.integral }}积分
+								</view>
+								<view v-else>
 									<text class="font-size-sm ">¥</text>
 									{{ item.price }}
 								</view>
@@ -107,10 +111,10 @@ export default {
 		this.loadData();
 	},
 	//下拉刷新
-		onPullDownRefresh() {
-			this.page = 1
-			this.getProducts('refresh');
-		},
+	onPullDownRefresh() {
+		this.page = 1;
+		this.getProducts('refresh');
+	},
 	methods: {
 		// 加载商品
 		async getProducts(type, loading) {
@@ -183,7 +187,7 @@ export default {
 		// 点击触发搜索事件
 		navTo() {
 			this.tabCurrentIndex = 1;
-			this.infoData()
+			this.infoData();
 		},
 		// 默认搜索
 		defaultSearch() {
@@ -243,9 +247,9 @@ page,
 	background-color: $page-color-base;
 }
 /* #ifdef MP || APP-PLUS */
-.vheight{
+.vheight {
 	height: var(--status-bar-height);
-	background-color: #FFFFFF;
+	background-color: #ffffff;
 }
 .input-box {
 	padding: 25rpx;

+ 1119 - 0
pages/product/vipProduct.vue

@@ -0,0 +1,1119 @@
+<template>
+	<view class="container">
+		<view class="carousel">
+			<swiper indicator-dots :circular="true" duration="400">
+				<swiper-item class="swiper-item" v-for="(item, index) in imgList" :key="index">
+					<view class="image-wrapper"><image :src="item" class="loaded" mode="scaleToFill"></image></view>
+				</swiper-item>
+			</swiper>
+		</view>
+		<view class="introduce-section">
+			<view class="price-box" v-if="goodsType == 0">
+				<text class="price-tip">¥</text>
+				<text class="price">{{ goodsObjact.price }}</text>
+				<text class="m-price" v-if="goodsObjact.ot_price > goodsObjact.price">¥{{ goodsObjact.ot_price }}</text>
+				<!-- <text class="coupon-tip">7折</text> -->
+			</view>
+			<text class="title" v-if="goodsType == 0">{{ goodsObjact.store_name }}</text>
+			<view class="bot-row">
+				<text>快递: {{ goodsObjact.postage }}</text>
+				<text style="text-align: center;">销量: {{ goodsObjact.sales }}</text>
+			</view>
+		</view>
+		<!-- 评价 -->
+		<view class="eva-section" v-if="reply" @click="navTo('/pages/product/reply?id=' + goodsid)">
+			<view class="e-header">
+				<text class="tit">评价</text>
+				<text>({{ details.replyCount }})</text>
+				<text class="tip">好评率 {{ details.replyChance }}%</text>
+				<text class="iconfont iconenter"></text>
+			</view>
+			<view class="eva-box">
+				<image class="portrait" :src="reply.avatar" mode="aspectFill"></image>
+				<view class="right">
+					<text class="name">{{ reply.nickname }}</text>
+					<text class="con">{{ reply.comment }}</text>
+					<view class="con_box">
+						<view class="con_image" v-for="item in reply.pics"><image :src="item"></image></view>
+					</view>
+					<view class="bot">
+						<text class="attr"></text>
+						<text class="time">{{ reply.add_time }}</text>
+					</view>
+				</view>
+			</view>
+			<view class="eva-boxs" v-if="reply.merchant_reply_content">
+				<view class="right">
+					<text class="con">
+						<text style="color: #FD5B23;margin-right: 8rpx;">商家回复 :</text>
+						{{ reply.merchant_reply_content }}
+					</text>
+					<view class="bot">
+						<text class="attr"></text>
+						<text class="time">{{ reply.merchant_reply_time }}</text>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="c-list">
+			<view class="c-row b-b" @click="toggleSpec">
+				<text class="tit">购买数量</text>
+				<view class="con">
+					<text class="selected-text">{{ goodsNumber }}</text>
+				</view>
+				<text class="iconfont iconenter"></text>
+			</view>
+			<view class="c-row" >
+				<text  style="width: 100%;">购买获得{{goodsObjact.point}}消费积分</text>
+			</view>
+			<view class="c-row b-b" v-if="goodsType == 1">
+				<text class="tit">限购数量</text>
+				<view class="con">
+					<text class="selected-text">{{ goodsObjact.num + goodsObjact.unit_name }}</text>
+				</view>
+			</view>
+			<!-- <view class="c-row b-b">
+				<text class="tit">优惠券</text>
+				<text class="con t-r red">领取优惠券</text>
+				<text class="iconfont iconenter"></text>
+			</view> -->
+			<view class="c-row b-b" v-if="goodsObjact.is_integral == 1 && goodsType == 0">
+				<text class="tit">积分</text>
+				<view class="bz-list con">
+					<text>最高抵扣¥{{ moneyNum(goodsObjact.use_max_integral) == 0 ? moneyNum(goodsObjact.price) : moneyNum(goodsObjact.use_max_integral) }}</text>
+				</view>
+			</view>
+		</view>
+		<view class="shop-box flex" v-if="goodsType == 0 && shopId > 0">
+			<view class="flex">
+				<image :src="shopInfo.logo" mode=" aspectFit" class="shop-img"></image>
+				<text class="font-size-lg">{{ shopInfo.title }}</text>
+			</view>
+			<navigator :url="'/pages/shoping/index?merid=' + shopId"><view class="shop-button">进店逛逛</view></navigator>
+		</view>
+		<view class="detail-desc">
+			<view class="d-header"><text>图文详情</text></view>
+			<rich-text class="detail-centent" :nodes="goodsObjact.description"></rich-text>
+			<view :class="{ contentBottomHeight: goodsType == 1 || goodsType == 2, goodsBottom: goodsType == 0 }"></view>
+		</view>
+		<!-- 底部操作菜单 -->
+		<view class="page-bottom" v-if="goodsType == 0">
+			<!-- <navigator url="/pages/index/index" open-type="switchTab" class="p-b-btn">
+				<text class="iconfont iconhome"></text>
+				<text>首页</text>
+			</navigator>
+			<navigator url="/pages/cart/cart" open-type="switchTab" class="p-b-btn">
+				<text class="iconfont iconcart"></text>
+				<text>购物车</text>
+			</navigator> -->
+
+			<view class="action-btn-group">
+				<button type="primary" class=" action-btn no-border  add-cart-btn" @click="toggleSpec(1)">立即购买</button>
+			</view>
+		</view>
+		<!-- 规格-模态层弹窗 -->
+		<view class="popup spec" :class="specClass" @touchmove.stop.prevent="stopPrevent" @click="toggleSpec">
+			<!-- 遮罩层 -->
+			<view class="mask"></view>
+			<view class="layer attr-content" @click.stop="stopPrevent">
+				<view class="a-t">
+					<image :src="actionImage"></image>
+					<view class="right">
+						<view class="good-name clamp">{{ goodsObjact.store_name }}</view>
+						<text class="price">¥{{ actionPrice }}</text>
+						<text class="tip">购买可得{{ actionPoint }}消费积分</text>
+						<!-- <text class="stock">库存:{{ goodsObjact.stock }}件</text> -->
+						<!-- <view class="selected" v-if="goodsType == 0">
+							已选:
+							<text class="selected-text" v-for="(sItem, sIndex) in specSelected" :key="sIndex">{{ sItem }}</text>
+						</view> -->
+					</view>
+				</view>
+				<view v-for="(item, index) in specList" :key="index" class="attr-list">
+					<text>{{ item.attr_name }}</text>
+					<view class="item-list">
+						<text
+							v-for="(childItem, childIndex) in item.attr_value"
+							:key="childIndex"
+							class="tit"
+							:class="{ selected: childItem.check }"
+							@click="selectSpec(childItem, item, index)"
+						>
+							{{ childItem.attr }}
+						</text>
+					</view>
+				</view>
+				<view class="attr-list">
+					<text>购买数量</text>
+					<view class="item-list">
+						<uni-number-box class="step" :isMin="true" :value="goodsNumber" :min="1" :max="goodsNumberMax" @eventChange="numberChange"></uni-number-box>
+					</view>
+				</view>
+				<button class="btn" @click.stop="buy">完成</button>
+			</view>
+		</view>
+		<view :class="{ seckillBottom: goodsType == 1, goodsBottom: goodsType == 0 }"></view>
+		<!-- 分享 -->
+		<!-- <share ref="share" :contentHeight="580" :shareList="shareList"></share> -->
+	</view>
+</template>
+
+<script>
+// import share from '@/components/share';
+import uniNumberBox from '@/components/uni-number-box.vue';
+import uniCountdown from '@/components/uni-countdown/uni-countdown.vue';
+import { dhDateil, cartAdd, collectAdd, collectDel, seckillGoods, groupGoods } from '@/api/product.js';
+// #ifdef H5
+import { weixindata, shareLoad } from '@/utils/wxAuthorized';
+import { mapState } from 'vuex';
+import weixinObj from '@/plugin/jweixin-module/index.js';
+// #endif
+export default {
+	components: {
+		uniNumberBox,
+		uniCountdown
+	},
+	filters: {
+		address(val) {
+			let str = '';
+			if (val) {
+				str = val[0] + ' ' + val[1];
+			}
+			return str;
+		}
+	},
+	data() {
+		return {
+			details: '',
+			reply: '', //评论
+			type: 1, //默认支付方式add为
+			goodsNumber: 1, //购买数量
+			goodsid: '', //商品id
+			specClass: 'none', //显示隐藏弹窗
+			shareList: [], //分享列表
+			goodsObjact: {}, //保存商品数据
+			storeObjact: {}, //保存店铺数据
+			//图片循环
+			imgList: [],
+			specList: [],
+			// 对比对象
+			productValue: [],
+			actionPrice: 0, //默认选中商品价格
+			actionPoint: 0, //购买商品获取的积分
+			actionImage: '', //默认选中图片
+			uniqueId: '', //选中的商品分类
+			specSelected: [], //选中的分类
+			specSelectedName: '', //选中分类名称
+			goodsNumberMax: 0, //最大可购买数量
+			shopId: '', //商店id
+			//商店信息
+			shopInfo: {
+				logo: '',
+				title: ''
+			}, //商店信息
+			goodsType: 0, //商品类型1秒杀商品0为普通商品2为拼团商品
+			// 秒杀数据保存
+			seckillObj: {
+				stopTime: 0, //结束时间
+				stop: false, //是否结束
+				stopTimeH: 0, //小时
+				stopTimeM: 0, //分钟
+				stopTimeS: 0 //秒钟
+			},
+			// 拼团数据保存
+			pink: {
+				id: '', //拼团编号
+				uid: '', //用户编号
+				people: '', //拼团人数
+				price: '', //拼团价格
+				stop_time: '', //拼团结束时间
+				nickname: '', //团长昵称
+				avatar: '', //团长头像
+				count: '', //拼团剩余人数
+				h: '', //时
+				i: '', //分
+				s: '' //秒
+			}
+		};
+	},
+	async onLoad(options) {
+		let obj = this;
+		//保存活动id
+		this.goodsid = options.id;
+		// 判断有无人邀请
+		if (options.spread) {
+			// 存储邀请人
+			uni.setStorageSync('spread', options.spread);
+		}
+		if (this.goodsType == 0) {
+			// 加载普通商品详情
+			this.goodsDetail();
+		}
+	},
+	computed: {
+		// #ifdef H5
+		...mapState(['weichatObj', 'baseURL', 'urlFile']),
+		...mapState('user', ['userInfo'])
+		// #endif
+	},
+	methods: {
+		navTo(url) {
+			uni.navigateTo({
+				url
+			});
+		},
+		// 转换字符串为数字
+		moneyNum: function(value) {
+			return +value;
+		},
+		navToProductGoods() {
+			uni.redirectTo({
+				url: '/pages/product/product?id=' + this.goodsObjact.product_id
+			});
+		},
+		// 获取商品信息
+		goodsDetail() {
+			let obj = this;
+			dhDateil({}, this.goodsid).then(function({ data }) {
+				obj.details = data;
+				let goods = data.storeInfo;
+				let store_info = data.system_store; // 保存店铺信息
+				console.log(store_info);
+				obj.storeObjact = store_info;
+				obj.goodsObjact = goods;
+				//商品详情图超出屏幕问题
+				if (obj.goodsObjact.description != null) {
+					obj.goodsObjact.description = obj.goodsObjact.description.replace(/<img/g, '<img class="rich-img"').replace(/<p>\s*<img/g, '<p class="pHeight"><img');
+				}
+				if ( obj.goodsObjact.rule != null ) {
+					obj.goodsObjact.rule ='<p>' + obj.goodsObjact.rule.replace(/\n/g, '</p><p>').trim() + '</p>'
+				}
+				obj.reply = data.reply; //保存评论列表
+				obj.imgList = goods.images; //保存轮播图
+				obj.specList = data.productAttr; //保存分类列表
+				console.log(data.productAttr);
+				obj.productValue = data.productValue; //保存分类查询数据
+				obj.actionPrice = goods.price; //保存默认选中商品价格
+				obj.actionPoint = goods.point; //保存购买商品赠送消费积分
+				obj.actionImage = goods.image_base; //保存默认选中商品价格
+				obj.goodsNumberMax = goods.stock; //保存默认选中最大可购买商品数量
+				obj.shopId = data.mer_id; //保存商店id
+				// 保存默认选中的对象
+				obj.specSelected = []; //初始化默认选择对象
+				for (let i = 0; i < obj.specList.length; i++) {
+					// 设置默认数据
+					let attrValue = obj.specList[i].attr_value[0];
+					attrValue.check = true;
+					obj.specSelected.push(attrValue.attr);
+				}
+
+				//保存默认选中的对象字符串名称
+				let str = obj.specSelected.join(',');
+				// 设置默认值
+				obj.actionImage = obj.productValue[str].image;
+				obj.uniqueId = obj.productValue[str].unique;
+				// #ifdef H5
+				obj.shareDate();
+				// #endif
+			});
+		},
+		// #ifdef H5
+		// 加载微信html5页面分享方法
+		shareDate() {
+			let obj = this;
+			// 保存分享人id链接
+			let url = window.location.href + '&spread=' + this.userInfo.uid;
+			// 判断是否微信浏览器
+			let bool = uni.getStorageSync('weichatBrowser') || '';
+			if (bool) {
+				// 过滤微信强制添加的链接地址
+				url = url.replace(/[\?,&]from=singlemessage/g, '');
+				let data = {
+					link: url, // 分享链接
+					imgUrl: obj.goodsObjact.image, // 分享图标
+					desc: obj.goodsObjact.store_info,
+					title: obj.goodsObjact.store_name,
+					success: function(e) {
+						console.log(e);
+					}
+				};
+				shareLoad(data);
+			}
+		},
+		// #endif
+		// 购买数量变化
+		numberChange(e) {
+			this.goodsNumber = e.number;
+		},
+		//规格弹窗开关
+		toggleSpec(str) {
+			if (this.specClass === 'show') {
+				this.specClass = 'hide';
+				setTimeout(() => {
+					this.specClass = 'none';
+				}, 250);
+			} else if (this.specClass === 'none') {
+				this.specClass = 'show';
+			}
+			// 保存当前购买类型
+			this.type = str;
+		},
+		//选择规格
+		selectSpec(item, arr, ind) {
+			arr.attr_value.forEach(function(e) {
+				e.check = false;
+			});
+			item.check = true;
+			this.specSelected[ind] = item.attr;
+			let str = this.specSelected.join(',');
+			this.specSelectedName = this.specSelected.join(' ');
+			if (this.productValue[str]) {
+				let data = this.productValue[str];
+				this.actionPrice = data.price;
+				this.actionPoint = data.point
+				this.goodsNumberMax = data.stock;
+				this.actionImage = data.image;
+				this.uniqueId = data.unique;
+			}
+		},
+		//分享
+		share() {
+			this.$refs.share.toggleMask();
+		},
+		//收藏
+		toFavorite(item) {
+			let obj = this;
+			item.userCollect = !item.userCollect;
+			if (!item.userCollect) {
+				collectDel({ id: obj.goodsid, category: 'product' }).then(function(e) {
+					uni.showToast({
+						title: '成功取消收藏',
+						type: 'top',
+						duration: 1500
+					});
+				});
+			} else {
+				collectAdd({ id: obj.goodsid, category: 'product' }).then(function(e) {
+					uni.showToast({
+						title: '成功加入收藏',
+						type: 'top',
+						duration: 1500
+					});
+				});
+			}
+		},
+		// 立即购买
+		buy() {
+			let obj = this;
+			let data = {
+				cartNum: obj.goodsNumber, //商品数量
+				uniqueId: obj.uniqueId, //商品标签
+				new: '1', //商品是否新增加到购物车1为不加入0为加入
+				mer_id: obj.shopId,
+				// type: 0,//0为余额支付  1为消费券支付 2为积分支付
+				exchangeId: obj.goodsid
+			};
+			if (obj.type == 2) {
+				data.new = 0;
+			}
+			if (obj.goodsType == 0) {
+				data.productId = obj.goodsid; //商品编号
+			}
+			// 判断是否为秒杀商品
+			if (obj.goodsType == 1) {
+				data.secKillId = obj.goodsid; //秒杀商品编号
+				data.productId = obj.goodsObjact.product_id; //商品编号
+				// 判断是否秒杀已经结束
+				if (obj.seckillObj.stop) {
+					uni.showModal({
+						title: '提示',
+						content: '当前活动已经结束',
+						showCancel: false
+					});
+					return;
+				}
+			}
+			// 判断是否为拼团商品
+			if (obj.goodsType == 2) {
+				data.combinationId = obj.goodsid; //拼团编号
+				data.productId = obj.goodsObjact.product_id; //商品编号
+			}
+			cartAdd(data)
+				.then(function({ data }) {
+					if (obj.type == 1) {
+						// 跳转到支付页
+						uni.navigateTo({
+							url: '/pages/order/createOrder?id=' + data.cartId + '&goodsType=' + obj.goodsType
+						});
+					}
+					if (obj.type == 2) {
+						uni.showToast({
+							title: '成功加入购物车',
+							type: 'top',
+							duration: 2000
+						});
+						obj.toggleSpec();
+					}
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		},
+		stopPrevent() {}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: $page-color-base;
+}
+//秒杀底部高度
+.seckillBottom {
+	height: 110rpx;
+}
+// 文章页底部高度撑开
+.contentBottomHeight {
+	height: 110rpx;
+}
+//默认商品底部高度
+.goodsBottom {
+	height: 160rpx;
+}
+.iconenter {
+	font-size: $font-base + 2rpx;
+	color: #888;
+}
+.carousel {
+	/* #ifdef APP-PLUS */
+	padding-top: var(--status-bar-height);
+	/* #endif */
+	height: 722rpx;
+	position: relative;
+	swiper {
+		height: 100%;
+	}
+	.image-wrapper {
+		width: 100%;
+		height: 100%;
+	}
+	.swiper-item {
+		display: flex;
+		justify-content: center;
+		align-content: center;
+		// height: 750rpx;
+		height: 710rpx;
+		overflow: hidden;
+		image {
+			width: 100%;
+			height: 100%;
+		}
+	}
+}
+// 秒杀
+.seckill-box-title {
+	background: linear-gradient(90deg, rgba(239, 78, 81, 1) 0%, rgba(244, 113, 59, 1) 100%) !important;
+	.price,
+	.price-tip,
+	.timeStop,
+	.m-price {
+		color: #ffffff !important;
+	}
+	.price-tip {
+		font-size: $font-base;
+	}
+	.price {
+		font-size: 45rpx !important;
+		font-weight: bold;
+	}
+	.timeStop {
+	}
+}
+// 底部拼团、秒杀支付按钮
+.goods-pay-box {
+	position: fixed;
+	left: 0;
+	bottom: 0;
+	z-index: 95;
+	width: 750rpx;
+	height: 100rpx;
+	line-height: 1;
+	color: #ffffff;
+	text-align: center;
+	font-size: $font-lg;
+	.bgLine {
+		background: linear-gradient(90deg, rgba(239, 78, 81, 1) 0%, rgba(244, 113, 59, 1) 100%);
+	}
+	// 拼团支付按钮
+	.goods-pay {
+		display: flex;
+		align-content: center;
+		flex-wrap: wrap;
+		justify-content: center;
+		.goods-buttom,
+		.goods-buttom-money {
+			width: 100%;
+		}
+		.goods-buttom-money {
+			font-size: $font-base;
+		}
+	}
+	.goods-pay-stop,
+	.goods-pay {
+		padding: 15rpx 0;
+		height: 100%;
+		width: 100%;
+	}
+	.goods-pay-stop {
+		background: $color-gray;
+		line-height: 70rpx;
+	}
+}
+/* 标题简介 */
+.introduce-section {
+	background: #fff;
+	padding: 20rpx 30rpx;
+	.title {
+		font-size: 32rpx;
+		color: $font-color-dark;
+		height: 50rpx;
+		line-height: 50rpx;
+	}
+	.price-box {
+		display: flex;
+		align-items: baseline;
+		height: 64rpx;
+		padding: 10rpx 0;
+		font-size: 26rpx;
+		color: $uni-color-primary;
+	}
+	.price {
+		font-size: $font-lg + 2rpx;
+	}
+	.m-price {
+		margin: 0 12rpx;
+		color: $font-color-light;
+		text-decoration: line-through;
+	}
+	.coupon-tip {
+		align-items: center;
+		padding: 4rpx 10rpx;
+		background: $uni-color-primary;
+		font-size: $font-sm;
+		color: #fff;
+		border-radius: 6rpx;
+		line-height: 1;
+		transform: translateY(-4rpx);
+	}
+	.bot-row {
+		display: flex;
+		align-items: center;
+		height: 50rpx;
+		font-size: $font-sm;
+		color: $font-color-light;
+		text {
+			flex: 1;
+		}
+	}
+}
+/* 分享 */
+.share-section {
+	display: flex;
+	align-items: center;
+	color: $font-color-base;
+	background: linear-gradient(left, #fdf5f6, #fbebf6);
+	padding: 12rpx 30rpx;
+	.share-icon {
+		display: flex;
+		align-items: center;
+		width: 70rpx;
+		height: 30rpx;
+		line-height: 1;
+		border: 1px solid $uni-color-primary;
+		border-radius: 4rpx;
+		position: relative;
+		overflow: hidden;
+		font-size: 22rpx;
+		color: $uni-color-primary;
+		&:after {
+			content: '';
+			width: 50rpx;
+			height: 50rpx;
+			border-radius: 50%;
+			left: -20rpx;
+			top: -12rpx;
+			position: absolute;
+			background: $uni-color-primary;
+		}
+	}
+	.iconfavorfill {
+		position: relative;
+		z-index: 1;
+		font-size: 24rpx;
+		margin-left: 2rpx;
+		margin-right: 10rpx;
+		color: #fff;
+		line-height: 1;
+	}
+	.tit {
+		font-size: $font-base;
+		margin-left: 10rpx;
+	}
+	.iconprompt {
+		padding: 10rpx;
+		font-size: 30rpx;
+		line-height: 1;
+	}
+	.share-btn {
+		flex: 1;
+		text-align: right;
+		font-size: $font-sm;
+		color: $uni-color-primary;
+	}
+	.iconenter {
+		font-size: $font-sm;
+		margin-left: 4rpx;
+		color: $uni-color-primary;
+	}
+}
+
+.c-list {
+	margin-top: 20rpx;
+	font-size: $font-sm + 2rpx;
+	color: $font-color-base;
+	background: #fff;
+	.c-row {
+		display: flex;
+		align-items: center;
+		padding: 20rpx 30rpx;
+		position: relative;
+	}
+	.tit {
+		width: 140rpx;
+	}
+	.con {
+		flex: 1;
+		color: $font-color-dark;
+		.selected-text {
+			margin-right: 10rpx;
+		}
+	}
+	.bz-list {
+		height: 40rpx;
+		font-size: $font-sm + 2rpx;
+		color: $font-color-dark;
+		text {
+			display: inline-block;
+			margin-right: 30rpx;
+		}
+	}
+	.con-list {
+		flex: 1;
+		display: flex;
+		flex-direction: column;
+		color: $font-color-dark;
+		line-height: 40rpx;
+	}
+	.red {
+		color: $uni-color-primary;
+	}
+}
+
+/* 评价 */
+.eva-section {
+	display: flex;
+	flex-direction: column;
+	padding: 20rpx 30rpx;
+	background: #fff;
+	margin-top: 16rpx;
+	.e-header {
+		display: flex;
+		align-items: center;
+		height: 70rpx;
+		font-size: $font-sm + 2rpx;
+		color: $font-color-light;
+		.tit {
+			font-size: $font-base + 2rpx;
+			color: $font-color-dark;
+			margin-right: 4rpx;
+		}
+		.tip {
+			flex: 1;
+			text-align: right;
+		}
+		.iconenter {
+			margin-left: 10rpx;
+		}
+	}
+}
+.eva-box {
+	display: flex;
+	padding: 20rpx 0;
+	.portrait {
+		flex-shrink: 0;
+		width: 80rpx;
+		height: 80rpx;
+		border-radius: 100px;
+	}
+	.right {
+		flex: 1;
+		display: flex;
+		flex-direction: column;
+		font-size: $font-base;
+		color: $font-color-base;
+		padding-left: 26rpx;
+		.con {
+			font-size: $font-base;
+			color: $font-color-dark;
+			padding: 20rpx 0;
+		}
+		.bot {
+			display: flex;
+			justify-content: space-between;
+			font-size: $font-sm;
+			color: $font-color-light;
+		}
+	}
+}
+
+.eva-boxs {
+	width: 100%;
+	overflow: hidden;
+	padding: 10px 28rpx;
+	background: #f4f4f4;
+	border-radius: 12rpx;
+	font-size: $font-sm + 2rpx;
+	color: #333;
+	.portrait {
+		flex-shrink: 0;
+		width: 80rpx;
+		height: 80rpx;
+		border-radius: 100px;
+	}
+	.right {
+		flex: 1;
+		display: flex;
+		flex-direction: column;
+		font-size: $font-base;
+		color: $font-color-base;
+		.con {
+			font-size: $font-base;
+			color: $font-color-dark;
+		}
+		.bot {
+			display: flex;
+			justify-content: space-between;
+			font-size: $font-sm;
+			color: $font-color-light;
+		}
+	}
+}
+/*  详情 */
+.detail-desc {
+	background: #fff;
+	margin-top: 16rpx;
+	/deep/ img {
+		max-width: 100% !important;
+		display: inline !important;
+	}
+	/deep/ div {
+		max-width: 100% !important;
+	}
+	.d-header {
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		height: 80rpx;
+		font-size: $font-base + 2rpx;
+		color: $font-color-dark;
+		position: relative;
+
+		text {
+			padding: 0 20rpx;
+			background: #fff;
+			position: relative;
+			z-index: 1;
+		}
+		&:after {
+			position: absolute;
+			left: 50%;
+			top: 50%;
+			transform: translateX(-50%);
+			width: 300rpx;
+			height: 0;
+			content: '';
+			border-bottom: 1px solid #ccc;
+		}
+	}
+}
+
+/* 规格选择弹窗 */
+.attr-content {
+	padding: 10rpx 30rpx;
+	.a-t {
+		display: flex;
+		image {
+			width: 170rpx;
+			height: 170rpx;
+			flex-shrink: 0;
+			border-radius: 8rpx;
+		}
+		.right {
+			display: flex;
+			flex-direction: column;
+			padding-left: 24rpx;
+			font-size: $font-sm + 2rpx;
+			color: $font-color-base;
+			line-height: 42rpx;
+			.good-name {
+				padding-top: 20rpx;
+				max-width: 320rpx;
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #1d2023;
+				line-height: 42rpx;
+				margin-bottom: 15rpx;
+			}
+			.price {
+				font-size: 60rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #ff6f0f;
+				// font-size: $font-lg;
+				// color: $uni-color-primary;
+				// margin-bottom: 10rpx;
+			}
+			.tip {
+				margin-top: 10rpx;
+				font-size: 32rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #000;
+			}
+			.selected-text {
+				margin-right: 10rpx;
+			}
+		}
+	}
+	.attr-list {
+		display: flex;
+		flex-direction: column;
+		font-size: $font-base + 2rpx;
+		color: $font-color-base;
+		padding-top: 30rpx;
+		padding-left: 10rpx;
+	}
+	.item-list {
+		padding: 20rpx 0 0;
+		display: flex;
+		flex-wrap: wrap;
+		.tit {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			background: #eee;
+			// margin-left: 10rpx;
+			margin-right: 20rpx;
+			margin-bottom: 20rpx;
+			border-radius: 100rpx;
+			min-width: 60rpx;
+			height: 60rpx;
+			padding: 0 20rpx;
+			font-size: $font-base;
+			color: $font-color-dark;
+		}
+		.selected {
+			background: #fbebee;
+			color: $uni-color-primary;
+		}
+	}
+}
+
+/*  弹出层 */
+.popup {
+	position: fixed;
+	left: 0;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	z-index: 99;
+
+	&.show {
+		display: block;
+		.mask {
+			animation: showPopup 0.2s linear both;
+		}
+		.layer {
+			animation: showLayer 0.2s linear both;
+		}
+	}
+	&.hide {
+		.mask {
+			animation: hidePopup 0.2s linear both;
+		}
+		.layer {
+			animation: hideLayer 0.2s linear both;
+		}
+	}
+	&.none {
+		display: none;
+	}
+	.mask {
+		position: fixed;
+		top: 0;
+		width: 100%;
+		height: 100%;
+		z-index: 1;
+		background-color: rgba(0, 0, 0, 0.4);
+	}
+	.layer {
+		position: fixed;
+		z-index: 99;
+		bottom: 0;
+		width: 100%;
+		min-height: 30vh;
+		border-radius: 10rpx 10rpx 0 0;
+		background-color: #fff;
+		.btn {
+			height: 66rpx;
+			line-height: 66rpx;
+			border-radius: 100rpx;
+			// background: $uni-color-primary;
+			background: $base-color;
+			font-size: $font-base + 2rpx;
+			color: #fff;
+			margin: 30rpx auto 20rpx;
+		}
+	}
+	@keyframes showPopup {
+		0% {
+			opacity: 0;
+		}
+		100% {
+			opacity: 1;
+		}
+	}
+	@keyframes hidePopup {
+		0% {
+			opacity: 1;
+		}
+		100% {
+			opacity: 0;
+		}
+	}
+	@keyframes showLayer {
+		0% {
+			transform: translateY(120%);
+		}
+		100% {
+			transform: translateY(0%);
+		}
+	}
+	@keyframes hideLayer {
+		0% {
+			transform: translateY(0);
+		}
+		100% {
+			transform: translateY(120%);
+		}
+	}
+}
+
+/* 底部操作菜单 */
+.page-bottom {
+	position: fixed;
+	left: 0rpx;
+	bottom: 0rpx;
+	z-index: 95;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	width: 750rpx;
+	height: 98rpx;
+	background: rgba(255, 255, 255, 0.9);
+	box-shadow: 0 0 20rpx 0 rgba(0, 0, 0, 0.5);
+	// border-radius: 16rpx;
+	.p-b-btn {
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+		font-size: $font-sm;
+		color: $font-color-base;
+		width: 100rpx;
+		height: 98rpx;
+		.iconfont {
+			font-size: 40rpx;
+			line-height: 48rpx;
+			color: $font-color-light;
+		}
+		&.active,
+		&.active .iconfont {
+			color: $uni-color-primary;
+		}
+		.icon-fenxiang2 {
+			font-size: 42rpx;
+			transform: translateY(-2rpx);
+		}
+		.iconlikefill {
+			font-size: 46rpx;
+		}
+	}
+	.action-btn-group {
+		display: flex;
+		height: 98rpx;
+		overflow: hidden;
+		position: relative;
+		.action-btn {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			width: 750rpx;
+			height: 100%;
+			font-size: $font-base;
+			padding: 0;
+			border-radius: 0;
+			// background: transparent;
+			background: #ffb238;
+			&.buy-now-btn {
+				background-color: #ffb238;
+			}
+			&.add-cart-btn {
+				background: linear-gradient(0deg, #2e58ff, #32c6ff);
+			}
+		}
+	}
+}
+// 商店头
+.shop-box {
+	background-color: #ffffff;
+	margin-top: 20rpx;
+	margin-bottom: 10rpx;
+	padding: 20rpx;
+	.shop-img {
+		border-radius: 300rpx;
+		height: 80rpx;
+		width: 80rpx;
+		margin-right: 20rpx;
+	}
+	.shop-button {
+		border-radius: 100rpx;
+		padding: 10rpx 20rpx;
+		color: $color-red;
+		border: 1px solid $color-red;
+		font-size: $font-lg;
+		line-height: 1;
+	}
+}
+/* #ifdef MP */
+.rich-img {
+	width: 100% !important;
+	height: auto;
+}
+/* #endif */
+/deep/ .rich-img {
+	width: 100% !important;
+	height: auto;
+}
+</style>

+ 113 - 96
pages/public/forget.vue

@@ -1,35 +1,41 @@
 <template>
 	<view class="container">
-		<view class="container_text">
-			<image class="banner-img" src="/static/img/img01.png" mode=" scaleToFill"></image>
-		</view>
-		<view class="loginTitle"><text>手机号登录</text></view>
+		<view class="logo-img"><image src="../../static/img/log.png" mode=""></image></view>
+		<view class="logo">和合商城</view>
 		<view class="login_text">
-			<view class="login_input flex">
-				<view class="login_img"><image src="/static/icon/img03.png"></image></view>
-				<view class="login_name"><input class="uni-input" v-model="phone" focus placeholder="请输入手机号" /></view>
+			<view class="login_input flex_item">
+				<view class="login_img"><image class="phone" src="/static/img/phone.png"></image></view>
+				<view class="login_name"><input class="uni-input" type="text" v-model="phone" focus placeholder="请输入手机" /></view>
+			</view>
+			<view class="login_input flex_item">
+				<view class="login_img"><image src="/static/img/zfpwd.png"></image></view>
+				<view class="login_name"><input class="uni-input" type="password" v-model="password" focus placeholder=" 请输入新的不少于6位的密码" /></view>
+			</view>
+			<view class="login_input flex_item">
+				<view class="login_img"><image src="/static/img/zfpwd.png"></image></view>
+				<view class="login_name"><input class="uni-input" type="password" v-model="password2" focus placeholder="请重复输入新密码" /></view>
 			</view>
 			<view class="login_input flex">
-				<view class="login_img"><image src="/static/icon/img06.png"></image></view>
+				<view class="login_img"><image class="codeimg" src="/static/img/yan.png"></image></view>
 				<view class="login_name flex">
-					<input class="uni-input width" v-model="code" focus placeholder="请输入验证码" />
-					<view class="code" @click="verification">{{ countDown == 0 ? '验证码' : countDown }}</view>
+					<input class="uni-input width" v-model="code" type="number" focus placeholder="请输入验证码" />
+					<view class="code" @click="verification">{{ countDown == 0 ? '发送验证码' : countDown }}</view>
 				</view>
 			</view>
-			<view>
-				<button type="green" @click="register" class="uni-button uni-button-green">登录</button>
-			</view>
 		</view>
+		<view class="login" @click="updatalogin">确认修改</view>
 	</view>
 </template>
 <script>
-import { mapMutations } from 'vuex';
-import { verify, loginMobile, getUserInfo } from '@/api/login.js';
+import { registerReset } from '@/api/set.js';
+import { verify } from '@/api/login.js';
 export default {
 	data() {
 		return {
 			phone: '', //用户
 			code: '', //验证码
+			password2: '',
+			password: '',
 			time: '', //保存倒计时对象
 			countDown: 0 //倒计时
 		};
@@ -44,50 +50,58 @@ export default {
 		}
 	},
 	methods: {
-		...mapMutations('user', ['setUserInfo', 'login']),
-		// 手机登录
-		register() {
+		updatalogin() {
 			let obj = this;
 			if (obj.phone == '') {
-				obj.$api.msg('请输入电话号码');
+				obj.$api.msg('请输入邮箱');
+				return;
+			}
+			if (!/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/.test(obj.phone) && (!/(^1[3|4|5|6|7|8|9][0-9]{9}$)/.test(this.phone))) {
+				obj.$api.msg('请输入正确的邮箱或手机');
+				return;
+			}
+			if (obj.password == '') {
+				obj.$api.msg('请输入密码');
 				return;
 			}
-			if (!/(^1[3|4|5|7|8][0-9]{9}$)/.test(this.phone)) {
-				obj.$api.msg('请输入正确的手机号');
+			if (obj.password2 == '') {
+				obj.$api.msg('请再次输入密码');
+				return;
+			}
+			if (obj.password2 != obj.password) {
+				obj.$api.msg('两次密码不正确');
 				return;
 			}
 			if (obj.code == '') {
 				obj.$api.msg('请输入验证码');
 				return;
 			}
-
-			loginMobile({
-				phone: obj.phone, //账号
+			registerReset({
+				account: obj.phone, //账号
+				password: obj.password,
+				password2: obj.password2,
+				type: 1,
 				captcha: obj.code
-			}).then(function(e) {
-				uni.setStorageSync('token', e.data.token);
-				getUserInfo({}).then(e => {
-					obj.login();
-					// 保存返回用户数据
-					obj.setUserInfo(e.data);
-					//成功跳转首页
-					uni.switchTab({
-						url: '/pages/index/index'
+			})
+				.then(function(e) {
+					obj.$api.msg(e.msg);
+					uni.navigateTo({
+						url: '/pages/public/login'
 					});
+				})
+				.catch(e => {
+					console.log(e);
 				});
-			}).catch((e) => {
-				console.log(e);
-			});
 		},
 		//发送验证码
 		verification() {
 			let obj = this;
 			if (this.phone == '') {
-				this.$api.msg('请输入电话号码');
+				this.$api.msg('请输入邮箱号码');
 				return;
 			}
-			if (this.phone.length < 11) {
-				this.$api.msg('请输入正确的手机号');
+			if (!/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/.test(obj.phone) && (!/(^1[3|4|5|6|7|8|9][0-9]{9}$)/.test(this.phone))) {
+				obj.$api.msg('请输入正确的邮箱或手机');
 				return;
 			}
 			// 判断是否在倒计时
@@ -103,17 +117,18 @@ export default {
 					phone: obj.phone,
 					type: 'login'
 				})
-					.then(({ data }) => {})
+					.then(({ data }) => {
+						uni.showToast({
+							title: '验证码已发送',
+							duration: 2000,
+							position: 'top',
+							icon: 'none'
+						});
+					})
 					.catch(err => {
 						console.log(err);
 					});
 			}
-		},
-		login() {
-			//返回登录
-			uni.navigateTo({
-				url: '/pages/public/login'
-			});
 		}
 	}
 };
@@ -121,49 +136,66 @@ export default {
 
 <style lang="scss">
 page {
-	height: 100%;
-}
-.container {
-	width: 100%;
-	height: 100%;
-	background-size: 100%;
-}
-.container_text {
-	width: 100%;
-	height: 500rpx;
-	top: 0rpx;
-	.banner-img {
+	min-height: 100%;
+	background-color: #ffffff;
+	.container {
 		width: 100%;
-		height: 100%;
+		padding: 60rpx 70rpx;
 	}
 }
+.logo-img {
+	width: 161rpx;
+	height: 161rpx;
+	margin:auto;
+	margin-top: 52rpx !important;
+	margin-bottom: 15rpx !important;
+	box-shadow: 0px 12rpx 13rpx 0px rgba(68, 150, 157, 0.47);
+	border-radius: 50%;
+	image {
+		width: 161rpx;
+		height: 161rpx;
+		border-radius: 50%;
+	}
+}
+.logo {
+	font-size: 36rpx;
+	font-weight: 400;
+	color: #2E58FF;
+	text-align: center;
+}
+.phone {
+	height: 43rpx !important;
+	width: 27rpx !important;
+}
+.codeimg {
+	height: 39rpx !important;
+	width: 31rpx !important;
+}
 .login_text {
-	margin: auto 30rpx;
-	position: relative;
-	padding: 100rpx 102rpx;
-	background-color: #ffffff;
-	margin-top: -180rpx;
 	border-radius: 20rpx;
+	margin-top: 80rpx;
 	.login_input {
-		border-bottom: 1px solid #f0f0f0;
-		margin-bottom: 65rpx;
-		.login_img image {
+		// border-bottom: 1px solid #C5CEE0;
+		margin-bottom: 35rpx;
+		padding-bottom: 60rpx;
+		.login_img {
 			height: 35rpx;
-			width: 29rpx;
+			width: 31rpx;
 			margin-right: 20rpx;
+			image {
+				width: 100%;
+				height: 100%;
+			}
 		}
 		.uni-input {
 			text-align: left;
-			width: 470rpx;
-			font-size: 28rpx !important;
+			width: 400rpx;
+			font-size: 32rpx !important;
 		}
 		.login_name {
 			color: #333333;
-			.width {
-				width: 325rpx !important;
-			}
 			.code {
-				color: #5dbc7c;
+				color: #2E58FF;
 				font-size: 23rpx;
 				border-left: 1px solid #eeeeee;
 				width: 150rpx;
@@ -172,29 +204,14 @@ page {
 			}
 		}
 	}
-	.uni-button-green {
-		color: #ffffff;
-		background-color: #5dbc7c;
-		margin: 40rpx 10rpx;
-		border-radius: 50rpx;
-	}
-	.uni-button {
-		height: 85rpx;
-		line-height: 85rpx;
-	}
-}
-.loginTitle {
-	position: absolute;
-	top: 250rpx;
-	width: 100%;
-	text-align: center;
-	color: white;
-	font-size: 40rpx;
 }
 
-uni-button {
-	height: 80rpx !important;
-	line-height: 80rpx !important;
+.login {
+	background: linear-gradient(0deg, #2E58FF, #32C6FF);
+	margin-top: 96rpx;
+	color: #ffffff;
+	text-align: center;
+	padding: 26rpx 0rpx;
+	border-radius: 20rpx;
 }
-
 </style>

+ 212 - 222
pages/public/login.vue

@@ -1,94 +1,79 @@
 <template>
 	<view class="container">
-		<view class="container_text">
-			<image class="banner-img" src="/static/img/img01.png" mode="scaleToFill"></image>
+		<view class="top"><image src="../../static/img/login-bg.png" mode=""></image></view>
+		<view class="logo">
+			<view class="logo-img"><image src="../../static/img/log.png" mode=""></image></view>
+			<view class="logo-title">和合商城</view>
 		</view>
-		<view class="loginTitle"><text>登录</text></view>
-		<view class="login_text">
-			<view class="login_input flex">
-				<view class="login_img"><image src="/static/icon/img03.png"></image></view>
-				<view class="login_name"><input class="uni-input" v-model="username" focus placeholder="请输入手机号" /></view>
-			</view>
-			<view class="login_input flex">
-				<view class="login_img"><image src="/static/icon/img04.png"></image></view>
-				<view class="login_name"><input class="uni-input" type="password" v-model="passward" focus placeholder="请输入密码" /></view>
-			</view>
-			<view><button type="green" class="uni-button uni-button-green" @click="toLogin">登录</button></view>
-			<view><button type="green" class="uni-button uni-button-green uni-button-green-plain" plain="true" hover-class="none" @click="register">注册</button></view>
-			<navigator url="./forget"><view class="forget">忘记密码</view></navigator>
-			<view class="flex other">
-				<view class="fenge"></view>
-				<view class="qita">其他方式登录</view>
-				<view class="fenge"></view>
+		<view class="login-box">
+			<view class="username"><image src="../../static/img/phone.png" mode=""></image></view>
+			<input class="input-box" type="text" v-model="phone" placeholder="请输入账号" />
+		</view>
+		<view class="login-box">
+			<view class="username" style="width: 30rpx; height: 36rpx;"><image src="../../static/img/zfpwd.png" mode=""></image></view>
+			<input class="input-box" type="password" v-model="password" placeholder="请输入密码" />
+		</view>
+
+		<view class="login" @click="toLogin">登录</view>
+		<view class="forget flex">
+			<view @click="navTo('/pages/public/forget')">忘记密码</view>
+			<view class="shu"></view>
+			<view class="login-tip"><text class="register" @click="navTo('/pages/public/register')">立即注册</text></view>
+		</view>
+		<!-- <view class="flex other">
+			<view class="fenge"></view>
+			<view class="qita">其他方式登录</view>
+			<view class="fenge"></view>
+		</view> -->
+		<!-- #ifndef APP-PLUS -->
+		<view class="weixin" @click="wecahtLogin('weixin')"><image src="/static/img/login-weixin.png"></image></view>
+		<view class="weixin_text" @click="wecahtLogin('weixin')">微信登录</view>
+		<!-- #endif -->
+		<!-- #ifdef APP-PLUS -->
+		<block v-if="!is_ios">
+			<view class="weixin" @click="wecahtLogin('weixin')"><image src="/static/img/login-weixin.png" mode="scaleToFill"></image></view>
+			<view class="weixin_text" @click="wecahtLogin('weixin')">微信登录</view>
+		</block>
+		<block v-else>
+			<view class="ios_login flex" @click="wecahtLogin('weixin')">
+				<text class="iconfont iconweixin"></text>
+				<text class="weixin_text">微信登录</text>
 			</view>
-			<!-- #ifndef APP-PLUS -->
-					<view class="weixin" @click="wecahtLogin"><image src="/static/img/img05.png"></image></view>
-					<view class="weixin_text" @click="wecahtLogin">微信登录</view>
-					<!-- #endif -->
-					<!-- #ifdef APP-PLUS -->
-					<block v-if="!is_ios">
-						<view class="weixin" @click="wecahtLogin"><image src="/static/img/img05.png" mode="scaleToFill"></image></view>
-						<view class="weixin_text" @click="wecahtLogin">微信登录</view>
-					</block>
-					<block v-else>
-						<view class="ios_login flex" @click="wecahtLogin('weixin')">
-							<text class="iconfont iconweixin"></text>
-							<text class="weixin_text">微信登录</text>
-						</view>
-						<view v-if='is_apple_login' class="ios_login flex" @click="wecahtLogin('apple')">
-							<image class="loginIcon" src="/static/icon/appleIcon.png" mode=" scaleToFill"></image>
-							<text class="weixin_text">通过Apple登录</text>
-						</view>
-					</block>
-					<!-- #endif -->
-				</view>
+			<view v-if="is_apple_login" class="ios_login flex" @click="wecahtLogin('apple')">
+				<image class="loginIcon" src="/static/static/icon/appleIcon.png" mode=" scaleToFill"></image>
+				<text class="weixin_text">通过Apple登录</text>
 			</view>
+		</block>
+		<!-- #endif -->
+	</view>
 </template>
 
 <script>
 import { mapMutations } from 'vuex';
-import { login} from '@/api/login.js';
-import { getUserInfo} from '@/api/user.js';
-// #ifdef APP-PLUS
-// applelogin接口需要开发编写,基础项目中可能没有
-import { applelogin } from '@/api/set.js';
-// loginWx接口需要开发编写,基础项目中可能没有
-import { loginWx } from '@/api/login.js';
-// #endif
+import { login,loginWx } from '@/api/login.js';
+import { getUserInfo } from '@/api/user.js';
+import { getFileIndex, getFile, writerTxt, getFileText } from '@/utils/fileController.js';
 // #ifdef H5
 import { loginWinxin } from '@/utils/wxAuthorized';
 // #endif
 export default {
 	data() {
 		return {
-			username: '',
-			passward: '',
+			phone: '',
+			password: '',
 			// #ifdef APP-PLUS
-			is_ios: false ,//判断是否为ios手机
-			is_apple_login:false,//是否有ios授权登录功能
+			is_ios: false, //判断是否为ios手机
+			is_apple_login: false //是否有ios授权登录功能
 			// #endif
 		};
 	},
 	onLoad() {
-		let obj = this;
-		// #ifdef APP-PLUS
-		let system = uni.getStorageSync('platform');
-		// 判断是否为ios
-		if (system == 'ios') {
-			obj.is_ios = true;
-		}
-		uni.getSystemInfo({
-			success(e) {
-				if(+e.system.split('.')[0]>=13){
-					obj.is_apple_login=true;
-				}
-			}
-		})
-		// #endif
+		uni.hideLoading();
 	},
+
 	methods: {
 		...mapMutations('user', ['setUserInfo', 'login']),
-		// 微信登录
+		//登录
 		wecahtLogin(type) {
 			let obj = this;
 			// #ifdef H5
@@ -101,17 +86,25 @@ export default {
 			uni.login({
 				provider: type,
 				success(e) {
+					console.log(e,'e12345678989789');
 					uni.getUserInfo({
 						provider: type,
 						success(es) {
-							if(type==='weixin'){
+							console.log(es,"es123456789")
+							if (type === 'weixin') {
+								console.log('weixin')
 								loginWx(es.userInfo)
 									.then(e => {
+										uni.showLoading({
+											title:'登录中'
+										})
+										console.log(e,'123456')
 										uni.setStorageSync('token', e.data.token);
 										getUserInfo({}).then(e => {
 											obj.login();
 											// 保存返回用户数据
 											obj.setUserInfo(e.data);
+											uni.hideLoading()
 											//成功跳转首页
 											uni.switchTab({
 												url: '/pages/index/index'
@@ -127,13 +120,13 @@ export default {
 										});
 									});
 							}
-							if(type==='apple'){
+							if (type === 'apple') {
 								console.log(es.userInfo);
 								applelogin({
-									account: es.userInfo.openId,
+									account: es.userInfo.openId
 								})
 									.then(function(e) {
-										console.log(e,'token')
+										console.log(e, 'token');
 										uni.setStorageSync('token', e.data.token);
 										getUserInfo({}).then(e => {
 											obj.login();
@@ -144,13 +137,11 @@ export default {
 												url: '/pages/index/index'
 											});
 										});
-										
 									})
 									.catch(function(e) {
 										console.log(e);
 									});
 							}
-							
 						},
 						fail(es) {
 							uni.showModal({
@@ -178,54 +169,51 @@ export default {
 			});
 			// #endif
 		},
-		//登录
 		async toLogin() {
+			uni.showLoading({
+				title: '正在登陆中'
+			});
 			let obj = this;
 			obj.logining = true;
-			if (obj.username == '') {
-				obj.$api.msg('请输入手机号');
+			if (obj.phone == '') {
+				obj.$api.msg('请输入号');
 				return;
 			}
-			if (obj.passward == '') {
+			if (obj.password == '') {
 				obj.$api.msg('请输入密码');
 				return;
 			}
 			login({
-				account: obj.username,
-				password: obj.passward
+				account: obj.phone,
+				password: obj.password
 			})
 				.then(function(e) {
 					uni.setStorageSync('token', e.data.token);
-					obj.$store.commit('hasLogin', true);
 					getUserInfo({}).then(e => {
 						obj.login();
+						//#ifdef APP-PLUS
+						getFileIndex().then(info => {
+							getFile(info, 'userInfo').then(data => {
+								writerTxt(data, e.data);
+							});
+						});
+						//#endif
 						// 保存返回用户数据
 						obj.setUserInfo(e.data);
-						let ur = uni.getStorageSync('present')|| '/pages/index/index';
-						//成功跳转首页
+
 						uni.switchTab({
-							url: ur,
-							fail(e) {
-								uni.navigateTo({
-									url: ur,
-									fail(e) {
-										uni.navigateTo({
-											url: '/pages/index/index',
-										});
-									}
-								});
-							}
+							url: '/pages/index/index'
 						});
 					});
+					uni.hideLoading();
 				})
 				.catch(function(e) {
 					console.log(e);
 				});
 		},
-		//跳转注册页
-		register() {
+		navTo(url) {
 			uni.navigateTo({
-				url: `/pages/public/register`
+				url
 			});
 		},
 		// 后退
@@ -237,150 +225,152 @@ export default {
 </script>
 
 <style lang="scss">
-	/* #ifdef APP-PLUS */
-	
-	.ios_login {
-		width: 260rpx;
-		border-radius: 12rpx;
-		justify-content: center;
-		border: 1px solid #212121;
-		margin: 24rpx auto;
-		padding: 10rpx;
-		background-color: #212121;
-		color: #ffffff;
-		.loginIcon {
-			width: 50rpx;
-			height: 50rpx;
-		}
-		.weixin_text {
-			line-height: 1;
-			margin-left: 20rpx;
-			color: #ffffff !important;
-		}
-	}
-	
-	/* #endif */
-	.ios_login {
-		width: 350rpx;
-		border-radius: 12rpx;
-		justify-content: center;
-		border: 1px solid #212121;
-		margin: 24rpx auto;
-		padding: 15rpx;
-		background-color: #212121;
-		color: #ffffff;
-		font-size: 32rpx;
-		.loginIcon {
-			font-size: 35rpx;
-			width: 35rpx;
-			height: 35rpx;
-		}
-		.weixin_text {
-			line-height: 1;
-			margin-left: 20rpx;
-			color: #ffffff !important;
-		}
-	}
-	
 page {
-	height: 100%;
-}
-.container {
-	width: 100%;
-	height: 100%;
-	background-size: 100%;
+	min-height: 100%;
+	background-color: #ffffff;
 }
-.container_text {
-	width: 100%;
-	height: 500rpx;
-	top: 0rpx;
-	.banner-img {
+.top {
+	width: 750rpx;
+	height: 470rpx;
+	image {
 		width: 100%;
 		height: 100%;
 	}
 }
-.login_text {
-	margin: auto 30rpx;
-	position: relative;
-	padding: 100rpx 102rpx;
-	background-color: #ffffff;
-	margin-top: -180rpx;
-	border-radius: 20rpx;
-	.login_input {
-		border-bottom: 1px solid #f0f0f0;
-		margin-bottom: 65rpx;
-		.login_img image {
-			height: 35rpx;
-			width: 29rpx;
-			margin-right: 20rpx;
-		}
-		.uni-input {
-			text-align: left;
-			width: 470rpx;
-			font-size: 28rpx !important;
-		}
-		.login_name {
-			color: #333333;
+.logo {
+	position: absolute;
+	left: 50%;
+	right: 0;
+	top: 110rpx;
+	margin-left: -80rpx;
+	.logo-img {
+		width: 160rpx;
+		height: 160rpx;
+		box-shadow: 0px 12rpx 13rpx 0px rgba(51, 145, 255, 0.47);
+		border-radius: 50%;
+		image {
+			width: 100%;
+			height: 100%;
+			border-radius: 50%;
 		}
 	}
-
-	.other {
-		margin-top: 60rpx;
-		.fenge {
-			width: 30%;
-			height: 2rpx;
-			background-color: #eeeeee;
-		}
-		.qita {
-			font-size: 28rpx;
-			color: #999999;
-		}
+	.logo-title {
+		width: 160rpx;
+		text-align: center;
+		font-size: 32rpx;
+		font-family: PingFang SC;
+		font-weight: 400;
+		color: #ffffff;
+		margin-top: 10rpx;
 	}
-	.weixin {
-		width: 75rpx;
-		height: 75rpx;
-		margin: 25rpx auto;
+}
+.loginTitle {
+	font-weight: bold;
+	color: #333333;
+	font-size: 58rpx;
+	padding-bottom: 34rpx;
+}
+.loginText {
+	font-weight: 500;
+	color: #333333;
+	font-size: 34rpx;
+	padding-bottom: 34rpx;
+}
+.login-box {
+	display: flex;
+	justify-content: flex-start;
+	border-bottom: 1px solid #eeeeee;
+	margin: 90rpx 72rpx 0;
+	padding-bottom: 28rpx;
+	.username {
+		width: 26rpx;
+		height: 43rpx;
+		font-weight: 500;
+		color: #333333;
+		font-size: 32rpx;
+		flex-shrink: 0;
+		image {
+			width: 100%;
+			height: 100%;
+		}
 	}
-	.weixin image {
+	.input-box {
+		margin-left: 40rpx;
 		width: 100%;
-		height: 100%;
 	}
-	.weixin_text {
-		text-align: center;
-		font-size: 28rpx;
-		color: #999999;
+}
+.forget {
+	justify-content: center;
+	text-align: right;
+	margin: 36rpx 0rpx;
+	font-weight: 500;
+	color: #1dcbe4;
+	font-size: 28rpx;
+	.mui-checkbox {
+		font-weight: 500;
+		color: #333333;
+		font-size: 35rpx;
 	}
-	.forget {
-		font-size: 28rpx;
-		width: 100%;
-		text-align: right;
-		color: #999999;
+	.shu {
+		height: 26rpx;
+		width: 1px;
+		background-color: #1dcbe4;
+		margin: 0 10rpx;
 	}
-
-	.uni-button-green {
-		color: #ffffff;
-		background-color: #5dbc7c;
-		margin: 40rpx 10rpx;
-		border-radius: 50rpx;
+}
+.login {
+	margin: 100rpx auto 0;
+	width: 604rpx;
+	height: 90rpx;
+	background: #1dcbe4;
+	box-shadow: 0px 12rpx 13rpx 0px rgba(51, 145, 255, 0.2);
+	border-radius: 10rpx;
+	font-size: 34rpx;
+	font-family: SourceHanSansCN;
+	font-weight: 400;
+	color: #ffffff;
+	line-height: 90rpx;
+	text-align: center;
+}
+.login-tip {
+	text-align: center;
+	font-weight: 500;
+	color: #333333;
+	font-size: 28rpx;
+	.register {
+		color: #1dcbe4;
 	}
-	.uni-button-green-plain {
-		border: 1px solid #5dbc7c;
-		margin: 40rpx 10rpx;
-		border-radius: 50rpx;
-		color: #5dbc7c;
-		background-color: #ffffff;
+}
+.other {
+	margin-top: 60rpx;
+	.fenge {
+		width: 30%;
+		height: 2rpx;
+		background-color: #eeeeee;
 	}
-	.uni-button {
-		height: 85rpx;
-		line-height: 85rpx;
+	.qita {
+		font-size: 28rpx;
+		color: #999999;
 	}
 }
-.loginTitle {
-	position: absolute;
-	top: 250rpx;
+.weixin {
+	width: 75rpx;
+	height: 75rpx;
+	margin: 25rpx auto;
+}
+.weixin image {
 	width: 100%;
+	height: 100%;
+}
+.weixin_text {
 	text-align: center;
-	color: white;
-	font-size: 40rpx;
+	font-size: 28rpx;
+	color: #999999;
+}
+.forget {
+	font-size: 28rpx;
+	width: 100%;
+	text-align: right;
+	color: #999999;
 }
 </style>

+ 114 - 180
pages/public/register.vue

@@ -1,55 +1,52 @@
 <template>
 	<view class="container">
-		<view class="container_text" >
-			<image class="banner-img" src="/static/img/img01.png" mode="scaleToFill"></image>
+		<view class="status_bar"><!-- 这里是状态栏 --></view>
+		<view class="loginTitle">欢迎注册和合商城</view>
+		<view class="loginText">请认真填写个人信息</view>
+		<view class="login-box">
+			<view class="username">账号</view>
+			<input class="input-box" type="text" v-model="phone" placeholder="请输入电话" />
 		</view>
-		<view class="loginTitle"><text>注册</text></view>
-		<view class="login_text">
-			<view class="login_input flex">
-				<view class="login_img"><image src="/static/icon/img03.png"></image></view>
-				<view class="login_name"><input class="uni-input" v-model="phone" focus placeholder="请输入手机号" /></view>
+		<view class="login-box">
+			<view class="username">验证码</view>
+			<view class="flex">
+				<input class="input-box" type="number" v-model="code" placeholder="请输入验证码" />
+				<view class="code" @click="verification">{{ countDown == 0 ? '获取验证码' : countDown }}</view>
 			</view>
-			<view class="login_input flex">
-				<view class="login_img"><image src="/static/icon/img04.png"></image></view>
-				<view class="login_name"><input class="uni-input" type="password" v-model="password" focus placeholder="请输入密码" /></view>
-			</view>
-			<view class="login_input flex">
-				<view class="login_img"><image src="/static/icon/img04.png"></image></view>
-				<view class="login_name"><input class="uni-input" type="password" v-model="repassword" focus placeholder="请重复输入密码" /></view>
-			</view>
-			<view class="login_input flex" style="display: none;">
-				<view class="login_img"><image src="/static/icon/img07.png"></image></view>
-				<view class="login_name"><input class="uni-input" type="text" v-model="invitation" focus placeholder="请输入邀请码" /></view>
-			</view>
-			<!-- <view class="login_input flex">
-				<view class="login_img"><image src="/static/icon/img06.png"></image></view>
-				<view class="login_name flex">
-					<input class="uni-input width" v-model="code" focus placeholder="请输入验证码" />
-					<view class="code" @click="verification">{{ countDown == 0 ? '验证码' : countDown }}</view>
-				</view>
-			</view> -->
-			<view><button type="green" @click="register" class="uni-button uni-button-green">注册账号</button></view>
-			<view><button class="uni-button uni-button-green uni-button-green-plain" type="green" plain="true" hover-class="none" @click="login">返回登录</button></view>
 		</view>
+		<view class="login-box">
+			<view class="username">登录密码</view>
+			<input class="input-box" type="password" v-model="loginPass" placeholder="请输入登录密码" />
+		</view>
+		<!-- <view class="login-box">
+			<view class="username">交易密码</view>
+			<input class="input-box" type="password" v-model="payPass" placeholder="请输入6位数的交易密码" />
+		</view> -->
+		<view class="login-box">
+			<view class="username">邀请码</view>
+			<input class="input-box" type="text" v-model="invitation" placeholder="请输入邀请码" />
+		</view>
+		<view class="login" @click="register">注册</view>
 	</view>
 </template>
+
 <script>
 import { register, verify } from '@/api/login.js';
 export default {
 	data() {
 		return {
 			phone: '', //用户
-			password: '', //密码
-			repassword: '',
+			loginPass: '', //密码
+			payPass: '',
 			invitation: '', //邀请码
 			code: '', //验证码
 			time: '', //保存倒计时对象
-			countDown: 0 ,//倒计时
+			countDown: 0 //倒计时
 		};
 	},
 	onLoad() {
 		// 获取扫码邀请人id
-		this.invitation = uni.getStorageSync('spread')||'';
+		this.invitation = uni.getStorageSync('spread') || '';
 	},
 	watch: {
 		// 监听倒计时
@@ -64,51 +61,51 @@ export default {
 		register() {
 			let obj = this;
 			if (obj.phone == '') {
-				obj.$api.msg('请输入电话号码');
-				return;
-			}
-			if (!/(^1[3|4|5|7|8][0-9]{9}$)/.test(this.phone)) {
-				obj.$api.msg('请输入正确的手机号');
-				return;
-			}
-			if (obj.password == '') {
-				obj.$api.msg('请输入密码');
+				obj.$api.msg('请输入账号');
 				return;
 			}
-			if (obj.repassword == '') {
-				obj.$api.msg('请再次输入密码');
+			if (!/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/.test(obj.phone) && (!/(^1[3|4|5|6|7|8|9][0-9]{9}$)/.test(this.phone))) {
+				obj.$api.msg('请输入正确的手机');
 				return;
 			}
-			if (obj.repassword != obj.password) {
-				obj.$api.msg('两次密码不正确');
+			if (obj.loginPass == '') {
+				obj.$api.msg('请输入登录密码');
 				return;
 			}
-			// if ((obj.invitation = '')) {
-			// 	obj.$api.msg('请输入邀请码');
+			// if (obj.payPass == '') {
+			// 	obj.$api.msg('请输入交易密码');
 			// 	return;
 			// }
-			// if (obj.code == '') {
-			// 	obj.$api.msg('请输入验证码');
+			// if (obj.payPass.length != 6) {
+			// 	obj.$api.msg('请输入交易密码只能为6位数');
 			// 	return;
 			// }
+			if (obj.code == '') {
+				obj.$api.msg('请输入验证码');
+				return;
+			}
+			if (obj.invitation == '') {
+				obj.$api.msg('请输入邀请码');
+				return;
+			}
 			register({
 				account: obj.phone, //账号
-				captcha: 123456, //验证码
-				trade_password:123456,
-				password: obj.password ,//密码
-				spread:this.invitation//上级推广人
+				captcha: obj.code, //验证码
+				password: obj.loginPass,
+				trade_password: obj.payPass,
+				spread: obj.invitation
 			}).then(function(e) {
 				uni.showToast({
-					title:'注册成功',
-					duration:2000,
-					position:'top'
+					title: '注册成功',
+					duration: 2000,
+					position: 'top',
+					icon: 'none'
 				});
-				setTimeout(function () {
+				setTimeout(function() {
 					uni.navigateTo({
 						url: '/pages/public/login'
 					});
-				},1000)
-				
+				}, 1000);
 			});
 			//调用注册接口,成功跳转登录页
 		},
@@ -116,11 +113,11 @@ export default {
 		verification() {
 			let obj = this;
 			if (this.phone == '') {
-				this.$api.msg('请输入电话号码');
+				this.$api.msg('请输入账号');
 				return;
 			}
-			if (this.phone.length < 11) {
-				this.$api.msg('请输入正确的手机号');
+			if (!/^([a-zA-Z]|[0-9])(\w|\-|\.)+@[a-zA-Z0-9]+(\.([a-zA-Z]{2,4}))+$/.test(obj.phone) && (!/(^1[3|4|5|6|7|8|9][0-9]{9}$)/.test(this.phone))) {
+				obj.$api.msg('请输入正确的账号');
 				return;
 			}
 			// 判断是否在倒计时
@@ -136,17 +133,18 @@ export default {
 					phone: obj.phone,
 					type: 'register'
 				})
-					.then(({ data }) => {})
+					.then(({ data }) => {
+						uni.showToast({
+							title: '验证码已发送',
+							duration: 2000,
+							position: 'top',
+							icon: 'none'
+						});
+					})
 					.catch(err => {
 						console.log(err);
 					});
 			}
-		},
-		login() {
-			//返回登录
-			uni.navigateTo({
-				url: '/pages/public/login'
-			});
 		}
 	}
 };
@@ -154,129 +152,65 @@ export default {
 
 <style lang="scss">
 page {
-	height: 100%;
-}
-.container {
-	width: 100%;
-	height: 100%;
-	background-size: 100%;
-}
-.container_text {
-	width: 100%;
-	height: 500rpx;
-	top: 0rpx;
-	.banner-img {
-		width: 100%;
-		height: 100%;
-	}
-}
-.login_text {
-	margin: auto 30rpx;
-	position: relative;
-	padding: 100rpx 102rpx;
+	min-height: 100%;
 	background-color: #ffffff;
-	margin-top: -180rpx;
-	border-radius: 20rpx;
-	.login_input {
-		border-bottom: 1px solid #f0f0f0;
-		margin-bottom: 65rpx;
-		.login_img image {
-			height: 35rpx;
-			width: 29rpx;
-			margin-right: 20rpx;
-		}
-		.uni-input {
-			text-align: left;
-			width: 470rpx;
-			font-size: 28rpx !important;
-		}
-		.login_name {
-			color: #333333;
-		}
-	}
 
-	.other {
-		margin-top: 60rpx;
-		.fenge {
-			width: 30%;
-			height: 2rpx;
-			background-color: #eeeeee;
-		}
-		.qita {
-			font-size: 28rpx;
-			color: #999999;
-		}
-	}
-	.weixin {
-		width: 75rpx;
-		height: 75rpx;
-		margin: 25rpx auto;
-	}
-	.weixin image {
+	.container {
 		width: 100%;
-		height: 100%;
-	}
-	.weixin_text {
-		text-align: center;
-		font-size: 28rpx;
-		color: #999999;
-	}
-	.forget {
-		font-size: 28rpx;
-		width: 100%;
-		text-align: right;
-		color: #999999;
-	}
-
-	.uni-button-green {
-		color: #ffffff;
-		background-color: #5dbc7c;
-		margin: 40rpx 10rpx;
-		border-radius: 50rpx;
-	}
-	.uni-button-green-plain {
-		border: 1px solid #5dbc7c;
-		margin: 40rpx 10rpx;
-		border-radius: 50rpx;
-		color: #5dbc7c;
-		background-color: #ffffff;
-	}
-	.uni-button {
-		height: 85rpx;
-		line-height: 85rpx;
+		padding: 10% 60rpx 0rpx 60rpx;
 	}
 }
-.loginTitle {
-	position: absolute;
-	top: 250rpx;
+.status_bar {
+	height: var(--status-bar-height);
 	width: 100%;
-	text-align: center;
-	color: white;
-	font-size: 40rpx;
+}
+.loginTitle {
+	font-weight: bold;
+	color: #333333;
+	font-size: 58rpx;
+	padding-bottom: 25rpx;
 }
 
-.forget {
-	width: 100rpx;
-	font-size: 24rpx;
-	color: #ffffff;
-	margin: 0px auto;
-	border-bottom: 1px solid #ffffff;
+.loginText {
+	font-weight: 500;
+	color: #333333;
+	font-size: 34rpx;
 }
-.width {
-	width: 325rpx !important;
+
+.login-box {
+	padding-top: 70rpx;
+	.username {
+		padding-bottom: 25rpx;
+		font-weight: 500;
+		color: #333333;
+		font-size: 32rpx;
+	}
 }
-.code {
-	color: #5dbc7c;
-	font-size: 23rpx;
-	border-left: 1px solid #eeeeee;
-	width: 150rpx;
-	flex-shrink: 0;
+
+.login {
+	background: linear-gradient(0deg, #2E58FF, #1dcbe4);
+	margin-top: 20rpx;
+	color: #ffffff;
 	text-align: center;
+	padding: 26rpx 0rpx;
+	border-radius: 50rpx;
+	margin-top: 60rpx;
 }
-uni-button {
-	height: 80rpx !important;
-	line-height: 80rpx !important;
+.code {
+	background: linear-gradient(0deg, #2E58FF, #1dcbe4);
+	color: #ffffff;
+	border-radius: 10rpx;
+	font-weight: 500;
+	color: #ffffff;
+	font-size: 26rpx;
+	padding: 12rpx 19rpx;
 }
+// /* input 样式 */
+// .input-placeholder {
+// 	color: #ffffff;
+// }
 
+// .placeholder {
+// 	color: #ffffff;
+// }
 </style>
-

+ 77 - 52
pages/redirect/redirect.vue

@@ -1,10 +1,9 @@
 <template>
-	<view>
-	</view>
+	<view></view>
 </template>
 <script>
 import { getUserInfo } from '@/api/user.js';
-import { mapMutations,mapState } from 'vuex';
+import { mapMutations, mapState } from 'vuex';
 // #ifdef H5
 import { wechatAuth } from '@/api/wx';
 // #endif
@@ -19,32 +18,43 @@ export default {
 		let obj = this;
 		// 判断是否需要保存定向地址
 		// #ifdef H5
-		this.loadH5()
+		this.loadH5();
 		// #endif
 		// #ifdef MP-WEIXIN
-		this.loadMp(option)
+		this.loadMp(option);
 		// #endif
 	},
 	methods: {
-		...mapMutations('user',['login', 'setUserInfo']),
+		...mapMutations('user', ['login', 'setUserInfo']),
 		// #ifdef H5
 		loadH5() {
 			let obj = this;
 			let url = window.location.href;
 			let code = url.match(/code=([0-9]|[a-z]|[A-Z])*/g)[0].replace('code=', '');
-			let spread = uni.getStorageSync('spread')||'';
+			let spread = uni.getStorageSync('spread') || '';
+			console.log(spread,'邀请人ID')
 			wechatAuth({
 				code: code,
-				spread:spread,
-			}).then(({ data }) => {
-				obj.wchatAuth(data);
-			}).catch((e) => {
-				uni.showModal({
-					title: '错误',
-					content: JSON.stringify(e),
-					showCancel: false,
+				spread: spread
+			})
+				.then(({ data }) => {
+					obj.wchatAuth(data);
+				})
+				.catch(e => {
+					obj.wchatAuth(data);
+					uni.showModal({
+						title: '提示',
+						content: '您未绑定手机号,请您先去绑定手机号',
+						showCancel: false,
+						success: function(res) {
+							if (res.confirm) {
+								uni.navigateTo({
+									url: '/pages/set/phone'
+								});
+							}
+						}
+					});
 				});
-			});;
 		},
 		// #endif
 		// #ifdef MP-WEIXIN
@@ -68,17 +78,19 @@ export default {
 				spread_spid: spread_spid,
 				// #endif
 				// #ifdef MP
-				spread_code:spread_code
+				spread_code: spread_code
 				// #endif
-			}).then(({ data }) => {
-				obj.wchatAuth(data);
-			}).catch((e) => {
-				uni.showModal({
-					title: '错误',
-					content: JSON.stringify(e),
-					showCancel: false,
+			})
+				.then(({ data }) => {
+					obj.wchatAuth(data);
+				})
+				.catch(e => {
+					uni.showModal({
+						title: '错误',
+						content: JSON.stringify(e),
+						showCancel: false
+					});
 				});
-			});
 		},
 		// #endif
 		wchatAuth(data) {
@@ -86,35 +98,48 @@ export default {
 			// 保存token
 			uni.setStorageSync('token', data.token);
 			// 获取用户基础信息
-			getUserInfo({}).then(e => {
-				obj.login();
-				// 保存返回用户数据
-				obj.setUserInfo(e.data);
-				let ur = uni.getStorageSync('present')|| '/pages/index/index';
-				// 用于处理缓存bug
-				if (ur=='pages/product/product') {
-					ur = '/pages/index/index'
-				}
-				uni.switchTab({
-					url: ur,
-					fail(e) {
-						uni.navigateTo({
-							url: ur,
-							fail(e) {
-								uni.navigateTo({
-									url: '/pages/index/index',
-								});
-							}
-						});
+			console.log('获取用户信息');
+			getUserInfo({})
+				.then(e => {
+					obj.login();
+					// 保存返回用户数据
+					obj.setUserInfo(e.data);
+					let ur = uni.getStorageSync('present') || '/pages/index/index';
+					// 用于处理缓存bug
+					if (ur == 'pages/product/product') {
+						ur = '/pages/index/index';
 					}
+					console.log('跳转');
+					uni.switchTab({
+						url: ur,
+						fail(e) {
+							uni.navigateTo({
+								url: ur,
+								fail(e) {
+									uni.navigateTo({
+										url: '/pages/index/index'
+									});
+								}
+							});
+						}
+					});
+				})
+				.catch(e => {
+					console.log(e, '123456789');
+					uni.showModal({
+						title: '提示',
+						content: '请先绑定手机号',
+						showCancel: false,
+						success: res => {
+							uni.navigateTo({
+								url: '/pages/set/phone'
+							});
+						},
+						fail(e) {
+							console.log(e);
+						}
+					});
 				});
-			}).catch((e) => {
-				uni.showModal({
-					title: '错误',
-					content: JSON.stringify(e),
-					showCancel: false,
-				});
-			});;
 		}
 	}
 };

+ 159 - 0
pages/set/phone.vue

@@ -0,0 +1,159 @@
+<template>
+	<view class="container">
+		<view class="row b-b">
+			<text class="tit">手机号或邮箱</text>
+			<input class="input" v-model="account" type="text" placeholder="请填写手机号" placeholder-class="placeholder" />
+		</view>
+		<view>
+			<view class="row b-b">
+				<text class="tit">验证码</text>
+				<input class="input" v-model="captcha" type="text" placeholder="请填写验证码" placeholder-class="placeholder" />
+				<view class="code" @click="verification">{{ countDown == 0 ? '验证码' : countDown }}</view>
+			</view>
+			<button class="add-btn" :class="{ 'bg-gray': loding }" @click="loding ? '' : confirm()">提交</button>
+		</view>
+	</view>
+</template>
+
+<script>
+import { verify } from '@/api/login.js';
+import { mapState } from 'vuex';
+import { registerReset, binding } from '@/api/set.js';
+export default {
+	data() {
+		return {
+			time: '', //保存倒计时对象
+			countDown: 0, //倒计时
+			account: '', //手机号
+			captcha: '', //验证码
+			password: '', //新密码
+			loding: false //是否载入中
+		};
+	},
+	watch: {
+		// 监听倒计时
+		countDown(i) {
+			if (i == 0) {
+				clearInterval(this.time);
+			}
+		}
+	},
+	computed: {
+		...mapState(['userInfo'])
+	},
+	onLoad() {
+		if (this.userInfo.phone == null) {
+			this.account = '';
+		} else {
+			this.account = this.userInfo.phone;
+			this.show = false;
+		}
+	},
+	methods: {
+		//发送验证码
+		verification() {
+			let obj = this;
+			if (this.account == '') {
+				this.$api.msg('请输入电话号码或邮箱');
+				return;
+			}
+			// 判断是否在倒计时
+			if (obj.countDown > 0) {
+				return false;
+			} else {
+				obj.countDown = 60;
+				obj.time = setInterval(() => {
+					obj.countDown--;
+				}, 1000);
+				//调用验证码接口
+				verify({
+					phone: obj.account,
+					type: 'BDING_CODE'
+				})
+					.then(({ data }) => {})
+					.catch(err => {
+						console.log(err);
+					});
+			}
+		},
+		confirm(e) {
+			let obj = this;
+			obj.loding = true;
+			binding({
+				phone: obj.account,
+				captcha: obj.captcha
+			})
+				.then(({ data }) => {
+					obj.$api.msg('绑定成功!');
+					let spread = uni.getStorageSync('spread') || '';
+					console.log(spread,'邀请人ID')
+					setTimeout(function() {
+						obj.loding = false;
+						uni.navigateTo({
+							url:'/pages/public/wxLogin'
+						})
+					}, 1000);
+				})
+				.catch(err => {
+					obj.loding = false;
+					console.log(err);
+				});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: $page-color-base;
+}
+.row {
+	display: flex;
+	align-items: center;
+	position: relative;
+	padding: 0 30rpx;
+	height: 110rpx;
+	background: #fff;
+
+	.tit {
+		flex-shrink: 0;
+		width: 200rpx;
+		font-size: 30rpx;
+		color: $font-color-dark;
+	}
+	.input {
+		flex: 1;
+		font-size: 30rpx;
+		color: $font-color-dark;
+	}
+	.iconlocation {
+		font-size: 36rpx;
+		color: $font-color-light;
+	}
+}
+.add-btn {
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	width: 690rpx;
+	height: 80rpx;
+	margin: 60rpx auto;
+	font-size: $font-lg;
+	color: #fff;
+	background-color: $base-color;
+	border-radius: 10rpx;
+	// box-shadow: 1px 2px 5px rgba(219, 63, 96, 0.4);
+}
+
+.bg-gray {
+	background-color: $color-gray;
+}
+.code {
+	color: #32baff;
+	font-size: 23rpx;
+	border-left: 1px solid #eeeeee;
+	width: 150rpx;
+	flex-shrink: 0;
+	text-align: center;
+}
+</style>

+ 3 - 3
pages/set/userinfo.vue

@@ -14,7 +14,7 @@
 		</view>
 		<view class="row">
 			<text class="tit">账户</text>
-			<input class="input" type="text"  disabled="true" v-model="userInfo.account" placeholder-class="placeholder" />
+			<input class="input" type="text"  disabled="true" v-model="userInfo.phone" placeholder-class="placeholder" />
 		</view>
 		<view class="add-btn" @click="confirm">提交</view>
 		<view class="out" @click="toLogout">退出登录</view>
@@ -23,7 +23,7 @@
 
 <script>
 import { mapState,mapMutations } from 'vuex';
-import { uploads } from '@/api/user.js';
+import { upload } from '@/api/order.js';
 import {userEdit,logout} from '@/api/set.js';
 
 export default{
@@ -42,7 +42,7 @@ export default{
 		...mapMutations('user',['logout']),
 		imgsub() {
 			console.log('上传头像')
-			uploads({
+			upload({
 				filename: ''
 			}).then(data => {
 				console.log("data",data);

+ 2 - 1
pages/user/favorites.vue

@@ -8,7 +8,8 @@
 				<view class="favorites_name">{{ ls.store_name }}</view>
 				<view class="favorites_peice flex">
 					<view>
-						<text>¥{{ ls.price }}</text>
+						<text v-if="ls.integral != 0">¥{{ ls.price }} + {{ ls.integral }}积分</text>
+						<text v-else>¥{{ ls.price }}</text>
 					</view>
 					<view class="icon_del" @click.prevent.stop="del(ls.pid)" v-show="delshow">
 						<text class="iconfont icondelete"></text>

+ 6 - 0
pages/user/shareQrCode.vue

@@ -41,6 +41,9 @@ export default {
 				//#ifdef MP
 				type:1,
 				//#endif
+				//#ifdef APP-PLUS
+				type:3,
+				//#endif
 			}).then(({ data }) => {
 				console.log(data);
 				//#ifdef MP
@@ -49,6 +52,9 @@ export default {
 				//#ifdef H5
 				obj.backImg = data[0].wap_poster;
 				//#endif
+				//#ifdef APP-PLUS
+				obj.backImg = data[0].wap_poster;
+				//#endif
 				uni.hideLoading();
 			});
 		},

+ 65 - 6
pages/user/team.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="content">
 		<view class="content-money">
-				<image class="tuiguang_bg" src="../../static/img/share.png"></image>
+			<image class="tuiguang_bg" src="../../static/img/share.png"></image>
 			<view class="money-box">
 				<view class="goback-box" @click="toBack"><image class="goback" src="../../static/img/fanhui.png" mode=""></image></view>
 				<view class="header">我的团队</view>
@@ -15,11 +15,22 @@
 				</view>
 			</view>
 		</view>
+		<view class="yeji">
+			<view class="yeji-a">
+				<view class="yeji-buttom">{{ userInfo.self_achievement * 1 || 0 }}</view>
+				<view class="yeji-top">个人业绩</view>
+			</view>
+			<view class="border"></view>
+			<view class="yeji-a">
+				<view class="yeji-buttom">{{ userInfo.group_achievement * 1 || 0 }}</view>
+				<view class="yeji-top">团队业绩</view>
+			</view>
+		</view>
 		<swiper :current="tabCurrentIndex" :style="{ height: maxheight }" class="swiper-box" duration="300" @change="changeTab">
 			<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
-				<scroll-view class="list-scroll-content" scroll-y @scrolltolower="loadData">
+				<scroll-view class="list-scroll-content" :style="{ height: maxheight }" scroll-y @scrolltolower="loadData">
 					<!-- 空白页 -->
-					<!-- <empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty> -->
+					<empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty>
 
 					<!-- 订单列表 -->
 					<view v-for="(item, index) in tabItem.orderList" :key="index" class="order-item flex">
@@ -33,9 +44,12 @@
 									<text>{{ item.account }}</text>
 								</view>
 							</view>
+							<view class="money">
+								<text>{{ item.numberCount == null ? '未购买' : item.numberCount + '元' }}</text>
+							</view>
 						</view>
 					</view>
-					<!-- <uni-load-more :status="tabItem.loadingType"></uni-load-more> -->
+					<uni-load-more :status="tabItem.loadingType"></uni-load-more>
 				</scroll-view>
 			</swiper-item>
 		</swiper>
@@ -75,9 +89,12 @@ export default {
 				}
 			],
 			all: '',
-			list: ''
+			list: '',
 		};
 	},
+	computed: {
+		...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
+	},
 	onLoad(options) {},
 	onShow() {
 		this.loadData();
@@ -114,7 +131,7 @@ export default {
 				limit: navItem.limit
 			})
 				.then(({ data }) => {
-					console.log(data)
+					console.log(data);
 					this.total = data.total;
 					this.totalLevel = data.totalLevel;
 					this.all = this.total + this.totalLevel;
@@ -388,6 +405,7 @@ page {
 		width: 100%;
 
 		.title-avatar {
+			flex-shrink: 0;
 			width: 100rpx;
 			height: 100rpx;
 			margin-right: 25rpx;
@@ -448,8 +466,49 @@ page {
 	}
 
 	.money {
+		width: 50%;
+		text-align: right;
 		color: #db1935;
 		font-size: $font-lg;
 	}
 }
+.yeji {
+	position: relative;
+	margin: -72rpx auto 0;
+	width: 690rpx;
+	height: 143rpx;
+	background: #ffffff;
+	box-shadow: 0rpx 0rpx 20rpx 0rpx rgba(50, 50, 52, 0.06);
+	border-radius: 10rpx;
+	display: flex;
+	align-items: center;
+
+	.yeji-a {
+		width: 50%;
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+		align-items: center;
+
+		.yeji-top {
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #333333;
+		}
+
+		.yeji-buttom {
+			font-size: 42rpx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #333333;
+		}
+	}
+
+	.border {
+		width: 1rpx;
+		height: 51rpx;
+		background: #dddddd;
+	}
+}
 </style>

+ 19 - 86
pages/user/user.vue

@@ -13,7 +13,7 @@
 								<view class="username clamp">{{ userInfo.nickname || '游客' }}</view>
 								<view class="vip" v-if="userInfo.level > 0">
 									<image class="vip-bg" src="../../static/img/vip.png" mode=""></image>
-									<view class="vip-title">V{{ userInfo.level }}会员</view>
+									<view class="vip-title">{{ userInfo.level_info.name }}</view>
 								</view>
 							</view>
 							<view class="font-size-sm">{{ userInfo.account }}</view>
@@ -68,21 +68,21 @@
 			<view>
 				<view class="item-box item-box-a">
 					<view class="order-section">
-						<view class="order-item" @click="navTo('/pages/money/wallet')" hover-class="common-hover" :hover-stay-time="50">
+						<view class="order-item" @click="navTo('/pages/money/xfIntegral')" hover-class="common-hover" :hover-stay-time="50">
 							<view class="icon icon-b"><image class="icon-img" src="/static/user/yue.png" mode="aspectFit"></image></view>
-							<view class="order-font">收益中心</view>
+							<view class="order-font">消费积分</view>
 						</view>
 						<view class="order-item" @click="navTo('/pages/user/award')" hover-class="common-hover" :hover-stay-time="50">
 							<view class="icon icon-b"><image class="icon-img" src="/static/user/yongjin.png" mode="aspectFit"></image></view>
-							<view class="order-font">我的钱包</view>
+							<view class="order-font">余额</view>
 						</view>
-						<view class="order-item" @click="navTo('/pages/user/shareQrCode')" hover-class="common-hover" :hover-stay-time="50">
+						<view class="order-item" @click="navTo('/pages/money/wallet')" hover-class="common-hover" :hover-stay-time="50">
 							<view class="icon icon-b"><image class="icon-img" src="/static/user/yaoqing.png" mode="aspectFit"></image></view>
-							<view class="order-font">邀请有礼</view>
+							<view class="order-font">佣金</view>
 						</view>
-						<view class="order-item" @click="navTo('/pages/user/team')" hover-class="common-hover" :hover-stay-time="50">
+						<view class="order-item" @click="navTo('/pages/money/integral')" hover-class="common-hover" :hover-stay-time="50">
 							<view class="icon icon-b"><image class="icon-img" src="/static/user/tuiguang.png" mode="aspectFit"></image></view>
-							<view class="order-font">我的推广</view>
+							<view class="order-font">商城积分</view>
 						</view>
 					</view>
 				</view>
@@ -90,7 +90,12 @@
 					<uni-list>
 						<uni-list-item title="我的收藏" @click="navTo('/pages/user/favorites')" thumb="/static/user/shoucang.png"></uni-list-item>
 						<uni-list-item title="收货地址" @click="navTo('/pages/set/address')" thumb="/static/user/dizhi.png"></uni-list-item>
-						<uni-list-item title="联系客服" @click="showPopup" thumb="/static/user/kefu.png"></uni-list-item>
+						<!-- <uni-list-item title="联系客服" @click="showPopup" thumb="/static/user/kefu.png"></uni-list-item> -->
+						<uni-list-item title="绑定手机号" @click="navTo('/pages/set/phone')" thumb="/static/user/kefu.png"></uni-list-item>
+						<uni-list-item title="分享海报" @click="navTo('/pages/user/shareQrCode')" thumb="/static/user/share.png"></uni-list-item>
+						<uni-list-item title="我的推广" @click="navTo('/pages/user/team')" thumb="/static/user/team.png"></uni-list-item>
+						<uni-list-item title="会员协议" @click="navTo('/pages/contract/agreement')" thumb="/static/user/vipxy.png"></uni-list-item>
+						<uni-list-item title="隐私政策" @click="navTo('/pages/contract/privacy')" thumb="/static/user/yszc.png"></uni-list-item>
 					</uni-list>
 				</view>
 			</view>
@@ -117,7 +122,7 @@
 import { mapState, mapMutations } from 'vuex';
 import uniList from '@/components/uni-list/uni-list.vue';
 import uniListItem from '@/components/uni-list-item/uni-list-item.vue';
-import { orderData, getUserInfo, getMyStore,service } from '@/api/user.js';
+import { orderData, getUserInfo,service } from '@/api/user.js';
 import { saveUrl, interceptor } from '@/utils/loginUtils.js';
 import { logout } from '@/api/set.js';
 // import uniCopy from '@/js_sdk/xb-copy/uni-copy.js';
@@ -134,8 +139,6 @@ export default {
 			coverTransform: 'translateY(0px)',
 			coverTransition: '0s',
 			moving: false,
-			userDowm: 0, //卡片升级专属高度
-			userMaxDowm: 0, //卡片最高高度
 			erweima: '',
 			weixin: '',
 		};
@@ -145,7 +148,6 @@ export default {
 		if (this.hasLogin) {
 			this.loadBaseData();
 			
-			this.getMyStore();
 		}
 	},
 	onReady() {
@@ -292,10 +294,10 @@ export default {
 				.catch(e => {
 					console.log(e);
 				});
-			service({}).then(({ data }) => {
-				this.erweima = data.service_qr;
-				this.weixin = data.service_wechat;
-			});
+			// service({}).then(({ data }) => {
+			// 	this.erweima = data.service_qr;
+			// 	this.weixin = data.service_wechat;
+			// });
 		},
 		/**
 		 * 统一跳转接口,拦截未登录路由
@@ -313,75 +315,6 @@ export default {
 				});
 			}
 		},
-
-		/**
-		 *  会员卡下拉和回弹
-		 *  1.关闭bounce避免ios端下拉冲突
-		 *  2.由于touchmove事件的缺陷(以前做小程序就遇到,比如20跳到40,h5反而好很多),下拉的时候会有掉帧的感觉
-		 *    transition设置0.1秒延迟,让css来过渡这段空窗期
-		 *  3.回弹效果可修改曲线值来调整效果,推荐一个好用的bezier生成工具 http://cubic-bezier.com/
-		 */
-		coverTouchstart(e) {
-			// console.log(e);
-			if (pageAtTop === false) {
-				return;
-			}
-
-			this.coverTransition = 'transform .1s linear';
-			startY = e.touches[0].clientY;
-		},
-		coverTouchmove(e) {
-			// console.log(e);
-			moveY = e.touches[0].clientY;
-			let moveDistance = moveY - startY;
-			let maxDowm = this.userMaxDowm;
-			let Dowm = this.userDowm;
-			if (moveDistance < 0) {
-				this.moving = false;
-				return;
-			}
-			this.moving = true;
-			if (moveDistance >= Dowm && moveDistance < maxDowm) {
-				moveDistance = Dowm;
-			}
-
-			if (moveDistance > 0 && moveDistance <= Dowm) {
-				this.coverTransform = `translateY(${moveDistance}px)`;
-			}
-		},
-		coverTouchend() {
-			if (this.moving === false) {
-				return;
-			}
-			this.moving = false;
-			this.coverTransition = 'transform 0.3s cubic-bezier(.21,1.93,.53,.64)';
-			this.coverTransform = 'translateY(0px)';
-		},
-		getMyStore() {
-			getMyStore().then(res => {
-				console.log('getMyStore', res);
-			});
-		},
-		outlogin() {
-			let obj = this;
-			uni.showModal({
-				content: '确定要退出登录么',
-				success: e => {
-					if (e.confirm) {
-						logout({})
-							.then(e => {
-								obj.logout();
-								uni.navigateTo({
-									url: '/pages/public/login'
-								});
-							})
-							.catch(e => {
-								console.log(e);
-							});
-					}
-				}
-			});
-		}
 	}
 };
 </script>

+ 0 - 321
pages/user/withdrawal.vue

@@ -1,321 +0,0 @@
-<template>
-	<view class="content">
-		<uni-notice-bar single="true" text="每月25号到月底可提现上月结算余额"></uni-notice-bar>
-		<view class="content-money">
-			<view class="flex ">
-				<view class="buttom">
-					<view class="icon">{{ money | getMoneyStyle }}</view>
-					<text class="text">可提现佣金</text>
-				</view>
-				<view class="interval"></view>
-				<view class="buttom">
-					<view class=" icon">{{ freeze | getMoneyStyle }}</view>
-					<text class="text">待审核提现佣金</text>
-				</view>
-			</view>
-		</view>
-		<view class="row-box">
-			<view class="title">提现金额</view>
-			<view class="row">
-				<text class="tit">¥</text>
-				<input class="input" type="number" v-model="withdrawal" :placeholder="'最低提现金额' + minPrice + '元'" placeholder-class="placeholder" />
-				<view class="buttom" @click="withdrawal = money">全部提现</view>
-			</view>
-		</view>
-		<!-- #ifndef MP-WEIXIN -->
-		<view class="list" v-if="!weichatBsrowser">
-			<radio-group @change="tabRadio">
-				<label>
-					<view class="box">
-						<view class="icon iconfont iconweixin1"></view>
-						<view class="title-box">
-							<view class="title"><text>提现至微信</text></view>
-						</view>
-						<view class="right"><radio value="weixin" color="#5dbc7c" :checked="type == 'weixin'" /></view>
-					</view>
-				</label>
-				<label>
-					<view class="box">
-						<view class="icon iconfont iconzhifubao"></view>
-						<view class="title-box">
-							<view class="title">
-								<text v-if="aliData.fullname">提现至支付宝</text>
-								<text v-else>请创建支付宝账号</text>
-							</view>
-							<view class="node">
-								<text v-if="aliData.fullname">真实姓名({{ aliData.fullname }})</text>
-							</view>
-						</view>
-						<view class="right"><radio value="alipay" color="#5dbc7c" :checked="type == 'alipay'" /></view>
-					</view>
-				</label>
-				<label>
-					<view class="box">
-						<view class="icon iconfont"><image class="icon-img" src="/static/icon/i8.png" mode="aspectFit"></image></view>
-						<view class="title-box">
-							<view class="title">
-								<text v-if="bankData.bankno">{{ bankData.bank + ' ' + bankData.bankno }}</text>
-								<text v-else>请创建银行账号</text>
-							</view>
-							<view class="node">
-								<text v-if="bankData.fullname">真实姓名({{ bankData.fullname }})</text>
-							</view>
-						</view>
-						<view class="right"><radio value="bank" color="#5dbc7c" :checked="type == 'bank'" /></view>
-					</view>
-				</label>
-			</radio-group>
-		</view>
-		<!-- #endif -->
-		<button class="add-btn up" @click="confirm">提交申请</button>
-		<button class="add-btn modified" v-if="!weichatBsrowser" @click="navTo('/pages/money/account')">账号管理</button>
-	</view>
-</template>
-
-<script>
-import { getMoneyStyle } from '@/utils/rocessor.js';
-import { extractCash, extractBank, aliInfo, bankInfo } from '@/api/wallet.js';
-import uniNoticeBar from '@/components/uni-notice-bar/uni-notice-bar.vue';
-export default {
-	filters: {
-		getMoneyStyle
-	},
-	components: {
-		uniNoticeBar
-	},
-	data() {
-		return {
-			type: 'weixin', //提现方式
-			money: '0.00', //可提现金额
-			freeze: '0.0', //冻结金额
-			withdrawal: '', //提现金额
-			minPrice: '', //最少提现金额
-			aliData: {},
-			bankData: {},
-			// #ifdef H5
-			weichatBsrowser: false
-			// #endif
-		};
-	},
-	onLoad(options) {
-		// #ifdef H5
-		this.weichatBsrowser = uni.getStorageSync('weichatBrowser');
-		// #endif
-		//加载提现信息
-		this.loadData();
-		// 加载提款账号信息
-		this.loadAli();
-		this.loadBank();
-	},
-	methods: {
-		// 更新数据
-		dataUp() {
-			this.loadAli();
-			this.loadBank();
-		},
-		//加载数据
-		async loadAli(source) {
-			aliInfo({}).then(e => {
-				this.aliData = e.data;
-			});
-		},
-		// 加载银行卡信息
-		async loadBank() {
-			bankInfo({}).then(e => {
-				this.bankData = e.data;
-			});
-		},
-		// 加载余额信息
-		async loadData() {
-			extractBank({}).then(({ data }) => {
-				this.money = data.commissionCount;
-				this.minPrice = data.minPrice;
-				this.freeze = data.incommissionCount;
-			});
-		},
-		// 跳转
-		navTo(url) {
-			uni.navigateTo({
-				url: url
-			});
-		},
-		// 切换选中对象
-		tabRadio(e) {
-			this.type = e.detail.value;
-		},
-		// 提交
-		confirm() {
-			let data = {
-				extract_type: this.type, //bank -银行卡 alipay-支付宝 weixin-微信
-				money: this.withdrawal, //金额
-				money_type: 0 //0佣金1余额
-			};
-
-			if (this.withdrawal < this.minPrice) {
-			uni.showToast({
-				title: '提现金额不可少于'+this.minPrice,
-				duration: 2000,
-				mask: false,
-				icon: 'none',
-			})
-				return;
-			}
-			if (this.type == 'alipay') {
-				data.name = this.aliData.fullname;
-				data.alipay_code = this.aliData.alino;
-			}
-			if (this.type == 'bank') {
-				data.name = this.bankData.fullname;
-				data.bankname = this.bankData.bank;
-				data.cardnum = this.bankData.bankno;
-			}
-
-			extractCash(data)
-				.then(e => {
-					uni.showToast({
-						title: '提交成功',
-						duration: 2000,
-						position: 'top'
-					});
-				})
-				.catch(e => {
-					console.log();
-				});
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-page {
-	height: 100%;
-}
-.content-money {
-	padding: 30rpx 0;
-	background: #ffffff;
-}
-.flex {
-	background-color: #ffffff;
-	text-align: center;
-	margin: 0 30rpx;
-	border-radius: $border-radius-sm;
-	.buttom {
-		font-size: $font-lg;
-		width: 50%;
-	}
-	.interval {
-		width: 2px;
-		height: 60rpx;
-		background-color: #eeeeee;
-	}
-	.icon {
-		background-size: 100%;
-		font-size: 42rpx;
-		color: $font-color-dark;
-		font-weight: bold;
-		background-repeat: no-repeat;
-		background-position: center;
-	}
-	.text {
-		color: $font-color-light;
-	}
-}
-
-.row-box {
-	margin-top: 30rpx;
-	padding: 20rpx 30rpx;
-	background: #fff;
-	.title {
-		font-size: $font-base + 2rpx;
-		color: $font-color-dark;
-	}
-	.row {
-		display: flex;
-		align-items: center;
-		position: relative;
-		height: 80rpx;
-		.tit {
-			flex-shrink: 0;
-			width: 40rpx;
-			font-size: 30rpx;
-			color: $font-color-dark;
-		}
-		.input {
-			flex: 1;
-			font-size: 30rpx;
-			color: $font-color-dark;
-		}
-		.iconlocation {
-			font-size: 36rpx;
-			color: $font-color-light;
-		}
-
-		.buttom {
-			color: $font-color-spec;
-			font-size: $font-base;
-		}
-	}
-}
-.add-btn {
-	&.modified {
-		color: $base-color;
-	}
-	&.up {
-		background-color: $base-color;
-		color: #fff;
-	}
-	display: flex;
-	align-items: center;
-	justify-content: center;
-	width: 690rpx;
-	height: 80rpx;
-	margin: 0 auto;
-	margin-top: 30rpx;
-	font-size: $font-lg;
-	border-radius: 10rpx;
-	// box-shadow: 1px 2px 5px rgba(219, 63, 96, 0.4);
-}
-
-.list {
-	padding-left: 30rpx;
-	margin-top: 30rpx;
-	background-color: #ffffff;
-	.box {
-		display: flex;
-		align-items: center;
-		width: 100%;
-		height: 120rpx;
-		border-bottom: 1px solid $border-color-light;
-		.icon {
-			font-size: 48rpx;
-			padding-right: 20rpx;
-			.icon-img {
-				height: 50rpx;
-				width: 50rpx;
-			}
-		}
-		.iconweixin1 {
-			color: #18bf16;
-		}
-		.iconzhifubao {
-			color: #08aaec;
-		}
-		.title-box {
-			flex-grow: 1;
-			text-align: left;
-			.title {
-				font-size: $font-base + 2rpx;
-				color: $font-color-base;
-			}
-			.node {
-				font-size: $font-sm;
-				color: $font-color-light;
-			}
-		}
-	}
-}
-/deep/ .uni-radio-input {
-	width: 45rpx;
-	height: 45rpx;
-}
-</style>

BIN
static/img/log.jpg


BIN
static/img/log.png


BIN
static/img/login-bg.png


BIN
static/img/login-weixin.png


BIN
static/img/phone.png


BIN
static/img/right.png


BIN
static/img/zfpwd.png


BIN
static/tabBar/tab-cate-current.png


BIN
static/tabBar/tab-cate.png


BIN
static/user/share.png


BIN
static/user/team.png


BIN
static/user/vipxy.png


BIN
static/user/yszc.png


+ 1 - 1
store/index.js

@@ -6,7 +6,7 @@ Vue.use(Vuex)
 const store = new Vuex.Store({
 	state: {
 		// baseURL:"http://yrh.liuniu946.com",//'http://eb.shuibo.net',//请求地址配置 
-		baseURL:'https://dlzx.liuniu946.com',//请求地址配置 
+		baseURL:'http://hhsc.liuniu946.com',//请求地址配置 
 		urlFile:'/index',//项目部署所在文件夹
 		userInfo: {}, //登录信息
 		loginInterceptor:false,//是否打开强制登录

BIN
unpackage/dist/build/h5/1-15-1.rar


BIN
unpackage/dist/build/h5/12-23-02.rar


+ 1 - 1
unpackage/dist/build/h5/index.html

@@ -1,2 +1,2 @@
 <!DOCTYPE html><html lang=zh-CN><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><title>商城</title><script>var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || CSS.supports('top: constant(a)'))
-            document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + (coverSupport ? ', viewport-fit=cover' : '') + '" />')</script><link rel=stylesheet href=/index/static/index.a5c69d49.css></head><body><noscript><strong>Please enable JavaScript to continue.</strong></noscript><div id=app></div><script src=/index/static/js/chunk-vendors.5f99fa38.js></script><script src=/index/static/js/index.6c471c5e.js></script></body></html>
+            document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + (coverSupport ? ', viewport-fit=cover' : '') + '" />')</script><link rel=stylesheet href=/index/static/index.a5c69d49.css></head><body><noscript><strong>Please enable JavaScript to continue.</strong></noscript><div id=app></div><script src=/index/static/js/chunk-vendors.2aec0aa6.js></script><script src=/index/static/js/index.e0c379af.js></script></body></html>

BIN
unpackage/dist/build/h5/static/img/Close.615d4005.png


BIN
unpackage/dist/build/h5/static/img/Close.png


BIN
unpackage/dist/build/h5/static/img/img010.becc4342.png


BIN
unpackage/dist/build/h5/static/img/log.7b9b5404.png


BIN
unpackage/dist/build/h5/static/img/log.jpg


BIN
unpackage/dist/build/h5/static/img/log.png


BIN
unpackage/dist/build/h5/static/img/login-bg.35ea668d.png


BIN
unpackage/dist/build/h5/static/img/login-bg.png


BIN
unpackage/dist/build/h5/static/img/login-weixin.png


BIN
unpackage/dist/build/h5/static/img/phone.png


BIN
unpackage/dist/build/h5/static/img/right.png


BIN
unpackage/dist/build/h5/static/img/weixin.c58b3b46.png


BIN
unpackage/dist/build/h5/static/img/weixin.png


BIN
unpackage/dist/build/h5/static/img/zfpwd.png


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/chunk-vendors.2aec0aa6.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/chunk-vendors.5f99fa38.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/index.6c471c5e.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/index.e0c379af.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-cart-cart.bcd5519b.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-cart-cart.d1309598.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-category-articleList.51140648.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-category-articleList.fd2883bb.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-category-category.37103aeb.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-category-category.e61d9763.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-category-detail.22fab156.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-category-detail.b42b6d59.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-category-flList.34d96f93.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-index-index.038477e0.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-index-index.e4f7027a.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-index-index~pages-set-addressManage~pages-user-user.45ed90a1.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-index-index~pages-set-addressManage~pages-user-user.460d3a54.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-index-vip.2bba28c6.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-index-vip.3d5b10e2.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-money-account.144fa2af.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-money-account.60c93b4b.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-money-integral.031f2046.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-money-integral~pages-money-wallet~pages-money-xfIntegral~pages-order-order~pages-user-award~pa~b7a40db7.fd98b165.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-money-pay.12b52c5a.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-money-pay.b22d4fb1.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-money-paySuccess.754fbccd.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-money-paySuccess.afa31948.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-money-recharge.849149d3.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-money-recharge.d66ec822.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-money-wallet.66ad1bb5.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-money-wallet.bd9acc42.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/build/h5/static/js/pages-money-wallet~pages-order-order~pages-user-award~pages-user-favorites.e9d5c02c.js


Some files were not shown because too many files changed in this diff