lhl hace 4 años
padre
commit
1d91fabcc8
Se han modificado 100 ficheros con 9130 adiciones y 18101 borrados
  1. 14 5
      .hbuilderx/launch.json
  2. 7 3
      App.vue
  3. 28 0
      api/active.js
  4. 0 276
      api/activity.js
  5. 53 0
      api/apply.js
  6. 11 19
      api/index.js
  7. 63 64
      api/login.js
  8. 0 146
      api/order.js
  9. 0 186
      api/product.js
  10. 3 3
      api/set.js
  11. 37 85
      api/user.js
  12. 19 0
      components/tabbar/tabbar.js
  13. 16 5
      components/uni-load-more/uni-load-more.vue
  14. 25 0
      components/wyb-drop-down/iconfont.css
  15. 421 0
      components/wyb-drop-down/wyb-drop-down.vue
  16. 134 0
      lang/en.js
  17. 24 0
      lang/es.js
  18. 21 0
      lang/i18n.js
  19. 2210 0
      lang/i18nJs.js
  20. 133 0
      lang/zh_cn.js
  21. 6 1
      main.js
  22. 63 20
      manifest.json
  23. 249 534
      pages.json
  24. 0 267
      pages/activity/bargain/index.vue
  25. 0 172
      pages/activity/goods_bargain/index.vue
  26. 0 726
      pages/activity/goods_bargain_details/index.vue
  27. 0 429
      pages/cart/cart.vue
  28. 0 216
      pages/category/category.vue
  29. 118 0
      pages/index/article.vue
  30. 0 903
      pages/index/index.vue
  31. 317 0
      pages/index/info.vue
  32. 426 0
      pages/index/infoDetail.vue
  33. 101 0
      pages/index/list.vue
  34. 309 0
      pages/index/male.vue
  35. 0 177
      pages/index/sign.vue
  36. 34 0
      pages/index/video.vue
  37. 0 236
      pages/money/account.vue
  38. 0 370
      pages/money/pay.vue
  39. 0 65
      pages/money/paySuccess.vue
  40. 0 264
      pages/money/recharge.vue
  41. 0 317
      pages/money/wallet.vue
  42. 0 312
      pages/money/withdrawal.vue
  43. 0 165
      pages/order/createOrder.vue
  44. 0 405
      pages/order/evaluate.vue
  45. 0 74
      pages/order/expressInfo.vue
  46. 0 675
      pages/order/order.vue
  47. 0 178
      pages/order/orderDetail.vue
  48. 0 237
      pages/order/orderRefund.vue
  49. 0 204
      pages/product/classify.vue
  50. 0 148
      pages/product/common/KlonContent.vue
  51. 0 68
      pages/product/common/contentText.vue
  52. 0 139
      pages/product/common/discounts.vue
  53. 0 115
      pages/product/common/estimate.vue
  54. 0 85
      pages/product/common/freshDetail.vue
  55. 0 155
      pages/product/common/groupBottom.vue
  56. 0 148
      pages/product/common/groupContent.vue
  57. 0 195
      pages/product/common/groupTime.vue
  58. 0 120
      pages/product/common/guessLike.vue
  59. 0 68
      pages/product/common/klonButtom.vue
  60. 0 169
      pages/product/common/productBottom.vue
  61. 0 146
      pages/product/common/productContent.vue
  62. 0 55
      pages/product/common/topSwiper.vue
  63. 0 386
      pages/product/groupBooking/detail.vue
  64. 0 236
      pages/product/groupBooking/index.vue
  65. 0 75
      pages/product/groupBooking/inviteImg.vue
  66. 0 2094
      pages/product/groupBooking/productCollage.vue
  67. 0 934
      pages/product/groupBooking/productGroup.vue
  68. 0 414
      pages/product/list.vue
  69. 0 612
      pages/product/product.vue
  70. 0 278
      pages/product/reply.vue
  71. 0 452
      pages/product/search.vue
  72. 0 403
      pages/product/seckill.vue
  73. 121 0
      pages/profit/fund.vue
  74. 466 0
      pages/profit/profit.vue
  75. 90 42
      pages/public/forget.vue
  76. 457 385
      pages/public/login.vue
  77. 227 0
      pages/public/nav.vue
  78. 84 43
      pages/public/register.vue
  79. 114 0
      pages/public/success.vue
  80. 311 311
      pages/public/wxLogin.vue
  81. 0 208
      pages/set/address.vue
  82. 0 219
      pages/set/addressManage.vue
  83. 0 161
      pages/set/phone.vue
  84. 267 43
      pages/set/userinfo.vue
  85. 171 0
      pages/upload/upload.vue
  86. 365 0
      pages/user/applyList.vue
  87. 0 310
      pages/user/coupon.vue
  88. 0 156
      pages/user/favorites.vue
  89. 0 153
      pages/user/notice.vue
  90. 303 0
      pages/user/promotion.vue
  91. 343 281
      pages/user/shareQrCode.vue
  92. 386 0
      pages/user/team.vue
  93. 140 0
      pages/user/upgrade.vue
  94. 443 555
      pages/user/user.vue
  95. BIN
      static/icon/1.png
  96. BIN
      static/icon/2.png
  97. BIN
      static/icon/3.png
  98. BIN
      static/icon/4.png
  99. BIN
      static/icon/5.png
  100. BIN
      static/icon/6.png

+ 14 - 5
.hbuilderx/launch.json

@@ -2,10 +2,19 @@
   // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
     "version": "0.0",
     "configurations": [{
-            "type": "uniCloud",
-            "default": {
-                "launchtype": "remote"
-            }
-        }
+     	"app-plus" : 
+     	{
+     		"launchtype" : "remote"
+     	},
+     	"default" : 
+     	{
+     		"launchtype" : "remote"
+     	},
+     	"h5" : 
+     	{
+     		"launchtype" : "remote"
+     	},
+     	"type" : "uniCloud"
+     }
     ]
 }

+ 7 - 3
App.vue

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

+ 28 - 0
api/active.js

@@ -0,0 +1,28 @@
+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 - 276
api/activity.js

@@ -1,276 +0,0 @@
-import request from "@/utils/request.js";
-/**
- * 
- * 所有活动接口 包括:拼团,砍价,秒杀
- * 
-*/
-// 砍价产品详情
-export function getBargainDetail(data,id) {
-	return request({
-		url: '/api/bargain/detail/' + id,
-		method: 'get',
-		data
-	});
-}
-
-/**
- * 砍价产品详情
- */
-// export function getBargainDetail(id) {
-//   return request.get("bargain/detail/" + id);
-// }
-
-//砍价 砍价帮总人数、剩余金额、进度条、已经砍掉的价格
-export function postBargainHelpCount(data) {
-	return request({
-		url: '/api/bargain/help/count',
-		method: 'post',
-		data
-	});
-}
-
-/**
- * 砍价 砍价帮总人数、剩余金额、进度条、已经砍掉的价格
- */
-// export function postBargainHelpCount(data) {
-//   return request.post("bargain/help/count", data);
-// }
-
-//砍价 开启砍价用户信息
-export function postBargainStartUser(data) {
-	return request({
-		url: '/api/bargain/start/user',
-		method: 'post',
-		data
-	});
-}
-
-/**
- * 砍价 开启砍价用户信息
- */
-// export function postBargainStartUser(data) {
-//   return request.post("bargain/start/user", data);
-// }
-
-//砍价开启
-export function postBargainStart(data) {
-	return request({
-		url: '/api/bargain/start',
-		method: 'post',
-		data
-	});
-}
-
-/**
- * 砍价开启
- */
-// export function postBargainStart(bargainId) {
-//   return request.post("bargain/start", { bargainId: bargainId});
-// }
-
-// 砍价 砍掉金额
-export function postBargainHelpPrice(data) {
-	return request({
-		url: '/api/bargain/help/price',
-		method: 'post',
-		data
-	});
-}
-
-/**
- * 砍价 砍掉金额
- */
-// export function postBargainHelpPrice(data) {
-//   return request.post("bargain/help/price", data);
-// }
-
-// 砍价 帮助好友砍价
-export function postBargainHelp(data) {
-	return request({
-		url: '/api/bargain/help',
-		method: 'post',
-		data
-	});
-}
-
-/**
- * 砍价 帮助好友砍价
- */
-// export function postBargainHelp(data) {
-//   return request.post("bargain/help", data);
-// }
-
-// 砍价 砍价帮
-export function postBargainHelpList(data) {
-	return request({
-		url: '/api/bargain/help/list',
-		method: 'post',
-		data
-	});
-}
-
-
-/**
- * 砍价 砍价帮
- */
-// export function postBargainHelpList(data) {
-//   return request.post("bargain/help/list", data);
-// }
-
-// 砍价 观看/分享/参与次数
-export function postBargainShare(data) {
-	return request({
-		url: '/api/bargain/share',
-		method: 'post',
-		data
-	});
-}
-
-/**
- * 砍价 观看/分享/参与次数
- */
-// export function postBargainShare(bargainId) {
-//   return request.post("bargain/share", { bargainId: bargainId});
-// }
-
-// 砍价列表(已参与)
-export function getBargainUserList(data) {
-	return request({
-		url: '/api/bargain/user/list',
-		method: 'get',
-		data
-	});
-}
-
-/**
- * 
- * 砍价列表(已参与)
- * @param object data
-*/
-// export function getBargainUserList(data){
-//   return request.get('bargain/user/list',data);
-// }
-
-// 砍价取消
-export function getBargainUserCancel(data) {
-	return request({
-		url: '/api/bargain/user/cancel',
-		method: 'post',
-		data
-	});
-}
-
-/**
- * 砍价取消
- */
-// export function getBargainUserCancel(data) {
-//   return request.post("/bargain/user/cancel", data);
-// }
-
-
-
-
-
-/**
- * 拼团列表
- * 
-*/
-export function getCombinationList(data) {
-  return request.get('combination/list', data,{noAuth:true});
-}
-
-/**
- * 拼团详情
- * 
-*/
-export function getCombinationDetail(id) {
-  return request.get('combination/detail/'+id);
-}
-
-/**
- * 拼团 开团
- */
-export function getCombinationPink(id) {
-  return request.get("combination/pink/" + id);
-}
-
-/**
- * 拼团 取消开团
- */
-export function postCombinationRemove(data) {
-  return request.post("combination/remove",data);
-}
-
-/**
- * 砍价列表
- */
-export function getBargainList(data) {
-  return request.get("bargain/list", data,{noAuth:true});
-}
-
-
-/**
- * 
- * 取消砍价
- * @param int bargainId
-*/
-export function bargainUserCancel(bargainId){
-  return request.post('bargain/user/cancel', { bargainId: bargainId})
-}
-
-/**
- * 秒杀产品时间区间
- * 
-*/
-export function getSeckillIndexTime(){
-  return request.get('seckill/index',{},{noAuth:true});
-}
-
-/**
- * 秒杀产品列表
- * @param int time
- * @param object data
-*/
-export function getSeckillList(time,data){
-  return request.get('seckill/list/'+time,data,{noAuth:true});
-}
-
-/**
- * 秒杀产品详情
- * @param int id
-*/
-export function getSeckillDetail(id){
-  return request.get('seckill/detail/'+id);
-}
-
-/**
- * 砍价海报
- * @param object data
- * 
-*/
-export function getBargainPoster(data){
-  return request.post('bargain/poster',data)
-}
-
-/**
- * 拼团海报
- * @param object data
- * 
-*/
-export function getCombinationPoster(data){
-  return request.post('combination/poster',data)
-}
-
-/**
- * 获取秒杀小程序二维码
- */
-export function seckillCode(id,data) {
-  return request.get("seckill/code/"+id,data);
-}
-
-/**
- * 获取拼团小程序二维码
- */
-export function scombinationCode(id) {
-  return request.get("combination/code/"+id);
-}

+ 53 - 0
api/apply.js

@@ -0,0 +1,53 @@
+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
+	})
+}

+ 11 - 19
api/index.js

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

+ 63 - 64
api/login.js

@@ -1,64 +1,63 @@
-import request from '@/utils/request'
-
-// 登录
-export function login(data) {
-	return request({
-		url: '/api/login',
-		method: 'post',
-		data
-	});
-}
-// 注册
-export function register(data) {
-	return request({
-		url: '/api/register',
-		method: 'post',
-		data
-	});
-}
-// 验证码
-export function verify(data) {
-	// type=register为注册
-	// type=login为登录
-	return request({
-		url: '/api/register/verify',
-		method: 'post',
-		data
-	});
-}
-
-// 获取用户信息
-export function getUserInfo(data) {
-	return request({
-		url: '/api/userinfo',
-		method: 'get',
-		data
-	});
-}
-
-// 短信登录
-export function loginMobile(data) {
-	return request({
-		url: '/api/login/mobile',
-		method: 'post',
-		data
-	});
-}
-// #ifdef APP-PLUS
-// 微信授权登录
-export function loginWx(data) {
-	return request({
-		url: '/api/wechat/appauth',
-		method: 'get',
-		data
-	});
-}
-// #endif
-//绑定手机号
-export function bangding(data) {
-	return request({
-		url: '/api/binding',
-		method: 'POST',
-		data
-	});
-}
+import request from '@/utils/request'
+
+// 登录
+export function login(data) {
+	return request({
+		url: '/api/login',
+		method: 'post',
+		data
+	});
+}
+// 注册
+export function register(data) {
+	return request({
+		url: '/api/register',
+		method: 'post',
+		data
+	});
+}
+// 验证码
+export function verify(data) {
+	//event : 注册 registe  修改密码 resetpwd   changemobile 修改手机号
+	return request({
+		url: '/api/captcha',
+		method: 'post',
+		data
+	});
+}
+
+// 获取用户信息
+export function getUserInfo(data) {
+	return request({
+		url: '/api/userinfo',
+		method: 'get',
+		data
+	});
+}
+
+// 短信登录
+export function loginMobile(data) {
+	return request({
+		url: '/api/login/mobile',
+		method: 'post',
+		data
+	});
+}
+// #ifdef APP-PLUS
+// 微信授权登录
+export function loginWx(data) {
+	return request({
+		url: '/api/wechat/appauth',
+		method: 'get',
+		data
+	});
+}
+// #endif
+//绑定手机号
+export function bangding(data) {
+	return request({
+		url: '/api/binding',
+		method: 'POST',
+		data
+	});
+}

+ 0 - 146
api/order.js

@@ -1,146 +0,0 @@
-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
-	});
-}
-

+ 0 - 186
api/product.js

@@ -1,186 +0,0 @@
-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
-	});
-}
-

+ 3 - 3
api/set.js

@@ -3,7 +3,7 @@ import request from '@/utils/request'
 // 修改用户信息
 export function userEdit(data) {
 	return request({
-		url: '/api/user/edit',
+		url: '/api/user/profile',
 		method: 'post',
 		data
 	});
@@ -13,14 +13,14 @@ export function userEdit(data) {
 export function logout(data) {
 	return request({
 		url: '/api/logout',
-		method: 'get',
+		method: 'post',
 		data
 	});
 }
 //修改密码
 export function registerReset(data) {
 	return request({
-		url: '/api/register/reset',
+		url: '/api/reset',
 		method: 'post',
 		data
 	});

+ 37 - 85
api/user.js

@@ -1,18 +1,10 @@
-import request from '@/utils/request'
-
-// 订单统计信息
-export function orderData(data) {
-	return request({
-		url: '/api/order/data',
-		method: 'get',
-		data
-	});
-}
+import request from '@/utils/request'
+import { upFilse} from '@/utils/request';
 
 // 获取用户信息
 export function getUserInfo(data) {
 	return request({
-		url: '/api/userinfo',
+		url: '/api/user',
 		method: 'get',
 		data
 	});
@@ -26,79 +18,39 @@ export function spreadBanner(data) {
 		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 uploads(data) {
+	return upFilse({
+		url:'/api/upload',
+		method:'post',
+		data
+	});
 }
-// 购物车列表
-export function getCartList(data) {
-	return request({
-		url: '/api/cart/list',
-		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 children(data,id) {
+	return request({
+		url:'/api/user/children/' + id,
+		method:'get',
+		data
+	});
+}
+
+//查看推荐下级
+export function spread_children(data,id) {
+	return request({
+		url:'/api/user/spread_children/' + id,
+		method:'get',
+		data
+	});
+}
+
+//查看推荐下级总数
+export function num(data,id) {
+	return request({
+		url:'/api/user/children/num',
+		method:'get',
+		data
+	});
+}

+ 19 - 0
components/tabbar/tabbar.js

@@ -0,0 +1,19 @@
+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'
+	}
+]

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

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

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

@@ -0,0 +1,25 @@
+@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";
+}
+

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

@@ -0,0 +1,421 @@
+<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>

+ 134 - 0
lang/en.js

@@ -0,0 +1,134 @@
+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',
+	}
+}

+ 24 - 0
lang/es.js

@@ -0,0 +1,24 @@
+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".',
+	}
+}

+ 21 - 0
lang/i18n.js

@@ -0,0 +1,21 @@
+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;
+

+ 2210 - 0
lang/i18nJs.js

@@ -0,0 +1,2210 @@
+/*!
+ * 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;
+
+})));

+ 133 - 0
lang/zh_cn.js

@@ -0,0 +1,133 @@
+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:'下载二维码',
+	}
+}

+ 6 - 1
main.js

@@ -1,6 +1,10 @@
 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
  *  
@@ -39,6 +43,7 @@ Vue.prototype.$api = {msg, prePage};
 App.mpType = 'app'
 
 const app = new Vue({
-    ...App
+    ...App,
+	i18n,
 })
 app.$mount()

+ 63 - 20
manifest.json

@@ -1,9 +1,9 @@
 {
-    "name" : "基础项目",
-    "appid" : "__UNI__F0EBD91",
+    "name" : "BYTC",
+    "appid" : "__UNI__F3A92A0",
     "description" : "",
-    "versionName" : "1.0.0",
-    "versionCode" : "100",
+    "versionName" : "1.2.1",
+    "versionCode" : 121,
     "transformPx" : false,
     "app-plus" : {
         /* 5+App特有相关 */
@@ -14,25 +14,19 @@
             "autoclose" : true,
             "delay" : 0
         },
-        "modules" : {},
+        "modules" : {
+            "Payment" : {}
+        },
         /* 模块配置 */
         "distribute" : {
             /* 应用发布信息 */
             "android" : {
                 /* android打包配置 */
                 "permissions" : [
-                    "<uses-feature android:name=\"android.hardware.camera\"/>",
-                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
                     "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
-                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
-                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
-                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
-                    "<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
-                    "<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
+                    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
                     "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
-                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
-                    "<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>"
+                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>"
                 ],
                 "abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ]
             },
@@ -42,12 +36,60 @@
             /* ios打包配置 */
             "sdkConfigs" : {
                 "maps" : {},
-                "oauth" : {
+                "oauth" : {},
+                "geolocation" : {},
+                "payment" : {
                     "weixin" : {
-                        "appid" : "",
-                        "appsecret" : "",
+                        "__platform__" : [ "ios", "android" ],
+                        "appid" : "wxe7542891b1e27ad1",
                         "UniversalLinks" : ""
                     }
+                },
+                "push" : {},
+                "share" : {},
+                "speech" : {
+                    "ifly" : {}
+                },
+                "ad" : {}
+            },
+            "splashscreen" : {
+                "androidStyle" : "default",
+                "android" : {
+                    "hdpi" : "unpackage/startImage/480.9.png",
+                    "xhdpi" : "unpackage/startImage/720.9.png",
+                    "xxhdpi" : "unpackage/startImage/1080.9.png"
+                }
+            },
+            "icons" : {
+                "android" : {
+                    "hdpi" : "unpackage/res/icons/72x72.png",
+                    "xhdpi" : "unpackage/res/icons/96x96.png",
+                    "xxhdpi" : "unpackage/res/icons/144x144.png",
+                    "xxxhdpi" : "unpackage/res/icons/192x192.png"
+                },
+                "ios" : {
+                    "appstore" : "unpackage/res/icons/1024x1024.png",
+                    "ipad" : {
+                        "app" : "unpackage/res/icons/76x76.png",
+                        "app@2x" : "unpackage/res/icons/152x152.png",
+                        "notification" : "unpackage/res/icons/20x20.png",
+                        "notification@2x" : "unpackage/res/icons/40x40.png",
+                        "proapp@2x" : "unpackage/res/icons/167x167.png",
+                        "settings" : "unpackage/res/icons/29x29.png",
+                        "settings@2x" : "unpackage/res/icons/58x58.png",
+                        "spotlight" : "unpackage/res/icons/40x40.png",
+                        "spotlight@2x" : "unpackage/res/icons/80x80.png"
+                    },
+                    "iphone" : {
+                        "app@2x" : "unpackage/res/icons/120x120.png",
+                        "app@3x" : "unpackage/res/icons/180x180.png",
+                        "notification@2x" : "unpackage/res/icons/40x40.png",
+                        "notification@3x" : "unpackage/res/icons/60x60.png",
+                        "settings@2x" : "unpackage/res/icons/58x58.png",
+                        "settings@3x" : "unpackage/res/icons/87x87.png",
+                        "spotlight@2x" : "unpackage/res/icons/80x80.png",
+                        "spotlight@3x" : "unpackage/res/icons/120x120.png"
+                    }
                 }
             }
         }
@@ -64,7 +106,7 @@
         }
     },
     "h5" : {
-        "title" : "商城",
+        "title" : "博赢同创",
         "domain" : "",
         "router" : {
             "base" : "/index/",
@@ -73,7 +115,8 @@
         "devServer" : {
             "proxy" : {
                 "/api" : {
-                    "target" : "http://192.168.0.101/api",
+                    // "target" : "http://www.boyingtc.com/api",
+                    "target" : "http://bowin.frp.liuniu946.com/api",
                     // "changeOrigin": true,
                     "pathRewrite" : {
                         "/api" : "" // rewrite path

+ 249 - 534
pages.json

@@ -1,535 +1,250 @@
-{
-	"pages": [{
-			"path": "pages/index/index",
-			"style": {
-				"enablePullDownRefresh": true,
-				// #ifdef MP
-				"navigationStyle": "custom",
-				// #endif
-				// #ifndef MP
-				"app-plus": {
-					"titleNView": {
-						"type": "transparent",
-						"searchInput": {
-							"backgroundColor": "rgba(231, 231, 231,.7)",
-							"borderRadius": "16px",
-							"placeholder": "请输入关键字",
-							"disabled": true,
-							"placeholderColor": "#606266",
-							"align": "left"
-						},
-						"buttons": [{
-								"fontSrc": "/static/yticon.ttf",
-								"text": "\ue60d",
-								"fontSize": "26",
-								"color": "#303133",
-								"float": "left",
-								"background": "rgba(0,0,0,0)"
-							},
-							{
-								"fontSrc": "/static/yticon.ttf",
-								"text": "\ue744",
-								"fontSize": "27",
-								"color": "#303133",
-								"background": "rgba(0,0,0,0)"
-							}
-						]
-					}
-				},
-				// #endif
-				"navigationBarTitleText": "商城首页"
-			}
-		},
-		{
-			"path": "pages/index/sign",
-			"style": {
-				"navigationBarTitleText": "每日签到",
-				"app-plus": {
-					"titleNView": {
-						"type": "transparent"
-					}
-				}
-			}
-		},{
-			"path": "pages/public/register",
-			"style": {
-				"navigationBarTitleText": "注册",
-				"app-plus": {
-					"titleNView": {
-						"type": "transparent"
-					}
-				}
-			}
-		}, {
-			"path": "pages/public/login",
-			"style": {
-				"navigationBarTitleText": "登录",
-				"app-plus": {
-					"titleNView": {
-						"type": "transparent"
-					}
-				}
-			}
-		},
-		{
-			"path": "pages/public/wxLogin",
-			"style": {
-				"navigationBarTitleText": "微信登录",
-				"app-plus": {
-					"titleNView": {
-						"type": "transparent"
-					}
-				}
-			}
-		},
-		{
-			"path": "pages/public/forget",
-			"style": {
-				"navigationBarTitleText": "忘记密码",
-				"app-plus": {
-					"titleNView": {
-						"type": "transparent"
-					}
-				}
-			}
-		},
-		{
-			"path": "pages/product/groupBooking/index",
-			"style": {
-				"enablePullDownRefresh": true,
-				"navigationBarTitleText": "超值拼团"
-			}
-		},
-		{
-			"path": "pages/product/groupBooking/detail",
-			"style": {
-				"navigationBarTitleText": "拼团列表",
-				"app-plus": {
-					"titleNView": {
-						"type": "transparent"
-					}
-				}
-			}
-		},
-		{
-			"path": "pages/product/groupBooking/productCollage",//拼团商品
-			"style": {
-				"app-plus": {
-					"titleNView": {
-						"type": "transparent"
-					}
-				},
-				"navigationBarTitleText":"商品详情"
-			}
-		},
-		{
-			"path": "pages/product/groupBooking/inviteImg",
-			"style": {
-				"navigationBarTitleText": "拼团邀请图",
-				"app-plus": {
-					"titleNView": false
-				}
-			}
-		},
-		{
-			"path": "pages/product/groupBooking/productGroup",
-			"style": {
-				"navigationBarTitleText": "拼团详情展示",
-				"app-plus": {
-					"titleNView": {
-						"type": "transparent"
-					}
-				}
-			}
-		},
-		// {
-		// 	"path": "pages/product/groupBooking/groupdetails",
-		// 	"style": {
-		// 		"navigationBarTitleText": "拼团详情",
-		// 		"app-plus": {
-		// 			"titleNView": false
-		// 		}
-		// 	}
-		// },
-		{
-			"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/seckill",
-			"style": {
-				"navigationBarTitleText": "限时秒杀"
-			}
-		},
-		{
-			"path": "pages/product/list",
-			"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/product/classify",
-			"style": {
-				"navigationStyle": "custom",
-				"app-plus": {
-					"titleNView": {
-						"type": "transparent"
-					}
-				}
-			}
-		},
-		{
-			"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": {
-				"navigationBarTitleText": "修改密码"
-			}
-		},
-		{
-			"path": "pages/set/userinfo",
-			"style": {
-				"navigationBarTitleText": "修改资料"
-			}
-		}, {
-			"path": "pages/cart/cart",
-			"style": {
-				"navigationBarTitleText": "购物车"
-			}
-		},
-		
-		{
-			"path": "pages/user/user",
-			"style": {
-				// #ifndef MP-WEIXIN
-				"navigationStyle": "custom",
-				// "app-plus": {
-				// 	"bounce": "none",
-				// 	"titleNView": {
-				// 		"type": "transparent",
-				// 		"buttons": [{
-				// 				"fontSrc": "/static/yticon.ttf",
-				// 				"text": "\ue60f",
-				// 				"fontSize": "24",
-				// 				"color": "#303133",
-				// 				"width": "46px",
-				// 				"background": "rgba(0,0,0,0)"
-				// 			},
-				// 			{
-				// 				"fontSrc": "/static/yticon.ttf",
-				// 				"text": "\ue744",
-				// 				"fontSize": "28",
-				// 				"color": "#303133",
-				// 				"background": "rgba(0,0,0,0)",
-				// 				"redDot": true
-				// 			}
-				// 		]
-				// 	}
-				// },
-				// #endif
-				"navigationBarTitleText": "个人中心"
-			}
-		},
-		{
-			"path": "pages/user/award",
-			"style": {
-				"navigationBarTitleText": "奖励明细",
-				"app-plus": {
-					"titleNView": {
-						"type": "transparent"
-					}
-				}
-			}
-		},
-		{
-			"path": "pages/user/withdrawal",
-			"style": {
-				"navigationBarTitleText": "奖励提现"
-			}
-		},
-		{
-			"path": "pages/user/notice",
-			"style": {
-				"navigationBarTitleText": "通知"
-			}
-		},
-		{
-			"path": "pages/user/favorites",
-			"style": {
-				"navigationBarTitleText": "收藏夹"
-			}
-		}, {
-			"path": "pages/user/coupon",
-			"style": {
-				"navigationBarTitleText": "我的卡卷"
-			}
-		},
-		{
-			"path": "pages/user/scoreAccumulate",
-			"style": {
-				"navigationBarTitleText": "积分明细"
-			}
-		},
-		{
-			"path": "pages/order/order",
-			"style": {
-				"navigationBarTitleText": "我的订单",
-				"app-plus": {
-					"bounce": "none"
-				}
-			}
-		},
-		{
-			"path": "pages/order/expressInfo",
-			"style": {
-				"navigationBarTitleText": "快递详情"
-			}
-		},
-		{
-			"path": "pages/order/orderDetail",
-			"style": {
-				"navigationBarTitleText": "订单详情",
-				"app-plus": {
-					"bounce": "none"
-				}
-			}
-		},
-		{
-			"path": "pages/order/evaluate",
-			"style": {
-				"navigationBarTitleText": "评论"
-			}
-		},
-		{
-			"path": "pages/order/orderRefund",
-			"style": {
-				"navigationBarTitleText": "申请退款"
-			}
-		},
-		{
-			"path": "pages/order/createOrder",
-			"style": {
-				"navigationBarTitleText": "创建订单"
-			}
-		},  {
-			"path": "pages/money/pay",
-			"style": {
-				"navigationBarTitleText": "支付"
-			}
-		},
-		{
-			"path": "pages/money/paySuccess",
-			"style": {
-				"navigationBarTitleText": "支付成功"
-			}
-		},
-		{
-			"path": "pages/money/wallet",
-			"style": {
-				"navigationBarTitleText": "我的钱包",
-				"app-plus": {
-					"titleNView": {
-						"type": "transparent"
-					}
-				}
-			}
-		},
-		{
-			"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": {
-				"navigationBarTitleText": "微信登录跳转页面",
-				"app-plus": {
-					"titleNView": false
-				}
-			}
-		},
-		{
-			"path": "pages/user/shareQrCode",
-			"style": {
-				"navigationBarTitleText": "邀请好友"
-			}
-		}
-	],
-	"subPackages": [
-		{
-			"root": "pages/activity",
-			"name": "activity",
-			"pages":[{
-					"path": "goods_bargain/index",
-					"style": {
-						"navigationStyle": "custom"
-						// #ifdef MP
-						,"navigationBarTextStyle": "#fff"
-						// #endif
-					}
-				},
-				{
-					"path": "goods_bargain_details/index",
-					"style": {
-						"navigationStyle": "custom"
-						// #ifdef MP
-						,"navigationBarTextStyle": "#fff"
-						// #endif
-					}
-				},
-				{
-					"path": "bargain/index",
-					"style": {
-						"navigationBarTitleText": "砍价记录"
-					}
-				}
-			]
-		}
-	],
-	"globalStyle": {
-		"navigationBarTextStyle": "black",
-		"navigationBarTitleText": "uni-app",
-		"navigationBarBackgroundColor": "#FFFFFF",
-		"backgroundColor": "#f8f8f8"
-	},
-	"tabBar": {
-		"color": "#C0C4CC",
-		"selectedColor": "#5DBC7C",
-		"borderStyle": "black",
-		"backgroundColor": "#ffffff",
-		"list": [{
-				"pagePath": "pages/index/index",
-				"iconPath": "static/tabBar/tab-home.png",
-				"selectedIconPath": "static/tabBar/tab-home-current.png",
-				"text": "首页"
-			},
-			{
-				"pagePath": "pages/category/category",
-				"iconPath": "static/tabBar/tab-cate.png",
-				"selectedIconPath": "static/tabBar/tab-cate-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/tab-my.png",
-				"selectedIconPath": "static/tabBar/tab-my-current.png",
-				"text": "我的"
-			}
-		]
-	}
+{
+	"easycom": {
+			"^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
+		},
+	"pages": [
+		{
+			"path": "pages/index/video",
+			"style": {
+				"navigationBarTextStyle": "white",
+				"navigationBarBackgroundColor": "#000000",
+				"navigationStyle": "custom"
+		
+		
+			}
+		},
+		{
+			"path": "pages/index/index",
+			"style": {
+				"navigationBarTextStyle": "white",
+				"navigationBarBackgroundColor": "#000000",
+				"navigationStyle": "custom"
+
+
+			}
+		},
+		{
+			"path": "pages/public/register",
+			"style": {
+				"navigationBarTitleText": "注册",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		}, {
+			"path": "pages/public/login",
+			"style": {
+				"navigationBarTitleText": "登录",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/public/wxLogin",
+			"style": {
+				"navigationBarTitleText": "微信登录",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/public/forget",
+			"style": {
+				"navigationBarTitleText": "忘记密码",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/set/password",
+			"style": {
+				"navigationBarTitleText": "修改密码"
+			}
+		},
+		{
+			"path": "pages/set/userinfo",
+			"style": {
+				"navigationBarTitleText": "设置",
+				"navigationBarBackgroundColor": "#000000",
+				"navigationBarTextStyle": "white"
+			}
+		},
+		{
+			"path": "pages/index/male",
+			"style": {
+				"navigationBarTitleText": "详情",
+				"navigationBarBackgroundColor": "#000000",
+				"navigationBarTextStyle": "white"
+			}
+		},
+		{
+			"path": "pages/profit/profit",
+			"style": {
+				"navigationBarTitleText": "受益中心",
+				"navigationBarBackgroundColor": "#000000",
+				"navigationBarTextStyle": "white"
+			}
+		},
+		{
+			"path": "pages/profit/fund",
+			"style": {
+				"navigationBarTitleText": "详情",
+				"navigationBarBackgroundColor": "#000000",
+				"navigationBarTextStyle": "white"
+			}
+		},
+		{
+			"path": "pages/index/info",
+			"style": {
+				"navigationBarTitleText": "打款信息",
+				"navigationBarBackgroundColor": "#000000",
+				"navigationBarTextStyle": "white"
+			}
+		},
+		{
+			"path": "pages/index/infoDetail",
+			"style": {
+				"navigationBarTitleText": "详情",
+				"navigationBarBackgroundColor": "#000000",
+				"navigationBarTextStyle": "white"
+			}
+		},
+		{
+			"path": "pages/user/team",
+			"style": {
+				"navigationBarTitleText": "我的团队",
+				"navigationBarBackgroundColor": "#000000",
+				"navigationBarTextStyle": "white"
+			}
+		},
+		{
+			"path": "pages/user/user",
+			"style": {
+				"navigationBarTitleText": "我的",
+				"navigationBarBackgroundColor": "#000000",
+				"navigationBarTextStyle": "white"
+			}
+		},
+		
+
+
+
+
+
+		{
+			"path": "pages/redirect/redirect",
+			"style": {
+				"navigationBarTitleText": "微信登录跳转页面",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		},
+		{
+			"path": "pages/user/shareQrCode",
+			"style": {
+				"navigationBarTitleText": "我的二维码",
+				"navigationBarBackgroundColor": "#000000",
+				"navigationBarTextStyle": "white"
+			}
+		},
+		{
+			"path": "pages/user/promotion",
+			"style": {
+				"navigationBarTextStyle": "white",
+				"app-plus": {
+					"titleNView": {
+						"backgroundColor": "#15130f",
+						"type": "float",
+						"titleText": "我的帮扶"
+					}
+				}
+			}
+		},
+		
+		{
+			"path": "pages/user/applyList",
+			"style": {
+				"navigationBarTitleText": "审核列表",
+				"navigationBarTextStyle": "white",
+				"navigationBarBackgroundColor": "#000000"
+			}
+		},
+		{
+			"path": "pages/index/list",
+			"style": {
+				"navigationBarTitleText": "通告列表",
+				"navigationBarTextStyle": "white",
+				"navigationBarBackgroundColor": "#000000"
+			}
+		},
+		{
+			"path": "pages/index/article",
+			"style": {
+				"navigationBarTitleText": "通告详情",
+				"navigationBarTextStyle": "white",
+				"navigationBarBackgroundColor": "#000000"
+			}
+		},
+		{
+			"path": "pages/user/upgrade",
+			"style": {
+				"navigationBarTitleText": "升级会员",
+				"navigationBarTextStyle": "white",
+				"navigationBarBackgroundColor": "#000000"
+			}
+		},
+		{
+			"path": "pages/upload/upload",
+			"style": {
+				"navigationBarTitleText": "上传资料",
+				"navigationBarTextStyle": "white",
+				"navigationBarBackgroundColor": "#000000"
+			}
+		}
+	],
+
+	"globalStyle": {
+		"navigationBarTextStyle": "black",
+		"navigationBarTitleText": "uni-app",
+		"navigationBarBackgroundColor": "#FFFFFF",
+		"backgroundColor": "#f8f8f8"
+	},
+	"tabBar": {
+
+		"color": "#71614f",
+		"selectedColor": "#FAD6B0",
+		"borderStyle": "black",
+		"backgroundColor": "#15130f",
+		"list": [{
+				"pagePath": "pages/index/index",
+				"iconPath": "static/tabBar/home.png",
+				"selectedIconPath": "static/tabBar/home-action.png",
+				"text": "首页"
+			},
+			{
+				"pagePath": "pages/user/applyList",
+				"iconPath": "static/tabBar/center.png",
+				"selectedIconPath": "static/tabBar/center-action.png",
+				"text": "审核列表"
+			},
+			{
+				"pagePath": "pages/user/user",
+				"iconPath": "static/tabBar/user.png",
+				"selectedIconPath": "static/tabBar/user-action.png",
+				"text": "我的"
+			}
+		]
+	}
 }

+ 0 - 267
pages/activity/bargain/index.vue

@@ -1,267 +0,0 @@
-<template>
-	<view>
-		<block v-if="bargain.length>0">
-			<div class="bargain-record" ref="container">
-				<div class="item" v-for="(item, index) in bargain" :key="index">
-					<div class="picTxt acea-row row-between-wrapper">
-						<div class="pictrue">
-							<image :src="item.image" />
-						</div>
-						<div class="text acea-row row-column-around">
-							<div class="line1" style="width: 100%;">{{ item.title }}</div>
-							<count-down :justify-left="'justify-content:left'" :is-day="true" :tip-text="'倒计时 '" :day-text="' 天 '" :hour-text="' 时 '" :minute-text="' 分 '"
-							 :second-text="' 秒'" :datatime="item.datatime" v-if="item.status === 1"></count-down>
-							<div class="successTxt font-color-red" v-else-if="item.status === 3">砍价成功</div>
-							<div class="endTxt" v-else>活动已结束</div>
-							<div class="money font-color-red">
-								已砍至<span class="symbol">¥</span><span class="num">{{ item.residue_price }}</span>
-							</div>
-						</div>
-					</div>
-					<div class="bottom acea-row row-between-wrapper">
-						<div class="purple" v-if="item.status === 1">活动进行中</div>
-						<div class="success" v-else-if="item.status === 3">砍价成功</div>
-						<div class="end" v-else>活动已结束</div>
-						<div class="acea-row row-middle row-right">
-							<div class="bnt cancel" v-if="item.status === 1" @click="getBargainUserCancel(item.bargain_id)">
-								取消活动
-							</div>
-							<div class="bnt bg-color-red" v-if="item.status === 1" @click="goDetail(item.bargain_id)">
-								继续砍价
-							</div>
-							<!-- <div class="bnt bg-color-red" v-else @click="goList">重开一个</div> -->
-						</div>
-					</div>
-				</div>
-				<Loading :loaded="status" :loading="loadingList"></Loading>
-			</div>
-		</block>
-		<block v-if="bargain.length == 0">
-			<emptyPage title="暂无砍价记录~"></emptyPage>
-		</block>
-	</view>
-</template>
-<script>
-	import CountDown from "@/components/countDown";
-	import emptyPage from '@/components/emptyPage.vue'
-	import {
-		getBargainUserList,
-		getBargainUserCancel
-	} from "@/api/activity";
-	import {
-		userinfos
-	} from '@/api/user.js';
-	import Loading from "@/components/Loading";
-
-	export default {
-		name: "BargainRecord",
-		components: {
-			CountDown,
-			Loading,
-			emptyPage
-		},
-		props: {},
-		data: function() {
-			return {
-				bargain: [],
-				status: false, //砍价列表是否获取完成 false 未完成 true 完成
-				loadingList: false, //当前接口是否请求完成 false 完成 true 未完成
-				page: 1, //页码
-				limit: 20, //数量
-				userInfo: {}
-			};
-		},
-		onLoad: function() {
-			this.getBargainUserList();
-			this.getUserInfo();
-			// this.$scroll(this.$refs.container, () => {
-			//   !this.loadingList && this.getBargainUserList();
-			// });
-		},
-		methods: {
-			goDetail: function(id) {
-				// this.$router.push({
-				// 	path: "/activity/dargain_detail/" + id +'&bargain='+ userInfo.uid
-				// });
-				uni.navigateTo({
-					url: `/pages/activity/goods_bargain_details/index?id=${id}&bargain=${this.userInfo.uid}`
-				})
-			},
-			// 砍价列表
-			goList: function() {
-				uni.navigateTo({
-					url: '/pages/activity/goods_bargain/index'
-				})
-			},
-			getBargainUserList: function() {
-				var that = this;
-				if (that.loadingList) return;
-				if (that.status) return;
-				getBargainUserList({
-						page: that.page,
-						limit: that.limit
-					})
-					.then(res => {
-						that.status = res.data.length < that.limit;
-						that.bargain.push.apply(that.bargain, res.data);
-						that.page++;
-						that.loadingList = false;
-					})
-					.catch(res => {
-						that.$dialog.error(res.msg);
-					});
-			},
-			getBargainUserCancel: function(bargainId) {
-				var that = this;
-				uni.showModal({
-				    title: '提示',
-				    content: '确定取消砍价商品吗',
-				    success: function (res) {
-				        if (res.confirm) {
-				            console.log('用户点击确定');
-							getBargainUserCancel({
-									bargainId: bargainId
-								})
-								.then(res => {
-									that.status = false;
-									that.loadingList = false;
-									that.page = 1;
-									that.bargain = [];
-									that.getBargainUserList();
-									uni.showToast({
-										title:res.msg
-									});
-								})
-								.catch(res => {
-									uni.showToast({
-										title:res
-									});
-								});
-				        } else if (res.cancel) {
-				            console.log('用户点击取消');
-				        }
-				    }
-				});
-			},
-			/**
-			 * 获取个人用户信息
-			 */
-			getUserInfo: function() {
-				let that = this;
-				userinfos().then(res => {
-					that.userInfo = res.data;
-				});
-			},
-		},
-		onReachBottom() {
-			this.getBargainUserList();
-		}
-	};
-</script>
-
-<style lang="scss">
-	page{
-		background-color: #f5f5f5;
-	}
-	/*砍价记录*/
-	.bargain-record .item .picTxt .text .time .styleAll {
-		color: #fc4141;
-		font-size:24rpx;
-	}
-	.bargain-record .item .picTxt .text .time .red {
-		color: #999;
-		font-size:24rpx;
-	}
-	.bargain-record .item {
-		background-color: #fff;
-		margin-bottom: 12upx;
-	}
-
-	.bargain-record .item .picTxt {
-		height: 210upx;
-		border-bottom: 1px solid #f0f0f0;
-		padding: 0 30upx;
-	}
-
-	.bargain-record .item .picTxt .pictrue {
-		width: 150upx;
-		height: 150upx;
-	}
-
-	.bargain-record .item .picTxt .pictrue image {
-		width: 100%;
-		height: 100%;
-		border-radius: 6upx;
-	}
-
-	.bargain-record .item .picTxt .text {
-		width: 515upx;
-		font-size: 30upx;
-		color: #282828;
-		height: 150upx;
-	}
-
-	.bargain-record .item .picTxt .text .time {
-		font-size: 24upx;
-		color: #868686;
-		justify-content: left !important;
-	}
-	
-	.bargain-record .item .picTxt .text .successTxt{
-		font-size:24rpx;
-	}
-	
-	.bargain-record .item .picTxt .text .endTxt{
-		font-size:24rpx;
-		color: #999;
-	}
-	.bargain-record .item .picTxt .text .money {
-		font-size: 24upx;
-	}
-
-	.bargain-record .item .picTxt .text .money .num {
-		font-size: 32upx;
-		font-weight: bold;
-	}
-
-	.bargain-record .item .picTxt .text .money .symbol {
-		font-weight: bold;
-	}
-
-	.bargain-record .item .bottom {
-		height: 100upx;
-		padding: 0 30upx;
-		font-size: 27upx;
-	}
-
-	.bargain-record .item .bottom .purple {
-		color: #f78513;
-	}
-
-	.bargain-record .item .bottom .end {
-		color: #999;
-	}
-
-	.bargain-record .item .bottom .success {
-		color: #e93323;
-	}
-
-	.bargain-record .item .bottom .bnt {
-		font-size: 27upx;
-		color: #fff;
-		width: 176upx;
-		height: 60upx;
-		border-radius: 32upx;
-		text-align: center;
-		line-height: 60upx;
-	}
-
-	.bargain-record .item .bottom .bnt.cancel {
-		color: #aaa;
-		border: 1px solid #ddd;
-	}
-
-	.bargain-record .item .bottom .bnt~.bnt {
-		margin-left: 18upx;
-	}
-</style>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 172
pages/activity/goods_bargain/index.vue


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 726
pages/activity/goods_bargain_details/index.vue


+ 0 - 429
pages/cart/cart.vue

@@ -1,429 +0,0 @@
-<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-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.attr_val }}</text>
-							<text class="price">¥{{ item.productInfo.price }}</text>
-							<uni-number-box
-								class="step"
-								:min="1"
-								:max="item.productInfo.stock"
-								:value="item.cart_num > item.productInfo.stock ? item.productInfo.stock : item.cart_num"
-								:isMax="item.cart_num >= item.productInfo.stock ? true : false"
-								:isMin="item.cart_num === 1"
-								:index="index"
-								@eventChange="numberChange"
-							></uni-number-box>
-						</view>
-						<text class="del-btn iconfont iconclose" @click="deleteCartItem(index)"></text>
-					</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 class="clear-btn" @click="allChecked ? clearCart() : ''" :class="{ show: allChecked }"><text>清空</text></view>
-				</view>
-				<view class="total-box">
-					<text class="price">¥{{ total }}</text>
-					<!-- <text class="coupon">
-						已优惠
-						<text>74.35</text>
-						元
-					</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: {
-		//请求数据
-		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();
-		},
-		//删除
-		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 {
-	display: flex;
-	position: relative;
-	padding: 30rpx 40rpx;
-	.image-wrapper {
-		width: 230rpx;
-		height: 230rpx;
-		flex-shrink: 0;
-		position: relative;
-		image {
-			border-radius: 8rpx;
-		}
-	}
-	.checkbox {
-		position: absolute;
-		left: -16rpx;
-		top: -16rpx;
-		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;
-		.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;
-		}
-		.price {
-			height: 50rpx;
-			line-height: 50rpx;
-		}
-		.step {
-			margin-top: 20rpx;
-		}
-	}
-	.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;
-}
-</style>

+ 0 - 216
pages/category/category.vue

@@ -1,216 +0,0 @@
-<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>

+ 118 - 0
pages/index/article.vue

@@ -0,0 +1,118 @@
+<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>
+

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 903
pages/index/index.vue


+ 317 - 0
pages/index/info.vue

@@ -0,0 +1,317 @@
+<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>

+ 426 - 0
pages/index/infoDetail.vue

@@ -0,0 +1,426 @@
+<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>

+ 101 - 0
pages/index/list.vue

@@ -0,0 +1,101 @@
+<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>

+ 309 - 0
pages/index/male.vue

@@ -0,0 +1,309 @@
+<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 - 177
pages/index/sign.vue

@@ -1,177 +0,0 @@
-<template>
-	<view>
-		<view class="title-box">
-			<view class=" title-conetnt  position-relative">
-				<view class="title-img"><image src="/static/img/img08.png" mode="aspectFit"></image></view>
-				<view class="title-content-box">
-					<view class="title-text">已连续签到</view>
-					<view class="title-day-text">
-						<text class="title-day">{{actionDay}}</text>
-						<text>天</text>
-					</view>
-					<view class="title-button" :class="{'signAction':signTrue}" @click="signTrue?'':integral()">{{signTrue?'已签到':'立即签到'}}</view>
-				</view>
-			</view>
-			<view class="title-tip"><text>共获得{{sum_integral}}积分,总签到{{allSign}}天</text></view>
-		</view>
-		<calendar class="sign-date-box" :checks="signList" checksClass="" :checkTextShow="true" checksIcon="/static/img/img07.png"></calendar>
-	</view>
-</template>
-
-<script>
-import calendar from '../../components/ss-calendar/ss-calendar.vue';
-import { signList, integral,signUser } from '@/api/functionalUnit.js';
-export default {
-	components: {
-		calendar
-	},
-	data() {
-		return {
-			money: '', //保存当前月份
-			year: '', //保存当前年份
-			day: '', //保存当前日期
-			signList: [] ,//签到日子列表
-			actionDay:0,//连续签到天数
-			allSign:0,//累计签到
-			sum_integral:0,//累计获得积分
-			signTrue:false,
-		};
-	},
-	onLoad() {
-		this.signUser();
-		this.getData();
-		this.loadList();
-	},
-	methods: {
-		// 获取当前时间
-		getData(current) {
-			const date = current ? new Date(current) : new Date();
-			this.year = date.getFullYear();//保存当前年份
-			this.month = date.getMonth() + 1;//保存当前月份
-			this.day = date.getDate();//保存当前日期
-		},
-		//获取签到用户信息
-		signUser(){
-			signUser({all:1}).then(({data}) => {
-				this.actionDay = data.sign_num;//连续签到天数
-				this.allSign = data.sum_sgin_day;//累计签到天数
-				this.sum_integral = data.sum_integral;//累计总积分
-			})
-		},
-		// 签到
-		integral() {
-			integral({})
-				.then(e => {
-					// 改为已签到
-					this.signTrue = true;
-					this.actionDay++;
-					// 保存签到成功
-					this.signList.push(this.day);
-					uni.showToast({
-						title: '签到成功',
-						duration: 2000,
-						position: 'top'
-					});
-				})
-				.catch(e => {
-					console.log(e);
-				});
-		},
-		// 获取签到列表
-		loadList() {
-			let obj = this;
-			let present = this.day; //保存当前天数用于后续计算
-			let actionDay = 0; //用于计算活跃天数
-			let arr = []; //保存返回数组;
-			signList({
-				page: 1,
-				limit: 31
-			}).then(e => {
-				arr = e.data.map((e, ind) => {
-					let time = e.add_time.split('-');
-					let day = parseInt(time[2].replace(/^0/i, ''));
-					let year = time[0];
-					let month = +time[1];
-					if (obj.year == year && obj.month == month) {
-						return day;
-					}
-				});
-				this.signList = arr;
-				// 判断今天是否已经签到
-				if(arr[0]==this.day){
-					this.signTrue = true;
-				}
-			});
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-page {
-	background: $page-color-base;
-}
-.sign-date-box {
-	margin: 25rpx;
-	border-radius: 15rpx;
-	margin-top: -70rpx;
-}
-.title-box {
-	background-color: $base-color;
-	padding-top: 120rpx;
-	color: #ffffff;
-	height: 590rpx;
-	.title-conetnt {
-		height: 350rpx;
-		width: 350rpx;
-		margin: 0 auto;
-		text-align: center;
-		.title-img {
-			position: absolute;
-			top: 0;
-			left: 0;
-			height: 100%;
-			width: 100%;
-			image {
-				height: 100%;
-				width: 100%;
-			}
-		}
-		.title-content-box {
-			position: absolute;
-			width: 100%;
-			.title-day-text {
-				padding: 20rpx;
-				font-size: $font-base - 2rpx;
-				.title-day {
-					font-size: 60rpx;
-				}
-			}
-			.title-text {
-				font-size: 26rpx;
-				padding-top: 100rpx;
-			}
-			.title-button {
-				background-color: #fe7e51;
-				border-radius: 99rpx;
-				width: 200rpx;
-				height: 64rpx;
-				margin: 0 auto;
-				line-height: 64rpx;
-				text-align: center;
-				font-size: $font-base;
-				&.signAction{
-					background-color: $font-color-light;
-				}
-			}
-		}
-	}
-}
-.title-tip {
-	color: #ffffff;
-	font-size: $font-base - 2rpx;
-	padding-top: 20rpx;
-	text-align: center;
-	margin-top: -40rpx;
-}
-</style>

+ 34 - 0
pages/index/video.vue

@@ -0,0 +1,34 @@
+<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>

+ 0 - 236
pages/money/account.vue

@@ -1,236 +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">
-				<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';
-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:''
-					}
-				}
-			]
-		};
-	},
-
-	onLoad(options) {
-		this.tabCurrentIndex = +options.state || 0;
-		this.loadAli();
-		this.loadBank();
-	},
-
-	methods: {
-		//加载数据
-		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;
-			if (obj.tabCurrentIndex == 1) {
-				obj.setBankInfo({
-					fullname: arr.name,
-					bank: arr.bankName,
-					bankno: arr.code,
-					id:arr.id
-				});
-			}
-			if (obj.tabCurrentIndex == 0) {
-				obj.setAliInfo({
-					fullname: arr.name,
-					alino: arr.code,
-					id:arr.id
-				});
-			}
-		},
-		/* 保存银行卡详细 */
-		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>

+ 0 - 370
pages/money/pay.vue

@@ -1,370 +0,0 @@
-<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="#5dbc7c" :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="#5dbc7c" :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="#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 { 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
-		};
-	},
-	computed: {
-		// #ifdef H5
-		...mapState(['weichatObj'])
-		// #endif
-	},
-	onLoad(options) {
-		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;
-		}
-		// 载入余额
-		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自提
-			};
-			// 判断是否拼团商品
-			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>

+ 0 - 65
pages/money/paySuccess.vue

@@ -1,65 +0,0 @@
-<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>

+ 0 - 264
pages/money/recharge.vue

@@ -1,264 +0,0 @@
-<template>
-	<view class="content">
-		<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>
-
-		<view class="list">
-			<radio-group @change="tabRadio">
-				<!-- #ifdef APP-PLUS -->
-				<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="alipay" color="#5dbc7c" :checked="type == 'alipay'" /></view>
-					</view>
-				</label>
-				<label>
-					<view class="box">
-						<view class="icon iconfont iconweixin1"></view>
-						<view class="title-box">
-							<view class="title"><text>微信充值</text></view>
-							<view class="node"><text>真实姓名(代勇明)</text></view>
-						</view>
-						<view class="right"><radio value="weixin" color=" #5dbc7c" :checked="type == 'weixin'" /></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';
-// #ifdef H5
-import { rechargeWechat } from '@/api/wallet.js';
-// #endif
-// #ifdef MP
-import { rechargeRoutine } from '@/api/wallet.js';
-// #endif
-import { mapState } from 'vuex';
-export default {
-	filters: {
-		getMoneyStyle
-	},
-	data() {
-		return {
-			type: 'weixin',
-			money: '', //充值金额
-			payLoding: false //是否加载中
-		};
-	},
-	onLoad(options) {},
-	computed: {
-		// #ifdef H5
-		...mapState(['weichatObj'])
-		// #endif
-	},
-	methods: {
-		// 跳转
-		navTo(url) {
-			uni.navigateTo({
-				url: url
-			});
-		},
-		// 切换选中对象
-		tabRadio(e) {
-			this.type = e;
-		},
-		// 提交
-		confirm() {
-			let obj = this;
-			obj.payLoding = true;
-			// #ifdef H5
-			rechargeWechat({ price: this.money, from: this.type })
-				.then(e => {
-					let da = e.data.data;
-					obj.weichatObj.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;
-				})
-				.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
-		},
-		//获取订单列表
-		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);
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-page {
-	height: 100%;
-}
-
-.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);
-}
-.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;
-			font-size: $font-base;
-		}
-	}
-}
-.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;
-		}
-		.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;
-}
-</style>

+ 0 - 317
pages/money/wallet.vue

@@ -1,317 +0,0 @@
-<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('/pages/money/recharge')">充值</view>
-			<view class="flex buttom-box">
-				<view class="buttom" @click="navto('/pages/money/recharge')">
-					<view class="icon"><image class="icon-img" src="/static/icon/i5.png" mode="aspectFit"></image></view>
-					<text>充值</text>
-				</view>
-				<view class="interval"></view>
-				<view class="buttom" @click="navto('/pages/money/withdrawal')">
-					<view class="icon"><image class="icon-img" src="/static/icon/i1.png" mode="aspectFit"></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 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>
-					<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 { 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 //每次信息条数
-				},
-				{
-					state: 2,
-					text: '收入',
-					loadingType: 'more',
-					orderList: [],
-					page: 1, //当前页数
-					limit: 10 //每次信息条数
-				}
-			],
-			money: ''
-		};
-	},
-	onLoad(options) {},
-	onShow() {
-		this.loadData();
-		// 获取用户余额
-		userBalance({}).then(({ data }) => {
-			this.money = data.now_money;
-		});
-	},
-	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) {
-						navItem.orderList = navItem.orderList.concat(data[0].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;
-		}
-	}
-};
-</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;
-	}
-}
-</style>

+ 0 - 312
pages/money/withdrawal.vue

@@ -1,312 +0,0 @@
-<template>
-	<view class="content">
-		<uni-notice-bar single="true" text="每月25号到月底可提现上月结算余额"></uni-notice-bar>
-		<view class="content-money">
-			<view class="flex ">
-				<view class="buttom">
-					<view class="icon">{{ money | getMoneyStyle }}</view>
-					<text class="text">可提现金额</text>
-				</view>
-				<view class="interval"></view>
-				<view class="buttom">
-					<view class=" icon">{{ freeze | getMoneyStyle }}</view>
-					<text class="text">待审核提现金额</text>
-				</view>
-			</view>
-		</view>
-		<view class="row-box">
-			<view class="title">提现金额</view>
-			<view class="row">
-				<text class="tit">¥</text>
-				<input class="input" type="number" v-model="withdrawal" :placeholder="'最低提现金额' + minPrice + '元'" placeholder-class="placeholder" />
-				<view class="buttom" @click="withdrawal = money">全部提现</view>
-			</view>
-		</view>
-		<!-- #ifndef MP-WEIXIN -->
-		<view class="list" v-if="!weichatBsrowser">
-			<radio-group @change="tabRadio">
-				<label>
-					<view class="box">
-						<view class="icon iconfont iconweixin1"></view>
-						<view class="title-box">
-							<view class="title"><text>提现至微信</text></view>
-						</view>
-						<view class="right"><radio value="weixin" color="#5dbc7c" :checked="type == 'weixin'" /></view>
-					</view>
-				</label>
-				<label>
-					<view class="box">
-						<view class="icon iconfont iconzhifubao"></view>
-						<view class="title-box">
-							<view class="title">
-								<text v-if="aliData.fullname">提现至支付宝</text>
-								<text v-else>请创建支付宝账号</text>
-							</view>
-							<view class="node">
-								<text v-if="aliData.fullname">真实姓名({{ aliData.fullname }})</text>
-							</view>
-						</view>
-						<view class="right"><radio value="alipay" color="#5dbc7c" :checked="type == 'alipay'" /></view>
-					</view>
-				</label>
-				<label>
-					<view class="box">
-						<view class="icon iconfont"><image class="icon-img" src="/static/icon/i8.png" mode="aspectFit"></image></view>
-						<view class="title-box">
-							<view class="title">
-								<text v-if="bankData.bankno">{{ bankData.bank + ' ' + bankData.bankno }}</text>
-								<text v-else>请创建银行账号</text>
-							</view>
-							<view class="node">
-								<text v-if="bankData.fullname">真实姓名({{ bankData.fullname }})</text>
-							</view>
-						</view>
-						<view class="right"><radio value="bank" color="#5dbc7c" :checked="type == 'bank'" /></view>
-					</view>
-				</label>
-			</radio-group>
-		</view>
-		<!-- #endif -->
-		<button class="add-btn up" @click="confirm">提交申请</button>
-		<button class="add-btn modified" v-if="!weichatBsrowser" @click="navTo('/pages/money/account')">账号管理</button>
-	</view>
-</template>
-
-<script>
-import { getMoneyStyle } from '@/utils/rocessor.js';
-import { extractCash, extractBank, aliInfo, bankInfo } from '@/api/wallet.js';
-import uniNoticeBar from '@/components/uni-notice-bar/uni-notice-bar.vue';
-export default {
-	filters: {
-		getMoneyStyle
-	},
-	components: {
-		uniNoticeBar
-	},
-	data() {
-		return {
-			type: 'weixin', //提现方式
-			money: '0.00', //可提现金额
-			freeze: '0.0', //冻结金额
-			withdrawal: '', //提现金额
-			minPrice: '', //最少提现金额
-			aliData: {},
-			bankData: {},
-			// #ifdef H5
-			weichatBsrowser: false
-			// #endif
-		};
-	},
-	onLoad(options) {
-		// #ifdef H5
-		this.weichatBsrowser = uni.getStorageSync('weichatBrowser');
-		// #endif
-		//加载提现信息
-		this.loadData();
-		// 加载提款账号信息
-		this.loadAli();
-		this.loadBank();
-	},
-	methods: {
-		// 更新数据
-		dataUp(){
-			this.loadAli();
-			this.loadBank();
-		},
-		//加载数据
-		async loadAli(source) {
-			aliInfo({}).then(e => {
-				this.aliData = e.data;
-			});
-		},
-		// 加载银行卡信息
-		async loadBank() {
-			bankInfo({}).then(e => {
-				this.bankData = e.data;
-			});
-		},
-		// 加载余额信息
-		async loadData() {
-			extractBank({}).then(({ data }) => {
-				this.money = data.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>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 165
pages/order/createOrder.vue


+ 0 - 405
pages/order/evaluate.vue

@@ -1,405 +0,0 @@
-<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(',');
-			order_comment({
-				pics: arr,
-				comment: obj.text,
-				product_score: obj.rateValue1,
-				service_score: obj.rateValue2,
-				unique: obj.unique,
-				
-			})
-				.then(e => {
-					uni.navigateTo({
-						url: '/pages/order/order?state=4'
-					});
-				})
-				.catch(e => {
-					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: #1BCC26 !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>

+ 0 - 74
pages/order/expressInfo.vue

@@ -1,74 +0,0 @@
-<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>

+ 0 - 675
pages/order/order.vue

@@ -1,675 +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 @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._add_time }}</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">
-									<text class="title clamp">{{ goodsItem.productInfo.store_name }}</text>
-									<text class="price">{{ goodsItem.productInfo.price|moneyNum }}</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_postage)}}</text>
-							实付款
-							<text class="price">{{ moneyNum(item.pay_price)}}</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 = '#5dbc7c';
-					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>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 178
pages/order/orderDetail.vue


+ 0 - 237
pages/order/orderRefund.vue

@@ -1,237 +0,0 @@
-<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() {
-			if (!obj.refund) {
-				uni.showModal({
-					title: '错误',
-					content: '请填写退货理由',
-					showCancel: false
-				});
-				return false;
-			}
-			let obj = this;
-			refund({
-				text: obj.refund,
-				uni: obj.orderId,
-				refund_reason_wap_explain: obj.reason
-			}).then(function(e) {
-				uni.showToast({
-					title:'提交成功',
-					duration:1500
-				})
-			});
-		}
-	}
-};
-</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;
-	}
-	.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>

+ 0 - 204
pages/product/classify.vue

@@ -1,204 +0,0 @@
-<template>
-	<view class="container">
-		<!-- 头部轮播 -->
-		<view class="carousel-section">
-			<swiper class="carousel" autoplay="true" duration="400" interval="5000">
-				<swiper-item v-for="(item, index) in bannerImg" :key="index" class="carousel-item" @click="bannerNavToUrl(item)">
-					<image :src="item.img" mode=" scaleToFill" />
-				</swiper-item>
-			</swiper>
-		</view>
-		<view class="type-title-box flex">
-			<view class="title-border"></view>
-			<view class="title-content">
-				<text v-if="type == 1">精品推荐</text>
-				<text v-if="type == 2">热门榜单</text>
-				<text v-if="type == 3">首发新品</text>
-				<text v-if="type == 4">促销单品</text>
-			</view>
-			<view class="title-border"></view>
-		</view>
-
-		<view class="goodsList-box">
-			<view class="goodsList-item flex" :key="ind" v-for="(ls, ind) in list">
-				<image :src="ls.image" mode=" scaleToFill"></image>
-				<view class="goodsList-content">
-					<view class="title">
-						<text>{{ ls.store_name }}</text>
-					</view>
-					<view class="goods-money flex">
-						<view class="money-box">
-							<view class="money">
-								<text class="font-size-sm">¥</text>
-								{{ ls.price }}
-							</view>
-							<view class="otMoney-box">
-								<text class="otMoney">¥{{ ls.ot_price }}</text>
-								<text class="sales">已售{{ ls.sales }}件</text>
-							</view>
-						</view>
-						<view @click="navTo(ls)" class="cart iconfont iconcart"></view>
-					</view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-import { groomList } from '@/api/product.js';
-export default {
-	data() {
-		return {
-			list: [],
-			bannerImg: []
-		};
-	},
-	onLoad(option) {
-		// 获取查询对象
-		this.type = option.type;
-		// 加载基础数据
-		this.loadData();
-	},
-	methods: {
-		navTo: function(ls) {
-			uni.navigateTo({
-				url: '/pages/product/product?id=' + ls.id
-			});
-		},
-		// 请求载入数据
-		async loadData() {
-			groomList({}, this.type)
-				.then(({ data }) => {
-					// 保存轮播图
-					this.bannerImg = data.banner;
-					// 保存商品信息
-					this.list = data.list;
-				})
-				.catch(e => {
-					console.log(e);
-				});
-		},
-		// 轮播图跳转
-		bannerNavToUrl(item) {
-			// #ifdef H5
-			if (item.wap_link.indexOf('http') > 0) {
-				window.location.href = item.wap_link;
-			}
-			// #endif
-			if (item.wap_link) {
-				uni.navigateTo({
-					url: item.wap_link
-				});
-			}
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-page {
-	background: $page-color-base;
-}
-.carousel-section {
-	padding: 0;
-	.titleNview-placing {
-		padding-top: 0;
-		height: 0;
-	}
-	.swiper-dots {
-		left: 45rpx;
-		bottom: 40rpx;
-	}
-	.carousel {
-		width: 100%;
-		height: 360rpx;
-		.carousel-item {
-			width: 100%;
-			height: 100%;
-			overflow: hidden;
-		}
-		image {
-			width: 100%;
-			height: 100%;
-		}
-	}
-}
-// 中间标题样式
-.type-title-box {
-	padding: 40rpx;
-	.title-content {
-		height: 100%;
-		width: 200rpx;
-		text-align: center;
-		font-size: $font-lg;
-		font-weight: 500;
-		color: $font-color-dark;
-	}
-	.title-border {
-		width: 250rpx;
-		height: 2rpx;
-		background-color: #e9e9e9;
-	}
-}
-// 商品列表
-.goodsList-box {
-	.goodsList-item {
-		margin-bottom: 40rpx;
-		background-color: #ffffff;
-		padding: 30rpx;
-		image {
-			flex-shrink: 0;
-			border-radius: $border-radius-sm;
-			height: 180rpx;
-			width: 180rpx;
-		}
-		.goodsList-content {
-			margin-left: 20rpx;
-			flex-grow: 1;
-			height: 180rpx;
-			position: relative;
-			.title {
-				font-size: $font-base;
-				color: $font-color-dark;
-				font-weight: 500;
-			}
-			.goods-money {
-				position: absolute;
-				left: 0;
-				bottom: 0;
-				width:100%;
-				.money-box {
-					.money {
-						font-size: $font-lg;
-						color: $color-red;
-						font-weight: bold;
-					}
-					.otMoney-box {
-						font-size: $font-sm;
-						.otMoney {
-							color: $font-color-dark;
-							padding-right: 20rpx;
-						}
-						.sales {
-							color: $font-color-light;
-						}
-					}
-				}
-				.cart {
-					border: 1px solid $color-red;
-					color: $color-red;
-					font-size: $font-base;
-					font-weight: bold;
-					border-radius: 99px;
-					width: 55rpx;
-					height: 55rpx;
-					display: flex;
-					justify-content: center;
-					align-items: center;
-				}
-			}
-		}
-	}
-}
-</style>

+ 0 - 148
pages/product/common/KlonContent.vue

@@ -1,148 +0,0 @@
-<template>
-	<view class="introduce-section">
-		<text class="title clamp">{{ goodsObjact.title }}</text>
-		<!-- <button open-type="share" class="shareDate">
-			<image class="share-img" src="/static/img/img57.png"></image>
-			好物推荐
-		</button> -->
-		<text class="info" v-if="goodsObjact.store_info">{{ goodsObjact.store_info }}</text>
-		<view class="progress-box">
-			<progress :percent="goodsObjact.percent | parseIntTo" activeColor="#F65527" font-size="10" show-info border-radius="5" stroke-width="9" />
-			<view class="number">剩余{{ goodsObjact.percent | parseIntTo }}%</view>
-		</view>
-		<view class="price-box">
-			<text class="price-tip">¥</text>
-			<view class="price">
-				{{ goodsObjact.price }}
-				<text class="text">/份</text>
-				<text class="m-price" v-if="goodsObjact.ot_price > goodsObjact.price">¥{{ goodsObjact.ot_price }}</text>
-			</view>
-		</view>
-		<!-- <view class="price-green">
-			¥{{ goodsObjact.ot_price }}
-			<text>市场价</text>
-		</view> -->
-	</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 {};
-	}
-};
-</script>
-
-<style lang="scss">
-/* 标题简介 */
-.introduce-section {
-	position: relative;
-	background: #fff;
-	padding: 35rpx 0rpx;
-	padding-left: 35rpx;
-	.title {
-		font-size: 32rpx;
-		color: $font-color-dark;
-		height: 50rpx;
-		width: 70%;
-		.tip-o {
-			color: #ff3334;
-			padding-left: 15rpx;
-		}
-	}
-	.shareDate {
-		position: absolute;
-		top: 25rpx;
-		right: 25rpx;
-		font-size: 26rpx;
-		color: #3d3f46;
-		border-radius: 15rpx;
-		background-color: #ffffff;
-		height: 60rpx;
-		line-height: 60rpx;
-	}
-	.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: 99;
-			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;
-	}
-}
-</style>

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

@@ -1,68 +0,0 @@
-<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>

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

@@ -1,139 +0,0 @@
-<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>

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

@@ -1,115 +0,0 @@
-<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>

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

@@ -1,85 +0,0 @@
-<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>

+ 0 - 155
pages/product/common/groupBottom.vue

@@ -1,155 +0,0 @@
-<template>
-	<view class="goods-pay-box ">
-		<view class="goods-pay-buttom flex" v-if="!seckillObj.stop">
-			<view class="goods-pay bg-pinks">
-			<!-- 	<view class="goods-pay-o flex">
-					<view class="title">本单发起人奖金</view>
-					<view class="money">{{peopleMoney}}元</view>
-				</view>
-				<view class="goods-pay-t">
-					本单销售额佣金
-					<text>?%</text>
-				</view> -->
-				发起拼团得奖金
-			</view>
-			<!-- 单规格 -->
-			<view class="goods-pay bg-danger" v-if="many == 1" @click="buy(1)"><view class="goods-buttom">一键开团</view></view>
-			<!-- 多规格 -->
-			<view class="goods-pay bg-danger" v-else @click="buys"><view class="goods-buttom">一键开团</view></view>
-		</view>
-		<view class="goods-pay-stop" v-else>活动已结束</view>
-	</view>
-</template>
-
-<script>
-export default {
-	props: {
-		peoplePrize: {
-			default:0
-		},
-		seckillObj: {
-			type: Object,
-			default: function() {
-				return {
-					stopTime: 0, //结束时间
-					stop: false, //是否结束
-					stopTimeH: 0, //小时
-					stopTimeM: 0, //分钟
-					stopTimeS: 0 //秒钟
-				};
-			}
-		},
-		many:{
-			default:9
-		}
-	},
-	computed: {
-		peopleMoney() {
-			return +this.peoplePrize 
-		}
-	},
-	data() {
-		return {};
-	},
-	methods: {
-		buy(ls) {
-			this.$emit('buy', ls);
-		},
-		buys(){
-			this.$emit('specOPne');
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-// 底部拼团、秒杀支付按钮
-.goods-pay-box {
-	position: fixed;
-	left: 0;
-	bottom: 0;
-	z-index: 99;
-	width: 100%;
-	height: 100rpx;
-	line-height: 1;
-	color: #ffffff;
-	padding: 10rpx 30rpx;
-	text-align: center;
-	font-size: $font-lg;
-	background-color: #ffffff;
-	.goods-pay-buttom {
-		overflow: hidden;
-		border-radius: 99rpx;
-		height: 100%;
-	}
-	.bgLine {
-		background: linear-gradient(90deg, rgba(239, 78, 81, 1) 0%, rgba(244, 113, 59, 1) 100%);
-	}
-	// 拼团支付按钮
-	.goods-pay {
-		display: flex;
-		align-content: center;
-		flex-wrap: wrap;
-		justify-content: center;
-		height: 100rpx;
-		font-size: 22rpx;
-		.goods-buttom {
-			font-size: 35rpx;
-			width: 100%;
-		}
-
-		&.bg-danger {
-			// background:linear-gradient(14deg,rgba(254,107,38,1),rgba(255,50,40,1));
-			background: linear-gradient(270deg, #5dbc7c 0%, #5dbc7c 100%);
-		}
-		.goods-pay-o {
-			border: 1px solid #ddffdf;
-			.title {
-				background:linear-gradient(14deg,rgba(254,107,38,1),rgba(255,50,40,1));
-				padding: 5rpx 10rpx;
-				border-radius: 5rpx;
-				line-height: 1;
-				flex-shrink: 0;
-			}
-			.money {
-				padding: 5rpx 10rpx;
-				color: #ff0919;
-				flex-grow: 1;
-			}
-		}
-		.goods-pay-t {
-			padding: 5rpx 10rpx;
-			color: #ff0919;
-			text {
-				padding: 5rpx 10rpx;
-				color: rgba(249, 220, 221, 1);
-			}
-		}
-		.goods-pay-o,
-		.goods-pay-t {
-			width: 260rpx;
-			border-radius: 5rpx;
-			background-color: #fff5f4;
-			border: 1px solid #f9dcdd;
-		}
-	}
-	.bg-pinks {
-		// background: linear-gradient(90deg, #f9dcdd, #feeeee);
-		background: #ddffdf;
-		// color: #FD1A2B !important;
-		color: #5dbc7c;
-		font-size: 32rpx !important;
-		font-weight: bold;
-	}
-	.goods-pay-stop,
-	.goods-pay {
-		padding: 15rpx 0;
-		height: 100%;
-		width: 100%;
-	}
-	.goods-pay-stop {
-		background: $color-gray;
-		line-height: 70rpx;
-	}
-}
-</style>

+ 0 - 148
pages/product/common/groupContent.vue

@@ -1,148 +0,0 @@
-<template>
-	<view class="introduce-section">
-		<text class="title clamp">
-			{{goodsObjact.title}}
-			<!-- <text class="tip-o">截单后8小时到货</text> -->
-		</text>
-		<!-- <button open-type="share" class="shareDate flex_item">
-			<image class="share-img" src="/static/img/img085.png"></image>
-			<view class="name">分享</view>
-		</button> -->
-		<!-- <view class="progress-box">
-			<progress :percent="goodsObjact.percent | parseIntTo" activeColor="#F65527" font-size="10" show-info border-radius="5" stroke-width="9" />
-			<view class="number">剩余{{ goodsObjact.percent | parseIntTo }}%</view>
-		</view> -->
-		<view class="old_price" v-if="goodsObjact.pink_type == '达人团'">
-			¥{{ goodsObjact.product_price }}
-		</view>
-		<text class="info" v-if="goodsObjact.store_info">{{ goodsObjact.store_info }}</text>
-		<!-- <view class="price-green">
-			¥{{ goodsObjact.product_price }}
-			<text>市场价</text>
-		</view> -->
-	</view>
-</template>
-
-<script>
-export default {
-	props: {
-		goodsObjact: {
-			type: Object,
-			default: function() {
-				return {
-					store_info: '',
-					ot_price: ''
-				};
-			}
-		}
-	},
-	data() {
-		return {};
-	},
-	filters: {
-		parseIntTo(percent) {
-			percent = +percent * 100;
-			if (percent % 1 === 0) {
-				return percent;
-			} else {
-				percent = percent.toFixed(1);
-				return percent;
-			}
-		}
-	},
-	methods: {
-		Getcoupon() {
-			this.$emit('click');
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-/* 标题简介 */
-.introduce-section {
-	position: relative;
-	background: #fff;
-	padding: 35rpx 0rpx;
-	padding-left: 35rpx;
-	.title {
-		font-size: 32rpx;
-		color: $font-color-dark;
-		height: 50rpx;
-		width: 70%;
-		font-weight: bold;
-		.tip-o {
-			color: #ff3334;
-			padding-left: 15rpx;
-			font-size: 25rpx;
-		}
-	}
-	.shareDate {
-		padding: 15rpx 25rpx;
-		padding-bottom: 25rpx !important;
-		position: absolute;
-		top: 25rpx;
-		right: 0rpx;
-		font-size:30rpx;
-		color: #3d3f46;
-		border-bottom-left-radius: 25rpx;
-		border-top-left-radius: 25rpx;
-		background-color: #ffffff;
-		height: 60rpx;
-		background-color:#F2FEE6;
-		border: none !important;
-	}
-	uni-button:after{
-		border: none !important;
-	}
-	.share-img {
-		width: 45rpx;
-		height: 45rpx;
-		position: relative;
-		top: 5rpx;
-		left: 0;
-		margin-right: 10rpx;
-	}
-	.name{
-		position: relative;
-		top: 5rpx;
-	}
-	.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;
-		}
-	}
-	.old_price {
-		margin-top: 10rpx;
-		font-size: $font-base;
-		text-decoration: line-through;
-		color: #7a7a7a;
-	}
-	.info {
-		color: #999999;
-		font-size: 26rpx;
-		padding-bottom: 15rpx;
-	}
-	.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;
-		}
-	}
-}
-</style>

+ 0 - 195
pages/product/common/groupTime.vue

@@ -1,195 +0,0 @@
-<template>
-	<view class="introduce-section seckill-box-title">
-		<view class="title flex" style="width: 100%;">
-			<view class="title-left flex">
-				<view class="title-box flex_item">
-					<view class="title-o">
-						<view class="price-tip flex">
-							<view class="tip-info">¥</view>
-							<text class="price">{{ goodsObjact.price }}</text>
-						</view>
-					</view>
-					<view class="title-t">
-						<view class="peice-out"></view>
-						<view class="num">{{ goodsObjact.people }}人起团</view>
-					</view>
-				</view>
-				<view class="group flex">
-					<image src="/static/img/img064.png"></image>
-					<view class="text">{{goodsObjact.pink_type}}</view>
-				</view>
-			</view>
-			<view class="timeStop">
-				<view class="item">
-					<view class="timeStop-name">距离结束</view><!-- #FF3334 -->
-					<uni-countdown
-						class="timeBox"
-						color="#ffffff"
-						background-color="#5dbc7c"
-						splitor-color="#000000"
-						:show-day="false"
-						:hour="seckillObj.stopTimeH+(seckillObj.stopTimeD*24)"
-						:minute="seckillObj.stopTimeM"
-						:second="seckillObj.stopTimeS"
-					></uni-countdown>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-import uniCountdown from '@/components/uni-countdown/uni-countdown.vue';
-export default {
-	components: {
-		uniCountdown
-	},
-	props: {
-		goodsObjact: {
-			type: Object,
-			default: function() {
-				return {
-					price: 0,
-					product_price: 0,
-					people: 0
-				};
-			}
-		},
-		seckillObj: {
-			type: Object,
-			default: function() {
-				return {
-					stopTime: 0, //结束时间
-					stop: false, //是否结束
-					stopTimeH: 0, //小时
-					stopTimeM: 0, //分钟
-					stopTimeS: 0, //秒钟
-					stopTimeD: 0, //秒钟
-					upTime: 0
-				};
-			}
-		}
-	},
-	data() {
-		return {};
-	}
-};
-</script>
-
-<style lang="scss">
-/* 标题简介 */
-.introduce-section {
-	position: relative;
-	background: #fff;
-	.title {
-		font-size: 32rpx;
-		color: $font-color-dark;
-		.tip-o {
-			color: #ff3334;
-			padding-left: 15rpx;
-		}
-		.title-left {
-			padding: 15rpx;
-			width: 560rpx;
-		}
-	}
-	.title-box {
-		color: #ffffff;
-		.title-o {
-			.price {
-				font-size: 65rpx !important;
-				position: relative;
-				top: 8rpx;
-			}
-		}
-		.title-t {
-			font-size: 24rpx !important;
-			position: relative;
-			bottom: 10rpx;
-			padding-left: 10rpx;
-			top: 10rpx;
-			.peice-out {
-				text-decoration: line-through;
-			}
-			.num {
-				margin-top: 10rpx;
-				background-color: #ffffff;
-				color: #ff3a56;
-				border-radius: 8rpx;
-				padding: 0 5rpx ;
-				float: left;
-			}
-		}
-	}
-	.group {
-		color: #ffffff;
-		position: relative;
-		top: 8rpx;
-		image {
-			width: 55rpx;
-			height: 45rpx;
-		}
-		.text {
-			font-size: 40rpx !important;
-			padding-left: 10rpx;
-		}
-	}
-	.timeStop {
-		// background-color: #feeeee;
-		background: #ddffdf;
-		height: 120rpx;
-		padding: 0 10rpx;
-		position: relative;
-		width: 0;
-		flex-grow: 1;
-		.timeStop-name {
-			padding-top: 15rpx;
-			text-align: center;
-			// color: #ff3334;
-			color:#5dbc7c;
-			font-size: 20rpx;
-		}
-		.timeBox {
-			// margin-left: -10rpx;
-			position: absolute;
-			top: 50rpx;
-		}
-		.item{
-			height: 120rpx;
-			width: 0;
-			min-width: 100%;
-			position: relative;
-		}
-	}
-	.share-img {
-		width: 30rpx;
-		height: 30rpx;
-		position: relative;
-		top: 5rpx;
-		left: 0;
-		margin-right: 10rpx;
-	}
-}
-.seckill-box-title {
-	// background:linear-gradient(14deg,rgba(254,107,38,1),rgba(255,50,40,1)) !important;
-	background: linear-gradient(270deg, #5dbc7c 0%, #5dbc7c 100%) !important;
-	.price,
-	.m-price {
-		color: #ffffff !important;
-	}
-	.price-tip {
-		font-size: $font-base;
-		color: #ffffff !important;
-	}
-	.tip-info{
-		position: relative;
-		top:18rpx;
-		font-size: 32rpx !important;
-		padding-right: 8rpx;
-	}
-	.price {
-		font-size: 45rpx !important;
-		font-weight: bold;
-	}
-}
-</style>

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

@@ -1,120 +0,0 @@
-<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>

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

@@ -1,68 +0,0 @@
-<template>
-	<view class="klon-buttom">
-		<view class="klon-frame">
-			<button type="primary" class="klon-buy" @click="buy(1)" v-if="goodsObjact.stock > 0">
-				<view class="klon-buyText">立即购买</view>
-			</button>
-			<button type="primary" class="klon-no" v-if="goodsObjact.stock < 1">
-				<view class="klon-buyText">已售罄</view>
-			</button>
-		</view>
-	</view>
-</template>
-
-<script>
-export default {
-	props: {
-		goodsObjact: {
-			type: Object,
-			default: function () {
-				return {
-					
-				}
-			}
-		},
-	},
-	data() {
-		return {
-			
-		};
-	},
-	methods: {
-		buy(data){
-			this.$emit('buy',data)
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-.klon-buttom {
-	position: fixed;
-	bottom: 0rpx;
-	z-index: 95;
-	display: flex;
-	justify-content: center;
-	align-items: center;
-	width: 750rpx;
-	height: 100rpx;
-	padding: 10rpx 30rpx;
-	background-color: #ffffff;
-	.klon-frame {
-		width: 100%;
-		.klon-buy {
-			border-radius: 100rpx;
-			// background: linear-gradient(270deg, rgba(181,116,242, 1) 0%, rgba(139,86,254, 1) 100%);
-			background:linear-gradient(14deg,rgba(255,116,37,1),rgba(255,30,41,1));
-		}
-		.klon-no {
-			border-radius: 100rpx;
-			background: #999999;
-		}
-		.klon-buyText {
-			font-size: 34rpx;
-			width: 100%;
-		}
-	}
-}
-</style>

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

@@ -1,169 +0,0 @@
-<template>
-	<view class="page-bottom">
-		<navigator url="/pages/index/index" open-type="switchTab" class="p-b-btn">
-			<text class="iconfont iconhome"></text>
-			<text>首页</text>
-		</navigator>
-		<view class="p-b-btn" :class="{ active: goodsObjact.userCollect }" @click="toFavorite(goodsObjact)">
-			<text class="iconfont " :class="{ iconlike: !goodsObjact.userCollect, iconlikefill: goodsObjact.userCollect }"></text>
-			<text>收藏</text>
-		</view>
-		<view class="action-btn-group">
-			<button type="primary" class=" action-btn no-border add-cart-btn" @click="buy(2)">加入购物车</button>
-			<button type="primary" class=" action-btn no-border buy-now-btn" @click="buy(1)">立即购买</button>
-		</view>
-	</view>
-</template>
-
-<script>
-import { collectAdd, collectDel } from '@/api/product.js';
-export default {
-	props: {
-		many: {
-			default: 9
-		},
-		goodsObjact: {
-			default: function() {
-				return {};
-			}
-		},
-		goodsid:{
-			default: ''
-		}
-	},
-	data() {
-		return {};
-	},
-	methods: {
-		buy(type) {
-			this.$emit('specOPne',type);
-		},
-		//收藏
-		toFavorite(item) {
-			let obj = this;
-			item.userCollect = !item.userCollect;
-			if (!item.userCollect) {
-				collectDel({ id: obj.goodsid, category: 'product' }).then(function(e) {
-					uni.showToast({
-						title: '成功取消收藏',
-						type: 'top',
-						duration: 1500
-					});
-				});
-			} else {
-				collectAdd({ id: obj.goodsid, category: 'product' }).then(function(e) {
-					uni.showToast({
-						title: '成功加入收藏',
-						type: 'top',
-						duration: 1500
-					});
-				});
-			}
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-/* 底部操作菜单 */
-.page-bottom {
-	position: fixed;
-	bottom: 0rpx;
-	z-index: 95;
-	display: flex;
-	justify-content: center;
-	align-items: center;
-	width: 750rpx;
-	height: 120rpx;
-	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;
-			&.buy-now-btn {
-				background-color: #303e49;
-			}
-			&.add-cart-btn {
-				background-color: $base-color;
-			}
-		}
-	}
-}
-.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;
-	}
-}
-</style>

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

@@ -1,146 +0,0 @@
-<template>
-	<view class="introduce-section">
-		<text class="title clamp2">{{ goodsObjact.store_name }}</text>
-		<button open-type="share" class="shareDate">
-			<image class="share-img" src="../../../static/img/img57.png"></image>
-			好物推荐
-		</button>
-		<text class="info" v-if="goodsObjact.store_info">{{ goodsObjact.store_info }}</text>
-		<!-- <view class="progress-box">
-			<progress :percent="goodsObjact.percent | parseIntTo" activeColor="#F65527" font-size="10" show-info border-radius="5" stroke-width="9" />
-			<view class="number">剩余{{ goodsObjact.percent | parseIntTo }}%</view>
-		</view> -->
-		<view class="price-box">
-			<text class="price-tip">¥</text>
-			<view class="price">
-				{{ goodsObjact.price }}
-				<text class="text">/份</text>
-				<text class="m-price" v-if="goodsObjact.ot_price > goodsObjact.price">¥{{ goodsObjact.ot_price }}</text>
-			</view>
-		</view>
-		<view class="price-green">
-			¥{{ goodsObjact.ot_price }}
-			<text>市场价</text>
-		</view>
-	</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 {};
-	}
-};
-</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: 25rpx;
-		font-size: 26rpx;
-		color: #3d3f46;
-		border-radius: 15rpx;
-		background-color: #ffffff;
-		height: 60rpx;
-		line-height: 60rpx;
-	}
-	.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;
-	}
-}
-</style>

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

@@ -1,55 +0,0 @@
-<template>
-	<view class="carousel">
-		<swiper indicator-dots :circular="true" duration="400">
-			<swiper-item class="swiper-item" v-for="(item, index) in imgList" :key="index">
-				<view class="image-wrapper"><image :src="item" class="loaded" mode="scaleToFill"></image></view>
-			</swiper-item>
-		</swiper>
-	</view>
-</template>
-
-<script>
-export default {
-	props: {
-		imgList: {
-			type: Array,
-			default: function () {
-				return []
-			}
-		},
-	},
-	data() {
-		return {
-			
-		};
-	},
-};
-</script>
-
-<style lang="scss">
-.carousel {
-	/* #ifdef APP-PLUS */
-	padding-top: var(--status-bar-height);
-	/* #endif */
-	height: 700rpx;
-	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%;
-		}
-	}
-}
-</style>

+ 0 - 386
pages/product/groupBooking/detail.vue

@@ -1,386 +0,0 @@
-<template>
-	<view class="box">
-		<!-- 拼团 -->
-		<view class="lyy-a">
-			<view class="lyy-a-p">
-				<view class="lyy-a-f">
-					<view><image :src="goods.image" class="lyy-a-tu" /></view>
-					<view class="lyy-a-z">
-						<view class="lyy-a-word lyy-a-word2">{{ goods.title }}</view>
-						<view class="flex money-box">
-							<view class="lyy-a-f lyy-a-word margin-r-20">
-								<view class="lyy-a-word3">¥{{ goods.price }}</view>
-							</view>
-							<view class="lyy-a-tu2 lyy-a-f padding-c-20 border-radius-all">
-								<view class="lyy-a-tu3"><image src="http://lxscimg.liuniu946.com/2019-11-02_5dbd110b5928a.png" class="lyy-a-tu5"></image></view>
-								<view class="lyy-a-tu4 flex-shrink-false">{{ goods.people }}人拼</view>
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-		</view>
-		<view class="lyy-hx"></view>
-		<!-- 第二部分 -->
-		<view class="lyy-b padding-t-20">
-			<view class="lyy-b-p">
-				<view class="lyy-b-jz flex">
-					<view class="image1"><view class="lyy-b-word">剩余时间</view></view>
-				</view>
-				<view class="lyy-b-jz flex">
-					<uni-countdowns
-						v-if="pinkBool == 0"
-						color="#FFFFFF"
-						splitor-color="#FC5B62"
-						background-color="#FC5B62"
-						border-color="#FC5B62"
-						:show-day="false"
-						:hour="stopTime.stopTimeH"
-						:minute="stopTime.stopTimeM"
-						:second="stopTime.stopTimeS"
-					></uni-countdowns>
-				</view>
-				<view class="lyy-b-jz flex">
-					<span class="lyy-b-word2">{{ pinkT.people }}</span>
-					<span class="lyy-b-word3">人成团,还差{{ peopleNub }}人</span>
-				</view>
-				<view class="lyy-b-jz flex">
-					<view class="cmy-user-box">
-						<view class="user-list">
-							<view class="lyy-y bg-gray"><image :src="pinkT.avatar" class="user-list-img" /></view>
-							<view class="lyy-y-word clamp">{{ pinkT.nickname }}</view>
-						</view>
-						<view class="user-list" v-for="(item , i) in people" :key='i'>
-						    <view class="lyy-y bg-gray"><image :src="item.avatar" class="user-list-img" /></view>
-						    <view class="lyy-y-word clamp">{{ item.nickname }}</view>
-						</view>
-						<view class="user-list" v-for="(l, i) in peopleNub" :key="i">
-							<view class="lyy-y bg-gray"></view>
-							<view class="lyy-y-word clamp">待邀请</view>
-						</view>
-					</view>
-				</view>
-				<view class="lyy-b-jz flex">
-					<view class="lyy-b-but" v-if="status == 1 && pinkBool == 0" @click="invitation">邀请好友参团</view>
-					<view class="lyy-b-but" v-if="status == 0&&pinkBool==0" @click="goBuy">立即加入</view>
-					<!-- <view class="lyy-b-but" @click="goBuy">立即加入</view> -->
-					<view class="lyy-b-but bg-gray" v-if="pinkBool == -1">拼团失败</view>
-					<view class="lyy-b-but" v-if="pinkBool == 1">拼团成功</view>
-				</view> 
-			</view>
-		</view>
-		<view class="lyy-hx"></view>
-		<!-- 第三部分 -->
-		<view class="lyy-c">
-			<view class="lyy-c-p">
-				<view class="lyy-c-word">
-					<view>拼团规则:</view>
-					<view>1.点击商品进入商品详情,通过超值拼团进入订单支付 页,用户付款成功后,按页面提示分享给微信好友。</view>
-					<view>2.好友通过分享,加入超值拼团,完成订单支付,待达成 拼团人数后,拼团成功。</view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-import uniCountdowns from '@/components/uni-countdown/uni-countdowns.vue';
-import { getCombinationLisPink } from '@/api/product.js';
-import { groupGoods } from '@/api/product.js';
-import { timeComputed } from '@/utils/rocessor.js';
-import { mapState } from 'vuex';
-// 倒计时
-export default {
-	data() {
-		return {
-			gp_id: 0, //拼团商品id
-			goods: {}, //商品信息
-			pinkT: {}, //拼团团长信息
-			people: [], //拼团成员信息
-			status: 0, //判断是否为团长
-			gid: 0,
-			user_info: {}, //当前用户信息
-			// 倒计时
-			stopTime: {
-				stopTimeH: 0,
-				stopTimeM: 0,
-				stopTimeS: 0
-			},
-			pinkBool: 0, //拼团状态0为待拼团 -1为拼团失败 1为拼团成功
-			userBool: 0, //判断用户是否已经参与拼团 0未参加 1为已参加
-			spread: '', //默认没有邀请人
-			userInfo: {} ,//当前用户信息
-			peopleNub:0
-		};
-	},
-	onLoad(e) {
-		// 保存拼团订单id
-		this.gp_id = e.id;
-		// 判断是否有人邀请
-		if (e.spread) {
-			// 存储邀请人
-			this.spread = e.spread;
-			uni.setStorageSync('spread', option.spread);
-		}
-	},
-	onShow() {
-		this.getData();
-	},
-	components: {
-		uniCountdowns
-	},
-	methods: {
-		//前往参团
-		goBuy() {
-			let _self = this;
-			uni.navigateTo({
-				url: '/pages/order/createOrder?pinkId=' + this.gp_id + '&type=pink' + '&pid=' + this.goods.product_id + '&gid=' + this.goods.id + '&merid=' + this.goods.mer_id
-			});
-		},
-		//邀请参团
-		invitation() {
-			let obj = this;
-			// 判断拼团是否已经结束
-			if (obj.userBool == 0) {
-				uni.showModal({
-					title: '提示',
-					content: '该拼团已经结束!',
-					showCancel: false,
-					success: res => {},
-					fail: () => {},
-					complete: () => {}
-				});
-				return;
-			}
-			uni.navigateTo({
-				url: '/pages/product/groupBooking/inviteImg?id=' + this.pinkT.id + '&spread=' + this.userInfo.uid,
-				success: res => {},
-				fail: e => {
-					console.log(e);
-				},
-				complete: () => {}
-			});
-		},
-		// #ifdef H5
-		// 加载微信html5页面分享方法
-		shareDate() {
-			let obj = this;
-			// 判断是否微信浏览器
-			let bool = uni.getStorageSync('weichatBrowser') || '';
-			if (bool) {
-				// 过滤微信强制添加的链接地址
-				url = url.replace('?from=singlemessage', '');
-				let data = {
-					link: url, // 分享链接
-					imgUrl: obj.goodsObjact.image, // 分享图标
-					desc: obj.goodsObjact.store_info,
-					title: obj.goodsObjact.store_name,
-					success: function() {}
-				};
-				obj.weichatObj.updateAppMessageShareData(data);
-				obj.weichatObj.updateTimelineShareData(data);
-			}
-		},
-		// #endif
-		// 获取拼团信息
-		getData() {
-			let obj = this;
-			// let data = {gp_id:_self.gp_id},
-			getCombinationLisPink({}, this.gp_id).then(e => {
-				let r = e.data;
-				// 保存拼团商品详细
-				obj.goods = r.store_combination;
-				// 保存团长信息
-				obj.pinkT = r.pinkT;
-				/* 计算倒计时 */
-				obj.timeComputed(obj.pinkT.stop_time * 1000);
-				// 获取拼团用户列表
-				obj.people = r.pinkAll;
-				// 获取当前是否已参与过这个拼团
-				obj.userBool = r.userBool;
-				// 判断当前用户是否为团长
-				if (r.pinkT.uid == r.userInfo.uid) {
-					// 显示邀请好用选项
-					obj.status = 1;
-				}
-				// 保存当前登录用户信息
-				obj.userInfo = r.userInfo;
-				// 获取拼团是否已经过期
-				obj.pinkBool = r.pinkBool;
-				obj.peopleNub = obj.pinkT.people - 1 - obj.people.length;
-				// #ifdef H5
-				// 加载微信分享配置
-				this.shareDate();
-				// #endif
-			});
-		},
-		// 计算倒计时时间
-		timeComputed(da) {
-			let obj = this;
-			let stopTime = timeComputed(da);
-			obj.stopTime.stopTimeH = stopTime.hours;
-			obj.stopTime.stopTimeM = stopTime.minutes;
-			obj.stopTime.stopTimeS = stopTime.seconds;
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-.box {
-	/* #ifdef APP-PLUS | MP */
-	padding-top: var(--status-bar-height);
-	/* #endif */
-}
-.lyy-c {
-	width: 100%;
-	background: rgba(255, 255, 255, 1);
-	.lyy-c-word {
-		font-size: 28rpx;
-		color: rgba(102, 102, 102, 1);
-		line-height: 50rpx;
-	}
-
-	.lyy-c-p {
-		padding: 39rpx 30rpx;
-	}
-}
-
-.lyy-wrap {
-	background-color: #f4f4f4;
-}
-
-.lyy-hx {
-	height: 14rpx;
-}
-
-.image1 {
-	width: 200rpx;
-	height: 33rpx;
-	background: url('http://lxscimg.liuniu946.com/2019-11-02_5dbd0e10a2160.png') center center no-repeat;
-	background-size: 200rpx auto;
-}
-
-.lyy-b {
-	width: 100%;
-	background-color: white;
-	.lyy-b-p {
-		padding: 30rpx 45rpx;
-		.lyy-b-word2,
-		.lyy-b-word3 {
-			font-size: 28rpx;
-			font-weight: bold;
-		}
-		.lyy-b-word2 {
-			color: #fc5b62;
-		}
-		.lyy-b-word3 {
-			color: #1d2023;
-		}
-		.lyy-b-jz {
-			width: 100%;
-			justify-content: center;
-			margin-bottom: 20rpx;
-			.lyy-y {
-				width: 80rpx;
-				height: 80rpx;
-				margin: 0px 15rpx;
-				border-radius: 40rpx;
-				overflow: hidden;
-				.user-list-img {
-					width: 100%;
-					height: 100%;
-				}
-			}
-			.lyy-y-word {
-				margin-top: 10rpx;
-				font-size: 28rpx;
-				text-align: center;
-				width: 110rpx;
-			}
-			.lyy-b-but {
-				width: 550rpx;
-				height: 80rpx;
-				background: #fc5b62;
-				border-radius: 100rpx;
-				text-align: center;
-				color: white;
-				line-height: 80rpx;
-				font-size: 32rpx;
-			}
-			.cmy-user-box {
-				.user-list {
-					display: inline-block;
-					line-height: 1;
-				}
-			}
-		}
-		.lyy-b-word {
-			text-align: center;
-			font-size: 26rpx;
-			color: rgba(29, 32, 35, 1);
-		}
-	}
-}
-
-// 商品列表样式
-.lyy-a {
-	width: 100%;
-	background-color: white;
-	.lyy-a-p {
-		padding: 22rpx 30rpx;
-		.lyy-a-f {
-			display: flex;
-			align-items: center;
-			.lyy-a-f2 {
-				flex: 1;
-			}
-			.lyy-a-tu {
-				width: 122rpx;
-				height: 122rpx;
-			}
-			.lyy-a-z {
-				padding-left: 30rpx;
-				flex-grow: 1;
-				.money-box {
-					justify-content: flex-start;
-					.lyy-a-tu2 {
-						background: rgba(255, 255, 255, 1);
-						border: 1rpx solid #fc5b62;
-						.lyy-a-tu3 {
-							background-color: #fc5b62;
-							padding: 2px 4px 0px 4px;
-							text-align: center;
-							height: 26rpx;
-							.lyy-a-tu5 {
-								width: 20rpx;
-								height: 20rpx;
-								display: block;
-							}
-						}
-						.lyy-a-tu4 {
-							margin-left: 2px;
-							font-size: 10px;
-							color: #fc5b62;
-							padding: 0px 10rpx;
-							text-align: center;
-						}
-					}
-				}
-				.lyy-a-word {
-					line-height: 56rpx;
-					.lyy-a-word3 {
-						font-size: 28rpx;
-						font-weight: bold;
-						color: #fc5b62;
-					}
-				}
-				.lyy-a-word2 {
-					font-size: 30rpx;
-					color: rgba(29, 32, 35, 1);
-				}
-			}
-		}
-	}
-}
-</style>

+ 0 - 236
pages/product/groupBooking/index.vue

@@ -1,236 +0,0 @@
-<template>
-	<view class="lyy-bg4">
-		<view class="lyy-f-a">
-			<view class="lyy-f-b lyy-flex">
-				<view class="lyy-f-c item" @click="goProduct(items)" v-for="(items, ind) in goodsList" :key="ind">
-					<view class="content">
-						<view><image :src="items.image" class="lyy-f-image" /></view>
-						<view class="lyy-f-word1 lyy-f-jl ellipsis">{{ items.title }}</view>
-						<view class="lyy-flex2">
-							<view class="lyy-flex3">
-								<view class="lyy-f-word2 lyy-f-jl">¥{{ items.price * 1 }}</view>
-							</view>
-							<view class="lyy-a-tu2 lyy-flex2">
-								<view class="lyy-a-tu3"><image src="../../../static/img/img11.png" class="lyy-a-tu5" /></view>
-								<view class="lyy-a-tu4">{{ items.people }}人拼</view>
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-		</view>
-		<uni-load-more :status="loadingType"></uni-load-more>
-	</view>
-</template>
-
-<script>
-import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
-import { getCombinationList } from '@/api/product.js';
-export default {
-	components: {
-		uniLoadMore
-	},
-	data() {
-		return {
-			goodsList: [],
-			loadingType: 'more', //加载更多状态
-			limit: 20, //每次加载数据条数
-			page: 1 //当前页数
-		};
-	},
-	onLoad(options) {
-		this.loadData();
-	},
-	//下拉刷新
-	onPullDownRefresh() {
-		this.loadData('refresh');
-	},
-	//监听页面是否滚动到底部加载更多
-	onReachBottom() {
-		this.loadData();
-	},
-	methods: {
-		//加载商品 ,带下拉刷新和上滑加载
-		async loadData(type = 'add', loading) {
-			let obj = this;
-			let data = {
-				page: obj.page,
-				limit: obj.limit
-			};
-			//没有更多直接返回
-			if (type === 'add') {
-				if (obj.loadingType === 'nomore') {
-					return;
-				}
-				obj.loadingType = 'loading';
-			} else {
-				obj.loadingType = 'more';
-			}
-
-			// 加载商品信息
-			getCombinationList(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();
-						}
-					}
-				})
-				.catch();
-		},
-		goProduct(e) {
-			uni.navigateTo({
-				url: '/pages/product/groupBooking/productGroup?id=' + e.id
-			});
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-page {
-	height: 100%;
-}
-// 拼团列表
-.lyy-f-a {
-	margin: 0px 15px;
-
-	.lyy-flex {
-		/* 内部模块1*/
-		display: flex;
-		justify-content: space-between;
-	}
-	.lyy-f-b {
-		flex-wrap: wrap;
-		.lyy-f-c {
-			flex: 0 0 50%;
-			/* width: 50%; */
-			margin: 10px 0px 0px 0px;
-		}
-
-		.item:nth-child(2n + 1) .content {
-			margin: 0px 7.5px 0px 0px;
-			border-radius: 10px;
-		}
-	}
-
-	.lyy-f-b .content {
-		background-color: white;
-		.lyy-f-image {
-			width: 100%;
-			height: 340rpx;
-			border-radius: 10rpx 10rpx 0rpx 0rpx;
-		}
-		.ellipsis {
-			width: 165px;
-			white-space: nowrap;
-			overflow: hidden;
-			text-overflow: ellipsis;
-		}
-		.lyy-f-jl {
-			padding: 5px 7px;
-		}
-		.lyy-f-word1 {
-			font-size: 12px;
-			color: rgba(50, 50, 50, 1);
-			line-height: 20px;
-			width: 300rpx;
-			white-space: nowrap;
-			overflow: hidden;
-			text-overflow: ellipsis;
-		}
-	}
-
-	.item:nth-child(2n) .content {
-		margin: 0px 0 0px 7.5px;
-		border-radius: 10px;
-	}
-
-	.lyy-f-word3 {
-		font-size: 12px;
-		text-decoration: line-through;
-		color: rgba(139, 139, 139, 1);
-	}
-
-	.lyy-f-word5 {
-		font-size: 20rpx;
-		color: rgba(153, 153, 153, 1);
-		margin: 20rpx 0px 0px 0px;
-	}
-
-	.lyy-f-word4 {
-		height: 26px;
-		background: #6fb22f;
-		color: white;
-		text-align: center;
-	}
-
-	.lyy-f-d {
-		height: 24rpx;
-		border: 1px solid rgba(252, 91, 98, 1);
-		border-radius: 3px;
-		font-size: 20rpx;
-		text-align: center;
-		width: 50rpx;
-		color: rgba(252, 91, 98, 1);
-		margin: 23rpx 0rpx 0rpx 0rpx;
-		line-height: 24rpx;
-	}
-
-	.lyy-flex2 {
-		display: flex;
-		padding-right: 10rpx;
-		align-items: center;
-		.lyy-flex3 {
-			flex: 1;
-			.lyy-f-word2 {
-				font-size: 14px;
-				color: rgba(241, 13, 59, 1);
-			}
-		}
-		&.lyy-a-tu2 {
-			height: 34rpx;
-			background: rgba(255, 255, 255, 1);
-			border: 1px solid #fc5b62;
-			border-radius: 2px;
-			margin: 10rpx 0rpx;
-
-			.lyy-a-tu3 {
-				height: 30rpx;
-				background-color: #fc5b62;
-				padding: 0px 6px;
-				text-align: center;
-				.lyy-a-tu5 {
-					width: 20rpx;
-					height: 20rpx;
-					margin-top: 6rpx;
-					display: block;
-				}
-			}
-
-			.lyy-a-tu4 {
-				margin-left: 4rpx;
-				font-size: 24rpx;
-				line-height: 30rpx;
-				color: #fc5b62;
-				padding: 0px 10rpx;
-				text-align: center;
-			}
-		}
-	}
-}
-</style>

+ 0 - 75
pages/product/groupBooking/inviteImg.vue

@@ -1,75 +0,0 @@
-<template>
-	<view class="box">
-		<image class="inviteImg" :src="image" ></image>
-		<view class="lyy-b-but">长按图片下载</view>
-		<!-- <view class="lyy-b-but" @click="domImg">点击下载图片</view> -->
-	</view>
-</template>
-
-<script>
-	import { getCombinationPoster } from '@/api/product.js';
-	import { mapState } from 'vuex';
-	export default {
-		data() {
-			return {
-				image:'',//海报
-				ptId:'',//拼团id
-			}
-		},
-		computed: {
-			...mapState(['baseURL','urlFile'])
-		},
-		onLoad(option) {
-			// 保存拼团id
-			this.ptId = option.id;
-			// 保存团长id
-			this.spread = option.spread;
-			// 加载分享图
-			this.getCombinationPoster();
-		},
-		methods: {
-			// 加载海报
-			getCombinationPoster() {
-				let obj = this;
-				getCombinationPoster({
-					id:obj.ptId,
-					// #ifdef H5|APP-PLUS
-					url:obj.baseURL+obj.urlFile+'/#/pages/product/groupBooking/detail?id='+obj.ptId+'&spread='+obj.spread,
-					from:'wechat',//来源wechat公众号
-					// #endif
-					// #ifdef MP
-					from:'routine',//来源routine小程序
-					url:'/pages/product/groupBooking/detail?id='+obj.ptId
-					// #endif
-				}).then((e) => {
-					obj.image = e.data.url;
-				}).catch((e) => {
-					console.log(e);
-				})
-			}
-		},
-	}
-</script>
-
-<style lang="scss">
-	page{
-		background-color: #FFFFFF;
-		height: 100%;
-	}
-	.box{
-		.inviteImg{
-			width: 750rpx;
-			height: 1200rpx;
-		}
-	}
-	.lyy-b-but {
-		height: 80rpx;
-		background: #fc5b62;
-		border-radius: 100rpx;
-		text-align: center;
-		color: white;
-		line-height: 80rpx;
-		font-size: 32rpx;
-		margin:  0 100rpx;
-	}
-</style>

+ 0 - 2094
pages/product/groupBooking/productCollage.vue

@@ -1,2094 +0,0 @@
-<template>
-	<view class="container">
-		<!-- 轮播图 -->
-		<view class="carousel">
-			<swiper indicator-dots :circular="true" duration="400">
-				<swiper-item class="swiper-item" v-for="(item, index) in imgList" :key="index">
-					<view class="image-wrapper"><image :src="item" class="loaded" mode="scaleToFill"></image></view>
-				</swiper-item>
-			</swiper>
-		</view>
-		<!-- 介绍部分 -->
-		<view class="introduce-section">
-			<view class="introduce-price flex1">
-				<view class="price">
-					<view class="price-left">
-						<view class="left-1">¥</view>
-						<view class="left-2">{{goodsObjact.price}}</view>
-					</view>
-					<!-- <view class="price-right" >单买价 ¥{{goodsObjact.product_price}}</view> -->
-				</view>
-				<view class="people flex_item">
-					<view class="people_number">{{goodsObjact.people}}人拼</view>
-				</view>
-			</view>
-			<view class="title" >{{goodsObjact.title}}</view>
-			<view class="bot-row flex1">
-				<view>快递:¥ {{goodsObjact.postage}}</view>
-				<view>剩余:{{ goodsObjact.allStock}}件</view>
-				<view>销量:{{ goodsObjact.sales }}</view>
-			</view>
-		</view>
-		<!-- <view class="c-list">
-			<view class="c-row b-b"><text class="tit">拼团玩法</text></view>
-			<view class="c-row b-b">
-				<view class="c-text">
-					①开团/参团
-					<text>——</text>
-					②邀请好友
-					<text>——</text>
-					③满员发货
-				</view>
-			</view>
-			<view class="c-row b-b" @click="toggleSpec()" v-if="goodsType == 2">
-				<text class="tit">购买数量</text>
-				<view class="con">
-					<text class="selected-text">{{ goodsNumber }}</text>
-				</view>
-				<text class="iconfont iconenter"></text>
-			</view>
-		</view> -->
-		<view class="pinklistbox" v-if="pinkTlist.length > 0">
-			<view class="listbox-1 flex1">
-				<view >{{pinkTlist.length}}人在拼单,可直接参与</view>
-				<view class="more flex-center" @click="opens_popup" v-if="more">查看全部
-					<image src="../../../static/img/img39.png"></image>
-				</view>
-			</view>
-			<view class="pinklist">
-				<view v-for="(ls, ind) in showlist" :key="ind" class="flex pinklist_list">
-					<view class="pink_row flex1">
-						<view class="pink_img"><image :src="ls.avatar"></image></view>
-						<view class="pink_name">{{ ls.nickname }}</view>
-					</view>
-					<view class="pink_tpl flex1">
-						<view >
-							<view class="pink_people">
-								还差
-								<text>{{ ls.count}}</text>
-								人拼团
-							</view>
-							<!-- <view class="pink_people">
-								剩余{{ls.time || '00:00:00'}}
-							</view> -->
-						</view>
-						<view class="pint" @click="groupBooking(ls.id)">
-							去拼单
-							<!-- <text class="iconfont iconenter"></text> opens_popups-->
-						</view>
-					</view>
-				</view>
-			</view>
-		</view>
-		<!-- 评价 -->
-		<!-- <view class="eva-section" v-if="replyCount > 0" @click="navTo('/pages/product/reply')">
-			<view class="e-header">
-				<text class="tit">评价</text>
-				<text class="number">({{replyCount}})</text>
-				<text class="tip">全部评价</text>
-				<text class="iconfont iconenter"></text>
-			</view>
-			<view class="eva-box">
-				<view class="box-1 flex1">
-					<view class="left flex-start">
-						<image :src="commentList.avatar"></image>
-						<view class="content">
-							<view class="content-name">{{commentList.nickname}}</view>
-							<view class="content-time">{{commentList.add_time}}</view>
-						</view>
-					</view>
-					<view class="right flex-upDown-center">
-						<view><uniRate text="1" size="14" margin="1" :value="commentList.product_score" ></uniRate></view>
-						<text class="red">{{commentList.product_score}}分</text>
-					</view>
-				</view>
-				<view class="box-2">{{commentList.comment}}</view>
-				<view class="box-3">
-					<view v-for="(item,index) in commentList.pics" :key="index" class="box-3-1">
-						<image :src="item"></image>
-					</view>
-				</view>
-			</view>
-		</view> -->
-		<view class="eva-section" v-if="reply.length > 0" @click="navTo('/pages/product/reply?id=' + goodsid)">
-			<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="time">{{ reply.add_time }}</text>
-					</view>
-				</view>
-			</view>
-		</view>
-		<!-- 商品详情图 -->
-		<view class="detail-desc">
-			<view class="desc-title flex-center">
-				<view class="one"></view>
-				商品详情
-				<view class="two"></view>
-			</view>
-			<rich-text :nodes="goodsObjact.description"></rich-text>
-		</view>
-		<!-- <view class="detail-desc">
-			<view class="d-header"><text>图文详情</text></view>
-			<rich-text :nodes="goodsObjact.description"></rich-text>
-		</view> -->
-		<!-- 拼团商品 -->
-		<view class="page-bottom" >
-			<!-- <navigator url="/pages/index/index" open-type="switchTab" class="p-b-btn">
-				<text class="iconfont iconhomefill"></text>
-				<text>首页</text>
-			</navigator> -->
-			<!--<view class="botton-1 flex-center">
-				<view class="botton-frame" @click="toFavorite(goodsObjact)">
-					<view class="img-box" v-if="goodsObjact.userCollect == false"><image src="../../static/label/img02.png"></image></view>
-					<view class="img-box" v-if="goodsObjact.userCollect == true"><image src="../../static/label/img08.png"></image></view>
-					<view class="word" :class="{ active: goodsObjact.userCollect }">收藏</view>
-				</view>
-			</view> 
-			<view class="p-b-btn" :class="{ active: goodsObjact.userCollect }" @click="toFavorite(goodsObjact)">
-				<text class="iconfont iconlikefill"></text>
-				<text>收藏</text>
-			</view> -->
-			<view class="action-btn-group">
-				<!-- <button type="primary" class=" action-btn no-border btn-favorites-btn" @click="navTo('/pages/favorites/favorites')">收藏夹</button> -->
-				<!-- <button type="primary" class=" action-btn no-border buy-now-btn" @click="toFavorite(goodsObjact)">{{ goodsObjact.userCollect ? '取消收藏' : '收藏' }}</button> -->
-				<button type="primary" class=" action-btn no-border add-cart-btn" @click="specOPne()">一键开团</button>
-			</view>
-		</view>
-		
-		<!-- 规格-模态层弹窗 -->
-		<view class="popup spec" :class="specClass" @touchmove.stop.prevent="stopPrevent" @click="toggleSpec()">
-			<!-- 遮罩层 -->
-			<view class="mask"></view>
-			<view class="layer attr-content" @click.stop="stopPrevent">
-				<view class="a-t">
-					<image :src="actionImage"></image>
-					<view class="right">
-						<text class="name">{{ goodsObjact.store_name }}</text>
-						<text class="price">¥{{ actionPrice * goodsNumber }}</text>
-						<text class="stock">库存:{{ goodsStore }}件</text>
-						<view class="selected" v-if="specList != ''">
-							已选:
-							<text class="selected-text" v-for="(sItem, sIndex) in specSelected" :key="sIndex">{{ sItem }}</text>
-						</view>
-					</view>
-				</view>
-				<view v-for="(item, index) in specList" :key="index" class="attr-list">
-					<text>{{ item.attr_name }}</text>
-					<view class="item-list">
-						<text
-							v-for="(childItem, childIndex) in item.attr_value"
-							:key="childIndex"
-							class="tit"
-							:class="{ selected: childItem.check }"
-							@click="selectSpec(childItem, item, index)"
-						>
-							{{ childItem.attr }}
-						</text>
-					</view>
-				</view>
-				<!-- <view class="attr-list">
-					<text>购买数量</text>
-					<view class="item-list">
-						<uni-number-box class="step" :isMin="true" :value="goodsNumber" :min="1" :max="goodsNumberMax" @eventChange="numberChange"></uni-number-box>
-					</view>
-				</view> -->
-				<button class="btn" @click.stop="buy" v-show="buys_show">完成</button>
-				<button class="btn" style="background-color: #999999;" v-show="buys_shows">售罄</button>
-			</view>
-		</view>
-		
-		<!-- 查看全部拼单 -->
-		<uni-popup ref="popup" type="center" >
-			<view class="popup-row">
-				<view class="popup-1">
-					正在拼单
-				</view>
-				
-				<scroll-view scroll-y="true" class="popcont-box">
-					<view class="popup-2">
-						<view v-for="(item,index) in pinkTlist" :key="index" class="popup-2-row flex1">
-							<view class="row-1 flex1">
-								<view class="one">
-									<image :src="item.avatar"></image>
-									<view class="two">
-										<view class="two-1">{{item.nickname }}</view>
-										<!-- <view>剩余 {{item.time}}</view> -->
-									</view>
-								</view>
-								
-								<text class="two-1-1">还差{{item.count}}人</text>
-							</view>
-							<view class="row-2" @click="groupBooking(item.id)">
-								去拼单
-							</view>
-						</view>
-					</view>
-				</scroll-view>
-				
-			</view>
-			<view class="delete" @click="closes_popup"><image src="../../../static/img/deletes.png"></image></view>
-		</uni-popup>
-		
-		<!-- <uni-popup ref="popups" type="center" >
-			<view class="popup-rows" >
-				<view class="rows-1">参与李丹的拼单</view>
-				<view class="rows-2">仅剩<text class="red">1</text>个名额,23:41:55后结束</view>
-				<view class="rows-3 flex1">
-					<view class="rows-3-group" v-for="(item,index) in information" >
-						<view class="group-1">
-							<image src="../../static/delete/timg.jpg"></image>
-							<view class="group-1-1" >团长</view>
-						</view>
-						<view class="group-2">婷930sadasa</view>
-					</view>
-					<view class="rows-3-group" v-for="i in (5 - information.length) " >
-						<view class="group-1">
-							<image src="../../static/label/blank.png"></image>
-						</view>
-						<view class="group-2">带邀请</view>
-					</view>
-				</view>
-				<view class="rows-4" @click="navTo('/pages/order/createOrder')">参与拼单</view>
-			</view>
-			<view class="delete" @click="groupBooking()"><image src="../../static/label/deletes.png"></image></view>
-		</uni-popup>
-		 -->
-		
-		
-		<!-- #ifdef H5 -->
-        <!-- <view class="btn_fenxiang" @click="open">分享</view> -->
-        <view class="mask" v-show="show"><image @click="onTap" src="https://mmz.liuniu946.com/statics/img/shareimg.png"></image></view>
-        <!-- #endif -->  
-		<!-- #ifdef MP-WEIXIN -->
-		<button  open-type="share" class="shareDate">分享</button>
-		<!-- #endif -->
-	</view>
-</template>
-<script>
-import { mapState } from 'vuex';
-
-import { uniFav } from '@/components/uni-fav/uni-fav.vue';
-import { groupGoods, cartAdd, collectAdd, collectDel, productDetail } from '@/api/product.js';
-import { saveUrl } from '@/utils/loginUtils.js';
-import uniNoticeBar from '@/components/uni-notice-bar/uni-notice-bar.vue';
-import uniRate from '@/components/uni-rate/uni-rate.vue';
-import uniPopup from '@/components/uni-popup/uni-popup.vue'
-import uniPopupMessage from '@/components/uni-popup/uni-popup-message.vue'
-import uniPopupDialog from '@/components/uni-popup/uni-popup-dialog.vue'
-import uniNumberBox from '@/components/uni-number-box.vue';
-// #ifdef H5
-import { weixindata } from '@/utils/wxAuthorized';
-// #endif
-export default {
-	components: {
-		uniNumberBox,
-		uniFav,
-		uniNoticeBar,
-		uniRate,
-		uniPopup,
-		uniPopupMessage,
-		uniPopupDialog
-	},
-	// #ifdef MP
-	onShareAppMessage: function(res) {
-		if (res.from === 'button') {
-			// 来自页面内分享按钮
-			let pages = getCurrentPages();
-			// 获取当前页面
-			let page = pages[pages.length - 1];
-			let path = '/' + page.route + '?';
-			// 保存传值
-			for (let i in page.options) {
-				path += i + '=' + page.options[i] + '&';
-			}
-			// 保存邀请人
-			path += 'spread=' + this.userInfo.uid;
-			let data = {
-				path: path,
-				imageUrl: this.goodsObjact.image,
-				title: this.goodsObjact.title
-			};
-			return data;
-		}
-	},
-	// #endif
-	data() {
-		return {
-			imgList: [], //商品轮播图
-			goodsObjact: {}, //保存商品数据
-			pinkTlist:{
-				length:5
-			}, //进行中的拼团的信息
-			showlist: [],//进行中的拼团前两组的信息
-			replyCount:0,//评价总数
-			commentList:{},
-			specList: [],
-			ishow:'',
-			information:[],
-			popuplist:[],
-			show: false,
-			showModal: true, //拼单遮罩层
-			more: true, //查看更多按钮
-			autoplay: true,
-			vertical: true,
-			interval: 3000,
-			duration: 500,
-			buys_show: true,
-			buys_shows: false,
-			circular: true,
-			type: 1, //默认支付方式add为
-			specClass: 'none', //显示隐藏弹窗
-			actionImage: '', //商品图片
-			goodsid: '', //商品id
-			actionPrice: '', //商品价格
-			// specClass: 'none', //显示隐藏弹窗
-			shareList: [], //分享列表
-			goodsNumberMax: 0, //商品库存
-			//图片循环
-			people: '', //拼团人数
-			goodsNumber: 1, //购买数量(开团数量为1,整团数量为1*参团人数)
-			carnumber: '', //整团购买商品数量
-			reply: {}, //商品数据
-			list: '', //详情数据
-			goodsType: 1, //商品类型1秒杀商品0为普通商品2为拼团商品3为新人礼包
-			count: 0, //点击查看更多
-			showmore: true,
-			pinkTlistnum: '',
-			spread: '',
-			chooseGoodsNumber: 1, //选择商品的数量
-			specSelected: [], //选中的分类
-			goodsStore: 0, //选中库存
-			uniqueId: '',
-			productValue: '',
-			isCollect: '', //是否被收藏
-			maskshow: false, //弹窗
-			posturl: '',
-			option: '', //保存传值
-			opt: '', //保存小程序传值
-			uniquetype:false,//判断是否是从拼团详情界面跳回的 false 不是  true 是 
-			shop:'',//返回的拼团订单id
-			allStock:0//商品总库存
-		};
-	},
-	onLoad(option) {
-		this.option = option;
-		if (option.scene) {
-			if (typeof option.scene == 'string') {
-				let scene = ('{' + option.scene + '}')
-					.replace('qr%26', '')
-					.replace(/%3D/g, ':')
-					.replace(/%26/g, ',')
-					.replace('pid', '"pid"')
-					.replace('type', '"type"')
-					.replace('id', '"id"');
-				let opt = JSON.parse(scene);
-				this.opt = opt;
-				// 保存拼团订单id
-				this.goodsid = opt.id;
-				if (opt.pid) {
-					// 存储邀请人
-					this.spread = opt.pid;
-					uni.setStorageSync('spread', opt.pid);
-				}
-				if (opt.type) {
-					this.goodsType = opt.type;
-				}
-			}
-		} else {
-			//保存商品id
-			this.goodsid = option.id;
-			//判断有无人邀请
-			if (option.spread) {
-				// 存储邀请人
-				this.spread = option.spread;
-				uni.setStorageSync('spread', option.spread);
-			}
-			//判断是否是普通商品
-			if (option.type) {
-				console.log(option.type);
-				this.goodsType = option.type;
-			}
-			
-		}
-		//判断是否是从拼团详情界面跳回的
-		if (option.uniquetype) {
-			console.log(option.uniquetype);
-			this.uniquetype = option.uniquetype;
-		}
-		//接受返回的拼团订单id
-		if (option.shop) {
-			console.log(option.uniquetype);
-			this.shop = option.shop;
-		}
-		// 保存当前页面
-		saveUrl();
-	},
-	onShow() {
-		let obj = this;
-		groupGoods({}, obj.goodsid).then(function({ data }) {
-			console.log(data,112)
-			let goods = data.storeInfo;
-			obj.imgList = goods.images;//拼团轮播图
-			obj.goodsObjact = goods;//拼团拼团产品信息
-			// 保存商品总库存
-			obj.allStock = 0;
-			for(let key in 	data.productValue){
-				obj.allStock +=data.productValue[key].stock
-			}
-			obj.pinkTlist = data.pink;//进行中的拼团的信息
-			obj.showlist = obj.pinkTlist.slice(0, 2);//截取拼团信息的前两组
-			obj.replyCount = data.replyCount;//评价总数
-			//obj.commentList = data.reply[0];//保存评价里的第一条
-			obj.specList = data.productAttr;//保存产品属性
-			//商品详情图超出屏幕问题
-			if (obj.goodsObjact.description != null) {
-				obj.goodsObjact.description = obj.goodsObjact.description.replace(/<img/g, '<img class="rich-img"').replace(/<p>\S*<img/g, '<p class="pHeight"><img');
-			}
-			
-			if(obj.pinkTlist.length<=2){
-				obj.more = false;
-			};
-			if (data.reply) {
-				obj.reply = data.reply;
-			}
-			obj.list = data; //详情数据
-			obj.productValue = data.productValue; //保存属性值
-			// 保存数据修改数组
-			// console.log(obj.pinkTlist,55)
-			obj.people = goods.people; //拼团人数
-			obj.productId = goods.product_id;
-			
-			// 保存默认选中的对象
-			obj.specSelected = []; //初始化默认选择对象
-			for (let i = 0; i < obj.specList.length; i++) {
-				// 设置默认数据
-				let attrValue = obj.specList[i].attr_value[0];
-				attrValue.check = true;
-				obj.specSelected.push(attrValue.attr);
-			}
-			
-			//保存默认选中的对象字符串名称
-			let str = obj.specSelected.join(',');
-			// 设置默认值
-			obj.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].quota;
-			console.log(obj.goodsStore,9000)
-			// #ifdef H5
-			obj.shareDate();
-			// #endif
-			// obj.clickMore();
-		});
-		// combination({}, obj.goodsid).then()
-	},
-	computed: {
-		...mapState(['userInfo', 'baseURL'])
-	},
-	methods: {
-		//选择规格
-		selectSpec(item, arr, ind) {
-			console.log(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(',');
-			console.log(obj.productValue[str],116)
-			if (obj.productValue[str]) {
-				obj.buys_show = true;
-				obj.buys_shows = false;
-				obj.actionPrice = obj.productValue[str].price;
-				obj.goodsNumberMax = obj.productValue[str].stock;
-				obj.actionImage = obj.productValue[str].image;
-				obj.uniqueId = obj.productValue[str].unique;
-				if (obj.goodsType == 2) {
-					obj.goodsStore = obj.productValue[str].quota;
-				} else {
-					obj.goodsStore = obj.productValue[str].product_stock;
-				}
-			} else {
-				(obj.buys_show = false), (obj.buys_shows = true);
-			}
-		},
-		numberChange(e) {
-			//购买数量
-			this.chooseGoodsNumber = e.number;
-			// console.log(e.number)
-			// console.log(this.chooseGoodsNumber,'chooseGoodsNumber')
-		},
-		opens_popup(){
-			this.$refs.popup.open()
-		},
-		closes_popup(){
-			this.$refs.popup.close()
-		},
-		opens_popups(){
-			this.$refs.popup.close()
-			this.$refs.popups.open()
-		},
-		closes_popups(){
-			this.$refs.popups.close()
-		},
-		// 处理数组结构
-		dataUpReturn(data) {
-			//保存处理完毕数据
-			let arr = [];
-			// 保存临时数据
-			let arr1 = [];
-			// 设置每个小数组可以存放的数量
-			let num = 2;
-			if (data.length > 1) {
-				for (let i = 0; i < data.length; i++) {
-					// 保存数据到临时数组
-					arr1.push(data[i]);
-					if ((i + 1) % num === 0) {
-						console.log(arr1, 2);
-						// 添加数据到返回数组,用map方法解决物理指针问题导致的数据对象改变问题
-						arr.push(
-							arr1.map(e => {
-								return e;
-							})
-						);
-						// 清空临时数组重新开始计算
-						arr1 = [];
-					}
-				}
-			}
-			// 判断是否为奇数
-			if (data.length % num === 1) {
-				arr.push([data[data.length - 1]]);
-			}
-			return arr;
-		},
-		specOPne() {
-			//显示弹出框
-			// 是否有开团用户
-			// if (this.pinkTlist.length > 0) {
-			// 	this.groupBooking(this.pinkTlist[0][0].id);
-			// } else {
-			// }
-			this.specClass = 'show';
-		},
-		
-		//去拼团
-		groupBooking(item) {
-			uni.navigateTo({
-				url: '/pages/product/details?pink_id=' + item
-			});
-		},
-		//拼团列表数据分页
-		setPinkList() {
-			let obj = this;
-			let showlist = new Array();
-			for (let i = 0; i < obj.pinkTlist.length; i++) {
-				if (i >= obj.count) {
-					break;
-				}
-				showlist[i] = obj.pinkTlist[i];
-			}
-			obj.showlist = showlist;
-		},
-		//查看更多
-		// clickMore() {
-		// 	let obj = this;
-		// 	obj.count += 2;
-		// 	obj.setPinkList();
-		// 	if (obj.count >= obj.pinkTlist.length) {
-		// 		obj.showmore = false; //当次数大于拼团数据,查看更多隐藏
-		// 	} else {
-		// 		obj.showmore = true; //当次数大于拼团数据,查看更多隐藏
-		// 	}
-		// },
-		clickMore() {
-			this.showlist = this.pinkTlist;
-			console.log(this.showlist, 22);
-			this.more = false;
-		},
-		//规格弹窗开关
-		toggleSpec(str) {
-			if (this.specClass === 'show') {
-				this.specClass = 'hide';
-				setTimeout(() => {
-					this.specClass = 'none';
-				}, 250);
-			} else if (this.specClass === 'none') {
-				this.specClass = 'show';
-			}
-			// 判断是否为数字
-			if (typeof str == 'number') {
-				// 保存当前购买类型
-				this.type = str;
-			}
-		},
-		//显示弹窗
-		open() {
-			this.show = true;
-		},
-		//随意点击隐藏弹窗
-		onTap() {
-			if (!this.open) return;
-			this.close();
-		},
-		close() {
-			this.show = false;
-		},
-		//收藏
-		toFavorite(item) {
-			let obj = this;
-
-			item.userCollect = !item.userCollect;
-			// 判断是否已经收藏
-			if (!item.userCollect) {
-				collectDel({
-					id: item.id,
-					category: 'pink'
-				}).then(function(e) {
-					obj.$api.msg('成功取消收藏!');
-				});
-			} else {
-				collectAdd({
-					id: item.id,
-					category: 'pink'
-				}).then(function(e) {
-					obj.$api.msg('成功加入收藏!');
-				});
-			}
-		},
-		
-		// #ifdef H5
-		shareDate() {
-			let obj = this;
-			let url = window.location.href.replace(/[\?,&]{0,1}from=singlemessage/g, '') + '&spread=' + this.userInfo.uid;
-			let bool = uni.getStorageSync('weichatBrowser') || '';
-			// 判断是否微信浏览器
-			if (bool) {
-				let data;
-				if (obj.goodsType == 0) {
-					data = {
-						link: url, // 分享链接
-						imgUrl: obj.goodsObjact.image, // 分享图标
-						desc: obj.goodsObjact.store_info,
-						title: obj.goodsObjact.store_name,
-						success: function() {}
-					};
-				}
-				if (obj.goodsType == 2) {
-					data = {
-						link: url, // 分享链接
-						imgUrl: obj.goodsObjact.image, // 分享图标
-						title: obj.goodsObjact.title,
-						desc: obj.goodsObjact.info,
-						success: function() {}
-					};
-				}
-				weixindata(data);
-			}
-		},
-		// #endif
-		/**
-		 * 统一跳转接口,拦截未登录路由
-		 * navigator标签现在默认没有转场动画,所以用view
-		 */
-		navTo(url) {
-			uni.navigateTo({
-				url
-			});
-		},
-		// 立即购买
-		buy(item) {
-			let obj = this;
-			if(obj.uniquetype == false){
-				// 创建传值对象
-				console.log(obj.list.productValue);
-				console.log(obj.list);
-				let data = {
-					// cartNum: obj.goodsNumber, //商品数量
-					cartNum: obj.chooseGoodsNumber, //商品数量
-					uniqueId: obj.uniqueId, //商品标签
-					new: 1, //商品是否新增加到购物车1为不加入0为加入
-					mer_id: obj.shopId,
-					combinationId: obj.goodsid, //拼团编号
-					productId: obj.goodsObjact.product_id, //商品编号
-				};
-				this.specClass = 'none';
-				cartAdd(data)
-					.then(function(e) {
-						let da = e.data;
-						console.log(e);
-						if (obj.type == 1) {
-							// 跳转到支付页
-							uni.navigateTo({
-								url: '/pages/order/createOrder?id=' + da.cartId + '&goodsType=' + obj.goodsType
-							});
-						}
-						if (obj.type == 2) {
-							obj.$api.msg('成功加入购物车');
-							obj.toggleSpec();
-						}
-					})
-					.catch(e => {
-						console.log(e);
-					}); 
-			}else{
-				console.log(obj.uniquetype,'obj.uniquetype')
-				uni.navigateTo({
-					url: '/pages/product/details?pink_id=' + obj.shop + '&unique=' + obj.uniqueId + '&uniquetype=' + obj.uniquetype
-				});
-			}
-			
-		},
-		// 阻止触发上级事件
-		stopPrevent() {}
-	}
-};
-</script>
-
-<style lang="scss">
-page {
-	background: $page-color-base;
-	padding-bottom: 160rpx;
-	line-height: 1;
-}
-
-// 处理图片间白色间距问题
-/deep/ .pHeight {
-	line-height: 0;
-}
-
-/deep/ div,
-/deep/ table {
-	max-width: 100% !important;
-}
-
-/* #ifdef MP */
-.rich-img {
-	width: 100% !important;
-	height: auto;
-}
-// 处理图片间白色间距问题
-.pHeight {
-	line-height: 0;
-}
-/* #endif */
-
-.popup-row{
-	width:580rpx;
-	background:#ffffff;
-	border-radius:20rpx;
-	.popup-1{
-		padding: 35rpx 0;
-		font-size:$font-lg;
-		font-weight:bold;
-		color:#333333;
-		text-align: center;
-		border-bottom: 1px solid #EEEEEE;
-	}
-	.popcont-box {
-		height: 600rpx;
-	}
-	.popup-2{
-		padding: 0 25rpx;
-		.popup-2-row{
-			padding: 25rpx 0;
-			border-bottom: 1px solid #EEEEEE;
-			&:nth-last-child(1){
-				border-bottom:none;
-			}
-			.row-1{
-				width: 70%;
-				.one{
-					display: flex;
-					align-items: center;
-					image{
-						width: 75rpx;
-						height: 75rpx;
-						border-radius: 50%;
-					}
-				}
-				.two{
-					margin-left: 20rpx;
-					font-size:28rpx;
-					font-weight:500;
-					color:#333333;
-					.two-1{
-						// margin-bottom: 20rpx;
-						font-size:$font-base;
-						font-weight:500;
-						max-width: 160rpx;
-						overflow: hidden;
-						text-overflow: ellipsis;
-						white-space: nowrap;
-					}
-				}
-				.two-1-1{
-					font-size:$font-base;
-					font-weight:500;
-					color:#666666;
-				}
-			}
-			.row-2{
-				padding: 20rpx 30rpx;
-				background:$base-color;
-				border-radius:10rpx;
-				font-size:28rpx;
-				font-weight:500;
-				color:#FFFFFF;
-			}
-		}
-	}
-}
-.popup-rows{
-	width:580rpx;
-	background:#ffffff;
-	border-radius:20rpx;
-	text-align: center;
-	padding-bottom: 35rpx;
-	.rows-1{
-		font-size:$font-lg;
-		font-weight:bold;
-		color:#333333;
-		padding-top: 60rpx;
-	}
-	.rows-2{
-		margin-top: 25rpx;
-		font-size:28rpx;
-		font-weight:500;
-		color:#333333;
-	}
-	.rows-3{
-		margin-top: 35rpx;
-		padding: 0 50rpx;
-		
-		.rows-3-group {
-			display: flex;
-			align-items: center;
-			flex-direction: column;
-			.group-1{
-				display: flex;
-				align-items: center;
-				flex-direction: column;
-			}
-			.group-2{
-				flex: 1;
-				font-size:$font-sm - 4rpx;
-				font-weight:500;
-				color:#666666;
-				margin-top: 10rpx;
-				width:55rpx;
-				overflow:hidden;
-				white-space:nowrap;
-				text-overflow:ellipsis;
-			}
-			image{
-				width: 80rpx;
-				height: 80rpx;
-				border-radius: 50%;
-			}
-			.group-1-1{
-				z-index: 10;
-				margin-top: -25rpx;
-				width:70rpx;
-				height:25rpx;
-				background:#e64048;
-				border-radius:12rpx;
-				font-size:$font-sm - 4rpx;
-				font-weight:500;
-				color:#ffffff;
-				line-height: 25rpx;
-			}
-		}
-	}
-	.rows-4{
-		margin: 40rpx 45rpx 0rpx 45rpx;
-		padding: 25rpx 0;
-		background:$base-color;
-		border-radius:10rpx;
-		
-		font-size:$font-lg;
-		font-weight:500;
-		color:#ffffff;
-	}
-}
-
-.delete{
-	width: 60rpx;
-	height: 60rpx;
-	position: absolute;
-	right: -30rpx;
-	top:-30rpx;
-	image{
-		width: 60rpx;
-		height: 60rpx;
-	}
-}
-
-/* 评价 */
-.eva-section {
-	padding: 20rpx 30rpx;
-	background: #fff;
-	margin-top: 20rpx;
-	.e-header {
-		display: flex;
-		align-items: center;
-		font-size:28rpx;
-		color: #333333;
-		.tit {
-			margin-right: 15rpx;
-		}
-		.tip {
-			flex: 1;
-			font-size:24rpx;
-			color: #999999;
-			text-align: right;
-		}
-		.iconenter {
-			width: 24rpx;
-			height: 24rpx;
-			margin-left: 10rpx;
-		}
-	}
-	.eva-box {
-		padding-top: 30rpx;
-		.box-1{
-			.left{
-				image{
-					width: 80rpx;
-					height: 80rpx;
-					border-radius: 50%;
-				}
-				.content{
-					margin-left: 15rpx;
-					.content-name{
-						font-size:24rpx;
-						font-weight:500;
-						color:#333333;
-					}
-					.content-time{
-						font-size:20rpx;
-						font-weight:500;
-						color:#999999;
-					}
-				}
-			}
-			.right{
-				.image{
-					width: 25rpx;
-					height: 25rpx;
-					margin-left: 10rpx;
-				}
-				.red{
-					margin-left: 15rpx;
-					font-size:24rpx;
-					font-weight:500;
-					color:#fd5b23;
-				}
-				.con_image{
-					
-				}
-			}
-		}
-		.box-2{
-			padding: 30rpx 0 15rpx 0;
-			font-size:28rpx;
-			font-weight:500;
-			color:#666666;
-		}
-		.box-3{
-			.box-3-1{
-				display: inline;
-				width: 150rpx;
-				height: 150rpx;
-				image{
-					margin-right: 20rpx;
-					width: 150rpx;
-					height: 150rpx;
-				}
-			}
-			
-		}
-	}
-}
-
-/* .list-row {
-	position: fixed;
-	top: 450rpx;
-	left: 86rpx;
-
-	.row {
-		position: relative;
-		width: 578rpx;
-		height: 700rpx;
-		background: #ffffff;
-		border-radius: 20rpx;
-
-		.row-1 {
-			flex: 1;
-			text-align: center;
-			padding: 26rpx 223rpx;
-			border-bottom: 2rpx solid #eeeeee;
-
-			.row-1-1 {
-				font-size: $font-lg;
-				font-weight: bold;
-				color: #333333;
-			}
-		}
-
-		.row-2 {
-			padding: 0 23rpx;
-
-			.pinklist_list {
-				padding: 20rpx 0;
-				display: flex;
-				justify-content: space-around;
-				align-items: center;
-				border-bottom: 1px solid #eeeeee;
-
-				.left {
-					width: 74rpx;
-					height: 74rpx;
-					background-color: #e3e3e3;
-					border-radius: 50%;
-				}
-
-				.center {
-					display: flex;
-					flex-wrap: wrap;
-					margin-left: 17rpx;
-
-					.center-1 {
-						display: flex;
-						align-items: center;
-						letter-spacing: 3rpx;
-
-						.center-1-1 {
-							font-size: $font-base;
-							font-weight: 500;
-							color: #333333;
-						}
-
-						.center-1-2 {
-							font-size: $font-base - 2rpx;
-							font-weight: 500;
-							color: #333333;
-						}
-					}
-				}
-
-				.right {
-					width: 134rpx;
-					height: 59rpx;
-					background: $base-color;
-					border-radius: 10rpx;
-					display: flex;
-					align-items: center;
-					justify-content: center;
-
-					.right-word {
-						font-size: 26rpx;
-						font-weight: 500;
-						color: #ffffff;
-					}
-				}
-			}
-		}
-
-		.row-3 {
-			width: 56rpx;
-			height: 56rpx;
-			position: absolute;
-			top: -28rpx;
-			right: -28rpx;
-		}
-	}
-} */
-
-.iconenter {
-	font-size: $font-base + 2rpx;
-	color: #888;
-}
-
-
-.carousel {
-	height: 722rpx;
-	position: relative;
-
-	swiper {
-		height: 100%;
-	}
-
-	.image-wrapper {
-		width: 100%;
-		height: 100%;
-	}
-
-	.swiper-item {
-		display: flex;
-		justify-content: center;
-		align-content: center;
-		height: 750rpx;
-		overflow: hidden;
-
-		image {
-			width: 100%;
-			height: 100%;
-		}
-	}
-}
-
-/* 标题简介 */
-.introduce-section {
-	background: #fff;
-	padding: 15rpx 25rpx 30rpx 25rpx;
-	.introduce-price{
-		width: 100%;
-		overflow: hidden;
-		.price{
-			display: flex;
-			align-items: flex-end;
-			justify-content: flex-start;
-			
-			.price-left{
-				display: flex;
-				align-items: flex-end;
-				color:#fc4141;
-				margin-right: 20rpx;
-				.left-1{
-					margin-right: 5rpx;
-					font-size:28rpx;
-				}
-				.left-2{
-					font-size:$font-lg + 16rpx;
-					line-height: 38rpx;
-				}
-			}
-			.price-right{
-				font-size:28rpx;
-				color:#333333;
-				opacity:0.61;
-			}
-		}
-		.people{
-			width: 140rpx;
-			height: 45rpx;
-			background: url(../../../static/img/img43.png) no-repeat center;
-			background-size: 100%;
-			.people_number{
-				margin-left: 60rpx;
-				font-size:20rpx;
-				font-weight:500;
-				color:rgba(250,39,64,1);
-				line-height: 40rpx;
-			}
-		}
-		/* .share{
-			image{
-				width: 30rpx;
-				height: 35rpx;
-			}
-		} */
-	}
-	.title {
-		margin-top: 30rpx;
-		font-size: 32rpx;
-		color: #1D2023;
-		line-height: 40rpx;
-		font-weight: 600;
-	}
-	.bot-row{
-		margin-top: 20rpx;
-		overflow: hidden;
-		font-size:24rpx;
-		font-weight:500;
-		color:#999999;
-	}
-}
-
-
-/* 标题简介 */
-/* .introduce-section {
-	background: #fff;
-	padding: 20rpx 30rpx;
-
-	.title {
-		font-size: 32rpx;
-		color: $font-color-dark;
-		height: 50rpx;
-		line-height: 50rpx;
-	}
-
-	.price-box {
-		display: flex;
-		align-items: baseline;
-		// height: 64rpx;
-		padding: 10rpx 0;
-		font-size: 26rpx;
-		color: $uni-color-primary;
-	}
-
-	.price {
-		font-size: $font-lg + 2rpx;
-		color: #666666 !important;
-	}
-
-	.vip_price {
-		font-size: $font-lg + 2rpx;
-		color: $uni-color-primary;
-		padding-left: 15rpx;
-	}
-
-	.m-price {
-		margin: 0 12rpx;
-		color: $font-color-light;
-		text-decoration: line-through;
-	}
-
-	.coupon-tip {
-		align-items: center;
-		padding: 4rpx 10rpx;
-		background: $uni-color-primary;
-		font-size: $font-sm;
-		color: #fff;
-		border-radius: 6rpx;
-		line-height: 1;
-		transform: translateY(-4rpx);
-	}
-
-	.bot-row {
-		display: flex;
-		align-items: center;
-		height: 50rpx;
-		font-size: $font-sm;
-		color: $font-color-light;
-
-		text {
-			flex: 1;
-		}
-	}
-
-	.people {
-		border-radius: 10rpx;
-		height: 35rpx !important;
-		border: 2rpx solid #db1935;
-		height: 40rpx;
-
-		.people_image {
-			background-color: #db1935;
-			width: 40rpx;
-			height: 35rpx;
-			text-align: center;
-			border-top-left-radius: 20%;
-			border-bottom-left-radius: 20%;
-
-			image {
-				width: 25rpx;
-				height: 20rpx;
-				// margin-bottom: 5rpx;
-			}
-		}
-
-		.people_number {
-			padding: 5rpx 10rpx;
-		}
-	}
-} */
-
-/* 分享 */
-.share-section {
-	display: flex;
-	align-items: center;
-	color: $font-color-base;
-	background: linear-gradient(left, #fdf5f6, #fbebf6);
-	padding: 12rpx 30rpx;
-
-	.share-icon {
-		display: flex;
-		align-items: center;
-		width: 70rpx;
-		height: 30rpx;
-		line-height: 1;
-		border: 1px solid $uni-color-primary;
-		border-radius: 4rpx;
-		position: relative;
-		overflow: hidden;
-		font-size: 22rpx;
-		color: $uni-color-primary;
-
-		&:after {
-			content: '';
-			width: 50rpx;
-			height: 50rpx;
-			border-radius: 50%;
-			left: -20rpx;
-			top: -12rpx;
-			position: absolute;
-			background: $uni-color-primary;
-		}
-	}
-
-	.iconfavorfill {
-		position: relative;
-		z-index: 1;
-		font-size: 24rpx;
-		margin-left: 2rpx;
-		margin-right: 10rpx;
-		color: #fff;
-		line-height: 1;
-	}
-
-	.tit {
-		font-size: $font-base;
-		margin-left: 10rpx;
-	}
-
-	.iconprompt {
-		padding: 10rpx;
-		font-size: 30rpx;
-		line-height: 1;
-	}
-
-	.share-btn {
-		flex: 1;
-		text-align: right;
-		font-size: $font-sm;
-		color: $uni-color-primary;
-	}
-
-	.iconenter {
-		font-size: $font-sm;
-		margin-left: 4rpx;
-		color: $uni-color-primary;
-	}
-}
-
-.c-list {
-	font-size: $font-sm + 2rpx;
-	color: #303133;
-	margin-top: 20rpx;
-	background: #fff;
-
-	.c-row {
-		display: flex;
-		align-items: center;
-		padding: 20rpx 30rpx;
-		position: relative;
-
-		.c-text {
-			text {
-				padding-left: 25rpx;
-				padding-right: 25rpx;
-			}
-		}
-	}
-
-	.tit {
-		width: 140rpx;
-	}
-
-	.con {
-		flex: 1;
-		color: $font-color-dark;
-
-		.selected-text {
-			margin-right: 10rpx;
-		}
-	}
-
-	.bz-list {
-		height: 40rpx;
-		font-size: $font-sm + 2rpx;
-		color: $font-color-dark;
-
-		text {
-			display: inline-block;
-			margin-right: 30rpx;
-		}
-	}
-
-	.con-list {
-		flex: 1;
-		display: flex;
-		flex-direction: column;
-		color: $font-color-dark;
-		line-height: 40rpx;
-	}
-
-	.red {
-		color: $uni-color-primary;
-	}
-}
-
-/* 评价 */
-/* .eva-section {
-	display: flex;
-	flex-direction: column;
-	padding: 20rpx 30rpx;
-	background: #fff;
-	margin-top: 16rpx;
-
-	.e-header {
-		display: flex;
-		align-items: center;
-		height: 70rpx;
-		font-size: $font-sm + 2rpx;
-		color: $font-color-light;
-
-		.tit {
-			font-size: $font-base + 2rpx;
-			color: $font-color-dark;
-			margin-right: 4rpx;
-		}
-
-		.tip {
-			flex: 1;
-			text-align: right;
-		}
-
-		.iconenter {
-			margin-left: 10rpx;
-		}
-	}
-}
- 
-.eva-box {
-	display: flex;
-	padding: 20rpx 0;
-
-	.portrait {
-		flex-shrink: 0;
-		width: 80rpx;
-		height: 80rpx;
-		border-radius: 100px;
-	}
-
-	.right {
-		flex: 1;
-		display: flex;
-		flex-direction: column;
-		font-size: $font-base;
-		color: $font-color-base;
-		padding-left: 26rpx;
-
-		.con {
-			font-size: $font-base;
-			color: $font-color-dark;
-			padding: 20rpx 0;
-		}
-
-		.bot {
-			display: flex;
-			justify-content: space-between;
-			font-size: $font-sm;
-			color: $font-color-light;
-		}
-	}
-}
-
-.con_image {
-	width: 130rpx;
-	height: 130rpx;
-	display: inline-block;
-	padding: 15rpx;
-
-	image {
-		width: 100%;
-		height: 100%;
-	}
-}*/
-
-/*  详情 */
-.detail-desc {
-	.desc-title{
-		font-size:28rpx;
-		font-weight:500;
-		color:#1D2023;
-		padding: 25rpx 0;
-		.one{
-			width:77rpx;
-			height:1px;
-			background:linear-gradient( to right ,rgba(204,204,204,0), rgba(204,204,204,1));
-			margin-right: 10rpx;
-		}
-		.two{
-			margin-left: 10rpx;
-			width:77rpx;
-			height:1px;
-			background:linear-gradient( to left ,rgba(204,204,204,0), rgba(204,204,204,1));
-		}
-	}
-	
-}
-/* .detail-desc {
-	background: #fff;
-	margin-top: 16rpx;
-
-	img {
-		max-width: 100%;
-	}
-
-	.d-header {
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		height: 80rpx;
-		font-size: $font-base + 2rpx;
-		color: $font-color-dark;
-		position: relative;
-
-		text {
-			padding: 0 20rpx;
-			background: #fff;
-			position: relative;
-			z-index: 1;
-		}
-
-		&:after {
-			position: absolute;
-			left: 50%;
-			top: 50%;
-			transform: translateX(-50%);
-			width: 300rpx;
-			height: 0;
-			content: '';
-			border-bottom: 1px solid #ccc;
-		}
-	}
-} */
-
-/* 规格选择弹窗 */
-.attr-content {
-	padding: 25rpx 30rpx;
-
-	.a-t {
-		display: flex;
-
-		image {
-			width: 170rpx;
-			height: 170rpx;
-			flex-shrink: 0;
-			border-radius: 8rpx;
-		}
-
-		.right {
-			display: flex;
-			flex-direction: column;
-			padding-left: 24rpx;
-			font-size: $font-sm + 2rpx;
-			color: $font-color-base;
-			line-height: 42rpx;
-			width: 75%;
-
-			.price {
-				font-size: $font-lg;
-				color: $uni-color-primary;
-				margin: 10rpx 0rpx;
-			}
-
-			.name {
-				font-size: 32rpx;
-				color: $font-color-dark;
-				height: 50rpx;
-				overflow: hidden;
-				text-overflow: ellipsis;
-				white-space: nowrap;
-				display: block;
-			}
-
-			.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: 100rpx;
-			min-width: 60rpx;
-			height: 60rpx;
-			padding: 0 20rpx;
-			font-size: $font-base;
-			color: $font-color-dark;
-		}
-
-		.selected {
-			background: #fbebee;
-			color: $uni-color-primary;
-		}
-	}
-}
-
-/*  弹出层 */
-.popup {
-	position: fixed;
-	left: 0;
-	top: 0;
-	right: 0;
-	bottom: 0;
-	z-index: 99;
-
-	&.show {
-		display: block;
-
-		.mask {
-			animation: showPopup 0.2s linear both;
-		}
-
-		.layer {
-			animation: showLayer 0.2s linear both;
-		}
-	}
-
-	&.hide {
-		.mask {
-			animation: hidePopup 0.2s linear both;
-		}
-
-		.layer {
-			animation: hideLayer 0.2s linear both;
-		}
-	}
-
-	&.none {
-		display: none;
-	}
-
-	.mask {
-		position: fixed;
-		top: 0;
-		width: 100%;
-		height: 100%;
-		z-index: 1;
-		background-color: rgba(0, 0, 0, 0.4);
-	}
-
-	.layer {
-		position: fixed;
-		z-index: 99;
-		bottom: 0;
-		width: 100%;
-		min-height: 35vh;
-		border-radius: 10rpx 10rpx 0 0;
-		background-color: #fff;
-
-		.btn {
-			height: 66rpx;
-			line-height: 66rpx;
-			border-radius: 100rpx;
-			background: $uni-color-primary;
-			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%);
-		}
-	}
-}
-//分享
-.btn_fenxiang {
-	position: fixed;
-	right: 20rpx;
-	bottom: 50%;
-	z-index: 95;
-	width: 100rpx;
-	color: #ffffff;
-	border-radius: 100%;
-	background-color: $background-color;
-	line-height: 100rpx;
-	text-align: center;
-	font-size: 30rpx;
-}
-.shareDate{
-	position: fixed;
-	right: 20rpx;
-	bottom: 50%;
-	z-index: 95;
-	color: #ffffff;
-	border-radius: 100rpx;
-	height: 120rpx;
-	line-height: 120rpx;
-	background-color: $background-color;
-	text-align: center;
-	font-size: 30rpx;
-}
-/* 底部操作菜单 */
-.page-bottom {
-	position: fixed;
-	bottom: 0rpx;
-	z-index: 95;
-	display: flex;
-	justify-content: center;
-	align-items: center;
-	width: 100%;
-	height: 100rpx;
-	background: rgba(255, 255, 255, 0.9);
-	.botton-1{
-		width: 100rpx;
-		height: 100rpx;
-		background-color: #FFFFFF;
-		.botton-frame {
-			display: flex;
-			align-items: center;
-			flex-direction: column;
-			.img-box {
-				width: 45rpx;
-				height: 40rpx;
-				image{
-					width: 100%;
-					height: 100%;
-				}
-			}
-			
-		}
-		.word{
-			margin-top: 6rpx;
-			font-size:20rpx;
-			font-weight:400;
-			color:#666666;
-			&.active {
-				color: $uni-color-primary;
-			}
-		}
-	}
-	.p-b-btn {
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		justify-content: center;
-		font-size: $font-sm;
-		color: $font-color-base;
-		width: 100rpx;
-		height: 100rpx;
-
-		.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;
-		}
-	}
-
-	.gobuy {
-		width: 100%;
-		background: #db1935;
-		height: 100%;
-		color: #ffffff;
-		text-align: center;
-		padding-top: 25rpx;
-		border-radius: 15rpx;
-	}
-
-	.action-btn-group {
-		display: flex;
-		flex:1;
-		height: 100%;
-		overflow: hidden;
-		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;
-			flex: 1;
-			height: 100%;
-			font-size: $font-lg + 4rpx;
-			font-weight:bold;
-			background: transparent;
-			border-radius:0;
-			letter-spacing: 5rpx;
-
-			&.buy-now-btn {
-				background-color: #ffb238;
-			}
-
-			&.add-cart-btn {
-				background:$base-color;
-			}
-			&.btn-favorites-btn {
-				background-color: rgba(24, 179, 255, 1);
-			}
-		}
-
-		/* .action-btn1 {
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			width: 210rpx;
-			height: 100%;
-			font-size: $font-base;
-			padding: 0;
-			border-radius: 0;
-			background: transparent;
-
-			&.buy-now-btn {
-				background-color: #ffb238;
-			}
-
-			&.add-cart-btn {
-				background-color: #db1935;
-			}
-		} */
-	}
-}
-
-// 底部拼团、秒杀支付按钮
-.goods-pay-box {
-	position: fixed;
-	left: 0;
-	bottom: 0;
-	z-index: 95;
-	width: 750rpx;
-	height: 100rpx;
-	line-height: 1;
-	color: #ffffff;
-	text-align: center;
-	font-size: $font-lg;
-	.bgLine {
-		background: linear-gradient(90deg, rgba(239, 78, 81, 1) 0%, rgba(244, 113, 59, 1) 100%);
-	}
-	// 拼团支付按钮
-	.goods-pay {
-		display: flex;
-		align-content: center;
-		flex-wrap: wrap;
-		justify-content: center;
-		.goods-buttom,
-		.goods-buttom-money {
-			width: 100%;
-		}
-		.goods-buttom-money {
-			font-size: $font-base;
-		}
-	}
-	.goods-pay-stop,
-	.goods-pay {
-		padding: 15rpx 0;
-		height: 100%;
-		width: 100%;
-	}
-	.goods-pay-stop {
-		background: $color-gray;
-		line-height: 70rpx;
-	}
-}
-
-
-//拼团列表
-.pinklistbox {
-	background: #ffffff;
-	text-align: center;
-	font-size: 26rpx;
-	margin-top: 25rpx;
-	.listbox-1{
-		padding: 25rpx;
-		font-size:$font-lg - 2rpx;
-		font-weight:500;
-		color:#333333;
-		border-bottom: 1px solid #EEEEEE;
-		.more{
-			font-size:$font-base - 2rpx;
-			font-weight:500;
-			color:#999999;
-			image {
-				width: 25rpx;
-				height: 25rpx;
-			}
-		}
-	}
-	.pinklist{
-		margin: 0 25rpx;
-		
-		.pinklist_list{
-			padding: 25rpx 0;
-			border-bottom: 1px solid #EEEEEE;
-			&:nth-last-child(1){
-				border-bottom: none;
-			}
-		}
-	}
-}
-
-/* .pinklistbox {
-	background: #ffffff;
-	margin-top: 25rpx;
-	overflow: hidden;
-} */
-
-.pink_num {
-	background: -webkit-linear-gradient(left, #fdf5f6, #fbebf6);
-	padding: 15rpx 25rpx;
-	font-size: 26rpx;
-	color: #dd524d;
-}
-
-.pint {
-	background: -webkit-linear-gradient(0deg, #fa2740,#fe5544);
-	border-radius:10rpx;
-	margin-left: 20rpx;
-	padding: 20rpx 25rpx;
-	color: #ffffff;
-	font-size: $font-base - 2rpx;
-
-	/* .iconenter {
-		font-size: 15px;
-		color: #ffffff;
-	} */
-}
-
-
-
-.pink_row {
-	.pink_img{
-		width: 70rpx;
-		height: 70rpx;
-		
-		image {
-			width: 100%;
-			height: 100%;
-			border-radius: 100%;
-		}
-	}
-	
-}
-.pink_people {
-	font-size: $font-base - 2rpx;
-	// margin-top: 10rpx;
-	text {
-		color: $font-color;
-	}
-}
-
-.pink_time {
-	font-size: 26rpx;
-	color: #909399;
-}
-
-.pink_name {
-	font-size:30rpx;
-	color:#333333;
-	margin-left: 20rpx;
-}
-.More {
-	width: 100%;
-	line-height: 2;
-	background-color: #fc2a3f;
-	font-size:$font-lg;
-	margin: 0 auto;
-	text-align: center;
-	color: #ffffff;
-	// border-radius: 50rpx;
-}
-.mask {
-	z-index: 999;
-	width: 100%;
-	height: 100%;
-	position: fixed;
-	top: 0;
-	left: 0;
-	text-align: center;
-	background-color: rgba(0, 0, 0, 0.5);
-	image {
-		width: 100%;
-		height: 100%;
-		opacity: 0.8;
-	}
-}
-</style>

+ 0 - 934
pages/product/groupBooking/productGroup.vue

@@ -1,934 +0,0 @@
-<template>
-	<view class="container">
-		<!-- 轮播图 -->
-		<top-swiper :imgList="imgList"></top-swiper>
-		<!-- 拼团倒计时 -->
-		<group-time :goodsObjact="goodsObjact" :key='goodsObjact.product_price' :seckillObj="seckillObj"></group-time>
-		<!-- 拼团标题 -->
-		<group-content :goodsObjact="goodsObjact"></group-content>
-		<!-- 拼团到货时间及优惠 -->
-		<discounts :mark='goodsObjact.mark' :Info="goodsObjact.info" @clickCoupon="Getcoupon" :showCoupon='false'></discounts>
-		<!-- 规格信息 -->
-		<!-- <fresh-detail :goodsObjact="goodsObjact"></fresh-detail> -->
-		<!-- <view class="uni-padding-wrap pinklistbox" v-if="pinkTlist.length > 0">
-			<view class="pinklist">
-				<view v-for="(ls, ind) in showlist">
-					<view class="flex pinklist_list">
-						<view class="pink_img"><image :src="ls.avatar"></image></view>
-						<view class="pink_name">{{ ls.nickname }}</view>
-						<view class="pink_tpl">
-							<view class="pink_people">
-								还差
-								<text>{{ ls.count }}</text>
-								人拼团
-							</view>
-						</view>
-						<view class="pint" @click="groupBooking(ls.id)">
-							去拼团
-							<text class="iconfont iconenter"></text>
-						</view>
-					</view>
-				</view>
-			</view>
-			<view class="More" @click="clickMore" v-if="more">查看更多</view>
-		</view> -->
-		<!-- <view class="ping-plan">
-			<view class="participate-7 flex-between-center">
-				<view class="participate-7-1">
-					<text class="word" v-if="pink_type == 1">AA团</text>
-					<text class="word" v-else>达人团</text>
-					<text>玩法</text>
-				</view>
-				<view class="participate-7-1" @click="ToRule()">
-					<text class="word1">详细规则</text>
-					<image src="../../../static/img/img74.png"></image>
-				</view>
-			</view>
-			<view class="participate-8 flex-between-center">
-				<view class="participate-8-1">
-					<image class="img1" src="https://shicai.liuniu946.com/img/img76.png"></image>
-					<view class="word-1">开团/参团</view>
-					<view class="word-2">拼团享低价</view>
-				</view>
-				<image src="https://shicai.liuniu946.com/img/img75.png"></image>
-				<view class="participate-8-1">
-					<image class="img2" src="https://shicai.liuniu946.com/img/img77.png"></image>
-					<view class="word-1">邀请邻里参团</view>
-					<view class="word-2">分享优惠多</view>
-				</view>
-				<image src="https://shicai.liuniu946.com/img/img75.png"></image>
-				<view class="participate-8-1">
-					<image class="img3" src="https://shicai.liuniu946.com/img/img78.png"></image>
-					<view class="word-1">人满发货</view>
-					<view class="word-2">人不满退款</view>
-				</view>
-			</view>
-		</view> -->
-		
-		<!-- 大家都在拼 达人团显示 -->
-		<!-- <now-list v-if="pink_type == 2" :recommendedlist="recommendedlist"></now-list> -->
-		
-		
-		<!-- 图文详情 -->
-		<content-text :description="description"></content-text>
-
-		<!-- 底部高度撑开 -->
-		<view class="contentBottomHeight"></view>
-		<!-- 底部操作菜单 -->
-		<view >
-			<view >
-				<group-bottom :peoplePrize='goodsObjact.people_prize' @buy="openPinkT" @specOPne="specOPne" :seckillObj="seckillObj" :many='many'></group-bottom>
-			</view>
-		</view>
-		<!-- 规格-模态层弹窗 -->
-		<view class="popup spec" :class="specClass" @touchmove.stop.prevent="stopPrevent" @click="toggleSpec()">
-			<!-- 遮罩层 -->
-			<view class="mask"></view>
-			<view class="layer attr-content" @click.stop="stopPrevent">
-				<view class="a-t">
-					<image :src="actionImage"></image>
-					<view class="right">
-						<text class="name">{{ goodsObjact.store_name }}</text>
-						<text class="price">¥{{ actionPrice * goodsNumber }}</text>
-						<text class="stock">库存:{{ goodsStore }}件</text>
-						<view class="selected" v-if="specList != ''">
-							已选:
-							<text class="selected-text" v-for="(sItem, sIndex) in specSelected" :key="sIndex">{{ sItem }}</text>
-						</view>
-					</view>
-				</view>
-				<view v-for="(item, index) in specList" :key="index" class="attr-list">
-					<text>{{ item.attr_name }}</text>
-					<view class="item-list">
-						<text
-							v-for="(childItem, childIndex) in item.attr_value"
-							:key="childIndex"
-							class="tit"
-							:class="{ selected: childItem.check }"
-							@click="selectSpec(childItem, item, index)"
-						>
-							{{ childItem.attr }}
-						</text>
-					</view>
-				</view>
-				<!-- <view class="attr-list">
-					<text>购买数量</text>
-					<view class="item-list">
-						<uni-number-box class="step" :isMin="true" :value="goodsNumber" :min="1" :max="goodsNumberMax" @eventChange="numberChange"></uni-number-box>
-					</view>
-				</view> -->
-				<button class="btn" @click.stop="buy" v-show="buys_show">完成</button>
-				<button class="btn" style="background-color: #999999;" v-show="buys_shows">售罄</button>
-			</view>
-		</view>
-		<!-- 返回按钮 -->
-		<return-button></return-button>
-
-	</view>
-</template>
-
-<script>
-	import { nowPinkLst } from '@/api/order.js';
-	import {
-		goodsDetail,
-		cartAdd,
-		collectAdd,
-		collectDel,
-		seckillGoods,
-		groupGoods
-	} from '@/api/product.js';
-	import {
-		mapState
-	} from 'vuex';
-	import store from '@/store/index.js';
-	import {
-		saveUrl
-	} from '@/utils/loginUtils.js';
-	import {
-		timeComputed
-	} from '@/utils/rocessor.js';
-	// #ifdef H5
-	import {
-		weixindata
-	} from '@/utils/wxAuthorized';
-	// #endif
-	// 头部轮播图
-	import topSwiper from '../common/topSwiper.vue';
-	// 拼团倒计时
-	import groupTime from '../common/groupTime.vue';
-	// 拼团标题
-	import groupContent from '../common/groupContent.vue';
-	// 拼团到货时间及优惠
-	import discounts from '../common/discounts.vue';
-	// 规格信息
-	import freshDetail from '../common/freshDetail.vue';
-	// 图文详情
-	import contentText from '../common/contentText.vue';
-	// 底部按钮
-	import groupBottom from '../common/groupBottom.vue';
-	// 返回按钮
-	import returnButton from '@/components/returnButton.vue';
-	// 大家还在拼
-	import NowList from '@/components/newlist/nowList.vue';
-	export default {
-		components: {
-			topSwiper,
-			groupTime,
-			groupContent,
-			discounts,
-			freshDetail,
-			contentText,
-			groupBottom,
-			returnButton,
-			NowList
-		},
-		data() {
-			return {
-				goodsStore: 0, //选中库存
-				specList: [],
-				buys_show: true,
-				buys_shows: false,
-				specSelected: [], //选中的分类
-				reply: '', //评论
-				list: '', //商品详情的数据
-				type: 1, //默认支付方式add为
-				goodsNumber: 1, //购买数量
-				goodsid: '', //商品id
-				description: '', //商品描述
-				goodsObjact: {}, //保存商品数据
-				//图片循环
-				imgList: [],
-				// 对比对象
-				actionPrice: 0, //默认选中商品价格
-				actionImage: '', //默认选中图片
-				good_list: '', //猜你喜欢列表
-				goodsNumberMax: 0, //最大可购买数量
-				many:1,//1是单规格  2是多规格
-				// 倒计时数据保存
-				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: '',
-				pinkTlist: '', //拼团数据
-				more: true, //查看更多按钮
-				showlist: [],
-				pink_type: 1, //拼团类别
-				show: false, // 是否显示底部按钮
-				recommendedlist:[],// 大家都在拼
-				specClass: 'none' //显示隐藏弹窗
-			};
-
-		},
-		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.show) {
-				this.show = options.show;
-			}
-			console.log(this.show, 5656)
-			// 判断有无人邀请
-			if (options.spread) {
-				// 存储邀请人
-				uni.setStorageSync('spread', options.spread);
-			}
-			saveUrl();
-			// 家在数据
-			this.groupGoods();
-			return;
-			
-			// 注册邀请信息
-			// #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.title + '   价格:' + 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: {
-			// 跳转详细规则
-			ToRule() {
-				if( this.pink_type == 1 ) {
-					// AA团
-					uni.navigateTo({
-						url: '/pages/rule/AArule'
-					})
-				} else {
-					// 达人团
-					uni.navigateTo({
-						url: '/pages/rule/DaRrule'
-					})
-				}
-			},
-			//选择规格
-			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(',');
-				console.log(obj.productValue[str],116)
-				if (obj.productValue[str]) {
-					obj.buys_show = true;
-					obj.buys_shows = false;
-					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;
-					// if (obj.goodsType == 2) {
-					// 	obj.goodsStore = obj.productValue[str].quota;
-					// } else {
-					// 	obj.goodsStore = obj.productValue[str].product_stock;
-					// }
-				} else {
-					(obj.buys_show = false), (obj.buys_shows = true);
-				}
-			},
-			// 立即购买
-			buy(item) {
-				let obj = this;
-				/* obj.toggleSpec();
-				this.specClass='show',
-				console.log(obj.list.productValue.默认.unique)
-				console.log(obj.chooseGoodsNumber,'chooseGoodsNumber')
-				return */
-				// 创建传值对象
-				console.log(obj.list.productValue);
-				console.log(obj.list);
-				let data = {
-					// cartNum: obj.goodsNumber, //商品数量
-					cartNum: obj.chooseGoodsNumber, //商品数量
-					uniqueId: obj.uniqueId, //商品标签
-					new: 1, //商品是否新增加到购物车1为不加入0为加入
-					mer_id: obj.shopId,
-					combinationId: obj.goodsid, //拼团编号
-					productId: obj.goodsObjact.product_id, //商品编号
-				};
-				this.specClass = 'none';
-				cartAdd(data)
-					.then(function(e) {
-						let da = e.data;
-						console.log(e);
-						if (obj.type == 1) {
-							// 跳转到支付页
-							uni.navigateTo({
-								url: '/pages/order/createOrder?id=' + da.cartId + '&goodsType=' + obj.goodsType
-							});
-						}
-						if (obj.type == 2) {
-							obj.$api.msg('成功加入购物车');
-							obj.toggleSpec();
-						}
-					})
-					.catch(e => {
-						console.log(e);
-					}); 
-			},
-			// 去开团
-			ToKaiTuan(item) {
-				let id = item.id;
-				uni.navigateTo({
-					url: '/pages/product/productGroup?id=' + id
-				});
-			},
-			
-			// 跳转页面
-			navTo(url) {
-				uni.navigateTo({
-					url
-				});
-			},
-			// 查看更多
-			clickMore() {
-				this.showlist = this.pinkTlist;
-				console.log(this.showlist, 22);
-				this.more = false;
-			},
-			//去拼团
-			groupBooking(item) {
-				uni.navigateTo({
-					url: '/pages/groupBooking/groupdetails?id=' + item
-				});
-			},
-			// 获取拼团商品详情
-			groupGoods() {
-				let obj = this;
-				
-				// // 大家还在拼
-				// nowPinkLst({}).then(({data}) => {
-				// 	this.recommendedlist = data;
-				// })
-				
-				groupGoods({}, this.goodsid).then(function({
-					data
-				}) {
-					let goods = data.storeInfo;
-					obj.goodsObjact = goods;
-					console.log(obj.goodsObjact, 88)
-					console.log(Array.isArray(data.productValue), 99)
-					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].quota;
-					}else{
-						obj.many = 1;
-					}
-					console.log(obj.many,'obj.many')
-					if (obj.goodsObjact.description != null) {
-						obj.description = obj.goodsObjact.description.replace(/\<img/gi, '<img class="rich-img"');
-					}
-					obj.imgList = goods.images; //保存轮播图
-					obj.actionPrice = goods.price; //保存默认选中商品价格
-					obj.actionImage = goods.image_base; //保存默认选中商品图片
-					obj.goodsNumberMax = 1; //保存默认选中最大可购买商品数量
-					if (obj.goodsObjact.pink_type == 'AA团') {
-						obj.pink_type = 1;
-					} else {
-						obj.pink_type = 2;
-					}
-					obj.pinkTlist = data.pink;
-					obj.showlist = obj.pinkTlist.slice(0, 2);
-					if (obj.pinkTlist.length <= 2) {
-						obj.more = false;
-					}
-
-					// 保存结束时间
-					obj.seckillObj.stopTime = goods.stop_time * 1000;
-					// 获取当前时间
-					let acitonTime = new Date();
-					// 判断当前时间是否大于结束时间
-					if (acitonTime.getTime() > obj.seckillObj.stopTime) {
-						// 当前秒杀时间已经结束
-						obj.seckillObj.stop = true;
-					} else {
-						// 计算倒计时
-						let time = timeComputed(obj.seckillObj.stopTime)
-						// 倒计时数据保存
-						obj.seckillObj = {
-							stopTime: goods.stop_time * 1000, //结束时间
-							stop: false, //是否结束
-							stopTimeD: time.day, //天
-							stopTimeH: time.hours, //小时
-							stopTimeM: time.minutes, //分钟
-							stopTimeS: time.seconds, //秒钟
-							upTime: (new Date()).getTime()
-						}
-					}
-				});
-			},
-			// 立即购买
-			openPinkT(item) {
-				let obj = this;
-				obj.type = item;
-				// 创建传值对象
-				let data = {
-					cartNum: obj.goodsNumber, //商品数量
-					new: 1, //商品是否新增加到购物车1为不加入0为加入
-					combinationId: obj.goodsid,
-					productId: obj.goodsObjact.product_id
-				};
-				cartAdd(data)
-					.then(function(e) {
-						let da = e.data;
-						if (obj.type == 1) {
-							// 跳转到支付页
-							uni.navigateTo({
-								url: '/pages/order/createOrder?id=' + da.cartId+'&goodsType=2'
-							});
-						}
-					})
-					.catch(e => {
-						console.log(e);
-					});
-			},
-			specOPne(item) {
-				let obj = this;
-				obj.specClass = 'show';
-				console.log(obj.specClass,'this.specClass')
-			},
-			//规格弹窗开关
-			toggleSpec(str) {
-				if (this.specClass === 'show') {
-					this.specClass = 'hide';
-					setTimeout(() => {
-						this.specClass = 'none';
-					}, 250);
-				} else if (this.specClass === 'none') {
-					this.specClass = 'show';
-				}
-				// 判断是否为数字
-				if (typeof str == 'number') {
-					// 保存当前购买类型
-					this.type = str;
-				}
-			},
-			// 阻止触发上级事件
-			stopPrevent() {}
-		}
-	};
-</script>
-
-<style lang="scss">
-	/*  弹出层 */
-	.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: 35vh;
-			border-radius: 10rpx 10rpx 0 0;
-			background-color: #fff;
-	
-			.btn {
-				height: 66rpx;
-				line-height: 66rpx;
-				border-radius: 100rpx;
-				background: $uni-color-primary;
-				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;
-			}
-	
-			.right {
-				display: flex;
-				flex-direction: column;
-				padding-left: 24rpx;
-				font-size: $font-sm + 2rpx;
-				color: $font-color-base;
-				line-height: 42rpx;
-				width: 75%;
-	
-				.price {
-					font-size: $font-lg;
-					color: $uni-color-primary;
-					margin: 10rpx 0rpx;
-				}
-	
-				.name {
-					font-size: 32rpx;
-					color: $font-color-dark;
-					height: 50rpx;
-					overflow: hidden;
-					text-overflow: ellipsis;
-					white-space: nowrap;
-					display: block;
-				}
-	
-				.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: 100rpx;
-				min-width: 60rpx;
-				height: 60rpx;
-				padding: 0 20rpx;
-				font-size: $font-base;
-				color: $font-color-dark;
-			}
-	
-			.selected {
-				background: #ddffdf;
-				color: $uni-color-primary;
-			}
-		}
-	}
-	
-	//默认商品底部高度
-	.goodsBottom {
-		height: 160rpx;
-	}
-
-	page {
-		background: #f0f0f0;
-	}
-
-	//秒杀、拼团底部高度
-	.contentBottomHeight {
-		height: 110rpx;
-		// background-color: #FFFFFF;
-	}
-
-	//默认商品底部高度
-	.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;
-	}
-
-	.pinklistbox {
-		background: #ffffff;
-		margin-top: 25rpx;
-		overflow: hidden;
-	}
-
-	.pink_num {
-		background: -webkit-linear-gradient(left, #fdf5f6, #fbebf6);
-		padding: 15rpx 25rpx;
-		font-size: 26rpx;
-		color: #dd524d;
-	}
-
-	.pint {
-		background: -webkit-linear-gradient(left, #ff1f4f, #ff0409);
-		padding: 10rpx 25rpx;
-		color: #ffffff;
-		font-size: 24rpx;
-		border-radius: 25rpx;
-
-		.iconenter {
-			font-size: 15px;
-			color: #ffffff;
-		}
-	}
-
-	.pinklist {
-		padding: 0rpx 25rpx;
-		padding-top: 45rpx !important;
-	}
-
-	.pinklist_list {
-		margin-bottom: 10rpx;
-	}
-
-	.pink_img {
-		width: 100rpx;
-		height: 100rpx;
-
-		image {
-			width: 100%;
-			height: 100%;
-			border-radius: 100%;
-		}
-	}
-
-	.pink_people {
-		font-size: 28rpx;
-
-		text {
-			color: #dd524d;
-		}
-	}
-
-	.pink_time {
-		font-size: 26rpx;
-		color: #909399;
-	}
-
-	.pink_name {
-		width: 200rpx;
-		overflow: hidden;
-		white-space: nowrap;
-		text-overflow: ellipsis;
-		padding-left: 10rpx;
-		// background: #FC2A3F;
-		// height: 50rpx;
-	}
-
-	.More {
-		width: 100%;
-		line-height: 2;
-		background-color: #fc2a3f;
-		font-size: $font-lg;
-		margin: 0 auto;
-		text-align: center;
-		color: #ffffff;
-		// border-radius: 50rpx;
-	}
-
-	.ping-plan {
-		background-color: #FFFFFF;
-		padding: 25rpx 35rpx;
-		border-top: 15rpx solid #F3F3F4;
-		border-bottom: 15rpx solid #F3F3F4;
-	}
-
-	.participate-7 {
-		color: #000000;
-		font-size: 29rpx;
-		font-weight: 500;
-		padding-bottom: 25rpx;
-
-		.participate-7-1 {
-			.word {
-				color: #ff0a1a;
-			}
-
-			.word1 {
-				font-size: 25rpx;
-				color: #989aa0;
-			}
-
-			image {
-				width: 10rpx;
-				height: 20rpx;
-				margin-left: 15rpx;
-			}
-		}
-	}
-
-	//左右顶格加上下居中
-	.flex-between-center {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-	}
-
-	.participate-8 {
-		image {
-			width: 26rpx;
-			height: 12rpx;
-		}
-
-		.participate-8-1 {
-			text-align: center;
-
-			.img1 {
-				width: 43rpx;
-				height: 50rpx;
-			}
-
-			.img2 {
-				width: 43rpx;
-				height: 42rpx;
-			}
-
-			.img3 {
-				width: 60rpx;
-				height: 46rpx;
-			}
-
-			.word-1 {
-				font-size: 23rpx;
-				color: #000000;
-				line-height: 34rpx;
-			}
-
-			.word-2 {
-				font-size: 21rpx;
-				color: #91949B;
-				line-height: 34rpx;
-			}
-		}
-	}
-</style>

+ 0 - 414
pages/product/list.vue

@@ -1,414 +0,0 @@
-<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>

+ 0 - 612
pages/product/product.vue

@@ -1,612 +0,0 @@
-<template>
-	<view class="container">
-		<!-- 轮播图 -->
-		<top-swiper :imgList="imgList"></top-swiper>
-		<!-- 标题 -->
-		<product-content :goodsObjact="goodsObjact"></product-content>
-		<!-- 拼货时间及优惠 -->
-		<!-- <discounts @clickCoupon="Getcoupon" :Info="goodsObjact.store_info" :showCoupon="true"></discounts> -->
-		<!-- 猜你喜欢 -->
-		<!-- <guess-like @Addcar='Addcar' @clickNavTo='navToDetailPage' :goodList = 'good_list||[]'></guess-like> -->
-		<!-- 评价 -->
-		<estimate @navTo="navTo('/pages/product/reply?id=' + goodsid)" 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" :goodsObjact="goodsObjact" :goodsid="goodsid" @specOPne="specOPne"></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">{{ goodsObjact.store_name }}</text>
-						<text class="price">¥{{ actionPrice * goodsNumber }}</text>
-						<text class="stock">库存:{{ goodsStore }}件</text>
-						<view class="selected" v-if="specList != ''">
-							已选:
-							<text class="selected-text" v-for="(sItem, sIndex) in specSelected" :key="sIndex">{{ sItem }}</text>
-						</view>
-					</view>
-				</view>
-				<view v-for="(item, index) in specList" :key="index" class="attr-list">
-					<text>{{ item.attr_name }}</text>
-					<view class="item-list">
-						<text
-							v-for="(childItem, childIndex) in item.attr_value"
-							:key="childIndex"
-							class="tit"
-							:class="{ selected: childItem.check }"
-							@click="selectSpec(childItem, item, index)"
-						>
-							{{ childItem.attr }}
-						</text>
-					</view>
-				</view>
-				<!-- <view class="attr-list">
-					<text>购买数量</text>
-					<view class="item-list">
-						<uni-number-box class="step" :isMin="true" :value="goodsNumber" :min="1" :max="goodsNumberMax" @eventChange="numberChange"></uni-number-box>
-					</view>
-				</view> -->
-				<button class="btn" @click.stop="buy" v-show="buys_show">完成</button>
-				<button class="btn" style="background-color: #999999;" v-show="buys_shows">售罄</button>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-import { goodsDetail, cartAdd } 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';
-export default {
-	components: {
-		guessLike,
-		topSwiper,
-		productContent,
-		discounts,
-		freshDetail,
-		contentText,
-		productBottom,
-		estimate
-	},
-	data() {
-		return {
-			goodsStore: 0, //选中库存
-			specList: [],
-			buys_show: true,
-			buys_shows: false,
-			specSelected: [], //选中的分类
-			specClass: 'none', //显示隐藏弹窗
-			many: 1, //1是单规格  2是多规格
-			reply: '', //评论
-			list: '', //商品详情的数据
-			type: 1, //默认支付方式add为
-			goodsType: 0,
-			goodsNumber: 1, //购买数量
-			goodsid: '', //商品id
-			description: '', //商品描述
-			goodsObjact: {
-				percent: 1
-			}, //保存商品数据
-			//图片循环
-			imgList: [],
-			// 对比对象
-			actionPrice: 0, //默认选中商品价格
-			actionImage: '', //默认选中图片
-			good_list: '', //猜你喜欢列表
-			goodsNumberMax: 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;
-		this.goodsType = options.type;
-		// 判断有无人邀请
-		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].stock;
-				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: '/pages/product/reply?id=' + this.goodsid
-			});
-		},
-		//加入购物车
-		Addcar(item) {
-			let obj = this;
-			cartAdd({
-				cartNum: '1', //商品数量
-				uniqueId: '', //商品标签
-				new: 0, //商品是否新增加到购物车1为不加入0为加入
-				mer_id: '',
-				productId: item.id //商品编号
-			})
-				.then(function(e) {
-					uni.showToast({
-						title: '成功加入购物车',
-						type: 'top',
-						duration: 500,
-						icon: 'none'
-					});
-
-					obj.goodsDetail();
-				})
-				.catch(e => {
-					console.log(e);
-				});
-		},
-		goodsDetail() {
-			let obj = this;
-			// 获取普通商品信息
-			goodsDetail({}, this.goodsid).then(function({ data }) {
-				obj.list = data;
-				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].quota;
-				} 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
-			});
-		},
-		// 立即购买
-		buy() {
-			let obj = this;
-			// 创建传值对象
-			let data = {
-				cartNum: obj.goodsNumber, //商品数量
-				new: 1,
-				productId: obj.goodsid, //商品编号
-				uniqueId: obj.uniqueId
-			};
-
-			if (obj.type == 2) {
-				data.new = 0;
-			}
-			cartAdd(data)
-				.then(function(e) {
-					let da = e.data;
-					if (obj.type == 1) {
-						// 跳转到支付页
-						uni.navigateTo({
-							url: '/pages/order/createOrder?id=' + da.cartId
-						});
-					}
-					if (obj.type == 2) {
-						uni.showToast({
-							title: '成功加入购物车',
-							type: 'top',
-							duration: 2000,
-							icon: 'none'
-						});
-						obj.goodsDetail();
-					}
-					obj.toggleSpec();
-				})
-				.catch(e => {
-					console.log(e);
-				});
-		},
-		// 阻止触发上级事件
-		stopPrevent() {}
-	}
-};
-</script>
-
-<style lang="scss">
-/*  弹出层 */
-.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: 35vh;
-		border-radius: 10rpx 10rpx 0 0;
-		background-color: #fff;
-
-		.btn {
-			height: 66rpx;
-			line-height: 66rpx;
-			border-radius: 100rpx;
-			background: $uni-color-primary;
-			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;
-		}
-
-		.right {
-			display: flex;
-			flex-direction: column;
-			padding-left: 24rpx;
-			font-size: $font-sm + 2rpx;
-			color: $font-color-base;
-			line-height: 42rpx;
-			width: 75%;
-
-			.price {
-				font-size: $font-lg;
-				color: $uni-color-primary;
-				margin: 10rpx 0rpx;
-			}
-
-			.name {
-				font-size: 32rpx;
-				color: $font-color-dark;
-				height: 50rpx;
-				overflow: hidden;
-				text-overflow: ellipsis;
-				white-space: nowrap;
-				display: block;
-			}
-
-			.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: 100rpx;
-			min-width: 60rpx;
-			height: 60rpx;
-			padding: 0 20rpx;
-			font-size: $font-base;
-			color: $font-color-dark;
-		}
-
-		.selected {
-			background: #ddffdf;
-			color: $uni-color-primary;
-		}
-	}
-}
-
-//默认商品底部高度
-.goodsBottom {
-	height: 160rpx;
-}
-page {
-	background: #f0f0f0;
-}
-//秒杀、拼团底部高度
-.contentBottomHeight {
-	height: 110rpx;
-}
-//默认商品底部高度
-.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;
-}
-</style>

+ 0 - 278
pages/product/reply.vue

@@ -1,278 +0,0 @@
-<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>

+ 0 - 452
pages/product/search.vue

@@ -1,452 +0,0 @@
-<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 - 403
pages/product/seckill.vue

@@ -1,403 +0,0 @@
-<template>
-	<view class="seckillBox">
-		<scroll-view scroll-x="true" class="class-box flex b-t" :scroll-left="scrollLeft" :scroll-with-animation="true">
-			<view @click="tabClass(idx)" class="item" :style="{ width: topNavWidth }" v-for="(item, idx) in indexList" :key="idx">
-				<view class="time" :class="{ action: idx == classIndex }">{{ item.time }}</view>
-				<view class="status" :class="{ action: idx == classIndex }">{{ item.state }}</view>
-			</view>
-		</scroll-view>
-		<swiper class="list-Box" :current="classIndex" @change="swiperChange" duration="500">
-			<swiper-item class="list-item" v-for="(ls, idx) in indexList">
-				<view class=" b-b position-relative">
-					<view class="title-box flex ">
-						<view class="title-box-left">
-							<text v-if="ls.status == 1">抢购中先下先得哦!</text>
-							<text v-if="ls.status == 2">精品好货即将开抢!</text>
-							<text v-if="ls.status == 0">本场已结束,下次早点来哦!</text>
-						</view>
-						<view class="title-box-right flex">
-							<text class="tip" v-if="ls.status == 1">距离结束</text>
-							<text class="tip" v-if="ls.status == 2">距离开始</text>
-							<uni-countdown
-								color="#F9F9F8"
-								background-color="#666666"
-								v-if="ls.status == 1 || ls.status == 2"
-								:show-day="false"
-								:hour="ls.stopTimeH"
-								:minute="ls.stopTimeM"
-								:second="ls.stopTimeS"
-							></uni-countdown>
-						</view>
-					</view>
-				</view>
-				<scroll-view scroll-y="true" class="list" @scrolltolower="getList(classIndex)">
-					<view class="goodsList-item flex" :key="ind" v-for="(lss, ind) in ls.dataList">
-						<image :src="lss.image" lazy-load mode="scaleToFill"></image>
-						<view class="goodsList-content">
-							<view class="title clamp">
-								<text>{{ lss.title }}</text>
-							</view>
-							<view class="slider flex">
-								<view class="slider-box"><view class="slider-action" :style="{ width: lss.percent + '%' }"></view></view>
-								<view class="sales-nub">已抢{{ lss.percent + '%' }}</view>
-							</view>
-							<view class="goods-money flex">
-								<view class="money-box">
-									<view class="money">
-										<text class="font-size-sm">¥</text>
-										{{ lss.price }}
-									</view>
-									<view class="otMoney-box">
-										<text class="otMoney">¥{{ lss.ot_price }}</text>
-									</view>
-								</view>
-								<view @click="navProduct(ls, ind)" class="cart" :class="{ 'seckill-action': ls.status == 1 }">
-									{{ ls.status == 1 ? '去抢购' : ls.status == 2 ? '未开始' : '已结束' }}
-								</view>
-							</view>
-						</view>
-					</view>
-					<uni-load-more :status="ls.loadingType"></uni-load-more>
-				</scroll-view>
-			</swiper-item>
-		</swiper>
-	</view>
-</template>
-
-<script>
-import { getSeckillList, getSeckillClass } from '@/api/product.js';
-import uniCountdown from '@/components/uni-countdown/uni-countdown.vue';
-import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
-import { timeComputed } from '@/utils/rocessor.js';
-export default {
-	components: {
-		uniCountdown,
-		uniLoadMore
-	},
-	data() {
-		return {
-			indexList: [], //分类列表
-			showTime: '', //显示的时间
-			showTImeId: '', //显示时间id用于查询数据
-			// 判断是否所有活动已经结束
-			stop: false, //活动是否已经结束
-			show: false, //是否显示活动
-			status: 0, //获取状态值1为有活动开始中 2为活动未开始 0为活动已经结束
-			topNavWidth: '25%', //设置导航默认宽度
-			classIndex: 0, //当前进行中的活动
-			itemWidht: 0 //顶部分类宽度
-		};
-	},
-	computed: {
-		// 计算左侧距离
-		scrollLeft() {
-			if (this.classIndex > 1) {
-				return this.itemWidht * (this.classIndex - 1.5);
-			} else {
-				return 0;
-			}
-		}
-	},
-	onLoad: function(e) {
-		// 载入分类
-		this.getClass();
-	},
-	methods: {
-		//抢购时间切换时触发效果
-		swiperChange(e) {
-			this.classIndex = e.target.current;
-			this.getList(this.classIndex, 'tabChange');
-		},
-		// 获取项目宽度
-		numClassWidht() {
-			uni.createSelectorQuery()
-				.select('.seckillBox')
-				.fields(
-					{
-						size: true
-					},
-					data => {
-						// 设置项目宽度
-						this.itemWidht = Math.floor((data.width / 750) * 187.5);
-					}
-				)
-				.exec();
-		},
-		// 切换当前选中的秒杀活动
-		tabClass(ind) {
-			// 保存当前选中的对象
-			this.classIndex = ind;
-		},
-		// 跳转到商品详情
-		navProduct(ls, ind) {
-			if (ls.status == 1) {
-				let data = ls.dataList[ind];
-
-				uni.navigateTo({
-					url: '/pages/product/product?id=' + data.id + '&type=1'
-				});
-			}
-		},
-		// 获取商品
-		getList(ind, source) {
-			// 获取数据对象
-			let date = this.indexList[ind];
-			console.log(date, source);
-			if (source === 'tabChange' && date.loaded === true) {              
-				//tab切换只有第一次需要加载数据
-				return;
-			}
-			if (date.loadingType === 'noMore') {
-				//防止重复加载
-				return;
-			}
-			if (date.loadingType === 'loading') {
-				//防止重复加载
-				return;
-			}
-			// 修改当前对象状态为加载中
-			date.loadingType = 'loading';
-			getSeckillList(
-				{
-					page: date.page,
-					limit: date.limit
-				},
-				date.id
-			)
-				.then(e => {
-					date.dataList.push(...e.data);
-					// 查询翻页增加
-					date.page++;
-					// 判断是否可以继续加载
-					if (date.limit == e.data.length) {
-						date.loadingType = 'more';
-					} else {
-						date.loadingType = 'noMore';
-					}
-					// 设置当前数据已加载完毕
-					this.$set(date, 'loaded', true);
-				})
-				.catch(e => {
-					console.log(e);
-				});
-		},
-		// 获取秒杀时间段
-		getClass() {
-			let obj = this;
-			getSeckillClass({})
-				.then(({ data }) => {
-					obj.indexList = data.seckillTime.map((e, ind) => {
-						// 初始化翻页页数
-						e.page = 1;
-						// 初始每次加载的数据条数
-						e.limit = 6;
-						// 创建储存订单数据
-						e.dataList = [];
-						// 初始化加载
-						e.loadingType = 'more';
-						let ar = e;
-						// 判断是否为进行中的活动
-						if (ar.status === 1) {
-							// 计算倒计时时间
-							obj.timeComputed(ar.stop * 1000, ar);
-						} else {
-							// 获取距离开始还需要多少时间
-							let arTime = ar.time.split(':');
-							let h = arTime[0];
-							let m = arTime[1];
-							let time = new Date();
-							// 设置时间
-							time.setHours(h, m, 0);
-							// 计算倒计时时间
-							obj.timeComputed(time.getTime(), ar);
-						}
-
-						return e;
-					});
-					// 获取当前活动中的下标值
-					obj.classIndex = data.seckillTimeIndex;
-					// 获取当前显示中对象的数据
-					obj.$nextTick(() => {
-						obj.getList(obj.classIndex);
-					});
-					if (obj.indexList.length <= 4) {
-						// 当数量小于等于4的时候自适应宽度
-						obj.topNavWidth = 100 / obj.indexList.length + '%';
-					} else {
-						// 页面渲染完毕后加载scroll-view左侧距离
-						obj.$nextTick(() => {
-							obj.numClassWidht();
-						});
-					}
-				})
-				.catch(e => {
-					console.log(e);
-				});
-		},
-		// 计算倒计时时间
-		timeComputed(da, ar) {
-			let obj = this;
-			// 计算时间,保存需要多少时间到期
-			let stopTime = timeComputed(da);
-			console.log(stopTime);
-			ar.stopTimeH = stopTime.hours;
-			ar.stopTimeM = stopTime.minutes;
-			ar.stopTimeS = stopTime.seconds;
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-page,
-.seckillBox {
-	min-height: 100%;
-	height: 100%;
-}
-// 头部时间段样式
-.class-box {
-	white-space: nowrap;
-	height: 60px;
-	.item {
-		text-align: center;
-		display: inline-block;
-		color: $font-color-base;
-		padding: 11.5px 5px;
-		background-color: #ffffff;
-		line-height: 1;
-		.time {
-			font-size: 16px;
-			padding-bottom: 3px;
-			&.action {
-				color: $color-red;
-			}
-		}
-		.status {
-			font-size: 12px;
-			margin: 0 auto;
-			width: 60px;
-			padding: 3px 0;
-			&.action {
-				color: #ffffff;
-				border-radius: 99px;
-				background-color: $color-red;
-			}
-		}
-	}
-}
-// 列表上方标题样式
-.title-box {
-	margin-top: 10px;
-	padding: 10px;
-	background-color: #ffffff;
-	.title-box-left {
-		font-size: 15px;
-		color: $font-color-base;
-	}
-	.title-box-right {
-		.tip {
-			font-size: 15px;
-			color: #999999;
-			padding-right: 5px;
-		}
-
-		/deep/ .uni-countdown__number {
-			border-radius: 3px;
-			width: 22px;
-		}
-		/deep/ .uni-countdown__splitor,
-		/deep/ .uni-countdown__number {
-			height: 20px;
-			line-height: 18px;
-		}
-	}
-}
-// 列表样式
-.list-Box {
-	height: calc(100% - 60px);
-	.list {
-		height: calc(100% - 55px);
-	}
-}
-// 商品列表
-$slider-color: #fe9398; //滑块左侧颜色
-.goodsList-item {
-	background-color: #ffffff;
-	padding: 30rpx;
-	border-bottom: 1px solid $border-color-light;
-	image {
-		flex-shrink: 0;
-		border-radius: $border-radius-sm;
-		height: 180rpx;
-		width: 180rpx;
-	}
-	.slider {
-		margin-top: 15rpx;
-		justify-content: flex-start;
-		.slider-box {
-			width: 196rpx;
-			border-radius: 99px;
-			border: 1px solid $slider-color;
-			height: 16rpx;
-			.slider-action {
-				background-color: $slider-color;
-				height: 100%;
-			}
-		}
-		.sales-nub {
-			color: $font-color-light;
-			font-size: 24rpx;
-			padding-left: 20rpx;
-		}
-	}
-	.goodsList-content {
-		margin-left: 20rpx;
-		flex-grow: 1;
-		height: 180rpx;
-		position: relative;
-		.title {
-			font-size: $font-base;
-			color: $font-color-dark;
-			font-weight: 500;
-			width: 0;
-			min-width: 100%;
-		}
-		.goods-money {
-			position: absolute;
-			left: 0;
-			bottom: 0;
-			width: 100%;
-			.money-box {
-				.money {
-					font-size: $font-lg + 10rpx;
-					color: $color-red;
-					font-weight: bold;
-				}
-				.otMoney-box {
-					font-size: $font-sm;
-					.otMoney {
-						color: $font-color-light;
-						padding-right: 20rpx;
-						text-decoration: line-through;
-					}
-					.sales {
-						color: $font-color-light;
-					}
-				}
-			}
-			.cart {
-				font-size: $font-base;
-				border-radius: 99px;
-				padding: 15rpx 30rpx;
-				line-height: 1;
-				color: #ffffff;
-				background-color: $color-gray;
-				&.seckill-action {
-					border: 1px solid $color-red;
-					background-color: $color-red;
-				}
-			}
-		}
-	}
-}
-</style>

+ 121 - 0
pages/profit/fund.vue

@@ -0,0 +1,121 @@
+<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>

+ 466 - 0
pages/profit/profit.vue

@@ -0,0 +1,466 @@
+<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>

+ 90 - 42
pages/public/forget.vue

@@ -1,40 +1,59 @@
 <template>
 	<view class="container">
-		<view class="container_text">
-			<image class="banner-img" src="/static/img/img01.png" mode=" scaleToFill"></image>
+		<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>
-		<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/img03.png"></image></view>
-				<view class="login_name"><input class="uni-input" v-model="phone" focus placeholder="请输入手机号" /></view>
+				<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>
 			<view class="login_input flex">
-				<view class="login_img"><image src="/static/icon/img06.png"></image></view>
+				<view class="login_img"><image src="../../static/icon/icon-yzm.png"></image></view>
 				<view class="login_name flex">
-					<input class="uni-input width" v-model="code" focus placeholder="请输入验证码" />
-					<view class="code" @click="verification">{{ countDown == 0 ? '验证码' : countDown }}</view>
+					<input class="uni-input width" v-model="code" focus :placeholder="$t('hea.sryzm')" />
+					<view class="code" @click="verification">{{ countDown == 0 ? $t('hea.yzm') : countDown }}</view>
 				</view>
 			</view>
 			<view>
-				<button type="green" @click="register" class="uni-button uni-button-green">登录</button>
+				<button type="green" @click="loding?register():''" class="uni-button uni-button-green">{{$t('hea.qrxg')}}</button>
 			</view>
 		</view>
 	</view>
 </template>
 <script>
 import { mapMutations } from 'vuex';
-import { verify, loginMobile, getUserInfo } from '@/api/login.js';
+import { verify, loginMobile, getUserInfo } from '@/api/login.js';
+import { registerReset } from '@/api/set.js';
 export default {
 	data() {
 		return {
 			phone: '', //用户
 			code: '', //验证码
 			time: '', //保存倒计时对象
-			countDown: 0 //倒计时
+			countDown: 0, //倒计时
+			password: '',
+			repassword: '',
+			loding:true,//是否载入中
+			
 		};
 	},
-	onLoad() {},
+	onLoad() {
+		uni.setNavigationBarTitle({
+			title:this.$t('foo.wjmm')
+		})
+	},
 	watch: {
 		// 监听倒计时
 		countDown(i) {
@@ -47,7 +66,8 @@ export default {
 		...mapMutations('user', ['setUserInfo', 'login']),
 		// 手机登录
 		register() {
-			let obj = this;
+			let obj = this;
+			console.log('dianji')
 			if (obj.phone == '') {
 				obj.$api.msg('请输入电话号码');
 				return;
@@ -55,25 +75,32 @@ 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;
 			}
-
-			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'
-					});
+			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'
 				});
 			}).catch((e) => {
 				console.log(e);
@@ -83,7 +110,7 @@ export default {
 		verification() {
 			let obj = this;
 			if (this.phone == '') {
-				this.$api.msg('请输入电话号码');
+				this.$api.msg('请输入手机号');
 				return;
 			}
 			if (this.phone.length < 11) {
@@ -100,8 +127,8 @@ export default {
 				}, 1000);
 				//调用验证码接口
 				verify({
-					phone: obj.phone,
-					type: 'login'
+					mobile: obj.phone,
+					event: 'resetpwd'
 				})
 					.then(({ data }) => {})
 					.catch(err => {
@@ -131,20 +158,36 @@ page {
 .container_text {
 	width: 100%;
 	height: 500rpx;
-	top: 0rpx;
+	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;
 	position: relative;
-	padding: 100rpx 102rpx;
-	background-color: #ffffff;
-	margin-top: -180rpx;
+	padding: 50rpx 102rpx 0;
+	background-color: #000;
+	// margin-top: -180rpx;
 	border-radius: 20rpx;
-	.login_input {
+	.login_input {
+		padding-bottom: 20rpx;
 		border-bottom: 1px solid #f0f0f0;
 		margin-bottom: 65rpx;
 		.login_img image {
@@ -158,12 +201,12 @@ page {
 			font-size: 28rpx !important;
 		}
 		.login_name {
-			color: #333333;
+			color: #fff;
 			.width {
 				width: 325rpx !important;
 			}
 			.code {
-				color: #5dbc7c;
+				color: #dbb189;
 				font-size: 23rpx;
 				border-left: 1px solid #eeeeee;
 				width: 150rpx;
@@ -172,11 +215,16 @@ page {
 			}
 		}
 	}
-	.uni-button-green {
-		color: #ffffff;
-		background-color: #5dbc7c;
-		margin: 40rpx 10rpx;
-		border-radius: 50rpx;
+	.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 {
 		height: 85rpx;

+ 457 - 385
pages/public/login.vue

@@ -1,386 +1,458 @@
-<template>
-	<view class="container">
-		<view class="container_text">
-			<image class="banner-img" src="/static/img/img01.png" mode="scaleToFill"></image>
-		</view>
-		<view class="loginTitle"><text>登录</text></view>
-		<view class="login_text">
-			<view class="login_input flex">
-				<view class="login_img"><image src="/static/icon/img03.png"></image></view>
-				<view class="login_name"><input class="uni-input" v-model="username" focus placeholder="请输入手机号" /></view>
-			</view>
-			<view class="login_input flex">
-				<view class="login_img"><image src="/static/icon/img04.png"></image></view>
-				<view class="login_name"><input class="uni-input" type="password" v-model="passward" focus placeholder="请输入密码" /></view>
-			</view>
-			<view><button type="green" class="uni-button uni-button-green" @click="toLogin">登录</button></view>
-			<view><button type="green" class="uni-button uni-button-green uni-button-green-plain" plain="true" hover-class="none" @click="register">注册</button></view>
-			<navigator url="./forget"><view class="forget">忘记密码</view></navigator>
-			<view class="flex other">
-				<view class="fenge"></view>
-				<view class="qita">其他方式登录</view>
-				<view class="fenge"></view>
-			</view>
-			<!-- #ifndef APP-PLUS -->
-					<view class="weixin" @click="wecahtLogin"><image src="/static/img/img05.png"></image></view>
-					<view class="weixin_text" @click="wecahtLogin">微信登录</view>
-					<!-- #endif -->
-					<!-- #ifdef APP-PLUS -->
-					<block v-if="!is_ios">
-						<view class="weixin" @click="wecahtLogin"><image src="/static/img/img05.png" mode="scaleToFill"></image></view>
-						<view class="weixin_text" @click="wecahtLogin">微信登录</view>
-					</block>
-					<block v-else>
-						<view class="ios_login flex" @click="wecahtLogin('weixin')">
-							<text class="iconfont iconweixin"></text>
-							<text class="weixin_text">微信登录</text>
-						</view>
-						<view v-if='is_apple_login' class="ios_login flex" @click="wecahtLogin('apple')">
-							<image class="loginIcon" src="/static/icon/appleIcon.png" mode=" scaleToFill"></image>
-							<text class="weixin_text">通过Apple登录</text>
-						</view>
-					</block>
-					<!-- #endif -->
-				</view>
-			</view>
-</template>
-
-<script>
-import { mapMutations } from 'vuex';
-import { login} from '@/api/login.js';
-import { getUserInfo} from '@/api/user.js';
-// #ifdef APP-PLUS
-// applelogin接口需要开发编写,基础项目中可能没有
-import { applelogin } from '@/api/set.js';
-// loginWx接口需要开发编写,基础项目中可能没有
-import { loginWx } from '@/api/login.js';
-// #endif
-// #ifdef H5
-import { loginWinxin } from '@/utils/wxAuthorized';
-// #endif
-export default {
-	data() {
-		return {
-			username: '',
-			passward: '',
-			// #ifdef APP-PLUS
-			is_ios: false ,//判断是否为ios手机
-			is_apple_login:false,//是否有ios授权登录功能
-			// #endif
-		};
-	},
-	onLoad() {
-		let obj = this;
-		// #ifdef APP-PLUS
-		let system = uni.getStorageSync('platform');
-		// 判断是否为ios
-		if (system == 'ios') {
-			obj.is_ios = true;
-		}
-		uni.getSystemInfo({
-			success(e) {
-				if(+e.system.split('.')[0]>=13){
-					obj.is_apple_login=true;
-				}
-			}
-		})
-		// #endif
-	},
-	methods: {
-		...mapMutations('user', ['setUserInfo', 'login']),
-		// 微信登录
-		wecahtLogin(type) {
-			let obj = this;
-			// #ifdef H5
-			let weichatBrowser = uni.getStorageSync('weichatBrowser');
-			if (weichatBrowser) {
-				loginWinxin();
-			}
-			// #endif
-			// #ifdef APP-PLUS
-			uni.login({
-				provider: type,
-				success(e) {
-					uni.getUserInfo({
-						provider: type,
-						success(es) {
-							if(type==='weixin'){
-								loginWx(es.userInfo)
-									.then(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);
-										uni.showModal({
-											content: JSON.stringify(e),
-											success() {},
-											fail() {}
-										});
-									});
-							}
-							if(type==='apple'){
-								console.log(es.userInfo);
-								applelogin({
-									account: es.userInfo.openId,
-								})
-									.then(function(e) {
-										console.log(e,'token')
-										uni.setStorageSync('token', e.data.token);
-										getUserInfo({}).then(e => {
-											obj.login();
-											// 保存返回用户数据
-											obj.setUserInfo(e.data);
-											//成功跳转首页
-											uni.switchTab({
-												url: '/pages/index/index'
-											});
-										});
-										
-									})
-									.catch(function(e) {
-										console.log(e);
-									});
-							}
-							
-						},
-						fail(es) {
-							uni.showModal({
-								content: JSON.stringify(es),
-								success() {
-									// obj.login();
-									// // 保存返回用户数据
-									// obj.setUserInfo(e.data);
-									// //成功跳转首页
-									// uni.switchTab({
-									// 	url: '/pages/index/index'
-									// });
-								}
-							});
-						}
-					});
-				},
-				fail(e) {
-					uni.showModal({
-						title: '提示',
-						content: JSON.stringify(e),
-						showCancel: false
-					});
-				}
-			});
-			// #endif
-		},
-		//登录
-		async toLogin() {
-			let obj = this;
-			obj.logining = true;
-			if (obj.username == '') {
-				obj.$api.msg('请输入手机号');
-				return;
-			}
-			if (obj.passward == '') {
-				obj.$api.msg('请输入密码');
-				return;
-			}
-			login({
-				account: obj.username,
-				password: obj.passward
-			})
-				.then(function(e) {
-					uni.setStorageSync('token', e.data.token);
-					obj.$store.commit('hasLogin', true);
-					getUserInfo({}).then(e => {
-						obj.login();
-						// 保存返回用户数据
-						obj.setUserInfo(e.data);
-						let ur = uni.getStorageSync('present')|| '/pages/index/index';
-						//成功跳转首页
-						uni.switchTab({
-							url: ur,
-							fail(e) {
-								uni.navigateTo({
-									url: ur,
-									fail(e) {
-										uni.navigateTo({
-											url: '/pages/index/index',
-										});
-									}
-								});
-							}
-						});
-					});
-				})
-				.catch(function(e) {
-					console.log(e);
-				});
-		},
-		//跳转注册页
-		register() {
-			uni.navigateTo({
-				url: `/pages/public/register`
-			});
-		},
-		// 后退
-		navBack() {
-			uni.navigateBack();
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-	/* #ifdef APP-PLUS */
-	
-	.ios_login {
-		width: 260rpx;
-		border-radius: 12rpx;
-		justify-content: center;
-		border: 1px solid #212121;
-		margin: 24rpx auto;
-		padding: 10rpx;
-		background-color: #212121;
-		color: #ffffff;
-		.loginIcon {
-			width: 50rpx;
-			height: 50rpx;
-		}
-		.weixin_text {
-			line-height: 1;
-			margin-left: 20rpx;
-			color: #ffffff !important;
-		}
-	}
-	
-	/* #endif */
-	.ios_login {
-		width: 350rpx;
-		border-radius: 12rpx;
-		justify-content: center;
-		border: 1px solid #212121;
-		margin: 24rpx auto;
-		padding: 15rpx;
-		background-color: #212121;
-		color: #ffffff;
-		font-size: 32rpx;
-		.loginIcon {
-			font-size: 35rpx;
-			width: 35rpx;
-			height: 35rpx;
-		}
-		.weixin_text {
-			line-height: 1;
-			margin-left: 20rpx;
-			color: #ffffff !important;
-		}
-	}
-	
-page {
-	height: 100%;
-}
-.container {
-	width: 100%;
-	height: 100%;
-	background-size: 100%;
-}
-.container_text {
-	width: 100%;
-	height: 500rpx;
-	top: 0rpx;
-	.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;
-		}
-		.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: #5dbc7c;
-		margin: 40rpx 10rpx;
-		border-radius: 50rpx;
-	}
-	.uni-button-green-plain {
-		border: 1px solid #5dbc7c;
-		margin: 40rpx 10rpx;
-		border-radius: 50rpx;
-		color: #5dbc7c;
-		background-color: #ffffff;
-	}
-	.uni-button {
-		height: 85rpx;
-		line-height: 85rpx;
-	}
-}
-.loginTitle {
-	position: absolute;
-	top: 250rpx;
-	width: 100%;
-	text-align: center;
-	color: white;
-	font-size: 40rpx;
-}
+<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>
+		<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>
+			<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>
+			<!-- <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> -->
+			<!-- #endif -->
+			<!-- #ifdef APP-PLUS -->
+			<!-- <block v-if="!is_ios">
+				<view class="weixin" @click="wecahtLogin">
+					<image src="/static/img/img05.png" mode="scaleToFill"></image>
+				</view>
+				<view class="weixin_text" @click="wecahtLogin">微信登录</view>
+			</block>
+			<block v-else>
+				<view class="ios_login flex" @click="wecahtLogin('weixin')">
+					<text class="iconfont iconweixin"></text>
+					<text class="weixin_text">微信登录</text>
+				</view>
+				<view v-if='is_apple_login' class="ios_login flex" @click="wecahtLogin('apple')">
+					<image class="loginIcon" src="/static/icon/appleIcon.png" mode=" scaleToFill"></image>
+					<text class="weixin_text">通过Apple登录</text>
+				</view>
+			</block> -->
+			<!-- #endif -->
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapMutations } from 'vuex';
+import { login } from '@/api/login.js';
+import { getUserInfo } from '@/api/user.js';
+// #ifdef APP-PLUS
+// applelogin接口需要开发编写,基础项目中可能没有
+import { applelogin } from '@/api/set.js';
+// loginWx接口需要开发编写,基础项目中可能没有
+import { loginWx } from '@/api/login.js';
+// #endif
+// #ifdef H5
+import { loginWinxin } from '@/utils/wxAuthorized';
+// #endif
+export default {
+	data() {
+		return {
+			username: '',
+			passward: '',
+			// #ifdef APP-PLUS
+			is_ios: false, //判断是否为ios手机
+			is_apple_login: false //是否有ios授权登录功能
+			// #endif
+		};
+	},
+	onLoad() {
+		let obj = this;
+		// #ifdef APP-PLUS
+		let system = uni.getStorageSync('platform');
+		// 判断是否为ios
+		if (system == 'ios') {
+			obj.is_ios = true;
+		}
+		uni.getSystemInfo({
+			success(e) {
+				if (+e.system.split('.')[0] >= 13) {
+					obj.is_apple_login = true;
+				}
+			}
+		});
+		// #endif
+	},
+	methods: {
+		...mapMutations('user', ['setUserInfo', 'login']),
+		// 微信登录
+		wecahtLogin(type) {
+			let obj = this;
+			// #ifdef H5
+			let weichatBrowser = uni.getStorageSync('weichatBrowser');
+			if (weichatBrowser) {
+				loginWinxin();
+			}
+			// #endif
+			// #ifdef APP-PLUS
+			uni.login({
+				provider: type,
+				success(e) {
+					uni.getUserInfo({
+						provider: type,
+						success(es) {
+							if (type === 'weixin') {
+								loginWx(es.userInfo)
+									.then(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);
+										uni.showModal({
+											content: JSON.stringify(e),
+											success() {},
+											fail() {}
+										});
+									});
+							}
+							if (type === 'apple') {
+								console.log(es.userInfo);
+								applelogin({
+									account: es.userInfo.openId
+								})
+									.then(function(e) {
+										console.log(e, 'token');
+										uni.setStorageSync('token', e.data.token);
+										getUserInfo({}).then(e => {
+											obj.login();
+											// 保存返回用户数据
+											obj.setUserInfo(e.data);
+											//成功跳转首页
+											uni.switchTab({
+												url: '/pages/index/index'
+											});
+										});
+									})
+									.catch(function(e) {
+										console.log(e);
+									});
+							}
+						},
+						fail(es) {
+							uni.showModal({
+								content: JSON.stringify(es),
+								success() {
+									// obj.login();
+									// // 保存返回用户数据
+									// obj.setUserInfo(e.data);
+									// //成功跳转首页
+									// uni.switchTab({
+									// 	url: '/pages/index/index'
+									// });
+								}
+							});
+						}
+					});
+				},
+				fail(e) {
+					uni.showModal({
+						title: '提示',
+						content: JSON.stringify(e),
+						showCancel: false
+					});
+				}
+			});
+			// #endif
+		},
+		//登录
+		async toLogin() {
+			let obj = this;
+			obj.logining = true;
+			if (obj.username == '') {
+				obj.$api.msg('请输入手机号');
+				return;
+			}
+			if (obj.passward == '') {
+				obj.$api.msg('请输入密码');
+				return;
+			}
+			login({
+				account: obj.username,
+				password: obj.passward
+			})
+				.then(function(e) {
+					uni.setStorageSync('token', e.data.userinfo.token);
+					// 保存返回用户数据
+					obj.setUserInfo(e.data.userinfo);
+					obj.$store.commit('hasLogin', true);
+					getUserInfo({}).then(e => {
+						obj.login();
+						// 保存返回用户数据
+						// obj.setUserInfo(e.data.userinfo);
+						let ur = uni.getStorageSync('present') || '/pages/index/index';
+						//成功跳转首页
+						uni.switchTab({
+							url: ur,
+							fail(e) {
+								uni.navigateTo({
+									url: ur,
+									fail(e) {
+										uni.navigateTo({
+											url: '/pages/index/index'
+										});
+									}
+								});
+							}
+						});
+					});
+				})
+				.catch(function(e) {
+					console.log(e);
+				});
+		},
+		//跳转注册页
+		register() {
+			uni.navigateTo({
+				url: `/pages/public/register`
+			});
+		},
+		// 后退
+		navBack() {
+			uni.navigateBack();
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+/* #ifdef APP-PLUS */
+
+.ios_login {
+	width: 260rpx;
+	border-radius: 12rpx;
+	justify-content: center;
+	border: 1px solid #212121;
+	margin: 24rpx auto;
+	padding: 10rpx;
+	background-color: #212121;
+	color: #ffffff;
+
+	.loginIcon {
+		width: 50rpx;
+		height: 50rpx;
+	}
+
+	.weixin_text {
+		line-height: 1;
+		margin-left: 20rpx;
+		color: #ffffff !important;
+	}
+}
+
+/* #endif */
+.ios_login {
+	width: 350rpx;
+	border-radius: 12rpx;
+	justify-content: center;
+	border: 1px solid #212121;
+	margin: 24rpx auto;
+	padding: 15rpx;
+	background-color: #212121;
+	color: #ffffff;
+	font-size: 32rpx;
+
+	.loginIcon {
+		font-size: 35rpx;
+		width: 35rpx;
+		height: 35rpx;
+	}
+
+	.weixin_text {
+		line-height: 1;
+		margin-left: 20rpx;
+		color: #ffffff !important;
+	}
+}
+
+page {
+	height: 100%;
+}
+
+.container {
+	width: 100%;
+	height: 100%;
+	background-size: 100%;
+}
+
+.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;
+	position: relative;
+	padding: 100rpx 102rpx;
+	background-color: #000;
+	// margin-top: -180rpx;
+	border-radius: 20rpx;
+
+	.login_input {
+		padding-bottom: 20rpx;
+		border-bottom: 1px solid #f0f0f0;
+		margin-bottom: 65rpx;
+		background-color: #000;
+
+		.login_img image {
+			height: 35rpx;
+			width: 29rpx;
+			margin-right: 20rpx;
+		}
+
+		.uni-input {
+			background-color: #000;
+			text-align: left;
+			width: 470rpx;
+			font-size: 28rpx !important;
+		}
+
+		.login_name {
+			color: #fff;
+			background-color: #000;
+		}
+	}
+
+	.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;
+		font-family: PingFang SC;
+		font-weight: 500;
+		color: #97764a;
+	}
+
+	.uni-button-green-plain {
+		border: 1px solid #5dbc7c;
+		margin: 40rpx 10rpx;
+		border-radius: 50rpx;
+		color: #5dbc7c;
+		background-color: #ffffff;
+	}
+
+	.uni-button {
+		height: 85rpx;
+		line-height: 85rpx;
+	}
+}
+
+.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;
+	}
+}
 </style>

+ 227 - 0
pages/public/nav.vue

@@ -0,0 +1,227 @@
+<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>

+ 84 - 43
pages/public/register.vue

@@ -1,35 +1,41 @@
 <template>
 	<view class="container">
-		<view class="container_text" >
-			<image class="banner-img" src="/static/img/img01.png" mode="scaleToFill"></image>
+		<view 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>
-		<view class="loginTitle"><text>注册</text></view>
+		
 		<view class="login_text">
 			<view class="login_input flex">
-				<view class="login_img"><image src="/static/icon/img03.png"></image></view>
-				<view class="login_name"><input class="uni-input" v-model="phone" focus placeholder="请输入手机号" /></view>
+				<view class="login_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/img04.png"></image></view>
-				<view class="login_name"><input class="uni-input" type="password" v-model="password" focus placeholder="请输入密码" /></view>
+				<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>
 			<view class="login_input flex">
-				<view class="login_img"><image src="/static/icon/img04.png"></image></view>
-				<view class="login_name"><input class="uni-input" type="password" v-model="repassword" focus placeholder="请重复输入密码" /></view>
+				<view 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>
-			<view class="login_input flex" style="display: none;">
-				<view class="login_img"><image src="/static/icon/img07.png"></image></view>
-				<view class="login_name"><input class="uni-input" type="text" v-model="invitation" focus placeholder="请输入邀请码" /></view>
-			</view>
-			<!-- <view class="login_input flex">
-				<view class="login_img"><image src="/static/icon/img06.png"></image></view>
+			<view class="login_input flex">
+				<view class="login_img"><image src="../../static/icon/icon-yzm.png"></image></view>
 				<view class="login_name flex">
-					<input class="uni-input width" v-model="code" focus placeholder="请输入验证码" />
-					<view class="code" @click="verification">{{ countDown == 0 ? '验证码' : countDown }}</view>
+					<input class="uni-input width" v-model="code" focus :placeholder="$t('hea.sryzm')" />
+					<view class="code" @click="verification">{{ countDown == 0 ? $t('hea.yzm') : countDown }}</view>
 				</view>
-			</view> -->
-			<view><button type="green" @click="register" class="uni-button uni-button-green">注册账号</button></view>
-			<view><button class="uni-button uni-button-green uni-button-green-plain" type="green" plain="true" hover-class="none" @click="login">返回登录</button></view>
+			</view>
+			<view><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>
 	</view>
 </template>
@@ -67,7 +73,7 @@ export default {
 				obj.$api.msg('请输入电话号码');
 				return;
 			}
-			if (!/(^1[3|4|5|7|8][0-9]{9}$)/.test(this.phone)) {
+			if (!/(^1[2|3|4|5|6|7|8|9][0-9]{9}$)/.test(this.phone)) {
 				obj.$api.msg('请输入正确的手机号');
 				return;
 			}
@@ -87,15 +93,15 @@ export default {
 			// 	obj.$api.msg('请输入邀请码');
 			// 	return;
 			// }
-			// if (obj.code == '') {
-			// 	obj.$api.msg('请输入验证码');
-			// 	return;
-			// }
+			if (obj.code == '') {
+				obj.$api.msg('请输入验证码');
+				return;
+			}
 			register({
-				account: obj.phone, //账号
-				// captcha: obj.code, //验证码
+				mobile: obj.phone, //账号
+				code: obj.code, //验证码
 				password: obj.password ,//密码
-				spread:this.invitation//上级推广人
+				spread:2//上级推广人
 			}).then(function(e) {
 				uni.showToast({
 					title:'注册成功',
@@ -132,8 +138,8 @@ export default {
 				}, 1000);
 				//调用验证码接口
 				verify({
-					phone: obj.phone,
-					type: 'register'
+					mobile: obj.phone,
+					event: 'register'
 				})
 					.then(({ data }) => {})
 					.catch(err => {
@@ -163,20 +169,36 @@ page {
 .container_text {
 	width: 100%;
 	height: 500rpx;
-	top: 0rpx;
+	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;
 	position: relative;
-	padding: 100rpx 102rpx;
-	background-color: #ffffff;
-	margin-top: -180rpx;
+	padding: 20rpx 102rpx 100rpx;
+	background-color: #000;
+	// margin-top: -180rpx;
 	border-radius: 20rpx;
-	.login_input {
+	.login_input {
+		padding-bottom: 20rpx;
 		border-bottom: 1px solid #f0f0f0;
 		margin-bottom: 65rpx;
 		.login_img image {
@@ -190,7 +212,7 @@ page {
 			font-size: 28rpx !important;
 		}
 		.login_name {
-			color: #333333;
+			color: #fff;
 		}
 	}
 
@@ -227,11 +249,16 @@ page {
 		color: #999999;
 	}
 
-	.uni-button-green {
-		color: #ffffff;
-		background-color: #5dbc7c;
-		margin: 40rpx 10rpx;
-		border-radius: 50rpx;
+	.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-plain {
 		border: 1px solid #5dbc7c;
@@ -265,7 +292,7 @@ page {
 	width: 325rpx !important;
 }
 .code {
-	color: #5dbc7c;
+	color: #dbb189;
 	font-size: 23rpx;
 	border-left: 1px solid #eeeeee;
 	width: 150rpx;
@@ -275,7 +302,21 @@ 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>
 

+ 114 - 0
pages/public/success.vue

@@ -0,0 +1,114 @@
+<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>

+ 311 - 311
pages/public/wxLogin.vue

@@ -1,312 +1,312 @@
-<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;
-}
+<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>

+ 0 - 208
pages/set/address.vue

@@ -1,208 +0,0 @@
-<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>

+ 0 - 219
pages/set/addressManage.vue

@@ -1,219 +0,0 @@
-<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>

+ 0 - 161
pages/set/phone.vue

@@ -1,161 +0,0 @@
-<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>

+ 267 - 43
pages/set/userinfo.vue

@@ -1,93 +1,317 @@
 <template>
 	<view class="content">
-		<view class="row b-b">
-			<text class="tit">昵称</text>
-			<input class="input" type="text" v-model="name" placeholder="修改昵称" placeholder-class="placeholder" />
+		<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>
-		<button class="add-btn" @click="confirm">提交</button>
+		<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>
 </template>
 
 <script>
-import { mapState } from 'vuex';
-import { userEdit } from '@/api/set.js';
+import { mapState, mapMutations } from 'vuex';
+import { uploads } from '@/api/user.js';
+import { userEdit, logout } from '@/api/set.js';
+
 export default {
 	data() {
-		return {
-			name: ''
-		};
+		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'])
 	},
-	onShow(option) {
-		this.name = this.userInfo.nickname + '';
-	},
 	methods: {
-		switchChange(e) {
-			this.addressData.default = e.value;
+		...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;
+			});
+		},
+		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() {
-			userEdit({ nickname: this.name, avatar: this.userInfo.avatar })
+			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;
+			}
+			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.switchTab({
-							url:'/pages/user/user'
-						});
+					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();
+					}
+				}
+			});
 		}
 	}
 };
 </script>
 
 <style lang="scss">
-page {
-	background: $page-color-base;
-	padding-top: 16upx;
+.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;
+	}
+	.left {
+		display: flex;
+		justify-content: start;
+	}
+	.image {
+		width: 100rpx;
+		height: 100rpx;
+		image {
+			width: 100%;
+			height: 100%;
+		}
+	}
+	.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;
-	position: relative;
 	padding: 0 30upx;
 	height: 110upx;
-	background: #fff;
-
+	background: #000;
+	.left {
+		display: flex;
+		justify-content: start;
+		align-items: center;
+	}
+	.image {
+		width: 100rpx;
+		height: 100rpx;
+		image {
+			width: 100%;
+			height: 100%;
+		}
+	}
 	.tit {
 		flex-shrink: 0;
 		width: 120upx;
-		font-size: 30upx;
-		color: $font-color-dark;
+		font-size: $font-lg;
+		color: #fff;
 	}
 	.input {
 		flex: 1;
-		font-size: 30upx;
-		color: $font-color-dark;
-	}
-	.iconlocation {
-		font-size: 36upx;
-		color: $font-color-light;
+		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;
-	width: 690upx;
-	height: 80upx;
-	margin: 60upx auto;
-	font-size: $font-lg;
-	color: #fff;
-	background-color: $base-color;
-	border-radius: 10upx;
-	// box-shadow: 1px 2px 5px rgba(219, 63, 96, 0.4);
+	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;
 }
 </style>

+ 171 - 0
pages/upload/upload.vue

@@ -0,0 +1,171 @@
+<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>

+ 365 - 0
pages/user/applyList.vue

@@ -0,0 +1,365 @@
+<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>

+ 0 - 310
pages/user/coupon.vue

@@ -1,310 +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">
-				<!-- 空白页 -->
-				<empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty>
-				<view v-for="(item, index) in tabItem.orderList" :key="index" class="row flex">
-					<view class="list-money flex">
-						<image :src="item._type == 2 ? '/static/img/img03.png' : '/static/img/img02.png'" mode="scaleToFill"></image>
-						<view class="list-money-text">
-							<view class="tit" :class="{ action: item._type} == 2">
-								<text>{{ item.coupon_price }}</text>
-							</view>
-							<view class="price">
-								<text>满{{ item.use_min_price }}元</text>
-							</view>
-						</view>
-					</view>
-					<view class="list-interval position-relative">
-						<view class="bottom"></view>
-						<view class="top"></view>
-					</view>
-					<view class="row_list_right">
-						<view class="right_top">
-							<text class="right_title" :class="{ action: item._type == 2}">{{ item.coupon_title }}</text>
-						</view>
-						<view class="right_time">
-							<text>{{ item._add_time }}-{{ item.end_time }}</text>
-						</view>
-						<view class="right_use action" v-if="item._type == 2">
-							<text>{{ item._msg }}</text>
-						</view>
-						<view class="right_use noAction" v-if="item._type == 0">
-							<text>{{ item._msg }}</text>
-						</view>
-					</view>
-				</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 { getCouponsList } 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 //每次信息条数
-				}
-			]
-		};
-	},
-	onLoad(options) {
-		this.loadData();
-	},
-	methods: {
-		//返回首页
-		navTo(){
-			uni.switchTab({
-				url: '/pages/index/index'
-			});
-		},
-		//获取订单列表
-		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';
-			getCouponsList(
-				{
-					page: navItem.page,
-					limit: navItem.limit
-				},
-				index
-			)
-				.then(({ data }) => {
-					let da = data.map(e => {
-						e.coupon_price = +e.coupon_price.replace(',', '');
-						e.use_min_price = +e.use_min_price.replace(',', '');
-						return e
-					});
-					navItem.orderList = navItem.orderList.concat(da);
-					console.log(navItem.orderList);
-					navItem.page++;
-					if (navItem.limit == data.length) {
-						// 判断是否还有数据,有改为more,没有改为noMore
-						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">
-// 卡卷可用时颜色
-$card-color-action: #fc4141;
-page,
-.content {
-	background: $page-color-base;
-	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: #bc253a;
-			&:after {
-				content: '';
-				position: absolute;
-				left: 50%;
-				bottom: 0;
-				transform: translateX(-50%);
-				width: 44px;
-				height: 0;
-				border-bottom: 2px solid #bc253a;
-			}
-		}
-	}
-}
-
-.swiper-box {
-	height: calc(100% - 40px);
-	.tab-content {
-		padding: 25rpx 0px;
-		font-size: 28rpx;
-		color: #1b1b1b;
-	}
-}
-
-.row {
-	border-radius: 15rpx;
-	margin: 0 25rpx;
-	margin-bottom: 25rpx;
-	height: 200rpx;
-	overflow: hidden;
-	background-color: #ffffff;
-	.list-interval {
-		border: 1px dashed $border-color-light;
-		height: 100%;
-		.top,
-		.bottom {
-			border-radius: 100rpx;
-			width: 30rpx;
-			height: 30rpx;
-			position: absolute;
-			background-color: $page-color-base;
-			right: -15rpx;
-		}
-		.top {
-			top: -18rpx;
-		}
-		.bottom {
-			bottom: -18rpx;
-		}
-	}
-	.list-money {
-		height: 100%;
-		image {
-			height: 100%;
-			width: 20rpx;
-		}
-		.list-money-text {
-			width: 220rpx;
-			padding: 0 25rpx;
-			text-align: center;
-			color: $font-color-light;
-			.tit {
-				padding: 15rpx 0rpx;
-				font-size: 55rpx;
-				font-weight: bold;
-				&.action {
-					color: $card-color-action;
-				}
-			}
-			.price {
-				padding-bottom: 25rpx;
-			}
-		}
-	}
-	.row_list_right {
-		flex-grow: 1;
-		padding-left: 25rpx;
-		line-height: 1;
-		.right_time {
-			color: $font-color-light;
-			font-size: $font-sm;
-		}
-		.right_use {
-			margin: 15rpx 0;
-			padding: 10rpx;
-			width: 140rpx;
-			text_align: center;
-			border-radius: 50rpx;
-			color: #fff;
-			font-size: $font-sm - 4rpx;
-			&.action {
-				background-color: $card-color-action;
-			}
-			&.noAction {
-				background-color: $color-gray;
-			}
-		}
-		.right_top {
-			margin: 15rpx 0;
-			font-size: $font-lg;
-			height: 50rpx;
-			color: $font-color-light;
-			.right_name {
-				font-weight: bold;
-			}
-			.right_title {
-				font-weight: bold;
-				&.action {
-					color: $font-color-base;
-				}
-			}
-		}
-	}
-	
-	.iconlocation {
-		font-size: 36rpx;
-		color: $font-color-light;
-	}
-}
-// uni-load-more
-.uni-load-more {
-	display: flex;
-	flex-direction: row;
-	height: 80rpx;
-	align-items: center;
-	justify-content: center;
-}
-</style>

+ 0 - 156
pages/user/favorites.vue

@@ -1,156 +0,0 @@
-<template>
-	<view class="container">
-		<!-- 空白页 -->
-		<empty v-if="favoriteList.length < 1"></empty>
-		<view class="favorites flex" v-for="ls in favoriteList" @click="toproduct(ls.pid)">
-			<view class="favorites_img"><image :src="ls.image"></image></view>
-			<view class="favorites_list">
-				<view class="favorites_name">{{ ls.store_name }}</view>
-				<view class="favorites_peice flex">
-					<view>
-						<text>¥{{ ls.price }}</text>
-					</view>
-					<view class="icon_del" @click.prevent.stop="del(ls.pid)" v-show="delshow">
-						<text class="iconfont icondelete"></text>
-						<text>取消</text>
-					</view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-import { getcollectList, delcollect } from '@/api/user.js';
-import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
-import empty from '@/components/empty';
-export default {
-	components: {
-		uniLoadMore,
-		empty
-	},
-	data() {
-		return {
-			tabCurrentIndex: 0,
-			favoriteList: '',
-			delshow: true
-		};
-	},
-	onLoad() {
-		this.loadData();
-	},
-	methods: {
-		//获取收藏夹列表
-		loadData() {
-			let obj = this;
-			getcollectList({
-				page: '1',
-				limit: '10'
-			})
-				.then(function(e) {
-					obj.favoriteList = e.data;
-					console.log(obj.favoriteList);
-				})
-				.catch(function(e) {
-					console.log(e);
-				});
-		},
-		//跳转商品详情页
-		toproduct(item) {
-			let id = item;
-			uni.navigateTo({
-				url: `/pages/product/product?id=${id}`
-			})
-		},
-		//删除收藏夹商品
-		del(item) {
-			let obj = this;
-			uni.showModal({
-				title: '提示',
-				content: '是否取消收藏该商品',
-				success: e => {
-					if (e.confirm) {
-						delcollect({
-							id: item,
-							category: 'product'
-						})
-							.then(function(e) {
-								uni.showToast({
-									title: '已取消收藏',
-									duration: 1500,
-								});
-								obj.loadData();
-							})
-							.catch(function(e) {
-								console.log(e);
-							});
-					}
-				}
-			});
-		},
-	}
-}
-</script>
-
-<style lang="scss">
-page {
-	height: 100%;
-}
-%flex-center {
-	display: flex;
-	flex-direction: column;
-	justify-content: center;
-	align-items: center;
-}
-%section {
-	display: flex;
-	justify-content: space-around;
-	align-content: center;
-	background: #fff;
-	border-radius: 10rpx;
-}
-.container {
-	height: 100%;
-	background-color: $page-color-base;
-	padding: 15rpx 0rpx;
-	font-size: 28rpx;
-}
-.favorites {
-	width: 90%;
-	background-color: #ffffff;
-	border-radius: 15rpx;
-	margin: 15rpx auto;
-	padding: 25rpx 25rpx;
-	margin-bottom: 25rpx;
-}
-.favorites_img {
-	width: 80px !important;
-	height: 80px;
-}
-.favorites_img image {
-	width: 100%;
-	height: 100%;
-}
-.favorites_list {
-	width: 70%;
-	padding-left: 20rpx;
-}
-.icon_del {
-	color: $font-color-base;
-	z-index: 9999;
-	font-weight: bold;
-}
-.favorites_name {
-	height: 80rpx;
-	overflow: hidden;
-	text-overflow: ellipsis;
-	display: -webkit-box;
-	-webkit-box-orient: vertial;
-	-webkit-line-clamp: 2;
-}
-.favorites_peice {
-	margin-top: 25rpx;
-	color: #db1935;
-	font-weight: bold;
-}
-</style>

+ 0 - 153
pages/user/notice.vue

@@ -1,153 +0,0 @@
-<template>
-	<view>
-		<view class="notice-item">
-			<text class="time">11:30</text>
-			<view class="content">
-				<text class="title">新品上市,全场满199减50</text>
-				<view class="img-wrapper">
-					<image class="pic" src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1556465765776&di=57bb5ff70dc4f67dcdb856e5d123c9e7&imgtype=0&src=http%3A%2F%2Fimg.zcool.cn%2Fcommunity%2F01fd015aa4d95fa801206d96069229.jpg%401280w_1l_2o_100sh.jpg"></image>
-				</view>
-				<text class="introduce">
-					虽然做了一件好事,但很有可能因此招来他人的无端猜测,例如被质疑是否藏有其他利己动机等,乃至谴责。即便如此,还是要做好事。
-				</text>
-				<view class="bot b-t">
-					<text>查看详情</text>
-					<text class="more-icon iconfont iconenter"></text>
-				</view>
-			</view>
-		</view>
-		<view class="notice-item">
-			<text class="time">昨天 12:30</text>
-			<view class="content">
-				<text class="title">新品上市,全场满199减50</text>
-				<view class="img-wrapper">
-					<image class="pic" src="https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=3761064275,227090144&fm=26&gp=0.jpg"></image>
-					<view class="cover">
-						活动结束
-					</view>
-				</view>
-				<view class="bot b-t">
-					<text>查看详情</text>
-					<text class="more-icon iconfont iconenter"></text>
-				</view>
-			</view>
-		</view>
-		<view class="notice-item">
-			<text class="time">2019-07-26 12:30</text>
-			<view class="content">
-				<text class="title">新品上市,全场满199减50</text>
-				<view class="img-wrapper">
-					<image class="pic" src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1556465765776&di=57bb5ff70dc4f67dcdb856e5d123c9e7&imgtype=0&src=http%3A%2F%2Fimg.zcool.cn%2Fcommunity%2F01fd015aa4d95fa801206d96069229.jpg%401280w_1l_2o_100sh.jpg"></image>
-					<view class="cover">
-						活动结束
-					</view>
-				</view>
-				<text class="introduce">新品上市全场2折起,新品上市全场2折起,新品上市全场2折起,新品上市全场2折起,新品上市全场2折起</text>
-				<view class="bot b-t">
-					<text>查看详情</text>
-					<text class="more-icon iconfont iconenter"></text>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-
-			}
-		},
-		methods: {
-
-		}
-	}
-</script>
-
-<style lang='scss'>
-	page {
-		background-color: #f7f7f7;
-		padding-bottom: 30upx;
-	}
-
-	.notice-item {
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-	}
-
-	.time {
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		height: 80upx;
-		padding-top: 10upx;
-		font-size: 26upx;
-		color: #7d7d7d;
-	}
-
-	.content {
-		width: 710upx;
-		padding: 0 24upx;
-		background-color: #fff;
-		border-radius: 4upx;
-	}
-
-	.title {
-		display: flex;
-		align-items: center;
-		height: 90upx;
-		font-size: 32upx;
-		color: #303133;
-	}
-
-	.img-wrapper {
-		width: 100%;
-		height: 260upx;
-		position: relative;
-	}
-
-	.pic {
-		display: block;
-		width: 100%;
-		height: 100%;
-		border-radius: 6upx;
-	}
-
-	.cover {
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		position: absolute;
-		left: 0;
-		top: 0;
-		width: 100%;
-		height: 100%;
-		background-color: rgba(0, 0, 0, .5);
-		font-size: 36upx;
-		color: #fff;
-	}
-
-	.introduce {
-		display: inline-block;
-		padding: 16upx 0;
-		font-size: 28upx;
-		color: #606266;
-		line-height: 38upx;
-	}
-
-	.bot {
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		height: 80upx;
-		font-size: 24upx;
-		color: #707070;
-		position: relative;
-	}
-
-	.more-icon {
-		font-size: 32upx;
-	}
-</style>

+ 303 - 0
pages/user/promotion.vue

@@ -0,0 +1,303 @@
+<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>

+ 343 - 281
pages/user/shareQrCode.vue

@@ -1,282 +1,344 @@
-<template>
-	<view class="content">
-		<!-- <view class="qrimg">
-			<tki-qrcode
-				:cid="cid"
-				ref="qrcode"
-				:val="val"
-				:size="size"
-				:unit="unit"
-				:background="background"
-				:foreground="foreground"
-				:pdground="pdground"
-				:icon="icon"
-				:iconSize="iconSize"
-				:lv="lv"
-				:onval="onval"
-				:loadMake="loadMake"
-				:usingComponents="usingComponents"
-				@result="qrR"
-			/>
-		</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';
-export default {
-	// components: { tkiQrcode },
-	data() {
-		return {
-			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: false, //监听val值变化自动重新生成二维码
-			loadMake: false, //组件初始化完成后自动生成二维码,val需要有值
-			usingComponents: false, //是否使用了自定义组件模式(主要是为了修复非自定义组件模式时 v-if 无法生成二维码的问题)
-			showLoading: false, //是否显示loading
-			loadingText: '二维码生成中', //loading文字
-			src: '', // 二维码生成后的图片地址或base64
-			ratio: 1, //页面比例用于计算
-			ctxSrc: '', //要显示的图片
-			loading: true,//是否载入图片中
-			canHeight: '',//画布高度
-			canWeidth: ''//画布宽度
-		};
-	},
-	onLoad() {
-		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() {
-			// 加载二维码信息
-			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
-			});
-		},
-		// 生成图片
-		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);
-					}
-				});
-			}, 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;
-}
-// #qrShareBox {
-// 	position: absolute;
-// 	left: -9999rpx;
-// 	top: -9999rpx;
-// }
-
-.qrimg {
-	position: absolute;
-	left: -9999rpx;
-	top: -9999rpx;
-}
-.tki-qrcode-canvas {
-	// width: 700rpx;
-	// height: 1245rpx;
-	width: 532rpx;
-	height: 945rpx;
-	margin: 0 auto;
-}
-.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;
-	&.action-share-bottom {
-		background-color: $color-gray;
-	}
-}
+<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"
+				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" />
+		</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 {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	export default {
+		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: '' //画布宽度
+			};
+		},
+		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.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() {
+				// 加载二维码信息
+				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
+				});
+			},
+			// 生成图片
+			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);
+						}
+					});
+				}, 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;
+
+		height: calc(100vh - 44px);
+		position: relative;
+	}
+
+	.bg {
+		position: relative;
+		height: calc(100vh - 44px);
+		width: 100%;
+	}
+
+	// #qrShareBox {
+	// 	position: absolute;
+	// 	left: -9999rpx;
+	// 	top: -9999rpx;
+	// }
+
+	.qrimg {
+		position: absolute;
+		left: -9999rpx;
+		top: -9999rpx;
+	}
+
+	.tki-qrcode-canvas {
+		// width: 700rpx;
+		// height: 1245rpx;
+		width: 532rpx;
+		height: 945rpx;
+		margin: 0 auto;
+	}
+
+	.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;
+
+		&.action-share-bottom {
+			background-color: $color-gray;
+		}
+	}
+
+	.tki-qrcode {
+		width: 300rpx;
+		height: 300rpx;
+		position: fixed;
+		bottom: 10vh;
+		right: 0;
+		left: 0;
+		margin: auto;
+	}
+	.er {
+		position: absolute;
+		top: 82%;
+		left: 40%;
+	}
+	.title {
+		position: absolute;
+		top: 86%;
+		left: 50%;
+		margin-left: -100rpx;
+		width: 200rpx;
+		background: #ff3130;
+		text-align: center;
+		border-radius: 10rpx;
+		color: #FFFFFF;
+	}
 </style>

+ 386 - 0
pages/user/team.vue

@@ -0,0 +1,386 @@
+<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>

+ 140 - 0
pages/user/upgrade.vue

@@ -0,0 +1,140 @@
+<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>

+ 443 - 555
pages/user/user.vue

@@ -1,556 +1,444 @@
-<template>
-	<view class="container">
-		<view class="vheigh"></view>
-		<scroll-view class="content-box" scroll-y="true">
-			<view class="user-section">
-				<view class="bg"></view>
-				<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 || '游客' }}</view>
-							<view class="font-size-sm" v-if="userInfo.spread_uid">邀请码:{{ userInfo.spread_uid }}</view>
-						</view>
-					</view>
-					<view class="config iconfont">
-						<text class="setting iconsetting" @click="navTo('/pages/set/set')"></text>
-						<text class="message iconmessage" @click="navTo('/pages/user/notice')"></text>
-					</view>
-				</view>
-				<!-- 会员卡功能 -->
-				<view class="vip-card-box">
-					<image class="card-bg" src="/static/img/vip-card-bg.png" mode=""></image>
-					<view class="b-btn">我要升级</view>
-					<view class="tit">
-						<text class="iconfont icon-iLinkapp-"></text>
-						升级专享优惠权益
-					</view>
-					<text class="e-m">DCloud Union</text>
-					<text class="e-b">开通会员开发无bug 一测就上线</text>
-				</view>
-			</view>
-
-			<view
-				class="cover-container"
-				:style="[
-					{
-						transform: coverTransform,
-						transition: coverTransition
-					}
-				]"
-				@touchstart="coverTouchstart"
-				@touchmove="coverTouchmove"
-				@touchend="coverTouchend"
-			>
-				<image class="arc" src="/static/img/arc.png"></image>
-
-				<view class="tj-sction">
-					<view class="tj-item" @click="navTo('/pages/money/wallet')">
-						<text class="num">{{ userInfo.now_money || '0.00' }}</text>
-						<text>余额</text>
-					</view>
-					<view class="tj-item" @click="navTo('/pages/user/award')">
-						<text class="num">{{ userInfo.brokerage_price || '0.00' }}</text>
-						<text>佣金</text>
-					</view>
-					<view class="tj-item" @click="navTo('/pages/user/scoreAccumulate')">
-						<text class="num">{{ userInfo.integral || '0.00' }}</text>
-						<text>积分</text>
-					</view>
-				</view>
-				<!-- 订单 -->
-
-				<view class="item-box">
-					<!-- <view class="box-title flex borde-b">
-						<view class="title"><text>我的订单</text></view>
-						<view class="link" @click="navTo('/pages/order/order?state=0')" hover-class="common-hover">
-							<text>全部订单</text>
-							<text class="iconfont iconenter"></text>
-						</view>
-					</view> -->
-					<view class="order-section">
-						<view class="order-item" @click="navTo('/pages/order/order?state=0')" hover-class="common-hover" :hover-stay-time="50">
-							<view class=" icon position-relative">
-								<image class="icon-img" src="/static/icon/i1.png" mode="aspectFit"></image>
-								<view class="corner" v-if="orderInfo.unpaid_count > 0">
-									<text>{{ orderInfo.unpaid_count }}</text>
-								</view>
-							</view>
-							<text>待付款</text>
-						</view>
-						<view class="order-item" @click="navTo('/pages/order/order?state=1')" hover-class="common-hover" :hover-stay-time="50">
-							<view class=" icon position-relative">
-								<image class="icon-img" src="/static/icon/i2.png" mode="aspectFit"></image>
-								<view class="corner" v-if="orderInfo.unshipped_count > 0">
-									<text>{{ orderInfo.unshipped_count }}</text>
-								</view>
-							</view>
-							<text>待发货</text>
-						</view>
-						<view class="order-item" @click="navTo('/pages/order/order?state=2')" hover-class="common-hover" :hover-stay-time="50">
-							<view class="icon position-relative">
-								<image class="icon-img" src="/static/icon/i3.png" mode="aspectFit"></image>
-								<view class="corner" v-if="orderInfo.received_count > 0">
-									<text>{{ orderInfo.received_count }}</text>
-								</view>
-							</view>
-							<text>待收货</text>
-						</view>
-						<view class="order-item" @click="navTo('/pages/order/order?state=3')" hover-class="common-hover" :hover-stay-time="50">
-							<view class="icon position-relative">
-								<image class="icon-img" src="/static/icon/i4.png" mode="aspectFit"></image>
-								<!-- <view class="corner" v-if="orderInfo.complete_count > 0">
-									<text>{{ orderInfo.complete_count }}</text>
-								</view> -->
-							</view>
-							<text>已完成</text>
-						</view>
-					</view>
-				</view>
-				<view class="item-box">
-					<!-- <view class="box-title flex borde-b">
-						<view class="title"><text>我的资产</text></view>
-					</view> -->
-					<view class="order-section">
-						<view class="order-item" @click="navTo('/pages/money/wallet')" hover-class="common-hover" :hover-stay-time="50">
-							<view class="icon"><image class="icon-img" src="/static/icon/u1.png" mode="aspectFit"></image></view>
-							<text>我的钱包</text>
-						</view>
-						<view class="order-item" @click="navTo('/pages/user/award')" hover-class="common-hover" :hover-stay-time="50">
-							<view class="icon"><image class="icon-img" src="/static/icon/u2.png" mode="aspectFit"></image></view>
-							<text>奖励明细</text>
-						</view>
-						<view class="order-item" @click="navTo('/pages/user/award')" hover-class="common-hover" :hover-stay-time="50">
-							<view class="icon"><image class="icon-img" src="/static/icon/u3.png" mode="aspectFit"></image></view>
-							<text>积分明细</text>
-						</view>
-						<view class="order-item" @click="navTo('/pages/order/order?state=4')" hover-class="common-hover" :hover-stay-time="50">
-							<view class="icon"><image class="icon-img" src="/static/icon/u4.png" mode="aspectFit"></image></view>
-							<text>通用币</text>
-						</view>
-					</view>
-				</view>
-
-				<!-- 浏览历史 -->
-				<view class="history-section icon">
-					<view class="sec-header">
-						<text class="iconfont iconfavor"></text>
-						<text>浏览历史</text>
-					</view>
-					<scroll-view scroll-x class="h-list">
-						<image
-							class="h-list-image"
-							@click="navTo('/pages/product/product')"
-							src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1553105186633&di=c121a29beece4e14269948d990f9e720&imgtype=0&src=http%3A%2F%2Fimg004.hc360.cn%2Fm8%2FM04%2FDE%2FDE%2FwKhQplZ-QteEBvsbAAAAADUkobU751.jpg"
-							mode="aspectFill"
-						></image>
-					</scroll-view>
-					<uni-list>
-						<uni-list-item title="我的钱包" @click="navTo('/pages/money/wallet')" thumb="/static/icon/img11.png"></uni-list-item>
-						<uni-list-item title="我的卡卷" @click="navTo('/pages/user/coupon')" thumb="/static/icon/img12.png"></uni-list-item>
-						<uni-list-item title="我的收藏" @click="navTo('/pages/user/favorites')" thumb="/static/icon/img02.png"></uni-list-item>
-						<uni-list-item title="商户入驻" @click="navTo('/pages/set/address')" thumb="/static/icon/img05.png"></uni-list-item>
-						<uni-list-item title="邀请好友" @click="navTo('/pages/user/shareQrCode')" thumb="/static/icon/img10.png"></uni-list-item>
-						<uni-list-item title="关于我们" @click="navTo('/pages/shareQrCode/index')" thumb="/static/icon/img09.png"></uni-list-item>
-					</uni-list>
-				</view>
-			</view>
-		</scroll-view>
-	</view>
-</template>
-<script>
-import { mapState, mapMutations } from 'vuex';
-import uniList from '@/components/uni-list/uni-list.vue';
-import uniListItem from '@/components/uni-list-item/uni-list-item.vue';
-import { orderData, userinfo } from '@/api/user.js';
-import { saveUrl, interceptor } from '@/utils/loginUtils.js';
-let startY = 0,
-	moveY = 0,
-	pageAtTop = true;
-export default {
-	components: {
-		uniList,
-		uniListItem
-	},
-	data() {
-		return {
-			coverTransform: 'translateY(0px)',
-			coverTransition: '0s',
-			moving: false,
-			userDowm: 0, //卡片升级专属高度
-			userMaxDowm: 0 //卡片最高高度
-		};
-	},
-	onShow() {
-		// 判断是否已经登录
-		if (this.hasLogin) {
-			this.loadBaseData();
-		}
-	},
-	onReady() {
-		// 初始化获取页面宽度
-		uni.createSelectorQuery()
-			.select('.container')
-			.fields(
-				{
-					size: true
-				},
-				data => {
-					// 计算最多下拉的高度
-					this.userDowm = Math.floor((data.width / 750) * 185);
-					// 计算最大触发修改高度事件
-					this.userMaxDowm = Math.floor((data.width / 750) * 250);
-				}
-			)
-			.exec();
-	},
-	// #ifndef MP
-	// onNavigationBarButtonTap(e) {
-	// 	const index = e.index;
-	// 	if (index === 0) {
-	// 		this.navTo('/pages/set/set');
-	// 	} else if (index === 1) {
-	// 		// #ifdef APP-PLUS
-	// 		const pages = getCurrentPages();
-	// 		const page = pages[pages.length - 1];
-	// 		const currentWebview = page.$getAppWebview();
-	// 		currentWebview.hideTitleNViewButtonRedDot({
-	// 			index
-	// 		});
-	// 		// #endif
-	// 		uni.navigateTo({
-	// 			url: '/pages/user/notice'
-	// 		});
-	// 	}
-	// },
-	// #endif
-	computed: {
-		...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
-	},
-	methods: {
-		...mapMutations('user', ['setUserInfo', 'setOrderInfo']),
-		// 加载初始数据
-		loadBaseData() {
-			userinfo({})
-				.then(({ 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);
-				});
-		},
-		/**
-		 * 统一跳转接口,拦截未登录路由
-		 * navigator标签现在默认没有转场动画,所以用view
-		 */
-		navTo(url) {
-			if (!this.hasLogin) {
-				// 保存地址
-				saveUrl();
-				// 登录拦截
-				interceptor();
-			} else {
-				uni.navigateTo({
-					url
-				});
-			}
-		},
-
-		/**
-		 *  会员卡下拉和回弹
-		 *  1.关闭bounce避免ios端下拉冲突
-		 *  2.由于touchmove事件的缺陷(以前做小程序就遇到,比如20跳到40,h5反而好很多),下拉的时候会有掉帧的感觉
-		 *    transition设置0.1秒延迟,让css来过渡这段空窗期
-		 *  3.回弹效果可修改曲线值来调整效果,推荐一个好用的bezier生成工具 http://cubic-bezier.com/
-		 */
-		coverTouchstart(e) {
-			// console.log(e);
-			if (pageAtTop === false) {
-				return;
-			}
-
-			this.coverTransition = 'transform .1s linear';
-			startY = e.touches[0].clientY;
-		},
-		coverTouchmove(e) {
-			// console.log(e);
-			moveY = e.touches[0].clientY;
-			let moveDistance = moveY - startY;
-			let maxDowm = this.userMaxDowm;
-			let Dowm = this.userDowm;
-			if (moveDistance < 0) {
-				this.moving = false;
-				return;
-			}
-			this.moving = true;
-			if (moveDistance >= Dowm && moveDistance < maxDowm) {
-				moveDistance = Dowm;
-			}
-
-			if (moveDistance > 0 && moveDistance <= Dowm) {
-				this.coverTransform = `translateY(${moveDistance}px)`;
-			}
-		},
-		coverTouchend() {
-			if (this.moving === false) {
-				return;
-			}
-			this.moving = false;
-			this.coverTransition = 'transform 0.3s cubic-bezier(.21,1.93,.53,.64)';
-			this.coverTransform = 'translateY(0px)';
-		}
-	}
-};
-</script>
-<style lang="scss">
-page {
-	height: 100%;
-}
-%flex-center {
-	display: flex;
-	flex-direction: column;
-	justify-content: center;
-	align-items: center;
-}
-%section {
-	display: flex;
-	justify-content: space-around;
-	align-content: center;
-	background: #fff;
-	border-radius: 10rpx;
-}
-.container {
-	height: 100%;
-	background-color: $page-color-base;
-}
-.content-box {
-	height: 100%;
-}
-.vheigh {
-	height: var(--status-bar-height);
-	background-color: $base-color;
-}
-.user-section {
-	height: 435rpx;
-	padding: 15rpx 30rpx 0;
-	position: relative;
-	.bg {
-		position: absolute;
-		left: 0;
-		top: 0;
-		width: 100%;
-		height: 100%;
-		background-color: $base-color;
-	}
-}
-.user-info-box {
-	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%;
-			}
-		}
-		.info-box {
-			margin-left: 20rpx;
-			line-height: 1.5;
-			.username {
-				font-size: $font-lg + 6rpx;
-				height: 100%;
-			}
-		}
-	}
-	.config {
-		font-size: 48rpx;
-		height: 130rpx;
-		.setting {
-			margin-right: 51rpx;
-		}
-	}
-}
-
-.vip-card-box {
-	display: flex;
-	flex-direction: column;
-	color: #f7d680;
-	height: 240rpx;
-	background: linear-gradient(left, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.8));
-	border-radius: 16rpx 16rpx 0 0;
-	overflow: hidden;
-	position: relative;
-	padding: 20rpx 24rpx;
-	.card-bg {
-		position: absolute;
-		top: 20rpx;
-		right: 0;
-		width: 380rpx;
-		height: 260rpx;
-	}
-	.b-btn {
-		position: absolute;
-		right: 20rpx;
-		top: 16rpx;
-		width: 132rpx;
-		height: 40rpx;
-		text-align: center;
-		line-height: 40rpx;
-		font-size: 22rpx;
-		color: #36343c;
-		border-radius: 20px;
-		background: linear-gradient(left, #f9e6af, #ffd465);
-		z-index: 1;
-	}
-	.tit {
-		font-size: $font-base + 2rpx;
-		color: #f7d680;
-		margin-bottom: 28rpx;
-		.iconfont {
-			color: #f6e5a3;
-			margin-right: 16rpx;
-		}
-	}
-	.e-b {
-		font-size: $font-sm;
-		color: #d8cba9;
-		margin-top: 10rpx;
-	}
-}
-.cover-container {
-	background: $page-color-base;
-	margin-top: -150rpx;
-	padding: 0 30rpx;
-	position: relative;
-	background: #f5f5f5;
-	padding-bottom: 20rpx;
-	.arc {
-		position: absolute;
-		left: 0;
-		top: -34rpx;
-		width: 100%;
-		height: 36rpx;
-	}
-}
-.tj-sction {
-	@extend %section;
-	.tj-item {
-		@extend %flex-center;
-		flex-direction: column;
-		height: 140rpx;
-		font-size: $font-sm;
-		color: #75787d;
-	}
-	.num {
-		font-size: $font-lg;
-		color: $font-color-dark;
-		margin-bottom: 8rpx;
-	}
-}
-
-.item-box {
-	border-radius: 10rpx;
-	background-color: white;
-	margin-top: 20rpx;
-	.box-title {
-		line-height: 1;
-		padding: 30rpx;
-		.title {
-			font-size: $font-lg;
-			font-weight: bold;
-		}
-		.link {
-			font-size: $font-base - 2rpx;
-			color: $font-color-light;
-		}
-	}
-	.order-section {
-		@extend %section;
-		padding: 28rpx 0;
-		.order-item {
-			@extend %flex-center;
-			width: 120rpx;
-			height: 120rpx;
-			border-radius: 10rpx;
-			font-size: $font-sm;
-			color: $font-color-dark;
-		}
-		.iconfont {
-			font-size: 48rpx;
-			margin-bottom: 18rpx;
-			color: #fa436a;
-		}
-		.icon-shouhoutuikuan {
-			font-size: 44rpx;
-		}
-		.icon {
-			height: 50rpx;
-			width: 48rpx;
-			margin-bottom: 18rpx;
-			background-size: 100%;
-			background-repeat: no-repeat;
-			background-position: center;
-			.icon-img {
-				width: 100%;
-				height: 100%;
-			}
-		}
-	}
-}
-
-.history-section {
-	// padding: 30rpx 0 0;
-	margin-top: 20rpx;
-	background: #fff;
-	border-radius: 10rpx;
-	.sec-header {
-		display: flex;
-		align-items: center;
-		font-size: $font-base;
-		color: $font-color-dark;
-		line-height: 40rpx;
-		margin-left: 30rpx;
-		padding-top: 30rpx;
-		.iconfont {
-			font-size: 44rpx;
-			color: $color-red;
-			margin-right: 16rpx;
-			line-height: 40rpx;
-		}
-	}
-	.h-list {
-		white-space: nowrap;
-		padding: 30rpx 30rpx 0;
-		.h-list-image {
-			display: inline-block;
-			width: 160rpx;
-			height: 160rpx;
-			margin-right: 20rpx;
-			border-radius: 10rpx;
-		}
-	}
-}
+<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>
+				<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>
+			</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>
+			<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="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>
+		</view>
+		<uni-popup ref="popup" type="center">
+			<view class="popup-box">
+				<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>
+						<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="comfirm-box">
+						<view class="comfirm" @click="tocall('3')">{{ $t('foo.fzwx') }}3</view>
+						<view class="cancel" @click="cancel">{{ $t('foo.qx') }}</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);
+				}
+			});
+		}
+	},
+	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
+			});
+		},
+		navTo(url) {
+			console.log(url);
+			if (!this.hasLogin) {
+				// 保存地址
+				saveUrl();
+				// 登录拦截
+				interceptor();
+			} else {
+				uni.navigateTo({
+					url
+				});
+			}
+		},
+		open() {
+			console.log('点击出现弹窗');
+			this.$refs.popup.open();
+		},
+		// 客服弹窗 - 取消
+		cancel() {
+			this.$refs.popup.close();
+		},
+		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 => {
+					uni.showToast({
+						title: '复制成功!'
+					});
+				},
+				fail(e) {
+					uni.showToast({
+						title: '复制失败',
+						icon: false
+					});
+					console.log(e);
+				}
+			});
+			// #endif
+		}
+	}
+};
+</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%;
+			}
+		}
+		.info-box {
+			margin-left: 20rpx;
+			line-height: 1.5;
+			.username {
+				font-size: $font-lg + 6rpx;
+				height: 100%;
+			}
+		}
+		.vip {
+			margin-left: 20rpx;
+			width: 122rpx;
+			height: 36rpx;
+			image {
+				width: 100%;
+				height: 100%;
+			}
+		}
+	}
+	.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;
+
+	.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;
+		}
+
+		.next-icon {
+			width: 16rpx;
+			height: 25rpx;
+		}
+	}
+
+	.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;
+		}
+	}
+
+	.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;
+			flex-direction: column;
+			.title {
+			}
+			image {
+				margin-top: 48rpx;
+				width: 172rpx;
+				height: 160rpx;
+			}
+		}
+
+		.nocancel {
+			font-size: 32rpx;
+			color: #333333;
+			margin-top: 14rpx;
+		}
+
+		.comfirm-box {
+			margin-top: 52rpx;
+			display: flex;
+			// margin-bottom: 32rpx;
+
+			// 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;
+
+				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>

BIN
static/icon/1.png


BIN
static/icon/2.png


BIN
static/icon/3.png


BIN
static/icon/4.png


BIN
static/icon/5.png


BIN
static/icon/6.png


Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio