lhl 4 gadi atpakaļ
vecāks
revīzija
7c236abba5
100 mainītis faili ar 17484 papildinājumiem un 10431 dzēšanām
  1. 2 0
      .gitignore
  2. 5 7
      App.vue
  3. 0 28
      api/active.js
  4. 0 53
      api/apply.js
  5. 66 66
      api/functionalUnit.js
  6. 51 28
      api/index.js
  7. 4 10
      api/login.js
  8. 154 0
      api/order.js
  9. 186 0
      api/product.js
  10. 30 4
      api/set.js
  11. 183 27
      api/user.js
  12. 128 102
      api/wallet.js
  13. 1 0
      components/ss-calendar/ss-calendar.vue
  14. 0 19
      components/tabbar/tabbar.js
  15. 5 16
      components/uni-load-more/uni-load-more.vue
  16. 0 25
      components/wyb-drop-down/iconfont.css
  17. 0 421
      components/wyb-drop-down/wyb-drop-down.vue
  18. 0 134
      lang/en.js
  19. 0 24
      lang/es.js
  20. 0 21
      lang/i18n.js
  21. 0 2210
      lang/i18nJs.js
  22. 0 133
      lang/zh_cn.js
  23. 1 6
      main.js
  24. 45 17
      manifest.json
  25. 339 106
      pages.json
  26. 535 0
      pages/cart/cart.vue
  27. 216 0
      pages/category/category.vue
  28. 0 118
      pages/index/article.vue
  29. 99 0
      pages/index/fugou.vue
  30. 405 290
      pages/index/index.vue
  31. 0 317
      pages/index/info.vue
  32. 0 426
      pages/index/infoDetail.vue
  33. 0 101
      pages/index/list.vue
  34. 0 309
      pages/index/male.vue
  35. 0 34
      pages/index/video.vue
  36. 355 0
      pages/money/account.vue
  37. 466 0
      pages/money/pay.vue
  38. 376 0
      pages/money/pay1.vue
  39. 65 0
      pages/money/paySuccess.vue
  40. 447 0
      pages/money/recharge.vue
  41. 357 0
      pages/money/wallet.vue
  42. 312 0
      pages/money/withdrawal.vue
  43. 169 0
      pages/order/createOrder.vue
  44. 411 0
      pages/order/evaluate.vue
  45. 74 0
      pages/order/expressInfo.vue
  46. 675 0
      pages/order/order.vue
  47. 184 0
      pages/order/orderDetail.vue
  48. 246 0
      pages/order/orderRefund.vue
  49. 68 0
      pages/product/common/contentText.vue
  50. 139 0
      pages/product/common/discounts.vue
  51. 115 0
      pages/product/common/estimate.vue
  52. 85 0
      pages/product/common/freshDetail.vue
  53. 120 0
      pages/product/common/guessLike.vue
  54. 187 0
      pages/product/common/productBottom.vue
  55. 159 0
      pages/product/common/productContent.vue
  56. 98 0
      pages/product/common/topSwiper.vue
  57. 414 0
      pages/product/list.vue
  58. 1168 0
      pages/product/product.vue
  59. 278 0
      pages/product/reply.vue
  60. 452 0
      pages/product/search.vue
  61. 0 121
      pages/profit/fund.vue
  62. 0 466
      pages/profit/profit.vue
  63. 417 0
      pages/public/externalRegistered.vue
  64. 44 91
      pages/public/forget.vue
  65. 58 112
      pages/public/login.vue
  66. 0 227
      pages/public/nav.vue
  67. 197 111
      pages/public/register.vue
  68. 0 114
      pages/public/success.vue
  69. 291 312
      pages/public/wxLogin.vue
  70. 122 122
      pages/redirect/redirect.vue
  71. 208 0
      pages/set/address.vue
  72. 219 0
      pages/set/addressManage.vue
  73. 161 0
      pages/set/phone.vue
  74. 203 303
      pages/set/userinfo.vue
  75. 268 0
      pages/story/story.vue
  76. 132 0
      pages/story/storyDetail.vue
  77. 0 171
      pages/upload/upload.vue
  78. 277 0
      pages/user/accounts.vue
  79. 0 365
      pages/user/applyList.vue
  80. 360 304
      pages/user/award.vue
  81. 235 0
      pages/user/extend.vue
  82. 431 0
      pages/user/extension.vue
  83. 249 0
      pages/user/integral.vue
  84. 790 0
      pages/user/jiedian.vue
  85. 0 303
      pages/user/promotion.vue
  86. 72 0
      pages/user/refer.vue
  87. 652 0
      pages/user/registerList.vue
  88. 0 200
      pages/user/scoreAccumulate.vue
  89. 182 0
      pages/user/selectList.vue
  90. 106 289
      pages/user/shareQrCode.vue
  91. 162 0
      pages/user/shezhi.vue
  92. 63 0
      pages/user/submit.vue
  93. 0 386
      pages/user/team.vue
  94. 172 0
      pages/user/transfer.vue
  95. 0 140
      pages/user/upgrade.vue
  96. 463 370
      pages/user/user.vue
  97. 191 0
      pages/user/withdraw.vue
  98. 330 321
      pages/user/withdrawal.vue
  99. BIN
      plugin/.git.rar
  100. 554 551
      static/css/cmy.css

+ 2 - 0
.gitignore

@@ -0,0 +1,2 @@
+/unpackage/dist
+.hbuilderx

+ 5 - 7
App.vue

@@ -20,18 +20,17 @@ export default {
 		...mapMutations('user', ['setUserInfo', 'login', 'hasLogin'])
 	},
 	onLaunch: function(urlObj) {
-		let obj = this;
-		let systemInfo = uni.getSystemInfoSync();
-		let lang = systemInfo.language || 'zh-CN'
-		uni.setStorageSync('lang',lang)
+		let obj = this;
 		// 加载缓存中的用户信息
 		let userInfo = uni.getStorageSync('userInfo') || '';
 		// 判断是否拥有用户信息
-		if (userInfo.id) {
+		console.log(userInfo,'yonghu')
+		if (userInfo.uid) {
 			//更新登陆状态
 			uni.getStorage({
 				key: 'userInfo',
 				success: res => {
+					console.log(res)
 					obj.setUserInfo(res.data);
 					obj.login(res.data);
 				}
@@ -78,8 +77,7 @@ export default {
 
 <style lang="scss">
 /*全局公共样式和字体图标*/
-@import '/static/css/cmy.css';
-@import "uview-ui/index.scss";
+@import '/static/css/cmy.css';
 view,
 scroll-view,
 swiper,

+ 0 - 28
api/active.js

@@ -1,28 +0,0 @@
-import request from '@/utils/request'
-
-// 参与保单
-export function activity(data,id) {
-	return request({
-		url: '/api/activity/' + id,
-		method: 'post',
-		data
-	});
-}
-
-// 保单类型列表
-export function activityList(data,id) {
-	return request({
-		url: '/api/activity',
-		method: 'get',
-		data
-	});
-}
-
-// 保单
-export function activitys(data,id) {
-	return request({
-		url: '/api/activity/' + id,
-		method: 'git',
-		data
-	});
-}

+ 0 - 53
api/apply.js

@@ -1,53 +0,0 @@
-import {upFilse} from '@/utils/request'
-import request from '@/utils/request'
-export function upload(data){
-	return upFilse({
-		url:'/api/upload/image',
-		method:'post',
-		data
-	})
-}
-
-//我的审核列表
-export function getApplyList(data) {
-	return request({
-		url: '/api/activity/my',
-		method:'get',
-		data
-	})
-}
-
-//我的申请列表
-export function getMyList(data) {
-	return request({
-		url: '/api/activity/my_join',
-		method:'get',
-		data
-	})
-}
-
-//通过审核
-export function passApply(data,id) {
-	return request({
-		url: '/api/activity/pass/' + id,
-		method:'post',
-		data
-	})
-}
-
-//审核不通过
-export function cancelApply(data,id) {
-	return request({
-		url: '/api/activity/cancel/' + id,
-		method:'post',
-		data
-	})
-}
-//上传凭证uploadApply
-export function uploadApply(data,id) {
-	return request({
-		url: '/api/activity/upload/' + id,
-		method:'post',
-		data
-	})
-}

+ 66 - 66
api/functionalUnit.js

@@ -1,66 +1,66 @@
-import request from '@/utils/request'
-
-//获取优惠券列表
-export function getCouponsList(data,types) {
-	//优惠券状态 0全部 1未使用 2已使用
-	return request({
-		url: '/api/coupons/user/'+types,
-		method: 'get',
-		data
-	});
-}
-
-//领取优惠券
-export function setCoupons(data) {
-	return request({
-		url: '/api/coupon/receive',
-		method: 'post',
-		data
-	});
-}
-
-//获取可使用优惠券
-export function couponsOrder(data,price) {
-	return request({
-		url: '/api/coupons/order/'+price,
-		method: 'get',
-		data
-	});
-}
-
-
-//	积分列表
-export function integrallist(data) {
-	return request({
-		url: '/api/integral/list',
-		method: 'get',
-		data
-	});
-}
-
-
-// 获取签到列表
-export function signList(data) {
-	return request({
-		url: '/api/sign/list',
-		method: 'get',
-		data
-	});
-}
-// 点击签到
-export function integral(data) {
-	return request({
-		url: '/api/sign/integral',
-		method: 'post',
-		data
-	});
-}
-
-// 签到信息
-export function signUser(data) {
-	return request({
-		url: '/api/sign/user',
-		method: 'post',
-		data
-	});
-}
+import request from '@/utils/request'
+
+//获取优惠券列表
+export function getCouponsList(data,types) {
+	//优惠券状态 0全部 1未使用 2已使用
+	return request({
+		url: '/api/coupons/user/'+types,
+		method: 'get',
+		data
+	});
+}
+
+//领取优惠券
+export function setCoupons(data) {
+	return request({
+		url: '/api/coupon/receive',
+		method: 'post',
+		data
+	});
+}
+
+//获取可使用优惠券
+export function couponsOrder(data,price) {
+	return request({
+		url: '/api/coupons/order/'+price,
+		method: 'get',
+		data
+	});
+}
+
+
+//	积分列表
+export function integrallist(data) {
+	return request({
+		url: '/api/integral/list',
+		method: 'get',
+		data
+	});
+}
+
+
+// 获取签到列表
+export function signList(data) {
+	return request({
+		url: '/api/sign/list',
+		method: 'get',
+		data
+	});
+}
+// 点击签到
+export function integral(data) {
+	return request({
+		url: '/api/sign/integral',
+		method: 'post',
+		data
+	});
+}
+
+// 签到信息
+export function signUser(data) {
+	return request({
+		url: '/api/sign/user',
+		method: 'post',
+		data
+	});
+}

+ 51 - 28
api/index.js

@@ -1,28 +1,51 @@
-import request from '@/utils/request'
-
-// 获取首页信息
-export function loadIndexs(data) {
-	return request({
-		url: '/api/index',
-		method: 'get',
-		data
-	});
-}
-
-//获取文章列表
-export function article(data) {
-	return request({
-		url: '/api/article',
-		method: 'get',
-		data
-	});
-}
-
-//获取文章详情
-export function details(data,id) {
-	return request({
-		url: '/api/article/'+id,
-		method: 'get',
-		data
-	});
-}
+import request from '@/utils/request'
+
+// 促销商品
+export function groom4(data) {
+	return request({
+		url: '/api/groom/list/4',
+		method: 'get',
+		data
+	});
+}
+// 精品推荐
+export function groom1(data) {
+	return request({
+		url: '/api/groom/list/1',
+		method: 'get',
+		data
+	});
+}
+// 新品首发
+export function groom3(data) {
+	return request({
+		url: '/api/groom/list/3',
+		method: 'get',
+		data
+	});
+}
+
+// 获取首页信息
+export function loadIndexs(data) {
+	return request({
+		url: '/api/index',
+		method: 'get',
+		data
+	});
+}
+//获取文章列表
+export function article(data,id) {
+	return request({
+		url: '/api/article/list/' + id,
+		method: 'get',
+		data
+	});
+}
+//获取文章详情
+export function details(data,id) {
+        return request({
+                url: '/api/article/details/'+id,
+                method: 'GET',
+                data
+        });
+}

+ 4 - 10
api/login.js

@@ -18,9 +18,10 @@ export function register(data) {
 }
 // 验证码
 export function verify(data) {
-	//event : 注册 registe  修改密码 resetpwd   changemobile 修改手机号
+	// type=register为注册
+	// type=login为登录
 	return request({
-		url: '/api/captcha',
+		url: '/api/register/verify',
 		method: 'post',
 		data
 	});
@@ -53,11 +54,4 @@ export function loginWx(data) {
 	});
 }
 // #endif
-//绑定手机号
-export function bangding(data) {
-	return request({
-		url: '/api/binding',
-		method: 'POST',
-		data
-	});
-}
+

+ 154 - 0
api/order.js

@@ -0,0 +1,154 @@
+import request from '@/utils/request'
+import {upFilse} from '@/utils/request'
+// 订单确认
+export function confirm(data) {
+	return request({
+		url: '/api/order/confirm',
+		method: 'post',
+		data
+	});
+}
+//获取可使用优惠券
+export function couponsOrder(data,price) {
+	return request({
+		url: '/api/coupons/order/'+price,
+		method: 'get',
+		data
+	});
+}
+//获取优惠券列表
+export function getCouponsList(data,types) {
+	//优惠券状态 0全部 1未使用 2已使用
+	return request({
+		url: '/api/coupons/user/'+types,
+		method: 'get',
+		data
+	});
+}
+//提交评论
+export function order_comment(data) {
+	return request({
+		url: '/api/order/comment',
+		method: 'post',
+		data
+	});
+}
+//订单产品信息
+export function product(data) {
+	return request({
+		url: '/api/order/product',
+		method: 'post',
+		data
+	});
+}
+// 快递查询
+export function express_query(data) {
+	return request({
+		url: '/api/order/express_query',
+		method: 'get',
+		data
+	});
+}
+//上传图片
+export function upload(data) {
+	return upFilse({
+		url: '/api/upload/image',
+		method: 'post',
+		data
+	});
+}
+// 订单列表
+export function orderList(data) {
+	return request({
+		url: '/api/order/list',
+		method: 'get',
+		data
+	});
+}
+// 订单详细
+export function orderDetail(data,orderid) {
+	return request({
+		url: '/api/order/detail/'+orderid,
+		method: 'get',
+		data
+	});
+}
+
+// 取消订单
+export function orderCancel(data) {
+	return request({
+		url: '/api/order/cancel',
+		method: 'post',
+		data
+	});
+}
+
+// 删除订单
+export function orderDel(data) {
+	return request({
+		url: '/api/order/del',
+		method: 'get',
+		data
+	});
+}
+// 申请退款
+export function refund(data) {
+	return request({
+		url: '/api/order/refund/verify',
+		method: 'post',
+		data
+	});
+}
+// 退款理由列表
+export function refundReason(data) {
+	return request({
+		url: '/api/order/refund/reason',
+		method: 'get',
+		data
+	});
+}
+
+// 确认收货
+export function orderTake(data) {
+	return request({
+		url: '/api/order/take',
+		method: 'post',
+		data
+	});
+}
+
+// 订单支付
+export function orderPay(data) {
+	return request({
+		url: '/api/order/pay',
+		method: 'post',
+		data
+	});
+}
+
+// 创建订单
+export function createOrderkey(data,key) {
+	return request({
+		url: '/api/order/create/'+key,
+		method: 'post',
+		data
+	});
+}
+
+// 统计订单金额
+export function computedOrderkey(data) {
+	return request({
+		url: '/api/order/computed/'+data.orderkey,
+		method: 'post',
+		data
+	});
+}
+
+//复购
+export function fugou(data) {
+	return request({
+		url: '/api/rebuy',
+		method: 'post',
+		data
+	});
+}

+ 186 - 0
api/product.js

@@ -0,0 +1,186 @@
+import request from '@/utils/request'
+
+// 获取商品列表
+export function getProducts(data) {
+	// 	{
+	// 参数名称	是否必须	示例	备注
+	// sid			否			二级分类编号
+	// cid			否			一级分类编号(!)
+	// keyword		否			搜索
+	// priceOrder	否			价格排序
+	// salesOrder	否			销量排序
+	// news			否			是否新品
+	// page			否			分页参数起始值
+	// limit		否			分页数步长值
+	// }
+	return request({
+		url: '/api/products',
+		method: 'get',
+		data
+	});
+}
+// 获取商品详情
+export function goodsDetail(data, id) {
+	return request({
+		url: '/api/product/detail/' + id,
+		method: 'get',
+		data
+	});
+}
+
+// 砍价列表
+export function getBargainList(data) {
+	return request({
+		url: '/api/bargain/list',
+		method: 'get',
+		data
+	});
+}
+// 加入购物车
+export function cartAdd(data) {
+	return request({
+		url: '/api/cart/add',
+		method: 'post',
+		data
+	});
+}
+
+// 收藏商品
+export function collectAdd(data) {
+	return request({
+		url: '/api/collect/add',
+		method: 'post',
+		data
+	});
+}
+
+// 取消收藏商品
+export function collectDel(data) {
+	return request({
+		url: '/api/collect/del',
+		method: 'post',
+		data
+	});
+}
+
+// 获取搜搜关键字
+export function searchKeyword(data) {
+	return request({
+		url: '/api/search/keyword',
+		method: 'get',
+		data
+	});
+}
+
+// 获取热门分类信息
+export function groomList(data,type) {
+	// 获取产品类型 1 精品推荐 2 热门榜单 3首发新品 4促销单品
+	return request({
+		url: '/api/groom/list/'+type,
+		method: 'get',
+		data
+	});
+}
+
+
+// 获取秒杀商品详细
+export function seckillGoods(data,id) {
+	return request({
+		url: '/api/seckill/detail/'+id,
+		method: 'get',
+		data
+	});
+}
+
+// 获取拼团商品详细
+export function groupGoods(data,id) {
+	return request({
+		url: '/api/combination/detail/'+id,
+		method: 'get',
+		data
+	});
+}
+
+
+// 获取商品分类
+export function getCategoryList(data) {
+	return request({
+		url: '/api/category',
+		method: 'get',
+		data
+	});
+}
+
+
+// 获取拼团列表
+export function getCombinationList(data) {
+	return request({
+		url: '/api/combination/list',
+		method: 'get',
+		data
+	});
+}
+
+//取消拼团
+export function getCombinationLisRemove(data,id) {
+	return request({
+		url: '/api/combination/remove'+id,
+		method: 'get',
+		data
+	});
+}
+
+//拼团开团页面数据
+export function getCombinationLisPink(data,id) {
+	return request({
+		url: '/api/combination/pink/'+id,
+		method: 'get',
+		data
+	});
+}
+
+// 获取拼团海报
+export function getCombinationPoster(data) {
+	return request({
+		url: '/api/combination/poster',
+		method: 'post',
+		data
+	});
+}
+
+
+// 获取秒杀分类
+export function getSeckillClass(data) {
+	return request({
+		url: '/api/seckill/index',
+		method: 'get',
+		data
+	});
+}
+// 获取秒杀列表
+export function getSeckillList(data,id) {
+	return request({
+		url: '/api/seckill/list/'+id,
+		method: 'get',
+		data
+	});
+}
+
+
+// 产品评价数量和好评度
+export function reply_config(data,id) {
+	return request({
+		url: '/api/reply/config/'+id,
+		method: 'get',
+		data
+	});
+}
+// 获取产品评论
+export function reply_list(data,id) {
+	return request({
+		url: '/api/reply/list/'+id,
+		method: 'get',
+		data
+	});
+}
+

+ 30 - 4
api/set.js

@@ -3,7 +3,7 @@ import request from '@/utils/request'
 // 修改用户信息
 export function userEdit(data) {
 	return request({
-		url: '/api/user/profile',
+		url: '/api/user/edit',
 		method: 'post',
 		data
 	});
@@ -13,14 +13,14 @@ export function userEdit(data) {
 export function logout(data) {
 	return request({
 		url: '/api/logout',
-		method: 'post',
+		method: 'get',
 		data
 	});
 }
 //修改密码
 export function registerReset(data) {
 	return request({
-		url: '/api/reset',
+		url: '/api/register/reset',
 		method: 'post',
 		data
 	});
@@ -43,4 +43,30 @@ export function applelogin(data) {
 		data
 	});
 }
-// #endif
+// #endif
+
+
+//获取省市区
+export function getAddressArea(data) {
+	return request({
+		url: '/api/area',
+		method: 'get',
+		data
+	});
+}
+//获取村镇
+export function getAddressCity(data,id) {
+	return request({
+		url: '/api/village/'+id,
+		method: 'get',
+		data
+	});
+}
+export function getAddressDetail(data,id) {
+	return request({
+		url: '/api/address/detail/'+id,
+		method: 'get',
+		data
+	});
+}
+

+ 183 - 27
api/user.js

@@ -1,5 +1,16 @@
-import request from '@/utils/request'
-import { upFilse} from '@/utils/request';
+import request from '@/utils/request'
+import {
+	upFilse
+} from '@/utils/request';
+
+// 订单统计信息
+export function orderData(data) {
+	return request({
+		url: '/api/order/data',
+		method: 'get',
+		data
+	});
+}
 
 // 获取用户信息
 export function getUserInfo(data) {
@@ -18,39 +29,184 @@ export function spreadBanner(data) {
 		data
 	});
 }
-
-//上传图片
-export function uploads(data) {
-	return upFilse({
-		url:'/api/upload',
-		method:'post',
-		data
-	});
+
+// 获取地址列表
+export function getAddressList(data) {
+	return request({
+		url: '/api/address/list',
+		method: 'get',
+		data
+	});
+}
+// 修改地址
+export function addressEdit(data) {
+	return request({
+		url: '/api/address/edit',
+		method: 'post',
+		data
+	});
+}
+// 删除地址
+export function addressDel(data) {
+	return request({
+		url: '/api/address/del',
+		method: 'post',
+		data
+	});
+}
+// 设为默认地址
+export function setAddressDefault(data) {
+	return request({
+		url: '/api/address/default/set',
+		method: 'post',
+		data
+	});
+}
+// 购物车列表
+export function getCartList(data) {
+	return request({
+		url: '/api/cart/list',
+		method: 'get',
+		data
+	});
 }
 
-//查看公排下级
-export function children(data,id) {
-	return request({
-		url:'/api/user/children/' + id,
-		method:'get',
-		data
-	});
+// 修改购物车数量
+export function getCartNum(data) {
+	return request({
+		url: '/api/cart/num',
+		method: 'post',
+		data
+	});
+}
+//删除购物车
+export function cartDel(data) {
+	return request({
+		url: '/api/cart/del',
+		method: 'post',
+		data
+	});
+}
+//获取收藏夹列表
+export function getcollectList(data) {
+	return request({
+		url: '/api/collect/user',
+		method: 'get',
+		data
+	});
 }
+// 取消收藏
+export function delcollect(data) {
+	return request({
+		url: '/api/collect/del',
+		method: 'post',
+		data
+	});
+}
+
+//上传图片
+export function upload(data) {
+	return upFilse({
+		url: '/api/upload/image',
+		method: 'post',
+		data
+	})
+}
+
+//用户修改信息
+export function edit(data) {
+	return request({
+		url: '/api/user/edit',
+		method: 'post',
+		data
+	});
+}
+
+// 推广的人数
+export function getSpreadPeople(data) {
+	return request({
+		url: '/api/spread/people',
+		method: 'post',
+		data
+	})
+}
+
+//推广佣金/提现总和 
+//3=佣金,4=提现
+export function getSpreadCount(data, type) {
+	return request({
+		url: '/api/spread/count/' + type,
+		method: 'get',
+		data
+	})
+}
+
+//接点人信息
+export function getjiedian(data, uid) {
+	return request({
+		url: '/api/children/parent/' + uid,
+		method: 'get',
+		data
+	})
+}
+
+//推荐人列表
+// export function getReferralList(data,uid){
+// 	return request({
+// 		url:'api/children/spread/'+uid,
+// 		method:'get',
+// 		data
+// 	})
+// }
+
+//佣金转账
+export function trade(data) {
+	return request({
+		url: '/api/trade',
+		method: 'post',
+		data
+	})
+}
 
-//查看推荐下级
-export function spread_children(data,id) {
+//报单列表
+export function getRegisterList(data) {
+	return request({
+		url: '/api/register/list',
+		method: 'get',
+		data
+	})
+}
+
+//取消报单register/cancel/14
+export function cancelRegister(data,id) {
+	return request({
+		url: '/api/register/cancel/' + id,
+		method: 'post',
+		data
+	})
+}
+
+//支付报单register/pay/15
+export function payRegister(data,id) {
+	return request({
+		url: '/api/register/pay/' + id,
+		method: 'post',
+		data
+	})
+}
+//未设置接点的报单下级
+export function getChooseList(data){
 	return request({
-		url:'/api/user/spread_children/' + id,
+		url:'/api/spread/order_people',
 		method:'get',
 		data
-	});
+	})
 }
-
-//查看推荐下级总数
-export function num(data,id) {
+//添加下级接点
+export function addJiedian(data){
 	return request({
-		url:'/api/user/children/num',
-		method:'get',
+		url:'/api/parent/set',
+		method:'post',
 		data
-	});
+	})
 }

+ 128 - 102
api/wallet.js

@@ -1,102 +1,128 @@
-import request from '@/utils/request'
-
-// 获取用户消费记录
-export function spreadCommission(data,state) {
-	return request({
-		url: '/api/spread/commission/'+state,
-		method: 'get',
-		data
-	});
-}
-
-// 获取账户余额
-export function userBalance(data) {
-	return request({
-		url: '/api/user/balance',
-		method: 'get',
-		data
-	});
-}
-
-// 提现
-export function extractCash(data) {
-	return request({
-		url: '/api/extract/cash',
-		method: 'post',
-		data
-	});
-}
-
-// 提现信息
-export function extractBank(data) {
-	return request({
-		url: '/api/extract/bank',
-		method: 'get',
-		data
-	});
-}
-// #ifdef H5
-// 公众号充值
-export function rechargeWechat(data) {
-	return request({
-		url: '/api/recharge/wechat',
-		method: 'post',
-		data
-	});
-}
-// #endif
-// #ifdef MP
-// 小程序充值
-export function rechargeRoutine(data) {
-	return request({
-		url: '/api/recharge/routine',
-		method: 'post',
-		data
-	});
-}
-// #endif
-// 获取提现支付宝账号
-export function aliInfo(data) {
-	return request({
-		url: '/api/ali/info',
-		method: 'get',
-		data
-	});
-}
-//获取默认银行卡账号
-export function bankInfo(data) {
-	return request({
-		url: '/api/bank/info',
-		method: 'get',
-		data
-	});
-}
-// 保存提现支付宝账号
-export function setAliInfo(data) {
-	return request({
-		url: '/api/ali/edit',
-		method: 'post',
-		data
-	});
-}
-//保存默认银行卡账号
-export function setBankInfo(data) {
-	return request({
-		url: '/api/bank/edit',
-		method: 'post',
-		data
-	});
-}
-
-
-// 账户余额
-export function balance(data) {
-	return request({
-		url: '/api/user/balance',
-		method: 'get',
-		data
-	});
-}
-
-
-
+import request from '@/utils/request'
+
+// 获取用户消费记录
+export function spreadCommission(data,state) {
+	return request({
+		url: '/api/spread/commission/'+state,
+		method: 'get',
+		data
+	});
+}
+
+// 获取账户余额
+export function userBalance(data) {
+	return request({
+		url: '/api/user/balance',
+		method: 'get',
+		data
+	});
+}
+
+// 提现
+export function extractCash(data) {
+	return request({
+		url: '/api/extract/cash',
+		method: 'post',
+		data
+	});
+}
+
+// 提现信息
+export function extractBank(data) {
+	return request({
+		url: '/api/extract/bank',
+		method: 'get',
+		data
+	});
+}
+// #ifdef H5
+// 公众号充值
+export function rechargeWechat(data) {
+	return request({
+		url: '/api/recharge/wechat',
+		method: 'post',
+		data
+	});
+}
+// #endif
+// #ifdef MP
+// 小程序充值
+export function rechargeRoutine(data) {
+	return request({
+		url: '/api/recharge/routine',
+		method: 'post',
+		data
+	});
+}
+// #endif
+// #ifdef APP-PLUS
+// App微信充值
+export function rechargeApp(data) {
+	return request({
+		url: '/api/recharge/app',
+		method: 'post',
+		data
+	});
+}
+// App支付宝充值
+export function rechargeAli(data) {
+	return request({
+		url: '/api/recharge/ali',
+		method: 'post',
+		data
+	});
+}
+// #endif
+// 获取提现支付宝账号
+export function aliInfo(data) {
+	return request({
+		url: '/api/ali/info',
+		method: 'get',
+		data
+	});
+}
+//获取默认银行卡账号
+export function bankInfo(data) {
+	return request({
+		url: '/api/bank/info',
+		method: 'get',
+		data
+	});
+}
+// 保存提现支付宝账号
+export function setAliInfo(data) {
+	return request({
+		url: '/api/ali/edit',
+		method: 'post',
+		data
+	});
+}
+//保存默认银行卡账号
+export function setBankInfo(data) {
+	return request({
+		url: '/api/bank/edit',
+		method: 'post',
+		data
+	});
+}
+
+
+// 账户余额
+export function balance(data) {
+	return request({
+		url: '/api/user/balance',
+		method: 'get',
+		data
+	});
+}
+
+//积分明细
+export function integral(data) {
+	return request({
+		url: '/api/integral/list',
+		method: 'get',
+		data
+	});
+}
+
+

+ 1 - 0
components/ss-calendar/ss-calendar.vue

@@ -86,6 +86,7 @@ export default {
 		},
 		// 获取当前日期
 		getDate(current) {
+			console.log(current);
 			const date = current ? new Date(current) : new Date();
 			const year = date.getFullYear();
 			// 月份值默认从0开始

+ 0 - 19
components/tabbar/tabbar.js

@@ -1,19 +0,0 @@
-export const tabbar = [{
-		iconPath: '../../static/tabBar/home.png',
-		selectedIconPath: '../../static/tabBar/home-action.png',
-		text: '首页',
-		pagePath: '/pages/index/index'
-	},
-	{
-		iconPath: '../../static/tabBar/center.png',
-		selectedIconPath: '../../static/tabBar/center-action.png',
-		text: '审核',
-		pagePath: '/pages/user/applyList'
-	},
-	{
-		iconPath: '../../static/tabBar/user.png',
-		selectedIconPath: '../../static/tabBar/user-action.png',
-		text: '我的',
-		pagePath: '/pages/user/user'
-	}
-]

+ 5 - 16
components/uni-load-more/uni-load-more.vue

@@ -24,8 +24,7 @@
 	</view>
 </template>
 
-<script>
-	import { mapState, mapMutations } from 'vuex';
+<script>
 	export default {
 		name: "uni-load-more",
 		props: {
@@ -46,26 +45,16 @@
 				type: Object,
 				default () {
 					return {
-						contentdown: this.$t('hea.sljzgd'),
-						contentrefresh: this.$t('hea.loading'),
-						contentnomore: this.$t('hea.nomore')
+						contentdown: "上拉显示更多",
+						contentrefresh: "正在加载...",
+						contentnomore: "没有更多数据了"
 					};
 				}
 			}
 		},
 		data() {
 			return {}
-		},
-		computed: {
-			...mapState(['lang'])
-		},
-		watch: {
-			lang(val) {
-				this.$set(this.contentText,'contentdown',this.$t('hea.sljzgd'))
-				this.$set(this.contentText,'contentrefresh',this.$t('hea.loading'))
-				this.$set(this.contentText,'contentnomore',this.$t('hea.nomore'))
-			}
-		},
+		}
 	}
 </script>
 

+ 0 - 25
components/wyb-drop-down/iconfont.css

@@ -1,25 +0,0 @@
-@font-face {font-family: "iconfont";
-  src: url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAMoAAsAAAAABxwAAALZAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDHAqBYIFNATYCJAMQCwoABCAFhG0HPRs0BsgusG3YowCKZblG/A248I8FOyAe+Oye987uPHySFUCVQo0KTFJCRZnz739uc6TZ6xcSFkmmSfPs/p8faiVYyJAysa8jwJbrp83gaCY/j/s8l9O7q4ACmd/Ochtr0Z5+1AswDijQsQZt4QI6QW6pXcSBwSv/1nYCCqqqsdC7M5oKSRHpFxDmudwQkr2QKEbZvCA7MzUKh2Tkk93JOxzUvw//aBnyJDIpMnTQjLYt1H4v9UeQN/18GCcJYQJ3dgYpGiMSZs2mppCFiJ8qyI6iLfLyEn7P/b7mjxDH1smHZfQvjyCRErJIZWHQ2kun/J7jNIHfTzQJf4gVUvghxnw/0x4DfV5lXaBHlFVi7aO0/bxWdv6+cPdRmdlrbzn+qfO6PVN6994+P/v5PWXZ++LdvWUs9gsXP7QrtrfB91P9aflbn1u37JV5vmPHmbH/a+bW/pculdBKpMfTy/pJ27c1d3s3Ha40b4Xnb7c73PMn7hxVM+r+psb222nvS698xqM+qUXITmlvaakgkG5KhgsC6ePkJarZcby5/0ws1vn5QhH8iDY/1tYIZoAvBViBWAWwLpYq4ogxV3N5FYzKghIJClIX6MxR0m9XGMuAawnyyhwI5lRpkcqrTUZeY2QU0hpZed1QUCP9ZhdSyhKyEAugoe0OguIeIlHUK6SKe09G3q/IKOs/ZBUPKQoaEUotWUjdMDvda4XGBm2YcoTZFkWMuTZpUz1Gvg2MVVelBXNcrd0otGjafJjtYoSrK0Ys3fHKsg2DGSsKoa+zGwYBwaIVeWhtCrM2m0W1WbMZc3cqTKVQSOtlBRk2kA1McQRms5AIk8030qPvjyFuK2BYrTAW0nNoZc1tH7TQVHMA2dVHIMav3LLUDlexzAYDZlghIdDX8aKApghYNN/JgywbBbMOJBaqmnmNZkD1heeNIYZboCByVgxJSEMMGdlpW5fTVplG+0he5RqCAAAAAA==') format('woff2')
-}
-
-.iconfont {
-  font-family: "iconfont" !important;
-  margin-top: 5rpx;
-  font-style: normal;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-
-.icon-selected:before {
-  content: "\e613";
-}
-
-.icon-down:before {
-  font-weight: bold;
-  content: "\e67a";
-}
-
-.icon-down-fill:before {
-  content: "\e701";
-}
-

+ 0 - 421
components/wyb-drop-down/wyb-drop-down.vue

@@ -1,421 +0,0 @@
-<template>
-	<view 
-	 class="wyb-drop-down-box"
-	 :style="{
-		 '--duration': duration + 'ms',
-		 '--autoContentTop': autoContentTop}">
-		
-		<view class="wyb-drop-down-container" @tap.stop.prevent @touchmove.stop.prevent>
-			<view 
-			 class="wyb-drop-down-header"
-			 :style="{
-				 zIndex: zIndex,
-				 backgroundColor: bgColor.header}">
-				<view 
-				 class="wyb-drop-down-header-item"
-				 v-for="(item,index) in options"
-				 :key="item.header"
-				 @tap.stop="onHeaderTap(index)"
-				 :style="{fontSize: fontSize.header + 'rpx'}">
-					<text
-					 class="wyb-drop-down-header-item-label"
-					 :style="{
-						 fontWeight: headerActiveIndex === index && dropOver && activeWeight ? 'bold' : 'normal',
-						 color: headerActiveIndex === index && dropOver ? activeColor: defaultColor}">{{item.header}}</text>
-					<text
-					 v-if="dropIcon === 'fill'"
-					 class="iconfont icon-down-fill wyb-drop-down-header-item-icon"
-					 :class="[headerActiveIndex === index && dropOver ? 'wyb-drop-down-header-item-icon-active' : '']"
-					 :style="{
-						 fontSize: fontSize.header - 5 + 'rpx',
-						 color: headerActiveIndex === index && dropOver ? activeColor: defaultColor}" />
-					<text
-					 v-if="dropIcon==='line'"
-					 class="iconfont icon-down wyb-drop-down-header-item-icon"
-					 :class="[headerActiveIndex === index && dropOver ? 'wyb-drop-down-header-item-icon-active' : '']"
-					 :style="{
-						 fontSize: fontSize.header - 5 + 'rpx',
-						 transformOrigin: '50% 45%',
-						 color: headerActiveIndex === index && dropOver ? activeColor: defaultColor}" />
-					<view class="wyb-drop-down-vline" v-if="index !== options.length - 1" />
-				</view>
-			</view>
-			
-			<scroll-view 
-			 v-if="dropDown"
-			 class="wyb-drop-down-content" 
-			 :class="[dropOver ? 'wyb-drop-down-content-active' : '']"
-			 :scroll-y="scroll"
-			 :enable-flex="true"
-			 :scroll-anchoring="true"
-			 :style="{
-				 zIndex: zIndex - 1,
-				 fontSize: fontSize.content + 'rpx',
-				 backgroundColor: bgColor.content,
-				 borderBottomLeftRadius: radius + 'px',
-				 borderBottomRightRadius: radius + 'px',
-				 minHeight: minHeight + 'rpx',
-				 height: autoHeight ? 'auto' : minHeight + 'rpx',
-				 maxHeight: autoHeight && maxHeight ? maxHeight + 'rpx' : 'auto'}">
-				 <view class="wyb-drop-down-content-box" v-for="(item,index) in options" :key="contentBoxKey(index)">
-				 	<view v-if="item['custom'] && headerActiveIndex === index && dropDown" class="wyb-drop-down-content-slot">
-						<slot></slot>
-					</view>
-					<view
-					 v-if="!item['custom'] && headerActiveIndex === index && dropDown"
-					 class="wyb-drop-down-content-item"
-					 v-for="(content,zIndex) in item['contents']"
-					 :key="content"
-					 @tap.stop="onContentItemsTap(zIndex)">
-						<text
-						 class="wyb-drop-down-content-item-label"
-						 :style="{color: contentActiveIndexList[headerActiveIndex]['index'] === zIndex && dropOver ? activeColor: defaultColor}">
-							{{content}}
-						</text>
-						<text
-						 v-if="contentActiveIndexList[headerActiveIndex]['index'] === zIndex && dropOver"
-						 :style="{color: activeColor}"
-						 class="iconfont icon-selected wyb-drop-down-content-item-icon" />
-						<view class="wyb-drop-down-line" v-if="zIndex !== options[headerActiveIndex].contents.length - 1" />
-					</view>
-				 </view>
-			</scroll-view>
-		</view>
-		
-		<view
-		 v-if="dropDown"
-		 class="wyb-drop-down-mask"
-		 :class="[dropOver ? 'wyb-drop-down-mask-active' : '']"
-		 @tap.stop="close"
-		 @touchmove.stop.prevent
-		 :style="{
-			 zIndex: zIndex - 2,
-			 height: screenHeight + 'px',
-			 backgroundColor: 'rgba(0, 0, 0, ' + maskAlpha + ')'}" />
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				dropDown: false,
-				dropOver: false,
-				duration: 500,
-				contents: this.options[0].contents || [0],
-				headerActiveIndex: 0,
-				contentActiveIndexList: []
-			}
-		},
-		computed: {
-			autoContentTop() {
-				return `${44 + this.rpxToPx(100)}px`
-			},
-			screenHeight() {
-				return uni.getSystemInfoSync().screenHeight
-			},
-			screenWidth() {
-				return uni.getSystemInfoSync().screenWidth
-			},
-			contentBoxKey() {
-				return function(index) {
-					return `option${index}`
-				}
-			}
-		},
-		props: {
-			options: {
-				type: Array,
-				default() {
-					return [{
-						header: 'A',
-						contents: ['1', '2']
-					}]
-				}
-			},
-			defaultIndexList: {
-				type: Array,
-				default() {
-					return []
-				}
-			},
-			autoHeight: {
-				type: Boolean,
-				default: true
-			},
-			minHeight: {
-				type: [String, Number],
-				default: 10
-			},
-			maxHeight: {
-				type: [String, Number],
-				default: 600
-			},
-			scroll: {
-				type: Boolean,
-				default: true
-			},
-			radius: {
-				type: [String, Number],
-				default: '0'
-			},
-			activeColor: {
-				type: String,
-				default: '#e1c0a0'
-			},
-			activeWeight: {
-				type: Boolean,
-				default: true
-			},
-			defaultColor: {
-				type: String,
-				default: '#fff'
-			},
-			bgColor: {
-				type: Object,
-				default() {
-					return {
-						header: '#fff',
-						content: '#fff'
-					}
-				}
-			},
-			dropIcon: {
-				type: String,
-				default: 'fill'
-			},
-			fontSize: {
-				type: Object,
-				default() {
-					return {
-						header: 30,
-						content: 30
-					}
-				}
-			},
-			maskAlpha: {
-				type: [String, Number],
-				default: '0.5'
-			},
-			zIndex: {
-				type: Number,
-				default: 500
-			}
-		},
-		mounted() {
-			if (this.defaultIndexList.length === 0) {
-				this.options.forEach((item, index) => {
-					if (!item.custom) {
-						this.contentActiveIndexList.push({headerIndex: index, index: 0})
-					} else {
-						this.contentActiveIndexList.push({headerIndex: index, custom: true})
-					}
-				})
-			} else {
-				let i = 0
-				this.options.forEach((item, index) => {
-					if (!item.custom) {
-						this.contentActiveIndexList.push([...this.defaultIndexList][i])
-						i++
-					} else {
-						this.contentActiveIndexList.push({headerIndex: index, custom: true})
-					}
-				})
-			}
-		},
-		methods: {
-			onHeaderTap(index) {
-				let item = this.options[index]
-				if (Object.is(this.headerActiveIndex, index) && this.dropOver) {
-					this.close()
-				} else {
-					this.headerActiveIndex = index
-					if (item.custom) {
-						this.$emit('change', {
-							headerIndex: index,
-							header: this.options[index].header
-						})
-					}
-					this.dropDown = true
-					this.$nextTick(() => {
-						this.dropOver = true
-						this.$emit('show')
-					})
-				}
-			},
-			onContentItemsTap(index) {
-				this.contentActiveIndexList[this.headerActiveIndex]['index'] = index
-				this.$forceUpdate()
-				let event = {
-					headerIndex: this.headerActiveIndex,
-					header: this.options[this.headerActiveIndex]['header'],
-					contentIndex: index,
-					content: this.options[this.headerActiveIndex]['contents'][index],
-					contentActiveIndexList: this.contentActiveIndexList
-				}
-				this.$emit('select', event)
-			},
-			close() {
-				this.dropOver = false
-				setTimeout(() => {
-					this.dropDown = false
-					this.$emit('hide')
-				}, this.duration)
-			},
-			rpxToPx(rpx) {
-				return rpx / 750 * this.screenWidth
-			}
-		}
-	}
-</script>
-
-<style>
-	@import './iconfont.css';
-	.wyb-drop-down-mask {
-		position: fixed;
-		top: 44px;
-		/* #ifndef H5 */
-		top: 0;
-		/* #endif */
-		left: 0;
-		bottom: 0;
-		right: 0;
-		opacity: 0;
-		transition: opacity var(--duration);
-		z-index: 498;
-	}
-	
-	.wyb-drop-down-mask-active {
-		opacity: 1;
-		transition: opacity var(--duration);
-	}
-	
-	.wyb-drop-down-header {
-		position: fixed;
-		top: 44px;
-		/* #ifndef H5 */
-		top: 0;
-		/* #endif */
-		left: 0;
-		right: 0;
-		display: flex;
-		flex-direction: row;
-		background-color: #fff;
-		z-index: 500;
-	}
-	
-	.wyb-drop-down-header-item {
-		flex: 1;
-		height: 100rpx;
-		font-size: 30rpx;
-		border-bottom: 1px solid #eee;
-		display: flex;
-		flex-direction: row;
-		align-items: center;
-		justify-content: center;
-		position: relative;
-		background: #000 !important;
-	}
-	
-	.wyb-drop-down-header-item-label {
-		color: #fff !important;
-		display: flex;
-		flex-direction: row;
-		align-items: center;
-		justify-content: flex-end;
-	}
-	
-	.wyb-drop-down-header-item-icon {
-		color: #fff !important;
-		margin-left: 20rpx;
-		display: flex;
-		flex-direction: row;
-		align-items: center;
-		justify-content: flex-start;
-		transform-origin: 50% 40%;
-		transform: rotate(0);
-		transition: transform var(--duration);
-	}
-	
-	.wyb-drop-down-header-item-icon-active {
-		transform: rotate(180deg);
-		transition: transform var(--duration);
-	}
-	
-	.wyb-drop-down-content {
-		position: fixed;
-		top: var(--autoContentTop);
-		/* #ifndef H5 */
-		top: 100rpx;
-		/* #endif */
-		left: 0;
-		right: 0;
-		z-index: 499;
-		display: flex;
-		flex-direction: column;
-		align-items: flex-start;
-		background-color: #fff;
-		transform: translateY(-100%);
-		transition: transform var(--duration);
-	}
-	
-	.wyb-drop-down-content-active {
-		transform: translateY(0);
-		transition: transform var(--duration);
-	}
-	
-	.wyb-drop-down-content-item {
-		background: #000;
-		color: #fff;
-		width: 100%;
-		height: 100rpx;
-		font-size: 30rpx;
-		display: flex;
-		flex-direction: column;
-		position: relative;
-	}
-	
-	.wyb-drop-down-content-item-label {
-		width: 90%;
-		height: 100%;
-		display: flex;
-		flex-direction: row;
-		align-items: center;
-		justify-content: flex-start;
-		padding-left: 50rpx;
-	}
-	
-	.wyb-drop-down-content-item-icon {
-		position: absolute;
-		top: 50%;
-		right: 40rpx;
-		font-size: 40rpx;
-		transform: translateY(-50%);
-	}
-	
-	.wyb-drop-down-content-box {
-		padding-top: var(--status-bar-height);
-		width: 100%;
-		background-color: #000;
-	}
-	
-	.wyb-drop-down-content-slot {
-		width: 100%;
-		height: 100%;
-	}
-	
-	.wyb-drop-down-vline {
-		width: 1px;
-		height: 40rpx;
-		background-color: #eee;
-		position: absolute;
-		right: 0;
-	}
-
-	.wyb-drop-down-line {
-		width: 100%;
-		height: 1px;
-		background-color: #eee;
-		margin-left: 50rpx;
-	}
-</style>

+ 0 - 134
lang/en.js

@@ -1,134 +0,0 @@
-module.exports = {
-	hea: {
-		tj: 'Submit',
-		txms: 'Fill in description',
-		bcms: 'remarks',
-		scms: "Please provide relevant screenshots and descriptions for the superior's review (up to two)",
-		ptms: 'Please provide relevant screenshots and descriptions for platform review (at most two).',
-		zc: 'Register',
-		srsj: 'Please enter mobile phone number',
-		srxmm: 'Please enter a new password',
-		srmm: 'Please enter the password',
-		srxmmt: 'Please enter password again',
-		sryzm: 'Please enter the verification code',
-		yzm: 'Verification',
-		qrxg: 'Confirm modification',
-		tjcg: 'Submitted successfully',
-		backhome: 'Back home',
-		qdd: 'Please wait patiently for review',
-		loading: 'Loading',
-		nomore: 'No more',
-		sljzgd: 'Pull up to load more',
-		vipzs: 'VIP exclusive',
-		dsy: 'degree profit',
-		wyyz: 'I want help',
-		yz: 'assistance',
-		ywc: 'Completed',
-		lksj: 'Upgrade now',
-		ljsj:'Upgrade now',
-		ytg: 'Passed',
-		wtg: 'Fail',
-		dsh: 'Audit',
-		ren: 'Man',
-		wdtdrs:'The number of my team',
-		syzx:'Benefited from the center',
-		fh:'back',
-		ckxq:'View details',
-		jj: 'No',
-		ty: 'Ok',
-		ysh: 'Reviewed',
-		wsh: 'Not approved',
-		wjmm: 'Forget password',
-		logininfo:'You are not logged in. Do you want to log in now?',
-		yk: 'tourist',
-		lxkf: 'customer service',
-		fxhy: 'Share friends',
-		wdtd: 'My team',
-		wdtg: 'My promotion',
-		wdtgrs: 'My promotion number',
-		login: 'Login',
-		yy:'English',
-		sy:'Index',
-		wd:'My',
-		shlb:'Review',
-		zcqd:'reconfirm',
-		nsfsjqrndbf:'1、Have you confirmed that your sponsor has been upgraded to VIP volunteer?',
-		rndbfytrmy:'2、If your sponsor does not upgrade the VIP volunteer, he/she will not receive your assistance. ',
-		dndkzcqrjh:'3、When you click the reconfirm button, you will not be able to change the account provided by the recipient.',
-		nsfsjqrndbfcj:'1、Have you confirmed that your sponsor has been upgraded to primary volunteer?',
-		rndbfytrmycj:'2、If your sponsor does not upgrade the primary volunteer, he/she will not receive your assistance. ',
-	},
-	foo: {
-		tx: 'Avatar',
-		nc: 'Nickname',
-		yhzh:'Bank Account',
-		scyh:'Belongs to the bank',
-		zh:'Account',
-		jjlxrdh:'Emergency contact number',
-		zfbskm:'Alipay payment code',
-		wxskm:'Weixin payment code',
-		tj:'Submit',
-		tcdl:'Log out',
-		sjyhskxxs:'Upper-level user payment information(up',
-		j:'Level)',
-		cg:'Succeed',
-		sb:'Fail',
-		shz:'Under review',
-		xtpt:'Dystem platform',
-		yzje:'Amount of assistance',
-		yzfkxx:'Assistance payment information',
-		scpz:'Upload documents',
-		qxz:'Please chooseTRC20',
-		zfcbdz:'Copy the coin charging address',
-		qxxyzbbcjtxgpzbsc:'Please save the screenshots and upload the relevant vouchers for offline assistance. Each aid fund can be divided into two arbitrary amounts of payment, the total  ',
-		ysclbjt:'yuan Upload two screenshots',
-		
-		xtptwsf:'System platform maintenance fee collection information',
-		xtptwhf:'System platform maintenance fee',
-		ts:'Hint',
-		yscpzsfcxsc:'The certificate has been uploaded. Do you want to upload it again',
-		fzcg:'Copy success!',
-		fzsb:'Copy fail',
-		yhzzyz:'Bank transfer aid',
-		yhzh:'Bank account',
-		fzzh:'Copy',
-		khh:'Opening bank',
-		fzkhh:'Copy',
-		zfbsmyz:'Alipay scan code assistance',
-		wxsmyz:'Wechat scan code assistance',
-		wjmm:'Forget the password',
-		sz:'Set',
-		xq:'Details',
-		dkxx:'Aid information',
-		wdtd:'My team',
-		wd:'My',
-		wdtg:'My promotion',
-		sczl:'Upload data',
-		shlb:'Review the list',
-		wdewm:'My QR code',
-		yjwndzzskf:'We have customized exclusive customer service for you',
-		kfwx:'WeiXin',
-		qx:'Cancel',
-		fzwx:'Copy',
-		jtxzsxm:'Please fill in your real name',
-		jtxyhkh:'Please fill in your bank card number',
-		jtxkhh:'Please fill in the opening bank',
-		jtxjjlxrdh:'Please fill in the emergency contact number',
-		ndqwtxskxx:'You have not filled in the payment information, do you want to go to fill in?',
-		ndqwtxzsxm:'Your current real name is incorrect, do you want to go to fill in?',
-		bt:'Must fill in',
-		zsxm:'Name',
-		yhylsjh:'The bank reserves a mobile number',
-		fzsjh:'Copy',
-		tglb:'Notification list',
-		tgxq:'Notice details',
-		syzx:'Benefit center',
-		dqyzfk:'Current aid payments',
-		dqszfk:'Current assistance payments',
-		yzfk:'Assist payments',
-		syzfk:'Suffer assist payments',
-		jhrs:'activated Man',
-		hzrs:'Black diamonds Man',
-		xzewm:'Download qr code',
-	}
-}

+ 0 - 24
lang/es.js

@@ -1,24 +0,0 @@
-module.exports = {
-	hea: {
-		gwsy: 'Página de inicio',
-		gscp: 'Productos',
-		faal: 'Caso de solución',
-		gywm: 'Sobre nosotros',
-		yyxz: 'Language',
-		ljgd: "Aprender más"
-	},
-	foo: {
-		hwsc: 'Mercado exterior',
-		cplb: 'Lista de productos',
-		faal: 'Caso de solución',
-		zyj: 'Serie de aireadores',
-		gzwm: 'Síguenos',
-		fdgzh: 'Cuenta oficial de Fordy',
-		fddy:'Futi Tik Tok',
-		zz: 'Fabricación',
-		jz: 'Valor',
-		wh: 'Cultura',
-		zzkhty: "Centrarse en la experiencia del cliente e innovar la tecnología de guía",
-		qywh: 'La empresa cuenta con un equipo de personal contento, dedicado y profesional, y hereda el espíritu de equipo de "perfeccionar al individuo y lograr la mejor empresa". Se adhiere a la política comercial de "gestión estricta, innovación, alta calidad y expansión del mercado", con la filosofía empresarial de "lo que usted piensa es lo que hacemos". Siempre nos hemos adherido al principio corporativo de "alta calidad, excelente servicio, precio razonable, entrega rápida y cumplimiento de las promesas del cliente".',
-	}
-}

+ 0 - 21
lang/i18n.js

@@ -1,21 +0,0 @@
-import Vue from "vue";
-import VueI18n from "./i18nJs.js";
-import en from "./en";
-import es from "./es";
-import zh_cn from './zh_cn'
-
-Vue.use(VueI18n);
-
-const messages = {
-  en: en,
-  es: es,
-  zh_cn:zh_cn
-};
-
-const i18n = new VueI18n({
-  locale: "zh_cn",
-  messages
-});
-
-export default i18n;
-

+ 0 - 2210
lang/i18nJs.js

@@ -1,2210 +0,0 @@
-/*!
- * vue-i18n v8.24.1 
- * (c) 2021 kazuya kawaguchi
- * Released under the MIT License.
- */
-(function (global, factory) {
-  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
-  typeof define === 'function' && define.amd ? define(factory) :
-  (global.VueI18n = factory());
-}(this, (function () { 'use strict';
-
-  /*  */
-
-  /**
-   * constants
-   */
-
-  var numberFormatKeys = [
-    'compactDisplay',
-    'currency',
-    'currencyDisplay',
-    'currencySign',
-    'localeMatcher',
-    'notation',
-    'numberingSystem',
-    'signDisplay',
-    'style',
-    'unit',
-    'unitDisplay',
-    'useGrouping',
-    'minimumIntegerDigits',
-    'minimumFractionDigits',
-    'maximumFractionDigits',
-    'minimumSignificantDigits',
-    'maximumSignificantDigits'
-  ];
-
-  /**
-   * utilities
-   */
-
-  function warn (msg, err) {
-    if (typeof console !== 'undefined') {
-      console.warn('[vue-i18n] ' + msg);
-      /* istanbul ignore if */
-      if (err) {
-        console.warn(err.stack);
-      }
-    }
-  }
-
-  function error (msg, err) {
-    if (typeof console !== 'undefined') {
-      console.error('[vue-i18n] ' + msg);
-      /* istanbul ignore if */
-      if (err) {
-        console.error(err.stack);
-      }
-    }
-  }
-
-  var isArray = Array.isArray;
-
-  function isObject (obj) {
-    return obj !== null && typeof obj === 'object'
-  }
-
-  function isBoolean (val) {
-    return typeof val === 'boolean'
-  }
-
-  function isString (val) {
-    return typeof val === 'string'
-  }
-
-  var toString = Object.prototype.toString;
-  var OBJECT_STRING = '[object Object]';
-  function isPlainObject (obj) {
-    return toString.call(obj) === OBJECT_STRING
-  }
-
-  function isNull (val) {
-    return val === null || val === undefined
-  }
-
-  function isFunction (val) {
-    return typeof val === 'function'
-  }
-
-  function parseArgs () {
-    var args = [], len = arguments.length;
-    while ( len-- ) args[ len ] = arguments[ len ];
-
-    var locale = null;
-    var params = null;
-    if (args.length === 1) {
-      if (isObject(args[0]) || isArray(args[0])) {
-        params = args[0];
-      } else if (typeof args[0] === 'string') {
-        locale = args[0];
-      }
-    } else if (args.length === 2) {
-      if (typeof args[0] === 'string') {
-        locale = args[0];
-      }
-      /* istanbul ignore if */
-      if (isObject(args[1]) || isArray(args[1])) {
-        params = args[1];
-      }
-    }
-
-    return { locale: locale, params: params }
-  }
-
-  function looseClone (obj) {
-    return JSON.parse(JSON.stringify(obj))
-  }
-
-  function remove (arr, item) {
-    if (arr.length) {
-      var index = arr.indexOf(item);
-      if (index > -1) {
-        return arr.splice(index, 1)
-      }
-    }
-  }
-
-  function includes (arr, item) {
-    return !!~arr.indexOf(item)
-  }
-
-  var hasOwnProperty = Object.prototype.hasOwnProperty;
-  function hasOwn (obj, key) {
-    return hasOwnProperty.call(obj, key)
-  }
-
-  function merge (target) {
-    var arguments$1 = arguments;
-
-    var output = Object(target);
-    for (var i = 1; i < arguments.length; i++) {
-      var source = arguments$1[i];
-      if (source !== undefined && source !== null) {
-        var key = (void 0);
-        for (key in source) {
-          if (hasOwn(source, key)) {
-            if (isObject(source[key])) {
-              output[key] = merge(output[key], source[key]);
-            } else {
-              output[key] = source[key];
-            }
-          }
-        }
-      }
-    }
-    return output
-  }
-
-  function looseEqual (a, b) {
-    if (a === b) { return true }
-    var isObjectA = isObject(a);
-    var isObjectB = isObject(b);
-    if (isObjectA && isObjectB) {
-      try {
-        var isArrayA = isArray(a);
-        var isArrayB = isArray(b);
-        if (isArrayA && isArrayB) {
-          return a.length === b.length && a.every(function (e, i) {
-            return looseEqual(e, b[i])
-          })
-        } else if (!isArrayA && !isArrayB) {
-          var keysA = Object.keys(a);
-          var keysB = Object.keys(b);
-          return keysA.length === keysB.length && keysA.every(function (key) {
-            return looseEqual(a[key], b[key])
-          })
-        } else {
-          /* istanbul ignore next */
-          return false
-        }
-      } catch (e) {
-        /* istanbul ignore next */
-        return false
-      }
-    } else if (!isObjectA && !isObjectB) {
-      return String(a) === String(b)
-    } else {
-      return false
-    }
-  }
-
-  /**
-   * Sanitizes html special characters from input strings. For mitigating risk of XSS attacks.
-   * @param rawText The raw input from the user that should be escaped.
-   */
-  function escapeHtml(rawText) {
-    return rawText
-      .replace(/</g, '&lt;')
-      .replace(/>/g, '&gt;')
-      .replace(/"/g, '&quot;')
-      .replace(/'/g, '&apos;')
-  }
-
-  /**
-   * Escapes html tags and special symbols from all provided params which were returned from parseArgs().params.
-   * This method performs an in-place operation on the params object.
-   *
-   * @param {any} params Parameters as provided from `parseArgs().params`.
-   *                     May be either an array of strings or a string->any map.
-   *
-   * @returns The manipulated `params` object.
-   */
-  function escapeParams(params) {
-    if(params != null) {
-      Object.keys(params).forEach(function (key) {
-        if(typeof(params[key]) == 'string') {
-          params[key] = escapeHtml(params[key]);
-        }
-      });
-    }
-    return params
-  }
-
-  /*  */
-
-  function extend (Vue) {
-    if (!Vue.prototype.hasOwnProperty('$i18n')) {
-      // $FlowFixMe
-      Object.defineProperty(Vue.prototype, '$i18n', {
-        get: function get () { return this._i18n }
-      });
-    }
-
-    Vue.prototype.$t = function (key) {
-      var values = [], len = arguments.length - 1;
-      while ( len-- > 0 ) values[ len ] = arguments[ len + 1 ];
-
-      var i18n = this.$i18n;
-      return i18n._t.apply(i18n, [ key, i18n.locale, i18n._getMessages(), this ].concat( values ))
-    };
-
-    Vue.prototype.$tc = function (key, choice) {
-      var values = [], len = arguments.length - 2;
-      while ( len-- > 0 ) values[ len ] = arguments[ len + 2 ];
-
-      var i18n = this.$i18n;
-      return i18n._tc.apply(i18n, [ key, i18n.locale, i18n._getMessages(), this, choice ].concat( values ))
-    };
-
-    Vue.prototype.$te = function (key, locale) {
-      var i18n = this.$i18n;
-      return i18n._te(key, i18n.locale, i18n._getMessages(), locale)
-    };
-
-    Vue.prototype.$d = function (value) {
-      var ref;
-
-      var args = [], len = arguments.length - 1;
-      while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
-      return (ref = this.$i18n).d.apply(ref, [ value ].concat( args ))
-    };
-
-    Vue.prototype.$n = function (value) {
-      var ref;
-
-      var args = [], len = arguments.length - 1;
-      while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
-      return (ref = this.$i18n).n.apply(ref, [ value ].concat( args ))
-    };
-  }
-
-  /*  */
-
-  var mixin = {
-    beforeCreate: function beforeCreate () {
-      var options = this.$options;
-      options.i18n = options.i18n || (options.__i18n ? {} : null);
-
-      if (options.i18n) {
-        if (options.i18n instanceof VueI18n) {
-          // init locale messages via custom blocks
-          if (options.__i18n) {
-            try {
-              var localeMessages = options.i18n && options.i18n.messages ? options.i18n.messages : {};
-              options.__i18n.forEach(function (resource) {
-                localeMessages = merge(localeMessages, JSON.parse(resource));
-              });
-              Object.keys(localeMessages).forEach(function (locale) {
-                options.i18n.mergeLocaleMessage(locale, localeMessages[locale]);
-              });
-            } catch (e) {
-              {
-                error("Cannot parse locale messages via custom blocks.", e);
-              }
-            }
-          }
-          this._i18n = options.i18n;
-          this._i18nWatcher = this._i18n.watchI18nData();
-        } else if (isPlainObject(options.i18n)) {
-          var rootI18n = this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n
-            ? this.$root.$i18n
-            : null;
-          // component local i18n
-          if (rootI18n) {
-            options.i18n.root = this.$root;
-            options.i18n.formatter = rootI18n.formatter;
-            options.i18n.fallbackLocale = rootI18n.fallbackLocale;
-            options.i18n.formatFallbackMessages = rootI18n.formatFallbackMessages;
-            options.i18n.silentTranslationWarn = rootI18n.silentTranslationWarn;
-            options.i18n.silentFallbackWarn = rootI18n.silentFallbackWarn;
-            options.i18n.pluralizationRules = rootI18n.pluralizationRules;
-            options.i18n.preserveDirectiveContent = rootI18n.preserveDirectiveContent;
-          }
-
-          // init locale messages via custom blocks
-          if (options.__i18n) {
-            try {
-              var localeMessages$1 = options.i18n && options.i18n.messages ? options.i18n.messages : {};
-              options.__i18n.forEach(function (resource) {
-                localeMessages$1 = merge(localeMessages$1, JSON.parse(resource));
-              });
-              options.i18n.messages = localeMessages$1;
-            } catch (e) {
-              {
-                warn("Cannot parse locale messages via custom blocks.", e);
-              }
-            }
-          }
-
-          var ref = options.i18n;
-          var sharedMessages = ref.sharedMessages;
-          if (sharedMessages && isPlainObject(sharedMessages)) {
-            options.i18n.messages = merge(options.i18n.messages, sharedMessages);
-          }
-
-          this._i18n = new VueI18n(options.i18n);
-          this._i18nWatcher = this._i18n.watchI18nData();
-
-          if (options.i18n.sync === undefined || !!options.i18n.sync) {
-            this._localeWatcher = this.$i18n.watchLocale();
-          }
-
-          if (rootI18n) {
-            rootI18n.onComponentInstanceCreated(this._i18n);
-          }
-        } else {
-          {
-            warn("Cannot be interpreted 'i18n' option.");
-          }
-        }
-      } else if (this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n) {
-        // root i18n
-        this._i18n = this.$root.$i18n;
-      } else if (options.parent && options.parent.$i18n && options.parent.$i18n instanceof VueI18n) {
-        // parent i18n
-        this._i18n = options.parent.$i18n;
-      }
-    },
-
-    beforeMount: function beforeMount () {
-      var options = this.$options;
-      options.i18n = options.i18n || (options.__i18n ? {} : null);
-
-      if (options.i18n) {
-        if (options.i18n instanceof VueI18n) {
-          // init locale messages via custom blocks
-          this._i18n.subscribeDataChanging(this);
-          this._subscribing = true;
-        } else if (isPlainObject(options.i18n)) {
-          this._i18n.subscribeDataChanging(this);
-          this._subscribing = true;
-        } else {
-          {
-            warn("Cannot be interpreted 'i18n' option.");
-          }
-        }
-      } else if (this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n) {
-        this._i18n.subscribeDataChanging(this);
-        this._subscribing = true;
-      } else if (options.parent && options.parent.$i18n && options.parent.$i18n instanceof VueI18n) {
-        this._i18n.subscribeDataChanging(this);
-        this._subscribing = true;
-      }
-    },
-
-    mounted: function mounted () {
-      if (this !== this.$root && this.$options.__INTLIFY_META__ && this.$el) {
-        this.$el.setAttribute('data-intlify', this.$options.__INTLIFY_META__);
-      }
-    },
-
-    beforeDestroy: function beforeDestroy () {
-      if (!this._i18n) { return }
-
-      var self = this;
-      this.$nextTick(function () {
-        if (self._subscribing) {
-          self._i18n.unsubscribeDataChanging(self);
-          delete self._subscribing;
-        }
-
-        if (self._i18nWatcher) {
-          self._i18nWatcher();
-          self._i18n.destroyVM();
-          delete self._i18nWatcher;
-        }
-
-        if (self._localeWatcher) {
-          self._localeWatcher();
-          delete self._localeWatcher;
-        }
-      });
-    }
-  };
-
-  /*  */
-
-  var interpolationComponent = {
-    name: 'i18n',
-    functional: true,
-    props: {
-      tag: {
-        type: [String, Boolean, Object],
-        default: 'span'
-      },
-      path: {
-        type: String,
-        required: true
-      },
-      locale: {
-        type: String
-      },
-      places: {
-        type: [Array, Object]
-      }
-    },
-    render: function render (h, ref) {
-      var data = ref.data;
-      var parent = ref.parent;
-      var props = ref.props;
-      var slots = ref.slots;
-
-      var $i18n = parent.$i18n;
-      if (!$i18n) {
-        {
-          warn('Cannot find VueI18n instance!');
-        }
-        return
-      }
-
-      var path = props.path;
-      var locale = props.locale;
-      var places = props.places;
-      var params = slots();
-      var children = $i18n.i(
-        path,
-        locale,
-        onlyHasDefaultPlace(params) || places
-          ? useLegacyPlaces(params.default, places)
-          : params
-      );
-
-      var tag = (!!props.tag && props.tag !== true) || props.tag === false ? props.tag : 'span';
-      return tag ? h(tag, data, children) : children
-    }
-  };
-
-  function onlyHasDefaultPlace (params) {
-    var prop;
-    for (prop in params) {
-      if (prop !== 'default') { return false }
-    }
-    return Boolean(prop)
-  }
-
-  function useLegacyPlaces (children, places) {
-    var params = places ? createParamsFromPlaces(places) : {};
-
-    if (!children) { return params }
-
-    // Filter empty text nodes
-    children = children.filter(function (child) {
-      return child.tag || child.text.trim() !== ''
-    });
-
-    var everyPlace = children.every(vnodeHasPlaceAttribute);
-    if (everyPlace) {
-      warn('`place` attribute is deprecated in next major version. Please switch to Vue slots.');
-    }
-
-    return children.reduce(
-      everyPlace ? assignChildPlace : assignChildIndex,
-      params
-    )
-  }
-
-  function createParamsFromPlaces (places) {
-    {
-      warn('`places` prop is deprecated in next major version. Please switch to Vue slots.');
-    }
-
-    return Array.isArray(places)
-      ? places.reduce(assignChildIndex, {})
-      : Object.assign({}, places)
-  }
-
-  function assignChildPlace (params, child) {
-    if (child.data && child.data.attrs && child.data.attrs.place) {
-      params[child.data.attrs.place] = child;
-    }
-    return params
-  }
-
-  function assignChildIndex (params, child, index) {
-    params[index] = child;
-    return params
-  }
-
-  function vnodeHasPlaceAttribute (vnode) {
-    return Boolean(vnode.data && vnode.data.attrs && vnode.data.attrs.place)
-  }
-
-  /*  */
-
-  var numberComponent = {
-    name: 'i18n-n',
-    functional: true,
-    props: {
-      tag: {
-        type: [String, Boolean, Object],
-        default: 'span'
-      },
-      value: {
-        type: Number,
-        required: true
-      },
-      format: {
-        type: [String, Object]
-      },
-      locale: {
-        type: String
-      }
-    },
-    render: function render (h, ref) {
-      var props = ref.props;
-      var parent = ref.parent;
-      var data = ref.data;
-
-      var i18n = parent.$i18n;
-
-      if (!i18n) {
-        {
-          warn('Cannot find VueI18n instance!');
-        }
-        return null
-      }
-
-      var key = null;
-      var options = null;
-
-      if (isString(props.format)) {
-        key = props.format;
-      } else if (isObject(props.format)) {
-        if (props.format.key) {
-          key = props.format.key;
-        }
-
-        // Filter out number format options only
-        options = Object.keys(props.format).reduce(function (acc, prop) {
-          var obj;
-
-          if (includes(numberFormatKeys, prop)) {
-            return Object.assign({}, acc, ( obj = {}, obj[prop] = props.format[prop], obj ))
-          }
-          return acc
-        }, null);
-      }
-
-      var locale = props.locale || i18n.locale;
-      var parts = i18n._ntp(props.value, locale, key, options);
-
-      var values = parts.map(function (part, index) {
-        var obj;
-
-        var slot = data.scopedSlots && data.scopedSlots[part.type];
-        return slot ? slot(( obj = {}, obj[part.type] = part.value, obj.index = index, obj.parts = parts, obj )) : part.value
-      });
-
-      var tag = (!!props.tag && props.tag !== true) || props.tag === false ? props.tag : 'span';
-      return tag
-        ? h(tag, {
-          attrs: data.attrs,
-          'class': data['class'],
-          staticClass: data.staticClass
-        }, values)
-        : values
-    }
-  };
-
-  /*  */
-
-  function bind (el, binding, vnode) {
-    if (!assert(el, vnode)) { return }
-
-    t(el, binding, vnode);
-  }
-
-  function update (el, binding, vnode, oldVNode) {
-    if (!assert(el, vnode)) { return }
-
-    var i18n = vnode.context.$i18n;
-    if (localeEqual(el, vnode) &&
-      (looseEqual(binding.value, binding.oldValue) &&
-       looseEqual(el._localeMessage, i18n.getLocaleMessage(i18n.locale)))) { return }
-
-    t(el, binding, vnode);
-  }
-
-  function unbind (el, binding, vnode, oldVNode) {
-    var vm = vnode.context;
-    if (!vm) {
-      warn('Vue instance does not exists in VNode context');
-      return
-    }
-
-    var i18n = vnode.context.$i18n || {};
-    if (!binding.modifiers.preserve && !i18n.preserveDirectiveContent) {
-      el.textContent = '';
-    }
-    el._vt = undefined;
-    delete el['_vt'];
-    el._locale = undefined;
-    delete el['_locale'];
-    el._localeMessage = undefined;
-    delete el['_localeMessage'];
-  }
-
-  function assert (el, vnode) {
-    var vm = vnode.context;
-    if (!vm) {
-      warn('Vue instance does not exists in VNode context');
-      return false
-    }
-
-    if (!vm.$i18n) {
-      warn('VueI18n instance does not exists in Vue instance');
-      return false
-    }
-
-    return true
-  }
-
-  function localeEqual (el, vnode) {
-    var vm = vnode.context;
-    return el._locale === vm.$i18n.locale
-  }
-
-  function t (el, binding, vnode) {
-    var ref$1, ref$2;
-
-    var value = binding.value;
-
-    var ref = parseValue(value);
-    var path = ref.path;
-    var locale = ref.locale;
-    var args = ref.args;
-    var choice = ref.choice;
-    if (!path && !locale && !args) {
-      warn('value type not supported');
-      return
-    }
-
-    if (!path) {
-      warn('`path` is required in v-t directive');
-      return
-    }
-
-    var vm = vnode.context;
-    if (choice != null) {
-      el._vt = el.textContent = (ref$1 = vm.$i18n).tc.apply(ref$1, [ path, choice ].concat( makeParams(locale, args) ));
-    } else {
-      el._vt = el.textContent = (ref$2 = vm.$i18n).t.apply(ref$2, [ path ].concat( makeParams(locale, args) ));
-    }
-    el._locale = vm.$i18n.locale;
-    el._localeMessage = vm.$i18n.getLocaleMessage(vm.$i18n.locale);
-  }
-
-  function parseValue (value) {
-    var path;
-    var locale;
-    var args;
-    var choice;
-
-    if (isString(value)) {
-      path = value;
-    } else if (isPlainObject(value)) {
-      path = value.path;
-      locale = value.locale;
-      args = value.args;
-      choice = value.choice;
-    }
-
-    return { path: path, locale: locale, args: args, choice: choice }
-  }
-
-  function makeParams (locale, args) {
-    var params = [];
-
-    locale && params.push(locale);
-    if (args && (Array.isArray(args) || isPlainObject(args))) {
-      params.push(args);
-    }
-
-    return params
-  }
-
-  var Vue;
-
-  function install (_Vue) {
-    /* istanbul ignore if */
-    if (install.installed && _Vue === Vue) {
-      warn('already installed.');
-      return
-    }
-    install.installed = true;
-
-    Vue = _Vue;
-
-    var version = (Vue.version && Number(Vue.version.split('.')[0])) || -1;
-    /* istanbul ignore if */
-    if (version < 2) {
-      warn(("vue-i18n (" + (install.version) + ") need to use Vue 2.0 or later (Vue: " + (Vue.version) + ")."));
-      return
-    }
-
-    extend(Vue);
-    Vue.mixin(mixin);
-    Vue.directive('t', { bind: bind, update: update, unbind: unbind });
-    Vue.component(interpolationComponent.name, interpolationComponent);
-    Vue.component(numberComponent.name, numberComponent);
-
-    // use simple mergeStrategies to prevent i18n instance lose '__proto__'
-    var strats = Vue.config.optionMergeStrategies;
-    strats.i18n = function (parentVal, childVal) {
-      return childVal === undefined
-        ? parentVal
-        : childVal
-    };
-  }
-
-  /*  */
-
-  var BaseFormatter = function BaseFormatter () {
-    this._caches = Object.create(null);
-  };
-
-  BaseFormatter.prototype.interpolate = function interpolate (message, values) {
-    if (!values) {
-      return [message]
-    }
-    var tokens = this._caches[message];
-    if (!tokens) {
-      tokens = parse(message);
-      this._caches[message] = tokens;
-    }
-    return compile(tokens, values)
-  };
-
-
-
-  var RE_TOKEN_LIST_VALUE = /^(?:\d)+/;
-  var RE_TOKEN_NAMED_VALUE = /^(?:\w)+/;
-
-  function parse (format) {
-    var tokens = [];
-    var position = 0;
-
-    var text = '';
-    while (position < format.length) {
-      var char = format[position++];
-      if (char === '{') {
-        if (text) {
-          tokens.push({ type: 'text', value: text });
-        }
-
-        text = '';
-        var sub = '';
-        char = format[position++];
-        while (char !== undefined && char !== '}') {
-          sub += char;
-          char = format[position++];
-        }
-        var isClosed = char === '}';
-
-        var type = RE_TOKEN_LIST_VALUE.test(sub)
-          ? 'list'
-          : isClosed && RE_TOKEN_NAMED_VALUE.test(sub)
-            ? 'named'
-            : 'unknown';
-        tokens.push({ value: sub, type: type });
-      } else if (char === '%') {
-        // when found rails i18n syntax, skip text capture
-        if (format[(position)] !== '{') {
-          text += char;
-        }
-      } else {
-        text += char;
-      }
-    }
-
-    text && tokens.push({ type: 'text', value: text });
-
-    return tokens
-  }
-
-  function compile (tokens, values) {
-    var compiled = [];
-    var index = 0;
-
-    var mode = Array.isArray(values)
-      ? 'list'
-      : isObject(values)
-        ? 'named'
-        : 'unknown';
-    if (mode === 'unknown') { return compiled }
-
-    while (index < tokens.length) {
-      var token = tokens[index];
-      switch (token.type) {
-        case 'text':
-          compiled.push(token.value);
-          break
-        case 'list':
-          compiled.push(values[parseInt(token.value, 10)]);
-          break
-        case 'named':
-          if (mode === 'named') {
-            compiled.push((values)[token.value]);
-          } else {
-            {
-              warn(("Type of token '" + (token.type) + "' and format of value '" + mode + "' don't match!"));
-            }
-          }
-          break
-        case 'unknown':
-          {
-            warn("Detect 'unknown' type of token!");
-          }
-          break
-      }
-      index++;
-    }
-
-    return compiled
-  }
-
-  /*  */
-
-  /**
-   *  Path parser
-   *  - Inspired:
-   *    Vue.js Path parser
-   */
-
-  // actions
-  var APPEND = 0;
-  var PUSH = 1;
-  var INC_SUB_PATH_DEPTH = 2;
-  var PUSH_SUB_PATH = 3;
-
-  // states
-  var BEFORE_PATH = 0;
-  var IN_PATH = 1;
-  var BEFORE_IDENT = 2;
-  var IN_IDENT = 3;
-  var IN_SUB_PATH = 4;
-  var IN_SINGLE_QUOTE = 5;
-  var IN_DOUBLE_QUOTE = 6;
-  var AFTER_PATH = 7;
-  var ERROR = 8;
-
-  var pathStateMachine = [];
-
-  pathStateMachine[BEFORE_PATH] = {
-    'ws': [BEFORE_PATH],
-    'ident': [IN_IDENT, APPEND],
-    '[': [IN_SUB_PATH],
-    'eof': [AFTER_PATH]
-  };
-
-  pathStateMachine[IN_PATH] = {
-    'ws': [IN_PATH],
-    '.': [BEFORE_IDENT],
-    '[': [IN_SUB_PATH],
-    'eof': [AFTER_PATH]
-  };
-
-  pathStateMachine[BEFORE_IDENT] = {
-    'ws': [BEFORE_IDENT],
-    'ident': [IN_IDENT, APPEND],
-    '0': [IN_IDENT, APPEND],
-    'number': [IN_IDENT, APPEND]
-  };
-
-  pathStateMachine[IN_IDENT] = {
-    'ident': [IN_IDENT, APPEND],
-    '0': [IN_IDENT, APPEND],
-    'number': [IN_IDENT, APPEND],
-    'ws': [IN_PATH, PUSH],
-    '.': [BEFORE_IDENT, PUSH],
-    '[': [IN_SUB_PATH, PUSH],
-    'eof': [AFTER_PATH, PUSH]
-  };
-
-  pathStateMachine[IN_SUB_PATH] = {
-    "'": [IN_SINGLE_QUOTE, APPEND],
-    '"': [IN_DOUBLE_QUOTE, APPEND],
-    '[': [IN_SUB_PATH, INC_SUB_PATH_DEPTH],
-    ']': [IN_PATH, PUSH_SUB_PATH],
-    'eof': ERROR,
-    'else': [IN_SUB_PATH, APPEND]
-  };
-
-  pathStateMachine[IN_SINGLE_QUOTE] = {
-    "'": [IN_SUB_PATH, APPEND],
-    'eof': ERROR,
-    'else': [IN_SINGLE_QUOTE, APPEND]
-  };
-
-  pathStateMachine[IN_DOUBLE_QUOTE] = {
-    '"': [IN_SUB_PATH, APPEND],
-    'eof': ERROR,
-    'else': [IN_DOUBLE_QUOTE, APPEND]
-  };
-
-  /**
-   * Check if an expression is a literal value.
-   */
-
-  var literalValueRE = /^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/;
-  function isLiteral (exp) {
-    return literalValueRE.test(exp)
-  }
-
-  /**
-   * Strip quotes from a string
-   */
-
-  function stripQuotes (str) {
-    var a = str.charCodeAt(0);
-    var b = str.charCodeAt(str.length - 1);
-    return a === b && (a === 0x22 || a === 0x27)
-      ? str.slice(1, -1)
-      : str
-  }
-
-  /**
-   * Determine the type of a character in a keypath.
-   */
-
-  function getPathCharType (ch) {
-    if (ch === undefined || ch === null) { return 'eof' }
-
-    var code = ch.charCodeAt(0);
-
-    switch (code) {
-      case 0x5B: // [
-      case 0x5D: // ]
-      case 0x2E: // .
-      case 0x22: // "
-      case 0x27: // '
-        return ch
-
-      case 0x5F: // _
-      case 0x24: // $
-      case 0x2D: // -
-        return 'ident'
-
-      case 0x09: // Tab
-      case 0x0A: // Newline
-      case 0x0D: // Return
-      case 0xA0:  // No-break space
-      case 0xFEFF:  // Byte Order Mark
-      case 0x2028:  // Line Separator
-      case 0x2029:  // Paragraph Separator
-        return 'ws'
-    }
-
-    return 'ident'
-  }
-
-  /**
-   * Format a subPath, return its plain form if it is
-   * a literal string or number. Otherwise prepend the
-   * dynamic indicator (*).
-   */
-
-  function formatSubPath (path) {
-    var trimmed = path.trim();
-    // invalid leading 0
-    if (path.charAt(0) === '0' && isNaN(path)) { return false }
-
-    return isLiteral(trimmed) ? stripQuotes(trimmed) : '*' + trimmed
-  }
-
-  /**
-   * Parse a string path into an array of segments
-   */
-
-  function parse$1 (path) {
-    var keys = [];
-    var index = -1;
-    var mode = BEFORE_PATH;
-    var subPathDepth = 0;
-    var c;
-    var key;
-    var newChar;
-    var type;
-    var transition;
-    var action;
-    var typeMap;
-    var actions = [];
-
-    actions[PUSH] = function () {
-      if (key !== undefined) {
-        keys.push(key);
-        key = undefined;
-      }
-    };
-
-    actions[APPEND] = function () {
-      if (key === undefined) {
-        key = newChar;
-      } else {
-        key += newChar;
-      }
-    };
-
-    actions[INC_SUB_PATH_DEPTH] = function () {
-      actions[APPEND]();
-      subPathDepth++;
-    };
-
-    actions[PUSH_SUB_PATH] = function () {
-      if (subPathDepth > 0) {
-        subPathDepth--;
-        mode = IN_SUB_PATH;
-        actions[APPEND]();
-      } else {
-        subPathDepth = 0;
-        if (key === undefined) { return false }
-        key = formatSubPath(key);
-        if (key === false) {
-          return false
-        } else {
-          actions[PUSH]();
-        }
-      }
-    };
-
-    function maybeUnescapeQuote () {
-      var nextChar = path[index + 1];
-      if ((mode === IN_SINGLE_QUOTE && nextChar === "'") ||
-        (mode === IN_DOUBLE_QUOTE && nextChar === '"')) {
-        index++;
-        newChar = '\\' + nextChar;
-        actions[APPEND]();
-        return true
-      }
-    }
-
-    while (mode !== null) {
-      index++;
-      c = path[index];
-
-      if (c === '\\' && maybeUnescapeQuote()) {
-        continue
-      }
-
-      type = getPathCharType(c);
-      typeMap = pathStateMachine[mode];
-      transition = typeMap[type] || typeMap['else'] || ERROR;
-
-      if (transition === ERROR) {
-        return // parse error
-      }
-
-      mode = transition[0];
-      action = actions[transition[1]];
-      if (action) {
-        newChar = transition[2];
-        newChar = newChar === undefined
-          ? c
-          : newChar;
-        if (action() === false) {
-          return
-        }
-      }
-
-      if (mode === AFTER_PATH) {
-        return keys
-      }
-    }
-  }
-
-
-
-
-
-  var I18nPath = function I18nPath () {
-    this._cache = Object.create(null);
-  };
-
-  /**
-   * External parse that check for a cache hit first
-   */
-  I18nPath.prototype.parsePath = function parsePath (path) {
-    var hit = this._cache[path];
-    if (!hit) {
-      hit = parse$1(path);
-      if (hit) {
-        this._cache[path] = hit;
-      }
-    }
-    return hit || []
-  };
-
-  /**
-   * Get path value from path string
-   */
-  I18nPath.prototype.getPathValue = function getPathValue (obj, path) {
-    if (!isObject(obj)) { return null }
-
-    var paths = this.parsePath(path);
-    if (paths.length === 0) {
-      return null
-    } else {
-      var length = paths.length;
-      var last = obj;
-      var i = 0;
-      while (i < length) {
-        var value = last[paths[i]];
-        if (value === undefined || value === null) {
-          return null
-        }
-        last = value;
-        i++;
-      }
-
-      return last
-    }
-  };
-
-  /*  */
-
-
-
-  var htmlTagMatcher = /<\/?[\w\s="/.':;#-\/]+>/;
-  var linkKeyMatcher = /(?:@(?:\.[a-z]+)?:(?:[\w\-_|.]+|\([\w\-_|.]+\)))/g;
-  var linkKeyPrefixMatcher = /^@(?:\.([a-z]+))?:/;
-  var bracketsMatcher = /[()]/g;
-  var defaultModifiers = {
-    'upper': function (str) { return str.toLocaleUpperCase(); },
-    'lower': function (str) { return str.toLocaleLowerCase(); },
-    'capitalize': function (str) { return ("" + (str.charAt(0).toLocaleUpperCase()) + (str.substr(1))); }
-  };
-
-  var defaultFormatter = new BaseFormatter();
-
-  var VueI18n = function VueI18n (options) {
-    var this$1 = this;
-    if ( options === void 0 ) options = {};
-
-    // Auto install if it is not done yet and `window` has `Vue`.
-    // To allow users to avoid auto-installation in some cases,
-    // this code should be placed here. See #290
-    /* istanbul ignore if */
-    if (!Vue && typeof window !== 'undefined' && window.Vue) {
-      install(window.Vue);
-    }
-
-    var locale = options.locale || 'en-US';
-    var fallbackLocale = options.fallbackLocale === false
-      ? false
-      : options.fallbackLocale || 'en-US';
-    var messages = options.messages || {};
-    var dateTimeFormats = options.dateTimeFormats || {};
-    var numberFormats = options.numberFormats || {};
-
-    this._vm = null;
-    this._formatter = options.formatter || defaultFormatter;
-    this._modifiers = options.modifiers || {};
-    this._missing = options.missing || null;
-    this._root = options.root || null;
-    this._sync = options.sync === undefined ? true : !!options.sync;
-    this._fallbackRoot = options.fallbackRoot === undefined
-      ? true
-      : !!options.fallbackRoot;
-    this._formatFallbackMessages = options.formatFallbackMessages === undefined
-      ? false
-      : !!options.formatFallbackMessages;
-    this._silentTranslationWarn = options.silentTranslationWarn === undefined
-      ? false
-      : options.silentTranslationWarn;
-    this._silentFallbackWarn = options.silentFallbackWarn === undefined
-      ? false
-      : !!options.silentFallbackWarn;
-    this._dateTimeFormatters = {};
-    this._numberFormatters = {};
-    this._path = new I18nPath();
-    this._dataListeners = [];
-    this._componentInstanceCreatedListener = options.componentInstanceCreatedListener || null;
-    this._preserveDirectiveContent = options.preserveDirectiveContent === undefined
-      ? false
-      : !!options.preserveDirectiveContent;
-    this.pluralizationRules = options.pluralizationRules || {};
-    this._warnHtmlInMessage = options.warnHtmlInMessage || 'off';
-    this._postTranslation = options.postTranslation || null;
-    this._escapeParameterHtml = options.escapeParameterHtml || false;
-
-    /**
-     * @param choice {number} a choice index given by the input to $tc: `$tc('path.to.rule', choiceIndex)`
-     * @param choicesLength {number} an overall amount of available choices
-     * @returns a final choice index
-    */
-    this.getChoiceIndex = function (choice, choicesLength) {
-      var thisPrototype = Object.getPrototypeOf(this$1);
-      if (thisPrototype && thisPrototype.getChoiceIndex) {
-        var prototypeGetChoiceIndex = (thisPrototype.getChoiceIndex);
-        return (prototypeGetChoiceIndex).call(this$1, choice, choicesLength)
-      }
-
-      // Default (old) getChoiceIndex implementation - english-compatible
-      var defaultImpl = function (_choice, _choicesLength) {
-        _choice = Math.abs(_choice);
-
-        if (_choicesLength === 2) {
-          return _choice
-            ? _choice > 1
-              ? 1
-              : 0
-            : 1
-        }
-
-        return _choice ? Math.min(_choice, 2) : 0
-      };
-
-      if (this$1.locale in this$1.pluralizationRules) {
-        return this$1.pluralizationRules[this$1.locale].apply(this$1, [choice, choicesLength])
-      } else {
-        return defaultImpl(choice, choicesLength)
-      }
-    };
-
-
-    this._exist = function (message, key) {
-      if (!message || !key) { return false }
-      if (!isNull(this$1._path.getPathValue(message, key))) { return true }
-      // fallback for flat key
-      if (message[key]) { return true }
-      return false
-    };
-
-    if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') {
-      Object.keys(messages).forEach(function (locale) {
-        this$1._checkLocaleMessage(locale, this$1._warnHtmlInMessage, messages[locale]);
-      });
-    }
-
-    this._initVM({
-      locale: locale,
-      fallbackLocale: fallbackLocale,
-      messages: messages,
-      dateTimeFormats: dateTimeFormats,
-      numberFormats: numberFormats
-    });
-  };
-
-  var prototypeAccessors = { vm: { configurable: true },messages: { configurable: true },dateTimeFormats: { configurable: true },numberFormats: { configurable: true },availableLocales: { configurable: true },locale: { configurable: true },fallbackLocale: { configurable: true },formatFallbackMessages: { configurable: true },missing: { configurable: true },formatter: { configurable: true },silentTranslationWarn: { configurable: true },silentFallbackWarn: { configurable: true },preserveDirectiveContent: { configurable: true },warnHtmlInMessage: { configurable: true },postTranslation: { configurable: true } };
-
-  VueI18n.prototype._checkLocaleMessage = function _checkLocaleMessage (locale, level, message) {
-    var paths = [];
-
-    var fn = function (level, locale, message, paths) {
-      if (isPlainObject(message)) {
-        Object.keys(message).forEach(function (key) {
-          var val = message[key];
-          if (isPlainObject(val)) {
-            paths.push(key);
-            paths.push('.');
-            fn(level, locale, val, paths);
-            paths.pop();
-            paths.pop();
-          } else {
-            paths.push(key);
-            fn(level, locale, val, paths);
-            paths.pop();
-          }
-        });
-      } else if (isArray(message)) {
-        message.forEach(function (item, index) {
-          if (isPlainObject(item)) {
-            paths.push(("[" + index + "]"));
-            paths.push('.');
-            fn(level, locale, item, paths);
-            paths.pop();
-            paths.pop();
-          } else {
-            paths.push(("[" + index + "]"));
-            fn(level, locale, item, paths);
-            paths.pop();
-          }
-        });
-      } else if (isString(message)) {
-        var ret = htmlTagMatcher.test(message);
-        if (ret) {
-          var msg = "Detected HTML in message '" + message + "' of keypath '" + (paths.join('')) + "' at '" + locale + "'. Consider component interpolation with '<i18n>' to avoid XSS. See https://bit.ly/2ZqJzkp";
-          if (level === 'warn') {
-            warn(msg);
-          } else if (level === 'error') {
-            error(msg);
-          }
-        }
-      }
-    };
-
-    fn(level, locale, message, paths);
-  };
-
-  VueI18n.prototype._initVM = function _initVM (data) {
-    var silent = Vue.config.silent;
-    Vue.config.silent = true;
-    this._vm = new Vue({ data: data });
-    Vue.config.silent = silent;
-  };
-
-  VueI18n.prototype.destroyVM = function destroyVM () {
-    this._vm.$destroy();
-  };
-
-  VueI18n.prototype.subscribeDataChanging = function subscribeDataChanging (vm) {
-    this._dataListeners.push(vm);
-  };
-
-  VueI18n.prototype.unsubscribeDataChanging = function unsubscribeDataChanging (vm) {
-    remove(this._dataListeners, vm);
-  };
-
-  VueI18n.prototype.watchI18nData = function watchI18nData () {
-    var self = this;
-    return this._vm.$watch('$data', function () {
-      var i = self._dataListeners.length;
-      while (i--) {
-        Vue.nextTick(function () {
-          self._dataListeners[i] && self._dataListeners[i].$forceUpdate();
-        });
-      }
-    }, { deep: true })
-  };
-
-  VueI18n.prototype.watchLocale = function watchLocale () {
-    /* istanbul ignore if */
-    if (!this._sync || !this._root) { return null }
-    var target = this._vm;
-    return this._root.$i18n.vm.$watch('locale', function (val) {
-      target.$set(target, 'locale', val);
-      target.$forceUpdate();
-    }, { immediate: true })
-  };
-
-  VueI18n.prototype.onComponentInstanceCreated = function onComponentInstanceCreated (newI18n) {
-    if (this._componentInstanceCreatedListener) {
-      this._componentInstanceCreatedListener(newI18n, this);
-    }
-  };
-
-  prototypeAccessors.vm.get = function () { return this._vm };
-
-  prototypeAccessors.messages.get = function () { return looseClone(this._getMessages()) };
-  prototypeAccessors.dateTimeFormats.get = function () { return looseClone(this._getDateTimeFormats()) };
-  prototypeAccessors.numberFormats.get = function () { return looseClone(this._getNumberFormats()) };
-  prototypeAccessors.availableLocales.get = function () { return Object.keys(this.messages).sort() };
-
-  prototypeAccessors.locale.get = function () { return this._vm.locale };
-  prototypeAccessors.locale.set = function (locale) {
-    this._vm.$set(this._vm, 'locale', locale);
-  };
-
-  prototypeAccessors.fallbackLocale.get = function () { return this._vm.fallbackLocale };
-  prototypeAccessors.fallbackLocale.set = function (locale) {
-    this._localeChainCache = {};
-    this._vm.$set(this._vm, 'fallbackLocale', locale);
-  };
-
-  prototypeAccessors.formatFallbackMessages.get = function () { return this._formatFallbackMessages };
-  prototypeAccessors.formatFallbackMessages.set = function (fallback) { this._formatFallbackMessages = fallback; };
-
-  prototypeAccessors.missing.get = function () { return this._missing };
-  prototypeAccessors.missing.set = function (handler) { this._missing = handler; };
-
-  prototypeAccessors.formatter.get = function () { return this._formatter };
-  prototypeAccessors.formatter.set = function (formatter) { this._formatter = formatter; };
-
-  prototypeAccessors.silentTranslationWarn.get = function () { return this._silentTranslationWarn };
-  prototypeAccessors.silentTranslationWarn.set = function (silent) { this._silentTranslationWarn = silent; };
-
-  prototypeAccessors.silentFallbackWarn.get = function () { return this._silentFallbackWarn };
-  prototypeAccessors.silentFallbackWarn.set = function (silent) { this._silentFallbackWarn = silent; };
-
-  prototypeAccessors.preserveDirectiveContent.get = function () { return this._preserveDirectiveContent };
-  prototypeAccessors.preserveDirectiveContent.set = function (preserve) { this._preserveDirectiveContent = preserve; };
-
-  prototypeAccessors.warnHtmlInMessage.get = function () { return this._warnHtmlInMessage };
-  prototypeAccessors.warnHtmlInMessage.set = function (level) {
-      var this$1 = this;
-
-    var orgLevel = this._warnHtmlInMessage;
-    this._warnHtmlInMessage = level;
-    if (orgLevel !== level && (level === 'warn' || level === 'error')) {
-      var messages = this._getMessages();
-      Object.keys(messages).forEach(function (locale) {
-        this$1._checkLocaleMessage(locale, this$1._warnHtmlInMessage, messages[locale]);
-      });
-    }
-  };
-
-  prototypeAccessors.postTranslation.get = function () { return this._postTranslation };
-  prototypeAccessors.postTranslation.set = function (handler) { this._postTranslation = handler; };
-
-  VueI18n.prototype._getMessages = function _getMessages () { return this._vm.messages };
-  VueI18n.prototype._getDateTimeFormats = function _getDateTimeFormats () { return this._vm.dateTimeFormats };
-  VueI18n.prototype._getNumberFormats = function _getNumberFormats () { return this._vm.numberFormats };
-
-  VueI18n.prototype._warnDefault = function _warnDefault (locale, key, result, vm, values, interpolateMode) {
-    if (!isNull(result)) { return result }
-    if (this._missing) {
-      var missingRet = this._missing.apply(null, [locale, key, vm, values]);
-      if (isString(missingRet)) {
-        return missingRet
-      }
-    } else {
-      if (!this._isSilentTranslationWarn(key)) {
-        warn(
-          "Cannot translate the value of keypath '" + key + "'. " +
-          'Use the value of keypath as default.'
-        );
-      }
-    }
-
-    if (this._formatFallbackMessages) {
-      var parsedArgs = parseArgs.apply(void 0, values);
-      return this._render(key, interpolateMode, parsedArgs.params, key)
-    } else {
-      return key
-    }
-  };
-
-  VueI18n.prototype._isFallbackRoot = function _isFallbackRoot (val) {
-    return !val && !isNull(this._root) && this._fallbackRoot
-  };
-
-  VueI18n.prototype._isSilentFallbackWarn = function _isSilentFallbackWarn (key) {
-    return this._silentFallbackWarn instanceof RegExp
-      ? this._silentFallbackWarn.test(key)
-      : this._silentFallbackWarn
-  };
-
-  VueI18n.prototype._isSilentFallback = function _isSilentFallback (locale, key) {
-    return this._isSilentFallbackWarn(key) && (this._isFallbackRoot() || locale !== this.fallbackLocale)
-  };
-
-  VueI18n.prototype._isSilentTranslationWarn = function _isSilentTranslationWarn (key) {
-    return this._silentTranslationWarn instanceof RegExp
-      ? this._silentTranslationWarn.test(key)
-      : this._silentTranslationWarn
-  };
-
-  VueI18n.prototype._interpolate = function _interpolate (
-    locale,
-    message,
-    key,
-    host,
-    interpolateMode,
-    values,
-    visitedLinkStack
-  ) {
-    if (!message) { return null }
-
-    var pathRet = this._path.getPathValue(message, key);
-    if (isArray(pathRet) || isPlainObject(pathRet)) { return pathRet }
-
-    var ret;
-    if (isNull(pathRet)) {
-      /* istanbul ignore else */
-      if (isPlainObject(message)) {
-        ret = message[key];
-        if (!(isString(ret) || isFunction(ret))) {
-          if (!this._isSilentTranslationWarn(key) && !this._isSilentFallback(locale, key)) {
-            warn(("Value of key '" + key + "' is not a string or function !"));
-          }
-          return null
-        }
-      } else {
-        return null
-      }
-    } else {
-      /* istanbul ignore else */
-      if (isString(pathRet) || isFunction(pathRet)) {
-        ret = pathRet;
-      } else {
-        if (!this._isSilentTranslationWarn(key) && !this._isSilentFallback(locale, key)) {
-          warn(("Value of key '" + key + "' is not a string or function!"));
-        }
-        return null
-      }
-    }
-
-    // Check for the existence of links within the translated string
-    if (isString(ret) && (ret.indexOf('@:') >= 0 || ret.indexOf('@.') >= 0)) {
-      ret = this._link(locale, message, ret, host, 'raw', values, visitedLinkStack);
-    }
-
-    return this._render(ret, interpolateMode, values, key)
-  };
-
-  VueI18n.prototype._link = function _link (
-    locale,
-    message,
-    str,
-    host,
-    interpolateMode,
-    values,
-    visitedLinkStack
-  ) {
-    var ret = str;
-
-    // Match all the links within the local
-    // We are going to replace each of
-    // them with its translation
-    var matches = ret.match(linkKeyMatcher);
-    for (var idx in matches) {
-      // ie compatible: filter custom array
-      // prototype method
-      if (!matches.hasOwnProperty(idx)) {
-        continue
-      }
-      var link = matches[idx];
-      var linkKeyPrefixMatches = link.match(linkKeyPrefixMatcher);
-      var linkPrefix = linkKeyPrefixMatches[0];
-        var formatterName = linkKeyPrefixMatches[1];
-
-      // Remove the leading @:, @.case: and the brackets
-      var linkPlaceholder = link.replace(linkPrefix, '').replace(bracketsMatcher, '');
-
-      if (includes(visitedLinkStack, linkPlaceholder)) {
-        {
-          warn(("Circular reference found. \"" + link + "\" is already visited in the chain of " + (visitedLinkStack.reverse().join(' <- '))));
-        }
-        return ret
-      }
-      visitedLinkStack.push(linkPlaceholder);
-
-      // Translate the link
-      var translated = this._interpolate(
-        locale, message, linkPlaceholder, host,
-        interpolateMode === 'raw' ? 'string' : interpolateMode,
-        interpolateMode === 'raw' ? undefined : values,
-        visitedLinkStack
-      );
-
-      if (this._isFallbackRoot(translated)) {
-        if (!this._isSilentTranslationWarn(linkPlaceholder)) {
-          warn(("Fall back to translate the link placeholder '" + linkPlaceholder + "' with root locale."));
-        }
-        /* istanbul ignore if */
-        if (!this._root) { throw Error('unexpected error') }
-        var root = this._root.$i18n;
-        translated = root._translate(
-          root._getMessages(), root.locale, root.fallbackLocale,
-          linkPlaceholder, host, interpolateMode, values
-        );
-      }
-      translated = this._warnDefault(
-        locale, linkPlaceholder, translated, host,
-        isArray(values) ? values : [values],
-        interpolateMode
-      );
-
-      if (this._modifiers.hasOwnProperty(formatterName)) {
-        translated = this._modifiers[formatterName](translated);
-      } else if (defaultModifiers.hasOwnProperty(formatterName)) {
-        translated = defaultModifiers[formatterName](translated);
-      }
-
-      visitedLinkStack.pop();
-
-      // Replace the link with the translated
-      ret = !translated ? ret : ret.replace(link, translated);
-    }
-
-    return ret
-  };
-
-  VueI18n.prototype._createMessageContext = function _createMessageContext (values) {
-    var _list = isArray(values) ? values : [];
-    var _named = isObject(values) ? values : {};
-    var list = function (index) { return _list[index]; };
-    var named = function (key) { return _named[key]; };
-    return {
-      list: list,
-      named: named
-    }
-  };
-
-  VueI18n.prototype._render = function _render (message, interpolateMode, values, path) {
-    if (isFunction(message)) {
-      return message(this._createMessageContext(values))
-    }
-
-    var ret = this._formatter.interpolate(message, values, path);
-
-    // If the custom formatter refuses to work - apply the default one
-    if (!ret) {
-      ret = defaultFormatter.interpolate(message, values, path);
-    }
-
-    // if interpolateMode is **not** 'string' ('row'),
-    // return the compiled data (e.g. ['foo', VNode, 'bar']) with formatter
-    return interpolateMode === 'string' && !isString(ret) ? ret.join('') : ret
-  };
-
-  VueI18n.prototype._appendItemToChain = function _appendItemToChain (chain, item, blocks) {
-    var follow = false;
-    if (!includes(chain, item)) {
-      follow = true;
-      if (item) {
-        follow = item[item.length - 1] !== '!';
-        item = item.replace(/!/g, '');
-        chain.push(item);
-        if (blocks && blocks[item]) {
-          follow = blocks[item];
-        }
-      }
-    }
-    return follow
-  };
-
-  VueI18n.prototype._appendLocaleToChain = function _appendLocaleToChain (chain, locale, blocks) {
-    var follow;
-    var tokens = locale.split('-');
-    do {
-      var item = tokens.join('-');
-      follow = this._appendItemToChain(chain, item, blocks);
-      tokens.splice(-1, 1);
-    } while (tokens.length && (follow === true))
-    return follow
-  };
-
-  VueI18n.prototype._appendBlockToChain = function _appendBlockToChain (chain, block, blocks) {
-    var follow = true;
-    for (var i = 0; (i < block.length) && (isBoolean(follow)); i++) {
-      var locale = block[i];
-      if (isString(locale)) {
-        follow = this._appendLocaleToChain(chain, locale, blocks);
-      }
-    }
-    return follow
-  };
-
-  VueI18n.prototype._getLocaleChain = function _getLocaleChain (start, fallbackLocale) {
-    if (start === '') { return [] }
-
-    if (!this._localeChainCache) {
-      this._localeChainCache = {};
-    }
-
-    var chain = this._localeChainCache[start];
-    if (!chain) {
-      if (!fallbackLocale) {
-        fallbackLocale = this.fallbackLocale;
-      }
-      chain = [];
-
-      // first block defined by start
-      var block = [start];
-
-      // while any intervening block found
-      while (isArray(block)) {
-        block = this._appendBlockToChain(
-          chain,
-          block,
-          fallbackLocale
-        );
-      }
-
-      // last block defined by default
-      var defaults;
-      if (isArray(fallbackLocale)) {
-        defaults = fallbackLocale;
-      } else if (isObject(fallbackLocale)) {
-        /* $FlowFixMe */
-        if (fallbackLocale['default']) {
-          defaults = fallbackLocale['default'];
-        } else {
-          defaults = null;
-        }
-      } else {
-        defaults = fallbackLocale;
-      }
-
-      // convert defaults to array
-      if (isString(defaults)) {
-        block = [defaults];
-      } else {
-        block = defaults;
-      }
-      if (block) {
-        this._appendBlockToChain(
-          chain,
-          block,
-          null
-        );
-      }
-      this._localeChainCache[start] = chain;
-    }
-    return chain
-  };
-
-  VueI18n.prototype._translate = function _translate (
-    messages,
-    locale,
-    fallback,
-    key,
-    host,
-    interpolateMode,
-    args
-  ) {
-    var chain = this._getLocaleChain(locale, fallback);
-    var res;
-    for (var i = 0; i < chain.length; i++) {
-      var step = chain[i];
-      res =
-        this._interpolate(step, messages[step], key, host, interpolateMode, args, [key]);
-      if (!isNull(res)) {
-        if (step !== locale && "development" !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {
-          warn(("Fall back to translate the keypath '" + key + "' with '" + step + "' locale."));
-        }
-        return res
-      }
-    }
-    return null
-  };
-
-  VueI18n.prototype._t = function _t (key, _locale, messages, host) {
-      var ref;
-
-      var values = [], len = arguments.length - 4;
-      while ( len-- > 0 ) values[ len ] = arguments[ len + 4 ];
-    if (!key) { return '' }
-
-    var parsedArgs = parseArgs.apply(void 0, values);
-    if(this._escapeParameterHtml) {
-      parsedArgs.params = escapeParams(parsedArgs.params);
-    }
-
-    var locale = parsedArgs.locale || _locale;
-
-    var ret = this._translate(
-      messages, locale, this.fallbackLocale, key,
-      host, 'string', parsedArgs.params
-    );
-    if (this._isFallbackRoot(ret)) {
-      if (!this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {
-        warn(("Fall back to translate the keypath '" + key + "' with root locale."));
-      }
-      /* istanbul ignore if */
-      if (!this._root) { throw Error('unexpected error') }
-      return (ref = this._root).$t.apply(ref, [ key ].concat( values ))
-    } else {
-      ret = this._warnDefault(locale, key, ret, host, values, 'string');
-      if (this._postTranslation && ret !== null && ret !== undefined) {
-        ret = this._postTranslation(ret, key);
-      }
-      return ret
-    }
-  };
-
-  VueI18n.prototype.t = function t (key) {
-      var ref;
-
-      var values = [], len = arguments.length - 1;
-      while ( len-- > 0 ) values[ len ] = arguments[ len + 1 ];
-    return (ref = this)._t.apply(ref, [ key, this.locale, this._getMessages(), null ].concat( values ))
-  };
-
-  VueI18n.prototype._i = function _i (key, locale, messages, host, values) {
-    var ret =
-      this._translate(messages, locale, this.fallbackLocale, key, host, 'raw', values);
-    if (this._isFallbackRoot(ret)) {
-      if (!this._isSilentTranslationWarn(key)) {
-        warn(("Fall back to interpolate the keypath '" + key + "' with root locale."));
-      }
-      if (!this._root) { throw Error('unexpected error') }
-      return this._root.$i18n.i(key, locale, values)
-    } else {
-      return this._warnDefault(locale, key, ret, host, [values], 'raw')
-    }
-  };
-
-  VueI18n.prototype.i = function i (key, locale, values) {
-    /* istanbul ignore if */
-    if (!key) { return '' }
-
-    if (!isString(locale)) {
-      locale = this.locale;
-    }
-
-    return this._i(key, locale, this._getMessages(), null, values)
-  };
-
-  VueI18n.prototype._tc = function _tc (
-    key,
-    _locale,
-    messages,
-    host,
-    choice
-  ) {
-      var ref;
-
-      var values = [], len = arguments.length - 5;
-      while ( len-- > 0 ) values[ len ] = arguments[ len + 5 ];
-    if (!key) { return '' }
-    if (choice === undefined) {
-      choice = 1;
-    }
-
-    var predefined = { 'count': choice, 'n': choice };
-    var parsedArgs = parseArgs.apply(void 0, values);
-    parsedArgs.params = Object.assign(predefined, parsedArgs.params);
-    values = parsedArgs.locale === null ? [parsedArgs.params] : [parsedArgs.locale, parsedArgs.params];
-    return this.fetchChoice((ref = this)._t.apply(ref, [ key, _locale, messages, host ].concat( values )), choice)
-  };
-
-  VueI18n.prototype.fetchChoice = function fetchChoice (message, choice) {
-    /* istanbul ignore if */
-    if (!message || !isString(message)) { return null }
-    var choices = message.split('|');
-
-    choice = this.getChoiceIndex(choice, choices.length);
-    if (!choices[choice]) { return message }
-    return choices[choice].trim()
-  };
-
-  VueI18n.prototype.tc = function tc (key, choice) {
-      var ref;
-
-      var values = [], len = arguments.length - 2;
-      while ( len-- > 0 ) values[ len ] = arguments[ len + 2 ];
-    return (ref = this)._tc.apply(ref, [ key, this.locale, this._getMessages(), null, choice ].concat( values ))
-  };
-
-  VueI18n.prototype._te = function _te (key, locale, messages) {
-      var args = [], len = arguments.length - 3;
-      while ( len-- > 0 ) args[ len ] = arguments[ len + 3 ];
-
-    var _locale = parseArgs.apply(void 0, args).locale || locale;
-    return this._exist(messages[_locale], key)
-  };
-
-  VueI18n.prototype.te = function te (key, locale) {
-    return this._te(key, this.locale, this._getMessages(), locale)
-  };
-
-  VueI18n.prototype.getLocaleMessage = function getLocaleMessage (locale) {
-    return looseClone(this._vm.messages[locale] || {})
-  };
-
-  VueI18n.prototype.setLocaleMessage = function setLocaleMessage (locale, message) {
-    if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') {
-      this._checkLocaleMessage(locale, this._warnHtmlInMessage, message);
-    }
-    this._vm.$set(this._vm.messages, locale, message);
-  };
-
-  VueI18n.prototype.mergeLocaleMessage = function mergeLocaleMessage (locale, message) {
-    if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') {
-      this._checkLocaleMessage(locale, this._warnHtmlInMessage, message);
-    }
-    this._vm.$set(this._vm.messages, locale, merge(
-      typeof this._vm.messages[locale] !== 'undefined' && Object.keys(this._vm.messages[locale]).length
-        ? this._vm.messages[locale]
-        : {},
-      message
-    ));
-  };
-
-  VueI18n.prototype.getDateTimeFormat = function getDateTimeFormat (locale) {
-    return looseClone(this._vm.dateTimeFormats[locale] || {})
-  };
-
-  VueI18n.prototype.setDateTimeFormat = function setDateTimeFormat (locale, format) {
-    this._vm.$set(this._vm.dateTimeFormats, locale, format);
-    this._clearDateTimeFormat(locale, format);
-  };
-
-  VueI18n.prototype.mergeDateTimeFormat = function mergeDateTimeFormat (locale, format) {
-    this._vm.$set(this._vm.dateTimeFormats, locale, merge(this._vm.dateTimeFormats[locale] || {}, format));
-    this._clearDateTimeFormat(locale, format);
-  };
-
-  VueI18n.prototype._clearDateTimeFormat = function _clearDateTimeFormat (locale, format) {
-    for (var key in format) {
-      var id = locale + "__" + key;
-
-      if (!this._dateTimeFormatters.hasOwnProperty(id)) {
-        continue
-      }
-
-      delete this._dateTimeFormatters[id];
-    }
-  };
-
-  VueI18n.prototype._localizeDateTime = function _localizeDateTime (
-    value,
-    locale,
-    fallback,
-    dateTimeFormats,
-    key
-  ) {
-    var _locale = locale;
-    var formats = dateTimeFormats[_locale];
-
-    var chain = this._getLocaleChain(locale, fallback);
-    for (var i = 0; i < chain.length; i++) {
-      var current = _locale;
-      var step = chain[i];
-      formats = dateTimeFormats[step];
-      _locale = step;
-      // fallback locale
-      if (isNull(formats) || isNull(formats[key])) {
-        if (step !== locale && "development" !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {
-          warn(("Fall back to '" + step + "' datetime formats from '" + current + "' datetime formats."));
-        }
-      } else {
-        break
-      }
-    }
-
-    if (isNull(formats) || isNull(formats[key])) {
-      return null
-    } else {
-      var format = formats[key];
-      var id = _locale + "__" + key;
-      var formatter = this._dateTimeFormatters[id];
-      if (!formatter) {
-        formatter = this._dateTimeFormatters[id] = new Intl.DateTimeFormat(_locale, format);
-      }
-      return formatter.format(value)
-    }
-  };
-
-  VueI18n.prototype._d = function _d (value, locale, key) {
-    /* istanbul ignore if */
-    if (!VueI18n.availabilities.dateTimeFormat) {
-      warn('Cannot format a Date value due to not supported Intl.DateTimeFormat.');
-      return ''
-    }
-
-    if (!key) {
-      return new Intl.DateTimeFormat(locale).format(value)
-    }
-
-    var ret =
-      this._localizeDateTime(value, locale, this.fallbackLocale, this._getDateTimeFormats(), key);
-    if (this._isFallbackRoot(ret)) {
-      if (!this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {
-        warn(("Fall back to datetime localization of root: key '" + key + "'."));
-      }
-      /* istanbul ignore if */
-      if (!this._root) { throw Error('unexpected error') }
-      return this._root.$i18n.d(value, key, locale)
-    } else {
-      return ret || ''
-    }
-  };
-
-  VueI18n.prototype.d = function d (value) {
-      var args = [], len = arguments.length - 1;
-      while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
-
-    var locale = this.locale;
-    var key = null;
-
-    if (args.length === 1) {
-      if (isString(args[0])) {
-        key = args[0];
-      } else if (isObject(args[0])) {
-        if (args[0].locale) {
-          locale = args[0].locale;
-        }
-        if (args[0].key) {
-          key = args[0].key;
-        }
-      }
-    } else if (args.length === 2) {
-      if (isString(args[0])) {
-        key = args[0];
-      }
-      if (isString(args[1])) {
-        locale = args[1];
-      }
-    }
-
-    return this._d(value, locale, key)
-  };
-
-  VueI18n.prototype.getNumberFormat = function getNumberFormat (locale) {
-    return looseClone(this._vm.numberFormats[locale] || {})
-  };
-
-  VueI18n.prototype.setNumberFormat = function setNumberFormat (locale, format) {
-    this._vm.$set(this._vm.numberFormats, locale, format);
-    this._clearNumberFormat(locale, format);
-  };
-
-  VueI18n.prototype.mergeNumberFormat = function mergeNumberFormat (locale, format) {
-    this._vm.$set(this._vm.numberFormats, locale, merge(this._vm.numberFormats[locale] || {}, format));
-    this._clearNumberFormat(locale, format);
-  };
-
-  VueI18n.prototype._clearNumberFormat = function _clearNumberFormat (locale, format) {
-    for (var key in format) {
-      var id = locale + "__" + key;
-
-      if (!this._numberFormatters.hasOwnProperty(id)) {
-        continue
-      }
-
-      delete this._numberFormatters[id];
-    }
-  };
-
-  VueI18n.prototype._getNumberFormatter = function _getNumberFormatter (
-    value,
-    locale,
-    fallback,
-    numberFormats,
-    key,
-    options
-  ) {
-    var _locale = locale;
-    var formats = numberFormats[_locale];
-
-    var chain = this._getLocaleChain(locale, fallback);
-    for (var i = 0; i < chain.length; i++) {
-      var current = _locale;
-      var step = chain[i];
-      formats = numberFormats[step];
-      _locale = step;
-      // fallback locale
-      if (isNull(formats) || isNull(formats[key])) {
-        if (step !== locale && "development" !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {
-          warn(("Fall back to '" + step + "' number formats from '" + current + "' number formats."));
-        }
-      } else {
-        break
-      }
-    }
-
-    if (isNull(formats) || isNull(formats[key])) {
-      return null
-    } else {
-      var format = formats[key];
-
-      var formatter;
-      if (options) {
-        // If options specified - create one time number formatter
-        formatter = new Intl.NumberFormat(_locale, Object.assign({}, format, options));
-      } else {
-        var id = _locale + "__" + key;
-        formatter = this._numberFormatters[id];
-        if (!formatter) {
-          formatter = this._numberFormatters[id] = new Intl.NumberFormat(_locale, format);
-        }
-      }
-      return formatter
-    }
-  };
-
-  VueI18n.prototype._n = function _n (value, locale, key, options) {
-    /* istanbul ignore if */
-    if (!VueI18n.availabilities.numberFormat) {
-      {
-        warn('Cannot format a Number value due to not supported Intl.NumberFormat.');
-      }
-      return ''
-    }
-
-    if (!key) {
-      var nf = !options ? new Intl.NumberFormat(locale) : new Intl.NumberFormat(locale, options);
-      return nf.format(value)
-    }
-
-    var formatter = this._getNumberFormatter(value, locale, this.fallbackLocale, this._getNumberFormats(), key, options);
-    var ret = formatter && formatter.format(value);
-    if (this._isFallbackRoot(ret)) {
-      if (!this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {
-        warn(("Fall back to number localization of root: key '" + key + "'."));
-      }
-      /* istanbul ignore if */
-      if (!this._root) { throw Error('unexpected error') }
-      return this._root.$i18n.n(value, Object.assign({}, { key: key, locale: locale }, options))
-    } else {
-      return ret || ''
-    }
-  };
-
-  VueI18n.prototype.n = function n (value) {
-      var args = [], len = arguments.length - 1;
-      while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
-
-    var locale = this.locale;
-    var key = null;
-    var options = null;
-
-    if (args.length === 1) {
-      if (isString(args[0])) {
-        key = args[0];
-      } else if (isObject(args[0])) {
-        if (args[0].locale) {
-          locale = args[0].locale;
-        }
-        if (args[0].key) {
-          key = args[0].key;
-        }
-
-        // Filter out number format options only
-        options = Object.keys(args[0]).reduce(function (acc, key) {
-            var obj;
-
-          if (includes(numberFormatKeys, key)) {
-            return Object.assign({}, acc, ( obj = {}, obj[key] = args[0][key], obj ))
-          }
-          return acc
-        }, null);
-      }
-    } else if (args.length === 2) {
-      if (isString(args[0])) {
-        key = args[0];
-      }
-      if (isString(args[1])) {
-        locale = args[1];
-      }
-    }
-
-    return this._n(value, locale, key, options)
-  };
-
-  VueI18n.prototype._ntp = function _ntp (value, locale, key, options) {
-    /* istanbul ignore if */
-    if (!VueI18n.availabilities.numberFormat) {
-      {
-        warn('Cannot format to parts a Number value due to not supported Intl.NumberFormat.');
-      }
-      return []
-    }
-
-    if (!key) {
-      var nf = !options ? new Intl.NumberFormat(locale) : new Intl.NumberFormat(locale, options);
-      return nf.formatToParts(value)
-    }
-
-    var formatter = this._getNumberFormatter(value, locale, this.fallbackLocale, this._getNumberFormats(), key, options);
-    var ret = formatter && formatter.formatToParts(value);
-    if (this._isFallbackRoot(ret)) {
-      if (!this._isSilentTranslationWarn(key)) {
-        warn(("Fall back to format number to parts of root: key '" + key + "' ."));
-      }
-      /* istanbul ignore if */
-      if (!this._root) { throw Error('unexpected error') }
-      return this._root.$i18n._ntp(value, locale, key, options)
-    } else {
-      return ret || []
-    }
-  };
-
-  Object.defineProperties( VueI18n.prototype, prototypeAccessors );
-
-  var availabilities;
-  // $FlowFixMe
-  Object.defineProperty(VueI18n, 'availabilities', {
-    get: function get () {
-      if (!availabilities) {
-        var intlDefined = typeof Intl !== 'undefined';
-        availabilities = {
-          dateTimeFormat: intlDefined && typeof Intl.DateTimeFormat !== 'undefined',
-          numberFormat: intlDefined && typeof Intl.NumberFormat !== 'undefined'
-        };
-      }
-
-      return availabilities
-    }
-  });
-
-  VueI18n.install = install;
-  VueI18n.version = '8.24.1';
-
-  return VueI18n;
-
-})));

+ 0 - 133
lang/zh_cn.js

@@ -1,133 +0,0 @@
-module.exports =  {
-    hea:{
-		tj: '提交',
-		txms: '填写描述',
-		bcms: '补充描述',
-		scms: '请提供相关截图及描述,以便受援助方审核(最多两张)',
-		ptms: '请提供相关截图及描述,以便平台审核(最多两张)',
-		zc: '注册',
-		srsj: '请输入手机号',
-		srxmm: '请输入新密码',
-		srmm: '请输入密码',
-		srxmmt: '请重复输入新密码',
-		sryzm: '请输入验证码',
-		yzm: '验证码',
-		qrxg: '确定修改',
-		tjcg: '提交成功',
-		qdd: '请耐心等待审核',
-		backhome: '返回首页',
-		loading: '正在加载...',
-		nomore: '没有更多数据了',
-		sljzgd: '上拉显示更多',
-		vipzs: '黑钻VIP义工专属',
-		dsy: '度受益',
-		wyyz: '我要援助',
-		yz: '援助',
-		ywc: '已完成',
-		lksj: '升级黑钻VIP义工',
-		ljsj:'立即升级黑钻VIP义工',
-		ytg: '已通过',
-		wtg: '未通过',
-		dsh: '待审核',
-		ren: '人',
-		wdtdrs:'我的援助团人数',
-		fh:'返回',
-		ckxq:'查看详情',
-		jj: '拒绝',
-		ty: '同意',
-		ysh: '已审核',
-		wsh: '未审核',
-		wjmm: '忘记密码',
-		logininfo:'您未登录,是否马上登陆?',
-		yk: '游客',
-		lxkf: '联系客服',
-		fxhy: '帮扶好友',
-		wdtd: '我的援助团',
-		wdtg: '我的帮扶',
-		wdtgrs: '我的帮扶人数',
-		syzx:'受益中心',
-		login: '登录',
-		yy:'中文',
-		sy:'首页',
-		wd:'我的',
-		shlb:'审核',
-		zcqd:'再次确定',
-		nsfsjqrndbf:'1、您是否确认您的帮扶引荐人已升级VIP义工?',
-		rndbfytrmy:'2、如您的帮扶引荐人没有升级VIP义工,将无法收到您的援助。',
-		dndkzcqrjh:'3、当您点开再次确认键后,将无法更改受助方提供的账户',
-		nsfsjqrndbfcj:'1、您是否确认您的帮扶引荐人已升级初级义工?',
-		rndbfytrmycj:'2、如您的帮扶引荐人没有升级初级义工,将无法收到您的援助。',
-    },
-    foo:{
-		tx: '头像',
-		nc: '真实姓名',
-		yhzh:'银行账号',
-		scyh:'开户行',
-		zh:'义工账户',
-		jjlxrdh:'紧急联系人电话',
-		zfbskm:'支付宝收款码',
-		wxskm:'微信收款码',
-		tj:'提交',
-		tcdl:'退出登录',
-		sjyhskxxs:'受助方收款信息(上',
-		j:'度)',
-		cg:'成功',
-		sb:'失败',
-		shz:'审核中',
-		xtpt:'系统平台',
-		yzje:'援助金额',
-		yzfkxx:'援助付款信息',
-		scpz:'上传凭证',
-		qxz:'请选择TRC20',
-		zfcbdz:'复制充币地址',
-		qxxyzbbcjtxgpzbsc:'请线下援助并保存截图相关凭证并上传,每一度援助金分为两笔任意金额支付,总和',
-		ysclbjt:'元上传两笔截图',
-		xtptwsf:'系统平台维护费收款信息',
-		xtptwhf:'系统平台维护费',
-		ts:'提示',
-		yscpzsfcxsc:'已上传凭证,是否重新上传',
-		fzcg:'复制成功!',
-		fzsb:'复制失败',
-		yhzzyz:'银行转账援助',
-		yhzh:'银行账户',
-		fzzh:'复制账号',
-		khh:'开户行',
-		fzkhh:'复制开户行',
-		zfbsmyz:'支付宝扫码援助',
-		wxsmyz:'微信扫码援助',
-		wjmm:'忘记密码',
-		sz:'设置',
-		xq:'详情',
-		dkxx:'援助信息',
-		wdtd:'我的援助团',
-		wd:'我的',
-		wdtg:'我的帮扶',
-		sczl:'上传资料',
-		shlb:'审核列表',
-		wdewm:'我的二维码',
-		yjwndzzskf:'已经为您定制专属客服',
-		kfwx:'客服微信',
-		qx:'取消',
-		fzwx:'复制微信',
-		jtxzsxm:'请填写真实姓名',
-		jtxyhkh:'请填写银行卡号',
-		jtxkhh:'请填写开户行',
-		jtxjjlxrdh:'请填写紧急联系人电话',
-		ndqwtxskxx:'您当前未填写收款信息,是否前往填写?',
-		ndqwtxzsxm:'您当前真实姓名不正确,是否前往填写?',
-		bt:'必填',
-		zsxm:'真实姓名',
-		yhylsjh:'银行预留手机号',
-		fzsjh:'复制手机号',
-		tglb:'通告列表',
-		tgxq:'通告详情',
-		syzx:'受益中心',
-		dqyzfk:'当前援助付款',
-		dqszfk:'当前受援助付款',
-		yzfk:'援助付款',
-		syzfk:'受援助付款',
-		jhrs:'激活人数',
-		hzrs:'黑钻人数',
-		xzewm:'下载二维码',
-	}
-}

+ 1 - 6
main.js

@@ -1,10 +1,6 @@
 import Vue from 'vue'
 import store from './store'
 import App from './App'
-import uView from "uview-ui";
-import i18n from "./lang/i18n";
-
-Vue.use(uView);
 /**
  *  所有测试用数据均存放于根目录json.js
  *  
@@ -43,7 +39,6 @@ Vue.prototype.$api = {msg, prePage};
 App.mpType = 'app'
 
 const app = new Vue({
-    ...App,
-	i18n,
+    ...App
 })
 app.$mount()

+ 45 - 17
manifest.json

@@ -1,9 +1,9 @@
 {
-    "name" : "BYTC",
-    "appid" : "__UNI__F3A92A0",
+    "name" : "正一健康",
+    "appid" : "__UNI__A53E8B3",
     "description" : "",
-    "versionName" : "1.2.1",
-    "versionCode" : 121,
+    "versionName" : "1.0.9",
+    "versionCode" : 109,
     "transformPx" : false,
     "app-plus" : {
         /* 5+App特有相关 */
@@ -28,7 +28,8 @@
                     "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
                     "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>"
                 ],
-                "abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ]
+                "abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ],
+                "autoSdkPermissions" : true
             },
             "ios" : {
                 "idfa" : false
@@ -40,10 +41,14 @@
                 "geolocation" : {},
                 "payment" : {
                     "weixin" : {
-                        "__platform__" : [ "ios", "android" ],
+                        "__platform__" : [ "android" ],
                         "appid" : "wxe7542891b1e27ad1",
                         "UniversalLinks" : ""
-                    }
+                    },
+                    "alipay" : {
+                        "__platform__" : [ "ios", "android" ]
+                    },
+                    "appleiap" : {}
                 },
                 "push" : {},
                 "share" : {},
@@ -55,9 +60,13 @@
             "splashscreen" : {
                 "androidStyle" : "default",
                 "android" : {
-                    "hdpi" : "unpackage/startImage/480.9.png",
-                    "xhdpi" : "unpackage/startImage/720.9.png",
-                    "xxhdpi" : "unpackage/startImage/1080.9.png"
+                    "hdpi" : "unpackage/启动图/480.9.png",
+                    "xhdpi" : "unpackage/启动图/720.9.png",
+                    "xxhdpi" : "unpackage/启动图/1080.9.png"
+                },
+                "iosStyle" : "storyboard",
+                "ios" : {
+                    "storyboard" : "C:/Users/Administrator/Desktop/正一/正一.zip"
                 }
             },
             "icons" : {
@@ -105,8 +114,27 @@
             "urlCheck" : true
         }
     },
+    // "h5" : {
+    //     "title" : "商城",
+    //     "domain" : "",
+    //     "router" : {
+    //         "base" : "/index/",
+    //         "mode" : "hash"
+    //     },
+    //     "devServer" : {
+    //         "proxy" : {
+    //             "/api" : {
+    //                 "target" : "http://192.168.0.101/api",
+    //                 // "changeOrigin": true,
+    //                 "pathRewrite" : {
+    //                     "/api" : "" // rewrite path
+    //                 }
+    //             }
+    //         }
+    //     }
+    // }
     "h5" : {
-        "title" : "博赢同创",
+        "title" : "正一药业",
         "domain" : "",
         "router" : {
             "base" : "/index/",
@@ -115,14 +143,14 @@
         "devServer" : {
             "proxy" : {
                 "/api" : {
-                    // "target" : "http://www.boyingtc.com/api",
-                    "target" : "http://bowin.frp.liuniu946.com/api",
-                    // "changeOrigin": true,
-                    "pathRewrite" : {
-                        "/api" : "" // rewrite path
-                    }
+                    "target" : "http://shop.zhengyjk1994.com", //请求的目标域名
+                    "changeOrigin" : true,
+                    // "secure": false,
+                    "pathRewrite" : {}
                 }
             }
         }
     }
 }
+// "^/api": "/"
+

+ 339 - 106
pages.json

@@ -1,28 +1,13 @@
 {
-	"easycom": {
-			"^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
-		},
-	"pages": [
-		{
-			"path": "pages/index/video",
-			"style": {
-				"navigationBarTextStyle": "white",
-				"navigationBarBackgroundColor": "#000000",
-				"navigationStyle": "custom"
-		
-		
-			}
-		},
-		{
+	"pages": [{
 			"path": "pages/index/index",
 			"style": {
-				"navigationBarTextStyle": "white",
-				"navigationBarBackgroundColor": "#000000",
-				"navigationStyle": "custom"
-
-
+				"enablePullDownRefresh": true,
+				"navigationStyle": "custom",
+				"navigationBarTitleText": "商城首页"
 			}
 		},
+		//会员注册
 		{
 			"path": "pages/public/register",
 			"style": {
@@ -33,7 +18,8 @@
 					}
 				}
 			}
-		}, {
+		}, 
+		{
 			"path": "pages/public/login",
 			"style": {
 				"navigationBarTitleText": "登录",
@@ -44,6 +30,18 @@
 				}
 			}
 		},
+		//外部注册
+		{
+			"path": "pages/public/externalRegistered",
+			"style": {
+				"navigationBarTitleText": "注册",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		}, 
 		{
 			"path": "pages/public/wxLogin",
 			"style": {
@@ -66,6 +64,97 @@
 				}
 			}
 		},
+		{
+			"path": "pages/product/reply",
+			"style": {
+				"navigationBarTitleText": "商品评价",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/product/product",
+			"style": {
+				"navigationBarTitleText": "详情展示",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/product/list",
+			"style": {
+				"enablePullDownRefresh": true,
+				"navigationBarTitleText": "商品列表"
+			}
+		},
+		{
+			"path": "pages/user/selectList",
+			"style": {
+				"enablePullDownRefresh": true,
+				"navigationBarTitleText": "选择列表"
+			}
+		},
+		{
+			"path": "pages/product/search",
+			"style": {
+				"enablePullDownRefresh": true,
+				// #ifdef APP-PLUS
+				"navigationStyle": "custom",
+				// #endif
+				// #ifndef MP || APP-PLUS
+				"app-plus": {
+					"titleNView": {
+						"searchInput": {
+							"backgroundColor": "rgba(231, 231, 231,.7)",
+							"borderRadius": "16px",
+							"placeholder": "请输入关键字",
+							"disabled": false,
+							"placeholderColor": "#606266",
+							"align": "left"
+						},
+						"buttons": [{
+							"text": "搜索",
+							"fontSize": "14",
+							"color": "#303133",
+							"background": "rgba(0,0,0,0)",
+							"width": "40px"
+						}]
+					}
+				},
+				// #endif
+				"navigationBarTitleText": "搜索"
+			}
+		},
+		{
+			"path": "pages/set/set",
+			"style": {
+				"navigationBarTitleText": "设置"
+			}
+		},
+		{
+			"path": "pages/set/address",
+			"style": {
+				"navigationBarTitleText": "收货地址"
+			}
+		},
+		{
+			"path": "pages/set/addressManage",
+			"style": {
+				"navigationBarTitleText": ""
+			}
+		},
+		{
+			"path": "pages/set/phone",
+			"style": {
+				"navigationBarTitleText": "实名认证"
+			}
+		},
 		{
 			"path": "pages/set/password",
 			"style": {
@@ -73,75 +162,194 @@
 			}
 		},
 		{
-			"path": "pages/set/userinfo",
+				"path": "pages/set/userinfo",
+				"style": {
+					"navigationBarTitleText": "修改资料"
+				}
+		},
+		{
+			"path": "pages/cart/cart",
+			"style": {
+				"navigationBarTitleText": "购物车"
+			}
+		},
+
+		{
+			"path": "pages/user/user",
 			"style": {
-				"navigationBarTitleText": "设置",
-				"navigationBarBackgroundColor": "#000000",
-				"navigationBarTextStyle": "white"
+				// #ifndef MP-WEIXIN
+				"navigationStyle": "custom",
+				// #endif
+				"navigationBarTitleText": "个人中心"
 			}
 		},
 		{
-			"path": "pages/index/male",
+			"path": "pages/user/award",
 			"style": {
-				"navigationBarTitleText": "详情",
-				"navigationBarBackgroundColor": "#000000",
-				"navigationBarTextStyle": "white"
+				"navigationBarTitleText": "奖励明细",
+				"navigationBarBackgroundColor":"#D7EEB6",
+				"navigationBarTextStyle":"black"
 			}
 		},
 		{
-			"path": "pages/profit/profit",
+			"path": "pages/user/withdrawal",
 			"style": {
-				"navigationBarTitleText": "受益中心",
-				"navigationBarBackgroundColor": "#000000",
-				"navigationBarTextStyle": "white"
+				"navigationBarTitleText": "奖励提现"
 			}
 		},
+		// {
+		// 	"path": "pages/user/notice",
+		// 	"style": {
+		// 		"navigationBarTitleText": "通知"
+		// 	}
+		// },
+		// {
+		// 	"path": "pages/user/scoreAccumulate",
+		// 	"style": {
+		// 		"navigationBarTitleText": "积分明细"
+		// 	}
+		// },
 		{
-			"path": "pages/profit/fund",
+			"path": "pages/user/extension",
 			"style": {
-				"navigationBarTitleText": "详情",
-				"navigationBarBackgroundColor": "#000000",
-				"navigationBarTextStyle": "white"
+				// "navigationBarTextStyle": "black",
+				// "navigationBarBackgroundColor": "transparent",
+				// "app-plus": {
+				// 	"titleNView": {
+				// 		"type": "float",
+				// 		"titleText": "我的推广"
+				// 	}
+				// }
+				"navigationBarTitleText": "我的推广",
+				"navigationBarBackgroundColor":"#D7EEB6",
+				"navigationBarTextStyle":"black"
 			}
 		},
+		// {
+		// 	"path": "pages/user/applyMember",
+		// 	"style": {
+		// 		"navigationStyle": "custom",
+		// 		"navigationBarTitleText": "申请会员"
+		// 	}
+		// },
+		// {
+		// 	"path": "pages/user/minMember",
+		// 	"style": {
+		// 		"navigationStyle": "custom",
+		// 		"navigationBarTitleText": "我的会员"
+		// 	}
+		// },
 		{
-			"path": "pages/index/info",
+			"path": "pages/order/order",
 			"style": {
-				"navigationBarTitleText": "打款信息",
-				"navigationBarBackgroundColor": "#000000",
-				"navigationBarTextStyle": "white"
+				"navigationBarTitleText": "我的订单",
+				"app-plus": {
+					"bounce": "none"
+				}
 			}
 		},
 		{
-			"path": "pages/index/infoDetail",
+			"path": "pages/order/expressInfo",
 			"style": {
-				"navigationBarTitleText": "详情",
-				"navigationBarBackgroundColor": "#000000",
-				"navigationBarTextStyle": "white"
+				"navigationBarTitleText": "快递详情"
 			}
 		},
 		{
-			"path": "pages/user/team",
+			"path": "pages/order/orderDetail",
 			"style": {
-				"navigationBarTitleText": "我的团队",
-				"navigationBarBackgroundColor": "#000000",
-				"navigationBarTextStyle": "white"
+				"navigationBarTitleText": "订单详情",
+				"app-plus": {
+					"bounce": "none"
+				}
 			}
 		},
 		{
-			"path": "pages/user/user",
+			"path": "pages/order/evaluate",
 			"style": {
-				"navigationBarTitleText": "我的",
-				"navigationBarBackgroundColor": "#000000",
-				"navigationBarTextStyle": "white"
+				"navigationBarTitleText": "评论"
+			}
+		},
+		{
+			"path": "pages/order/orderRefund",
+			"style": {
+				"navigationBarTitleText": "申请退款"
+			}
+		},
+		{
+			"path": "pages/order/createOrder",
+			"style": {
+				"navigationBarTitleText": "创建订单"
+			}
+		},
+		{
+			"path": "pages/index/fugou",
+			"style": {
+				"navigationBarTitleText": "报单"
+			}
+		},
+		{
+			"path": "pages/money/pay",
+			"style": {
+				"navigationBarTitleText": "支付"
+			}
+		},
+		{
+			"path": "pages/money/paySuccess",
+			"style": {
+				"navigationBarTitleText": "支付成功"
+			}
+		},
+		{
+			"path": "pages/money/wallet",
+			"style": {
+				"navigationBarTitleText": "我的钱包",
+				"navigationBarBackgroundColor":"#D7EEB6",
+				"navigationBarTextStyle":"black"
+				
+			}
+		},
+		{
+			"path": "pages/money/account",
+			"style": {
+				"navigationBarTitleText": "提现账号"
+			}
+		},
+		{
+			"path": "pages/money/withdrawal",
+			"style": {
+				"navigationBarTitleText": "提现"
+			}
+		},
+		{
+			"path": "pages/money/recharge",
+			"style": {
+				"navigationBarTitleText": "充值"
+			}
+		},
+		{
+			"path": "pages/category/category",
+			"style": {
+				// #ifdef APP-PLUS
+				"navigationStyle": "custom",
+				// #endif
+				// #ifndef MP
+				"app-plus": {
+					"bounce": "none",
+					"titleNView": {
+						"searchInput": {
+							"backgroundColor": "rgba(231, 231, 231,.7)",
+							"borderRadius": "16px",
+							"placeholder": "输入关键词搜索",
+							"disabled": true,
+							"placeholderColor": "#606266",
+							"align": "left"
+						}
+					}
+				},
+				// #endif
+				"navigationBarTitleText": "分类"
 			}
 		},
-		
-
-
-
-
-
 		{
 			"path": "pages/redirect/redirect",
 			"style": {
@@ -154,67 +362,81 @@
 		{
 			"path": "pages/user/shareQrCode",
 			"style": {
-				"navigationBarTitleText": "我的二维码",
-				"navigationBarBackgroundColor": "#000000",
-				"navigationBarTextStyle": "white"
+				"navigationBarTitleText": "邀请好友"
 			}
 		},
 		{
-			"path": "pages/user/promotion",
+			"path": "pages/story/story",
 			"style": {
-				"navigationBarTextStyle": "white",
-				"app-plus": {
-					"titleNView": {
-						"backgroundColor": "#15130f",
-						"type": "float",
-						"titleText": "我的帮扶"
-					}
-				}
+				"navigationBarTitleText": "品牌故事"
 			}
 		},
-		
 		{
-			"path": "pages/user/applyList",
+			"path": "pages/story/storyDetail",
 			"style": {
-				"navigationBarTitleText": "审核列表",
-				"navigationBarTextStyle": "white",
-				"navigationBarBackgroundColor": "#000000"
+				"navigationStyle": "custom",
+				// "navigationBarTextStyle": "black",
+				"navigationBarTitleText": "",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
 			}
 		},
 		{
-			"path": "pages/index/list",
+			"path": "pages/user/jiedian",
 			"style": {
-				"navigationBarTitleText": "通告列表",
-				"navigationBarTextStyle": "white",
-				"navigationBarBackgroundColor": "#000000"
+				"navigationBarTitleText": "我的推广",
+				"navigationBarBackgroundColor":"#D7EEB6",
+				"navigationBarTextStyle":"black"
 			}
 		},
 		{
-			"path": "pages/index/article",
+			"path": "pages/user/integral",
 			"style": {
-				"navigationBarTitleText": "通告详情",
-				"navigationBarTextStyle": "white",
-				"navigationBarBackgroundColor": "#000000"
+				"navigationBarTitleText": "我的积分",
+				"navigationBarBackgroundColor":"#D7EEB6",
+				"navigationBarTextStyle":"black"
 			}
 		},
 		{
-			"path": "pages/user/upgrade",
+			"path": "pages/user/transfer",
 			"style": {
-				"navigationBarTitleText": "升级会员",
-				"navigationBarTextStyle": "white",
-				"navigationBarBackgroundColor": "#000000"
+				"navigationBarTitleText": "佣金转账",
+				"navigationBarBackgroundColor":"#fff",
+				"navigationBarTextStyle":"black"
+				
 			}
 		},
 		{
-			"path": "pages/upload/upload",
+			"path": "pages/user/registerList",
 			"style": {
-				"navigationBarTitleText": "上传资料",
-				"navigationBarTextStyle": "white",
-				"navigationBarBackgroundColor": "#000000"
+				"navigationBarTitleText": "报单列表",
+				"navigationBarBackgroundColor":"#D7EEB6",
+				"navigationBarTextStyle":"black"
+				
 			}
 		}
-	],
-
+	    ,{
+            "path" : "pages/user/selectList",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/public/externalRegistered",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+    ],
 	"globalStyle": {
 		"navigationBarTextStyle": "black",
 		"navigationBarTitleText": "uni-app",
@@ -222,27 +444,38 @@
 		"backgroundColor": "#f8f8f8"
 	},
 	"tabBar": {
-
-		"color": "#71614f",
-		"selectedColor": "#FAD6B0",
+		"color": "#C0C4CC",
+		"selectedColor": "#3F7C1F",
 		"borderStyle": "black",
-		"backgroundColor": "#15130f",
+		"backgroundColor": "#ffffff",
 		"list": [{
 				"pagePath": "pages/index/index",
-				"iconPath": "static/tabBar/home.png",
-				"selectedIconPath": "static/tabBar/home-action.png",
+				"iconPath": "static/tabBar/tab-home.png",
+				"selectedIconPath": "static/tabBar/tab-home-current.png",
 				"text": "首页"
 			},
 			{
-				"pagePath": "pages/user/applyList",
-				"iconPath": "static/tabBar/center.png",
-				"selectedIconPath": "static/tabBar/center-action.png",
-				"text": "审核列表"
+				"pagePath": "pages/category/category",
+				"iconPath": "static/tabBar/tab-cate.png",
+				"selectedIconPath": "static/tabBar/tab-cate-current.png",
+				"text": "分类"
+			},
+			{
+				"pagePath": "pages/story/story",
+				"iconPath": "static/tabBar/tab-store.png",
+				"selectedIconPath": "static/tabBar/tab-store-current.png",
+				"text": "品牌故事"
+			},
+			{
+				"pagePath": "pages/cart/cart",
+				"iconPath": "static/tabBar/tab-cart.png",
+				"selectedIconPath": "static/tabBar/tab-cart-current.png",
+				"text": "购物车"
 			},
 			{
 				"pagePath": "pages/user/user",
-				"iconPath": "static/tabBar/user.png",
-				"selectedIconPath": "static/tabBar/user-action.png",
+				"iconPath": "static/tabBar/tab-my.png",
+				"selectedIconPath": "static/tabBar/tab-my-current.png",
 				"text": "我的"
 			}
 		]

+ 535 - 0
pages/cart/cart.vue

@@ -0,0 +1,535 @@
+<template>
+	<view class="container">
+		<!-- 空白页 -->
+		<view v-if="!hasLogin || empty === true" class="empty">
+			<image src="/static/error/emptyCart.png" class="emptyImg" mode="aspectFit"></image>
+			<view v-if="hasLogin" class="empty-tips">
+				空空如也
+				<navigator class="navigator" v-if="hasLogin" url="../index/index" open-type="switchTab">随便逛逛></navigator>
+			</view>
+			<view v-else class="empty-tips">
+				空空如也
+				<view class="navigator" @click="navToLogin">去登陆></view>
+			</view>
+		</view>
+		<view v-else>
+			<!-- 购物车头部 -->
+			<view class="cart-hand flex">
+				<view class="hand-tit">
+					购物车共 <text>{{ ' '+cartList.length}} 件</text>商品
+				</view>
+				<view class="hand-btn" @click="clearCart()">
+					清空购物车
+				</view>
+			</view>
+			<!-- 列表 -->
+			<view class="cart-list">
+				<block v-for="(item, index) in cartList" :key="item.id">
+					<view class="cart-item" :class="{ 'b-b': index !== cartList.length - 1 }">
+						<view class="image-wrapper">
+							<image
+								:src="item.productInfo.image"
+								:class="[item.loaded]"
+								mode="aspectFill"
+								lazy-load
+								@load="onImageLoad('cartList', index)"
+								@error="onImageError('cartList', index)"
+							></image>
+							<view class="iconfont iconroundcheckfill checkbox" :class="{ checked: item.checked }" @click="check('item', index)"></view>
+						</view>
+						<view class="item-right">
+							<text class="clamp title">{{ item.productInfo.store_name }}</text>
+							<text class="attr">{{ item.productInfo.attrInfo.suk }}</text>
+							<text class="price">¥{{ item.productInfo.price }}</text>
+							<view class="munbox flex" >
+								<image src="../../static/img/reduce.png" mode="" @click="reduce(item,index)"></image>
+								<input type="number" :value="item.cart_num" disabled/>
+								<image src="../../static/img/add.png" mode="" @click="add(item)"></image>
+							</view>
+						</view>
+					</view>
+				</block>
+			</view>
+			<!-- 底部菜单栏 -->
+			<view class="action-section">
+				<view class="checkbox">
+					<view class="iconfont iconroundcheckfill icon-checked-box" @click="check('all')" :class="{ 'icon-checked': allChecked }"></view>
+				</view>
+				<view class="total-box">
+					<text class="price">¥{{ total }}</text>
+					
+				</view>
+				<button type="primary" class="no-border confirm-btn" @click="createOrder">去结算</button>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { getCartList, getCartNum, cartDel } from '@/api/user.js';
+import { mapState } from 'vuex';
+import uniNumberBox from '@/components/uni-number-box.vue';
+import { saveUrl, interceptor } from '@/utils/loginUtils.js';
+export default {
+	components: {
+		uniNumberBox
+	},
+	data() {
+		return {
+			total: 0, //总价格
+			allChecked: false, //全选状态  true|false
+			empty: false, //空白页现实  true|false
+			cartList: []
+		};
+	},
+	onShow() {
+		// 只有登录时才加载数据
+		if (this.hasLogin) {
+			this.loadData();
+		}
+	},
+	watch: {
+		//显示空白页
+		cartList(e) {
+			let empty = e.length === 0 ? true : false;
+			if (this.empty !== empty) {
+				this.empty = empty;
+			}
+		}
+	},
+	computed: {
+		...mapState('user', ['hasLogin'])
+	},
+	methods: {
+		reduce(item,index) {
+			if(item.cart_num == 1) {
+				uni.showModal({
+					content: '删除该商品?',
+					success: e => {
+						if (e.confirm) {
+							this.deleteCartItem(index)
+						}
+					}
+				});
+				
+			}else {
+				item.cart_num--
+				this.newNumberChange(item)
+			}
+		},
+		add(item) {
+			console.log(item)
+			if(item.productInfo.stock > item.cart_num) {
+				item.cart_num++
+				this.newNumberChange(item)
+			}else {
+				return 
+			}
+		},
+		//请求数据
+		async loadData() {
+			let obj = this;
+			getCartList({})
+				.then(function(e) {
+					// 获取当前购物车物品增加数量
+					let nub = obj.cartList.length;
+					// 获取之前对象数组
+					let aArray = obj.cartList.reverse();
+					// 获取返回数据对象数组
+					let bArray = e.data.valid.reverse();
+					obj.cartList = bArray
+						.map((item, ind) => {
+							// 设置返回数据默认为勾选状态
+							item.checked = true;
+							// 获取相同数组之前对象的数据
+							let carlist = aArray[ind];
+							// 判断之前是否已经加载完毕
+							if (carlist && carlist.loaded == 'loaded') {
+								item.loaded = 'loaded';
+							}
+							return item;
+						})
+						.reverse();
+					obj.calcTotal(); //计算总价
+				})
+				.catch(function(e) {
+					console.log(e);
+				});
+		},
+		//监听image加载完成
+		onImageLoad(key, index) {
+			// 修改载入完成后图片class样式
+			this.$set(this[key][index], 'loaded', 'loaded');
+		},
+		//监听image加载失败
+		onImageError(key, index) {
+			this[key][index].image = '/static/error/errorImage.jpg';
+		},
+		// 跳转到登录页
+		navToLogin() {
+			// 保存地址
+			saveUrl();
+			// 登录拦截
+			interceptor();
+		},
+		//选中状态处理
+		check(type, index) {
+			if (type === 'item') {
+				this.cartList[index].checked = !this.cartList[index].checked;
+			} else {
+				const checked = !this.allChecked;
+				const list = this.cartList;
+				list.forEach(item => {
+					item.checked = checked;
+				});
+				this.allChecked = checked;
+			}
+			this.calcTotal(type);
+		},
+		//数量
+		numberChange(data) {
+			let arr = this.cartList[data.index];
+			arr.cart_num = data.number;
+			getCartNum({ id: arr.id, number: data.number })
+				.then(e => {
+					console.log(e);
+				})
+				.catch(function(e) {
+					console.log(e);
+				});
+			this.calcTotal();
+		},
+		newNumberChange(item) {
+			getCartNum({ id: item.id, number: item.cart_num })
+				.then(e => {
+					console.log(e);
+				})
+				.catch(function(e) {
+					console.log(e);
+				});
+			this.calcTotal();
+		},
+		//删除
+		deleteCartItem(index) {
+			let list = this.cartList;
+			let row = list[index];
+			let id = row.id;
+			cartDel({
+				ids: id
+			});
+			this.cartList.splice(index, 1);
+			uni.hideLoading();
+			this.calcTotal();
+		},
+		//清空
+		clearCart() {
+			uni.showModal({
+				content: '清空购物车?',
+				success: e => {
+					if (e.confirm) {
+						let st = this.cartList.map(e => {
+							return e.id;
+						});
+						cartDel({
+							ids: st.join(',')
+						}).then(e => {
+							console.log(e);
+						});
+						this.cartList = [];
+					}
+				}
+			});
+		},
+		//计算总价
+		calcTotal() {
+			let list = this.cartList;
+			if (list.length === 0) {
+				this.empty = true;
+				return;
+			}
+			let total = 0;
+			let checked = true;
+			list.forEach(item => {
+				if (item.checked === true) {
+					total += item.productInfo.price * item.cart_num;
+				} else if (checked === true) {
+					checked = false;
+				}
+			});
+			this.allChecked = checked;
+			this.total = Number(total.toFixed(2));
+		},
+		//创建订单
+		createOrder() {
+			let list = this.cartList;
+			let goodsData = [];
+			list.forEach(item => {
+				if (item.checked) {
+					goodsData.push(item.id);
+				}
+			});
+
+			uni.navigateTo({
+				url: '/pages/order/createOrder?id=' + goodsData.join(',')
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+.container {
+	padding-bottom: 134rpx;
+	background-color: $page-color-base;
+	/* 空白页 */
+	.empty {
+		position: fixed;
+		left: 0;
+		top: 0;
+		width: 100%;
+		height: 100vh;
+		padding-bottom: 100rpx;
+		display: flex;
+		justify-content: center;
+		flex-direction: column;
+		align-items: center;
+		background: #fff;
+		.emptyImg {
+			width: 300rpx;
+			height: 250rpx;
+			margin-bottom: 30rpx;
+		}
+		.empty-tips {
+			display: flex;
+			font-size: $font-sm + 2rpx;
+			color: $font-color-disabled;
+			.navigator {
+				color: $uni-color-primary;
+				margin-left: 16rpx;
+			}
+		}
+	}
+}
+/* 购物车列表项 */
+.cart-item {
+	width: 710rpx;
+	height: 210rpx;
+	background: #FFFFFF;
+	box-shadow: 0px 0px 10rpx 0rpx rgba(0, 0, 0, 0.1);
+	border-radius: 10rpx;
+	margin: 20rpx auto;
+	
+	display: flex;
+	position: relative;
+	padding: 30rpx 26rpx 30rpx 80rpx;
+	.image-wrapper {
+		width: 150rpx;
+		height: 150rpx;
+		flex-shrink: 0;
+		position: relative;
+		image {
+			border-radius: 8rpx;
+		}
+	}
+	.checkbox {
+		position: absolute;
+		top: 0;
+		bottom: 0;
+		left: -65rpx;
+		margin: auto 0;
+		height: 50rpx;
+		z-index: 8;
+		font-size: 44rpx;
+		line-height: 1;
+		padding: 4rpx;
+		color: $font-color-disabled;
+		background: #fff;
+		border-radius: 50px;
+	}
+	.item-right {
+		display: flex;
+		flex-direction: column;
+		flex: 1;
+		overflow: hidden;
+		position: relative;
+		padding-left: 30rpx;
+		.munbox {
+			width: 144rpx;
+			height: 44rpx;
+			position: absolute;
+			bottom: 0;
+			right: 0;
+			input {
+				display: inline-block;
+				text-align: center;
+			}
+			image {
+				flex-shrink: 0;
+				width: 44rpx;
+				height: 44rpx;
+			}
+		}
+		.title,
+		.price {
+			font-size: $font-base + 2rpx;
+			color: $font-color-dark;
+			height: 40rpx;
+			line-height: 40rpx;
+		}
+		.attr {
+			font-size: $font-sm + 2rpx;
+			color: $font-color-light;
+			height: 50rpx;
+			line-height: 50rpx;
+			
+			font-size: 26rpx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #999999;
+		}
+		.price {
+			// height: 50rpx;
+			// line-height: 50rpx;
+			padding-top: 20rpx;
+			font-size: 34rpx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #FF4C4C;
+		}
+		.step {
+			margin-top: 20rpx;
+		}
+		.title {
+			font-size: 34rpx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #333333;
+		}
+	}
+	.del-btn {
+		padding: 4rpx 10rpx;
+		font-size: 34rpx;
+		height: 50rpx;
+		color: $font-color-light;
+	}
+}
+/* 底部栏 */
+.action-section {
+	/* #ifdef H5 */
+	margin-bottom: 100rpx;
+	/* #endif */
+	position: fixed;
+	left: 30rpx;
+	bottom: 30rpx;
+	z-index: 95;
+	display: flex;
+	align-items: center;
+	width: 690rpx;
+	height: 100rpx;
+	padding: 0 30rpx;
+	background: rgba(255, 255, 255, 0.9);
+	box-shadow: 0 0 20rpx 0 rgba(0, 0, 0, 0.5);
+	border-radius: 16rpx;
+	.checkbox {
+		height: 52rpx;
+		position: relative;
+		.icon-checked-box {
+			border-radius: 50rpx;
+			background-color: #ffffff;
+			width: 52rpx;
+			height: 100%;
+			position: relative;
+			z-index: 5;
+			font-size: 53rpx;
+			line-height: 1;
+			color: $font-color-light;
+		}
+		.icon-checked {
+			color: $base-color;
+		}
+	}
+	.clear-btn {
+		position: absolute;
+		left: 26rpx;
+		top: 0;
+		z-index: 4;
+		width: 0;
+		height: 52rpx;
+		line-height: 52rpx;
+		padding-left: 38rpx;
+		font-size: $font-base;
+		color: #fff;
+		background: $font-color-disabled;
+		border-radius: 0 50px 50px 0;
+		opacity: 0;
+		transition: 0.2s;
+		&.show {
+			opacity: 1;
+			width: 120rpx;
+		}
+	}
+	.total-box {
+		flex: 1;
+		display: flex;
+		flex-direction: column;
+		text-align: right;
+		padding-right: 40rpx;
+		
+		.price {
+			font-size: $font-lg;
+			color: $font-color-dark;
+		}
+		.coupon {
+			font-size: $font-sm;
+			color: $font-color-light;
+			text {
+				color: $font-color-dark;
+			}
+		}
+	}
+	.confirm-btn {
+		padding: 0 38rpx;
+		margin: 0;
+		border-radius: 100px;
+		height: 76rpx;
+		line-height: 76rpx;
+		font-size: $font-base + 2rpx;
+		background: $base-color;
+	}
+}
+/* 复选框选中状态 */
+.action-section .checkbox.checked,
+.cart-item .checkbox.checked {
+	color: $base-color;
+}
+.cart-hand {
+	width: 750rpx;
+	height: 88rpx;
+	background: #FFFFFF;
+	font-size: 30rpx;
+	font-family: PingFang SC;
+	font-weight: bold;
+	color: #333333;
+	line-height: 88rpx;
+	padding-left: 28rpx;
+	padding-right: 26rpx;
+	.hand-tit {
+		text {
+			color: #FF4C4C;
+		}
+	
+	}
+	.hand-btn {
+		width: 164rpx;
+		height: 62rpx;
+		border: 2rpx solid #FF4C4C;
+		border-radius: 31rpx;
+		font-size: 26rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		color: #FF4C4C;
+		line-height: 62rpx;
+		text-align: center;
+	}
+}
+</style>

+ 216 - 0
pages/category/category.vue

@@ -0,0 +1,216 @@
+<template>
+	<view class="content">
+		<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>
+		</scroll-view>
+	</view>
+</template>
+
+<script>
+import { getCategoryList } from '@/api/product.js';
+export default {
+	data() {
+		return {
+			sizeCalcState: false,
+			tabScrollTop: 0,
+			currentId: 9,
+			flist: [],
+		};
+	},
+	onLoad() {
+		this.loadData();
+	},
+	// 监听导航栏输入框点击事件
+	onNavigationBarSearchInputClicked(e) {
+		uni.navigateTo({
+			url: '/pages/product/search'
+		});
+	},
+	methods: {
+		// 载入数据
+		async loadData() {
+			let obj = this;
+			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;
+				}
+			}
+		},
+		//计算右侧栏每个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/product/list?fid='+this.currentId+'&sid='+sid+'&tid='+tid
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page,
+.content {
+	height: 100%;
+	background-color: #f8f8f8;
+}
+
+.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;
+		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;
+		}
+	}
+}
+
+.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>

+ 0 - 118
pages/index/article.vue

@@ -1,118 +0,0 @@
-<template>
-	<view class="center">
-		<view class="bg">
-			<image :src="src" mode=""></image>
-		</view>
-		<view class="title">
-			{{ title }}
-		</view>
-		<view class="main flex">
-			<view class="">{{ author }}</view>
-			
-			<view class="" style="color: #e7e7e8;"><span>{{time}}</span></view>
-		</view>
-		<view v-html="content" class="content">
-			{{ content }}
-		</view>
-	</view>
-</template>
-
-<script>
-import { details } from '@/api/index.js';
-import { mapState, mapMutations } from 'vuex';
-import { getTime } from '@/utils/rocessor.js'
-export default {
-	data(){
-		return{
-			src: '',
-			title: '',
-			content:'',
-			time:'',
-			author:'',
-			visit:''
-		}
-	},
-	computed: {
-		...mapState(['baseURL']),
-	},
-	onLoad(option) {
-		uni.setNavigationBarTitle({
-			title:this.$t('foo.tgxq')
-		})
-		this.loadData(option.id);
-	},
-	methods: {
-		async loadData(id){
-			let obj = this;
-			details({},id).then(e =>{
-				console.log(e);
-				let time = getTime(e.data.updatetime)
-				obj.src = this.baseURL + e.data.coverimage;
-				obj.title = e.data.title;
-				obj.content = e.data.content
-				obj.time = time;
-				obj.author = e.data.author;
-				obj.visit = e.data.visit;
-			})
-		}
-	}
-}
-</script>
-
-<style lang="scss">
-	.center{
-		height: 100%;
-	}
-	.bg{
-		width: 100%;
-		height: 474rpx;
-		image{
-			width: 100%;
-			height: 100%;
-		}
-	}
-	.main {
-		margin: 20rpx 50rpx;
-		font-size: 24rpx;
-		color: #fff;
-		span {
-			display: inline-block;
-			padding-right: 20rpx;
-		}
-	}
-	.title{
-		width: 90%;
-		margin: 20rpx auto 0;
-		font-size: 40rpx;
-		font-weight: 500;
-		color: #ffffff;
-		text-overflow: -o-ellipsis-lastline;
-		overflow: hidden;
-		display: -webkit-box;
-		-webkit-line-clamp: 2;
-		-webkit-box-orient: vertical;
-	}
-	.time {
-		width: 90%;
-		margin: 0 auto;
-		margin-top: 16rpx;
-		font-size: 24rpx;
-		font-weight: 500;
-		color: #ffffff;
-	}
-	.content{
-		width: 90%;
-		margin:0 auto;
-		margin-top: 20rpx;
-		font-size: 32rpx;
-		font-weight: 500;
-		color:#777777;
-	}
-	/deep/ .content{
-		img{
-			width: 100%;
-			height: 100%;
-		}
-	}
-</style>
-

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 99 - 0
pages/index/fugou.vue


+ 405 - 290
pages/index/index.vue

@@ -1,339 +1,454 @@
 <template>
-	<view class="content">
-		<view class="top-top"></view>
-		<view class="lange"><base-nav></base-nav></view>
-		<view class="top">
-			<image src="../../static/img/index/index.png" mode="" class="bg"></image>
-			<view class="tongz flex">
-				<view>
-					<view class="tongz-left flex" @click="goDetails">
-						<image class="image-left" src="../../static/img/ling.png" mode=""></image>
-						<u-notice-bar style="width: 100%;" mode="vertical" type="none" color="#ffffff" :volume-icon="false" :more-icon="true" :list="showList"></u-notice-bar>
+	<view class="container">
+		<view class="searchbackground">
+			<view class="backgroundimg">
+				<image src="../../static/image/background01.png" mode=""></image>
+			</view>
+		</view>
+		<view class="content flex">
+			<view class="input-box flex" @click="clickSearch">
+				<view class=" input-content flex">
+					<view class="iconfont iconsearch"></view>
+					<view class="input"><input type="text" disabled placeholder="请输入搜索内容" /></view>
+				</view>
+			</view>
+			<!-- 轮播图 -->
+			<swiper class="carousel" autoplay="true" :interval="5000" :duration="400">
+				<swiper-item @click="swiperClick" class="carousel-item" v-for="(item,index) in carouselList"
+					:key="index">
+					<image :src="item.pic"></image>
+				</swiper-item>
+				<view class="swiper-dots">
+				</view>
+			</swiper>
+			<view class="customs">
+				<image src="../../static/image/baodan.png" mode=""></image>
+			</view>
+			<view class="customs-content">
+				<view class="backgroundimg1">
+					<image src="../../static/image/background02.png" mode=""></image>
+				</view>
+				<view class="box">
+					<view class="customs-img">
+						<image :src="fugou.image" mode=""></image>
+					</view>
+					<view class="customstext">
+						<view class="customstext1">
+							<view class="customstext-title clamp">
+								{{fugou.store_name}}
+							</view>
+							<view class="customstext-product clamp">
+								{{fugou.store_info}}
+							</view>
+						</view>
+						<view class="customsprice">
+							<view class="customsprice-left">
+								健康价:¥
+							</view>
+							<view class="customsprice-between">
+								{{price}}
+							</view>
+							<view class="customsprice-right" @click="navTo('/pages/index/fugou')">
+								立即报单
+							</view>
+						</view>
 					</view>
 				</view>
+
 			</view>
-			<image src="../../static/img/index/yyxx.png" mode="" class="yz"></image>
-		</view>
-		<view class="box">
-			<view v-for="(item, index) in list" :key="index">
-				<view class="discounts">
-					<image :src="image[index]" mode="" class="discounts1"></image>
-					<view class="money">
-						¥
-						<text>{{ item.money * 2 }}</text>
+
+			<view class="customs">
+				<image src="../../static/image/jifen.png" mode=""></image>
+			</view>
+			<view class="jifen-content">
+				<view class="jifen-box" v-for="(item,index) in bastList" :key="index" @click="navTo('/pages/product/product?id=' + item.id)">
+					<view class="img">
+						<image :src="item.image" mode=""></image>
+					</view>
+					<view class="jifen-list">
+						<view class="box-title">
+							<view class="top clamp2">
+								{{item.store_name}}
+							</view>
+						</view>
+						<view class="box-price">
+							<view class="price-left">
+								¥{{item.price}}
+							</view>
+							<view class="price-right">
+								¥{{item.ot_price}}
+							</view>
+						</view>
 					</view>
-					<view class="baodan" @click="baodan(item.id)">{{ $t('hea.ckxq') }}</view>
 				</view>
 			</view>
 		</view>
-		<view class="index1">
-			<image src="../../static/img/index/index1.png" mode=""></image>
-			<view class="bottom" @click="nav('/pages/profit/fund')"><image src="../../static/img/index/bottom.png" mode=""></image></view>
-		</view>
-		<u-tabbar :list="tabbar" bg-color="#000" active-color="#FAD6B0" inactive-color="#71614f" change="change"></u-tabbar>
+	<!-- 	
+		<view class="fiexd">
+			<image src="../../static/image/background03.png" mode=""></image>
+		</view> -->
 	</view>
 </template>
 <script>
-import baseNav from '@/pages/public/nav.vue';
-import { mapState, mapMutations } from 'vuex';
-import { activityList } from '@/api/active.js';
-import { article } from '@/api/index.js';
-import { saveUrl, interceptor } from '@/utils/loginUtils.js';
-import { getApplyList } from '../../api/apply.js';
-import store from '../../store/index.js';
-export default {
-	components: {
-		baseNav
-	},
-	computed: {
-		...mapState('user', ['userInfo', 'orderInfo', 'hasLogin']),
-		...mapState(['lang'])
-	},
-	watch: {
-		lang(val) {
-			this.$set(this.tabbar[0], 'text', this.$t('hea.sy'));
-			this.$set(this.tabbar[1], 'text', this.$t('hea.shlb'));
-			this.$set(this.tabbar[2], 'text', this.$t('hea.wd'));
-		}
-	},
-	data() {
-		return {
-			list: [],
-			image: ['../../static/img/index/youhui1.png', '../../static/img/index/youhui2.png'],
-			revenueList: [],
-			tabbar: [
-				{
-					iconPath: '../../static/tabBar/home.png',
-					selectedIconPath: '../../static/tabBar/home-action.png',
-					text: this.$t('hea.sy'),
-					pagePath: '/pages/index/index'
-				},
-				{
-					iconPath: '../../static/tabBar/center.png',
-					selectedIconPath: '../../static/tabBar/center-action.png',
-					text: this.$t('hea.shlb'),
-					count: 0,
-					pagePath: '/pages/user/applyList'
-				},
-				{
-					iconPath: '../../static/tabBar/user.png',
-					selectedIconPath: '../../static/tabBar/user-action.png',
-					text: this.$t('hea.wd'),
-					pagePath: '/pages/user/user'
+	import { loadIndexs } from '@/api/index.js';
+	import {
+		mapState
+	} from 'vuex';
+
+	export default {
+		components: {
+
+		},
+		watch: {
+			//自适应swiper高度
+			checkid(newValue, oldValue) {
+				let obj = this;
+				if (newValue == 0) {
+					let bHeight = Math.ceil(obj.bastList.length / 2);
+					obj.swiperHeight = Math.ceil(obj.pageProportion * 520 * bHeight);
 				}
-			],
-			showList: []
-		};
-	},
-	onShow() {
-		if (this.hasLogin) {
-			this.loadData();
-		} else {
-			let obj = this;
-			uni.showModal({
-				title: obj.$t('hea.login'),
-				content: obj.$t('hea.logininfo'),
-				success: e => {
-					if (e.confirm) {
-						saveUrl();
-						interceptor();
-					}
-				},
-				fail: e => {
-					console.log(e);
+				if (newValue == 1) {
+					let bHeight = Math.ceil(obj.goodsList.length / 2);
+					obj.swiperHeight = Math.ceil(obj.pageProportion * 520 * bHeight);
 				}
-			});
-		}
-	},
-	methods: {
-		baodan(id) {
-			uni.navigateTo({
-				url: '/pages/index/infoDetail?id=' + id
-			});
-		},
-		loadData() {
-			activityList({}).then(({ data }) => {
-				this.list = data.list;
-			});
-			article({
-				page: 1,
-				limit: 10000,
-				category_id: 14
-			}).then(({ data }) => {
-				let arr = [];
-				data.list.forEach(e => {
-					arr.push(e.synopsis);
-				});
-				this.showList = arr;
-				console.log(this.showList);
-			});
-			getApplyList({
-				page: 1,
-				limit: 1,
-				status: 0
-			}).then(({ data }) => {
-				console.log(data,'1111')
-				this.tabbar[1].count = data.count
-			});
+				if (newValue == 2) {
+					let bHeight = Math.ceil(obj.bastBanner.length / 2);
+					obj.swiperHeight = Math.ceil(obj.pageProportion * 520 * bHeight);
+				}
+			},
+			// 初次加载页面高度时修改页面高度
+			
 		},
-		change(index) {
-			console.log(index);
+		data() {
+			return {
+				carouselList: [], //轮播列表
+				couponArray: '',
+				bastList: [],//精品推荐
+				fugou:'',//复购商品
+				price:'',//复购价格
+			}
 		},
-		nav(url) {
-			uni.navigateTo({
-				url
-			});
+		onLoad() {
+			this.loadData()
 		},
-		goDetails() {
-			uni.navigateTo({
-				url: '/pages/index/list'
-			});
+		methods: {
+			// 请求载入数据
+			async loadData() {
+				loadIndexs({})
+					.then(({ data }) => {
+						console.log(data,'dddd')
+						this.fugou = data.register_order;
+						this.price = data.register_price;
+						let goods = data.info;
+						this.carouselList = data.banner;
+						this.swiperLength = this.carouselList.length;
+						this.menusList = data.menus;
+						this.goodsList = goods.firstList; //最新商品
+						this.bastList = goods.bastList; //精品推荐
+						console.log(this.bastList, 'this.bastList6666666666666666666666');
+						this.bastBanner = data.benefit; //促销单品
+						this.$set(this, 'couponArray', data.couponList); //保存卡包券
+			
+						uni.stopPullDownRefresh();
+					})
+					.catch(e => {
+						uni.stopPullDownRefresh();
+					});
+			},
+			swiperClick() {
+				
+			},
+			// 点击搜索框
+			clickSearch() {
+				console.log('点击')
+				uni.navigateTo({
+					url: '/pages/product/search'
+				});
+			},
+			navTo(url) {
+				uni.navigateTo({
+					url
+				})
+			}
 		}
+
 	}
-};
 </script>
 
 <style lang="scss" scoped>
-page {
-	height: auto;
-}
-
-.content {
-	.top-top {
-		height: var(--status-bar-height);
-		width: 100%;
-		background: #000;
+	page {
+		height: auto;
+		background-color: #D4FDF9;
 	}
-	.top {
+
+	.container {
+		min-height: 100%;
+		height: auto;
+	}
+
+	.searchbackground {
 		position: relative;
-		display: flex;
-		flex-direction: column;
-		z-index: 10;
-		.bg {
-			width: 100%;
-			height: 900rpx;
-		}
-		.yz {
-			width: 90%;
-			height: 700rpx;
-			margin: 20rpx auto 0;
+
+		.backgroundimg {
+			position: absolute;
+			width: 750rpx;
+
+			image {
+				width: 100%;
+			}
 		}
 	}
 
-	.box {
-		.discounts {
-			margin: 20rpx 30rpx;
-			display: flex;
+	// .fiexd {
+	// 	position: fiexd;
+	// 	bottom: 0;
+	// 	width: 750rpx;
+	// 	height: 750rpx;
+
+	// 	image {
+	// 		width: 100%;
+	// 		height: 100%;
+	// 	}
+	// }
+
+	.content {
+		flex-direction: column;
+		justify-content: center;
+		height: 100%;
+
+		.input-box {
+			position: absolute;
+			left: 0;
+			top: 0;
+			margin: 66rpx 25rpx;
 			justify-content: center;
-			position: relative;
-			width: 690rpx;
-			height: 890rpx;
-			z-index: 30;
-			.discounts1 {
-				width: 100%;
-				height: 100%;
+			background: #FFFFFF;
+			box-shadow: 0rpx 1rpx 21rpx 0rpx rgba(255, 255, 255, 0.12);
+			border-radius: 35rpx;
+			width: 700rpx;
+			height: 70rpx;
+
+			.input {
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #C4C4C4;
+				line-height: 38rpx;
 			}
+		}
 
-			.money {
-				margin: 0 auto;
-				display: flex;
-				justify-content: center;
-				align-items: center;
-				top: 0;
-				margin-top: 250rpx;
-				font-size: 36rpx;
-				font-family: Source Han Sans CN;
-				font-weight: bold;
-				color: #c63535;
-				line-height: 30rpx;
-				position: absolute;
+		.carousel {
+			margin-top: 165rpx;
+			width: 700rpx;
+			height: 370rpx;
 
-				text {
-					font-size: 116rpx;
-					font-family: Source Han Sans CN;
-					font-weight: 800;
-					color: #c63535;
-					line-height: 115rpx;
+			.carousel-item {
+				image {
+					width: 100%;
+					height: 100%;
 				}
 			}
+		}
 
-			.baodan {
-				position: absolute;
-				top: 690rpx;
-				width: 300rpx;
-				height: 80rpx;
-				text-align: center;
-				line-height: 80rpx;
-				color: #ffffff;
-				background: #4e2c0e;
-				font-size: 40rpx;
-				border-radius: 10rpx;
+		.customs {
+			margin-top: 20rpx;
+			width: 700rpx;
+			height: 180rpx;
+
+			image {
+				width: 100%;
+				height: 100%;
 			}
 		}
 
-		.earnings-box {
-			z-index: 100;
+		.customs-content {
 			position: relative;
-			margin: 40rpx 30rpx;
-			width: 690rpx;
-			height: 1140rpx;
-			.earnings {
-				width: 100%;
-				height: 100%;
+			padding-top: 14rpx;
+
+			.backgroundimg1 {
+				width: 700rpx;
+				height: 300rpx;
+
+				image {
+					height: 100%;
+					width: 100%;
+				}
 			}
-			.text-box {
+
+			.box {
 				position: absolute;
-				top: 184rpx;
-				left: 110rpx;
-				.textDetail {
-					min-height: 134rpx;
-					max-height: 140rpx;
-					overflow: hidden;
-					padding-bottom: 64rpx;
-					.textDetail-title {
-						font-size: 28rpx;
-						font-family: PingFang SC;
-						font-weight: bold;
-						color: #4e2c0e;
-						line-height: 30rpx;
-						padding-bottom: 10rpx;
+				margin-top: -250rpx;
+				padding: 0 38rpx;
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+
+				.customs-img {
+					width: 200rpx;
+					height: 200rpx;
+
+					image {
+						width: 100%;
+						height: 100%;
 					}
+				}
+
+				.customstext {
+					margin-left: 14rpx;
+					height: 200rpx;
+					// display: flex;
+					// flex-direction: column;
+					// justify-content: space-around;
+					position: relative;
+					.customstext1 {
+						.customstext-title {
+							width: 350rpx;
+							font-size: 34rpx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #3F7C1F;
+							
+						}
 
-					.textDetail-content {
-						font-size: 30rpx;
-						font-family: PingFang SC;
-						font-weight: bold;
-						color: #4e2c0e;
-						line-height: 30rpx;
+						.customstext-product {
+							// margin-top: 25rpx;
+							width: 400rpx;
+							padding-top: 10rpx;
+							font-size: 26rpx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #ABD56F;
+						}
+					}
+
+					.customsprice {
+						position: absolute;
+						bottom: 0;
+						left: 0;
+						display: flex;
+						align-items: center;
+						justify-content: flex-start;
+						width: 100%;
+						.customsprice-left {
+							font-size: 28rpx;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #FF0000;
+							flex-shrink: 0;
+						}
+
+						.customsprice-between {
+							font-size: 42rpx;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #FF0000;
+							flex-shrink: 0;
+						}
+
+						.customsprice-right {
+							text-align: center;
+							width: 137rpx;
+							height: 52rpx;
+							line-height: 52rpx;
+							background: #3F7C1F;
+							border-radius: 26rpx;
+							font-size: 26rpx;
+							font-family: PingFang SC;
+							font-weight: 400;
+							color: #FFFFFF;
+							position: absolute;
+							right: 0;
+							bottom: 0;
+						}
 					}
 				}
 			}
 		}
-	}
 
-	.index1 {
-		margin-top: -200rpx;
-		width: 100%;
-		height: 713rpx;
-		position: relative;
-		image {
-			width: 100%;
-			height: 100%;
-		}
-		.bottom {
-			height: 200rpx;
-			width: 90%;
-			margin: 0 auto;
-			position: absolute;
-			bottom: 250rpx;
-			left: 5%;
-		}
-	}
-}
-.tongz {
-	width: 690rpx;
-	height: 70rpx;
-	margin: 10rpx auto 0;
-	padding: 18rpx 30rpx 18rpx 24rpx;
-	align-items: center;
-	position: relative;
-	background: #1f2020;
-	border-radius: 30rpx;
-	.tongz-bg {
-		position: absolute;
-		top: 0;
-		right: 0;
-		left: 0;
-		width: 690rpx;
-		height: 70rpx;
-		image {
-			width: 100%;
-			height: 100%;
-		}
-	}
-	.tongz-left {
-		width: 640rpx;
-		.image-left {
-			width: 40rpx;
-			height: 34rpx;
-		}
-		.tongz-font {
-			margin-left: 22rpx;
-			font-size: 28rpx;
-			font-family: Source Han Sans CN;
-			font-weight: 400;
-			color: #ffffff;
-		}
-	}
-	.tongz-right {
-		position: relative;
-		z-index: 11;
-		width: 12rpx;
-		height: 26rpx;
-		image {
-			width: 100%;
-			height: 100%;
+		.jifen-content {
+			width: 700rpx;
+			padding-bottom: 20rpx;
+			display: flex;
+			flex-wrap: wrap;
+			justify-content: space-between;
+			.jifen-box {
+				margin: 20rpx 0;
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				width: 342rpx;
+				height: 512rpx;
+				padding-top: 20rpx;
+				background: #E6FCFA;
+				box-shadow: 0px 7px 10px 1px #8BAFAB;
+				.img {
+					flex-shrink: 0;
+					// margin-top: 20rpx;
+					height: 312rpx;
+					width: 312rpx;
+					background-color: #eee;
+					image {
+						height: 100%;
+						width: 100%;
+					}
+				}
+				.jifen-list {
+					// margin-left: -80rpx;
+					width: 312rpx;
+					height: 100%;
+					position: relative;
+					.box-title {
+						.top {
+							margin: 20rpx 0 10rpx 0;
+							// padding: 20rpx 0 10rpx 0;
+							font-size: 30rpx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #3F7C1F;
+							line-height: 35rpx;
+						}
+						.button {
+							padding-bottom: 20rpx;
+							font-size: 26rpx;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #3F7C1F;
+							line-height: 35rpx;
+							opacity: 0.8;
+						}
+					}
+					.box-price {
+						display: flex;
+						align-items: center;
+						position: absolute;
+						bottom: 20rpx;
+						.pricebox {
+							height: 25rpx;
+							width: 25rpx;
+
+							image {
+								height: 100%;
+								width: 100%;
+							}
+						}
+						.price-left {
+							font-size: 36rpx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #FF0000;
+							line-height: 35rpx;
+						}
+						.price-right {
+							font-size: 26rpx;
+							font-family: PingFang SC;
+							font-weight: 500;
+							text-decoration: line-through;
+							color: #999999;
+							line-height: 35rpx;
+						}
+					}
+				}
+			}
 		}
 	}
-}
 </style>

+ 0 - 317
pages/index/info.vue

@@ -1,317 +0,0 @@
-<template>
-	<view class="center">
-		<view class="box" v-for="(item, index) in list" :key="index">
-			<view class="box-top flex">
-				<view class="title" v-if="item.system_get == 1">{{ $t('foo.xtptwsf')}}</view>
-				<view class="title" v-else >{{ $t('foo.sjyhskxxs') }}{{ index + 1 }}{{ $t('foo.j') }}</view>
-				<view class="type">
-					{{ item.status == '1' ? $t('foo.cg') : item.status == '2' ? $t('foo.sb') : item.status == '0' && item.voucherimages != null ? $t('foo.shz') : '' }}
-				</view>
-			</view>
-			<view class="main flex" style="border-bottom: 1px solid #F0F0F0;">
-				<view class="left flex">
-					<view class="avtor" v-if="item.system_get == 0"><image :src="item.checker.avatar || '../../static/error/missing-face.png'" mode=""></image></view>
-					<view class="main-info">
-						<view class="name" v-if="item.system_get == 1">{{ $t('foo.xtpt') }}</view>
-						<view class="name" v-else>{{ item.checker.nickname || 'null' }}</view>
-						<view class="phone" v-if="item.system_get == 0">{{ item.checker.mobile }}</view>
-					</view>
-				</view>
-				<view class="right" v-if="item.system_get == 0">{{ $t('foo.yzje') }}:¥{{ item.money * 1 }}</view>
-				<view class="right" v-if="item.system_get == 1">{{ $t('foo.xtptwhf')}}:{{ item.money * 1 }}U</view>
-			</view>
-			<view class="main flex" v-if="item.system_get == 0">
-				<view class="left flex">
-					<!-- <view class="bank"><image src="../../static/img/bank.png" mode=""></image></view>
-					<view class="main-info">
-						<view class="name">{{ item.checker.bank_of_deposit || '暂无' }}</view>
-						<view class="name">{{ item.checker.bank_card_no || '暂无' }}</view>
-					</view> -->
-					<view class="right-box" @click="navTo(item)" style="width: 228rpx;">{{ $t('foo.yzfkxx') }}</view>
-				</view>
-				<view class="right">
-					<view class="right-box" @click="nav(item,2)">{{ $t('foo.scpz') }}</view>
-				</view>
-			</view>
-			<view class="" v-if="item.system_get == 1">
-				<view class="change">{{ $t('foo.qxz') }}</view>
-				<view class="erweima">
-					<tki-qrcode
-						:cid="cid"
-						ref="qrcode"
-						:val="num"
-						:size="size"
-						:unit="unit"
-						:background="background"
-						:foreground="foreground"
-						:pdground="pdground"
-						:iconSize="iconSize"
-						:lv="lv"
-						:onval="onval"
-						:loadMake="loadMake"
-						:usingComponents="usingComponents"
-					/>
-				</view>
-				<view class="address">{{ num }}</view>
-				<view class="btn" style="margin-top: 50rpx;" @click="setData">{{ $t('foo.zfcbdz') }}</view>
-				<view class="btn" @click="nav(item,1)">{{ $t('foo.scpz') }}</view>
-			</view>
-		</view>
-
-		<view class="tishi">*{{ $t('foo.qxxyzbbcjtxgpzbsc') }}{{ list[0].money*1 || 0}}{{ $t('foo.ysclbjt') }}</view>
-	</view>
-</template>
-
-<script>
-import { activity } from '@/api/active.js';
-import tkiQrcode from '@/components/tki-qrcode/tki-qrcode.vue';
-export default {
-	data() {
-		return {
-			list: [],
-			id: '',
-			cid: 'cid',
-			size: 150,
-			unit: '150',
-			background: '#000000',
-			foreground: '#FFFFFF',
-			pdground: '#FFFFFF',
-			icon: '',
-			num: '',
-			iconSize: 40,
-			lv: 3,
-			onval: true,
-			loadMake: true,
-			usingComponents: true
-		};
-	},
-	onLoad(option) {
-		uni.setNavigationBarTitle({
-			title: this.$t('foo.dkxx')
-		});
-		this.id = option.id;
-		this.loadData();
-	},
-	methods: {
-		loadData() {
-			const obj = this;
-			activity({}, this.id).then(e => {
-				console.log(e);
-				if (e.data.check) {
-					this.list = e.data.check;
-					this.list.forEach(e => {
-						console.log(e);
-						if (e.checker.usdt_address) {
-							obj.num = e.checker.usdt_address;
-						}
-					});
-				} else {
-					uni.showToast({
-						title: e.msg,
-						duration: 1500,
-						mask: false,
-						icon: 'none'
-					});
-				}
-			});
-		},
-		nav(item,type) {
-			console.log(type)
-			if (item.voucherimages != null) {
-				uni.showModal({
-					title: this.$t('foo.ts'),
-					content: this.$t('foo.yscpzsfcxsc'),
-					success: function(res) {
-						if (res.confirm) {
-							console.log('用户点击确定');
-							uni.navigateTo({
-								url: '/pages/upload/upload?id=' + item.id + '&type=' + type
-							});
-						} else if (res.cancel) {
-							console.log('用户点击取消');
-						}
-					}
-				});
-			} else {
-				uni.navigateTo({
-					url: '/pages/upload/upload?id=' + item.id + '&type=' + type
-				});
-			}
-		},
-		navTo(item) {
-			console.log(item);
-			let ali = '';
-			let wechat = '';
-			let bank_card_no = '';
-			let bank_of_deposit = '';
-			let name ='';
-			let phone = '';
-			if (item.checker.ali) {
-				ali = item.checker.ali;
-			}
-			if (item.checker.wechat) {
-				wechat = item.checker.wechat;
-			}
-			if (item.checker.bank_card_no) {
-				bank_card_no = item.checker.bank_card_no;
-			}
-			if (item.checker.nickname) {
-				name = item.checker.nickname;
-			}
-			if (item.checker.ext_mobile) {
-				phone = item.checker.ext_mobile;
-			}
-			if (item.checker.bank_of_deposit) {
-				bank_of_deposit = item.checker.bank_of_deposit;
-			}
-			uni.navigateTo({
-				url: '/pages/index/male?ali=' + ali + '&wei=' + wechat + '&bank=' + bank_of_deposit + '&info=' + bank_card_no + '&name=' + name + '&phone=' + phone
-			});
-		},
-		setData() {
-			// #ifdef APP-PLUS
-			uni.setClipboardData({
-				data: this.num,
-				success: e => {
-					uni.showToast({
-						title: this.$t('this.fzcg')
-					});
-				},
-				fail(e) {
-					uni.showToast({
-						title: this.$t('this.fzsb'),
-						icon: false
-					});
-					console.log(e);
-				}
-			});
-			// #endif
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-.box {
-	padding-top: 10rpx;
-	color: #fad6b0;
-	.box-top {
-		border-bottom: 1px solid #f0f0f0;
-		padding: 10rpx 10rpx 10rpx 20rpx;
-		color: #fff;
-		font-size: 28rpx;
-		.title {
-			font-family: PingFang SC;
-			font-weight: 500;
-			color: #ffffff;
-		}
-	}
-
-	.main {
-		width: 90%;
-		margin: 0 auto;
-		padding: 20rpx;
-		align-items: center;
-		.left {
-			justify-content: flex-start;
-			.bank {
-				margin-left: 10rpx;
-				width: 48rpx;
-				height: 40rpx;
-				image {
-					width: 100%;
-					height: 100%;
-				}
-			}
-			.avtor {
-				background: #fff;
-				width: 80rpx;
-				height: 80rpx;
-				border-radius: 50%;
-				image {
-					border-radius: 50%;
-					width: 100%;
-					height: 100%;
-				}
-			}
-			.main-info {
-				margin-left: 16rpx;
-				.name {
-					font-size: 30rpx;
-					font-family: PingFang SC;
-					font-weight: 500;
-					color: #fad6b0;
-				}
-				.phone {
-					font-size: 22rpx;
-					font-family: PingFang SC;
-					font-weight: 400;
-					color: #fad6b0;
-					opacity: 0.8;
-				}
-			}
-		}
-		.right {
-			text-align: right;
-			font-size: 30rpx;
-			font-family: PingFang SC;
-			font-weight: 500;
-			color: #fad6b0;
-		}
-		.right-box {
-			overflow: hidden;
-			width: 188rpx;
-			height: 56rpx;
-			background: linear-gradient(-74deg, #ce9c6d, #ffecd6);
-			border-image: linear-gradient(115deg, #feebd5, #ffffff, #e1ad7d) 1 1;
-			box-shadow: 3rpx 4rpx 5rpx 0px rgba(151, 118, 74, 0.5);
-			border-radius: 28rpx;
-			font-size: 30rpx;
-			font-family: PingFang SC;
-			font-weight: 500;
-			color: #643912;
-			text-align: center;
-			line-height: 56rpx;
-		}
-	}
-}
-.tishi {
-	padding: 20rpx 0 120rpx 24rpx;
-	color: #fff;
-	font-size: 26rpx;
-	font-family: PingFang SC;
-	font-weight: 500;
-	color: #ffffff;
-}
-.change {
-	padding: 10rpx 0 0 40rpx;
-	font-size: 30rpx;
-}
-.erweima {
-	margin: 16rpx auto 0;
-	width: 300rpx;
-	height: 300rpx;
-	image {
-		width: 100%;
-		height: 100%;
-	}
-}
-.address {
-	margin-top: 20rpx;
-	text-align: center;
-}
-.btn {
-	margin: 20rpx auto 0;
-	width: 500rpx;
-	height: 60rpx;
-	background: linear-gradient(-74deg, #ce9c6d, #ffecd6);
-	border-image: linear-gradient(115deg, #feebd5, #ffffff, #e1ad7d) 1 1;
-	border-radius: 30px;
-	line-height: 60rpx;
-	text-align: center;
-	font-size: 26rpx;
-	font-family: PingFang SC;
-	font-weight: 500;
-	color: #643912;
-}
-</style>

+ 0 - 426
pages/index/infoDetail.vue

@@ -1,426 +0,0 @@
-<template>
-	<view class="center">
-		<view class="box">
-			<view class="discounts">
-				<view class="title">{{ $t('hea.yz') }}:</view>
-				<view class="money">
-					¥
-					<text>{{ item.money * 2 || 0 }}</text>
-				</view>
-			</view>
-			<view class="main-box">
-				<view class="main-title">
-					<view class="main-title-image"><image class="image" src="../../static/icon/title.png" mode=""></image></view>
-					<view class="main-title-font" v-if="item.v2_layer == 0">{{ item.name }}</view>
-					<view class="main-title-font" v-else-if="(status == '1' && item.income * 1 >= item.v2_limit * 1 && item.v2_layer != 0) || status == '2'">黑钻VIP义工受益</view>
-					<view class="main-title-font" v-else>VIP义工受益</view>
-				</view>
-				<view class="main">
-					<view class="main-item" v-for="(ls, index) in revenueList">
-						<view class="main-image"><image :src="image[index]" mode=""></image></view>
-						<view class="main-font">
-							<view class="textDetail-title">{{ index < 2 ? index + 1 + $t('hea.dsy') : index + 1 + $t('hea.dsy') + '(' + $t('hea.vipzs') + ')' }}</view>
-							<view class="textDetail-content">{{ ls }}</view>
-						</view>
-					</view>
-				</view>
-			</view>
-		</view>
-
-		<view class="baodan" @click="baodan(id)" v-if="status == '0'">{{ $t('hea.wyyz') }}</view>
-		<view class="baodan1" @click="baodan(id)" v-if="status == '1' && item.income * 1 < item.v2_limit * 1 && item.v2_layer != 0">{{ $t('hea.lksj') }}</view>
-		<view class="baodan" @click="baodan(id)" v-if="status == '1' && item.income * 1 >= item.v2_limit * 1 && item.v2_layer != 0">{{ $t('hea.ljsj') }}</view>
-		<view class="baodan" v-if="status == '2' || (status == '1' && item.v2_layer == 0)" style="background: #020202;">{{ $t('hea.ywc') }}</view>
-		<uni-popup ref="popup" type="center">
-			<view class="popup-box">
-				<view class="img"><image src="../../static/img/tishi.png" mode=""></image></view>
-				<view class="mian">
-					<view class="font" v-if="item.v2_layer == 0">
-						{{ $t('hea.nsfsjqrndbfcj') }}
-						<br />
-						{{ $t('hea.rndbfytrmycj') }}
-						<br />
-						{{ $t('hea.dndkzcqrjh') }}
-						<br />
-					</view>
-					<view class="font" v-else>
-						{{ $t('hea.nsfsjqrndbf') }}
-						<br />
-						{{ $t('hea.rndbfytrmy') }}
-						<br />
-						{{ $t('hea.dndkzcqrjh') }}
-						<br />
-					</view>
-					<view class="comfirm-box">
-						<view class="cancel" @click="cancel">{{ $t('foo.qx') }}</view>
-						<view class="comfirm" @click="confirm">{{ countDown == 0 ? $t('hea.zcqd') : countDown }}</view>
-					</view>
-				</view>
-			</view>
-		</uni-popup>
-	</view>
-</template>
-
-<script>
-import uniPopup from '@/components/uni-popup/uni-popup.vue';
-import { mapState, mapMutations } from 'vuex';
-import { activitys } from '@/api/active.js';
-export default {
-	data() {
-		return {
-			id: '',
-			revenueList: [],
-			item: '',
-			status: '',
-			show1: false,
-			time: '', //保存倒计时对象
-			countDown: 0, //倒计时
-			image: [
-				'../../static/icon/1.png',
-				'../../static/icon/2.png',
-				'../../static/icon/3.png',
-				'../../static/icon/4.png',
-				'../../static/icon/5.png',
-				'../../static/icon/6.png',
-				'../../static/icon/7.png'
-			] //七层的图片
-		};
-	},
-	watch: {
-		// 监听倒计时
-		countDown(i) {
-			if (i == 0) {
-				clearInterval(this.time);
-			}
-		}
-	},
-	components: {
-		uniPopup
-	},
-	computed: {
-		...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
-	},
-	onLoad(option) {
-		uni.setNavigationBarTitle({
-			title: this.$t('foo.xq')
-		});
-		this.id = option.id;
-		this.loadData();
-	},
-	methods: {
-		loadData() {
-			const obj = this;
-			activitys({}, this.id).then(e => {
-				console.log(e);
-				obj.item = e.data;
-
-				if (e.data.my_join) {
-					obj.status = e.data.my_join.status;
-				} else {
-					obj.status = '0';
-					obj.isU = false;
-				}
-				let i = e.data.v1_layer + e.data.v2_layer;
-				if (e.data.v2_layer && (obj.status == '0' || (obj.status == '1' && e.data.income * 1 < e.data.v2_limit * 1))) {
-					i = e.data.v1_layer;
-				}
-
-				let money = e.data.money * 1;
-				let money1 = e.data.money * 1;
-				let people = 1;
-				for (let j = 0; j < i; j++) {
-					people = people * 5;
-					money = money * 1 * 5;
-					obj.revenueList[j] = people + '人x' + money1 + '元=' + this.unit(money);
-				}
-			});
-		},
-		//换算单位
-		unit(num) {
-			let i = 0;
-			if (num / 10000 >= 1) {
-				i = num / 10000 + '万元';
-				if (num / 100000000 >= 1) {
-					i = num / 100000000 + '亿元';
-				}
-			} else {
-				i = num + '元';
-			}
-			return i;
-		},
-		// 弹窗 - 取消
-		cancel() {
-			this.countDown = 0;
-			this.$refs.popup.close();
-		},
-		confirm() {
-			if (this.countDown != 0) {
-				return;
-			}
-			this.$refs.popup.close();
-			uni.navigateTo({
-				url: '/pages/index/info?id=' + this.id
-			});
-		},
-		baodan(id) {
-			const obj = this;
-			console.log(this.userInfo.nickname, '11111');
-			let a =/[0-9]{3}[*]{4}[0-9]{4}/;
-			
-			if (a.test(this.userInfo.nickname)){
-				uni.showModal({
-					title: this.$t('foo.ts'),
-					content: this.$t('foo.ndqwtxzsxm'),
-					success: function(res) {
-						if (res.confirm) {
-							uni.navigateTo({
-								url: '/pages/set/userinfo'
-							});
-						} else if (res.cancel) {
-							console.log('用户点击取消');
-						}
-					}
-				});
-			}else {
-				if (!this.userInfo.bank_card_no && !this.userInfo.bank_of_deposit && this.userInfo.bank_card_no == '' && this.userInfo.bank_of_deposit == '') {
-					uni.showModal({
-						title: this.$t('foo.ts'),
-						content: this.$t('foo.ndqwtxskxx'),
-						success: function(res) {
-							if (res.confirm) {
-								uni.navigateTo({
-									url: '/pages/set/userinfo'
-								});
-							} else if (res.cancel) {
-								console.log('用户点击取消');
-							}
-						}
-					});
-				} else {
-					if (this.status == '1' && this.item.income < this.item.v2_limit * 1) {
-						this.$api.msg('当前援助额度不足以升级黑钻VIP义工');
-						return;
-					}
-					if (this.status == '0') {
-						// 判断是否在倒计时
-						if (obj.countDown > 0) {
-							return false;
-						} else {
-							obj.countDown = 15;
-							obj.time = setInterval(() => {
-								obj.countDown--;
-							}, 1000);
-							//调用验证码接口
-							this.$refs.popup.open();
-						}
-					} else {
-						uni.navigateTo({
-							url: '/pages/index/info?id=' + id
-						});
-					}
-			}
-				// uni.navigateTo({
-				// 	url: '/pages/index/info?id=' + id
-				// });
-			}
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-.center {
-	padding-bottom: 50rpx;
-}
-.box {
-	.discounts {
-		margin: 0 30rpx;
-		position: relative;
-		padding: 20rpx;
-		background-color: #1f2020;
-		border-radius: 10rpx;
-		.title {
-			width: 100%;
-			text-align: left;
-			color: #e6c3a1;
-		}
-		.money {
-			margin-top: 30rpx;
-			padding-bottom: 30rpx;
-			font-size: 32rpx;
-			font-family: Source Han Sans CN;
-			font-weight: bold;
-			color: #c63535;
-			width: 100%;
-			text-align: center;
-			text {
-				font-size: 116rpx;
-				font-family: Source Han Sans CN;
-				font-weight: 800;
-				color: #c63535;
-				line-height: 115rpx;
-			}
-		}
-	}
-
-	.zhushi {
-		color: #e6c3a1;
-		padding: 20rpx 40rpx;
-	}
-}
-.baodan {
-	width: 452rpx;
-	height: 80rpx;
-	margin: 50rpx auto 0;
-	text-align: center;
-	line-height: 80rpx;
-	color: #ffffff;
-	background: #4e2c0e;
-	font-size: 40rpx;
-	border-radius: 10rpx;
-}
-.baodan1 {
-	width: 452rpx;
-	height: 80rpx;
-	margin: 50rpx auto 0;
-	text-align: center;
-	line-height: 80rpx;
-	color: #ffffff;
-	background: #9f9f9f;
-	font-size: 40rpx;
-	border-radius: 10rpx;
-}
-.main-box {
-	margin: 80rpx 30rpx 0;
-	position: relative;
-	padding: 20rpx;
-	background-color: #1f2020;
-	border-radius: 10rpx;
-	.main-title {
-		width: 400rpx;
-		height: 80rpx;
-		margin: -60rpx auto 0;
-		border-radius: 50rpx;
-		position: relative;
-		.main-title-image {
-			position: absolute;
-			left: 0;
-			top: 0;
-			width: 400rpx;
-			height: 80rpx;
-			.image {
-				width: 100%;
-				height: 100%;
-				border-radius: 50rpx;
-			}
-		}
-
-		.main-title-font {
-			position: relative;
-			z-index: 10;
-			text-align: center;
-			line-height: 80rpx;
-			font-size: 46rpx;
-			font-weight: bold;
-			color: #54300f;
-		}
-	}
-	.main {
-		padding: 40rpx 0;
-		.main-item {
-			margin-top: 20rpx;
-			width: 100%;
-			padding: 14rpx;
-			background: #e6c3a1;
-			position: relative;
-			border-radius: 20rpx;
-			.main-image {
-				position: absolute;
-				top: -2rpx;
-				left: -2rpx;
-				width: 110rpx;
-				height: 110rpx;
-				image {
-					width: 100%;
-					height: 100%;
-				}
-			}
-			.main-font {
-				font-size: 28rpx;
-				padding-left: 80rpx;
-			}
-		}
-	}
-}
-.popup-box {
-	width: 650rpx;
-	padding-bottom: 40rpx;
-	background-color: #ffffff;
-	border-radius: 20rpx;
-	position: relative;
-	.img {
-		position: relative;
-		top: -56rpx;
-		left: 0;
-		width: 650rpx;
-		height: 132rpx;
-		display: flex;
-		justify-content: center;
-		image {
-			border-radius: 20rpx 20rpx 0 0;
-			width: 450rpx;
-			height: 132rpx;
-		}
-	}
-
-	.mian {
-		margin-top: -44rpx;
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		// padding: 32rpx 32rpx;
-		background-color: #ffffff;
-		border-radius: 0 0 20rpx 20rpx;
-		text-align: center;
-		padding: 30rpx;
-		.font {
-			text-align: left;
-			line-height: 54rpx;
-			color: #7e7457;
-			font-size: 30rpx;
-		}
-
-		.comfirm-box {
-			margin-top: 52rpx;
-			display: flex;
-			// margin-bottom: 32rpx;
-
-			// justify-content: space-around;
-			.cancel {
-				display: flex;
-				align-items: center;
-				justify-content: center;
-				width: 250rpx;
-				height: 80rpx;
-				border: 1px solid #dcc786;
-				border-radius: 10rpx;
-				font-size: 32rpx;
-				color: #605128;
-			}
-
-			.comfirm {
-				margin-left: 50rpx;
-				display: flex;
-				align-items: center;
-				justify-content: center;
-				width: 250rpx;
-				height: 80rpx;
-				background: linear-gradient(-90deg, #d1ba77 0%, #f7e8ad 100%);
-				border-radius: 10rpx;
-				font-size: 32rpx;
-				color: #605128;
-			}
-		}
-	}
-}
-</style>

+ 0 - 101
pages/index/list.vue

@@ -1,101 +0,0 @@
-<template>
-	<view class="container">
-		<view v-if="list.length > 0" class="list-box flex_item" v-for="(ls,index) in list" :key='index' @click="nav(index)">
-			<image :src="baseURL + ls.coverimage"></image>
-			<view class="list-item">
-				<view class="title ellipsis">{{ls.title}}</view>
-				<view class="time">{{ls.time}}</view>
-			</view>
-		</view>
-		<!-- <view class="empty-box" v-show="list.length === 0"><u-empty></u-empty></view> -->
-	</view>
-</template>
-<script>
-import { article } from '@/api/index.js';
-import { mapState, mapMutations } from 'vuex';
-import { getTime } from '@/utils/rocessor.js';
-export default {
-	data() {
-		return {
-			list:''
-		};
-	},
-	onLoad(option){
-		uni.setNavigationBarTitle({
-			title:this.$t('foo.tglb')
-		})
-		this.loadData();
-	},
-	onShow() {
-		
-	},
-	computed: {
-		...mapState(['baseURL']),
-		...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
-	},
-	methods: {
-		// 请求载入数据
-		async loadData() {
-			let obj = this;
-			article({
-				page:1,
-				limit:10000,
-				category_id: 14
-			}).then(({ data }) => {
-				console.log(data)
-				data.list.forEach(e =>{
-					console.log(e)
-					e.time = getTime(e.updatetime)
-				})
-				obj.list = data.list;
-			});
-		},
-		nav(index){
-			uni.navigateTo({
-				url: '/pages/index/article?id=' + this.list[index].id
-			})
-		},
-	}
-};
-</script>
-
-<style lang="scss">
-page {
-	min-height: 100%;
-	.container {
-		width: 100%;
-		padding: 25rpx 27rpx;
-		
-	}
-}
-.empty-box{
-	margin-top: 100rpx;
-	width: 100%;
-	height: 500rpx;
-}
-.list-box{
-	border-bottom: 1rpx solid #E3E3E3;
-	margin-bottom: 25rpx;
-	padding-bottom: 25rpx;
-	image{
-		width: 200rpx;
-		height: 160rpx;
-		border-radius: 15rpx;
-	}
-	.list-item{
-		padding-left: 16rpx;
-		width: 80%;
-		.title{
-			height: 80rpx;
-			color: #FFFFFF;
-			font-size: 30rpx;
-			font-weight: 500;
-		}
-		.time{
-			padding-top: 40rpx;
-			color: #999999;
-			font-size: 24rpx;
-		}
-	}
-}
-</style>

+ 0 - 309
pages/index/male.vue

@@ -1,309 +0,0 @@
-<template>
-	<view class="content">
-		<view class="box">
-			<view class="title" style="margin-top: 0;">{{ $t('foo.yhzzyz') }}</view>
-			<view class="detail">
-				<view class="detail-spe">{{ $t('foo.zsxm') }}:{{ name }}</view>
-				<view class="detail-spe">
-					{{ $t('foo.yhylsjh') }}:{{ phone }}
-					<view class="copyband" @click="copy(yhylsjh)">{{ $t('foo.fzsjh') }}</view>
-				</view>
-				<view class="detail-item">
-					{{ $t('foo.yhzh') }}:{{ bank_card_no }}
-					<view class="copy" @click="copy(bank_card_no)">{{ $t('foo.fzzh') }}</view>
-				</view>
-				<view class="detail-spe">
-					{{ $t('foo.khh') }}:{{ bank_of_deposit }}
-					<view class="copyband" @click="copy(bank_of_deposit)">{{ $t('foo.fzkhh') }}</view>
-				</view>
-			</view>
-			<view v-if="ali != ''">
-				<view class="title">{{ $t('foo.zfbsmyz') }}</view>
-				<view class="erweima" @click="open(1)"><image :src="ali" mode="widthFix"></image></view>
-				<view class="btn" @click="down(1)">{{ $t('foo.xzewm') }}</view>
-			</view>
-			<view v-if="wechat != ''">
-				<view class="title">{{ $t('foo.wxsmyz') }}</view>
-				<view class="erweima" @click="open(2)"><image :src="wechat" mode="widthFix"></image></view>
-				<view class="btn" @click="down(2)">{{ $t('foo.xzewm') }}</view>
-			</view>
-		</view>
-		<uni-popup ref="popup" type="center">
-			<movable-area class="popup-box">
-				<movable-view class="popup-item" :scale="true" direction="all"><image :src="img" mode=""></image></movable-view>
-			</movable-area>
-		</uni-popup>
-	</view>
-</template>
-
-<script>
-import uniPopup from '@/components/uni-popup/uni-popup.vue';
-import { mapState, mapMutations } from 'vuex';
-export default {
-	components: {
-		uniPopup
-	},
-	computed: {
-		...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
-	},
-	data(){
-		return {
-			img:'',
-			ali:'',
-			wechat:'',
-			bank_card_no:'',
-			bank_of_deposit:'',
-			name:'',
-			phone:'',
-			downing: false
-		}
-	},
-	onLoad(option) {
-		console.log(option)
-		if(option.ali != ''){
-			this.ali = option.ali
-		}
-		if(option.wei != ''){
-			this.wechat = option.wei
-		}
-		if(option.bank != ''){
-			this.bank_of_deposit = option.bank
-		}
-		if(option.info != ''){
-			this.bank_card_no = option.info
-		}
-		if(option.name != ''){
-			this.name = option.name
-		}
-		if(option.phone != ''){
-			this.phone = option.phone
-		}
-		uni.setNavigationBarTitle({
-			title:this.$t('foo.xq')
-		})
-	},
-	methods: {
-		copy(text) {
-			uni.setClipboardData({
-				data: text,
-				success: e => {
-					uni.showToast({
-						title: this.$t('foo.fzcg')
-					});
-				},
-				fail(e) {
-					uni.showToast({
-						title: this.$t('foo.fzcg.fzsb'),
-						icon: false
-					});
-					console.log(e);
-				}
-			});
-		},
-		open(type){
-			if(type == 1){
-				this.img = this.ali
-			}else {
-				this.img = this.wechat
-			}
-			this.$refs.popup.open();
-		},
-		down(type){
-			if(type == 1){
-				this.img = this.ali
-			}else {
-				this.img = this.wechat
-			}
-			if(this.downing){
-				return
-			}
-			this.downing = true
-			uni.downloadFile({
-				url: this.img,
-				success: res => {
-					if (res.statusCode === 200){
-						uni.saveImageToPhotosAlbum({
-							filePath: res.tempFilePath,
-							success: function(e) {
-							console.log(e,'保存路径')
-							uni.showToast({
-								title: "保存成功",
-								icon: true
-							});
-							this.downing = false
-							},
-							fail: function() {
-								uni.showToast({
-									title: "保存失败",
-									icon: false
-								});
-								this.downing = false
-							}
-						});
-					}
-					this.downing = false
-				},
-				fail(e) {
-					uni.showToast({
-						title: '复制失败',
-						icon: false
-					});
-					this.downing = false
-					console.log(e);
-				}
-			});
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-body,
-page {
-	height: 100%;
-	background-color: #000;
-}
-
-.content {
-	background-color: #000;
-	line-height: 1;
-	padding-top: 25rpx;
-	padding: 24rpx 24rpx 90rpx;
-
-	.cross {
-		margin-left: 6rpx;
-		height: 76rpx;
-		line-height: 76rpx;
-		color: #444444;
-		border-bottom: 1rpx solid #cccccc;
-	}
-
-	.image {
-		margin-top: 44rpx;
-		margin-bottom: 48rpx;
-		height: 404rpx;
-		width: 100%;
-		image {
-			width: 100%;
-			height: 100%;
-		}
-	}
-
-	.box {
-		padding: 20rpx 0 24rpx;
-		color: #fff;
-		.title {
-			margin-top: 60rpx;
-			font-size: 28rpx;
-			font-family: PingFang SC;
-			font-weight: bold;
-		}
-
-		.detail {
-			padding-top: 10rpx;
-			font-size: 28rpx;
-			line-height: 40rpx;
-			.detail-spe {
-				margin-top: 10rpx;
-				line-height: 46rpx;
-				overflow: hidden;
-				text-overflow: ellipsis;
-				display: -webkit-box; //必须结合的属性,将对象作为弹性伸缩盒子模型显示
-				-webkit-line-clamp: 2; //控制文本的行数
-				-webkit-box-orient: vertical; //必须结合的属性,设置或检索伸缩盒对象的子元素的排列方式
-
-				.copyband {
-					display: flex;
-					float: right;
-					// float: right;
-					justify-content: center;
-					border-radius: 10rpx;
-					line-height: 34rpx;
-					font-size: 24rpx;
-					color: #fff;
-					// padding: 0 24rpx;
-					width: 168rpx;
-					height: 34rpx;
-					margin-top: 8rpx;
-				}
-			}
-
-			.detail-item {
-				display: flex;
-				justify-content: space-between;
-				align-items: center;
-				// height: 40rpx;
-				line-height: 46rpx;
-				color: #fff;
-				margin-top: 10rpx;
-
-				.copy {
-					width: 168rpx;
-					display: flex;
-					justify-content: center;
-					background-color: #f1f1f1;
-					border-radius: 10rpx;
-					line-height: 34rpx;
-					font-size: 24rpx;
-					color: #333;
-					padding: 0 24rpx;
-					// width: 144rpx;
-					height: 34rpx;
-				}
-			}
-		}
-
-		.erweima {
-			width: 362rpx;
-			margin: 26rpx auto;
-			image {
-				width: 100%;
-			}
-		}
-		.zfb {
-			font-size: 30rpx;
-			font-family: PingFang SC;
-			font-weight: bold;
-			color: #0b9edd;
-			margin-top: 36rpx;
-			text-align: center;
-		}
-		.weixin {
-			font-size: 30rpx;
-			font-family: PingFang SC;
-			font-weight: bold;
-			color: #02974a;
-			margin-top: 36rpx;
-			text-align: center;
-		}
-	}
-}
-.popup-box {
-	width: 522rpx;
-	height: 605rpx;
-	border-radius: 20rpx;
-	position: relative;
-	.popup-item {
-		width: 100%;
-		height: 100%;
-		image {
-			width: 100%;
-			height: 100%;
-		}
-	}
-}
-.btn {
-	margin: 50rpx auto 0;
-	width: 500rpx;
-	height: 60rpx;
-	background: linear-gradient(-74deg, #ce9c6d, #ffecd6);
-	border-image: linear-gradient(115deg, #feebd5, #ffffff, #e1ad7d) 1 1;
-	border-radius: 30px;
-	line-height: 60rpx;
-	text-align: center;
-	font-size: 26rpx;
-	font-family: PingFang SC;
-	font-weight: 500;
-	color: #643912;
-}
-</style>

+ 0 - 34
pages/index/video.vue

@@ -1,34 +0,0 @@
-<template>
-	<view class="center"><image src="../../static/img/start.gif" mode=""></image></view>
-</template>
-
-<script>
-export default {
-	onLoad() {
-		const innerAudioContext = uni.createInnerAudioContext();
-		innerAudioContext.autoplay = true;
-		innerAudioContext.startTime = 2;
-		innerAudioContext.src = '../../static/icon/video.mp3';
-		innerAudioContext.onPlay(() => {
-		  console.log('开始播放');
-		});
-		setTimeout(() => {
-			innerAudioContext.stop()
-			uni.switchTab({
-				url: '/pages/index/index'
-			});
-		}, 5000);
-	}
-};
-</script>
-
-<style lang="scss">
-.center {
-	width: 100%;
-	height: 100vh;
-	image {
-		width: 100%;
-		height: 100%;
-	}
-}
-</style>

+ 355 - 0
pages/money/account.vue

@@ -0,0 +1,355 @@
+<template>
+	<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>
+
+		<swiper :current="tabCurrentIndex" class="swiper-box" duration="300" @change="changeTab">
+			<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
+				<view class="row b-b">
+					<text class="tit">姓名</text>
+					<input class="input" v-model="tabItem.orderList.name" type="text" placeholder="提款人姓名" placeholder-class="placeholder" />
+				</view>
+				<view class="row b-b">
+					<text class="tit">{{ tabIndex == 0 ? '账号' : '银行卡号' }}</text>
+					<input class="input" v-model="tabItem.orderList.code" type="text" placeholder="请输入账号" placeholder-class="placeholder" />
+				</view>
+				<view class="row b-b" v-if="tabIndex == 1">
+					<text class="tit">所属银行</text>
+					<input class="input" v-model="tabItem.orderList.bankName" type="text" placeholder="请输入所属银行" placeholder-class="placeholder" />
+				</view>
+			</swiper-item>
+		</swiper>
+
+		<button class="add-btn up" @click="confirm">提交申请</button>
+	</view>
+</template>
+
+<script>
+import { aliInfo, bankInfo, setAliInfo, setBankInfo } from '@/api/wallet.js';
+import { edit } from '@/api/user.js';
+import { mapState, mapMutations } from 'vuex';
+import { orderData, getUserInfo,service } from '@/api/user.js';
+export default {
+	data() {
+		return {
+			tabCurrentIndex: 0,
+			navList: [
+				{
+					state: 0,
+					text: '支付宝',
+					loadingType: 'more',
+					orderList: {
+						name: '',
+						code: '',
+						id: ''
+					}
+				},
+				{
+					state: 1,
+					text: '银行卡',
+					loadingType: 'more',
+					orderList: {
+						name: '',
+						code: '',
+						bankName: '',
+						id: ''
+					}
+				}
+			]
+		};
+	},
+	computed: {
+		...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
+	},
+	onLoad(options) {
+		this.tabCurrentIndex = +options.state || 0;
+		console.log(this.userInfo,'123456')
+		if(this.userInfo.alipay_code != null){
+			this.navList[0].orderList.code = this.userInfo.alipay_code
+		}
+		if(this.userInfo.alipay_name != null){
+			this.navList[0].orderList.name = this.userInfo.alipay_name
+		}
+		if(this.userInfo.bank_code != null){
+			this.navList[1].orderList.code = this.userInfo.bank_code
+		}
+		if(this.userInfo.bank_name != null){
+			this.navList[1].orderList.bankName = this.userInfo.bank_name
+		}
+		if(this.userInfo.bank_user_name != null){
+			this.navList[1].orderList.name = this.userInfo.bank_user_name
+		}
+		// this.loadAli();
+		// this.loadBank();
+	},
+
+	methods: {
+		...mapMutations('user', ['setUserInfo', 'setOrderInfo']),
+		//加载数据
+		loadAli(source) {
+			aliInfo({}).then(({ data }) => {
+				let order = this.navList[0].orderList;
+				this.$set(order, 'name', data.fullname);
+				this.$set(order, 'code', data.alino);
+				this.$set(order, 'id', data.id);
+			});
+		},
+		loadBank() {
+			bankInfo({}).then(({ data }) => {
+				let order = this.navList[1].orderList;
+				this.$set(order, 'name', data.fullname);
+				this.$set(order, 'code', data.bankno);
+				this.$set(order, 'bankName', data.bank);
+				this.$set(order, 'id', data.id);
+			});
+		},
+		//swiper 切换
+		changeTab(e) {
+			this.tabCurrentIndex = e.target.current;
+		},
+		//顶部tab点击
+		tabClick(index) {
+			this.tabCurrentIndex = index;
+		},
+		// 提交保存
+		confirm() {
+			let obj = this;
+			let arr = obj.navList[obj.tabCurrentIndex].orderList;
+			console.log(arr);
+			let pages = getCurrentPages(); //获取所有页面栈实例列表
+			console.log(pages);
+			let nowPage = pages[pages.length - 1]; //当前页页面实例
+			let prevPage = pages[pages.length - 2]; //上一页页面实例
+			console.log(prevPage);
+			// prevPage.$vm.sh = 100;   //修改上一页data里面的sh参数值为100
+			if (obj.tabCurrentIndex == 1) {
+				if (!arr.name) {
+					return this.$api.msg('请输入提款人姓名');
+				}
+				if (!arr.bankName) {
+					return this.$api.msg('请输入所属银行');
+				}
+				if (!arr.code) {
+					return this.$api.msg('请输入银行卡号');
+				}
+				let data = {
+					bank_user_name: arr.name,
+					bank_name: arr.bankName,
+					bank_code: arr.code
+				};
+				// // #ifdef H5
+				// prevPage.$vm.bankData = data;
+				// // #endif
+				// // #ifdef MP
+				// prevPage.setData({
+				// 	bankData: data
+				// });
+				// // #endif
+				edit({
+					bank_user_name: arr.name,
+					bank_name: arr.bankName,
+					bank_code: arr.code
+				}).then(e => {
+					obj.$api.msg('修改成功');
+					obj.getUserInfo();
+				});
+				// obj.setBankInfo({
+				// 	fullname: arr.name,
+				// 	bank: arr.bankName,
+				// 	bankno: arr.code,
+				// 	id:arr.id
+				// });
+			}
+			if (obj.tabCurrentIndex == 0) {
+				if (!arr.name) {
+					return this.$api.msg('请输入提款人姓名');
+				}
+				if (!arr.code) {
+					return this.$api.msg('请输入支付宝账号');
+				}
+				let data = {
+					alipay_name: arr.name,
+					alipay_code: arr.code
+				};
+				// // #ifdef H5
+				// prevPage.$vm.aliData = data;
+				// // #endif
+
+				// // #ifdef MP
+				// prevPage.setData({
+				// 	bankData: data
+				// });
+				// // #endif
+				console.log(111);
+				edit({
+					alipay_name: arr.name,
+					alipay_code: arr.code
+				})
+					.then(e => {
+						console.log(e, '123456');
+						obj.$api.msg('修改成功');
+						obj.getUserInfo();
+					})
+					.catch(e => {
+						console.log(e);
+					});
+				// obj.setAliInfo({
+				// 	fullname: arr.name,
+				// 	alino: arr.code,
+				// 	id:arr.id
+				// });
+			}
+		},
+		// 更新用户信息
+		getUserInfo() {
+			getUserInfo({})
+				.then(({ data }) => {
+					console.log(data)
+					this.setUserInfo(data);
+					// 获取用户数据完毕后在获取订单数据防止多次跳转到登录页
+					orderData({})
+						.then(({ data }) => {
+							this.setOrderInfo(data);
+							uni.navigateBack({
+								delta: 1
+							});
+						})
+						.catch(e => {
+							this.setOrderInfo({
+								complete_count: 0, //完成
+								received_count: 0, //待收货
+								unshipped_count: 0, //待发货
+								order_count: 0, //订单总数
+								unpaid_count: 0 //待付款
+							});
+						});
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		},
+		/* 保存银行卡详细 */
+		// setBankInfo(obj) {
+		// 	setBankInfo(obj)
+		// 		.then(e => {
+		// 			uni.showToast({
+		// 				title: '修改成功',
+		// 				duration: 2000,
+		// 				position: 'top'
+		// 			});
+		// 			this.$api.prePage().dataUp();
+		// 			setTimeout(() => {
+		// 				uni.navigateBack();
+		// 			}, 1500);
+		// 		})
+		// 		.catch(e => {
+		// 			console.log(e);
+		// 		});
+		// },
+		// // 修改支付宝信息
+		// setAliInfo(obj) {
+		// 	setAliInfo(obj)
+		// 		.then(e => {
+		// 			uni.showToast({
+		// 				title: '修改成功',
+		// 				duration: 2000,
+		// 				position: 'top'
+		// 			});
+		// 			this.$api.prePage().dataUp();
+		// 			setTimeout(() => {
+		// 				uni.navigateBack();
+		// 			}, 1500);
+		// 		})
+		// 		.catch(e => {
+		// 			console.log(e);
+		// 		});
+		// }
+	}
+};
+</script>
+
+<style lang="scss">
+.row {
+	display: flex;
+	align-items: center;
+	position: relative;
+	padding: 0 30rpx;
+	height: 110rpx;
+	background: #fff;
+	.tit {
+		flex-shrink: 0;
+		width: 120rpx;
+		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;
+	}
+}
+page,
+.content {
+	background: $page-color-base;
+	height: 100%;
+}
+
+.swiper-box {
+	height: 750rpx;
+}
+
+.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: $font-color-dark;
+		position: relative;
+		&.current {
+			color: $base-color;
+			&:after {
+				content: '';
+				position: absolute;
+				left: 50%;
+				bottom: 0;
+				transform: translateX(-50%);
+				width: 44px;
+				height: 0;
+				border-bottom: 2px solid $base-color;
+			}
+		}
+	}
+}
+
+.add-btn {
+	&.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);
+}
+</style>

+ 466 - 0
pages/money/pay.vue

@@ -0,0 +1,466 @@
+<template>
+	<view class="app">
+		<view class="price-box">
+			<text>支付金额</text>
+			<text class="price">{{ money }}</text>
+		</view>
+		<view class="pay-type-list">
+			<!-- #ifndef APP-PLUS -->
+			<view class="type-item b-b" @click="changePayType(1)">
+				<text class="icon iconfont iconweixin"></text>
+				<view class="con">
+					<text class="tit">微信支付</text>
+					<text>推荐使用微信支付</text>
+				</view>
+				<label class="radio"><radio value="" color="#5dbc7c" :checked="payType == 1"></radio></label>
+			</view>
+			<!-- #endif -->
+			<view class="type-item b-b" @click="changePayType(1)">
+				<text class="icon iconfont iconweixin"></text>
+				<view class="con">
+					<text class="tit">微信支付</text>
+					<text>推荐使用微信支付</text>
+				</view>
+				<label class="radio"><radio value="" color="#5dbc7c" :checked="payType == 1"></radio></label>
+			</view>
+			<view class="type-item b-b" @click="changePayType(2)">
+				<text class="icon iconfont iconzhifubao"></text>
+				<view class="con"><text class="tit">支付宝支付</text></view>
+				<label class="radio"><radio value="" color="#5dbc7c" :checked="payType == 2"></radio></label>
+			</view>
+			<!-- #ifdef APP-PLUS -->
+			<!-- #endif -->
+			<view class="type-item" @click="changePayType(3)">
+				<text class="icon iconfont iconyue"></text>
+				<view class="con">
+					<text class="tit">余额支付</text>
+					<text>可用余额 ¥{{ now_money }}</text>
+				</view>
+				<label class="radio"><radio value="" color="#5dbc7c" :checked="payType == 3"></radio></label>
+			</view>
+		</view>
+		<text class="mix-btn" :class="{ clickbg: payLoding }" @click="!payLoding ? confirm() : ''">确认支付</text>
+	</view>
+</template>
+
+<script>
+import { balance } from '@/api/wallet.js';
+import { createOrderkey, computedOrderkey, orderPay } from '@/api/order.js';
+import { getUserInfo } from '@/api/user.js';
+
+// #ifdef H5
+
+import weixinObj from '@/plugin/jweixin-module/index.js';
+// #endif
+import { mapState, mapMutations } from 'vuex';
+export default {
+	data() {
+		return {
+			
+			// #ifdef H5
+			payName: 'weixin',
+			payType: 1, //支付类型
+			// #endif
+			// #ifdef MP-WEIXIN
+			payName: 'weixin',
+			payType: 1, //支付类型
+			// #endif
+			// #ifdef APP-PLUS
+			payType: 3,
+			payName: 'yue',
+			// #endif
+			// orderInfo: {},
+			money: 0.0, //订单金额
+			now_money: 0.0, //余额
+			orderKey: '',
+			orderId: '', //保存订单id
+			payLoding: false, //判断是否支付中
+			type: '', //判断是否从订单中进入
+			// #ifdef H5
+			froms: '', //保存h5中数据来源对象
+			// #endif
+			pinkid: '', //保存拼团商品id
+			checkedAuto: 0, //判断是否为自动拼团
+			topify: '',
+		};
+	},
+	computed: {
+		// #ifdef H5
+		...mapState(['weichatObj']),
+		// #endif
+		...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
+	},
+	onLoad(options) {
+ 		this.checkedAuto = options.checked || 0;
+		this.topify = options.topify || 0;
+		if (options.type == 1) {
+			this.type = 1;
+			this.orderId = options.ordid;
+			this.money = options.money;
+		} else {
+			this.orderKey = options.key;
+			let prepage = this.$api.prePage();
+			computedOrderkey({
+				orderkey: this.orderKey,
+				couponId: prepage.couponChecked.id, //优惠券编号
+				addressId: prepage.addressData.id, //地址编号
+				useIntegral: prepage.checkedPoints ? 1 : 0
+			}).then(({ data }) => {
+				// 获取支付金额
+				this.money = data.result.pay_price;
+			});
+		}
+		// 保存pinkid
+		if (options.pinkid) {
+			this.pinkid = options.pinkid;
+		}
+		// 载入余额
+		if ('now_money' in this.userInfo) {
+			this.now_money = this.userInfo.now_money;
+		} else {
+			balance({}).then(({ data }) => {
+				// 获取余额
+				this.now_money = data.now_money;
+			});
+		}
+	},
+	methods: {
+		...mapMutations('user', ['setUserInfo', 'setOrderInfo']),
+		//选择支付方式
+		changePayType(type) {
+			this.payType = type;
+			if (this.payType == 1) {
+				this.payName = 'weixin';
+			}
+			if (this.payType == 2) {
+				this.payName = 'ali';
+			}
+			if (this.payType == 3) {
+				this.payName = 'yue';
+			}
+			// if (this.payType == 4) {
+			// 	this.payName = 'consumer';
+			// }
+		},
+		// 支付金额
+		orderMoneyPay() {
+			let obj = this;
+			orderPay({
+				uni: obj.orderId,
+				// #ifdef H5
+				from: obj.froms ? 'weixin' : 'H5', //来源
+				// #endif
+				// #ifdef MP-WEIXIN
+				from: 'routine', //来源
+				// #endif
+				// #ifdef APP-PLUS
+				from: 'app', //来源
+				// #endif
+				paytype: obj.payName ,//支付类型  weixin-微信 yue-余额
+			})
+				.then(e => {
+					console.log(e,'zhifu+++++++++')
+					// 判断是否为余额支付
+					if (obj.payName == 'yue' && e.data.status == 'SUCCESS') {
+						if (e.status == 200) {
+							obj.paySuccessTo();
+						} else {
+							obj.$api.msg(msg);
+						}
+					}
+					// #ifdef APP-PLUS
+					if (obj.payName == 'weixin' || obj.payName == 'routine') {
+						let da = e.data.result.jsConfig;
+						console.log('--da--', da);
+						let data = {
+							appid:da.appid,
+							noncestr: da.noncestr,
+							package: da.package,
+							partnerid:da.partnerid,
+							prepayid:da.prepayid,
+							timestamp: da.timestamp,
+							sign:da.sign
+						};
+						console.log('--data--', data);
+						uni.requestPayment({
+							provider: 'wxpay',
+							orderInfo: data,
+							success(res) {
+								console.log(res)
+							},
+							fail(res) {
+								console.log(res,'失败')
+							}
+						})
+					}
+					if (obj.payName == 'ali') {
+						const url = e.data.result.jsConfig;
+						console.log(url, 'url');
+						uni.requestPayment({
+							provider: 'alipay',
+							orderInfo: url,
+							success: res => {
+								console.log(res);
+								uni.showToast({
+									title: '支付成功',
+									duration: 2000
+								});
+							},
+							fail: e => {
+								console.log(e);
+							},
+							complete: () => {}
+						});
+						obj.payLoding = false;
+					}
+					// #endif
+					// #ifndef APP-PLUS
+					if (obj.payName == 'weixin' || obj.payName == 'routine') {
+						let da = e.data.result.jsConfig;
+						let data = {
+							// #ifdef H5
+							timestamp: da.timestamp,
+							// #endif
+							// #ifdef MP
+							timeStamp: da.timestamp,
+							// #endif
+							nonceStr: da.nonceStr,
+							package: da.package,
+							signType: da.signType,
+							paySign: da.paySign,
+							success: function(res) {
+								obj.paySuccessTo();
+							},
+							fail: () => {
+								uni.navigateTo({
+									url: '/pages/order/order?state=0'
+								});
+							}
+						};
+						// #ifdef H5
+						if (obj.payName == 'weixin') {
+							weixinObj.chooseWXPay(data);
+						}
+						// #endif
+						// #ifdef MP-WEIXIN
+						if (obj.payName == 'routine') {
+							wx.requestPayment(data);
+						}
+						// #endif
+					}
+					// #endif
+					uni.hideLoading();
+					obj.payLoding = false;
+				})
+				.catch(e => {
+					// 支付完成
+					uni.hideLoading();
+					obj.payLoding = false;
+					console.log(e);
+				});
+		},
+		// 支付成功跳转
+		paySuccessTo() {
+			getUserInfo({})
+				.then(({ data }) => {
+					console.log(data,"data")
+					this.setUserInfo(data);
+				})
+				.catch(e => {
+					console.log(e);
+				});
+			uni.hideLoading();
+			uni.redirectTo({
+				url: '/pages/money/paySuccess?orderid=' + this.orderId
+			});
+		},
+		//确认支付
+		confirm: async function() {
+			let obj = this;
+			uni.showLoading({
+				title: '支付中',
+				mask: true
+			});
+			// 判断是否余额不足
+			if (obj.payName == 'yue' && +obj.now_money < obj.money) {
+				uni.hideLoading();
+				uni.showModal({
+					title: '提示',
+					content: '账户余额不足!',
+					showCancel: false,
+					success: res => {},
+					fail: () => {},
+					complete: () => {}
+				});
+				return;
+			}
+			// 支付中
+			obj.payLoding = true;
+			// #ifdef H5
+			// 获取当前是否为微信浏览器
+			obj.froms = uni.getStorageSync('weichatBrowser') || '';
+			// #endif
+			// 判断是否为未支付订单中跳转进入
+			if (obj.type != 1) {
+				// 初次生成订单
+				obj.firstCreateOrder();
+			} else {
+				// 已经生成订单未支付
+				obj.orderMoneyPay();
+			}
+		},
+		// 初次订单创建
+		firstCreateOrder() {
+			let obj = this;
+			// 获取下单页面数据
+			let prepage = obj.$api.prePage();
+
+			let data = {
+				real_name: prepage.addressData.real_name, //联系人名称
+				phone: prepage.addressData.phone, //联系人号码
+				couponId: prepage.couponChecked.id, //优惠券编号
+				addressId: prepage.addressData.id, //支付地址id
+				useIntegral: prepage.checkedPoints ? 1 : 0, //是否积分抵扣1为是0为否
+				payType: obj.payName, //支付类型  weixin-微信 yue-余额
+				mark: prepage.desc, //备注
+				// #ifdef H5
+				from: obj.froms ? 'weixin' : 'H5', //来源
+				// #endif
+				// #ifdef MP-WEIXIN
+				from: 'routine', //来源
+				// #endif
+				// #ifdef APP-PLUS
+				from: 'app', //来源
+				// #endif
+				shipping_type: 1, //提货方式 1 快递 2自提
+				automatic: obj.checkedAuto,
+				topify: this.topify
+			};
+			// 判断是否拼团商品
+			if (obj.pinkid) {
+				data.pinkId = obj.pinkid;
+			}
+			// 生成订单
+			createOrderkey(data, obj.orderKey)
+				.then(({ data, status, msg }) => {
+					// 判断是否支付失败
+					if (data.status == 'ORDER_EXIST') {
+						uni.showModal({
+							title: '提示',
+							content: msg,
+							showCancel: false
+						});
+						uni.hideLoading();
+						obj.payLoding = false;
+						return;
+					}
+					console.log(data,'dingdan')
+					// 保存订单号
+					obj.orderId = data.result.orderId;
+					// 判断是否为余额支付
+					if (obj.payName == 'yue') {
+						if (status == 200 && data.status == 'SUCCESS') {
+							obj.paySuccessTo();
+						} else {
+							obj.$api.msg(msg);
+						}
+					} else {
+						// 立即支付
+						obj.orderMoneyPay();
+					}
+				})
+				.catch(e => {
+					uni.hideLoading();
+					obj.payLoding = false;
+					console.log(e);
+				});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+.app {
+	width: 100%;
+}
+
+.price-box {
+	background-color: #fff;
+	height: 265upx;
+	display: flex;
+	flex-direction: column;
+	justify-content: center;
+	align-items: center;
+	font-size: 28upx;
+	color: #909399;
+
+	.price {
+		font-size: 50upx;
+		color: #303133;
+		margin-top: 12upx;
+		&:before {
+			content: '¥';
+			font-size: 40upx;
+		}
+	}
+}
+
+.pay-type-list {
+	margin-top: 20upx;
+	background-color: #fff;
+	padding-left: 60upx;
+	.type-item {
+		height: 120upx;
+		padding: 20upx 0;
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		padding-right: 60upx;
+		font-size: 30upx;
+		position: relative;
+	}
+
+	.icon {
+		width: 100upx;
+		font-size: 52upx;
+	}
+	.iconyue {
+		color: #fe8e2e;
+	}
+	.iconweixin {
+		color: #36cb59;
+	}
+	.iconzhifubao {
+		color: #01aaef;
+	}
+	.tit {
+		font-size: $font-lg;
+		color: $font-color-dark;
+		margin-bottom: 4upx;
+	}
+	.con {
+		flex: 1;
+		display: flex;
+		flex-direction: column;
+		font-size: $font-sm;
+		color: $font-color-light;
+	}
+}
+.mix-btn {
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	width: 630upx;
+	height: 80upx;
+	margin: 80upx auto 30upx;
+	font-size: $font-lg;
+	color: #fff;
+	background-color: $base-color;
+	border-radius: 10upx;
+	/* box-shadow: 1px 2px 5px rgba(219, 63, 96, 0.4); */
+}
+
+.clickbg {
+	background-color: $color-gray !important;
+}
+</style>

+ 376 - 0
pages/money/pay1.vue

@@ -0,0 +1,376 @@
+<template>
+	<view class="app">
+		<view class="price-box">
+			<text>支付金额</text>
+			<text class="price">{{ money }}</text>
+		</view>
+		<view class="pay-type-list">
+			<view class="type-item b-b" @click="changePayType(1)">
+				<text class="icon iconfont iconweixin"></text>
+				<view class="con">
+					<text class="tit">微信支付</text>
+					<text>推荐使用微信支付</text>
+				</view>
+				<label class="radio"><radio value="" color="#ff4c4c" :checked="payType == 1"></radio></label>
+			</view>
+			<!-- #ifdef APP-PLUS -->
+			<view class="type-item b-b" @click="changePayType(2)">
+				<text class="icon iconfont iconzhifubao"></text>
+				<view class="con"><text class="tit">支付宝支付</text></view>
+				<label class="radio"><radio value="" color="#ff4c4c" :checked="payType == 2"></radio></label>
+			</view>
+			<!-- #endif -->
+			<view class="type-item" @click="changePayType(3)">
+				<text class="icon iconfont iconyue"></text>
+				<view class="con">
+					<text class="tit">余额支付</text>
+					<text>可用余额 ¥{{ now_money }}</text>
+				</view>
+				<label class="radio"><radio value="" color="#ff4c4c" :checked="payType == 3"></radio></label>
+			</view>
+		</view>
+		<text class="mix-btn" :class="{ clickbg: payLoding }" @click="!payLoding ? confirm() : ''">确认支付</text>
+	</view>
+</template>
+
+<script>
+import { balance } from '@/api/wallet.js';
+import { createOrderkey,computedOrderkey,orderPay } from '@/api/order.js';
+import { mapState } from 'vuex';
+export default {
+	data() {
+		return {
+			payType: 1, //支付类型
+			// #ifdef H5
+			payName: 'weixin',
+			// #endif
+			// #ifdef MP-WEIXIN
+			payName: 'weixin',
+			// #endif
+			orderInfo: {},
+			money: 0.0, //订单金额
+			now_money: 0.0, //余额
+			orderKey: '',
+			orderId: '', //保存订单id
+			payLoding: false, //判断是否支付中
+			type: '', //判断是否从订单中进入
+			// #ifdef H5
+			froms: '', //保存h5中数据来源对象
+			// #endif
+			pinkid: '', //保存拼团商品id
+			isdrop: 0
+		};
+	},
+	computed: {
+		// #ifdef H5
+		...mapState(['weichatObj'])
+		// #endif
+	},
+	onLoad(options) {
+		if(options.isdrop) {
+			this.isdrop = options.isdrop*1
+		}
+		if (options.type == 1) {
+			this.type = 1;
+			this.orderId = options.ordid;
+			this.money = options.money;
+		} else {
+			this.orderKey = options.key;
+			let prepage = this.$api.prePage();
+			computedOrderkey({
+				orderkey: this.orderKey,
+				couponId: prepage.couponChecked.id, //优惠券编号
+				addressId: prepage.addressData.id, //地址编号
+				useIntegral: prepage.checkedPoints ? 1 : 0,
+				is_drop: this.isdrop
+			}).then(({ data }) => {
+				// 获取支付金额
+				this.money = data.result.pay_price;
+			});
+		}
+		// 保存pinkid
+		if (options.pinkid) {
+			this.pinkid = options.pinkid;
+		}
+		// 载入余额
+		balance({}).then(({ data }) => {
+			// 获取余额
+			this.now_money = data.now_money;
+		});
+	},
+	methods: {
+		//选择支付方式
+		changePayType(type) {
+			this.payType = type;
+			if (this.payType == 1) {
+				this.payName = 'weixin';
+			}
+			if (this.payType == 2) {
+				this.payName = 'ali';
+			}
+			if (this.payType == 3) {
+				this.payName = 'yue';
+			}
+		},
+		// 支付金额
+		orderMoneyPay() {
+			let obj = this;
+			orderPay({
+				uni: obj.orderId,
+				// #ifdef H5
+				from: obj.froms ? 'weixin' : 'H5', //来源
+				// #endif
+				// #ifdef MP-WEIXIN
+				from: 'routine', //来源
+				// #endif
+				// #ifdef APP-PLUS
+				from: 'app', //来源
+				// #endif
+				paytype: obj.payName //支付类型  weixin-微信 yue-余额
+			})
+				.then(e => {
+					// 判断是否为余额支付
+					if (obj.payName == 'yue' && e.data.status == 'SUCCESS') {
+						if (e.status == 200) {
+							obj.paySuccessTo();
+						} else {
+							obj.$api.msg(msg);
+						}
+					}
+					if (obj.payName == 'weixin' || obj.payName == 'routine') {
+						let da = e.data.result.jsConfig;
+						let data = {
+							// #ifdef H5
+							timestamp: da.timestamp,
+							// #endif
+							// #ifdef MP
+							timeStamp: da.timestamp,
+							// #endif
+							nonceStr: da.nonceStr,
+							package: da.package,
+							signType: da.signType,
+							paySign: da.paySign,
+							success: function(res) {
+								obj.paySuccessTo();
+							},
+							fail: () => {
+								uni.navigateTo({
+									url: '/pages/order/order?state=0'
+								});
+							}
+						};
+						// #ifdef H5
+						if(obj.payName == 'weixin'){
+						obj.weichatObj.chooseWXPay(data);
+						}
+						// #endif
+						// #ifdef MP-WEIXIN
+						if(obj.payName == 'routine'){
+							wx.requestPayment(data);
+						}
+						// #endif
+					}
+					uni.hideLoading();
+					obj.payLoding = false;
+				})
+				.catch(e => {
+					// 支付完成
+					uni.hideLoading();
+					obj.payLoding = false;
+					console.log(e);
+				});
+		},
+		// 支付成功跳转
+		paySuccessTo() {
+			uni.hideLoading();
+			uni.redirectTo({
+				url: '/pages/money/paySuccess?orderid=' + this.orderId
+			});
+		},
+		//确认支付
+		confirm: async function() {
+			let obj = this;
+			uni.showLoading({
+				title: '支付中',
+				mask: true
+			})
+			// 判断是否余额不足
+			if (obj.payName == 'yue' && +obj.now_money < obj.money) {
+				uni.showModal({
+					title: '提示',
+					content: '账户余额不足!',
+					showCancel: false,
+					success: res => {},
+					fail: () => {},
+					complete: () => {}
+				});
+				return;
+			}
+			// 支付中
+			obj.payLoding = true;
+			// #ifdef H5
+			// 获取当前是否为微信浏览器
+			obj.froms = uni.getStorageSync('weichatBrowser') || '';
+			// #endif
+			// 判断是否为未支付订单中跳转进入
+			if (obj.type != 1) {
+				// 初次生成订单
+				obj.firstCreateOrder();
+			} else {
+				// 已经生成订单未支付
+				obj.orderMoneyPay();
+			}
+		},
+		// 初次订单创建
+		firstCreateOrder() {
+			let obj = this;
+			// 获取下单页面数据
+			let prepage = obj.$api.prePage();
+
+			let data = {
+				real_name: prepage.addressData.real_name, //联系人名称
+				phone: prepage.addressData.phone, //联系人号码
+				couponId: prepage.couponChecked.id, //优惠券编号
+				addressId: prepage.addressData.id, //支付地址id
+				useIntegral: prepage.checkedPoints ? 1 : 0, //是否积分抵扣1为是0为否
+				payType: obj.payName, //支付类型  weixin-微信 yue-余额
+				mark: prepage.desc, //备注
+				// #ifdef H5
+				from: obj.froms ? 'weixin' : 'H5', //来源
+				// #endif
+				// #ifdef MP-WEIXIN
+				from: 'routine', //来源
+				// #endif
+				// #ifdef APP-PLUS
+				from: 'app', //来源
+				// #endif
+				shipping_type: 1, //提货方式 1 快递 2自提
+				is_drop: this.isdrop//是否上门安装
+			};
+			// 判断是否拼团商品
+			if (obj.pinkid) {
+				data.pinkId = obj.pinkid;
+			}
+			// 生成订单
+			createOrderkey(data, obj.orderKey)
+				.then(({ data, status, msg }) => {
+					// 判断是否支付失败
+					if (data.status == 'ORDER_EXIST') {
+						uni.showModal({
+							title: '提示',
+							content: msg,
+							showCancel: false
+						});
+						uni.hideLoading();
+						obj.payLoding = false;
+						return;
+					}
+					// 保存订单号
+					obj.orderId = data.result.orderId;
+					// 判断是否为余额支付
+					if (obj.payName == 'yue') {
+						if (status == 200 && data.status == 'SUCCESS') {
+							obj.paySuccessTo();
+						} else {
+							obj.$api.msg(msg);
+						}
+					} else {
+						// 立即支付
+						obj.orderMoneyPay();
+					}
+				})
+				.catch(e => {
+					uni.hideLoading();
+					obj.payLoding = false;
+					console.log(e);
+				});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+.app {
+	width: 100%;
+}
+
+.price-box {
+	background-color: #fff;
+	height: 265upx;
+	display: flex;
+	flex-direction: column;
+	justify-content: center;
+	align-items: center;
+	font-size: 28upx;
+	color: #909399;
+
+	.price {
+		font-size: 50upx;
+		color: #303133;
+		margin-top: 12upx;
+		&:before {
+			content: '¥';
+			font-size: 40upx;
+		}
+	}
+}
+
+.pay-type-list {
+	margin-top: 20upx;
+	background-color: #fff;
+	padding-left: 60upx;
+	.type-item {
+		height: 120upx;
+		padding: 20upx 0;
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		padding-right: 60upx;
+		font-size: 30upx;
+		position: relative;
+	}
+
+	.icon {
+		width: 100upx;
+		font-size: 52upx;
+	}
+	.iconyue {
+		color: #fe8e2e;
+	}
+	.iconweixin {
+		color: #36cb59;
+	}
+	.iconzhifubao {
+		color: #01aaef;
+	}
+	.tit {
+		font-size: $font-lg;
+		color: $font-color-dark;
+		margin-bottom: 4upx;
+	}
+	.con {
+		flex: 1;
+		display: flex;
+		flex-direction: column;
+		font-size: $font-sm;
+		color: $font-color-light;
+	}
+}
+.mix-btn {
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	width: 630upx;
+	height: 80upx;
+	margin: 80upx auto 30upx;
+	font-size: $font-lg;
+	color: #fff;
+	background-color: $base-color;
+	border-radius: 10upx;
+	/* box-shadow: 1px 2px 5px rgba(219, 63, 96, 0.4); */
+}
+
+.clickbg {
+	background-color: $color-gray !important;
+}
+</style>

+ 65 - 0
pages/money/paySuccess.vue

@@ -0,0 +1,65 @@
+<template>
+	<view class="content">
+		<text class="success-icon iconfont iconroundcheck"></text>
+		<text class="tit">支付成功</text>
+		<view class="btn-group">
+			<navigator :url="'/pages/order/orderDetail?id='+orderId" open-type="redirect" class="mix-btn">查看订单</navigator>
+			<navigator url="/pages/index/index" open-type="switchTab" class="mix-btn hollow">返回首页</navigator>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				orderId:''
+			}
+		},
+		onLoad(opt) {
+			// 保存订单号
+			this.orderId = opt.orderid;
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style lang='scss'>
+	.content{
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+		align-items: center;
+	}
+	.success-icon{
+		font-size: 160upx;
+		color: #5dbc7c;
+		margin-top: 100upx;
+	}
+	.tit{
+		font-size: 38upx;
+		color: #303133;
+	}
+	.btn-group{
+		padding-top: 100upx;
+	}
+	.mix-btn {
+		margin-top: 30upx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		width: 600upx;
+		height: 80upx;
+		font-size: $font-lg;
+		color: #fff;
+		background-color: $base-color;
+		border-radius: 10upx;
+		&.hollow{
+			background: #fff;
+			color: #303133;
+			border: 1px solid #ccc;
+		}
+	}
+</style>

+ 447 - 0
pages/money/recharge.vue

@@ -0,0 +1,447 @@
+<template>
+	<view class="content">
+		<view class="yue">
+			<view class="font">当前余额</view>
+			<view class="money">{{ nowmoney | getMoneyStyle }}</view>
+		</view>
+		<view class="row-box">
+			<view class="title">充值金额</view>
+			<view class="row">
+				<text class="tit">¥</text>
+				<input class="input" type="number" v-model="money" placeholder="请输入充值金额" placeholder-class="placeholder" />
+			</view>
+			<view class="xian"></view>
+			<view class="moneyBtn-box">
+				<view class="moneyBtn" v-for="(item, index) in moneyList" :class="{ current: choose == index }" :key="index" @click="changemoney(item, index)">{{ item }}元</view>
+			</view>
+		</view>
+
+		<view class="list">
+			<radio-group @change="tabRadio">
+				<!-- #ifndef APP-PLUS -->
+				<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="#6EAB4E" :checked="type == 'weixin'" /></view>
+					</view>
+				</label>
+				<!-- #endif -->
+				<!-- #ifdef APP-PLUS -->
+				<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="#6EAB4E" :checked="type == 'weixin'" /></view>
+					</view>
+				</label>
+				<label>
+					<view class="box">
+						<view class="icon iconfont iconzhifubao"></view>
+						<view class="title-box">
+							<view class="title"><text>支付宝充值</text></view>
+						</view>
+						<view class="right"><radio value="ali" color="#6EAB4E" :checked="type == 'ali'" /></view>
+					</view>
+				</label>
+				<!-- #endif -->
+			</radio-group>
+		</view>
+		<button class="add-btn up" :class="{ 'active-bg': payLoding }" @click="!payLoding ? confirm() : ''">确认充值</button>
+	</view>
+</template>
+
+<script>
+import { getMoneyStyle } from '@/utils/rocessor.js';
+import { userBalance, extractBank } from '@/api/wallet.js';
+// #ifdef H5
+import { rechargeWechat } from '@/api/wallet.js';
+// #endif
+// #ifdef MP
+import { rechargeRoutine } from '@/api/wallet.js';
+// #endif
+// #ifdef APP-PLUS
+import { rechargeApp,rechargeAli } from '@/api/wallet.js';
+// #endif
+import { mapState } from 'vuex';
+// #ifdef H5
+import weixinObj from '@/plugin/jweixin-module/index.js';
+// #endif
+export default {
+	filters: {
+		getMoneyStyle
+	},
+	data() {
+		return {
+			// #ifndef APP-PLUS
+			typeText: 0,
+			type: 'weixin',
+			// #endif
+			// #ifdef APP-PLUS
+			typeText: 1,
+			type: 'ali',
+			// #endif
+			money: '', //充值金额
+			payLoding: false, //是否加载中
+			moneyList: [300, 200, 150, 100, 50],
+			nowmoney: '',
+			choose: -1,
+			yongMoney: ''
+		};
+	},
+	onLoad(options) {
+		const obj = this;
+		if (options.type == '1') {
+			(obj.type = 'ali'), (obj.typeText = 1);
+		}
+	},
+	onShow() {
+		userBalance({}).then(({ data }) => {
+			console.log(data);
+			this.nowmoney = data.now_money;
+		});
+		extractBank({}).then(({ data }) => {
+			this.yongMoney = (data.commissionCount * 1).toFixed(2); //累积佣金
+		});
+	},
+	computed: {
+		// #ifdef H5
+		...mapState(['weichatObj'])
+		// #endif
+	},
+	methods: {
+		// 跳转
+		navTo(url) {
+			uni.navigateTo({
+				url: url
+			});
+		},
+		// 切换选中对象
+		tabRadio(e) {
+			console.log(e);
+			if (e.detail.value == 'weixin') {
+				this.typeText = 0;
+			} else {
+				console.log(12346)
+				this.typeText = 1;
+			}
+			this.type = e.detail.value;
+		},
+		// 提交
+		confirm() {
+			let obj = this;
+			obj.payLoding = true;
+			if (obj.money == '') {
+				obj.$api.msg('请输入充值金额');
+				obj.payLoding = false;
+				return;
+			}
+			if (obj.type == 'yongjin' && obj.money > parseInt(obj.yongMoney)) {
+				obj.$api.msg('佣金不足');
+				obj.payLoding = false;
+				return;
+			}
+			// #ifdef H5
+			rechargeWechat({ price: this.money, from: 'weixin', type: this.typeText })
+				.then(e => {
+					console.log(e);
+					if (obj.type == 'weixin') {
+						let da = e.data.data;
+						console.log(weixinObj, 'weixin');
+						weixinObj.chooseWXPay({
+							timestamp: da.timestamp,
+							nonceStr: da.nonceStr,
+							package: da.package,
+							signType: da.signType,
+							paySign: da.paySign,
+							success: function(res) {
+								uni.showToast({
+									title: '充值成功',
+									duration: 2000,
+									position: 'top'
+								});
+							}
+						});
+						obj.payLoding = false;
+					} else {
+						uni.navigateTo({
+							url: '/pages/money/rechargeSuccess'
+						});
+						obj.payLoding = false;
+						console.log(e, '佣金');
+					}
+				})
+				.catch(e => {
+					obj.payLoding = false;
+					console.log(e);
+				});
+			// #endif
+			// #ifdef MP
+			rechargeRoutine({ price: this.money })
+				.then(e => {
+					let da = e.data;
+					wx.requestPayment({
+						timeStamp: da.timestamp,
+						nonceStr: da.nonceStr,
+						package: da.package,
+						signType: da.signType,
+						paySign: da.paySign,
+						success: function(res) {
+							uni.redirectTo({
+								url: '/pages/money/paySuccess'
+							});
+						}
+					});
+
+					obj.payLoding = false;
+				})
+				.catch(e => {
+					obj.payLoding = false;
+					console.log(e);
+				});
+			// #endif
+			// #ifdef APP-PLUS
+			console.log(this.money)
+			if(this.typeText == 0){
+				rechargeApp({ price: this.money })
+					.then(e => {
+						let da = e.data;
+						let data = {
+							appid:da.appid,
+							noncestr: da.noncestr,
+							package: da.package,
+							partnerid:da.partnerid,
+							prepayid:da.prepayid,
+							timestamp: da.timestamp,
+							sign:da.sign
+						};
+						uni.requestPayment({
+							provider: 'wxpay',
+							orderInfo: data,
+							success(res) {
+								console.log(res)
+							},
+							fail(res) {
+								console.log("微信掉起失败")
+								console.log(res,'失败')
+							}
+						})
+				
+						obj.payLoding = false;
+					})
+					.catch(e => {
+						obj.payLoding = false;
+						console.log(e);
+				});
+			}else {
+				rechargeAli({ price: this.money }).then(e =>{
+					console.log(e, 'url');
+					const url = e.msg;
+					uni.requestPayment({
+						provider: 'alipay',
+						orderInfo: url,
+						success: res => {
+							console.log(res);
+							uni.showToast({
+								title: '支付成功',
+								duration: 2000
+							});
+						},
+						fail: e => {
+							console.log(e);
+						},
+						complete: () => {}
+					});
+					obj.payLoding = false;
+				})
+			}
+			// #endif
+		},
+		//获取订单列表
+		loadData(source) {
+			console.log(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 === 'loading') {
+				//防止重复加载
+				return;
+			}
+			navItem.loadingType = 'loading';
+			setTimeout(() => {
+				let orderList = [];
+				orderList.forEach(item => {
+					navItem.orderList.push(item);
+				});
+				//loaded新字段用于表示数据加载完毕,如果为空可以显示空白页
+				this.$set(navItem, 'loaded', true);
+				//判断是否还有数据, 有改为 more, 没有改为noMore
+				navItem.loadingType = 'more';
+			}, 600);
+		},
+		changemoney(item, index) {
+			this.choose = index;
+			this.money = item;
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	height: 100%;
+}
+
+.add-btn {
+	&.modified {
+		color: $base-color;
+	}
+	&.up {
+		background: #6eab4e;
+		color: #fff;
+	}
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	width: 604rpx;
+	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);
+}
+.row-box {
+	margin-top: 30rpx;
+	padding: 20rpx 0rpx 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;
+			font-size: $font-base;
+		}
+	}
+	.xian {
+		width: 700rpx;
+		height: 1rpx;
+		background: #e6e6e6;
+		margin-bottom: 16rpx;
+	}
+	.moneyBtn-box {
+		display: flex;
+		justify-content: flex-start;
+		flex-wrap: wrap;
+		.moneyBtn {
+			margin-right: 30rpx;
+			width: 210rpx;
+			height: 70rpx;
+			background: #f0f0f0;
+			border-radius: 4px;
+			margin-top: 30rpx;
+			text-align: center;
+			line-height: 70rpx;
+		}
+	}
+}
+.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;
+		}
+		.yongjing {
+			width: 48rpx;
+			height: 48rpx;
+		}
+		.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;
+}
+
+.active-bg {
+	background-color: $color-gray !important;
+}
+.yue {
+	display: flex;
+	justify-content: space-between;
+	padding: 30rpx 48rpx 30rpx 26rpx;
+	background: #ffffff;
+	.font {
+		font-size: 28rpx;
+		font-family: PingFang SC;
+		font-weight: 500;
+		color: #333333;
+	}
+	.money {
+		font-size: 30rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		color: #ef041f;
+	}
+}
+.current {
+	background: #6eab4e !important;
+	color: #fff !important;
+}
+</style>

+ 357 - 0
pages/money/wallet.vue

@@ -0,0 +1,357 @@
+<template>
+	<view class="content">
+		<view class="content-money">
+			<view class="money-box">
+				<image src="../../static/img/img33.png" mode=""></image>
+				<view class="money"><text class="money-icon">¥</text>{{ userInfo.now_money | 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)" v-if="item.text!=='全部'">{{ item.text }}</view>
+		</view>
+		<swiper :current="tabCurrentIndex" :style="{'height':maxheight+'px'}" 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>
+
+					<!-- 订单列表 -->
+					<view v-for="(item, index) in tabItem.orderList" :key="index" 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 class="jg"></view>
+					</view>
+					<uni-load-more :status="tabItem.loadingType"></uni-load-more>
+				</scroll-view>
+			</swiper-item>
+		</swiper>
+		<view class="add-btn" @click="addmoney">立刻充值</view>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex';
+import { spreadCommission, userBalance } from '@/api/wallet.js';
+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() {
+		// 初始化获取页面宽度
+		uni.createSelectorQuery()
+			.select('.content')
+			.fields(
+				{
+					size: true
+				},
+				data => {
+					console.log(data);
+					console.log(Math.floor((data.width / 750) * 300));
+					// 保存头部高度
+					this.maxheight =data.height - Math.floor((data.width / 750) * 570);
+					console.log(this.maxheight);
+				}
+			)
+			.exec();
+	},
+	data() {
+		return {
+			// 头部图高度
+			maxheight:'',
+			tabCurrentIndex: 0,
+			navList: [
+				{
+					state: 2,
+					text: '收入',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				},
+				{
+					state: 1,
+					text: '支出',
+					loadingType: 'more',
+					orderList: [
+					],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				},
+				
+			],
+			money: ''
+		};
+	},
+	computed: {
+		...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
+	},
+	onLoad(options) {},
+	onShow() {
+		this.loadData();
+		// 获取用户余额
+		
+	},
+	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 === 'loading') {
+				//防止重复加载
+				return;
+			}
+			// 修改当前对象状态为加载中
+			navItem.loadingType = 'loading';
+
+			spreadCommission(
+				{
+					page: navItem.page,
+					limit: navItem.limit
+				},
+				state
+			)
+				.then(({ data }) => {
+					if (data.length > 0) {
+						data.forEach(e =>{
+							console.log(e);
+							navItem.orderList = navItem.orderList.concat(e.list);
+						})
+						
+						console.log(navItem.orderList);
+						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;
+		},
+		addmoney() {
+			uni.navigateTo({
+				url: '/pages/money/recharge'
+			})
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: #ffffff;
+	height: 100%;
+}
+.content-money {
+	padding-bottom: 30rpx;
+	background: $page-color-base;
+	.moneyTx {
+		position: absolute;
+		top: 150rpx;
+		right: 0rpx;
+		width: 150rpx;
+		padding: 10rpx 30rpx;
+		border: 2px solid #ffffff;
+		border-top-left-radius: 99rpx;
+		border-bottom-left-radius: 99rpx;
+		color: #ffffff;
+		line-height: 1;
+		font-size: $font-base;
+	}
+	.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: 50rpx;
+			width: 48rpx;
+			margin: 0 auto;
+			.icon-img {
+				width: 100%;
+				height: 100%;
+			}
+		}
+	}
+}
+.money-box {
+	// background-color: $base-color;
+	// padding-top: var(--status-bar-height);
+	height: 400rpx;
+	color: #FF4C4C;
+	text-align: center;
+	position: relative;
+	image {
+		position: absolute;
+		top: 0;
+		right: 0;
+		height: 100%;
+		width: 100%;
+		// z-index: 1;
+	}
+	.text {
+		padding-top: 147rpx;
+		font-size: $font-sm;
+		position: relative;
+	}
+	.money {
+		padding-top: 175rpx;
+		// margin: auto 0;
+		font-size: 56rpx;
+		font-weight: bold;
+		color: #3F7C1F;
+		position: relative;
+		.money-icon {
+			font-size: 38rpx;
+			font-weight: bold;
+			color: #3F7C1F;
+		}
+	}
+}
+
+.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: $base-color;
+			&:after {
+				content: '';
+				position: absolute;
+				left: 50%;
+				bottom: 0;
+				transform: translateX(-50%);
+				width: 44px;
+				height: 0;
+				border-bottom: 2px solid $base-color;
+			}
+		}
+	}
+}
+// 列表
+
+.swiper-box {
+	padding-top: 10rpx;
+	.order-item {
+		padding: 20rpx 30rpx;
+		line-height: 1.5;
+		position: relative;
+		// border-bottom: 1rpx black solid;
+		.title-box {
+			.title {
+				font-size: $font-lg;
+				color: $font-color-base;
+			}
+			.time {
+				font-size: $font-base;
+				color: $font-color-light;
+			}
+		}
+		.money {
+			// color: #fd5b23;
+			color: #901B21;
+			font-size: $font-lg;
+		}
+		.jg {
+			width: 701rpx;
+			height: 2rpx;
+			background: #F0F4F8;
+			margin: 0 auto;
+			position: absolute;
+			bottom: 0;
+		}
+	}
+}
+.list-scroll-content {
+	height: 100%;
+}
+.content {
+	height: 100%;
+	.empty-content {
+		background-color: #ffffff;
+	}
+}
+.add-btn {
+	position: fixed;
+	bottom: 51rpx;
+	right: 39rpx;
+	width: 674rpx;
+	height: 88rpx;
+	background: linear-gradient(-35deg, #F8DD4F, #FBEB77);
+	border-radius: 44rpx;
+	color: #fff;
+	text-align: center;
+	line-height: 88rpx;
+	font-size: 34rpx;
+}
+</style>

+ 312 - 0
pages/money/withdrawal.vue

@@ -0,0 +1,312 @@
+<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.moneyCount;//可提现余额
+				this.minPrice = data.minPrice;//最小提现
+				this.freeze =data.inmoneyCount//提现中的余额
+			});
+		},
+		// 跳转
+		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: 1//0佣金1余额
+			}
+			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>

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 169 - 0
pages/order/createOrder.vue


+ 411 - 0
pages/order/evaluate.vue

@@ -0,0 +1,411 @@
+<template>
+	<view class="content">
+		<view class="order-item">
+			<view class="goods-box-single">
+				<image class="goods-img" :src="productInfo.image" mode="aspectFill"></image>
+				<view class="right position-relative">
+					<view class="flex">
+						<text class="title">{{ productInfo.store_name }}</text>
+						<view class="title-right">
+							<view class="price">{{ productInfo.price }}</view>
+							<view class="attr-box">x{{ list.cart_num }}</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view>
+				<view class="flex_item zhil">
+					<view>商品质量</view>
+					<view><uniRate text="1" size="20" margin="10" :value="rateValue1" @change="rateChange1"></uniRate></view>
+				</view>
+				<view class="flex_item zhil">
+					<view>服务态度</view>
+					<view><uniRate text="1" size="20" margin="10" :value="rateValue2" @change="rateChange2"></uniRate></view>
+				</view>
+				<view class="equity_box">
+					<view class="text-box uni-textarea">
+						<textarea placeholder-style="color:#999" :placeholder="placeholder" @blur="bindTextAreaBlur"></textarea>
+					</view>
+					<view class="">
+						<view class="add-img-box flex_item">
+							<view class="add-img-item" v-for="(item, index) in imgList" :key="index">
+								<image class="add-img" @click.stop="imgInfo(index)" :src="item.url" mode="aspectFill"></image>
+								<image class="add-img-del" @click.stop="delImg(index)" src="/static/img/delete.png"></image>
+							</view>
+							<view v-if="imgList.length < 9" class="add-img-item" @click.stop="scImg()">
+								<image class="add-img" src="/static/img/add.png"></image>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view @click.stop="submit" class="address-box submit-box"><text class="submit-btn">提交评论</text></view>
+	</view>
+</template>
+
+<script>
+import { product, upload, order_comment } from '@/api/order.js';
+import uniRate from '@/components/uni-rate/uni-rate.vue';
+export default {
+	components: {
+		uniRate
+	},
+	data() {
+		return {
+			list: '', //订单详情
+			productInfo: '',
+			text: '', //评论内容
+			placeholder: '商品满足你的期待么?说说你的想法,分享给想买的他们吧~',
+			imgList: [],
+			unique: '', //商品唯一标识码
+			cloudimgList: [],
+			rateValue1: '', //商品质量
+			rateValue2: '', //服务态度
+			imgCount: 6 //最多支持9张上传,可以修改
+		};
+	},
+	onLoad(option) {
+		this.unique = option.unique;
+		this.loadOrder();
+	},
+	onShow() {},
+	methods: {
+		//text
+		bindTextAreaBlur: function(e) {
+			this.text = e.detail.value;
+		},
+		//获取收入支出信息
+		async loadOrder() {
+			product({
+				unique: this.unique
+			}).then(e => {
+				this.list = e.data;
+				this.productInfo = e.data.productInfo;
+			});
+		},
+		//商品质量评分
+		rateChange1(val) {
+			this.rateValue1 = val.value;
+		},
+		//服务态度评分
+		rateChange2(val) {
+			this.rateValue2 = val.value;
+		},
+		//单张上传图片
+		scImg() {
+			let obj = this;
+			console.log(obj.imgCount, 11);
+			if (obj.imgCount == 0) {
+				uni.showToast({
+					title: '最多添加6张图片',
+					icon: 'none'
+				});
+				return;
+			}
+			upload({
+				file: ''
+			})
+				.then(e => {
+					console.log(e,'e')
+					obj.imgList = [...obj.imgList, ...e];
+					console.log(obj.imgList,'imgList')
+					obj.imgCount = 10 - obj.imgList.length;
+					console.log(obj.imgCount ,'imgCount ')
+				})
+				.catch(e => {});
+		},
+		//提交评论
+		submit(e) {
+			let obj = this;
+			if (obj.imgList.length < 1) {
+				uni.showToast({
+					title: '请添加图片',
+					icon: 'none'
+				});
+				return;
+			}
+			for (let i = 0; i < obj.imgList.length; i++) {
+				obj.cloudimgList.push(obj.imgList[i].url);
+			}
+			let arr = obj.cloudimgList.join(',');
+			uni.showLoading({
+				title: '提交中...',
+				mask: true
+			})
+			order_comment({
+				pics: arr,
+				comment: obj.text,
+				product_score: obj.rateValue1,
+				service_score: obj.rateValue2,
+				unique: obj.unique,
+				
+			})
+				.then(e => {
+					uni.hideLoading()
+					uni.navigateTo({
+						url: '/pages/order/order?state=4'
+					});
+				})
+				.catch(e => {
+					uni.hideLoading()
+					uni.navigateTo({
+						url: '/pages/order/order?state=4'
+					});
+				});
+		},
+		//点击图片显示大图
+		imgInfo(i) {
+			let tempList = [];
+			console.log(111);
+			this.imgList.forEach(e => {
+				tempList.push(e.url);
+			});
+			console.log(tempList);
+			//显示图片
+			uni.previewImage({
+				current: i,
+				loop: false,
+				urls: tempList,
+				indicator: 'default'
+			});
+		},
+		//删除图片
+		delImg(i) {
+			uni.showModal({
+				content: '确定删除这张吗',
+				success: res => {
+					if (res.confirm) {
+						this.imgList.splice(i, 1);
+						this.imgCount++;
+					} else if (res.cancel) {
+					}
+				}
+			});
+		},
+		// 页面跳转
+		navto(e) {
+			uni.navigateTo({
+				url: e
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: #ffffff;
+	height: 100%;
+	.content {
+		background: #ffffff;
+		height: 100%;
+	}
+}
+/* 多条商品 */
+.order-item {
+	display: flex;
+	flex-direction: column;
+	padding: 0rpx 30rpx;
+	background: #fff;
+	margin-top: 20rpx;
+	/* 单条商品 */
+	.goods-box-single {
+		display: flex;
+		padding: 20rpx 0;
+		.goods-img {
+			display: block;
+			width: 120rpx;
+			height: 120rpx;
+		}
+		.right {
+			flex: 1;
+			display: flex;
+			flex-direction: column;
+			padding: 0 30rpx 0 24rpx;
+			overflow: hidden;
+			height: 100%;
+			.title {
+				align-self: flex-start;
+				font-size: $font-base + 2rpx;
+				color: $font-color-dark;
+				height: 80rpx;
+				overflow:hidden; 
+				text-overflow:ellipsis;
+				display:-webkit-box; 
+				-webkit-box-orient:vertical;
+				-webkit-line-clamp:2; 
+			}
+			.title-right {
+				flex-shrink: 0;
+				text-align: right;
+				align-self: flex-start;
+			}
+			.attr-box {
+				font-size: $font-sm + 2rpx;
+				color: $font-color-light;
+			}
+			.price {
+				font-size: $font-base + 2rpx;
+				color: $font-color-dark;
+				&:before {
+					content: '¥';
+					font-size: $font-sm;
+					margin: 0 2rpx 0 8rpx;
+				}
+			}
+		}
+	}
+}
+.equity_box {
+	background-color: #fafafa;
+	border-radius: 10rpx;
+	padding: 25rpx 25rpx;
+	margin: 25rpx 0rpx;
+	.text-box {
+		height: 200rpx;
+		textarea {
+			font-size: 25rpx;
+			width: 100%;
+			height: 100%;
+			overflow: hidden;
+			text-overflow: ellipsis;
+			display: -webkit-box;
+			-webkit-box-orient: vertical;
+			-webkit-line-clamp: 5;
+		}
+	}
+}
+.zhil {
+	font-size: 28rpx !important;
+	padding: 15rpx 15rpx;
+}
+.submit-box {
+	bottom: 0;
+	left: 0;
+	width: 750rpx;
+}
+.submit-btn {
+	margin-top: 10px;
+	display: inline-block;
+	width: 670rpx;
+	height: 96rpx;
+	line-height: 96rpx;
+	text-align: center;
+	background-color: #fd4040 !important;
+	opacity: 1;
+	border-radius: 32rpx;
+	border-width: 8rpx;
+	border-color: rgba(255, 255, 255, 1);
+	box-shadow: 0rpx 8rpx 12rpx rgba(0, 0, 0, 0.16);
+	border-radius: 56rpx;
+	font-size: 39rpx;
+	font-weight: bold;
+	color: rgba(255, 255, 255, 1);
+}
+.submit-btn-txt {
+	font-size: 39rpx;
+	font-weight: bold;
+	line-height: 47rpx;
+	color: rgba(255, 255, 255, 1);
+	opacity: 1;
+}
+.map-box {
+	width: 484rpx;
+	height: 256rpx;
+	border-width: 4rpx;
+	border-color: rgba(255, 255, 255, 1);
+	box-shadow: 0rpx 0rpx 24rpx rgba(0, 0, 0, 0.16);
+	/* border-radius: 12rpx; */
+	position: relative;
+}
+.map {
+	position: absolute;
+	top: 0;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	width: 476rpx;
+	height: 250rpx;
+}
+.map-img {
+	position: absolute;
+	top: 90rpx;
+	left: 156rpx;
+	width: 230rpx;
+	height: 68rpx;
+	background-color: rgba(51, 51, 51, 0.64);
+	border-width: 1rpx;
+	border-color: rgba(0, 0, 0, 0);
+	border-radius: 34px;
+
+	font-size: 28rpx;
+	font-weight: bold;
+	line-height: 66rpx;
+	color: rgba(255, 255, 255, 1);
+	text-align: center;
+}
+.address-box {
+	padding: 15rpx 40rpx;
+	margin-bottom: 10px;
+}
+.label {
+	font-size: 36rpx;
+	font-weight: bold;
+	line-height: 50rpx;
+	color: #222222;
+}
+.label-img {
+	padding-left: 40rpx;
+}
+
+.add-img-box {
+	width: 100%;
+	flex-direction: row;
+	flex-wrap: wrap;
+	margin-top: 50rpx;
+}
+.add-img-item {
+	width: 180rpx;
+	height: 180rpx;
+	border-radius: 24rpx;
+	position: relative;
+	margin: 0rpx 20rpx;
+	margin-bottom: 25rpx;
+	.add-img {
+		width: 100%;
+		height: 100%;
+		border-radius: 24rpx;
+	}
+}
+.add-img-camera {
+	flex: 1;
+}
+.add-img-del {
+	position: absolute;
+	width: 40rpx;
+	height: 40rpx;
+	left: 155rpx;
+	bottom: 155rpx;
+	//background-color: rgba(238, 0, 0, 1);
+	border-radius: 20rpx;
+}
+.address-time {
+	width: 484rpx;
+	height: 88rpx;
+	background-color: rgba(245, 245, 245, 1);
+	opacity: 1;
+	border-radius: 24rpx;
+	text-align: center;
+
+	font-size: 35rpx;
+	font-weight: 500;
+	color: rgba(51, 51, 51, 1);
+}
+.line {
+	width: 750rpx;
+	height: 1px;
+	transform: scaleY(0.3);
+	background-color: rgba(0, 0, 0, 0.5);
+}
+</style>

+ 74 - 0
pages/order/expressInfo.vue

@@ -0,0 +1,74 @@
+<template>
+	<view class="container">
+		<view class="express-box">
+			<view class="top-text">
+				<text class="top-com">{{expressList.com}}</text>
+				<text>{{ expressList.nu }}</text>
+			</view>
+			<view class="express-body">
+				<uni-steps :options="expressList.data" active-color="#007AFF" :active="active" direction="column"></uni-steps>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { express_query } from '@/api/order.js';
+import uniSteps from '@/components/uni-steps/uni-steps.vue';
+export default {
+	components: {
+		uniSteps
+	},
+	data() {
+		return {
+			id: '',
+			expressList: [],
+			active: 0
+		}
+	},
+	onLoad(option) {
+		this.id = option.id
+	},
+	onShow() {
+		this.loadData()
+	},
+	methods: {
+		loadData() {
+			express_query({
+				id: this.id,
+			}).then(({data}) => {
+				this.expressList = data;
+				console.log(this.expressList)
+			})
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.container {
+	padding: 40rpx;
+	.express-box {
+		border-radius: $border-radius-sm;
+		.top-text {
+			width: 100%;
+			height: 60rpx;
+			background: #FFFFFF;
+			padding-left: 20rpx;
+			font-size: $font-base;
+			border-radius: $border-radius-sm;
+			display: flex;
+			align-items: center;
+			.top-com {
+				margin-right: 10rpx;
+			}
+		}
+		.express-body {
+			margin-top: 20rpx;
+			background: #FFFFFF;
+			border-radius: $border-radius-sm;
+			padding: 20rpx 10rpx 20rpx 0;
+		}
+	}
+}
+</style>

+ 675 - 0
pages/order/order.vue

@@ -0,0 +1,675 @@
+<template>
+	<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>
+		<swiper :current="tabCurrentIndex" 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>
+
+					<!-- 订单列表 -->
+					<view @click="goToOrderDetail(item)" v-for="(item, index) in tabItem.orderList" :key="index" class="order-item">
+						<view class="i-top b-b">
+							<text class="time">订单编号:{{ item.order_id }}</text>
+							<text class="state" :style="{ color: item.stateTipColor }">{{ item._status._title }}</text>
+							<text v-if="item.status === 4" class="del-btn iconfont icondelete" @click="deleteOrder(index)"></text>
+						</view>
+
+						<scroll-view v-if="item.cartInfo.length > 1" class="goods-box" scroll-x>
+							<view v-for="(goodsItem, goodsIndex) in item.cartInfo" :key="goodsIndex" class="goods-item">
+								<image class="goods-img" :src="goodsItem.productInfo.image" mode="aspectFill"></image>
+							</view>
+						</scroll-view>
+						<!-- <view v-if="item.cartInfo.length === 1" class="goods-box-single" v-for="(goodsItem, goodsIndex) in item.cartInfo" :key="goodsIndex">
+							<image class="goods-img" :src="goodsItem.productInfo.image" mode="aspectFill"></image>
+							<view class="right">
+								<text class="title clamp">{{ goodsItem.productInfo.store_name }}</text>
+								<text class="attr-box">{{ goodsItem.attrInfo ? goodsItem.attrInfo.suk : '' }} x {{ goodsItem.cart_num }}</text>
+								<text class="price">{{ moneyNum(goodsItem.productInfo.price)}}</text>
+							</view>
+						</view> -->
+						<view class="goods-box-single" v-for="(goodsItem, goodsIndex) in item.cartInfo" :key="goodsIndex">
+							<image class="goods-img" :src="goodsItem.productInfo.image" mode="scaleToFill"></image>
+							<view class="right">
+								<view class="flex-start" style="justify-content: space-between;">
+									<text class="title clamp">{{ goodsItem.productInfo.store_name }}</text>
+									<text class="price">{{ moneyNum(goodsItem.truePrice) }}</text>
+								</view>
+								<view class="row flex">
+									<text class="row_title">{{ goodsItem.productInfo.attrInfo ? goodsItem.productInfo.attrInfo.suk : '' }}</text>
+									<text class="attr-box"> x {{ goodsItem.cart_num }}</text>
+								</view>
+							</view>
+						</view>
+
+						<view class="price-box">
+							共
+							<text class="num">{{ item.cartInfo.length }}</text>
+							件商品 合计
+							<text class="price">{{ moneyNum(item.pay_price)}}</text>
+							(含邮费
+							<text class="price">{{ moneyNum(item.pay_postage)}}</text>
+							)
+						</view>
+						<view class="action-box b-t" v-if="item.status != 5">
+							<button v-if="item._status._title == '未支付'" class="action-btn" @click.stop="cancelOrder(item)">取消订单</button>
+							<button v-if="item._status._title == '未支付'" @click.stop="orderPay(item)" class="action-btn recom">付款</button>
+							<button v-if="item._status._title == '待评价'" class="action-btn">评价</button>
+							<button v-if="item._status._title == '待收货'" @click.stop="orderTake(item, index)" class="action-btn">确认收货</button>
+							<!-- <button v-if="item._status._title == '未发货'" class="action-btn" @click.stop="orderRefund(item)">申请退款</button> -->
+						</view>
+					</view>
+
+					<uni-load-more :status="tabItem.loadingType"></uni-load-more>
+				</scroll-view>
+			</swiper-item>
+		</swiper>
+	</view>
+</template>
+
+<script>
+import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+import empty from '@/components/empty';
+import { orderList, orderCancel, orderDel, orderTake } from '@/api/order.js';
+export default {
+	components: {
+		uniLoadMore,
+		empty
+	},
+	data() {
+		return {
+			tabCurrentIndex: 0,
+			navList: [
+				{
+					state: 0,
+					text: '待付款',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				},
+				{
+					state: 1,
+					text: '待发货',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				},
+				{
+					state: 2,
+					text: '待收货',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				},
+				{
+					state: 3,
+					text: '待评价',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				},
+				{
+					state: 4,
+					text: '已完成',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				}
+			]
+		};
+	},
+
+	onLoad(options) {
+		/**
+		 * 修复app端点击除全部订单外的按钮进入时不加载数据的问题
+		 * 替换onLoad下代码即可
+		 */
+		this.tabCurrentIndex = +options.state;
+		// #ifndef MP
+		this.loadData();
+		// #endif
+		// #ifdef MP
+		if (options.state == 0) {
+			this.loadData();
+		}
+		// #endif
+	},
+	// #ifdef APP-PLUS || H5
+	onBackPress(e){
+		uni.switchTab({
+			url: '/pages/user/user',
+		});
+		return true;
+	},
+	// #endif
+	methods: {
+		// 转换金额为数字
+		moneyNum(value){
+				return +value;
+		},
+		// 确认收货
+		orderTake(item, index) {
+			let obj = this;
+			uni.showModal({
+				title: '是否确认收货?',
+				success: () => {
+					orderTake({
+						uni: item.order_id
+					})
+						.then(e => {
+							obj.navList[obj.tabCurrentIndex].orderList.splice(index, 1);
+							uni.showToast({
+								title: '收货成功'
+							});
+						})
+						.catch(e => {
+							console.log(e);
+						});
+				}
+			});
+		},
+		//跳转到订单详情
+		goToOrderDetail(e) {
+			uni.navigateTo({
+				url: '/pages/order/orderDetail?id=' + e.order_id
+			});
+		},
+		// 申请退款
+		orderRefund(e) {
+			uni.navigateTo({
+				url: '/pages/order/orderRefund?id=' + e.order_id
+			});
+		},
+		// 订单支付
+		orderPay(e) {
+			uni.navigateTo({
+				url: '/pages/money/pay?type=1&ordid=' + e.order_id + '&money=' + e.pay_price
+			});
+		},
+		//获取订单列表
+		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 === 'loading') {
+				//防止重复加载
+				return;
+			}
+			if (navItem.loadingType === 'noMore') {
+				//防止重复加载
+				return;
+			}
+			// 修改当前对象状态为加载中
+			navItem.loadingType = 'loading';
+
+			orderList({
+				type: state,
+				page: navItem.page,
+				limit: navItem.limit
+			})
+				.then(({ data }) => {
+					let arr = data.map(e => {
+						let b = this.orderStateExp(e.status);
+						e.stateTip = b.stateTip;
+						e.stateTipColor = b.stateTipColor;
+						return e;
+					});
+					navItem.orderList = navItem.orderList.concat(arr);
+					// console.log(navItem.orderList);
+					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;
+		},
+		//删除订单
+		deleteOrder(index) {
+			uni.showLoading({
+				title: '请稍后'
+			});
+			setTimeout(() => {
+				this.navList[this.tabCurrentIndex].orderList.splice(index, 1);
+				uni.hideLoading();
+			}, 600);
+		},
+		//取消订单
+		cancelOrder(item) {
+			uni.showModal({
+				title: '订单取消',
+				content: '是否取消订单?',
+				success: e => {
+					if (e.confirm) {
+						uni.showLoading({
+							title: '请稍后'
+						});
+						orderCancel({ id: item.order_id })
+							.then(e => {
+								uni.showToast({
+									title: '取消成功',
+									duration: 2000,
+									position: 'top'
+								});
+							})
+							.catch(e => {
+								console.log(e);
+							});
+						//取消订单后删除待付款中该项
+						let list = this.navList[this.tabCurrentIndex].orderList;
+						let index = list.findIndex(val => val.id === item.id);
+						index !== -1 && list.splice(index, 1);
+						uni.hideLoading();
+					}
+				}
+			});
+		},
+
+		//订单状态文字和颜色
+		orderStateExp(state) {
+			let stateTip = '',
+				stateTipColor = '#fa436a';
+			switch (+state) {
+				case 0:
+					stateTip = '待付款';
+					break;
+				case 1:
+					stateTip = '待发货';
+					break;
+				case 2:
+					stateTip = '待收货';
+					break;
+				case 3:
+					stateTip = '待评价';
+					break;
+				case 4:
+					stateTip = '已完成';
+					stateTipColor = '#909399';
+					break;
+				case 9:
+					stateTip = '订单已关闭';
+					stateTipColor = '#909399';
+					break;
+
+				//更多自定义
+			}
+			return { stateTip, stateTipColor };
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page,
+.content {
+	background: $page-color-base;
+	height: 100%;
+}
+
+.swiper-box {
+	height: calc(100% - 40px);
+}
+.list-scroll-content {
+	height: 100%;
+}
+
+.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: $font-color-dark;
+		position: relative;
+		&.current {
+			color: $base-color;
+			&:after {
+				content: '';
+				position: absolute;
+				left: 50%;
+				bottom: 0;
+				transform: translateX(-50%);
+				width: 44px;
+				height: 0;
+				border-bottom: 2px solid $base-color;
+			}
+		}
+	}
+}
+
+.uni-swiper-item {
+	height: auto;
+}
+.order-item {
+	display: flex;
+	flex-direction: column;
+	padding-left: 30rpx;
+	background: #fff;
+	margin-top: 16rpx;
+	.i-top {
+		display: flex;
+		align-items: center;
+		height: 80rpx;
+		padding-right: 30rpx;
+		font-size: $font-base;
+		color: $font-color-dark;
+		position: relative;
+		.time {
+			flex: 1;
+		}
+		.state {
+			color: $base-color;
+		}
+		.del-btn {
+			padding: 10rpx 0 10rpx 36rpx;
+			font-size: $font-lg;
+			color: $font-color-light;
+			position: relative;
+			&:after {
+				content: '';
+				width: 0;
+				height: 30rpx;
+				border-left: 1px solid $border-color-dark;
+				position: absolute;
+				left: 20rpx;
+				top: 50%;
+				transform: translateY(-50%);
+			}
+		}
+	}
+	/* 多条商品 */
+	.goods-box {
+		height: 160rpx;
+		padding: 20rpx 0;
+		white-space: nowrap;
+		.goods-item {
+			width: 120rpx;
+			height: 120rpx;
+			display: inline-block;
+			margin-right: 24rpx;
+		}
+		.goods-img {
+			display: block;
+			width: 100%;
+			height: 100%;
+		}
+	}
+	/* 单条商品 */
+	.goods-box-single {
+		display: flex;
+		padding: 20rpx 0;
+		.goods-img {
+			display: block;
+			width: 120rpx;
+			height: 120rpx;
+		}
+		.right {
+			flex: 1;
+			display: flex;
+			flex-direction: column;
+			padding: 0 30rpx 0 24rpx;
+			overflow: hidden;
+			.row{
+				margin-top: 10rpx;
+			}
+			.row_title{
+				padding:5rpx 10rpx;
+				background-color: #dddddd;
+				border-radius: 10rpx;
+				font-size: 22rpx;
+				color: #ffffff;
+			}
+			.title {
+				font-size: $font-base + 2rpx;
+				color: $font-color-dark;
+				line-height: 1;
+				width: 80%;
+			}
+			.attr-box {
+				display: flex;
+				justify-content: flex-end;
+				font-size: $font-sm + 2rpx;
+				color: $font-color-light;
+			}
+			.price {
+				display: inline;
+				font-size: $font-base + 2rpx;
+				color: $font-color-dark;
+				&:before {
+					content: '¥';
+					font-size: $font-sm;
+					
+				}
+			}
+		}
+	}
+	.price-box {
+		display: flex;
+		justify-content: flex-end;
+		align-items: baseline;
+		padding: 20rpx 30rpx;
+		font-size: $font-sm + 2rpx;
+		color: $font-color-light;
+		.num {
+			margin: 0 8rpx;
+			color: $font-color-dark;
+		}
+		.price {
+			font-size: $font-lg;
+			color: $font-color-dark;
+			&:before {
+				content: '¥';
+				font-size: $font-sm;
+				margin: 0 2rpx 0 8rpx;
+			}
+		}
+	}
+	.action-box {
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+		height: 100rpx;
+		position: relative;
+		padding-right: 30rpx;
+	}
+	.action-btn {
+		width: 160rpx;
+		height: 60rpx;
+		margin: 0;
+		margin-left: 24rpx;
+		padding: 0;
+		text-align: center;
+		line-height: 60rpx;
+		font-size: $font-sm + 2rpx;
+		color: $font-color-dark;
+		background: #fff;
+		border-radius: 100px;
+		&:after {
+			border-radius: 100px;
+		}
+		&.recom {
+			color: $base-color;
+			&:after {
+				border-color: $base-color;
+			}
+		}
+		&.evaluate {
+			color: $color-yellow;
+			&:after {
+				border-color: $color-yellow;
+			}
+		}
+	}
+}
+
+/* load-more */
+.uni-load-more {
+	display: flex;
+	flex-direction: row;
+	height: 80rpx;
+	align-items: center;
+	justify-content: center;
+}
+
+.uni-load-more__text {
+	font-size: 28rpx;
+	color: #999;
+}
+
+.uni-load-more__img {
+	height: 24px;
+	width: 24px;
+	margin-right: 10px;
+}
+
+.uni-load-more__img > view {
+	position: absolute;
+}
+
+.uni-load-more__img > view view {
+	width: 6px;
+	height: 2px;
+	border-top-left-radius: 1px;
+	border-bottom-left-radius: 1px;
+	background: #999;
+	position: absolute;
+	opacity: 0.2;
+	transform-origin: 50%;
+	animation: load 1.56s ease infinite;
+}
+
+.uni-load-more__img > view view:nth-child(1) {
+	transform: rotate(90deg);
+	top: 2px;
+	left: 9px;
+}
+
+.uni-load-more__img > view view:nth-child(2) {
+	transform: rotate(180deg);
+	top: 11px;
+	right: 0;
+}
+
+.uni-load-more__img > view view:nth-child(3) {
+	transform: rotate(270deg);
+	bottom: 2px;
+	left: 9px;
+}
+
+.uni-load-more__img > view view:nth-child(4) {
+	top: 11px;
+	left: 0;
+}
+
+.load1,
+.load2,
+.load3 {
+	height: 24px;
+	width: 24px;
+}
+
+.load2 {
+	transform: rotate(30deg);
+}
+
+.load3 {
+	transform: rotate(60deg);
+}
+
+.load1 view:nth-child(1) {
+	animation-delay: 0s;
+}
+
+.load2 view:nth-child(1) {
+	animation-delay: 0.13s;
+}
+
+.load3 view:nth-child(1) {
+	animation-delay: 0.26s;
+}
+
+.load1 view:nth-child(2) {
+	animation-delay: 0.39s;
+}
+
+.load2 view:nth-child(2) {
+	animation-delay: 0.52s;
+}
+
+.load3 view:nth-child(2) {
+	animation-delay: 0.65s;
+}
+
+.load1 view:nth-child(3) {
+	animation-delay: 0.78s;
+}
+
+.load2 view:nth-child(3) {
+	animation-delay: 0.91s;
+}
+
+.load3 view:nth-child(3) {
+	animation-delay: 1.04s;
+}
+
+.load1 view:nth-child(4) {
+	animation-delay: 1.17s;
+}
+
+.load2 view:nth-child(4) {
+	animation-delay: 1.3s;
+}
+
+.load3 view:nth-child(4) {
+	animation-delay: 1.43s;
+}
+
+@-webkit-keyframes load {
+	0% {
+		opacity: 1;
+	}
+
+	100% {
+		opacity: 0.2;
+	}
+}
+</style>

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 184 - 0
pages/order/orderDetail.vue


+ 246 - 0
pages/order/orderRefund.vue

@@ -0,0 +1,246 @@
+<template>
+	<view class="content">
+		<view class="order-item">
+			<scroll-view v-if="listStyle == 1" class="goods-box" scroll-x>
+				<view v-for="(goodsItem, goodsIndex) in item.cartInfo" :key="goodsIndex" class="goods-item">
+					<image class="goods-img" :src="goodsItem.productInfo.image" mode="aspectFill"></image>
+				</view>
+			</scroll-view>
+			<view v-if="listStyle == 2" class="goods-box-single" v-for="(goodsItem, goodsIndex) in item.cartInfo" :key="goodsIndex">
+				<image class="goods-img" :src="goodsItem.productInfo.image" mode="aspectFill"></image>
+				<view class="right">
+					<text class="title clamp">{{ goodsItem.productInfo.store_name }}</text>
+					<text class="attr-box">{{ goodsItem.attrInfo ? goodsItem.attrInfo.suk : '' }} x {{ goodsItem.cart_num }}</text>
+					<text class="price">{{ goodsItem.productInfo.price }}</text>
+				</view>
+			</view>
+		</view>
+		<view class="orderDetial">
+			<view class="row b-b flex">
+				<text class="tit">订单总价</text>
+				<view class="input">¥{{ item.total_price }}</view>
+			</view>
+			<view class="row b-b flex">
+				<text class="tit">邮费</text>
+				<view class="input">{{ item.pay_postage > 0 ? '¥' +item.pay_postage : '免邮费' }}</view>
+			</view>
+			<view class="row b-b flex" v-if="item.coupon_id > 0">
+				<text class="tit">优惠券</text>
+				<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>
+			</view>
+			<view class="row b-b flex">
+				<text class="tit ">实付</text>
+				<view class="input payColor">¥{{ item.pay_price }}</view>
+			</view>
+		</view>
+		<view class="row b-b">
+			<text class="tit">退款理由</text>
+			<picker mode="selector" :range="value" @change="bindChange">
+				<view class="refund" v-if="refund">{{ refund || '请选择退款理由' }}</view>
+				<view class="noRefund" v-else>请选择退款理由</view>
+			</picker>
+		</view>
+		<view class="row b-b">
+			<text class="tit">备注说明</text>
+			<input class="input" type="text" v-model="reason" placeholder="请填写备注" placeholder-class="placeholder" />
+		</view>
+		<button class="add-btn" @click="confirm">提交</button>
+	</view>
+</template>
+
+<script>
+import { refund, refundReason, orderDetail } from '@/api/order.js';
+export default {
+	data() {
+		return {
+			refund: '', //退款理由
+			reason: '', //备注
+			value: ['1', '2', '3', '4', '5', '6', '7', '8', 9, 10, 11, 12, 13],
+			orderId: '',
+			item: {},
+			listStyle: 2
+		};
+	},
+	onLoad(option) {
+		this.orderId = option.id;
+		this.refundReason();
+		this.loadOrder();
+	},
+	methods: {
+		// 切换选中事件
+		bindChange(e) {
+			this.refund = this.value[e.detail.value];
+		},
+		// 加载退款理由
+		refundReason() {
+			refundReason({}).then(e => {
+				this.value = e.data;
+			});
+		},
+		loadOrder() {
+			orderDetail({}, this.orderId).then(e => {
+				this.item = e.data;
+			});
+		},
+		//提交
+		confirm() {
+			let obj = this;
+			if (!obj.refund) {
+				uni.showModal({
+					title: '错误',
+					content: '请填写退货理由',
+					showCancel: false
+				});
+				return false;
+			}
+			uni.showLoading({
+				title: '提交中...',
+				mask: true
+			})
+			refund({
+				text: obj.refund,
+				uni: obj.orderId,
+				refund_reason_wap_explain: obj.reason
+			}).then(function(e) {
+				uni.hideLoading()
+				uni.showToast({
+					title:'提交成功',
+					duration:1500
+				})
+			}).catch( err => {
+				uni.hideLoading()
+				console.log(err)
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: $page-color-base;
+	padding-top: 16rpx;
+}
+.orderDetial {
+	.row {
+		.input {
+			text-align: right;
+		}
+	}
+}
+.row {
+	display: flex;
+	align-items: center;
+	position: relative;
+	padding: 0 30rpx;
+	height: 110rpx;
+	background: #fff;
+	.refund {
+		font-size: 30rpx;
+		color: $font-color-dark;
+		padding-left: 20rpx;
+	}
+	.noRefund {
+		font-size: 30rpx;
+		color: $font-color-light;
+		padding-left: 20rpx;
+	}
+	.tit {
+		flex-shrink: 0;
+		width: 120rpx;
+		font-size: 30rpx;
+		color: $font-color-dark;
+	}
+	.input {
+		flex: 1;
+		font-size: 30rpx;
+		color: $font-color-dark;
+		padding-left: 20rpx;
+		&.payColor {
+			color: $color-red;
+		}
+	}
+	.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);
+}
+
+/* 多条商品 */
+.order-item {
+	display: flex;
+	flex-direction: column;
+	padding-left: 30rpx;
+	background: #fff;
+	margin-top: 16rpx;
+	.goods-box {
+		height: 160rpx;
+		padding: 20rpx 0;
+		white-space: nowrap;
+		.goods-item {
+			width: 120rpx;
+			height: 120rpx;
+			display: inline-block;
+			margin-right: 24rpx;
+		}
+		.goods-img {
+			display: block;
+			width: 100%;
+			height: 100%;
+		}
+	}
+	/* 单条商品 */
+	.goods-box-single {
+		display: flex;
+		padding: 20rpx 0;
+		.goods-img {
+			display: block;
+			width: 120rpx;
+			height: 120rpx;
+		}
+		.right {
+			flex: 1;
+			display: flex;
+			flex-direction: column;
+			padding: 0 30rpx 0 24rpx;
+			overflow: hidden;
+			.title {
+				font-size: $font-base + 2rpx;
+				color: $font-color-dark;
+				line-height: 1;
+			}
+			.attr-box {
+				font-size: $font-sm + 2rpx;
+				color: $font-color-light;
+				padding: 10rpx 12rpx;
+			}
+			.price {
+				font-size: $font-base + 2rpx;
+				color: $font-color-dark;
+				&:before {
+					content: '¥';
+					font-size: $font-sm;
+					margin: 0 2rpx 0 8rpx;
+				}
+			}
+		}
+	}
+}
+</style>

+ 68 - 0
pages/product/common/contentText.vue

@@ -0,0 +1,68 @@
+<template>
+	<view class="detail-desc">
+		<view class="d-header"><text>图文详情</text></view>
+		<rich-text class="detail-centent" :nodes="description"></rich-text>
+		<!-- 底部高度撑开 -->
+	</view>
+</template>
+
+<script>
+export default {
+	props: {
+		description: {
+			default: ''
+		},
+	},
+	data() {
+		return {
+			
+		};
+	},
+};
+</script>
+
+<style lang="scss">
+	/*  详情 */
+	.detail-desc {
+		margin-top: 14rpx;
+		background: #fff;
+		/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;
+			}
+		}
+	}
+	/* 商品详情中限制图片大小 */
+	/deep/ .rich-img {
+		width: 100% !important;
+		height: auto;
+	}
+</style>

+ 139 - 0
pages/product/common/discounts.vue

@@ -0,0 +1,139 @@
+<template>
+	<view class="c-list">
+		<view class="c-row b-b">
+			<text class="tit">配送</text>
+			<view class="bz-list con" v-if="!mark">立即下单 ,预计最快第二天8.30-9:30送达</view>
+			<view class="bz-list con reding" v-else>{{mark}}</view>
+		</view>
+		<view v-if="showCoupon" class="c-row b-b" @click="Getcoupon">
+			<text class="tit">优惠券</text>
+			<text class="con t-r red">领取优惠券</text>
+			<text class="iconfont iconenter"></text>
+		</view>
+		<view class="c-row b-b">
+			<text class="tit">简介</text>
+			<view class="bz-list con">
+				<text>{{ Info }}</text>
+				<!-- <text>{{ copy2 }}</text> -->
+
+			</view>
+			<view class="copy-btn" @click="copy">一键复制</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		props: {
+			showCoupon: {
+				type: Boolean,
+				default: false
+			},
+			mark: {
+				default: ''
+			},
+			Info: {
+				default: ''
+			},
+		},
+		data() {
+			return {
+				copy1: '食材质检 ·',
+				copy2: '无接触配送到门口'
+			};
+		},
+		methods: {
+			Getcoupon() {
+				this.$emit('clickCoupon')
+			},
+			copy() {
+				// let copyText = this.copy1 + ' ' + this.copy2;
+				console.log(this.Info)
+				uni.setClipboardData({
+					//去找上面的数据
+					data: this.Info,
+					success: function(res) {
+						uni.showToast({
+							title: '复制成功',
+						});
+					},
+					fail: function(res) {
+					}
+				});
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	.c-list {
+		font-size: $font-sm + 2rpx;
+		color: $font-color-base;
+		background: #fff;
+
+		.title {
+			color: #333333;
+			font-size: 32rpx;
+			font-weight: bold;
+		}
+
+		.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;
+			}
+		}
+
+		.reding {
+			color: #FF0815 !important;
+		}
+
+		.bz-list {
+			height: 40rpx;
+			font-size: $font-sm + 2rpx;
+			color: $font-color-dark;
+			overflow: hidden;
+			text-overflow: ellipsis;
+			white-space: nowrap;
+			
+			text {
+				display: inline-block;
+				margin-right: 30rpx;
+				overflow: hidden;
+				text-overflow: ellipsis;
+				white-space: nowrap;
+				width: 100%;
+			}
+		}
+
+		.copy-btn {
+			background-color: #F3F3F2;
+			padding: 8rpx 20rpx;
+			border-radius: 10rpx;
+			color: #040406;
+		}
+
+		.red {
+			color: #fb6d24;
+		}
+	}
+
+	/* 商品详情中限制图片大小 */
+	.rich-img {
+		width: 100% !important;
+		height: auto;
+	}
+</style>

+ 115 - 0
pages/product/common/estimate.vue

@@ -0,0 +1,115 @@
+<template>
+	<view class="eva-section" @click="navTo">
+		<view class="e-header">
+			<text class="tit">评价</text>
+			<text>({{ list.replyCount }})</text>
+			<text class="tip">好评率 {{ list.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="stime">{{ reply.add_time }}</text>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	props: {
+		list: {
+			default: ''
+		},
+		reply: {
+			default: ''
+		},
+	},
+	data() {
+		return {
+		};
+	},
+	methods: {
+		navTo() {
+			this.$emit('navTo')
+		}
+	},
+};
+</script>
+
+<style lang="scss">
+/* 评价 */
+.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;
+			}
+		}
+	}
+	.con_image {
+		width: 130rpx;
+		height: 130rpx;
+		display: inline-block;
+		padding: 15rpx;
+		image {
+			width: 100%;
+			height: 100%;
+		}
+	}
+}
+</style>

+ 85 - 0
pages/product/common/freshDetail.vue

@@ -0,0 +1,85 @@
+<template>
+	<view class="c-list" v-if="goodsObjact.net_quantity||goodsObjact.storage_condition||goodsObjact.expiration_date">
+		<view class="c-row title b-b">规格</view>
+		<view class="c-row b-b" v-if="goodsObjact.net_quantity">
+			<text class="tit">净含量</text>
+			<text class="con t-r">{{ goodsObjact.net_quantity }}</text>
+		</view>
+		<view class="c-row b-b" v-if="goodsObjact.storage_condition">
+			<text class="tit">保存条件</text>
+			<text class="con t-r">{{ goodsObjact.storage_condition }}</text>
+		</view>
+		<view class="c-row b-b" v-if="goodsObjact.expiration_date">
+			<text class="tit">保质期</text>
+			<text class="con t-r">{{ goodsObjact.expiration_date }}</text>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	props: {
+		goodsObjact: {
+			type: Object,
+			default: function () {
+				return {
+					
+				}
+			}
+		},
+	},
+	data() {
+		return {
+			
+		};
+	},
+};
+</script>
+
+<style lang="scss">
+.c-list {
+	font-size: $font-sm + 2rpx;
+	color: $font-color-base;
+	background: #fff;
+	.title {
+		color: #333333;
+		font-size: 32rpx;
+		font-weight: bold;
+	}
+	.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: #fb6d24;
+	}
+}
+</style>

+ 120 - 0
pages/product/common/guessLike.vue

@@ -0,0 +1,120 @@
+<template>
+	<view class="guess-item">
+		<view class="guess">猜你喜欢</view>
+		<view class="guess-scroll flex_item" scroll-x>
+			<view class="scroll-list" v-for="ls in goodList" @click="navToDetailPage(ls)">
+				<view class="scoll-img"><image :src="ls.image"></image></view>
+				<view class="scoll-name ellipsis">{{ ls.store_name }}</view>
+				<view class="price-list flex">
+					<view class="tpl">
+						<view class="red-price">
+							¥
+							<text>{{ ls.price }}</text>
+						</view>
+						<view class="grey-price">¥{{ ls.ot_price }}</view>
+					</view>
+					<view class="img position-relative" @click.stop="Addcar(ls)">
+						<image src="/static/img/img13.png"></image>
+						<view class="corner" v-if="ls.cart_num > 0">
+							<text>{{ ls.cart_num }}</text>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	props: {
+		goodList: {
+			type: Array,
+			default: function () {
+				return []
+			}
+		},
+	},
+	methods: {
+		// 跳转到详情页
+		navToDetailPage(ls){
+			this.$emit('clickNavTo',ls)
+		},
+		// 加入购物车
+		Addcar(ls){
+			this.$emit('Addcar',ls)
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+//猜你喜欢
+.guess-item {
+	padding: 25rpx 25rpx;
+	background: #ffffff;
+	margin-bottom: 15rpx;
+	padding-bottom: 45rpx !important;
+	.guess {
+		color: #000000;
+		font-size: 35rpx;
+		font-weight: 500;
+		padding-bottom: 25rpx;
+	}
+	.guess-scroll {
+		width: 100%;
+		font-size: 24rpx;
+		overflow: hidden;
+		overflow-x: auto;
+		justify-content: flex-start;
+		.scroll-list {
+			border: 2rpx solid #f0f0f0;
+			border-radius: 25rpx;
+			margin-right: 15rpx;
+			.scoll-img {
+				width: 227rpx;
+				border-top-right-radius: 25rpx;
+				border-top-left-radius: 25rpx;
+				height: 227rpx;
+				overflow: hidden;
+				image {
+					width: 100%;
+					height: 100%;
+				}
+			}
+			.scoll-name {
+				height: 80rpx;
+				width: 227rpx;
+				font-size: 22rpx;
+				padding: 15rpx 15rpx;
+			}
+			.price-list {
+				padding: 25rpx 15rpx;
+				padding-right: 25rpx;
+				.tpl {
+					.red-price {
+						color: #f31d29;
+						text {
+							font-size: 35rpx !important;
+							font-weight: bold;
+						}
+					}
+					.grey-price {
+						text-decoration: line-through;
+						color: #999999;
+						font-size: 10px !important;
+					}
+				}
+				.img {
+					width: 45rpx;
+					height: 45rpx;
+					image {
+						width: 100%;
+						height: 100%;
+					}
+				}
+			}
+		}
+	}
+}
+</style>

+ 187 - 0
pages/product/common/productBottom.vue

@@ -0,0 +1,187 @@
+<template>
+	<view class="page-bottom">
+		<view class="btm-btn">
+			<view class="add-btn" @click="buy(2)" v-if="showAdd">加入购物车</view>
+			<view class="buy-btn" @click="buy(1)" :class="{'quck':!showAdd }">{{showAdd? '立即购买': '立即兑换'}}</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { collectAdd, collectDel } from '@/api/product.js';
+export default {
+	props: {
+		many: {
+			default: 9
+		},
+		goodsObjact: {
+			default: function() {
+				return {};
+			}
+		},
+		goodsid: {
+			default: ''
+		},
+		showAdd: {
+			type: Boolean,
+			default: true
+		}
+	},
+	data() {
+		return {};
+	},
+	methods: {
+		buy(type) {
+			this.$emit('specOPne', type);
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+/* 底部操作菜单 */
+.page-bottom {
+	position: fixed;
+	bottom: 0rpx;
+	z-index: 95;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	width: 750rpx;
+	height: 97rpx;
+	background-color: #ffffff;
+	/* 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: 96rpx;
+		height: 80rpx;
+		.iconfont {
+			font-size: 40rpx;
+			line-height: 48rpx;
+			color: $font-color-light;
+		}
+		&.active,
+		&.active .iconfont {
+			color: $uni-color-primary;
+		}
+		.iconlikefill {
+			font-size: 46rpx;
+		}
+		image {
+			width: 56rpx;
+			height: 58rpx;
+		}
+	}
+	.action-btn-group {
+		display: flex;
+		height: 76rpx;
+		border-radius: 100px;
+		overflow: hidden;
+		margin-left: 20rpx;
+		position: relative;
+		&:after {
+			content: '';
+			position: absolute;
+			top: 50%;
+			right: 50%;
+			transform: translateY(-50%);
+			height: 28rpx;
+			width: 0;
+			border-right: 1px solid rgba(255, 255, 255, 0.5);
+		}
+		.action-btn {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			// width: 270rpx;
+			// height: 100%;
+			font-size: $font-base;
+			padding: 0;
+			border-radius: 0;
+			background: transparent;
+			width: 339rpx;
+			height: 90rpx;
+			&.buy-now-btn {
+				background-color: #303e49;
+			}
+			&.add-cart-btn {
+				background-color: #fff;
+				color: #ff4c4c;
+				border: #ff4c4c 1px solid;
+			}
+		}
+	}
+}
+.p-b-btn {
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+	justify-content: center;
+	font-size: $font-sm;
+	color: $font-color-base;
+	width: 96rpx;
+	height: 80rpx;
+	.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;
+	}
+}
+.btm-btn {
+	z-index: 2;
+	width: 750rpx;
+	height: 97rpx;
+	display: flex;
+	// justify-content: space-between;
+	position: fixed;
+	bottom: 0;
+	background-color: #fff;
+	text-align: center;
+	.add-btn {
+		text-align: center;
+		width: 375rpx;
+		height: 97rpx;
+		background: #FFB238;
+		font-size: 36rpx;
+		font-weight: 500;
+		color: #fff;
+		line-height: 97rpx;
+	}
+	.buy-btn {
+		text-align: center;
+		border: none;
+		width: 375rpx;
+		height: 97rpx;
+		background: #6EAB4E;
+		font-size: 36rpx;
+		font-weight: 500;
+		color: #fff;
+		line-height: 97rpx;
+		color: #fff;
+	}
+	.quck {
+		width: 699rpx;
+		height: 90rpx;
+		background: #6EAB4E;
+		border-radius: 45rpx;
+		margin: auto;
+	}
+}
+</style>

+ 159 - 0
pages/product/common/productContent.vue

@@ -0,0 +1,159 @@
+<template>
+	<view class="introduce-section">
+		
+		<!-- 分享 -->
+		<button open-type="share" class="shareDate" style="border: none;" @click="open">
+			<image class="share-img" src="../../../static/icon/share.png"></image>
+		</button>
+		<!-- 价格信息 -->
+		<view class="price-box">
+			<text class="price-tip">¥</text>
+			<view class="price">
+				{{ goodsObjact.price }}
+				<text class="m-price" v-if="goodsObjact.ot_price > goodsObjact.price">¥{{ goodsObjact.ot_price }}</text>
+			</view>
+		</view>
+		<!-- 商品名称 -->
+		<text class="title clamp2">{{ goodsObjact.store_name }}</text>
+	</view>
+</template>
+
+<script>
+export default {
+	props: {
+		goodsObjact: {
+			type: Object,
+			default: function() {
+				return {
+					percent:1
+				};
+			}
+		}
+	},
+	filters: {
+		parseIntTo(percent) {
+			percent = +percent * 100;
+			if (percent % 1 === 0) {
+				return percent;
+			} else {
+				percent = percent.toFixed(1);
+				return percent;
+			}
+		}
+	},
+	data() {
+		return {};
+	},
+	methods: {
+		open() {
+			this.$emit('callf')
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+/* 标题简介 */
+.introduce-section {
+	position: relative;
+	background: #fff;
+	padding: 35rpx 0rpx;
+	padding-left: 35rpx;
+	.title {
+		font-size: 32rpx;
+		color: $font-color-dark;
+		.tip-o {
+			color: #ff3334;
+			padding-left: 15rpx;
+		}
+	}
+	.shareDate {
+		position: absolute;
+		top: 25rpx;
+		right: 10rpx;
+		font-size: 26rpx;
+		color: #3d3f46;
+		border-radius: 15rpx;
+		background-color: #ffffff;
+		height: 60rpx;
+		line-height: 60rpx;
+		&::after {
+			border: none;
+		}
+	}
+	.share-img {
+		width: 30rpx;
+		height: 30rpx;
+		position: relative;
+		top: 5rpx;
+		left: 0;
+		margin-right: 10rpx;
+	}
+	.info {
+		color: #999999;
+		font-size: 26rpx;
+		padding-bottom: 15rpx;
+	}
+	.progress-box {
+		width: 260rpx;
+		position: relative;
+		margin-top: 15rpx;
+		line-height: 10px;
+		.number {
+			font-size: 17rpx;
+			position: absolute;
+			z-index: 999;
+			top: 3rpx;
+			left: 15rpx;
+			color: #ffffff;
+		}
+	}
+	.price-box {
+		display: flex;
+		align-items: baseline;
+		height: 64rpx;
+		padding: 10rpx 0;
+		font-size: 26rpx;
+		color: $uni-color-primary;
+	}
+	.price {
+		font-size: $font-lg + 6rpx;
+		.text {
+			padding-left: 5rpx;
+			color: #b0b0b0;
+			font-size: 22rpx !important;
+		}
+	}
+	.price-green {
+		color: #2dbd59;
+		font-size: 28rpx !important;
+		text {
+			background: #2dbd59;
+			color: #ffffff;
+			padding: 0rpx 10rpx;
+			border-radius: 5rpx;
+			font-size: 22rpx !important;
+			margin-left: 15rpx;
+		}
+	}
+	.m-price {
+		margin: 0 12rpx;
+		color: $font-color-light;
+		text-decoration: line-through;
+		margin-left: 25rpx;
+		font-size: 24rpx;
+	}
+}
+.share-wrapper {
+	width: 36rpx;
+	height: 36rpx;
+	position: absolute;
+	top: 27rpx;
+	right: 43rpx;
+	background-color: #fff;
+	image {
+		width: 100%;
+		height: 100%;
+	}
+}
+</style>

+ 98 - 0
pages/product/common/topSwiper.vue

@@ -0,0 +1,98 @@
+<template>
+	<view class="carousel">
+		<swiper  :circular="true" duration="400" @change="swiperChange">
+			<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 class="swiper-dots">
+			<text class="num">{{ swiperCurrent + 1 }}</text>
+			<text class="sign">/</text>
+			<text class="num">{{ imgList | num }}</text>
+		</view>
+	</view>
+	
+</template>
+
+<script>
+export default {
+	props: {
+		imgList: {
+			type: Array,
+			default: function () {
+				return []
+			}
+		},
+	},
+	data() {
+		return {
+			swiperCurrent: 0,
+			swiperLength: 0
+		};
+	},
+	filters: {
+		num(val) {
+			if(val){
+				
+				return val.length
+			}
+			return 0
+		}
+	},
+	methods: {
+		swiperChange(e) {
+			let index = e.detail.current;
+			this.swiperCurrent = index;
+			
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+.carousel {
+	/* #ifdef APP-PLUS */
+	padding-top: var(--status-bar-height);
+	/* #endif */
+	height: 520rpx;
+	position: relative;
+	swiper {
+		height: 100%;
+	}
+	.image-wrapper {
+		width: 100%;
+		height: 100%;
+	}
+	.swiper-item {
+		display: flex;
+		justify-content: center;
+		align-content: center;
+		height: 700rpx;
+		overflow: hidden;
+		image {
+			width: 100%;
+			height: 100%;
+		}
+	}
+}
+.swiper-dots {
+	position: absolute;
+	bottom: 30rpx;
+	right: 26rpx;
+	color: red;
+	background-color: red;
+	z-index: 99;
+	width: 88rpx;
+	height: 42rpx;
+	background: #000000;
+	opacity: 0.5;
+	border-radius: 21rpx;
+
+	font-size: 28rpx;
+	font-family: PingFang SC;
+	font-weight: 500;
+	color: #FFFFFF;
+	line-height: 42rpx;
+	text-align: center;
+}
+</style>

+ 414 - 0
pages/product/list.vue

@@ -0,0 +1,414 @@
+<template>
+	<view class="content">
+		<view class="navbar" :style="{ position: headerPosition, top: headerTop }">
+			<view class="nav-item" :class="{ current: filterIndex === 0 }" @click="tabClick(0)">综合排序</view>
+			<view class="nav-item" :class="{ current: filterIndex === 1 }" @click="tabClick(1)">
+				<text>销量优先</text>
+				<view class="p-box">
+					<text :class="{ active: numberOrder === 1 && filterIndex === 1 }" class="iconfont iconfold"></text>
+					<text :class="{ active: numberOrder === 2 && filterIndex === 1 }" class="iconfont iconfold xia"></text>
+				</view>
+			</view>
+			<view class="nav-item" :class="{ current: filterIndex === 2 }" @click="tabClick(2)">
+				<text>价格</text>
+				<view class="p-box">
+					<text :class="{ active: priceOrder === 1 && filterIndex === 2 }" class="iconfont iconfold"></text>
+					<text :class="{ active: priceOrder === 2 && filterIndex === 2 }" class="iconfont iconfold xia"></text>
+				</view>
+			</view>
+			<text class="cate-item iconfont iconapps" @click="toggleCateMask('show')"></text>
+		</view>
+		<view class="goods-list">
+			<view v-for="(item, index) in goodsList" :key="index" class="goods-item" @click="navToDetailPage(item)">
+				<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>
+					<text>已售 {{ item.sales }}</text>
+				</view>
+			</view>
+		</view>
+		<uni-load-more :status="loadingType"></uni-load-more>
+
+		<view class="cate-mask" :class="cateMaskState === 0 ? 'none' : cateMaskState === 1 ? 'show' : ''" @click="toggleCateMask">
+			<view class="cate-content" @click.stop.prevent="stopPrevent" @touchmove.stop.prevent="stopPrevent">
+				<scroll-view scroll-y class="cate-list">
+					<view v-for="item in cateList" :key="item.id">
+						<view class="cate-item b-b two">{{ item.cate_name }}</view>
+						<view v-for="tItem in item.children" :key="tItem.id" class="cate-item b-b" :class="{ active: tItem.id == cateId }" @click="changeCate(tItem)">
+							{{ tItem.cate_name }}
+						</view>
+					</view>
+				</scroll-view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+import { getProducts } from '@/api/product.js';
+import { getCategoryList } from '@/api/product.js';
+export default {
+	components: {
+		uniLoadMore
+	},
+	data() {
+		return {
+			cateMaskState: 0, //分类面板展开状态
+			headerPosition: 'fixed',
+			headerTop: '0px',
+			loadingType: 'more', //加载更多状态
+			filterIndex: 0, //查询类型
+			numberOrder: 0, //1 销量从低到高 2销量从高到低
+			limit: 6, //每次加载数据条数
+			page: 0, //当前页数
+			cateId: 0, //已选三级分类id
+			priceOrder: 0, //1 价格从低到高 2价格从高到低
+			cateList: [], //分类列表
+			goodsList: [] //商品列表
+		};
+	},
+
+	onLoad(options) {
+		// #ifdef H5
+		this.headerTop = document.getElementsByTagName('uni-page-head')[0].offsetHeight + 'px';
+		// #endif
+		this.cateId = options.tid;
+		this.loadCateList(options.fid, options.sid);
+		this.loadData();
+	},
+	onPageScroll(e) {
+		//兼容iOS端下拉时顶部漂移
+		if (e.scrollTop >= 0) {
+			this.headerPosition = 'fixed';
+		} else {
+			this.headerPosition = 'absolute';
+		}
+	},
+	//下拉刷新
+	onPullDownRefresh() {
+		this.loadData('refresh');
+	},
+	//监听页面是否滚动到底部加载更多
+	onReachBottom() {
+		this.loadData();
+	},
+	methods: {
+		//加载分类
+		async loadCateList(fid, sid) {
+			let obj = this;
+			getCategoryList({}).then(function(e) {
+				console.log(e);
+				e.data.forEach(function(e) {
+					if (e.id == fid) {
+						obj.cateList = e.children;
+						return;
+					}
+				});
+				console.log(obj.cateList);
+			});
+		},
+		//加载商品 ,带下拉刷新和上滑加载
+		async loadData(type = 'add', loading) {
+			let obj = this;
+			let data = {
+				page: obj.page,
+				limit: obj.limit,
+				sid: obj.cateId //分类id
+			};
+			//没有更多直接返回
+			if (type === 'add') {
+				if (obj.loadingType === 'nomore') {
+					return;
+				}
+				obj.loadingType = 'loading';
+			} else {
+				obj.loadingType = 'more';
+			}
+			if (type === 'refresh') {
+				// 清空数组
+				obj.goodsList = [];
+				obj.page = 1
+			}
+			if (this.filterIndex == 1) {
+				console.log( obj.salesOrder);
+				data.salesOrder = obj.numberOrder == 1 ? 'asc' : 'desc';
+			}
+			if (this.filterIndex == 2) {
+				console.log( obj.priceOrder);
+				data.priceOrder = obj.priceOrder == 1 ? 'asc' : 'desc';
+			}
+			getProducts(data).then(function(e) {
+				console.log(e.data);
+				obj.goodsList = obj.goodsList.concat(e.data);
+				//判断是否还有下一页,有是more  没有是nomore
+				if (obj.limit==e.data.length) {
+					obj.page++
+					obj.loadingType='more'
+				} else{
+					obj.loadingType='nomore'
+				}
+				if (type === 'refresh') {
+					if (loading == 1) {
+						uni.hideLoading();
+					} else {
+						uni.stopPullDownRefresh();
+					}
+				}
+			});
+		},
+		//筛选点击
+		tabClick(index) {
+			// 防止重复点击综合排序
+			if (this.filterIndex === 0 && this.filterIndex === index) {
+				return;
+			}
+			this.filterIndex = index;
+			// 判断是否为销量优先
+			if (index === 1) {
+				this.numberOrder = this.numberOrder === 1 ? 2 : 1;
+			}
+			// 判断是否为价格优先
+			if (index === 2) {
+				this.priceOrder = this.priceOrder === 1 ? 2 : 1;
+			}
+			// 初始化页数
+			this.page = 1;
+			// 初始化数组
+			uni.pageScrollTo({
+				duration: 300,
+				scrollTop: 0
+			});
+			this.loadData('refresh', 1);
+			uni.showLoading({
+				title: '正在加载'
+			});
+		},
+		//显示分类面板
+		toggleCateMask(type) {
+			let timer = type === 'show' ? 10 : 300;
+			let state = type === 'show' ? 1 : 0;
+			this.cateMaskState = 2;
+			setTimeout(() => {
+				this.cateMaskState = state;
+			}, timer);
+		},
+		//分类点击
+		changeCate(item) {
+			this.cateId = item.id;
+			// 显示右侧分类
+			this.toggleCateMask();
+			// 滚轮返回顶部
+			uni.pageScrollTo({
+				duration: 300,
+				scrollTop: 0
+			});
+			// 初始化查询页数
+			this.page = 1
+			// 重新加载数据
+			this.loadData('refresh', 1);
+			uni.showLoading({
+				title: '正在加载'
+			});
+		},
+		//详情
+		navToDetailPage(item) {
+			let id = item.id;
+			uni.navigateTo({
+				url: `/pages/product/product?id=${id}`
+			});
+		},
+		stopPrevent() {}
+	}
+};
+</script>
+
+<style lang="scss">
+page,
+.content {
+	background: $page-color-base;
+}
+.content {
+	padding-top: 96rpx;
+}
+
+.navbar {
+	position: fixed;
+	left: 0;
+	top: var(--window-top);
+	display: flex;
+	width: 100%;
+	height: 80rpx;
+	background: #fff;
+	box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.06);
+	z-index: 10;
+	.nav-item {
+		flex: 1;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		height: 100%;
+		font-size: 30rpx;
+		color: $font-color-dark;
+		position: relative;
+		&.current {
+			color: $base-color;
+			&:after {
+				content: '';
+				position: absolute;
+				left: 50%;
+				bottom: 0;
+				transform: translateX(-50%);
+				width: 120rpx;
+				height: 0;
+				border-bottom: 4rpx solid $base-color;
+			}
+		}
+	}
+	.p-box {
+		display: flex;
+		flex-direction: column;
+		.iconfont {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			width: 30rpx;
+			height: 14rpx;
+			line-height: 1;
+			margin-left: 4rpx;
+			font-size: 26rpx;
+			color: #888;
+			&.active {
+				color: $base-color;
+			}
+		}
+		.xia {
+			transform: scaleY(-1);
+		}
+	}
+	.cate-item {
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		height: 100%;
+		width: 80rpx;
+		position: relative;
+		font-size: 44rpx;
+		&:after {
+			content: '';
+			position: absolute;
+			left: 0;
+			top: 50%;
+			transform: translateY(-50%);
+			border-left: 1px solid #ddd;
+			width: 0;
+			height: 36rpx;
+		}
+	}
+}
+
+/* 分类 */
+.cate-mask {
+	position: fixed;
+	left: 0;
+	top: var(--window-top);
+	bottom: 0;
+	width: 100%;
+	background: rgba(0, 0, 0, 0);
+	z-index: 95;
+	transition: 0.3s;
+
+	.cate-content {
+		width: 630rpx;
+		height: 100%;
+		background: #fff;
+		float: right;
+		transform: translateX(100%);
+		transition: 0.3s;
+	}
+	&.none {
+		display: none;
+	}
+	&.show {
+		background: rgba(0, 0, 0, 0.4);
+
+		.cate-content {
+			transform: translateX(0);
+		}
+	}
+}
+.cate-list {
+	display: flex;
+	flex-direction: column;
+	height: 100%;
+	.cate-item {
+		display: flex;
+		align-items: center;
+		height: 90rpx;
+		padding-left: 30rpx;
+		font-size: 28rpx;
+		color: #555;
+		position: relative;
+	}
+	.two {
+		height: 64rpx;
+		color: #303133;
+		font-size: 30rpx;
+		background: #f8f8f8;
+	}
+	.active {
+		color: $base-color;
+	}
+}
+
+/* 商品列表 */
+.goods-list {
+	display: flex;
+	flex-wrap: wrap;
+	padding: 0 30rpx;
+	background: #fff;
+	.goods-item {
+		display: flex;
+		flex-direction: column;
+		width: 48%;
+		padding-bottom: 40rpx;
+		&:nth-child(2n + 1) {
+			margin-right: 4%;
+		}
+	}
+	.image-wrapper {
+		width: 100%;
+		height: 330rpx;
+		border-radius: 3px;
+		overflow: hidden;
+		image {
+			width: 100%;
+			height: 100%;
+			opacity: 1;
+		}
+	}
+	.title {
+		font-size: $font-lg;
+		color: $font-color-dark;
+		line-height: 80rpx;
+	}
+	.price-box {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		padding-right: 10rpx;
+		font-size: 24rpx;
+		color: $font-color-light;
+	}
+	.price {
+		font-size: $font-lg;
+		color: $uni-color-primary;
+		line-height: 1;
+		&:before {
+			content: '¥';
+			font-size: 26rpx;
+		}
+	}
+}
+</style>

+ 1168 - 0
pages/product/product.vue

@@ -0,0 +1,1168 @@
+<template>
+	<view class="container">
+		<!-- 轮播图 -->
+		<top-swiper :imgList="imgList"></top-swiper>
+		<!-- 标题 -->
+		<view class="introduce-section" v-if="goodsType == 0">
+			<button class="shareDate" style="border: none;" @click="callf()">
+				<image class="share-img" src="../../static/icon/share.png"></image>
+			</button>
+			<view class="price-box">
+				<text class="price-tip">¥</text>
+				<view class="price">
+					{{ goodsObjact.price }}
+					<text class="m-price">¥{{ goodsObjact.ot_price }}</text>
+				</view>
+			</view>
+			<text class="title clamp2" v-if="goodsObjact.title">{{ goodsObjact.title }}</text>
+			<text class="title clamp2" v-else>{{ goodsObjact.store_name }}</text>
+		</view>
+		<view class="introduce-section" v-if="goodsType == 2">
+			<button class="shareDate" style="border: none;" @click="callf()">
+				<image class="share-img" src="../../static/icon/share.png"></image>
+			</button>
+			<view class="price-box-jf">
+				<!-- <text class="price-tip">¥</text> -->
+				<view class="price">
+					<text>{{goodsObjact.integral}}</text><text class="jf">积分</text>
+					<text class="m-price">¥{{ goodsObjact.ot_price }}</text>
+				</view>
+			</view>
+			<text class="title clamp2" v-if="goodsObjact.title">{{ goodsObjact.title }}</text>
+			<text class="title clamp2" v-else>{{ goodsObjact.store_name }}</text>
+		</view>
+		<!-- <product-content :goodsObjact="goodsObjact" v-if="!isSckill "></product-content> -->
+		<view class="good-title " v-if="isSckill">{{ goodsObjact.title }}</view>
+		<!-- 兑换说明 -->
+		<view class="dhsm" v-if="goodsType == 2">
+			<view class="title">
+				兑换说明
+			</view>
+			<view class="info">
+				兑换说明详细介绍兑换说明详细介绍兑换兑换说明详细介绍兑换说明详细介绍兑换兑换说明详细介绍兑换说明
+			</view>
+		</view>
+		<!-- 评价 -->
+		<estimate @navTo="navTo('/pages/product/reply?id=' + goodsObjact.product_id)" v-if="reply" :reply="reply"
+			:list="list"></estimate>
+		<!-- 规格信息 -->
+		<!-- <fresh-detail :goodsObjact="goodsObjact"></fresh-detail> -->
+		<!-- 图文详情 -->
+		<content-text :description="description"></content-text>
+		<!-- 底部高度撑开 -->
+		<view class="contentBottomHeight"></view>
+		<!-- 底部操作菜单 -->
+		<product-bottom @buy="buy" :goodsid="goodsid" @specOPne="specOPne" :showAdd="showAdd"></product-bottom>
+		<!-- 规格-模态层弹窗 -->
+		<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">
+						<text class="name clamp">{{ goodsObjact.store_name }}</text>
+						<view class="price">
+							<text>¥</text>
+							{{ actionPrice * goodsNumber }}
+						</view>
+						<image src="../../static/icon/del.png" mode="" class="right-img" @click="closes()"></image>
+					</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="mun-box">
+					<text>购买数量</text>
+					<view class="num">
+						<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" v-show="buys_show">完成</button>
+				<button class="btn" style="background-color: #999999;" v-show="buys_shows">售罄</button>
+			</view>
+		</view>
+		<view class="mask" v-if="show">
+			<image @click="onTap" src="../../static/img/shareimg.png"></image>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		goodsDetail,
+		cartAdd,
+		seckillGoods,
+		getIntegraDetail
+	} from '@/api/product.js';
+	import {
+		mapState
+	} from 'vuex';
+	import store from '@/store/index.js';
+	import {
+		saveUrl
+	} from '@/utils/loginUtils.js';
+	// #ifdef H5
+	import {
+		weixindata
+	} from '@/utils/wxAuthorized';
+	// #endif
+	// 头部轮播图
+	import topSwiper from './common/topSwiper.vue';
+	// 标题
+	import productContent from './common/productContent.vue';
+	// 到货时间及优惠
+	import discounts from './common/discounts.vue';
+	// 规格信息
+	import freshDetail from './common/freshDetail.vue';
+	// 图文详情
+	import contentText from './common/contentText.vue';
+	// 底部按钮
+	import productBottom from './common/productBottom.vue';
+	// 猜你喜欢
+	import guessLike from './common/guessLike.vue';
+	// 评价
+	import estimate from './common/estimate.vue';
+	import {
+		timeComputed
+	} from '@/utils/rocessor.js';
+	import uniNumberBox from '@/components/uni-number-box.vue'
+	export default {
+		components: {
+			guessLike,
+			topSwiper,
+			productContent,
+			discounts,
+			freshDetail,
+			contentText,
+			productBottom,
+			estimate,
+			uniNumberBox
+		},
+		data() {
+			return {
+				showAdd: true, //是否显示加入购物车
+				show: false,
+				isSckill: false, //是否为秒杀
+				goodsStore: 0, //选中库存
+				specList: [],
+				buys_show: true,
+				buys_shows: false,
+				specSelected: [], //选中的分类
+				specClass: 'none', //显示隐藏弹窗
+				many: 1, //1是单规格  2是多规格
+				reply: '', //评论
+				list: '', //商品详情的数据
+				type: 1, //默认支付方式add为
+				goodsType: 0, //商品类型 0:普通,1:秒杀 ,2:积分
+				goodsNumber: 1, //购买数量
+				goodsid: '', //商品id
+				description: '', //商品描述
+				goodsObjact: {
+					percent: 1
+				}, //保存商品数据
+				//图片循环
+				imgList: [],
+				// 对比对象
+				actionPrice: 0, //默认选中商品价格
+				actionImage: '', //默认选中图片
+				good_list: '', //猜你喜欢列表
+				goodsNumberMax: 0, //最大可购买数量
+				goodsNumberMin: 0, //最小可购买数量
+				// 倒计时数据保存
+				seckillObj: {
+					stopTime: 0, //结束时间
+					stop: false, //是否结束
+					stopTimeH: 0, //小时
+					stopTimeM: 0, //分钟
+					stopTimeS: 0, //秒钟
+					stopTimeD: 0, //天
+					upTime: 0 //更新组件内部组件用
+				},
+				// 拼团数据保存
+				pink: {
+					id: '', //拼团编号
+					uid: '', //用户编号
+					people: '', //拼团人数
+					price: '', //拼团价格
+					stop_time: '', //拼团结束时间
+					nickname: '', //团长昵称
+					avatar: '', //团长头像
+					count: '', //拼团剩余人数
+					h: '', //时
+					i: '', //分
+					s: '' //秒
+				},
+				userInfo: ''
+			};
+		},
+		filters: {
+			parseIntTo(percent) {
+				percent = +percent * 100;
+				if (percent % 1 === 0) {
+					return percent;
+				} else {
+					percent = percent.toFixed(1);
+					return percent;
+				}
+			}
+		},
+		async onLoad(options) {
+			let obj = this;
+			obj.userInfo = uni.getStorageSync('userInfo');
+			//保存商品id
+			this.goodsid = options.id;
+			if(options.type) {
+				this.goodsType = options.type * 1;
+			}
+			
+			if (this.goodsType == 2) {
+				this.showAdd = false
+				console.log('不显示', this.showAdd)
+			}
+			console.log(this.goodsType, 'this.goodsTypethis.goodsTypethis.goodsTypethis.goodsType')
+			if (options.type == 1) {
+				obj.isSckill = true
+			}
+			// 判断有无人邀请
+			if (options.spread) {
+				// 存储邀请人
+				uni.setStorageSync('spread', options.spread);
+			}
+			saveUrl();
+			this.goodsDetail();
+			// 注册邀请信息
+			// #ifdef H5
+			let bool = uni.getStorageSync('weichatBrowser') || '';
+			if (bool) {
+				weixindata();
+			}
+			// #endif
+		},
+		computed: {
+			...mapState(['weichatObj', 'baseURL', 'urlFile'])
+		},
+		// 分享
+		onShareAppMessage(options) {
+			// 设置菜单中的转发按钮触发转发事件时的转发内容
+			let pages = getCurrentPages(); //获取加载的页面
+			let currentPage = pages[pages.length - 1]; //获取当前页面的对象
+			let url = currentPage.route; //当前页面url
+			let item = currentPage.options; //如果要获取url中所带的参数可以查看options
+			let shareObj = {
+				title: this.goodsObjact.store_name + '   价格:' + this.goodsObjact.price, // 默认是小程序的名称(可以写slogan等)
+				path: url + '?id=' + item.id + '&spread=' + this.userInfo.uid, // 默认是当前页面,必须是以‘/’开头的完整路径
+				imageUrl: this.goodsObjact.image,
+				success: function(res) {
+					// 转发成功之后的回调
+					if (res.errMsg == 'shareAppMessage:ok') {}
+				},
+				fail: function() {
+					// 转发失败之后的回调
+					if (res.errMsg == 'shareAppMessage:fail cancel') {
+						// 用户取消转发
+					} else if (res.errMsg == 'shareAppMessage:fail') {
+						// 转发失败,其中 detail message 为详细失败信息
+					}
+				}
+			};
+
+			return shareObj;
+		},
+		methods: {
+			//选择规格
+			selectSpec(item, arr, ind) {
+				arr.attr_value.forEach(function(e) {
+					e.check = false;
+				});
+				item.check = true;
+				let obj = this;
+				obj.specSelected[ind] = item.attr;
+				let str = obj.specSelected.join(',');
+				// 获取当前选中的对象
+				if (obj.productValue[str]) {
+					obj.buys_show = true;
+					obj.buys_shows = false;
+					obj.actionPrice = obj.productValue[str].price;
+					// obj.goodsNumberMax = obj.productValue[str].quota;
+					obj.actionImage = obj.productValue[str].image;
+					obj.uniqueId = obj.productValue[str].unique;
+					obj.goodsStore = obj.productValue[str].stock;
+				} else {
+					(obj.buys_show = false), (obj.buys_shows = true);
+				}
+				if (obj.goodsStore == 0) {
+					obj.buys_show = false;
+					obj.buys_shows = true;
+				}
+				obj.specSelected[ind] = item.attr;
+			},
+			// 打開彈窗
+			specOPne(type = 1) {
+				let obj = this;
+				obj.specClass = 'show';
+				obj.type = type
+			},
+			//规格弹窗开关
+			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;
+			},
+			//领取优惠券
+			Getcoupon() {
+				uni.navigateTo({
+					url: '/pages/coupon/getcoupon'
+				});
+			},
+			//详情页
+			navToDetailPage(item) {
+				let id = item.id;
+				uni.navigateTo({
+					url: '/pages/product/product?id=' + id
+				});
+			},
+			// 跳转页面
+			navTo(url) {
+				uni.navigateTo({
+					url: url
+				});
+			},
+			//加入购物车
+			Addcar(item) {
+				let obj = this;
+				cartAdd({
+						cartNum: '1', //商品数量
+						uniqueId: '', //商品标签
+						new: 0, //商品是否新增加到购物车1为不加入0为加入
+						mer_id: '',
+						productId: item.id //商品编号
+					})
+					.then(function(e) {
+						console.log(e,'ddddddddddddddd')
+						uni.showToast({
+							title: '成功加入购物车',
+							type: 'top',
+							duration: 500,
+							icon: 'none'
+						});
+
+						obj.goodsDetail();
+					})
+					.catch(e => {
+						console.log(e);
+					});
+			},
+			goodsDetail() {
+				let obj = this;
+				// 获取普通商品信息
+				console.log('获取商品信息++++++++++++++')
+				console.log(obj.goodsType)
+				if (obj.goodsType == 0) {
+					console.log('获取普通商品信息++++++++++++++')
+					goodsDetail({}, this.goodsid).then(function({
+						data
+					}) {
+						obj.list = data;
+						console.log(obj.list, '普通商品数据')
+						obj.good_list = data.good_list; //保存猜你喜欢列表
+						obj.reply = data.reply; //保存评论列表
+						let goods = data.storeInfo;
+						obj.goodsObjact = goods;
+						if (obj.goodsObjact.description != null) {
+							obj.description = obj.goodsObjact.description.replace(/\<img/gi,
+								'<img class="rich-img"');
+						} //小程序商品详情图超出屏幕问题
+						obj.imgList = goods.slider_image; //保存轮播图
+						obj.specList = data.productAttr; //保存分类列表
+						if (Array.isArray(data.productValue) != true) {
+							obj.many = 2;
+							obj.specList = data.productAttr; //保存产品属性
+							obj.productValue = data.productValue; //保存属性值
+							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(',');
+							console.log(str, 'str');
+							// 设置默认值
+							obj.actionPrice = obj.productValue[str].price;
+							obj.goodsNumberMax = obj.productValue[str].stock;
+							obj.actionImage = obj.productValue[str].image;
+							obj.uniqueId = obj.productValue[str].unique;
+							obj.goodsStore = obj.productValue[str].stock;
+						} else {
+							obj.many = 1;
+							obj.productValue = data.productValue; //保存分类查询数据
+							obj.actionPrice = goods.price; //保存默认选中商品价格
+							obj.actionImage = goods.image_base; //保存默认选中商品图片
+							obj.goodsNumberMax = goods.stock; //保存默认选中最大可购买商品数量
+							obj.shopId = data.mer_id; //保存商店id
+						}
+
+					});
+				}
+				if (obj.goodsType == 1) {
+					seckillGoods({}, this.goodsid).then(({
+						data
+					}) => {
+						obj.list = data;
+						console.log(obj.list, '秒杀商品数据++++++++++')
+						// obj.good_list = data.good_list; //保存猜你喜欢列表
+						obj.reply = data.reply; //保存评论列表
+						let goods = data.storeInfo;
+						obj.goodsNumberMax = goods.num
+						// console.log('obj.goodsNumberMin+++++++++',obj.goodsNumberMin)
+						const time = timeComputed(goods.stop_time * 1000);
+						obj.seckillObj = {
+							stop: time.tpye, //是否结束
+							stopTimeH: time.hours + time.day * 24, //小时
+							stopTimeM: time.minutes, //分钟
+							stopTimeS: time.seconds, //秒钟
+						}
+
+						console.log(obj.seckillObj, '数据');
+						// console.log(obj.seckillObj,'obj.seckillObj++++++++++++++++++++++')
+						obj.goodsObjact = goods;
+						if (obj.goodsObjact.description != null) {
+							obj.description = obj.goodsObjact.description.replace(/\<img/gi,
+								'<img class="rich-img"');
+						} //小程序商品详情图超出屏幕问题
+						obj.imgList = goods.images; //保存轮播图
+						obj.specList = data.productAttr; //保存分类列表
+						if (Array.isArray(data.productValue) != true) {
+							console.log('多规格+++++++++++++')
+							obj.many = 2;
+							obj.specList = data.productAttr; //保存产品属性
+							obj.productValue = data.productValue; //保存属性值
+							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(',');
+							console.log(str, 'str');
+							// 设置默认值
+							obj.actionPrice = obj.productValue[str].price;
+							// obj.goodsNumberMax = obj.productValue[str].quota;
+							// console.log(obj.goodsNumberMax,'obj.goodsNumberMax++++++++++++')
+							obj.actionImage = obj.productValue[str].image;
+							obj.uniqueId = obj.productValue[str].unique;
+							obj.goodsStore = obj.productValue[str].stock;
+						} else {
+							console.log('单规格+++++++++++++')
+							obj.many = 1;
+							obj.productValue = data.productValue; //保存分类查询数据
+							obj.actionPrice = goods.price; //保存默认选中商品价格
+							obj.actionImage = goods.image_base; //保存默认选中商品图片
+							// obj.goodsNumberMax = goods.quota; //保存默认选中最大可购买商品数量
+							console.log(obj.goodsNumberMax, 'obj.goodsNumberMax---------------')
+							obj.shopId = data.mer_id; //保存商店id
+						}
+
+					})
+				}
+				if (obj.goodsType == 3) {
+					getIntegraDetail({}, this.goodsid).then(({
+						data
+					}) => {
+						obj.list = data;
+						console.log(obj.list, '积分商品数据++++++++++')
+						// obj.good_list = data.good_list; //保存猜你喜欢列表
+						obj.reply = data.reply; //保存评论列表
+						let goods = data.storeInfo;
+						obj.goodsNumberMax = goods.num
+						// console.log('obj.goodsNumberMin+++++++++',obj.goodsNumberMin)
+						// obj.seckillObj = timeComputed( goods.stop_time*1000);
+
+						// console.log(obj.seckillObj,'obj.seckillObj++++++++++++++++++++++')
+						obj.goodsObjact = goods;
+						if (obj.goodsObjact.description != null) {
+							obj.description = obj.goodsObjact.description.replace(/\<img/gi,
+								'<img class="rich-img"');
+						} //小程序商品详情图超出屏幕问题
+						obj.imgList = goods.images; //保存轮播图
+						obj.specList = data.productAttr; //保存分类列表
+						if (Array.isArray(data.productValue) != true) {
+							obj.many = 2;
+							obj.specList = data.productAttr; //保存产品属性
+							obj.productValue = data.productValue; //保存属性值
+							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(',');
+							console.log(str, 'str');
+							// 设置默认值
+							obj.actionPrice = obj.productValue[str].price;
+							// obj.goodsNumberMax = obj.productValue[str].quota;
+							// console.log(obj.goodsNumberMax,'obj.goodsNumberMax++++++++++++')
+							obj.actionImage = obj.productValue[str].image;
+							obj.uniqueId = obj.productValue[str].unique;
+							obj.goodsStore = obj.productValue[str].stock;
+						} else {
+							obj.many = 1;
+							obj.productValue = data.productValue; //保存分类查询数据
+							obj.actionPrice = goods.price; //保存默认选中商品价格
+							obj.actionImage = goods.image_base; //保存默认选中商品图片
+							// obj.goodsNumberMax = goods.quota; //保存默认选中最大可购买商品数量
+							console.log(obj.goodsNumberMax, 'obj.goodsNumberMax---------------')
+							obj.shopId = data.mer_id; //保存商店id
+						}
+					})
+				}
+
+			},
+			// 立即购买
+			buy() {
+				let obj = this;
+				// 创建传值对象
+				if(obj.userInfo) {
+					if(obj.userInfo.store_order == 0) {
+						uni.showModal({
+							title: '提示',
+							content:'您未报单,请前往报单页面',
+							success() {
+								uni.switchTab({
+									url:'/pages/index/index'
+								})
+							}
+						})
+						return 
+					}
+				}
+				let data = {
+					productId: obj.goodsid, //商品编号
+					cartNum: obj.goodsNumber, //商品数量
+					uniqueId: obj.uniqueId, //分类编号
+					new: 1,
+					secKillId: '',
+					integralId: '',
+				};
+				console.log(obj.goodsType, 'obj.goodsType77777777777777777777')
+				if(obj.type == 2) {
+					data.new = 0
+				}
+				cartAdd(data)
+					.then(function(e) {
+						let da = e.data;
+						if (obj.type == 1) {
+							// 跳转到支付页
+							console.log(obj.goodsType, 'this.goodsType456444444444444444')
+							uni.navigateTo({
+								url: '/pages/order/createOrder?id=' + da.cartId + '&goodsType=' + obj.goodsType
+							});
+						}
+						if (obj.type == 2) {
+							uni.showToast({
+								title: '成功加入购物车',
+								type: 'top',
+								duration: 2000,
+								icon: 'none'
+							});
+							obj.goodsDetail();
+						}
+						obj.toggleSpec()
+					})
+					.catch(e => {
+						console.log(e);
+					});
+			},
+			// 阻止触发上级事件
+			stopPrevent() {},
+			//选择数量
+			numberChange(e) {
+				console.log(e)
+				this.goodsNumber = e.number
+			},
+			callf() {
+				this.show = true;
+			},
+			onTap() {
+				console.log(this.callf);
+
+				if (!this.callf) return;
+				this.close();
+			},
+			close() {
+				this.show = false;
+			},
+			closes() {
+				this.specClass = 'none';
+			},
+		}
+	};
+</script>
+
+<style lang="scss" scoped>
+	/*  弹出层 */
+	.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: 20vh;
+			border-radius: 10rpx 10rpx 0 0;
+			background-color: #fff;
+
+			.btn {
+				height: 66rpx;
+				line-height: 66rpx;
+				border-radius: 100rpx;
+				background: #6EAB4E;
+				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%);
+			}
+		}
+	}
+
+	/* 规格选择弹窗 */
+	.attr-content {
+		padding: 25rpx 30rpx;
+	
+		.a-t {
+			display: flex;
+	
+			image {
+				width: 170rpx;
+				height: 170rpx;
+				flex-shrink: 0;
+				border-radius: 8rpx;
+				background-color: #eee;
+			}
+	
+			.right {
+				display: flex;
+				flex-direction: column;
+				padding-left: 24rpx;
+				font-size: $font-sm + 2rpx;
+				color: $font-color-base;
+				line-height: 42rpx;
+				width: 75%;
+				position: relative;
+				.right-img {
+					width: 37rpx;
+					height: 37rpx;
+					position: absolute;
+					right: 0;
+					top: 20rpx;
+					// background-color: red;
+				}
+				.price {
+					position: absolute;
+					bottom: 0;
+					font-size: $font-lg;
+					color: $uni-color-primary;
+					margin: 10rpx 0rpx;
+					font-size: 60rpx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #ef041f;
+					text {
+						font-size: 30rpx;
+					}
+				}
+	
+				.name {
+					width: 350rpx;
+					font-size: 32rpx;
+					color: $font-color-dark;
+					height: 50rpx;
+					overflow: hidden;
+					text-overflow: ellipsis;
+					white-space: nowrap;
+					display: block;
+					font-size: 30rpx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #1d2023;
+				}
+	
+				.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;
+	
+			text {
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				background: #eee;
+				margin-right: 20rpx;
+				margin-bottom: 20rpx;
+				border-radius: 10rpx;
+				min-width: 60rpx;
+				height: 60rpx;
+				padding: 0 20rpx;
+				font-size: $font-base;
+				color: $font-color-dark;
+			}
+	
+			.selected {
+				background: #fceff1;
+				color: #f35768;
+				border: 1px solid #f35768;
+			}
+		}
+	}
+
+	//默认商品底部高度
+	.goodsBottom {
+		height: 160rpx;
+	}
+
+	page {
+		background: #f0f0f0;
+	}
+
+	//秒杀、拼团底部高度
+	.contentBottomHeight {
+		height: 120rpx;
+	}
+
+	//默认商品底部高度
+	.goodsBottom {
+		height: 160rpx;
+	}
+
+	/deep/ .iconenter {
+		font-size: $font-base + 2rpx;
+		color: #888;
+	}
+
+	/deep/ .con_image {
+		width: 130rpx;
+		height: 130rpx;
+		display: inline-block;
+		padding: 15rpx;
+
+		image {
+			width: 100%;
+			height: 100%;
+		}
+	}
+
+	/* 商品详情中限制图片大小 */
+	/deep/ .rich-img {
+		width: 100% !important;
+		height: auto;
+	}
+
+	.cho-num {
+		margin: 20rpx 0;
+		width: 750rpx;
+		height: 83rpx;
+		background: #ffffff;
+		padding: 29rpx 24rpx 30rpx 25rpx;
+		font-size: 26rpx;
+		font-weight: 500;
+		color: #606972;
+	}
+
+	.row {
+		display: flex;
+		align-items: center;
+		position: relative;
+		padding: 0 30rpx;
+		height: 110rpx;
+		background: #fff;
+
+		.refund {
+			font-size: 30rpx;
+			color: $font-color-dark;
+			padding-left: 128rpx;
+		}
+
+		.noRefund {
+			font-size: 30rpx;
+			color: $font-color-light;
+			padding-left: 128rpx;
+		}
+
+		.tit {
+			flex-shrink: 0;
+			width: 120rpx;
+			font-size: 30rpx;
+			color: $font-color-dark;
+		}
+
+		.input {
+			flex: 1;
+			font-size: 30rpx;
+			color: $font-color-dark;
+			padding-left: 128rpx;
+
+			&.payColor {
+				color: $color-red;
+			}
+		}
+
+		.iconlocation {
+			font-size: 36rpx;
+			color: $font-color-light;
+		}
+	}
+
+	.shop-info {
+		width: 750rpx;
+		height: 140rpx;
+		margin: 20rpx 0;
+		padding: 28rpx 24rpx 22rpx 16rpx;
+		background-color: #fff;
+		display: flex;
+		position: relative;
+
+		.shop-logo {
+			width: 90rpx;
+			height: 90rpx;
+			border-radius: 50%;
+
+			// background-color: red;
+			// overflow: hidden;
+			image {
+				width: 90rpx;
+				height: 90rpx;
+			}
+		}
+
+		.shop-base {
+			padding-left: 15rpx;
+			// width: 376rpx;
+			width: 100%;
+			font-size: 24rpx;
+			font-weight: 500;
+			color: #999999;
+			line-height: 1;
+
+			.base-name {
+				padding-top: 14rpx;
+				font-size: 30rpx;
+				padding-bottom: 16rpx;
+				font-weight: 500;
+				color: #333333;
+			}
+		}
+
+		.shop-dis {
+			padding-top: 31rpx;
+			position: absolute;
+			font-size: 24rpx;
+			font-weight: 500;
+			color: #901b21;
+			// line-height: 140rpx;
+			right: 24rpx;
+
+			image {
+				padding-right: 5rpx;
+				width: 21rpx;
+				height: 21rpx;
+			}
+		}
+	}
+
+	.good-title {
+		background-color: #fff;
+		// height: 142rpx;
+		padding: 24rpx 19rpx 24rpx 34rpx;
+		line-height: 1.5;
+		font-size: 36rpx;
+		font-weight: 800;
+		color: #333333;
+	}
+
+	.introduce-section {
+		position: relative;
+		background: #fff;
+		padding: 35rpx 0rpx;
+		padding-left: 20rpx;
+
+		.title {
+			font-size: 32rpx;
+			color: $font-color-dark;
+			padding-right: 34rpx;
+
+			.tip-o {
+				color: #ff3334;
+				padding-left: 15rpx;
+			}
+		}
+
+		.shareDate {
+			position: absolute;
+			top: 25rpx;
+			right: 10rpx;
+			font-size: 26rpx;
+			color: #3d3f46;
+			border-radius: 15rpx;
+			background-color: #ffffff;
+			height: 60rpx;
+			line-height: 60rpx;
+
+			&::after {
+				border: none;
+			}
+		}
+
+		.share-img {
+			width: 30rpx;
+			height: 30rpx;
+			position: relative;
+			top: 5rpx;
+			left: 0;
+			margin-right: 10rpx;
+		}
+
+		.info {
+			color: #999999;
+			font-size: 26rpx;
+			padding-bottom: 15rpx;
+		}
+
+		.progress-box {
+			width: 260rpx;
+			position: relative;
+			margin-top: 15rpx;
+			line-height: 10px;
+
+			.number {
+				font-size: 17rpx;
+				position: absolute;
+				z-index: 999;
+				top: 3rpx;
+				left: 15rpx;
+				color: #ffffff;
+			}
+		}
+
+		.price-box {
+			display: flex;
+			align-items: baseline;
+			height: 64rpx;
+			padding: 10rpx 0;
+			font-size: 27rpx;
+			color: #FF0000;
+		}
+
+		.price {
+			font-size: $font-lg + 6rpx;
+
+			.text {
+				padding-left: 5rpx;
+				color: #b0b0b0;
+				font-size: 22rpx !important;
+			}
+		}
+
+		.price-green {
+			color: #2dbd59;
+			font-size: 28rpx !important;
+
+			text {
+				background: #2dbd59;
+				color: #ffffff;
+				padding: 0rpx 10rpx;
+				border-radius: 5rpx;
+				font-size: 22rpx !important;
+				margin-left: 15rpx;
+			}
+		}
+
+		.m-price {
+			margin: 0 12rpx;
+			color: $font-color-light;
+			text-decoration: line-through;
+			margin-left: 25rpx;
+			font-size: 24rpx;
+		}
+	}
+
+	.dhsm {
+		display: flex;
+		margin: 20rpx 0;
+		background-color: #fff;
+		padding: 34rpx 104rpx 30rpx 24rpx;
+
+		.title {
+			font-size: 32rpx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #333333;
+			margin-right: 32rpx;
+			flex-shrink: 0;
+		}
+
+		.info {
+			font-size: 26rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #8A8A8A;
+			line-height: 38rpx;
+		}
+	}
+
+	.price-box-jf {
+		color: #901b21;
+		display: flex;
+		align-items: baseline;
+		height: 64rpx;
+		font-size: 50rpx;
+		font-family: PingFang SC;
+		font-weight: 800;
+		color: #FF0000;
+
+		.price {
+			font-size: 50rpx;
+		}
+
+		image {
+			height: 30rpx;
+			width: 30rpx;
+		}
+
+		.jf {
+			font-size: 30rpx;
+
+		}
+	}
+	.mun-box {
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+	}
+	.mask {
+		position: fixed;
+		top: 0;
+		left: 0;
+		width: 100%;
+		height: 100%;
+		z-index: 999;
+		background-color: rgba(0, 0, 0, 0.4);
+
+		image {
+			width: 100%;
+			height: 100%;
+			opacity: 0.8;
+		}
+	}
+</style>

+ 278 - 0
pages/product/reply.vue

@@ -0,0 +1,278 @@
+<template>
+	<view class="container">
+		<view class="reply_btn flex_item">
+			<view class="btn" v-for="(item, index) in navList" :key="index" :class="{ current: tabCurrentIndex === index }" @click="tabClick(index)">
+				{{ item.text }}({{ item.number }})
+			</view>
+		</view>
+		<swiper :current="tabCurrentIndex" class="swiper-box" :style="{ height: maxheight + 'px' }" 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="loadDate">
+					<!-- 评论列表 -->
+					<view v-for="(item, index) in tabItem.orderList" :key="index" class="eva-box">
+						<view class="row-1 flex1">
+							<image class="portrait" :src="item.avatar" mode="aspectFill"></image>
+							<view class="right flex1">
+								<view>
+									<view class="name flex1">
+										<view>{{ item.nickname }}</view>
+										<!-- <image src="../../static/label/vip.png"></image> -->
+									</view>
+									<uniRate class="rate" disabled size="10" margin="1" :value="item.product_score" ></uniRate>
+								</view>
+								<view class="bot">
+									<text class="attr"></text>
+									<text class="time">{{ item.add_time }}</text>
+								</view>
+							</view>
+						</view>
+						<view class="con">{{ item.comment }}</view>
+						<view class="con_box">
+							<view class="con_image" v-for="ls in item.pics"><image :src="ls"></image></view>
+						</view>
+					</view>
+					<uni-load-more :status="tabItem.loadingType"></uni-load-more>
+				</scroll-view>
+			</swiper-item>
+		</swiper>
+	</view>
+</template>
+
+<script>
+import { reply_config, reply_list } from '@/api/product.js';
+import uniRate from '@/components/uni-rate/uni-rate.vue';
+export default {
+	components: {
+		uniRate
+	},
+	watch: {},
+	data() {
+		return {
+			maxheight: '',
+			id: '', //商品id
+			list: '', //评论列表
+			reply: '', //评论配置
+			tabCurrentIndex: 0,
+			navList: [
+				{
+					state: 0,
+					text: '全部',
+					loadingType: 'more',
+					number: '',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 5 //每次信息条数
+				},
+				{
+					state: 1,
+					text: '好评',
+					loadingType: 'more',
+					number: '',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 5 //每次信息条数
+				},
+				{
+					state: 3,
+					text: '差评',
+					loadingType: 'more',
+					number: '',
+					orderList: [],
+					page: 1, //当前页数
+					limit:5 //每次信息条数
+				},
+				{
+					state: 2,
+					text: '中评',
+					loadingType: 'more',
+					number: '',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 5 //每次信息条数
+				}
+			]
+		};
+	},
+	computed: {},
+	onReady() {
+		// 初始化获取页面宽度
+		uni.createSelectorQuery()
+			.select('.container')
+			.fields(
+				{
+					size: true
+				},
+				data => {
+					// 保存头部高度
+					this.maxheight = data.height - Math.floor((data.width / 750) * 145);
+				}
+			)
+			.exec();
+	},
+	onLoad(option) {
+		this.id = option.id;
+	},
+	onShow() {
+		let obj = this;
+		reply_config({}, this.id).then(function({ data }) {
+			obj.reply = data;
+			obj.navList[0].number = obj.reply.sum_count;
+			obj.navList[1].number = obj.reply.good_count;
+			obj.navList[2].number = obj.reply.poor_count;
+			obj.navList[3].number = obj.reply.in_count;
+		});
+		this.loadDate();
+	},
+	methods: {
+		async loadDate(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 === 'loading') {
+				//防止重复加载
+				return;
+			}
+			if (navItem.loadingType === 'noMore') {
+				//防止重复加载
+				return;
+			}
+			// 修改当前对象状态为加载中
+			navItem.loadingType = 'loading';
+			reply_list(
+				{
+					type: state,
+					page: navItem.page,
+					limit: navItem.limit
+				},
+				this.id
+			)
+				.then(({ data }) => {
+					let arr = data;
+					navItem.orderList = navItem.orderList.concat(arr);
+					console.log(navItem.orderList,111)
+					navItem.page++;
+					if (navItem.limit == data.length) {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
+						navItem.loadingType = 'more';
+						return;
+					} else {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
+						navItem.loadingType = 'noMore';
+					}
+					this.$set(navItem, 'loaded', true);
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		},
+		// async GetList(){
+		// 	let obj = this;
+		// 	reply_list({}, obj.id).then(function({ data }) {
+		// 		// console.log(data)
+		// 		obj.list = data;
+		// 	});
+		// },
+		//跳转接口
+		navTo(url) {
+			uni.navigateTo({
+				url
+			});
+		},
+		//swiper 切换
+		changeTab(e) {
+			this.tabCurrentIndex = e.target.current;
+			this.loadDate('tabChange');
+		},
+		//顶部tab点击
+		tabClick(index) {
+			this.tabCurrentIndex = index;
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: #ffffff;
+	height: 100%;
+	.container {
+		height: 100%;
+		padding: 25rpx 25rpx;
+		padding-top: 120rpx;
+		.swiper-box {
+			// height: 100%;
+			.list-scroll-content {
+				height: 100%;
+			}
+		}
+	}
+}
+.reply_btn {
+	padding: 15rpx 0rpx;
+	.btn {
+		padding: 10rpx 25rpx;
+		font-size: 24rpx;
+		background: #f4f4f4;
+		margin-right: 25rpx;
+	}
+	.current {
+		background-color: #e93323 !important;
+		color: #ffffff !important;
+	}
+}
+.eva-box {
+	padding: 20rpx 0;
+	// height: 100%;
+	.row-1{
+		.portrait {
+			flex-shrink: 0;
+			width: 80rpx;
+			height: 80rpx;
+			border-radius: 100px;
+		}
+		.right {
+			flex: 1;
+			font-size: $font-base;
+			color: $font-color-base;
+			padding-left: 26rpx;
+			.name{
+				margin-bottom: 20rpx;
+				image{
+					width: 35rpx;
+					height: 25rpx;
+				}
+			}
+			.bot {
+				display: flex;
+				justify-content: space-between;
+				font-size: $font-sm;
+				color: $font-color-light;
+			}
+		}
+	}
+	.con {
+		font-size:24rpx;
+		font-weight:500;
+		color:rgba(84,84,86,1);
+		padding: 20rpx 0 35rpx 0;
+		letter-spacing: 3rpx;
+	}
+	.con_image {
+		width: 150rpx;
+		height: 150rpx;
+		display: inline-block;
+		margin-right: 20rpx;
+		image {
+			width: 100%;
+			height: 100%;
+		}
+	}
+}
+
+
+</style>

+ 452 - 0
pages/product/search.vue

@@ -0,0 +1,452 @@
+<template>
+	<view class="content">
+		<!-- 兼容小程序搜索 -->
+		<!-- #ifdef MP || APP-PLUS -->
+		<view class="vheight"></view>
+		<view class="input-box flex">
+			<view class=" input-content flex">
+				<view class="iconfont iconsearch"></view>
+				<view class="input"><input type="text" v-model="keyword" placeholder="请输入搜索内容" /></view>
+			</view>
+			<view class="input-button flex" @click="navTo"><text>搜索</text></view>
+		</view>
+		<!-- #endif -->
+		<swiper :current="tabCurrentIndex" class="swiper-box " duration="300">
+			<swiper-item class="search-hot">
+				<view class="title"><text>热门搜索</text></view>
+				<view class="hot-list">
+					<view @click="clickHotText(ls)" class="list-item" :key="ind" v-for="(ls, ind) in list">
+						<text>{{ ls }}</text>
+					</view>
+				</view>
+			</swiper-item>
+			<swiper-item class="search-hot position-relative">
+				<view class="navbar">
+					<view class="nav-item" @click="defaultSearch()">默认</view>
+					<view class="nav-item" :class="{ current: searchType === 1 }" @click="sortTab(1)">
+						<text>销量优先</text>
+						<view class="p-box">
+							<text :class="{ active: searchType === 1 && numberOrder === 1 }" class="iconfont iconfold"></text>
+							<text :class="{ active: searchType === 1 && numberOrder === 2 }" class="iconfont iconfold xia"></text>
+						</view>
+					</view>
+					<view class="nav-item" :class="{ current: searchType === 2 }" @click="sortTab(2)">
+						<text>价格</text>
+						<view class="p-box">
+							<text :class="{ active: searchType === 2 && priceOrder === 1 }" class="iconfont iconfold"></text>
+							<text :class="{ active: searchType === 2 && priceOrder === 2 }" class="iconfont iconfold xia"></text>
+						</view>
+					</view>
+					<view class="nav-item" :class="{ current: newOrder == 1 }" @click="newGoodsTab()">新品</view>
+				</view>
+				<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>
+									<text class="font-size-sm ">¥</text>
+									{{ item.price }}
+								</view>
+								<view class="font-size-sm">
+									<text class="font-color-gray">{{ item.sales }}人购买</text>
+								</view>
+							</view>
+						</view>
+					</view>
+					<uni-load-more :status="loadingType"></uni-load-more>
+				</scroll-view>
+			</swiper-item>
+		</swiper>
+	</view>
+</template>
+
+<script>
+import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+import { searchKeyword, getProducts } from '@/api/product.js';
+export default {
+	components: {
+		uniLoadMore
+	},
+	data() {
+		return {
+			arrlist: [], //热门关键词
+			keyword: '', //关键字
+			list: [], //搜索内容
+			tabCurrentIndex: 0, //切换
+			goodsList: [],
+			limit: 6, //每次加载数据条数
+			page: 1, //当前页数
+			loadingType: 'more', //加载更多状态
+			numberOrder: 1, //1 销量从低到高 2销量从高到低
+			priceOrder: 1, //1 价格从低到高 2价格从高到低
+			newOrder: 0, //0 不是新品 1是新品
+			searchType: 0 //0为默认查询 1为销量 2 为价格
+		};
+	},
+	// #ifndef MP
+	//点击导航栏 buttons 时触发
+	onNavigationBarButtonTap(e) {
+		const index = e.index;
+		if (index === 0) {
+			this.navTo();
+		}
+	},
+	// 点击键盘搜索事件
+	onNavigationBarSearchInputConfirmed(e) {
+		this.navTo();
+	},
+	// 搜索栏内容变化事件
+	onNavigationBarSearchInputChanged(e) {
+		this.keyword = e.text;
+	},
+	// #endif
+	onLoad() {
+		this.loadData();
+	},
+	//下拉刷新
+		onPullDownRefresh() {
+			this.page = 1
+			this.getProducts('refresh');
+		},
+	methods: {
+		// 加载商品
+		async getProducts(type, loading) {
+			let obj = this;
+			// 判断是否为加载数据
+			if (type !== 'refresh') {
+				//没有更多数据直接跳出方法
+				if (obj.loadingType === 'nomore') {
+					return;
+				} else {
+					// 设置当前为数据载入中
+					obj.loadingType = 'loading';
+				}
+			} else {
+				//当重新加载数据时更新状态为可继续添加数据
+				obj.loadingType = 'more';
+			}
+			let data = {
+				page: obj.page,
+				limit: obj.limit,
+				news: obj.newOrder,
+				keyword: this.keyword
+			};
+			// 判断是否为销售数量排序
+			if (this.searchType === 1) {
+				data.salesOrder = obj.numberOrder === 1 ? 'asc' : 'desc';
+			}
+			// 判断是否为金额排序
+			if (this.searchType === 2) {
+				data.priceOrder = obj.priceOrder === 1 ? 'asc' : 'desc';
+			}
+			getProducts(data).then(e => {
+				if (type === 'refresh') {
+					obj.goodsList = [];
+				}
+				obj.goodsList = obj.goodsList.concat(e.data);
+				//判断是否还有下一页,有是more  没有是nomore
+				if (obj.limit == e.data.length) {
+					obj.page++;
+					obj.loadingType = 'more';
+				} else {
+					obj.loadingType = 'nomore';
+				}
+				// 判断是否为刷新数据
+				if (type === 'refresh') {
+					// 判断是否为点击搜索按钮跳转加载
+					if (loading == 1) {
+						uni.hideLoading();
+					} else {
+						uni.stopPullDownRefresh();
+					}
+				}
+			});
+		},
+		// 点击关键词触发事件
+		clickHotText(e) {
+			this.keyword = e;
+			this.navTo();
+		},
+		// 加载搜索关键字
+		async loadData() {
+			searchKeyword({})
+				.then(e => {
+					this.list = e.data;
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		},
+		// 点击触发搜索事件
+		navTo() {
+			this.tabCurrentIndex = 1;
+			this.infoData()
+		},
+		// 默认搜索
+		defaultSearch() {
+			// 初始化查询
+			this.numberOrder = '';
+			this.priceOrder = '';
+			this.newOrder = 0;
+			this.searchType = 0;
+			this.infoData();
+		},
+		// 是否为新品
+		newGoodsTab() {
+			this.newOrder = this.newOrder === 1 ? 0 : 1;
+			this.infoData();
+		},
+		// 排序
+		sortTab(nub) {
+			this.searchType = nub;
+			if (this.searchType === 1) {
+				this.numberOrder = this.numberOrder === 1 ? 2 : 1;
+			}
+			if (this.searchType === 2) {
+				this.priceOrder = this.priceOrder === 1 ? 2 : 1;
+			}
+			this.infoData();
+		},
+		// 查询切换后初始化
+		infoData() {
+			// 初始化页数
+			this.page = 1;
+			// 初始化数组
+			uni.pageScrollTo({
+				duration: 300,
+				scrollTop: 0
+			});
+			// 加载数据
+			this.getProducts('refresh', 1);
+			uni.showLoading({
+				title: '正在加载'
+			});
+		},
+		navToDetailPage(item) {
+			//测试数据没有写id,用title代替
+			let id = item.id;
+			uni.navigateTo({
+				url: '/pages/product/product?id=' + id
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page,
+.content {
+	height: 100%;
+	background-color: $page-color-base;
+}
+/* #ifdef MP || APP-PLUS */
+.vheight{
+	height: var(--status-bar-height);
+	background-color: #FFFFFF;
+}
+.input-box {
+	padding: 25rpx;
+	background-color: #ffffff;
+	height: 44px;
+	.iconsearch {
+		font-size: 50rpx;
+	}
+	.input-content {
+		border-radius: 99rpx;
+		flex-grow: 1;
+		padding: 10rpx 30rpx;
+		background-color: rgba(231, 231, 231, 0.7);
+		.input {
+			flex-grow: 1;
+			input {
+				font-size: $font-lg;
+			}
+		}
+	}
+	.input-button {
+		padding-left: 20rpx;
+		font-size: $font-lg;
+		height: 100%;
+	}
+}
+/* #endif */
+
+.swiper-box {
+	/* #ifndef MP */
+	height: 100%;
+	/* #endif */
+	/* #ifdef MP */
+	height: calc(100% - 44px);
+	/* #endif */
+	.search-hot {
+		padding: 25rpx;
+		.title {
+			font-size: $font-lg;
+			color: $font-color-light;
+		}
+		.hot-list {
+			display: flex;
+			flex-wrap: wrap;
+			margin-top: 30rpx;
+			.list-item {
+				padding: 10rpx 20rpx;
+				border: 1px solid $border-color-dark;
+				color: $font-color-dark;
+				font-size: $font-base;
+				margin-right: 20rpx;
+				margin-bottom: 20rpx;
+			}
+		}
+	}
+}
+
+// 订单
+%icon {
+	margin-right: 10rpx;
+	display: inline-block;
+	padding: 2rpx 10rpx;
+	border: 1rpx solid $color-yellow;
+	color: $color-yellow;
+	line-height: 1;
+	font-size: $font-base;
+	border-radius: 10rpx;
+}
+.guess-section {
+	display: flex;
+	flex-wrap: wrap;
+	.guess-item {
+		overflow: hidden;
+		display: flex;
+		flex-direction: column;
+		width: 48%;
+		margin-bottom: 4%;
+		border-radius: $border-radius-sm;
+		background-color: white;
+		box-shadow: $box-shadow;
+		&:nth-child(2n + 1) {
+			margin-right: 4%;
+		}
+	}
+	.image-wrapper {
+		width: 100%;
+		height: 330rpx;
+		border-radius: 3px;
+		overflow: hidden;
+		image {
+			width: 100%;
+			height: 100%;
+			opacity: 1;
+		}
+	}
+	.title {
+		font-size: $font-base;
+		color: $font-color-dark;
+		font-weight: bold;
+		line-height: 80rpx;
+	}
+	.price {
+		font-size: $font-lg;
+		color: $font-color-base;
+		font-weight: bold;
+		line-height: 1;
+		line-height: 80rpx;
+	}
+
+	.icon {
+		@extend %icon;
+	}
+
+	.detail {
+		line-height: 1;
+	}
+	.tip {
+		color: white;
+		background-color: $color-yellow;
+		line-height: 1.5;
+		font-size: $font-sm;
+		padding-left: 20rpx;
+	}
+}
+
+.navbar {
+	position: absolute;
+	top: 0;
+	left: 0;
+	display: flex;
+	width: 100%;
+	height: 40px;
+	background: #fff;
+	box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.06);
+	z-index: 10;
+	.nav-item {
+		flex: 1;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		height: 100%;
+		font-size: 30rpx;
+		color: $font-color-dark;
+		position: relative;
+		&.current {
+			color: $base-color;
+			&:after {
+				content: '';
+				position: absolute;
+				left: 50%;
+				bottom: 0;
+				transform: translateX(-50%);
+				width: 120rpx;
+				height: 0;
+				border-bottom: 4rpx solid $base-color;
+			}
+		}
+	}
+	.p-box {
+		display: flex;
+		flex-direction: column;
+		.iconfont {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			width: 30rpx;
+			height: 14rpx;
+			line-height: 1;
+			margin-left: 4rpx;
+			font-size: 26rpx;
+			color: #888;
+			&.active {
+				color: $base-color;
+			}
+		}
+		.xia {
+			transform: scaleY(-1);
+		}
+	}
+	.cate-item {
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		height: 100%;
+		width: 80rpx;
+		position: relative;
+		font-size: 44rpx;
+		&:after {
+			content: '';
+			position: absolute;
+			left: 0;
+			top: 50%;
+			transform: translateY(-50%);
+			border-left: 1px solid #ddd;
+			width: 0;
+			height: 36rpx;
+		}
+	}
+}
+.cate-list {
+	height: 100%;
+	padding-top: 40px;
+}
+</style>

+ 0 - 121
pages/profit/fund.vue

@@ -1,121 +0,0 @@
-<template>
-	<view class="center">
-		<view class="top"><image src="../../static/img/fundtop.png" mode="" class="bg"></image></view>
-		<view class="main-box">
-			<view class="main-title">
-				<view class="main-title-image"><image class="image" src="../../static/icon/title.png" mode=""></image></view>
-				<view class="main-title-font">基金介绍</view>
-			</view>
-			<view class="main" v-html="content">
-			</view>
-		</view>
-		<view class="index1"><image src="../../static/img/fundbottom.png" mode=""></image></view>
-	</view>
-</template>
-
-<script>
-import { details } from '@/api/index.js';
-export default {
-	data() {
-		return {
-			content:''
-		};
-	},
-	onLoad() {
-		uni.setNavigationBarTitle({
-			title: this.$t('foo.xq')
-		});
-		details({},3).then(({data}) =>{
-			console.log(data)
-			this.content = data.content
-		})
-	}
-};
-</script>
-
-<style lang="scss">
-.top {
-	position: relative;
-	display: flex;
-	flex-direction: column;
-	z-index: 10;
-	.bg {
-		height: 900rpx;
-		width: 100%;
-	}
-}
-.index1 {
-	margin-top: -400rpx;
-	width: 100%;
-	height: 713rpx;
-	position: relative;
-	image {
-		width: 100%;
-		height: 100%;
-	}
-}
-.main-box {
-	margin: 80rpx 30rpx 0;
-	position: relative;
-	z-index: 20;
-	padding: 20rpx;
-	background-color: #1f2020;
-	border-radius: 10rpx;
-	.main-title {
-		width: 300rpx;
-		height: 80rpx;
-		margin: -60rpx auto 0;
-		border-radius: 50rpx;
-		position: relative;
-		.main-title-image {
-			position: absolute;
-			left: 0;
-			top: 0;
-			width: 300rpx;
-			height: 80rpx;
-			.image {
-				width: 100%;
-				height: 100%;
-				border-radius: 50rpx;
-			}
-		}
-
-		.main-title-font {
-			position: relative;
-			z-index: 100;
-			text-align: center;
-			line-height: 80rpx;
-			font-size: 46rpx;
-			font-weight: bold;
-			color: #54300f;
-		}
-	}
-	.main {
-		padding: 40rpx 0;
-		color: #eecca7;
-		.main-item {
-			margin-top: 20rpx;
-			width: 100%;
-			padding: 14rpx;
-			background: #e6c3a1;
-			position: relative;
-			border-radius: 20rpx;
-			.main-image {
-				position: absolute;
-				top: -2rpx;
-				left: -2rpx;
-				width: 60rpx;
-				height: 110rpx;
-				image {
-					width: 100%;
-					height: 100%;
-				}
-			}
-			.main-font {
-				font-size: 28rpx;
-				padding-left: 80rpx;
-			}
-		}
-	}
-}
-</style>

+ 0 - 466
pages/profit/profit.vue

@@ -1,466 +0,0 @@
-<template>
-	<view class="content">
-		<view class="content-money">
-			<image src="../../static/img/centerbg.png" mode="" class="bg"></image>
-			<view class="money-box flex">
-				<view class="money-item">
-					<view class="money">{{ spend }}</view>
-					<view class="text">{{ $t('foo.dqyzfk') }}</view>
-				</view>
-				<view class="money-item">
-					<view class="money">{{ income }}</view>
-					<view class="text">{{ $t('foo.dqszfk')}}</view>
-				</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">
-				<scroll-view scroll-y="true" class="list-scroll-content" @scrolltolower="loadData">
-					<!-- 空白页 -->
-					<!-- <empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty> -->
-					<!-- 订单列表 -->
-					<view class="apply-box" v-for="item in navList[0].orderList">
-						<view class="box-top">
-							<view class="left flex">
-								<image :src="userInfo.avatar" mode="" class="user-img"></image>
-								<view class="user-info">
-									<view class="user-name clamp">{{ userInfo.nickname }}</view>
-									<view class="user-phone">{{ userInfo.mobile }}</view>
-								</view>
-							</view>
-
-							<view class="right">
-								<view class="user-name clamp">¥{{ item.money * 1 }}</view>
-								<view class="user-phone">{{ item.time }}</view>
-							</view>
-						</view>
-						<view class="apply-info flex">
-							<view class="img-wrap"><image :src="imgitem" mode="" class="upimg" v-for="imgitem in item.imagelist"></image></view>
-							<view class="btn-wrap">{{ item.status == '1' ? $t('hea.ytg') : item.status == '0' ? $t('hea.dsh') : $t('hea.wtg') }}</view>
-						</view>
-					</view>
-					<uni-load-more :status="navList[0].loadingType"></uni-load-more>
-				</scroll-view>
-			</swiper-item>
-			<swiper-item class="tab-content">
-				<scroll-view scroll-y="true" class="list-scroll-content" @scrolltolower="loadData">
-					<!-- 空白页 -->
-					<!-- <empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty> -->
-					<!-- 订单列表 -->
-					<view class="apply-box" v-for="item in navList[1].orderList">
-						<view class="box-top">
-							<view class="left flex">
-								<image :src="item.user_info.avatar" mode="" class="user-img"></image>
-								<view class="user-info">
-									<view class="user-name clamp">{{ item.user_info.nickname }}</view>
-									<view class="user-phone">{{ item.user_info.mobile }}</view>
-								</view>
-							</view>
-
-							<view class="right">
-								<view class="user-name clamp">¥{{ item.money * 1 }}</view>
-								<view class="user-phone">{{ item.time }}</view>
-							</view>
-						</view>
-						<view class="apply-info flex">
-							<view class="img-wrap"><image :src="imgitem" mode="" class="upimg" v-for="imgitem in item.imagelist"></image></view>
-							<view class="btn-wrap">{{ item.status == '1' ? $t('hea.ytg') : item.status == '0' ? $t('hea.dsh') : $t('hea.wtg') }}</view>
-						</view>
-					</view>
-					<uni-load-more :status="navList[1].loadingType"></uni-load-more>
-				</scroll-view>
-			</swiper-item>
-		</swiper>
-	</view>
-</template>
-
-<script>
-import { getApplyList, getMyList } from '@/api/apply.js';
-import { mapState, mapMutations } from 'vuex';
-import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
-import empty from '@/components/empty';
-import { getTime } from '@/utils/rocessor.js';
-export default {
-	components: {
-		empty,
-		uniLoadMore
-	},
-	computed: {
-		...mapState(['lang']),
-		...mapState('user', ['hasLogin', 'userInfo', 'baseURL', 'urlFile'])
-	},
-	onReady(res) {
-		var obj = this;
-		uni.getSystemInfo({
-			success: resu => {
-				const query = uni.createSelectorQuery();
-				query.select('.swiper-box').boundingClientRect();
-				query.exec(function(res) {
-					console.log(res, 'ddddddddddddd');
-					obj.maxheight = resu.windowHeight - res[0].top + 'px';
-					console.log('打印页面的剩余高度', obj.maxheight);
-				});
-			},
-			fail: res => {}
-		});
-	},
-	data() {
-		return {
-			// 头部图高度
-			maxheight: '',
-			tabCurrentIndex: 0,
-			navList: [
-				{
-					state: 0,
-					text: this.$t('foo.yzfk'),
-					loadingType: 'more',
-					orderList: [],
-					page: 1, //当前页面
-					limit: 10 //每次信息条数
-				},
-				{
-					state: 1,
-					text: this.$t('foo.syzfk'),
-					loadingType: 'more',
-					orderList: [],
-					page: 1, //当前页面
-					limit: 10 //每次信息条数
-				}
-			],
-			spend: '', //援助金额
-			income: '' //受援助金额
-		};
-	},
-	onLoad(options) {},
-	watch: {
-		lang(val) {
-			this.$set(this.navList[0], 'text', this.$t('foo.yzfk'));
-			this.$set(this.navList[1], 'text', this.$t('foo.syzfk'));
-		}
-	},
-	onShow() {
-		uni.setNavigationBarTitle({
-			title:this.$t('foo.syzx')
-		})
-		this.spend = this.userInfo.spend;
-		this.income = this.userInfo.income;
-		this.loadData();
-	},
-	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 === 'loading') {
-				//防止重复加载
-				return;
-			}
-			//修改当前对象状态为加载中
-			navItem.loadingType = 'loading';
-			console.log(state, '123321');
-			if (state == 1) {
-				getApplyList({
-					page: navItem.page,
-					limit: navItem.limit,
-					status: 8
-				})
-					.then(({ data }) => {
-						data.list.forEach(e => {
-							console.log(e);
-							e.time = getTime(e.updatetime);
-							if (e.voucherimages) {
-								e.imagelist = e.voucherimages.split(',');
-							}
-						});
-						if (data.list.length > 0) {
-							navItem.orderList = navItem.orderList.concat(data.list);
-							console.log(navItem.orderList);
-							navItem.page++;
-						}
-						//判断是否还有数据, 有改为more, 没有改为noMore
-						if (navItem.limit == data.list.length) {
-							navItem.loadingType = 'more';
-							return;
-						} else {
-							navItem.loadingType = 'noMore';
-						}
-						uni.hideLoading();
-						this.$set(navItem, 'loaded', true);
-					})
-					.catch(e => {
-						console.log(e);
-					});
-			} else {
-				getMyList({ page: navItem.page, limit: navItem.limit })
-					.then(({ data }) => {
-						if (data.list.length > 0) {
-							data.list.forEach(e => {
-								console.log(e);
-								e.time = getTime(e.updatetime);
-								if (e.voucherimages) {
-									e.imagelist = e.voucherimages.split(',');
-								}
-							});
-							navItem.orderList = navItem.orderList.concat(data.list);
-							console.log(navItem.orderList);
-							navItem.page++;
-						}
-						//判断是否还有数据, 有改为more, 没有改为noMore
-						if (navItem.limit == data.list.length) {
-							navItem.loadingType = 'more';
-							return;
-						} else {
-							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;
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-page {
-	background: #000;
-	height: 100%;
-}
-.content-money {
-	height: 430rpx;
-	padding-bottom: 30rpx;
-	background: $page-color-base;
-	position: relative;
-	.bg {
-		position: absolute;
-		width: 100%;
-		height: 430rpx;
-	}
-	.moneyTx {
-		position: absolute;
-		top: 150rpx;
-		right: 0rpx;
-		width: 150rpx;
-		padding: 10rpx 30rpx;
-		border: 2px solid #ffffff;
-		border-top-left-radius: 99rpx;
-		border-bottom-left-radius: 99rpx;
-		color: #ffffff;
-		line-height: 1;
-		font-size: $font-base;
-	}
-	.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: 50rpx;
-			width: 48rpx;
-			margin: 0 auto;
-			.icon-img {
-				width: 100%;
-				height: 100%;
-			}
-		}
-	}
-}
-.money-box {
-	// background-color: $base-color;
-	padding-top: var(--status-bar-height);
-	height: 368rpx;
-	color: #fad6b0;
-	text-align: center;
-	position: relative;
-	align-items: center;
-	.money-item {
-		width: 50%;
-	}
-	.text {
-		font-size: $font-sm;
-	}
-	.money {
-		padding-top: 147rpx;
-		font-size: 47px;
-		font-family: PingFang SC;
-		font-weight: bold;
-		text {
-			font-size: 24px;
-		}
-	}
-}
-
-.navbar {
-	display: flex;
-	height: 40px;
-	padding: 0 5px;
-	background: #000;
-	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;
-		overflow: hidden;
-		&.current {
-			color: $base-color;
-			&:after {
-				content: '';
-				position: absolute;
-				left: 50%;
-				bottom: 0;
-				transform: translateX(-50%);
-				width: 44px;
-				height: 0;
-				border-bottom: 2px solid $base-color;
-			}
-		}
-	}
-}
-//列表
-
-.swiper-box {
-	padding-top: 10rpx;
-	.apply-box {
-		height: 317rpx;
-		width: 702rpx;
-		// background-color: red;
-		margin: 0 auto;
-		border-bottom: 1px solid #6c6a68;
-		padding-top: 30rpx;
-
-		.box-top {
-			height: 80rpx;
-			// background-color: #bfa;
-			display: flex;
-			justify-content: space-between;
-			.left {
-				justify-content: flex-start;
-			}
-			.right {
-				text-align: right;
-			}
-			.user-img {
-				width: 80rpx;
-				height: 80rpx;
-				background-color: #eee;
-				margin-right: 20rpx;
-				flex-shrink: 0;
-				border-radius: 50%;
-			}
-
-			.user-name {
-				max-width: 500rpx;
-				font-size: 30rpx;
-				font-family: PingFang SC;
-				font-weight: 500;
-				color: #ffffff;
-			}
-
-			.user-phone {
-				padding-top: 10rpx;
-				font-size: 22rpx;
-				font-family: PingFang SC;
-				font-weight: 400;
-				color: #ffffff;
-			}
-		}
-
-		.apply-info {
-			padding: 25rpx 0 0 100rpx;
-			justify-content: space-between;
-
-			.img-wrap {
-				.upimg {
-					width: 153rpx;
-					height: 152rpx;
-					border-radius: 10rpx;
-					background-color: #999;
-					margin-left: 10rpx;
-				}
-			}
-
-			.btn-wrap {
-				align-self: flex-end;
-				color: #fad6b0;
-				font-size: 24rpx;
-				font-family: PingFang SC;
-				font-weight: 500;
-				color: #fad6b0;
-
-				.btn {
-					width: 98rpx;
-					line-height: 47rpx;
-					text-align: center;
-				}
-
-				.btn-reject {
-					border: 1px solid #fad6b0;
-					border-radius: 5rpx;
-					color: #fad6b0;
-				}
-
-				.btn-pass {
-					background: linear-gradient(-74deg, #ce9c6d, #ffecd6);
-					border-image: linear-gradient(115deg, #feebd5, #ffffff, #e1ad7d) 1 1;
-					box-shadow: 3rpx 4rpx 5rpx 0rpx rgba(151, 118, 74, 0.5);
-					border-radius: 5rpx;
-					color: #874b19;
-					margin-left: 10rpx;
-				}
-			}
-		}
-	}
-}
-.list-scroll-content {
-	height: 100%;
-}
-.content {
-	height: 100%;
-	.empty-content {
-		background-color: #ffffff;
-	}
-}
-</style>

+ 417 - 0
pages/public/externalRegistered.vue

@@ -0,0 +1,417 @@
+<template>
+	<view class="container">
+		<view class="container_text">
+			<image class="banner-img" src="/static/img/logo.png" mode="scaleToFill"></image>
+		</view>
+		<view class="loginTitle"><text>注册</text></view>
+		<view class="login_text">
+			<view class="login_input flex">
+				<view class="login_img">
+					<image src="/static/icon/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">
+				<view class="login_img">
+					<image src="/static/icon/pread.png"></image>
+				</view>
+				<view class="login_name"><input class="uni-input" type="text" v-model="register" focus
+						placeholder="请输入推荐人id" :disabled="isregister" /></view>
+			</view>
+			<view class="login_input flex">
+				<view class="login_img">
+					<image src="/static/icon/psw.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/psw.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">
+				<view class="login_img">
+					<image src="/static/icon/code.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 class="login_input flex">
+				<view class="login_img"><image src="/static/icon/dw.png"></image></view>
+				<picker v-if="!isparent_area" @change="bindParentArea" :value="parent_area" :range="parent_areas" class="uni-input">
+					<view class="placeholder" v-if="parent_area === ''">请选择区域</view>
+					<text>{{ parent_area }}</text>
+				</picker>
+				<view class="login_name" v-else><input class="uni-input" type="text" v-model="parent_area" focus disabled /></view>
+			</view> -->
+			<!-- <view class="login_input flex">
+				<view class="login_img"><image src="/static/icon/dw.png"></image></view>
+				<picker @change="bindPayType" :value="pay_type" :range="pay_types" class="uni-input">
+					<view class="placeholder" v-if="pay_type === ''">请选择支付方式</view>
+					<text>{{ pay_type }}</text>
+				</picker>
+			</view> -->
+			<!-- <view class="login_input flex">
+				<view class="login_img"><image src="/static/icon/jft.png"></image></view>
+				<view class="uni-input" style="color: #999;">
+					是否使用积分抵扣
+					<image src="../../static/icon/noselect.png" mode="" v-if="!isSelsect" @click="jfdk(1)"></image>
+					<image src="../../static/icon/select.png" mode="" v-if="isSelsect" @click="jfdk(0)"></image>
+				</view>
+			</view> -->
+			<view><button type="green" @click="getRegister" class="uni-button uni-button-green">注册账号</button></view>
+		</view>
+	</view>
+</template>
+<script>
+	import {
+		register,
+		getUserInfo,
+		verify
+	} from '@/api/login.js';
+	export default {
+		data() {
+			return {
+				phone: '', //用户
+				password: '', //密码
+				repassword: '',
+
+
+				//这里需要推荐人的id
+				register: '',
+				// invitation: '', //接点人id
+				code: '', //验证码
+				time: '', //保存倒计时对象
+				countDown: 0, //倒计时
+				// parent_area: '',//区域
+				// parent_areas: ['A','B','C'],//区域列表
+				// pay_type: '',
+				// pay_types: ['余额','佣金'],
+				// isSelsect: false,
+				isregister: false
+				// isparent_area: false,
+			};
+		},
+		onLoad(option) {
+			if (option.id) {
+				console.log(option.id,'id')
+				this.register = option.id
+				console.log(this.register,'this')
+				this.register = true;
+			}
+			// this.getRegister()
+			// if(option.area){
+			// 	this.parent_area = option.area
+			// 	this.isparent_area = true
+			// }
+
+
+			// 获取扫码邀请人id
+			// this.invitation = uni.getStorageSync('spread')||'';
+		},
+		watch: {
+			// 监听倒计时
+			countDown(i) {
+				if (i == 0) {
+					clearInterval(this.time);
+				}
+			}
+		},
+		methods: {
+			//选择是否积分抵扣
+			jfdk(index) {
+				if (index == 1) {
+					this.isSelsect = true
+				} else {
+					this.isSelsect = false
+				}
+			},
+			//选择区域
+			bindParentArea(e) {
+				console.log(e.detail.value)
+				this.parent_area = this.parent_areas[e.detail.value]
+			},
+			//选择值支付方式
+			bindPayType(e) {
+				console.log(e)
+				if (e.detail.value) {
+					this.pay_type = this.pay_types[e.detail.value]
+				} else if (e.detail.value == 0) {
+					this.pay_type = this.pay_types[e.detail.value]
+				}
+
+			},
+			// 注册
+			getRegister() {
+				let obj = this;
+				if (obj.phone == '') {
+					obj.$api.msg('请输入手机号');
+					return;
+				}
+				if (obj.password == '') {
+					obj.$api.msg('请输入密码');
+					return;
+				}
+				if (obj.repassword == '') {
+					obj.$api.msg('请再次输入密码');
+					return;
+				}
+				if (obj.repassword != obj.password) {
+					obj.$api.msg('两次密码不正确');
+					return;
+				}
+				if (obj.code == '') {
+					obj.$api.msg('请输入验证吗');
+					return;
+				}
+				// if(obj.parent_area == '') {
+				// 	obj.$api.msg('请选择区域');
+				// 	return;
+				// }
+				// if(obj.pay_type == '') {
+				// 	obj.$api.msg('请选择支付方式');
+				// 	return;
+				// }
+				// let paytype = ''
+				// if(obj.pay_type == '微信') {
+				// 	paytype = 'weixin'
+				// }else if(obj.pay_type == '余额') {
+				// 	paytype = 'yue'
+				// }else if(obj.pay_type == '佣金') {
+				// 	paytype = 'brokerage'
+				// }
+				register({
+					account: obj.phone, //账号
+					captcha: obj.code, //验证码
+					password: obj.password, //密码
+					// parent: obj.invitation,//接点人uid
+					register: obj.register, //推荐人id
+					// parent_area: obj.parent_area,//区域
+					// pay_type: paytype,
+					// use_integral: obj.isSelsect ? '1':'0',
+					from: 'APP'
+				}).then(function(e) {
+					console.log(e, '1111');
+					uni.showToast({
+						title: '注册成功',
+						duration: 2000,
+						position: 'top'
+					});
+					// setTimeout(function () {
+					// 	uni.navigateTo({
+					// 		url: '/pages/user/user'
+					// 	});
+					// },1000)
+					setTimeout(() => {
+						uni.navigateTo({
+							url: '/pages/public/login'
+						},1000);
+					})
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			//发送验证码
+			verification() {
+				let obj = this;
+				if (this.phone == '') {
+					this.$api.msg('请输入电话号码');
+					return;
+				}
+				if (this.phone.length < 11) {
+					this.$api.msg('请输入正确的手机号');
+					return;
+				}
+				// 判断是否在倒计时
+				if (obj.countDown > 0) {
+					return false;
+				} else {
+					obj.countDown = 60;
+					obj.time = setInterval(() => {
+						obj.countDown--;
+					}, 1000);
+					//调用验证码接口
+					verify({
+							phone: obj.phone,
+							type: 'register'
+						})
+						.then(({
+							data
+						}) => {})
+						.catch(err => {
+							console.log(err);
+						});
+				}
+			},
+			login() {
+				//返回登录
+				uni.navigateTo({
+					url: '/pages/public/login'
+				});
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	page {
+		height: 100%;
+	}
+
+	.container {
+		width: 100%;
+		height: 100%;
+		background-size: 100%;
+		background-color: #fff;
+	}
+
+	.container_text {
+		width: 100%;
+		height: 500rpx;
+		top: 0rpx;
+
+		// background-color: #FF4343;
+		.banner-img {
+			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;
+				position: relative;
+
+				image {
+					width: 30rpx;
+					height: 30rpx;
+					position: absolute;
+					right: 0;
+				}
+			}
+
+			.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 {
+			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: $base-color;
+			margin: 40rpx 10rpx;
+			border-radius: 10rpx;
+		}
+
+		.uni-button-green-plain {
+			border: 1px solid $base-color;
+			margin: 40rpx 10rpx;
+			border-radius: 50rpx;
+			color: $base-color;
+			background-color: #ffffff;
+		}
+
+		.uni-button {
+			height: 85rpx;
+			line-height: 85rpx;
+		}
+	}
+
+	.loginTitle {
+		position: absolute;
+		top: 250rpx;
+		width: 100%;
+		text-align: center;
+		color: white;
+		font-size: 40rpx;
+	}
+
+	.forget {
+		width: 100rpx;
+		font-size: 24rpx;
+		color: #ffffff;
+		margin: 0px auto;
+		border-bottom: 1px solid #ffffff;
+	}
+
+	.width {
+		width: 325rpx !important;
+	}
+
+	.code {
+		color: $base-color;
+		font-size: 23rpx;
+		border-left: 1px solid #eeeeee;
+		width: 150rpx;
+		flex-shrink: 0;
+		text-align: center;
+	}
+
+	uni-button {
+		height: 80rpx !important;
+		line-height: 80rpx !important;
+	}
+</style>

+ 44 - 91
pages/public/forget.vue

@@ -1,59 +1,40 @@
 <template>
 	<view class="container">
-		<view class="container_text" >
-			<image src="../../static/icon/logo.png" mode="" class="logo"></image>
-			<view class="logo-tit"><text>博·赢</text></view>
-			<!-- <image class="banner-img" src="/static/img/img01.png" mode="scaleToFill"></image> -->
+		<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="loginTitle"><text>手机号登录</text></view>
 		<view class="login_text">
 			<view class="login_input flex">
-				<view class="login_img"><image src="../../static/icon/icon-phone.png"></image></view>
-				<view class="login_name"><input class="uni-input" v-model="phone" focus :placeholder="$t('hea.srsj')" /></view>
-			</view>
-			<view class="login_input flex">
-				<view class="login_img"><image src="../../static/icon/icon-code.png"></image></view>
-				<view class="login_name"><input class="uni-input" type="password" v-model="password" focus :placeholder="$t('hea.srxmm')" /></view>
-			</view>
-			<view class="login_input flex">
-				<view class="login_img"><image src="../../static/icon/icon-code.png"></image></view>
-				<view class="login_name"><input class="uni-input" type="password" v-model="repassword" focus :placeholder="$t('hea.srxmmt')" /></view>
+				<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>
 			<view class="login_input flex">
-				<view class="login_img"><image src="../../static/icon/icon-yzm.png"></image></view>
+				<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="$t('hea.sryzm')" />
-					<view class="code" @click="verification">{{ countDown == 0 ? $t('hea.yzm') : countDown }}</view>
+					<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="loding?register():''" class="uni-button uni-button-green">{{$t('hea.qrxg')}}</button>
+				<button type="green" @click="register" class="uni-button uni-button-green">登录</button>
 			</view>
 		</view>
 	</view>
 </template>
 <script>
 import { mapMutations } from 'vuex';
-import { verify, loginMobile, getUserInfo } from '@/api/login.js';
-import { registerReset } from '@/api/set.js';
+import { verify, loginMobile, getUserInfo } from '@/api/login.js';
 export default {
 	data() {
 		return {
 			phone: '', //用户
 			code: '', //验证码
 			time: '', //保存倒计时对象
-			countDown: 0, //倒计时
-			password: '',
-			repassword: '',
-			loding:true,//是否载入中
-			
+			countDown: 0 //倒计时
 		};
 	},
-	onLoad() {
-		uni.setNavigationBarTitle({
-			title:this.$t('foo.wjmm')
-		})
-	},
+	onLoad() {},
 	watch: {
 		// 监听倒计时
 		countDown(i) {
@@ -66,8 +47,7 @@ export default {
 		...mapMutations('user', ['setUserInfo', 'login']),
 		// 手机登录
 		register() {
-			let obj = this;
-			console.log('dianji')
+			let obj = this;
 			if (obj.phone == '') {
 				obj.$api.msg('请输入电话号码');
 				return;
@@ -75,32 +55,25 @@ export default {
 			if (!/(^1[3|4|5|7|8][0-9]{9}$)/.test(this.phone)) {
 				obj.$api.msg('请输入正确的手机号');
 				return;
-			}
-			if(obj.password == '') {
-				obj.$api.msg('请输入新密码')
-				return 
-			}
-			if(obj.password != obj.repassword) {
-				obj.$api.msg('两次密码不一致')
-				return 
 			}
 			if (obj.code == '') {
 				obj.$api.msg('请输入验证码');
 				return;
 			}
-			obj.loding = false
-			registerReset({
-				// phone: obj.phone, //账号
-				// captcha: obj.code,
-				type:'mobile',
-				mobile: obj.phone,
-				captcha: obj.code,
-				newpassword: obj.password,
-			}).then(function(e) {
-				console.log(e)
-				obj.$api.msg('修改成功');
-				uni.navigateTo({
-					url: '/pages/public/login'
+
+			loginMobile({
+				phone: obj.phone, //账号
+				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'
+					});
 				});
 			}).catch((e) => {
 				console.log(e);
@@ -110,7 +83,7 @@ export default {
 		verification() {
 			let obj = this;
 			if (this.phone == '') {
-				this.$api.msg('请输入手机号');
+				this.$api.msg('请输入电话号码');
 				return;
 			}
 			if (this.phone.length < 11) {
@@ -127,8 +100,8 @@ export default {
 				}, 1000);
 				//调用验证码接口
 				verify({
-					mobile: obj.phone,
-					event: 'resetpwd'
+					phone: obj.phone,
+					type: 'login'
 				})
 					.then(({ data }) => {})
 					.catch(err => {
@@ -157,37 +130,22 @@ page {
 }
 .container_text {
 	width: 100%;
-	height: 500rpx;
-	top: 0rpx;
-	display: flex;
-	flex-direction: column;
-	justify-content: center;
-	align-items: center;
+	height: 500rpx;
+	background-color: #abd56f;
+	top: 0rpx;
 	.banner-img {
 		width: 100%;
 		height: 100%;
-	}
-	.logo {
-		width: 186rpx;
-		height: 196rpx;
-	}
-	.logo-tit {
-		text-align: center;
-		font-size: 36rpx;
-		font-family: PingFang SC;
-		font-weight: 400;
-		color: #FAD6B0;
 	}
 }
 .login_text {
 	margin: auto 30rpx;
 	position: relative;
-	padding: 50rpx 102rpx 0;
-	background-color: #000;
-	// margin-top: -180rpx;
+	padding: 100rpx 102rpx;
+	background-color: #ffffff;
+	margin-top: -180rpx;
 	border-radius: 20rpx;
-	.login_input {
-		padding-bottom: 20rpx;
+	.login_input {
 		border-bottom: 1px solid #f0f0f0;
 		margin-bottom: 65rpx;
 		.login_img image {
@@ -201,12 +159,12 @@ page {
 			font-size: 28rpx !important;
 		}
 		.login_name {
-			color: #fff;
+			color: #333333;
 			.width {
 				width: 325rpx !important;
 			}
 			.code {
-				color: #dbb189;
+				color: #abd56f;
 				font-size: 23rpx;
 				border-left: 1px solid #eeeeee;
 				width: 150rpx;
@@ -215,16 +173,11 @@ page {
 			}
 		}
 	}
-	.uni-button-green {
-		background: linear-gradient(-74deg, #CE9C6D, #FFECD6);
-		// border: 1px solid;
-		border-image: linear-gradient(115deg, #FEEBD5, #FFFFFF, #E1AD7D) 1 1;
-		box-shadow: 3rpx 4rpx 5rpx 0px rgba(151, 118, 74, 0.5);
-		border-radius: 10rpx;
-		font-size: 34rpx;
-		font-family: PingFang SC;
-		font-weight: 500;
-		color: #874B19;
+	.uni-button-green {
+		color: #ffffff;
+		background-color: #abd56f;
+		margin: 40rpx 10rpx;
+		border-radius: 50rpx;
 	}
 	.uni-button {
 		height: 85rpx;

+ 58 - 112
pages/public/login.vue

@@ -1,55 +1,54 @@
 <template>
 	<view class="container">
 		<view class="container_text">
-			<image src="../../static/icon/logo.png" mode="" class="logo"></image>
-			<view class="logo-tit"><text>博·赢</text></view>
-			<!-- <image class="banner-img" src="/static/img/img01.png" mode="scaleToFill"></image> -->
+
+			<image class="banner-img" src="/static/img/login.png" mode="scaleToFill">
+
+			<image class="banner-img" src="/static/img/logo.png" mode="scaleToFill">
+
+		</image>
 		</view>
+		<view class="loginTitle"><text>登录</text></view>
 		<view class="login_text">
 			<view class="login_input flex">
-				<view class="login_img"><image src="/static/icon/icon-phone.png"></image></view>
-				<view class="login_name"><input class="uni-input" v-model="username" focus :placeholder="$t('hea.srsj')" /></view>
+				<view class="login_img"><image src="/static/img/login01.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/icon-code.png"></image></view>
-				<view class="login_name"><input class="uni-input" type="password" v-model="passward" focus :placeholder="$t('hea.srxmm')" /></view>
-			</view>
-			<view><button type="green" class="uni-button uni-button-green" @click="toLogin">{{$t('hea.login')}}</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> -->
-			<view class=" flex bombtn">
-				<navigator url="./forget">
-					<view class="bbtn">{{$t('hea.wjmm')}}</view>
-				</navigator>
-				<!-- <view class="jg">
-				</view>
-				<view class="bbtn" @click="register">注册账号</view> -->
-
+				<view class="login_img"><image src="/static/img/public3.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="./externalRegistered" style="margin-bottom: 18rpx;"><view class="forget">注册</view></navigator>
+			<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> -->
 			<!-- #ifndef APP-PLUS -->
-			<!-- <view class="weixin" @click="wecahtLogin">
-				<image src="/static/img/img05.png"></image>
-			</view>
-			<view class="weixin_text" @click="wecahtLogin">微信登录</view> -->
+
+			<!-- <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" @click="wecahtLogin"><image src="/static/img/img05.png" mode="scaleToFill"></image></view>
+<<<<<<< HEAD
 				<view class="weixin_text" @click="wecahtLogin">微信登录</view>
 			</block>
+=======
+				<!-- <view class="weixin_text" @click="wecahtLogin">微信登录</view> -->
+			<!-- </block>
+>>>>>>> 096bfe13572299bb8c079d664b260aed0d2398c9
 			<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')">
+				<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>
@@ -207,15 +206,15 @@ export default {
 				password: obj.passward
 			})
 				.then(function(e) {
-					uni.setStorageSync('token', e.data.userinfo.token);
-					// 保存返回用户数据
-					obj.setUserInfo(e.data.userinfo);
-					obj.$store.commit('hasLogin', true);
+					uni.setStorageSync('token', e.data.token);
+					// obj.$store.commit('hasLogin', true);
+					obj.login()
 					getUserInfo({}).then(e => {
 						obj.login();
 						// 保存返回用户数据
-						// obj.setUserInfo(e.data.userinfo);
-						let ur = uni.getStorageSync('present') || '/pages/index/index';
+						obj.setUserInfo(e.data);
+						 // uni.getStorageSync('present') || 
+						let ur ='/pages/index/index';
 						//成功跳转首页
 						uni.switchTab({
 							url: ur,
@@ -262,12 +261,10 @@ export default {
 	padding: 10rpx;
 	background-color: #212121;
 	color: #ffffff;
-
 	.loginIcon {
 		width: 50rpx;
 		height: 50rpx;
 	}
-
 	.weixin_text {
 		line-height: 1;
 		margin-left: 20rpx;
@@ -286,13 +283,11 @@ export default {
 	background-color: #212121;
 	color: #ffffff;
 	font-size: 32rpx;
-
 	.loginIcon {
 		font-size: 35rpx;
 		width: 35rpx;
 		height: 35rpx;
 	}
-
 	.weixin_text {
 		line-height: 1;
 		margin-left: 20rpx;
@@ -303,156 +298,107 @@ export default {
 page {
 	height: 100%;
 }
-
 .container {
 	width: 100%;
 	height: 100%;
 	background-size: 100%;
 }
-
 .container_text {
 	width: 100%;
 	height: 500rpx;
 	top: 0rpx;
-	display: flex;
-	flex-direction: column;
-	justify-content: center;
-	align-items: center;
 	.banner-img {
 		width: 100%;
 		height: 100%;
 	}
-	.logo {
-		width: 186rpx;
-		height: 196rpx;
-	}
-	.logo-tit {
-		text-align: center;
-		font-size: 36rpx;
-		font-family: PingFang SC;
-		font-weight: 400;
-		color: #fad6b0;
-	}
 }
-
 .login_text {
-	margin: auto 30rpx;
+	height: calc(100% - 500rpx);
 	position: relative;
-	padding: 100rpx 102rpx;
-	background-color: #000;
-	// margin-top: -180rpx;
-	border-radius: 20rpx;
-
+	padding: 100rpx 60rpx 0;
+	background-color: #ffffff;
+	
+	
 	.login_input {
-		padding-bottom: 20rpx;
-		border-bottom: 1px solid #f0f0f0;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		border-bottom: 1rpx solid #f0f0f0;
 		margin-bottom: 65rpx;
-		background-color: #000;
-
 		.login_img image {
-			height: 35rpx;
-			width: 29rpx;
-			margin-right: 20rpx;
+			height: 40rpx;
+			width: 30rpx;
+			margin-right: 30rpx;
 		}
-
 		.uni-input {
-			background-color: #000;
 			text-align: left;
 			width: 470rpx;
 			font-size: 28rpx !important;
 		}
-
 		.login_name {
-			color: #fff;
-			background-color: #000;
+			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 {
 		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 {
-		background: linear-gradient(-74deg, #ce9c6d, #ffecd6);
-		// border: 1px solid;
-		border-image: linear-gradient(115deg, #feebd5, #ffffff, #e1ad7d) 1 1;
-		box-shadow: 3rpx 4rpx 5rpx 0rpx rgba(151, 118, 74, 0.5);
-		border-radius: 45rpx;
-		font-size: 34rpx;
+		text-align: center;
 		font-family: PingFang SC;
 		font-weight: 500;
-		color: #97764a;
+		color: #6EAB4E;
 	}
 
+	.uni-button-green {
+		color: #ffffff;
+		background-color: #6EAB4E;
+		margin: 40rpx 10rpx;
+		border-radius: 10rpx;
+	}
 	.uni-button-green-plain {
-		border: 1px solid #5dbc7c;
+		border: 1px solid #6EAB4E;
 		margin: 40rpx 10rpx;
 		border-radius: 50rpx;
-		color: #5dbc7c;
+		color: #6EAB4E;
 		background-color: #ffffff;
 	}
-
 	.uni-button {
 		height: 85rpx;
 		line-height: 85rpx;
 	}
 }
-
 .loginTitle {
 	position: absolute;
-	top: 250rpx;
+	
 	width: 100%;
 	text-align: center;
 	color: white;
-	font-size: 40rpx;
-}
-.bombtn {
-	margin-top: 36rpx;
-	justify-content: center;
-	font-size: 28rpx;
-	font-family: PingFang SC;
-	font-weight: 500;
-	color: #ffffff;
-	.jg {
-		height: 28rpx;
-		width: 2rpx;
-		background-color: #fff;
-		margin: 0 10rpx;
-	}
+	font-weight: 400;
+	font-size: 36rpx;
 }
 </style>

+ 0 - 227
pages/public/nav.vue

@@ -1,227 +0,0 @@
-<template>
-	<view class="box">
-		<view class="header-box">
-			<view class="top-box">
-				<view class="box-right"><wyb-drop-down :zIndex="1" class="han-box" ref="dropDown" :options="options" @select="onItemSelect"></wyb-drop-down></view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-import wybDropDown from '@/components/wyb-drop-down/wyb-drop-down.vue';
-import { mapState, mapMutations } from 'vuex';
-// import { goodslist,allist,aboutlist, fllist } from '../../api/api.js';
-export default {
-	components: {
-		wybDropDown
-	},
-	computed: {
-		...mapState(['lang'])
-	},
-	watch: {
-		lang(val) {
-			this.$set(this.options[0], 'header', this.$t('hea.yy'));
-		}
-	},
-	data() {
-		return {
-			show: false,
-			options: [
-				{
-					header: 'Language',
-					contents: ['中文', 'english']
-				}
-			],
-			langlist: ['zh_cn', 'en'],
-			// 弹窗分类样式
-			itemStyle: {
-				fontSize: '36rpx',
-				fontWeight: 'bold'
-			},
-			//  弹窗标题样式
-			titleStyle: {
-				'font-size': '40rpx'
-			},
-			//弹窗当前idnex
-			swIndex: 0,
-			checkedIndex: 0, //设置当前选中的分类对象
-			popList: [
-				{
-					type: 'product',
-					title: '公司产品',
-					list: [], //保存商品列表
-					loding: false, //判断是否加载中
-					more: 'loadmore' //判断是否还可以加载数据
-				},
-				{
-					type: 'cases',
-					title: '方案案例',
-					list: [], //保存商品列表
-					loding: false, //判断是否加载中
-					more: 'loadmore' //判断是否还可以加载数据
-				},
-				{
-					type: 'about',
-					title: '关于我们',
-					list: [], //保存商品列表
-					loding: false, //判断是否加载中
-					more: 'loadmore' //判断是否还可以加载数据
-				}
-			],
-			// 自定义加载文本
-			loadText: {
-				loadmore: 'loading...',
-				loading: 'loading...',
-				nomore: 'ready'
-			}
-		};
-	},
-	created() {
-		// this.init();
-		const lang = uni.getStorageSync('lang') || 0;
-		this.$store.commit('changelang', this.langlist[lang]);
-	},
-	methods: {
-		// 下拉选择语言分类
-		onItemSelect(e) {
-			const lang = this.langlist[e.contentIndex];
-			uni.setStorageSync('lang', e.contentIndex);
-			this.$store.commit('changelang', lang);
-			this.$i18n.locale = lang;
-			// 保存当前选中的对象
-			this.$emit('changeSelect', e);
-			this.$refs.dropDown.close();
-			console.log(lang);
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-.alertSw {
-	height: 100vh;
-	.item {
-		padding-top: 100rpx;
-	}
-}
-/deep/ .collapseItemBox {
-	.title {
-		padding: 30rpx;
-		font-size: 32rpx;
-		font-weight: bold;
-		color: #101010;
-	}
-}
-.margin-t-40 {
-	margin-top: 40rpx;
-}
-.alertColl,
-.pop-box,
-.header-box {
-	padding: 0 30rpx;
-}
-.navtoIndex {
-	font-size: 41rpx;
-	font-weight: bold;
-	margin-bottom: 20rpx;
-	padding-left: 30rpx;
-}
-.pop-box {
-	position: relative;
-	width: 700rpx;
-	padding-right: 15rpx;
-	.box-right {
-		position: absolute;
-		top: 0;
-		left: 0;
-		width: 100%;
-		text-align: right;
-		// margin-bottom: 20rpx;
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		z-index: 999;
-		.item {
-			padding: 30rpx;
-		}
-	}
-	.collapse-item {
-		font-weight: 500;
-		.item-box {
-			font-size: 28rpx;
-			color: #101010;
-			// margin-bottom: 15rpx;
-			line-height: 50rpx;
-		}
-	}
-}
-.header-box {
-	width: 750rpx;
-	height: 100rpx;
-	background: #000;
-	display: flex;
-	align-items: center;
-	padding: 0 30rpx;
-	box-shadow: 0px 0px 20rpx 0px rgba(50, 50, 52, 0.06);
-	position: flex;
-	top: var(--status-bar-height);
-	left: 0;
-	z-index: 1000;
-	.box-center {
-		flex: 1;
-		text-align: center;
-		margin-left: 180rpx;
-		font-size: 34rpx;
-		font-weight: bold;
-		color: #fff;
-	}
-
-	.box-right {
-		width: 180rpx;
-		text-align: right;
-		position: relative;
-		height: calc(100% - 1px);
-		overflow: hidden;
-		/deep/ .wyb-drop-down-header {
-			position: absolute;
-			top: 0;
-			left: 0;
-			width: 100%;
-		}
-		/deep/ .wyb-drop-down-content {
-			top: 88rpx;
-		}
-	}
-	.top-box {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		width: 100%;
-		height: 100rpx;
-		z-index: 99999;
-		.top-left {
-			height: 100%;
-			display: flex;
-			align-items: center;
-			flex-grow: 1;
-			background-color: #e3e3e3;
-			.logo-img {
-				width: 314rpx;
-				height: 43rpx;
-			}
-		}
-		.top-right,
-		.top-left {
-			z-index: 99999;
-			background-color: #ffffff;
-		}
-		.top-right {
-			padding-left: 20rpx;
-			height: 100%;
-			display: flex;
-			align-items: center;
-		}
-	}
-}
-</style>

+ 197 - 111
pages/public/register.vue

@@ -1,41 +1,57 @@
 <template>
 	<view class="container">
-		<view class="container_text" >
-			<image src="../../static/icon/logo.png" mode="" class="logo"></image>
-			<view class="logo-tit"><text>博·赢</text></view>
-			<!-- <image class="banner-img" src="/static/img/img01.png" mode="scaleToFill"></image> -->
+		<view class="container_text" >
+			<image class="banner-img" src="/static/img/logo.png" mode="scaleToFill"></image>
 		</view>
-		
+		<view class="loginTitle"><text>注册</text></view>
 		<view class="login_text">
 			<view class="login_input flex">
-				<view class="login_img"><image src="../../static/icon/icon-phone.png"></image></view>
-				<view class="login_name"><input class="uni-input" v-model="phone" focus :placeholder="$t('hea.srsj')" /></view>
+				<view class="login_img"><image src="/static/icon/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">
+				<view class="login_img"><image src="/static/icon/pread.png"></image></view>
+				<view class="login_name"><input class="uni-input" type="text" v-model="invitation" focus placeholder="请输入接点人id" :disabled="isinvitation" /></view>
 			</view>
 			<view class="login_input flex">
-				<view class="login_img"><image src="../../static/icon/icon-code.png"></image></view>
-				<view class="login_name"><input class="uni-input" type="password" v-model="password" focus :placeholder="$t('hea.srmm')" /></view>
+				<view class="login_img"><image src="/static/icon/psw.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/icon-code.png"></image></view>
-				<view class="login_name"><input class="uni-input" type="password" v-model="repassword" focus :placeholder="$t('hea.srxmmt')" /></view>
+				<view class="login_img"><image src="/static/icon/psw.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">
-				<view class="login_img"><image src="../../static/icon/icon-yzm.png"></image></view>
+				<view class="login_img"><image src="/static/icon/code.png"></image></view>
 				<view class="login_name flex">
-					<input class="uni-input width" v-model="code" focus :placeholder="$t('hea.sryzm')" />
-					<view class="code" @click="verification">{{ countDown == 0 ? $t('hea.yzm') : countDown }}</view>
+					<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">{{$t('hea.zc')}}</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 class=" flex bombtn">
-				<navigator url="./forget">
-					<view class="bbtn">{{$t('hea.wjmm')}}</view>
-				</navigator>
-				<view class="jg">
-				</view>
-				<view class="bbtn" @click="login">{{$t('hea.login')}}</view>
 			</view>
+			<view class="login_input flex">
+				<view class="login_img"><image src="/static/icon/dw.png"></image></view>
+				<picker v-if="!isparent_area" @change="bindParentArea" :value="parent_area" :range="parent_areas" class="uni-input">
+					<view class="placeholder" v-if="parent_area === ''">请选择区域</view>
+					<text>{{ parent_area }}</text>
+				</picker>
+				<view class="login_name" v-else><input class="uni-input" type="text" v-model="parent_area" focus disabled /></view>
+			</view>
+			<view class="login_input flex">
+				<view class="login_img"><image src="/static/icon/dw.png"></image></view>
+				<picker @change="bindPayType" :value="pay_type" :range="pay_types" class="uni-input">
+					<view class="placeholder" v-if="pay_type === ''">请选择支付方式</view>
+					<text>{{ pay_type }}</text>
+				</picker>
+			</view>
+			<view class="login_input flex">
+				<view class="login_img"><image src="/static/icon/jft.png"></image></view>
+				<view class="uni-input" style="color: #999;">
+					是否使用积分抵扣
+					<image src="../../static/icon/noselect.png" mode="" v-if="!isSelsect" @click="jfdk(1)"></image>
+					<image src="../../static/icon/select.png" mode="" v-if="isSelsect" @click="jfdk(0)"></image>
+				</view>
+			</view>
+			<view><button type="green" @click="register" class="uni-button uni-button-green">注册账号</button></view>
 		</view>
 	</view>
 </template>
@@ -47,15 +63,31 @@ export default {
 			phone: '', //用户
 			password: '', //密码
 			repassword: '',
-			invitation: '', //邀请码
+			invitation: '', //接点人id
 			code: '', //验证码
 			time: '', //保存倒计时对象
-			countDown: 0 ,//倒计时
+			countDown: 0 ,//倒计时
+			parent_area: '',//区域
+			parent_areas: ['A','B','C'],//区域列表
+			pay_type: '',
+			pay_types: ['余额','佣金','支付宝','微信'],
+			isSelsect: false,
+			isinvitation: false,
+			isparent_area: false,
 		};
 	},
-	onLoad() {
+	onLoad(option) {
+		if(option.id){
+			this.invitation = option.id
+			console.log(this.invitation)
+			this.isinvitation = true;
+		}
+		if(option.area){
+			this.parent_area = option.area
+			this.isparent_area = true
+		}
 		// 获取扫码邀请人id
-		this.invitation = uni.getStorageSync('spread')||'';
+		// this.invitation = uni.getStorageSync('spread')||'';
 	},
 	watch: {
 		// 监听倒计时
@@ -65,16 +97,35 @@ export default {
 			}
 		}
 	},
-	methods: {
+	methods: {
+		//选择是否积分抵扣
+		jfdk(index) {
+			if(index == 1) {
+				this.isSelsect = true
+			}else {
+				this.isSelsect = false
+			}
+		},
+		//选择区域
+		bindParentArea(e) {
+			console.log(e.detail.value)
+			this.parent_area = this.parent_areas[e.detail.value]
+		},
+		//选择值支付方式
+		bindPayType(e) {
+			console.log(e)
+			if(e.detail.value) {
+				this.pay_type = this.pay_types[e.detail.value]
+			}else if(e.detail.value == 0){
+				this.pay_type = this.pay_types[e.detail.value]
+			}
+			
+		},
 		// 注册
 		register() {
 			let obj = this;
 			if (obj.phone == '') {
-				obj.$api.msg('请输入电话号码');
-				return;
-			}
-			if (!/(^1[2|3|4|5|6|7|8|9][0-9]{9}$)/.test(this.phone)) {
-				obj.$api.msg('请输入正确的手机号');
+				obj.$api.msg('请输入账号');
 				return;
 			}
 			if (obj.password == '') {
@@ -88,34 +139,95 @@ export default {
 			if (obj.repassword != obj.password) {
 				obj.$api.msg('两次密码不正确');
 				return;
-			}
-			// if ((obj.invitation = '')) {
-			// 	obj.$api.msg('请输入邀请码');
-			// 	return;
-			// }
-			if (obj.code == '') {
-				obj.$api.msg('请输入验证码');
-				return;
+			}
+			if(obj.code == '') {
+				obj.$api.msg('请输入验证吗');
+				return;
+			}
+			if(obj.parent_area == '') {
+				obj.$api.msg('请选择区域');
+				return;
+			}
+			if(obj.pay_type == '') {
+				obj.$api.msg('请选择支付方式');
+				return;
+			}
+			let paytype = ''
+			if(obj.pay_type == '微信') {
+				paytype = 'weixin'
+			}else if(obj.pay_type == '余额') {
+				paytype = 'yue'
+			}else if(obj.pay_type == '佣金') {
+				paytype = 'brokerage'
+			}else if(obj.pay_type == '支付宝') {
+				paytype = 'ali'
 			}
 			register({
-				mobile: obj.phone, //账号
-				code: obj.code, //验证码
+				account: obj.phone, //账号
+				captcha: obj.code, //验证码
 				password: obj.password ,//密码
-				spread:2//上级推广人
-			}).then(function(e) {
-				uni.showToast({
-					title:'注册成功',
-					duration:2000,
-					position:'top'
-				});
-				setTimeout(function () {
-					uni.navigateTo({
-						url: '/pages/public/login'
-					});
-				},1000)
-				
-			});
-			//调用注册接口,成功跳转登录页
+				parent: obj.invitation,//接点人uid
+				parent_area: obj.parent_area,//区域
+				pay_type: paytype,
+				use_integral: obj.isSelsect ? '1':'0',
+				from: 'APP'
+			}).then(({da}) => {
+				if (obj.pay_type == 'weixin' || obj.pay_type == 'routine') {
+					// let da = data.result.jsConfig;
+					console.log('--da--', da);
+					let data = {
+						appid:da.appid,
+						noncestr: da.noncestr,
+						package: da.package,
+						partnerid:da.partnerid,
+						prepayid:da.prepayid,
+						timestamp: da.timestamp,
+						sign:da.sign
+					};
+					console.log('--data--', data);
+					uni.requestPayment({
+						provider: 'wxpay',
+						orderInfo: data,
+						success(res) {
+							console.log(res)
+						}
+					})
+				}
+				if (obj.pay_type == 'ali') {
+					const url = data.result.jsConfig;
+					console.log(url, 'url');
+					uni.requestPayment({
+						provider: 'alipay',
+						orderInfo: url,
+						success: res => {
+							console.log(res);
+							uni.showToast({
+								title: '支付成功',
+								duration: 2000
+							});
+						},
+						fail: e => {
+							console.log(e);
+						},
+						complete: () => {}
+					});
+					obj.payLoding = false;
+				}
+				if (obj.pay_type == 'yue' || obj.pay_type == 'brokerage'){
+					uni.showToast({
+						title:'注册成功',
+						duration:2000,
+						position:'top'
+					});
+					setTimeout(function () {
+						uni.navigateTo({
+							url: '/pages/user/jiedian'
+						});
+					},1000)
+				}
+			}).catch( err => {
+				console.log(err)
+			})
 		},
 		//发送验证码
 		verification() {
@@ -138,8 +250,8 @@ export default {
 				}, 1000);
 				//调用验证码接口
 				verify({
-					mobile: obj.phone,
-					event: 'register'
+					phone: obj.phone,
+					type: 'register'
 				})
 					.then(({ data }) => {})
 					.catch(err => {
@@ -164,41 +276,27 @@ page {
 .container {
 	width: 100%;
 	height: 100%;
-	background-size: 100%;
+	background-size: 100%;
+	background-color: #fff;
 }
 .container_text {
 	width: 100%;
 	height: 500rpx;
 	top: 0rpx;
-	display: flex;
-	flex-direction: column;
-	justify-content: center;
-	align-items: center;
+	// background-color: #FF4343;
 	.banner-img {
 		width: 100%;
 		height: 100%;
-	}
-	.logo {
-		width: 186rpx;
-		height: 196rpx;
-	}
-	.logo-tit {
-		text-align: center;
-		font-size: 36rpx;
-		font-family: PingFang SC;
-		font-weight: 400;
-		color: #FAD6B0;
 	}
 }
 .login_text {
 	margin: auto 30rpx;
 	position: relative;
-	padding: 20rpx 102rpx 100rpx;
-	background-color: #000;
+	padding: 100rpx 102rpx;
+	background-color: #ffffff;
 	// margin-top: -180rpx;
 	border-radius: 20rpx;
-	.login_input {
-		padding-bottom: 20rpx;
+	.login_input {
 		border-bottom: 1px solid #f0f0f0;
 		margin-bottom: 65rpx;
 		.login_img image {
@@ -209,10 +307,17 @@ page {
 		.uni-input {
 			text-align: left;
 			width: 470rpx;
-			font-size: 28rpx !important;
+			font-size: 28rpx !important;
+			position: relative;
+			image {
+				width: 30rpx;
+				height: 30rpx;
+				position: absolute;
+				right: 0;
+			}
 		}
 		.login_name {
-			color: #fff;
+			color: #333333;
 		}
 	}
 
@@ -249,22 +354,17 @@ page {
 		color: #999999;
 	}
 
-	.uni-button-green {
-		background: linear-gradient(-74deg, #CE9C6D, #FFECD6);
-		// border: 1px solid;
-		border-image: linear-gradient(115deg, #FEEBD5, #FFFFFF, #E1AD7D) 1 1;
-		box-shadow: 3rpx 4rpx 5rpx 0rpx rgba(151, 118, 74, 0.5);
-		border-radius: 10rpx;
-		font-size: 34rpx;
-		font-family: PingFang SC;
-		font-weight: 500;
-		color: #874B19;
+	.uni-button-green {
+		color: #ffffff;
+		background-color:  $base-color;
+		margin: 40rpx 10rpx;
+		border-radius: 10rpx;
 	}
 	.uni-button-green-plain {
-		border: 1px solid #5dbc7c;
+		border: 1px solid  $base-color;
 		margin: 40rpx 10rpx;
 		border-radius: 50rpx;
-		color: #5dbc7c;
+		color:  $base-color;
 		background-color: #ffffff;
 	}
 	.uni-button {
@@ -292,7 +392,7 @@ page {
 	width: 325rpx !important;
 }
 .code {
-	color: #dbb189;
+	color:  $base-color;
 	font-size: 23rpx;
 	border-left: 1px solid #eeeeee;
 	width: 150rpx;
@@ -302,21 +402,7 @@ page {
 uni-button {
 	height: 80rpx !important;
 	line-height: 80rpx !important;
-}
-.bombtn {
-		margin-top: 36rpx;
-		justify-content: center;
-		font-size: 28rpx;
-		font-family: PingFang SC;
-		font-weight: 500;
-		color: #FFFFFF;
-		.jg {
-			height: 28rpx;
-			width: 2rpx;
-			background-color: #fff;
-			margin: 0 10rpx;
-		}
-	}
+}
 
 </style>
 

+ 0 - 114
pages/public/success.vue

@@ -1,114 +0,0 @@
-<template>
-	<view class="content">
-		<image src="../../static/img/success.png" mode="" class="okimg"></image>
-		<text class="tit">{{$t('hea.tjcg')}}</text>
-		<text class="tit1">{{$t('hea.qdd')}}</text>
-		<view class="btn-wrapper" >
-			<navigator url="/pages/index/index" open-type="switchTab" class="bank">{{$t('hea.backhome')}}</navigator>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				orderId:'',
-				money: '',
-			}
-		},
-		onLoad() {
-		},
-		methods: {
-			
-		}
-	}
-</script>
-
-<style lang='scss'>
-	.content{
-		display: flex;
-		flex-direction: column;
-		justify-content: center;
-		align-items: center;
-		padding-top: 277rpx;
-	}
-	.success-icon{
-		font-size: 160upx;
-		color: #5dbc7c;
-		margin-top: 100upx;
-	}
-	.tit{
-		margin-top: -50rpx;
-		font-size: 40rpx;
-		font-family: PingFang SC;
-		font-weight: 500;
-		color: #FFFFFF;
-		line-height: 1.5;
-	}
-	.tit1 {
-		font-size: 28rpx;
-		font-family: PingFang SC;
-		font-weight: 500;
-		color: #B3B3B3;
-	}
-	.btn-group{
-		padding-top: 100upx;
-	}
-	.mix-btn {
-		margin-top: 30upx;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		width: 600upx;
-		height: 80upx;
-		font-size: $font-lg;
-		color: #fff;
-		background-color: $base-color;
-		border-radius: 10upx;
-		&.hollow{
-			background: #fff;
-			color: #303133;
-			border: 1px solid #ccc;
-		}
-	}
-	.okimg {
-		width: 362rpx;
-		height: 267rpx;
-	}
-	.btn-wrapper {
-		margin-top: 46rpx;
-		display: flex;
-		.look-btn {
-			width: 301rpx;
-			height: 78rpx;
-			background: #901b21;
-			text-align: center;
-			line-height: 78rpx;
-			border-radius: 10rpx;
-			color: #fff;
-			margin-right: 37rpx;
-		}
-		.bank {
-			/* width: 301rpx;
-			height: 78rpx;
-			text-align: center;
-			line-height: 78rpx;
-			background: #FFFFFF;
-			border: 2px solid #901B21;
-			border-radius: 10rpx;
-			color: #901b21; */
-			width: 350rpx;
-			line-height: 80rpx;
-			text-align: center;
-			background: linear-gradient(-74deg, #CE9C6D, #FFECD6);
-			box-shadow: 3rpx 4rpx 5rpx 0px rgba(151, 118, 74, 0.5);
-			border-radius: 40rpx;
-		
-			font-size: 34rpx;
-			font-family: PingFang SC;
-			font-weight: 500;
-			color: #874B19;
-		}
-	}
-</style>

+ 291 - 312
pages/public/wxLogin.vue

@@ -1,312 +1,291 @@
-<template>
-	<view class="content">
-		<!-- #ifdef MP -->
-		<image class="bg-img" :src="/static/img/img09.png" mode=" scaleToFill"></image>
-		<view class="logo-img-box">
-			<image class="logo-img" src="/static/img/img10.png" mode=" aspectFit"></image>
-			<button class="userInfo" type="warn" open-type="getUserInfo" @getuserinfo="userInfoData">
-				<text class="iconfont iconweixin"></text>
-				<text>微信授权登录</text>
-			</button>
-		</view>
-		<!-- #endif -->
-		<view class="Mask" v-show="MaskShow">
-			<view class="Mask-box">
-				<view class="title">申请获取您的手机号</view>
-				<view class="text">为了方便您的取货和我们的送货,并获取更多优惠活动,需要您的手机授权</view>
-				<view class="btn_box">
-					<button class="weixin" @click="ToIndex()">取消</button>
-					<button class="weixin" open-type="getPhoneNumber" @getphonenumber="PhoneNumber">手机号授权</button>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-// #ifdef H5
-import { loginWinxin } from '@/utils/wxAuthorized';
-// #endif
-// #ifdef MP-WEIXIN
-import { wechatMpAuth } from '@/api/wx';
-// #endif
-import { mapMutations } from 'vuex';
-import { getUserInfo, bangding } from '@/api/login.js';
-export default {
-	data() {
-		return {
-			userInfo: {}, //授权用户信息
-			code: '', //授权code
-			loding: false, //判断是否在点击中
-			MaskShow: false // 手机号授权弹窗
-		};
-	},
-	onLoad(option) {
-		this.loadData();
-	},
-	methods: {
-		loadData() {
-			// #ifdef H5
-			loginWinxin();
-			// #endif
-		},
-		// #ifndef H5
-		// 用户确认授权
-		userInfoData(e) {
-			const that = this;
-			// #ifdef MP-WEIXIN
-			if (!this.loding) {
-				uni.showModal({
-					title: '温馨提示',
-					content: '亲,授权微信登录后才能正常使用小程序功能',
-					success: res => {
-						if (res.confirm) {
-							wx.getUserProfile({
-								desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
-								success: res => {
-									that.userInfo = res;
-									that.loadMp();
-								},
-								fail: err => {
-									uni.showToast({
-										title: '您拒绝了请求,不能正常使用小程序',
-										icon: 'error',
-										duration: 2000
-									});
-									return;
-								}
-							});
-						} else if (res.cancel) {
-							//如果用户点击了取消按钮
-							uni.showToast({
-								title: '您拒绝了请求,不能正常使用小程序',
-								icon: 'error',
-								duration: 2000
-							});
-							return;
-						}
-					}
-				});
-			}
-			// #endif
-		},
-		// #endif
-		// #ifdef MP-WEIXIN
-		loadMp(option) {
-			let obj = this;
-			obj.loding = true;
-			// 获取登录授权页数据
-			let user = obj.userInfo;
-			// 获取推广人id
-			let spread_spid = uni.getStorageSync('spread') || '';
-			// let spread_code = uni.getStorageSync('spread_code') || '';
-			uni.showLoading({
-				title: '授权中',
-				mask: true
-			});
-			wx.login({
-				success(e) {
-					wechatMpAuth({
-						code: e.code,
-						iv: user.iv,
-						encryptedData: user.encryptedData,
-						spread_spid: spread_spid,
-						// #ifdef MP
-						spread_code: spread_code
-						// #endif
-					})
-						.then(({ data }) => {
-							obj.loding = false;
-							obj.wchatAuth(data);
-							console.log(data);
-						})
-						.catch(e => {
-							obj.loding = false;
-							uni.hideLoading();
-						});
-				},
-				fill: function(e) {
-					obj.loding = false;
-					console.log(e);
-				}
-			});
-		},
-		wchatAuth(data) {
-			let obj = this;
-			// 保存token
-			uni.setStorageSync('token', data.token);
-			// 获取用户基础信息
-			getUserInfo({})
-				.then(e => {
-					uni.hideLoading();
-					obj.login();
-					// 保存返回用户数据
-					obj.setUserInfo(e.data);
-					obj.ToIndex();
-					// if (e.data.phone == null || !e.data.phone ) {
-					// 	obj.MaskShow = true;
-					// } else {
-					// 	obj.ToIndex();
-					// }
-				})
-				.catch(e => {
-					uni.hideLoading();
-				});
-		},
-		// #endif
-		ToIndex() {
-			let obj = this;
-			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'
-							});
-						}
-					});
-				}
-			});
-		},
-		// 绑定手机号
-		PhoneNumber(e) {
-			let obj = this;
-			obj.MaskShow = false;
-			(obj.iv = e.detail.iv), (obj.encryptedData = e.detail.encryptedData);
-
-			uni.setStorageSync('code', obj.code);
-			bangding({
-				flag: 1,
-				cache_key: obj.cache_key,
-				code: obj.code,
-				iv: obj.iv,
-				encryptedData: obj.encryptedData
-			}).then(function(e) {
-				if (e.data.is_bind == 1) {
-					console.log('bangding1');
-					bangding({
-						flag: 1,
-						cache_key: obj.cache_key,
-						code: obj.code,
-						iv: obj.iv,
-						encryptedData: obj.encryptedData,
-						step: 1
-					})
-						.then(function(e) {
-							// 获取用户基础信息
-							obj.GetUser();
-							obj.$api.msg(e.msg);
-							obj.$nextTick(function() {
-								obj.ToIndex();
-							});
-						})
-						.catch(e => {
-							console.log(e);
-						});
-				} else {
-					console.log('bangding2');
-					obj.$api.msg(e.msg);
-					// 获取用户基础信息
-					obj.GetUser();
-					obj.$api.msg(e.msg);
-					obj.$nextTick(function() {
-						obj.ToIndex();
-					});
-				}
-			});
-		},
-		GetUser() {
-			// 获取用户基础信息
-			getUserInfo({})
-				.then(({ data }) => {
-					this.setUserInfo(data);
-					console.log(data, 11);
-					console.log(uni.getStorageSync('userInfo'), 55);
-				})
-				.catch(e => {
-					console.log(e);
-				});
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-page,
-.content {
-	height: 100%;
-}
-
-.Mask {
-	position: fixed;
-	top: 0;
-	width: 100%;
-	height: 100%;
-	background-color: rgba(51, 51, 51, 0.7);
-	.Mask-box {
-		margin: auto;
-		margin-top: 320rpx;
-		padding: 50rpx 30rpx;
-		width: 90%;
-		height: 450rpx;
-		top: 500rpx;
-		left: 10%;
-		background-color: #ffffff;
-		border-radius: 15rpx;
-		.title {
-			text-align: center;
-			font-size: 35rpx;
-			font-weight: 700;
-		}
-		.text {
-			font-size: 30rpx;
-			color: #848484;
-			padding-top: 50rpx;
-		}
-		.btn_box {
-			margin: 70rpx 0 0 0;
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-		}
-	}
-}
-
-.weixin {
-	// background: linear-gradient(90deg, rgba(36, 214, 78, 1), rgba(45, 187, 89, 1));
-	background: $base-color;
-	width: 40%;
-	color: #ffffff;
-	border-radius: 50rpx;
-	border: none;
-	margin: 0 20rpx;
-}
-.bg-img,
-.logo-img-box {
-	position: absolute;
-	top: 0;
-	left: 0;
-	width: 100%;
-	height: 100%;
-}
-.logo-img {
-	margin-top: 20vh;
-	margin-left: 176rpx;
-	width: 385rpx;
-	height: 394rpx;
-}
-.userInfo {
-	margin: 0 100rpx;
-	margin-top: 50rpx;
-	color: #ffffff;
-	border-radius: 99rpx;
-	background-color: $base-color !important;
-}
-</style>
+<template>
+	<view class="content">
+		<!-- #ifdef MP -->
+		<image class="bg-img" src="/static/img/img09.png" mode=" scaleToFill"></image>
+		<view class="logo-img-box">
+			<image class="logo-img" src="/static/img/logo.png" mode=" aspectFit"></image>
+			<button class="userInfo" type="warn" open-type="getUserInfo" @getuserinfo="userInfoData">
+				<text class="iconfont iconweixin"></text>
+				<text>微信授权登录</text>
+			</button>
+		</view>
+		<!-- #endif -->
+		<view class="Mask" v-show="MaskShow">
+			<view class="Mask-box">
+				<view class="title">申请获取您的手机号</view>
+				<view class="text">为了方便您的取货和我们的送货,并获取更多优惠活动,需要您的手机授权</view>
+				<view class="btn_box">
+					<button class="weixin" @click="ToIndex()">取消</button>
+					<button class="weixin" open-type="getPhoneNumber" @getphonenumber="PhoneNumber">手机号授权</button>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+// #ifdef H5
+import { loginWinxin } from '@/utils/wxAuthorized';
+// #endif
+// #ifdef MP-WEIXIN
+import { wechatMpAuth } from '@/api/wx';
+// #endif
+import { mapMutations } from 'vuex';
+import { getUserInfo, bangding } from '@/api/login.js';
+export default {
+	data() {
+		return {
+			userInfo: {}, //授权用户信息
+			code: '', //授权code
+			loding: false, //判断是否在点击中
+			MaskShow: false // 手机号授权弹窗
+		};
+	},
+	onLoad(option) {
+		this.loadData();
+	},
+	methods: {
+		loadData() {
+			// #ifdef H5
+			loginWinxin();
+			// #endif
+		},
+		// #ifndef H5
+		// 用户确认授权
+		userInfoData(e) {
+			const that = this;
+			// #ifdef MP-WEIXIN
+			if (!this.loding) {
+				wx.getUserProfile({
+					desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
+					success: res => {
+						that.userInfo = res;
+						that.loadMp();
+					},
+					fail: err => {
+						console.log('getUserProfile出错', err);
+					}
+				});
+			}
+			// #endif
+		},
+		// #endif
+		// #ifdef MP-WEIXIN
+		loadMp(option) {
+			let obj = this;
+			obj.loding = true;
+			// 获取登录授权页数据
+			let user = obj.userInfo;
+			// 获取推广人id
+			let spread_spid = uni.getStorageSync('spread') || '';
+			// let spread_code = uni.getStorageSync('spread_code') || '';
+			uni.showLoading({
+				title: '授权中',
+				mask: true
+			});
+			wx.login({
+				success(e) {
+					wechatMpAuth({
+						code: e.code,
+						iv: user.iv,
+						encryptedData: user.encryptedData,
+						spread_spid: spread_spid,
+						// #ifdef MP
+						spread_code: spread_code
+						// #endif
+					})
+						.then(({ data }) => {
+							obj.loding = false;
+							obj.wchatAuth(data);
+							console.log(data);
+						})
+						.catch(e => {
+							obj.loding = false;
+							uni.hideLoading();
+						});
+				},
+				fill: function(e) {
+					obj.loding = false;
+					console.log(e);
+				}
+			});
+		},
+		wchatAuth(data) {
+			let obj = this;
+			// 保存token
+			uni.setStorageSync('token', data.token);
+			// 获取用户基础信息
+			getUserInfo({})
+				.then(e => {
+					uni.hideLoading();
+					obj.login();
+					// 保存返回用户数据
+					obj.setUserInfo(e.data);
+					obj.ToIndex();
+					// if (e.data.phone == null || !e.data.phone ) {
+					// 	obj.MaskShow = true;
+					// } else {
+					// 	obj.ToIndex();
+					// }
+				})
+				.catch(e => {
+					uni.hideLoading();
+				});
+		},
+		// #endif
+		ToIndex() {
+			let obj = this;
+			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'
+							});
+						}
+					});
+				}
+			});
+		},
+		// 绑定手机号
+		PhoneNumber(e) {
+			let obj = this;
+			obj.MaskShow = false;
+			(obj.iv = e.detail.iv), (obj.encryptedData = e.detail.encryptedData);
+
+			uni.setStorageSync('code', obj.code);
+			bangding({
+				flag: 1,
+				cache_key: obj.cache_key,
+				code: obj.code,
+				iv: obj.iv,
+				encryptedData: obj.encryptedData
+			}).then(function(e) {
+				if (e.data.is_bind == 1) {
+					console.log('bangding1');
+					bangding({
+						flag: 1,
+						cache_key: obj.cache_key,
+						code: obj.code,
+						iv: obj.iv,
+						encryptedData: obj.encryptedData,
+						step: 1
+					})
+						.then(function(e) {
+							// 获取用户基础信息
+							obj.GetUser();
+							obj.$api.msg(e.msg);
+							obj.$nextTick(function() {
+								obj.ToIndex();
+							});
+						})
+						.catch(e => {
+							console.log(e);
+						});
+				} else {
+					console.log('bangding2');
+					obj.$api.msg(e.msg);
+					// 获取用户基础信息
+					obj.GetUser();
+					obj.$api.msg(e.msg);
+					obj.$nextTick(function() {
+						obj.ToIndex();
+					});
+				}
+			});
+		},
+		GetUser() {
+			// 获取用户基础信息
+			getUserInfo({})
+				.then(({ data }) => {
+					this.setUserInfo(data);
+					console.log(data, 11);
+					console.log(uni.getStorageSync('userInfo'), 55);
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page,
+.content {
+	height: 100%;
+}
+
+.Mask {
+	position: fixed;
+	top: 0;
+	width: 100%;
+	height: 100%;
+	background-color: rgba(51, 51, 51, 0.7);
+	.Mask-box {
+		margin: auto;
+		margin-top: 320rpx;
+		padding: 50rpx 30rpx;
+		width: 90%;
+		height: 450rpx;
+		top: 500rpx;
+		left: 10%;
+		background-color: #ffffff;
+		border-radius: 15rpx;
+		.title {
+			text-align: center;
+			font-size: 35rpx;
+			font-weight: 700;
+		}
+		.text {
+			font-size: 30rpx;
+			color: #848484;
+			padding-top: 50rpx;
+		}
+		.btn_box {
+			margin: 70rpx 0 0 0;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+		}
+	}
+}
+
+.weixin {
+	// background: linear-gradient(90deg, rgba(36, 214, 78, 1), rgba(45, 187, 89, 1));
+	background: $base-color;
+	width: 40%;
+	color: #ffffff;
+	border-radius: 50rpx;
+	border: none;
+	margin: 0 20rpx;
+}
+.bg-img,
+.logo-img-box {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+}
+.logo-img {
+	margin-top: 20vh;
+	margin-left: 176rpx;
+	width: 385rpx;
+	height: 394rpx;
+}
+.userInfo {
+	margin: 0 100rpx;
+	margin-top: 50rpx;
+	color: #ffffff;
+	border-radius: 99rpx;
+	background-color: $base-color !important;
+}
+</style>

+ 122 - 122
pages/redirect/redirect.vue

@@ -1,122 +1,122 @@
-<template>
-	<view>
-	</view>
-</template>
-<script>
-import { getUserInfo } from '@/api/user.js';
-import { mapMutations,mapState } from 'vuex';
-// #ifdef H5
-import { wechatAuth } from '@/api/wx';
-// #endif
-// #ifdef MP-WEIXIN
-import { wechatMpAuth } from '@/api/wx';
-// #endif
-export default {
-	computed: {
-		...mapState(['urlFile'])
-	},
-	onLoad(option) {
-		let obj = this;
-		// 判断是否需要保存定向地址
-		// #ifdef H5
-		this.loadH5()
-		// #endif
-		// #ifdef MP-WEIXIN
-		this.loadMp(option)
-		// #endif
-	},
-	methods: {
-		...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')||'';
-			wechatAuth({
-				code: code,
-				spread:spread,
-			}).then(({ data }) => {
-				obj.wchatAuth(data);
-			}).catch((e) => {
-				uni.showModal({
-					title: '错误',
-					content: JSON.stringify(e),
-					showCancel: false,
-				});
-			});;
-		},
-		// #endif
-		// #ifdef MP-WEIXIN
-		loadMp(option) {
-			let obj = this;
-			// 获取登录授权页数据
-			let user = obj.$api.prePage().userInfo;
-			// #ifndef MP
-			// 获取推广人id
-			let spread_spid = uni.getStorageSync('spread') || '';
-			// #endif
-			// #ifdef MP
-			// 小程序推广人
-			let spread_code = uni.getStorageSync('spread_code') || '';
-			// #endif
-			wechatMpAuth({
-				code: option.code,
-				iv: user.target.iv,
-				encryptedData: user.target.encryptedData,
-				// #ifndef MP
-				spread_spid: spread_spid,
-				// #endif
-				// #ifdef MP
-				spread_code:spread_code
-				// #endif
-			}).then(({ data }) => {
-				obj.wchatAuth(data);
-			}).catch((e) => {
-				uni.showModal({
-					title: '错误',
-					content: JSON.stringify(e),
-					showCancel: false,
-				});
-			});
-		},
-		// #endif
-		wchatAuth(data) {
-			let obj = this;
-			// 保存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',
-								});
-							}
-						});
-					}
-				});
-			}).catch((e) => {
-				uni.showModal({
-					title: '错误',
-					content: JSON.stringify(e),
-					showCancel: false,
-				});
-			});;
-		}
-	}
-};
-</script>
-<style></style>
+<template>
+	<view>
+	</view>
+</template>
+<script>
+import { getUserInfo } from '@/api/user.js';
+import { mapMutations,mapState } from 'vuex';
+// #ifdef H5
+import { wechatAuth } from '@/api/wx';
+// #endif
+// #ifdef MP-WEIXIN
+import { wechatMpAuth } from '@/api/wx';
+// #endif
+export default {
+	computed: {
+		...mapState('user',['urlFile'])
+	},
+	onLoad(option) {
+		let obj = this;
+		// 判断是否需要保存定向地址
+		// #ifdef H5
+		this.loadH5()
+		// #endif
+		// #ifdef MP-WEIXIN
+		this.loadMp(option)
+		// #endif
+	},
+	methods: {
+		...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')||'';
+			wechatAuth({
+				code: code,
+				spread:spread,
+			}).then(({ data }) => {
+				obj.wchatAuth(data);
+			}).catch((e) => {
+				uni.showModal({
+					title: '错误',
+					content: JSON.stringify(e),
+					showCancel: false,
+				});
+			});;
+		},
+		// #endif
+		// #ifdef MP-WEIXIN
+		loadMp(option) {
+			let obj = this;
+			// 获取登录授权页数据
+			let user = obj.$api.prePage().userInfo;
+			// #ifndef MP
+			// 获取推广人id
+			let spread_spid = uni.getStorageSync('spread') || '';
+			// #endif
+			// #ifdef MP
+			// 小程序推广人
+			let spread_code = uni.getStorageSync('spread_code') || '';
+			// #endif
+			wechatMpAuth({
+				code: option.code,
+				iv: user.target.iv,
+				encryptedData: user.target.encryptedData,
+				// #ifndef MP
+				spread_spid: spread_spid,
+				// #endif
+				// #ifdef MP
+				spread_code:spread_code
+				// #endif
+			}).then(({ data }) => {
+				obj.wchatAuth(data);
+			}).catch((e) => {
+				uni.showModal({
+					title: '错误',
+					content: JSON.stringify(e),
+					showCancel: false,
+				});
+			});
+		},
+		// #endif
+		wchatAuth(data) {
+			let obj = this;
+			// 保存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',
+								});
+							}
+						});
+					}
+				});
+			}).catch((e) => {
+				uni.showModal({
+					title: '错误',
+					content: JSON.stringify(e),
+					showCancel: false,
+				});
+			});;
+		}
+	}
+};
+</script>
+<style></style>

+ 208 - 0
pages/set/address.vue

@@ -0,0 +1,208 @@
+<template>
+	<view class="content b-t">
+		<view class="list" v-for="(item, index) in addressList" :key="index" @click="checkAddress(item)">
+			<view class="wrapper">
+				<view class="address-box">
+					<text class="name">{{ item.real_name }}</text>
+					<text class="mobile">{{ item.phone }}</text>
+				</view>
+				<view class="u-box">
+					<text class="address">{{ item.province + item.city + item.district }} {{ item.detail }}</text>
+				</view>
+			</view>
+			<view class="buttom">
+				<view class="default-buttom" @click.stop="defaultUp(item,index)">
+					<view class="iconfont iconroundcheckfill checkbox" :class="{ checked: item.is_default == 1 }"></view>
+					<text class="text">设为默认地址</text>
+				</view>
+				<view class="operation">
+					<view @click.stop="addAddress('edit', item)">
+						<text class="iconfont iconedit"></text>
+						<text class="text">编辑</text>
+					</view>
+					<view class="blank"></view>
+					<view @click.stop="delAddress(item)">
+						<text class="iconfont icondelete"></text>
+						<text class="text">删除</text>
+					</view>
+				</view>
+			</view>
+		</view>
+		<button class="add-btn" @click="addAddress('add')">新增地址</button>
+	</view>
+</template>
+
+<script>
+import { getAddressList,setAddressDefault,addressDel } from '@/api/user.js';
+export default {
+	data() {
+		return {
+			source: 0,
+			addressList: []
+		};
+	},
+	onLoad(option) {
+		this.source = option.source||0
+		this.loadAddress();
+	},
+	methods: {
+		// 加载地址
+		loadAddress() {
+			getAddressList({
+				page: 1,
+				limit: 100
+			}).then(({ data }) => {
+				this.addressList = data;
+			});
+		},
+		// 设为默认地址
+		defaultUp(data,ind) {
+			this.addressList=this.addressList.map((e) => {
+				e.is_default=0
+				return e
+			})
+			this.addressList[ind].is_default=1
+			setAddressDefault({
+				id: data.id
+			}).then(({ data }) => {
+				this.loadAddress();
+			}).catch((e) => {
+				console.log(e);
+			});
+		},
+		//删除地址
+		delAddress(item) {
+			addressDel({
+				id:item.id
+			}).then(({data})=>{
+				this.$api.msg('删除成功')
+			})
+			let s = this.addressList.indexOf(item);
+			this.addressList.splice(s, 1);
+		},
+		//选择地址
+		checkAddress(item) {
+			if (this.source == 1) {
+				//this.$api.prePage()获取上一页实例,在App.vue定义
+				this.$api.prePage().addressData = item;
+				uni.navigateBack();
+			}
+		},
+		// 添加地址
+		addAddress(type, item) {
+			uni.navigateTo({
+				url: `/pages/set/addressManage?type=${type}&data=${JSON.stringify(item)}`
+			});
+		},
+		//添加或修改成功之后回调
+		refreshList() {
+			// 重新加载地址
+			this.loadAddress()
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	padding-bottom: 120rpx;
+	padding-top: 20rpx;
+	background-color: $page-color-base;
+}
+.content {
+	position: relative;
+}
+.list {
+	align-items: center;
+	padding: 20rpx 30rpx;
+	background: #fff;
+	margin: 20rpx;
+	margin-top: 0;
+	.buttom {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		padding-top: 10rpx;
+		.checkbox {
+			font-size: 44rpx;
+			line-height: 1;
+			padding: 4rpx;
+			color: $font-color-disabled;
+			background: #fff;
+			border-radius: 50px;
+		}
+		.checkbox.checked {
+			color: $base-color;
+		}
+		.default-buttom {
+			display: flex;
+			align-items: center;
+		}
+		.operation {
+			display: flex;
+			align-items: center;
+			.blank {
+				width: 30rpx;
+			}
+		}
+		.text {
+			padding-left: 10rpx;
+			font-size: 24rpx;
+			color: #666666;
+		}
+	}
+}
+.wrapper {
+	display: flex;
+	flex-direction: column;
+	flex: 1;
+	border-bottom: 1px solid #f0f0f0;
+	padding-bottom: 20rpx;
+}
+.address-box {
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	.address {
+		font-size: $font-base + 2rpx;
+		color: $font-color-dark;
+	}
+	.mobile {
+		font-size: $font-base;
+		color: rgba(51, 51, 51, 1);
+	}
+}
+.u-box {
+	font-size: $font-base;
+	color: $font-color-light;
+	margin-top: 16rpx;
+	.name {
+		margin-right: 30rpx;
+	}
+}
+.icon-bianji {
+	display: flex;
+	align-items: center;
+	height: 80rpx;
+	font-size: 40rpx;
+	color: $font-color-light;
+	padding-left: 30rpx;
+}
+
+.add-btn {
+	position: fixed;
+	left: 30rpx;
+	right: 30rpx;
+	bottom: 16rpx;
+	z-index: 95;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	width: 690rpx;
+	height: 80rpx;
+	font-size: $font-lg;
+	color: #fff;
+	background-color: $base-color;
+	border-radius: 10rpx;
+}
+</style>

+ 219 - 0
pages/set/addressManage.vue

@@ -0,0 +1,219 @@
+<template>
+	<view class="content">
+		<view class="row b-b">
+			<text class="tit">联系人</text>
+			<input class="input" type="text" v-model="addressData.name" placeholder="收货人姓名" placeholder-class="placeholder" />
+		</view>
+		<view class="row b-b">
+			<text class="tit">手机号</text>
+			<input class="input" type="number" v-model="addressData.mobile" placeholder="收货人手机号码" placeholder-class="placeholder" />
+		</view>
+		<view class="row b-b">
+			<text class="tit">地址</text>
+			<pickerAddress class="input" @change="onCityClick">{{addressDetail||'请选择地址'}}</pickerAddress>
+			<text class="iconfont iconlocation"></text>
+		</view>
+		<view class="row b-b">
+			<text class="tit">门牌号</text>
+			<input class="input" type="text" v-model="addressData.area" placeholder="楼号、门牌" placeholder-class="placeholder" />
+		</view>
+
+		<uni-list class="margin-t-20">
+			<uni-list-item
+				title="设为默认"
+				:switch-checked="addressData.default"
+				:show-switch="true"
+				:show-arrow="false"
+				switch-color="#5dbc7c"
+				@switchChange="switchChange"
+			></uni-list-item>
+		</uni-list>
+
+		<button class="add-btn" @click="confirm">提交</button>
+	</view>
+</template>
+
+<script>
+import uniList from '@/components/uni-list/uni-list.vue';
+import uniListItem from '@/components/uni-list-item/uni-list-item.vue';
+import uniPopup from '@/components/uni-popup/uni-popup.vue';
+import  pickerAddress from '@/components/wangding-pickerAddress/wangding-pickerAddress.vue';
+import { addressEdit } from '@/api/user.js';
+export default {
+	components: {
+		uniList,
+		uniListItem,
+		pickerAddress,
+		uniPopup
+	},
+	data() {
+		return {
+			addressDetail: '',
+			addressData: {
+				name: '',
+				mobile: '',
+				address: {
+					province: '',
+					city: '',
+					district: ''
+				},
+				area: '',
+				default: false
+			}
+		};
+	},
+	onLoad(option) {
+		let title = '新增收货地址';
+		if (option.type === 'edit') {
+			title = '编辑收货地址';
+			let data = JSON.parse(option.data);
+			console.log(data);
+
+			this.addressData = {
+				name: data.real_name,
+				mobile: data.phone,
+				address: {
+					province: data.province,
+					city: data.city,
+					district: data.district
+				},
+				area: data.detail,
+				default: data.is_default == 1,
+				id: data.id
+			};
+			this.addressDetail = data.province + data.city + data.district;
+		}
+		this.manageType = option.type;
+		uni.setNavigationBarTitle({
+			title
+		});
+	},
+	methods: {
+		// 选中城市切换
+		onCityClick({data}) {
+			let address = this.addressData.address;
+			address.province = data[0];
+			address.city = data[1];
+			address.district = data[2];
+			this.addressDetail = data.join('');
+		},
+		//地图选择地址
+		chooseLocation() {
+			uni.chooseLocation({
+				success: data => {
+					console.log(data);
+					this.addressData.addressName = data.name;
+					this.addressData.address = data.name;
+				}
+			});
+		},
+		// 设置是否为默认地址
+		switchChange(e) {
+			this.addressData.default = e.value;
+		},
+		//提交
+		confirm() {
+			let obj = this;
+			let data = this.addressData;
+			if (!data.name) {
+				this.$api.msg('请填写收货人姓名');
+				return;
+			}
+			if (!/(^1[3|4|5|7|8][0-9]{9}$)/.test(data.mobile)) {
+				this.$api.msg('请输入正确的手机号码');
+				return;
+			}
+			if (!data.address) {
+				this.$api.msg('请在地图选择所在位置');
+				return;
+			}
+			if (!data.area) {
+				this.$api.msg('请填写门牌号信息');
+				return;
+			}
+
+			//this.$api.prePage()获取上一页实例,可直接调用上页所有数据和方法,在App.vue定义
+			addressEdit({
+				real_name: data.name,
+				phone: data.mobile,
+				address: {
+					province: data.address.province,
+					city: data.address.city,
+					district: data.address.district
+				},
+				detail: data.area,
+				is_default: data.default,
+				id: data.id||"",
+				type:1
+			}).then(function(e) {
+				obj.$api.prePage().refreshList();
+				uni.showToast({
+					title:'提交成功',
+					duration:2000
+				});
+				setTimeout(function() {
+					uni.navigateBack();
+				}, 800);
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: $page-color-base;
+	padding-top: 16rpx;
+}
+
+.row {
+	display: flex;
+	align-items: center;
+	position: relative;
+	padding: 0 30rpx;
+	height: 110rpx;
+	background: #fff;
+
+	.tit {
+		flex-shrink: 0;
+		width: 120rpx;
+		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;
+	}
+}
+.default-row {
+	margin-top: 16rpx;
+	.tit {
+		flex: 1;
+	}
+	switch {
+		transform: translateX(16rpx) scale(0.9);
+	}
+}
+.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);
+}
+
+.alert-box {
+	background-color: #ffffff;
+}
+</style>

+ 161 - 0
pages/set/phone.vue

@@ -0,0 +1,161 @@
+<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 (!/(^1[3|4|5|7|8][0-9]{9}$)/.test(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('绑定成功!');
+					setTimeout(function() {
+						obj.loding = false;
+						uni.switchTab({
+							url: '/pages/user/user'
+						});
+					}, 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: 120rpx;
+		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: #5dbc7c;
+	font-size: 23rpx;
+	border-left: 1px solid #eeeeee;
+	width: 150rpx;
+	flex-shrink: 0;
+	text-align: center;
+}
+</style>

+ 203 - 303
pages/set/userinfo.vue

@@ -1,317 +1,217 @@
 <template>
-	<view class="content">
-		<view class="row">
-			<view class="left">
-				<text class="tit" style="width: 160upx;">{{ $t('foo.zh') }}</text>
-				<view class="tit">ID:{{ userInfo.id }}</view>
-			</view>
-			<input class="input" type="text" disabled="true" v-model="userInfo.username" placeholder-class="placeholder" />
+<!-- 	<view class="container">
+		<uni-list>
+		    <uni-list-item title="个人资料" @click="navTo('/pages/set/userinfo')" ></uni-list-item>
+			<uni-list-item title="修改密码" @click="navTo('/pages/set/password')" ></uni-list-item>
+		    <uni-list-item title="实名认证" @click="navTo('/pages/set/phone')" ></uni-list-item>
+		    <uni-list-item title="收货地址" @click="navTo('/pages/set/address')" ></uni-list-item>
+		</uni-list>
+		<uni-list class="margin-t-20">
+		    <uni-list-item title="消息推送" :switch-checked='true' :show-switch="true" :show-arrow="false" switch-color='#5dbc7c'  @switchChange='switchChange'> 
+			</uni-list-item>
+		</uni-list>
+		
+		<uni-list class="margin-t-20">
+		    <uni-list-item title="清除缓存" ></uni-list-item>
+		    <uni-list-item title="检查更新" >
+				<template slot="right">
+					当前版本 1.0.3
+				</template>
+			</uni-list-item>
+		</uni-list>
+		<view class="list-cell log-out-btn" @click="toLogout">
+			<text class="cell-tit">退出登录</text>
 		</view>
-		<view class="row1">
-			<text class="tit">{{ $t('foo.tx') }}</text>
-			<view class="background-img" @click.stop="imgsub"><image class="background-img" :src="userInfo.avatar" mode="aspectFill"></image></view>
-		</view>
-		<view class="row">
-			<text class="tit" style="width: 160upx; color: #bdbdbd;">{{ $t('foo.nc') }}*</text>
-			<input class="input" type="text" v-model="userInfo.nickname" placeholder-class="placeholder" placeholder="请填写" />
-		</view>
-		<view class="row">
-			<text class="tit" style="width: 160upx; color: #bdbdbd;">{{ $t('foo.yhzh') }}*</text>
-			<input class="input" type="text" v-model="userInfo.bank_card_no" placeholder-class="placeholder" placeholder="请填写" />
-		</view>
-		<view class="row">
-			<view class="left">
-				<text class="tit" style="width: 160upx; color: #bdbdbd;">{{ $t('foo.scyh') }}*</text>
-				<view class="image"><image src="../../static/img/user-bank.png" mode=""></image></view>
-			</view>
-
-			<input class="input" type="text" v-model="userInfo.bank_of_deposit" placeholder-class="placeholder" placeholder="请填写" />
-		</view>
-		<!-- <view class="row">
-			<text class="tit">ID</text>
-			<input class="input" type="text" disabled="true" v-model="userInfo.id" placeholder-class="placeholder" />
-		</view> -->
-
-		<view class="row1">
-			<view class="left">
-				<text class="tit">{{ $t('foo.zfbskm') }}</text>
-				<view class="image"><image src="../../static/img/ali.png" mode=""></image></view>
-			</view>
-
-			<view class="background-img1" @click.stop="imgsubali">
-				<image class="background-img1" :src="userInfo.ali || '../../static/img/upload.png'" mode="aspectFill"></image>
-			</view>
-		</view>
-		<view class="row1">
-			<view class="left">
-				<text class="tit">{{ $t('foo.wxskm') }}</text>
-				<view class="image"><image src="../../static/img/weixin.png" mode=""></image></view>
-			</view>
-
-			<view class="background-img1" @click.stop="imgsubwechat">
-				<image class="background-img1" :src="userInfo.wechat || '../../static/img/upload.png'" mode="aspectFill"></image>
-			</view>
-		</view>
-		<view class="row">
-			<text class="tit" style="width: 140upx; color: #bdbdbd;">{{ $t('foo.jjlxrdh') }}*</text>
-			<input class="input" type="text" v-model="userInfo.ext_mobile" placeholder-class="placeholder" placeholder="请填写" />
-		</view>
-		<view class="tishi">*{{ $t('foo.bt') }}</view>
-		<view class="add-btn" @click="confirm">{{ $t('foo.tj') }}</view>
-		<view class="out" @click="toLogout">{{ $t('foo.tcdl') }}</view>
-	</view>
+	</view> -->
+  <view class="container">
+  	<view class="row b-b flex jg">
+  		<text class="tit">头像</text>
+  		<image :src="userInfo.avatar" @click.stop="imgsub"></image>
+  	</view>
+  	<view class="row b-b flex">
+  		<text class="tit">昵称</text>
+  		<input class="input" v-model="userInfo.nickname" type="text" placeholder-class="placeholder" />
+  	</view>
+  	<view class="row b-b flex">
+  		<text class="tit">邀请码</text>
+  		<input class="input" v-model="userInfo.uid" type="text" disabled="true" placeholder-class="placeholder" style="color: #999;" />
+  	</view>
+  	<view class="row b-b flex" v-if="userInfo.account || userInfo.phone">
+  		<text class="tit">用户账号</text>
+  		<input class="input" v-model="userInfo.account || userInfo.phone" type="number" disabled="true" placeholder-class="placeholder" style="color: #999;"/>
+  	</view>
+  	<view class="submit-box" >
+  		<view class="submit" @click="edit">确认修改</view>
+  		<view class="submit1" @click="toLogout">退出登录</view>
+  	</view>
+  	
+  </view>
 </template>
 
 <script>
-import { mapState, mapMutations } from 'vuex';
-import { uploads } from '@/api/user.js';
-import { userEdit, logout } from '@/api/set.js';
+  import uniList from '@/components/uni-list/uni-list.vue';
+  import uniListItem from '@/components/uni-list-item/uni-list-item.vue';
+  import { mapState, mapMutations } from 'vuex';
+  import { logout } from '@/api/set.js';
 
-export default {
-	data() {
-		return {};
-	},
-	onLoad() {
-		let i = this.userInfo.id + '';
-		console.log(i.length);
-		if (i.length < 8) {
-			let k = '';
-			for (let j = 0; j < 8 - i.length; j++) {
-				k += '0';
-			}
-			this.userInfo.id = k + this.userInfo.id;
-		}
-		uni.setNavigationBarTitle({
-			title: this.$t('foo.sz')
-		});
-	},
-	computed: {
-		...mapState('user', ['userInfo'])
-	},
-	methods: {
-		...mapMutations('user', ['logout']),
-		imgsub() {
-			console.log('上传头像');
-			uploads({
-				filename: ''
-			}).then(res => {
-				// console.log("data",data);
-				// this.userInfo.avatar = data.fullurl;
-				console.log(res, '++++++++++++++++');
-				this.userInfo.avatar = res[0].fullurl;
-			});
-		},
-		imgsubali() {
-			console.log('上传支付宝二维码');
-			uploads({
-				filename: ''
-			}).then(res => {
-				// console.log("data",data);
-				// this.userInfo.avatar = data.fullurl;
-				console.log(res, '++++++++++++++++');
-				this.userInfo.ali = res[0].fullurl;
+  import {
+  		uploads,edit,upload
+  	} from '@/api/user.js';
+  export default {
+  	components: {
+  		uniList,
+  		uniListItem
+  	},
+  	data() {
+  		return {
+  			userInfo:{},
+			pics:[],
+  		};
+  	},
+  	onLoad() {
+		this.userInfo = uni.getStorageSync('userInfo') || '';
+		console.log(this.userInfo)
+  	},
+  	methods: {
+  		...mapMutations('user',['logout']),
+  		//退出登录
+  		toLogout() {
+  			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);
+  						});
+  					}
+  				}
+  			});
+  		},
+  		imgsub() {
+			let obj = this
+			upload({
+				filename: ''
+			}).then(res => {
+				console.log(res[0].url)
+				obj.userInfo.avatar = res[0].url
 			});
-		},
-		imgsubwechat() {
-			console.log('上传微信二维码');
-			uploads({
-				filename: ''
-			}).then(res => {
-				// console.log("data",data);
-				// this.userInfo.avatar = data.fullurl;
-				console.log(res, '++++++++++++++++');
-				this.userInfo.wechat = res[0].fullurl;
-			});
-		},
-		confirm() {
-			let data = '';
-			if (this.userInfo.nickname == '') {
-				uni.showModal({
-					title: this.$t('foo.ts'),
-					content: this.$t('foo.jtxzsxm')
-				});
-				return;
-			}
-			if (this.userInfo.bank_card_no == '') {
-				uni.showModal({
-					title: this.$t('foo.ts'),
-					content: this.$t('foo.jtxyhkh')
-				});
-				return;
-			}
-			if (this.userInfo.bank_of_deposit == '') {
-				uni.showModal({
-					title: this.$t('foo.ts'),
-					content: this.$t('foo.jtxkhh')
-				});
-				return;
-			}
-			if (this.userInfo.ext_mobile == '' || this.userInfo.ext_mobile == null) {
-				uni.showModal({
-					title: this.$t('foo.ts'),
-					content: this.$t('foo.jtxjjlxrdh')
-				});
-				return;
+  		},
+  		edit() {
+  			const that = this;
+			uni.showLoading({
+				title: '提交中...',
+				mask:true
+			})
+			if(this.userInfo.nickname == '') {
+				return this.$api.msg('昵称不能为空!')
 			}
-			if (this.userInfo.avatar.length < 255) {
-				data = {
-					avatar: this.userInfo.avatar,
-					nickname: this.userInfo.nickname,
-					bank_of_deposit: this.userInfo.bank_of_deposit,
-					bank_card_no: this.userInfo.bank_card_no,
-					ali: this.userInfo.ali,
-					wechat: this.userInfo.wechat,
-					ext_mobile: this.userInfo.ext_mobile
-				};
-			} else {
-				data = {
-					avatar: '',
-					nickname: this.userInfo.nickname,
-					bank_of_deposit: this.userInfo.bank_of_deposit,
-					bank_card_no: this.userInfo.bank_card_no,
-					ali: this.userInfo.ali,
-					wechat: this.userInfo.wechat,
-					ext_mobile: this.userInfo.ext_mobile
-				};
-			}
-			userEdit(data)
-				.then(e => {
-					this.$api.msg('修改成功');
-					setTimeout(() => {
-						uni.navigateBack({});
-					}, 1000);
-					console.log(e);
-				})
-				.catch(e => {
-					console.log(e);
-				});
-		},
-		toLogout() {
-			let obj = this;
-			uni.showModal({
-				content: '确定要退出登录么',
-				success: e => {
-					if (e.confirm) {
-						// logout({}).then((e) => {
-						// 	uni.navigateBack();
-						// }).catch((e) => {
-						// 	console.log(e);
-						// })
-						logout({}).then()
-						uni.navigateBack();
-						obj.logout();
-					}
-				}
-			});
-		}
-	}
-};
+  			edit({
+  				avatar: this.userInfo.avatar,
+  				nickname: this.userInfo.nickname
+  			}).then( e =>{
+				uni.hideLoading()
+  				that.$api.msg('修改成功');
+  				setTimeout(()=> {
+  					uni.switchTab({
+  						url:'/pages/user/user'
+  					});
+  				}, 1000);
+  			}).catch(e =>{
+  				console.log(e);
+  				that.$api.msg('修改失败');
+  			})
+  		}
+  	}
+  };
 </script>
 
-<style lang="scss">
-.row1 {
-	display: flex;
-	align-items: center;
-	justify-content: space-between;
-	position: relative;
-	padding: 0 30upx;
-	height: 110upx;
-	background: #000;
-	margin-bottom: 20upx;
-	.toux {
-		display: inline-block;
-	}
-	.tit {
-		flex-shrink: 0;
-		width: 120upx;
-		font-size: $font-lg;
-		color: #fff;
+<style lang='scss'>
+	/* page{
+		background: $page-color-base;
 	}
-	.left {
-		display: flex;
-		justify-content: start;
-	}
-	.image {
-		width: 100rpx;
-		height: 100rpx;
-		image {
-			width: 100%;
-			height: 100%;
+	.list-cell{
+		display:flex;
+		align-items:baseline;
+		padding: 20rpx $page-row-spacing;
+		line-height:60rpx;
+		position:relative;
+		background: #fff;
+		justify-content: center;
+		&.log-out-btn{
+			margin-top: 40rpx;
+			.cell-tit{
+				color: $uni-color-primary;
+				text-align: center;
+				margin-right: 0;
+			}
 		}
-	}
-	.background-img {
-		width: 100rpx;
-		height: 100rpx;
-		border-radius: 50%;
-		background: #f2f2f2;
-	}
-	.background-img1 {
-		width: 100rpx;
-		height: 100rpx;
-		background: #000000;
-	}
-}
-.row {
-	display: flex;
-	align-items: center;
-	padding: 0 30upx;
-	height: 110upx;
-	background: #000;
-	.left {
-		display: flex;
-		justify-content: start;
-		align-items: center;
-	}
-	.image {
-		width: 100rpx;
-		height: 100rpx;
-		image {
-			width: 100%;
-			height: 100%;
+		.cell-tit{
+			flex: 1;
+			font-size: $font-base + 2rpx;
+			color: $font-color-dark;
+			margin-right:10rpx;
 		}
-	}
-	.tit {
-		flex-shrink: 0;
-		width: 120upx;
-		font-size: $font-lg;
-		color: #fff;
-	}
-	.input {
-		flex: 1;
-		text-align: right;
-		font-size: $font-base;
-		color: #fff;
-	}
-}
-.tishi {
-	padding: 20rpx 0 120rpx 24rpx;
-	color: #fff;
-	font-size: 26rpx;
-	font-family: PingFang SC;
-	font-weight: 500;
-	color: #ffffff;
-}
-.add-btn {
-	display: flex;
-	align-items: center;
-	justify-content: center;
-	margin: 158rpx auto 30rpx;
-	width: 560rpx;
-	height: 80rpx;
-	background: linear-gradient(-74deg, #ce9c6d, #ffecd6);
-	border-radius: 40px;
-	color: #ffffff;
-}
-.out {
-	display: flex;
-	align-items: center;
-	justify-content: center;
-	margin: 0 auto 30rpx;
-	width: 560rpx;
-	height: 80rpx;
-	border: 1px solid #ffecd6;
-	background: #ffffff;
-	border-radius: 40px;
-	color: #ce9c6d;
-}
+		.cell-tip{
+			font-size: $font-base;
+			color: $font-color-light;
+		}
+		switch{
+			transform: translateX(16rpx) scale(.84);
+		}
+	} */
+  page {
+    background-color: #f3f3f3;
+  	min-height: 100%;
+  	.container{
+  		height: 100%;
+  		
+  	}
+  }
+  .row {
+    background-color: #fff;
+  	padding: 42rpx 25rpx;
+  	font-size: 30rpx;
+  	color: #333333;
+  	image{
+  		width: 80rpx;
+  		height: 80rpx;
+  		border-radius: 50%;
+  	}
+  	.input {
+  		text-align: right;
+  		color: #333333;
+  	}
+  }
+  .submit-box{
+  		 padding-top: 157rpx;
+  		.submit{
+  			margin: 40rpx auto;
+  			width: 560rpx;
+  			background-color: #6EAB4E;
+  			color: #FFFFFF;
+  			text-align: center;
+  			padding:26rpx 0rpx;
+  			border-radius: 50rpx;
+  		}
+		.submit1{
+			margin: 40rpx auto;
+			width: 560rpx;
+			border: 1px solid #6EAB4E;
+			background-color: #FFFFFF;
+			color: #6EAB4E;
+			text-align: center;
+			padding:26rpx 0rpx;
+			border-radius: 50rpx;
+		}
+  	}
+    .jg {
+      margin-bottom: 20rpx;
+    }
 </style>

+ 268 - 0
pages/story/story.vue

@@ -0,0 +1,268 @@
+<template>
+	<view class="content">
+		<!-- 头部导航 -->
+		<view class="nav-bar flex">
+			<view class="nav-item" v-for="(item,index) in navList" :key="index"
+				:class="{'active': currentIndex == index}" @click="navClick(index)">
+				{{item.tit}}
+			</view>
+		</view>
+		<!-- 分类列表 -->
+		<swiper :duration="400" class="swiper-wrapper" :style="{'height': height}" :current="currentIndex"
+			@change="swiperChange">
+			<swiper-item v-for="(navitem,navindex) in navList">
+				<scroll-view scroll-y="true" :style="{'height': height}" class="scroll-wrapper">
+					<view class="list" v-for="(item,index) in navitem.list"
+						@click="navTo('/pages/story/storyDetail?id=' + item.id)">
+						<template v-if="index == 0">
+							<view class="list-top-tit clamp2">{{item.title}}</view>
+							<image :src="item.image_input[0]" mode="" class="list-top-img"></image>
+							<view class="list-top-time">
+								更新时间: {{item.add_time}}
+							</view>
+						</template>
+						<template v-else>
+							<view class="list-scend">
+								<image :src="item.image_input[0]" mode="" class="list-img"></image>
+								<view class="list-info">
+									<view class="list-tit clamp">{{item.title}}</view>
+									<view class="list-time">
+										更新时间: {{item.add_time}}
+									</view>
+								</view>
+							</view>
+						</template>
+					</view>
+					<uni-load-more :status="navitem.loadingType" v-if="navitem.loaded"></uni-load-more>
+				</scroll-view>
+			</swiper-item>
+		</swiper>
+	</view>
+</template>
+
+<script>
+	import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+	import {
+		article,
+		details
+	} from '@/api/index.js'
+	export default {
+		components: {
+			uniLoadMore
+		},
+		onReady(res) {
+			var _this = this;
+			uni.getSystemInfo({
+				success: resu => {
+					const query = uni.createSelectorQuery();
+					query.select('.swiper-wrapper').boundingClientRect();
+					query.exec(function(res) {
+						console.log(res, 'ddddddddddddd');
+						_this.height = resu.windowHeight - res[0].top + 'px';
+						console.log('打印页面的剩余高度', _this.height);
+					});
+				},
+				fail: res => {}
+			});
+		},
+		data() {
+			return {
+				height: '', //swiper 高度
+				currentIndex: 0, //当前头部导航位置
+				navList: [{
+						cid: 1,
+						tit: '公司简介',
+						list: [],
+						page: 1,
+						limit: 10,
+						loadingType: 'more'
+					},
+					{
+						cid: 2,
+						tit: '产品简介',
+						list: [],
+						page: 1,
+						limit: 10,
+						loadingType: 'more'
+					},
+					{
+						cid: 3,
+						tit: '案例分享',
+						list: [],
+						page: 1,
+						limit: 10,
+						loadingType: 'more'
+					}
+				]
+			}
+		},
+		onLoad() {
+			this.getData('tabChange')
+		},
+		methods: {
+			//跳转详情
+			navTo(url) {
+				console.log(url)
+				uni.navigateTo({
+					url: url
+				})
+			},
+			navClick(index) {
+				this.currentIndex = index
+			},
+			swiperChange(e) {
+				console.log(e, 'swiperChange')
+				this.currentIndex = e.detail.current
+				this.getData('tabChange')
+			},
+			getData(source) {
+				let obj = this
+				let index = this.currentIndex;
+				let navItem = this.navList[index];
+				if (source === 'tabChange' && navItem.loaded === true) {
+					//tab切换只有第一次需要加载数据
+					return;
+				}
+				if (navItem.loadingType === 'loading') {
+					//防止重复加载
+					return;
+				}
+				if (navItem.loadingType === 'noMore') {
+					//防止重复加载
+					return;
+				}
+				navItem.loadingType = 'loading';
+				article({
+					page: navItem.page,
+					limit: navItem.limit
+				}, navItem.cid).then(({
+					data
+				}) => {
+					
+					console.log(data)
+					let list = data.map(item => {
+						return item
+					})
+					navItem.list = navItem.list.concat(list);
+
+					if (navItem.limit == data.length) {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
+						navItem.loadingType = 'more';
+						navItem.page++;
+					} else {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
+						navItem.loadingType = 'noMore';
+					}
+					this.$set(navItem, 'loaded', true);
+
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	page {
+		height: 100%;
+		background-color: #eee;
+		padding-top: 20rpx;
+	}
+
+	.content {
+		height: 100%;
+
+		background-color: #fff;
+
+		.nav-bar {
+			line-height: 86rpx;
+			font-size: 32rpx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #333333;
+			justify-content: space-around;
+			border-bottom: #E0E0E0 1px solid;
+
+			.active {
+				color: #3F7C1F;
+				border-bottom: 3rpx solid #3F7C1F;
+			}
+
+			.nav-item {
+				// flex-grow: 1;
+				text-align: center;
+			}
+		}
+	}
+
+	.swiper-wrapper {
+		background-color: #fff;
+
+		.scroll-wrapper {
+			padding: 0 22rpx 0 23rpx;
+		}
+
+		.list {
+			padding: 18rpx 0;
+			border-bottom: 1px solid #E0E0E0;
+
+			.list-top-tit {
+				font-size: 32rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #333333;
+				line-height: 42rpx;
+			}
+
+			.list-top-img {
+				margin-top: 15rpx;
+				width: 705rpx;
+				height: 399rpx;
+				background-color: #999;
+			}
+
+			.list-top-time {
+				font-size: 26rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #999999;
+				line-height: 32rpx;
+			}
+
+			.list-scend {
+				display: flex;
+
+				.list-img {
+					flex-shrink: 0;
+					background-color: #999;
+					width: 224rpx;
+					height: 160rpx;
+				}
+
+				.list-info {
+					padding: 10rpx 0 19rpx 23rpx;
+					position: relative;
+
+					.list-tit {
+						width: 420rpx;
+						font-size: 32rpx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #333333;
+						line-height: 32px;
+					}
+
+					.list-time {
+						font-size: 28rpx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #666666;
+						line-height: 32rpx;
+						position: absolute;
+						bottom: 19rpx;
+					}
+				}
+
+			}
+		}
+	}
+</style>

+ 132 - 0
pages/story/storyDetail.vue

@@ -0,0 +1,132 @@
+<template>
+	<view class="content" >
+		<template v-if="detail">
+			<view class="top">
+				<image :src="detail.image_input[0]" mode=""></image>
+			</view>
+			<view class="detail">
+				<view class="detail-top">
+					<view class="tit">
+						{{detail.title}}
+					</view>
+					<view class="time">
+						更新时间: {{detail.add_time}}
+					</view>
+				</view>
+				<view class="jg">
+				</view>
+				<view class="detail-content" v-html="detail.content">
+				</view>
+			</view>
+		</template>
+	</view>
+</template>
+
+<script>
+	import {article,details} from '@/api/index.js'
+	export default {
+		data() {
+			return {
+				content: '',
+				detail: '',
+			}
+			
+		},
+		onLoad(opt) {
+			if(opt.id) {
+				this.getDetail(opt.id)
+			}
+		},
+		methods: {
+			getDetail(id) {
+				let obj = this
+				uni.showLoading({
+					title: '加载中...'
+				})
+				details({},id).then( ({data}) => {
+					uni.hideLoading()
+					console.log(data)
+					data.content = data.content.replace(/\<img/gi, '<img class="rich-img"')
+					this.detail = data
+					// obj.content = res.data.content
+					// obj.detail = res.data
+				}).catch(err => {
+					console.log(err)
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	page {
+		height: 100%;
+	}
+	.content {
+		background-color: #fff;
+		height: 100%;
+		.top {
+			width: 750rpx;
+			height: 668rpx;
+			image {
+				width: 100%;
+				height: 100%;
+				background-color: #999;
+			}
+		}
+		.detail {
+			position: relative;
+			top: -57rpx;
+			.jg {
+				width: 670rpx;
+				height: 2rpx;
+				background: #F5F5F5;
+				margin: auto;
+			}
+			.detail-top {
+				min-height: 190rpx;
+				padding: 57rpx 40rpx 40rpx;
+				background-color: #fff;
+				border-radius: 30rpx 30rpx 0 0;
+				.tit {
+					font-size: 48rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 51rpx;
+				}
+				.time {
+					padding-top: 10rpx;
+					font-size: 26rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999;
+					line-height: 51rpx;
+				}
+			}
+			.detail-content {
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #333333;
+				line-height: 48rpx;
+				padding: 37rpx 40rpx;
+				width: 750rpx;
+			}
+		}
+	}
+	/deep/ .detail-content {
+		img{
+			width: 100%;
+			height: 100%;
+		}
+		table {
+			width: 100%;
+			height: 100%;
+		}
+	}
+	.rich-img {
+		width: 100% !important;
+	}
+	
+</style>

+ 0 - 171
pages/upload/upload.vue

@@ -1,171 +0,0 @@
-<template>
-	<view class="content">
-		<view class="upload-title">{{ type == 2 ? $t('hea.scms') : $t('hea.ptms') }}</view>
-		<view class="upload-box">
-			<view class="upload-img flex">
-				<image src="../../static/img/upload.png" mode="" v-if="!imgone" @click="upimg('imgone')"></image>
-				<image :src="imgone" mode="" v-if="imgone" @click="upimg('imgone')"></image>
-				<image src="../../static/img/upload.png" mode="" v-if="!imgtow" @click="upimg('imgtow')"></image>
-				<image :src="imgtow" mode="" v-if="imgtow" @click="upimg('imgtow')"></image>
-			</view>
-			<view class="fenge"></view>
-			<view class="upload-content">
-				<view class="describe">
-					<view class="title">{{ $t('hea.bcms') }}</view>
-					<textarea class="title1" value="" :placeholder="$t('hea.txms')" maxlength="140" focus="focus" placeholder-class="place" />
-				</view>
-			</view>
-		</view>
-		<view class="submit" @click="sub">{{ $t('hea.tj') }}</view>
-	</view>
-</template>
-<script>
-import { uploadApply } from '../../api/apply.js';
-import { uploads } from '@/api/user.js';
-export default {
-	data() {
-		return {
-			imgone: '',
-			imgtow: '',
-			apply_id: '',
-			type: 2
-		};
-	},
-	onLoad(opt) {
-		uni.setNavigationBarTitle({
-			title: this.$t('foo.sczl')
-		});
-		this.apply_id = opt.id;
-		this.type = opt.type;
-	},
-	methods: {
-		upimg(name) {
-			uploads({
-				filename: ''
-			}).then(res => {
-				console.log(res, '++++++++++++++++');
-				this.$set(this, name, res[0].fullurl);
-			});
-		},
-		sub() {
-			let obj = this;
-			if (obj.imgone == '' && obj.imgtow == '') {
-				return obj.$api.msg('请上传凭证');
-			}
-			uni.showLoading({
-				title: '提交中...',
-				mask: true
-			});
-			let arr = [];
-			if (obj.imgone != '') {
-				arr.push(obj.imgone);
-			}
-			if (obj.imgtow != '') {
-				arr.push(obj.imgtow);
-			}
-			console.log(arr, 'arr');
-			uploadApply(
-				{
-					images: arr
-				},
-				obj.apply_id
-			)
-				.then(res => {
-					uni.hideLoading();
-					uni.showToast({
-						title: '提交成功',
-						duration: 2000
-					});
-					setTimeout(function() {
-						uni.navigateBack();
-					}, 800);
-					console.log(res, '+++++++++++++++++');
-				})
-				.catch(err => {
-					uni.hideLoading();
-					console.log(err);
-				});
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-page {
-	width: 100%;
-	padding: 0;
-	margin: 0;
-}
-
-.content {
-	.upload-title {
-		padding: 30rpx 30rpx;
-		font-size: 28rpx;
-		font-family: PingFang SC;
-		font-weight: 500;
-		color: #ffffff;
-		line-height: 28rpx;
-	}
-
-	.upload-box {
-		width: 100%;
-		height: 450rpx;
-		background-color: #15130f;
-
-		.upload-img {
-			justify-content: flex-start;
-			margin: 30rpx;
-			padding-top: 30rpx;
-			height: 190rpx;
-			image {
-				width: 160rpx;
-				height: 100%;
-				margin-right: 15rpx;
-			}
-		}
-
-		.fenge {
-			width: 100%;
-			border: 1rpx solid #f0f0f0;
-		}
-
-		.describe {
-			display: flex;
-
-			padding: 20rpx 30rpx;
-
-			.title {
-				width: 150rpx;
-				font-size: 28rpx;
-				font-family: PingFang SC;
-				font-weight: 500;
-				color: #ffffff;
-			}
-
-			.title1 {
-				padding: 10rpx;
-				margin-left: 40rpx;
-				font-size: 26rpx;
-				font-family: PingFang SC;
-				font-weight: 500;
-				color: #000;
-				background: #ebebeb;
-			}
-			.place {
-				color: #15130f;
-			}
-		}
-	}
-	.submit {
-		margin: 120rpx auto;
-		text-align: center;
-		line-height: 80rpx;
-		width: 560rpx;
-		height: 80rpx;
-		background: linear-gradient(-74deg, #ce9c6d, #ffecd6);
-		border-image: linear-gradient(115deg, #feebd5, #ffffff, #e1ad7d) 1 1;
-		box-shadow: 3rpx 4rpx 5rpx 0rpx rgba(151, 118, 74, 0.5);
-		border-radius: 40rpx;
-	}
-}
-</style>

+ 277 - 0
pages/user/accounts.vue

@@ -0,0 +1,277 @@
+<template>
+	<view class="container">
+		<!-- 头部 -->
+		<view class="header">
+			<image src="../../static/img/img33.png" mode="scaleToFill"></image>
+			<!-- 佣金转账 -->
+			<view class="accounts" @click="nav('/pages/user/transfer')">
+				<view class="text">佣金转账</view>
+			</view>
+			<!-- 钱 -->
+			<view class="money">
+				<view class="fuhao">¥</view>
+				<view class="counts">3852</view>
+			</view>
+		</view>
+		<!-- 收入和支出 -->
+		<view class="navbar">
+			<view class="nav-item" v-for="(item, index) in navList" :key="index"
+				:class="{ current: tabCurrentIndex === index }" @click="tabClick(index)">{{ item.text }}</view>
+
+		</view>
+		<swiper class="swiper-box" :current="tabCurrentIndex" duration="300" @change="changeTab"
+			>
+			<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
+				<!-- 空白页 -->
+				<!-- <empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty> -->
+				<!-- 推广奖励 -->
+				<scroll-view class="scorll" scroll-y="true" >
+					<view class="cost">
+						<view class="award" v-for="item in 10">
+							<view class="award-left">
+								<view class="text">推广奖励到账</view>
+								<view class="time">2021-8-26 09:30</view>
+							</view>
+							<view class="award-right">+200</view>
+						</view>
+					</view>
+				</scroll-view>
+
+			</swiper-item>
+		</swiper>
+		<view class="btm">
+			<view class="btn" @click="nav('/pages/user/withdraw')">立即提现</view>
+		</view>
+	</view>
+</template>
+ 
+<script>
+	export default {
+		data() {
+			return {
+				bfb:0,
+				height: '',
+				tabCurrentIndex: 0,
+				navList: [{
+						state: 1,
+						text: '收入',
+						loadingType: 'more',
+						orderList: [],
+						page: 1, //当前页数
+						limit: 10 //每次信息条数
+					},
+					{
+						state: 2,
+						text: '支出',
+						loadingType: 'more',
+						orderList: [],
+						page: 1, //当前页数
+						limit: 10 //每次信息条数
+					}
+				],
+				list: [],
+				money: ''
+			}
+		},
+		methods: {
+			nav (url) {
+				uni.navigateTo({
+					url
+				})
+			},
+			// back(){
+			// 	uni.navigateBack({
+			// 		delta:1
+			// 	})
+			// },
+			// handclick () {
+			// 	console.log(123)
+			// },
+			//swiper 切换
+			changeTab(e) {
+				this.tabCurrentIndex = e.target.current;
+				this.loadData('tabChange')
+			},
+			//顶部tab点击
+			tabClick(index) {
+				this.tabCurrentIndex = index;
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.container {
+		width: 750rpx;
+		height: 1334rpx;
+		background-color: #f1f1f1;
+
+		.header {
+			position: relative;
+			image {
+				width: 750rpx;
+				height: 400rpx;
+			}
+
+		}
+		
+		.accounts {
+			width: 147rpx;
+			height: 56rpx;
+			background-color: #fff;
+			border-radius: 8rpx 8rpx 8rpx 8rpx;
+			position: absolute;
+			top: 0;
+			right: 0;
+			margin-top: 134rpx;
+
+			.text {
+				width: 112rpx;
+				height: 27rpx;
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #FF0000;
+				padding-top: 8rpx;
+				margin-left: 18rpx;
+			}
+		}
+
+		.money {
+			top: 0;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			position: absolute;
+			padding-left: 246rpx;
+			padding-top: 210rpx;
+
+			.fuhao {
+				font-size: 45rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #3F7C1F;
+				padding-top: 25rpx;
+			}
+
+			.counts {
+				font-size: 70rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #3F7C1F;
+			}
+		}
+
+		.swiper-box {
+			height: calc(100% - 700rpx);
+			background-color: #FFFFFF;
+		}
+		.scorll {
+			height: 100%;
+		}
+		.navbar {
+			display: flex;
+			height: 100rpx;
+			padding: 0 5rpx;
+			background: #fff;
+			box-shadow: 0 1rpx 5rpx rgba(0, 0, 0, 0.06);
+			position: relative;
+			z-index: 10;
+			margin-top: 25rpx;
+
+			.nav-item {
+				flex: 1;
+				display: flex;
+				justify-content: center;
+				align-items: center;
+				height: 100%;
+				font-size: 15px;
+				color: #999999;
+				position: relative;
+
+				&.current {
+					color: #333333;
+
+					&:after {
+						content: '';
+						position: absolute;
+						left: 50%;
+						bottom: 0;
+						transform: translateX(-50%);
+						width: 44px;
+						height: 0;
+						border-bottom: 2px solid #3F7C1F;
+					}
+				}
+			}
+		}
+
+		.cost {
+			width: 750rpx;
+			height: auto;
+			background-color: #fff;
+
+			.award {
+				width: 701rpx;
+				height: 132rpx;
+				border-bottom: 1px solid #F0F4F8;
+				margin-left: 25rpx;
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+
+				.award-left {
+					width: 221rpx;
+					height: 40rpx;
+					margin-left: 30rpx;
+					margin-bottom: 35rpx;
+
+					.text {
+						width: 182rpx;
+						height: 30rpx;
+						font-size: 30rpx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #666666;
+						margin-bottom: 16rpx;
+					}
+
+					.time {
+						width: 221rpx;
+						height: 20rpx;
+						font-size: 26rpx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #AEAEAE;
+					}
+				}
+
+				.award-right {
+					width: 82rpx;
+					height: 27rpx;
+					font-size: 36rpx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #FF0000;
+					margin-right: 30rpx;
+				}
+			}
+		}
+		.btm {
+			background-color: #fff;
+			height: 190rpx;
+			padding-top: 40rpx;
+			display: flex;
+			justify-content: center;
+			.btn {
+				display: flex;
+				justify-content: center;
+				align-items: center;
+				width: 674rpx;
+				height: 88rpx;
+				background: linear-gradient(-35deg, #F8DD4F, #FBEB77);
+				border-radius: 44rpx;
+			}
+		}
+	}
+</style>

+ 0 - 365
pages/user/applyList.vue

@@ -1,365 +0,0 @@
-<template>
-	<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>
-		<swiper :current="tabCurrentIndex" :style="{ height: height }" class="swiper-box" duration="300" @change="changeTab">
-			<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
-				<scroll-view scroll-y="true" class="list-scroll-content" :style="{ height: height }">
-					<!-- 申请列表 -->
-					<!-- 空白页 -->
-					<!-- <empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty> -->
-					<view class="apply-box" v-for="item in tabItem.orderList">
-						<view class="box-top">
-							<image :src="item.user_info.avatar" mode="" class="user-img"></image>
-							<view class="user-info">
-								<view class="user-name clamp">{{ item.user_info.nickname }}</view>
-								<view class="user-phone">{{ item.user_info.mobile }}</view>
-							</view>
-						</view>
-						<view class="apply-info flex">
-							<view class="img-wrap"><image :src="imgitem" mode="" class="upimg" v-for="imgitem in item.voucherimages" @click="open(imgitem)"></image></view>
-							<view class="btn-wrap flex" v-if="tabCurrentIndex == 0 && item.voucherimages != null">
-								<view class="btn btn-reject" @click="cancelApply(item)">{{ $t('hea.jj') }}</view>
-								<view class="btn btn-pass" @click="passApply(item)">{{ $t('hea.ty') }}</view>
-							</view>
-							<view class="btn-wrap" v-if="tabCurrentIndex == 1">{{ item.status == 1 ? $t('hea.ytg') : $t('hea.wtg') }}</view>
-						</view>
-					</view>
-					<uni-load-more :status="tabItem.loadingType"></uni-load-more>
-				</scroll-view>
-			</swiper-item>
-		</swiper>
-		<uni-popup ref="popup" type="center">
-			<movable-area class="popup-box">
-				<movable-view class="popup-item" :scale="true" direction="all"><image :src="img" mode=""></image></movable-view>
-			</movable-area>
-		</uni-popup>
-		<u-tabbar :list="tabbar" bg-color="#000" active-color="#FAD6B0" inactive-color="#71614f" change="change"></u-tabbar>
-	</view>
-</template>
-
-<script>
-import uniPopup from '@/components/uni-popup/uni-popup.vue';
-import { getApplyList, passApply, cancelApply } from '../../api/apply.js';
-import empty from '@/components/empty';
-import { tabbar } from '@/components/tabbar/tabbar.js';
-import { mapState, mapMutations } from 'vuex';
-export default {
-	components: {
-		empty,
-		uniPopup
-	},
-	data() {
-		return {
-			img: '', //图片
-			height: '',
-			tabCurrentIndex: 0,
-			tabbar:  [
-				{
-					iconPath: '../../static/tabBar/home.png',
-					selectedIconPath: '../../static/tabBar/home-action.png',
-					text: this.$t('hea.sy'),
-					pagePath: '/pages/index/index'
-				},
-				{
-					iconPath: '../../static/tabBar/center.png',
-					selectedIconPath: '../../static/tabBar/center-action.png',
-					text: this.$t('hea.shlb'),
-					pagePath: '/pages/user/applyList'
-				},
-				{
-					iconPath: '../../static/tabBar/user.png',
-					selectedIconPath: '../../static/tabBar/user-action.png',
-					text: this.$t('hea.wd'),
-					pagePath: '/pages/user/user'
-				}
-			],
-			navList: [
-				{
-					state: 0,
-					text: this.$t('hea.wsh'),
-					loadingType: 'more',
-					orderList: [],
-					page: 1,
-					limit: 10
-				},
-				{
-					state: 1,
-					text: this.$t('hea.ysh'),
-					loadingType: 'more',
-					orderList: [],
-					page: 1,
-					limit: 10
-				}
-			]
-		};
-	},
-	onReady(res) {
-		var obj = this;
-		uni.getSystemInfo({
-			success: resu => {
-				const query = uni.createSelectorQuery();
-				query.select('.swiper-box').boundingClientRect();
-				query.exec(function(res) {
-					console.log(res, 'ddddddddddddd');
-					obj.height = resu.windowHeight - res[0].top + 'px';
-					console.log('打印页面的剩余高度', obj.height);
-				});
-			},
-			fail: res => {}
-		});
-	},
-	computed: {
-		...mapState(['lang'])
-	},
-	watch: {
-		lang(val) {
-			this.$set(this.navList[0], 'text', this.$t('hea.wsh'));
-			this.$set(this.navList[1], 'text', this.$t('hea.ysh'));
-			this.$set(this.tabbar[0], 'text', this.$t('hea.sy'));
-			this.$set(this.tabbar[1], 'text', this.$t('hea.shlb'));
-			this.$set(this.tabbar[2], 'text', this.$t('hea.wd'));
-		}
-	},
-	onShow() {
-		this.navList[0].orderList = [],
-		this.navList[1].orderList = [],
-		uni.setNavigationBarTitle({
-			title: this.$t('foo.shlb')
-		});
-		this.loadData();
-	},
-	methods: {
-		//顶部tab点击
-		tabClick(index) {
-			this.tabCurrentIndex = index;
-		},
-		changeTab(e) {
-			this.tabCurrentIndex = e.target.current;
-			this.loadData('tabChange');
-		},
-		loadData(source) {
-			console.log('swiper');
-			let index = this.tabCurrentIndex;
-			let navItem = this.navList[index];
-			let state = navItem.state;
-			if (source === 'tabChange' && navItem.loaded === true) {
-				//tab切换只有第一次需要加载数据
-				return;
-			}
-			if (navItem.loadingType === 'loading') {
-				//防止重复加载
-				return;
-			}
-			//修改当前对象状态为加载中
-			navItem.loadingType = 'loading';
-			getApplyList({
-				page: navItem.page,
-				limit: navItem.limit,
-				status: state
-			}).then(({ data }) => {
-				let arr = data.list.map(item => {
-					if (item.voucherimages) {
-						let arr = item.voucherimages.split(',');
-						console.log(arr, 'ddddddddddddddddddddddd');
-						item.voucherimages = arr;
-					}else {
-						item.voucherimages = null
-					}
-					return item;
-				});
-				navItem.orderList = navItem.orderList.concat(arr);
-				if (data.list.length == navItem.limit) {
-					navItem.page++;
-					navItem.loadingType = 'more';
-				} else {
-					navItem.loadingType = 'noMore';
-				}
-				this.$set(navItem, 'loaded', true);
-			});
-		},
-		cancelApply(item) {
-			const obj = this;
-			console.log(item, 'cancelApply');
-			cancelApply({}, item.id)
-				.then(res => {
-					console.log(res);
-					let s = obj.navList[obj.tabCurrentIndex].orderList.indexOf(item);
-					obj.navList[obj.tabCurrentIndex].orderList.splice(s, 1);
-					uni.showToast({
-						title: '审核成功',
-						duration: 2000
-					});
-				})
-				.catch(err => {
-					console.log(err);
-				});
-		},
-		passApply(item) {
-			let obj = this;
-			console.log('passApply');
-			passApply({}, item.id)
-				.then(res => {
-					console.log(res);
-					let s = obj.navList[obj.tabCurrentIndex].orderList.indexOf(item);
-					obj.navList[obj.tabCurrentIndex].orderList.splice(s, 1);
-					uni.showToast({
-						title: '审核成功',
-						duration: 2000
-					});
-				})
-				.catch(err => {
-					console.log(err);
-				});
-		},
-		open(option) {
-			this.img = option;
-			console.log('点击出现弹窗');
-			this.$refs.popup.open();
-		}
-	}
-};
-</script>
-
-<style scoped lang="scss">
-.navbar {
-	display: flex;
-	height: 40px;
-	padding: 0 5px;
-	background: #000;
-	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: $base-color;
-
-			&:after {
-				content: '';
-				position: absolute;
-				left: 50%;
-				bottom: 0;
-				transform: translateX(-50%);
-				width: 44px;
-				height: 0;
-				border-bottom: 2px solid $base-color;
-			}
-		}
-	}
-}
-
-.swiper-box {
-	background-color: #15130f;
-
-	.apply-box {
-		height: 317rpx;
-		width: 702rpx;
-		// background-color: red;
-		margin: 0 auto;
-		border-bottom: 1px solid #6c6a68;
-		padding-top: 30rpx;
-
-		.box-top {
-			height: 80rpx;
-			// background-color: #bfa;
-			display: flex;
-			justify-content: flex-start;
-
-			.user-img {
-				width: 80rpx;
-				height: 80rpx;
-				background-color: #eee;
-				margin-right: 20rpx;
-				flex-shrink: 0;
-				border-radius: 50%;
-			}
-
-			.user-name {
-				max-width: 500rpx;
-				font-size: 30rpx;
-				font-family: PingFang SC;
-				font-weight: 500;
-				color: #ffffff;
-			}
-
-			.user-phone {
-				padding-top: 10rpx;
-				font-size: 22rpx;
-				font-family: PingFang SC;
-				font-weight: 400;
-				color: #ffffff;
-			}
-		}
-
-		.apply-info {
-			padding: 25rpx 0 0 100rpx;
-			justify-content: space-between;
-
-			.img-wrap {
-				.upimg {
-					width: 153rpx;
-					height: 152rpx;
-					border-radius: 10rpx;
-					background-color: #999;
-					margin-left: 10rpx;
-				}
-			}
-
-			.btn-wrap {
-				align-self: flex-end;
-				color: #fad6b0;
-				font-size: 24rpx;
-				font-family: PingFang SC;
-				font-weight: 500;
-				color: #fad6b0;
-
-				.btn {
-					width: 98rpx;
-					line-height: 47rpx;
-					text-align: center;
-				}
-
-				.btn-reject {
-					border: 1px solid #fad6b0;
-					border-radius: 5rpx;
-					color: #fad6b0;
-				}
-
-				.btn-pass {
-					background: linear-gradient(-74deg, #ce9c6d, #ffecd6);
-					border-image: linear-gradient(115deg, #feebd5, #ffffff, #e1ad7d) 1 1;
-					box-shadow: 3rpx 4rpx 5rpx 0rpx rgba(151, 118, 74, 0.5);
-					border-radius: 5rpx;
-					color: #874b19;
-					margin-left: 10rpx;
-				}
-			}
-		}
-	}
-}
-.popup-box {
-	width: 522rpx;
-	height: 605rpx;
-	border-radius: 20rpx;
-	position: relative;
-	.popup-item {
-		width: 100%;
-		height: 100%;
-		image {
-			width: 100%;
-			height: 100%;
-		}
-	}
-}
-</style>

+ 360 - 304
pages/user/award.vue

@@ -1,305 +1,361 @@
-<template>
-	<view class="content">
-		<view class="content-money">
-			<view class="money-box">
-				<view class="text">可提现佣金(元)</view>
-				<view class="money">{{ money | getMoneyStyle }}</view>		
-			</view>
-			<view class="moneyTx" @click="navto('./withdrawal')">提现</view>
-			<view class="flex buttom-box">
-				<view class="buttom" @click="navto('/pages/money/recharge')">
-					<view class="icon"><image src="/static/icon/i6.png" mode="aspectFill" class="icon-img"></image></view>
-					<text>统计</text>
-				</view>
-				<view class="interval"></view>
-				<view class="buttom" @click="navto('./withdrawal')">
-					<view class="icon"><image src="/static/icon/i7.png" mode="aspectFill" class="icon-img"></image></view>
-					<text>提现</text>
-				</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+'px'}" class="swiper-box" duration="300" @change="changeTab">
-			<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
-				<scroll-view scroll-y="true" class="list-scroll-content" @scrolltolower="loadData">
-					<!-- 空白页 -->
-					<empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty>
-					
-					<!-- 订单列表 -->
-					<view class="order-item flex" v-for="(item, index) in tabItem.orderList" :key="index">
-						<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>
-					<uni-load-more :status="tabItem.loadingType"></uni-load-more>
-				</scroll-view>
-			</swiper-item>
-		</swiper>
-	</view>
-</template>
-
-<script>
-import { spreadCommission, 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() {
-		//初始化获取页面宽度
-		uni.createSelectorQuery().select('.content')
-			.fields(
-			{
-				size:true
-			},
-			data => {
-				console.log(data);
-				console.log(Math.floor((data.width /750) * 300));
-				//保存头部高度
-				this.maxheight =data.height - Math.floor((data.width / 750) * 570);
-				console.log(this.maxheight);
-				}
-			)
-			.exec();
-	},
-	data() {
-		return {
-			// 头部图高度
-			maxheight:'',
-			tabCurrentIndex: 0,
-			navList: [
-				{
-					state: 0,
-					text: '收入',
-					loadingType: 'more',
-					orderList: [],
-					page: 1, //当前页面
-					limit: 10 //每次信息条数
-				},
-				{
-					state: 1,
-					text: '支出',
-					loadingType: 'more',
-					orderList: [],
-					page: 1, //当前页面
-					limit: 10 //每次信息条数
-				},
-			],
-			money: ''
-		};
-	},
-	onLoad(options) {},
-	onShow() {
-		this.loadData();
-		//获取用户余额
-		userBalance({}).then(({ data }) => {
-			this.money = data.commissionCount;
-		});
-	},
-	methods: {
-		navto(e) {
-			uni.navigateTo({
-				url: e
-			});
-		},
-		async loadData(source) {
-			//这里时将订单挂载到tab列表下
-			let index = this.tabCurrentIndex;
-			let navItem = this.navList[index];
-			let state = navItem.state+3;
-			if (source === 'tabChange' && navItem.loaded === true) {
-				//tab切换只有第一次需要加载数据
-				return;
-			}
-			if (navItem.loadingType === 'loading') {
-				//防止重复加载
-				return;
-			}
-			//修改当前对象状态为加载中
-			navItem.loadingType = 'loading';
-			
-			spreadCommission(
-				{
-					page: navItem.page,
-					limit: navItem.limit
-				},
-				state
-			)
-				.then(({ data }) => {
-					if(data.length > 0) {
-						navItem.orderList = navItem.orderList.concat(data[0].list);
-						console.log(navItem.orderList);
-						navItem.page++;
-					}
-					//判断是否还有数据, 有改为more, 没有改为noMore
-					if (navItem.limit == data.length) {
-						navItem.loadingType = 'more';
-						return;
-					} else {
-						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;
-		}
-	}
-}
-</script>
-
-<style lang="scss">
-page {
-	background: #ffffff;
-	height: 100%;
-}
-.content-money {
-	padding-bottom: 30rpx;
-	background: $page-color-base;
-	.moneyTx{
-		position: absolute;
-		top: 150rpx;
-		right: 0rpx;
-		width: 150rpx;
-		padding: 10rpx 30rpx;
-		border: 2px solid #FFFFFF;
-		border-top-left-radius: 99rpx;
-		border-bottom-left-radius: 99rpx;
-		color: #FFFFFF;
-		line-height: 1;
-		font-size: $font-base;
-	}
-	.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: 50rpx;
-			width: 48rpx;
-			margin: 0 auto;
-			.icon-img {
-				width: 100%;
-				height: 100%;
-			}
-		}
-	}
-}
-.money-box {
-	background-color: $base-color;
-	padding-top: var(--status-bar-height);
-	height: 368rpx;
-	color: #ffffff;
-	text-align: center;
-	.text {
-		padding-top: 147rpx;
-		font-size: $font-sm;
-	}
-	.money {
-		font-size: 56rpx;
-	}
-}
-
-.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: $font-color-dark;
-		position: relative;
-		&.current {
-			color: $base-color;
-			&:after {
-				content: '';
-				position: absolute;
-				left: 50%;
-				bottom: 0;
-				transform: translateX(-50%);
-				width: 44px;
-				height: 0;
-				border-bottom: 2px solid $base-color;
-			}
-		}
-	}
-}
-//列表
-
-.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: #fd5b23;
-			font-size: $font-lg;
-		}
-	}
-}
-.list-scroll-content {
-	height: 100%;
-}
-.content {
-	height: 100%;
-	.empty-content {
-		background-color: #ffffff;
-	}
-}
+<template>
+	<view class="content">
+		<view class="content-money">
+			<view class="money-box">
+				<image src="../../static/img/img33.png" mode=""></image>
+				<view class="money">
+					<text>¥</text>
+					{{ money | getMoneyStyle }}
+				</view>
+				<view class="transfer" @click="navto('/pages/user/transfer')">
+					佣金转账
+				</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 + 'px' }" class="swiper-box" duration="300" @change="changeTab">
+			<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
+				<scroll-view scroll-y="true" class="list-scroll-content" @scrolltolower="loadData">
+					<!-- 空白页 -->
+					<empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty>
+					<!-- 订单列表 -->
+					<view class="order-item flex" v-for="(item, index) in tabItem.orderList" :key="index">
+						<view class="title-box">
+							<view class="title">
+								<text>{{ item.title }} </text>
+								<!-- <text>{{item.status == 0 ? (' ' + ' ' + ' (冻结中)'):''}}</text> -->
+							</view>
+							<view class="time">
+								<text>{{ item.add_time }}</text>
+							</view>
+						</view>
+						<view class="money">
+							<text>{{ (item.pm == 0 ? '-' : '+') + item.number }}</text>
+						</view>
+					</view>
+					<uni-load-more :status="tabItem.loadingType"></uni-load-more>
+				</scroll-view>
+			</swiper-item>
+		</swiper>
+		<view class="moneyTx" ><view class="btn" @click="navto('./withdrawal')">提现</view></view>
+	</view>
+</template>
+
+<script>
+import { getSpreadCount } from '@/api/user.js';
+import { spreadCommission, 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
+	},
+	computed: {
+		...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
+	},
+	onReady() {
+		//初始化获取页面宽度
+		uni.createSelectorQuery()
+			.select('.content')
+			.fields(
+				{
+					size: true
+				},
+				data => {
+					console.log(data);
+					console.log(Math.floor((data.width / 750) * 300));
+					//保存头部高度
+					this.maxheight = data.height - Math.floor((data.width / 750) * 570);
+					console.log(this.maxheight);
+				}
+			)
+			.exec();
+	},
+	data() {
+		return {
+			// 头部图高度
+			maxheight: '',
+			tabCurrentIndex: 0,
+			navList: [
+				{
+					state: 0,
+					text: '收入',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页面
+					limit: 10 //每次信息条数
+				},
+				{
+					state: 1,
+					text: '支出',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页面
+					limit: 10 //每次信息条数
+				}
+			],
+			money: ''
+		};
+	},
+	onLoad(options) {},
+	onShow() {
+		this.loadData();
+		//获取用户余额
+		getSpreadCount({}, 3).then(({ data }) => {
+			console.log(data);
+			this.money = data.count;
+		});
+		// userBalance({}).then(({ data }) => {
+		// 	this.money = data.orderStatusSum;
+		// });
+	},
+	methods: {
+		navto(e) {
+			uni.navigateTo({
+				url: e
+			});
+		},
+		async loadData(source) {
+			//这里时将订单挂载到tab列表下
+			let index = this.tabCurrentIndex;
+			let navItem = this.navList[index];
+			let state = navItem.state + 3;
+			if (source === 'tabChange' && navItem.loaded === true) {
+				//tab切换只有第一次需要加载数据
+				return;
+			}
+			if (navItem.loadingType === 'loading') {
+				//防止重复加载
+				return;
+			}
+			//修改当前对象状态为加载中
+			navItem.loadingType = 'loading';
+
+			spreadCommission(
+				{
+					page: navItem.page,
+					limit: navItem.limit
+				},
+				state
+			)
+				.then(({ data }) => {
+					if (data.length > 0) {
+						navItem.orderList = navItem.orderList.concat(data[0].list);
+						console.log(navItem.orderList);
+						navItem.page++;
+					}
+					//判断是否还有数据, 有改为more, 没有改为noMore
+					if (navItem.limit == data.length) {
+						navItem.loadingType = 'more';
+						return;
+					} else {
+						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;
+		},
+		showItem(item) {
+			uni.showModal({
+				title: '佣金明细',
+				content: item.mark,
+				showCancel: false
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: #ffffff;
+	height: 100%;
+}
+.content-money {
+	padding-bottom: 30rpx;
+	background: $page-color-base;
+	.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: 50rpx;
+			width: 48rpx;
+			margin: 0 auto;
+			.icon-img {
+				width: 100%;
+				height: 100%;
+			}
+		}
+	}
+}
+.money-box {
+	// background-color: $base-color;
+	// padding-top: var(--status-bar-height);
+	height: 400rpx;
+	color: #3F7C1F;
+	text-align: center;
+	position: relative;
+	.transfer {
+		width: 147rpx;
+		line-height: 56rpx;
+		background: #fff;
+		box-shadow: 0px 3rpx 8rpx 0px rgba(0, 0, 0, 0.17);
+		border-radius: 7rpx 0px 0px 7rpx;
+		position: absolute;
+		right: 0;
+		bottom: 210rpx;
+		z-index: 10;
+		font-size: 28rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		color: #FF0000;
+	}
+	image {
+		position: absolute;
+		top: 0;
+		right: 0;
+		height: 100%;
+		width: 100%;
+		// z-index: 1;
+	}
+	.text {
+		padding-top: 147rpx;
+		font-size: $font-sm;
+		position: relative;
+	}
+	.money {
+		padding-top: 175rpx;
+		// margin: auto 0;
+		font-size: 56rpx;
+		font-weight: bold;
+		color: #3F7C1F;
+		position: relative;
+		.money-icon {
+			font-size: 38rpx;
+			font-weight: bold;
+			color: #3F7C1F;
+		}
+	}
+}
+
+.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: $font-color-dark;
+		position: relative;
+		&.current {
+			color: $base-color;
+			&:after {
+				content: '';
+				position: absolute;
+				left: 50%;
+				bottom: 0;
+				transform: translateX(-50%);
+				width: 44px;
+				height: 0;
+				border-bottom: 2px solid $base-color;
+			}
+		}
+	}
+}
+//列表
+
+.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: #fd5b23;
+			font-size: $font-lg;
+		}
+	}
+}
+.list-scroll-content {
+	height: 100%;
+}
+.content {
+	height: 100%;
+	.empty-content {
+		background-color: #ffffff;
+	}
+}
+.moneyTx {
+	width: 750rpx;
+	height: 88rpx;
+	background-color: #fff;
+	.btn {
+		margin: 0 auto;
+		width: 674rpx;
+		height: 88rpx;
+		line-height: 88rpx;
+		background: linear-gradient(-35deg, #F8DD4F, #FBEB77);
+		border-radius: 44rpx;
+		font-size: 36rpx;
+		font-family: PingFang SC;
+		font-weight: 500;
+		color: #ffffff;
+	}
+	position: fixed;
+	bottom: 51rpx;
+	right: 0;
+	left: 0;
+	text-align: center;
+	margin: 0 auto;
+}
 </style>

+ 235 - 0
pages/user/extend.vue

@@ -0,0 +1,235 @@
+<template>
+	<view class="container">
+		<view class="header">
+			<image src="../../static/img/img39.png" mode="scaleToFill"></image>
+				<view class="counts">385<text>人</text></view>
+				<view class="people">我的推广人数</view>
+		</view>
+		<!-- 推广 -->
+		<view class="navbar">
+			<view class="one">5</view>
+			<view class="line"></view>
+			<view class="two">120</view>
+			<view class="nav-item" v-for="(item, index) in navList" :key="index"
+				:class="{ current: tabCurrentIndex === index }" @click="tabClick(index)">{{ item.text }}</view>
+		</view>
+		<swiper class="swiper-box" :current="tabCurrentIndex" duration="300" @change="changeTab"
+			>
+			<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
+				<!-- 空白页 -->
+				<!-- <empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty> -->
+				<!-- 推广奖励 -->
+				<scroll-view class="scorll" scroll-y="true" >
+					<view class="cost">
+						<view class="award" v-for="item in 10">
+							<image src="../../static/tabBar/tab-my-current.png" mode="scaleToFill"></image>
+							<view class="award-left">
+								<view class="text">xxx</view>
+								<view class="time">2021-8-26 09:30</view>
+							</view>
+						</view>
+					</view>
+				</scroll-view>
+		
+			</swiper-item>
+		</swiper>
+	</view>
+</template>
+
+<script>
+export default {
+	data () {
+		return {
+			height: '',
+				tabCurrentIndex: 0,
+				navList: [{
+						state: 1,
+						text: '一级推广',
+						loadingType: 'more',
+						orderList: [],
+						page: 1, //当前页数
+						limit: 10 //每次信息条数
+					},
+					{
+						state: 2,
+						text: '二级推广',
+						loadingType: 'more',
+						orderList: [],
+						page: 1, //当前页数
+						limit: 10 //每次信息条数
+					}
+				],
+				list: [],
+				money: ''
+		}
+	},
+	methods: {
+		//swiper 切换
+		changeTab (e) {
+			this.tabCurrentIndex = e.target.current;
+			this.loadData('tabChange')
+		},
+		//顶部tab点击
+		tabClick(index) {
+			this.tabCurrentIndex = index;
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+	.container {
+		width: 750rpx;
+		height: 1334rpx;
+		background-color: #fff;
+	
+		.header {
+			position: relative;
+			image {
+				width: 750rpx;
+				height: 460rpx;
+			}
+			.counts {
+				font-size: 72rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #3F7C1F;
+				position: absolute;
+				top: 35%;
+				margin-left: 310rpx;
+				text {
+					font-size: 12rpx;
+				}
+			}
+			.people {
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #3F7C1F;
+				position: absolute;
+				top: 55%;
+				margin-left: 286rpx;
+			}
+		}
+	
+		.swiper-box {
+			height: calc(100% - 700rpx);
+			background-color: #FFFFFF;
+		}
+		.scorll {
+			height: 100%;
+		}
+		.navbar {
+			display: flex;
+			padding: 0 5rpx;
+			background: #fff;
+			position: relative;
+			z-index: 10;
+			width: 702rpx;
+			height: 120rpx;
+			background: #FFFFFF;
+			box-shadow: 0rpx 0rpx 20rpx 0rpx rgba(50, 50, 52, 0.06);
+			border-radius: 10rpx;
+			margin-top: -70rpx;
+			margin-left: 25rpx;
+			.one {
+				position: absolute;
+				top: 10%;
+				left: 25%;
+				font-size: 32rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #FF0000;
+			}
+			.two {
+				position: absolute;
+				top: 10%;
+				left: 70%;
+				font-size: 32rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #FF0000;
+			}
+			.line {
+				width: 2rpx;
+				height: 54rpx;
+				background: #EEEEEE;
+				position: absolute;
+				top: 30%;
+				left: 50%;
+			}
+	
+			.nav-item {
+				flex: 1;
+				display: flex;
+				justify-content: center;
+				align-items: center;
+				height: 100%;
+				font-size: 30rpx;
+				color: #999999;
+				position: relative;
+				padding-top: 40rpx;
+	
+				&.current {
+					color: #333333;
+	
+					&:after {
+						content: '';
+						position: absolute;
+						left: 50%;
+						bottom: 0;
+						transform: translateX(-50%);
+						width: 44px;
+						height: 0;
+						border-bottom: 2px solid #3F7C1F;
+					}
+				}
+			}
+		}
+	
+		.cost {
+			width: 750rpx;
+			height: auto;
+			background-color: #fff;
+	
+			.award {
+				width: 701rpx;
+				height: 132rpx;
+				border-bottom: 1px solid #F0F4F8;
+				margin-left: 25rpx;
+				display: flex;
+				align-items: center;
+				image {
+					width: 80rpx;
+					height: 80rpx;
+				}
+	
+				.award-left {
+					width: 221rpx;
+					height: 40rpx;
+					margin-left: 30rpx;
+					margin-bottom: 35rpx;
+	
+					.text {
+						width: 58rpx;
+						height: 28rpx;
+						font-size: 30rpx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #3F454B;
+						margin-bottom: 16rpx;
+					}
+	
+					.time {
+						width: 221rpx;
+						height: 20rpx;
+						font-size: 26rpx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #AEAEAE;
+					}
+				}
+			}
+		}
+	}
+</style>

+ 431 - 0
pages/user/extension.vue

@@ -0,0 +1,431 @@
+ <template>
+ 	<view class="content">
+ 		<view class="content-money">
+ 			<view class="money-box">
+ 				<image class="tuiguang_bg" src="../../static/image/jiedian.png"></image>
+ 			 <view class="money-frame">
+ 				 <view class="money_num">
+ 					{{userInfo.spread_count || '0'}}
+ 					<text class="money_ren">人</text>
+ 				</view>
+ 			 </view>
+ 			</view>
+ 			<view class="flex buttom-box">
+ 				<view class="buttom"  @click="tabClick(0)">
+ 					<view class="money">{{total || 0}}</view>
+ 					<text class="text" :class="{ current: tabCurrentIndex === 0 }">一级推广</text>
+ 				</view>
+ 				<view class="buttom"  @click="tabClick(1)">
+ 					<view class="money">{{totalLevel || 0}}</view>
+ 					<text class="text" :class="{ current: tabCurrentIndex === 1 }">二级推广</text>
+ 				</view>
+ 			</view>
+ 		</view>
+ 		<swiper :current="tabCurrentIndex" :style="{ height: maxheight + 'px' }" 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>
+ 
+ 					<!-- 订单列表 -->
+ 					<view v-for="(item, index) in tabItem.orderList" :key="index" class="order-item flex">
+ 						<view class="title-box flex_item">
+ 							<view class="title-avatar"><image :src="item.avatar"></image></view>
+ 							<view class="list_tpl">
+								<view class="title">
+									<text>{{ item.nickname }}</text>
+								</view>
+ 								<view class="time">
+ 									<text>{{ item.time }}</text>
+ 								</view>
+ 							</view>
+ 						</view>
+ 					</view>
+ 					<uni-load-more :status="tabItem.loadingType"></uni-load-more>
+ 				</scroll-view>
+ 			</swiper-item>
+ 		</swiper>
+ 	</view>
+ </template>
+ <script>
+ import { getExtensionData,getUserInfo ,getSpreadPeople} from '@/api/user.js';
+ import { mapState, mapMutations } from 'vuex';
+ import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+ import empty from '@/components/empty';
+ export default {
+ 	components: {
+ 		empty,
+ 		uniLoadMore,
+ 	},
+ 	onReady() {
+ 		// 初始化获取页面宽度
+ 		uni.createSelectorQuery()
+ 			.select('.content')
+ 			.fields(
+ 				{
+ 					size: true
+ 				},
+ 				data => {
+ 					// console.log(data);
+ 					// console.log(Math.floor((data.width / 750) * 300));
+ 					// 保存头部高度
+ 					this.maxheight = data.height - Math.floor((data.width / 750) * 470) - 44;
+ 					// console.log(this.maxheight);
+ 				}
+ 			)
+ 			.exec();
+ 	},
+ 	data() {
+ 		return {
+ 			// 头部图高度
+ 			maxheight: '',
+ 			tabCurrentIndex: 0,
+ 			navList: [
+ 				{
+ 					state: 0,
+ 					text: '一级推广',
+ 					loadingType: 'more',
+ 					orderList: [],
+ 					page: 1, //当前页数
+ 					limit: 10 //每次信息条数
+ 				},
+ 				{
+ 					state: 1,
+ 					text: '二级推广',
+ 					loadingType: 'more',
+ 					orderList: [],
+ 					page: 1, //当前页数
+ 					limit: 10 //每次信息条数
+ 				}
+ 			],
+ 			all:'',
+ 			list:'',
+ 			total:'',
+ 			totalLevel:'',
+ 			img:'http://kaifa.crmeb.net/uploads/attach/2019/08/20190807/723adbdd4e49a0f9394dfc700ab5dba3.png',
+			userInfo: {}
+ 		};
+ 	},
+ 	onLoad(options) {},
+ 	onShow() {
+ 		this.loadData();
+		this.loadAll()
+ 	},
+ 	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 === 'loading') {
+ 				//防止重复加载
+ 				return;
+ 			}
+ 			if (navItem.loadingType === 'noMore') {
+ 				//防止重复加载
+ 				return;
+ 			}
+ 			// 修改当前对象状态为加载中
+ 			navItem.loadingType = 'loading';
+ 			getSpreadPeople(
+ 				{
+ 					page: navItem.page,
+ 					limit: navItem.limit,
+ 					keyword:'',
+					// sort: 'ASC/DESC',
+					// level: index,
+ 					// sort:'uid desc'
+					// sort: 'pay_price ASC'
+ 					grade:state
+ 				},
+ 			)
+ 				.then(({ data }) => {
+ 					console.log(data);
+ 					
+ 					this.total = data.total;
+ 					this.totalLevel =data.totalLevel;
+ 					// this.all = this.total + this.totalLevel;
+ 					if (data.list.length > 0) {
+ 						this.list = data.list;
+ 						navItem.orderList = navItem.orderList.concat(data.list);
+ 						navItem.page++;
+ 					}
+ 					this.$nextTick(function(){
+ 						if (navItem.limit == data.list.length) {
+ 							//判断是否还有数据, 有改为 more, 没有改为noMore
+ 							navItem.loadingType = 'more';
+ 							return;
+ 						} else {
+ 							//判断是否还有数据, 有改为 more, 没有改为noMore
+ 							navItem.loadingType = 'noMore';
+ 						}
+ 					})
+ 					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'
+ 			})
+ 		},
+		loadAll(){
+			getUserInfo().then(res => {
+				this.userInfo = res.data
+				console.log(res,'6666666666666666666')
+			});
+		}
+ 	}
+ };
+ </script>
+ 
+ <style lang="scss">
+ page {
+ 	background: #ffffff;
+ 	height: 100%;
+ }
+ .content-money {
+ 	// padding-bottom: 30rpx;
+ 	background: $page-color-base;
+ 	.buttom-box {
+ 		position: relative;
+ 		background-color: #ffffff;
+ 		text-align: center;
+ 		padding: 30rpx 0;
+ 		.buttom {
+ 			flex-grow: 1;
+ 		}
+ 		.money{
+ 			
+ 			font-size: 32rpx;
+ 			font-weight: bold;
+ 			color: #3F7C1F;
+ 		}
+ 		.text {
+ 			padding-bottom: 26rpx;
+ 			font-size: 28rpx;
+ 			font-weight: 500;
+ 			color: #666666;
+ 			&.current {
+ 				border-bottom: 2px solid #3F7C1F;
+ 			}
+ 		}
+ 		.icon {
+ 			height: 50rpx;
+ 			width: 48rpx;
+ 			margin: 0 auto;
+ 			.icon-img {
+ 				width: 100%;
+ 				height: 100%;
+ 			}
+ 		}
+ 	}
+ }
+ .money-box {
+ 	// background: $base-color;
+ 	height: 380rpx;
+ 	color: #FF4C4C;
+ 	text-align: center;
+ 	font-size: 35rpx;
+ 	position: relative;
+ 	// padding-top: 60rpx;
+ 	.header{
+ 		position: absolute;
+ 		left: 0;
+ 		top: 0;
+ 		width: 100%;
+ 		height: 80rpx;
+ 		font-size: 36rpx;
+ 		font-weight: bold;
+ 		z-index: 99;
+ 		display: flex;
+ 		justify-content: center;
+ 		align-items: center;
+ 	}
+ 	.goback-box{
+ 		position: absolute;
+ 		left: 29rpx;
+ 		top: 0;
+ 		height: 80rpx;
+ 		display: flex;
+ 		align-items: center;
+ 	}
+ 	.goback{
+ 		z-index: 100;
+ 		width: 34rpx;
+ 		height: 34rpx;
+ 	}
+ 	.tuiguang_bg {
+ 		width: 100%;
+ 		height: 400rpx;
+ 		position: relative;
+ 	}
+ 	.money_img{
+ 		width: 100%;
+ 		height: 120rpx;
+ 		text-align: center;
+ 		padding-top: 50rpx;
+ 		padding-bottom: 135rpx;
+ 		image{
+ 			width:120rpx;
+ 			height: 120rpx;
+ 			border: 4rpx solid #FD5F6F;
+ 			border-radius: 50%;
+ 		}
+ 	}
+ 	.money-frame {
+ 		position: absolute;
+ 		top: 0;
+ 		width: 100%;
+ 		padding-top: 120rpx;
+ 		// left: 30rpx;
+ 		// height: 460rpx;
+ 		// display: flex;
+ 		// align-items: flex-start;
+ 		// flex-direction: column;
+ 		// justify-content: center;
+ 	}
+ 	.money_name{
+ 		width: 100%;
+ 		text-align: center;
+ 		font-size: 32rpx;
+ 		font-family: PingFang SC;
+ 		font-weight: bold;
+ 		color: #FFFFFF;
+ 		
+ 	}
+ 	.money_num {
+		padding-top: 50rpx;
+ 		font-size: 72rpx;
+ 		font-family: PingFang SC;
+ 		font-weight: bold;
+ 		color: #3F7C1F;
+ 		.money_ren {
+ 			font-size: 36rpx;
+ 		}
+ 	}
+ }
+ 
+ // 列表
+ 
+ .swiper-box {
+ 	// padding-top: 10rpx;
+ 	.order-item {
+ 		padding: 20rpx 30rpx;
+ 		line-height: 1.5;
+ 		.title-box {
+ 			width: 100%;
+ 			.title-avatar{
+ 				width: 100rpx;
+ 				height: 100rpx;
+ 				margin-right: 25rpx;
+ 				image{
+ 					width: 100%;
+ 					height: 100%;
+ 					border-radius: 100%;
+ 				}
+ 			}
+ 			.list_tpl{
+ 				width: 85%;
+ 				.title {
+ 					font-size: $font-lg;
+ 					color: $font-color-base;
+ 					overflow:hidden;            //超出的文本隐藏
+ 					text-overflow:ellipsis;     //溢出用省略号显示
+ 					white-space:nowrap;
+					 justify-content: flex-start;
+					image {
+						margin-left: 9rpx;
+						width: 147rpx;
+						height: 32rpx;
+					}
+ 				}
+ 				.time {
+ 					margin-top: 15rpx;
+ 					font-size: 22rpx;
+ 					color: $font-color-light;
+ 				}
+ 			}
+ 		}
+ 		.money {
+ 			color: #DB1935;
+ 			font-size: $font-lg;
+ 		}
+ 	}
+ }
+ .list-scroll-content {
+ 	height: 100%;
+ }
+ .content {
+ 	height: 100%;
+ 	.empty-content {
+ 		background-color: #ffffff;
+ 	}
+ }
+ .tg-wrapper {
+	width: 100%;
+	background-color: #f7f7f7;
+	
+	padding: 20rpx 0;
+	.tg-box {
+		display: flex;
+		justify-content: center;
+		width: 690rpx;
+		height: 143rpx;
+		background-color: #fff;
+		margin: 0 auto;
+		align-items: center;
+		.tg-item {
+			width: 33%;
+			display: flex;
+			flex-direction: column;
+			justify-content: center;
+			align-items: center;
+			.tg-tit {
+				font-size: 24rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #333333;
+				
+			}
+			.tg-val {
+				padding-top: 15rpx;
+				font-size: 34rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #333333;
+				
+			}
+		}
+		.tg-jg {
+			width: 1rpx;
+			height: 51rpx;
+			background: #DDDDDD;
+		}
+	}
+ }
+ </style>
+ 

+ 249 - 0
pages/user/integral.vue

@@ -0,0 +1,249 @@
+<template>
+	<view class="container">
+		<!-- 头部 -->
+		<view class="header">
+			<image src="../../static/img/img38.png" mode="scaleToFill"></image>
+			<view class="money">{{+integralAll || 0}}</view>
+		</view>
+		<!-- 收入和支出 -->
+		<view class="navbar">
+			<view class="nav-item" v-for="(item, index) in navList" :key="index" :class="{ current: tabCurrentIndex === index }" @click="tabClick(index)">{{ item.text }}</view>
+		</view>
+		<swiper class="swiper-box" :current="tabCurrentIndex" duration="300" @change="changeTab" :style="{'height':height}">
+			<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
+				<!-- 空白页 -->
+				<empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty>
+				<!-- 推广奖励 -->
+				<scroll-view class="scorll" scroll-y="true" :style="{'height':height}">
+					<view class="cost">
+						<view class="award" v-for="item in tabItem.orderList">
+							<view class="award-left">
+								<view class="text clamp">{{ item.mark }}</view>
+								<view class="time">{{ item.add_time }}</view>
+							</view>
+							<view class="award-right">{{ item.pm == 1 ? '+' : '-' }}{{ item.number }}</view>
+						</view>
+					</view>
+				</scroll-view>
+				<uni-load-more :status="tabItem.loadingType"></uni-load-more>
+			</swiper-item>
+		</swiper>
+	</view>
+</template>
+
+<script>
+// 组件
+import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+import empty from '@/components/empty';
+//接口
+import { integral } from '@/api/wallet.js';
+import { getUserInfo } from '@/api/user.js';
+export default {
+	components: {
+		empty,
+		uniLoadMore
+	},
+	data() {
+		return {
+			height: '',
+			tabCurrentIndex: 0,
+			navList: [
+				{
+					state: 1,
+					text: '收入',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				},
+				{
+					state: 0,
+					text: '支出',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				}
+			],
+			list: [],
+			// money: '',
+			integralAll: '',//当前积分
+		};
+	},
+	onLoad() {
+		this.loadData();
+		this.userinfo()
+	},
+	onReady(res) {
+		var _this = this;
+		uni.getSystemInfo({
+			success: resu => {
+				const query = uni.createSelectorQuery();
+				query.select('.swiper-box').boundingClientRect();
+				query.exec(function(res) {
+					_this.height = resu.windowHeight - res[0].top + 'px';
+					console.log('打印页面的剩余高度', _this.height);
+				});
+			},
+			fail: res => {}
+		});
+	},
+	methods: {
+		//加载用户信息
+		userinfo() {
+			getUserInfo({}).then(({ data }) => {
+				this.integralAll = data.integral;
+			});
+		},
+		//swiper 切换
+		changeTab(e) {
+			this.tabCurrentIndex = e.target.current;
+			this.loadData('tabChange');
+		},
+		//顶部tab点击
+		tabClick(index) {
+			this.tabCurrentIndex = index;
+		},
+		loadData(type) {
+			let obj = this;
+			let index = obj.tabCurrentIndex;
+			let navItem = obj.navList[index];
+			if (navItem.loadingType == 'loading' || navItem.loadingType == 'noMore') {
+				return;
+			}
+			if (type == 'tabChange' && navItem.loaded == 'loaded') {
+				return;
+			}
+			navItem.loadingType == 'loading';
+			integral({
+				page: navItem.page,
+				limit: navItem.limit,
+				pm: navItem.state
+			}).then(res => {
+				navItem.orderList = navItem.orderList.concat(res.data);
+				if (navItem.limit == res.data.length) {
+					navItem.loadingType = 'more';
+					return;
+				} else {
+					navItem.loadingType = 'noMore';
+				}
+				uni.hideLoading();
+				this.$set(navItem, 'loaded', true);
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+.container {
+	width: 750rpx;
+	background-color: #f1f1f1;
+
+	.header {
+		position: relative;
+		image {
+			width: 750rpx;
+			height: 400rpx;
+		}
+
+		.money {
+			font-size: 72rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #3f7c1f;
+			position: absolute;
+			top: 60%;
+			left: 50%;
+			transform: translate(-50%, -50%);
+		}
+	}
+
+	
+
+	
+
+	.navbar {
+		display: flex;
+		height: 100rpx;
+		padding: 0 5rpx;
+		background: #fff;
+		box-shadow: 0 1rpx 5rpx rgba(0, 0, 0, 0.06);
+		position: relative;
+		z-index: 10;
+		margin-top: 25rpx;
+
+		.nav-item {
+			flex: 1;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			height: 100%;
+			font-size: 15px;
+			color: #999999;
+			position: relative;
+
+			&.current {
+				color: #333333;
+
+				&:after {
+					content: '';
+					position: absolute;
+					left: 50%;
+					bottom: 0;
+					transform: translateX(-50%);
+					width: 44px;
+					height: 0;
+					border-bottom: 2px solid #3f7c1f;
+				}
+			}
+		}
+	}
+
+	.cost {
+		width: 750rpx;
+		height: auto;
+		background-color: #fff;
+
+		.award {
+			width: 100%;
+			border-bottom: 1px solid #f0f4f8;
+			padding: 20rpx 25rpx;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+
+			.award-left {
+				width: 60%;
+				.text {
+					width: 100%;
+					font-size: 30rpx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #666666;
+					margin-bottom: 16rpx;
+				}
+
+				.time {
+					font-size: 26rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #aeaeae;
+				}
+			}
+
+			.award-right {
+				font-size: 36rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #ff0000;
+				margin-right: 30rpx;
+			}
+		}
+	}
+}
+.swiper-box {
+		// height: calc(100% - 536rpx);
+		background-color: #fff;
+	}
+</style>

+ 790 - 0
pages/user/jiedian.vue

@@ -0,0 +1,790 @@
+<template>
+	<view class="content">
+		<!-- 头部 -->
+
+		<view class="container">
+			<view class="jiedianbackground">
+				<image src="../../static/image/jiedian.png" mode=""></image>
+			</view>
+			<view class="number-box">
+				<view class="number">
+					<text>{{ userInfo.A_count + userInfo.B_count + userInfo.C_count }}</text>
+					人
+				</view>
+				<view class="renshu">我的接点人数</view>
+			</view>
+		</view>
+		<view class="message">
+			<view class="yeji">
+				<view class="yeji-a">
+					<view class="yeji-top">A区业绩</view>
+					<view class="yeji-buttom">¥{{ userInfo.A_achievement }}</view>
+				</view>
+				<view class="border"></view>
+				<view class="yeji-a">
+					<view class="yeji-top">B区业绩</view>
+					<view class="yeji-buttom">¥{{ userInfo.B_achievement }}</view>
+				</view>
+				<view class="border"></view>
+				<view class="yeji-a">
+					<view class="yeji-top">C区业绩</view>
+					<view class="yeji-buttom">¥{{ userInfo.C_achievement }}</view>
+				</view>
+			</view>
+			<view class="back" @click="navBack()" v-if="parentList.length > 0">
+				<image src="../../static/img/zhengyi10.png" mode=""></image>
+				返回
+			</view>
+			<view class="relation-box">
+				<view class="relation">
+					<view class="headbox">
+						<view class="head">
+							<view class="photo">
+								<image v-if="avatar" :src="avatar"></image>
+							</view>
+						</view>
+						<view class="head-title">
+							<image src="../../static/image/jiedian1.png" mode=""></image>
+						</view>
+					</view>
+					<view class="information">
+						<view class="name clamp">{{ name }}</view>
+						<view class="cell clamp">{{ phone }}</view>
+					</view>
+				</view>
+				<view class="sanchaji">
+					<image src="../../static/image/sanchaji.png" mode=""></image>
+				</view>
+				<view class="subordinate">
+					<view class="headbox" v-if="listA" @click="nav('a')">
+						<view class="head">
+							<view class="photo">
+								<image v-if='listA.avatar' :src="listA.avatar" mode="scaleToFill"></image>
+							</view>
+						</view>
+						<view class="head-title">
+							<image src="../../static/image/jiedian1.png" mode="scaleToFill"></image>
+						</view>
+						<view class="head-name">
+							{{listA.nickname}}
+						</view>
+						<view class="head-phone">
+							{{listA.phone}}
+						</view>
+					</view>
+					<view class="zhuce" v-else @click="open('A')">
+						<view class="jia">
+							<view class="jia_photo">
+								+
+								<!-- <image v-if='!listA.avatar' class="imgbox" src="../../static/img/jiedian07.png" mode="scaleToFill"></image> -->
+							</view>
+							<view class="font">
+								点击添加
+							</view>
+						</view>
+					</view>
+					<view class="headbox" v-if="listB" @click="nav('b')">
+						<view class="head">
+							<view class="photo">
+								<image :key='listB.id' :src="listB.avatar" mode="scaleToFill"></image>
+							</view>
+						</view>
+						<view class="head-title">
+							<image src="../../static/image/jiedian1.png" mode="scaleToFill"></image>
+						</view>
+						<view class="head-name">
+							{{listB.nickname}}
+						</view>
+						<view class="head-phone">
+							{{listB.phone}}
+						</view>
+					</view>
+					<view class="zhuce" v-else @click="open('B')">
+						<view class="jia">
+							<view class="jia_photo">
+								+
+								<!-- <image v-if='!listB.avatar' class="imgbox" src="../../static/img/jiedian07.png" mode="scaleToFill"></image> -->
+							</view>
+							<view class="font">
+								点击添加
+							</view>
+						</view>
+					</view>
+
+					<view class="headbox" v-if="listC" @click="nav('c')">
+						<view class="head">
+							<view class="photo">
+								<image v-if='listC.avatar' :src="listC.avatar" mode="scaleToFill"></image>
+							</view>
+						</view>
+						<view class="head-title">
+							<image src="../../static/image/jiedian1.png" mode="scaleToFill"></image>
+						</view>
+						<view class="head-name">
+							{{listC.nickname}}
+						</view>
+						<view class="head-phone">
+							{{listC.phone}}
+						</view>
+					</view>
+					<view class="zhuce" v-else @click="open('C')">
+						<view class="jia">
+							<view class="jia_photo">
+								+
+								<!-- <image v-if='!listC.avatar' class="imgbox" src="../../static/img/jiedian07.png" mode="scaleToFill"></image> -->
+							</view>
+							<view class="font">
+								点击添加
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<uni-popup ref="popup" type="center">
+			<view class="popup-box">
+				<view class="backgroundimg">
+					<image src="../../static/image/popup01.png" mode=""></image>
+				</view>
+				<view class="text">
+					<view class="text-one">
+						添加类型
+					</view>
+					<view class="text-two">
+						请选择接点人添加类型
+					</view>
+				</view>
+				<view class="box-choose">
+					<view class="choose">
+						<view class="zhuce">
+							<view class="zhuce-img">
+								<image src="../../static/image/popup03.png" mode="scaleToFill"></image>
+							</view>
+							<text>注册接点人</text>
+						</view>
+						<view class="radio">
+							<radio value="2" :checked="bianhao==='3'" @click="radio('3')" color="#6EAB4E"></radio>
+						</view>
+					</view>
+					<view class="choose">
+						<view class="zhuce">
+							<view class="zhuce-img">
+								<image src="../../static/image/popup02.png" mode=""></image>
+							</view>
+							<text>选择接点人</text>
+						</view>
+						<view class="radio">
+							<radio value="1" :checked="bianhao==='1'" color="#6EAB4E" @click="radio('1')">
+							</radio>
+						</view>
+					</view>
+					<view class="button" @click="navJiedian()">
+						确认
+					</view>
+				</view>
+			</view>
+		</uni-popup>
+
+	</view>
+</template>
+
+<script>
+	import uniPopup from '@/components/uni-popup/uni-popup.vue'
+	import {
+		getjiedian,
+		getReferralList,
+		addJiedian
+	} from '@/api/user.js';
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	export default {
+		components: {
+			uniPopup
+		},
+		data() {
+			return {
+				bianhao: '1',
+				a: 1,
+				b: 2,
+				c: 3,
+				listA: '', //节点A
+				listB: '', //节点B
+				listC: '', //节点C
+				name: '', //当前节点姓名
+				phone: '', //当前节点手机号
+				avatar: '', //当前节点头像
+				id: '',
+				uid: '',
+				jiedianList: [],
+				parentList: [], //保存打开层级用户数据
+				parent_area: ''
+
+			};
+		},
+		computed: {
+			...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
+		},
+		onLoad() {
+			this.name = this.userInfo.nickname;
+			this.phone = this.userInfo.phone;
+			this.avatar = this.userInfo.avatar;
+			this.id = this.userInfo.uid;
+			this.loadData();
+
+		},
+
+		methods: {
+			navJiedian() {
+				this.$refs.popup.close();
+				console.log(this.bianhao, 'bianhao')
+				if (this.bianhao === '3') {
+					uni.navigateTo({
+						url: '/pages/public/register'
+					})
+				} else if (this.bianhao === '1') {
+					uni.navigateTo({
+						url: '/pages/user/selectList?patent=' + this.id + '&parent_area=' + this.parent_area
+					})
+				}
+			},
+			//切换按钮
+			radio(e) {
+				this.bianhao = e
+			},
+			//打开选择项
+			open(are) {
+				console.log(this.id)
+				console.log('点击出现弹窗')
+				this.$refs.popup.open();
+				this.parent_area = are;
+				console.log(this.parent_area);
+			},
+			//返回
+			navBack() {
+				const obj = this;
+				// 删除
+				let parent = obj.parentList.pop();
+				console.log(parent);
+				console.log(obj.parentList, 'navBack')
+				// 保存回退后数据对象
+				obj.name = parent.name;
+				 
+				obj.avatar = parent.avatar;
+				obj.id = parent.id;
+				obj.listA = obj.listB = obj.listC = '';
+				console.log(parent, '对象');
+				obj.loadData();
+			},
+			loadData() {
+				const obj = this;
+				uni.showLoading({
+					title: '加载中。。。',
+					mask: true
+				});
+				getjiedian({}, this.id).then(({
+					data
+				}) => {
+					uni.hideLoading()
+					if (data.list.length != 0) {
+						data.list.forEach(e => {
+							console.log('e', e);
+							let item = '';
+							if (e.parent_area == 'A') {
+								item = 'listA';
+							} else if (e.parent_area == 'B') {
+								item = 'listB';
+							} else if (e.parent_area == 'C') {
+								item = 'listC';
+							}
+							obj[item] = e;
+							console.log(obj, '当前数据');
+						});
+					} else {
+						return;
+					}
+				}).catch((e) => {
+					uni.hideLoading()
+				});
+			},
+			nav(type) {
+				const obj = this;
+				// 保存当前选中的对象
+				let item = '';
+				if (type == 'a') {
+					item = 'listA'
+				} else {
+					if (type == 'b') {
+						item = 'listB'
+					} else if (type == 'c') {
+						item = 'listC'
+					}
+				}
+				obj.parentList.push({
+					name: obj.name,
+					phone: obj.phone,
+					avatar: obj.avatar,
+					id: obj.id,
+				})
+				console.log(obj.parentList, 's');
+				obj.name = obj[item].nickname;
+				obj.phone = obj[item].phone;
+				obj.avatar = '';
+				obj.$nextTick(function() {
+					obj.avatar = obj[item].avatar;
+					obj.id = obj[item].uid;
+					obj.listA = '';
+					obj.listB = '';
+					obj.listC = '';
+					obj.loadData();
+				})
+			},
+			navto(type) {
+				if (type == 'a') {
+					uni.navigateTo({
+						url: '/pages/public/register?id=' + this.id + '&area=A'
+					});
+				} else if (type == 'b') {
+					uni.navigateTo({
+						url: '/pages/public/register?id=' + this.id + '&area=B'
+					});
+				} else if (type == 'c') {
+					if (this.listA == '' || this.listB == '') {
+						this.$api.msg('请先注册完接点A和接点B');
+					} else {
+						uni.navigateTo({
+							url: '/pages/public/register?id=' + this.id + '&area=C'
+						});
+					}
+				}
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	page {
+		padding: 0;
+		margin: 0;
+		height: 100%;
+		background-color: #ffffff;
+	}
+
+	.popup-box {
+		width: 542rpx;
+		height: 575rpx;
+		background-color: #ffffff;
+		border-radius: 20rpx;
+		position: relative;
+		margin: 0 auto;
+
+		.backgroundimg {
+			width: 542rpx;
+			height: 138rpx;
+			position: absolute;
+
+			image {
+				width: 100%;
+				height: 100%;
+			}
+		}
+
+		.text {
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			padding-top: 80rpx;
+			margin-bottom: 50rpx;
+
+			.text-one {
+				font-size: 36rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #333333;
+				margin-bottom: 10rpx;
+			}
+
+			.text-two {
+				font-size: 24rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #808080;
+			}
+		}
+
+		.box-choose {
+			margin: 0 40rpx;
+			display: flex;
+			flex-direction: column;
+
+			.choose {
+				display: flex;
+				justify-content: space-between;
+				margin: 25rpx 0;
+
+
+				.zhuce {
+					display: flex;
+
+					.zhuce-img {
+						width: 42rpx;
+						height: 43rpx;
+
+						image {
+							width: 100%;
+							height: 100%;
+						}
+					}
+				}
+
+				text {
+					margin-left: 10rpx;
+					font-size: 28rpx;
+					font-weight: 500;
+					color: #333333;
+				}
+
+				.radio {}
+			}
+
+			.button {
+				margin-top: 60rpx;
+				width: 460rpx;
+				text-align: center;
+				line-height: 70rpx;
+				height: 70rpx;
+				background: #6EAB4E;
+				border-radius: 10rpx;
+				font-size: 28rpx;
+				font-weight: 500;
+				color: #FFFFFF;
+
+
+			}
+		}
+
+	}
+
+	.container {
+		width: 750rpx;
+		height: 400rpx;
+		position: relative;
+
+		.jiedianbackground {
+			position: absolute;
+			width: 750rpx;
+			height: 400rpx;
+
+			image {
+				width: 100%;
+				height: 100%;
+			}
+		}
+
+
+		.number-box {
+			width: 750rpx;
+			height: 400rpx;
+			position: absolute;
+			display: flex;
+			justify-content: center;
+			flex-direction: column;
+			align-items: center;
+
+			.number {
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #3f7c1f;
+
+				text {
+					font-size: 72rpx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #3f7c1f;
+					line-height: 86rpx;
+				}
+			}
+
+			.renshu {
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #3f7c1f;
+			}
+		}
+	}
+
+	.message {
+		padding: 0 30rpx;
+
+		.relation-box {
+			margin-top: 100rpx;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+
+			.relation {
+				position: relative;
+				display: flex;
+				align-items: center;
+
+				.headbox {
+					position: absolute;
+					// width: 154rpx;
+					// height: 154rpx;
+
+					.head {
+						width: 154rpx;
+						height: 154rpx;
+						background: #ef9e20;
+						box-shadow: 5rpx 0rpx 5rpx 0rpx rgba(110, 171, 78, 0.26);
+						border-radius: 50%;
+						overflow: hidden;
+
+						.photo {
+							width: 154rpx;
+							height: 154rpx;
+
+							image {
+								width: 100%;
+								height: 100%;
+							}
+						}
+					}
+
+					.head-title {
+						margin: -30rpx 30rpx 0 30rpx;
+						width: 94rpx;
+						height: 32rpx;
+
+						image {
+							width: 100%;
+							height: 100%;
+						}
+					}
+
+					// .head-name{
+					// 	max-width: 100%;
+					// 	font-size: 32rpx;
+					// 	font-weight: bold;
+					// 	color: #333333;
+					// }
+					// .head-phone{
+					// 	font-size: 26rpx;
+					// 	font-weight: 500;
+					// 	color: #999999;
+					// }
+				}
+
+				.information {
+					margin-left: 77rpx;
+					display: flex;
+					padding: 20rpx 10rpx;
+					flex-direction: column;
+					width: 297rpx;
+					height: 137rpx;
+					background: #ffffff;
+					border: 4rpx solid #6eab4e;
+					border-radius: 10rpx;
+
+					.name {
+						text-align: left;
+						margin-left: 70rpx;
+						font-size: 32rpx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #3f7c1f;
+					}
+
+					.cell {
+						text-align: left;
+						margin-left: 70rpx;
+						font-size: 26rpx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #abd56f;
+					}
+				}
+			}
+
+			.sanchaji {
+				margin: 30rpx 0;
+				width: 530rpx;
+				height: 91rpx;
+
+				image {
+					width: 100%;
+					height: 100%;
+				}
+			}
+
+			.subordinate {
+				width: 750rpx;
+				display: flex;
+				justify-content: space-around;
+
+				.zhuce {
+
+					width: 154rpx;
+					height: 154rpx;
+
+
+					.jia {
+						width: 154rpx;
+						height: 154rpx;
+						display: flex;
+						flex-direction: column;
+						align-items: center;
+						justify-content: center;
+
+						background: #E8E8E8;
+						box-shadow: 5rpx 0rpx 5rpx 0rpx rgba(110, 171, 78, 0.26);
+						border-radius: 50%;
+						overflow: hidden;
+
+						.jia_photo {
+							font-size: 80rpx;
+							line-height: 1;
+							color: #a3a3a3;
+						}
+
+						.font {
+							font-size: 22rpx;
+							font-weight: 500;
+							color: #999999;
+						}
+					}
+
+				}
+
+				.headbox {
+					width: 33.3%;
+					// height: 154rpx;
+					display: flex;
+					flex-direction: column;
+					// flex-wrap: nowrap;
+					align-items: center;
+					padding: 0 10rpx;
+
+					.head {
+						width: 154rpx;
+						height: 154rpx;
+						background: #ef9e20;
+						box-shadow: 5rpx 0rpx 5rpx 0rpx rgba(110, 171, 78, 0.26);
+						border-radius: 50%;
+						overflow: hidden;
+
+						.photo {
+							width: 154rpx;
+							height: 154rpx;
+
+							image {
+								width: 100%;
+								height: 100%;
+							}
+						}
+					}
+
+					.head-title {
+						margin: -30rpx 30rpx 0 30rpx;
+						width: 94rpx;
+						height: 32rpx;
+
+						image {
+							width: 100%;
+							height: 100%;
+						}
+					}
+
+					.head-name {
+						margin-top: 20rpx;
+						white-space: nowrap;
+						overflow: hidden;
+						text-overflow: ellipsis;
+						width: 150rpx;
+						padding-top: 10rpx;
+						text-align: center;
+						// margin: 30rpx 0 0 0;
+						font-size: 32rpx;
+						font-weight: bold;
+						color: #333333;
+					}
+
+					.head-phone {
+						margin: 15rpx 0 0 0;
+						font-size: 26rpx;
+						font-weight: 500;
+						color: #999999;
+					}
+				}
+			}
+		}
+
+		.yeji {
+			position: relative;
+			margin-top: -72rpx;
+			width: 690rpx;
+			height: 143rpx;
+			background: #ffffff;
+			box-shadow: 0rpx 0rpx 20rpx 0rpx rgba(50, 50, 52, 0.06);
+			border-radius: 10rpx;
+			display: flex;
+			justify-content: space-around;
+			align-items: center;
+
+			.yeji-a {
+				display: flex;
+				flex-direction: column;
+				justify-content: space-around;
+				align-items: center;
+
+				.yeji-top {
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #333333;
+					line-height: 35px;
+				}
+
+				.yeji-buttom {
+					font-size: 34rpx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #333333;
+					line-height: 35px;
+				}
+			}
+
+			.border {
+				width: 1rpx;
+				height: 51rpx;
+				background: #dddddd;
+			}
+		}
+
+		.back {
+			float: right;
+			margin-top: 40rpx;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+
+			image {
+				width: 24rpx;
+				height: 23rpx;
+			}
+
+			width: 104rpx;
+			height: 39rpx;
+			border: 2rpx solid #6EAB4E;
+			border-radius: 7rpx;
+			font-size: 24rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #6EAB4E;
+
+		}
+	}
+</style>

+ 0 - 303
pages/user/promotion.vue

@@ -1,303 +0,0 @@
-<template>
-	<view class="content">
-		<view class="content-money">
-			<image src="../../static/img/promation.png" mode="" class="bg"></image>
-			<view class="money-box">
-				<view class="money">
-					{{ all.all || 0 }}
-					<text>{{$t('hea.ren')}}</text>
-				</view>
-				<view class="text">{{$t('hea.wdtgrs')}}</view>
-			</view>
-		</view>
-		<view class="navbar flex">
-			<view class="nav-item">
-				<view class="num">{{ all.valid }}</view>
-				<view class="font">{{$t('foo.jhrs')}}</view>
-			</view>
-			<view class="xian"></view>
-			<view class="nav-item">
-				<view class="num">{{ all.v2 }}</view>
-				<view class="font">{{$t('foo.hzrs')}}</view>
-			</view>
-		</view>
-		<view class="swiper-box" :style="{ height: height }">
-			<scroll-view scroll-y="true" class="list-scroll-content" @scrolltolower="loadData" :style="{ height: height }">
-
-				<!-- 空白页 -->
-				<!-- <empty v-if="list.length === 0"></empty> -->
-
-				<!-- 订单列表 -->
-				<view class="order-item flex" v-for="(item, index) in list" :key="index">
-					<view class="title-box flex_item">
-						<view class="title-avatar"><image :src="item.avatar || '/static/error/missing-face.png'"></image></view>
-						<view class="list_tpl">
-							<view class="title">
-								<text>{{ item.mobile || item.email }}</text>
-							</view>
-							<view class="time">
-								<text>{{ item.time }}</text>
-							</view>
-						</view>
-					</view>
-				</view>
-				<uni-load-more :status="loadingType"></uni-load-more>
-			</scroll-view>
-		</view>
-	</view>
-</template>
-
-<script>
-import { spread_children,num } from '@/api/user.js';
-import { mapState, mapMutations } from 'vuex';
-import { getMoneyStyle, getTime } from '@/utils/rocessor.js';
-import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
-import empty from '@/components/empty';
-export default {
-	components: {
-		empty,
-		uniLoadMore
-	},
-	onReady(res) {
-		var obj = this;
-		uni.getSystemInfo({
-			success: resu => {
-				const query = uni.createSelectorQuery();
-				query.select('.swiper-box').boundingClientRect();
-				query.exec(function(res) {
-					console.log(res, 'ddddddddddddd');
-					obj.height = resu.windowHeight - res[0].top + 'px';
-					console.log('打印页面的剩余高度', obj.height);
-				});
-			},
-			fail: res => {}
-		});
-	},
-	data() {
-		return {
-			// 头部图高度
-			height: '',
-			tabCurrentIndex: 0,
-			all: '',
-			list: [],
-			loadingType: 'more',
-			limit: 10,
-			page: 1,
-			id: ''
-		};
-	},
-	onShow() {
-		uni.setNavigationBarTitle({
-			title:this.$t('foo.wdtg')
-		})
-		this.id = this.userInfo.id;
-		num().then(({data}) =>{
-			console.log(data)
-			this.all = data
-		})
-		this.loadData();
-	},
-	computed: {
-		...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
-	},
-	methods: {
-		loadData() {
-			const obj = this;
-			if (obj.loadingType == 'noMore' || obj.loadingType == 'loading') {
-				return;
-			}
-			obj.loadingType == 'loading';
-			spread_children({ limit: obj.limit, page: obj.page }, obj.id).then(({ data }) => {
-				data.forEach(e => {
-					e.time = getTime(e.createtime);
-				});
-				console.log(data,'123456');
-				obj.list = obj.list.concat(data);
-				// obj.list = data
-				obj.page++;
-				if (data.length == obj.limit) {
-					obj.loadingType = 'more';
-					return
-				} else {
-					obj.loadingType = 'noMore';
-				}
-			});
-		},
-		navto(e) {
-			uni.navigateTo({
-				url: e
-			});
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-page {
-	background: #000;
-	height: 100%;
-}
-.content-money {
-	height: 480rpx;
-	padding-bottom: 30rpx;
-	background: $page-color-base;
-	position: relative;
-	.bg {
-		position: absolute;
-		width: 100%;
-	}
-	.moneyTx {
-		position: absolute;
-		top: 150rpx;
-		right: 0rpx;
-		width: 150rpx;
-		padding: 10rpx 30rpx;
-		border: 2px solid #ffffff;
-		border-top-left-radius: 99rpx;
-		border-bottom-left-radius: 99rpx;
-		color: #ffffff;
-		line-height: 1;
-		font-size: $font-base;
-	}
-	.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: 50rpx;
-			width: 48rpx;
-			margin: 0 auto;
-			.icon-img {
-				width: 100%;
-				height: 100%;
-			}
-		}
-	}
-}
-.money-box {
-	// background-color: $base-color;
-	padding-top: var(--status-bar-height);
-	height: 368rpx;
-	color: #fad6b0;
-	text-align: center;
-	position: relative;
-	.text {
-		font-size: $font-sm;
-	}
-	.money {
-		padding-top: 147rpx;
-		font-size: 47px;
-		font-family: PingFang SC;
-		font-weight: bold;
-		text {
-			font-size: 24px;
-		}
-	}
-}
-
-.navbar {
-	width: 702rpx;
-	height: auto;
-	padding: 20rpx 0;
-	background: linear-gradient(90deg, #393326, #27221d);
-	border: 2rpx solid #f5d2ad;
-	border-radius: 10rpx;
-	position: relative;
-	z-index: 10;
-	margin: 0 auto;
-	.xian {
-		width: 2rpx;
-		height: 54rpx;
-		background: #eeeeee;
-	}
-	.nav-item {
-		display: flex;
-		flex-direction: column;
-		justify-content: center;
-		align-items: center;
-		height: 100%;
-		font-size: 15px;
-		color: #fff;
-		position: relative;
-		width: 50%;
-		.num {
-			font-size: 32rpx;
-			font-family: PingFang SC;
-			font-weight: bold;
-			color: #fad6b0;
-		}
-		.font {
-			font-size: 28rpx;
-			font-family: PingFang SC;
-			font-weight: 500;
-			color: #ffffff;
-		}
-	}
-}
-//列表
-
-
-.swiper-box {
-	margin-top: 20rpx;
-	.order-item {
-		padding: 20rpx 30rpx;
-		line-height: 1.5;
-
-		.title-box {
-			width: 100%;
-
-			.title-avatar {
-				width: 100rpx;
-				height: 100rpx;
-				margin-right: 25rpx;
-				border-radius: 100%;
-				image {
-					width: 100%;
-					height: 100%;
-					border-radius: 100%;
-				}
-			}
-
-			.list_tpl {
-				width: 85%;
-
-				.title {
-					font-size: $font-lg;
-					color: $font-color-base;
-					overflow: hidden; //超出的文本隐藏
-					text-overflow: ellipsis; //溢出用省略号显示
-					white-space: nowrap;
-				}
-
-				.time {
-					font-size: $font-base;
-					color: $font-color-light;
-				}
-			}
-		}
-
-		.money {
-			color: #db1935;
-			font-size: $font-lg;
-		}
-	}
-}
-.content {
-	height: 100%;
-	.empty-content {
-		background-color: #000;
-	}
-}
-</style>

+ 72 - 0
pages/user/refer.vue

@@ -0,0 +1,72 @@
+<template>
+	<view class="container">
+			<image src="../../static/img/img34.png" mode="scaleToFill"></image>
+			<view class="text">提交成功</view>
+			<view class="shenhe">请耐心等待审核</view>
+			<view class="btm">
+				<view class="btn">返回首页</view>
+			</view>
+	</view>
+</template>
+
+<script>
+export default {
+	data () {
+		return {}
+	},
+	methods: {}
+}
+</script>
+
+<style lang="scss">
+	.container {
+		background-color: #fff;
+		width: 750rpx;
+		height: 1334rpx;
+		
+		image {
+			width: 300rpx;
+			height: 250rpx;
+			margin-top: 200rpx;
+			margin-left: 210rpx;
+		}
+		
+		.text {
+			font-size: 40rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #333333;
+			line-height: 40rpx;
+			padding-left: 300rpx;
+		}
+		
+		.shenhe {
+			font-size: 27rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #B3B3B3;
+			margin-top: 20rpx;
+			display: flex;
+			justify-content: center;
+		}
+		
+		.btm {
+			width: 350rpx;
+			height: 80rpx;
+			background: #6EAB4E;
+			border-radius: 40rpx;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			margin-left: 200rpx;
+			margin-top: 50rpx;
+			
+			.btn {
+				font-size: 32rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #FFFFFF;
+			}
+		}
+	}
+</style>

+ 652 - 0
pages/user/registerList.vue

@@ -0,0 +1,652 @@
+<template>
+	<view class="content">
+		<!-- <view class="jg"></view> -->
+		<view class="navbar">
+			<view class="nav-item" v-for="(item, index) in registerList" :key="index"
+				:class="{ current: tabCurrentIndex === index }" @click="tabClick(index)">{{ item.title }}</view>
+		</view>
+		<swiper :interval="3000" :duration="200" :style="{'height': height}" class="swiper-wrapper"
+			:current="tabCurrentIndex" @change="changeTab">
+			<swiper-item v-for="(item, index) in registerList">
+				<scroll-view scroll-y="true" :style="{'height': height}">
+					<empty v-if="item.loaded === true && item.list.length === 0"></empty>
+					<view v-for="(itemt,index) in item.list" class="list">
+						<view class="" v-if="itemt.rebuy == 0">
+							<view class="order-id">账号{{itemt.account}}
+								<view class="fg">
+									注册
+								</view>
+							</view>
+							<view class="time">
+								<view class="">父接点:{{itemt.account}}</view>
+								<view class="">接点区域:{{itemt.parent_area}}</view>
+
+							</view>
+							<view class="paynum" v-if="tabCurrentIndex == 0">
+								待支付¥{{itemt.pay_price}}
+							</view>
+							<view class="zfqx" v-if="tabCurrentIndex == 0">
+								<view class="btn" @click="openselect(itemt)">
+									支付
+								</view>
+								<view class="btn qx" @click="cancelRegister(itemt)">
+									取消
+								</view>
+							</view>
+						</view>
+						<view class="" v-if="itemt.rebuy == 1">
+							<view class="order-id">
+								报单编号{{itemt.order_id}}
+								<view class="fg">
+									复购
+								</view>
+							</view>
+							<view class="time">
+								{{itemt.add_time | getTime}}
+							</view>
+							<view class="paynum" v-if="tabCurrentIndex == 0">
+								待支付¥{{itemt.pay_price}}
+							</view>
+							<view class="zfqx" v-if="tabCurrentIndex == 0">
+								<view class="btn" @click="openselect(itemt)">
+									支付
+								</view>
+								<view class="btn qx" @click="cancelRegister(itemt)">
+									取消
+								</view>
+							</view>
+						</view>
+					</view>
+					<uni-load-more :status="item.loadingType"></uni-load-more>
+				</scroll-view>
+			</swiper-item>
+		</swiper>
+		<uni-popup ref="popupPay" type="bottom">
+			<view class="popup-box">
+				<view class="popup-pay">
+					<view class="paybox-top flex">
+						<view class="type">选择支付方式</view>
+						<view class="image" @click="close">
+							<image src="../../static/img/x.png" mode="aspectFill"></image>
+						</view>
+					</view>
+					<view class="paybox-main flex">
+						<view class="zftype flex">
+							<image src="../../static/img/zifubao.png" mode="aspectFill"></image>
+							<view class="zf">支付宝支付</view>
+						</view>
+						<label class="radio1" @click="changePayType(4)"><radio style="transform:scale(0.7)" value="" :checked="paytype == 'ali'" color="#5dbc7c"></radio></label>
+					</view>
+					<view class="paybox-main flex">
+						<view class="zftype flex">
+							<image src="../../static/img/weixin.png" mode="aspectFill"></image>
+							<view class="zf">微信支付</view>
+						</view>
+						<label class="radio1" @click="changePayType(1)">
+							<radio style="transform:scale(0.7)" value="" :checked="paytype == 'weixin'" color="#5dbc7c">
+							</radio>
+						</label>
+					</view>
+					<view class="paybox-main flex">
+						<view class="zftype flex">
+							<image src="../../static/img/yue.png" mode="aspectFill"></image>
+							<view class="zf">余额支付</view>
+						</view>
+						<label class="radio" @click="changePayType(2)">
+							<radio style="transform:scale(0.7)" class="rad" value="" :checked="paytype == 'yue'"
+								color="#5dbc7c"></radio>
+						</label>
+					</view>
+					<view class="paybox-main flex">
+						<view class="zftype flex">
+							<image src="../../static/img/yong.png" mode="aspectFill"></image>
+							<view class="zf">佣金支付</view>
+						</view>
+						<label class="radio1" @click="changePayType(3)">
+							<radio style="transform:scale(0.7)" value="" :checked="paytype == 'brokerage'"
+								color="#5dbc7c"></radio>
+						</label>
+					</view>
+				</view>
+				<view class="buttom flex">
+					<view class="heji">
+						合计:
+						<text>
+							¥
+							<text class="money">{{ payitem.pay_price }}</text>
+						</text>
+					</view>
+					<view class="zhifu" @click="pay">立即支付</view>
+				</view>
+			</view>
+		</uni-popup>
+	</view>
+</template>
+
+<script>
+	import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+	import empty from '@/components/empty';
+	getTime
+	import {
+		getTime
+	} from '@/utils/rocessor.js';
+
+	import {
+		getRegisterList,
+		cancelRegister,
+		payRegister
+	} from '@/api/user.js'
+	import {
+		orderData,
+		getUserInfo,
+		service
+	} from '@/api/user.js';
+	import {
+		getSpreadCount
+	} from '@/api/user.js';
+	export default {
+		components: {
+			uniLoadMore,
+			empty
+		},
+		data() {
+			return {
+				payLoding: false, //判断是否支付中
+				brokerage: 0,
+				now_money: 0,
+				payitem: {},
+				paytype: '',
+				height: '',
+				tabCurrentIndex: 0,
+				registerList: [{
+						status: 0,
+						title: '未支付',
+						loadingType: 'more',
+						list: [],
+						page: 1, //当前页数
+						limit: 10 //每次信息条数
+					},
+					{
+
+						status: 1,
+						title: '已支付',
+						loadingType: 'more',
+						list: [],
+						page: 1, //当前页数
+						limit: 10 //每次信息条数
+					}
+				]
+			}
+		},
+		filters: {
+			getTime
+		},
+		onReady(res) {
+			var _this = this;
+			uni.getSystemInfo({
+				success: resu => {
+					const query = uni.createSelectorQuery();
+					query.select('.swiper-wrapper').boundingClientRect();
+					query.exec(function(res) {
+						_this.height = resu.windowHeight - res[0].top + 'px';
+						console.log('打印页面的剩余高度', _this.height);
+					});
+				},
+				fail: res => {}
+			});
+		},
+		onLoad() {
+			this.getRegisterList()
+			this.getUserInfo()
+		},
+		methods: {
+
+			getUserInfo() {
+				let obj = this
+				getUserInfo().then(({
+					data
+				}) => {
+					console.log(data, 111)
+					obj.now_money = +data.now_money
+				})
+				getSpreadCount({}, 3).then(({
+					data
+				}) => {
+					console.log(data);
+					this.brokerage = +data.count;
+				});
+			},
+			//关闭支付弹窗
+			close() {
+				this.$refs.popupPay.close();
+			},
+			// 修改支付方式
+			changePayType(type) {
+				// this.payType = type;
+				if (type == 1) {
+					this.paytype = 'weixin';
+				}
+				if (type == 2) {
+					this.paytype = 'yue';
+				}
+				if (type == 3) {
+					this.paytype = 'brokerage';
+				}
+				if (type == 4) {
+					this.paytype = 'ali';
+				}
+			},
+			getRegisterList(type) {
+				let obj = this;
+				let index = obj.tabCurrentIndex;
+				let navItem = obj.registerList[index];
+				if (navItem.loadingType == 'loading' || navItem.loadingType == 'noMore') {
+					return;
+				}
+				if (type == 'tabChange' && navItem.loaded == 'loaded') {
+					return;
+				}
+				navItem.loadingType == 'loading';
+				getRegisterList({
+					page: navItem.page,
+					limit: navItem.limit,
+					type: navItem.status
+				}).then(res => {
+					console.log(res, 'ddd')
+					navItem.list = navItem.list.concat(res.data);
+					if (navItem.limit == res.data.length) {
+						navItem.loadingType = 'more';
+						return;
+					} else {
+						navItem.loadingType = 'noMore';
+					}
+					uni.hideLoading();
+					this.$set(navItem, 'loaded', true);
+				});
+			},
+			//顶部tab点击
+			tabClick(index) {
+				this.tabCurrentIndex = index;
+			},
+			//swiper 切换
+			changeTab(e) {
+				this.tabCurrentIndex = e.target.current;
+				this.getRegisterList('tabChange');
+			},
+			//取消订单
+			cancelRegister(item) {
+				let obj = this
+				cancelRegister({}, item.id).then(res => {
+					uni.showToast({
+						title: '取消成功',
+						duration: 2000
+					});
+					let s = obj.registerList[obj.tabCurrentIndex].list.indexOf(item);
+					obj.registerList[obj.tabCurrentIndex].list.splice(s, 1);
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			pay() {
+				let obj = this;
+				// 判断是否余额不足
+				let id = obj.payitem.id
+				if (obj.paytype == 'yue' && +obj.now_money < +obj.payitem.pay_price) {
+					uni.showModal({
+						title: '提示',
+						content: '账户余额不足!',
+						showCancel: false,
+						success: res => {},
+						fail: () => {},
+						complete: () => {}
+					});
+					return;
+				}
+				if (obj.paytype == 'brokerage' && +obj.brokerage < +obj.payitem.pay_price) {
+					uni.showModal({
+						title: '提示',
+						content: '账户佣金不足!',
+						showCancel: false,
+						success: res => {},
+						fail: () => {},
+						complete: () => {}
+					});
+					return;
+				}
+				// 支付中
+				obj.payLoding = true;
+				uni.showLoading({
+					title: '支付中',
+					mask: true
+				});
+				// #ifdef H5
+				// 获取当前是否为微信浏览器
+				obj.froms = uni.getStorageSync('weichatBrowser') || '';
+				// #endif
+				let data = {
+					paytype: obj.paytype,
+					// #ifdef H5
+					from: obj.froms ? 'weixin' : 'H5', //来源
+					// #endif
+					// #ifdef MP-WEIXIN
+					from: 'routine', //来源
+					// #endif
+					// #ifdef APP-PLUS
+					from: 'app' //来源
+					// #endif
+				}
+				obj.$refs.popupPay.close();
+				payRegister(data, id).then(res => {
+					// #ifdef APP-PLUS
+					if (obj.paytype == 'weixin' || obj.paytype == 'routine') {
+						console.log(res,'111111')
+						let da = res.data.result.jsConfig;
+						console.log('--weixinda--', da);
+						let data = {
+							appid:da.appid,
+							noncestr: da.noncestr,
+							package: da.package,
+							partnerid:da.partnerid,
+							prepayid:da.prepayid,
+							timestamp: da.timestamp,
+							sign:da.sign
+						};
+						console.log('--data--', data);
+						uni.requestPayment({
+							provider: 'wxpay',
+							orderInfo: data,
+							success(res) {
+								let s = obj.registerList[obj.tabCurrentIndex].list.indexOf(obj.payitem);
+								obj.registerList[obj.tabCurrentIndex].list.splice(s, 1);
+								uni.showToast({
+									title: '支付成功',
+									duration: 2000
+								});
+								console.log(res)
+							},
+							fail(res) {
+								console.log("微信掉起失败")
+								console.log(res,'失败')
+							}
+						})
+					}
+					if (obj.paytype == 'ali') {
+						console.log(res, 'url');
+						const url = res.data.result.jsConfig;
+						uni.requestPayment({
+							provider: 'alipay',
+							orderInfo: url,
+							success: res => {
+								console.log(res);
+								let s = obj.registerList[obj.tabCurrentIndex].list.indexOf(obj.payitem);
+								obj.registerList[obj.tabCurrentIndex].list.splice(s, 1);
+								uni.showToast({
+									title: '支付成功',
+									duration: 2000
+								});
+							},
+							fail: e => {
+								console.log(e);
+							},
+							complete: () => {}
+						});
+						obj.payLoding = false;
+					}
+					// #endif
+					if(this.paytype == 'yue' || this.paytype == "brokerage"){
+						let s = obj.registerList[obj.tabCurrentIndex].list.indexOf(obj.payitem);
+						obj.registerList[obj.tabCurrentIndex].list.splice(s, 1);
+						uni.showToast({
+							title: '支付成功',
+							duration: 2000
+						});
+					}
+					uni.hideLoading()
+					
+				}).catch(err => {
+					uni.hideLoading()
+					console.log(err)
+				})
+			},
+			//调出支付选择
+			openselect(item) {
+				let obj = this
+				obj.payitem = item
+				obj.$refs.popupPay.open();
+			},
+		},
+		
+	}
+</script>
+
+<style lang="scss" scoped>
+	page {
+		height: 100%;
+		background-color: #f8f6f6;
+	}
+
+	.content {
+		height: 100%;
+
+		.jg {
+			height: 20rpx;
+			background-color: #eee;
+		}
+
+		.navbar {
+			display: flex;
+			height: 100rpx;
+			padding: 0 5rpx;
+			background: #fff;
+			box-shadow: 0 1rpx 5rpx rgba(0, 0, 0, 0.06);
+			position: relative;
+			z-index: 10;
+			// margin-top: 25rpx;
+
+			.nav-item {
+				flex: 1;
+				display: flex;
+				justify-content: center;
+				align-items: center;
+				height: 100%;
+				font-size: 15px;
+				color: #999999;
+				position: relative;
+
+				&.current {
+					color: #333333;
+
+					&:after {
+						content: '';
+						position: absolute;
+						left: 50%;
+						bottom: 0;
+						transform: translateX(-50%);
+						width: 44px;
+						height: 0;
+						border-bottom: 2px solid #3f7c1f;
+					}
+				}
+			}
+		}
+
+		.swiper-wrapper {}
+	}
+
+	.list {
+		padding: 30rpx 30rpx 20rpx;
+		background-color: #fff;
+		margin-bottom: 20rpx;
+
+		.paynum {
+			padding-top: 10rpx;
+			padding-bottom: 10rpx;
+			font-size: 30rpx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #FF0000;
+		}
+
+		.order-id {
+
+			font-size: 30rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #333;
+			position: relative;
+
+			.fg {
+				line-height: 40rpx;
+				width: 80rpx;
+				background-color: #3F7C1F;
+				border-radius: 10rpx;
+				color: #fff;
+				font-size: 24rpx;
+				text-align: center;
+				position: absolute;
+				right: 0;
+				top: 0;
+			}
+		}
+
+		.time {
+			padding-top: 10rpx;
+			padding-bottom: 10rpx;
+			font-size: 26rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #AEAEAE;
+			display: flex;
+
+			view {
+				margin-right: 20rpx;
+			}
+		}
+
+		.zfqx {
+			display: flex;
+			justify-content: flex-end;
+			border-top: 1px dashed #999;
+			padding-top: 20rpx;
+
+			.btn {
+				width: 150rpx;
+				// height: 50rpx;
+				// background-color: #d7eeb6;
+				color: #3F7C1F;
+				border: 1px solid #3F7C1F;
+				border-radius: 10rpx;
+				text-align: center;
+				line-height: 50rpx;
+				// color: #FF0000;
+			}
+
+			.qx {
+				margin-left: 30rpx;
+				border: #999 solid 1px;
+				color: #333;
+			}
+		}
+	}
+
+	.popup-box {
+		position: relative;
+		z-index: 100;
+		width: 100%;
+		height: auto;
+		background: #ffffff;
+
+		.popup-pay {
+			position: relative;
+			justify-content: space-between;
+			padding: 0rpx 25rpx 32rpx 25rpx;
+
+			.paybox-top {
+				padding-top: 38rpx;
+				width: 100%;
+
+				.type {
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #333333;
+				}
+
+				.image {
+					padding-right: 24rpx;
+					padding-bottom: 10rpx;
+
+					image {
+						width: 16rpx;
+						height: 16rpx;
+					}
+				}
+			}
+
+			.paybox-main {
+				width: 100%;
+				margin-top: 54rpx;
+
+				.zftype {
+					padding-left: 5rpx;
+
+					image {
+						width: 38rpx;
+						height: 40rpx;
+					}
+
+					.zf {
+						padding-left: 18rpx;
+						font-size: 28rpx;
+						font-family: PingFang SC;
+						font-weight: 400;
+						color: #3f454b;
+					}
+				}
+			}
+		}
+
+		.buttom {
+			position: relative;
+			z-index: 100;
+			width: 100%;
+			height: 113rpx;
+			padding-top: 20rpx;
+			align-items: center;
+
+			.heji {
+				height: 100%;
+				width: 50%;
+				padding-left: 23rpx;
+				padding-top: 20rpx;
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: 400;
+				color: #3f454b;
+
+				text {
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #ff0000;
+
+					.money {
+						font-size: 36rpx;
+					}
+				}
+			}
+
+			.zhifu {
+				width: 50%;
+				height: 92rpx;
+				background: #5dbc7c;
+				text-align: center;
+				line-height: 92rpx;
+				font-size: 32rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #ffffff;
+			}
+		}
+	}
+</style>

+ 0 - 200
pages/user/scoreAccumulate.vue

@@ -1,200 +0,0 @@
-<template>
-	<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> -->
-		<swiper :current="tabCurrentIndex" 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>
-
-					<!-- 订单列表 -->
-					<view v-for="(item, index) in tabItem.orderList" :key="index" class="order-item flex">
-						<view class="title-box">
-							<view class="title">
-								<text>{{ item.mark }}</text>
-							</view>
-							<view class="time">
-								<text>{{ item.add_time }}</text>
-							</view>
-						</view>
-						<view class="money">
-							<text>{{ (item.pm == 0 ? '-' : '+') + item.number }}</text>
-						</view>
-					</view>
-					<uni-load-more :status="tabItem.loadingType"></uni-load-more>
-				</scroll-view>
-			</swiper-item>
-		</swiper>
-	</view>
-</template>
-
-<script>
-	
-import { integrallist } from '@/api/functionalUnit.js';
-import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
-import empty from '@/components/empty';
-export default {
-	components: {
-		empty,
-		uniLoadMore
-	},
-	onReady() {
-		
-	},
-	data() {
-		return {
-			tabCurrentIndex: 0,
-			navList: [
-				{
-					state: 0,
-					text: '全部',
-					loadingType: 'more',
-					orderList: [],
-					page: 1, //当前页数
-					limit: 10 //每次信息条数
-				},
-			],
-		};
-	},
-	onShow() {
-		// 载入积分数据
-		this.loadData();
-	},
-	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 === 'loading') {
-				//防止重复加载
-				return;
-			}
-			// 修改当前对象状态为加载中
-			navItem.loadingType = 'loading';
-
-			integrallist(
-				{
-					page: navItem.page,
-					limit: navItem.limit
-				},
-				state
-			)
-				.then(({ data }) => {
-					if (data.length > 0) {
-						navItem.orderList = navItem.orderList.concat(data);
-						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;
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-page {
-	background: #ffffff;
-	height: 100%;
-}
-.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: $font-color-dark;
-		position: relative;
-		&.current {
-			color: $base-color;
-			&:after {
-				content: '';
-				position: absolute;
-				left: 50%;
-				bottom: 0;
-				transform: translateX(-50%);
-				width: 44px;
-				height: 0;
-				border-bottom: 2px solid $base-color;
-			}
-		}
-	}
-}
-// 列表
-
-.swiper-box {
-	height: calc(100% - 44px);
-	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: #fd5b23;
-			font-size: $font-lg;
-		}
-	}
-}
-.list-scroll-content {
-	height: 100%;
-}
-.content {
-	height: 100%;
-	.empty-content {
-		background-color: #ffffff;
-	}
-}
-</style>

+ 182 - 0
pages/user/selectList.vue

@@ -0,0 +1,182 @@
+<template>
+	<view class="page">
+		<view class="content">
+			<view class="checked" v-for="(item,index) in checkList">
+				<view class="checked-box">
+					<view class="checked-img">
+						<image :src="item.img" mode=""></image>
+					</view>
+					<view class="checked-text">
+						<view class="checked-name">{{item.nickname}}</view>
+						<view class="checked-phone">{{item.phone}}</view>
+					</view>
+				</view>
+				<!-- <radio value="1" :checked="xuanze==='1'" @click="checked('1')"></radio> -->
+				<view class="">
+					<radio @click="click(item,index)" :key="index" :checked="isChange == index" color="#6EAB4E">
+					</radio>
+				</view>
+			</view>
+		</view>
+		<view class="button" @click="navJiedian()">
+			确认
+		</view>
+	</view>
+</template>
+<script>
+	// import {
+	// 	getReferralList
+	// } from '@/api/user.js';
+	// import{ getReferralList}
+	// import {
+	// 	getChooseList
+	// } from '@/api/user.js';
+	import {
+		getChooseList,
+		addJiedian
+		
+	} from '@/api/user.js'
+	export default {
+		data() {
+			return {
+				parent_area:'',
+				patent:'',
+				uid: '',
+				wuyue: [],
+				isChange: -1, //单选
+				checkList: [{
+						img: '',
+						name: '',
+						phone: '',
+					}
+				]
+			}
+		},
+		onLoad(option) {
+			// this.getChoosesList()
+			this.getla()
+			console.log(option)
+			this.parent_area = option.parent_area
+			this.patent = option.patent
+			
+			
+		},
+		methods: {
+			getla() {
+				let obj = this
+				getChooseList().then(res => {
+					console.log(res, '11111')
+					obj.checkList = res.data.data
+				})
+			},
+			//判断当前index是否与ischange相等,再次点击取消
+			click(item,index) {
+				console.log(item,'item')
+				this.uid = item.uid
+				this.isChange = index
+			},
+			navJiedian(){
+				if(this.uid == '') {
+					return this.$api.msg('请选择用户')
+				}
+				console.log(this.patent,this.parent_area,'dddddddddddddddddddd')
+				addJiedian({
+					patent:this.patent ,
+					parent_area: this.parent_area,
+					uid: this.uid,
+				}).then(res=>{
+					this.$api.msg(res.msg)
+					console.log(res,'11122344')
+					this.$api.prePage().loadData()
+					setTimeout(()=> {
+						uni.navigateBack({})
+					},1000)
+					
+				})
+			
+			}
+		}
+	}
+</script>
+<style lang="scss">
+	page {
+		padding: 0;
+		margin: 0;
+		height: 100%;
+		background-color: #F8F6F6;
+
+		.page {
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+		}
+
+		.button {
+			margin-top: 60rpx;
+			width: 699rpx;
+			height: 90rpx;
+			border-radius: 45px;
+			text-align: center;
+			line-height: 70rpx;
+			height: 70rpx;
+			background: #6EAB4E;
+			font-size: 28rpx;
+			font-weight: 500;
+			color: #FFFFFF;
+
+
+		}
+
+		.content {
+			width: 100%;
+			display: flex;
+			flex-wrap: nowrap;
+			flex-direction: column;
+			margin-top: 20rpx;
+			background-color: #FFFFFF;
+
+			.checked {
+				height: 130rpx;
+				margin: 0 30rpx;
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+
+				.checked-box {
+					display: flex;
+
+					.checked-img {
+						width: 80rpx;
+						height: 80rpx;
+						border-radius: 50%;
+						overflow: hidden;
+
+						image {
+							width: 100%;
+							height: 100%;
+						}
+					}
+
+					.checked-text {
+						margin-left: 20rpx;
+						display: flex;
+						flex-direction: column;
+						justify-content: space-between;
+
+						.checked-name {
+							font-size: 30rpx;
+							font-weight: 500;
+							color: #3F454B;
+						}
+
+						.checked-phone {
+							font-size: 22rpx;
+							font-weight: 400;
+							color: #999999;
+						}
+					}
+				}
+			}
+		}
+	}
+</style>

+ 106 - 289
pages/user/shareQrCode.vue

@@ -1,41 +1,22 @@
 <template>
-	<view class="content">
-		<image src="../../static/img/sharebg.png" mode="" class="bg"></image>
-		<!-- <view class="qrimg"> -->
-		<!-- <tki-qrcode :key="'http://shop.zhengyjk1994.com/register?petent=' + userInfo.uid" cid="tki-qrcode-canvas"
+	<view class="container" v-if="loaded">
+		<image @longtap="bc_code" class="backImg" :src="backImg"></image>
+		<!-- <view class="tki-qrcode"><canvas @longtap="bc_code" canvas-id="qrcode" /></view> -->
+		<view class="tki-qrcode">
+			<tki-qrcode :key="'http://shop.zhengyjk1994.com/register?petent=' + userInfo.uid" cid="tki-qrcode-canvas"
 				ref="qrcode"
 				:val="'http://shop.zhengyjk1994.com/register?petent=' + userInfo.uid"
 				:size="300" unit="upx" background="#ffffff" foreground="#333333" pdground="#333333" icon=""
-				:iconSize="40" :lv="3" :onval="true" :loadMake="true" :usingComponents="true" /> -->
-		<!-- </view> -->
-		<view class="er">
-			<tki-qrcode :key="baseURL + '/index?petent=' + userInfo.id" cid="tki-qrcode-canvas" ref="qrcode"
-				:val="baseURL + '/index?petent=' + userInfo.id" :size="150" unit="upx" background="#ffffff"
-				foreground="#333333" pdground="#333333" icon="" :iconSize="40" :lv="3" :onval="true" :loadMake="true"
-				:usingComponents="true" />
+				:iconSize="40" :lv="3" :onval="true" :loadMake="true" :usingComponents="true" />
 		</view>
-		<view class="title">
-			ID:{{id}}
-		</view>
-		<!-- #ifndef MP-ALIPAY -->
-		<!-- <canvas :class="{ qrimg: !loading }" @longtap="alertCanv" id="qrShareBox" canvas-id="qrShareBox" class="tki-qrcode-canvas" /> -->
-		<!-- #endif -->
-		<!-- #ifdef MP-ALIPAY -->
-		<!-- <canvas :class="{ qrimg: !loading }" @longtap="alertCanv" id="qrShareBox" class="tki-qrcode-canvas" /> -->
-		<!-- #endif -->
-		<!-- <view :style="{ display: loading ? 'none' : 'block' }" class="tki-qrcode-canvas"><image :src="ctxSrc" mode="scaleToFill" class="tki-qrcode-canvas"></image></view>
-		<view class="share-bottom flex" :class="{ 'action-share-bottom': !loading }" @click="loading ? showImg() : ''">
-			<text>{{ loading ? '点击生成图片' : '长按二维码下载' }}</text>
-		</view> -->
 	</view>
 </template>
 
 <script>
-	import tkiQrcode from '@/components/tki-qrcode/tki-qrcode.vue';
 	import {
 		spreadBanner
 	} from '@/api/user.js';
-
+	import tkiQrcode from '@/components/tki-qrcode/tki-qrcode.vue'
 	import {
 		mapState,
 		mapMutations
@@ -44,301 +25,137 @@
 		components: {
 			tkiQrcode
 		},
-		computed: {
-			...mapState('user', ['userInfo', 'orderInfo', 'hasLogin']),
-			...mapState(['baseURL'])
-		},
 		data() {
 			return {
-				id:'',
-				cid: 'tki-qrcode-canvas', //canvasId,页面存在多个二维码组件时需设置不同的ID
-				size: 180, //生成的二维码大小
-				unit: 'upx', //大小单位尺寸
-				// show: true,//默认使用组件中的image标签显示二维码
-				val: '', //要生成的内容
-				background: '#ffffff', //二维码背景色
-				foreground: '#333333', //二维码前景色
-				pdground: '#333333', //二维码角标色
-				icon: '', //二维码图标URL(必须是本地图片,网络图需要先下载至本地)
-				iconSize: 40, //二维码图标大小
-				lv: 3, //容错级别
-				onval: true, //监听val值变化自动重新生成二维码
-				loadMake: false, //组件初始化完成后自动生成二维码,val需要有值
-				usingComponents: false, //是否使用了自定义组件模式(主要是为了修复非自定义组件模式时 v-if 无法生成二维码的问题)
-				showLoading: true, //是否显示loading
-				loadingText: '二维码生成中', //loading文字
-				src: '', // 二维码生成后的图片地址或base64
-				ratio: 1, //页面比例用于计算
-				ctxSrc: '', //要显示的图片
-				loading: true, //是否载入图片中
-				canHeight: '', //画布高度
-				canWeidth: '' //画布宽度
+				url: '',
+				backImg: '',
+				loaded: false
 			};
 		},
 		onLoad() {
-			this.id = this.userInfo.id + '';
-			if (this.id.length < 8) {
-				let k = '';
-				for (let j = 0; j < 8 - this.id.length; j++) {
-					k += '0';
+			this.spread();
+		},
+		computed: {
+			...mapState('user', ['userInfo', 'orderInfo', 'hasLogin']),
+			cpSize() {
+				if (this.unit == "upx") {
+					return uni.upx2px(this.size)
+				} else {
+					return this.size
 				}
-				this.id = k + this.id;
-			}
-			uni.setNavigationBarTitle({
-				title:this.$t('foo.wdewm')
-			})
-			// this.loadCodeList()
+			},
 		},
-		// onReady() {
-		// 	let obj = this;
-		// 	let query = uni.createSelectorQuery();
-		// 	// 获取页面比例
-		// 	query
-		// 		.select('.content')
-		// 		.fields(
-		// 			{
-		// 				size: true
-		// 			},
-		// 			e => {
-		// 				// 保存比例
-		// 				this.ratio = e.width / 750;
-		// 			}
-		// 		)
-		// 		.exec();
-		// 	// 获取画布宽高信息
-		// 	query
-		// 		.select('#qrShareBox')
-		// 		.fields(
-		// 			{
-		// 				size: true
-		// 			},
-		// 			e => {
-		// 				// 保存画布宽高信息
-		// 				obj.canHeight = e.height;
-		// 				obj.canWeidth = e.width;
-		// 			}
-		// 		)
-		// 		.exec();
-		// },
 		methods: {
-			loadCodeList() {
-				// 加载二维码信息
+			spread() {
+				let obj = this;
+				uni.showLoading({
+					title: '二维码生成中...'
+				})
 				spreadBanner({
-					// #ifdef H5
-					type: 2,
-					// #endif
-					// #ifdef MP
-					type: 1
-					// #endif
-				}).then(e => {
-					// #ifdef MP
-					// 保存二维码图片
-					uni.downloadFile({
-						url: e.data[0].wap_posterQr,
-						success(res) {
-							if (res.errMsg == 'downloadFile:ok') {
-								obj.src = res.tempFilePath;
-								// 生成画布
-								obj.loadImg(obj.src);
-								uni.hideLoading();
-							}
-							console.log(res);
-						},
-						fail(e) {
-							console.log(e);
-						}
-					})
-					// #endif
-					// #ifdef H5
-					// 保存二维码图片
-					this.src = e.data[0].wap_posterQr;
-					// 生成画布
-					this.loadImg(e.data[0].wap_posterQr);
-					// #endif
-
-				}).catch((e) => {
-					uni.showModal({
-						title: '生成失败请刷新页面',
-						showCancel: false
-					});
-					uni.hideLoading();
-				});;
-			},
-			// 长按画布事件
-			alertCanv() {
-				uni.showModal({
-					title: '请先点击生成图片再下载',
-					showCancel: false
+					type: 2
+				}).then(({
+					data
+				}) => {
+					uni.hideLoading()
+					console.log(data)
+					obj.backImg = data[0].pic;
+					console.log(obj.backImg, 'obj.backImg')
+					this.loaded = true
+					
+				}).catch(err => {
+					console.log(err)
+					uni.hideLoading()
 				});
 			},
-			// 生成图片
-			showImg() {
-				uni.showLoading({
-					title: '图片生成中',
-					mask: true
-				});
-				let obj = this;
-				//因为和uni.showLoading载入效果冲突需要延迟执行生成图片方法
-				setTimeout(function() {
-					uni.canvasToTempFilePath({
-						x: 0,
-						y: 0,
-						width: obj.canWeidth,
-						height: obj.canHeight,
-						destWidth: obj.canWeidth,
-						destHeight: obj.canHeight,
-						fileType: 'jpg',
-						quality: 1,
-						canvasId: 'qrShareBox',
-						success: res => {
-							uni.hideLoading();
-							uni.showModal({
-								title: '创建成功,长按二维码下载图片',
-								showCancel: false
-							});
-							// 显示生成的图片
-							obj.loading = false;
-							// 保存图片base64
-							obj.ctxSrc = res.tempFilePath;
-						},
-						fail(e) {
-							console.log(e);
+			bc_code() {
+				let that = this;
+				console.log('保存二维码', this.backImg)
+				uni.downloadFile({ //获得二维码的临时地址
+					url: this.backImg,
+					success: (res) => {
+						//console.log('获取url',res)
+						if (res.statusCode == 200) {
+							uni.saveImageToPhotosAlbum({
+								filePath: res.tempFilePath, //传入临时地址
+								success() {
+									that.$api.msg('保存成功') //封装的提示
+								},
+								fail() {
+									that.$api.msg('保存失败')
+								}
+							})
 						}
-					});
-				}, 50);
-			},
-			// 开始渲染画布
-			loadImg(src) {
-				const obj = this;
-				const cavWidth = 523; //画布宽度
-				const cavHeight = 700; //画布高度
-				const ratio = obj.ratio; //获取页面比例
-				const ctxBg = '/static/img/img14.jpg'; //画布背景
-				let context = uni.createCanvasContext('qrShareBox');
-				const codeSize = obj.size * ratio; //计算二维码大小
-				const codeX = ((cavWidth - obj.size) * ratio) / 2; //二维码所在x轴位置
-				const codeY = cavHeight * ratio; //二维码所在y轴位置
-				const codeBoxColor = '#FFFFFF'; //包裹框颜色
-				const codeBoxWidht = 0; //包裹边框宽度
-				const codeBoxSize = (codeBoxWidht / 2) * ratio; //计算二维码白色包裹框大小
-				const codeBoxX = codeX - codeBoxSize; //包裹框初始X轴
-				const codeBoxY = codeY - codeBoxSize; //包裹框初始Y轴
-				const codeBoxEnd = codeSize + codeBoxWidht * ratio; //计算包裹框大小
-				const fontTop = codeY + codeBoxEnd + (codeBoxWidht + 20) * this.ratio; //文字距离上边距高度
-				const fontSize = 24 * ratio; //文字大小
-				const fontText = ''; //文字内容
-				const fontLeft = (codeSize - fontSize * fontText.length) / 2 + codeX; //文字左侧距离
-				// 插入背景图片
-				context.drawImage(ctxBg, 0, 0, obj.canWeidth, obj.canHeight);
-				// // 插入文字
-				context.setFontSize(fontSize);
-				context.fillText(fontText, fontLeft, fontTop);
-				// 插入边框
-				context.beginPath(); //开始画线
-				context.setLineJoin('round'); //边框类型
-				context.setLineWidth(codeBoxWidht * ratio);
-				context.setStrokeStyle(codeBoxColor); //设置包裹框颜色
-				context.strokeRect(codeBoxX, codeBoxY, codeBoxEnd, codeBoxEnd);
-				context.stroke(); //渲染线条
-				// 插入二维码
-				context.drawImage(src, codeX, codeY, codeSize, codeSize);
-				// 开始渲染
-				context.draw();
-			},
-			// 創建二维码
-			creatQrcode() {
-				this.$refs.qrcode._makeCode();
+					}
+				})
 			},
-			// 保存二维码到图库
-			saveQrcode() {
-				this.$refs.qrcode._saveCode();
-			},
-			// 生成二维码后返回base64
-			qrR(res) {
-				this.src = res;
-			},
-			//清空二维码(清空二维码会触发result回调 返回值为空)
-			clearQrcode(e) {
-				this.$refs.qrcode._clearCode();
-				this.val = '';
-			}
-		}
-	};
+		},
+	}
 </script>
 
 <style lang="scss">
-	.content {
-		// padding-top: 30rpx;
+	page {
+		width: 100%;
+		min-height: 100%;
 
-		height: calc(100vh - 44px);
-		position: relative;
+		.container {
+			width: 100%;
+			height: 100%;
+		}
 	}
 
-	.bg {
-		position: relative;
-		height: calc(100vh - 44px);
+	.backImg {
+		position: absolute;
 		width: 100%;
+		height: 100%;
 	}
 
-	// #qrShareBox {
-	// 	position: absolute;
-	// 	left: -9999rpx;
-	// 	top: -9999rpx;
-	// }
+	.portrait {
+		width: 100%;
+		text-align: center;
+		padding-top: 80rpx;
+		padding-bottom: 30rpx;
 
-	.qrimg {
-		position: absolute;
-		left: -9999rpx;
-		top: -9999rpx;
+		image {
+			width: 250rpx;
+			height: 250rpx;
+		}
 	}
 
-	.tki-qrcode-canvas {
-		// width: 700rpx;
-		// height: 1245rpx;
-		width: 532rpx;
-		height: 945rpx;
-		margin: 0 auto;
+	.text {
+		text-align: center;
+		width: 100%;
+		color: #FFFFFF;
+		font-size: 55rpx;
+		letter-spacing: 15rpx;
 	}
 
-	.share-bottom {
-		width: 560rpx;
-		height: 80rpx;
-		color: #ffffff;
-		background-color: $base-color;
-		margin: 0 auto;
-		font-size: $font-lg - 2rpx;
-		margin-top: 30rpx;
-		border-radius: 99rpx;
-		justify-content: center;
+	.uid-name {
+		padding: 50rpx 0rpx;
+		text-align: center;
+		width: 100%;
+		color: #FFFFFF;
+	}
 
-		&.action-share-bottom {
-			background-color: $color-gray;
-		}
+	.copy-btn {
+		color: #FFFFFF;
+		background-color: #4BA6ED;
+		border-radius: 50rpx;
+		width: 170rpx;
+		line-height: 70rpx;
+		margin: 0rpx auto;
+		text-align: center;
 	}
 
 	.tki-qrcode {
-		width: 300rpx;
-		height: 300rpx;
 		position: fixed;
-		bottom: 10vh;
-		right: 0;
-		left: 0;
-		margin: auto;
-	}
-	.er {
-		position: absolute;
-		top: 82%;
-		left: 40%;
+		bottom: 10%;
+		left: 30%;
 	}
-	.title {
-		position: absolute;
-		top: 86%;
-		left: 50%;
-		margin-left: -100rpx;
-		width: 200rpx;
-		background: #ff3130;
-		text-align: center;
-		border-radius: 10rpx;
-		color: #FFFFFF;
+
+	canvas {
+		width: 150px;
+		height: 150px;
+		margin: auto;
+
 	}
 </style>

+ 162 - 0
pages/user/shezhi.vue

@@ -0,0 +1,162 @@
+<template>
+	<view class="container">
+		<!-- 头像 -->
+		<view class="touxiang">
+			<view class="tou">头像</view>
+			<view class="avatar"><image :src=" userInfo.avatar || '../../static/error/missing-face.png' "></image></view>
+		</view>
+		<!-- 昵称 -->
+		<view class="nicheng">
+			<view class="text">昵称</view>
+				<view class="username">{{ userInfo.nickname || '游客' }}</view>
+		</view>
+		<view class="yaoqing">
+			<view class="ma">邀请码</view>
+			<view class="shu">102320</view>
+			</view>
+			<view class="zhanghu">
+				<view class="qq">账户</view>
+				<view class="number">13911111111</view>
+				</view>
+			<view class="btn"><text>退出登录</text></view>
+	</view>
+</template>
+
+<script>
+import { edit } from '@/api/user'
+export default {
+	data () {
+		return {
+			userInfo: {}
+		}
+	},
+	created () {
+		this.loadUser ()
+	},
+	methods: {
+		nav (url) {
+			uni.navigateTo({
+				url
+			})
+		},
+		
+		async loadUser () {
+			const { data } = await edit ()
+			console.log(data)
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+	.container {
+		background-color: #F2F3F5;
+		width: 750rpx;
+		height: 1334rpx;
+		.touxiang {
+			height: 120rpx;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			background-color: #fff;
+			.tou {
+				font-size: 32rpx;
+				font-family: PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				margin-left: 25rpx;
+			}
+			.avatar {
+				image {
+					width: 80rpx;
+					height: 80rpx;
+					border-radius: 50%;
+					margin-right: 25rpx;
+				}
+			}
+		}
+		.nicheng {
+			height: 100rpx;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			background-color: #fff;
+			border-bottom: 1rpx solid #F0F0F0;
+			margin-top: 20rpx;
+			.text {
+				font-size: 32rpx;
+				font-family: PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				margin-left: 25rpx;
+			}
+			.username {
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				margin-right: 25rpx;
+			}
+		}
+		.yaoqing {
+			height: 100rpx;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			background-color: #fff;
+			border-bottom: 1rpx solid #F0F0F0;
+			.ma {
+				font-size: 32rpx;
+				font-family: PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				margin-left: 25rpx;
+			}
+			.shu {
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				margin-right: 25rpx;
+			}
+		}
+		.zhanghu {
+			height: 100rpx;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			background-color: #fff;
+			.qq {
+				font-size: 32rpx;
+				font-family: PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				margin-left: 25rpx;
+			}
+			.number {
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				margin-right: 25rpx;
+			}
+		}
+		.btn {
+			width: 560rpx;
+			height: 80rpx;
+			background: #6EAB4E;
+			border-radius: 40rpx;
+			margin-top: 157rpx;
+			margin-left: 95rpx;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			text {
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #FFFFFF;
+			}
+		}
+	}
+</style>

+ 63 - 0
pages/user/submit.vue

@@ -0,0 +1,63 @@
+<template>
+	<view class="container">
+			<image class="img" src="../../static/img/img34.png" mode="scaleToFill"></image>
+			<view class="text">提交成功</view>
+			<view class="btm">
+				<view class="btn" @click="nav('pages/index/index')">返回首页</view>
+			</view>
+	</view>
+</template>
+
+<script>
+export default {
+	data () {
+		return {}
+	},
+	methods: {
+		nav (url) {
+			uni.navigateTo({
+				url
+			})
+		} 
+	}
+}
+</script>
+
+<style lang="scss">
+	.container {
+		background-color: #fff;
+		width: 750rpx;
+		height: 1334rpx;
+		.img {
+			width: 300rpx;
+			height: 250rpx;
+			margin-top: 200rpx;
+			margin-left: 210rpx;
+		}
+		.text {
+			font-size: 40rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #333333;
+			line-height: 40rpx;
+			padding-left: 300rpx;
+		}
+		.btm {
+			width: 350rpx;
+			height: 80rpx;
+			background: #6EAB4E;
+			border-radius: 40rpx;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			margin-left: 200rpx;
+			margin-top: 90rpx;
+			.btn {
+				font-size: 32rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #FFFFFF;
+			}
+		}
+	}
+</style>

+ 0 - 386
pages/user/team.vue

@@ -1,386 +0,0 @@
-<template>
-	<view class="content">
-		<!-- 头部 -->
-
-		<view class="container">
-			<view class="jiedianbackground"><image src="../../static/img/jiedian.png" mode=""></image></view>
-			<view class="number-box">
-				<view class="number">
-					<text>{{ childList.length }}</text>
-					{{ $t('hea.ren') }}
-				</view>
-				<view class="renshu">{{ $t('hea.wdtdrs') }}</view>
-			</view>
-		</view>
-		<view class="message">
-			<view class="back-box" @click="back()" v-if="id != userInfo.id">{{ $t('hea.fh') }}</view>
-			<view class="relation-box">
-				<view class="relation">
-					<view class="headbox">
-						<view class="head">
-							<view class="photo"><image v-if="avatar" :src="avatar || '/static/error/missing-face.png'"></image></view>
-						</view>
-					</view>
-					<view class="information">
-						<view class="name clamp">{{ name }}</view>
-						<view class="cell clamp">{{ phone }}</view>
-					</view>
-				</view>
-				<view class="sanchaji"><image src="../../static/img/sanchaji.png" mode=""></image></view>
-				<view class="subordinate flex">
-					<view class="subordinate-box" v-for="(item, index) in childList" @click="findChildren(item)">
-						<view class="head1">
-							<image :src="item.avatar || '/static/error/missing-face.png'" mode=""></image>
-							<view class="" v-if="item.activity[0].my_join != null">
-								<view class="vip" v-if="item.activity[0].my_join.status == '1'"><image src="../../static/img/cjyg.png" mode=""></image></view>
-							</view>
-							<view class="" v-if="item.activity[1].my_join != null">
-								<view class="vip" v-if="item.activity[1].my_join.status == '1'"><image src="../../static/img/v1.png" mode=""></image></view>
-								<view class="vip" v-if="item.activity[1].my_join.status == '2'"><image src="../../static/img/v2.png" mode=""></image></view>
-							</view>
-								
-						</view>
-						<view class="name clamp">{{ item.nickname }}</view>
-						<view class="phone clamp">{{ item.mobile }}</view>
-					</view>
-					<template v-if="childList.length < 5">
-						<view class="subordinate-box" v-for="item in 5 - childList.length">
-							<view class="head1"></view>
-							<view class="name clamp"></view>
-							<view class="phone clamp"></view>
-						</view>
-					</template>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-import uniPopup from '@/components/uni-popup/uni-popup.vue';
-import { children } from '@/api/user.js';
-import { mapState, mapMutations } from 'vuex';
-export default {
-	components: {
-		uniPopup
-	},
-	data() {
-		return {
-			name: '', //当前节点姓名
-			phone: '', //当前节点手机号
-			avatar: '', //当前节点头像
-			id: '',
-			childList: [], //当前节点的下级
-			fatherList: []
-		};
-	},
-	computed: {
-		...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
-	},
-	onLoad() {
-		uni.setNavigationBarTitle({
-			title: this.$t('foo.wdtd')
-		});
-		console.log(this.userInfo);
-		this.name = this.userInfo.nickname;
-		this.phone = this.userInfo.mobile;
-		this.avatar = this.userInfo.avatar;
-		this.id = this.userInfo.id;
-		this.loadData();
-	},
-
-	methods: {
-		//返回
-
-		loadData() {
-			const obj = this;
-			children({}, this.id).then(({ data }) => {
-				this.childList = data;
-				console.log(data);
-			});
-		},
-		async findChildren(item) {
-			//存father
-			this.fatherList.push({
-				name: this.name,
-				phone: this.phone,
-				avatar: this.avatar,
-				id: this.id
-			});
-			//设置新father
-
-			this.id = item.id;
-			await this.loadData();
-			this.name = item.nickname;
-			this.phone = item.mobile;
-			this.avatar = item.avatar;
-		},
-		back() {
-			let father = this.fatherList.pop();
-			this.name = father.name;
-			this.phone = father.phone;
-			this.avatar = father.avatar;
-			this.id = father.id;
-			this.loadData();
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-page {
-	padding: 0;
-	margin: 0;
-	height: 100%;
-	background-color: #000;
-}
-
-.container {
-	width: 750rpx;
-	height: 400rpx;
-	position: relative;
-
-	.jiedianbackground {
-		position: absolute;
-		width: 750rpx;
-		height: 400rpx;
-
-		image {
-			width: 100%;
-			height: 100%;
-		}
-	}
-
-	.number-box {
-		width: 750rpx;
-		height: 400rpx;
-		position: absolute;
-		display: flex;
-		justify-content: center;
-		flex-direction: column;
-		align-items: center;
-
-		.number {
-			font-size: 30rpx;
-			font-family: PingFang SC;
-			font-weight: 500;
-			color: #fad6b0;
-
-			text {
-				font-size: 72rpx;
-				font-family: PingFang SC;
-				font-weight: bold;
-				line-height: 86rpx;
-			}
-		}
-
-		.renshu {
-			font-size: 30rpx;
-			font-family: PingFang SC;
-			font-weight: 500;
-			color: #fad6b0;
-		}
-	}
-}
-
-.message {
-	padding: 0 30rpx;
-	position: relative;
-
-	.back-box {
-		width: 100rpx;
-		height: 50rpx;
-		border: 1px solid #fad6b0;
-		// background-color: red;
-		position: absolute;
-		top: 0;
-		right: 20rpx;
-		color: #fad6b0;
-		line-height: 50rpx;
-		text-align: center;
-		border-radius: 10rpx;
-		font-size: 28rpx;
-		z-index: 9;
-	}
-
-	.relation-box {
-		margin-top: 100rpx;
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-
-		.relation {
-			position: relative;
-			display: flex;
-			align-items: center;
-
-			.headbox {
-				position: absolute;
-				// width: 154rpx;
-				// height: 154rpx;
-
-				.head {
-					width: 154rpx;
-					height: 154rpx;
-					background: #fff;
-					box-shadow: 5rpx 0rpx 5rpx 0rpx rgba(110, 171, 78, 0.26);
-					border-radius: 50%;
-					overflow: hidden;
-					.photo {
-						width: 154rpx;
-						height: 154rpx;
-
-						image {
-							width: 100%;
-							height: 100%;
-						}
-					}
-				}
-
-				.head-title {
-					margin: -30rpx 30rpx 0 30rpx;
-					width: 94rpx;
-					height: 32rpx;
-
-					image {
-						width: 100%;
-						height: 100%;
-					}
-				}
-
-				// .head-name{
-				// 	max-width: 100%;
-				// 	font-size: 32rpx;
-				// 	font-weight: bold;
-				// 	color: #333333;
-				// }
-				// .head-phone{
-				// 	font-size: 26rpx;
-				// 	font-weight: 500;
-				// 	color: #999999;
-				// }
-			}
-
-			.information {
-				margin-left: 77rpx;
-				display: flex;
-				padding: 20rpx 10rpx;
-				flex-direction: column;
-				width: 297rpx;
-				height: 137rpx;
-				background: linear-gradient(90deg, #393326, #27221d);
-				border: 4rpx solid #fad6b0;
-				border-radius: 10rpx;
-
-				.name {
-					text-align: left;
-					margin-left: 70rpx;
-					font-size: 32rpx;
-					font-family: PingFang SC;
-					font-weight: bold;
-					color: #fad6b0;
-				}
-
-				.cell {
-					text-align: left;
-					margin-left: 70rpx;
-					font-size: 26rpx;
-					font-family: PingFang SC;
-					font-weight: 500;
-					color: #fad6b0;
-				}
-			}
-		}
-
-		.sanchaji {
-			margin: 30rpx 0;
-			width: 90%;
-			height: 91rpx;
-
-			image {
-				width: 100%;
-				height: 100%;
-			}
-		}
-
-		.subordinate {
-			width: 750rpx;
-			display: flex;
-			justify-content: flex-start;
-			align-items: flex-start;
-
-			.subordinate-box {
-				flex: 1;
-				display: flex;
-				flex-direction: column;
-				align-items: center;
-
-				.head1 {
-					position: relative;
-					border-radius: 50%;
-					background: #fff;
-					width: 120rpx;
-					height: 120rpx;
-					.vip {
-						position: absolute;
-						bottom: 0;
-						left: 10%;
-						width: 94rpx;
-						height: 32rpx;
-						image {
-							width: 100%;
-							height: 100%;
-							border-radius: 0;
-						}
-					}
-					image {
-						width: 100%;
-						height: 100%;
-						border-radius: 50%;
-					}
-				}
-
-				.name {
-					max-width: 120rpx;
-					margin-top: 10rpx;
-					font-size: 26rpx;
-					font-family: PingFang SC;
-					font-weight: bold;
-					color: #ffffff;
-				}
-
-				.phone {
-					max-width: 120rpx;
-					margin-top: 10rpx;
-					font-size: 22rpx;
-					font-family: PingFang SC;
-					font-weight: 500;
-					color: #999999;
-				}
-			}
-		}
-	}
-
-	.back {
-		float: right;
-		margin-top: 40rpx;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-
-		image {
-			width: 24rpx;
-			height: 23rpx;
-		}
-
-		width: 104rpx;
-		height: 39rpx;
-		border: 2rpx solid #6eab4e;
-		border-radius: 7rpx;
-		font-size: 24rpx;
-		font-family: PingFang SC;
-		font-weight: 500;
-		color: #6eab4e;
-	}
-}
-</style>

+ 172 - 0
pages/user/transfer.vue

@@ -0,0 +1,172 @@
+<template>
+	<view class="container">
+		<view class="top-two">
+			<view class="count">{{ money || 0 }}</view>
+			<view class="text">可转账佣金</view>
+		</view>
+		<view class="top-three">
+			<view class="text">收款人账户</view>
+			<input class="input" type="text" placeholder="请输入收款人账户" v-model="to_user_account" />
+		</view>
+		<view class="top-three">
+			<view class="text">收款人UID</view>
+			<input class="input" type="number" placeholder="请输入收款人UID" v-model="to_uid" />
+		</view>
+		<view class="top-four">
+			<view class="text">转账数量</view>
+			<view class="row">
+				<text class="tit">¥</text>
+				<input class="input" type="number" placeholder="请输入转账数量" v-model="num" />
+			</view>
+		</view>
+		<view class="btn" @click="sub">提交申请</view>
+	</view>
+</template>
+
+<script>
+import { trade, getSpreadCount } from '@/api/user.js';
+export default {
+	data() {
+		return {
+			num: '', //转账金额
+			to_user_account: '', //收款人账户
+			to_uid: '', //收款人UID
+			money: 0
+		};
+	},
+	onLoad() {
+		this.getNum();
+	},
+	methods: {
+		nav(url) {
+			uni.navigateTo({
+				url
+			});
+		},
+		sub() {
+			let obj = this;
+			if (obj.num == '') {
+				return this.$api.msg('转账金额不能为空!');
+			}
+			if (obj.num * 1 > obj.money * 1) {
+				return this.$api.msg('可转账金额不足!');
+			}
+			if (obj.to_user_account == '') {
+				return this.$api.msg('请输入收款人账户!');
+			}
+			if (obj.to_uid == '') {
+				return this.$api.msg('请输入转账金额!');
+			}
+				trade({
+					type: 'brokerage_price',
+					num: obj.num,
+					to_user_account: obj.to_user_account,
+					to_uid: obj.to_uid
+				}).then(res => {
+					uni.showToast({
+						title: '转账成功',
+						duration: 2000
+					});
+				}).catch(err =>{
+					console.log(err)
+				});
+		},
+		getNum() {
+			getSpreadCount({}, 3).then(({ data }) => {
+				console.log(data);
+				this.money = +data.count;
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+.container {
+	background-color: #f2f3f5;
+	width: 750rpx;
+	// height: 1334rpx;
+	.top-two {
+		padding-bottom: 20rpx;
+		background-color: #fff;
+		.count {
+			text-align: center;
+			height: 50rpx;
+			font-size: 42rpx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #333333;
+			line-height: 110rpx;
+			margin: 0 auto;
+		}
+		.text {
+			width: 140rpx;
+			// height: 26rpx;
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #666666;
+			margin: 0 auto;
+			margin-top: 50rpx;
+		}
+	}
+	.top-three {
+		margin-top: 20rpx;
+		height: 160rpx;
+		background-color: #fff;
+		.text {
+			width: 150rpx;
+			height: 29rpx;
+			font-size: 30rpx;
+			font-family: PingFang SC;
+			font-weight: 400;
+			color: #333333;
+			line-height: 110rpx;
+			margin-left: 25rpx;
+		}
+		.input {
+			margin-top: 65rpx;
+			margin-left: 25rpx;
+		}
+	}
+	.top-four {
+		margin-top: 20rpx;
+		height: 160rpx;
+		background-color: #fff;
+		.text {
+			width: 150rpx;
+			height: 29rpx;
+			font-size: 30rpx;
+			font-family: PingFang SC;
+			font-weight: 400;
+			color: #333333;
+			line-height: 110rpx;
+			margin-left: 25rpx;
+		}
+		.row {
+			display: flex;
+			// justify-content: center;
+			margin-top: 65rpx;
+			margin-left: 20rpx;
+			.tit {
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				margin-right: 10rpx;
+			}
+		}
+	}
+	.btn {
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		width: 674rpx;
+		height: 90rpx;
+		background: linear-gradient(-35deg, #f8dd4f, #fbeb77);
+		border-radius: 44rpx;
+		margin-top: 138rpx;
+		margin-left: 38rpx;
+	}
+}
+</style>

+ 0 - 140
pages/user/upgrade.vue

@@ -1,140 +0,0 @@
-<template>
-	<view class="content">
-		<view class="user-info flex">
-			<image src="" mode="" class="user-img"></image>
-			<view class="user-name">{{ userInfo.nickname }}</view>
-			<!-- <view class="tit">尚未升级黑钻会员</view> -->
-		</view>
-		<view class="up-box">
-			<view class="up" v-for="(item, index) in list">
-				<image src="../../static/img/upone.png" mode="" class="bg"></image>
-				<view class="up-price">
-					<text class="inconn">¥</text>
-					<text>{{item.money}}</text>
-				</view>
-				<image src="../../static/img/uonow.png" mode="" class="uplevel" @click="navto(item.id)"></image>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-import { activityList } from '@/api/active.js';
-import { mapState, mapMutations } from 'vuex';
-export default {
-	data() {
-		return {
-			list: ''
-		};
-	},
-	computed: {
-		...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
-	},
-	onShow() {
-		this.loadData();
-	},
-	methods: {
-		navto(id) {
-			if(!this.userInfo.bank_card_no && !this.userInfo.bank_of_deposit){
-				console.log(this.userInfo,"11111")
-				uni.showModal({
-				    title: '提示',
-				    content: '您当前未填写银行卡信息和所属银行是否前往填写',
-				    success: function (res) {
-				        if (res.confirm) {
-				           uni.navigateTo({
-								url:'/pages/set/userinfo'
-				           })
-				        } else if (res.cancel) {
-				            console.log('用户点击取消');
-				        }
-				    }
-				});
-			}else {
-				uni.navigateTo({
-					url:'/pages/index/info?id='+ id
-				});
-			}
-		},
-		loadData(){
-			activityList({}).then(({data}) =>{
-				this.list = data.list
-			})
-		}
-	}
-};
-</script>
-
-<style lang="scss" scoped>
-.user-info {
-	flex-direction: column;
-	align-items: center;
-	text-align: center;
-	padding-top: 20rpx;
-	.user-img {
-		width: 120rpx;
-		height: 120rpx;
-		border-radius: 50%;
-		background-color: #eee;
-	}
-	.user-name {
-		margin-top: 20rpx;
-		width: 240rpx;
-		font-size: 32rpx;
-		font-family: PingFang SC;
-		font-weight: bold;
-		color: #ffffff;
-	}
-	.tit {
-		padding-top: 8rpx;
-		font-size: 24rpx;
-		font-family: PingFang SC;
-		font-weight: 400;
-		color: #999999;
-	}
-}
-.up-box {
-	padding: 30rpx 0 100rpx 0;
-	.up {
-		width: 690rpx;
-		height: 892rpx;
-		position: relative;
-		margin: 0 auto 34rpx;
-		.bg {
-			width: 690rpx;
-			height: 892rpx;
-			position: absolute;
-		}
-		.up-price {
-			font-size: 116rpx;
-			display: inline-block;
-			font-family: Source Han Sans CN;
-			font-weight: 800;
-			color: #c63535;
-			position: absolute;
-			top: 250rpx;
-			right: 0;
-			left: 0;
-			margin: auto;
-			display: flex;
-			justify-content: center;
-			.inconn {
-				font-size: 36rpx;
-				font-family: Source Han Sans CN;
-				font-weight: bold;
-				color: #c63535;
-				padding-top: 25rpx;
-			}
-		}
-		.uplevel {
-			width: 307rpx;
-			height: 80rpx;
-			position: absolute;
-			bottom: 118rpx;
-			right: 0;
-			left: 0;
-			margin: auto;
-		}
-	}
-}
-</style>

+ 463 - 370
pages/user/user.vue

@@ -1,47 +1,105 @@
 <template>
 	<view class="container">
-		<view class="user-info-box">
-			<view class="detail flex" @click="navTo('/pages/set/userinfo')">
-				<view class="portrait-box"><image class="portrait" :src="userInfo.avatar || '../../static/error/missing-face.png'"></image></view>
-				<view class="info-box">
-					<view class="username">{{ userInfo.nickname || $t('hea.yk') }}</view>
-					<view class="font-size-sm">{{ userInfo.mobile || '' }}</view>
+		<!-- 用户信息 -->
+		<view class="user">
+			<!-- 背景图片 -->
+			<image src="../../static/img/img17.png" mode="scaleToFill"></image>
+			<!-- 用户头像和信息 -->
+			<view class="infor">
+				<!-- 用户信息 -->
+				<view class="infor-left">
+					<image :src=" userInfo.avatar || '../../static/error/missing-face.png' "></image>
+					<view class="info-box">
+						<view class="username">{{ userInfo.nickname || '游客' }}</view>
+						<view class="phone" v-if="userInfo.phone">{{userInfo.phone | phone}}</view>
+					</view>
 				</view>
-				<view class="vip">
-					<image v-if="isVip == 0" src="../../static/img/cjyg.png" mode=""></image>
-					<image v-if="isVip == 1" src="../../static/img/v1.png" mode=""></image>
-					<image v-if="isVip == 2" src="../../static/img/uservip.png" mode=""></image>
+				<!-- 设置 -->
+				<view class="infor-right" @click="nav('/pages/set/userinfo')">
+					<image src="../../static/img/img18.png" mode="scaleToFill"></image>
+					<view class="setting">设置</view>
 				</view>
 			</view>
-			<view class="config iconfont"><text class="setting iconsetting" @click="navTo('/pages/set/userinfo')"></text></view>
-		</view>
-		<!-- <view class="vip-box" @click="navTo('/pages/user/upgrade')"><image src="../../static/img/vip.png" mode=""></image></view> -->
-
-		<view class="tt">
-			<view class="tt-box" @click="navTo('/pages/user/promotion')">
-				<image src="../../static/img/tuiguang.png" class="tt-icon1" mode=""></image>
-				<view class="tt-txt">{{ $t('hea.wdtg') }}</view>
-				<image src="../../static/img/jiantou.png" class="next-icon" mode=""></image>
-			</view>
-			<view class="tt-box" @click="navTo('/pages/user/team')">
-				<image src="../../static/img/team.png" class="tt-icon1" mode=""></image>
-				<view class="tt-txt">{{ $t('hea.wdtd') }}</view>
-				<image src="../../static/img/jiantou.png" class="next-icon" mode=""></image>
-			</view>
-			<view class="tt-box" @click="navTo('/pages/profit/profit')">
-				<image src="../../static/img/money.png" class="tt-icon5" mode=""></image>
-				<view class="tt-txt">{{ $t('hea.syzx') }}</view>
-				<image src="../../static/img/jiantou.png" class="next-icon" mode=""></image>
+			<!-- 我的订单 -->
+			<view class="order-box">
+				<view class="my-order" @click="nav('/pages/order/order')">
+					<view class="order">我的订单</view>
+					<image src="../../static/img/xiangxia.png" mode="scaleToFill"></image>
+				</view>
+				<!-- 订单栏 -->
+				<view class="order-section">
+					<view class="order-item" @click="nav('/pages/order/order?state=0')">
+						<image src="../../static/img/img19.png" mode="scaleToFill"></image>
+						<view class="text">待付款</view>
+					</view>
+					<view class="order-item" @click="nav('/pages/order/order?state=1')">
+						<image src="../../static/img/img20.png" mode="scaleToFill"></image>
+						<view class="text">待发货</view>
+					</view>
+					<view class="order-item" @click="nav('/pages/order/order?state=2')">
+						<image src="../../static/img/img21.png" mode="scaleToFill"></image>
+						<view class="text">待收货</view>
+					</view>
+					<view class="order-item" @click="nav('/pages/order/order?state=4')">
+						<image src="../../static/img/img22.png" mode="scaleToFill"></image>
+						<view class="text">已完成</view>
+					</view>
+				</view>
 			</view>
-			<view class="tt-box" @click="navTo('/pages/user/shareQrCode')">
-				<image src="../../static/img/share.png" class="tt-icon1" mode=""></image>
-				<view class="tt-txt">{{ $t('hea.fxhy') }}</view>
-				<image src="../../static/img/jiantou.png" class="next-icon" mode=""></image>
+		</view>
+		<!-- 下部分 -->
+		<view class="item-box">
+			<!-- 我的余额 -->
+			<view class="order-section">
+				<view class="order-item" @click="nav('/pages/money/wallet')">
+					<image src="../../static/img/img26.png" mode="scaleToFill"></image>
+					<view class="text">我的余额</view>
+				</view>
+				<view class="order-item" @click="nav('/pages/user/award')">
+					<image src="../../static/img/img23.png" mode="scaleToFill"></image>
+					<view class="text">我的佣金</view>
+				</view>
+				<view class="order-item" @click="nav('/pages/user/integral')">
+					<image src="../../static/img/img24.png" mode="scaleToFill"></image>
+					<view class="text">我的积分</view>
+				</view>
+				<view class="order-item" @click="nav('/pages/user/extension')">
+					<image src="../../static/img/img25.png" mode="scaleToFill"></image>
+					<view class="text">我的推广</view>
+				</view>
 			</view>
-			<view class="tt-box" @click="open()">
-				<image src="../../static/img/kefu.png" class="tt-icon1" mode=""></image>
-				<view class="tt-txt">{{ $t('hea.lxkf') }}</view>
-				<image src="../../static/img/jiantou.png" class="next-icon" mode=""></image>
+			<!-- 底部列表 -->
+			<view class="btm">
+				<view class="ul-btm" @click="nav('/pages/user/jiedian')">
+					<image src="../../static/img/img27.png" mode="scaleToFill"></image>
+					<view class="text">我的接点</view>
+					<image class="jiantou" src="../../static/img/img32.png" mode="scaleToFill"></image>
+				</view>
+				<view class="ul-btm" @click="nav('/pages/user/shareQrCode')">
+					<image src="../../static/img/img28.png" mode="scaleToFill"></image>
+					<view class="text">邀请海报</view>
+					<image class="jiantou" src="../../static/img/img32.png" mode="scaleToFill"></image>
+				</view>
+				<view class="ul-btm" @click="nav('/pages/public/register')">
+					<image src="../../static/img/img29.png" mode="scaleToFill"></image>
+					<view class="text">会员注册</view>
+					<image class="jiantou" src="../../static/img/img32.png" mode="scaleToFill"></image>
+				</view>
+				<view class="ul-btm" @click="nav('/pages/user/registerList')">
+					<image src="../../static/img/img28.png" mode="scaleToFill"></image>
+					<view class="text">报单列表</view>
+					<image class="jiantou" src="../../static/img/img32.png" mode="scaleToFill"></image>
+				</view>
+				<view class="ul-btm" @click="nav('/pages/set/address')">
+					<image src="../../static/img/img30.png" mode="scaleToFill"></image>
+					<view class="text">收货地址</view>
+					<image class="jiantou" src="../../static/img/img32.png" mode="scaleToFill"></image>
+				</view>
+				<view class="ul-btm" @click="open()">
+					<image src="../../static/img/img31.png" mode="scaleToFill"></image>
+					<view class="text">联系客服</view>
+					<image class="jiantou" src="../../static/img/img32.png" mode="scaleToFill"></image>
+				</view>
 			</view>
 		</view>
 		<uni-popup ref="popup" type="center">
@@ -49,396 +107,431 @@
 				<view class="img"><image src="../../static/img/img009.png" mode=""></image></view>
 				<view class="mian">
 					<view class="delivery">
-						<view class="title">{{ $t('foo.yjwndzzskf') }}</view>
+						<view class="title">已经为您定制专属客服</view>
 						<image src="../../static/img/img010.png" mode=""></image>
 					</view>
-					<view class="nocancel">{{ $t('foo.kfwx') }}1: {{ text }}</view>
-					<view class="nocancel">{{ $t('foo.kfwx') }}2: {{ text1 }}</view>
-					<view class="nocancel">{{ $t('foo.kfwx') }}3: {{ text2 }}</view>
-					<view class="comfirm-box">
-						<view class="cancel" @click="tocall('1')">{{ $t('foo.fzwx') }}1</view>
-						<view class="comfirm" @click="tocall('2')">{{ $t('foo.fzwx') }}2</view>
-					</view>
+					<view class="nocancel">客服VX:{{ text }}</view>
 					<view class="comfirm-box">
-						<view class="comfirm" @click="tocall('3')">{{ $t('foo.fzwx') }}3</view>
-						<view class="cancel" @click="cancel">{{ $t('foo.qx') }}</view>
+						<view class="cancel" @click="cancel">取消</view>
+						<view class="comfirm" @click="comfirm(text)">复制微信</view>
 					</view>
 				</view>
 			</view>
 		</uni-popup>
-		<u-tabbar :list="tabbar" bg-color="#000" active-color="#FAD6B0" inactive-color="#71614f" change="change"></u-tabbar>
 	</view>
 </template>
 
 <script>
-import uniPopup from '@/components/uni-popup/uni-popup.vue';
-import uniCopy from '@/utils/uni-copy.js';
-import { tabbar } from '@/components/tabbar/tabbar.js';
-import { mapState, mapMutations } from 'vuex';
-import { saveUrl, interceptor } from '@/utils/loginUtils.js';
-import { getApplyList } from '../../api/apply.js';
-import { getUserInfo } from '@/api/user.js';
-export default {
-	data() {
-		return {
-			text: 'BYTCKF21',
-			text1: 'BYTCKF33',
-			text2: 'BYTCKF67',
-			isVip: -1,
-			tabbar: [
-				{
-					iconPath: '../../static/tabBar/home.png',
-					selectedIconPath: '../../static/tabBar/home-action.png',
-					text: this.$t('hea.sy'),
-					pagePath: '/pages/index/index'
-				},
-				{
-					iconPath: '../../static/tabBar/center.png',
-					selectedIconPath: '../../static/tabBar/center-action.png',
-					text: this.$t('hea.shlb'),
-					count: 0,
-					pagePath: '/pages/user/applyList'
-				},
-				{
-					iconPath: '../../static/tabBar/user.png',
-					selectedIconPath: '../../static/tabBar/user-action.png',
-					text: this.$t('hea.wd'),
-					pagePath: '/pages/user/user'
-				}
-			]
-		};
-	},
-	components: {
-		uniPopup
-	},
-	watch: {
-		lang(val) {
-			console.log(val);
-			this.$set(this.tabbar[0], 'text', this.$t('hea.sy'));
-			this.$set(this.tabbar[1], 'text', this.$t('hea.shlb'));
-			this.$set(this.tabbar[2], 'text', this.$t('hea.wd'));
-		}
-	},
-	computed: {
-		...mapState(['lang']),
-		...mapState('user', ['hasLogin', 'userInfo', 'baseURL', 'urlFile'])
-	},
-	onShow() {
-		uni.setNavigationBarTitle({
-			title: this.$t('foo.wd')
-		});
-		//判断是否已经登录
-		if (this.hasLogin) {
-			this.loadBaseData();
-		} else {
-			let obj = this;
-			uni.showModal({
-				title: obj.$t('hea.login'),
-				content: obj.$t('hea.logininfo'),
-				success: e => {
-					if (e.confirm) {
-						saveUrl();
-						interceptor();
-					}
-				},
-				fail: e => {
-					console.log(e);
+	import { orderData, getUserInfo,service } from '@/api/user.js';
+	import uniPopup from '@/components/uni-popup/uni-popup.vue';
+	import uniCopy from '@/utils/uni-copy.js';
+	import { mapState, mapMutations } from 'vuex';
+	import { saveUrl, interceptor } from '@/utils/loginUtils.js';
+	export default {
+		components: {
+			uniPopup
+		},
+		data() {
+			return {
+				text:'123465'
+			}
+		},
+		filters: {
+			phone(val) {
+				let str = ''
+				if(val) {
+					val = "" + val;
+					str = val.substr(0,3) + "****" + val.substr(7)
 				}
-			});
-		}
-	},
-	methods: {
-		...mapMutations('user', ['setUserInfo', 'setOrderInfo']),
-		loadBaseData() {
-			getUserInfo({})
-				.then(({ data }) => {
-					console.log(data, 'UserInfo+++++++++++++++++');
-					this.isVip = -1;
-					if (data.activity[0].my_join) {
-						console.log(333)
-						if (data.activity[0].my_join.status == '1'){
-							this.isVip = 0;
-						}else {
-							console.log(data.activity[0].my_join.status,'123')
-							this.isVip = -1
-						}
-					}
-					if (data.activity[1].my_join) {
-						console.log(222)
-						if (data.activity[1].my_join.status == '2') {
-							console.log(111)
-							this.isVip = 2;
-						}else if (data.activity[1].my_join.status == '1'){
-							this.isVip = 1;
-						}else {
-							console.log(data.activity[0].my_join.status)
-						}
-					}
-					
-					this.setUserInfo(data);
-				})
-				.catch(e => {
-					console.log(e);
-				});
-			getApplyList({
-				page: 1,
-				limit: 1,
-				status: 0
-			}).then(({ data }) => {
-				console.log(data,'1111')
-				this.tabbar[1].count = data.count
-			});
+				return str
+			}
 		},
-		navTo(url) {
-			console.log(url);
-			if (!this.hasLogin) {
-				// 保存地址
-				saveUrl();
-				// 登录拦截
-				interceptor();
+		onShow() {
+			//判断是否已经登录
+			if (this.hasLogin) {
+				this.loadBaseData();
 			} else {
-				uni.navigateTo({
-					url
+				uni.showModal({
+					title: '登录',
+					content: '您未登录,是否马上登陆?',
+					success: e => {
+						if (e.confirm) {
+							interceptor();
+						}
+					},
+					fail: e => {
+						console.log(e);
+					}
 				});
 			}
 		},
-		open() {
-			console.log('点击出现弹窗');
-			this.$refs.popup.open();
-		},
-		// 客服弹窗 - 取消
-		cancel() {
-			this.$refs.popup.close();
+		computed: {
+			...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
 		},
-		tocall(type) {
-			// #ifdef APP-PLUS
-			console.log(type)
-			let text ='';
-			if(type == '1'){
-				text = this.text
-			}
-			if(type == '2'){
-				text = this.text1
-			}
-			if(type == '3'){
-				text = this.text2
-			}
-			uni.setClipboardData({
-				data: text,
-				success: e => {
+		methods: {
+			...mapMutations('user', ['setUserInfo', 'setOrderInfo']),
+			loadBaseData() {
+				getUserInfo({})
+					.then(({ data }) => {
+						console.log(data)
+						this.setUserInfo(data);
+						// 获取用户数据完毕后在获取订单数据防止多次跳转到登录页
+						orderData({})
+							.then(({ data }) => {
+								this.setOrderInfo(data);
+							})
+							.catch(e => {
+								this.setOrderInfo({
+									complete_count: 0, //完成
+									received_count: 0, //待收货
+									unshipped_count: 0, //待发货
+									order_count: 0, //订单总数
+									unpaid_count: 0 //待付款
+								});
+							});
+					})
+					.catch(e => {
+						console.log(e);
+					});
+			},
+			nav(url) {
+				console.log(url)
+				if(!this.hasLogin) {
+					// 保存地址
+					saveUrl();
+					// 登录拦截
+					interceptor();
+				}else {
+					uni.navigateTo({
+						url
+					})
+				}
+				
+			},
+			open(){
+				console.log('点击出现弹窗');
+				this.$refs.popup.open();
+			},
+			// 客服弹窗 - 复制微信
+			comfirm(value) {
+				
+				let content = value; //需要复制的内容
+				console.log('复制的内容:', content);
+				// content = typeof content === 'string' ? content : content.toString(); // 复制内容,必须字符串,数字需要转换为字符串
+				const result = uniCopy({content});
+				if (result === false) {
 					uni.showToast({
-						title: '复制成功!'
+						title: '不支持'
 					});
-				},
-				fail(e) {
+				} else {
 					uni.showToast({
-						title: '复制失败',
-						icon: false
+						title: '复制成功',
+						icon: 'none'
 					});
-					console.log(e);
 				}
-			});
-			// #endif
+				this.$refs.popup.close();
+			},
+			// 客服弹窗 - 取消
+			cancel() {
+				this.$refs.popup.close();
+			}
 		}
 	}
-};
 </script>
 
 <style lang="scss">
-page,
-.container {
-	background: #000;
-	height: 100%;
-}
-.user-info-box {
-	padding: 40rpx 46rpx 0;
-	height: 180rpx;
-	color: white;
-	display: flex;
-	align-items: center;
-	justify-content: space-between;
-	position: relative;
-	z-index: 1;
-	.detail {
-		height: 130rpx;
-		.portrait-box {
-			height: 100%;
-			.portrait {
-				width: 130rpx;
-				height: 100%;
-				border: 5rpx solid #fff;
-				border-radius: 50%;
-			}
+	.container {
+		background-color: #fff;
+	}
+
+	.user {
+		image {
+			width: 750rpx;
+			height: 480rpx;
+			position: relative;
 		}
-		.info-box {
-			margin-left: 20rpx;
-			line-height: 1.5;
-			.username {
-				font-size: $font-lg + 6rpx;
-				height: 100%;
+
+		.infor {
+			height: 126.5rpx;
+			width: 100%;
+			// background-color: pink;
+			display: flex;
+			position: absolute;
+			top: 0;
+			display: flex;
+			justify-content: space-around; // 水平平均分布
+			align-items: center; // 垂直居中 
+			margin-top: 138rpx;
+
+			.infor-left {
+				width: 100%;
+				height: 126.5rpx;
+				display: flex;
+				align-items: center;
+				padding-left: 23rpx;
+
+				image {
+					width: 126.5rpx;
+					height: 126.5rpx;
+					border-radius: 50%;
+					flex-shrink: 0;
+				}
+
+				.info-box {
+					margin-left: 21rpx;
+				}
+
+				.username {
+					font-size: 34rpx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #3F7C1F;
+				}
+
+				.phone {
+					padding-top: 10rpx;
+					font-size: 26rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #3F7C1F;
+				}
+			}
+
+			.infor-right {
+				width: 165rpx;
+				height: 64rpx;
+				background: #FFFFFF;
+				border-radius: 32px 0px 0px 32px;
+				display: flex;
+				align-items: center; // 垂直居中 
+				padding-left: 20rpx;
+
+				image {
+					width: 32rpx;
+					height: 31rpx;
+				}
+
+				.setting {
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #3F7C1F;
+					padding-left: 10rpx;
+				}
 			}
 		}
-		.vip {
+
+		// 我的订单
+		.order-box {
+			width: 710rpx;
+			height: 221rpx;
+			background: #FFFFFF;
+			box-shadow: 0rpx 0rpx 20rpx 0rpx rgba(50, 50, 52, 0.06);
+			border-radius: 20rpx;
+			position: absolute;
+			top: 335rpx;
+			// display: flex;
+			// justify-content: center; // 水平居中
 			margin-left: 20rpx;
-			width: 122rpx;
-			height: 36rpx;
-			image {
+
+			.my-order {
+				height: 73rpx;
 				width: 100%;
-				height: 100%;
+				border-bottom: 2rpx solid #F5F5F5;
+				display: flex;
+				align-items: center;
+				justify-content: flex-start;
+
+				.order {
+					font-size: 30rpx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #333333;
+					margin-left: 36rpx;
+					margin-right: 520rpx;
+				}
+
+				image {
+					width: 12rpx;
+					height: 22rpx;
+				}
 			}
-		}
-	}
-	.config {
-		font-size: 48rpx;
-	}
-}
-.vip-box {
-	width: 690rpx;
-	height: 200rpx;
-	margin: 60rpx auto 0;
-	image {
-		width: 100%;
-		height: 100%;
-	}
-}
 
-.tt {
-	margin: 0 auto;
-	width: 750rpx;
-	padding: 40rpx 70rpx;
-	background-color: #000;
+			.order-section {
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
 
-	.tt-box {
-		padding: 20rpx;
-		height: 100rpx;
-		display: flex;
-		align-items: center;
-		border-bottom: 1px solid #838383;
-		.tt-icon1 {
-			width: 42rpx;
-			height: 37rpx;
-		}
-		.tt-icon2 {
-			width: 49rpx;
-			height: 38rpx;
-		}
-		.tt-icon3 {
-			width: 46rpx;
-			height: 40rpx;
-		}
-		.tt-icon4 {
-			width: 40rpx;
-			height: 42rpx;
-		}
-		.tt-icon5 {
-			width: 44rpx;
-			height: 44rpx;
-		}
-		.tt-txt {
-			font-size: 28rpx;
-			font-family: PingFang SC;
-			font-weight: 500;
-			color: #ffffff;
-			margin-left: 36rpx;
-			color: #ffffff;
-			flex: 1;
-		}
+				.order-item {
+					flex: 1;
+					display: flex;
+					flex-direction: column;
+					align-items: center;
+					justify-content: center;
+					margin-top: 30rpx;
 
-		.next-icon {
-			width: 16rpx;
-			height: 25rpx;
-		}
-	}
+					image {
+						width: 42rpx;
+						height: 42rpx;
+					}
 
-	.border-b {
-		border-bottom: 1px solid #f0f0f0;
-	}
-}
-.popup-box {
-	width: 522rpx;
-	padding-bottom: 40rpx;
-	background-color: #ffffff;
-	border-radius: 20rpx;
-	position: relative;
-	.img {
-		position: relative;
-		top: -56rpx;
-		left: 0;
-		width: 522rpx;
-		height: 132rpx;
-		display: flex;
-		justify-content: center;
-		image {
-			border-radius: 20rpx 20rpx 0 0;
-			width: 450rpx;
-			height: 132rpx;
+					.text {
+						margin-top: 20rpx;
+						font-size: 24rpx;
+						color: #333333;
+					}
+				}
+			}
 		}
 	}
 
-	.mian {
-		margin-top: -44rpx;
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		// padding: 32rpx 32rpx;
-		background-color: #ffffff;
-		border-radius: 0 0 20rpx 20rpx;
-		text-align: center;
+	.item-box {
+		padding-top: 80rpx;
+		height: 900rpx;
 
-		.delivery {
-			font-size: 40rpx;
-			color: #333333;
+		// background-color: #fff;
+		// background-color: pink;
+		.order-section {
 			display: flex;
 			align-items: center;
-			flex-direction: column;
-			.title {
-			}
-			image {
-				margin-top: 48rpx;
-				width: 172rpx;
-				height: 160rpx;
+			justify-content: space-between; // 水平平均分布
+
+			.order-item {
+				flex: 1;
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				justify-content: center;
+				margin-top: 30rpx;
+
+				image {
+					width: 90rpx;
+					height: 90rpx;
+				}
+
+				.text {
+					margin-top: 10rpx;
+					font-size: 26rpx;
+					color: #3B3B3B;
+				}
 			}
 		}
+	}
 
-		.nocancel {
-			font-size: 32rpx;
-			color: #333333;
-			margin-top: 14rpx;
-		}
+	.btm {
+		margin-top: 40rpx;
+		padding-bottom: 200rpx;
+		margin-left: 42rpx;
 
-		.comfirm-box {
-			margin-top: 52rpx;
+		.ul-btm {
+			width: 100%;
+			height: 100rpx;
 			display: flex;
-			// margin-bottom: 32rpx;
+			// justify-content: center; // 水平居中
+			align-items: center; // 水平居中
 
-			// justify-content: space-around;
-			.cancel {
-				margin-left: 32rpx;
-				display: flex;
-				align-items: center;
-				justify-content: center;
-				width: 197rpx;
-				height: 74rpx;
-				border: 1px solid #dcc786;
-				border-radius: 38rpx;
+			// justify-content: center; // 垂直居中
+			image {
+				width: 35rpx;
+				height: 35rpx;
+			}
 
-				font-size: 32rpx;
-				color: #605128;
+			.text {
+				margin-right: 468rpx;
+				margin-left: 30rpx;
 			}
 
-			.comfirm {
-				margin-left: 32rpx;
+			.jiantou {
+				width: 16rpx;
+				height: 30rpx;
+			}
+		}
+	}
+	.popup-box {
+		width: 522rpx;
+		height: 605rpx;
+		background-color: #ffffff;
+		border-radius: 20rpx;
+		position: relative;
+		.img {
+			position: relative;
+			top: -56rpx;
+			left: 0;
+			width: 522rpx;
+			height: 132rpx;
+			display: flex;
+			justify-content: center;
+			image {
+				border-radius: 20rpx 20rpx 0 0;
+				width: 450rpx;
+				height: 132rpx;
+			}
+		}
+	
+		.mian {
+			margin-top: -44rpx;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			// padding: 32rpx 32rpx;
+			background-color: #ffffff;
+			border-radius: 0 0 20rpx 20rpx;
+			text-align: center;
+	
+			.delivery {
+				font-size: 40rpx;
+				color: #333333;
 				display: flex;
 				align-items: center;
-				justify-content: center;
-				width: 197rpx;
-				height: 74rpx;
-				background: linear-gradient(-90deg, #d1ba77 0%, #f7e8ad 100%);
-				border-radius: 38px;
+				flex-direction: column;
+				.title {
+				}
+				image {
+					margin-top: 48rpx;
+					width: 172rpx;
+					height: 160rpx;
+				}
+			}
+	
+			.nocancel {
 				font-size: 32rpx;
-				color: #605128;
+				color: #333333;
+				margin-top: 14rpx;
+			}
+	
+			.comfirm-box {
+				margin-top: 52rpx;
+				display: flex;
+				// margin-bottom: 32rpx;
+	
+				// justify-content: space-around;
+				.cancel {
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					width: 197rpx;
+					height: 74rpx;
+					border: 1px solid #dcc786;
+					border-radius: 38rpx;
+	
+					font-size: 32rpx;
+					color: #605128;
+				}
+	
+				.comfirm {
+					margin-left: 32rpx;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					width: 197rpx;
+					height: 74rpx;
+					background: linear-gradient(-90deg, #d1ba77 0%, #f7e8ad 100%);
+					border-radius: 38px;
+					font-size: 32rpx;
+					color: #605128;
+				}
 			}
 		}
 	}
-}
+	
 </style>

+ 191 - 0
pages/user/withdraw.vue

@@ -0,0 +1,191 @@
+<template>
+	<view class="container">
+		<view class="header">
+			<view class="row-box">
+				<view class="title">可提现金额</view>
+				<view class="row">
+					<view class="tit">¥{{money}}</view>
+					
+				</view>
+			</view>
+			<view class="row-box">
+				<view class="title">申请提现金额</view>
+				<view class="row">
+					<input class="counts" type="number" v-model="withdrawal" placeholder="请输入金额"/>
+				</view>
+			</view>
+			<view class="buttom" @click="withdrawal = money">全部提现</view>
+		</view>
+		<view class="conent">
+			<view class="text">提现到</view>
+			<radio-group @change="tabRadio">
+				<label>
+					<view class="box">
+						<image src="../../static/img/img35.png" mode="scaleToFill"></image>
+						<view class="title-box">
+							<view class="title"><text>微信支付</text></view>
+						</view>
+						<view class="right">
+							<radio value="weixin" color="#FF4C4C" :checked="type == 'weixin'" />
+						</view>
+					</view>
+				</label>
+				<label>
+					<view class="box">
+						<image src="../../static/img/img36.png" mode="scaleToFill"></image>
+						<view class="title-box">
+							<view class="title"><text>银行账户</text></view>
+						</view>
+						<view class="right">
+							<radio value="bank" color="#FF4C4C" :checked="type == 'bank'" />
+						</view>
+					</view>
+				</label>
+			</radio-group>
+			<view class="btn" @click="nav('/pages/user/refer')">
+				<view class="title" >提交申请</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				type: 'weixin',
+				money: '0.00', //可提现金额
+				withdrawal: '' //提现金额
+			}
+		},
+		methods: {
+			tabRadio(e) {
+				console.log(e)
+				this.type = e.detail.value;
+			},
+			nav (url) {
+				uni.navigateTo({
+					url
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.header {
+		height: 330rpx;
+		background-color: #fff;
+
+		.row-box {
+			height: 130rpx;
+			width: 700rpx;
+			background-color: #fff;
+			display: flex;
+			align-items: center;
+			border-bottom: 1rpx solid #E6E6E6;
+			margin: 0 auto;
+
+			.title {
+				font-size: 32rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #333333;
+				width: 100%;
+			}
+
+			.row {
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+
+				.tit {
+					width: 300rpx;
+
+				}
+
+				.counts {
+					// text-align: right;
+					// width: 100rpx;
+					font-size: 50rpx;
+					font-family: Source Han Sans CN;
+					font-weight: 500;
+					color: #333333;
+
+					// &::before {
+					// 	content: '¥';
+						
+					// }
+				}
+			}
+		}
+
+		.buttom {
+			margin-top: 10rpx;
+			margin-left: 620rpx;
+			flex-direction: column;
+			width: 105rpx;
+			height: 25rpx;
+			font-size: 26rpx;
+			font-family: Source Han Sans CN;
+			font-weight: 400;
+			color: #FF4C4C;
+			line-height: 42rpx;
+		}
+	}
+
+	.conent {
+		margin-top: 20rpx;
+		height: 890rpx;
+		background-color: #fff;
+
+		.text {
+			font-size: 30rpx;
+			font-family: Source Han Sans CN;
+			font-weight: 400;
+			color: #333333;
+			margin-left: 20rpx;
+			padding-top: 20rpx;
+		}
+
+		.box {
+			display: flex;
+			align-items: center;
+			width: 710rpx;
+			height: 100rpx;
+			border-bottom: 1rpx solid #E6E6E6;
+			margin-left: 20rpx;
+
+			image {
+				width: 40rpx;
+				height: 40rpx;
+				margin-left: 20rpx;
+				margin-right: 20rpx;
+			}
+
+			.title-box {
+				margin-right: 440rpx;
+			}
+		}
+
+		.btn {
+			margin-top: 120rpx;
+			width: 670rpx;
+			height: 100rpx;
+			background: #6EAB4E;
+			border-radius: 10rpx;
+			display: flex;
+			justify-content: center;
+			margin-left: 40rpx;
+
+			.title {
+				display: flex;
+				align-items: center;
+				font-size: 32rpx;
+				font-family: Source Han Sans CN;
+				font-weight: 500;
+				color: #FFFFFF;
+			}
+		}
+	}
+</style>

+ 330 - 321
pages/user/withdrawal.vue

@@ -1,321 +1,330 @@
-<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>
+<template>
+	<view class="content">
+		<view class="content-money">
+			<view class="flex ">
+				<view class="buttom" style="width: 100%;">
+					<view class="icon">{{ money || userInfo.now_money }}</view>
+					<text class="text">可提现金额</text>
+				</view>
+				<!-- <view class="interval"></view>
+				<view class="buttom">
+					<view class=" icon">{{ dai || 0 }}</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="moneyMin" placeholder-class="placeholder" />
+				<view class="buttom" @click="withdrawal = money">全部提现</view>
+			</view>
+		</view>
+		<view class="list">
+			<radio-group @change="tabRadio">
+				<label>
+					<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>
+						<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 != null">{{ bankData.bank + ' ' + bankData.bankno }}</text>
+								<text v-else>请创建银行账号</text>
+							</view>
+							<view class="node">
+								<text v-if="bankData.fullname != null">真实姓名({{ bankData.fullname}})</text>
+							</view>
+						</view>
+						<view class="right"><radio value="bank" color="#5dbc7c" :checked="type == 'bank'" /></view>
+					</view>
+				</label>
+			</radio-group>
+		</view>
+		<button class="add-btn up" @click="confirm">提交申请</button>
+		<button class="add-btn modified" @click="navTo('/pages/money/account')">账号管理</button>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex';
+// import { getMoneyStyle } from '@/utils/rocessor.js';
+import { extractCash, extractBank, aliInfo, bankInfo,userBalance } from '@/api/wallet.js';
+import uniNoticeBar from '@/components/uni-notice-bar/uni-notice-bar.vue';
+export default {
+	// filters: {
+	// 	getMoneyStyle
+	// },
+	components: {
+		uniNoticeBar
+	},
+	data() {
+		return {
+			type: 'alipay', //提现方式
+			money: '0.00', //可提现金额
+			freeze: '0.0', //冻结金额
+			withdrawal: '', //提现金额
+			minPrice: '', //最少提现金额
+			aliData: {fullname:'',alino:''},
+			bankData: {fullname:'',bank:'',bankno:''},
+			// dai: '',//待审核金额
+			// #ifdef H5
+			weichatBsrowser: false
+			// #endif
+		};
+	},
+	computed: {
+		...mapState('user', ['userInfo', 'orderInfo', 'hasLogin']),
+		moneyMin() {
+			return '最低提现金额' + this.minPrice + '元'
+		}
+	},
+	onShow() {
+		
+		this.weichatBsrowser = uni.getStorageSync('weichatBrowser');
+		
+		//加载提现信息
+		this.loadData();
+		// 加载提款账号信息
+		console.log(this.userInfo,'123')
+		this.aliData.fullname = this.userInfo.alipay_name;
+		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 loadAli(source) {
+			aliInfo({}).then(e => {
+				this.aliData = e.data;
+			});
+		},
+		// 加载银行卡信息
+		async loadBank() {
+			bankInfo({}).then(e => {
+				this.bankData = e.data;
+			});
+		},
+		// 加载余额信息
+		async loadData() {
+			uni.showLoading({
+				title: '加载中',
+				// mask: true
+			});
+			// userBalance({}).then(({ data }) => {
+			// 	console.log(data,'账号信息')
+			// });
+			extractBank({}).then(({ data }) => {
+				this.money = data.brokerage_price;
+				this.minPrice = +data.minPrice;
+				uni.hideLoading();
+				// this.dai = data.now_money_extract.toFixed(2);
+			})
+		},
+		// 跳转
+		navTo(url) {
+			uni.navigateTo({
+				url: url
+			});
+		},
+		// 切换选中对象
+		tabRadio(e) {
+			this.type = e.detail.value;
+		},
+		// 提交
+		confirm() {
+			if (this.withdrawal%100 != 0) {
+				this.$api.msg('提现金额必须为整百')
+				return;
+			}
+			let data = {
+				extract_type: this.type, //bank -银行卡 alipay-支付宝 weixin-微信
+				money: this.withdrawal, //金额
+				balance_type: 1//0佣金1余额
+			}
+			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;
+			}
+			uni.showLoading({
+				title: '提交中...',
+				mask: true
+			});
+			extractCash(data)
+				.then(e => {
+					uni.hideLoading();
+					uni.showToast({
+						title: '提交成功',
+						duration: 2000,
+						position: 'top'
+					});
+					// 重新加载数据
+					this.loadData()
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		}
+	}
+};
+</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;
+	}
+	.tip {
+		font-size: $font-base - 8rpx;
+		color: #c1c1c1;
+	}
+	.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: $base-color;
+			font-size: $font-base;
+		}
+	}
+}
+.add-btn {
+	&.modified {
+		color: $base-color;
+	}
+	&.up {
+		background:$base-color;
+		color: #ffffff;
+	}
+	border: 1px solid $base-color;
+	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
plugin/.git.rar


+ 554 - 551
static/css/cmy.css

@@ -1,551 +1,554 @@
-/*初始化类*/
-@font-face {
-	font-family: 'iconfont';
-	/* project id 1482221 */
-	src: url('https://at.alicdn.com/t/font_1482221_x9emymthrxs.eot');
-	src: url('https://at.alicdn.com/t/font_1482221_x9emymthrxs.eot?#iefix') format('embedded-opentype'),
-		url('https://at.alicdn.com/t/font_1482221_x9emymthrxs.woff2') format('woff2'),
-		url('https://at.alicdn.com/t/font_1482221_x9emymthrxs.woff') format('woff'),
-		url('https://at.alicdn.com/t/font_1482221_x9emymthrxs.ttf') format('truetype'),
-		url('https://at.alicdn.com/t/font_1482221_x9emymthrxs.svg#iconfont') format('svg');
-}
-
-.acea-row {
-	display: -webkit-box;
-	display: -moz-box;
-	display: -webkit-flex;
-	display: -ms-flexbox;
-	display: flex;
-	-webkit-box-lines: multiple;
-	-moz-box-lines: multiple;
-	-o-box-lines: multiple;
-	-webkit-flex-wrap: wrap;
-	-ms-flex-wrap: wrap;
-	flex-wrap: wrap
-}
-
-.acea-row.row-middle {
-	-webkit-box-align: center;
-	-moz-box-align: center;
-	-o-box-align: center;
-	-ms-flex-align: center;
-	-webkit-align-items: center;
-	align-items: center
-}
-
-.bg-color-red {
-	background-color: #e93323 !important;
-}
-
-.acea-row.row-right {
-	-webkit-box-pack: end;
-	-moz-box-pack: end;
-	-o-box-pack: end;
-	-ms-flex-pack: end;
-	-webkit-justify-content: flex-end;
-	justify-content: flex-end
-}
-
-.acea-row.row-between-wrapper {
-	-webkit-box-align: center;
-	-moz-box-align: center;
-	-o-box-align: center;
-	-ms-flex-align: center;
-	-webkit-align-items: center;
-	align-items: center;
-	-webkit-box-pack: justify;
-	-moz-box-pack: justify;
-	-o-box-pack: justify;
-	-ms-flex-pack: justify;
-	-webkit-justify-content: space-between;
-	justify-content: space-between
-}
-
-.acea-row.row-column-around {
-	-webkit-flex-direction: column;
-	-ms-flex-direction: column;
-	flex-direction: column;
-	justify-content: space-around;
-	-webkit-justify-content: space-around
-}
-
-.acea-row.row-center-wrapper {
-	-webkit-box-align: center;
-	-moz-box-align: center;
-	-o-box-align: center;
-	-ms-flex-align: center;
-	-webkit-align-items: center;
-	align-items: center;
-	-webkit-box-pack: center;
-	-moz-box-pack: center;
-	-o-box-pack: center;
-	-ms-flex-pack: center;
-	-webkit-justify-content: center;
-	justify-content: center
-}
-
-.iconfont {
-	font-family: "iconfont" !important;
-	font-size: 34rpx;
-	font-style: normal;
-	-webkit-font-smoothing: antialiased;
-	-webkit-text-stroke-width: 0rpx;
-	-moz-osx-font-smoothing: grayscale;
-}
-
-.iconedit:before {
-	content: "\e649";
-}
-
-.iconfavorfill:before {
-	content: "\e64b";
-}
-
-.iconfavor:before {
-	content: "\e64c";
-}
-
-.iconlocation:before {
-	content: "\e651";
-}
-
-.iconroundcheckfill:before {
-	content: "\e656";
-}
-
-.iconroundcheck:before {
-	content: "\e657";
-}
-
-.iconunfold:before {
-	content: "\e661";
-}
-
-.iconlikefill:before {
-	content: "\e668";
-}
-
-.iconlike:before {
-	content: "\e669";
-}
-
-.iconshop:before {
-	content: "\e676";
-}
-
-.iconcart:before {
-	content: "\e6af";
-}
-
-.icondelete:before {
-	content: "\e6b4";
-}
-
-.iconhome:before {
-	content: "\e6b8";
-}
-
-.iconcartfill:before {
-	content: "\e6b9";
-}
-
-.iconhomefill:before {
-	content: "\e6bb";
-}
-
-.iconlock:before {
-	content: "\e6c0";
-}
-
-.iconfriendadd:before {
-	content: "\e6ca";
-}
-
-.iconfold:before {
-	content: "\e6de";
-}
-
-.iconapps:before {
-	content: "\e729";
-}
-
-.iconadd:before {
-	content: "\e767";
-}
-
-.iconmove:before {
-	content: "\e768";
-}
-
-.icontriangledownfill:before {
-	content: "\e79b";
-}
-
-.icontriangleupfill:before {
-	content: "\e79c";
-}
-
-.iconshaixuan:before {
-	content: "\e74a";
-}
-
-.iconyanzhengma:before {
-	content: "\e684";
-}
-
-.iconjifen:before {
-	content: "\e60f";
-}
-
-.iconwuliuxinxi:before {
-	content: "\e62b";
-}
-
-.iconmessage:before {
-	content: "\e78a";
-}
-
-.iconsetting:before {
-	content: "\e78e";
-}
-
-.iconaddition:before {
-	content: "\e6e0";
-}
-
-.iconclose:before {
-	content: "\e6e9";
-}
-
-.iconenter:after {
-	content: "\e6f8";
-}
-
-.iconprompt:before {
-	content: "\e71b";
-}
-
-.iconreturn:before {
-	content: "\e720";
-}
-
-.iconsearch:before {
-	content: "\e741";
-}
-
-.iconpengyouquan:before {
-	content: "\e62c";
-}
-
-.iconweixin:before {
-	content: "\e60e";
-}
-
-.iconzhifubao:before {
-	content: "\e673";
-}
-
-.iconyue:before {
-	content: "\e618";
-}
-
-.iconweixin1:before {
-	content: "\e622";
-}
-
-.iconlock1:before {
-	content: "\e64d";
-}
-
-.iconuser:before {
-	content: "\e64e";
-}
-
-.iconchenggongtixianshouyi:before {
-	content: "\e64f";
-}
-
-.iconviptuiguangdingdan:before {
-	content: "\e650";
-}
-
-.icondaifukuan:before {
-	content: "\e652";
-}
-
-.icondaijiesuanshouyi:before {
-	content: "\e653";
-}
-
-.icondaidakuanshouyi:before {
-	content: "\e654";
-}
-
-.icondaifahuo:before {
-	content: "\e655";
-}
-
-.icondaishouhuoshouyi:before {
-	content: "\e658";
-}
-
-.icondaishouhuo:before {
-	content: "\e659";
-}
-
-.iconwuxiaoshouyi:before {
-	content: "\e65a";
-}
-
-.icontixianmingxi:before {
-	content: "\e65b";
-}
-
-.iconshouyi:before {
-	content: "\e65c";
-}
-
-.iconkouchutixianshouxufei:before {
-	content: "\e65d";
-}
-
-.iconyishenqingshouyi:before {
-	content: "\e65e";
-}
-
-.icontuihuanhuo:before {
-	content: "\e65f";
-}
-
-
-/*水平线*/
-.hr {
-	width: 100%;
-	position: relative;
-	border-bottom: 1px solid #dddddd;
-	/* height: 0.5rpx; */
-}
-
-/* 一行显示 */
-.clamp {
-	overflow: hidden;
-	text-overflow: ellipsis;
-	white-space: nowrap;
-	display: block;
-}
-
-/* 二行显示 */
-.clamp2 {
-	overflow: hidden;
-	text-overflow: ellipsis;
-	display: -webkit-box;
-	-webkit-line-clamp: 2;
-	-webkit-box-orient: vertical;
-}
-
-/* 二行显示 */
-.ellipsis {
-	overflow: hidden;
-	text-overflow: ellipsis;
-	display: -webkit-box;
-	-webkit-box-orient: vertical;
-	-webkit-line-clamp: 2;
-}
-
-.common-hover {
-	background: #f5f5f5;
-}
-
-/* 角标 */
-.corner {
-	background-color: #e51c23;
-	position: absolute;
-	right: -18rpx;
-	top: -18rpx;
-	color: #FFFFFF;
-	text-align: center;
-	border-radius: 999px;
-	font-size: 24rpx !important;
-	min-width: 35rpx;
-	min-height: 35rpx;
-	display: flex;
-	align-items: center;
-	justify-content: center;
-	line-height: 1;
-}
-
-.flex_item {
-	display: flex;
-	align-items: center;
-	/* justify-content: space-between; */
-}
-
-/* 左右顶格加上下居中 */
-.flex-between-center {
-	display: flex;
-	justify-content: space-between;
-	align-items: center;
-}
-
-/* flex布局-整体居中 */
-.flex-center {
-	display: flex;
-	align-items: center;
-	justify-content: center;
-}
-
-.flex-start {
-	display: flex;
-	align-items: center;
-	justify-content: flex-start;
-}
-
-/*文字对齐*/
-.text-left {
-	text-align: left !important;
-}
-
-.text-center {
-	text-align: center !important;
-}
-
-.text-justify {
-	text-align: justify !important;
-}
-
-.text-right {
-	text-align: right !important;
-}
-
-.text-default {
-	color: #212121 !important;
-}
-
-.text-white {
-	color: #ffffff !important;
-}
-
-.text-primary {
-	color: #00bcd4 !important;
-}
-
-.text-success {
-	color: #009688 !important;
-}
-
-.text-info {
-	color: #03a9f4 !important;
-}
-
-.text-warning {
-	color: #ffc107 !important;
-}
-
-.text-danger {
-	color: #e51c23 !important;
-}
-
-.text-pink {
-	color: #e91e63 !important;
-}
-
-.text-purple {
-	color: #673ab7 !important;
-}
-
-.text-indigo {
-	color: #3f51b5 !important;
-}
-
-.text-gray {
-	color: #999999 !important;
-}
-
-.bg-default {
-	background-color: #f5f5f5 !important;
-}
-
-.bg-primary {
-	background-color: #00bcd4 !important;
-}
-
-.bg-success {
-	background-color: #009688 !important;
-}
-
-.bg-info {
-	background-color: #03a9f4 !important;
-}
-
-.bg-warning {
-	background-color: #FFB238 !important;
-}
-
-.bg-danger {
-	background-color: #DC4D46 !important;
-}
-
-.bg-pink {
-	background-color: #e91e63 !important;
-}
-
-.bg-purple {
-	background-color: #673ab7 !important;
-}
-
-.bg-indigo {
-	background-color: #3f51b5 !important;
-}
-
-.bg-white {
-	background-color: white !important;
-}
-
-.bg-gray {
-	background-color: #e3e3e3 !important;
-}
-
-/* 边框 */
-.border-radius-15 {
-	border-radius: 15rpx;
-}
-
-.border-radius-10 {
-	border-radius: 10rpx;
-}
-
-.border-radius-all {
-	border-radius: 1000rpx;
-}
-
-/* 底部边线 */
-.borde-b {
-	border-bottom: 1px solid #dddddd;
-}
-
-/* 弹性盒子 */
-.flex {
-	display: flex;
-	align-items: center;
-	justify-content: space-between;
-}
-
-.items-left {
-	justify-content: flex-start;
-}
-
-.items-right {
-	justify-content: flex-end;
-}
-
-.flex-shrink-false {
-	flex-shrink: 0;
-}
-
-.flex-grow-true {
-	flex-grow: 1;
-}
-
-.position-relative {
-	position: relative;
-}
+/*初始化类*/
+@font-face {
+	font-family: 'iconfont';
+	/* project id 1482221 */
+	src: url('https://at.alicdn.com/t/font_1482221_x9emymthrxs.eot');
+	src: url('https://at.alicdn.com/t/font_1482221_x9emymthrxs.eot?#iefix') format('embedded-opentype'),
+		url('https://at.alicdn.com/t/font_1482221_x9emymthrxs.woff2') format('woff2'),
+		url('https://at.alicdn.com/t/font_1482221_x9emymthrxs.woff') format('woff'),
+		url('https://at.alicdn.com/t/font_1482221_x9emymthrxs.ttf') format('truetype'),
+		url('https://at.alicdn.com/t/font_1482221_x9emymthrxs.svg#iconfont') format('svg');
+}
+
+.acea-row {
+	display: -webkit-box;
+	display: -moz-box;
+	display: -webkit-flex;
+	display: -ms-flexbox;
+	display: flex;
+	-webkit-box-lines: multiple;
+	-moz-box-lines: multiple;
+	-o-box-lines: multiple;
+	-webkit-flex-wrap: wrap;
+	-ms-flex-wrap: wrap;
+	flex-wrap: wrap
+}
+
+.acea-row.row-middle {
+	-webkit-box-align: center;
+	-moz-box-align: center;
+	-o-box-align: center;
+	-ms-flex-align: center;
+	-webkit-align-items: center;
+	align-items: center
+}
+
+.bg-color-red {
+	background-color: #e93323 !important;
+}
+
+.acea-row.row-right {
+	-webkit-box-pack: end;
+	-moz-box-pack: end;
+	-o-box-pack: end;
+	-ms-flex-pack: end;
+	-webkit-justify-content: flex-end;
+	justify-content: flex-end
+}
+
+.acea-row.row-between-wrapper {
+	-webkit-box-align: center;
+	-moz-box-align: center;
+	-o-box-align: center;
+	-ms-flex-align: center;
+	-webkit-align-items: center;
+	align-items: center;
+	-webkit-box-pack: justify;
+	-moz-box-pack: justify;
+	-o-box-pack: justify;
+	-ms-flex-pack: justify;
+	-webkit-justify-content: space-between;
+	justify-content: space-between
+}
+
+.acea-row.row-column-around {
+	-webkit-flex-direction: column;
+	-ms-flex-direction: column;
+	flex-direction: column;
+	justify-content: space-around;
+	-webkit-justify-content: space-around
+}
+
+.acea-row.row-center-wrapper {
+	-webkit-box-align: center;
+	-moz-box-align: center;
+	-o-box-align: center;
+	-ms-flex-align: center;
+	-webkit-align-items: center;
+	align-items: center;
+	-webkit-box-pack: center;
+	-moz-box-pack: center;
+	-o-box-pack: center;
+	-ms-flex-pack: center;
+	-webkit-justify-content: center;
+	justify-content: center
+}
+
+.iconfont {
+	font-family: "iconfont" !important;
+	font-size: 34rpx;
+	font-style: normal;
+	-webkit-font-smoothing: antialiased;
+	-webkit-text-stroke-width: 0rpx;
+	-moz-osx-font-smoothing: grayscale;
+}
+
+.iconedit:before {
+	content: "\e649";
+}
+
+.iconfavorfill:before {
+	content: "\e64b";
+}
+
+.iconfavor:before {
+	content: "\e64c";
+}
+
+.iconlocation:before {
+	content: "\e651";
+}
+
+.iconroundcheckfill:before {
+	content: "\e656";
+}
+
+.iconroundcheck:before {
+	content: "\e657";
+}
+
+.iconunfold:before {
+	content: "\e661";
+}
+
+.iconlikefill:before {
+	content: "\e668";
+}
+
+.iconlike:before {
+	content: "\e669";
+}
+
+.iconshop:before {
+	content: "\e676";
+}
+
+.iconcart:before {
+	content: "\e6af";
+}
+
+.icondelete:before {
+	content: "\e6b4";
+}
+
+.iconhome:before {
+	content: "\e6b8";
+}
+
+.iconcartfill:before {
+	content: "\e6b9";
+}
+
+.iconhomefill:before {
+	content: "\e6bb";
+}
+
+.iconlock:before {
+	content: "\e6c0";
+}
+
+.iconfriendadd:before {
+	content: "\e6ca";
+}
+
+.iconfold:before {
+	content: "\e6de";
+}
+
+.iconapps:before {
+	content: "\e729";
+}
+
+.iconadd:before {
+	content: "\e767";
+}
+
+.iconmove:before {
+	content: "\e768";
+}
+
+.icontriangledownfill:before {
+	content: "\e79b";
+}
+
+.icontriangleupfill:before {
+	content: "\e79c";
+}
+
+.iconshaixuan:before {
+	content: "\e74a";
+}
+
+.iconyanzhengma:before {
+	content: "\e684";
+}
+
+.iconjifen:before {
+	content: "\e60f";
+}
+
+.iconwuliuxinxi:before {
+	content: "\e62b";
+}
+
+.iconmessage:before {
+	content: "\e78a";
+}
+
+.iconsetting:before {
+	content: "\e78e";
+}
+
+.iconaddition:before {
+	content: "\e6e0";
+}
+
+.iconclose:before {
+	content: "\e6e9";
+}
+
+.iconenter:after {
+	content: "\e6f8";
+}
+
+.iconprompt:before {
+	content: "\e71b";
+}
+
+.iconreturn:before {
+	content: "\e720";
+}
+
+.iconsearch:before {
+	content: "\e741";
+}
+
+.iconpengyouquan:before {
+	content: "\e62c";
+}
+
+.iconweixin:before {
+	content: "\e60e";
+}
+
+.iconzhifubao:before {
+	content: "\e673";
+}
+
+.iconyue:before {
+	content: "\e618";
+}
+
+.iconweixin1:before {
+	content: "\e622";
+}
+
+.iconlock1:before {
+	content: "\e64d";
+}
+
+.iconuser:before {
+	content: "\e64e";
+}
+
+.iconchenggongtixianshouyi:before {
+	content: "\e64f";
+}
+
+.iconviptuiguangdingdan:before {
+	content: "\e650";
+}
+
+.icondaifukuan:before {
+	content: "\e652";
+}
+
+.icondaijiesuanshouyi:before {
+	content: "\e653";
+}
+
+.icondaidakuanshouyi:before {
+	content: "\e654";
+}
+
+.icondaifahuo:before {
+	content: "\e655";
+}
+
+.icondaishouhuoshouyi:before {
+	content: "\e658";
+}
+
+.icondaishouhuo:before {
+	content: "\e659";
+}
+
+.iconwuxiaoshouyi:before {
+	content: "\e65a";
+}
+
+.icontixianmingxi:before {
+	content: "\e65b";
+}
+
+.iconshouyi:before {
+	content: "\e65c";
+}
+
+.iconkouchutixianshouxufei:before {
+	content: "\e65d";
+}
+
+.iconyishenqingshouyi:before {
+	content: "\e65e";
+}
+
+.icontuihuanhuo:before {
+	content: "\e65f";
+}
+
+
+/*水平线*/
+.hr {
+	width: 100%;
+	position: relative;
+	border-bottom: 1px solid #dddddd;
+	/* height: 0.5rpx; */
+}
+
+/* 一行显示 */
+.clamp {
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	display: block;
+}
+
+/* 二行显示 */
+.clamp2 {
+	overflow: hidden;
+	text-overflow: ellipsis;
+	display: -webkit-box;
+	-webkit-line-clamp: 2;
+	-webkit-box-orient: vertical;
+}
+
+/* 二行显示 */
+.ellipsis {
+	overflow: hidden;
+	text-overflow: ellipsis;
+	display: -webkit-box;
+	-webkit-box-orient: vertical;
+	-webkit-line-clamp: 2;
+}
+
+.common-hover {
+	background: #f5f5f5;
+}
+
+/* 角标 */
+.corner {
+	background-color: #e51c23;
+	position: absolute;
+	right: -18rpx;
+	top: -18rpx;
+	color: #FFFFFF;
+	text-align: center;
+	border-radius: 999px;
+	font-size: 24rpx !important;
+	min-width: 35rpx;
+	min-height: 35rpx;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	line-height: 1;
+}
+
+.flex_item {
+	display: flex;
+	align-items: center;
+	/* justify-content: space-between; */
+}
+
+/* 左右顶格加上下居中 */
+.flex-between-center {
+	display: flex;
+	justify-content: space-between;
+	align-items: center;
+}
+
+/* flex布局-整体居中 */
+.flex-center {
+	display: flex;
+	align-items: center;
+	justify-content: center;
+}
+
+.flex-start {
+	display: flex;
+	align-items: center;
+	justify-content: flex-start;
+}
+
+/*文字对齐*/
+.text-left {
+	text-align: left !important;
+}
+
+.text-center {
+	text-align: center !important;
+}
+
+.text-justify {
+	text-align: justify !important;
+}
+
+.text-right {
+	text-align: right !important;
+}
+
+.text-default {
+	color: #212121 !important;
+}
+
+.text-white {
+	color: #ffffff !important;
+}
+
+.text-primary {
+	color: #00bcd4 !important;
+}
+
+.text-success {
+	color: #009688 !important;
+}
+
+.text-info {
+	color: #03a9f4 !important;
+}
+
+.text-warning {
+	color: #ffc107 !important;
+}
+
+.text-danger {
+	color: #e51c23 !important;
+}
+
+.text-pink {
+	color: #e91e63 !important;
+}
+
+.text-purple {
+	color: #673ab7 !important;
+}
+
+.text-indigo {
+	color: #3f51b5 !important;
+}
+
+.text-gray {
+	color: #999999 !important;
+}
+
+.bg-default {
+	background-color: #f5f5f5 !important;
+}
+
+.bg-primary {
+	background-color: #00bcd4 !important;
+}
+
+.bg-success {
+	background-color: #009688 !important;
+}
+
+.bg-info {
+	background-color: #03a9f4 !important;
+}
+
+.bg-warning {
+	background-color: #FFB238 !important;
+}
+
+.bg-danger {
+	background-color: #DC4D46 !important;
+}
+
+.bg-pink {
+	background-color: #e91e63 !important;
+}
+
+.bg-purple {
+	background-color: #673ab7 !important;
+}
+
+.bg-indigo {
+	background-color: #3f51b5 !important;
+}
+
+.bg-white {
+	background-color: white !important;
+}
+
+.bg-gray {
+	background-color: #e3e3e3 !important;
+}
+
+/* 边框 */
+.border-radius-15 {
+	border-radius: 15rpx;
+}
+
+.border-radius-10 {
+	border-radius: 10rpx;
+}
+
+.border-radius-all {
+	border-radius: 1000rpx;
+}
+
+/* 底部边线 */
+.borde-b {
+	border-bottom: 1px solid #dddddd;
+}
+
+/* 弹性盒子 */
+.flex {
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+}
+
+.items-left {
+	justify-content: flex-start;
+}
+
+.items-right {
+	justify-content: flex-end;
+}
+
+.flex-shrink-false {
+	flex-shrink: 0;
+}
+
+.flex-grow-true {
+	flex-grow: 1;
+}
+
+.position-relative {
+	position: relative;
+}
+.rich-img {
+		width: 100% !important;
+	}

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels