Browse Source

代码更新

xielongfei 5 năm trước cách đây
mục cha
commit
2701613fa2
100 tập tin đã thay đổi với 21198 bổ sung1039 xóa
  1. 3851 0
      common/public.css
  2. 1450 0
      common/uni.css
  3. 262 0
      components/s-pull-scroll/README.md
  4. BIN
      components/s-pull-scroll/back-top.png
  5. 821 0
      components/s-pull-scroll/index.vue
  6. 30 0
      components/uLi-load-more/readme.md
  7. 88 0
      components/uLi-load-more/uLi-load-more.vue
  8. 245 0
      components/uni-swipe-action-item/bindingx.js
  9. 209 0
      components/uni-swipe-action-item/index.wxs
  10. 160 0
      components/uni-swipe-action-item/mpalipay.js
  11. 158 0
      components/uni-swipe-action-item/mpother.js
  12. 95 0
      components/uni-swipe-action-item/mpwxs.js
  13. 269 0
      components/uni-swipe-action-item/uni-swipe-action-item.vue
  14. 58 0
      components/uni-swipe-action/uni-swipe-action.vue
  15. 25 2
      pages.json
  16. 2 0
      pages/authentication/selectHouse.vue
  17. 215 107
      pages/circle/circles.vue
  18. 44 16
      pages/circle/publish.vue
  19. 28 27
      pages/complain/index.vue
  20. 49 9
      pages/complain/wantCompalin.vue
  21. 75 275
      pages/family/family.vue
  22. 188 0
      pages/home/home.vue
  23. 8 5
      pages/index/changeHouse.vue
  24. 34 14
      pages/index/index.vue
  25. 4 3
      pages/login/authorization.vue
  26. 2 4
      pages/login/login.vue
  27. 102 63
      pages/mine/addCar.vue
  28. 104 80
      pages/mine/addFamily.vue
  29. 109 0
      pages/mine/carList.vue
  30. 78 39
      pages/mine/face.vue
  31. 168 61
      pages/mine/family.vue
  32. 42 7
      pages/mine/mine.vue
  33. 205 0
      pages/mine/myBike.vue
  34. 70 51
      pages/mine/myCar.vue
  35. 104 76
      pages/mine/myHouse.vue
  36. 133 70
      pages/mine/myInfo.vue
  37. 11 6
      pages/onlineRpair/index.vue
  38. 46 0
      pages/onlineRpair/repairSuccess.vue
  39. 50 29
      pages/onlineRpair/wantRepair.vue
  40. 21 65
      pages/openDoor/openDoorList.vue
  41. 22 0
      pages/user/access/access.vue
  42. 290 0
      pages/user/account/account.vue
  43. 109 0
      pages/user/account/nickNameReset.vue
  44. 224 0
      pages/user/address/address.vue
  45. 221 0
      pages/user/addressService/addressService.vue
  46. 314 0
      pages/user/agent/applyfor.vue
  47. 1025 0
      pages/user/agent/index.vue
  48. 207 0
      pages/user/agent/product.vue
  49. 126 0
      pages/user/beginCard/beginCard.vue
  50. 822 0
      pages/user/cart/cart.vue
  51. 283 0
      pages/user/fav/fav.vue
  52. 209 0
      pages/user/income/income.vue
  53. 106 0
      pages/user/income/product.vue
  54. 314 0
      pages/user/login/login.vue
  55. 118 0
      pages/user/loginPassword/loginPassword.vue
  56. 105 0
      pages/user/message/index.vue
  57. 126 0
      pages/user/message/messageList.vue
  58. 122 0
      pages/user/message/messageView.vue
  59. 927 0
      pages/user/myAgency/index.vue
  60. 227 0
      pages/user/myPoint/bankList.vue
  61. 248 0
      pages/user/myPoint/bindBank.vue
  62. 249 0
      pages/user/myPoint/cashOut.vue
  63. 217 0
      pages/user/myPoint/income.vue
  64. 56 0
      pages/user/myPoint/myPoint.vue
  65. 565 0
      pages/user/myuser/myfit.vue
  66. 142 0
      pages/user/myuser/mymember.vue
  67. 115 0
      pages/user/myuser/myuser.vue
  68. 508 0
      pages/user/order/order.vue
  69. 98 0
      pages/user/orderEms/orderEms.vue
  70. 462 0
      pages/user/orderInfo/orderInfo.vue
  71. 338 0
      pages/user/orderList/orderList.vue
  72. 151 0
      pages/user/orderPay/orderPay.vue
  73. 236 0
      pages/user/orderRefund/orderRefund.vue
  74. 183 0
      pages/user/orderSuccess/orderSuccess.vue
  75. 303 0
      pages/user/pay/pay.vue
  76. 578 0
      pages/user/profit/index.vue
  77. 201 0
      pages/user/register/register.1.vue
  78. 266 0
      pages/user/register/register.vue
  79. 103 0
      pages/user/spreadCost/spreadCost.vue
  80. 124 0
      pages/user/spreadOrder/mySpreadOrder.vue
  81. 50 0
      pages/user/spreadOrder/mymember.vue
  82. 391 0
      pages/user/user/user.vue
  83. 50 28
      pages/visitor/historyList.vue
  84. BIN
      static/bike@2x.png
  85. BIN
      static/carBg.png
  86. BIN
      static/ceng.png
  87. BIN
      static/dzed.png
  88. BIN
      static/homeNum.png
  89. BIN
      static/old.png
  90. BIN
      static/qingShao.png
  91. BIN
      static/ri.png
  92. BIN
      static/shaonian.png
  93. BIN
      static/talk.png
  94. BIN
      static/youer.png
  95. BIN
      static/young.png
  96. BIN
      static/zhongnian.png
  97. 13 0
      store/index.js
  98. 36 0
      utils/prototype.js
  99. 1 2
      utils/request.js
  100. 4 0
      utils/weapp.qrcode.min.js

+ 3851 - 0
common/public.css

@@ -0,0 +1,3851 @@
+.loadbox {
+	/* background-color: #F4F5F6; */
+	position: absolute;
+	width: 100%;
+	height: 100%;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	background: url(https://www.jinzun99.com/static/home/load.gif) no-repeat center center;
+}
+
+.loadbox.loaded,
+.load.loaded {
+	opacity: 0;
+}
+
+.header {
+	border-bottom: 1px solid #e2e2e2;
+	padding: 12upx 3%;
+	justify-content: center;
+	align-items: center;
+	color: #666;
+	width: 94%;
+	background-color: #FFFFFF;
+	position: fixed;
+	top: 0;
+	left: 0;
+	height: 64upx;
+	line-height: 64upx;
+	z-index: 888;
+}
+
+.fontWt {
+	font-weight: 600;
+}
+
+button:after {
+	border: 0;
+}
+
+.cartpriceBg {
+	color: #ed0000;
+}
+
+.addAdress {
+	display: flex;
+	flex: 1;
+	align-items: center;
+	justify-content: flex-start;
+}
+
+.space-between {
+	justify-content: space-between;
+}
+
+.justify-content {
+	justify-content: space-around;
+}
+
+.price-red {
+	color: #e64340;
+}
+
+.fontWnormal {
+	font-weight: normal;
+}
+
+.justify-content {
+	justify-content: space-around;
+}
+
+.align-items {
+	align-items: center;
+}
+
+.flex-end {
+	justify-content: flex-end;
+}
+
+rich-text .img {
+	display: block;
+}
+
+.hide {
+	display: none;
+}
+
+.footer {
+	border-top: 1px solid #e2e2e2;
+	padding: 12upx 3%;
+	justify-content: center;
+	align-items: center;
+	color: #666;
+	width: 94%;
+	background-color: #FFFFFF;
+	position: fixed;
+	z-index: 888;
+	bottom: 0;
+	left: 0;
+	height: 64upx;
+	line-height: 64upx;
+}
+
+.btn {
+	display: flex;
+	width: 160upx;
+	height: 64upx;
+	margin: 0 8upx;
+	color: #fff;
+	line-height: 64upx;
+	justify-content: center;
+	align-items: center;
+	background: #dd0101;
+	border-radius: 16px;
+	padding: 0;
+	font-size: 28upx;
+}
+
+.space {
+	height: 88upx;
+}
+
+.btn-hollow {
+	display: flex;
+	width: 148upx;
+	height: 64upx;
+	line-height: 64upx;
+	margin: 0 8upx;
+	/* border: 1px solid #cdcdcd; */
+	background: #cdcdcd;
+	border-radius: 6upx;
+	margin: 0 8upx;
+	justify-content: center;
+	align-items: center;
+	color: #FFFFFF;
+}
+
+
+.justify-content-center {
+	justify-content: center;
+}
+
+.justify-align-center {
+	justify-content: center;
+	align-items: center;
+}
+
+.justify-flex-end {
+	justify-content: flex-end;
+}
+
+.color-f40 {
+	color: #FF4400;
+}
+
+.color-555 {
+	color: #505050;
+}
+
+.font-size-24 {
+	font-size: 24upx;
+}
+
+.item-padding {
+	padding: 0 16upx;
+}
+
+swiper {
+	width: 750upx;
+	height: 375upx;
+	margin-bottom: 4upx;
+}
+
+.swiper .swiper-item image {
+	width: 750upx;
+	height: 375upx;
+}
+
+.home {
+	position: relative;
+}
+
+.home .swiper swiper {
+	height: 820upx;
+	margin-bottom: 4upx;
+}
+
+.home .swiper .swiper-item image {
+	height: 820upx;
+}
+
+.home .home-menu {
+	margin-bottom: 4upx;
+}
+
+
+
+.home .article {
+	height: 360upx;
+	overflow: hidden;
+	margin-bottom: 4upx;
+	position: relative;
+}
+
+.home .article-title {
+	width: 96%;
+	position: absolute;
+	bottom: 0;
+	left: 0;
+	height: 64upx;
+	line-height: 64upx;
+	background-color: rgba(0, 0, 0, 0.5);
+	color: #ffffff;
+	padding: 0 2%;
+}
+
+.home .article image {
+	width: 750upx;
+	height: 360upx;
+}
+
+
+.main {
+	position: relative;
+}
+
+.main .categorys {
+	background-color: #FFFFFF;
+	padding: 24upx;
+}
+
+.main .categorys .categorys-ico {
+	position: relative;
+	height: 120upx;
+}
+
+.main .categorys image {
+	width: 88upx;
+	height: 88upx;
+	margin-top: 16upx;
+	margin-bottom: 16upx;
+}
+
+.main .note {
+	margin: 4upx 0;
+	padding: 0 24upx;
+	background-color: #FFFFFF;
+	line-height: 64upx;
+	height: 64upx;
+	overflow: hidden;
+}
+
+.main .note .note-title {
+	width: 148upx;
+}
+
+.main .note image {
+	width: 32upx;
+	height: 32upx;
+}
+
+.main .note swiper,
+.main .note .swiper {
+	width: 540upx;
+	height: 64upx;
+	line-height: 64upx;
+	overflow: hidden;
+	background-color: #FFFFFF;
+	color: #bababa;
+}
+
+.main .list-banner image {
+	width: 750upx;
+	height: 320upx;
+}
+
+.main .list-title {
+	width: 702upx;
+	height: 64upx;
+	line-height: 64upx;
+	padding: 0 24upx;
+	background-color: #FFFFFF;
+	position: relative;
+}
+
+.main .list-title .list-title-more {
+	position: absolute;
+	right: 24upx;
+	top: 0;
+}
+
+.main .uni-product {
+	width: 48%;
+	padding: 1%;
+	display: flex;
+	flex-direction: column;
+	height: 502upx;
+}
+
+.main .image-view {
+	width: 100%;
+	height: 100%;
+	margin: 0;
+	line-height: 0;
+	background-color: #FFFFFF;
+}
+
+.main .uni-product-image {
+	width: 360upx;
+	height: 360upx;
+}
+
+.list .salePrice {
+	color: #e80080;
+	font-size: 32upx;
+}
+
+.list .marketPrice {
+	color: #888888;
+	text-decoration: line-through;
+}
+
+.login {
+	background-color: #FFFFFF;
+	height: 100%;
+}
+
+.login .login-top image {
+	width: 750upx;
+	height: 370upx;
+}
+
+.login .login-bottom {
+	align-items: flex-end;
+	height: 600upx;
+}
+
+.login .login-bottom image {
+	width: 750upx;
+	height: 500upx;
+}
+
+.login .login-form .center {
+	width: 680upx;
+	height: 440upx;
+}
+
+.login .login-form .uni-input {
+	background: #f2f2f2;
+}
+
+.login .form1 {
+	padding: 16upx 0;
+	border-radius: 10upx;
+	background-color: #f2f2f2;
+	height: 180upx;
+}
+
+.login .form2 {
+	height: 280upx;
+}
+
+.login .login-btn {
+	height: 60upx;
+	margin-top: 24upx;
+}
+
+.login .login-btn {
+	width: 680upx;
+	height: 60upx;
+	border-radius: 24upx;
+	overflow: hidden;
+	color: #FFFFFF;
+	margin-top: 24upx;
+}
+
+.login .login-login {
+	background-color: #0072ff;
+}
+
+.login .login-credit {
+	background-color: #ff7d00;
+}
+
+.login .form1 .uni-form-item {
+	padding: 0 2%;
+	width: 96%;
+	justify-content: center;
+	align-items: center;
+}
+
+.login .form1 .uni-form-line {
+	background-color: #e2e2e2;
+	height: 2upx;
+}
+
+.login .form1 .uni-form-item .ico {
+	width: 42upx;
+	justify-content: center;
+	align-items: center;
+}
+
+.login .form1 .uni-form-item .ico image {
+	width: 42upx;
+	height: 42upx;
+}
+
+.login .form1 .uni-form-item .uni-input {
+	margin-left: 20upx;
+	padding: 0;
+}
+
+.login .form1 .uni-form-item .send {
+	flex-wrap: nowrap;
+	padding: 0;
+}
+
+/*会员中心*/
+.user .user-header {
+	height: 370upx;
+	position: relative;
+	width: 750upx;
+}
+
+.user .user-header .user-header-bg {
+	width: 750upx;
+	height: 370upx;
+
+}
+
+.user .user-header .user-header-ico {
+	position: absolute;
+	width: 100%;
+	height: 100%;
+	left: 0;
+	top: 0;
+}
+
+.user .user-header .uni-flex-item1 {
+	background-color: #FFFFFF;
+	overflow: hidden;
+	padding: 16upx;
+	border-radius: 50%;
+}
+
+.user .user-header .user-header-ico image {
+	width: 140upx;
+	height: 140upx;
+	border-radius: 50%;
+	overflow: hidden;
+}
+
+.user .user-header .user-header-name {
+	color: #ffffff;
+}
+
+.user .user-order {
+	background-color: #FFFFFF;
+}
+
+.user .user-extra {
+	width: 100%;
+	height: 110upx;
+	background: #31c996;
+	color: #FFFFFF;
+}
+
+.user .noBuyUser {
+	margin-right: 30upx;
+}
+
+.user .user-order .order-title {
+	height: 64upx;
+	line-height: 64upx;
+	padding: 0 30upx;
+	border-bottom: 1px solid #e2e2e2;
+}
+
+.user .user-order .more {
+	justify-content: flex-end;
+	align-items: center;
+	color: #e2e2e2;
+}
+
+.user .user-order .status {
+	border-bottom: 1px solid #e2e2e2;
+}
+
+.user .user-order .status navigator {
+	padding: 48upx 0;
+	position: relative;
+}
+
+.user .user-order .status navigator:after {
+	content: "";
+	position: absolute;
+	border-right: 1px solid #E2E2E2;
+	right: 0;
+	top: 0;
+	height: 100%;
+	width: 0;
+}
+
+.user .user-order .status .text {
+	justify-content: center;
+	align-items: center;
+}
+
+.user .user-order .status .ico {
+	justify-content: center;
+	align-items: center;
+}
+
+.user .user-order .status .ico image {
+	width: 60upx;
+	height: 60upx;
+}
+
+/* 我的会员 */
+.myuser .content {
+	background: #F4F5F6;
+}
+
+.myuser .content .uni-product {
+	width: 90%;
+	margin: 2%;
+	flex-direction: row;
+	background: #FFFFFF;
+	border-radius: 35upx;
+}
+
+.myuser .content .uni-product .image-view {
+	width: 160upx;
+	height: 160upx;
+	margin-left: 25upx;
+	border-radius: 10upx;
+}
+
+.myuser .content .uni-product .uni-product-wrap {
+	flex: 1;
+	margin-left: 57upx;
+	align-content: space-around;
+	justify-content: center;
+}
+
+.myuser .content .uni-product .image-view .uni-product-image {
+	width: 160upx;
+	height: 160upx;
+	border-radius: 10upx;
+}
+
+
+
+/*购物车*/
+.cart .cart-empty {
+	position: absolute;
+	width: 100%;
+	height: 100%;
+	justify-content: center;
+	align-items: center;
+}
+
+.cart .cart-empty view {
+	width: 270upx;
+}
+
+.cart .cart-empty view image {
+	width: 270upx;
+	height: 270upx;
+
+}
+
+.cart .item-shop {
+	border-radius: 24upx;
+	background-color: #ffffff;
+	margin: 30upx;
+	padding: 16upx;
+}
+
+.cart .item-shop-name {
+	align-items: center;
+	height: 60upx;
+	lighting-color: 60upx;
+	margin-bottom: 30upx;
+}
+
+.cart .item-shop-name .dp {
+	margin-left: 16upx;
+}
+
+.cart .item-shop-name .yuan {
+	margin-top: 6upx;
+}
+
+.cart .cart-list {
+	margin: 80upx 0;
+}
+
+.cart .cart-list .cart-item {
+	/* height: 150upx; */
+	margin: 10upx 0;
+}
+
+.cart .cart-list .order-address .order-address-box {
+	margin-left: 32upx;
+}
+
+.cart .cart-list .order-address .order-address-box .uni-ellipsis {
+	width: 660upx;
+	white-space: normal;
+	line-height: 1rem;
+	height: 90upx;
+}
+
+.cart .cart-list .cart-item .uni-flex-item3 {
+	color: #ed7573;
+}
+
+.cart .cart-list .cart-item .uni-flex-item2 .title {
+	/* font-weight: 550; */
+}
+
+.cart .cart-list .cart-item .uni-flex-item2 input {
+	color: #d81e06;
+	width: 48upx;
+	height: 44upx;
+	min-height: 44upx;
+}
+
+.cart .cart-list .item-img {
+	justify-content: center;
+	align-items: center;
+	padding: 0;
+}
+
+.cart .cart-list .item-img image {
+	width: 138upx;
+	height: 138upx;
+}
+
+
+.cart .item-sel {
+	width: 60upx;
+	justify-content: center;
+	align-items: center;
+}
+
+.cart .item-sel view {
+	border: 1px solid #ccc;
+	width: 40upx;
+	height: 40upx;
+	display: inline-block;
+	border-radius: 50%;
+	position: relative;
+}
+
+
+.cart .cart-list .yuan {
+	border: 1px solid #ccc;
+	width: 40upx;
+	height: 40upx;
+	display: inline-block;
+	border-radius: 50%;
+	position: relative;
+}
+
+
+.cart .cart-list .cart-attr {
+	font-size: 24upx;
+	color: #505050;
+	font-weight: normal;
+	text-align: left;	
+	margin: 4upx 0;
+}
+
+
+.cart .bg {
+	background: #ed0000
+}
+
+.cart .itemAll {
+	margin-left: 15upx;
+}
+
+.cart .item-t {
+	line-height: 40upx;
+	height: 80upx;
+	overflow: hidden;
+}
+
+.cart .item-sl {
+	width: 60upx;
+	justify-content: center;
+	align-items: center;
+	margin-right: 20upx;
+}
+
+.cart .numbers {
+	flex: 1;
+	height: 44upx;
+	border: 1px solid #e2e2e2;
+}
+
+.cart .numbers .number {
+	width: 46upx;
+	height: 46upx;
+	line-height: 46upx;
+	justify-content: center;
+	align-items: center;
+	color: #e2e2e2;
+	border-radius: 50%;
+}
+
+.cart .numbers input {
+	border-left: 1px solid #e2e2e2;
+	border-right: 1px solid #e2e2e2;
+	justify-content: center;
+	align-items: center;
+	text-align: center;
+}
+
+.cart .header .manage {
+	justify-content: flex-end;
+	color: #f40;
+}
+
+.order {
+	margin-bottom: 80upx;
+}
+
+.order .price-red {
+	color: #e64340;
+	font-weight: normal;
+}
+
+.order .cart-list {
+	margin: 0 0 16upx 0;
+	font-weight: 700;
+}
+
+.order .order-address {
+	background-color: #FFFFFF;
+}
+
+.order .order-address .order-address-box {
+	padding-bottom: 10upx;
+	height: 120upx;
+}
+
+.order .order-address .uni-navigate-right {
+	width: 80upx;
+	padding: 0;
+}
+
+.order .order-address-ico {
+	justify-content: center;
+	align-items: center;
+	width: 80upx;
+}
+
+.order .order-address-box01 .lf,
+.rt {
+	line-height: 1.4em;
+	padding-bottom: 10upx;
+}
+
+.order .order-address-box01 .lf {
+	width: 50%;
+	display: inline-block;
+	margin-top: 10upx;
+}
+
+.order .order-address-box01 .rt {
+	width: 50%;
+	display: inline-block;
+	text-align: right;
+}
+
+.order .order-address-box01 {
+	display: flex;
+	padding-bottom: 0;
+}
+
+.order .order-address-box01 .order-address-ico {
+	width: 100upx;
+}
+
+.order .order-address-box01 .order-address-ico image {
+	width: 32upx;
+	height: 46upx;
+	margin: 50% auto;
+	display: block;
+}
+
+.order .order-address-box01 .order-message {
+	flex: 1;
+	margin-top: 15upx;
+}
+
+.order .order-address-box01 .order-message .address {
+	width: 550upx;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap
+}
+
+.order .order-address-box01 .order-address-ico2 {
+	width: 100upx;
+}
+
+.order .order-address-box01 .order-address-ico2 image {
+	width: 12upx;
+	height: 20upx;
+	margin: 60% auto;
+	display: block;
+}
+
+.order .order-address-line01 {
+	width: 100%;
+	margin-top: -25upx;
+}
+
+.order .order-address-line01 image {
+	width: 100%;
+	height: 10upx;
+}
+
+
+.order .order-address-box01 .address {
+	white-space: normal;
+	color: #e97a50;
+	line-height: 1.4em;
+}
+
+
+.order .order-address-box {
+	padding: 20upx;
+}
+
+.order .order-address-box .expressMsg {
+	width: 95%;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap
+}
+
+.order .order-address-line {
+	width: 100%;
+	height: 10upx;
+}
+
+.order .order-address-line image {
+	width: 100%;
+	height: 10upx;
+}
+
+.order .order-address-ico image {
+	width: 32upx;
+	height: 46upx;
+}
+
+.order .item-shop {
+	border-radius: 0upx;
+	background-color: #ffffff;
+	margin: 0;
+	padding: 0;
+}
+
+.order .order-item {
+	margin: 16upx 0;
+	background: #FFFFFF;
+}
+
+.order .order-item .item-img {
+	justify-content: left;
+	padding-left: 32upx;
+	margin-right: -65upx;
+}
+
+.order .order-item .item-img image {
+	width: 120upx;
+	height: 120upx;
+}
+
+.order .order-line {
+	border-bottom: 1px solid #f4f5f6;
+	align-items: center;
+	line-height: 82upx;
+	height: 82upx;
+	padding: 0 32upx;
+}
+
+.order .order-line.usermsg {
+	width: calc(100%-64upx);
+	height: auto;
+	line-height: 50upx;
+	white-space: normal;
+	display: flex;
+	padding: 10upx 32upx;
+}
+
+.order .order-line.usermsg .usermsg-lf {
+	width: 145upx;
+}
+
+.order .order-line.usermsg .usermsg-rt {
+	flex: 1;
+}
+
+
+/*商品页面*/
+.product {
+	position: relative;
+}
+
+.product .product-pic {
+	width: 750upx;
+	height: 750upx;
+}
+
+.product .product-pic image {
+	width: 100%;
+	height: 750upx;
+}
+
+
+.product .product-swiper {
+	width: 750upx;
+	height: 750upx;
+	position: relative;
+}
+
+.product .swiper {
+	width: 750upx;
+	height: 750upx;
+	position: relative;
+}
+
+.product .swiper .tabs {
+	width: 250upx;
+	position: absolute;
+	left: 35%;
+	bottom: 40upx;
+	z-index: 20;
+	justify-content: space-between;
+}
+
+.product .imgNum {
+	position: absolute;
+	right: 3%;
+	bottom: 40upx;
+	width: 100upx;
+	height: 50upx;
+	border-radius: 30upx;
+	text-align: center;
+	background: rgba(0, 0, 0, 0.3);
+	z-index: 900;
+	color: #FFFFFF;
+}
+
+
+.product .swiper swiper {
+	width: 750upx;
+	height: 750upx;
+}
+
+.product .swiper swiper .swiper-item image {
+	width: 750upx;
+	height: 750upx;
+}
+
+.product .attr {
+	padding: 20upx 40upx;
+	background-color: #FFFFFF;
+	position: relative;
+}
+
+.product .share-wrap {
+	position: absolute;
+	right: 0upx;
+	top: 50%;
+	margin-top: -30upx;
+	width: 138upx;
+	height: 60upx;
+	background: #ff5407;
+	border-top-left-radius: 70upx;
+	border-bottom-left-radius: 70upx;
+}
+
+.product .share-wrap .groupshare {
+	text-indent: 62upx;
+}
+
+.product .share {
+
+	/* background: none; */
+	padding: 0;
+	width: 144upx;
+	text-indent: 12upx;
+	height: 60upx;
+	line-height: 60upx;
+	border: none;
+	color: #ffffff;
+	font-size: 24upx;
+}
+
+.product .share image {
+	width: 32upx;
+	height: 32upx;
+}
+
+.product .cartImage {
+	position: fixed;
+	right: 30upx;
+	top: 30upx;
+	/* #ifdef H5 */
+	top: 104upx;
+	/* #endif */
+	width: 70upx;
+	height: 70upx;
+	line-height: 70upx;
+	text-align: center;
+	z-index: 1000;
+	background-color: #000000;
+	opacity: 0.3;
+	filter: alpha(opacity=30);
+	border-radius: 50%;
+}
+
+.product .cartImage image {
+	width: 44upx;
+	height: 44upx;
+}
+
+.attr share.spell-share {
+	width: 126upx;
+}
+
+.product .attr .price {
+	color: #ff0000;
+	font-weight: 700;
+	font-size: 35upx;
+}
+
+.product .attr .price .salePrice-lf {
+	font-size: 20upx;
+	margin-left: -5upx;
+}
+
+.product .attr .price .marketPrice {
+	font-size: 20upx;
+	color: #888888;
+	text-align: center;
+	margin-top: 18upx;
+	margin-left: 10upx;
+	text-decoration: line-through;
+	font-weight: normal;
+}
+
+.product .attr .title {
+	font-weight: 700;
+}
+
+.cart .pop-numbers {
+	width: 200upx;
+	height: 50upx;
+}
+
+.cart .pop-numbers .number {
+	width: 80upx;
+	text-align: center;
+	justify-content: center;
+	align-items: center;
+}
+
+
+.cart .pop-numbers input {
+	display: inline-block;
+	text-align: center;
+	width: 130upx;
+}
+
+.product .selection {
+	margin: 10upx 0 22upx 0;
+	font-weight: 700;
+	text-indent: 10upx;
+}
+
+.product .selection:after,
+.selection:before {
+	background-color: #FFFFFF;
+}
+
+.product .details {
+	padding-bottom: 100upx;
+}
+
+.product .details .title {
+	height: 85upx;
+	line-height: 85upx;
+	padding-left: 40upx;
+	color: #b2b2b2;
+	background: #FFFFFF;
+	margin-bottom: 20upx;
+}
+
+.product .btns {
+	display: block;
+	width: 100%;
+	height: 100upx;
+	line-height: 100upx;
+	text-align: center;
+	z-index: 999;
+	background-color: #ffffff;
+	position: fixed;
+	bottom: 0;
+	left: 0;
+}
+
+
+
+
+.product .btns .text {
+	text-align: center;
+	justify-content: center;
+	align-items: center;
+}
+
+.product .btns .cart {
+	background-color: #8c0008;
+	color: #ffffff;
+}
+
+.popup-box {
+	z-index: 999;
+}
+
+.popup-box .popup-box-close {
+	color: #505050;
+	background-color: #e2e2e2;
+	border-radius: 50%;
+	text-align: center;
+	line-height: 44upx;
+	font-size: 30upx;
+	width: 50upx;
+	height: 50upx;
+	position: absolute;
+	right: 12upx;
+	top: 12upx;
+}
+
+
+.popup-box .uni-mask {
+	position: fixed;
+	z-index: 998;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	background-color: rgba(0, 0, 0, .3);
+}
+
+.popup-box .uni-popup {
+	flex: 1;
+	position: fixed;
+	z-index: 999 !important;
+	background-color: #ffffff;
+	box-shadow: 0 0 30upx rgba(0, 0, 0, .1);
+}
+
+.popup-box .uni-popup-bottom {
+	left: 0;
+	bottom: 0;
+	width: 100%;
+}
+
+.popup-box .uni-popup-middle {
+	flex-direction: column;
+	align-items: center;
+	top: 50%;
+	left: 50%;
+	transform: translate(-50%, -50%);
+	justify-content: center;
+}
+
+.popup-box .uni-popup-top {
+	top: 0;
+	left: 0;
+	width: 100%;
+}
+
+.product-attr .uni-attr-box {
+	flex: 1;
+	padding: 30upx;
+}
+
+.product-attr .pic image {
+	width: 200upx;
+	height: 200upx;
+}
+
+.product-attr .price {
+	padding: 0 24upx;
+}
+
+.product-attr .salePrice {
+	color: #e80080;
+	font-size: 32upx;
+}
+
+.product-attr .marketPrice {
+	color: #888888;
+	text-decoration: line-through;
+}
+
+.product-attr .attr-row {
+	margin-bottom: 16upx;
+	line-height: 60upx;
+}
+
+.product-attr .attr-row .val {
+	margin-right: 16upx;
+	margin-bottom: 8upx;
+	padding: 0 16upx !important;
+	background-color: #F2F2F2;
+	border-radius: 8upx;
+	border: 1px solid #F2F2F2;
+}
+
+.product-attr .key {
+	margin-right: 16upx;
+	flex-wrap: nowrap;
+}
+.product-attr .attr-key{
+	/* width:90upx; */
+	text-overflow: ellipsis;
+}
+
+.product-attr .cur {
+	color: #f40;
+	border: 1px solid #f40 !important;
+}
+
+
+.form {
+	background-color: #FFFFFF;
+	padding: 15upx 0;
+}
+
+.form .headIco {
+	height: 60upx;
+	width: 60upx;
+}
+
+.form .uni-form-item {
+	padding: 0 2%;
+	width: 96%;
+	line-height: 80upx;
+	height: 80upx;
+	overflow: hidden;
+	align-items: center;
+	border-bottom: 1px solid #E2E2E2;
+}
+
+.form switch {
+	padding: 15upx 0;
+}
+
+/* 拼团详情页 */
+
+.GroupProduct .picImg {
+	width: 750upx;
+	height: 750upx;
+}
+
+.GroupProduct .picImg image {
+	width: 750upx;
+	height: 750upx;
+}
+
+.GroupProduct .attr {
+	/* background: #f22127; */
+}
+
+.GroupProduct .attr .price .sellgroupCount {
+	text-align: right;
+	color: #929292;
+	font-size: 24upx;
+	margin-top: 6upx;
+}
+
+.GroupProduct .attr .price,
+.GroupProduct .attr .price .marketPrice {
+	/* color: #FFFFFF; */
+}
+
+.GroupProduct .productTitle {
+	font-weight: 700;
+	padding: 0 40upx;
+	background: #FFFFFF;
+	margin-top: -11upx;
+	padding-bottom: 14upx;
+}
+
+.GroupProduct .sellgroupPoeple {
+	margin: 18upx 0;
+}
+
+.GroupProduct .sellgroupPoeple .sellgroupPoeple-top:before {
+	/* background: none; */
+}
+
+.GroupProduct .sellgroupPoeple .sellgroupPoeple-bottom.uni-list:after {
+	/* background: none; */
+}
+
+.GroupProduct .sellgroupPoeple .uni-list .more {
+	text-align: right;
+	color: #adadad;
+}
+
+.GroupProduct .sellgroupPoeple .sellgroupPoeple-bottom swiper.one {
+	height: 120upx;
+}
+
+.GroupProduct .sellgroupPoeple .sellgroupPoeple-bottom swiper.two {
+	height: 240upx;
+}
+
+.GroupProduct .sellgroupPoeple .sellgroupPoeple-bottom swiper swiper-item {
+	border-bottom: 1upx solid #e0e0e3;
+}
+
+.GroupProduct .sellgroupPoeple .sellgroupPoeple-bottom swiper .uni-list-cell {
+	flex: 1;
+}
+
+.GroupProduct .sellgroupPoeple .sellgroupPoeple-bottom swiper .uni-list-cell .left {
+	height: 100%;
+	flex: 1;
+	align-items: center;
+	font-size: 24upx;
+}
+
+.GroupProduct .sellgroupPoeple .sellgroupPoeple-bottom swiper .uni-list-cell .left .poepleImg {
+	display: block;
+	width: 50upx;
+	height: 50upx;
+	margin-left: 30upx;
+}
+
+.GroupProduct .sellgroupPoeple .sellgroupPoeple-bottom swiper .uni-list-cell .left .poepleNick {
+	margin-left: 15upx;
+}
+
+.GroupProduct .sellgroupPoeple .sellgroupPoeple-bottom swiper .uni-list-cell .right {
+	height: 100%;
+	align-items: center;
+	flex: 3;
+}
+
+.GroupProduct .sellgroupPoeple .sellgroupPoeple-bottom swiper .uni-list-cell .right .flex-end {
+	font-size: 24upx;
+}
+
+.GroupProduct .sellgroupPoeple .sellgroupPoeple-bottom swiper .uni-list-cell .right .sellgroupMsg view {
+	/* width: 100%; */
+	align-items: center;
+}
+
+.GroupProduct .sellgroupPoeple .sellgroupPoeple-bottom swiper .uni-list-cell .right .sellgroupMsg {
+	flex: 1;
+	margin-right: 10upx;
+}
+
+.GroupProduct .sellgroupPoeple .sellgroupPoeple-bottom swiper .uni-list-cell .right .sellgroupMsg .sellgroupMsgs-wrap {
+	width: 100%;
+	text-align: right;
+
+}
+
+.GroupProduct .sellgroupPoeple .sellgroupPoeple-bottom swiper .uni-list-cell .right .sellgroupMsg view .sellgroupMsgs {
+	width: 100%;
+	text-align: right;
+
+}
+
+.GroupProduct .sellgroupPoeple .sellgroupPoeple-bottom swiper .uni-list-cell .right .sellgroupButton {
+	width: 190upx;
+	text-align: right;
+}
+
+.GroupProduct .sellgroupPoeple .sellgroupPoeple-bottom swiper .uni-list-cell .right .sellgroupButton button {
+	margin: 0;
+}
+
+
+
+.order-items {
+	background-color: #FFFFFF;
+	border-radius: 24upx;
+	margin: 16upx;
+	/* box-shadow:0 0 10rpx 0 #B2B2B2; */
+}
+
+.order-items .order-boder {
+	border-bottom: 2upx solid #E2E2E2;
+}
+
+.order-items .order-boder .orderNo {
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	width: 350upx;
+}
+
+.order-items .order-shop-name {
+	align-items: center;
+	padding: 0 24upx;
+	line-height: 72upx;
+	height: 72upx;
+}
+
+.order-items .order-status {
+	justify-content: flex-end;
+	color: #f52f3e;
+}
+
+.order-items .order-item {
+	background-color: #FFFFFF;
+	padding: 24upx;
+	height: 120upx;
+	/* border-bottom: 1upx solid #e2e2e2; */
+}
+
+.order-items .order-specs {
+	width: 280upx;
+	color: #505050;
+	font-size: 26upx;
+}
+
+.order-items .order-item .pic image {
+	width: 120upx;
+	height: 120upx;
+}
+
+.order-items .order-line {
+	justify-content: flex-end;
+	align-items: center;
+	line-height: 72upx;
+	height: 72upx;
+}
+
+.order-items .order-line.order-btn {
+	margin: 10upx;
+}
+
+.order-items .order-line.order-btn .btn {
+	border-radius: 6upx;
+}
+
+.orderInfo .order-items {
+	border-radius: 0;
+	margin: 0;
+	margin-bottom: 16upx;
+}
+
+.orderInfo .order-address {
+	margin-bottom: 16upx;
+	background-color: #FFFFFF;
+}
+
+.orderInfo .orderInfo-status {
+	height: 120upx;
+	position: relative;
+	background: #dd0101;
+	color: #FFFFFF;
+}
+
+.orderInfo .orderInfo-status image {
+	width: 750upx;
+	height: 120upx;
+	position: absolute;
+}
+
+.orderInfo .orderInfo-status view {
+	position: relative;
+	z-index: 999;
+}
+
+.orderInfo .order-address-box {
+	padding: 16upx;
+	color: #999999;
+}
+
+
+.orderInfo .order-address-line image {
+	width: 750upx;
+	height: 6upx;
+}
+
+.orderInfo .oderinfo-other {
+	background-color: #FFFFFF;
+	padding: 16upx;
+	margin-bottom: 80upx;
+}
+
+.orderInfo .order-line-small {
+	color: #505050;
+	font-size: 24upx;
+	line-height: 64upx;
+	height: 64upx;
+}
+
+.orderInfo .order-refundLogs {
+	background-color: #FFFFFF;
+	padding: 16upx;
+	color: #646464;
+}
+
+.orderInfo .order-refundLogs .order-refundLog {
+	background-color: #ededed;
+	border-radius: 12upx;
+	padding: 16upx;
+	position: relative;
+}
+
+.orderInfo .buyer .order-refundLog:after {
+	-webkit-transform: rotate(45deg);
+	transform: rotate(45deg);
+	-ms-transform: rotate(45deg);
+	content: "";
+	position: absolute;
+	background-color: #ededed;
+	top: 10px;
+	right: -4px;
+	border-left: 1px solid #ededed;
+	border-top: 1px solid #ededed;
+	width: 8px;
+	height: 8px;
+}
+
+.orderInfo .saler .order-refundLog:after {
+	-webkit-transform: rotate(45deg);
+	transform: rotate(45deg);
+	-ms-transform: rotate(45deg);
+	content: "";
+	position: absolute;
+	background-color: #51a3cb;
+	top: 10px;
+	left: -4px;
+	border-left: 1px solid #51a3cb;
+	border-top: 1px solid #51a3cb;
+	width: 8px;
+	height: 8px;
+}
+
+.orderInfo .saler .order-refundLog {
+	background-color: #51a3cb;
+	color: #fff;
+}
+
+.orderInfo .order-refundLogs .order-refundLog-title {
+	font-size: 24upx;
+	padding: 16upx 0;
+}
+
+.orderInfo .order-refundLogs .order-refundLog-date {
+	background-color: #f2f2f2;
+	border-radius: 12upx;
+	padding: 0 16upx;
+}
+
+.orderInfo .order-refundLogs .order-refundLog-text {
+	border-top: 1px solid #dedede;
+}
+
+.orderInfo .footer .btn {
+	border: 1upx solid #cccccc;
+	border-radius: 6upx;
+	background: none;
+	color: #000000;
+}
+
+.orderInfo .footer .btn:last-child {
+	border-radius: 6upx;
+	background: #dd0101;
+	color: #FFFFFF;
+	border: none;
+}
+
+.order-refund .order-refund-box {
+	padding: 50upx 0 30upx 0;
+	background-color: #FFFFFF;
+}
+
+.popup-sms {
+	padding: 16upx;
+	width: 600upx;
+}
+
+.popup-sms .uni-form-item {
+	line-height: 72upx;
+	height: 72upx;
+}
+
+.popup-sms .btn {
+	width: 100%;
+}
+
+.popup-sms .uni-form-line {
+	background-color: #e2e2e2;
+	height: 2upx;
+}
+
+.credit .idcard-pic {
+	position: relative;
+}
+
+.credit .pic image {
+	width: 750upx;
+}
+
+.credit .idcard-pic image {
+	height: 120upx;
+	width: 120upx;
+}
+
+.credit .uni-form-item .ico {
+	width: 42upx;
+	justify-content: center;
+	align-items: center;
+}
+
+.credit .uni-form-item .ico image {
+	width: 42upx;
+	height: 42upx;
+}
+
+.credit .uni-form-item .uni-input {
+	margin-left: 20upx;
+	padding: 0;
+}
+
+.credit .uni-form-item .send {
+	flex-wrap: nowrap;
+	padding: 0;
+}
+
+.credit .btn {
+	width: 100%;
+	margin: 0 auto;
+}
+
+.credit .uni-hello-addfile {
+	color: #505050;
+	padding: 0 12upx;
+	height: 64upx;
+	line-height: 64upx;
+	position: absolute;
+	top: 50%;
+	right: 2%;
+	margin-top: -32upx;
+
+}
+
+.articles .uni-media-list-logo {
+	width: 180upx;
+	height: 90upx;
+}
+
+.article .pic image {
+	width: 750upx;
+	height: 360upx;
+}
+
+.article .details {
+	padding: 16upx;
+}
+
+
+/* 登录 */
+
+.jz_login {
+	width: 100%;
+	position: relative;
+}
+
+.jz_login .login-top {
+	width: 100%;
+	position: absolute;
+	left: 0;
+	top: 0;
+	z-index: 1;
+
+}
+
+.jz_login .login-top image {
+	width: 100%;
+}
+
+.jz_login .circles .circle {
+	position: absolute;
+	border-radius: 50%;
+
+}
+
+.jz_login .circle:nth-child(1) {
+	background: #ffffff;
+	box-shadow: 0 0 20upx 20upx #9c0100;
+	top: 15%;
+	left: 10%;
+	width: 160upx;
+	height: 160upx;
+	opacity: 0.2;
+	-webkit-animation: float1 20s infinite linear;
+	animation: float1 20s infinite linear;
+}
+
+.jz_login .circle:nth-child(2) {
+	background: #ffffff;
+	box-shadow: 0 0 20upx 20upx #cc0100;
+	right: 45%;
+	bottom: 72%;
+	width: 60upx;
+	height: 60upx;
+	opacity: 0.3;
+	-webkit-animation: float2 20s infinite linear;
+	animation: float2 20s infinite linear;
+}
+
+.jz_login .circle:nth-child(3) {
+	background: #ffffff;
+	box-shadow: 0 0 20upx 20upx #cc0100;
+	right: 10%;
+	top: 18%;
+	width: 100upx;
+	height: 100upx;
+	opacity: 0.3;
+	-webkit-animation: float3 20s infinite linear;
+	animation: float3 20s infinite linear;
+}
+
+.jz_login .circle:nth-child(4) {
+	background: #ffffff;
+	box-shadow: 0 0 20upx 20upx #9c0100;
+	top: 2%;
+	left: 24%;
+	width: 120upx;
+	height: 120upx;
+	opacity: 0.2;
+	-webkit-animation: float1 20s infinite linear;
+	animation: float1 20s infinite linear;
+}
+
+.jz_login .circle:nth-child(5) {
+	background: #ffffff;
+	box-shadow: 0 0 20upx 20upx #cc0100;
+	right: 26%;
+	bottom: 85%;
+	width: 60upx;
+	height: 60upx;
+	opacity: 0.3;
+	-webkit-animation: float2 20s infinite linear;
+	animation: float2 20s infinite linear;
+}
+
+.jz_login .circle:nth-child(6) {
+	background: #ffffff;
+	box-shadow: 0 0 20upx 20upx #cc0100;
+	right: 26%;
+	top: 25%;
+	width: 100upx;
+	height: 100upx;
+	opacity: 0.3;
+	-webkit-animation: float3 20s infinite linear;
+	animation: float3 20s infinite linear;
+}
+
+.jz_login .circle:nth-child(7) {
+	background: #ffffff;
+	box-shadow: 0 0 20upx 20upx #cc0100;
+	left: 4%;
+	top: 4%;
+	width: 60upx;
+	height: 60upx;
+	opacity: 0.3;
+	-webkit-animation: float3 20s infinite linear;
+	animation: float3 20s infinite linear;
+}
+
+@keyframes float1 {
+	40% {
+		-webkit-transform: translateX(52upx) translateY(81upx);
+		transform: translateX(52upx) translateY(81upx);
+	}
+
+	80% {
+		-webkit-transform: translateX(-23upx) translateY(200upx);
+		transform: translateX(-23upx) translateY(200upx);
+	}
+}
+
+@keyframes float2 {
+	40% {
+		-webkit-transform: translateX(52upx) translateY(-81upx);
+		transform: translateX(52upx) translateY(-81upx);
+	}
+
+	80% {
+		-webkit-transform: translateX(-23upx) translateY(-200upx);
+		transform: translateX(-23upx) translateY(-200upx);
+	}
+}
+
+@keyframes float3 {
+	40% {
+		-webkit-transform: translateX(200upx) translateY(0upx);
+		transform: translateX(200upx) translateY(0upx);
+	}
+
+	80% {
+		-webkit-transform: translateX(200upx) translateY(180upx);
+		transform: translateX(200upx) translateY(180upx);
+	}
+}
+
+.jz_login .space {
+	width: 100%;
+	height: 240upx;
+	position: relative;
+}
+
+.jz_login .login-box {
+	height: 580upx;
+	width: 100%;
+	align-items: center;
+	justify-content: space-between;
+	position: relative;
+	z-index: 10;
+}
+
+.jz_login .login-box .login-tip {
+	height: 40upx;
+	text-align: center;
+	justify-content: center;
+	margin-top: 40upx;
+}
+
+.jz_login .login-box .login-tip .line-wrap {
+	width: 1upx;
+	justify-content: space-between;
+}
+
+.jz_login .login-box .login-tip .registerMsg,
+.pswMsg {
+	font-size: 26upx;
+	color: #505050;
+	margin: 0 15upx;
+}
+
+.jz_login .login-box .login-tip .line {
+	width: 1upx;
+	border-right: 1px solid #505050;
+	height: 20upx;
+	margin-top: 13upx;
+}
+
+.jz_login .login-box .login-form {
+	width: 580upx;
+	height: 580upx;
+	margin: 0 auto;
+	border-radius: 20upx;
+	/* margin-top: -250upx; */
+	box-shadow: 0 0 15upx 0 #B2B2B2;
+	background: #FFFFFF;
+	justify-content: space-between;
+	align-items: center;
+
+
+}
+
+.jz_register.jz_login .login-box .login-form {
+	height: 700upx;
+}
+
+.jz_login .login-box .login-form .logoImg {
+	width: 180upx;
+	height: 180upx;
+	border-radius: 50%;
+	background: #FFFFFF;
+	justify-content: center;
+	align-items: center;
+	margin-top: -90upx;
+}
+
+
+.jz_login .login-box .login-form .logoImg image {
+	width: 138upx;
+	height: 138upx;
+}
+
+
+.jz_login .login-box .login-form .tab {
+	width: 460upx;
+
+}
+
+.jz_login .tab .login-tab .uni-flex-item {
+	line-height: 75upx;
+	height: 75upx;
+	justify-content: center;
+	border-bottom: 2upx solid #e2e2e2;
+	color: #505050;
+}
+
+.jz_login .tab .login-tab .login-tab-on {
+	border-bottom: 2upx solid #c30200;
+	color: #000000;
+}
+
+.jz_login .login-box .login-form .tab .content .form-phone {
+	width: 460upx;
+	height: 100upx;
+	border-bottom: 2upx solid #e2e2e2;
+	padding-top: 40upx;
+	box-sizing: border-box;
+}
+
+
+.jz_login .login-box .login-form .tab .content .form-phone .form-phone-lf {
+	width: 50upx;
+	height: 50upx;
+	align-items: center;
+}
+
+.jz_login .login-box .login-form .tab .content .form-phone .form-phone-lf image {
+	width: 42upx;
+	height: 42upx;
+}
+
+.jz_login .login-box .login-form .tab .content .form-phone input {
+	font-size: 26upx;
+}
+
+.jz_login .login-box .login-form .tab .content .form-phone .codeBtn {
+	width: 146upx;
+	height: 48upx;
+	text-align: center;
+	line-height: 48upx;
+	font-size: 24upx;
+	border: 1px solid #e2e2e2;
+	border-radius: 10upx;
+}
+
+.jz_login .login-box .login-form .tab .content .form-phone .codeBtn button {
+	width: 146upx;
+	height: 48upx;
+	line-height: 48upx;
+	background: none;
+	color: #505050;
+	font-size: 24upx;
+	padding: 0;
+	margin: 0;
+	border: 0;
+}
+
+
+.jz_login .login-box .login-form .btnImg {
+	width: 460upx;
+	height: 114upx;
+}
+
+.jz_login .login-box .login-form .btnImg image {
+	width: 460upx;
+	height: 57upx;
+}
+
+/* 会员中心*/
+.jz_user {
+	background: #f2f2f2;
+}
+
+.jz_user .user-header {
+	padding-top: 30upx;
+	height: 353upx;
+}
+
+.jz_user .user-header .userinfo {
+	padding: 0 32upx;
+	justify-content: space-between;
+	align-items: center;
+}
+
+.jz_user .user-content {
+	padding: 0 32upx;
+}
+
+.jz_user .inforlf {
+	align-items: center;
+}
+
+.jz_user .inforlf .face image {
+	width: 94upx;
+	height: 94upx;
+	border-radius: 50%;
+}
+
+.jz_user .inforlf .username {
+	font-size: 30upx;
+	color: #FFFFFF;
+	margin-left: 20upx;
+}
+
+.jz_user .inforlf .username .uname {
+	font-size: 30upx;
+	color: #FFFFFF;
+}
+
+.jz_user .inforlf .username .utime {
+	font-size: 24upx;
+	color: #FFFFFF;
+}
+
+.jz_user .inforrt {
+	align-items: center;
+}
+
+.jz_user .inforrt>image {
+	margin-top: 10upx;
+	width: 32upx;
+	height: 32upx;
+}
+
+.jz_user .inforrt>view {
+	font-size: 24upx;
+	color: #FFFFFF;
+}
+
+.jz_user .user-header .userlist {
+	margin-top: 80upx;
+	padding: 0 56upx;
+	justify-content: space-between;
+	text-align: center;
+	align-items: center;
+}
+
+.jz_user .user-header .userlist .line {
+	height: 60upx;
+	width: 2upx;
+	border-left: 1upx solid #610100;
+	border-right: 1upx solid #ff3b39;
+}
+
+.jz_user .user-header .userlist .useritem>view {
+	color: #FFFFFF;
+}
+
+.jz_user .user-header .userlist .navigator-hover {
+	background: none;
+}
+
+.jz_user .user-content {
+	padding: 0 32upx;
+}
+
+.jz_user .userbox {
+	margin-top: -60upx;
+	height: 120upx;
+	justify-content: space-between;
+	align-items: center;
+	background: #FFFFFF;
+	border-radius: 20upx;
+	padding: 0 32upx;
+	box-shadow: 0 0 10upx 0 #B2B2B2;
+}
+
+.jz_user .userbox .boxlf {
+	align-items: center;
+}
+
+.jz_user .userbox .boxlf image {
+	width: 56upx;
+	height: 56upx;
+	margin-right: 18upx;
+}
+
+.jz_user .userbox .boxlf .titles .titlestop {
+	font-size: 26upx;
+	color: #505050;
+	margin-top: -2upx;
+}
+
+.jz_user .userbox .boxline {
+	width: 1upx;
+	height: 66upx;
+}
+
+.jz_user .userbox .boxlf .titles .titlesbottom {
+	font-size: 24upx;
+	color: #b0b0b0;
+	margin-top: -6upx;
+}
+
+.jz_user .orders {
+	height: 250upx;
+	background: #FFFFFF;
+	border-radius: 20upx;
+	/* padding:0 32upx; */
+	margin-top: 24upx;
+	box-shadow: 0 0 10upx 0 #B2B2B2;
+}
+
+.jz_user .orders .uni-list-cell {
+	margin-left: -29upx;
+	justify-content: space-between;
+}
+
+.jz_user .orders .uni-list-cell .myorder {
+	margin-left: 40upx;
+	font-size: 28upx;
+}
+
+.jz_user .orders .uni-list-cell .lookall {
+	font-size: 24upx;
+	color: #c8c8c8;
+	margin-right: 30upx;
+}
+
+.jz_user .orders .orderList {
+	align-items: center;
+	justify-content: space-between;
+	padding: 0 30upx;
+}
+
+.jz_user .orders .orderList .navigator-hover {
+	background: none;
+}
+
+.jz_user .orders .orderList .orderitem {
+	align-items: center;
+	position: relative;
+}
+
+.jz_user .orders .orderList .orderitem image {
+	width: 48upx;
+	height: 48upx;
+}
+
+.jz_user .orders .orderList .orderitem>view {
+	font-size: 26upx;
+	color: #505050;
+}
+
+.jz_user .orders .orderList .orderitem .badge {
+	padding: 2upx;
+	font-size: 23upx;
+	position: absolute;
+	width: 26upx;
+	height: 26upx;
+	border-radius: 50%;
+	border: 1px solid #ff0000;
+	text-align: center;
+	line-height: 26upx;
+	color: #ff0000;
+	right: 4upx;
+	top: -3upx;
+	z-index: 999;
+	background: #FFFFFF;
+}
+
+.jz_user .orders .orderList .orderitem .badge.badgeF {
+	right: 20upx;
+}
+
+.jz_user .card {
+	width: 100%;
+	margin-top: 24upx;
+	margin-bottom: 20upx;
+	border-radius: 20upx;
+	box-shadow: 0 0 10upx 0 #B2B2B2;
+}
+
+.jz_user .card .navigator-hover.firstcell {
+	border-top-left-radius: 20upx;
+	border-top-right-radius: 20upx;
+	border-bottom-left-radius: 0upx;
+	border-bottom-right-radius: 0upx;
+}
+
+.jz_user .card .navigator-hover.lastcell {
+	border-top-left-radius: 0upx;
+	border-top-right-radius: 0upx;
+	border-bottom-left-radius: 20upx;
+	border-bottom-right-radius: 20upx;
+}
+
+.jz_user .card .uni-list:first-child {
+	border-top-left-radius: 20upx;
+	border-top-right-radius: 20upx;
+}
+
+.jz_user .card .uni-list:last-child {
+	border-bottom-left-radius: 20upx;
+	border-bottom-right-radius: 20upx;
+}
+
+.jz_user .card .uni-list:before {
+	background: none;
+}
+
+.jz_user .card .uni-list:last-child:after {
+	background: none;
+}
+
+.jz_user .card .uni-list-cell:first-child:before {
+	background: none;
+}
+
+.jz_user .card .uni-list-cell-navigate .listleft {
+	width: 30upx;
+	height: 30upx;
+}
+
+.jz_user .card .uni-list-cell-navigate .listrt {
+	width: 14upx;
+	height: 14upx;
+}
+
+.jz_user .card .uni-list-cell-navigate .listmsg text {
+	font-size: 26upx;
+	color: #505050;
+	margin-left: 18upx;
+}
+
+/* 红酒商城 */
+.jz_merchant {
+	position: relative;
+}
+
+.jz_merchant .merchant_swiper {
+	position: relative;
+}
+
+
+.jz_merchant .swiperSearch {
+	width: 100%;
+	position: absolute;
+	top: 30upx;
+	/* #ifdef H5 */
+	top: 50upx;
+	/* #endif */
+	padding: 15upx 0;
+	z-index: 999;
+}
+
+.jz_merchant .searchChangge {
+	top: 0;
+	background: #c50200 !important;
+	/* #ifdef H5 */
+	top: 2upx;
+	background: #c50200 !important;
+	/* #endif */
+}
+
+.jz_merchant .swiperSearch .swiperSearch_title {
+	color: #FFFFFF;
+	margin-right: 58upx;
+	margin-left: 20upx;
+}
+
+.jz_merchant .categorys {
+	width: calc(100%-40upx);
+	padding: 0;
+	flex-wrap: wrap;
+	border-radius: 20upx;
+	background: #FFFFFF;
+	margin: 0 20upx;
+	margin-top: -40upx;
+	padding-top: 10upx;
+	z-index: 88;
+}
+
+.jz_merchant .categorys .category {
+	width: 25%;
+}
+
+.jz_merchant .categorys image {
+	margin-bottom: 0;
+	margin-top: 20upx;
+}
+
+.jz_merchant.main .note {
+	width: 100%;
+	border-top: 1upx solid #f1f1f1;
+	margin-top: 20upx;
+	justify-content: space-between;
+	border-bottom-left-radius: 20upx;
+	border-bottom-right-radius: 20upx;
+}
+
+.jz_merchant .note image {
+	margin-bottom: 15upx;
+	margin-right: 12upx;
+}
+
+.jz_merchant swiper {
+	height: 640upx;
+}
+
+.jz_merchant swiper .swiper-item {
+	height: 640upx;
+}
+
+.jz_merchant swiper .swiper-item image {
+	height: 640upx;
+}
+
+.jz_merchant .note .note-title {
+	width: auto;
+}
+
+.jz_merchant .note .note-news {
+	font-size: 24upx;
+	color: #bf0200;
+	margin-right: 15upx;
+}
+
+.jz_merchant .note .note-page {
+	font-size: 24upx;
+}
+
+.jz_merchant .note swiper {
+	width: 400upx;
+}
+
+.jz_merchant .note-page-title {
+	width: 120px;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	margin-right: 30upx;
+}
+
+.jz_merchant .note .note-time {
+	margin-right: 20upx;
+}
+
+.jz_merchant .note .note-more,
+.note-time {
+	font-size: 26upx;
+	color: #bababa;
+}
+
+.jz_merchant .note .note-more {
+	width: 88upx;
+	margin-right: -30upx;
+}
+
+.jz_merchant .limitProduct {
+	margin: 0 20upx;
+	margin-top: 32upx;
+	background: #FFFFFF;
+	width: calc(100%-20upx);
+	border-radius: 20upx;
+}
+
+.jz_merchant .limitProduct .limitProduct-header {
+	justify-content: space-between;
+	height: 100upx;
+	align-items: center;
+	padding: 0 22upx;
+	padding-bottom: 20upx;
+}
+
+.jz_merchant .limitProduct .limitProduct-header image {
+	width: 40upx;
+	height: 40upx;
+}
+
+.jz_merchant .limitProduct .limitTitles {
+	margin-left: 15upx;
+}
+
+.jz_merchant .limitProduct .limitTitles .title01 {
+	font-size: 30upx;
+	color: #000000;
+	font-weight: 600;
+	margin-top: 30upx;
+}
+
+.jz_merchant .limitProduct .limitTitles .title02 {
+	font-size: 24upx;
+	/* #ifdef H5 */
+	font-size: 24upx;
+	/* #endif */
+	color: #bababa;
+}
+
+
+
+.jz_merchant .limitProduct .limitProduct-header .header-more {
+	font-size: 26upx;
+	/* #ifdef H5 */
+	font-size: 26upx;
+	/* #endif */
+	color: #bababa;
+}
+
+.jz_merchant .limitProduct .productList {
+	flex-wrap: wrap;
+	border-top: 1upx solid #f1f1f1;
+}
+
+.jz_merchant .limitProduct .productList .productItem {
+	width: 33.3%;
+	border-bottom: 1upx solid #f1f1f1;
+	border-right: 1upx solid #f1f1f1;
+	box-sizing: border-box;
+	padding: 20upx 0;
+}
+
+.jz_merchant .limitProduct .productList .productItem .loadbox.pic {
+	border-radius: 0;
+}
+
+.jz_merchant .limitProduct .productList .productItem:nth-of-type(3n) {
+	border-right: 0;
+}
+
+.jz_merchant .limitProduct .product_img {
+	height: 200upx;
+}
+
+.jz_merchant .limitProduct .product_img image {
+	position: absolute;
+	width: 200upx;
+	height: 200upx;
+	left: 50%;
+	margin-left: -100upx;
+}
+
+.jz_merchant .limitProduct .product_title {
+	padding-left: 24upx;
+	font-size: 24upx;
+	color: #535353;
+}
+
+.jz_merchant .limitProduct .product_detail {
+	padding-left: 24upx;
+	font-size: 24upx;
+	color: #b4b4b4;
+}
+
+
+.jz_merchant .limitProduct .product_price {
+	justify-content: space-between;
+	padding-left: 24upx;
+}
+
+.jz_merchant .limitProduct .product_price image {
+	width: 40upx;
+	height: 40upx;
+	margin-right: 18upx;
+}
+
+.jz_merchant .limitProduct .product_price .salePrice {
+	font-size: 22upx;
+	color: #f10000;
+}
+
+.jz_merchant .limitProduct .product_price .price {
+	font-size: 20upx;
+	color: #b4b4b4;
+	margin-left: 8upx;
+	text-decoration: line-through;
+	margin-top: 2upx;
+}
+
+.jz_merchant .uni-product {
+	position: relative;
+}
+
+.jz_merchant .uni-product-topImg {
+	position: absolute;
+	width: 64upx;
+	height: 60upx;
+	left: 30upx;
+	top: -10upx;
+}
+
+.jz_merchant .merchan-banner {
+	margin: 20upx 0;
+	border-radius: 20upx;
+	position: relative;
+}
+
+.jz_merchant .merchan-banner image {
+	width: 100%;
+	height: 402upx;
+}
+
+.jz_merchant .userbox {
+	margin: 20upx;
+	margin-top: 0;
+	margin-bottom: 30upx;
+	height: 146upx;
+}
+
+.jz_merchant .userbox .boxline image {
+	width: 8upx;
+	height: 66upx;
+}
+
+.jz_merchant .merchant_brand {
+	margin: 0 26upx 10upx 26upx;
+
+	justify-content: space-between;
+}
+
+.jz_merchant .merchant_brand .brand_title {
+	font-size: 28upx;
+	color: #000000;
+}
+
+.jz_merchant .merchant_brand .brand_detail {
+	font-size: 24upx;
+	/* margin-top: 5upx; */
+	/* #ifdef H5 */
+	font-size: 24upx;
+	margin-top: 6upx;
+	/* #endif */
+	color: #bbbbbb;
+	margin-left: 10upx;
+
+}
+
+.jz_merchant .merchant_brand .brand-more {
+	font-size: 26upx;
+	/* #ifdef H5 */
+	font-size: 26upx;
+	/* #endif */
+	color: #000000;
+}
+
+.jz_merchant .brand_banner {
+	margin: 0 20upx;
+	width: 710upx;
+	/* height: 200upx; */
+	position: relative;
+	overflow: hidden;
+	zoom: 1.0;
+}
+
+.jz_merchant .brand_banner image {
+	width: 710upx;
+	/* height: 200upx; */
+	border-radius: 20upx;
+	position: relative;
+}
+
+.jz_merchant .brand_banner .loadbox {
+	border-radius: 20upx;
+}
+
+/* 品牌精品产品 */
+.jz_merchant .lists-wrap {
+	border-top: 1px solid #eeeeee;
+	margin-bottom: 20upx;
+}
+
+.jz_merchant .list .uni-product-list {
+	padding-left: 10upx;
+	width: 100%;
+	box-sizing: border-box;
+}
+
+.jz_merchant .list {
+	width: 100%;
+	height: 92%;
+}
+
+.jz_merchant .list .uni-product {
+	width: 350upx;
+	padding: 0;
+	/* height: 576upx; */
+	margin-left: 1%;
+	margin-right: 1%;
+	margin-top: 36upx;
+	text-indent: 20upx;
+	background: #FFFFFF;
+	border-radius: 20upx;
+	padding-bottom: 20upx;
+	box-shadow: 0 0 8upx 0 #B2B2B2;
+	/* overflow: hidden; */
+	zoom: 1.0;
+	position: relative;
+}
+
+.jz_merchant .list .uni-product .image-view {
+	position: relative;
+	width: 100%;
+	height: 350upx;
+	line-height: 0;
+	margin: 0;
+}
+
+
+
+.jz_merchant .list .uni-product .uni-product-image {
+	width: 350upx;
+	height: 350upx;
+	border-top-left-radius: 20upx;
+	border-top-right-radius: 20upx;
+}
+
+.jz_merchant .list .uni-product .image-view .image {
+	width: 100%;
+	height: 100%;
+	border-top-left-radius: 20upx;
+	border-top-right-radius: 20upx;
+}
+
+.jz_merchant .list .uni-product .uni-product-title-wrap {
+	padding: 0 10upx;
+	align-content: space-between;
+	margin-top: 20upx;
+}
+
+.jz_merchant .list .uni-product .uni-product-title-wrap .product_details {
+	font-size: 26upx;
+	/* #ifdef H5 */
+	font-size: 26upx;
+	/* #endif */
+	color: #b9b9b9;
+	margin-top: 10upx;
+}
+
+.jz_merchant .list .uni-product .uni-product-title-wrap .product_details .lineTip {
+	width: 2upx;
+	height: 18upx;
+	background: #f0f0f0;
+	margin-left: 16upx;
+	margin-top: 11upx;
+}
+
+.jz_merchant .list .uni-product .uni-product-title {
+	font-size: 26upx;
+	/* #ifdef H5 */
+	font-size: 26upx;
+	/* #endif */
+	color: #505050;
+	overflow: visible;
+}
+
+.jz_merchant .list .uni-product .marketPrice {
+	/* margin-top: 20upx; */
+	margin-left: -15upx;
+}
+
+.jz_merchant .list .uni-product .salePrice {
+	margin-left: -15upx;
+}
+
+.jz_merchant .prices {
+	justify-content: space-between;
+	align-items: center;
+}
+
+.jz_merchant .prices .prices-cart image {
+	width: 52upx;
+	height: 50upx;
+	margin-right: 10upx;
+}
+
+.jz_merchant .prices .prices-salePrice {
+	font-size: 26upx;
+	/* #ifdef H5 */
+	font-size: 26upx;
+
+	/* #endif */
+	color: #f00000;
+}
+
+.jz_merchant .list .uni-product .image-view {
+	width: 100%;
+	/* margin-top: 20upx; */
+	border-top-left-radius: 20upx;
+	border-top-right-radius: 20upx;
+}
+
+.jz_merchant .list .uni-product .image-view image {
+	width: 350upx;
+	height: 350upx;
+	border-top-left-radius: 20upx;
+	border-top-right-radius: 20upx;
+}
+
+.jz_merchant .merchantItem {
+	border-top: 2upx solid #f1f1f1;
+}
+
+.jz_merchant .item_pic {
+	width: 290upx;
+	height: 300upx;
+}
+
+.jz_merchant .item_pic .pic {
+	width: 250upx !important;
+	height: 250upx !important;
+	left: 50% !important;
+	top: 50% !important;
+	border-radius: 0 !important;
+	margin-top: -125upx;
+	margin-left: -125upx;
+}
+
+.jz_merchant .item_contents {
+	/* padding: 20upx 0 ; */
+}
+
+.jz_merchant .contents_title {
+	font-size: 28upx;
+	color: #505050;
+	margin-bottom: 20upx;
+}
+
+.jz_merchant .contents_porgress {
+	height: 30upx;
+	margin-bottom: 20upx;
+
+}
+
+.jz_merchant .contents_porgress .porgress_title {
+	font-size: 24upx;
+	color: #ff2255;
+	margin-right: 20upx;
+}
+
+
+.jz_merchant .contents_porgress .porgress_line {
+	width: 264upx;
+	height: 30upx;
+	border-radius: 20upx;
+	background: #ffe4e6;
+}
+
+.jz_merchant .line_in {
+	height: 30upx;
+	border-radius: 20upx;
+}
+
+.jz_merchant .contents_discountPrice {
+	width: 213upx;
+	height: 44upx;
+	text-align: center;
+	line-height: 44UPX;
+	border-radius: 25upx;
+	background: #fbf3f0;
+	color: #ff2255;
+	font-size: 26upx;
+	margin-bottom: 20upx;
+}
+
+.jz_merchant .price-lf .marketprice {
+	color: #b9b9b9;
+	font-size: 26upx;
+	text-decoration: line-through;
+}
+
+.jz_merchant .price-lf .saleprice {
+	color: #ed0000;
+	font-size: 26upx;
+}
+
+.jz_merchant .price-rt image {
+	width: 64upx;
+	height: 64upx;
+	margin-right: 40upx;
+}
+
+
+
+/* 空购物车 */
+.jz_cart {
+	background: #f5f5f7;
+}
+
+.jz_cart .cart-empty {
+	position: static;
+	height: 800upx;
+}
+
+.jz_cart .cart-empty view image {
+	width: 220upx;
+	height: 220upx;
+}
+
+.jz_cart .cart-empty .cart-empty-title {
+	font-size: 34upx;
+	color: #cdcdcd;
+	margin-top: 10upx;
+	width: auto;
+}
+
+.jz_cart.jz_merchant .lists-wrap {
+	border: 0;
+}
+
+.jz_cart .push_product_title {
+	font-size: 32upx;
+	color: #333333;
+}
+
+.jz_cart.jz_merchant .loadbox {
+	border-top-left-radius: 20upx;
+	border-top-right-radius: 20upx;
+}
+
+
+
+
+/* 有商品购物车 */
+.jz_cart .cart-list .cart-item .uni-flex-item2 input {
+	color: #99999a;
+	align-items: center;
+}
+
+.jz_cart.cart .item-shop {
+	border: 0;
+	border-radius: 0;
+	margin: 0;
+	padding-top: 30upx;
+}
+
+.jz_cart.cart .cart-list .cart-item {}
+
+.jz_cart.cart .cart-list .cart-item .cart-item-left {
+	padding: 20upx 0 40upx 0;
+	border-bottom: 2upx solid #efefef;
+	margin-right: 20upx;
+}
+
+.jz_cart.cart .cart-list {
+	padding-bottom: 90upx;
+	margin-bottom: 0;
+	background: #FFFFFF;
+}
+
+/* 付款成功 */
+.jz_paySuccess {
+	width: 100%;
+	height: auto;
+	background: #f7f7f7;
+}
+
+.jz_paySuccess.jz_merchant .loadbox {
+	border-radius: 20upx;
+}
+
+.jz_paySuccess .paySuccess_header {
+	width: 100%;
+	height: 370upx;
+	background: #ffffff;
+}
+
+.jz_paySuccess .paySuccess_header .payok {
+	font-size: 36upx;
+	font-weight: 600;
+	color: #ed0000;
+	margin-top: 60upx;
+	letter-spacing: 3upx;
+}
+
+.jz_paySuccess .paySuccess_header .payscore {
+	font-size: 24upx;
+	color: #999999;
+	margin-top: 10upx;
+	font-weight: 600;
+	letter-spacing: 3upx;
+
+}
+
+.jz_paySuccess .paySuccess_header .payarrive {
+	font-size: 24upx;
+	color: #999999;
+	margin-top: 10upx;
+	font-weight: 600;
+	letter-spacing: 3upx;
+}
+
+.jz_paySuccess .paySuccess_header .paybtns {
+	margin-top: 30upx;
+}
+
+.jz_paySuccess .paySuccess_header .paybtns .lookOrder,
+.goHome {
+	width: 202upx;
+	height: 76upx;
+	border: 1upx solid #d2d2d2;
+	font-size: 28upx;
+	border-radius: 10upx;
+	letter-spacing: 5upx;
+	background: #ea0001;
+	color: #FFFFFF;
+}
+
+.jz_paySuccess .paySuccess_header .paybtns .goHome {
+	margin-left: 20upx;
+}
+
+.jz_paySuccess .paySuccess_footer {
+	padding: 30upx;
+	margin: 22upx 0;
+	background: #FFFFFF;
+}
+
+.commonfont {
+	color: #333333;
+	margin-right: 45upx;
+}
+
+.jz_paySuccess .payaddress {
+	margin: 0;
+}
+
+.jz_paySuccess.jz_merchant .lists-wrap {
+	border: 0;
+	background: #FFFFFF;
+}
+
+.jz_paySuccess .push_product_title {
+	width: 100%;
+	background: #FFFFFF;
+	padding: 30upx 0 0 0;
+	position: relative;
+}
+
+.jz_paySuccess .push_product_title .push_title {
+	width: 100%;
+	position: absolute;
+	left: 50%;
+	margin-left: -30upx;
+	color: #333333;
+}
+
+.jz_paySuccess .push_product_title image {
+	width: 100%;
+	height: 48upx;
+}
+
+.jz_paySuccess.jz_merchant .lists-wrap {
+	padding-bottom: 30upx;
+	margin-bottom: 0;
+}
+
+/* 结算中心 */
+.jz_order .footer {
+	width: 100%;
+	padding: 0;
+	height: 86upx;
+	color: #ed0000;
+	padding-left: 30upx;
+	box-sizing: border-box;
+	border: 0;
+}
+
+.jz_order .footer .btn {
+	width: 250upx;
+	height: 86upx;
+	border: 0;
+	border-radius: 0;
+	margin: 0;
+	font-size: 32upx;
+	/* #ifdef H5 */
+	font-size: 32upx;
+	/* #endif */
+}
+
+/* 全部订单 */
+.uni-tab-bar .active {
+	color: #f52f3e;
+}
+
+/* 空收货地址 */
+
+.jz_address {
+	width: 100%;
+	height: 100%;
+}
+
+.jz_address .uni-lists {
+	width: 100%;
+	height: 100%;
+}
+
+.jz_address .uni-lists .addressImg {
+	width: 100%;
+	margin-top: -150upx;
+}
+
+.jz_address .uni-lists .addressImg image {
+	width: 115upx;
+	height: 116upx;
+}
+
+.jz_address .uni-lists .noaddressTitle {
+	color: #999999;
+	font-size: 26upx;
+}
+
+
+.jz_address .uni-lists .addadress {
+	width: 100%;
+	margin-top: 88upx;
+}
+
+.jz_address .uni-lists .addadress image {
+	width: 543upx;
+	height: 96upx;
+}
+
+/* 默认收货地址 */
+.jz_address .addBtn-wrap {
+	width: 100%;
+	/* position: fixed;
+	left: 0;
+	bottom: 36upx; */
+	height: 300upx;
+}
+
+.jz_address .addBtn image {
+	width: 570upx;
+	height: 112upx;
+}
+
+.jz_address .addresslist {
+	margin: 0 40upx;
+}
+
+.jz_address .addressitem {
+	border-bottom: 2upx solid #f1f1f1;
+	padding: 30upx 0;
+}
+
+.jz_address .addressitem .itemleft .leftBtn {
+	width: 72upx;
+	height: 38upx;
+	line-height: 38upx;
+	text-align: center;
+	border: 1upx solid #ed0000;
+	border-radius: 6upx;
+	margin-top: 10upx;
+	color: #ed0000;
+}
+
+.jz_address .addressitem .itemright {
+	margin-right: 20upx;
+	position: relative;
+}
+
+.jz_address .addressitem .itemright .line {
+	position: absolute;
+	top: 50%;
+	margin-top: -25upx;
+	left: -30upx;
+	width: 1upx;
+	height: 50upx;
+	background: #ececec;
+}
+
+.jz_address .addressitem .itemright image {
+	width: 42upx;
+	height: 42upx;
+}
+
+.jz_address .addressitem .itemcenter {
+	width: 400upx;
+}
+
+.jz_address .addressitem .itemcenter .centerAddress {
+	color: #999999;
+	font-size: 26upx;
+	/* #ifdef H5 */
+	font-size: 26upx;
+	/* #endif */
+}
+
+/* 修改收货地址 */
+
+.jz_addressServer .form {
+	background: #FFFFFF;
+	padding-bottom: 0;
+}
+
+.jz_addressServer .add {
+	background: #F4F5F6;
+}
+
+.jz_addressServer .addPeopleImg {
+	width: 37upx;
+	height: 37upx;
+}
+
+.jz_addressServer .uni-common-mt {
+	margin-top: 0;
+}
+
+.jz_addressServer .form .align-items {
+	padding: 0 3%;
+	padding-top: 20upx;
+	background: #FFFFFF;
+}
+
+.jz_addressServer .form .align-items .uni-form-item {
+	padding-left: 0;
+}
+
+
+.jz_addressServer .form .space {
+	height: 27upx;
+	background: #F4F5F6;
+}
+
+.jz_addressServer .form .spaceone {
+	height: 20upx;
+	background: #FFFFFF;
+}
+
+.jz_addressServer .form .align-items .uni-form-item .uni-input {
+	padding-left: 0;
+}
+
+.jz_addressServer .add .btn {
+	width: 536upx;
+	height: 100upx;
+	border-radius: 50upx;
+	margin-top: 76upx;
+}
+
+/* 我的会员 */
+
+.jz_mymember {
+	padding: 40upx 24upx;
+}
+
+.jz_mymember .menberItem {
+	border-radius: 20upx;
+	background: #FFFFFF;
+	padding: 30upx;
+	margin-bottom: 20upx;
+	box-shadow: 0 0 10upx 0 #B2B2B2;
+}
+
+.jz_mymember .menberItemImg image {
+	width: 158upx;
+	height: 158upx;
+	border-image: 10upx;
+}
+
+.jz_mymember .menberItemright {
+	margin-left: 60upx;
+}
+
+.jz_mymember .btnmember image {
+	margin-top: 5upx;
+	width: 162upx;
+	height: 55upx;
+}
+
+/* 我的会员设置 */
+.jz_myfit .myfitmsg {
+	padding: 0 20upx 25upx 20upx;
+}
+
+
+.jz_myfit .myfit-slider {
+	width: 100%;
+	height: 60upx;
+}
+
+
+.jz_myfit .myfit-categrary {
+	width: 100%;
+	height: 160upx;
+	background: #FFFFFF;
+	border-bottom: 2upx solid #d8d8d8;
+}
+
+
+
+.jz_myfit .myfit-product {
+	margin: 20upx 0;
+	padding: 28upx;
+	background: #FFFFFF;
+	border-radius: 30upx;
+	box-shadow: 0 0 15upx 0 #B2B2B2;
+}
+
+
+.jz_myfit .myfit-product .product-img {
+	position: relative;
+	width: 220upx;
+	height: 220upx;
+}
+
+.jz_myfit .myfit-product image {
+	width: 220upx;
+	height: 220upx;
+	display: block;
+}
+
+.jz_myfit .product-contents {
+	margin-left: 20upx;
+	width: 400upx;
+}
+
+.jz_myfit .product-contents .title {
+	font-size: 28upx;
+	color: #505050;
+	margin-bottom: 10upx;
+	align-items: center;
+}
+
+.jz_myfit .product-contents .prices {
+	color: #2e2e2e;
+	font-size: 28upx;
+	justify-content: space-between;
+	margin-bottom: 10upx;
+}
+
+
+.jz_myfit .product-contents .fen {
+	font-size: 28upx;
+}
+
+.jz_myfit .product-contents .fen>text {
+	margin: 0 25upx;
+	color: #ed0000;
+	font-size: 28upx;
+}
+
+.jz_myfit .myfitbtn image {
+	margin-top: 100upx;
+	width: 570upx;
+	height: 112upx;
+}
+
+.jz_myfit.jz_lists scroll-view.uni-swiper-tab {
+	padding-top: 20upx;
+	padding-bottom: 20upx;
+	background: #FFFFFF;
+	margin-bottom: 10upx;
+}
+
+
+/* 商品详情 */
+.jz_product .details {
+	background: #FFFFFF;
+}
+.jz_product .details image {
+	display: block!important;
+}
+.jz_product .attr {
+	margin-bottom: 24upx;
+}
+
+.jz_product .details .problems {
+	padding: 30upx 10upx 0 30upx;
+
+}
+
+.jz_product .details .problems .problem_content {
+	color: #999999;
+}
+
+.jz_product .details .problems:last-child {
+	margin-bottom: 30upx;
+}
+
+/* 开牌申请 */
+.jz_beginCard {
+	width: 100%;
+	height: 100%;
+	background: #F4F5F6;
+}
+
+.jz_beginCard .beginCardImg image {
+	width: 100%;
+	height: 416upx;
+}
+
+.jz_beginCard .beginCard_name {
+	width: 710upx;
+	height: 110upx;
+	background: #FFFFFF;
+	margin-top: 40upx;
+	padding: 30upx 40upx;
+	box-sizing: border-box;
+}
+
+.jz_beginCard .beginCard_name input {
+	/* padding-left: 20upx; */
+	font-size: 26upx;
+}
+
+.jz_beginCard .beginCard_btn {
+	margin: 100upx 0 80upx 0;
+}
+
+
+.jz_beginCard .beginCard_btn image {
+	width: 543upx;
+	height: 103upx;
+}
+
+.jz_beginCard .beginCard-phone {
+	font-size: 22upx;
+}
+
+.jz_beginCard .beginCard-phone image {
+	width: 37upx;
+	height: 35upx;
+	margin-right: 8upx;
+
+}
+
+.jz_beginCard .form {
+	background: none;
+}
+
+.jz_beginCard .phone {
+	font-size: 30upx;
+	letter-spacing: 3upx;
+}
+
+/* 消息 */
+.jz_message .messageItem {
+	width: 100%;
+	padding: 30upx 36upx;
+	border-bottom: 1upx solid #f5f5f7;
+	box-sizing: border-box;
+	background: #FFFFFF;
+}
+
+
+.jz_message .messageItem .itemimg image {
+	width: 74upx;
+	height: 74upx;
+	margin-right: 40upx;
+}
+
+
+.jz_message .messageItem .itemRt {
+	font-size: 14px;
+	font-family: 宋体;
+	color: #e64340;
+}
+
+.jz_message .messageItem .itemcontent .message02 {
+	color: #b9b9b9;
+}
+
+/* 消息二级页面 */
+.jz_messageItem {
+	width: 100%;
+}
+
+.jz_messageItem .list_item {
+	width: 710upx;
+	margin-top: 40upx;
+}
+
+.jz_messageItem .list_item .item_time {
+	width: 330upx;
+	border-radius: 8upx;
+	height: 50upx;
+	background: #cacaca;
+	color: #FFFFFF;
+}
+
+.jz_messageItem .list_item .item_content {
+	width: 100%;
+	padding: 30upx 40upx;
+	background: #FFFFFF;
+	border-radius: 10upx;
+	margin-top: 20upx;
+	margin-bottom: 20upx;
+	box-sizing: border-box;
+}
+
+.jz_messageItem .list_item .item_content image {
+	width: 100%;
+	height: 320upx;
+	margin: 30upx 0;
+}
+
+
+.jz_messageItem .list_item .item_content .content_img {
+	width: 100%;
+	height: 347upx;
+	margin: 20upx 0;
+}
+
+.jz_messageItem .list_item .item_content .content_title {
+	font-size: 30upx;
+}
+
+.jz_messageItem .list_item .item_content .conten_detail {
+	display: -webkit-box;
+	-webkit-box-orient: vertical;
+	-webkit-line-clamp: 2;
+	overflow: hidden;
+	color: #b9b9b9;
+}
+
+
+.jz_messageItem .content_title image.activeimg {
+	width: 34upx;
+	height: 24upx;
+	margin: 0;
+}
+
+/* 登录密码 */
+.jz_loginPassword.jz_beginCard .beginCard_name {
+	padding: 0;
+	padding-left: 34upx;
+}
+
+
+.jz_agent .search {
+	padding: 20upx;
+	background: #FFFFFF;
+}
+
+.jz_agent .search input {
+	border-radius: 8upx;
+	background: #f1f1f1;
+	padding-left: 1em;
+	font-size: 26upx;
+	/* #ifdef H5 */
+	display: block;
+	height: 55upx;
+	/* #endif */
+}
+
+.jz_agent .search .searchBtn {
+	width: 115upx;
+	height: 50upx;
+	background: #c50200;
+	color: #FFFFFF;
+	border-radius: 8upx;
+	margin-left: 20upx;
+}
+
+.jz_agent .search .searchBtn image {
+	width: 30upx;
+	height: 30upx;
+	margin: 0 4upx;
+}
+
+.jz_agent .search .searchBtn text {
+	margin: 0;
+	font-size: 26upx;
+}
+
+.jz_agent .agent-product {
+	margin: 60upx 20upx 0upx 20upx;
+}
+
+.jz_agent .agent-product .agentTop {
+	flex-wrap: wrap;
+}
+
+.jz_agent .agent-product .agentTop:after {
+	width: 224upx;
+	content: " ";
+	height: 0;
+	display: block;
+}
+
+.jz_agent .search-input {
+	position: relative;
+}
+
+.jz_agent .search-input .icon-del.icon {
+	position: absolute;
+	right: 10upx;
+	top: 13upx;
+	z-index: 90000;
+}
+
+.jz_agent .agent-product .agentTop .topItem {
+	width: 224upx;
+	background: #FFFFFF;
+	border-radius: 20upx;
+	margin-bottom: 50upx;
+	padding-bottom: 30upx;
+	font-size: 26upx;
+	position: relative;
+	box-shadow: 0 0 15upx 0 #B2B2B2;
+}
+
+
+.jz_agent .agent-product .agentTop .topItem .topImg {
+	width: 224upx;
+	height: 224upx;
+	margin-bottom: 20upx;
+	border-top-left-radius: 20upx;
+	border-top-right-radius: 20upx;
+
+}
+
+.jz_agent .agent-product .agentTop .topItem .title {
+	position: absolute;
+	width: 100%;
+	left: 0;
+	bottom: 30upx;
+	line-height: 1.4;
+	overflow: hidden;
+	white-space: nowrap;
+	/*规定段落中的文本不进行换行 */
+}
+
+.jz_agent .agent-product .agentTop .topItem .bottomImg {
+	width: 150upx;
+	height: 150upx;
+	margin-bottom: 20upx;
+}
+
+
+
+/* 代理详情 */
+
+.jz_agentProduct .agentProduct-bg {
+	width: 100%;
+}
+
+.jz_agentProduct .agentProduct-bg image {
+	width: 100%;
+	height: 182upx;
+	display: block;
+}
+
+.jz_agentProduct .productcontent {
+	margin: 0 auto;
+	width: 710upx;
+	height: 300upx;
+	border-radius: 20upx;
+	background: #FFFFFF;
+	margin-top: -127upx;
+	z-index: 999;
+	box-shadow: 0 0 15upx 0 #B2B2B2;
+	position: relative;
+}
+
+.jz_agentProduct .content-top {
+	width: 100%;
+	border-bottom: 2upx solid #f3f3f5;
+}
+
+.jz_agentProduct .content-top .img image {
+	width: 160upx;
+	height: 160upx;
+	margin: 20upx;
+}
+
+.jz_agentProduct .content-top .product-title {
+	font-size: 28upx;
+	color: #b9b9b9;
+	margin-bottom: 40upx;
+}
+
+.jz_agentProduct .content-top .salePrice {
+	font-size: 26upx;
+	color: #ed0000;
+	margin-right: 40upx;
+}
+
+.jz_agentProduct .content-top .marketPrice {
+	font-size: 26upx;
+	text-decoration: line-through;
+	color: #b9b9b9;
+}
+
+.jz_agentProduct .content-bottom {
+	padding: 0 20upx;
+}
+
+.jz_agentProduct .content-bottom .search {
+	width: 128upx;
+	height: 56upx;
+	background: #c50200;
+	border-radius: 8upx;
+}
+
+.jz_agentProduct .content-bottom .search image {
+	width: 30upx;
+	height: 30upx;
+	margin-right: 7upx;
+}
+
+.jz_agentProduct .content-bottom input {
+	margin: 0 20upx;
+	background: #f3f3f5;
+	border-radius: 8upx;
+	padding-left: 1em;
+	font-size: 26upx;
+	display: block;
+	height: 55upx;
+}
+
+.jz_agentProduct .content-bottom .search .btnTitle {
+	font-size: 28upx;
+	color: #FFFFFF;
+}
+
+.jz_agentProduct .agentMessage {
+	width: 710upx;
+	margin: 0 auto;
+	background: #FFFFFF;
+	border-radius: 20upx;
+	margin-top: 40upx;
+	box-shadow: 0 0 15upx 0 #B2B2B2;
+}
+
+.jz_agentProduct .agentMessage .messageItem {
+	height: 75upx;
+	border-bottom: 2upx solid #eaeaec;
+}
+
+
+
+.jz_agentProduct .agentMessage .itemTitle {
+	padding-left: 46upx;
+}
+
+.jz_agentProduct .agentMessage .messageItem:last-child {
+	border: 0;
+}
+
+.jz_agentProduct .agentMessage .messageItem .circle {
+	width: 6upx;
+	height: 6upx;
+	background: #999999;
+	border-radius: 50%;
+}
+
+.jz_agentProduct .agentMessage .messageItem>view:first-child {
+	margin-left: 42upx;
+	margin-right: 30upx;
+}
+
+.jz_agentProduct .agentMessage .messageItem>view:last-child {
+	color: #999999;
+}
+
+.jz_agentProduct .agentMessage .messageItem.noMessage {
+	color: #B2B2B2;
+	margin: 10upx 0;
+	color: #949494;
+}
+
+.jz_income .item_top {
+	width: 100%;
+	box-sizing: border-box;
+	position: fixed;
+	top: 0;
+	/* #ifdef H5 */
+	top: 44px;
+	/* #endif */
+	padding: 30upx 50upx;
+	color: #666666;
+	background-color: #F4F5F6;
+}
+
+.jz_income .income_space {
+	height: 140upx;
+}
+
+.jz_income .dataBtn {
+	padding: 0 20upx;
+	height: 80upx;
+	background: #FFFFFF;
+	border-radius: 15upx;
+	font-size: 26upx;
+}
+
+.jz_income .dataBtn image {
+	width: 29upx;
+	height: 29upx;
+	margin-left: 30upx;
+}
+
+
+.jz_income .content_list .content_item_wrap {
+	background: #FFFFFF;
+	width: 100%;
+
+}
+
+.jz_income .content_item {
+	/* margin: 0 20upx; */
+	padding: 40upx 0;
+	border-bottom: 2upx solid #eaeaec;
+}
+
+.jz_income .content_item:last-child {
+	border-bottom: 0;
+}
+
+.jz_income .content_item .lef-img {
+	width: 130upx;
+	height: 110upx;
+}
+
+.jz_income .content_item image {
+	width: 59upx;
+	height: 59upx;
+}
+
+.jz_income .content_item .item_titles {
+	font-size: 28upx;
+	color: #999999;
+}
+
+.jz_income .content_item .item_titles>view:first-child {
+	color: #666666;
+}
+
+.jz_income .item_rt {
+	font-size: 28upx;
+	color: #ed0000;
+	margin-right: 44upx;
+}
+
+
+/* 收益详情 */
+
+.jz_incomeProduct .order-items .order-line.order-btn {
+	height: 40upx !important;
+}
+
+.jz_incomeProduct .incomeAll {
+	margin: 24upx;
+	padding: 24upx;
+	border-radius: 20upx;
+}
+
+/* 积分 */
+
+.jz_myPoint {
+	width: 100%;
+	height: 100%;
+	background: #FFFFFF;
+}
+
+.jz_myPoint .myPint_header {
+	background-color: #ec0a06;
+	color: #fff;
+	padding: 40upx 60upx;
+	font-family: 'Helvetica Neue', Helvetica, sans-serif;
+}
+
+.jz_myPoint .myPint_header .t {
+	line-height: 60upx;
+	height: 60upx;
+	font-size: 34upx;
+}
+
+.jz_myPoint .myPint_header .p {
+	font-size: 60upx;
+	line-height: 100upx;
+	height: 100upx;
+}
+
+.jz_myPoint .uni-list-cell::after {
+	left: 0 !important;
+}
+
+.jz_myPoint .uni-list-cell image {
+	width: 30upx;
+	height: 30upx;
+}
+
+.jz_myPoint .uni-list-cell text {
+	margin-left: 15upx;
+}
+
+.jz_myPoint .myPint_pace {
+	width: 100%;
+	height: 10upx;
+	background-color: #f2f2f2;
+}
+
+.jz_cashout .showBank {
+	width: 450upx;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+}
+
+/* 二维码 */
+.jz_qrCode .qrCode_title {
+	width: 100%;
+	height: 119upx;
+	margin-top: 54upx;
+}
+
+.jz_qrCode .qrCode_title image {
+	width: 564upx;
+	height: 119upx;
+}
+
+.jz_qrCode .logo {
+	width: 120upx;
+	height: 120upx;
+	margin-top: 50upx;
+}
+
+.jz_qrCode .logo image {
+	width: 120upx;
+	height: 120upx;
+	border-radius: 50%;
+}
+
+.jz_qrCode .nickName {
+	color: #ca823c;
+	margin: 20upx 0;
+}
+
+.jz_qrCode .qrCodeImg {
+	width: 336upx;
+	height: 336upx;
+}
+
+.jz_qrCode .qrCodeImg image {
+	width: 336upx;
+	height: 336upx;
+}
+
+/* 申请代理(弹出层) */
+.jz_agentProduct .agencyBtn{
+	width: 128upx;
+	height: 56upx;
+	background: #c50200;
+	font-size: 24upx;
+	color: #FFFFFF!important;
+	margin-left: 0!important;
+	margin-right: 20upx;
+}

+ 1450 - 0
common/uni.css

@@ -0,0 +1,1450 @@
+@font-face {
+	font-family: uniicons;
+	font-weight: normal;
+	font-style: normal;
+	src: url('https://img-cdn-qiniu.dcloud.net.cn/fonts/uni.ttf') format('truetype');
+}
+
+
+
+
+/*通用 */
+
+.uni-flex {
+	display: flex;
+	flex-direction: row;
+}
+
+.uni-flex-item {
+	flex: 1;
+}
+
+.uni-flex-item2 {
+	flex: 2;
+}
+.uni-flex-item3 {
+	flex: 3;
+}
+.uni-flex-item4 {
+	flex: 4;
+}
+.uni-flex-item5 {
+	flex: 5;
+}
+.uni-flex-item6 {
+	flex: 6;
+}
+.uni-flex-item7 {
+	flex: 7;
+}
+.uni-flex-item8 {
+	flex: 8;
+}
+.uni-flex-item9 {
+	flex: 9;
+}
+.uni-row {
+	flex-direction: row;
+}
+.uni-column {
+	flex-direction: column;
+}
+.uni-link{
+	color:#576B95;
+	font-size:26upx;
+}
+.uni-center{
+	text-align:center;
+}
+.uni-inline-item{
+	display: flex;
+	flex-direction: row;
+	align-items:center;
+}
+.uni-inline-item text{
+	margin-right: 20upx;
+}
+.uni-inline-item text:last-child{
+	margin-right: 0upx;
+	margin-left: 20upx;
+}
+
+/* page */
+.uni-page-head{
+	padding:35upx; 
+	text-align: center;
+}
+.uni-page-head-title {
+	display: inline-block;
+	padding: 0 40upx;
+	font-size: 30upx;
+	height: 88upx;
+	line-height: 88upx;
+	color: #BEBEBE;
+	box-sizing: border-box;
+	border-bottom: 2upx solid #D8D8D8;
+}
+.uni-page-body {
+	width: 100%;
+	flex-grow: 1;
+	overflow-x: hidden;
+}
+.uni-padding-wrap{
+	width:690upx;
+	padding:0 30upx;
+}
+.uni-word {
+	text-align: center;
+	padding:200upx 100upx;
+}
+.uni-title {
+	font-size:30upx;
+	font-weight:500;
+	padding:20upx 0;
+	line-height:1.5;
+}
+.uni-text{
+	font-size:28upx;
+}
+.uni-title text{
+	font-size:24upx; 
+	color:#888;
+}
+
+.uni-text-gray{
+	color: #ccc;
+}
+.uni-text-small {
+	font-size:24upx;
+}
+.uni-common-mb{
+	margin-bottom:30upx;
+}
+.uni-common-pb{
+	padding-bottom:30upx;
+}
+.uni-common-pl{
+	padding-left:30upx;
+}
+.uni-common-mt{
+	margin-top:30upx;
+}
+/* 背景色 */
+.uni-bg-red{
+	background:#F76260; color:#FFF;
+}
+.uni-bg-green{
+	background:#09BB07; color:#FFF;
+}
+.uni-bg-blue{
+	background:#007AFF; color:#FFF;
+}
+/* 标题 */
+.uni-h1 {font-size: 80upx; font-weight:700;}
+.uni-h2 {font-size: 60upx; font-weight:700;}
+.uni-h3 {font-size: 48upx; font-weight:700;}
+.uni-h4 {font-size: 36upx; font-weight:700;}
+.uni-h5 {font-size: 28upx; color: #8f8f94;}
+.uni-h6 {font-size: 24upx; color: #8f8f94;}
+.uni-bold{font-weight:bold;}
+
+/* 文本溢出隐藏 */
+.uni-ellipsis {overflow: hidden; white-space: nowrap; text-overflow: ellipsis;}
+
+/* 竖向百分百按钮 */
+.uni-btn-v{
+	padding:10upx 0;
+}
+.uni-btn-v button{margin:20upx 0;}
+
+/* 表单 */
+.uni-form-item{
+	display:flex;
+	width:100%;
+	padding:10upx 0;
+}
+.uni-form-item .title{
+	padding:10upx 25upx;
+}
+.uni-label {
+	width: 210upx;
+	word-wrap: break-word;
+	word-break: break-all;
+	text-indent:20upx;
+}
+.uni-input {
+	height: 50upx;
+	padding: 15upx 25upx;
+	line-height:50upx;
+	font-size:28upx;
+	background:#FFF;
+	flex: 1;
+}
+radio-group, checkbox-group{
+	width:100%;
+}
+radio-group label, checkbox-group label{
+	padding-right:20upx;
+}
+.uni-form-item .with-fun{
+	display:flex; 
+	flex-wrap:nowrap; 
+	background:#FFFFFF;
+}
+.uni-form-item .with-fun .uni-icon{
+	width:40px; 
+	height:80upx; 
+	line-height:80upx; 
+	flex-shrink:0;
+}
+
+/* loadmore */
+.uni-loadmore{
+	height:80upx;
+	line-height:80upx;
+	text-align:center;
+	padding-bottom:30upx;
+}
+/*数字角标*/
+.uni-badge,
+.uni-badge-default {
+	font-family: 'Helvetica Neue', Helvetica, sans-serif;
+	font-size: 12px;
+	line-height: 1;
+	display: inline-block;
+	padding: 3px 6px;
+	color: #333;
+	border-radius: 100px;
+	background-color: rgba(0, 0, 0, .15);
+}
+.uni-badge.uni-badge-inverted {
+	padding: 0 5px 0 0;
+	color: #929292;
+	background-color: transparent
+}
+.uni-badge-primary {
+	color: #fff;
+	background-color: #007aff
+}
+.uni-badge-blue.uni-badge-inverted,
+.uni-badge-primary.uni-badge-inverted {
+	color: #007aff;
+	background-color: transparent
+}
+.uni-badge-green,
+.uni-badge-success {
+	color: #fff;
+	background-color: #4cd964;
+}
+.uni-badge-green.uni-badge-inverted,
+.uni-badge-success.uni-badge-inverted {
+	color: #4cd964;
+	background-color: transparent
+}
+.uni-badge-warning,
+.uni-badge-yellow {
+	color: #fff;
+	background-color: #f0ad4e
+}
+.uni-badge-warning.uni-badge-inverted,
+.uni-badge-yellow.uni-badge-inverted {
+	color: #f0ad4e;
+	background-color: transparent
+}
+.uni-badge-danger,
+.uni-badge-red {
+	color: #fff;
+	background-color: #dd524d
+}
+.uni-badge-danger.uni-badge-inverted,
+.uni-badge-red.uni-badge-inverted {
+	color: #dd524d;
+	background-color: transparent
+}
+.uni-badge-purple,
+.uni-badge-royal {
+	color: #fff;
+	background-color: #8a6de9
+}
+.uni-badge-purple.uni-badge-inverted,
+.uni-badge-royal.uni-badge-inverted {
+	color: #8a6de9;
+	background-color: transparent
+}
+
+/*折叠面板 */
+.uni-collapse-content {
+	height: 0;
+	width: 100%;
+	overflow: hidden;
+}
+.uni-collapse-content.uni-active {
+	height: auto;
+}
+
+/*卡片视图 */
+.uni-card {
+	background: #fff;
+	border-radius: 8upx;
+	margin:20upx 0;
+	position: relative;
+	box-shadow: 0 2upx 4upx rgba(0, 0, 0, .3);
+}
+.uni-card-content {
+	font-size: 30upx;
+}
+.uni-card-content.image-view{
+    width: 100%;
+    margin: 0;
+}
+.uni-card-content-inner {
+	position: relative;
+	padding: 30upx;
+}
+.uni-card-footer,
+.uni-card-header {
+	position: relative;
+	display: flex;
+	min-height: 50upx;
+	padding: 20upx 30upx;
+	justify-content: space-between;
+	align-items: center;
+}
+.uni-card-header {
+	font-size: 36upx;
+}
+.uni-card-footer {
+	color: #6d6d72;
+}
+.uni-card-footer:before,
+.uni-card-header:after {
+	position: absolute;
+	top: 0;
+	right: 0;
+	left: 0;
+	height: 2upx;
+	content: '';
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5);
+	background-color: #c8c7cc;
+}
+.uni-card-header:after {
+	top: auto;
+	bottom: 0;
+}
+.uni-card-media {
+	justify-content: flex-start;
+}
+.uni-card-media-logo {
+	height: 84upx;
+	width: 84upx;
+	margin-right: 20upx;
+}
+.uni-card-media-body {
+	height: 84upx;
+	display: flex;
+	flex-direction: column;
+	justify-content: space-between;
+	align-items: flex-start;
+}
+.uni-card-media-text-top {
+	line-height: 36upx;
+	font-size: 34upx;
+}
+.uni-card-media-text-bottom {
+	line-height: 30upx;
+	font-size: 28upx;
+	color: #8f8f94;
+}
+.uni-card-link {
+	color: #007AFF;
+}
+
+/* 列表 */
+.uni-list {
+	background-color: #FFFFFF;
+	position: relative;
+	width: 100%;
+	display: flex;
+	flex-direction: column;
+}
+.uni-list:after {
+	position: absolute;
+	z-index: 10;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	height: 1upx;
+	content: '';
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5);
+	background-color: #c8c7cc;
+}
+.uni-list:before {
+	position: absolute;
+	z-index: 10;
+	right: 0;
+	top: 0;
+	left: 0;
+	height: 1upx;
+	content: '';
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5);
+	background-color: #c8c7cc;
+}
+.uni-list-cell {
+	position: relative;
+	display: flex;
+	flex-direction: row;
+	justify-content: space-between;
+	align-items: center;
+}
+.uni-list-cell-hover {
+	background-color: #eee;
+}
+.uni-list-cell-pd {
+	padding: 22upx 30upx;
+}
+.uni-list-cell-left {
+	font-size:28upx;
+	padding: 0 30upx;
+}
+.uni-list-cell-db,
+.uni-list-cell-right {
+	flex: 1;
+}
+.uni-list-cell:after {
+	position: absolute;
+  z-index: 3;
+	right: 0;
+	bottom: 0;
+	left: 30upx;
+	height: 1upx;
+	content: '';
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5);
+	background-color: #c8c7cc;
+}
+.uni-list .uni-list-cell:last-child:after {
+	height: 0upx;
+}
+.uni-list-cell-last.uni-list-cell:after {
+	height: 0upx;
+}
+.uni-list-cell-divider {
+	position: relative;
+	display: flex;
+	color: #999;
+	background-color: #f7f7f7;
+	padding:15upx 20upx;
+}
+.uni-list-cell-divider:before {
+	position: absolute;
+	right: 0;
+	top: 0;
+	left: 0upx;
+	height: 1upx;
+	content: '';
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5);
+	background-color: #c8c7cc;
+}
+.uni-list-cell-divider:after {
+	position: absolute;
+	right: 0;
+	bottom: 0;
+	left: 0upx;
+	height: 1upx;
+	content: '';
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5);
+	background-color: #c8c7cc;
+}
+.uni-list-cell-navigate {
+	font-size:30upx;
+	padding: 22upx 30upx;
+	line-height: 48upx;
+	position: relative;
+	display: flex;
+	box-sizing: border-box;
+	width: 100%;
+	flex: 1;
+	justify-content: space-between;
+	align-items: center;
+}
+.uni-list-cell-navigate {
+	padding-right: 36upx;
+}
+.uni-navigate-badge {
+	padding-right: 50upx;
+}
+.uni-list-cell-navigate.uni-navigate-right:after {
+	font-family: uniicons;
+	content: '\e583';
+	position: absolute;
+	right: 24upx;
+	top: 50%;
+	color: #bbb;
+	-webkit-transform: translateY(-50%);
+	transform: translateY(-50%);
+}
+.uni-list-cell-navigate.uni-navigate-bottom:after {
+	font-family: uniicons;
+	content: '\e581';
+	position: absolute;
+	right: 24upx;
+	top: 50%;
+	color: #bbb;
+	-webkit-transform: translateY(-50%);
+	transform: translateY(-50%);
+}
+.uni-list-cell-navigate.uni-navigate-bottom.uni-active:after {
+	font-family: uniicons;
+	content: '\e580';
+	position: absolute;
+	right: 24upx;
+	top: 50%;
+	color: #bbb;
+	-webkit-transform: translateY(-50%);
+	transform: translateY(-50%);
+}
+.uni-collapse.uni-list-cell {
+	flex-direction: column;
+}
+.uni-list-cell-navigate.uni-active {
+	background: #eee;
+}
+.uni-list.uni-collapse {
+	box-sizing: border-box;
+	height: 0;
+	overflow: hidden;
+}
+.uni-collapse .uni-list-cell {
+	padding-left: 20upx;
+}
+.uni-collapse .uni-list-cell:after {
+	left: 52upx;
+}
+.uni-list.uni-active {
+	height: auto;
+}
+
+/* 三行列表 */
+.uni-triplex-row {
+	display: flex;
+	flex: 1;
+	width: 100%;
+	box-sizing: border-box;
+	flex-direction: row;
+	padding: 22upx 30upx;
+}
+.uni-triplex-right,
+.uni-triplex-left {
+	display: flex;
+	flex-direction: column;
+}
+.uni-triplex-left {
+	width: 84%;
+}
+.uni-triplex-left .uni-title{
+	padding:8upx 0;
+}
+.uni-triplex-left .uni-text, .uni-triplex-left .uni-text-small{color:#999999;}
+.uni-triplex-right {
+	width: 16%;
+	text-align: right;
+}
+
+/* 图文列表 */
+.uni-media-list {
+	padding: 22upx 30upx;
+	box-sizing: border-box;
+	display: flex;
+	width: 100%;
+	flex-direction: row;
+}
+.uni-navigate-right.uni-media-list {
+	padding-right: 74upx;
+}
+.uni-pull-right {
+	flex-direction: row-reverse;
+}
+.uni-pull-right>.uni-media-list-logo {
+	margin-right: 0upx;
+	margin-left: 20upx;
+}
+.uni-media-list-logo {
+	height: 84upx;
+	width: 84upx;
+	margin-right: 20upx;
+}
+.uni-media-list-logo image {
+	height: 100%;
+	width: 100%;
+}
+.uni-media-list-body {
+	height: 84upx;
+	display: flex;
+	flex: 1;
+	flex-direction: column;
+	justify-content: space-between;
+	align-items: flex-start;
+	overflow: hidden;
+}
+.uni-media-list-text-top {
+	width: 100%;
+	line-height: 36upx;
+	font-size: 30upx;
+}
+.uni-media-list-text-bottom {
+	width: 100%;
+	line-height: 30upx;
+	font-size: 26upx;
+	color: #8f8f94;
+}
+
+/* 九宫格 */
+.uni-grid-9 {
+	background: #f2f2f2;
+	width: 750upx;
+	display: flex;
+	flex-direction: row;
+	flex-wrap: wrap;
+	border-top: 2upx solid #eee;
+}
+.uni-grid-9-item {
+	width: 250upx;
+	height: 200upx;
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+	justify-content: center;
+	border-bottom: 2upx solid;
+	border-right: 2upx solid;
+	border-color: #eee;
+	box-sizing: border-box;
+}
+.no-border-right {
+	border-right: none;
+}
+.uni-grid-9-image {
+	width: 100upx;
+	height: 100upx;
+}
+.uni-grid-9-text {
+	width: 250upx;
+	line-height: 4upx;
+	height: 40upx;
+	text-align: center;
+	font-size: 30upx;
+}
+.uni-grid-9-item-hover {
+	background: rgba(0, 0, 0, 0.1);
+}
+
+/* 上传 */
+.uni-uploader {
+	flex: 1;
+	flex-direction: column;
+}
+.uni-uploader-head {
+	display: flex;
+	flex-direction: row;
+	justify-content: space-between;
+}
+.uni-uploader-info {
+	color: #B2B2B2;
+}
+.uni-uploader-body {
+	margin-top: 16upx;
+}
+.uni-uploader__files {
+	display: flex;
+	flex-direction: row;
+	flex-wrap: wrap;
+}
+.uni-uploader__file {
+	margin: 10upx;
+	width: 210upx;
+	height: 210upx;
+}
+.uni-uploader__img {
+	display: block;
+	width: 210upx;
+	height: 210upx;
+}
+.uni-uploader__input-box {
+	position: relative;
+	margin:10upx;
+	width: 208upx;
+	height: 208upx;
+	border: 2upx solid #D9D9D9;
+}
+.uni-uploader__input-box:before,
+.uni-uploader__input-box:after {
+	content: " ";
+	position: absolute;
+	top: 50%;
+	left: 50%;
+	-webkit-transform: translate(-50%, -50%);
+	transform: translate(-50%, -50%);
+	background-color: #D9D9D9;
+}
+.uni-uploader__input-box:before {
+	width: 4upx;
+	height: 79upx;
+}
+.uni-uploader__input-box:after {
+	width: 79upx;
+	height: 4upx;
+}
+.uni-uploader__input-box:active {
+	border-color: #999999;
+}
+.uni-uploader__input-box:active:before,
+.uni-uploader__input-box:active:after {
+	background-color: #999999;
+}
+.uni-uploader__input {
+	position: absolute;
+	z-index: 1;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+	opacity: 0;
+}
+
+/*问题反馈*/
+.feedback-title {
+	display: flex;
+	flex-direction: row;
+	justify-content: space-between;
+	align-items: center;
+	padding: 20upx;
+	color: #8f8f94;
+	font-size: 28upx;
+}
+.feedback-star-view.feedback-title {
+	justify-content: flex-start;
+	margin: 0;
+}
+.feedback-quick {
+	position: relative;
+	padding-right: 40upx;
+}
+.feedback-quick:after {
+	font-family: uniicons;
+	font-size: 40upx;
+	content: '\e581';
+	position: absolute;
+	right: 0;
+	top: 50%;
+	color: #bbb;
+	-webkit-transform: translateY(-50%);
+	transform: translateY(-50%);
+}
+.feedback-body {
+	background: #fff;
+}
+.feedback-textare {
+	height: 200upx;
+	font-size: 34upx;
+	line-height: 50upx;
+	width: 100%;
+	box-sizing: border-box;
+	padding: 20upx 30upx 0;
+}
+.feedback-input {
+	font-size: 34upx;
+	height: 50upx;
+	min-height: 50upx;
+	padding: 15upx 20upx;
+	line-height: 50upx;
+}
+.feedback-uploader {
+	padding: 22upx 20upx;
+}
+.feedback-star {
+	font-family: uniicons;
+	font-size: 40upx;
+	margin-left: 6upx;
+}
+.feedback-star-view {
+	margin-left: 20upx;
+}
+.feedback-star:after {
+	content: '\e408';
+}
+.feedback-star.active {
+	color: #FFB400;
+}
+.feedback-star.active:after {
+	content: '\e438';
+}
+.feedback-submit {
+	background: #007AFF;
+	color: #FFFFFF;
+	margin: 20upx;
+}
+
+/* input group */
+.uni-input-group {
+	position: relative;
+	padding: 0;
+	border: 0;
+	background-color: #fff;
+}
+
+.uni-input-group:before {
+	position: absolute;
+	top: 0;
+	right: 0;
+	left: 0;
+	height: 2upx;
+	content: '';
+	transform: scaleY(.5);
+	background-color: #c8c7cc;
+}
+
+.uni-input-group:after {
+	position: absolute;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	height: 2upx;
+	content: '';
+	transform: scaleY(.5);
+	background-color: #c8c7cc;
+}
+
+.uni-input-row {
+	position: relative;
+	display: flex;
+	flex-direction: row;
+	font-size:28upx;
+	padding: 22upx 30upx;
+	justify-content: space-between;
+}
+
+.uni-input-group .uni-input-row:after {
+	position: absolute;
+	right: 0;
+	bottom: 0;
+	left: 30upx;
+	height: 2upx;
+	content: '';
+	transform: scaleY(.5);
+	background-color: #c8c7cc;
+}
+
+.uni-input-row label {
+	line-height: 70upx;
+}
+
+/* textarea */
+.uni-textarea{
+	width:100%;
+	background:#FFF;
+}
+.uni-textarea textarea{
+	width:96%;
+	padding:18upx 2%;
+	line-height:1.6;
+	font-size:28upx;
+	height:150upx;
+}
+
+/* tab bar */
+.uni-tab-bar {
+	display: flex;
+	flex: 1;
+	flex-direction: column;
+	overflow: hidden;
+	height: 100%;
+}
+
+.uni-tab-bar .list {
+	width: 750upx;
+	height: 100%;
+}
+
+.uni-swiper-tab {
+	width: 100%;
+	white-space: nowrap;
+	line-height: 100upx;
+	height: 100upx;
+	border-bottom: 1px solid #c8c7cc;
+}
+
+.swiper-tab-list {
+	font-size: 30upx;
+	width: 150upx;
+	display: inline-block;
+	text-align: center;
+	color: #555;
+}
+
+.uni-tab-bar .active {
+	color: #007AFF;
+}
+
+.uni-tab-bar .swiper-box {
+	flex: 1;
+	width: 100%;
+	height: calc(100% - 100upx);
+}
+
+.uni-tab-bar-loading{
+	padding:20upx 0;
+}
+
+/* steps */
+.uni-steps{padding:20upx 30upx; flex-grow: 1; display:flex; flex-wrap:wrap;}
+.uni-steps view{display:flex; flex-wrap:wrap; float:none;}
+.uni-steps .step{width:31.3%; margin:0 1%; flex-wrap:nowrap;}
+.uni-steps .step-circle{width:50upx; height:50upx; border-radius:50upx; background:#F1F1F3; justify-content:center; line-height:50upx; flex-shrink:0; margin-right:15upx; color:#666; font-size:28upx;}
+.uni-steps .step-content{width:100%; height:22upx; border-bottom:1px solid #F1F2F3;}
+.uni-steps .step-title{line-height:50upx; height:50upx; background:#FFFFFF; width:auto; overflow:hidden; padding-right:8upx;}
+.uni-steps .current .step-circle{background:#00B26A; color:#FFFFFF;}
+.uni-steps .current .step-content{border-color:#00B26A;}
+.uni-steps .current .step-title{color:#00B26A;}
+
+/* comment */
+.uni-comment{padding:5rpx 0; display: flex; flex-grow:1; flex-direction: column;}
+.uni-comment-list{flex-wrap:nowrap; padding:10rpx 0; margin:10rpx 0; width:100%; display: flex;}
+.uni-comment-face{width:70upx; height:70upx; border-radius:100%; margin-right:20upx; flex-shrink:0; overflow:hidden;}
+.uni-comment-face image{width:100%; border-radius:100%;}
+.uni-comment-body{width:100%;}
+.uni-comment-top{line-height:1.5em; justify-content:space-between;}
+.uni-comment-top text{color:#0A98D5; font-size:24upx;}
+.uni-comment-date{line-height:38upx; flex-direction:row; justify-content:space-between; display:flex !important; flex-grow:1;}
+.uni-comment-date view{color:#666666; font-size:24upx; line-height:38upx;}
+.uni-comment-content{line-height:1.6em; font-size:28upx; padding:8rpx 0;}
+.uni-comment-replay-btn{background:#FFF; font-size:24upx; line-height:28upx; padding:5rpx 20upx; border-radius:30upx; color:#333 !important; margin:0 10upx;}
+
+/* swiper msg */
+.uni-swiper-msg{width:100%; padding:12rpx 0; flex-wrap:nowrap; display:flex;}
+.uni-swiper-msg-icon{width:50upx; margin-right:20upx;}
+.uni-swiper-msg-icon image{width:100%; flex-shrink:0;}
+.uni-swiper-msg swiper{width:100%; height:50upx;}
+.uni-swiper-msg swiper-item{line-height:50upx;}
+
+/* product */
+.uni-product-list {
+    display: flex;
+    width: 100%;
+    flex-wrap: wrap;
+    flex-direction: row;
+}
+
+.uni-product {
+    padding: 20upx;
+    display: flex;
+    flex-direction: column;
+}
+
+.image-view {
+    height: 330upx;
+    width: 330upx;
+	margin:12upx 0;
+}
+
+.uni-product-image {
+    height: 330upx;
+    width: 330upx;
+}
+
+.uni-product-title {
+    word-break: break-all;
+    display: -webkit-box;
+    overflow: hidden;
+	line-height:1.5;
+    text-overflow: ellipsis;
+    -webkit-box-orient: vertical;
+    -webkit-line-clamp: 2;
+}
+
+.uni-product-price {
+	margin-top:10upx;
+    font-size: 28upx;
+	line-height:1.5;
+    position: relative;
+}
+
+.uni-product-price-original {
+    color: #e80080;
+}
+
+.uni-product-price-favour {
+    color: #888888;
+    text-decoration: line-through;
+    margin-left: 10upx;
+}
+
+.uni-product-tip {
+    position: absolute;
+    right: 10upx;
+    background-color: #ff3333;
+    color: #ffffff;
+    padding: 0 10upx;
+    border-radius: 5upx;
+}
+
+/* timeline */
+.uni-timeline {
+		margin: 35upx 0;
+		display: flex;
+		flex-direction: column;
+		position: relative;
+	}
+
+
+	.uni-timeline-item {
+		display: flex;
+		flex-direction: row;
+		position: relative;
+		padding-bottom: 20upx;
+		box-sizing: border-box;
+		overflow: hidden;
+
+	}
+
+	.uni-timeline-item .uni-timeline-item-keynode {
+		width: 160upx;
+		flex-shrink: 0;
+		box-sizing: border-box;
+		padding-right: 20upx;
+		text-align: right;
+		line-height: 65upx;
+	}
+
+	.uni-timeline-item .uni-timeline-item-divider {
+		flex-shrink: 0;
+		position: relative;
+		width: 30upx;
+		height: 30upx;
+		top: 15upx;
+		border-radius: 50%;
+		background-color: #bbb;
+	}
+
+
+
+	.uni-timeline-item-divider::before,
+	.uni-timeline-item-divider::after {
+		position: absolute;
+		left: 15upx;
+		width: 1upx;
+		height: 100vh;
+		content: '';
+		background: inherit;
+	}
+
+	.uni-timeline-item-divider::before {
+		bottom: 100%;
+	}
+
+	.uni-timeline-item-divider::after {
+		top: 100%;
+	}
+
+
+	.uni-timeline-last-item .uni-timeline-item-divider:after {
+		display: none;
+	}
+
+	.uni-timeline-first-item .uni-timeline-item-divider:before {
+		display: none;
+	}
+
+	.uni-timeline-item .uni-timeline-item-content {
+		padding-left: 20upx;
+	}
+	
+	.uni-timeline-last-item .bottom-border::after{
+		display: none;
+	}
+	
+	.uni-timeline-item-content .datetime{
+		color: #CCCCCC;
+	}
+	
+	/* 自定义节点颜色 */
+	.uni-timeline-last-item .uni-timeline-item-divider{
+		background-color: #1AAD19;
+	}
+  
+  
+/* uni-icon */
+
+.uni-icon {
+	font-family: uniicons;
+	font-size: 24px;
+	font-weight: normal;
+	font-style: normal;
+	line-height: 1;
+	display: inline-block;
+	text-decoration: none;
+	-webkit-font-smoothing: antialiased;
+}
+
+.uni-icon.uni-active {
+	color: #007aff;
+}
+
+.uni-icon-contact:before {
+	content: '\e100';
+}
+
+.uni-icon-person:before {
+	content: '\e101';
+}
+
+.uni-icon-personadd:before {
+	content: '\e102';
+}
+
+.uni-icon-contact-filled:before {
+	content: '\e130';
+}
+
+.uni-icon-person-filled:before {
+	content: '\e131';
+}
+
+.uni-icon-personadd-filled:before {
+	content: '\e132';
+}
+
+.uni-icon-phone:before {
+	content: '\e200';
+}
+
+.uni-icon-email:before {
+	content: '\e201';
+}
+
+.uni-icon-chatbubble:before {
+	content: '\e202';
+}
+
+.uni-icon-chatboxes:before {
+	content: '\e203';
+}
+
+.uni-icon-phone-filled:before {
+	content: '\e230';
+}
+
+.uni-icon-email-filled:before {
+	content: '\e231';
+}
+
+.uni-icon-chatbubble-filled:before {
+	content: '\e232';
+}
+
+.uni-icon-chatboxes-filled:before {
+	content: '\e233';
+}
+
+.uni-icon-weibo:before {
+	content: '\e260';
+}
+
+.uni-icon-weixin:before {
+	content: '\e261';
+}
+
+.uni-icon-pengyouquan:before {
+	content: '\e262';
+}
+
+.uni-icon-chat:before {
+	content: '\e263';
+}
+
+.uni-icon-qq:before {
+	content: '\e264';
+}
+
+.uni-icon-videocam:before {
+	content: '\e300';
+}
+
+.uni-icon-camera:before {
+	content: '\e301';
+}
+
+.uni-icon-mic:before {
+	content: '\e302';
+}
+
+.uni-icon-location:before {
+	content: '\e303';
+}
+
+.uni-icon-mic-filled:before,
+.uni-icon-speech:before {
+	content: '\e332';
+}
+
+.uni-icon-location-filled:before {
+	content: '\e333';
+}
+
+.uni-icon-micoff:before {
+	content: '\e360';
+}
+
+.uni-icon-image:before {
+	content: '\e363';
+}
+
+.uni-icon-map:before {
+	content: '\e364';
+}
+
+.uni-icon-compose:before {
+	content: '\e400';
+}
+
+.uni-icon-trash:before {
+	content: '\e401';
+}
+
+.uni-icon-upload:before {
+	content: '\e402';
+}
+
+.uni-icon-download:before {
+	content: '\e403';
+}
+
+.uni-icon-close:before {
+	content: '\e404';
+}
+
+.uni-icon-redo:before {
+	content: '\e405';
+}
+
+.uni-icon-undo:before {
+	content: '\e406';
+}
+
+.uni-icon-refresh:before {
+	content: '\e407';
+}
+
+.uni-icon-star:before {
+	content: '\e408';
+}
+
+.uni-icon-plus:before {
+	content: '\e409';
+}
+
+.uni-icon-minus:before {
+	content: '\e410';
+}
+
+.uni-icon-circle:before,
+.uni-icon-checkbox:before {
+	content: '\e411';
+}
+
+.uni-icon-close-filled:before,
+.uni-icon-clear:before {
+	content: '\e434';
+}
+
+.uni-icon-refresh-filled:before {
+	content: '\e437';
+}
+
+.uni-icon-star-filled:before {
+	content: '\e438';
+}
+
+.uni-icon-plus-filled:before {
+	content: '\e439';
+}
+
+.uni-icon-minus-filled:before {
+	content: '\e440';
+}
+
+.uni-icon-circle-filled:before {
+	content: '\e441';
+}
+
+.uni-icon-checkbox-filled:before {
+	content: '\e442';
+}
+
+.uni-icon-closeempty:before {
+	content: '\e460';
+}
+
+.uni-icon-refreshempty:before {
+	content: '\e461';
+}
+
+.uni-icon-reload:before {
+	content: '\e462';
+}
+
+.uni-icon-starhalf:before {
+	content: '\e463';
+}
+
+.uni-icon-spinner:before {
+	content: '\e464';
+}
+
+.uni-icon-spinner-cycle:before {
+	content: '\e465';
+}
+
+.uni-icon-search:before {
+	content: '\e466';
+}
+
+.uni-icon-plusempty:before {
+	content: '\e468';
+}
+
+.uni-icon-forward:before {
+	content: '\e470';
+}
+
+.uni-icon-back:before,
+.uni-icon-left-nav:before {
+	content: '\e471';
+}
+
+.uni-icon-checkmarkempty:before {
+	content: '\e472';
+}
+
+.uni-icon-home:before {
+	content: '\e500';
+}
+
+.uni-icon-navigate:before {
+	content: '\e501';
+}
+
+.uni-icon-gear:before {
+	content: '\e502';
+}
+
+.uni-icon-paperplane:before {
+	content: '\e503';
+}
+
+.uni-icon-info:before {
+	content: '\e504';
+}
+
+.uni-icon-help:before {
+	content: '\e505';
+}
+
+.uni-icon-locked:before {
+	content: '\e506';
+}
+
+.uni-icon-more:before {
+	content: '\e507';
+}
+
+.uni-icon-flag:before {
+	content: '\e508';
+}
+
+.uni-icon-home-filled:before {
+	content: '\e530';
+}
+
+.uni-icon-gear-filled:before {
+	content: '\e532';
+}
+
+.uni-icon-info-filled:before {
+	content: '\e534';
+}
+
+.uni-icon-help-filled:before {
+	content: '\e535';
+}
+
+.uni-icon-more-filled:before {
+	content: '\e537';
+}
+
+.uni-icon-settings:before {
+	content: '\e560';
+}
+
+.uni-icon-list:before {
+	content: '\e562';
+}
+
+.uni-icon-bars:before {
+	content: '\e563';
+}
+
+.uni-icon-loop:before {
+	content: '\e565';
+}
+
+.uni-icon-paperclip:before {
+	content: '\e567';
+}
+
+.uni-icon-eye:before {
+	content: '\e568';
+}
+
+.uni-icon-arrowup:before {
+	content: '\e580';
+}
+
+.uni-icon-arrowdown:before {
+	content: '\e581';
+}
+
+.uni-icon-arrowleft:before {
+	content: '\e582';
+}
+
+.uni-icon-arrowright:before {
+	content: '\e583';
+}
+
+.uni-icon-arrowthinup:before {
+	content: '\e584';
+}
+
+.uni-icon-arrowthindown:before {
+	content: '\e585';
+}
+
+.uni-icon-arrowthinleft:before {
+	content: '\e586';
+}
+
+.uni-icon-arrowthinright:before {
+	content: '\e587';
+}
+
+.uni-icon-pulldown:before {
+	content: '\e588';
+}
+
+.uni-icon-scan:before {
+    content: "\e612";
+}

+ 262 - 0
components/s-pull-scroll/README.md

@@ -0,0 +1,262 @@
+# 提示
+后续将不在插件市场更新,组件包和示例请访问github中[s-ui地址](https://github.com/sldt/s-ui)下载
+
+# s-pull-scroll
+
+## 参数说明
+
+``` js
+{
+  // class
+  customClass: {
+    type: String,
+    default: ''
+  },
+  // 是否通过fixed固定高度, 默认true
+  fixed: {
+    type: Boolean,
+    default: true
+  },
+  // 自定义头部时,头部高度(px)
+  headerHeight: {
+    type: [Number, String],
+    default () {
+      return 0;
+    }
+  },
+  // 距顶部(rpx)
+  top: {
+    type: [Number, Array, String],
+    default () {
+      return 0;
+    }
+  },
+  // 自定义底部时,底部高度(px)
+  footerHeight: {
+    type: [Number, String],
+    default () {
+      return 0;
+    }
+  },
+  // 距底部(rpx)
+  bottom: {
+    type: [Number, Array, String],
+    default () {
+      return 0;
+    }
+  },
+  // 是否阻止默认滚动
+  preventTouchmove: {
+    type: Boolean,
+    default: true
+  },
+  // 下拉时文案
+  pullingText: {
+    type: String,
+    default: '下拉刷新'
+  },
+  // 下拉释放时文案
+  loosingText: {
+    type: String,
+    default: '释放刷新'
+  },
+  // 下拉释放后文案
+  downLoadingText: {
+    type: String,
+    default: '正在刷新 ...'
+  },
+  // 上拉加载时文案
+  upLoadingText: {
+    type: String,
+    default: '加载中 ...'
+  },
+  // 是否显示空布局
+  showEmpty: {
+    type: Boolean,
+    default: true
+  },
+  // 刷新或加载数据为空时文案
+  emptyText: {
+    type: String,
+    default: '暂无数据'
+  },
+  // 是否显示下拉刷新成功
+  showDownSuccess: {
+    type: Boolean,
+    default: false
+  },
+  // 下拉刷新成功文案
+  downSuccessText: {
+    type: String,
+    default: '刷新成功'
+  },
+  // 是否显示下拉刷新失败
+  showDownError: {
+    type: Boolean,
+    default: false
+  },
+  // 下拉刷新失败文案
+  downErrorText: {
+    type: String,
+    default: '刷新失败'
+  },
+  // 是否显示上拉加载时失败
+  showUpError: {
+    type: Boolean,
+    default: true
+  },
+  // 上拉加载失败文案
+  upErrorText: {
+    type: String,
+    default: '加载失败,点击重新加载'
+  },
+  // 是否显示上拉加载数据全部完成
+  showUpFinish: {
+    type: Boolean,
+    default: true
+  },
+  // 上拉加载完毕文案
+  upFinishText: {
+    type: String,
+    default: '暂无更多了'
+  },
+  // 下拉配置
+  // 下拉回掉,参数为vm
+  pullDown: Function,
+  // 是否允许下拉刷新
+  enablePullDown: {
+    type: Boolean,
+    default: true
+  },
+  downOffset: {
+    type: Number,
+    default: 100
+  },
+  downFps: {
+    type: Number,
+    default: 40
+  },
+  downMinAngle: {
+    type: Number,
+    default: 45
+  },
+  downInOffsetRate: {
+    type: Number,
+    default: 1
+  },
+  downOutOffsetRate: {
+    type: Number,
+    default: 0.4
+  },
+  downStartTop: {
+    type: Number,
+    default: 100
+  },
+  downBottomOffset: {
+    type: Number,
+    default: 20
+  },
+  // 上拉配置
+  // 上拉回掉,参数为vm
+  pullUp: Function,
+  // 是否允许上拉加载
+  enablePullUp: {
+    type: Boolean,
+    default: true
+  },
+  upOffset: {
+    type: Number,
+    default: 160
+  },
+  // 回到顶部
+  backTop: Boolean,
+  // 滚动距离大于多少rpx时触发
+  backTopOffset: {
+    type: Number,
+    default: 1000
+  }
+}
+```
+
+## 组件vm实例属性,方法说明
+
+``` js
+
+// 分页加载时,当前页数
+pullScroll.page
+
+// 当加载完数据后,可以吊以下4个方法去实现视图对应显示逻辑
+
+pullScroll.success(); // 表示加载成功
+
+pullScroll.error(); // 表示加载失败,显示失败布局,page会减1
+
+pullScroll.empty(); // 表示暂无数据
+
+pullScroll.finish(); // 表示全部加载完毕
+
+// 初始化刷新,page从1开始
+pullScroll.refresh(); // 如有pullDown,则自动触发下拉刷新,如有pullUp,则自动触发pullUp,page从1开始
+```
+
+## 使用方式
+
+#### template
+``` html
+<s-pull-scroll ref="pullScroll" :pullDown="pullDown" :pullUp="loadData">
+  <ul>
+    <li
+      v-for="(item,index) of list"
+      :key="index"
+      style="font-size:30rpx;padding:40rpx;text-align:center;border-bottom:1px solid #aaa"
+    >{{item}}</li>
+  </ul>
+</s-pull-scroll>
+```
+
+#### script
+``` js
+import sPullScroll from '@/s-ui/s-pull-scroll';
+export default {
+  components: {
+    sPullScroll
+  },
+  data () {
+    return {
+      list: []
+    };
+  },
+  methods: {
+    refresh () {
+      this.$nextTick(() => {
+        this.$refs.pullScroll.refresh();
+      });
+    },
+    pullDown (pullScroll) {
+      setTimeout(() => {
+        this.loadData(pullScroll);
+      }, 200);
+    },
+    loadData (pullScroll) {
+      setTimeout(() => {
+        if (pullScroll.page == 1) {
+          this.list = [];
+        }
+        const curList = [];
+        for (let i = this.list.length; i < this.list.length + 20; i++) {
+          curList.push(i);
+        }
+        this.list = this.list.concat(curList);
+        if (this.list.length > 60) {
+          pullScroll.finish();
+        } else {
+          pullScroll.success();
+        }
+      }, 500);
+    }
+  },
+  onLoad () {
+    this.refresh();
+  }
+};
+```

BIN
components/s-pull-scroll/back-top.png


+ 821 - 0
components/s-pull-scroll/index.vue

@@ -0,0 +1,821 @@
+<template>
+  <view class="s-pull-scroll" :class="customClass">
+    <scroll-view
+      :id="scrollId"
+      class="s-pull-scroll-view"
+      :class="{'is-fixed':fixed}"
+      :style="{'padding-top':padTop,'padding-bottom':padBottom,'top':fixedTop,'bottom':fixedBottom}"
+      :scroll-top="scrollTop"
+      :scroll-with-animation="false"
+      :scroll-y="scrollAble"
+      :enable-back-to-top="true"
+      @scroll="scroll"
+      @touchstart="touchstart"
+      @touchmove="touchmove"
+      @touchend="touchend"
+      @touchcancel="touchend"
+    >
+      <view :style="{'transform': translateY, 'transition': transition}">
+        <view
+          class="s-pull-down-wrap"
+          :class="[{'is-success': isShowDownTip && isDownSuccess},{'is-error': isShowDownTip && isDownError}]"
+          :style="{'height':downOffset+'rpx'}"
+        >
+          <view
+            class="s-pull-loading-icon"
+            v-if="!isShowDownTip"
+            :class="{'s-pull-loading-rotate':isDownLoading}"
+            :style="{'transform':downRotate}"
+          ></view>
+          <view>{{downText}}</view>
+        </view>
+
+        <slot></slot>
+
+        <view v-if="isUpLoading" class="s-pull-up-wrap">
+          <view class="s-pull-loading-icon s-pull-loading-rotate"></view>
+          <view>{{upLoadingText}}</view>
+        </view>
+
+        <slot name="empty" v-if="isEmpty && showEmpty">
+          <view class="s-pull-tip-wrap" v-if="emptyText">{{emptyText}}</view>
+        </slot>
+
+        <slot name="up-error" v-else-if="isUpError && showUpError">
+          <view class="s-pull-tip-wrap" v-if="upErrorText" @click="onUpErrorClick">{{upErrorText}}</view>
+        </slot>
+        <slot name="up-finish" v-else-if="isUpFinish && showUpFinish">
+          <view class="s-pull-tip-wrap" v-if="upFinishText">{{upFinishText}}</view>
+        </slot>
+      </view>
+    </scroll-view>
+    <!-- 回到顶部按钮 (fixed元素,需写在scroll-view外面,防止滚动的时候抖动)-->
+    <view
+      class="s-pull-back-top"
+      v-if="backTop"
+      :class="{'is-show':isShowBackTop}"
+      @click="onBackTop"
+    >
+      <slot name="backtop">
+        <view class="default-back-top">
+          <img src="./back-top.png" />
+        </view>
+      </slot>
+    </view>
+  </view>
+</template>
+
+<script>
+
+export default {
+  name: 's-pull-scroll',
+  data () {
+    Object.assign(this, {
+      pullType: '',
+      scrollRealTop: 0, // 滚动条的位置
+      preScrollY: 0,
+      clientNum: 0,
+      isExec: false,
+      scrollHeight: 0,
+      clientHeight: 0,
+      bodyHeight: 0,
+      windowTop: 0, // 可使用窗口的顶部位置
+      windowBottom: 0, // 可使用窗口的底部位置
+      page: 0,
+      startPoint: null,
+      lastPoint: null,
+      startTop: 0,
+      maxTouchmoveY: 0,
+      inTouchend: false,
+      moveTime: 0,
+      moveTimeDiff: 0,
+      movetype: 0,
+      isMoveDown: false
+    });
+    return {
+      scrollId: 's-pull-scroll-view-id-' + Math.random().toString(36).substr(2), // 随机生成mescroll的id(不能数字开头,否则找不到元素)
+      downHight: 0, // 下拉刷新: 容器高度
+      downRotate: 0, // 下拉刷新: 圆形进度条旋转的角度
+      downText: '', // 下拉刷新: 提示的文本
+      isEmpty: false, // 是否显示空布局
+      isShowDownTip: false, // 下拉刷新提示结果
+      isDownSuccess: false, // 下拉刷新成功
+      isDownError: false, // 下拉刷新失败
+      isDownReset: false, // 下拉刷新: 是否显示重置的过渡动画
+      isDownLoading: false, // 下拉刷新: 是否显示加载中
+      isUpLoading: false, // 上拉加载: 是否显示 "加载中..."
+      isUpFinish: false, // 是否加载完毕
+      isUpError: false, // 是否上拉加载出错
+      isShowBackTop: false, // 是否显示回到顶部按钮
+      scrollAble: true, // 是否禁止下滑 (下拉时禁止,避免抖动)
+      scrollTop: 0 // 滚动条的位置
+    };
+  },
+  props: {
+    // class
+    customClass: {
+      type: String,
+      default: ''
+    },
+    // 是否通过fixed固定高度, 默认true
+    fixed: {
+      type: Boolean,
+      default: true
+    },
+    // 自定义头部时,头部高度(px)
+    headerHeight: {
+      type: [Number, String],
+      default () {
+        return 0;
+      }
+    },
+    // 距顶部(rpx)
+    top: {
+      type: [Number, Array, String],
+      default () {
+        return 0;
+      }
+    },
+    // 自定义底部时,底部高度(px)
+    footerHeight: {
+      type: [Number, String],
+      default () {
+        return 0;
+      }
+    },
+    // 距底部(rpx)
+    bottom: {
+      type: [Number, Array, String],
+      default () {
+        return 0;
+      }
+    },
+    // 是否阻止默认滚动
+    preventTouchmove: {
+      type: Boolean,
+      default: true
+    },
+    // 下拉时文案
+    pullingText: {
+      type: String,
+      default: '下拉刷新'
+    },
+    // 下拉释放时文案
+    loosingText: {
+      type: String,
+      default: '释放刷新'
+    },
+    // 下拉释放后文案
+    downLoadingText: {
+      type: String,
+      default: '正在刷新 ...'
+    },
+    // 上拉加载时文案
+    upLoadingText: {
+      type: String,
+      default: '加载中 ...'
+    },
+    // 是否显示空布局
+    showEmpty: {
+      type: Boolean,
+      default: true
+    },
+    // 刷新或加载数据为空时文案
+    emptyText: {
+      type: String,
+      default: '暂无数据'
+    },
+    // 是否显示下拉刷新成功
+    showDownSuccess: {
+      type: Boolean,
+      default: false
+    },
+    // 下拉刷新成功文案
+    downSuccessText: {
+      type: String,
+      default: '刷新成功'
+    },
+    // 是否显示下拉刷新失败
+    showDownError: {
+      type: Boolean,
+      default: false
+    },
+    // 下拉刷新失败文案
+    downErrorText: {
+      type: String,
+      default: '刷新失败'
+    },
+    // 是否显示上拉加载时失败
+    showUpError: {
+      type: Boolean,
+      default: true
+    },
+    // 上拉加载失败文案
+    upErrorText: {
+      type: String,
+      default: '加载失败,点击重新加载'
+    },
+    // 是否显示上拉加载数据全部完成
+    showUpFinish: {
+      type: Boolean,
+      default: true
+    },
+    // 上拉加载完毕文案
+    upFinishText: {
+      type: String,
+      default: '暂无更多了'
+    },
+    // 下拉配置
+    // 下拉回掉,参数为vm
+    pullDown: Function,
+    // 是否允许下拉刷新
+    enablePullDown: {
+      type: Boolean,
+      default: true
+    },
+    downOffset: {
+      type: Number,
+      default: 100
+    },
+    downFps: {
+      type: Number,
+      default: 40
+    },
+    downMinAngle: {
+      type: Number,
+      default: 45
+    },
+    downInOffsetRate: {
+      type: Number,
+      default: 1
+    },
+    downOutOffsetRate: {
+      type: Number,
+      default: 0.4
+    },
+    downStartTop: {
+      type: Number,
+      default: 100
+    },
+    downBottomOffset: {
+      type: Number,
+      default: 20
+    },
+    // 上拉配置
+    // 上拉回掉,参数为vm
+    pullUp: Function,
+    // 是否允许上拉加载
+    enablePullUp: {
+      type: Boolean,
+      default: true
+    },
+    upOffset: {
+      type: Number,
+      default: 160
+    },
+    // 回到顶部
+    backTop: Boolean,
+    // 滚动距离大于多少rpx时触发
+    backTopOffset: {
+      type: Number,
+      default: 1000
+    }
+  },
+  watch: {
+    top () {
+      this.refreshClientHeight();
+    },
+    bottom () {
+      this.refreshClientHeight();
+    },
+    headerHeight () {
+      this.refreshClientHeight();
+    },
+    footerHeight () {
+      this.refreshClientHeight();
+    }
+  },
+  computed: {
+    numTop () {
+      return Number(this.headerHeight || 0) + this.upx2px(this.top);
+    },
+    numBottom () {
+      return Number(this.footerHeight || 0) + this.upx2px(this.bottom);
+    },
+    numBackTopOffset () {
+      return this.upx2px(this.backTopOffset);
+    },
+    numDownBottomOffset () {
+      return this.upx2px(this.downBottomOffset);
+    },
+    numDownStartTop () {
+      return this.upx2px(this.downStartTop);
+    },
+    numDownOffset () {
+      return this.upx2px(this.downOffset);
+    },
+    numUpOffset () {
+      return this.upx2px(this.upOffset);
+    },
+    fixedTop () {
+      return this.fixed ? (this.numTop + this.windowTop) + 'px' : 0;
+    },
+    padTop () {
+      return !this.fixed ? this.numTop + 'px' : 0;
+    },
+    fixedBottom () {
+      return this.fixed ? (this.numBottom + this.windowBottom) + 'px' : 0;
+    },
+    padBottom () {
+      return !this.fixed ? this.numBottom + 'px' : 0;
+    },
+    transition () {
+      return this.isDownReset ? 'transform 300ms' : '';
+    },
+    translateY () {
+      return this.downHight > 0 ? 'translateY(' + this.downHight + 'px)' : '';
+    }
+  },
+  methods: {
+    upx2px (value) {
+      return (Array.isArray(value) ? value : [value]).map(num => uni.upx2px(Number(num || 0))).reduce((a, b) => a + b) || 0;
+    },
+    // 注册列表滚动事件,用于下拉刷新
+    scroll (e) {
+      e = e.detail;
+      // 更新滚动条的位置
+      this.scrollRealTop = e.scrollTop;
+      // 更新滚动内容高度
+      this.scrollHeight = e.scrollHeight;
+      // 向上滑还是向下滑动
+      const isScrollUp = e.scrollTop - this.preScrollY > 0;
+      this.preScrollY = e.scrollTop;
+      // 上滑 && 检查并触发上拉
+      isScrollUp && this.triggerPullUp(true);
+      // 回到顶部功能
+      if (this.backTop) {
+        // 返回顶部按钮的显示隐藏
+        if (e.scrollTop >= this.numBackTopOffset) {
+          this.isShowBackTop = true;
+        } else {
+          this.isShowBackTop = false;
+        }
+      }
+    },
+    // 注册列表touchstart事件,用于下拉刷新
+    touchstart (e) {
+      if (!this.pullDown || !this.enablePullDown) return;
+      this.startPoint = this.getPoint(e); // 记录起点
+      this.startTop = this.scrollRealTop; // 记录此时的滚动条位置
+      this.lastPoint = this.startPoint; // 重置上次move的点
+      this.maxTouchmoveY = this.bodyHeight - this.numDownBottomOffset; // 手指触摸的最大范围(写在touchstart避免body获取高度为0的情况)
+      this.inTouchend = false; // 标记不是touchend
+    },
+    // 注册列表touchmove事件,用于下拉刷新
+    touchmove (e) {
+      if (!this.pullDown || !this.enablePullDown) return;
+      if (!this.startPoint) return;
+      // 节流
+      const t = Date.now();
+      if (this.moveTime && t - this.moveTime < this.moveTimeDiff) { // 小于节流时间,则不处理
+        return;
+      } else {
+        this.moveTime = t;
+        this.moveTimeDiff = 1000 / this.downFps;
+      }
+
+      let scrollRealTop = this.scrollRealTop; // 当前滚动条的距离
+      let curPoint = this.getPoint(e); // 当前点
+
+      let moveY = curPoint.y - this.startPoint.y; // 和起点比,移动的距离,大于0向下拉,小于0向上拉
+
+      // (向下拉&&在顶部) scroll-view在滚动时不会触发touchmove,当触顶/底/左/右时,才会触发touchmove
+      // scroll-view滚动到顶部时,scrollTop不一定为0; 在iOS的APP中scrollTop可能为负数,不一定和startTop相等
+      if (moveY > 0 && (scrollRealTop <= 0 || (scrollRealTop <= this.numDownStartTop && scrollRealTop === this.startTop))) {
+        // 可下拉的条件
+        if (this.pullDown && this.enablePullDown && !this.inTouchend && !this.isDownLoading && !this.isUpLoading) {
+          // 下拉的角度是否在配置的范围内
+          let x = Math.abs(this.lastPoint.x - curPoint.x);
+          let y = Math.abs(this.lastPoint.y - curPoint.y);
+          let z = Math.sqrt(x * x + y * y);
+          if (z !== 0) {
+            let angle = Math.asin(y / z) / Math.PI * 180; // 两点之间的角度,区间 [0,90]
+            if (angle < this.downMinAngle) return; // 如果小于配置的角度,则不往下执行下拉刷新
+          }
+
+          // 如果手指的位置超过配置的距离,则提前结束下拉,避免Webview嵌套导致touchend无法触发
+          if (this.maxTouchmoveY > 0 && curPoint.y >= this.maxTouchmoveY) {
+            this.inTouchend = true; // 标记执行touchend
+            this.touchend(); // 提前触发touchend
+            return;
+          }
+
+          this.preventDefault(e); // 阻止默认事件
+
+          let diff = curPoint.y - this.lastPoint.y; // 和上次比,移动的距离 (大于0向下,小于0向上)
+
+          // 下拉距离  < 指定距离
+          if (this.downHight < this.numDownOffset) {
+            if (this.movetype !== 1) {
+              this.movetype = 1; // 加入标记,保证只执行一次
+              // 下拉的距离进入offset范围内那一刻的回调
+              this.scrollAble = false; // 禁止下拉,避免抖动
+              this.isDownReset = false; // 不重置高度
+              this.isDownLoading = false; // 不显示加载中
+              this.downText = this.pullingText; // 设置文本
+              this.isMoveDown = true; // 标记下拉区域高度改变,在touchend重置回来
+            }
+            this.downHight += diff * this.downInOffsetRate; // 越往下,高度变化越小
+            // 指定距离  <= 下拉距离
+          } else {
+            if (this.movetype !== 2) {
+              this.movetype = 2; // 加入标记,保证只执行一次
+              // 下拉的距离大于offset那一刻的回调
+              this.scrollAble = false; // 禁止下拉,避免抖动
+              this.isDownReset = false; // 不重置高度
+              this.isDownLoading = false; // 不显示加载中
+              this.downText = this.loosingText; // 设置文本
+              this.isMoveDown = true; // 标记下拉区域高度改变,在touchend重置回来
+            }
+            if (diff > 0) { // 向下拉
+              this.downHight += Math.round(diff * this.downOutOffsetRate); // 越往下,高度变化越小
+            } else { // 向上收
+              this.downHight += diff; // 向上收回高度,则向上滑多少收多少高度
+            }
+          }
+          // 设置旋转角度
+          this.downRotate = 'rotate(' + 360 * (this.downHight / this.numDownOffset) + 'deg)';
+        }
+      }
+      // 记录本次移动的点
+      this.lastPoint = curPoint;
+    },
+    // 注册列表touchend事件,用于下拉刷新
+    touchend (e) {
+      if (!this.pullDown || !this.enablePullDown) return;
+      // 如果下拉区域高度已改变,则需重置回来
+      if (this.isMoveDown) {
+        if (this.downHight >= this.numDownOffset) {
+          // 符合触发刷新的条件
+          this.triggerPullDown();
+        } else {
+          // 不符合的话 则重置
+          this.downHight = 0;
+          this.scrollAble = true; // 开启下拉
+          this.isDownReset = true; // 重置高度
+          this.isDownLoading = false; // 不显示加载中
+        }
+        this.movetype = 0;
+        this.isMoveDown = false;
+      } else if (this.scrollRealTop === this.startTop) { // 到顶/左/右/底的滑动事件
+        const isScrollUp = this.getPoint(e).y - this.startPoint.y < 0; // 和起点比,移动的距离,大于0向下拉,小于0向上拉
+        // 上滑 && 检查并触发上拉
+        isScrollUp && this.triggerPullUp(true);
+      }
+    },
+    preventDefault (e) {
+      // 小程序不支持e.preventDefault
+      // app的bounce只能通过配置pages.json的style.app-plus.bounce为"none"来禁止
+      // cancelable:是否可以被禁用; defaultPrevented:是否已经被禁用
+      if (e && e.cancelable && !e.defaultPrevented) e.preventDefault();
+    },
+    // 点击回到顶部的按钮回调
+    onBackTop () {
+      this.isShowBackTop = false; // 回到顶部按钮需要先隐藏,再执行回到顶部,避免闪动
+      this.scrollTo(0); // 执行回到顶部
+    },
+    // 点击失败重新加载
+    onUpErrorClick () {
+      this.isUpError = false;
+      if (this.pullType === 'down') {
+        this.triggerPullDown();
+      } else if (this.pullType === 'up') {
+        this.triggerPullUp();
+      }
+    },
+    scrollTo (y) {
+      this.scrollTop = this.scrollRealTop;
+      this.$nextTick(() => {
+        this.scrollTop = y;
+      });
+    },
+    /* 根据点击滑动事件获取第一个手指的坐标 */
+    getPoint (e) {
+      if (!e) {
+        return {
+          x: 0,
+          y: 0
+        };
+      }
+      if (e.touches && e.touches[0]) {
+        return {
+          x: e.touches[0].pageX,
+          y: e.touches[0].pageY
+        };
+      } else if (e.changedTouches && e.changedTouches[0]) {
+        return {
+          x: e.changedTouches[0].pageX,
+          y: e.changedTouches[0].pageY
+        };
+      } else {
+        return {
+          x: e.clientX,
+          y: e.clientY
+        };
+      }
+    },
+    /* 滚动条到底部的距离 */
+    getScrollBottom () {
+      return this.scrollHeight - this.getClientHeight() - this.scrollRealTop;
+    },
+    /* 滚动容器的高度 */
+    getClientHeight (isReal) {
+      let h = this.clientHeight || 0;
+      if (h === 0 && isReal !== true) { // 未获取到容器的高度,可临时取body的高度 (可能会有误差)
+        h = this.bodyHeight;
+      }
+      return h;
+    },
+    /* 更新滚动区域的高度 (使内容不满屏和到底,都可继续翻页) */
+    refreshClientHeight () {
+      if (!this.isExec) {
+        this.isExec = true; // 避免多次获取
+        this.$nextTick(() => { // 确保dom已渲染
+          uni.createSelectorQuery().in(this).select('#' + this.scrollId).boundingClientRect(data => {
+            this.isExec = false;
+            if (data) {
+              this.clientHeight = data.height;
+            } else if (this.clientNum != 3) { // 极少部分情况,可能dom还未渲染完毕,递归获取,最多重试3次
+              this.clientNum = this.clientNum == 0 ? 1 : this.clientNum + 1;
+              setTimeout(() => {
+                this.refreshClientHeight();
+              }, this.clientNum * 100);
+            }
+          }).exec();
+        });
+      }
+    },
+    /* 显示下拉进度布局 */
+    showDownLoading () {
+      this.isEmpty = false;
+
+      this.isUpLoading = false;
+      this.isUpError = false;
+      this.isUpFinish = false;
+
+      this.isShowDownTip = false;
+      this.isDownSuccess = false;
+      this.isDownError = false;
+      this.isDownLoading = true; // 显示加载中
+      this.downHight = this.numDownOffset; // 更新下拉区域高度
+      this.scrollAble = true; // 开启下拉
+      this.isDownReset = true; // 重置高度
+      this.downText = this.downLoadingText; // 设置文本
+    },
+    /* 结束下拉刷新 */
+    hideDownLoading () {
+      if (this.isDownLoading) {
+        if (this.isDownSuccess && this.showDownSuccess) {
+          this.downText = this.downSuccessText;
+          this.isShowDownTip = true;
+        } else if (this.isDownError && this.showDownError) {
+          this.downText = this.downErrorText;
+          this.isShowDownTip = true;
+        }
+        if (this.isShowDownTip) {
+          setTimeout(() => {
+            this.downHight = 0;
+            this.isDownReset = true; // 重置高度
+            this.scrollHeight = 0;// 重置滚动区域,使数据不满屏时仍可检查触发翻页
+            setTimeout(() => {
+              this.scrollAble = true; // 开启下拉
+              this.isDownLoading = false; // 不显示加载中
+              this.isShowDownTip = false;
+            }, 300);
+          }, 1000);
+        } else {
+          this.downHight = 0;
+          this.isDownReset = true; // 重置高度
+          this.scrollHeight = 0;// 重置滚动区域,使数据不满屏时仍可检查触发翻页
+          this.scrollAble = true; // 开启下拉
+          this.isDownLoading = false; // 不显示加载中
+          this.isShowDownTip = false;
+        }
+      }
+    },
+    /* 显示上拉加载中 */
+    showUpLoading () {
+      this.isEmpty = false;
+      this.isUpError = false;
+      this.isUpFinish = false;
+      this.isUpLoading = true;
+    },
+    /* 结束上拉加载 */
+    hideUpLoading () {
+      if (this.isUpLoading) {
+        this.$nextTick(() => {
+          this.isUpLoading = false;
+        });
+      }
+    },
+    /* 触发下拉刷新 */
+    triggerPullDown () {
+      if (this.pullDown && this.enablePullDown && !this.isDownLoading && !this.isUpLoading) {
+        // 下拉加载中...
+        this.showDownLoading(); // 下拉刷新中...
+        this.page = 1; // 预先加一页
+        this.pullType = 'down';
+        this.pullDown && this.pullDown.call(this.$parent, this);
+      }
+    },
+    /* 触发上拉加载 */
+    triggerPullUp (isCheck) {
+      if (this.pullUp && this.enablePullUp && !this.isUpLoading && !this.isDownLoading && !this.isUpError && !this.isUpFinish) {
+        // 是否校验在底部; 默认不校验
+        if (isCheck && this.getScrollBottom() > this.numUpOffset) return;
+        // 上拉加载中...
+        this.showUpLoading();
+        this.page++;
+        this.pullType = 'up';
+        this.pullUp && this.pullUp.call(this.$parent, this);
+        // 更新容器的高度
+        this.refreshClientHeight();
+      }
+    },
+    refresh () {
+      this.page = 0;
+      this.isEmpty = false;
+      this.isDownSuccess = false;
+      this.isDownError = false;
+      this.isShowDownTip = false;
+      this.isUpError = false;
+      this.isUpFinish = false;
+      this.isDownLoading = false;
+      this.isUpLoading = false;
+      this.scrollTo(0);
+      if (this.pullDown && this.enablePullDown) {
+        this.triggerPullDown();
+      } else if (this.pullUp && this.enablePullUp) {
+        this.triggerPullUp();
+      }
+    },
+    /* 正常加载成功 */
+    success () {
+      if (this.isDownLoading) {
+        this.isDownSuccess = true;
+      }
+      this.hideDownLoading();
+      this.hideUpLoading();
+    },
+    /* 加载失败 */
+    error () {
+      if (this.page > 0) {
+        this.page--;
+      }
+      if (this.isDownLoading) {
+        this.isDownError = true;
+      } else if (this.isUpLoading) {
+        this.isUpError = true;
+      }
+      this.hideDownLoading();
+      this.hideUpLoading();
+    },
+    /* 没有数据 */
+    empty () {
+      if (this.isDownLoading) {
+        this.isDownSuccess = true;
+      }
+      this.isEmpty = true;
+      this.isUpFinish = true;
+      this.hideDownLoading();
+      this.hideUpLoading();
+    },
+    /* 全部数据加载完毕 */
+    finish () {
+      this.hideDownLoading();
+      this.hideUpLoading();
+      this.isUpFinish = true;
+    }
+  },
+  created () {
+    // 设置高度
+    uni.getSystemInfo({
+      success: (res) => {
+        if (res.windowTop) this.windowTop = res.windowTop; // 修正app和H5的top值
+        if (res.windowBottom) this.windowBottom = res.windowBottom; // 修正app和H5的bottom值
+        this.bodyHeight = res.windowHeight;// 使down的bottomOffset生效
+      }
+    });
+  },
+  mounted () {
+    // 设置容器的高度
+    this.refreshClientHeight = this.refreshClientHeight.bind(this);
+    uni.onWindowResize(this.refreshClientHeight);
+    this.refreshClientHeight();
+
+    this.$el && this.$el.addEventListener && this.$el.addEventListener('touchmove', e => {
+      this.preventTouchmove && e.preventDefault();
+    });
+  },
+  beforeDestroy () {
+    uni.offWindowResize(this.refreshClientHeight);
+  }
+};
+</script>
+
+<style lang="scss">
+.s-pull-scroll {
+  height: 100%;
+  -webkit-overflow-scrolling: touch;
+
+  .s-pull-scroll-view {
+    position: relative;
+    width: 100%;
+    height: 100%;
+    overflow-y: auto;
+    box-sizing: border-box;
+  }
+  /* 定位的方式固定高度 */
+  .is-fixed {
+    z-index: 1;
+    position: fixed;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    width: auto;
+    height: auto;
+  }
+  .s-pull-down-wrap,
+  .s-pull-up-wrap,
+  .s-pull-tip-wrap {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    font-size: 28rpx;
+    color: #969799;
+  }
+  .s-pull-down-wrap {
+    position: absolute;
+    left: 0;
+    width: 100%;
+    transform: translateY(-100%);
+  }
+  .s-pull-up-wrap,
+  .s-pull-tip-wrap {
+    height: 100rpx;
+  }
+  /* 旋转loading */
+  .s-pull-loading-icon {
+    width: 30rpx;
+    height: 30rpx;
+    display: inline-block;
+    vertical-align: middle;
+    border-radius: 50%;
+    border: 2rpx solid #969799;
+    border-bottom-color: transparent;
+    box-sizing: border-box;
+    &:first-child {
+      margin-right: 16rpx;
+    }
+  }
+  /* 旋转动画 */
+  .s-pull-loading-rotate {
+    animation: s-pull-loading-rotate 0.6s linear infinite;
+  }
+
+  @keyframes s-pull-loading-rotate {
+    0% {
+      transform: rotate(0deg);
+    }
+
+    100% {
+      transform: rotate(360deg);
+    }
+  }
+
+  /* 回到顶部的按钮 */
+  .s-pull-back-top {
+    position: relative;
+    z-index: 99;
+    opacity: 0;
+    pointer-events: none;
+    transition: opacity 0.3s linear;
+    &.is-show {
+      opacity: 1;
+      pointer-events: auto;
+    }
+  }
+  .default-back-top {
+    position: fixed;
+    right: 20rpx;
+    bottom: calc(var(--window-bottom) + 25rpx);
+
+    img {
+      width: 72rpx;
+      height: 72rpx;
+      border-radius: 50%;
+    }
+  }
+}
+</style>

+ 30 - 0
components/uLi-load-more/readme.md

@@ -0,0 +1,30 @@
+### LoadMore 加载更多来源于 官方组件 做了降低开销处理 仅供大家自定义参考使用
+
+用于列表中,做滚动加载使用,展示 loading 的各种状态,组件名:``uLi-load-more``
+
+**使用方式:**
+
+在 ``script`` 中引用组件 
+
+```javascript
+import uLiLoadMore from "@/components/uLi-load-more/uLi-load-more.vue"
+export default {
+    components: {uLiLoadMore}
+}
+```
+
+在 ``template`` 中使用组件
+
+```html
+<uLi-load-more status="loading"></uLi-load-more>
+```
+
+**属性说明:**
+
+|属性名		|类型|默认值	|说明|
+|---|----|---|---|
+|status	|String	|more|loading 的状态,可选值:more(loading前)、loading(loading中)、noMore(没有更多了)|
+|show-icon	|Boolean	|true|是否显示 loading 图标|
+|color	|String	|#777777|图标和文字颜色	|
+|content-text	|Object	|```{contentdown: "上拉显示更多",contentrefresh: "正在加载...",contentnomore: "没有更多数据了"}```|各状态文字说明|
+

+ 88 - 0
components/uLi-load-more/uLi-load-more.vue

@@ -0,0 +1,88 @@
+<template>
+	<view class="uni-load-more">
+		<view class="uni-load-more__img" v-if="status === 'loading' && showIcon"><view class="loadingView" :style="{ color: color }">&#xeacd;</view></view>
+		<text class="uni-load-more__text" :style="{ color: color }">
+			{{ status === 'more' ? contentText.contentdown : status === 'loading' ? contentText.contentrefresh : contentText.contentnomore }}
+		</text>
+	</view>
+</template>
+
+<script>
+export default {
+	name: 'uLi-load-more',
+	props: {
+		status: {
+			//上拉的状态:more-loading前;loading-loading中;noMore-没有更多了
+			type: String,
+			default: 'loading'
+		},
+		showIcon: {
+			type: Boolean,
+			default: true
+		},
+		color: {
+			type: String,
+			default: '#777777'
+		},
+		contentText: {
+			type: Object,
+			default() {
+				return {
+					contentdown: '上拉显示更多',
+					contentrefresh: '正在加载...',
+					contentnomore: '没有更多数据了'
+				};
+			}
+		}
+	},
+	data() {
+		return {};
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+@font-face {
+	font-family: 'iconfont';
+	src: url('https://at.alicdn.com/t/font_1288772_8nmx02hevxl.ttf') format('truetype');
+}
+
+.loadingView {
+	font-family: iconfont;
+	line-height: 1;
+	font-size: 40upx;
+	animation: rotate 3s linear infinite; //linear// 意思就是匀速的运动   infinite// 就是无限滚动的意思
+}
+
+@keyframes rotate {
+	from {
+		transform: rotate(0deg);
+	}
+	to {
+		transform: rotate(360deg);
+	}
+}
+
+.uni-load-more {
+	display: flex;
+	flex-direction: row;
+	height: 80upx;
+	align-items: center;
+	justify-content: center;
+
+	&__text {
+		font-size: 28upx;
+		color: $uni-text-color-grey;
+	}
+
+	&__img {
+		height: 24px;
+		width: 24px;
+		margin-right: 10px;
+		line-height: 1;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
+}
+</style>

+ 245 - 0
components/uni-swipe-action-item/bindingx.js

@@ -0,0 +1,245 @@
+const BindingX = uni.requireNativePlugin('bindingx');
+const dom = uni.requireNativePlugin('dom');
+const animation = uni.requireNativePlugin('animation');
+
+export default {
+	data() {
+		return {
+			right: 0,
+			button: [],
+			preventGesture: false
+		}
+	},
+
+	watch: {
+		show(newVal) {
+			if (!this.position || JSON.stringify(this.position) === '{}') return;
+			if (this.autoClose) return
+			if (this.isInAnimation) return
+			if (newVal) {
+				this.open()
+			} else {
+				this.close()
+			}
+		},
+	},
+	created() {
+		if (this.swipeaction.children !== undefined) {
+			this.swipeaction.children.push(this)
+		}
+	},
+	mounted() {
+		this.boxSelector = this.getEl(this.$refs['selector-box-hock']);
+		this.selector = this.getEl(this.$refs['selector-content-hock']);
+		this.buttonSelector = this.getEl(this.$refs['selector-button-hock']);
+		this.position = {}
+		this.x = 0
+		setTimeout(() => {
+			this.getSelectorQuery()
+		}, 200)
+	},
+	beforeDestroy() {
+		if (this.timing) {
+			BindingX.unbind({
+				token: this.timing.token,
+				eventType: 'timing'
+			})
+		}
+		if (this.eventpan) {
+			BindingX.unbind({
+				token: this.eventpan.token,
+				eventType: 'pan'
+			})
+		} 
+		this.swipeaction.children.forEach((item, index) => {
+			if (item === this) {
+				this.swipeaction.children.splice(index, 1)
+			}
+		})
+	},
+	methods: {
+		onClick(index, item) {
+			this.$emit('click', {
+				content: item,
+				index
+			})
+		},
+		touchstart(e) {
+			if (this.isInAnimation) return
+			if (this.stop) return
+			this.stop = true
+			if (this.autoClose) {
+				this.swipeaction.closeOther(this)
+			}
+			let endWidth = this.right
+			let boxStep = `(x+${this.x})`
+			let pageX = `${boxStep}> ${-endWidth} && ${boxStep} < 0?${boxStep}:(x+${this.x} < 0? ${-endWidth}:0)`
+
+			let props = [{
+				element: this.selector,
+				property: 'transform.translateX',
+				expression: pageX
+			}]
+
+			let left = 0
+			for (let i = 0; i < this.options.length; i++) {
+				let buttonSelectors = this.getEl(this.$refs['button-hock'][i]);
+				if (this.button.length === 0 || !this.button[i] || !this.button[i].width) return
+				let moveMix = endWidth - left
+				left += this.button[i].width
+				let step = `(${this.x}+x)/${endWidth}`
+				let moveX = `(${step}) * ${moveMix}`
+				let pageButtonX = `${moveX}&& (x+${this.x} > ${-endWidth})?${moveX}:${-moveMix}`
+				props.push({
+					element: buttonSelectors,
+					property: 'transform.translateX',
+					expression: pageButtonX
+				})
+			}
+
+			this.eventpan = this._bind(this.boxSelector, props, 'pan', (e) => {
+				if (e.state === 'end') {
+					this.x = e.deltaX + this.x;
+					if (this.x < -endWidth) {
+						this.x = -endWidth
+					}
+					if (this.x > 0) {
+						this.x = 0
+					}
+					this.stop = false
+					this.bindTiming();
+				}
+			})
+		},
+		touchend(e) {
+			this.$nextTick(() => {
+				if (this.isopen && !this.isDrag && !this.isInAnimation) {
+					this.close()
+				}
+			})
+		},
+		bindTiming() {
+			if (this.isopen) {
+				this.move(this.x, -this.right)
+			} else {
+				this.move(this.x, -40)
+			}
+		},
+		move(left, value) {
+			if (left >= value) {
+				this.close()
+			} else {
+				this.open()
+			}
+		},
+		/**
+		 * 开启swipe
+		 */
+		open() {
+			this.animation(true)
+		},
+		/**
+		 * 关闭swipe
+		 */
+		close() {
+			this.animation(false)
+		},
+		/**
+		 * 开启关闭动画
+		 * @param {Object} type
+		 */
+		animation(type) {
+			this.isDrag = true
+			let endWidth = this.right
+			let time = 200
+			this.isInAnimation = true;
+
+			let exit = `t>${time}`;
+			let translate_x_expression = `easeOutExpo(t,${this.x},${type?(-endWidth-this.x):(-this.x)},${time})`
+			let props = [{
+				element: this.selector,
+				property: 'transform.translateX',
+				expression: translate_x_expression
+			}]
+
+			let left = 0
+			for (let i = 0; i < this.options.length; i++) {
+				let buttonSelectors = this.getEl(this.$refs['button-hock'][i]);
+				if (this.button.length === 0 || !this.button[i] || !this.button[i].width) return
+				let moveMix = endWidth - left
+				left += this.button[i].width
+				let step = `${this.x}/${endWidth}`
+				let moveX = `(${step}) * ${moveMix}`
+				let pageButtonX = `easeOutExpo(t,${moveX},${type ? -moveMix + '-' + moveX: 0 + '-' + moveX},${time})`
+				props.push({
+					element: buttonSelectors,
+					property: 'transform.translateX',
+					expression: pageButtonX
+				})
+			}
+
+			this.timing = BindingX.bind({
+				eventType: 'timing',
+				exitExpression: exit,
+				props: props
+			}, (e) => {
+				if (e.state === 'end' || e.state === 'exit') {
+					this.x = type ? -endWidth : 0
+					this.isInAnimation = false;
+
+					this.isopen = this.isopen || false
+					if (this.isopen !== type) {
+						this.$emit('change', type)
+					}
+					this.isopen = type
+					this.isDrag = false
+				}
+			});
+		},
+		/**
+		 * 绑定  BindingX
+		 * @param {Object} anchor
+		 * @param {Object} props
+		 * @param {Object} fn
+		 */
+		_bind(anchor, props, eventType, fn) {
+			return BindingX.bind({
+				anchor,
+				eventType,
+				props
+			}, (e) => {
+				typeof(fn) === 'function' && fn(e)
+			});
+		},
+		/**
+		 * 获取ref
+		 * @param {Object} el
+		 */
+		getEl(el) {
+			return el.ref
+		},
+		/**
+		 * 获取节点信息
+		 */
+		getSelectorQuery() {
+			dom.getComponentRect(this.$refs['selector-content-hock'], (data) => {
+				if (this.position.content) return
+				this.position.content = data.size
+			})
+			for (let i = 0; i < this.options.length; i++) {
+				dom.getComponentRect(this.$refs['button-hock'][i], (data) => {
+					if (!this.button) {
+						this.button = []
+					}
+					if (this.options.length === this.button.length) return
+					this.button.push(data.size)
+					this.right += data.size.width
+					if (this.autoClose) return
+					if (this.show) {
+						this.open()
+					}
+				})
+			}
+		}
+	}
+}

+ 209 - 0
components/uni-swipe-action-item/index.wxs

@@ -0,0 +1,209 @@
+/**
+ * 监听页面内值的变化,主要用于动态开关swipe-action
+ * @param {Object} newValue
+ * @param {Object} oldValue
+ * @param {Object} ownerInstance
+ * @param {Object} instance
+ */
+function sizeReady(newValue, oldValue, ownerInstance, instance) {
+	var state = instance.getState()
+	state.position = JSON.parse(newValue)
+	if (!state.position || state.position.length === 0) return
+	var show = state.position[0].show
+	state.left = state.left || state.position[0].left;
+	// 通过用户变量,开启或关闭
+	if (show) {
+		openState(true, instance, ownerInstance)
+	} else {
+		openState(false, instance, ownerInstance)
+	}
+}
+
+/**
+ * 开始触摸操作
+ * @param {Object} e
+ * @param {Object} ins
+ */
+function touchstart(e, ins) {
+	var instance = e.instance;
+	var state = instance.getState();
+	var pageX = e.touches[0].pageX;
+	// 开始触摸时移除动画类
+	instance.removeClass('ani');
+	var owner = ins.selectAllComponents('.button-hock')
+	for (var i = 0; i < owner.length; i++) {
+		owner[i].removeClass('ani');
+	}
+	// state.position = JSON.parse(instance.getDataset().position);
+	state.left = state.left || state.position[0].left;
+	// 获取最终按钮组的宽度
+	state.width = pageX - state.left;
+	ins.callMethod('closeSwipe')
+}
+
+/**
+ * 开始滑动操作
+ * @param {Object} e
+ * @param {Object} ownerInstance
+ */
+function touchmove(e, ownerInstance) {
+	var instance = e.instance;
+	var disabled = instance.getDataset().disabled
+	var state = instance.getState()
+	// fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复
+	disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false;
+
+	if (disabled) return
+	var pageX = e.touches[0].pageX;
+	move(pageX - state.width, instance, ownerInstance)
+}
+
+/**
+ * 结束触摸操作
+ * @param {Object} e
+ * @param {Object} ownerInstance
+ */
+function touchend(e, ownerInstance) {
+	var instance = e.instance;
+	var disabled = instance.getDataset().disabled
+	var state = instance.getState()
+
+	// fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复
+	disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false;
+
+	if (disabled){
+		return
+	}
+	// 滑动过程中触摸结束,通过阙值判断是开启还是关闭
+	// fixed by mehaotian 定时器解决点击按钮,touchend 触发比 click 事件时机早的问题 ,主要是 ios13
+	// setTimeout(()=>{
+		
+	// },50)
+	moveDirection(state.left, -40, instance, ownerInstance)
+}
+
+/**
+ * 设置移动距离
+ * @param {Object} value
+ * @param {Object} instance
+ * @param {Object} ownerInstance
+ */
+function move(value, instance, ownerInstance) {
+	var state = instance.getState()
+	// 获取可滑动范围
+	var x = Math.max(-state.position[1].width, Math.min((value), 0));
+	state.left = x;
+	instance.setStyle({
+		transform: 'translateX(' + x + 'px)',
+		'-webkit-transform': 'translateX(' + x + 'px)'
+	})
+	// 折叠按钮动画
+	buttonFold(x, instance, ownerInstance)
+}
+
+/**
+ * 移动方向判断
+ * @param {Object} left
+ * @param {Object} value
+ * @param {Object} ownerInstance
+ * @param {Object} ins
+ */
+function moveDirection(left, value, ins, ownerInstance) {
+	var state = ins.getState()
+	var position = state.position
+	var isopen = state.isopen
+	if (!position[1].width) {
+		openState(false, ins, ownerInstance)
+		return
+	}
+	// 如果已经是打开状态,进行判断是否关闭,还是保留打开状态
+	if (isopen) {
+		if (-left <= position[1].width) {
+			openState(false, ins, ownerInstance)
+		} else {
+			openState(true, ins, ownerInstance)
+		}
+		return
+	}
+	// 如果是关闭状态,进行判断是否打开,还是保留关闭状态
+	if (left <= value) {
+		openState(true, ins, ownerInstance)
+	} else {
+		openState(false, ins, ownerInstance)
+	}
+}
+
+/**
+ * 设置按钮移动距离
+ * @param {Object} value
+ * @param {Object} instance
+ * @param {Object} ownerInstance
+ */
+function buttonFold(value, instance, ownerInstance) {
+	var ins = ownerInstance.selectAllComponents('.button-hock');
+	var state = instance.getState();
+	var position = state.position;
+	var arr = [];
+	var w = 0;
+	for (var i = 0; i < ins.length; i++) {
+		if (!ins[i].getDataset().button) return
+		var btnData = JSON.parse(ins[i].getDataset().button)
+
+		// fix by mehaotian TODO 在 app-vue 中,字符串转对象,需要转两次,这里先这么兼容
+		if (typeof(btnData) === 'string') {
+			btnData = JSON.parse(btnData)
+		}
+
+		var button = btnData[i] && btnData[i].width || 0
+		w += button
+		arr.push(-w)
+		// 动态计算按钮组每个按钮的折叠动画移动距离
+		var distance = arr[i - 1] + value * (arr[i - 1] / position[1].width)
+		if (i != 0) {
+			ins[i].setStyle({
+				transform: 'translateX(' + distance + 'px)',
+			})
+		}
+	}
+}
+
+/**
+ * 开启状态
+ * @param {Boolean} type
+ * @param {Object} ins
+ * @param {Object} ownerInstance
+ */
+function openState(type, ins, ownerInstance) {
+	var state = ins.getState()
+	var position = state.position
+	if (state.isopen === undefined) {
+		state.isopen = false
+	}
+	// 只有状态有改变才会通知页面改变状态
+	if (state.isopen !== type) {
+		// 通知页面,已经打开
+		ownerInstance.callMethod('change', {
+			open: type
+		})
+	}
+	// 设置打开和移动状态
+	state.isopen = type
+
+
+	// 添加动画类
+	ins.addClass('ani');
+	var owner = ownerInstance.selectAllComponents('.button-hock')
+	for (var i = 0; i < owner.length; i++) {
+		owner[i].addClass('ani');
+	}
+	// 设置最终移动位置
+	move(type ? -position[1].width : 0, ins, ownerInstance)
+
+}
+
+module.exports = {
+	sizeReady: sizeReady,
+	touchstart: touchstart,
+	touchmove: touchmove,
+	touchend: touchend
+}

+ 160 - 0
components/uni-swipe-action-item/mpalipay.js

@@ -0,0 +1,160 @@
+export default {
+	data() {
+		return {
+			isshow: false,
+			viewWidth: 0,
+			buttonWidth: 0,
+			disabledView: false,
+			x: 0,
+			transition: false
+		}
+	},
+	watch: {
+		show(newVal) {
+			if (this.autoClose) return
+			if (newVal) {
+				this.open()
+			} else {
+				this.close()
+			}
+		},
+	},
+	created() {
+		if (this.swipeaction.children !== undefined) {
+			this.swipeaction.children.push(this)
+		}
+	},
+	beforeDestroy() {
+		this.swipeaction.children.forEach((item, index) => {
+			if (item === this) {
+				this.swipeaction.children.splice(index, 1)
+			}
+		})
+	},
+	mounted() {
+		this.isopen = false
+		this.transition = true
+		setTimeout(() => {
+			this.getQuerySelect()
+		}, 50)
+
+	},
+	methods: {
+		onClick(index, item) {
+			this.$emit('click', {
+				content: item,
+				index
+			})
+		},
+		touchstart(e) {
+			let {
+				pageX,
+				pageY
+			} = e.changedTouches[0]
+			this.transition = false
+			this.startX = pageX
+			if (this.autoClose) {
+				this.swipeaction.closeOther(this)
+			}
+		},
+		touchmove(e) {
+			let {
+				pageX,
+			} = e.changedTouches[0]
+			this.slide = this.getSlide(pageX)
+			if (this.slide === 0) {
+				this.disabledView = false
+			}
+
+		},
+		touchend(e) {
+			this.stop = false
+			this.transition = true
+			if (this.isopen) {
+				if (this.moveX === -this.buttonWidth) {
+					this.close()
+					return
+				}
+				this.move()
+			} else {
+				if (this.moveX === 0) {
+					this.close()
+					return
+				}
+				this.move()
+			}
+		},
+		open() {
+			this.x = this.moveX
+			this.$nextTick(() => {
+				this.x = -this.buttonWidth
+				this.moveX = this.x
+				
+				if(!this.isopen){
+					this.isopen = true
+					this.$emit('change', true)
+				}
+			})
+		},
+		close() {
+			this.x = this.moveX
+			this.$nextTick(() => {
+				this.x = 0
+				this.moveX = this.x
+				if(this.isopen){
+					this.isopen = false
+					this.$emit('change', false)
+				}
+			})
+		},
+		move() {
+			if (this.slide === 0) {
+				this.open()
+			} else {
+				this.close()
+			}
+		},
+		onChange(e) {
+			let x = e.detail.x
+			this.moveX = x
+			if (x >= this.buttonWidth) {
+				this.disabledView = true
+				this.$nextTick(() => {
+					this.x = this.buttonWidth
+				})
+			}
+		},
+		getSlide(x) {
+			if (x >= this.startX) {
+				this.startX = x
+				return 1
+			} else {
+				this.startX = x
+				return 0
+			}
+
+		},
+		getQuerySelect() {
+			const query = uni.createSelectorQuery().in(this);
+			query.selectAll('.viewWidth-hook').boundingClientRect(data => {
+
+				this.viewWidth = data[0].width
+				this.buttonWidth = data[1].width
+				this.transition = false
+				this.$nextTick(() => {
+					this.transition = true
+				})
+
+				if (!this.buttonWidth) {
+					this.disabledView = true
+				}
+
+				if (this.autoClose) return
+				if (this.show) {
+					this.open()
+				}
+			}).exec();
+
+		}
+	}
+}

+ 158 - 0
components/uni-swipe-action-item/mpother.js

@@ -0,0 +1,158 @@
+// #ifdef APP-NVUE
+const dom = weex.requireModule('dom');
+// #endif
+export default {
+	data() {
+		return {
+			uniShow: false,
+			left: 0
+		}
+	},
+	computed: {
+		moveLeft() {
+			return `translateX(${this.left}px)`
+		}
+	},
+	watch: {
+		show(newVal) {
+			if (!this.position || JSON.stringify(this.position) === '{}') return;
+			if (this.autoClose) return
+			if (newVal) {
+				this.$emit('change', true)
+				this.open()
+			} else {
+				this.$emit('change', false)
+				this.close()
+			}
+		}
+	},
+	mounted() {
+		this.position = {}
+		if (this.swipeaction.children !== undefined) {
+			this.swipeaction.children.push(this)
+		}
+		setTimeout(() => {
+			this.getSelectorQuery()
+		}, 100)
+	},
+	beforeDestoy() {
+		this.swipeaction.children.forEach((item, index) => {
+			if (item === this) {
+				this.swipeaction.children.splice(index, 1)
+			}
+		})
+	},
+	methods: {
+		onClick(index, item) {
+			this.$emit('click', {
+				content: item,
+				index
+			})
+			this.close()
+		},
+		touchstart(e) {
+			const {
+				pageX
+			} = e.touches[0]
+			if (this.disabled) return
+			const left = this.position.content.left
+			if (this.autoClose) {
+				this.swipeaction.closeOther(this)
+			}
+			this.width = pageX - left
+			if (this.isopen) return
+			if (this.uniShow) {
+				this.uniShow = false
+				this.isopen = true
+				this.openleft = this.left + this.position.button.width
+			}
+		},
+		touchmove(e, index) {
+			if (this.disabled) return
+			const {
+				pageX
+			} = e.touches[0]
+			this.setPosition(pageX)
+		},
+		touchend() {
+			if (this.disabled) return
+			if (this.isopen) {
+				this.move(this.openleft, 0)
+				return
+			}
+			this.move(this.left, -40)
+		},
+		setPosition(x, y) {
+			if (!this.position.button.width) {
+				return
+			}
+			// this.left = x - this.width
+			this.setValue(x - this.width)
+		},
+		setValue(value) {
+			// 设置最大最小值
+			this.left = Math.max(-this.position.button.width, Math.min(parseInt(value), 0))
+			this.position.content.left = this.left
+			if (this.isopen) {
+				this.openleft = this.left + this.position.button.width
+			}
+		},
+		move(left, value) {
+			if (left >= value) {
+				this.$emit('change', false)
+				this.close()
+			} else {
+				this.$emit('change', true)
+				this.open()
+			}
+		},
+		open() {
+			this.uniShow = true
+			this.left = -this.position.button.width
+			this.setValue(-this.position.button.width)
+		},
+		close() {
+			this.uniShow = true
+			this.setValue(0)
+			setTimeout(() => {
+				this.uniShow = false
+				this.isopen = false
+			}, 300)
+		},
+		getSelectorQuery() {
+			// #ifndef APP-NVUE
+			const views = uni.createSelectorQuery()
+				.in(this)
+			views
+				.selectAll('.selector-query-hock')
+				.boundingClientRect(data => {
+					this.position.content = data[1]
+					this.position.button = data[0]
+					if (this.autoClose) return
+					if (this.show) {
+						this.open()
+					} else {
+						this.close()
+					}
+				})
+				.exec()
+			// #endif
+			// #ifdef APP-NVUE
+			dom.getComponentRect(this.$refs['selector-content-hock'], (data) => {
+				if (this.position.content) return
+				this.position.content = data.size
+			})
+			dom.getComponentRect(this.$refs['selector-button-hock'], (data) => {
+				if (this.position.button) return
+				this.position.button = data.size
+				if (this.autoClose) return
+				if (this.show) {
+					this.open()
+				} else {
+					this.close()
+				}
+			})
+			// #endif
+		}
+	}
+}

+ 95 - 0
components/uni-swipe-action-item/mpwxs.js

@@ -0,0 +1,95 @@
+export default {
+	data() {
+		return {
+			position: [],
+			button: []
+		}
+	},
+	computed: {
+		pos() {
+			return JSON.stringify(this.position)
+		},
+		btn() {
+			return JSON.stringify(this.button)
+		}
+	},
+	watch: {
+		show(newVal) {
+			if (this.autoClose) return
+			let valueObj = this.position[0]
+			if (!valueObj) {
+				this.init()
+				return
+			}
+			valueObj.show = newVal
+			this.$set(this.position, 0, valueObj)
+		}
+	},
+	created() {
+		if (this.swipeaction.children !== undefined) {
+			this.swipeaction.children.push(this)
+		}
+	},
+	mounted() {
+		this.init()
+
+	},
+	beforeDestroy() {
+		this.swipeaction.children.forEach((item, index) => {
+			if (item === this) {
+				this.swipeaction.children.splice(index, 1)
+			}
+		})
+	},
+	methods: {
+		init() {
+			
+			setTimeout(() => {
+				this.getSize()
+				this.getButtonSize()
+			}, 50)
+		},
+		closeSwipe(e) {
+			if (!this.autoClose) return
+			this.swipeaction.closeOther(this)
+		},
+		
+		change(e) {
+			this.$emit('change', e.open)
+			let valueObj = this.position[0]
+			if (valueObj.show !== e.open) {
+				valueObj.show = e.open
+				this.$set(this.position, 0, valueObj)
+			}
+		},
+		onClick(index, item) {
+			this.$emit('click', {
+				content: item,
+				index
+			})
+		},
+		getSize() {
+			const views = uni.createSelectorQuery().in(this)
+			views
+				.selectAll('.selector-query-hock')
+				.boundingClientRect(data => {
+					if (this.autoClose) {
+						data[0].show = false
+					} else {
+						data[0].show = this.show
+					}
+					this.position = data
+				})
+				.exec()
+		},
+		getButtonSize() {
+			const views = uni.createSelectorQuery().in(this)
+			views
+				.selectAll('.button-hock')
+				.boundingClientRect(data => {
+					this.button = data
+				})
+				.exec()
+		}
+	}
+}

+ 269 - 0
components/uni-swipe-action-item/uni-swipe-action-item.vue

@@ -0,0 +1,269 @@
+<template>
+	<view class="uni-swipe">
+		<!-- 在微信小程序 app vue端 h5 使用wxs 实现-->
+		<!-- #ifdef APP-VUE || MP-WEIXIN || H5 -->
+		<view class="uni-swipe_content">
+			<view :data-disabled="disabled" :data-position="pos" :change:prop="swipe.sizeReady" :prop="pos" class="uni-swipe_move-box selector-query-hock move-hock"
+			 @touchstart="swipe.touchstart" @touchmove="swipe.touchmove" @touchend="swipe.touchend" @change="change">
+				<view class="uni-swipe_box">
+					<slot />
+				</view>
+				<view ref="selector-button-hock" class="uni-swipe_button-group selector-query-hock move-hock">
+					<view v-for="(item,index) in options" :data-button="btn" :key="index" :style="{
+		          backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD',
+		          fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px'
+		        }"
+					 class="uni-swipe_button button-hock" @click.stop="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',}">{{ item.text }}</text></view>
+				</view>
+			</view>
+		</view>
+		<!-- #endif -->
+
+		<!--  app nvue端 使用 bindingx -->
+		<!-- #ifdef APP-NVUE -->
+		<view ref="selector-box-hock" class="uni-swipe_content" @horizontalpan="touchstart" @touchend="touchend">
+			<view ref="selector-button-hock" class="uni-swipe_button-group selector-query-hock move-hock" :style="{width:right+'px'}">
+				<view ref="button-hock" v-for="(item,index) in options" :key="index" :style="{
+		  backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD',left: right+'px'}"
+				 class="uni-swipe_button " @click.stop="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px'}">{{ item.text }}</text></view>
+			</view>
+			<view ref='selector-content-hock' class="uni-swipe_move-box selector-query-hock">
+				<view class="uni-swipe_box">
+					<slot />
+				</view>
+			</view>
+		</view>
+		<!-- #endif -->
+
+		<!-- 在非 app 端、非微信小程序、支付宝小程序、h5端使用 js -->
+		<!-- #ifndef APP-PLUS || MP-WEIXIN || MP-ALIPAY || H5 -->
+		<view class="uni-swipe_content">
+			<view ref="selector-button-hock" class="uni-swipe_button-group selector-query-hock move-hock">
+				<view v-for="(item,index) in options" :data-button="btn" :key="index" :style="{
+		    backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD',
+		    fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px'
+		  }"
+				 class="uni-swipe_button button-hock" @click.stop="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',}">{{ item.text }}</text></view>
+			</view>
+			<view ref='selector-content-hock' class="selector-query-hock" @touchstart="touchstart" @touchmove="touchmove"
+			 @touchend="touchend" :class="{'ani':uniShow}" :style="{transform:moveLeft}">
+				<view class="uni-swipe_move-box"  >
+					<view class="uni-swipe_box">
+						<slot />
+					</view>
+				</view>
+			</view>
+		</view>
+		<!-- #endif -->
+		<!-- #ifdef MP-ALIPAY -->
+		<view class="uni-swipe-box" @touchstart="touchstart" @touchmove="touchmove" @touchend="touchend">
+			<view class="viewWidth-hook">
+				<movable-area v-if="viewWidth !== 0" class="movable-area" :style="{width:(viewWidth-buttonWidth)+'px'}">
+					<movable-view class="movable-view" direction="horizontal" :animation="!transition" :style="{width:viewWidth+'px'}"
+					 :class="[transition?'transition':'']" :x="x" :disabled="disabledView" @change="onChange">
+						<view class="movable-view-box">
+							<slot></slot>
+						</view>
+					</movable-view>
+				</movable-area>
+			</view>
+			<view ref="selector-button-hock" class="uni-swipe_button-group viewWidth-hook">
+				<view v-for="(item,index) in options" :data-button="btn" :key="index" :style="{
+				  backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD',
+				  fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px'
+				}"
+				 class="uni-swipe_button button-hock" @click.stop="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',}">{{ item.text }}</text></view>
+			</view>
+		</view>
+		<!-- #endif -->
+	</view>
+</template>
+<script src="./index.wxs" module="swipe" lang="wxs"></script>
+<script>
+	// #ifdef APP-VUE|| MP-WEIXIN || H5
+	import mpwxs from './mpwxs'
+	// #endif
+
+	// #ifdef APP-NVUE
+	import bindingx from './bindingx.js'
+	// #endif
+
+	// #ifndef APP-PLUS|| MP-WEIXIN || MP-ALIPAY ||  H5
+	import mixins from './mpother'
+	// #endif
+
+	// #ifdef MP-ALIPAY
+	import mpalipay from './mpalipay'
+	// #endif
+
+	/**
+	 * SwipeActionItem 滑动操作子组件
+	 * @description 通过滑动触发选项的容器
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=181
+	 * @property {Boolean} show = [true|false] 开启关闭组件,auto-close = false 时生效
+	 * @property {Boolean} disabled = [true|false] 是否禁止滑动
+	 * @property {Boolean} autoClose = [true|false] 其他组件开启的时候,当前组件是否自动关闭
+	 * @property {Array} options 组件选项内容及样式
+	 * @event {Function} click 点击选项按钮时触发事件,e = {content,index} ,content(点击内容)、index(下标)
+	 * @event {Function} change 组件打开或关闭时触发,true:开启状态;false:关闭状态
+	 */
+
+	export default {
+		// #ifdef APP-VUE|| MP-WEIXIN||H5
+		mixins: [mpwxs],
+		// #endif
+
+		// #ifdef APP-NVUE
+		mixins: [bindingx],
+		// #endif
+
+		// #ifndef APP-PLUS|| MP-WEIXIN || MP-ALIPAY ||  H5
+		mixins: [mixins],
+		// #endif
+
+		// #ifdef MP-ALIPAY
+		mixins: [mpalipay],
+		// #endif
+
+		props: {
+			/**
+			 * 按钮内容
+			 */
+			options: {
+				type: Array,
+				default () {
+					return []
+				}
+			},
+			/**
+			 * 禁用
+			 */
+			disabled: {
+				type: Boolean,
+				default: false
+			},
+			/**
+			 * 变量控制开关
+			 */
+			show: {
+				type: Boolean,
+				default: false
+			},
+			/**
+			 * 是否自动关闭
+			 */
+			autoClose: {
+				type: Boolean,
+				default: true
+			}
+		},
+		inject: ['swipeaction']
+
+
+	}
+</script>
+<style lang="scss" scoped>
+	.uni-swipe {
+		overflow: hidden;
+	}
+
+	.uni-swipe-box {
+		position: relative;
+		width: 100%;
+	}
+
+	.uni-swipe_content {
+		flex: 1;
+		position: relative;
+	}
+
+	.uni-swipe_move-box {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		position: relative;
+		flex-direction: row;
+	}
+
+	.uni-swipe_box {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		flex-direction: row;
+		width: 100%;
+		flex-shrink: 0;
+		/* #endif */
+		/* #ifdef APP-NVUE */
+		flex: 1;
+		/* #endif */
+		font-size: 14px;
+		background-color: #fff;
+	}
+
+	.uni-swipe_button-group {
+		/* #ifndef APP-VUE|| MP-WEIXIN||H5 */
+		position: absolute;
+		top: 0;
+		right: 0;
+		bottom: 0;
+		z-index: 0;
+		/* #endif */
+		/* #ifndef APP-NVUE */
+		display: flex;
+		flex-shrink: 0;
+		/* #endif */
+		flex-direction: row;
+	}
+
+	.uni-swipe_button {
+		/* #ifdef APP-NVUE */
+		position: absolute;
+		left: 0;
+		top: 0;
+		bottom: 0;
+		/* #endif */
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		justify-content: center;
+		align-items: center;
+		padding: 0 20px;
+	}
+
+	.uni-swipe_button-text {
+		/* #ifndef APP-NVUE */
+		flex-shrink: 0;
+		/* #endif */
+		font-size: 14px;
+	}
+
+	.ani {
+		transition-property: transform;
+		transition-duration: 0.3s;
+		transition-timing-function: cubic-bezier(0.165, 0.84, 0.44, 1);
+	}
+
+	/* #ifdef MP-ALIPAY */
+	.movable-area {
+		width: 300px;
+		height: 100%;
+		height: 45px;
+	}
+
+	.movable-view {
+		position: relative;
+		width: 160%;
+		height: 45px;
+		z-index: 2;
+	}
+	.transition {
+		transition: all 0.3s;
+	}
+
+	.movable-view-box {
+		width: 100%;
+		height: 100%;
+		background-color: #fff;
+	}
+	/* #endif */
+</style>

+ 58 - 0
components/uni-swipe-action/uni-swipe-action.vue

@@ -0,0 +1,58 @@
+<template>
+	<view>
+		<slot></slot>
+	</view>
+</template>
+
+<script>
+	/**
+	 * SwipeAction 滑动操作
+	 * @description 通过滑动触发选项的容器
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=181
+	 */
+	export default {
+		data() {
+			return {};
+		},
+		provide() {
+			return {
+				swipeaction: this
+			}
+		},
+		created() {
+			this.children = []
+		},
+		methods: {
+			closeOther(vm) {
+				let children = this.children
+				children.forEach((item, index) => {
+					if (vm === item) return
+					// 支付宝执行以下操作
+					// #ifdef MP-ALIPAY
+					if (item.isopen) {
+						item.close()
+					}
+					// #endif
+
+					// app vue 端、h5 、微信、支付宝  执行以下操作
+					// #ifdef APP-VUE || H5 || MP-WEIXIN
+					let position = item.position[0]
+					let show = position.show
+					if (show) {
+						position.show = false
+					}
+					// #endif
+
+					// nvue 执行以下操作
+					// #ifdef APP-NVUE || MP-BAIDU || MP-QQ || MP-TOUTIAO
+					item.close()
+					// #endif
+				})
+			}
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 25 - 2
pages.json

@@ -240,7 +240,26 @@
 			"path": "pages/mine/myCar",
 			"style": {
 				"navigationBarTitleText": "我的汽车",
-				"navigationBarTextStyle": "black"
+				"navigationBarTextStyle": "black",
+				 "disableScroll":true
+			}
+		},
+		//我的电动车
+		{
+			"path": "pages/mine/myBike",
+			"style": {
+				"navigationBarTitleText": "我的电动车",
+				"navigationBarTextStyle": "black",
+				 "disableScroll":true
+			}
+		},
+		//汽车通行记录
+		{
+			"path": "pages/mine/carList",
+			"style": {
+				"navigationBarTitleText": "通行记录",
+				"navigationBarTextStyle": "black",
+				 "disableScroll":true
 			}
 		},
 		//绑定新车辆
@@ -282,7 +301,11 @@
 			"path": "pages/mine/family",
 			"style": {
 				"navigationBarTitleText": "我的家人",
-				"navigationBarTextStyle": "black"
+				"navigationBarTextStyle": "black",
+				 "disableScroll":true,
+				  "app-plus":{
+				             "bounce":"none"
+				         }
 			}
 		},
 		//添加家人信息

+ 2 - 0
pages/authentication/selectHouse.vue

@@ -198,6 +198,7 @@
 				this.form.hoodNum = ''
 				this.form.home = ''
 				this.lou = ''
+				this.ceng=''
 				this.hoodNum = '',
 					this.home = ''
 				this.form.houseName = data.item.comtyName
@@ -219,6 +220,7 @@
 			confirmHoodNum(data) {
 				this.form.home = ''
 				this.home = ''
+				this.ceng=''
 				this.form.hoodNum = data.item.name
 				this.hoodNum = data.item.id
 				this.getLouData(this.name, 3,this.hoodNum , '层')

+ 215 - 107
pages/circle/circles.vue

@@ -10,7 +10,7 @@
 		</view>
 		<view class="content">
 			<view class="navTitle" :style="{marginTop:phoneHeight + 'px'}" style="padding-top: 20rpx;">邻里圈</view>
-			<image src="../../static/camera.png" style="width: 39rpx;height: 31rpx;margin-top: 30rpx;margin-left: 688rpx;" @tap="publish()"></image>
+			<image src="../../static/camera.png" style="width: 39rpx;height: 31rpx;margin-top: 30rpx;margin-left: 660rpx;" @tap="publish()"></image>
 		</view>
 		<!-- 邻里圈内容 -->
 		<view class="main">
@@ -18,65 +18,42 @@
 				<view class="item">
 					<!-- 头像 -->
 					<view class="left">
-						<image :src="item.photo" style="width: 86rpx;height:86rpx;"></image>
+						<image src="../../static/qingShao.png" style="width: 86rpx;height:86rpx;"></image>
 					</view>
 					<!-- 发布内容 -->
 					<view class="right">
-						<view class="name">{{item.name}}</view>
+						<view class="name">{{item.createBy}}</view>
 						<view class="text">
 							{{item.content}}
 						</view>
 						<!-- 图片内容 -->
-						<view class="img" v-if="item.imgArr.length==1">
-							<image :src="img" style="width: 246rpx;height: 420rpx;" v-for="(img,index) in item.imgArr" :key="index" @tap="prewImg(item)"></image>
+						<view class="img" v-if="item.photosUrlList.length==1" v-show="item.photosUrlList.length>0">
+							<image :src="img" style="width: 246rpx;height: 420rpx;" v-for="(img,index) in item.photosUrlList" :key="index"
+							 @tap="prewImg(item)"></image>
 						</view>
-						<view class="img" v-else style="display: flex;flex-wrap: wrap;">
-							<image :src="img" style="width:180rpx;height:180rpx;margin-right: 10rpx;margin-bottom: 10rpx;" v-for="(img,index) in item.imgArr"
+						<view class="img" v-else style="display: flex;flex-wrap: wrap;" v-show="item.photosUrlList.length>0">
+							<image :src="img" style="width:180rpx;height:180rpx;margin-right: 10rpx;margin-bottom: 10rpx;" v-for="(img,index) in item.photosUrlList"
 							 :key="index" @tap="prewImg(item,index)"></image>
 						</view>
-						<view style="width: 100%;height: 42rpx;display: flex;justify-content: space-between;margin-bottom:20rpx ;margin-top: 30rpx;position: relative;">
-							<!-- 点赞评论弹窗 -->
-							<view class="dailog" v-show="visible && index==talkIndex">
-								<view class="leftIcon" @tap="clickZan(index,item)">
-									<image src="../../static/circle_icon_heart_nor@2x.png" style="width: 42rpx;height: 37rpx;margin-top: 10rpx;margin-left: 62rpx;"></image>
-									<view class="leftIcon-text" v-show="item.status==1">
-										赞
-									</view>
-									<view class="leftIcon-text" v-show="item.status==0">
-										取消
-									</view>
-								</view>
-								<view class="rightIcon" @tap="talk(item)">
-									<image src="../../static/circle_icon_comment@2x.png" style="width: 42rpx;height: 37rpx;margin-top: 10rpx;margin-left: 62rpx;"></image>
-									<view class="leftIcon-text">
-										评论
-									</view>
-								</view>
+						<!-- 点赞 -->
+						<view style="width: 100%;height: 42rpx;display:flex;position: relative; margin-bottom: 20rpx;">
+							<view class="zanNumber" v-show="item.likenumInt">
+								{{item.likenumInt}}
 							</view>
-							<view class="leftDate">
-								{{item.date}}
+							<view style="width: 42rpx;height: 37rpx;position: absolute;right:82rpx ;" @tap="clickZan(item)">
+								<image src="../../static/circle_icon_heart_set@2x.png" style="width: 100%;height: 100%;"></image>
 							</view>
-							<view class="meau" @tap.stop="openDailog(index)">
-								<image src="../../static/circle_icon_more@2x.png" style="width: 100%;height: 100%;"></image>
+							<!-- 评论 -->
+							<view class="meau" @tap="talk(item.circleId)">
+								<image src="../../static/talk.png" style="width: 100%;height: 100%;"></image>
 							</view>
 						</view>
-						<!-- 点赞 回复列表 -->
-						<view class="list">
-							<view class="zanList">
-								<view style="display: flex;margin-left: 28rpx;margin-top: 28rpx;margin-bottom: 28rpx;padding-right:2rpx;">
-									<image src="../../static/circle_icon_heart_set@2x.png" style="width: 48rpx;height: 37rpx;margin-top: 5rpx;"></image>
-									<view style="margin-left:8rpx ;">{{item.zanList}}</view>
-								</view>
-							</view>
-							<!-- 回复内容 -->
+						<!-- 评论列表 -->
+						<view class="list" v-show="item.commentsList.length>0">
 							<view class="replayContent">
-								<view style="margin-left: 16rpx;margin-top: 10rpx;" v-for="(list,index) in item.talkList" :key="index">
-									<view class="talk" v-if="list.status==1">
-										<text>{{list.name}} :<text>{{list.info}}</text></text>
-									</view>
-									<view class="replay" v-else>
-										<text class="textInfo">{{list.replayName}}</text><text>回复</text>
-										<text class="textInfo">{{list.name}}:</text><text class="textInfo">{{list.info}}</text>
+								<view style="margin-left: 16rpx;margin-top: 10rpx;" v-for="(list,index) in item.commentsList" :key="index">
+									<view class="talk">
+										<text>{{list.comCreateBy}} <text style="color: #333333;font-size: 28rpx;">: {{list.commentConten}}</text></text>
 									</view>
 								</view>
 							</view>
@@ -84,7 +61,16 @@
 					</view>
 				</view>
 			</view>
+			<!-- <uni-load-more :status="status"></uni-load-more> -->
+			<view v-show="isUpLoading" class="s-pull-up-wrap">
+				<view class="s-pull-loading-icon s-pull-loading-rotate"></view>
+				<view>{{upLoadingText}}</view>
+			</view>
+			<view v-show="isUpFinish" class="s-pull-up-wrap">
+				<view class="s-pull-tip-wrap">{{upFinishText}}</view>
+			</view>
 		</view>
+
 		<!-- 评论 -->
 		<!-- :style="{bottom:height==''?0:height + 'rpx' } " -->
 		<view class="talkAbout" v-show="isTalk">
@@ -97,11 +83,19 @@
 		</view>
 	</view>
 </template>
-
 <script>
+	var _self, page = 1 //定义初始页数;
+	import uLiLoadMore from "../../components/uLi-load-more/uLi-load-more.vue"
 	export default {
 		data() {
 			return {
+				circleId: '', //朋友圈Id
+				isUpFinish: false,
+				// 上拉加载时文案
+				upLoadingText: '加载中 ...',
+				upFinishText: '暂无更多了',
+				isUpLoading: false,
+				status: 'more', //上拉状态
 				Url: "http://bpic.588ku.com/element_origin_min_pic/16/10/30/528aa13209e86d5d9839890967a6b9c1.jpg",
 				talkInfo: '', //评论内容
 				talkIndex: 0,
@@ -112,58 +106,93 @@
 				isFouce: false, //判断是否聚焦
 				height: '',
 				//页面数据
-				data: [{
-						photo: '../../static/guarantee_icon_guarantee@2x.png',
-						name: '明灯三千',
-						content: '你是我温柔的归宿,你是我嘴角扬起来',
-						imgArr: ["http://bpic.588ku.com/element_origin_min_pic/16/10/30/528aa13209e86d5d9839890967a6b9c1.jpg"],
-						show: false,
-						date: '49分钟前',
-						status: 1,
-						zanList: "明灯三千,sugar,小飞侠,大尾巴",
-						talkList: [{
-							status: 1,
-							name: '星河',
-							info: '小飞侠来啦~'
-						}, {
-							status: 2,
-							replayName: '星河入梦来',
-							name: '星河',
-							info: '谢谢我的宝贝儿~'
-						}]
-					},
-					{
-						photo: '../../static/guarantee_icon_guarantee@2x.png',
-						name: '明灯',
-						content: '你是我温柔的归宿,你是我嘴角扬起来',
-						imgArr: ["'http://bpic.588ku.com/element_origin_min_pic/16/10/30/54fcef525fa8f6037d180f3c26f3be65.jpg'",
-							"http://bpic.588ku.com/element_origin_min_pic/16/10/30/62e3ca3a02dddb002eff00482078d194.jpg",
-							"http://bpic.588ku.com/element_origin_min_pic/16/10/31/c7167fcfb4ebcd12621c05b0c852e98e.jpg",
-							"http://bpic.588ku.com/element_origin_min_pic/16/10/30/528aa13209e86d5d9839890967a6b9c1.jpg"
-						],
-						show: false,
-						date: '49分钟前',
-						status: 1,
-						zanList: "明灯三千,sugar,小飞侠,大尾巴",
-						talkList: [{
-							status: 1,
-							name: '星河',
-							info: '小飞侠来啦~'
-						}, {
-							status: 2,
-							replayName: '星河入梦来',
-							name: '星河',
-							info: '谢谢我的宝贝儿~'
-						}]
-					},
+				list: [],
+				data: [
+
 				]
 			}
 		},
+		onShow() {
+			this.getData()
+		},
+		onReachBottom() {
+			this.getmorelist();
+		},
+		components: {
+			uLiLoadMore
+		},
 		created() {
 			// 获取状态栏的高度
 			this.phoneHeight = uni.getSystemInfoSync().statusBarHeight
 		},
+		onLoad() {
+			_self = this;
+			this.getData()
+		},
+
 		methods: {
+			//获取列表数据
+			getData() {
+				uni.showLoading({
+					title: '加载中',
+					mask: true
+				})
+				this.http.httpRequest('/wxapplet/prop/comtycircle/list', 'get', {
+					pageNum: page,
+					comtyId: uni.getStorageSync('comtyId'),
+					pageSize: 10,
+				}, true).then((res) => {
+					console.log(res)
+					if (res.code == 0) {
+						this.data = res.data.rows
+						uni.hideLoading()
+					} else {
+						uni.hideLoading()
+						uni.showToast({
+							title: res.msg,
+							'icon': 'none'
+						})
+					}
+				}).catch(() => {
+
+				})
+
+			},
+			//加载更多数据获取
+			getmorelist() {
+				this.isUpLoading = true
+				this.http.httpRequest('/wxapplet/prop/comtycircle/list', 'get', {
+					pageNum: page + 1,
+					comtyId: uni.getStorageSync('comtyId'),
+					pageSize: 10,
+				}, true).then((res) => {
+					console.log(res)
+					if (res.code == 0) {
+						// 判断当前数据是否加载完毕
+						if (this.data.length >= 3) {
+							this.isUpLoading = false
+							this.isUpFinish = true
+							return
+						} else {
+
+							this.isUpFinish = false
+							setTimeout(() => {
+								page++; //每加载一次 页数+1
+								_self.data = _self.data.concat(_self.list); //将数据拼接在一起
+								this.isUpLoading = false
+							}, 500)
+						}
+					} else {
+						uni.showToast({
+							title: res.msg,
+							'icon': 'none'
+						})
+					}
+				}).catch(() => {
+					this.isUpLoading = false
+				})
+
+			},
 			// 预览图片
 			prewImg(item, index) {
 				console.log(item)
@@ -199,18 +228,19 @@
 			// 发送评论
 			send() {
 				this.http.httpRequest('/wxapplet/prop/comment/add', 'post', {
-					circleId: id,
+					circleId: this.circleId,
 					commentConten: this.talkInfo,
 					createBy: uni.getStorageSync('createBy')
 				}, true).then((res) => {
 					if (res.code == 0) {
-
+						setTimeout(() => {
+							this.getData()
+						}, 500)
 					} else {
 						uni.showToast({
 							title: res.msg,
 							'icon': 'none'
 						})
-
 					}
 				})
 				this.isTalk = false
@@ -218,10 +248,10 @@
 				this.talkInfo = ''
 			},
 			// 评论
-			talk() {
+			talk(id) {
+				this.circleId = id
 				this.visible = false
 				this.isTalk = true
-				this.data[this.talkIndex].show = !this.data[this.talkIndex].show
 				this.isFouce = true
 
 			},
@@ -232,15 +262,28 @@
 				// this.data[index].show=!this.data[index].show
 			},
 			//点赞
-			clickZan(index, item) {
-				console.log(item)
-				if (item.status) {
-					this.data[index].status = 0
-				} else {
-					this.data[index].status = 1
-				}
-				this.visible = false
-				this.data[this.talkIndex].show = !this.data[this.talkIndex].show
+			clickZan(item) {
+				this.http.httpRequest('/wxapplet/prop/comtycircle/edit', 'post', {
+					pLikeUserId: item.userId,
+					circleId: item.circleId
+				}, true).then((res) => {
+					console.log(res)
+					if (res.code == 0) {
+						uni.showToast({
+							title: '点赞成功',
+							'icon': 'success'
+						})
+						setTimeout(() => {
+							this.getData()
+						}, 500)
+					} else {
+						uni.showToast({
+							title: res.msg,
+							'icon': 'none'
+						})
+					}
+
+				})
 
 			},
 			// 点击其他地方关闭弹窗
@@ -258,7 +301,17 @@
 	}
 </script>
 
-<style>
+<style lang="scss">
+	.zanNumber {
+		position: absolute;
+		right: 135rpx;
+		font-size: 28rpx;
+		font-family: PingFang SC;
+		font-weight: 400;
+		color: rgba(41, 138, 253, 1);
+		// margin-right: 8rpx;
+	}
+
 	.sendBtn {
 		width: 150rpx;
 		font-size: 28rpx;
@@ -376,8 +429,10 @@
 	}
 
 	.meau {
-		width: 66rpx;
-		height: 42rpx;
+		width: 42rpx;
+		height: 37rpx;
+		position: absolute;
+		right: 0;
 	}
 
 	.leftDate {
@@ -454,4 +509,57 @@
 		color: rgba(255, 255, 255, 1);
 		margin: 0 auto;
 	}
+
+	.s-pull-down-wrap,
+	.s-pull-up-wrap,
+	.s-pull-tip-wrap {
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		font-size: 28rpx;
+		color: #969799;
+	}
+
+	.s-pull-down-wrap {
+		position: absolute;
+		left: 0;
+		width: 100%;
+		transform: translateY(-100%);
+	}
+
+	.s-pull-up-wrap,
+	.s-pull-tip-wrap {
+		height: 100rpx;
+	}
+
+	/* 旋转loading */
+	.s-pull-loading-icon {
+		width: 30rpx;
+		height: 30rpx;
+		display: inline-block;
+		vertical-align: middle;
+		border-radius: 50%;
+		border: 2rpx solid #969799;
+		border-bottom-color: transparent;
+		box-sizing: border-box;
+
+		&:first-child {
+			margin-right: 16rpx;
+		}
+	}
+
+	/* 旋转动画 */
+	.s-pull-loading-rotate {
+		animation: s-pull-loading-rotate 0.6s linear infinite;
+	}
+
+	@keyframes s-pull-loading-rotate {
+		0% {
+			transform: rotate(0deg);
+		}
+
+		100% {
+			transform: rotate(360deg);
+		}
+	}
 </style>

+ 44 - 16
pages/circle/publish.vue

@@ -44,6 +44,7 @@
 						content: this.textarea,
 						photosUrlList: img,
 						createBy: uni.getStorageSync('createBy'),
+						comtyId:uni.getStorageSync('comtyId'),
 					}, true).then((res) => {
 						console.log(res)
 						if (res.code == 0) {
@@ -51,6 +52,12 @@
 								'icon':'success',
 								title:'发表成功'
 							})
+							setTimeout(()=>{
+								uni.switchTab({
+										url:'./circles'
+								})
+							},800)
+								
 						} else {
 							uni.showToast({
 								title: res.msg,
@@ -77,23 +84,44 @@
 					sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
 					// sourceType: ['album'], //从相册选择
 					success: (res) => {
-						res.tempFiles.forEach((item) => {
-							if (this.imgData.length == 9) {
-								uni.showToast({
-									"icon": 'none',
-									title: '最多只能上传九张图片'
-								})
-								return
-							} else {
-								this.imgData.push(item.path)
-							}
-
-
-						})
-					}
+						var successUp = 0; //成功个数
+						var failUp = 0; //失败个数
+						var length = res.tempFilePaths.length; //总共个数
+						var i = 0; //第几个
+						this.uploadDIY(res.tempFilePaths, successUp, failUp, i, length);
+						}
 				});
-			}
-
+			},
+			// 上传图片
+			uploadDIY(filePaths, successUp, failUp, i, length) {
+				wx.uploadFile({
+					filePath: filePaths[i],
+					url: 'https://www.szdeao.com/wxapplet/upload/imgPhoto ', //仅为示例,非真实的接口地址
+					name: 'photo',
+					method: 'post',
+					success: (resp) => {
+						let data =JSON.parse(resp.data)
+						console.log(data)
+						 let reg=/,$/gi;
+						  let str=data.data.imagesPath.replace(reg,"");
+						  this.imgData.push(str)
+						  console.log(this.imgData)
+						successUp++;
+					},
+					fail: (res) => {
+						failUp++;
+					},
+					complete: () => {
+						i++;
+						if (i == length) {
+							
+						} else { //递归调用uploadDIY函数
+							this.uploadDIY(filePaths, successUp, failUp, i, length);
+						}
+					},
+				});
+			
+			},
 		}
 	}
 </script>

+ 28 - 27
pages/complain/index.vue

@@ -40,7 +40,7 @@
 			</view>
 		</scroll>
 		<!-- 底部按钮 -->
-		<button class="btnBox" @tap="myRepairs" >
+		<button class="btnBox" @tap="myRepairs">
 			我要投诉
 		</button>
 	</view>
@@ -51,9 +51,9 @@
 		data() {
 			return {
 				data: [],
-				total:0,//总条数
+				total: 0, //总条数
 				pageNum: 1, //页数
-				pageSize: 3, //每页显示多少条数
+				pageSize: 10, //每页显示多少条数
 			}
 		},
 		onLoad() {
@@ -80,36 +80,34 @@
 					this.http.httpRequest('/wxapplet/owneradvice/list', 'get', {
 						// cardNo: uni.getStorageSync('idNumber'),
 						pageNum: pullScroll.page,
-						pageSize: 3,
+						pageSize: this.pageSize,
 						userId: uni.getStorageSync("userId")
 					}).then((res) => {
-							if(res.code==0){
-								if(this.data.length==res.data.total){
-									return
-								}else{
-									let data =res.data.rows
-									this.data = this.data.concat(data);
-								}
-							}else{
-								uni.showToast({
-									title:res.msg,
-									"icon":'none'
-								})
+						if (res.code == 0) {
+							//判断数据是否加载完
+							if (this.data.length == res.data.total) {
+								pullScroll.finish();
+							} else {
+								pullScroll.success();
+								let data = res.data.rows
+								this.data = this.data.concat(data);
 							}
-					})
-					
-					// 判断数据是否加载完毕
-					if (this.data.length ==this.total) {
+						} else {
+							pullScroll.finish();
+							uni.showToast({
+								title: res.msg,
+								"icon": 'none'
+							})
+						}
+					}).catch(()=>{
 						pullScroll.finish();
-					} else {
-						pullScroll.success();
-					}
+					})
 				}, 500);
 			},
 			// 我的评价
 			myTalk(item) {
 				uni.navigateTo({
-					url: "./evaluateCompalin?id="+item
+					url: "./evaluateCompalin?id=" + item
 				})
 			},
 			// 我要投诉
@@ -118,7 +116,7 @@
 					url: "./wantCompalin"
 				})
 			}
-			
+
 		}
 	}
 </script>
@@ -198,7 +196,7 @@
 		text-align: center;
 		margin-top: 40rpx;
 		margin-left: 446rpx;
-		
+
 	}
 
 	.replayItem {
@@ -230,15 +228,18 @@
 		color: rgba(51, 51, 51, 1);
 		margin-top: 30rpx;
 	}
+
 	.img {
 		width: 100%;
 		margin-top: 10rpx;
 		display: flex;
 		flex-wrap: wrap;
 	}
-	.img image :nth-child(3n){
+
+	.img image :nth-child(3n) {
 		margin-right: none;
 	}
+
 	.name {
 		font-size: 32rpx;
 		font-family: PingFang SC;

+ 49 - 9
pages/complain/wantCompalin.vue

@@ -65,17 +65,57 @@
 		},
 			// 图片上传
 			uploadImg(item) {
-				let that = this
-				uni.chooseImage({
-					count: 3, //默认9
-					sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
-					// sourceType: ['album'], //从相册选择
-					success:(res)=> {
-						console.log(res);
-						this.imgData = res.tempFiles
+				if (this.imgData.length == 3) {
+					uni.showToast({
+						"icon": 'none',
+						title: "最多可以上传三张图片"
+					})
+					return
+				} else {
+					uni.chooseImage({
+						count: 3, //默认9
+						sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
+						// sourceType: ['album'], //从相册选择
+						success: (res) => {
+							console.log(res)
+							var successUp = 0; //成功个数
+							var failUp = 0; //失败个数
+							var length = res.tempFilePaths.length; //总共个数
+							var i = 0; //第几个
+							this.uploadDIY(res.tempFilePaths, successUp, failUp, i, length);
+						},
+					});
+				}
+			},
+			// 上传图片
+			uploadDIY(filePaths, successUp, failUp, i, length) {
+				wx.uploadFile({
+					filePath: filePaths[i],
+					url: 'https://www.szdeao.com/wxapplet/upload/imgPhoto ', //仅为示例,非真实的接口地址
+					name: 'photo',
+					method: 'post',
+					success: (resp) => {
+						let data =JSON.parse(resp.data)
+						console.log(data)
+						 let reg=/,$/gi;
+						  let str=data.data.imagesPath.replace(reg,"");
+						  this.imgData.push(str)
+						  console.log(this.imgData)
+						successUp++;
+					},
+					fail: (res) => {
+						failUp++;
+					},
+					complete: () => {
+						i++;
+						if (i == length) {
+							
+						} else { //递归调用uploadDIY函数
+							this.uploadDIY(filePaths, successUp, failUp, i, length);
+						}
 					},
-					
 				});
+			
 			},
 			// 提交
 			submit(){

+ 75 - 275
pages/family/family.vue

@@ -3,303 +3,115 @@
 		<view class="topImg">
 			<image src="../../static/care_family.png" style="width: 100%;height: 100%;"></image>
 			<view class="topTile">家人关怀</view>
-			<view class="topNum">今天有<text style="font-weight:400;">1</text>条出行异常</view>
+			<view class="topNum">今天有<text style="font-weight:400;">0</text>条出行异常</view>
 		</view>
 		<!-- <view style="margin-top: 30rpx;"> -->
-		<view class="content" >
-			<view style="width:100%;min-height: 280rpx;box-shadow:0px 6px 10px rgba(0,0,0,0.1);" v-for="(allData,index) in data" :key="index">
-				
-			
-			<view class="item" >
-				<view class="leftIcon">
-				</view>
-				<view style="margin-left: 30rpx;display: flex;justify-content: space-between;">
-					<view class="leftDate">
-						{{allData.date}}
-					</view>
-					<view class="right">
-						<view class="rightStatus" v-if="allData.status==1">出行正常</view>
-						<view class="rightStatus" v-else style="color:rgba(231,0,30,1);">出现异常</view>   
-						<view style="width: 30rpx;height: 30rpx;" @tap="seeMore(index)">
-							<image src="../../static/icon_combo@2x.png" style="width: 100%;height:100%;margin-top: 5rpx;" v-show="!allData.show"></image>
-							<image src="../../static/icon_combo_set@2x.png" style="width:28rpx;height:14rpx;margin-top: 5rpx;" v-show="allData.show"></image>
-						</view>
-					</view>
-				</view>
-				<!-- 信息 -->
-				<!-- 默认展示第一条数据 -->
-				<view class="infoBox" v-show="!allData.show" style="border: none;">
-					<view class="name">
-						{{allData.child[0].name}}
-					</view>
-					<view style="width: 100%;display: flex;" v-for="(item,index) in allData.child[0].childInfo" :key="index">
-						<view class="leftIC">
-							<image src="../../static/care_icon_ic_nor@2x.png" style="width:28rpx ;height: 16rpx;" v-if="item.iconStatus==1"></image>
-							<image src="../../static/care_icon_ic_nor@2x.png" style="width:28rpx ;height: 16rpx;" v-else></image>
-						</view>
-						<view class="rightBox">
-							<view style="width: 100%;height: 40rpx;display: flex;justify-content: space-between;" v-for="(list,index) in item.endInfo" :key="index">
-								<view class="midInfo">
-									{{list.info}}
-								</view>
-								<view class="lastDate">
-									{{list.date}}
-								</view>
-							</view>
-						</view>
-					</view>
-				</view>
-				 <!--  -->
-				<!-- 展示更多数据 -->
-				<view class="infoBox" v-for="(childData,index) in allData.child" :key="index" v-show="allData.show">
-					<view class="name">
-						{{childData.name}}
-					</view>
-					<view style="width: 100%;display: flex;" v-for="(item,index) in childData.childInfo" :key="index">
-						<view class="leftIC">
-							<image src="../../static/care_icon_ic_nor@2x.png" style="width:28rpx ;height: 16rpx;" v-if="item.iconStatus==1"></image>
-							<image src="../../static/care_icon_ic_nor@2x.png" style="width:28rpx ;height: 16rpx;" v-else></image>
-						</view>
-						<view class="rightBox">
-							<view style="width: 100%;height: 40rpx;display: flex;justify-content: space-between;" v-for="(list,index) in item.endInfo" :key="index">
-								<view class="midInfo">
-									{{list.info}}
-								</view>
-								<view class="lastDate">
-									{{list.date}}
-								</view>
-							</view>
-						</view>
-					</view>
-				</view>
+		<view class="content" v-for="(item,index) in data" :key="index">
+			<view class="item">
+				<view class="left" style="width: 60rpx;">姓名</view><view  style="height:42rpx;margin-left: 138rpx;">{{item.personName}}</view>
+				<view class="status" v-show="false">出行异常</view>
 			</view>
+			<view class="item">
+				<view class="left">时间</view><view class="right">{{item.passTime}}</view>
+			</view>
+			<view class="item">
+				<view class="left">通过入口</view><view class="right">{{item.deviceName}}</view>
+			</view>
+			<view class="item" style="padding-bottom: 20rpx;">
+				<view class="left">通过类型</view>
+				<view class="right" v-if="item.passType==1">人脸识别</view>
+				<view class="right" v-else-if="item.passType==2">门禁卡</view>
+				<view class="right" v-else-if="item.passType==3">密码开门</view>
+				<view class="right" v-else-if="item.passType==4">app远程开门</view>
+				<view class="right" v-else-if="item.passType==5">人脸与身份证比对</view>
+				<view class="right" v-else-if="item.passType==6">二维码开门</view>
+				<view class="right" v-else-if="item.passType==10">一键开门</view>
+				<view class="right" v-else>其他</view>
 			</view>
 		</view>
-		
-		<!-- </view> -->
-
 	</view>
 </template>
 <script>
 	export default {
 		data() {
 			return {
-				moreIndex:'',
+				moreIndex: '',
 				IsFirst: true, //判断是否显示更多数据
-				data: [
-					{
-					date: '04月29日',
-					status: 1,
-					show:false,
-					child:
-					[{
-						name: '肖',
-						childInfo:[
-							{
-							iconStatus: 1,
-							  endInfo:[{
-								info: '11号楼 2单元门',date:'10:00'
-							}, {
-								info: '07号楼 3单元门',date:'15:00'
-							}]
-						},
-						{
-							iconStatus: 1,
-							  endInfo:[{
-								info: '12号楼 2单元门',date:'20:00'
-							}, ]
-						},
-						]
-					},
-					{
-						name: '哈哈',
-						childInfo:[
-							{
-							iconStatus: 1,
-							  endInfo:[{
-								info: '11号楼 2单元门',date:'10:00'
-							}, {
-								info: '07号楼 3单元门',date:'15:00'
-							}]
-						},
-						]
-					},
-					]
-				},
-				{
-					date: '04月39日',
-					status: 1,
-					show:false,
-					child:
-					[
-						{
-						name: '小赞',
-						childInfo:[
-							{
-							iconStatus: 1,
-							  endInfo:[{
-								info: '11号楼 2单元门',date:'10:00'
-							}, {
-								info: '07号楼 3单元门',date:'15:00'
-							}]
-						},
-						]
-					},
-					{
-						name: '小赞2',
-						childInfo:[
-							{
-							iconStatus: 1,
-							  endInfo:[{
-								info: '11号楼 2单元门',date:'10:00'
-							}, {
-								info: '07号楼 3单元门',date:'15:00'
-							}]
-						},
-						]
-					},
-					{
-						name: '小小',
-						childInfo:[
-							{
-							iconStatus: 1,
-							  endInfo:[{
-								info: '11号楼 2单元门',date:'10:00'
-							}, {
-								info: '07号楼 3单元门',date:'15:00'
-							}]
-						},
-						]
-					},
-					]
-				},
-				{
-					date: '04月39日',
-					status: 1,
-					show:false,
-					child:
-					[
-						{
-						name: '小赞',
-						childInfo:[
-							{
-							iconStatus: 1,
-							  endInfo:[{
-								info: '11号楼 2单元门',date:'10:00'
-							}, {
-								info: '07号楼 3单元门',date:'15:00'
-							}]
-						},
-						]
-					},
-					{
-						name: '小小',
-						childInfo:[
-							{
-							iconStatus: 1,
-							  endInfo:[{
-								info: '11号楼 2单元门',date:'10:00'
-							}, {
-								info: '07号楼 3单元门',date:'15:00'
-							}]
-						},
-						]
-					},
-					]
-				}
-				]
+				data: []
 			}
 		},
-		mounted(){
+		onShow() {
 			this.getList()
 		},
-		methods:{
+		onLoad() {
+
+		},
+		mounted() {
+
+		},
+		methods: {
 			// 获取列表数据
-			getList(){
-				this.http.httpRequest('/wxapplet/owner/peolepass/locklist','get',{cardNo:uni.getStorageSync('idNumber')},true).then((res)=>{
+			getList() {
+				uni.showLoading({
+					mask:true,
+					title:'加载中'
+				})
+				this.http.httpRequest('/wxapplet/owner/peolepass/locklist', 'get', {
+					cardNo: uni.getStorageSync('idNumber')
+				}, true).then((res) => {
 					console.log(res)
-					if(res.code==0){
-						
-					}else{
+					if (res.code == 0) {
+						uni.hideLoading()
+						this.data = res.data.rows
+					} else {
+						uni.hideLoading()
 						uni.showToast({
-							title:res.msg,
-							"icon":'none'
+							title: res.msg,
+							"icon": 'none'
 						})
 					}
+				}).catch(()=>{
+					uni.hideLoading()
 				})
 			},
 			// 查看更多数据
-			seeMore(index){
-				this.IsFirst=!this.IsFirst
-				this.moreIndex=index
-				this.data[index].show=!this.data[index].show
-			}
+			seeMore(index) {}
 		}
 	}
 </script>
-
 <style>
-	.name {
-		width: 100%;
+	.status{
+		width:100rpx;
+		height:26rpx;
+		background:rgba(231,0,30,1);
+		opacity:1;
+		border-radius:22rpx;
+		color: #FFFFFF;
+		font-size:16rpx;
+		font-family:PingFang SC;
+		text-align: center;
+		line-height: 26rpx;
+		margin-top: 8rpx;
+		margin-left:26rpx ;
+	}
+	.left {
+		width: 180rpx;
 		height: 42rpx;
 		font-size: 30rpx;
 		font-family: PingFang SC;
 		font-weight: bold;
 		color: rgba(51, 51, 51, 1);
-		padding-bottom:24rpx ;
-	}
-
-	.lastDate {
-		width: 68rpx;
-		height: 34rpx;
-		font-size: 24rpx;
-		font-family: PingFang SC;
-		font-weight: 400;
-		line-height: 34rpx;
-		color: rgba(153, 153, 153, 1);
-	}
-
-	.midInfo {
-		height: 40rpx;
-		max-width: 408rpx;
-		font-size: 28rpx;
-		font-family: PingFang SC;
-		font-weight: 400;
-		line-height: 40rpx;
-		color: rgba(102, 102, 102, 1);
-	}
-
-	.leftIC {
-		width: 28rpx;
-	}
-
-	.infoBox {
-		width: 608rpx;
-		margin-left: 68rpx;
-		padding-top: 24rpx;
-		overflow: hidden;
-		border-bottom:  2rpx solid rgba(245,245,245,1);
-		padding-bottom: 20rpx;
-	}
-
-	.leftIcon {
-		width: 18rpx;
-		height: 18rpx;
-		background: rgba(41, 138, 253, 1);
-		border-radius: 50%;
-		opacity: 1;
-		position: absolute;
-		left: -9rpx;
-		top: 52rpx;
+		
 	}
-
 	.right {
-		width: 152rpx;
-		height: 40rpx;
-		display: flex;
-		justify-content: space-between;
+		width: 100%;
+		height: 42rpx;
+		font-size:28rpx;
+		font-family:PingFang SC;
+		font-weight:400;
+		color:rgba(153,153,153,1);
+		margin-left: 60rpx;
 	}
-
 	.rightStatus {
 		width: 116rpx;
 		height: 40rpx;
@@ -308,23 +120,11 @@
 		font-weight: bold;
 		color: rgba(41, 138, 253, 1);
 	}
-
-	.leftDate {
-		width: 148rpx;
-		height: 44rpx;
-		font-size: 32rpx;
-		font-family: PingFang SC;
-		font-weight: bold;
-		color: rgba(51, 51, 51, 1);
-	}
-
 	.item {
 		width: 700rpx;
-		border-left: 2rpx solid rgba(245, 245, 245, 1);
 		margin: 0 auto;
-		/* margin-top: 40rpx; */
-		position: relative;
 		padding-top: 40rpx;
+		display: flex;
 	}
 
 	.content {
@@ -334,7 +134,7 @@
 		/* box-shadow: 0rpx 6rpx 10rpx rgba(0, 0, 0, 0.1); */
 		opacity: 1;
 		overflow: hidden;
-		padding-top: 20rpx;
+		border:2rpx solid rgba(215,215,217,1);
 	}
 
 	.topImg {

+ 188 - 0
pages/home/home.vue

@@ -0,0 +1,188 @@
+<template>
+	<view class="uni-flex uni-column">
+		<view class="uni-flex uni-flex-item articles uni-list">
+			<view class="uni-list-cell" hover-class="uni-list-cell-hover" v-for="(n,key) in news" :key="key" @click="goNew(n)">
+				<view class="uni-media-list">
+					<image class="uni-media-list-logo" lazy-load  mode="widthFix" :src="n.pic"></image>
+					<view class="uni-media-list-body">
+						<view class="uni-media-list-text-top uni-ellipsis">{{n.title}}</view>
+						<view class="uni-media-list-text-bottom">
+							<text>[{{n.class}}] </text>
+							<text>{{n.createDate}}</text>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<!-- 1 -->
+		<load-more :loadingType="loadingType" :contentText="contentText"></load-more> 
+	</view>
+</template>
+
+<script>
+	// 2
+	import loadMore from '@/components/uni-load-more.vue';
+	// 3
+	var index;
+	export default {
+		data() {
+			return {
+				// --4
+				type: 0,
+				news: [],
+				loadingType: 0,
+				contentText: {
+					contentdown: "上拉显示更多",
+					contentrefresh: "正在加载...",
+					contentnomore: "没有更多数据了"
+				},
+				// --4
+			};
+		},
+		onPullDownRefresh() {
+			this.getData();
+			setTimeout(function() {
+				uni.stopPullDownRefresh();
+			}, 1000);
+		},
+		onLoad() {
+			// 5
+			index = 1;
+			this.getData();
+		},
+		methods: {
+			// 6
+			getData() {
+				if (this.loadingType !== 0) {
+					return;
+				}
+				this.loadingType = 1;
+				uni.request({
+					url: this.webUrl + 'News',
+					method: 'POST',
+					data: {
+						pageIndex: index,
+						type: this.type
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						if (res.data.result.uniArticles.length > 0) {
+							this.news = this.news.concat(res.data.result.uniArticles);
+						} else {
+							this.loadingType = 2;
+							return;
+						}
+						if (index == parseInt(res.data.result.pages)) {
+							this.loadingType = 2;
+							return;
+						} else {
+							this.loadingType = 0;
+						}
+						index++;
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			},
+		},
+		onReachBottom() {
+			// 7
+			this.getData();
+		},
+		components: {
+			// 8
+			loadMore
+		}
+	}
+</script>
+
+<style>
+	.home .news-center .contentsItem {
+		width: 100%;
+		border-top: 1px solid #e2e2e2;
+	}
+
+	.home .news-center .item-contents {
+		padding: 50upx 45upx;
+	}
+
+	.home .news-center .item-contents .item-contents-wrap {
+		position: relative;
+		margin: 0 auto;
+		width: 660upx;
+		height: 380upx;
+		display: block;
+	}
+
+	.home .news-center .item-contents image {
+		margin: 0 auto;
+		width: 660upx;
+		height: 380upx;
+		display: block;
+	}
+
+	.home .news-center .item-contents .contentsMessage {
+		margin: 0 auto;
+		width: 660upx;
+		box-sizing: border-box;
+		padding: 25upx 20upx;
+		background: #e9e9e9;
+	}
+
+	.home .news-center .contentsMessage .Msgs {
+		width: 620upx;
+	}
+
+	.home .news-center .contentsMessage .Msgs .lfMsg {
+		font-size: 26upx;
+		/* #ifdef H5 */
+		font-size: 26upx;
+		/* #endif */
+		color: #505050;
+		width: 490upx;
+		overflow: hidden;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+	}
+	.home .news-center .contentsMessage  .lfMsgs-wrap{
+		margin-top: 10upx;
+	}
+	.home .news-center .contentsMessage  .lfMsgs {
+		font-size: 24upx;
+		/* #ifdef H5 */
+		font-size: 24upx;
+		/* #endif */
+		color: #909090;
+		text-spacing: 5upx;
+	}
+
+	.home .news-center .contentsMessage .Msgs .rtMsg {
+		font-size: 26upx;
+		/* #ifdef H5 */
+		font-size: 26upx;
+		/* #endif */
+		color: #909090;
+		justify-content: flex-end;
+
+	}
+
+	.home .news-center .contentsMessage .Msgs .Msgs-artitle {
+		width: 100%;
+		margin-top: 10upx;
+		margin-bottom: 30upx;
+		font-size: 26upx;
+		/* #ifdef H5 */
+		font-size: 26upx;
+		/* #endif */
+		color: #909090;
+		overflow: hidden;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+	}
+
+	.image {
+		position: absolute;
+	}
+</style>

+ 8 - 5
pages/index/changeHouse.vue

@@ -10,12 +10,12 @@
 					</view>
 
 				</view>
-				<view class="address" v-for="(list,index) in item.ownerBases" :key="index">
+				<view class="address" v-for="(list,index) in item.ownerHouse" :key="index">
 					<image src="../../static/house_icon_house@2x.png" style="width: 40rpx;height:40rpx;margin-right: 18rpx;"></image>
-					<view class="text">{{list}}</view>
+					<view class="text">{{list.houseName}}</view>
 					<view class="delete">
-						<radio-group @change="changeHouse">
-							<radio style="transform:scale(0.8)" :value="list" :checked="address==list" />
+						<radio-group @change="changeHouse(list)">
+							<radio style="transform:scale(0.8)" :value="list.houseName" :checked="address==list.houseName" />
 						</radio-group>
 
 					</view>
@@ -42,7 +42,8 @@
 		methods: {
 			// 删除房屋
 			changeHouse(item) {
-				uni.setStorageSync('homeAdress', item.detail.value)
+				console.log(item)
+				uni.setStorageSync('homeAdress',item.houseName)
 				uni.switchTab({
 					url: "./index"
 				})
@@ -73,6 +74,8 @@
 							"icon": 'none'
 						})
 					}
+				}).catch(()=>{
+					uni.hideLoading()
 				})
 			}
 		}

+ 34 - 14
pages/index/index.vue

@@ -1,8 +1,8 @@
 <template>
-	<view style="background:rgba(245,245,245,1);
-opacity:1;">
+	<view style="background:rgba(245,245,245,1);opacity:1;">
 		<view class="topBox">
-			<image :src="photoData[swiperIndex]" style="width: 100%;height:391rpx;"></image>
+			<image :src="photoData[swiperIndex].photo" style="width: 100%;height:391rpx;"></image>
+			<!-- 当前绑定房屋信息 -->
 			<view class="topBoxInfo">
 				<view class="topInfo" :style="{marginTop:phoneHeight + 'px'}" @tap="selectHouse">
 					<view v-if="adress">
@@ -21,7 +21,9 @@ opacity:1;">
 					 :duration="1000" style="width: 100%;height: 100%;" indicator-active-color="#298AFD" indicator-color="#fff">
 						<swiper-item v-for="(item,index) in photoData" :key="index">
 							<view class="swiper-item">
-								<image :src="item" style="width: 100%;border-radius: 15rpx;height:342px;"></image>
+								<view style="border-radius: 15rpx;">
+									<image :src="item.photo" style="width: 100%;height:342px;"></image>
+								</view>
 							</view>
 						</swiper-item>
 					</swiper>
@@ -68,7 +70,7 @@ opacity:1;">
 			</view>
 			<!-- 公告信息 -->
 			<view class="item">
-				<view class="mainInfo" v-for="(item,index) in list" :key="index"  @tap="seeDetail(item.id)" >
+				<view class="mainInfo" v-for="(item,index) in list" :key="index" @tap="seeDetail(item.id)">
 					<view class="left">
 						<view style="width: 100%;height: 42rpx;ont-size:30rx;font-family:PingFang SC;font-weight:bold;color:rgba(51,51,51,1);margin-top: 40rpx;">
 							{{item.title}}
@@ -94,29 +96,44 @@ opacity:1;">
 			return {
 				phoneHeight: 0, //手机状态栏的高度
 				swiperIndex: 0, //当前显示轮播图的索引
-				photoData: ["../../static/empower_image@2x.png", "../../static/login_bgground@2x.png"],
-				list: [],
-				adress:''
+				photoData: ["../../static/empower_image@2x.png", "../../static/login_bgground@2x.png"], //轮播图数据
+				list: [], //物业公告数据
+				adress: ''
 
 			}
 		},
 		created() {
 			// 获取状态栏的高度
 			this.phoneHeight = uni.getSystemInfoSync().statusBarHeight
-			
+			this.getBannerData()
 		},
 		onShow() {
-			this.adress=uni.getStorageSync('homeAdress')
+			this.adress = uni.getStorageSync('homeAdress')
+			this.getNoticeList()
 		},
 		mounted() {
-			this.getNoticeList()
+			
 		},
 		methods: {
+			// 获取轮播图数据
+			getBannerData() {
+				this.http.httpRequest('/wxapplet/owner/AdvertPhoto/list', 'get', {}, true).then((res) => {
+					console.log(res)
+					if (res.code == 0) {
+					  this.photoData=res.data.rows
+					} else {
+						uni.showToast({
+							title: res.msg,
+							'icon': 'none'
+						})
+					}
+				})
+			},
 			// 获取公告数据
 			getNoticeList() {
 				uni.showLoading({
-					mask:true,
-					 title: '加载中'
+					mask: true,
+					title: '加载中'
 				})
 				this.http.httpRequest('/wxapplet/owner/notice/list', 'get', {
 					comtyId: uni.getStorageSync('comtyId')
@@ -124,6 +141,7 @@ opacity:1;">
 					console.log(res)
 					if (res.code == 0) {
 						uni.hideLoading()
+						// 判断当前数据是否大于三条数据
 						if (res.data.rows.length > 3) {
 							this.list = res.data.rows.splice(0, 2)
 						} else {
@@ -136,12 +154,14 @@ opacity:1;">
 							'icon': 'none'
 						})
 					}
+				}).catch(() => {
+					uni.hideLoading()
 				})
 			},
 			// 查看物业公告详情
 			seeDetail(id) {
 				uni.navigateTo({
-					url: './detail?id='+ id
+					url: './detail?id=' + id
 				})
 			},
 			// 监听轮播图当前索引

+ 4 - 3
pages/login/authorization.vue

@@ -12,7 +12,7 @@
 	export default {
 		data() {
 			return {
-				isLoading:false,
+				isLoading:false,//按钮加载绑定值
 			}
 		},
 		methods: {
@@ -23,10 +23,10 @@
 			login(e) {
 				console.log(e)
 				this.isLoading=true
+				// 调起微信授权
 				uni.login({
 					provider: 'weixin',
 					success: (res)=> {
-						console.log(res);
 						this.http.httpRequest("/wxapplet/ownersid/WeChatLogin", 'post', {
 							phoneNumBer: uni.getStorageSync('phoneNumber'),
 							loginName: e.detail.userInfo.nickName,
@@ -34,7 +34,6 @@
 							cardNo:uni.getStorageSync('idNumber')
 						},true).then((res)=>{
 							this.isLoading=false
-							console.log(res)
 							if(res.code==0){
 								uni.setStorageSync('createBy',res.data[0].createBy)
 								uni.switchTab({
@@ -47,6 +46,8 @@
 									"icon":'none'
 								})
 							}
+						}).catch(()=>{
+							this.isLoading=false
 						})
 					}
 				});

+ 2 - 4
pages/login/login.vue

@@ -148,10 +148,6 @@
 						// 判断是否登陆成功
 						if (res.code == 0) {
 							 this.isLoading=false
-		                      uni.showToast({
-		                      	title: '登录成功',
-		                      	'icon': 'none'
-		                      })
 							console.log(res)
 							uni.setStorageSync('userId',res.data[0].userId)
 							uni.setStorageSync('idNumber',res.data[0].idcardNum)
@@ -166,6 +162,8 @@
 								'icon': 'none'
 							})
 						}
+					}).catch(()=>{
+						this.isLoading=false
 					})
 
 				}

+ 102 - 63
pages/mine/addCar.vue

@@ -14,44 +14,80 @@
 				<view class="topTile">车牌号</view>
 				<view class="content">
 					<view class="carNum">
-						<input type="text" v-model="carNum"  placeholder="请输入车牌号" placeholder-class="holder" style="width: 100%;height: 100%;"/>
+						<input type="text" v-model="carNum" placeholder="请输入车牌号" placeholder-class="holder" style="width: 100%;height: 100%;" />
 					</view>
 					<!-- <image src="../../static/icon_combo_nor@2x.png" style="width: 20rpx;height: 12rpx;margin-top: 15rpx;margin-right: 18rpx;"></image> -->
 				</view>
 			</view>
 		</view>
 		<!-- 车辆类型 -->
-		 <lb-picker ref="type" :list="typeData" @confirm="confirm">
-		 	<!-- <view slot="cancle-text">取消</view>
-		 	  <view slot="confirm-text" >确定</view> -->
-		 </lb-picker>
-		 <!-- 保存 -->
-		 <view class="btn" :class="{active:type && carNum}">保存</view>
+		<lb-picker ref="type" :list="typeData" @confirm="confirm">
+		</lb-picker>
+		<!-- 保存 -->
+		<button class="btn" :class="{active:type && carNum}" :loading="isLoading" @tap="saveInfo">保存</button>
 	</view>
 </template>
 
 <script>
 	import LbPicker from '@/components/lb-picker'
-	export default{
-		data(){
-			return{
-				type:'请选择车辆类型',//车辆类型
-				typeNum:'',
-				carNum:'',//车牌号
-				typeData:[{label:'机动车',value:1,child:[]},{label:'电动车',value:2,child:[]},],
+	export default {
+		data() {
+			return {
+				isLoading: false,
+				type: '请选择车辆类型', //车辆类型
+				typeNum: '',
+				carNum: '', //车牌号
+				typeData: [{
+					label: '机动车',
+					value: 1,
+					child: []
+				}, {
+					label: '电动车',
+					value: 2,
+					child: []
+				}, ],
 			}
 		},
-		methods:{
+		methods: {
 			// 车辆类型选择确定
-			confirm(data){
-				this.type=data.item.label
-				this.typeNum=data.item.value
+			confirm(data) {
+				this.type = data.item.label
+				this.typeNum = data.item.value
 			},
 			// 选择车辆类型
-			chooseType(){
+			chooseType() {
 				this.$refs.type.show()
-			
+
 			},
+			//保存提交信息
+			saveInfo() {
+				if (!this.typeNum || !this.carNum) {
+					return
+				} else {
+					this.isLoading=true
+					this.http.httpRequest('/wxapplet/ownercar/add', 'post', {
+						cardId: uni.getStorageSync('idNumber'),
+						carNo: this.carNum,
+						carType: String(this.typeNum),
+						comtyId: uni.getStorageSync('comtyId')
+					}, true).then((res) => {
+						if (res.code == 0) {
+						uni.navigateTo({
+							url:'./myCar'
+						})
+						this.isLoading=false
+						} else {
+							this.isLoading=false
+							uni.showToast({
+								title: res.msg,
+								'icon': 'none'
+							})
+						}
+					}).catch(()=>{
+						this.isLoading=false
+					})
+				}
+			}
 		},
 		components: {
 			LbPicker
@@ -60,67 +96,70 @@
 </script>
 
 <style>
-	.btn{
-		width:702rpx;
-		height:90rpx;
-		background:rgba(163,197,237,1);
-		opacity:1;
-		border-radius:18rpx;
-		font-size:32rpx;
-		font-family:PingFang SC;
-		font-weight:bold;
-		line-height:90rpx;
-		color:rgba(255,255,255,1);
+	.btn {
+		width: 702rpx;
+		height: 90rpx;
+		background: rgba(163, 197, 237, 1);
+		opacity: 1;
+		border-radius: 18rpx;
+		font-size: 32rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		line-height: 90rpx;
+		color: rgba(255, 255, 255, 1);
 		text-align: center;
 		position: fixed;
 		bottom: 56rpx;
-		left:26rpx ;
+		left: 26rpx;
 	}
-	.active{
-		background:rgba(41,138,253,1);
+
+	.active {
+		background: rgba(41, 138, 253, 1);
 	}
-	.item{
+	.item {
 		width: 662rpx;
 		height: 135rpx;
-		border-bottom:2rpx solid rgba(247,247,247,1);
+		border-bottom: 2rpx solid rgba(247, 247, 247, 1);
 		margin: 0 auto;
 	}
-	.carType{
-		width:202rpx;
-		height:40rpx;
-		font-size:28rpx;
-		font-family:PingFang SC;
-		font-weight:400;
-		color:rgba(153,153,153,1);
+	.carType {
+		width: 202rpx;
+		height: 40rpx;
+		font-size: 28rpx;
+		font-family: PingFang SC;
+		font-weight: 400;
+		color: rgba(153, 153, 153, 1);
 	}
-	.carNum{
-		width:600rpx;
-		height:40rpx;
-		font-size:28rpx;
-		font-family:PingFang SC;
-		font-weight:400;
-		color:rgba(51,51,51,1);
+
+	.carNum {
+		width: 600rpx;
+		height: 40rpx;
+		font-size: 28rpx;
+		font-family: PingFang SC;
+		font-weight: 400;
+		color: rgba(51, 51, 51, 1);
 	}
-	.content{
+	.content {
 		width: 100%;
 		height: 40rpx;
 		display: flex;
 		justify-content: space-between;
 		margin-top: 28rpx;
 	}
-	.topTile{
-		width:132rpx;
-		height:44rpx;
-		font-size:32rpx;
-		font-family:PingFang SC;
-		font-weight:bold;
-		color:rgba(51,51,51,1);
+	.topTile {
+		width: 132rpx;
+		height: 44rpx;
+		font-size: 32rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		color: rgba(51, 51, 51, 1);
 		margin-top: 32rpx;
 	}
-	.holder{
-		color:rgba(153,153,153,1);
+
+	.holder {
+		color: rgba(153, 153, 153, 1);
 	}
-	.typeActive{
-		color:rgba(51,51,51,1);
+	.typeActive {
+		color: rgba(51, 51, 51, 1);
 	}
-</style>
+</style>

+ 104 - 80
pages/mine/addFamily.vue

@@ -21,9 +21,9 @@
 		</view>
 		<view class="item" style="height: 414rpx;">
 			<view class="title">人脸照片 </view>
-			<view class="content" style="height: 300rpx;" >
+			<view class="content" style="height: 300rpx;">
 				<image src="../../static/circle_image@2x.png" style="width: 330rpx;height: 300rpx;" @tap="chooseImg" v-show="isShow"></image>
-				<image :src="photo" style="width: 330rpx;height: 300rpx;" v-show="isImg"></image>
+				<image :src="photo" style="width: 330rpx;height: 300rpx;" v-show="isImg" @tap="chooseImg"></image>
 			</view>
 		</view>
 		<!-- <view class="tip">注:带*为必填项</view> -->
@@ -32,124 +32,148 @@
 </template>
 
 <script>
-	export default{
-		data(){
-			return{
-				name:'',//姓名
-				phone:'',//手机号
-				idNumber:'',//身份证号
-				photo:'',//人脸照片
-				isShow:true,//判断添加照片是否显示
-				isImg:false
+	export default {
+		data() {
+			return {
+				name: '', //姓名
+				phone: '', //手机号
+				idNumber: '', //身份证号
+				photo: '', //人脸照片
+				isShow: true, //判断添加照片是否显示
+				isImg: false
 			}
 		},
-		methods:{
+		methods: {
 			// 选择照片
-			chooseImg(){
+			chooseImg() {
 				uni.chooseImage({
 					count: 1, //默认9
-					    sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
-					    // sourceType: ['album'], //从相册选择
-					    success: (res)=> {
-					      this.photo=res.tempFiles[0].path
-						  this.isShow=false
-						  this.isImg=true
-					    }
+					sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
+					// sourceType: ['album'], //从相册选择
+					success: (res) => {
+						this.photo = res.tempFiles[0].path
+						this.isShow = false
+						this.isImg = true
+					}
 				})
 			},
 			//提交表单数据
-			save(){
-				if(!this.name || !this.phone || !this.idNumber || !this.photo){
+			save() {
+				if (!this.name || !this.phone || !this.idNumber || !this.photo) {
 					return
-				}else{
+				} else {
 					let idNumerReg = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/; //身份证正则
 					let phoneReg = /^1[3|4|5|7|8][0-9]{9}$/; //手机号正则校验
 					// 表单校验
-					if(!phoneReg.test(this.phone)){
-						uni.showToast({
-							'icon':'none',
-							title:"手机号码格式不正确"
-						})
-					}else if(!idNumerReg.test(this.idNumber)){
+					if (!phoneReg.test(this.phone)) {
 						uni.showToast({
-							'icon':'none',
-							title:"身份证号码格式不正确"
+							'icon': 'none',
+							title: "手机号码格式不正确"
 						})
-					}else{
+					} else if (!idNumerReg.test(this.idNumber)) {
 						uni.showToast({
-							'icon':'none',
-							title:"保存成功"
+							'icon': 'none',
+							title: "身份证号码格式不正确"
 						})
-						uni.navigateTo({
-							url:'./family'
+					} else {
+						this.http.httpRequest('/wxapplet/owner/peopleInfor/faceadd', 'post', {
+							comtyId: uni.getStorageSync('comtyId'),
+							cardNo: this.idNumber,
+							personName: this.name,
+							phoneNum: this.phone,
+							facePic: this.photo,
+							doorNum:uni.getStorageSync('homeId')
+						}, true).then((res) => {
+							if (res.code == 0) {
+								uni.showToast({
+									'icon': 'success',
+									title: "保存成功"
+								})
+								uni.navigateTo({
+									url: './family'
+								})
+							} else {
+								uni.showToast({
+									title: res.msg,
+									'icon': 'none'
+								})
+							}
 						})
+						
 					}
 				}
-				
+
 			}
 		}
 	}
 </script>
 
 <style>
-	.btn{
-		width:702rpx;
-		height:90rpx;
-		background:rgba(163,197,237,1);
-		opacity:1;
-		border-radius:18rpx;
+	.btn {
+		width: 702rpx;
+		height: 90rpx;
+		background: rgba(163, 197, 237, 1);
+		opacity: 1;
+		border-radius: 18rpx;
 		text-align: center;
-		font-size:32rpx;
-		font-family:PingFang SC;
-		font-weight:bold;
-		line-height:90rpx;
-		color:rgba(255,255,255,1);
+		font-size: 32rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		line-height: 90rpx;
+		color: rgba(255, 255, 255, 1);
 		margin: 0 auto;
-		margin-top:140rpx ;
-		
+		margin-top: 140rpx;
+
 	}
-	.tip{
-		width:186rpx;
-		height:34rpx;
-		font-size:24rpx;
-		font-family:PingFang SC;
-		font-weight:400;
-		color:rgba(231,0,30,1);
-		margin-left:44rpx;
+
+	.tip {
+		width: 186rpx;
+		height: 34rpx;
+		font-size: 24rpx;
+		font-family: PingFang SC;
+		font-weight: 400;
+		color: rgba(231, 0, 30, 1);
+		margin-left: 44rpx;
 		margin-top: 20rpx;
 	}
-	.title{
-		width:100%;
-		height:44rpx;
-		font-size:32rpx;
-		font-family:PingFang SC;
-		font-weight:bold;
-		line-height:44px;
-		color:rgba(51,51,51,1);
+
+	.title {
+		width: 100%;
+		height: 44rpx;
+		font-size: 32rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		line-height: 44px;
+		color: rgba(51, 51, 51, 1);
 		margin-top: 32rpx;
 		margin-bottom: 58rpx;
 		/* overflow: hidden; */
 	}
-	.content{
+
+	.content {
 		width: 100%;
-		height:40rpx;
-		font-size:28rpx;
-		font-family:PingFang SC;
-		font-weight:400;
-		line-height:40rpx;
-		color:rgba(51,51,51,1);
+		height: 40rpx;
+		font-size: 28rpx;
+		font-family: PingFang SC;
+		font-weight: 400;
+		line-height: 40rpx;
+		color: rgba(51, 51, 51, 1);
 		margin-left: 18rpx;
 	}
-	.item{
+
+	.item {
 		width: 662rpx;
 		height: 154rpx;
-		border-bottom: 2rpx solid rgba(247,247,247,1);;
+		border-bottom: 2rpx solid rgba(247, 247, 247, 1);
+		;
 		margin: 0 auto;
 	}
-	.holder{
-		color:rgba(153,153,153,1);
+
+	.holder {
+		color: rgba(153, 153, 153, 1);
 	}
-	.active{
-		background:rgba(41,138,253,1);
+
+	.active {
+		background: rgba(41, 138, 253, 1);
 	}
-</style>
+</style>

+ 109 - 0
pages/mine/carList.vue

@@ -0,0 +1,109 @@
+<!-- 汽车通行记录 -->
+<template>
+	<view>
+		<view style="margin-top: 34rpx;">
+			<view class="item" v-for="(item,index) in data" :key="index" :class="{active:isPrimeNum(index)}">
+				<view class="content">
+					<view class="left">{{item.deviceName}}</view>
+					<view class="date">
+						{{item.passTime}}
+					</view>
+				</view>
+			</view>
+		</view>
+
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				id: "", //汽车ID
+				data: []
+			}
+		},
+		onLoad(option) {
+			this.id = option.id
+			this.getData()
+		},
+		methods: {
+			//获取通行记录数据
+			getData() {
+				uni.showLoading({
+					mask: true,
+					title: '加载中'
+				})
+				this.http.httpRequest('/wxapplet/owner/carpass/list', 'get', {
+					carNo: this.id,
+					carType: '1'
+				}, true).then((res) => {
+					console.log(res)
+					if (res.code == 0) {
+						this.data=res.data.rows
+						uni.hideLoading()
+					} else {
+						uni.hideLoading()
+						uni.showToast({
+							title: res.msg,
+							'icon': 'none'
+						})
+					}
+				}).catch(() => {
+					uni.hideLoading()
+				})
+			},
+			// 判断当前索引是否为奇数
+			isPrimeNum(num) {
+				if (num % 2 == 0) {
+					return false
+				} else {
+					return true
+				};
+			}
+		}
+	}
+</script>
+
+<style>
+	.item {
+		width: 100%;
+		height: 80rpx;
+		background: rgba(249, 249, 249, 1);
+		opacity: 1;
+	}
+
+	.active {
+		background: rgba(255, 255, 255, 1);
+	}
+
+	.content {
+		width: 630rpx;
+		height: 100%;
+		margin: 0 auto;
+		display: flex;
+		justify-content: space-between;
+
+	}
+
+	.date {
+		width: 240rpx;
+		height: 34rpx;
+		font-size: 24rpx;
+		font-family: PingFang SC;
+		font-weight: 400;
+		color: rgba(153, 153, 153, 1);
+		margin-top: 22rpx;
+		text-align: right;
+	}
+
+	.left {
+		width: 400rpx;
+		height: 36rpx;
+		font-size: 26rpx;
+		font-family: PingFang SC;
+		font-weight: 400;
+		color: rgba(51, 51, 51, 1);
+		margin-top: 22rpx;
+	}
+</style>

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 78 - 39
pages/mine/face.vue


+ 168 - 61
pages/mine/family.vue

@@ -1,36 +1,137 @@
 <template>
 	<view class="">
-		<view class="item">
-			<view class="left">
-				<image src="../../static/care_family.png" style="width:140rpx;height:140rpx;border-radius: 20rpx;"></image>
-			</view>
-			<view class="right">
-				<view class="name">小宝</view>
-				<view class="phone">
-					<text>手机号 :</text><text style="margin-left:15rpx">15822222222</text>
+		<view style="width: 100%;text-align: center;margin-top: 20rpx;" v-show="length==0">暂无数据</view>
+		<uni-swipe-action>
+			<uni-swipe-action-item :options="options" @click="onClick(item)" @change="change" v-for="(item,index) in data" :key="index">
+				<view class="item">
+					<view class="left" >
+						<image src="../../static/youer.png" style="width:140rpx;height:140rpx;border-radius: 20rpx;"  v-if="IdCard(item.cardNo)<=6"></image>
+							<image src="../../static/shaonian.png" style="width:140rpx;height:140rpx;border-radius: 20rpx;"  v-else-if="IdCard(item.cardNo)>=7 && IdCard(item.cardNo)<=12"></image>
+							<image src="../../static/qingShao.png" style="width:140rpx;height:140rpx;border-radius: 20rpx;"  v-else-if="IdCard(item.cardNo)>=13 && IdCard(item.cardNo)<=17"></image>
+							<image src="../../static/young.png" style="width:140rpx;height:140rpx;border-radius: 20rpx;"  v-else-if="IdCard(item.cardNo)>=18 && IdCard(item.cardNo)<=45"></image>
+							<image src="../../static/zhongnian.png" style="width:140rpx;height:140rpx;border-radius: 20rpx;"  v-else-if="IdCard(item.cardNo)>=46 && IdCard(item.cardNo)<=69"></image>
+							<image src="../../static/old.png" style="width:140rpx;height:140rpx;border-radius: 20rpx;"  v-else-if="IdCard(item.cardNo)>69"></image>
+					</view>
+					<view class="right">
+						<view class="name">{{item.personName}}</view>
+						<view class="phone">
+							<text>手机号 :</text><text style="margin-left:15rpx">{{item.phoneNum}}</text>
+						</view>
+						<view class="idNumber">
+							<text>身份证号 :</text><text style="margin-left:15rpx">{{item.cardNo}}</text>
+						</view>
+					</view>
 				</view>
-				<view class="idNumber">
-					<text>身份证号 :</text><text style="margin-left:15rpx">3713222000005050202</text>
-				</view>
-			</view>
-		</view>
+			</uni-swipe-action-item>
+		</uni-swipe-action>
 		<!-- 添加家人信息 -->
 		<view class="btn" @tap="addFamily">添加家人信息</view>
 	</view>
 </template>
 
 <script>
-	export default{
-		data(){
-			return{
-				
+	import uniSwipeAction from '../../components/uni-swipe-action/uni-swipe-action.vue'
+	import uniSwipeActionItem from '../../components/uni-swipe-action-item/uni-swipe-action-item.vue'
+	export default {
+		data() {
+			return {
+				length:0,//数据判断值
+				data: [],//列表数据
+				options: [{//左滑动数据
+					text: '删除',
+					style: {
+						backgroundColor: '#dd524d'
+					}
+				}]
 			}
 		},
-		methods:{
+		mounted() {
+			this.getListData()
+		
+		},
+		components: {
+			uniSwipeAction,
+			uniSwipeActionItem
+		},
+		computed:{
+			
+		},
+		methods: {
+			  //根据身份证号获取年龄
+			IdCard(UUserCard) {
+			    var myDate = new Date();
+			    var month = myDate.getMonth() + 1;
+			    var day = myDate.getDate();
+			    var age = myDate.getFullYear() - UUserCard.substring(6, 10) - 1;
+			    if (UUserCard.substring(10, 12) < month || UUserCard.substring(10, 12) == month && UUserCard.substring(12, 14) <= day) {
+			        age++;
+			    }
+				return age
+			},
+			// 点击删除
+			onClick(item) {
+				uni.showModal({
+					title: '提示',
+					content: '您确定要删除当前数据吗?',
+					success: (res) => {
+						// 判断用户是选择确定还是取消
+						if (res.confirm) {
+							this.http.httpRequest('/wxapplet/owner/peopleInfor/family/del', 'post', {
+								cardNo: item.cardNo,
+								comtyId: item.comtyId,
+								zzjgid: item.zzjgid
+							}, true).then((res) => {
+								console.log(res)
+								// 判断接口是否请求成功
+								if (res.code == 0) {
+									uni.showToast({
+										title:'删除成功',
+										'icon':'success'
+									})
+									this.getListData()
+								} else {
+									uni.showToast({
+										title: res.msg,
+										'icon': 'none'
+									})
+								}
+							})
+						} else if (res.cancel) {
+
+						}
+					}
+				})
+			},
+			// 获取列表数据
+			getListData() {
+				uni.showLoading({
+					mask:true,
+					title:'加载中'
+				})
+				this.http.httpRequest('/wxapplet/owner/peopleInfor/getfamily', 'get', {
+					cardNo: uni.getStorageSync('idNumber'),
+					comtyId: uni.getStorageSync('comtyId')
+				}, true).then((res) => {
+					console.log(res)
+					if (res.code == 0) {
+						uni.hideLoading()
+						this.data = res.data.rows
+						 this.length=this.data.length	
+					} else {
+						uni.hideLoading()
+						uni.showToast({
+							title: res.msg,
+							'icon': 'none'
+						})
+					}
+				}).catch(()=>{
+					uni.hideLoading()
+				})
+			},
 			// 添加家人信息
-			addFamily(){
+			addFamily() {
 				uni.navigateTo({
-					url:"addFamily"
+					url: "addFamily"
 				})
 			}
 		}
@@ -38,67 +139,73 @@
 </script>
 
 <style>
-	.btn{
-		width:702rpx;
-		height:90rpx;
-		background:rgba(41,138,253,1);
-		opacity:1;
-		border-radius:18rpx;
-		font-size:32rpx;
-		font-family:PingFang SC;
-		font-weight:bold;
-		line-height:90rpx;
-		color:rgba(255,255,255,1);
+	.btn {
+		width: 702rpx;
+		height: 90rpx;
+		background: rgba(41, 138, 253, 1);
+		opacity: 1;
+		border-radius: 18rpx;
+		font-size: 32rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		line-height: 90rpx;
+		color: rgba(255, 255, 255, 1);
 		text-align: center;
 		position: fixed;
 		left: 26rpx;
 		bottom: 56rpx;
 	}
-	.idNumber{
+
+	.idNumber {
 		width: 100%;
-		height:34rpx ;
-		font-size:24rpx;
-		font-family:PingFang SC;
-		font-weight:400;
-		line-height:34rpx;
-		color:rgba(51,51,51,1);
+		height: 34rpx;
+		font-size: 24rpx;
+		font-family: PingFang SC;
+		font-weight: 400;
+		line-height: 34rpx;
+		color: rgba(51, 51, 51, 1);
 	}
-	.name{
+
+	.name {
 		width: 100%;
-		height:44rpx;
-		font-size:32rpx;
-		font-family:PingFang SC;
-		font-weight:bold;
-		line-height:44px;
-		color:rgba(51,51,51,1);
+		height: 44rpx;
+		font-size: 32rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		line-height: 44px;
+		color: rgba(51, 51, 51, 1);
 	}
-	.phone{
+
+	.phone {
 		width: 100%;
-		height:34rpx ;
-		font-size:24rpx;
-		font-family:PingFang SC;
-		font-weight:400;
-		line-height:34rpx;
-		color:rgba(51,51,51,1);
+		height: 34rpx;
+		font-size: 24rpx;
+		font-family: PingFang SC;
+		font-weight: 400;
+		line-height: 34rpx;
+		color: rgba(51, 51, 51, 1);
 		margin-top: 28rpx;
 		margin-left: 26rpx;
 	}
-	.left{
-		width:140rpx;
-		height:140rpx;
-		border-radius:20rpx;
+
+	.left {
+		width: 140rpx;
+		height: 140rpx;
+		border-radius: 20rpx;
 		margin-top: 40rpx;
 	}
-	.right{
-		width:100%;
+
+	.right {
+		width: 100%;
 		margin-left: 20rpx;
 		margin-top: 40rpx;
 	}
-		
-	.item{
+
+	.item {
 		width: 680rpx;
 		height: 220rpx;
-		border-bottom:2rpx solid rgba(247,247,247,1); ;
+		border-bottom: 2rpx solid rgba(247, 247, 247, 1);
+		;
 		margin: 0 auto;
 		display: flex;
 	}

+ 42 - 7
pages/mine/mine.vue

@@ -10,13 +10,13 @@
 			</view>
 			<view class="phone" @tap="seeMyInfo">15825252525</view>
 			<!-- 车辆数 -->
-			<view class="carBox" @tap="seeMyCar">
-				<view class="leftCar">
-					<view class="num">10</view>
-					<view class="text">轿车辆数</view>
+			<view class="carBox" >
+				<view class="leftCar" @tap="seeMyCar">
+					<view class="num">{{carNum?carNum:0}}</view>
+					<view class="text">车辆数</view>
 				</view>
-				<view class="rightCar">
-					<view class="num" style="width: 134rpx;">1</view>
+				<view class="rightCar" @tap="seeMyBike">
+					<view class="num" style="width: 134rpx;">0</view>
 					<view class="text" style="width: 134rpx;">电动车辆数</view>
 				</view>
 			</view>
@@ -76,10 +76,45 @@
 	export default{
 		data(){
 			return{
-				
+				carNum:0,//汽车数量
+				bikeNum:0,//自行车数量
 			}
 		},
+		onShow() {
+			this.getCarData()
+		},
+		onLoad() {
+			
+		},
 		methods:{
+			// 获取汽车车辆数
+			 getCarData(){
+				 uni.showLoading({
+				 	mask:true,
+					title:'加载中'
+				 })
+				this.http.httpRequest('/wxapplet/ownercar/list','get',{
+					cardId:uni.getStorageSync('idNumber'),
+					pageNum:1,
+					pageSize:10
+				},true).then((res)=>{
+					uni.hideLoading()
+					console.log(res)
+					if(res.code==0){
+						this.carNum = res.data.rows.length
+					}else{
+						uni.hideLoading()
+					}
+				}).catch(()=>{
+					uni.hideLoading()
+				})
+			 },
+			// 查看电动车
+			seeMyBike(){
+				uni.navigateTo({
+					url:'./myBike'
+				})
+			},
 			// 访客信息
 			visitorInfo(){
 				uni.navigateTo({

+ 205 - 0
pages/mine/myBike.vue

@@ -0,0 +1,205 @@
+
+<!-- 我的汽车 -->
+<template>
+	<view class="">
+		<!-- 循环体 -->
+		<scroll ref="pullScroll" :pullDown="pullDown" :pullUp="loadData">
+			<view class="item" v-for="(item,index) in data" :key="index">
+				<view class="content">
+					<view class="left">
+						<view style="width: 60rpx;height: 40rpx;">
+							<image src="../../static/car.png" style="width:100%;height:100%;" ></image>
+						</view>
+						
+						<view class="num">{{item.carNo}}</view>
+					</view>
+					<!-- <view class="right" @tap="seeMore(index)">
+						<view class="tong">通行记录</view>
+						<image src="../../static/icon_combo_nor@2x.png" style="width: 20rpx;height: 12rpx;margin-top: 15rpx;" v-show="!item.show"></image>
+						<image src="../../static/icon_combo_set@2x.png" style="width: 20rpx;height: 12rpx;margin-top: 15rpx;" v-show="item.show"></image>
+					</view> -->
+				</view>
+			</view>
+		</scroll>
+		<!-- 绑定新的车辆 -->
+		<view class="btn" @tap="addCar">
+			绑定新的车辆
+		</view>
+	</view>
+</template>
+
+<script>
+	
+	export default {
+		data() {
+			return {
+				isShow: false,
+				data: []
+			}
+		},
+		onLoad() {
+			// this.refresh();
+		},
+		mounted() {
+			// this.getCarData()
+		},
+		methods: {
+			// 刷新页面
+			refresh() {
+				this.$nextTick(() => {
+					this.$refs.pullScroll.refresh();
+				});
+			},
+			// 向下拉刷新
+			pullDown(pullScroll) {
+				setTimeout(() => {
+					this.loadData(pullScroll);
+				}, 200);
+			},
+			//获取加载数据
+			loadData(pullScroll) {
+				
+				this.pageNum = pullScroll.page
+				setTimeout(() => {
+					// this.http.httpRequest('/wxapplet/ownercar/list', 'get', {
+					// 	// cardNo: uni.getStorageSync('idNumber'),
+					// 	pageNum: pullScroll.page,
+					// 	pageSize: 3,
+					// 	cardId: uni.getStorageSync('idNumber'),
+					// }).then((res) => {
+					// 	console.log(res)
+					// 	if (res.code == 0) {
+					// 		//判断数据是否加载完
+					// 		if (this.data.length == res.data.total) {
+					// 			pullScroll.finish();
+					// 		} else {
+					// 			pullScroll.success();
+					// 			let data = res.data.rows
+					// 			this.data = this.data.concat(data);
+					// 		}
+					// 	} else {
+					// 		pullScroll.finish();
+					// 		uni.showToast({
+					// 			title: res.msg,
+					// 			"icon": 'none'
+					// 		})
+					// 	}
+					// }).catch(() => {
+					// 	pullScroll.finish();
+					// })
+				}, 500);
+			},
+		
+			// 查看或隐藏记录
+			seeMore(index) {
+				this.data[index].show = !this.data[index].show
+			},
+			// 绑定新的车辆
+			addCar() {
+				uni.navigateTo({
+					url: "addCar"
+				})
+			}
+		}
+	}
+</script>
+
+<style>
+	.btn {
+		width: 702rpx;
+		height: 90rpx;
+		background: rgba(41, 138, 253, 1);
+		opacity: 1;
+		border-radius: 18rpx;
+		font-size: 32rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		color: rgba(255, 255, 255, 1);
+		text-align: center;
+		line-height: 90rpx;
+		position: fixed;
+		bottom: 56rpx;
+		left: 26rpx;
+		z-index: 999;
+	}
+
+	.list {
+		width: 100%;
+		height: 36rpx;
+		display: flex;
+		justify-content: space-between;
+
+	}
+
+	.listText {
+		height: 100%;
+		font-size: 26rpx;
+		font-family: PingFang SC;
+		font-weight: 400;
+		color: rgba(51, 51, 51, 1);
+	}
+
+	.date {
+		width: 240rpx;
+		height: 34rpx;
+		font-size: 24rpx;
+		font-family: PingFang SC;
+		font-weight: 400;
+		color: rgba(153, 153, 153, 1);
+		text-align: right;
+	}
+
+	.right {
+		width: 160rpx;
+		height: 40rpx;
+		display: flex;
+	}
+
+	.tong {
+		font-size: 28rpx;
+		font-family: PingFang SC;
+		font-weight: 400;
+		color: rgba(153, 153, 153, 1);
+		margin-right: 25rpx;
+	}
+
+	.left {
+		width:100%;
+		display: flex;
+		justify-content: space-between;
+	}
+
+	.num {
+		width: 160rpx;
+		height: 40rpx;
+		font-size: 28rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		line-height: 40rpx;
+		color: rgba(41, 138, 253, 1);
+		margin-left: 14rpx;
+	}
+
+	.item {
+		width: 702rpx;
+		margin: 0 auto;
+		margin-top: 35rpx;
+		background: rgba(249, 252, 255, 1);
+		opacity: 1;
+
+	}
+
+	.content {
+		width: 620rpx;
+		margin: 0 auto;
+		padding-top: 26rpx;
+		padding-bottom: 26rpx;
+		display: flex;
+		justify-content: space-between;
+	}
+
+	.more {
+		width: 620rpx;
+		margin: 0 auto;
+	}
+</style>

+ 70 - 51
pages/mine/myCar.vue

@@ -2,30 +2,14 @@
 <template>
 	<view class="">
 		<!-- 循环体 -->
-		<view class="item" v-for="(item,index) in data" :key="index">
-			<view class="content">
-				<view class="left">
-					<image src="../../static/car_icon_automobile@2x.png" style="width: 50rpx;height: 40rpx;" v-if="item.status==1"></image>
-					<image src="../../static/bike@2x.png" style="width: 50rpx;height: 40rpx;" v-if="item.status==2"></image>
-					<view class="num">{{item.number}}</view>
-				</view>
-				<view class="right" @tap="seeMore(index)">
-					<view class="tong">通行记录</view>
-					<image src="../../static/icon_combo_nor@2x.png" style="width: 20rpx;height: 12rpx;margin-top: 15rpx;" v-show="!item.show"></image>
-					<image src="../../static/icon_combo_set@2x.png" style="width: 20rpx;height: 12rpx;margin-top: 15rpx;" v-show="item.show"></image>
-				</view>
-			</view>
-			<view class="more" v-show="item.show">
-				<view class="list" v-for="(list,index) in item.moreInfo" :key="index">
-					<view class="listText">
-						{{list.title}}
-					</view>
-					<view class="date">
-						{{list.date}}
+		<scroll ref="pullScroll" :pullDown="pullDown" :pullUp="loadData">
+			<view class="item" v-for="(item,index) in data" :key="index" @tap="seeDetail(item)">
+					<view class="num">{{item.carNo}}</view>
+						<view style="width: 400rpx;height: 180rpx;margin-left: 70rpx;">
+							<image src="../../static/carBg.png" style="width:100%;height:100%;" ></image>
 					</view>
-				</view>
 			</view>
-		</view>
+		</scroll>
 		<!-- 绑定新的车辆 -->
 		<view class="btn" @tap="addCar">
 			绑定新的车辆
@@ -34,6 +18,7 @@
 </template>
 
 <script>
+	
 	export default {
 		data() {
 			return {
@@ -41,32 +26,65 @@
 				data: []
 			}
 		},
+		onLoad() {
+			this.refresh();
+		},
 		mounted() {
-			this.getCarData()
+			
 		},
 		methods: {
-			//获取车辆数据
-			getCarData() {
-				 uni.showLoading({
-				 	mask:true,
-					title:'加载中'
-				 })
-				this.http.httpRequest('/wxapplet/ownercar/list', 'get', {
-					cardId: uni.getStorageSync('idNumber'),
-					comtyId: uni.getStorageSync('comtyId')
-				}, true).then((res) => {
-					console.log(res)
-					if(res.code==0){
-						uni.hideLoading()
-					}else{
-					uni.hideLoading()
-					  uni.showToast({
-								title:res.msg,
-								'icon':'none'
-						 })	
-					}
+			// 查看汽车通行记录
+			seeDetail(item){
+				uni.navigateTo({
+					url:'./carList?id='+item.carNo
 				})
 			},
+			// 刷新页面
+			refresh() {
+				this.$nextTick(() => {
+					this.$refs.pullScroll.refresh();
+				});
+			},
+			// 向下拉刷新
+			pullDown(pullScroll) {
+				setTimeout(() => {
+					this.loadData(pullScroll);
+				}, 200);
+			},
+			//获取加载数据
+			loadData(pullScroll) {
+				
+				this.pageNum = pullScroll.page
+				setTimeout(() => {
+					this.http.httpRequest('/wxapplet/ownercar/list', 'get', {
+						// cardNo: uni.getStorageSync('idNumber'),
+						pageNum: pullScroll.page,
+						pageSize: 3,
+						cardId: uni.getStorageSync('idNumber'),
+					}).then((res) => {
+						console.log(res)
+						if (res.code == 0) {
+							//判断数据是否加载完
+							if (this.data.length == res.data.total) {
+								pullScroll.finish();
+							} else {
+								pullScroll.success();
+								let data = res.data.rows
+								this.data = this.data.concat(data);
+							}
+						} else {
+							pullScroll.finish();
+							uni.showToast({
+								title: res.msg,
+								"icon": 'none'
+							})
+						}
+					}).catch(() => {
+						pullScroll.finish();
+					})
+				}, 500);
+			},
+		
 			// 查看或隐藏记录
 			seeMore(index) {
 				this.data[index].show = !this.data[index].show
@@ -141,8 +159,9 @@
 	}
 
 	.left {
-		width: 210rpx;
+		width:100%;
 		display: flex;
+		justify-content: space-between;
 	}
 
 	.num {
@@ -152,19 +171,19 @@
 		font-family: PingFang SC;
 		font-weight: bold;
 		line-height: 40rpx;
-		color: rgba(41, 138, 253, 1);
-		margin-left: 14rpx;
+		color:rgba(51,51,51,1);
+		margin-top: 70rpx;
+		margin-left: 60rpx;
 	}
-
 	.item {
 		width: 702rpx;
 		margin: 0 auto;
+		display: flex;
+		height: 180rpx;
 		margin-top: 35rpx;
-		background: rgba(249, 252, 255, 1);
-		opacity: 1;
-
+		background:rgba(241,245,249,1);
+		border-radius:20rpx;
 	}
-
 	.content {
 		width: 620rpx;
 		margin: 0 auto;

+ 104 - 76
pages/mine/myHouse.vue

@@ -8,12 +8,12 @@
 						<image src="../../static/house_icon_location@2x.png" style="width: 40rpx;height:40rpx;margin-right: 18rpx;"></image>
 						<view class="text">{{item.address}}</view>
 					</view>
-					
+
 				</view>
-				<view class="address" v-for="(list,index) in item.ownerBases" :key="index">
-					<image src="../../static/house_icon_house@2x.png" style="width: 40rpx;height:40rpx;margin-right: 18rpx;" ></image>
-					<view class="text">{{list}}</view>
-					<view class="delete" @tap="deleteHouse()">
+				<view class="address" v-for="(list,index1) in item.ownerHouse" :key="index1">
+					<image src="../../static/house_icon_house@2x.png" style="width: 40rpx;height:40rpx;margin-right: 18rpx;"></image>
+					<view class="text">{{list.houseName}}</view>
+					<view class="delete" @tap="deleteHouse(list.houseId,item.id)">
 						删除
 					</view>
 				</view>
@@ -25,55 +25,78 @@
 </template>
 
 <script>
-	export default{
-		data(){
-			return{
-				  data:[
-					 ]
+	export default {
+		data() {
+			return {
+				data: []
 			}
 		},
-		mounted(){
+		mounted() {
 			this.getHouseData()
 		},
-		methods:{
+		methods: {
 			// 删除房屋
-			deleteHouse(item){
+			deleteHouse(item, id) {
+				console.log(item, id)
 				uni.showModal({
-				    title: '提示',
-				    content: '您确定删除当前房屋信息',
-				    success:  (res) => {
-				        if (res.confirm) {
-				            console.log('用户点击确定');
-				        } else if (res.cancel) {
-				            console.log('用户点击取消');
-				        }
-				    }
+					title: '提示',
+					content: '您确定删除当前房屋信息',
+					success: (res) => {
+						if (res.confirm) {
+							this.http.httpRequest('/wxapplet/owner/peopleInfor/delHouse', 'post', {
+								cardNo: uni.getStorageSync('idNumber'),
+								comtyId: id,
+								houseId: item
+							}, true).then((res) => {
+								if (res.code == 0) {
+									uni.showToast({
+										title: '删除成功',
+										'icon': 'success'
+									})
+									this.getHouseData()
+								} else {
+									uni.showToast({
+										title: res.msg,
+										'icon': 'none'
+									})
+
+								}
+							})
+						} else if (res.cancel) {
+							console.log('用户点击取消');
+						}
+					}
 				});
 			},
 			// 添加房屋信息
-			addMyHouse(){
+			addMyHouse() {
 				uni.navigateTo({
-					url:'../authentication/city'
+					url: '../authentication/city'
 				})
 			},
 			//获取房屋数据
-			getHouseData(){
+			getHouseData() {
 				uni.showLoading({
-					mask:true,
-					title:'加载中'
+					mask: true,
+					title: '加载中'
 				})
-				this.http.httpRequest('/wxapplet/ownerbasestruct/list','get',{userId:String(uni.getStorageSync('userId'))},true).then((res)=>{
+				this.http.httpRequest('/wxapplet/ownerbasestruct/list', 'get', {
+					userId: String(uni.getStorageSync('userId'))
+				}, true).then((res) => {
 					console.log(res)
-					if(res.code==0){
+					if (res.code == 0) {
 						uni.hideLoading()
-						this.data=res.data
-					}else{
+						this.data = res.data
+					} else {
 						uni.hideLoading()
 						uni.showToast({
-							title:res.msg,
-							"icon":'none'
+							title: res.msg,
+							"icon": 'none'
 						})
 					}
+				}).catch(() => {
+
+					uni.hideLoading()
 				})
 			}
 		}
@@ -81,74 +104,79 @@
 </script>
 
 <style>
-	.btn{
-		width:702rpx;
-		height:90rpx;
-		background:rgba(41,138,253,1);
-		opacity:1;
-		border-radius:18rpx;
-		font-size:32rpx;
-		font-family:PingFang SC;
-		font-weight:bold;
-		line-height:90rpx;
-		color:rgba(255,255,255,1);
+	.btn {
+		width: 702rpx;
+		height: 90rpx;
+		background: rgba(41, 138, 253, 1);
+		opacity: 1;
+		border-radius: 18rpx;
+		font-size: 32rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		line-height: 90rpx;
+		color: rgba(255, 255, 255, 1);
 		text-align: center;
 		position: absolute;
 		bottom: 56rpx;
 		left: 26rpx;
 	}
-	.address{
+
+	.address {
 		width: 100%;
 		height: 40rpx;
-		margin-top:42rpx ;
+		margin-top: 42rpx;
 		margin-bottom: 20rpx;
 		display: flex;
 	}
-	
-	.delete{
-		width:60rpx;
-		height:32rpx;
-		font-size:22rpx;
-		font-family:PingFang SC;
-		font-weight:400;
-		color:rgba(41,138,253,1);
+
+	.delete {
+		width: 60rpx;
+		height: 32rpx;
+		font-size: 22rpx;
+		font-family: PingFang SC;
+		font-weight: 400;
+		color: rgba(41, 138, 253, 1);
 	}
-	.item{
-		width:702rpx;
+
+	.item {
+		width: 702rpx;
 		/* height:164rpx; */
-		background:rgba(249,252,255,1);
-		opacity:1;
+		background: rgba(249, 252, 255, 1);
+		opacity: 1;
 		margin: 0 auto;
 		margin-top: 40rpx;
 		overflow: hidden;
 	}
-	.content{
+
+	.content {
 		width: 622rpx;
 		margin: 0 auto;
 	}
-	.city{
+
+	.city {
 		width: 100%;
 		height: 40rpx;
 		display: flex;
 		justify-content: space-between;
 		margin-top: 26rpx;
 	}
-	.text{
-		width:400rpx;
-		height:40rpx;
-		font-size:28rpx;
-		font-family:PingFang SC;
-		font-weight:bold;
-		line-height:40rpx;
-		color:rgba(41,138,253,1);
+
+	.text {
+		width: 400rpx;
+		height: 40rpx;
+		font-size: 28rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		line-height: 40rpx;
+		color: rgba(41, 138, 253, 1);
 	}
-	.address .text{
+
+	.address .text {
 		width: 550rpx;
-		height:36rpx;
-		font-size:26rpx;
-		font-family:PingFang SC;
-		font-weight:400;
-		color:rgba(51,51,51,1);
+		height: 36rpx;
+		font-size: 26rpx;
+		font-family: PingFang SC;
+		font-weight: 400;
+		color: rgba(51, 51, 51, 1);
 	}
-	
-</style>
+</style>

+ 133 - 70
pages/mine/myInfo.vue

@@ -1,127 +1,190 @@
- <!-- 个人资料 -->
+<!-- 个人资料 -->
 <template>
 	<view class="">
 		<view style="width: 100%;border-bottom:2rpx solid rgba(247,247,247,1);height:88rpx;margin-top: 30rpx;overflow: hidden;">
 			<view class="item" @tap="changeHeadPhoto">
-				 <view class="left">头像</view>
-				 <view class="right">
-					 <image :src="headImg" style="width: 72rpx;height: 72rpx;border-radius: 50%;margin-right: 20rpx;"></image>
-					 <image src="../../static/icon_more@2x.png" style="width: 15rpx;height: 23rpx;margin-bottom:30rpx ;"></image>
-				 </view>
+				<view class="left">头像</view>
+				<view class="right">
+					<image :src="headImg" style="width: 72rpx;height: 72rpx;border-radius: 50%;margin-right: 20rpx;"></image>
+					<image src="../../static/icon_more@2x.png" style="width: 15rpx;height: 23rpx;margin-bottom:30rpx ;"></image>
+				</view>
 			</view>
 		</view>
 		<!-- 昵称 -->
 		<view style="width: 100%;border-bottom:2rpx solid rgba(247,247,247,1);height:88rpx;margin-top: 30rpx;overflow: hidden;">
 			<view class="item">
-				 <view class="left">昵称</view>
-				 <view class="right" style="width:500rpx;position: relative;">
-					  <input type="text"  @bulr="changeName" v-model="userName" style="max-width: 400rpx;height: 40rpx;text-align: right;position: absolute;right: 37rpx;top: 10rpx;color:rgba(153,153,153,1);">
-					 <image src="../../static/icon_more@2x.png" style="width: 15rpx;height: 23rpx;position: absolute;right: 0;bottom:35rpx ;"></image>
-				 </view>
+				<view class="left">昵称</view>
+				<view class="right" style="width:500rpx;position: relative;">
+					<input type="text" @blur="changeName" v-model="userName" style="max-width: 400rpx;height: 40rpx;text-align: right;position: absolute;right: 37rpx;top: 10rpx;color:rgba(153,153,153,1);">
+					<image src="../../static/icon_more@2x.png" style="width: 15rpx;height: 23rpx;position: absolute;right: 0;bottom:35rpx ;"></image>
+				</view>
 			</view>
 		</view>
 		<!-- 手机号 -->
 		<view style="width: 100%;border-bottom:2rpx solid rgba(247,247,247,1);height:88rpx;margin-top: 30rpx;overflow: hidden;">
 			<view class="item">
-				 <view class="left" style="width: 98rpx;">手机号</view>
-				 <view class="right" style="width:500rpx;position: relative;">
-					  <input type="number" @blur="changePhone" v-model="phone" style="max-width: 400rpx;height: 40rpx;text-align: right;position: absolute;right: 37rpx;top: 10rpx;color:rgba(153,153,153,1);">
-					 <image src="../../static/icon_more@2x.png" style="width: 15rpx;height: 23rpx;position: absolute;right: 0;bottom:35rpx ;"></image>
-				 </view>
+				<view class="left" style="width: 98rpx;">手机号</view>
+				<view class="right" style="width:500rpx;position: relative;">
+					<input type="number" @blur="changePhone" v-model="phone" style="max-width: 400rpx;height: 40rpx;text-align: right;position: absolute;right: 37rpx;top: 10rpx;color:rgba(153,153,153,1);">
+					<image src="../../static/icon_more@2x.png" style="width: 15rpx;height: 23rpx;position: absolute;right: 0;bottom:35rpx ;"></image>
+				</view>
 			</view>
 		</view>
 		<!-- 微信 -->
 		<view style="width: 100%;border-bottom:2rpx solid rgba(247,247,247,1);height:88rpx;margin-top: 30rpx;overflow: hidden;">
 			<view class="item" @tap="wxLogin">
-				 <view class="left" style="width: 98rpx;">微信</view>
-				 <view class="right" style="width:500rpx;position: relative;">
-					  <text  style="max-width: 400rpx;height: 40rpx;text-align: right;position: absolute;right: 37rpx;top: 10rpx;color:rgba(153,153,153,1);">已绑定</text>
-					 <image src="../../static/icon_more@2x.png" style="width: 15rpx;height: 23rpx;position: absolute;right: 0;bottom:35rpx ;"></image>
-				 </view>
+				<view class="left" style="width: 98rpx;">微信</view>
+				<view class="right" style="width:500rpx;position: relative;">
+					<text style="max-width: 400rpx;height: 40rpx;text-align: right;position: absolute;right: 37rpx;top: 10rpx;color:rgba(153,153,153,1);">已绑定</text>
+					<image src="../../static/icon_more@2x.png" style="width: 15rpx;height: 23rpx;position: absolute;right: 0;bottom:35rpx ;"></image>
+				</view>
 			</view>
 		</view>
 		<!-- 人脸模板 -->
 		<view style="width: 100%;border-bottom:2rpx solid rgba(247,247,247,1);height:300rpx;margin-top: 30rpx;overflow: hidden;">
 			<view class="item" style="height: 100%;">
-				 <view class="left" style="width: 132rpx;margin-top: 128rpx;">人脸模板</view>
-				 <view class="right" style="width:500rpx;position: relative;">
-					  <image src="../../static/care_family.png" style="width: 256rpx;height:256rpx;position: absolute;right: 37rpx;color:rgba(153,153,153,1);"></image>
-					 <image src="../../static/icon_more@2x.png" style="width: 15rpx;height: 23rpx;position: absolute;right: 0;bottom:142rpx ;"></image>
-				 </view>
+				<view class="left" style="width: 132rpx;margin-top: 128rpx;">人脸模板</view>
+				<view class="right" style="width:500rpx;position: relative;" @tap="changeFacePhoto">
+					<image src="../../static/care_family.png" style="width: 256rpx;height:256rpx;position: absolute;right: 37rpx;color:rgba(153,153,153,1);"></image>
+					<image src="../../static/icon_more@2x.png" style="width: 15rpx;height: 23rpx;position: absolute;right: 0;bottom:142rpx ;"></image>
+				</view>
 			</view>
 		</view>
 	</view>
 </template>
 
 <script>
-	export default{
-		data(){
-			return{
-				userName:'呵呵',//昵称
-				phone:15855391987,//手机号
-				headImg:'',//头像
+	export default {
+		data() {
+			return {
+				userName: '呵呵', //昵称
+				phone: 15855391987, //手机号
+				headImg: '', //头像
+				photo: '', //人脸
 			}
 		},
-		methods:{
+		methods: {
+			// 修改信息方法
+			updateInfo() {
+				uni.showLoading({
+					mask: true,
+					title: '加载中'
+				})
+				this.http.httpRequest('/wxapplet/ownersid/update/user', 'post', {
+					CardNo: uni.getStorageSync('idNumber'),
+					userId: uni.getStorageSync('userId'),
+					loginName: this.userName,
+					avatar: this.headImg,
+					facePic: this.photo,
+					ComtyId: uni.getStorageSync('comtyId'),
+				}, true).then((res) => {
+					if (res.code == 0) {
+						uni.hideLoading()
+					} else {
+						uni.hideLoading()
+						uni.showToast({
+							title: res.msg,
+							'icon': 'none'
+						})
+					}
+				}).catch((res) => {
+					uni.hideLoading()
+				})
+			},
 			// 修改头像
-			changeHeadPhoto(){
+			changeHeadPhoto() {
+				uni.chooseImage({
+					count: 1, //默认9
+					sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
+					// sourceType: ['album'], //从相册选择
+					success: (res) => {
+						wx.uploadFile({
+							filePath: res.tempFiles[0].path,
+							url: 'https://www.szdeao.com/wxapplet/upload/imgPhoto ', //仅为示例,非真实的接口地址
+							name: 'photo',
+							method: 'post',
+							success: (res) => {
+								let data = JSON.parse(res.data)
+								let reg = /,$/gi;
+								this.headImg = data.data.imagesPath.replace(reg, "");
+								console.log(this.headImg)
+								this.updateInfo()
+							}
+						})
+					}
+				})
+			},
+			// 修改人脸图片
+			changeFacePhoto() {
 				uni.chooseImage({
-				    count: 1, //默认9
-				    sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
-				    // sourceType: ['album'], //从相册选择
-				    success: (res)=> {
-				       this.headImg=res.tempFiles[0].path
-				    }
+					count: 1, //默认9
+					sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
+					// sourceType: ['album'], //从相册选择
+					success: (res) => {
+						wx.getFileSystemManager().readFile({
+							filePath: res.tempFiles[0].path, //微信小程序图片默认路径
+							encoding: 'base64', //编码格式
+							success: (res) => {
+								this.photo = res.data
+								this.updateInfo()
+							},
+							fail() {
+
+							}
+						})
+					}
 				});
 			},
 			//微信授权登录
-			wxLogin(){
-				uni.navigateTo({
-					url:"../login/authorization"
-				})
+			wxLogin() {
+				// uni.navigateTo({
+				// 	url:"../login/authorization"
+				// })
 			},
 			// 修改昵称
-			changeName(){
-				
+			changeName() {
+				this.updateInfo()
 			},
 			//修改手机号
-			changePhone(){
-					let phoneReg = /^1[3|4|5|7|8][0-9]{9}$/; //手机号正则校验
-					if(!phoneReg.test(this.phone)){
-						uni.showToast({
-							'icon':'none',
-							title:"手机号码格式不正确"
-						})
-					}else{
-						
-					}
+			changePhone() {
+				let phoneReg = /^1[3|4|5|7|8][0-9]{9}$/; //手机号正则校验
+				if (!phoneReg.test(this.phone)) {
+					uni.showToast({
+						'icon': 'none',
+						title: "手机号码格式不正确"
+					})
+				} else {
+					this.updateInfo()
+				}
 			}
-			
+
 		}
 	}
 </script>
 
 <style>
-	.item{
-		width:698rpx;
+	.item {
+		width: 698rpx;
 		height: 88rpx;
 		margin: 0 auto;
 		display: flex;
 		justify-content: space-between;
-		
+
 	}
-	.left{
-		width:64rpx;
-		height:44rpx;
-		font-size:32rpx;
-		font-family:PingFang SC;
-		font-weight:400;
-		color:rgba(51,51,51,1);
+
+	.left {
+		width: 64rpx;
+		height: 44rpx;
+		font-size: 32rpx;
+		font-family: PingFang SC;
+		font-weight: 400;
+		color: rgba(51, 51, 51, 1);
 		margin-top: 22rpx;
-		opacity:1;
+		opacity: 1;
 	}
-	.right{
-		width:110rpx;
+
+	.right {
+		width: 110rpx;
 		margin-top: 10rpx;
 	}
 </style>

+ 11 - 6
pages/onlineRpair/index.vue

@@ -90,24 +90,29 @@
 								this.total=res.data.total
 								// 判断当前数据是否加载完毕
 								if(this.data.length==res.data.total){
+										pullScroll.finish();
 								}else{
+									pullScroll.success();
 									let data = res.data.rows
 									this.data = this.data.concat(data);
 								}
 							
 							}else{
+								pullScroll.finish();
 								uni.showToast({
 									title:res.msg,
 									"icon":'none'
 								})
 							}
-					})
-					// 判断数据是否加载完毕
-					if (this.data.length >=this.total) {
+					}).catch(()=>{
 						pullScroll.finish();
-					} else {
-						pullScroll.success();
-					}
+					})
+					// // 判断数据是否加载完毕
+					// if (this.data.length >=this.total) {
+					// 	pullScroll.finish();
+					// } else {
+					// 	pullScroll.success();
+					// }
 				}, 500);
 			},
 			// 我的评价

+ 46 - 0
pages/onlineRpair/repairSuccess.vue

@@ -0,0 +1,46 @@
+<!-- 投诉成功 -->
+<template>
+	<view class="">
+		<view  class="imgBox">
+			<image src="../../static/null_image_success@2x.png" style="width: 100%;height: 100%;"></image>
+		</view>
+		<view class="text">
+			恭喜您~ 报修成功~
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		data(){
+			return{
+				
+			}
+		},
+		onUnload() {
+			wx.reLaunch({
+			      url: '/pages/onlineRpair/index',
+			    })
+		}
+	}
+</script>
+
+<style>
+	.imgBox{
+		width: 520rpx;
+		height: 520rpx;
+		margin: 0 auto;
+		margin-top: 262rpx;
+		
+	}
+	.text{
+		width:310rpx;
+		height:50rpx;
+		font-size:36rpx;
+		font-family:PingFang SC;
+		font-weight:400;
+		color:rgba(36,36,36,1);
+		margin-top: 47rpx;
+		margin: 0 auto;
+	}
+</style>

+ 50 - 29
pages/onlineRpair/wantRepair.vue

@@ -29,8 +29,7 @@
 				<!-- 图片盒字 -->
 				<view style="width:646rpx;height: 114rpx;position: absolute;left: 24rpx;bottom: 40rpx;display: flex;">
 					<view style="height: 114rpx;margin-right: 10rpx;display: flex;justify-content: space-between;" v-show="imgData">
-						<image style="width: 114rpx;height: 114rpx;margin-right: 10rpx;" :src="item" v-for="(item,index) in imgData"
-						 :key="index"></image>
+						<image style="width: 114rpx;height: 114rpx;margin-right: 10rpx;" :src="item" v-for="(item,index) in imgData" :key="index"></image>
 					</view>
 					<image src="../../static/circle_image@2x.png" style="width: 114rpx;height: 114rpx;" @tap="uploadImg(item)"></image>
 				</view>
@@ -44,7 +43,7 @@
 	export default {
 		data() {
 			return {
-				isloading:false,//加载
+				isloading: false, //加载
 				digest: '', //报修摘要
 				textRea: '', //评价内容
 				starNum: 0, //星星数量
@@ -77,22 +76,44 @@
 						sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
 						// sourceType: ['album'], //从相册选择
 						success: (res) => {
-							// 判断当前上传照片是否大于三张
-							if (this.imgData.length == 3) {
-								return
-							} else {
-								console.log(res)
-								 res.tempFiles.forEach((item)=>{
-									 console.log(item.path)
-									 this.imgData.push(item.path)
-								 })
-								
-							}
-
+							console.log(res)
+							var successUp = 0; //成功个数
+							var failUp = 0; //失败个数
+							var length = res.tempFilePaths.length; //总共个数
+							var i = 0; //第几个
+							this.uploadDIY(res.tempFilePaths, successUp, failUp, i, length);
 						},
-
 					});
 				}
+			},
+			// 上传图片
+			uploadDIY(filePaths, successUp, failUp, i, length) {
+				wx.uploadFile({
+					filePath: filePaths[i],
+					url: 'https://www.szdeao.com/wxapplet/upload/imgPhoto ', //仅为示例,非真实的接口地址
+					name: 'photo',
+					method: 'post',
+					success: (resp) => {
+						let data =JSON.parse(resp.data)
+						console.log(data)
+						 let reg=/,$/gi;
+						  let str=data.data.imagesPath.replace(reg,"");
+						  this.imgData.push(str)
+						  console.log(this.imgData)
+						successUp++;
+					},
+					fail: (res) => {
+						failUp++;
+					},
+					complete: () => {
+						i++;
+						if (i == length) {
+							
+						} else { //递归调用uploadDIY函数
+							this.uploadDIY(filePaths, successUp, failUp, i, length);
+						}
+					},
+				});
 
 			},
 			// 提交
@@ -100,26 +121,26 @@
 				if (!this.digest || !this.textRea || !this.imgData) {
 					return
 				} else {
-					this.isloading=true
+					this.isloading = true
 					this.http.httpRequest('/wxapplet/ownerreprair/add', 'post', {
 						userId: uni.getStorageSync('userId'),
 						createBy: uni.getStorageSync('createBy'),
-						content:this.textRea,
-						PhotosUrlList:this.imgData,
-						reprairType:this.digest,
-						ownerPhone:uni.getStorageSync('phoneNumber')
-					}, true).then((res)=>{
+						content: this.textRea,
+						PhotosUrlList: this.imgData,
+						reprairType: this.digest,
+						ownerPhone: uni.getStorageSync('phoneNumber')
+					}, true).then((res) => {
 						console.log(res)
-						if(res.code==0){
-							this.isloading=false
+						if (res.code == 0) {
+							this.isloading = false
 							uni.navigateTo({
-								url:'./repairSuccess'
+								url: './repairSuccess'
 							})
-						}else{
-							this.isLoading=false
+						} else {
+							this.isLoading = false
 							uni.showToast({
-								title:res.msg,
-								'icon':'none'
+								title: res.msg,
+								'icon': 'none'
 							})
 						}
 					})

+ 21 - 65
pages/openDoor/openDoorList.vue

@@ -4,76 +4,25 @@
 	<view class="">
 		<image src="../../static/history_top_bgimage@2x.png" style="width: 100%;height: 278rpx;"></image>
 		<view class="main">
-			<view class="infoBox" style="margin-top: 40rpx;">
-				<view class="title">
+			<!-- <view class="infoBox" style="margin-top: 40rpx;"> -->
+				<!-- <view class="title">
 					番茄小区
-				</view>
-				<view class="item">
-					<view class="leftIcon">
-						<image src="../../static/open_icon@2x.png" style="width: 100%;height: 100%;"></image>
-					</view>
-					<view class="" style="position: absolute;left: 100rpx;">
-						<view class="name">1号楼 2单元 602</view>
-						<view class="dec">
-							解锁时间:2020-02-02 13:01
-						</view>
-					</view>
-
-				</view>
-				<view class="item">
-					<view class="leftIcon">
-						<image src="../../static/open_icon@2x.png" style="width: 100%;height: 100%;"></image>
-					</view>
-					<view class="" style="position: absolute;left: 100rpx;">
-						<view class="name">1号楼 2单元 602</view>
-						<view class="dec">
-							解锁时间:2020-02-02 13:01
-						</view>
-					</view>
-
-				</view>
-				<view class="item">
-					<view class="leftIcon">
-						<image src="../../static/open_icon@2x.png" style="width: 100%;height: 100%;"></image>
-					</view>
-					<view class="" style="position: absolute;left: 100rpx;">
-						<view class="name">1号楼 2单元 602</view>
-						<view class="dec">
-							解锁时间:2020-02-02 13:01
-						</view>
-					</view>
-
-				</view>
-			</view>
-			<view class="infoBox" style="margin-top: 40rpx;">
-				<view class="title">
-					花园小区
-				</view>
-				<view class="item">
-					<view class="leftIcon">
-						<image src="../../static/open_icon@2x.png" style="width: 100%;height: 100%;"></image>
-					</view>
-					<view class="" style="position: absolute;left: 100rpx;">
-						<view class="name">1号楼 2单元 602</view>
-						<view class="dec">
-							解锁时间:2020-02-02 13:01
-						</view>
-					</view>
-				</view>
-				<view class="item">
+				</view> -->
+				<view class="item" v-for="(item,index) in data" :key="index">
 					<view class="leftIcon">
 						<image src="../../static/open_icon@2x.png" style="width: 100%;height: 100%;"></image>
 					</view>
 					<view class="" style="position: absolute;left: 100rpx;">
-						<view class="name">1号楼 2单元 602</view>
+						<view class="name">{{item.deviceName}}</view>
 						<view class="dec">
-							解锁时间:2020-02-02 13:01
+							解锁时间:{{item.createTime}}
 						</view>
 					</view>
 
 				</view>
-			</view>
-
+			
+			<!-- </view> -->
+			
 		</view>
 
 	</view>
@@ -83,7 +32,7 @@
 	export default {
 		data() {
 			return {
-
+				data:[]
 			}
 		},
 		mounted() {
@@ -92,19 +41,26 @@
 		methods: {
 			// 获取列表数据
 			getList() {
-				this.http.httpRequest('/wxapplet/owneradvice/comtydevice/list', 'post', {
-					userId: uni.getStorageSync('userId'),
-					comtyId: uni.getStorageSync('comtyId')
+				uni.showLoading({
+					mask:true,
+					title:'加载中'
+				})
+				this.http.httpRequest('/wxapplet/owner/openDoor/list', 'get', {
+					phoneNum:uni.getStorageSync('phoneNumber')
 				}, true).then((res) => {
 					console.log(res)
 					if (res.code == 0) {
-						
+						uni.hideLoading()
+						this.data=res.data.rows
 					} else {
+						uni.hideLoading()
 						uni.showToast({
 							title: res.msg,
 							'icon': 'none'
 						})
 					}
+				}).catch(()=>{
+					uni.hideLoading()
 				})
 			},
 			// 查看解锁记录

+ 22 - 0
pages/user/access/access.vue

@@ -0,0 +1,22 @@
+<template>
+	<view class="jyy-bg">
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			};
+		}
+	}
+</script>
+
+<style>
+.jyy-bg{
+	height: 1250upx;
+	background-image: url("/static/access/bg.png");
+}
+</style>

+ 290 - 0
pages/user/account/account.vue

@@ -0,0 +1,290 @@
+<template>
+	<view class="uni-flex uni-column" id="account">
+		<view class="uni-flex uni-column">
+			<uni-list>
+				<view class="uni-flex space-between align-items listHead ">
+					<view class="uni-flex  headRt">头像</view>
+					<view class="uni-flex headLf space-between">
+						<!-- #ifndef H5 -->
+						<avatar
+							selWidth="200px"
+							selHeight="400upx"
+							@upload="myUpload"
+							:avatarSrc="user.avatarUrl"
+							avatarStyle="width: 120upx; height: 120upx; "
+							v-if="avatarUrl != null"
+						></avatar>
+						<avatar
+							selWidth="200px"
+							selHeight="400upx"
+							@upload="myUpload"
+							:avatarSrc="url"
+							avatarStyle="width: 120upx; height: 120upx; "
+							v-if="avatarUrl == null"
+						></avatar>
+						<!-- #endif -->
+						<!-- #ifdef H5 -->
+						<view class="uploadImg">
+							<robby-image-upload
+								v-model="imageData"
+								fileKeyName="data"
+								:limit="1"
+								:server-url="serverUrl"
+								:showUploadProgress="show"
+								:form-data="formData"
+								@delete="deleteImage"
+								@add="addImage"
+							></robby-image-upload>
+						</view>
+						<!-- #endif -->
+						<ni-icon class="uni-icon-wrapper uni-flex justify-align-center" :size="20" color="#bbb" type="arrowright" />
+					</view>
+				</view>
+				<uni-list-item title="昵称" :show-badge="true" :badge-text="nickName" @click="nickNameReset" />
+				<uni-list-item :show-badge="true" :badge-text="user.mobile" title="手机号" @click="showTip" />
+			</uni-list>
+		</view>
+	</view>
+</template>
+
+<script>
+import uniList from '@/components/uni-list/uni-list.vue';
+import uniListItem from '@/components/uni-list-item/uni-list-item02.vue';
+import robbyImageUpload from '../../../components/robby-image-upload/robby-image-uploadL.vue';
+var graceChecker = require('../../../common/graceChecker.js');
+
+import { mapState, mapMutations } from 'vuex';
+import niIcon from '@/components/ni-iconss/ni-icons.vue';
+import avatar from '@/components/yq-avatar/yq-avatar.vue';
+export default {
+	computed: {
+		...mapState(['hasLogin', 'forcedLogin', 'jyyUser'])
+	},
+	components: {
+		uniList,
+		uniListItem,
+		niIcon,
+		avatar,
+		robbyImageUpload
+	},
+	methods: {
+		...mapMutations(['login']),
+		deleteImage() {},
+		addImage: function(e) {
+			if (e.allImages.length > 0) {
+				uni.showToast({
+					title: '修改成功',
+					icon: 'success',
+					duration: 1000
+				});
+				this.user.avatarUrl = e.allImages[0];
+				this.avatarUrl = e.allImages[0];
+				this.login(JSON.stringify(this.user));
+				this.postData();
+			}
+		},
+		postData() {
+			uni.request({
+				url: this.webUrl + 'SaveInfo',
+				method: 'POST',
+				data: {
+					userid: this.user.id,
+					avatarUrl: this.avatarUrl
+				},
+				header: {
+					'content-type': 'application/x-www-form-urlencoded'
+				},
+				success: res => {
+					uni.hideLoading();
+				},
+				fail: () => {},
+				complete: () => {}
+			});
+		},
+		showTip() {
+			uni.showToast({
+				title: '手机号不可修改!',
+				duration: 1000,
+				icon: 'none'
+			});
+		},
+		nickNameReset() {
+			uni.navigateTo({
+				url: 'nickNameReset'
+			});
+		},
+		myUpload(rsp) {
+			this.user.avatarUrl = rsp.path;
+			uni.uploadFile({
+				url: this.webUrl + 'Upload',
+				filePath: this.user.avatarUrl,
+				name: 'data',
+				success: res => {
+					uni.showToast({
+						title: '修改成功',
+						icon: 'success',
+						duration: 1000
+					});
+					this.user.avatarUrl = res.data;
+					this.avatarUrl = res.data;
+					this.login(JSON.stringify(this.user));
+					this.postData();
+				},
+				fail: err => {
+					uni.showModal({
+						content: err.errMsg,
+						showCancel: false
+					});
+					uni.hideLoading();
+				},
+				complete: () => {}
+			});
+		},
+		formSubmit: function(e) {
+			var rule = [
+				{
+					name: 'nickName',
+					checkType: 'notnull',
+					checkRule: '1,4',
+					errorMsg: '请填写账号呢称'
+				},
+				{
+					name: 'mobile',
+					checkType: 'string',
+					checkRule: '11',
+					errorMsg: '手机号码11个字符'
+				}
+			];
+
+			//进行表单检查
+			var formData = e.detail.value;
+			var checkRes = graceChecker.check(formData, rule);
+			if (checkRes) {
+				uni.request({
+					url: this.webUrl + 'SaveInfo',
+					method: 'POST',
+					data: {
+						user: JSON.stringify(this.user)
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						uni.hideLoading();
+						this.login(JSON.stringify(this.user));
+						uni.showModal({
+							title: '系统提示',
+							content: res.data.result.resultInfo,
+							showCancel: false,
+							success: function(res) {
+								if (res.confirm) {
+									uni.switchTab({
+										url: '../user/user'
+									});
+								}
+							}
+						});
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			} else {
+				uni.showToast({
+					title: graceChecker.error,
+					icon: 'none'
+				});
+			}
+		}
+	},
+	onShow() {
+		this.user = JSON.parse(this.jyyUser);
+		this.nickName = this.user.nickName;
+	},
+	onLoad(e) {
+		if (!this.hasLogin) {
+			uni.navigateTo({
+				url: '../login/login'
+			});
+		} else {
+			this.user = JSON.parse(this.jyyUser);
+			this.nickName = this.user.nickName;
+			// #ifdef MP-WEIXIN
+			this.avatarUrl = this.user.avatarUrl;
+			// #endif
+			// #ifdef H5
+			this.imageData[0] = this.user.avatarUrl;
+			// #endif
+		}
+	},
+	data() {
+		return {
+			imageData: [],
+			serverUrl: this.webUrl + 'Upload',
+			show: true,
+			formData: {
+				userId: 2
+			},
+			user: {},
+			nickName: '',
+			avatarUrl: '',
+			url: '../../static/user/02.png'
+		};
+	}
+};
+</script>
+
+<style>
+.uni-list-item__container {
+}
+.headLf {
+	/* width: 25%; */
+	margin-right: 30upx;
+	/* padding-right: 30upx; */
+}
+.headRt {
+	font-size: 32upx;
+	color: #333333;
+}
+.listHead {
+	/* width: 100%; */
+	height: 164upx;
+	margin-left: 28upx;
+	box-sizing: border-box;
+	border-bottom: 1upx solid #f2f2f2;
+}
+
+.uni-badge-success {
+	background: none;
+	color: #999999;
+}
+
+#account .uni-badge-success {
+	font-size: 28upx;
+}
+
+.uni-list-item__content-title {
+	color: #333333;
+}
+
+.uni-list-item:first-child .uni-list-item__content .uni-list-item__content-title {
+	display: flex;
+	align-items: center;
+	height: 84upx;
+}
+
+.uni-list-item__container {
+	position: relative;
+	padding: 20upx 30upx !important;
+}
+
+.uni-list-item__icon {
+	position: absolute;
+	right: 50upx;
+}
+
+.uni-list-item__icon image {
+	width: 100upx;
+	height: 100upx;
+	border-radius: 50%;
+}
+</style>

+ 109 - 0
pages/user/account/nickNameReset.vue

@@ -0,0 +1,109 @@
+<template>
+	<view class="uni-flex uni-column nickNameReset jz_address">
+		<view class="uni-flex">
+			<input v-model="user.nickName" />
+		</view>
+		<view class="addBtnwrap uni-flex justify-align-center">
+			<view class="addBtn uni-flex justify-align-center" @click="submit">保存昵称</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+	export default {
+		computed: {
+			...mapState(['hasLogin', 'forcedLogin', 'jyyUser'])
+		},
+		data() {
+			return {
+				user: {}
+			}
+		},
+		onLoad() {
+			if (!this.hasLogin) {
+				uni.navigateTo({
+					url: '../login/login',
+				});
+			} else {
+				this.user = JSON.parse(this.jyyUser);
+			}
+
+		},
+		methods: {
+			...mapMutations(['login']),
+			submit() {
+				if (this.nickName == '') {
+					uni.showToast({
+						duration: 1000,
+						title: '昵称不为空',
+						icon: "none"
+					})
+				} else {
+					uni.showLoading({
+						title: '更新中'
+					})
+					uni.request({
+						url: this.webUrl + 'SaveInfo',
+						method: 'POST',
+						data: {
+							userid: this.user.id,
+							nickName: this.user.nickName
+						},
+						header: {
+							'content-type': 'application/x-www-form-urlencoded'
+						},
+						success: res => {
+							uni.hideLoading();
+							this.login(JSON.stringify(this.user));
+
+							uni.showToast({
+								icon: "none",
+								title: res.data.result.resultInfo,
+								success() {
+									setTimeout(() => {
+										uni.navigateBack({
+											delta: 1
+										})
+									}, 1000)
+								}
+							})
+						},
+						fail: () => {},
+						complete: () => {}
+					});
+				}
+			}
+		}
+	}
+</script>
+
+<style>
+	.jz_address .addBtnwrap {
+		width: 100%;
+		margin-top: 30upx;
+	}
+
+	.nickNameReset input {
+		width: 100%;
+		border: 0;
+		background: #FFFFFF;
+		height: 80upx;
+		line-height: 80upx;
+		padding-left: 20upx;
+		box-sizing: border-box;
+	}
+
+	.jz_address .addBtn {
+		width: 550rpx;
+		height: 115rpx;
+		color: #FFFFFF;
+		font-size: 28rpx;
+		margin: 0 auto;
+		background: url(../../../static/btn.png) no-repeat;
+		background-size: 550rpx 115rpx;
+	}
+</style>

+ 224 - 0
pages/user/address/address.vue

@@ -0,0 +1,224 @@
+<template>
+	<view class="uni-flex uni-column address jz_address">
+
+		<view class="uni-flex addresslist uni-column" v-if="addresses.length>0">
+			<view class="addressitem uni-flex space-between align-items" v-for="(item,key) in addresses" :key="key">
+				<view class="itemleft uni-flex uni-column" style="width: 120upx; word-wrap:break-word;"  @click="goOrder(item)">
+					<view class="lefNick">{{item.nickName}}</view>
+					<view v-if="item.defaultVal" class="leftBtn">默认</view>
+				</view>
+				<view class="itemcenter uni-flex uni-column"  @click="goOrder(item)">
+					<view class="centerPhone">{{item.mobile}}</view>
+					<view class="centerAddress">{{item.siteStr}}{{item.addStr}}</view>
+				</view>
+				<view class="itemright uni-flex  justify-align-center">
+					<view class="uni-flex uni-column">
+						<text @click="goService(item)" class="uni-h5">编辑</text>
+						<text @click="del(item,key)" class="uni-h5">删除</text>
+					</view>
+					<view class="itemRt uni-flex justify-align-center" style="margin-left: 10upx;" v-if="url=='../order/order'" @click="goOrder(item)">
+						<uni-icon type="arrowright" size="20" color="#999999"></uni-icon>
+					</view>
+				</view>
+			</view>
+
+			<load-more :loadingType="loadingType" :contentText="contentText"></load-more>
+			<view @click="newService()" class="addBtn-wrap uni-flex justify-align-center" v-if="addresses.length>0">
+				<view class="addBtn uni-flex justify-align-center">新建收货地址</view>
+			</view>
+		</view>
+		<view class="uni-lists uni-flex justify-align-center uni-column" v-if="addresses.length==0">
+			<view class="addressImg uni-flex justify-align-center">
+				<image src="../../../static/address/01.png"></image>
+			</view>
+			<view class="noaddressTitle">1个地址也没有,</view>
+			<view class="noaddressTitle">快去添加收货地址买买吧</view>
+			<view @click="add()" class="addBtn-wrap uni-flex justify-align-center" v-if="addresses.length==0">
+				<view class="addBtn uni-flex justify-align-center">新建收货地址</view>
+			</view>
+		</view>
+
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+
+	import loadMore from '@/components/uni-load-more.vue';
+	import uniIcon from '../../../components/uni-icon/uni-icon.vue';
+	var index;
+	export default {
+		computed: {
+			...mapState(['hasLogin', 'forcedLogin', 'jyyUser'])
+		},
+		data() {
+			return {
+				user: {},
+				url: "",
+				addresses: [],
+				loadingType: 0,
+				contentText: {
+					contentdown: "上拉显示更多",
+					contentrefresh: "正在加载...",
+					contentnomore: "没有更多数据了"
+				}
+			};
+		},
+		onPullDownRefresh() {
+			this.init();
+			setTimeout(function() {
+				uni.stopPullDownRefresh();
+			}, 1000);
+		},
+		onShow() {
+			this.init();
+		},
+		onLoad(e) {
+			this.url = e.url;
+			console.log(this.url)
+			this.init();
+		},
+		methods: {
+			init() {
+				index = 1;
+				if (!this.hasLogin) {
+					uni.navigateTo({
+						url: '../login/login',
+					});
+				} else {
+					this.user = JSON.parse(this.jyyUser);
+					this.getData();
+				}
+			},
+			goOrder: function(e) {
+				if (this.url == undefined || this.url == "undefined") {
+					return false;
+				} else {
+					uni.redirectTo({
+						url: "../order/order?addressId=" + e.id
+					})
+				}
+			},
+			add() {
+				uni.redirectTo({
+					url: "../addressService/addressService?url=../address/address"
+				})
+			},
+			del(e, key) {
+				uni.showModal({
+					content: '确认删除?',
+					success: (res) => {
+						if (res.confirm) {
+							uni.showLoading({
+								title: "操作中"
+							})
+							uni.request({
+								url: this.webUrl + 'DelAddress',
+								method: 'POST',
+								data: {
+									id: e.id,
+									userid: this.user.id
+								},
+								header: {
+									'content-type': 'application/x-www-form-urlencoded'
+								},
+								success: res => {
+									uni.hideLoading();
+									uni.showToast({
+										title: res.data.result.resultInfo,
+										icon: "none"
+									});
+									e.isDeleted = true;
+									this.addresses.splice(key, 1)
+								},
+								fail: () => {},
+								complete: () => {}
+							});
+						}
+					}
+				})
+			},
+			getData() {
+				if (this.loadingType !== 0) {
+					return;
+				}
+				this.loadingType = 1;
+				let user = JSON.parse(this.jyyUser);
+				uni.request({
+					url: this.webUrl + 'AddressList',
+					method: 'POST',
+					data: {
+						pageIndex: index,
+						userid: user.id
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						if (res.data.result.addressList.length > 0) {
+							this.addresses = this.addresses.concat(res.data.result.addressList);
+						} else {
+							this.loadingType = 2;
+							return;
+						}
+						if (index == parseInt(res.data.result.pages)) {
+							this.loadingType = 2;
+							return;
+						} else {
+							this.loadingType = 0;
+						}
+						index++;
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			},
+			newService() {
+				uni.navigateTo({
+					url: "../addressService/addressService?id=0"
+				})
+			},
+			goService: function(e) {
+				if (this.url == undefined) {
+					uni.navigateTo({
+						url: "../addressService/addressService?id=" + e.id
+					})
+				} else {
+					uni.redirectTo({
+						url: "../addressService/addressService?id=" + e.id + "&url=" + this.url
+					})
+				}
+
+			}
+		},
+		onReachBottom() {
+			this.getData();
+		},
+		components: {
+			loadMore,
+			uniIcon
+		}
+	}
+</script>
+<style>
+	page {
+		background: #FFFFFF;
+	}
+
+	.jz_address .addBtn {
+		background: url(../../../static/btn.png) no-repeat;
+		width: 550upx;
+		height: 115upx;
+		color: #FFFFFF;
+		font-size: 28upx;
+		margin: 0 auto;
+		background-size: 550upx 115upx;
+	}
+	
+	.jz_address .addressitem .itemright {
+		margin: 0;
+	}
+</style>

+ 221 - 0
pages/user/addressService/addressService.vue

@@ -0,0 +1,221 @@
+<template>
+	<view class="uni-flex jz_addressServer">
+		<view class="uni-flex uni-flex-item  uni-common-mt uni-column">
+			<form class="uni-flex uni-flex-item uni-column form" @submit="formSubmit" @reset="formReset">
+				<view class="uni-flex uni-row align-items">
+					<view class="uni-flex uni-flex-item">收货人</view>
+					<view class="uni-flex uni-flex-item4 justify-align-center uni-form-item">
+						<input class="uni-input uni-flex-item" v-model="address.nickName" name="nickName" placeholder="请填写收货人姓名" />
+						<view class="uni-flex justify-align-center"><image src="../../../static/address/05.png" class="addPeopleImg"></image></view>
+					</view>
+				</view>
+				<view class="uni-flex  uni-row align-items">
+					<view class="uni-flex uni-flex-item">手机号码</view>
+					<view class="uni-flex uni-flex-item4 uni-form-item"><input class="uni-input" v-model="address.mobile" name="mobile" placeholder="请填写收货人手机号"/></view>
+				</view>
+				<view class="uni-flex  uni-row align-items">
+					<view class="uni-flex uni-flex-item">地区</view>
+					<view class="uni-flex uni-flex-item4 uni-form-item">
+						<input :value="pickerText" class="uni-input" disabled name="area" placeholder="选择地区" @click="showMulLinkageThreePicker"  />
+					</view>
+				</view>
+				<view class="uni-flex  uni-row align-items">
+					<view class="uni-flex uni-flex-item">详细地址</view>
+					<view class="uni-flex uni-flex-item4 uni-form-item"><input class="uni-input" v-model="address.addStr" name="addStr" placeholder="如街道、楼牌号等" /></view>
+				</view>
+				<view class="spaceone"></view>
+				<view class="space"></view>
+				<view class="uni-flex  uni-row align-items">
+					<view class="uni-flex uni-flex-item4">设为默认</view>
+					<view class="uni-flex uni-flex-item"><switch :checked="checked" @change="switch1Change" color="#e40001" /></view>
+				</view>
+				<view class="uni-flex justify-align-center add"><button class="btn" formType="submit">⊕ 保存地址</button></view>
+			</form>
+			
+		</view>
+		<mpvue-city-picker
+			:themeColor="themeColor"
+			ref="mpvueCityPicker"
+			:pickerValueDefault="cityPickerValueDefault"
+			@onCancel="onCancel"
+			@onConfirm="onConfirm"
+		></mpvue-city-picker>
+	</view>
+</template>
+
+<script>
+var graceChecker = require('../../../common/graceChecker.js');
+
+import mpvueCityPicker from '../../../components/mpvue-citypicker/mpvueCityPicker.vue';
+
+import { mapState, mapMutations } from 'vuex';
+
+export default {
+	data() {
+		return {
+			cityPickerValueDefault: [0, 0, 1],
+			themeColor: '#007AFF',
+			pickerText: '',
+			mode: '',
+			address: {},
+			user: {},
+			checked: false,
+			url: ''
+		};
+	},
+	components: {
+		mpvueCityPicker
+	},
+	computed: {
+		...mapState(['hasLogin', 'forcedLogin', 'jyyUser'])
+	},
+	methods: {
+		switch1Change: function(e) {
+			this.address.defaultVal = e.target.value;
+		},
+		onCancel(e) {
+			//console.log(e)
+		},
+		showMulLinkageThreePicker() {
+			this.$refs.mpvueCityPicker.show();
+		},
+		onConfirm(e) {
+			this.pickerText = e.label;
+			this.address.province = e.value[0];
+			this.address.city = e.value[1];
+			this.address.district = e.value[2];
+			this.address.siteStr = e.label;
+		},
+		formSubmit: function(e) {
+			var rule = [
+				{
+					name: 'nickName',
+					checkType: 'notnull',
+					checkRule: '1,4',
+					errorMsg: '请填写收货人'
+				},
+				{
+					name: 'mobile',
+					checkType: 'string',
+					checkRule: '11',
+					errorMsg: '手机号码11个字符'
+				},
+				{
+					name: 'area',
+					checkType: 'notnull',
+					checkRule: '',
+					errorMsg: '请选择地区'
+				},
+				{
+					name: 'addStr',
+					checkType: 'notnull',
+					checkRule: '',
+					errorMsg: '请填写详细地址'
+				}
+			];
+			//进行表单检查
+			var formData = e.detail.value;
+			var checkRes = graceChecker.check(formData, rule);
+			if (checkRes) {
+				uni.request({
+					url: this.webUrl + 'SaveAddress',
+					method: 'POST',
+					data: {
+						address: JSON.stringify(this.address),
+						id: this.address.id,
+						userid: this.user.id
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						uni.hideLoading();
+						uni.showToast({
+							title: res.data.result.resultInfo,
+							icon: 'none'
+						});
+						if (res.data.result.isSuccess) {
+							uni.redirectTo({								
+								url: '../address/address?url=' + this.url
+							});
+						}
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			} else {
+				uni.showToast({
+					title: graceChecker.error,
+					icon: 'none'
+				});
+			}
+		},
+		getData() {
+			uni.request({
+				url: this.webUrl + 'Address',
+				method: 'POST',
+				data: {
+					id: this.address.id
+				},
+				header: {
+					'content-type': 'application/x-www-form-urlencoded'
+				},
+				success: res => {
+					if (res.data.result.isSuccess) {
+						this.showAddress = true;
+						this.address = res.data.address;
+						this.cityPickerValueDefault = [res.data.address.province, res.data.address.city, res.data.address.district];
+						this.pickerText = res.data.address.siteStr;
+						this.checked = res.data.address.defaultVal;
+					}
+				},
+				fail: () => {},
+				complete: () => {}
+			});
+		},
+		formReset: function(e) {
+			console.log('清空数据');
+			this.chosen = '';
+		}
+	},
+	onLoad(e) {
+		if (!this.hasLogin) {
+			uni.navigateTo({
+				url: '../login/login'
+			});
+		} else {
+			this.url = e.url;
+			this.user = JSON.parse(this.jyyUser);
+			if (e.id == undefined) {
+				this.address.id = 0;
+				uni.setNavigationBarTitle({
+					title: '添加收货地址'
+				});
+			} else {
+				this.address.id = e.id;
+				uni.setNavigationBarTitle({
+					title: '修改收货地址'
+				});
+				this.getData();
+			}
+		}
+	},
+	onBackPress() {
+		if (this.$refs.mpvueCityPicker.showPicker) {
+			this.$refs.mpvueCityPicker.pickerCancel();
+			return true;
+		}
+	},
+	onUnload() {
+		if (this.$refs.mpvueCityPicker.showPicker) {
+			this.$refs.mpvueCityPicker.pickerCancel();
+		}
+	}
+};
+</script>
+
+<style>
+
+
+
+</style>

+ 314 - 0
pages/user/agent/applyfor.vue

@@ -0,0 +1,314 @@
+<template>
+	<view class="jz_beginCard uni-flex uni-column">
+		<view class="beginCardImg" style="height: 360upx;"><image src="https://www.jinzun99.com/static/04.png" style="height: 360upx;"></image></view>
+		<form class="uni-flex uni-flex-item uni-column form" @submit="formSubmit" @reset="formReset">
+			<view class="uni-flex-item justify-align-center uni-flex uni-column">
+				<!-- 多选 -->
+				<view class="beginCard_name uni-flex align-items" v-if="allSelectStatus">
+					<view class="uni-flex-item">申请商品:(合计: {{agencyArrs.length}})</view>
+					<view class="uni-flex-item3 uni-flex uni-column " :class="[agencyArrs.length>1?'agencyArrs':'agencyArrsSingle']">
+						<view class="agencyArr"  v-for="(item,index) in agencyArrs" :key="index">
+							<view class="productPic uni-flex align-items">
+								<image :src="item.pic"></image>
+								<text class="uni-flex-item AagencyTitle">{{ item.title }}</text>
+							</view>
+						</view>
+					</view>
+				</view>
+				<!-- 单选 -->
+				<view class="beginCard_name uni-flex align-items" v-if="agency.productTitle">
+					<view class="uni-flex-item">申请商品:</view>
+					<view class="uni-flex-item3 uni-flex">
+						<view class="product_pic uni-flex"><image :src="agency.productPic"></image></view>
+						<view class="product_title uni-flex justify-align-center">{{ agency.productTitle }}</view>
+					</view>
+				</view>
+				
+				<view class="beginCard_name uni-flex align-items" v-if="agency.address||allSelectStatus==true">
+					<view class="uni-flex-item">代理地区:</view>
+					<input type="text" class="uni-flex-item3" v-model="agency.address" name="address" disabled="disabled" />
+				</view>
+				<view class="beginCard_name uni-flex align-items">
+					<view class="uni-flex-item">真实姓名:</view>
+					<input type="text" class="uni-flex-item3" v-model="nickName" name="nickName" placeholder="请填写姓名" />
+				</view>
+				<view class="beginCard_name uni-flex align-items">
+					<view class="uni-flex-item">手机号码:</view>
+					<input type="text" class="uni-flex-item3" v-model="mobile" name="mobile" placeholder="请填写手机号码" />
+				</view>
+				<view class="beginCard_name  uni-flex align-items" v-if="user.licenseUrl == null">
+					<view class="uni-flex-item">营业执照:</view>
+					<view class="uni-flex-item3">
+						<robby-image-upload
+							v-model="imageData"
+							fileKeyName="data"
+							:limit="1"
+							:server-url="serverUrl"
+							:showUploadProgress="show"
+							:form-data="formData"
+							@delete="deleteImage"
+							@add="addImage"
+						></robby-image-upload>
+					</view>
+				</view>
+				<view class="beginCard_btn"><button formType="submit" class="uni-flex justify-align-center">提交申请</button></view>
+			</view>
+		</form>
+	</view>
+</template>
+
+<script>
+var graceChecker = require('../../../common/graceChecker.js');
+import robbyImageUpload from '../../../components/robby-image-upload/robby-image-upload.vue';
+import { mapState, mapMutations } from 'vuex';
+
+export default {
+	components: {
+		robbyImageUpload
+	},
+	data() {
+		return {
+			nickName: '',
+			mobile: '',
+			user: {},
+			show: true,
+			imageData: [],
+			serverUrl: this.webUrl + 'Upload',
+			formData: {
+				userId: 2
+			},
+			agency: {},
+			allSelectStatus: false,//单选状态,
+			agencyArrs: []//多选代理产品信息
+		};
+	},
+	computed: {
+		...mapState(['hasLogin', 'jyyUser','agencyArr'])
+	},
+	onLoad(e) {
+		if (!this.hasLogin) {
+			uni.navigateTo({
+				url: '../login/login'
+			});
+		} else {
+			if(e.key){//多选申请代理
+				this.agencyArrs = JSON.parse(this.agencyArr);//代理商品信息
+				this.agency.label = e.key;//代理地址
+				this.agency.address = e.key;//代理地址
+				this.agency.id = e.addressId;//代理地址id
+				this.allSelectStatus = true;//多选状态
+				this.user = JSON.parse(this.jyyUser);
+				this.mobile = this.user.mobile;
+				this.nickName = this.user.nickName;
+			}
+			else if (e.path) {//会员中心申请代理
+				this.agency.productId = 0;
+				this.agency.productTitle = '';
+				this.agency.productPic = '';
+				this.agency.address = '';
+				this.user = JSON.parse(this.jyyUser);
+				this.mobile = this.user.mobile;
+				this.nickName = this.user.nickName;
+			} else {//单选申请代理
+				this.agency = JSON.parse(decodeURIComponent(e.agency));
+				for (var k in this.agency) {
+					if (k == 'value') {
+						delete this.agency[k];
+					}
+					if (k == 'cityCode') {
+						delete this.agency[k];
+					}
+				}
+				this.user = JSON.parse(this.jyyUser);
+				this.mobile = this.user.mobile;
+				this.nickName = this.user.nickName;
+			}
+		}
+	},
+	methods: {
+		deleteImage: function(e) {
+			console.log(e);
+		},
+		addImage: function(e) {
+			console.log(e);
+		},
+		formSubmit: function(e) {
+			let image = this.imageData.length > 0 ? this.imageData[0] : '';
+			var rule = [
+				{
+					name: 'nickName',
+					checkType: 'notnull',
+					checkRule: '1,4',
+					errorMsg: '请填写真实姓名'
+				},
+				{
+					name: 'mobile',
+					checkType: 'string',
+					checkRule: '11',
+					errorMsg: '手机号码11个字符'
+				}
+			];
+			//进行表单检查
+			var formData = e.detail.value;
+			var checkRes = graceChecker.check(formData, rule);
+			if (checkRes) {
+				if (this.user.licenseUrl == null && image == '') {
+					uni.showToast({
+						title: '请上传运营执照',
+						icon: 'none'
+					});
+				} else {
+					if (image == '') {
+						image = this.user.licenseUrl;
+					}
+					let Agency = {};
+					if(this.allSelectStatus){//多选申请代理
+					
+					for(let i=0;i<this.agencyArrs.length;i++){
+						delete this.agencyArrs[i].title;
+						delete this.agencyArrs[i].pic;
+					}
+					console.log(this.agencyArrs)
+						Agency.agency = this.agencyArrs;
+						Agency.area ={};
+						Agency.area.id = this.agency.id;
+						Agency.area.label = this.agency.label;
+					}else if(this.agency.productId==0){//会员中心申请代理
+						 Agency = {}
+					}
+					else{//单选申请代理
+						Agency.agency = [{
+							id:this.agency.productId
+						}];
+						Agency.area ={};
+						Agency.area.id = this.agency.id;
+						Agency.area.label = this.agency.label;
+					}
+					
+					uni.request({
+						url: this.webUrl + 'AgentApplyfor',
+						method: 'POST',
+						data: {
+							nickName: this.nickName,
+							mobile: this.mobile,
+							imageData: image,
+							userid: this.user.id,
+							agency: JSON.stringify(Agency)
+						},
+						header: {
+							'content-type': 'application/x-www-form-urlencoded'
+						},
+						success: res => {
+							uni.hideLoading();
+							uni.showToast({
+								title: res.data.result.resultInfo,
+								icon: 'none'
+							});
+							setTimeout(() => {
+								uni.switchTab({
+									url: '../user/user'
+								});
+							}, 500);
+						},
+						fail: () => {},
+						complete: () => {}
+					});
+				}
+			} else {
+				uni.showToast({
+					title: graceChecker.error,
+					icon: 'none'
+				});
+			}
+		}
+	}
+};
+</script>
+
+<style>
+/*  修改的*/
+
+/* 一个商品时候的高度 */
+.agencyArrsSingle {
+	height: 124upx;
+}
+	
+/* 多个商品时候的高度 */
+.agencyArrs {
+	height: 280upx;
+	overflow-y: scroll;
+}
+
+.AagencyTitle {
+	margin-left: 20upx;
+}
+.productPic {
+	margin-bottom: 30upx;
+}
+.productPic image {
+	width: 120upx;
+	height: 120upx;
+	border: 1upx solid #dfdfdf;
+	border-radius: 8upx;
+}
+
+
+
+
+
+
+.jz_beginCard .beginCard_btn {
+	margin: 50upx 0 0 0;
+}
+
+.jz_beginCard .beginCard_btn button {
+	display: block;
+	width: 550upx;
+	height: 115upx;
+	line-height: 115upx;
+	font-size: 28upx;
+	color: #ffffff;
+	background: url(../../../static/btn.png) no-repeat;
+	background-size: 550upx 115upx;
+}
+
+.product_pic {
+	width: 120upx;
+	height: 120upx;
+	margin: 20upx 0;
+}
+
+.product_pic image {
+	width: 120upx;
+	height: 120upx;
+	border: 1upx solid #dfdfdf;
+	border-radius: 8upx;
+}
+
+
+.product_title {
+	margin-left: 30upx;
+}
+
+.jz_beginCard .beginCard_name {
+	height: auto;
+	margin-top: 20upx;
+	padding: 15upx 40upx;
+}
+
+.jz_beginCard .beginCard_name .imageItem,
+.jz_beginCard .beginCard_name .imageUpload {
+	width: 120upx;
+	height: 120upx;
+	line-height: 100upx;
+	font-size: 100upx;
+	margin: 0 !important;
+}
+
+.jz_beginCard .beginCard_name .imageUploadContainer {
+	margin: 0;
+	padding: 20upx 0;
+	margin-left: 0;
+	padding-left: 0;
+}
+</style>

+ 1025 - 0
pages/user/agent/index.vue

@@ -0,0 +1,1025 @@
+<template>
+	<view class="uni-flex lists jz_lists uni-column jz_myfit jz_agent cart jz_cart ">
+		<view class="tab-search uni-column" style="background-color: #F1F1F1;">
+			<view class="tabList">
+				<scroll-view class="uni-flex uni-swiper-tab" scroll-x :scroll-left="scrollLeft" id="tab-bars">
+					<view v-for="(tab, i) in categorys" :key="i" class="swiper-tab-list" :id="'tab' + tab.id" :data-current="index" @click="changeTab(i, tab)">
+						<view class="productTitle-item uni-flex uni-column">
+							<view :class="['picname', curIndex == i ? 'activeLine' : '']">{{ tab.title }}</view>
+						</view>
+					</view>
+				</scroll-view>
+			</view>
+
+			<view class="search uni-flex ">
+				<view class="uni-flex-item uni-flex search-input">
+					<input
+						placeholder="请选择地区"
+						@input="inputChange"
+						v-model="key"
+						:focus="isFocus"
+						@focus="focus"
+						@blur="blur"
+						class="uni-flex-item"
+						disabled="disabled"
+						@click="showMulLinkageThreePicker"
+					/>
+					<view class="icon icon-del uni-flex justify-align-center" style="height: 100%;" @click.stop="clear" v-if="isDelShow"><icon type="clear" size="12"></icon></view>
+				</view>
+
+				<view class="searchBtn uni-flex justify-align-center" @click="search">
+					<image src="../../../static/search02.png"></image>
+					<text>搜索</text>
+				</view>
+			</view>
+			<view class="uni-flex uni-filter">
+				<view class="uni-filter-line"></view>
+				<view class="uni-flex  uni-filter-item" :class="[item.sel ? 'uni-filter-sel' : '']" v-for="(item, key) in filter" :key="key" @click="filterList(item, key)">
+					{{ item.title }}
+				</view>
+			</view>
+		</view>
+
+		<view class="agent-product uni-flex uni-column">
+			<view class="agentTop uni-flex space-between" id="list">
+				<view class="topItem uni-flex uni-column align-items " v-if="item.filter" v-for="(item, key) in products" :key="key" @click.stop="Agencychecked(products, key)">
+					<view class="uni-flex  topItem-wrap">
+						<image
+							class="image topImg"
+							:class="{ lazy: !item.display }"
+							:id="'lazy' + key"
+							:data-index="0"
+							@load="imageOnLoad(item, key)"
+							:src="item.display ? item.pic : ''"
+						/>
+						<view class="loadbox" :class="{ loaded: item.loaded }"><view class="load"></view></view>
+					</view>
+					<view class=" uni-flex  uni-column">
+						<view class="uni-flex agencyTitle justify-align-center" v-if="!item.show">{{ item.title }}</view>
+						<view class=" agencyTitle titleSingle " v-if="item.show">{{ item.title }}</view>
+						<view class="uni-flex justify-align-center" style="color: #f00000;" v-if="user.agency == 1">¥{{ item.salePrice.toFixed(2) }}</view>
+						<!-- 全部部分-->
+						<view class="uni-flex space-between selectContent justify-align-center" v-if="btnStatus == -1 || btnStatus == 2">
+							<view class="uni-flex justify-align-center center common" v-if="item.agency == 0">可代理</view>
+							<view class="uni-flex justify-align-center center common" v-if="item.agency == 1">被代理</view>
+							<view class="uni-flex justify-align-center center common" v-if="item.agency == 2">已代理</view>
+						</view>
+						<!-- 非全部部分 -->
+						<view class="uni-flex space-between selectContent justify-align-center" v-if="(btnStatus == 1) | (btnStatus == 0)">
+							<view class="uni-flex common justify-align-center" v-if="item.agency == 0">可代理</view>
+							<view class="uni-flex justify-align-center uni-flex-item common" v-if="item.agency == 1">被代理</view>
+							<view class="uni-flex common justify-align-center" v-if="item.agency == 2">已代理</view>
+						</view>
+					</view>
+					<view class="selectBtn uni-flex " v-if="item.agency == 0 && btnStatus == 0">
+						<image src="../../../static/select.png" v-if="!item.select"></image>
+						<image src="../../../static/selectActive.png" v-if="item.select"></image>
+					</view>
+				</view>
+			</view>
+			<view class="agentBottom uni-flex space-between"></view>
+		</view>
+		<load-more :loadingType="loadingType" :contentText="contentText" class="loadMore"></load-more>
+		<backTop :src="backTop.src" :scrollTop="backTop.scrollTop"></backTop>
+		<mpvue-city-picker
+			:themeColor="themeColor"
+			ref="mpvueCityPicker"
+			:pickerValueDefault="cityPickerValueDefault"
+			@onCancel="onCancel"
+			@onConfirm="onConfirm"
+			@onReset="onReset"
+		></mpvue-city-picker>
+		<!-- v-if="products.length > 0 && canAgent && btnStatus == 0" -->
+		<view class="uni-flex uni-row footer" v-if="products.length > 0 && btnStatus == 0 && isShow == true">
+			<view class="uni-flex uni-flex-item ">
+				<view class="uni-flex item-sel "><view :class="[yuan, { bg: allSelect }]" @click="AllSelect()"></view></view>
+				<view class="uni-flex uni-flex-item itemAll">全选</view>
+				<view class="uni-flex uni-flex-item3"></view>
+				<view class="uni-flex uni-flex-item3 justify-align-center">
+					<view class="uni-flex uni-flex-item btn" @click="submit()" :class="{ activeBg: bgChange }">提交申请 共({{ filterCount }})</view>
+				</view>
+			</view>
+		</view>
+		<!-- 可代理按钮 -->
+		<!-- <view class="beginCard_btn" v-if="products.length > 0 && canAgent && btnStatus == 0">
+			<button @click="submit" class="uni-flex justify-align-center">提交申请 共({{ filterCount }})个</button>
+		</view> -->
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex';
+import mpvueCityPicker from '@/components/mpvue-citypicker/mpvueCityPicker.vue';
+import util from '../../../common/util.js';
+import address from '../../../common/getAddessId.js';
+import amap from '../../../common/amap-wx.js';
+import loadMore from '@/components/uni-load-more.vue';
+import backTop from '@/components/uni-top.vue';
+
+var index;
+export default {
+	computed: {
+		...mapState(['hasLogin', 'forcedLogin', 'jyyUser'])
+	},
+	components: {
+		loadMore,
+		backTop,
+		mpvueCityPicker
+	},
+	data() {
+		return {
+			isShow: false,
+			newProducts: [],
+			allSelect: false,
+			bgChange: false,
+			btnStatus: -1, //-1:全部,0:可代理,1:被代理,2:已代理
+			canAgent: false, //可代理按钮状态
+			deleteArr: [], //被取消勾选的产品数组
+			agencyCheckArr: [],
+			cityPickerValueDefault: [0, 0, 1],
+			themeColor: '#007AFF',
+			pickerText: '',
+			amapPlugin: null,
+			amapKey: '408ca849e7fb38410487446db08ec898',
+			addressName: '',
+			backTop: {
+				src: '../../../static/top.png',
+				scrollTop: 0
+			},
+			loadingType: 0,
+			contentText: {
+				contentdown: '上拉显示更多',
+				contentrefresh: '正在加载...',
+				contentnomore: '没有更多数据了'
+			},
+			active: false,
+			isDelShow: false,
+			isFocus: false,
+			sortNavfixed: false,
+			show: false,
+			windowHeight: 0,
+			type: 0,
+			cates: [
+				{
+					css: '',
+					id: '0',
+					no: '000',
+					show: '0',
+					subs: [],
+					title: '全部品牌'
+				}
+			],
+			categorys: [
+				{
+					ico: '../../../static/merchant/all.png',
+					id: '000',
+					no: '000',
+					title: '全部品牌'
+				}
+			],
+			category: {},
+			products: [],
+			curIndex: 0,
+			key: '',
+			id: '000',
+			scrollLeft: 0,
+			scrollY: 0,
+			agentStatus: 1,
+			user: {},
+			newArr: [], //勾选的产品数组(可代理)
+			ordernewArr: [], //勾选的产品数组(已代理)
+			addressId: '',
+			filterCount: 0,
+			filter: [
+				{
+					title: '全部',
+					no: -1,
+					sel: true
+				},
+				{
+					title: '可代理',
+					no: 0,
+					sel: false
+				},
+				{
+					title: '被代理',
+					no: 1,
+					sel: false
+				},
+				{
+					title: '已代理',
+					no: 2,
+					sel: false
+				}
+			],
+			popupType: '',
+			popupContent: '',
+			popupShow: false
+		};
+	},
+	onPageScroll(e) {
+		this.backTop.scrollTop = e.scrollTop;
+		util.loads(this.products, 'list', this.windowHeight);
+		uni.createSelectorQuery()
+			.selectAll('#list')
+			.boundingClientRect(datas => {
+				this.sortNavfixed = parseInt(datas[0].top) < 78 ? true : false;
+			})
+			.exec();
+	},
+	onShow() {},
+	onLoad(e) {
+		this.user = JSON.parse(this.jyyUser);
+		index = 1;
+		this.windowHeight = uni.getSystemInfoSync().windowHeight;
+		this.getCategory();
+		if (e.n > 4) {
+			setTimeout(() => {
+				this.public(e.n, e);
+			}, 200);
+		}
+		// #ifdef MP-WEIXIN
+		this.amapPlugin = new amap.AMapWX({
+			key: this.amapKey
+		});
+		this.getRegeo();
+		// #endif
+
+		// #ifdef H5
+		uni.getLocation({
+			type: 'wgs84',
+			geocode: true,
+			success: res => {
+				let gitude = res.longitude + ',' + res.latitude;
+				let that = this;
+				uni.request({
+					url: 'https://restapi.amap.com/v3/geocode/regeo',
+					method: 'POST',
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					data: {
+						output: 'JSON',
+						location: gitude,
+						key: 'bf5fad85b6706db59ac208af908aa99e'
+					},
+					success: result => {
+						let addresss = result.data.regeocode.addressComponent;
+						console.log(address);
+						let province = addresss.province;
+						let city = addresss.city;
+						let district = addresss.district;
+						that.addressName = province + '-' + city + '-' + district;
+						that.addressId = address.getAddressid(province, city, district);
+						that.key = that.addressName;
+						that.getData();
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			}
+		});
+		// #endif
+	},
+	onPullDownRefresh() {
+		this.getData();
+		setTimeout(function() {
+			uni.stopPullDownRefresh();
+		}, 1000);
+	},
+	onReachBottom() {
+		this.getData();
+	},
+	watch: {
+		products(val) {
+			for (let i = 0; i < this.filter.length; i++) {
+				if (this.filter[i].sel) {
+					this.filterProducts(this.filter[i].no);
+				}
+			}
+		}
+	},
+	methods: {
+		...mapMutations(['setAgency']),
+		footerShow(products){
+			if( this.btnStatus == 0){
+				for (let i = 0; i < products.length; i++) {
+					if (products[i].agency == 0) {
+						this.isShow = true;
+						break;
+					} else {
+						this.isShow = false;
+					}
+				}
+			}
+		},
+		getLocation(e, that) {},
+		// 全选
+		AllSelect() {
+			let selected = this.allSelect;
+			this.allSelect = !selected;
+			let arr = this.newProducts;
+			for (let i = 0; i < arr.length; i++) {
+				if (arr[i].agency == 0) {
+					//循环商品为选中
+					if (this.allSelect == true) {
+						this.newProducts[i].select = true;
+					}
+					if (this.allSelect == false) {
+						this.newProducts[i].select = false;
+					}
+				}
+			}
+			this.allSl(); //商品数量
+		},
+		//结算商品数量
+		allSl() {
+			let js = 0;
+			let arr = this.newProducts;
+			for (let i = 0; i < arr.length; i++) {
+				js += this.newProducts[i].select;
+			}
+			this.filterCount = js;
+			if (this.filterCount > 0) {
+				this.bgChange = true;
+			} else {
+				this.bgChange = false;
+			}
+		},
+		filterProducts(no) {
+			for (let i = 0; i < this.products.length; i++) {
+				this.products[i].filter = false;
+			}
+			for (let i = 0; i < this.products.length; i++) {
+				if (no == -1) {
+					this.products[i].filter = true;
+				} else {
+					if (no == this.products[i].agency) {
+						this.products[i].filter = true;
+						this.newProducts = [];
+						for (let j = 0; j < this.products.length; j++) {
+							if (this.products[j].filter) {
+								this.newProducts.push(this.products[j]);
+							}
+						}
+					}
+				}
+			}
+		},
+		filterList(item, key) {
+			for (let i = 0; i < this.filter.length; i++) {
+				if (i == key) {
+					this.$set(item, 'sel', true);
+				} else {
+					this.$set(this.filter[i], 'sel', false);
+				}
+			}
+			this.filterProducts(item.no);
+			this.btnStatus = item.no;
+			this.footerShow(this.products);
+		},
+		//提交申请
+		submit() {
+			let idArr = [];
+			for (let i = 0; i < this.products.length; i++) {
+				if (this.products[i].select === true && this.products[i].agency == 0) {
+					this.agencyCheckArr.push(this.products[i].id);
+				}
+				if (this.products[i].select === false && this.products[i].agency == 0) {
+					idArr.push(this.products[i].id); //存放没勾选的产品id
+				}
+			}
+			let intersection = this.agencyCheckArr.filter(v => idArr.includes(v)); //数组交集
+			let sa = new Set(this.agencyCheckArr);
+			let sb = new Set(intersection);
+			let complement = [...this.agencyCheckArr.filter(x => !sb.has(x)), ...intersection.filter(x => !sa.has(x))]; //数组补集
+			this.agencyCheckArr = complement;
+			setTimeout(() => {
+				let Arr = [];
+				let filterarr = this.agencyCheckArr.filter((value, index) => {
+					//数组去重
+					return this.agencyCheckArr.indexOf(value) === index;
+				});
+				for (let j = 0; j < filterarr.length; j++) {
+					Arr.push({
+						id: filterarr[j]
+					});
+				}
+				this.newArr = Arr;
+				let agencyArr = [];
+				for (let y = 0; y < this.products.length; y++) {
+					for (let z = 0; z < this.newArr.length; z++) {
+						if (this.newArr[z].id == this.products[y].id) {
+							agencyArr.push({
+								title: this.products[y].title,
+								pic: this.products[y].pic,
+								id: this.products[y].id
+							});
+						}
+					}
+				}
+				if (agencyArr.length > 0) {
+					this.setAgency(JSON.stringify(agencyArr));
+					uni.navigateTo({
+						url: 'applyfor?key=' + this.key + '&addressId=' + this.addressId
+					});
+				} else {
+					uni.showToast({
+						title: '请选择代理商品!',
+						icon: 'none'
+					});
+				}
+			}, 500);
+		},
+		Agencychecked(e, index) {
+			switch (e[index].agency) {
+				case 0:
+					e[index].select = !e[index].select;
+					this.$set(this.products[index], 'select', e[index].select);
+					//判断商品是否全部选中,是的话,全选也选中
+					let json = this.newProducts.length;
+					let all = true;
+					for (let i = 0; i < json; i++) {
+						all *= this.newProducts[i].select;
+					}
+					if (all == true) {
+						this.allSelect = true;
+					} else {
+						this.allSelect = false;
+					}
+					this.allSl();
+					break;
+				case 1:
+					uni.showToast({
+						title: '此商品已被代理',
+						icon: 'none'
+					});
+					break;
+				case 2:
+					uni.showToast({
+						title: '此商品我已代理',
+						icon: 'none'
+					});
+					break;
+			}
+		},
+		onConfirm(e) {
+			this.pickerText = e.label;
+			this.key = this.pickerText;
+			this.addressId = e.id;
+		},
+		getRegeo() {
+			uni.showLoading({
+				title: '获取信息中'
+			});
+			this.amapPlugin.getRegeo({
+				success: data => {
+					let province = data[0].regeocodeData.addressComponent.province;
+					let city = data[0].regeocodeData.addressComponent.city;
+					let district = data[0].regeocodeData.addressComponent.district;
+					this.addressName = province + '-' + city + '-' + district;
+					this.addressId = address.getAddressid(province, city, district);
+					this.key = this.addressName;
+					this.getData();
+					uni.hideLoading();
+				}
+			});
+		},
+		showMulLinkageThreePicker() {
+			this.$refs.mpvueCityPicker.show();
+		},
+		focus() {
+			this.active = true;
+			//HM修改 增加获取焦点判断
+			if (this.key != '') {
+				this.isDelShow = true;
+			}
+		},
+		inputChange(event) {
+			var keyword = event.detail.value;
+			this.$emit('input', keyword);
+			if (this.key) {
+				this.isDelShow = true;
+			}
+		},
+		blur() {
+			this.isFocus = false;
+			if (!this.key) {
+				this.active = false;
+			}
+		},
+		clear() {
+			//HM修改 收起键盘
+			uni.hideKeyboard();
+			this.isFocus = false;
+			this.key = '';
+			this.active = false;
+			//HM修改 清空内容时候触发组件input
+			this.isDelShow = false;
+		},
+		search() {
+			index = 1;
+			this.loadingType = 0;
+			this.products = [];
+			this.filterCount = 0;
+			this.allSelect = false;
+			this.getData();
+		},
+		onCancel(e) {
+			//console.log(e)
+		},
+		onReset() {
+			this.pickerText = '';
+			this.key = '';
+		},
+
+		getData() {
+			if (this.loadingType !== 0) {
+				return;
+			}
+			uni.request({
+				url: this.webUrl + 'List',
+				method: 'POST',
+				header: {
+					'content-type': 'application/x-www-form-urlencoded'
+				},
+				data: {
+					pageNum: index,
+					brand: this.id,
+					area: this.key,
+					userid: this.user.id,
+					pageSize: 100,
+					agentStatus: 1,
+					agency: this.user.agency
+				},
+				success: res => {
+					if (res.data.result.ratioProducts.length > 0) {
+						this.products = this.products.concat(res.data.result.ratioProducts);
+						this.footerShow(this.products);
+						setTimeout(() => {
+							util.loads(this.products, 'list', this.windowHeight);
+						}, 500);
+					} else {
+						this.loadingType = 2;
+						return;
+					}
+					if (index == parseInt(res.data.result.pages)) {
+						this.loadingType = 2;
+						return;
+					} else {
+						this.loadingType = 0;
+					}
+					index++;
+				},
+				fail: () => {},
+				complete: () => {}
+			});
+		},
+		getElSize(id) {
+			//得到元素的size
+			return new Promise((res, rej) => {
+				uni.createSelectorQuery()
+					.select('#' + id)
+					.fields(
+						{
+							size: true,
+							scrollOffset: true
+						},
+						data => {
+							res(data);
+						}
+					)
+					.exec();
+			});
+		},
+		async public(i, e) {
+			this.id = e.id;
+			let index = i;
+			let tabBars = await this.getElSize('tab-bars'),
+				tabBarScrollLeft = tabBars.scrollLeft; //点击的时候记录并设置scrollLeft
+			let width = 0;
+			for (let j = 0; j < index; j++) {
+				let result = await this.getElSize('tab' + this.categorys[j].id);
+				width += result.width;
+			}
+			let winWidth = uni.getSystemInfoSync().windowWidth,
+				nowElement = await this.getElSize('tab' + this.categorys[index].id),
+				nowWidth = nowElement.width;
+			if (width + nowWidth - tabBarScrollLeft > winWidth - nowWidth) {
+				this.scrollLeft = width + nowWidth * 3 - winWidth;
+			}
+
+			if (width < tabBarScrollLeft) {
+				this.scrollLeft = width;
+			}
+		},
+		changeTab(i, e) {
+			if (this.curIndex === i) {
+				return false;
+			} else {
+				this.public(i, e);
+				this.isClickChange = true;
+				this.curIndex = i;
+				this.filterCount = 0;
+				this.allSelect = false;
+				this.bgChange = false;
+				index = 1;
+				this.loadingType = 0;
+				this.products = [];
+				this.getData();
+				setTimeout(() => {
+					util.loads(this.products, 'list', this.windowHeight);
+				}, 500);
+			}
+		},
+		imageOnLoad(e) {
+			e.loaded = true;
+		},
+		getCategory() {
+			uni.request({
+				url: this.webUrl + 'Brands',
+				method: 'POST',
+				header: {
+					'content-type': 'application/x-www-form-urlencoded'
+				},
+				success: res => {
+					this.cates = this.cates.concat(res.data.result.brands);
+					this.categorys = this.categorys.concat(res.data.result.brands);
+				},
+				fail: () => {},
+				complete: () => {}
+			});
+		}
+	}
+};
+</script>
+
+<style>
+/*----- 改动的 */
+/* #ifdef H5 */
+.jz_cart .footer {
+	bottom: 0 !important;
+}
+/* #endif */
+.activeBg {
+	background: #dd0101 !important;
+}
+.jz_cart.jz_agent .btn {
+	border-radius: 6rpx;
+	background: #cdcdcd;
+	letter-spacing: 4rpx;
+}
+.jz_agent .common {
+	padding: 0 20upx;
+	background-color: #f1f1f1;
+}
+.jz_agent .selectContent {
+	padding: 0 20upx;
+}
+.jz_agent .selectBtn {
+	position: absolute;
+	right: 0upx;
+	bottom: 0upx;
+}
+.jz_agent .selectBtn image {
+	width: 40upx;
+	height: 40upx;
+}
+.jz_agent .agencyStatus {
+	position: absolute;
+	top: 50%;
+	left: 50%;
+	margin-left: -50upx;
+	margin-top: -50upx;
+	width: 100upx;
+	height: 100upx;
+	background: rgba(0, 0, 0, 0.4);
+	z-index: 888;
+	border-radius: 50%;
+	color: #ffffff;
+}
+
+.jz_agent .loadMore {
+	margin-bottom: 100upx;
+}
+
+.jz_agent .agent-product .agentTop .topItem {
+	position: relative;
+	padding-bottom: 20upx;
+	border-radius: 8upx;
+	box-shadow: 0 0 10rpx 0 #b2b2b2;
+	margin-bottom: 30upx;
+}
+
+.jz_agent .beginCard_btn {
+	position: fixed;
+	left: 0;
+	bottom: 20upx;
+	width: 100%;
+	z-index: 999;
+}
+
+.jz_agent .beginCard_btn button {
+	display: block;
+	width: 550upx;
+	height: 115upx;
+	line-height: 115rpx;
+	font-size: 28rpx;
+	background: url(../../../static/btn.png) no-repeat;
+	background-size: 550upx 115upx;
+	color: #ffffff;
+}
+
+.jz_agent .checkStyle {
+	position: absolute;
+	top: 0upx;
+	left: -16upx;
+	width: 0;
+	height: 0;
+	z-index: 100;
+	border-top: 50upx solid #11c200;
+	border-right: 50upx solid transparent;
+}
+
+.jz_agent .checkStyleActick {
+	position: absolute;
+	top: 0upx;
+	left: -16upx;
+	width: 0;
+	height: 0;
+	z-index: 100;
+	border-top: 50upx solid #ff0000;
+	border-right: 50upx solid transparent;
+}
+
+.jz_agent .topItem {
+	position: relative;
+	z-index: 666;
+	overflow: hidden;
+}
+
+.jz_agent .swiper-tab-list {
+	width: 170upx !important;
+}
+
+.jz_lists scroll-view.uni-swiper-tab {
+	padding-top: 0upx !important;
+}
+
+.jz_myfit.jz_lists scroll-view.uni-swiper-tab {
+	padding-top: 0upx !important;
+	margin-bottom: 0upx !important;
+	padding-bottom: 0upx;
+}
+
+.jz_agent .agencyBtn {
+	color: #09bb07;
+	background: #11c200 !important;
+	padding: 0 10upx;
+}
+
+/* .jz_agent .agent-product {
+		margin-top: 250upx !important;
+	} */
+
+/* ------改动的 */
+
+.jz_agent .agencyTitle.titleSingle {
+	margin: 0 auto;
+	width: 210upx;
+	font-size: 26upx;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	text-align: center;
+}
+
+.jz_agent .topItem-wrap {
+	width: 224upx;
+	height: 224upx;
+	position: relative;
+}
+
+.jz_agent .agencyTitle {
+	width: 224upx;
+	overflow: hidden;
+	white-space: nowrap;
+}
+
+.jz_agent .search-input .icon-del.icon {
+	width: 50upx;
+	top: 0;
+}
+
+.jz_myfit .loadbox {
+	border-top-left-radius: 20upx;
+	border-top-right-radius: 20upx;
+}
+
+.tab-search {
+	position: fixed;
+	width: 100%;
+	z-index: 8888;
+}
+
+.jz_myfit.jz_lists scroll-view.uni-swiper-tab {
+	margin-bottom: 0;
+}
+
+.jz_agent .agent-product {
+	margin-top: 320upx;
+}
+
+.fixed {
+	width: 100%;
+	position: fixed;
+	left: 0;
+	top: 0;
+	/* #ifdef H5 */
+	/* top: 84upx; */
+	top: 44px;
+	/* #endif */
+	background: #ffffff;
+	margin: 0 !import;
+	z-index: 999;
+	box-sizing: border-box;
+	border-bottom: 2upx solid #eeeeee;
+	transform: translateZ(0);
+	-webkit-transform: translateZ(0);
+}
+
+.activeLine {
+	border-bottom: 2upx solid #ff273c;
+}
+
+.jz_lists {
+	position: relative;
+}
+
+.jz_lists scroll-view.uni-swiper-tab {
+	border-bottom: 0;
+	height: auto;
+	line-height: auto;
+	padding-top: 20upx;
+}
+
+.jz_lists .productTitle-item {
+	justify-content: center;
+	align-items: center;
+}
+
+.jz_lists .productTitle-item .picname {
+	line-height: 60upx;
+}
+
+.jz_lists .productTitle-item image {
+	width: 50upx;
+	height: 50upx;
+}
+
+.lists .sortNav .Nav:first-child {
+	/* border-left: none; */
+}
+
+.list .tab-bar-wrap {
+	width: 200upx;
+}
+
+::-webkit-scrollbar {
+	display: none;
+}
+
+.lists .nav-left {
+	width: 218upx;
+	border-right: solid 1upx #e0e0e0;
+	padding-top: 20upx;
+	box-sizing: border-box;
+}
+
+.lists .nav-left .nav-left-title {
+	height: 80upx;
+	font-weight: 600;
+	margin: 0 auto;
+	margin-left: 10upx;
+}
+
+.lists .nav-left-item {
+	height: 110upx;
+	font-size: 30upx;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+}
+
+.lists .nav-left-item image {
+	width: 40upx;
+	height: 40upx;
+	margin-right: 18upx;
+}
+
+.lists .nav-right {
+	width: 100%;
+	box-sizing: border-box;
+}
+
+.uni-tab-bar-loading {
+	width: 100%;
+}
+
+.uni-tab-bar-loading .loading-text {
+	margin-top: 50upx;
+	font-size: 28upx;
+	text-align: center;
+}
+
+.lists .list {
+	width: 100%;
+	height: 92%;
+}
+
+#tab-bar {
+	background-color: #ffffff;
+	padding-bottom: 60upx;
+	overflow: hidden;
+}
+
+.uni-tab-bar .active {
+	color: #ffe200;
+	/* border-left: 10upx solid #ffe200; */
+}
+
+.prices .prices-cart image {
+	width: 52upx;
+	height: 50upx;
+	margin-right: 10upx;
+}
+
+.prices .prices-salePrice {
+	font-size: 22upx;
+	color: #f00000;
+}
+
+.image {
+	position: absolute;
+	width: 100%;
+	height: 100%;
+}
+
+.placeholder {
+	background: #e2e2e2 url(../../../static/load.gif) center center no-repeat;
+	opacity: 1;
+	transition: opacity 0.4s linear;
+}
+
+.placeholder.loaded {
+	opacity: 0;
+}
+
+.list-collapse {
+	padding-left: 36upx;
+	box-sizing: border-box;
+}
+
+.lists .sortNav .navActive {
+	color: #d80000;
+}
+
+.uni-filter {
+	margin-top: 8upx;
+	background-color: #ffffff;
+	padding: 16upx 24upx;
+	font-size: 28upx;
+	justify-content: space-between;
+	position: relative;
+}
+
+.uni-filter .uni-filter-item {
+	background-color: #f1f1f1;
+	padding: 8upx 0;
+	border-radius: 4upx;
+	width: 24%;
+	height: 32upx;
+	justify-content: center;
+	align-items: center;
+	position: relative;
+}
+
+.uni-filter .uni-filter-sel {
+	background-color: #c50200;
+	color: #ffffff;
+}
+
+/* .uni-filter .uni-filter-line {
+	position: absolute;
+	height: 4upx;
+	background: #f1f1f1;
+	top: 50%;
+	left: 0;
+	margin-top: -2upx;
+	width: 100%;
+} */
+
+.jz_agent .search {
+	margin-top: 8upx;
+}
+</style>

+ 207 - 0
pages/user/agent/product.vue

@@ -0,0 +1,207 @@
+<template>
+	<view class="jz_agentProduct">
+		<view class="agentProduct-bg"><image src="../../../static/product10.png"></image></view>
+		<view class="productcontent uni-flex uni-column ">
+			<view class="uni-flex content-top align-items">
+				<view class="img uni-flex justify-align-center" @click="goMerchProduct"><image :src="product.pic"></image></view>
+				<view class="messages uni-flex uni-column">
+					<view class="product-title">{{ product.title }}</view>
+					<view class="uni-flex">
+						<view class="salePrice">¥{{ product.salePrice }}</view>
+						<view class="marketPrice">¥{{ product.marketPrice }}</view>
+					</view>
+				</view>
+			</view>
+			<view class="uni-flex-item content-bottom align-items uni-flex">
+				<view class="area">地区</view>
+				<input :value="pickerText" class="uni-flex-item" disabled name="area" placeholder="选择地区" @click="showMulLinkageThreePicker" />
+				<view class="search uni-flex justify-align-center" @click="search">
+					<image src="../../../static/search02.png"></image>
+					<view class="btnTitle">搜索</view>
+				</view>
+			</view>
+		</view>
+		<view class="agentMessage uni-flex uni-column ">
+			<view class="messageItem uni-flex align-items itemTitle">代理信息</view>
+			<view class="messageItem uni-flex align-items" v-for="(item, index) in areaArr" :key="index" v-if="areaArr.length > 0">
+				<view class="circle"></view>
+				<view class="">{{ item.areaStr }}</view>
+			</view>
+			<view class="messageItem uni-flex align-items noMessage space-between" v-if="key == '' && areaArr.length == 0"><view class="uni-flex">暂无</view></view>
+			<view class="messageItem uni-flex align-items noMessage space-between" v-if="key != '' && areaArr.length == 0">
+				<view class="uni-flex">当前区域可申请代理</view>
+				<view class="agencyBtn uni-flex justify-align-center" @click="goAgency">点击申请</view>
+			</view>
+		</view>
+		<mpvue-city-picker
+			:themeColor="themeColor"
+			ref="mpvueCityPicker"
+			:pickerValueDefault="cityPickerValueDefault"
+			@onCancel="onCancel"
+			@onConfirm="onConfirm"
+			@onReset="onReset"
+		></mpvue-city-picker>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex';
+import mpvueCityPicker from '@/components/mpvue-citypicker/mpvueCityPicker.vue';
+export default {
+	computed: {
+		...mapState(['hasLogin', 'forcedLogin', 'jyyUser'])
+	},
+	data() {
+		return {
+			key: '',
+			id: 0,
+			product: {
+				title: '',
+				salePrice: '',
+				marketPrice: ''
+			},
+			areaArr: [],
+			cityPickerValueDefault: [0, 0, 1],
+			themeColor: '#007AFF',
+			pickerText: '',
+			address: {},
+			agency: {}
+		};
+	},
+	components: {
+		mpvueCityPicker
+	},
+	onBackPress() {
+		if (this.$refs.mpvueCityPicker.showPicker) {
+			this.$refs.mpvueCityPicker.pickerCancel();
+			return true;
+		}
+	},
+	onUnload() {
+		if (this.$refs.mpvueCityPicker.showPicker) {
+			this.$refs.mpvueCityPicker.pickerCancel();
+		}
+	},
+
+	onLoad(e) {
+		this.id = e.id;
+		this.init();
+	},
+	methods: {
+		goAgency() {
+			let agent = {};
+			agent = this.agency;
+			agent.productId = this.id;
+			agent.productTitle = this.product.title;
+			agent.productPic = this.product.pic;
+			agent.address = this.key;
+			uni.navigateTo({
+				url: 'applyfor?agency=' + encodeURIComponent(JSON.stringify(agent))
+			});
+		},
+		goMerchProduct() {
+			uni.navigateTo({
+				url: '../../merchant/product/product?id=' + this.id
+			});
+		},
+		showMulLinkageThreePicker() {
+			this.$refs.mpvueCityPicker.show();
+		},
+		onCancel(e) {
+			//console.log(e)
+		},
+		onReset() {
+			this.pickerText = '';
+		},
+		onConfirm(e) {
+			this.agency = e;
+			this.pickerText = e.label;
+			this.address.province = e.value[0];
+			this.address.city = e.value[1];
+			this.address.district = e.value[2];
+			this.address.siteStr = e.label;
+		},
+		init() {
+			this.getData();
+			this.getAgentArea();
+		},
+		search() {
+			this.key = this.pickerText;
+			this.getAgentArea();
+		},
+		getData() {
+			uni.showLoading({
+				title: '加载中'
+			});
+			uni.request({
+				url: this.webUrl + 'Product',
+				method: 'POST',
+				data: {
+					id: this.id,
+					key: this.key
+				},
+				header: {
+					'content-type': 'application/x-www-form-urlencoded'
+				},
+				success: res => {
+					uni.hideLoading();
+					if (res.data.result.isSuccess) {
+						this.product = res.data.result.product;
+					} else {
+						uni.showModal({
+							title: '系统提示',
+							content: res.data.result.resultInfo
+						});
+					}
+				},
+				fail: () => {},
+				complete: () => {}
+			});
+		},
+		getAgentArea() {
+			uni.showLoading({
+				title: '加载中'
+			});
+			uni.request({
+				url: this.webUrl + 'ProductAgency',
+				method: 'POST',
+				data: {
+					id: this.id,
+					key: this.pickerText
+				},
+				header: {
+					'content-type': 'application/x-www-form-urlencoded'
+				},
+				success: res => {
+					uni.hideLoading();
+					this.areaArr = res.data.data;
+				},
+				fail: () => {},
+				complete: () => {}
+			});
+		}
+	}
+};
+</script>
+
+<style>
+.content {
+	text-align: center;
+	height: 400upx;
+}
+
+.logo {
+	height: 200upx;
+	width: 200upx;
+	margin-top: 200upx;
+}
+
+.title {
+	font-size: 36upx;
+	color: #8f8f94;
+}
+
+.jz_agentProduct .agencyBtn {
+	border-radius: 8upx;
+}
+</style>

+ 126 - 0
pages/user/beginCard/beginCard.vue

@@ -0,0 +1,126 @@
+<template>
+	<view class="jz_beginCard uni-flex uni-column">
+		<view class="beginCardImg">
+			<image src="https://www.jinzun99.com/static/01.png"></image>
+		</view>
+		<form class="uni-flex uni-flex-item uni-column form" @submit="formSubmit" @reset="formReset">
+			<view class="uni-flex-item justify-align-center uni-flex uni-column">
+				<view class="beginCard_name uni-flex align-items">
+					<view class="uni-flex-item">真实姓名:</view>
+					<input type="text"  class="uni-flex-item3" v-model="nickName" name="nickName" placeholder="请填写姓名"  placeholder-style="font-size: 24upx;"/>
+				</view>
+				<view class="beginCard_name uni-flex align-items">
+					<view class="uni-flex-item">手机号码:</view>
+					<input type="text"  class="uni-flex-item3" v-model="mobile" name="mobile" placeholder="请填写手机号码"   placeholder-style="font-size: 24upx;"/>
+				</view>
+				<view class="beginCard_btn">
+					<button formType="submit" class="uni-flex justify-align-center">
+						提交申请
+					</button>
+				</view>
+				<view class="uni-flex align-items beginCard-phone">
+					<image src="../../../static/beginCard/03.png"></image>
+					官方联系电话
+				</view>
+				<view class="uni-flex align-items phone">
+					400-888-6666
+				</view>
+			</view>
+		</form>
+	</view>
+</template>
+
+<script>
+	var graceChecker = require('../../../common/graceChecker.js');
+	
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+
+	export default {
+		data() {
+			return {
+				nickName: '',
+				mobile: '',
+				user: {}
+			}
+		},
+		computed: {
+			...mapState(['hasLogin', 'jyyUser'])
+		},
+		onLoad() {
+			if (!this.hasLogin) {
+				uni.navigateTo({
+					url: '../login/login'
+				});
+			} else {
+				this.user = JSON.parse(this.jyyUser);
+				this.nickName=this.user.nickName;
+				this.mobile=this.user.mobile;
+			}
+		},
+		methods: {
+			formSubmit: function(e) {
+
+				var rule = [{
+						name: 'nickName',
+						checkType: 'notnull',
+						checkRule: '1,4',
+						errorMsg: '请填写姓名'
+					},
+					{
+						name: 'mobile',
+						checkType: 'string',
+						checkRule: '11',
+						errorMsg: '手机号码11个字符'
+					}
+
+				];
+				//进行表单检查
+				var formData = e.detail.value;
+				var checkRes = graceChecker.check(formData, rule);
+				if (checkRes) {
+					uni.request({
+						url: this.webUrl + 'OpenBrand',
+						method: 'POST',
+						data: {
+							nickName: this.nickName,
+							mobile: this.mobile
+						},
+						header: {
+							'content-type': 'application/x-www-form-urlencoded'
+						},
+						success: res => {
+							uni.hideLoading();
+							uni.showToast({
+								title: res.data.result.resultInfo,
+								icon: 'none'
+							});
+						},
+						fail: () => {},
+						complete: () => {}
+					});
+				} else {
+					uni.showToast({
+						title: graceChecker.error,
+						icon: 'none'
+					});
+				}
+			},
+		}
+	}
+</script>
+
+<style>
+	.jz_beginCard .beginCard_btn button{
+		display: block;
+		width: 550upx;
+		height: 115upx;
+		line-height: 115upx;
+		font-size: 28upx;
+		color: #FFFFFF;
+		background: url(../../../static/btn.png) no-repeat;
+		background-size: 550upx 115upx;
+	}
+</style>

+ 822 - 0
pages/user/cart/cart.vue

@@ -0,0 +1,822 @@
+<template>
+	<view class="uni-flex uni-column  cart jz_cart jz_merchant">
+		<view class="uni-flex uni-column" v-if="!ok">
+			<view class="uni-flex cart-empty">
+				<view class="uni-flex uni-column">
+					<view class="uni-flex justify-align-center">
+						<image src="../../../static/cart/cartempty.png" mode="widthFix"></image>
+					</view>
+					<view class="uni-flex justify-align-center cart-empty-title">购物车空空如也~</view>
+					<view class="uni-flex justify-align-center cart-empty-title" @click="goMyAgency" style="margin-top: 12upx; font-size: 28upx; background-color: #CA0000;border-radius: 8upx; color: #FFFFFF;">
+						代理商品一键下单<image src="../../../static/cart/arrow1.png" mode="widthFix" style="margin-left: 4upx; height: 24upx; width: 24upx;"></image>
+					</view>
+				</view>
+			</view>
+			<!-- <recommend :items="items" :src="src"></recommend> -->
+			<view class="recommend uni-flex uni-column">
+				<view class="push_product_title uni-flex justify-align-center">
+					<image :src="src"></image>
+					<view class="push_title">为你推荐</view>
+				</view>
+				<view class="uni-flex lists-wrap">
+					<view class="uni-flex uni-row list">
+						<view class="uni-product-list" id="list">
+							<view class="uni-product" v-for="(item, key) in items" :key="key" @click="goProduct(item.id)">
+								<view class="image-view uni-flex justify-align-center">
+									<!-- <image :src="item.pic"></image> -->
+									<image class="image" :class="{lazy:!item.display}" :id="'lazy'+ key" :data-index="0" @load="imageOnLoad(item)"
+									 :src="item.display?item.pic:''" />
+									<view class="loadbox" :class="{loaded:item.loaded}">
+										<view class="load"></view>
+									</view>
+								</view>
+								<view class="uni-flex uni-column uni-product-title-wrap">
+									<view class="uni-product-title uni-flex-item">{{ item.title }}</view>
+									<view class="product_details uni-flex uni-row">
+										{{item.profile}}
+									</view>
+									<view class="uni-flex-item prices uni-flex">
+										<view class="prices-salePrice">¥{{ item.salePrice }}</view>
+										<view class="prices-cart">
+											<image src="../../../static/category/cart.png"></image>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+
+
+
+		</view>
+
+		<view class="uni-flex" v-if="ok">
+			<view class="uni-flex uni-column uni-flex-item cart-list">
+				<!-- 列表循环 -->
+				<view class="uni-flex uni-row " v-for="(item, m) in json" :key="m" v-if="item.show">
+					<view class="uni-flex uni-column item-shop uni-flex-item">
+						<!-- 商家 -->
+						<!-- <view class="uni-flex uni-row  item-shop-name">
+							<view class="uni-flex item-sel">
+								<view :class="[yuan,{bg:item.select}]" @click.stop="dpSelected(m)"></view>
+							</view>
+							<view class="uni-flex dp">{{item.sj}}</view>
+						</view> -->
+						<!-- 图片产品名称价格数量展示 -->
+						<view class="uni-flex uni-row cart-item" v-for="(pl, index) in json[m].items" :key="index" v-if="pl.show">
+							<!-- 选择按钮 -->
+							<view class="uni-flex item-sel">
+								<view :class="[yuan, { bg: pl.select }]" @click="selected(m, index, $event)"><text v-if="pl.select" class="gou"></text></view>
+							</view>
+							<!-- 商品图片 -->
+							<view class="uni-flex uni-flex-item cart-item-left">
+								<view class="uni-flex uni-flex-item item-padding item-img" @click="goProduct(pl.id)">
+									<image mode="widthFix" :src="pl.img"></image>
+								</view>
+								<view class="uni-flex uni-column uni-flex-item2 item-padding">
+									<view class="uni-flex uni-flex-item title">{{ pl.cp }}</view>
+
+									<view class="uni-flex uni-row cart-attr" @click="changeAttr(m,index)">
+										<view class="uni-flex  uni-row" style="background-color: #F2F2F2;padding: 8upx;height: 40upx;overflow: hidden; border-radius: 8upx;">
+											<view class="uni-flex" v-for="(attr,n) in pl.attr" :key="n">
+												<text v-if="(n+1<pl.attr.length)" class="text">{{attr.value}};</text>
+												<text v-if="(n+1==pl.attr.length)" class="text">{{attr.value}}</text>
+											</view>
+											<view class="uni-flex" style=" margin-left: 4upx; width: 30upx;align-items: center;justify-content: center;">
+												<image src="../../../static/cart/arrow.png" mode="widthFix"></image>
+											</view>
+										</view>
+									</view>
+
+									<view class="uni-flex uni-row uni-flex-item">
+										<view class="uni-flex uni-flex-item3 cartpriceBg">¥{{ pl.jg }}</view>
+										<view class="uni-flex uni-row numbers uni-flex-item2">
+											<view class="uni-flex number" @click="reduce(m, index)">-</view>
+											<input class="uni-flex" disabled="disabled" type="text" v-model="pl.sl" />
+											<view class="uni-flex number" @click="add(m, index)">+</view>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="uni-flex uni-row header">
+				<view class="uni-flex uni-flex-item">
+					<view class="uni-flex uni-flex-item5">共{{ all }}件宝贝</view>
+					<view v-show="open" class="uni-flex manage uni-flex-item" @click="manage()">管理</view>
+					<view v-show="!open" class="uni-flex manage uni-flex-item" @click="manage()">完成</view>
+				</view>
+			</view>
+			<view class="uni-flex uni-row footer">
+				<view class="uni-flex uni-flex-item ">
+					<view class="uni-flex item-sel ">
+						<view :class="[yuan, { bg: allSelect }]" @click="AllSelect()"><text v-if="allSelect" class="gou"></text></view>
+					</view>
+					<view class="uni-flex uni-flex-item itemAll">全选</view>
+					<view class="uni-flex uni-flex-item3">¥{{ allPrice }}</view>
+					<view class="uni-flex uni-flex-item2 justify-align-center">
+						<view v-show="open" class="uni-flex uni-flex-item btn" @click="js()" :class="{'activeBg':bgChange}">结算({{ allNum }})</view>
+						<view v-show="!open" class="uni-flex uni-flex-item btn-hollow" :class="{'activeDel':delBgChange}" @click="delAll()">删除({{ allNum }})</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<attr-popup :show="showAttr" @hidePopup="hidePopup" :productItems="productItems" :toptitle="toptitle"></attr-popup>
+		<backTop :src="backTop.src" :scrollTop="backTop.scrollTop"></backTop>
+		<attr :show="showAttr1" ref="child1" :popStock="stock" :staticStock="stock" :user="user" :saleMode="saleMode" :max="max"
+		 :weight="weight" :mode="mode" :merchant="merchant" :expressFees="expressFees" :number="stock" :popUnitNum="unitNum"
+		 :unit="unit" :popIndex="popIndex" :title="title" :pic="pic" :sale="sale" :popMarketPrice="marketPrice" :popSalePrice="salePrice"
+		 :pid="id" :hideAttr="hideAttr" :attr="attr" :popupAttr="popupAttr" :popCarts="json" @selAttrPic="selAttrPic"
+		 @ModiAttr="ModiAttr" @hidePopup1="hidePopup1"></attr>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+
+	import attrPopup from '../../../components/cartcommon/uni-popup-public.vue';
+	import cart from '../../../common/cart.js';
+	import util from '../../../common/util.js';
+	import attr from '../../../components/uni-popup-attr.vue';
+	import backTop from '@/components/uni-top.vue';
+
+	export default {
+		computed: {
+			...mapState(['hasLogin', 'forcedLogin', 'jyyUser'])
+		},
+		data() {
+			return {
+				backTop: {
+					src: '../../../static/top.png',
+					scrollTop: 0
+				},
+				delBgChange: false,
+				bgChange: false,
+				src: '../../../static/pay04.png',
+				yuan: 'yuan',
+				allPrice: '0.00',
+				allSelect: false,
+				Show: -1,
+				open: true,
+				ok: false,
+				allNum: 0,
+				all: 0,
+				json: [],
+				user: {},
+				items: [],
+				showAttr: false,
+				productItems: [],
+				toptitle: '',
+				windowHeight: 0,
+				//attr
+				product: {},
+				showAttr1: false,
+				stock: 0,
+				saleMode: 0,
+				mode: '',
+				max: '',
+				unit: '',
+				unitNum: 1,
+				weight: '',
+				merchant: {},
+				expressFees: [],
+				title: '',
+				pic: '',
+				sale: {
+					mode: '0'
+				},
+				salePrice: '',
+				marketPrice: '',
+				id: '',
+				hideAttr: true,
+				attr: [],
+				popupAttr: {},
+				attrPic: {},
+				popIndex: 0,
+				//attr
+			};
+		},
+		onShow() {
+			this.init();
+		},
+		onLoad(e) {
+			this.windowHeight = uni.getSystemInfoSync().windowHeight;
+			this.init();
+		},
+		onPageScroll(e) {
+			this.backTop.scrollTop = e.scrollTop;
+			util.loads(this.items, 'list', this.windowHeight);
+		},
+		onPullDownRefresh() {
+			this.init();
+			setTimeout(function() {
+				uni.stopPullDownRefresh();
+			}, 1000);
+		},
+		components: {
+			attrPopup,
+			attr,
+			backTop
+		},
+		methods: {
+			goMyAgency() {
+				uni.navigateTo({
+					url: '../myAgency/index'
+				})
+			},
+			selAttrPic(e) {
+				if (this.attrPic) {
+					for (let i = 0; i < this.attrPic.length; i++) {
+						if (this.attrPic[i].name == e) {
+							this.pic = this.domain + this.attrPic[i].url;
+							break;
+						}
+					}
+				}
+			},
+			ModiAttr(js) {
+				this.hidePopup1();
+				this.json = this.cartSort(js);;
+				cart.updateCart(this.json);
+			},
+			cartSort(json) {
+				for (let i = 0; i < json.length; i++) {
+					json[i].items.sort(function(a, b) {
+						return a.id - b.id
+					});
+				}
+				return json;
+			},
+			hidePopup1() {
+				this.showAttr1 = false;
+			},
+			changeAttr(m, index) {
+				this.id = this.json[m].items[index].id;
+				this.getProduct();
+				this.popIndex = index;
+			},
+			getProduct() {
+				uni.showLoading({
+					title: '加载中'
+				});
+				uni.request({
+					url: this.webUrl + 'Product',
+					method: 'POST',
+					data: {
+						id: this.id,
+						userid: this.userid
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						uni.hideLoading();
+						if (res.data.result.isSuccess) {
+							this.product = res.data.result.product;
+							this.saleMode = this.product.saleMode;
+							this.salePrice = this.product.salePrice.toFixed(2);
+							this.marketPrice = this.product.marketPrice.toFixed(2);
+							this.stock = this.product.stock;
+							this.max = this.product.stock;
+							this.pic = this.product.pic;
+							this.unitNum = this.product.unitNum;
+							this.unit = this.product.unit;
+							this.title = this.product.title;
+							this.merchant = res.data.result.merchant;
+							this.expressFees = res.data.result.expressFees;
+							this.weight = this.product.weight;
+							if (this.product.attributeList != null) {
+								let jsonAttr = JSON.parse(this.product.attributeList);
+								this.popupAttr = jsonAttr;
+								this.attr = [];
+								for (let i = 0; i < this.popupAttr.length; i++) {
+									this.attr.push(JSON.parse('{"name":"' + this.popupAttr[i].attrName + '","value":""}'));
+								}
+							}
+							this.sale.mode = 0;
+							this.max = this.stock;
+							this.showAttr1 = true;
+							this.mode = 3;
+							this.$refs.child1.groupCartInit();
+						} else {
+							uni.showModal({
+								title: '系统提示',
+								content: res.data.result.resultInfo
+							});
+						}
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			},
+			goProduct(id) {
+				uni.navigateTo({
+					url: '../../merchant/product/product?id=' + id
+				})
+			},
+			init() {
+				if (!this.hasLogin) {
+					uni.navigateTo({
+						url: '../login/login'
+					});
+				} else {
+					uni.showLoading({
+						title: "加载中"
+					})
+					this.delBgChange = false;
+					this.bgChange = false;
+					this.user = JSON.parse(this.jyyUser);
+					this.json = this.cartSort(cart.getCart());
+					console.log(this.json)
+					this.userid = this.user.id;
+					if (this.json.length > 0) {
+						this.ok = true;
+						this.reSetSel();
+						this.count();
+					} else {
+						this.getDate();
+						this.ok = false;
+					}
+					uni.hideLoading();
+				}
+			},
+			hidePopup() {
+				this.showAttr = false;
+			},
+			manage() {
+				this.open = !this.open;
+			},
+			getDate() {
+				uni.request({
+					url: this.webUrl + 'Recommend',
+					method: 'POST',
+					data: {
+						userid: this.userid
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						this.items = res.data.result.resultInfo;
+						setTimeout(() => {
+							util.loads(this.items, 'list', this.windowHeight);
+						}, 300)
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			},
+			imageOnLoad(e) {
+				e.loaded = true;
+			},
+			selected(m, index) {
+				let select = this.json[m].items[index].select;
+				this.json[m].items[index].select = !select;
+				//this.cpIndex = index;
+				let length = this.json[m].items.length;
+
+				//商品全部选中,店铺才选中
+				let select1 = true;
+				for (let i = 0; i < length; i++) {
+					//叠加积累有false就为false
+					select1 *= this.json[m].items[i].select;
+				}
+				if (select1 == true) {
+					this.json[m].select = true;
+				} else {
+					this.json[m].select = false;
+				}
+
+				//判断商品是否全部选中,是的话,全选也选中
+				let json = this.json.length;
+				let all = true;
+				for (let i = 0; i < json; i++) {
+					all *= this.json[i].select;
+				}
+				if (all == true) {
+					this.allSelect = true;
+				}
+				this.allSl(); //商品数量
+				this.cancel(m, index); //商品没有全部选中就取消全选
+				this.price(); //总价
+			},
+			//结算商品数量
+			allSl() {
+				let json = this.json.length;
+				let js = 0;
+				for (let i = 0; i < json; i++) {
+					let arr = this.json[i].items;
+					for (let j = 0; j < arr.length; j++) {
+						if (this.json[i].items[j].show) {
+							js += this.json[i].items[j].select;
+						}
+					}
+				}
+				this.allNum = js;
+				if (this.allNum > 0) {
+					this.bgChange = true;
+				} else {
+					this.bgChange = false;
+				}
+			},
+			count() {
+				let json = this.json.length;
+				let js = 0;
+				for (let i = 0; i < json; i++) {
+					let arr = this.json[i].items;
+					for (let j = 0; j < arr.length; j++) {
+						js++;
+					}
+				}
+				this.all = js;
+			},
+			//计算价格
+			price() {
+				let all = 0;
+				for (let j = 0; j < this.json.length; j++) {
+					//点击循环有多少个商家
+					let arr = this.json[j].items; //获取商家下面的列表产品
+					for (let i = 0; i < arr.length; i++) {
+						//循环产品列表
+						if (arr[i].select === true) {
+							//列表里面那些为true
+							all += arr[i].jg * arr[i].sl; //为true的价格加起来,为总价
+						}
+					}
+				}
+				this.allPrice = all.toFixed(2); //返回数据
+				if (this.allPrice > 0) {
+					this.delBgChange = true;
+				} else {
+					this.delBgChange = false;
+				}
+			},
+			//选择属于某个商家地所有产品
+			dpSelected(index) {
+				//商家选中
+				let select = this.json[index].select;
+				this.json[index].select = !select;
+
+				let arr = this.json[index].items; //获取店铺下面的产品数量
+				for (let i = 0; i < arr.length; i++) {
+					//循环产品数量
+					if (arr[i].select == false) {
+						//判断有那些产品未选中
+						arr[i].select = true; //选中咯
+					}
+					if (this.json[index].select === false) {
+						//当店铺取消全选的时候
+						arr[i].select = false; //产品全部没选中
+					}
+				}
+				let select1 = true; //创建一个为真的变量
+				for (let i = 0; i < this.json.length; i++) {
+					if (this.json[i].select == false) {
+						//如果有商家没选中全选则为false
+						this.allSelect = false;
+					}
+					select1 *= this.json[i].select;
+				}
+
+				if (select1 == true) {
+					this.allSelect = true;
+				}
+
+				this.allSl(); //商品数量
+				this.price();
+			},
+			AllSelect() {
+				let selected = this.allSelect;
+				this.allSelect = !selected;
+
+				let dp = this.json.length; //获取店铺数量
+				for (let i = 0; i < dp; i++) {
+					//循环店铺
+					let arr = this.json[i].items; //获取每个店铺的商品
+					for (let j = 0; j < arr.length; j++) {
+						//循环每个店铺里面的商品为选中
+						if (this.json[i].items[j].show) {
+							if (this.allSelect == true) {
+								this.json[i].items[j].select = true;
+							}
+							if (this.allSelect == false) {
+								this.json[i].items[j].select = false;
+							}
+						}
+					}
+					if (this.json[i].show) {
+						if (this.allSelect == true) {
+							this.json[i].select = true;
+						} else {
+							this.json[i].select = false;
+						}
+					}
+				}
+				this.allSl(); //商品数量
+				this.price();
+			},
+			//商品没有全部选中就取消全选
+			cancel(m, index) {
+				if (this.json[m].items[index].select == false) {
+					this.allSelect = false;
+				}
+			},
+			//商品--
+			reduce(m, index) {
+				if (this.json[m].items[index].sl <= 1) {
+					return;
+				}
+				this.json[m].items[index].sl--;
+				this.price();
+				cart.updateCart(this.json);
+			},
+			//商品++
+			add(m, index) {
+				this.json[m].items[index].sl++;
+				let id = this.json[m].items[index].id;
+				let attrMode = this.json[m].items[index].attrMode;
+				let count = 0;
+				let stock = 0;
+				if (attrMode) {
+					for (let j = 0; j < this.json[m].items.length; j++) {
+						if (this.json[m].items[j].attrMode == true & this.json[m].items[j].id == id) {
+							count += this.json[m].items[j].unitNum * this.json[m].items[j].sl;
+						}
+					}
+					stock = this.json[m].items[index].stock;
+				} else {
+					count = this.json[m].items[index].sl * this.json[m].items[index].unitNum;
+					stock = this.json[m].items[index].attrStock;
+				}
+				if (count >= stock) {
+					uni.showToast({
+						title: '库存不足',
+						icon: 'none'
+					});
+					this.json[m].items[index].sl--;
+				} else {
+					// this.json[m].items[index].jg = (this.json[m].items[index].sl * this.json[m].items[index].unitNum * this.json[m].items[
+					// 	index].unitPrice).toFixed(2);
+					this.price();
+					cart.updateCart(this.json);
+				}
+
+
+			},
+			delAll() {
+				if (this.delBgChange) {
+					const jsons = [];
+					let f = false;
+					for (let j = 0; j < this.json.length; j++) {
+						let arr = this.json[j].items;
+						let items = [];
+						for (let i = 0; i < arr.length; i++) {
+							if (arr[i].select === false) {
+								items.push({
+									id: arr[i].id,
+									cp: arr[i].cp,
+									jg: arr[i].jg,
+									img: arr[i].img,
+									sl: arr[i].sl,
+									attr: arr[i].attr,
+									unitNum: arr[i].unitNum,
+									unit: arr[i].unit,
+									attrMode: arr[i].attrMode,
+									select: false,
+									show: true,
+									weight: arr[i].weight,
+									expressFees: arr[i].expressFees
+								});
+							} else {
+								f = true;
+							}
+						}
+						if (items.length > 0) {
+							const item = {
+								mid: this.json[j].mid,
+								sj: this.json[j].sj,
+								no: '',
+								totalPrice: '',
+								select: false,
+								show: true,
+								message: '',
+								expressCost: '',
+								items: items,
+								count: '',
+								sale: this.json[j].sale
+							};
+							jsons.push(item);
+							this.allPrice = '0.00';
+							this.allNum = 0;
+						}
+					}
+					if (!f) {
+						uni.showToast({
+							icon: 'none',
+							title: '请选择商品'
+						});
+					} else {
+						let that = this;
+						uni.showModal({
+							title: '提示',
+							content: '是否删除',
+							success: function(res) {
+								if (res.confirm) {
+									that.json = jsons;
+									cart.updateCart(that.json);
+									if (jsons.length == 0) {
+										that.ok = false;
+										that.init()
+									}
+									that.allPrice = '0.00';
+									that.allNum = 0;
+									that.delBgChange = false;
+									that.bgChange = false;
+								} else if (res.cancel) {
+									console.log('用户点击取消');
+								}
+							}
+						});
+
+					}
+				}
+			},
+			reSetSel() {
+				for (var i = 0; i < this.json.length; i++) {
+					this.json[i].select = false;
+					for (var j = 0; j < this.json[i].items.length; j++) {
+						this.json[i].items[j].select = false;
+					}
+				}
+				this.allSelect = false;
+				this.allPrice = '0.00';
+				this.allNum = 0;
+				this.open = true;
+			},
+			//结算支付
+			js() {
+				if (this.bgChange) {
+					if (this.allPrice == 0) {
+						uni.showToast({
+							icon: 'none',
+							title: '请选择商品'
+						});
+					} else {
+						const jsons = [];
+						let f = false;
+						for (let j = 0; j < this.json.length; j++) {
+							let arr = this.json[j].items;
+							let items = [];
+							for (let i = 0; i < arr.length; i++) {
+								if (arr[i].select === true) {
+									items.push({
+										id: arr[i].id,
+										cp: arr[i].cp,
+										jg: arr[i].jg,
+										img: arr[i].img,
+										sl: arr[i].sl,
+										attr: arr[i].attr,
+										unitNum: arr[i].unitNum,
+										weight: arr[i].weight,
+										unit: arr[i].unit,
+										attrMode: arr[i].attrMode
+									});
+								} else {
+									f = true;
+								}
+							}
+							if (items.length > 0) {
+								const item = {
+									mid: this.json[j].mid,
+									sj: this.json[j].sj,
+									no: '',
+									totalPrice: '',
+									message: '',
+									expressCost: '',
+									items: items,
+									count: '',
+									sale: this.json[j].sale
+								};
+								jsons.push(item);
+							}
+						}
+
+						uni.showLoading({
+							title: '订单保存中'
+						});
+						uni.request({
+							url: this.webUrl + 'SaveOrder',
+							method: 'POST',
+							data: {
+								user: JSON.stringify(this.user),
+								data: JSON.stringify(jsons)
+							},
+							header: {
+								'content-type': 'application/x-www-form-urlencoded'
+							},
+							success: res => {
+								uni.hideLoading();
+								if (res.data.result.isSuccess) {
+									cart.setOrder(res.data.orders);
+									//cart.updateCart([]);
+									uni.navigateTo({
+										url: '../order/order'
+									});
+								} else {
+									this.showAttr = true;
+									this.toptitle = res.data.result.resultInfo;
+									this.productItems = res.data.result.resultInfo2;
+									// uni.showToast({
+									// 	title: res.data.result.resultInfo,
+									// 	icon: 'none'
+									// });
+								}
+							},
+							fail: () => {},
+							complete: () => {}
+						});
+					}
+				}
+			}
+		}
+	};
+</script>
+
+<style>
+	.recommend {
+		overflow-x: hidden;
+	}
+
+	.push_product_title image {
+		width: 100%;
+		height: 48rpx;
+
+	}
+
+	.push_product_title .push_title {
+		width: 100%;
+		position: absolute;
+		left: 50%;
+		margin-left: -30rpx;
+		color: #333333;
+
+	}
+
+	.uni-flex-item2 input {
+		display: inline-block;
+		width: 20upx;
+	}
+
+	page {
+		background: #ffffff;
+	}
+
+	.jz_cart .btn {
+		border-radius: 6upx;
+		background: #cdcdcd;
+		letter-spacing: 4upx;
+	}
+
+	.jz_cart .activeBg {
+		background: #dd0101;
+	}
+
+	.jz_cart .activeDel {
+		background: #dd0101;
+	}
+
+	.gou {
+		display: block;
+		text-align: center;
+		color: #ffffff;
+		width: 40upx;
+		height: 40upx;
+		line-height: 40upx;
+	}
+
+	.push_product_title {
+		width: 100%;
+		padding: 30upx 0 0 0;
+		position: relative;
+	}
+
+	.push_product_title image {
+		width: 100%;
+		height: 48upx;
+	}
+
+	.push_product_title .push_title {
+		width: 100%;
+		position: absolute;
+		left: 50%;
+		margin-left: -30upx;
+		color: #333333;
+	}
+</style>

+ 283 - 0
pages/user/fav/fav.vue

@@ -0,0 +1,283 @@
+<template>
+	<view class="uni-tab-bar">
+		<view class="uni-product-list favList">
+			<scroll-view scroll-y="false" class="scroll-Y" @scrolltolower="loadMore()">
+				<view class="uni-product uni-flex" v-for="(item,index) in newsitems[0].data" :key="index">
+					<view class="image-view" @click="goProduct(item)">
+						<image class="uni-product-image" :src="item.pic" />
+					</view>
+					<view class="uni-product-wrap uni-flex uni-column">
+						<view class="uni-product-title">{{item.title}}</view>
+						<view class="uni-flex uni-product-price uni-flex-item">
+							<view class="uni-flex uni-flex-item uni-product-price-original">
+								¥{{item.salePrice}}
+							</view>
+							<view class="uni-flex uni-flex-item uni-product-price-favour">
+								¥{{item.marketPrice}}
+							</view>
+						</view>
+					</view>
+					<view class="delCollection-wrap uni-flex">
+						<view class="delCollection" @click="fav(item,index)">取消收藏</view>
+					</view>
+				</view>
+
+				<view class="uni-tab-bar-loading">
+					<uni-load-more :loadingType="newsitems[0].loadingType" :contentText="loadingText"></uni-load-more>
+				</view>
+			</scroll-view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+
+	import favr from '../../../common/favr.js';
+	import uniLoadMore from '@/components/uni-load-more.vue';
+	export default {
+		computed: {
+			...mapState(['hasLogin', 'jyyUser', 'favs'])
+		},
+		components: {
+			uniLoadMore
+		},
+		data() {
+			return {
+				loadingText: {
+					contentdown: "上拉显示更多",
+					contentrefresh: "正在加载...",
+					contentnomore: "没有更多数据了"
+				},
+				user: {},
+				newsitems: [{
+					"loadingType": 0,
+					"pageIndex": 1,
+					"data": []
+				}],
+				show: true
+			}
+		},
+		onLoad(e) {
+			if (!this.hasLogin) {
+				uni.navigateTo({
+					url: '../login/login',
+				});
+			} else {
+				this.user = JSON.parse(this.jyyUser);
+			}
+		},
+		onReady() {
+			this.init();
+		},
+		methods: {
+			...mapMutations(['setFavs']),
+			init() {
+				this.getData();
+			},
+			fav(e, index) {
+				let id = e.favid
+				uni.request({
+					url: this.webUrl + 'Fav',
+					method: 'POST',
+					data: {
+						id: id,
+						mode: 1,
+						userid: this.user.id,
+						show: !this.show
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						uni.hideLoading();
+						if (res.data.result.isSuccess) {
+							this.setFavs(JSON.stringify(res.data.result.resultInfo2));
+							uni.showToast({
+								title: res.data.result.resultInfo,
+								icon: "none"
+							})
+							this.newsitems[0].data.splice(index, 1)
+						} else {
+							uni.showModal({
+								title: "系统提示",
+								content: res.data.result.resultInfo,
+								icon: "none"
+							})
+						}
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+
+			},
+			goProduct(e) {
+				console.log(e)
+				uni.navigateTo({
+					url: '../../merchant/product/product?id=' + e.favid 
+				});
+			},
+			loadMore() {
+				setTimeout(() => {
+					this.addData();
+				}, 1200);
+			},
+			addData() {
+				this.getData();
+			},
+			getData() {
+				if (this.newsitems[0].loadingType === 2) {
+					return;
+				}
+				this.newsitems[0].loadingType = 1;
+				uni.request({
+					url: this.webUrl + 'Favs',
+					method: 'POST',
+					data: {
+						pageIndex: this.newsitems[0].pageIndex,
+						userid: this.user.id
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						if (res.data.result.uniFavs.length > 0) {
+							this.newsitems[0].data = this.newsitems[0].data.concat(res.data.result.uniFavs);
+						} else {
+							this.newsitems[0].loadingType = 2;
+							return;
+						}
+						if (this.newsitems[0].pageIndex == parseInt(res.data.result.pages)) {
+							this.newsitems[0].loadingType = 2;
+							return;
+						} else {
+							this.newsitems[0].loadingType = 0;
+						}
+						this.newsitems[0].pageIndex++;
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			}
+		}
+	}
+</script>
+
+<style>
+	.favList {
+		margin-top: 20upx;
+	}
+
+	.favList .uni-product-wrap {
+		position: relative;
+	}
+
+	.delCollection-wrap {
+		align-items: center;
+		justify-content: center;
+	}
+
+	.delCollection-wrap .delCollection {
+		width: 150upx;
+		height: 55upx;
+		line-height: 55upx;
+		text-align: center;
+		margin-right: 30upx;
+		margin-bottom: 5upx;
+		display: inline-block;
+		background: #fc6f05;
+		color: #fff;
+		border-radius: 60upx;
+		font-size: 24upx;
+	}
+
+	.image-view {
+		width: 160upx;
+		height: 160upx;
+		margin-left: 25upx;
+		border-radius: 10upx;
+	}
+
+	.image-view .uni-product-image {
+		width: 160upx;
+		height: 160upx;
+		border-radius: 10upx;
+	}
+
+	.uni-product-price-favour {
+		margin-left: 0;
+	}
+
+	.uni-product-list {
+		overflow-y: scroll;
+	}
+
+
+	.uni-product-wrap {
+		flex: 1;
+		margin-left: 30upx;
+		align-content: space-around;
+	}
+
+	.uni-product-number-wrap {
+		display: flex;
+		justify-content: space-between;
+		align-items: flex-end;
+	}
+
+	.uni-product {
+		width: 90%;
+		margin: 2%;
+		flex-direction: row;
+		background: #FFFFFF;
+		border-radius: 35upx;
+	}
+
+	.uni-product-number {
+		margin-right: 0;
+	}
+
+	.sellgroup {
+		width: 150upx;
+		height: 55upx;
+		line-height: 55upx;
+		text-align: center;
+		margin-right: 10upx;
+		margin-bottom: 5upx;
+		display: inline-block;
+		background: #fc6f05;
+		color: #fff;
+		border-radius: 60upx;
+		font-size: 24upx;
+	}
+
+	.uni-product-price-original {
+		margin-top: 10upx;
+	}
+
+	.uni-product-price-favour {
+		margin-top: 10upx;
+	}
+
+	.uni-tab-bar-container {
+		width: calc(100% - 20upx);
+		overflow: hidden;
+		margin-left: 10upx;
+	}
+
+	::-webkit-scrollbar {
+		/*隐藏滚轮*/
+		display: none;
+	}
+
+	.uni-product-price {
+		flex-direction: column;
+	}
+
+	.uni-tab-bar-loading {
+		margin: 0 auto;
+	}
+</style>

+ 209 - 0
pages/user/income/income.vue

@@ -0,0 +1,209 @@
+<template>
+	<view class="jz_income uni-flex uni-column">
+		<view class="item_top uni-flex space-between">
+			<view class="dataBtn uni-flex justify-align-center" @click="onShowDatePicker('rangetime')">
+				<view class="date"> {{range[0]}} - {{range[1]}}</view>
+				<image src="../../../static/income/03.png"></image>
+			</view>
+			<view class="moneny uni-flex justify-align-center">收入 ¥{{income}}</view>
+		</view>
+		<view class="income_item uni-flex uni-column">
+
+			<view class="income_space"></view>
+			<view class="content_list uni-flex uni-column">
+				<view class="content_item_wrap">
+					<view class="content_item uni-flex space-between align-items" v-for="(item, key) in moneyLogList" :key="key"
+					 @click="goProduct(item)">
+						<view class="item_lf uni-flex align-items">
+							<view class="uni-flex justify-align-center lef-img">
+								<image :src="'../../../static/income/0'+item.rank+'.png'"></image>
+							</view>
+							<view class="item_titles uni-flex space-between uni-column">
+								<view class="" v-if="item.rank==1">推广收益 - 直接收益</view>
+								<view class="" v-if="item.rank==2">推广收益 - 间接收益</view>
+								<view class="uni-flex">
+									<view class="orderNo ">{{item.orderNo}}</view>
+								</view>
+								<view class="">{{item.createDate}}</view>
+							</view>
+						</view>
+
+						<view class="item_rt uni-flex  justify-align-center">
+							<view class="uni-flex uni-column">
+								<view>¥{{item.amount}}</view>
+								<view v-if="item.state==0" style="color: #666666;">未确认</view>
+								<view v-if="item.state==1" style="color: #666666;">已确认</view>
+							</view>
+							<view class="uni-flex justify-align-center rtLine" >
+								<uni-icon type="arrowright" size="20"></uni-icon>
+							</view>
+							
+						</view>
+					</view>
+				</view>
+
+			</view>
+
+		</view>
+		<load-more :loadingType="loadingType" :contentText="contentText"></load-more>
+		<mx-date-picker :show="showPicker" :type="type" :value="value" :show-tips="true" :begin-text="'开始'" :end-text="'结束'"
+		 :show-seconds="true" @confirm="onSelected" @cancel="onSelected" />
+	</view>
+</template>
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+
+	import MxDatePicker from "@/components/mx-datepicker/mx-datepicker.vue";
+	import util from '../../../common/util.js'
+	import loadMore from '@/components/uni-load-more.vue';
+	import backTop from '@/components/uni-top.vue';
+	import uniIcon from '../../../components/uni-icon.vue';
+
+	var index;
+	var date = new Date();
+	var range = util.getMonthFirstLastDay(date.getFullYear(), date.getMonth() + 1);
+	export default {
+		components: {
+			MxDatePicker,
+			loadMore,
+			backTop,
+			uniIcon
+		},
+		computed: {
+			...mapState(['hasLogin', 'forcedLogin', 'jyyUser'])
+		},
+		data() {
+			return {
+				loadingType: 0,
+				contentText: {
+					contentdown: "上拉显示更多",
+					contentrefresh: "正在加载...",
+					contentnomore: "没有更多数据了"
+				},
+				backTop: {
+					"src": "../../static/top.png",
+					"scrollTop": 0
+				},
+				user: {},
+				moneyLogList: [],
+				showPicker: false,
+				type: 'rangetime',
+				range: range,
+				value: '',
+				income: 0,
+			}
+		},
+		onLoad() {
+			
+			if (!this.hasLogin) {
+				uni.navigateTo({
+					url: '../login/login',
+				});
+			} else {
+				range[0]='2019-11-01';
+				index = 1;
+				this.user = JSON.parse(this.jyyUser);
+				this.getData();
+			}
+
+		},
+		onPullDownRefresh() {
+			this.getData();
+			setTimeout(function() {
+				uni.stopPullDownRefresh();
+			}, 1000);
+		},
+		onReachBottom() {
+			this.getData();
+		},
+		methods: {
+			goProduct(e) {
+				uni.navigateTo({
+					url: 'product?id=' + e.id + '&userid=' + this.user.id
+				})
+			},
+			getData() {
+				if (this.loadingType !== 0) {
+					return;
+				}
+				uni.request({
+					url: this.webUrl + 'GetMoneyLog',
+					method: 'POST',
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					data: {
+						userid: this.user.id,
+						PageIndex: index,
+						begin: this.range[0],
+						end: this.range[1],
+					},
+					success: res => {
+						this.income = res.data.result.income.toFixed(2);
+						if (res.data.result.moneyLogList.length > 0) {
+							this.moneyLogList = this.moneyLogList.concat(res.data.result.moneyLogList);
+						} else {
+							this.loadingType = 2;
+							return;
+						}
+						if (index == parseInt(res.data.result.pages)) {
+							this.loadingType = 2;
+							return;
+						} else {
+							this.loadingType = 0;
+						}
+						index++;
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			},
+			onShowDatePicker(type) { //显示
+				this.type = type;
+				this.showPicker = true;
+				this.value = this[type];
+			},
+			onSelected(e) { //选择
+				this.showPicker = false;
+				if (e) {
+					this.range[0] = util.formatDate(e.value[0], "YY-MM-DD");
+					this.range[1] = util.formatDate(e.value[1], "YY-MM-DD");
+					index = 1;
+					this.loadingType = 0;
+					this.moneyLogList = [];
+					this.getData();
+				}
+			}
+		}
+	}
+</script>
+
+
+<style>
+	.rtLine{
+		color: #999999;
+		margin-left: 30upx;
+	}
+	
+	page {
+		height: auto;
+	}
+
+	.jz_income .mescroll-uni.mescroll-uni-fixed {
+		position: static;
+	}
+
+	.jz_income .orderNo {
+		width: 300upx;
+		overflow: hidden;
+		white-space: nowrap;
+		text-overflow: ellipsis;
+	}
+
+	.jz_income .orderNoTitle {
+		width: 110upx;
+	}
+</style>

+ 106 - 0
pages/user/income/product.vue

@@ -0,0 +1,106 @@
+<template>
+	<view class="uni-flex uni-column order-items jz_incomeProduct" style="margin-top: 30upx;">
+		<view class="uni-flex uni-row uni-flex-item order-shop-name order-boder">
+			<view class="orderNo">
+				{{moneyLog.orderNo}}
+			</view>
+			<view class="uni-flex uni-flex-item order-status" style="color: #000000;">
+				{{moneyLog.buyer}}
+			</view>
+		</view>
+
+		<view class="uni-flex uni-row order-item align-items" v-for="(item,key) in items" :key="key">
+			<view class="uni-flex uni-flex-item pic item-padding">
+				<image mode="widthFix" :src="item.pic"></image>
+			</view>
+			<view class="uni-flex uni-column uni-flex-item3 item-padding">
+				<text class="uni-text order-title">{{item.title}}</text>
+				<text class="uni-text order-specs">{{item.productSpecsStr}}</text>
+				<text class="uni-text order-specs">分润</text>
+			</view>
+			<view class="uni-flex uni-column uni-flex-item item-padding">
+				<text class="uni-text price-red">¥{{item.totalPrice}}</text>
+				<text class="uni-text">x{{item.amount}}</text>
+				<text class="uni-text price-red">¥{{item.profit}}</text>
+			</view>
+		</view>
+		<view class="incomeAll uni-flex uni-column" style="background: #F4F5F6;">
+			<view class="uni-flex  space-between">
+				<view class="uni-flex order-line">
+					<text class="allCount">共{{allNum}}件商品</text>
+				</view>
+				<view class="uni-flex order-line">
+					合计:<text class="price-red allPrice">¥{{moneyLog.subTotal}}</text>
+				</view>
+			</view>
+			<view class="uni-flex space-between">
+				<view class="uni-flex order-line">
+					{{moneyLog.createDate}}
+				</view>
+				<view class="uni-flex order-line">
+					<text class="allCount">分润</text>:<text class="price-red allPrice">¥{{moneyLog.amount}}</text>
+				</view>
+			</view>
+		</view>
+		<view class="uni-flex order-line item-padding order-btn" style="height: 10upx;">
+		</view>
+	</view>
+
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				id: '',
+				userid: '',
+				moneyLog: {},
+				items: []
+			}
+		},
+		computed: {
+			allNum() {
+				let num = 0;
+				for (let i = 0; i < this.items.length; i++) {
+					num += this.items[i].amount;
+				}
+				return num
+			}
+		},
+		onLoad(e) {
+			this.id = e.id;
+			this.userid = e.userid;
+			this.getData();
+		},
+		methods: {
+			getData() {
+				uni.request({
+					url: this.webUrl + 'GetMoneyLogView',
+					method: 'POST',
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					data: {
+						userid: this.userid,
+						id: this.id
+					},
+					success: res => {
+						if (res.data != null) {
+							this.moneyLog = res.data.data;
+							this.items = res.data.items;
+						}
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			}
+		}
+	}
+</script>
+
+<style>
+	.order-items .order-boder .orderNo {
+		width: 550upx;
+	}
+
+</style>

+ 314 - 0
pages/user/login/login.vue

@@ -0,0 +1,314 @@
+<template>
+	<view class="jz_login">
+		<view class="uni-flex login-top">
+			<image mode="widthFix" src="../../../static/login/login_bg.png"></image>
+			<div class="waveWrapper waveAnimation">
+
+				<div class="circles">
+					<div class="circle"></div>
+					<div class="circle"></div>
+					<div class="circle"></div>
+					<div class="circle"></div>
+					<div class="circle"></div>
+					<div class="circle"></div>
+					<div class="circle"></div>
+				</div>
+
+
+
+			</div>
+		</view>
+		<view class=" space"></view>
+		<view class="login-box uni-column ">
+			<view class="login-form uni-flex uni-column">
+				<view class="logoImg uni-flex" @click="Home">
+					<image src="../../../static/login/login_logo.png"></image>
+				</view>
+				<view class="tab uni-flex uni-flex-item uni-column">
+					<view class="uni-flex uni-row login-tab">
+						<view @click="Mode(0)" class="uni-flex uni-flex-item  " v-bind:class="[current==0 ? activeClass : '']">
+							密码登录
+						</view>
+						<view @click="Mode(1)" class="uni-flex uni-flex-item  " v-bind:class="[current==1 ? activeClass : '']">
+							短信登录
+						</view>
+					</view>
+
+					<view class="uni-flex content uni-flex-item">
+						<view class="uni-flex uni-column" v-show="current === 0">
+							<view class="form-phone uni-flex">
+								<view class="form-phone-lf uni-flex">
+									<image src="../../../static/login/ico1.png"></image>
+								</view>
+								<input class="uni-flex-item userNameIput" placeholder-style="color:#e2e2e2" v-model="phone" name="input"
+								 placeholder="输入手机号码" />
+							</view>
+							<view class="form-phone uni-flex">
+								<view class="form-phone-lf uni-flex">
+									<image src="../../../static/login/ico2.png"></image>
+								</view>
+								<input class="uni-flex-item userNameIput" password placeholder-style="color:#e2e2e2" v-model="password" name="input"
+								 placeholder="输入登录密码" />
+							</view>
+						</view>
+						<view class="uni-flex uni-column" v-show="current === 1">
+							<view class="form-phone uni-flex">
+								<view class="form-phone-lf uni-flex">
+									<image src="../../../static/login/ico1.png"></image>
+								</view>
+								<input class="uni-flex-item userNameIput" placeholder-style="color:#e2e2e2" v-model="phone" name="input"
+								 placeholder="输入手机号码" />
+							</view>
+							<view class="form-phone uni-flex">
+								<view class="form-phone-lf uni-flex">
+									<image src="../../../static/login/login_message.png"></image>
+								</view>
+								<input class="uni-flex-item userNameIput" placeholder-style="color:#e2e2e2" v-model="code" name="input"
+								 placeholder="输入短信验证码" />
+								<view class="codeBtn uni-flex" >
+									<button class="send uni-flex-item" :type="type" size="mini" @click="SendEsms">{{content}}</button>
+								</view>
+							</view>
+						</view>
+					</view>
+
+				</view>
+				<view class="btnImg" @click="Login">
+					登录
+				</view>
+			</view>
+			<view class="login-tip uni-flex">
+				<view class="registerMsg" @click="goRegister">注册账号</view>
+				<view class="line"></view>
+				<view class="registerMsg" @click="goHome">返回首页</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+	import group from '../../../common/group.js';
+	import sha1 from '../../../common/sha1.js';
+
+	export default {
+		computed: {
+			...mapState(['hasLogin', 'forcedLogin', 'jyyUser', 'favs'])
+		},
+		data() {
+			return {
+				url: "",
+				phone: "",
+				password: "",
+				code: "",
+				vcode: "",
+				current: 0,
+				activeClass: "login-tab-on",
+				content: '发送验证码',
+				totalTime: 10,
+				type: "primary",
+				canClick: true,
+			};
+		},
+		onLoad(e) {
+			this.url = e.url;
+			this.init();
+		},
+		methods: {
+			...mapMutations(['login', 'setFavs', 'setShare']),
+			goRegister() {
+				uni.navigateTo({
+					url: '../register/register'
+				})
+			},
+			goHome(){
+				uni.switchTab({
+					url:'../../home/home'
+				})
+			},
+			Mode(e) {
+				this.current = e;
+			},
+			Home() {
+				uni.switchTab({
+					url: '../../home/home'
+				})
+			},
+			init() {
+				if (this.hasLogin) {
+					uni.navigateBack({
+						delta: 1
+					});
+				}
+			},
+			SendEsms() {
+				if (this.phone == "") {
+					uni.showToast({
+						icon: "none",
+						title: "请填写手机号码",
+					})
+				} else {
+					if (!this.canClick) return //改动的是这两行代码
+					uni.showLoading({
+						title: "发送中"
+					});
+					uni.request({
+						url: this.webUrl + 'SendEsms',
+						method: 'POST',
+						data: {
+							mobile: this.phone
+						},
+						header: {
+							'content-type': 'application/x-www-form-urlencoded'
+						},
+						success: res => {
+							uni.hideLoading()
+							if (res.data.result.status == "1") {
+								this.vcode = res.data.result.code;
+								this.canClick = false
+								this.type = "default";
+								this.content = this.totalTime + 's'
+								let clock = setInterval(() => {
+									this.totalTime--
+									this.content = this.totalTime + 's'
+									if (this.totalTime < 0) {
+										clearInterval(clock)
+										this.content = '重新发送'
+										this.totalTime = 10
+										this.canClick = true //这里重新开启
+										this.type = "primary"
+									}
+								}, 1000)
+
+							} else {
+								uni.showToast({
+									icon: "none",
+									title: "发送失败",
+								})
+							}
+						},
+						fail: () => {},
+						complete: () => {}
+					});
+				}
+			},
+			Login() {
+				if (this.phone == "") {
+					uni.showToast({
+						icon: "none",
+						title: "请填写手机号",
+					});
+					return false;
+				}
+				if (this.current == 0) {
+					if (this.password == "") {
+						uni.showToast({
+							icon: "none",
+							title: "请填写登录密码",
+						});
+						return false;
+					}
+				} else {
+					if (this.code == "") {
+						uni.showToast({
+							icon: "none",
+							title: "请填写验证码",
+						});
+						return false;
+					}
+				}
+				uni.showLoading({
+					title: "登录中"
+				});
+				uni.request({
+					url: this.webUrl + 'login',
+					method: 'POST',
+					data: {
+						code: this.code,
+						vcode: this.vcode,
+						phone: this.phone,
+						current: this.current,
+						password: sha1.hex_sha1(this.password)
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						uni.hideLoading();
+						if (res.data.result.isSuccess) {
+							this.login(JSON.stringify(res.data.user));
+							this.setFavs(JSON.stringify(res.data.favs));
+							uni.navigateBack({
+								delta: 1
+							});
+						} else {
+							uni.showToast({
+								title: res.data.result.resultInfo,
+								icon: "none"
+							})
+						}
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			}
+			/* wxGetUserInfo(e) {
+				this.loading = true;
+				if (e.detail.errMsg !== 'getUserInfo:ok') {
+					uni.showModal({
+						title: "获取用户信息失败",
+						content: "错误原因" + e.detail.errMsg,
+						showCancel: false
+					});
+					return;
+				} else {
+					uni.request({
+						url: this.webUrl + 'Register',
+						method: 'POST',
+						data: {
+							code: this.code,
+							userInfo: JSON.stringify(e.detail.userInfo),
+							shareId: this.shareId
+						},
+						header: {
+							'content-type': 'application/x-www-form-urlencoded'
+						},
+						success: res => {
+							if (res.data.result.isSuccess) {
+								this.loading = false;
+								this.login(JSON.stringify(res.data.result.resultInfo));
+								this.setFavs(JSON.stringify(res.data.result.resultInfo2));
+								group.updateCart([]);
+								uni.navigateBack({
+									delta: 1
+								});
+							}
+						},
+						fail: () => {},
+						complete: () => {}
+					});
+
+				}
+			} */
+
+		}
+	}
+</script>
+<style>
+	page {
+		background: #FFFFFF;
+	}
+
+	.jz_login .btnImg {
+		width: 460upx;
+		text-align: center;
+		height: 80upx;
+		line-height: 80upx;
+		color: #FFFFFF;
+		background: url(../../../static/btn.png) no-repeat;
+		background-size: 460upx 80upx;
+	}
+</style>

+ 118 - 0
pages/user/loginPassword/loginPassword.vue

@@ -0,0 +1,118 @@
+<template>
+	<view class="jz_beginCard uni-flex uni-column jz_loginPassword">
+		<form class="uni-flex uni-flex-item uni-column form" @submit="formSubmit" @reset="formReset">
+			<view class="uni-flex-item justify-align-center uni-flex uni-column">
+				<view class="beginCard_name uni-flex align-items">
+					<view class="uni-flex-item">输入新密码:</view>
+					<input type="text" password class="uni-flex-item3" v-model="newpassword" name="newpassword" placeholder="请输入新密码" />
+				</view>
+				<view class="beginCard_name uni-flex align-items">
+					<view class="uni-flex-item">确认新密码:</view>
+					<input type="text" password class="uni-flex-item3" v-model="confirmPassword" name="confirmPassword" placeholder="确认新密码" />
+				</view>
+				<view class="beginCard_btn">
+					<button formType="submit">
+						确认
+					</button>
+				</view>
+			</view>
+		</form>
+	</view>
+</template>
+
+<script>
+	var graceChecker = require('../../../common/graceChecker.js');
+	import sha1 from '../../../common/sha1.js';
+
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+
+	export default {
+		data() {
+			return {
+				newpassword: '',
+				code: '',
+				user: {}
+			}
+		},
+		computed: {
+			...mapState(['hasLogin', 'jyyUser'])
+		},
+		onLoad() {
+			if (!this.hasLogin) {
+				uni.navigateTo({
+					url: '../login/login',
+				});
+			} else {
+				this.user = JSON.parse(this.jyyUser);
+			}
+
+		},
+		methods: {
+			formSubmit: function(e) {
+
+				var rule = [{
+						name: 'newpassword',
+						checkType: 'notnull',
+						checkRule: '1',
+						errorMsg: '输入新密码'
+					},
+					{
+						name: 'confirmPassword',
+						checkType: 'notnull',
+						checkRule: '1',
+						errorMsg: '确认新密码'
+					}
+
+				];
+				//进行表单检查
+				var formData = e.detail.value;
+				var checkRes = graceChecker.check(formData, rule);
+
+				if (checkRes) {
+					uni.request({
+						url: this.webUrl + 'UpdatePass',
+						method: 'POST',
+						data: {
+							newpassword: sha1.hex_sha1(this.newpassword),
+							confirmPassword: sha1.hex_sha1(this.confirmPassword),
+							userId: this.user.id
+						},
+						header: {
+							'content-type': 'application/x-www-form-urlencoded'
+						},
+						success: res => {
+							uni.hideLoading();
+							uni.showToast({
+								title: res.data.result.resultInfo,
+								icon: 'none'
+							});
+						},
+						fail: () => {},
+						complete: () => {}
+					});
+				} else {
+					uni.showToast({
+						title: graceChecker.error,
+						icon: 'none'
+					});
+				}
+			},
+		}
+	}
+</script>
+
+<style>
+	.jz_beginCard .beginCard_btn button {
+		display: block;
+		width: 550upx;
+		height: 115upx;
+		line-height: 115upx;
+		font-size: 28upx;
+		color: #FFFFFF;
+		background: url(../../../static/btn.png) no-repeat;
+		background-size: 550upx 115upx;
+	}
+</style>

+ 105 - 0
pages/user/message/index.vue

@@ -0,0 +1,105 @@
+<template>
+	<view class="jz_message uni-flex uni-column">
+
+		<view class="messageItem uni-flex align-items space-between uni-navigate-right" @click="goMessageItem(0)">
+			<view class="ItemLf uni-flex">
+				<view class="itemimg uni-flex  justify-align-center">
+					<image src="../../../static/message/01.png"></image>
+				</view>
+				<view class="itemcontent uni-flex uni-column">
+					<view class="message01">通知消息</view>
+					<view class="message02">{{messages[0].message}}条未读消息</view>
+				</view>
+			</view>
+			<view class="itemRt uni-flex justify-align-center">
+				<uni-icon type="arrowright" size="20"></uni-icon>
+			</view>
+		</view>
+
+		<!-- <view class="messageItem uni-flex align-items space-between" @click="goMessageItem">
+			<view class="ItemLf uni-flex">
+				<view class="itemimg uni-flex  justify-align-center">
+					<image src="../../static/message/03.png"></image>
+				</view>
+				<view class="itemcontent uni-flex uni-column">
+					<view class="message01">我的私信</view>
+					<view class="message02">暂无私信消息</view>
+				</view>
+			</view>
+			<view class="itemRt uni-flex justify-align-center">
+				<image src="../../static/message/02.png"></image>
+			</view>
+		</view> -->
+
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+
+	import uniIcon from '../../../components/uni-icon.vue'
+	export default {
+		data() {
+			return {
+				user: {},
+				messages: [{
+					"message": 0
+				}]
+			}
+		},
+		components:{
+			uniIcon
+		},
+		computed: {
+			...mapState(['hasLogin', 'jyyUser'])
+		},
+		onLoad() {
+			if (!this.hasLogin) {
+				uni.navigateTo({
+					url: '../login/login',
+				});
+			} else {
+				this.user = JSON.parse(this.jyyUser);
+				this.getData();
+			}
+		},
+		onShow() {
+			if (!this.hasLogin) {
+				uni.navigateTo({
+					url: '../login/login',
+				});
+			} else {
+				this.user = JSON.parse(this.jyyUser);
+				this.getData();
+			}
+		},
+		methods: {
+			goMessageItem(e) {
+				uni.navigateTo({
+					url: 'messageList?module=' + e
+				})
+			},
+			getData() {
+				uni.request({
+					url: this.webUrl + 'GetNoReadMessageCount',
+					data: "userid=" + this.user.id,
+					method: 'POST',
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						this.messages = res.data.data;
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			}
+		}
+	}
+</script>
+
+<style>
+</style>

+ 126 - 0
pages/user/message/messageList.vue

@@ -0,0 +1,126 @@
+<template>
+	<view class="jz_messageItem uni-flex uni-column align-items">
+
+
+		<view class="uni-flex" v-for="(mess,key) in messages" :key="key" @click="goMessage(mess)">
+			
+			<view v-if="mess.mode==0" class="list_item uni-flex uni-column align-items">
+				<view class="item_time uni-flex justify-align-center">{{mess.createDate}}</view>
+				<view class="item_content uni-flex uni-column">
+					<view class="content_title uni-flex space-between align-items">
+						<view>{{mess.title}}</view>
+						<image class="activeimg" src="../../../static/message/noactive.png" v-if="mess.state==1"></image>
+						<image   class="activeimg" src="../../../static/message/active.png" v-if="mess.state==0" ></image>
+					</view>
+					<view class="conten_detail">{{mess.intro}}</view>
+				</view>
+			</view>
+
+			<view v-if="mess.mode==1" class="list_item uni-flex uni-column align-items">
+				<view class="item_time uni-flex justify-align-center">{{mess.createDate}}</view>
+				<view class="item_content uni-flex uni-column">
+					<view class="content_title uni-flex space-between align-items">
+						<view>{{mess.title}}</view>
+						<image class="activeimg" src="../../../static/message/noactive.png" v-if="mess.state==1"></image>
+						<image   class="activeimg" src="../../../static/message/active.png" v-if="mess.state==0" ></image>
+					</view>
+					<image :src="mess.pic"></image>
+					<view class="conten_detail">{{mess.intro}}</view>
+				</view>
+			</view>
+		</view>
+		<load-more :loadingType="loadingType" :contentText="contentText"></load-more>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+
+
+	import loadMore from '@/components/uni-load-more.vue';
+	var index;
+	export default {
+		data() {
+			return {
+				loadingType: 0,
+				contentText: {
+					contentdown: "上拉显示更多",
+					contentrefresh: "正在加载...",
+					contentnomore: "没有更多数据了"
+				},
+				user: {},
+				messages: [],
+				module: 0
+			}
+		},
+		computed: {
+			...mapState(['hasLogin', 'jyyUser'])
+		},
+		onLoad(e) {
+			index = 1;
+			this.module = e.module;
+			if (!this.hasLogin) {
+				uni.navigateTo({
+					url: '../login/login',
+				});
+			} else {
+				this.user = JSON.parse(this.jyyUser);
+				this.getData();
+			}
+		},
+		onReachBottom() {
+			this.getData();
+		},
+		components: {
+			loadMore
+		},
+		methods: {
+			goMessage(e) {
+				uni.navigateTo({
+					url: 'messageView?id=' + e.id+ '&userid=' + this.user.id
+				})
+			},
+			getData() {
+				if (this.loadingType !== 0) {
+					return;
+				}
+				this.loadingType = 1;
+				uni.request({
+					url: this.webUrl + 'GetMessageList',
+					method: 'POST',
+					data: {
+						pageIndex: index,
+						userid: this.user.id,
+						module: this.module
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						if (res.data.result.messages.length > 0) {
+							this.messages = this.messages.concat(res.data.result.messages);
+						} else {
+							this.loadingType = 2;
+							return;
+						}
+						if (index == parseInt(res.data.result.pages)) {
+							this.loadingType = 2;
+							return;
+						} else {
+							this.loadingType = 0;
+						}
+						index++;
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			}			
+		}
+	}
+</script>
+
+<style>
+</style>

+ 122 - 0
pages/user/message/messageView.vue

@@ -0,0 +1,122 @@
+<template>
+	<view class="uni-flex article uni-column">
+		<view class="uni-flex uni-h4  article-title">{{article.title}}</view>
+		<view class="uni-flex  color-555 article-time">
+			<view class="" style="font-size: 24upx;">{{article.createDate}}</view>
+		</view>
+		<view class="uni-flex pic" v-if="mode==1"><image :src="article.pic" mode="widthFix"></image></view>
+		<view class="uni-flex ">
+			<u-parse :content="htmlString" @preview="preview" @navigate="navigate" />
+		</view>
+	</view>
+</template>
+
+<script>
+	import marked from '../../../components/marked'
+	import uParse from '@/components/u-parse/u-parse.vue'
+	export default {
+		components: {
+			uParse
+		},
+		data() {
+			return {
+				id: 0,
+				article: {},
+				htmlString: "",
+				userid : 0,
+				mode: 0
+			};
+		},
+		onLoad(e) {
+			this.id = e.id;
+			this.userid = e.userid;
+			this.getData();
+		},
+		methods: {
+			preview(src, e) {
+				// do something
+				//console.log("src: " + src);
+			},
+			navigate(href, e) {
+				// 如允许点击超链接跳转,则应该打开一个新页面,并传入href,由新页面内嵌webview组件负责显示该链接内容
+				//console.log("href: " + href);
+				/* uni.showModal({
+					content: "点击链接为:" + href,
+					showCancel: false
+				}) */
+			},
+			getData() {
+				uni.showLoading({
+					title: '页面加载中',
+					mask: true
+				});
+				uni.request({
+					url: this.webUrl + 'GetMessageView',
+					method: 'POST',
+					data: {
+						userid: this.userid,
+						id: this.id
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						uni.hideLoading();
+							this.article = res.data.data;
+							this.mode =this.article.mode;
+							uni.setNavigationBarTitle({
+								title: this.article.title
+							});
+							this.htmlString = marked(this.article.reMark);
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			}
+		}
+	}
+</script>
+
+<style>
+	/* @import url("../../../components/gaoyia-parse/parse.css"); */
+	@import url("../../../components/gaoyia-parse/parse.css");
+	.article .article-title, .article-time,.pic{
+		padding: 0 50upx;
+	}
+	.article .pic {
+		margin-top: 45upx;
+		/* #ifdef H5 */
+		margin-bottom: 45upx;
+		/* #endif */
+		margin-bottom: ;
+	}
+	.article .article-title {
+		margin-top: 50upx;
+		margin-bottom: 10upx;
+	}
+
+	.article .article-time {
+		font-size: 22upx;
+		color: #919294;
+		justify-content: space-between;
+	}
+	
+	.article .article-time .article-btn {
+		width: 100upx;
+		height: 42upx;
+		text-align: center;
+		line-height: 42upx;
+		color: #fceaea;
+		background: #dd0000;
+	}
+	
+	.article .wxParse .p {
+		text-indent: 2em;
+	}
+	
+	.article .wxParse .img{
+		width: 730upx !important;
+		margin-left:  11.5upx;
+		margin-bottom: 3upx;
+	}
+</style>

+ 927 - 0
pages/user/myAgency/index.vue

@@ -0,0 +1,927 @@
+<template>
+	<view class="uni-flex lists jz_lists uni-column jz_myfit jz_agent cart jz_cart ">
+		<view class="tab-search uni-column" style="background-color: #F1F1F1;">
+			<view class="tabList">
+				<scroll-view class="uni-flex uni-swiper-tab" scroll-x :scroll-left="scrollLeft" id="tab-bars">
+					<view v-for="(tab, i) in categorys" :key="i" class="swiper-tab-list" :id="'tab' + tab.id" :data-current="index" @click="changeTab(i, tab)">
+						<view class="productTitle-item uni-flex uni-column">
+							<view :class="['picname', curIndex == i ? 'activeLine' : '']">{{ tab.title }}</view>
+						</view>
+					</view>
+				</scroll-view>
+			</view>
+
+			<view class="search uni-flex ">
+				<view class="uni-flex-item uni-flex search-input">
+					<input
+						placeholder="请选择地区"
+						@input="inputChange"
+						v-model="key"
+						:focus="isFocus"
+						@focus="focus"
+						@blur="blur"
+						class="uni-flex-item"
+						disabled="disabled"
+						@click="showMulLinkageThreePicker"
+					/>
+					<view class="icon icon-del uni-flex justify-align-center" style="height: 100%;" @click.stop="clear" v-if="isDelShow"><icon type="clear" size="12"></icon></view>
+				</view>
+
+				<view class="searchBtn uni-flex justify-align-center" @click="search">
+					<image src="../../../static/search02.png"></image>
+					<text>搜索</text>
+				</view>
+			</view>
+		</view>
+
+		<view class="agent-product uni-flex uni-column">
+			<view class="agentTop uni-flex space-between" id="list">
+				<view class="topItem uni-flex uni-column align-items " v-if="item.agency == 2" v-for="(item, key) in products" :key="key" @click.stop="selected(products, key)">
+					<view class="uni-flex  topItem-wrap">
+						<image
+							class="image topImg"
+							:class="{ lazy: !item.display }"
+							:id="'lazy' + key"
+							:data-index="0"
+							@load="imageOnLoad(item, key)"
+							:src="item.display ? item.pic : ''"
+						/>
+						<view class="loadbox" :class="{ loaded: item.loaded }"><view class="load"></view></view>
+					</view>
+					<view class=" uni-flex  uni-column">
+						<view class="uni-flex agencyTitle justify-align-center" v-if="!item.show">{{ item.title }}</view>
+						<view class=" agencyTitle titleSingle " v-if="item.show">{{ item.title }}</view>
+						<view class="uni-flex justify-align-center" style="color: #f00000;" v-if="user.agency == 1">¥{{ item.salePrice.toFixed(2) }}</view>
+					</view>
+					<view class="selectBtn uni-flex ">
+						<image src="../../../static/select.png" v-if="!item.select"></image>
+						<image src="../../../static/selectActive.png" v-if="item.select"></image>
+					</view>
+				</view>
+			</view>
+			<view class="agentBottom uni-flex space-between"></view>
+		</view>
+		<load-more :loadingType="loadingType" :contentText="contentText" class="loadMore"></load-more>
+		<backTop :src="backTop.src" :scrollTop="backTop.scrollTop"></backTop>
+		<mpvue-city-picker
+			:themeColor="themeColor"
+			ref="mpvueCityPicker"
+			:pickerValueDefault="cityPickerValueDefault"
+			@onCancel="onCancel"
+			@onConfirm="onConfirm"
+			@onReset="onReset"
+		></mpvue-city-picker>
+		<view class="uni-flex uni-row footer" v-if="products.length > 0&&isShow==true">
+			<view class="uni-flex uni-flex-item ">
+				<view class="uni-flex item-sel ">
+					<view :class="[yuan, { bg: allSelect }]" @click="AllSelect()"><text v-if="allSelect" class="gou"></text></view>
+				</view>
+				<view class="uni-flex uni-flex-item itemAll">全选</view>
+				<view class="uni-flex uni-flex-item3"></view>
+				<view class="uni-flex uni-flex-item3 justify-align-center">
+					<view class="uni-flex uni-flex-item btn" @click="js()" :class="{ activeBg: bgChange }">加入购物车({{ allNum }})</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex';
+import mpvueCityPicker from '@/components/mpvue-citypicker/mpvueCityPicker.vue';
+import util from '../../../common/util.js';
+import address from '../../../common/getAddessId.js';
+import amap from '../../../common/amap-wx.js';
+import loadMore from '@/components/uni-load-more.vue';
+import backTop from '@/components/uni-top.vue';
+import cart from '../../../common/cart.js';
+
+var index;
+export default {
+	computed: {
+		...mapState(['hasLogin', 'forcedLogin', 'jyyUser'])
+	},
+	components: {
+		loadMore,
+		backTop,
+		mpvueCityPicker
+	},
+	data() {
+		return {
+			isShow: false,
+			newProducts: [],
+			allNum: 0,
+			filterCount: 0,
+			allSelect: false,
+			bgChange: false,
+			cityPickerValueDefault: [0, 0, 1],
+			themeColor: '#007AFF',
+			pickerText: '',
+			amapPlugin: null,
+			amapKey: '408ca849e7fb38410487446db08ec898',
+			addressName: '',
+			backTop: {
+				src: '../../../static/top.png',
+				scrollTop: 0
+			},
+			loadingType: 0,
+			contentText: {
+				contentdown: '上拉显示更多',
+				contentrefresh: '正在加载...',
+				contentnomore: '没有更多数据了'
+			},
+			active: false,
+			isDelShow: false,
+			isFocus: false,
+			sortNavfixed: false,
+			show: false,
+			windowHeight: 0,
+			type: 0,
+			cates: [
+				{
+					css: '',
+					id: '0',
+					no: '000',
+					show: '0',
+					subs: [],
+					title: '全部品牌'
+				}
+			],
+			categorys: [
+				{
+					ico: '../../../static/merchant/all.png',
+					id: '000',
+					no: '000',
+					title: '全部品牌'
+				}
+			],
+			category: {},
+			products: [],
+			curIndex: 0,
+			key: '',
+			id: '000',
+			scrollLeft: 0,
+			scrollY: 0,
+			agentStatus: 1,
+			user: {},
+			addressId: '',
+			popupType: '',
+			popupContent: '',
+			popupShow: false
+		};
+	},
+	onPageScroll(e) {
+		this.backTop.scrollTop = e.scrollTop;
+		util.loads(this.products, 'list', this.windowHeight);
+		uni.createSelectorQuery()
+			.selectAll('#list')
+			.boundingClientRect(datas => {
+				this.sortNavfixed = parseInt(datas[0].top) < 78 ? true : false;
+			})
+			.exec();
+	},
+	onShow() {},
+	onLoad(e) {
+		this.user = JSON.parse(this.jyyUser);
+		index = 1;
+		this.windowHeight = uni.getSystemInfoSync().windowHeight;
+		this.getCategory();
+		if (e.n > 4) {
+			setTimeout(() => {
+				this.public(e.n, e);
+			}, 200);
+		}
+		// #ifdef MP-WEIXIN
+		this.amapPlugin = new amap.AMapWX({
+			key: this.amapKey
+		});
+		this.getRegeo();
+		// #endif
+		// #ifdef H5
+		uni.getLocation({
+			type: 'wgs84',
+			geocode: true,
+			success: res => {
+				let gitude = res.longitude + ',' + res.latitude;
+				let that = this;
+				uni.request({
+					url: 'https://restapi.amap.com/v3/geocode/regeo',
+					method: 'POST',
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					data: {
+						output: 'JSON',
+						location: gitude,
+						key: 'bf5fad85b6706db59ac208af908aa99e'
+					},
+					success: result => {
+						let addresss = result.data.regeocode.addressComponent;
+						console.log(address);
+						let province = addresss.province;
+						let city = addresss.city;
+						let district = addresss.district;
+						that.addressName = province + '-' + city + '-' + district;
+						that.addressId = address.getAddressid(province, city, district);
+						that.key = that.addressName;
+						that.getData();
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			}
+		});
+		// #endif
+	},
+	onPullDownRefresh() {
+		this.getData();
+		setTimeout(function() {
+			uni.stopPullDownRefresh();
+		}, 1000);
+	},
+	onReachBottom() {
+		this.getData();
+	},
+	watch: {},
+	methods: {
+		...mapMutations(['setAgency']),
+		//单选
+		selected(e, index) {
+			this.newProducts = [];
+			let select = e[index].select;
+			e[index].select = !select;
+			this.$set(this.products[index], 'select', e[index].select);
+
+			//判断商品是否全部选中,是的话,全选也选中
+			let json = this.products.length;
+			for (let j = 0; j < this.products.length; j++) {
+				if (this.products[j].agency == 2) {
+					this.newProducts.push(this.products[j]);
+				}
+			}
+			let all = true;
+			console.log(this.newProducts);
+			for (let i = 0; i < this.newProducts.length; i++) {
+				all *= this.newProducts[i].select;
+			}
+			if (all == true) {
+				this.allSelect = true;
+			} else {
+				this.allSelect = false;
+			}
+			this.allSl();
+		},
+		// 全选
+		AllSelect() {
+			let selected = this.allSelect;
+			this.allSelect = !selected;
+			let arr = this.products;
+			for (let i = 0; i < arr.length; i++) {
+				if (arr[i].agency == 2) {
+					//循环商品为选中
+					if (this.allSelect == true) {
+						this.products[i].select = true;
+					}
+					if (this.allSelect == false) {
+						this.products[i].select = false;
+					}
+				}
+			}
+			this.allSl(); //商品数量
+		},
+		//结算商品数量
+		allSl() {
+			let js = 0;
+			let arr = this.products;
+			for (let i = 0; i < arr.length; i++) {
+				js += this.products[i].select;
+			}
+			this.allNum = js;
+			if (this.allNum > 0) {
+				this.bgChange = true;
+			} else {
+				this.bgChange = false;
+			}
+		},
+		// 结算
+		js() {
+			let idStr = '';
+			for (let i = 0; i < this.products.length; i++) {
+				if (this.products[i].select) {
+					idStr += this.products[i].id + ',';
+				}
+			}
+			let str = idStr.slice(0, idStr.length - 1);
+			if (str == '') {
+				uni.showToast({
+					title: '请选择商品!',
+					icon: 'none'
+				});
+				return;
+			}
+			uni.showLoading({
+				title: '操作中'
+			});
+
+			uni.request({
+				url: this.webUrl + 'FlashCart',
+				method: 'POST',
+				header: {
+					'content-type': 'application/x-www-form-urlencoded'
+				},
+				data: {
+					userId: this.user.id,
+					id: str
+				},
+				success: res => {
+					uni.hideLoading();
+					if (res.data.result.length > 0) {
+						cart.addCart(res.data.result);
+						//cart.updateCart();
+						uni.switchTab({
+							url: '../cart/cart'
+						});
+					} else {
+						uni.showToast({
+							title: '操作失败',
+							icon: 'none'
+						});
+					}
+				},
+				fail: () => {},
+				complete: () => {}
+			});
+		},
+		onConfirm(e) {
+			this.pickerText = e.label;
+			this.key = this.pickerText;
+			this.addressId = e.id;
+		},
+		getRegeo() {
+			uni.showLoading({
+				title: '获取信息中'
+			});
+			this.amapPlugin.getRegeo({
+				success: data => {
+					let province = data[0].regeocodeData.addressComponent.province;
+					let city = data[0].regeocodeData.addressComponent.city;
+					let district = data[0].regeocodeData.addressComponent.district;
+					this.addressName = province + '-' + city + '-' + district;
+					this.addressId = address.getAddressid(province, city, district);
+					this.key = this.addressName;
+					this.getData();
+					uni.hideLoading();
+				}
+			});
+		},
+		showMulLinkageThreePicker() {
+			this.$refs.mpvueCityPicker.show();
+		},
+		focus() {
+			this.active = true;
+			//HM修改 增加获取焦点判断
+			if (this.key != '') {
+				this.isDelShow = true;
+			}
+		},
+		inputChange(event) {
+			var keyword = event.detail.value;
+			this.$emit('input', keyword);
+			if (this.key) {
+				this.isDelShow = true;
+			}
+		},
+		blur() {
+			this.isFocus = false;
+			if (!this.key) {
+				this.active = false;
+			}
+		},
+		clear() {
+			//HM修改 收起键盘
+			uni.hideKeyboard();
+			this.isFocus = false;
+			this.key = '';
+			this.active = false;
+			//HM修改 清空内容时候触发组件input
+			this.isDelShow = false;
+		},
+		search() {
+			index = 1;
+			this.loadingType = 0;
+			this.allNum = 0;
+			this.allSelect = false;
+			this.bgChange = false;
+			this.products = [];
+			this.getData();
+		},
+		onCancel(e) {
+			//console.log(e)
+		},
+		onReset() {
+			this.pickerText = '';
+			this.key = '';
+		},
+
+		getData() {
+			if (this.loadingType !== 0) {
+				return;
+			}
+			uni.request({
+				url: this.webUrl + 'List',
+				method: 'POST',
+				header: {
+					'content-type': 'application/x-www-form-urlencoded'
+				},
+				data: {
+					pageNum: index,
+					brand: this.id,
+					area: this.key,
+					userid: this.user.id,
+					pageSize: 100,
+					agentStatus: 1,
+					agency: this.user.agency
+				},
+				success: res => {
+					if (res.data.result.ratioProducts.length > 0) {
+						this.products = this.products.concat(res.data.result.ratioProducts);
+						for (let i = 0; i < this.products.length; i++) {
+							if (this.products[i].agency == 2) {
+								this.isShow = true;
+								break
+							}else{
+								this.isShow = false;
+							}
+						}
+						setTimeout(() => {
+							util.loads(this.products, 'list', this.windowHeight);
+						}, 500);
+					} else {
+						this.loadingType = 2;
+						return;
+					}
+					if (index == parseInt(res.data.result.pages)) {
+						this.loadingType = 2;
+						return;
+					} else {
+						this.loadingType = 0;
+					}
+					index++;
+				},
+				fail: () => {},
+				complete: () => {}
+			});
+		},
+		getElSize(id) {
+			//得到元素的size
+			return new Promise((res, rej) => {
+				uni.createSelectorQuery()
+					.select('#' + id)
+					.fields(
+						{
+							size: true,
+							scrollOffset: true
+						},
+						data => {
+							res(data);
+						}
+					)
+					.exec();
+			});
+		},
+		async public(i, e) {
+			this.id = e.id;
+			let index = i;
+			let tabBars = await this.getElSize('tab-bars'),
+				tabBarScrollLeft = tabBars.scrollLeft; //点击的时候记录并设置scrollLeft
+			let width = 0;
+			for (let j = 0; j < index; j++) {
+				let result = await this.getElSize('tab' + this.categorys[j].id);
+				width += result.width;
+			}
+			let winWidth = uni.getSystemInfoSync().windowWidth,
+				nowElement = await this.getElSize('tab' + this.categorys[index].id),
+				nowWidth = nowElement.width;
+			if (width + nowWidth - tabBarScrollLeft > winWidth - nowWidth) {
+				this.scrollLeft = width + nowWidth * 3 - winWidth;
+			}
+
+			if (width < tabBarScrollLeft) {
+				this.scrollLeft = width;
+			}
+		},
+		changeTab(i, e) {
+			if (this.curIndex === i) {
+				return false;
+			} else {
+				this.public(i, e);
+				this.isClickChange = true;
+				this.curIndex = i;
+				index = 1;
+				this.loadingType = 0;
+				this.products = [];
+				this.allNum = 0;
+				this.allSelect = false;
+				this.bgChange = false;
+				this.getData();
+				setTimeout(() => {
+					util.loads(this.products, 'list', this.windowHeight);
+				}, 500);
+			}
+		},
+		imageOnLoad(e) {
+			e.loaded = true;
+		},
+		getCategory() {
+			uni.request({
+				url: this.webUrl + 'Brands',
+				method: 'POST',
+				header: {
+					'content-type': 'application/x-www-form-urlencoded'
+				},
+				success: res => {
+					this.cates = this.cates.concat(res.data.result.brands);
+					this.categorys = this.categorys.concat(res.data.result.brands);
+				},
+				fail: () => {},
+				complete: () => {}
+			});
+		}
+	}
+};
+</script>
+
+<style>
+/*----- 改动的 */
+/* #ifdef H5 */
+.jz_cart .footer{
+	bottom: 0!important;
+}
+/* #endif */
+.activeBg {
+	background: #dd0101 !important;
+}
+
+.jz_cart.jz_agent .btn {
+	border-radius: 6rpx;
+	background: #cdcdcd;
+	letter-spacing: 4rpx;
+}
+
+.jz_agent .center {
+	width: 100%;
+}
+
+.jz_agent .selectContent {
+	padding: 0 20upx;
+}
+
+.jz_agent .selectBtn {
+	position: absolute;
+	right: 0upx;
+	bottom: 0upx;
+}
+
+.jz_agent .selectBtn image {
+	width: 40upx;
+	height: 40upx;
+}
+
+.jz_agent .agencyStatus {
+	position: absolute;
+	top: 50%;
+	left: 50%;
+	margin-left: -50upx;
+	margin-top: -50upx;
+	width: 100upx;
+	height: 100upx;
+	background: rgba(0, 0, 0, 0.4);
+	z-index: 888;
+	border-radius: 50%;
+	color: #ffffff;
+}
+
+.jz_agent .loadMore {
+	margin-bottom: 100upx;
+}
+
+.jz_agent .agent-product .agentTop .topItem {
+	position: relative;
+	padding-bottom: 40upx;
+	border-radius: 8upx;
+	box-shadow: 0 0 10rpx 0 #b2b2b2;
+	margin-bottom: 30upx;
+}
+
+.jz_agent .beginCard_btn {
+	position: fixed;
+	left: 0;
+	bottom: 20upx;
+	width: 100%;
+	z-index: 999;
+}
+
+.jz_agent .beginCard_btn button {
+	display: block;
+	width: 550upx;
+	height: 115upx;
+	line-height: 115rpx;
+	font-size: 28rpx;
+	background: url(../../../static/btn.png) no-repeat;
+	background-size: 550upx 115upx;
+	color: #ffffff;
+}
+
+.jz_agent .checkStyle {
+	position: absolute;
+	top: 0upx;
+	left: -16upx;
+	width: 0;
+	height: 0;
+	z-index: 100;
+	border-top: 50upx solid #11c200;
+	border-right: 50upx solid transparent;
+}
+
+.jz_agent .checkStyleActick {
+	position: absolute;
+	top: 0upx;
+	left: -16upx;
+	width: 0;
+	height: 0;
+	z-index: 100;
+	border-top: 50upx solid #ff0000;
+	border-right: 50upx solid transparent;
+}
+
+.jz_agent .topItem {
+	position: relative;
+	z-index: 666;
+	overflow: hidden;
+}
+
+.jz_agent .swiper-tab-list {
+	width: 170upx !important;
+}
+
+.jz_lists scroll-view.uni-swiper-tab {
+	padding-top: 0upx !important;
+}
+
+.jz_myfit.jz_lists scroll-view.uni-swiper-tab {
+	padding-top: 0upx !important;
+	margin-bottom: 0upx !important;
+	padding-bottom: 0upx;
+}
+
+.jz_agent .agencyBtn {
+	color: #09bb07;
+	background: #11c200 !important;
+	padding: 0 10upx;
+}
+
+.jz_agent .agent-product {
+	margin-top: 235upx !important;
+}
+
+/* ------改动的 */
+
+.jz_agent .agencyTitle.titleSingle {
+	margin: 0 auto;
+	width: 210upx;
+	font-size: 26upx;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	text-align: center;
+}
+
+.jz_agent .topItem-wrap {
+	width: 224upx;
+	height: 224upx;
+	position: relative;
+}
+
+.jz_agent .agencyTitle {
+	width: 224upx;
+	overflow: hidden;
+	white-space: nowrap;
+}
+
+.jz_agent .search-input .icon-del.icon {
+	width: 50upx;
+	top: 0;
+}
+
+.jz_myfit .loadbox {
+	border-top-left-radius: 20upx;
+	border-top-right-radius: 20upx;
+}
+
+.tab-search {
+	position: fixed;
+	width: 100%;
+	z-index: 8888;
+}
+
+.jz_myfit.jz_lists scroll-view.uni-swiper-tab {
+	margin-bottom: 0;
+}
+
+.jz_agent .agent-product {
+	margin-top: 320upx;
+}
+
+.fixed {
+	width: 100%;
+	position: fixed;
+	left: 0;
+	top: 0;
+	/* #ifdef H5 */
+	/* top: 84upx; */
+	top: 44px;
+	/* #endif */
+	background: #ffffff;
+	margin: 0 !import;
+	z-index: 999;
+	box-sizing: border-box;
+	border-bottom: 2upx solid #eeeeee;
+	transform: translateZ(0);
+	-webkit-transform: translateZ(0);
+}
+
+.activeLine {
+	border-bottom: 2upx solid #ff273c;
+}
+
+.jz_lists {
+	position: relative;
+}
+
+.jz_lists scroll-view.uni-swiper-tab {
+	border-bottom: 0;
+	height: auto;
+	line-height: auto;
+	padding-top: 20upx;
+}
+
+.jz_lists .productTitle-item {
+	justify-content: center;
+	align-items: center;
+}
+
+.jz_lists .productTitle-item .picname {
+	line-height: 60upx;
+}
+
+.jz_lists .productTitle-item image {
+	width: 50upx;
+	height: 50upx;
+}
+
+.lists .sortNav .Nav:first-child {
+	/* border-left: none; */
+}
+
+.list .tab-bar-wrap {
+	width: 200upx;
+}
+
+::-webkit-scrollbar {
+	display: none;
+}
+
+.lists .nav-left {
+	width: 218upx;
+	border-right: solid 1upx #e0e0e0;
+	padding-top: 20upx;
+	box-sizing: border-box;
+}
+
+.lists .nav-left .nav-left-title {
+	height: 80upx;
+	font-weight: 600;
+	margin: 0 auto;
+	margin-left: 10upx;
+}
+
+.lists .nav-left-item {
+	height: 110upx;
+	font-size: 30upx;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+}
+
+.lists .nav-left-item image {
+	width: 40upx;
+	height: 40upx;
+	margin-right: 18upx;
+}
+
+.lists .nav-right {
+	width: 100%;
+	box-sizing: border-box;
+}
+
+.uni-tab-bar-loading {
+	width: 100%;
+}
+
+.uni-tab-bar-loading .loading-text {
+	margin-top: 50upx;
+	font-size: 28upx;
+	text-align: center;
+}
+
+.lists .list {
+	width: 100%;
+	height: 92%;
+}
+
+#tab-bar {
+	background-color: #ffffff;
+	padding-bottom: 60upx;
+	overflow: hidden;
+}
+
+.uni-tab-bar .active {
+	color: #ffe200;
+	/* border-left: 10upx solid #ffe200; */
+}
+
+.prices .prices-cart image {
+	width: 52upx;
+	height: 50upx;
+	margin-right: 10upx;
+}
+
+.prices .prices-salePrice {
+	font-size: 22upx;
+	color: #f00000;
+}
+
+.image {
+	position: absolute;
+	width: 100%;
+	height: 100%;
+}
+
+.placeholder {
+	background: #e2e2e2 url(../../../static/load.gif) center center no-repeat;
+	opacity: 1;
+	transition: opacity 0.4s linear;
+}
+
+.placeholder.loaded {
+	opacity: 0;
+}
+
+.list-collapse {
+	padding-left: 36upx;
+	box-sizing: border-box;
+}
+
+.lists .sortNav .navActive {
+	color: #d80000;
+}
+
+.uni-filter {
+	margin-top: 8upx;
+	background-color: #ffffff;
+	padding: 16upx 24upx;
+	font-size: 28upx;
+	justify-content: space-between;
+	position: relative;
+}
+
+.uni-filter .uni-filter-item {
+	background-color: #f1f1f1;
+	padding: 8upx 0;
+	border-radius: 4upx;
+	width: 24%;
+	height: 32upx;
+	justify-content: center;
+	align-items: center;
+	position: relative;
+}
+
+.uni-filter .uni-filter-sel {
+	background-color: #c50200;
+	color: #ffffff;
+}
+
+/* .uni-filter .uni-filter-line {
+	position: absolute;
+	height: 4upx;
+	background: #f1f1f1;
+	top: 50%;
+	left: 0;
+	margin-top: -2upx;
+	width: 100%;
+} */
+
+.jz_agent .search {
+	margin-top: 8upx;
+}
+</style>

+ 227 - 0
pages/user/myPoint/bankList.vue

@@ -0,0 +1,227 @@
+<template>
+	<view class="uni-flex uni-column address jz_address">
+
+		<view class="uni-flex addresslist uni-column" v-if="bankList.length>0">
+			<view class="addressitem uni-flex space-between align-items" v-for="(item,key) in bankList" :key="key">
+				<view class="itemleft uni-flex uni-column" style="width: 120upx; word-wrap:break-word;" @click="goOrder(item)">
+					<view class="lefNick" v-if="item.defaultVal">{{item.realName}}</view>
+					<view class="lefNick uni-flex align-items" v-if="!item.defaultVal">{{item.realName}}</view>
+					<view v-if="item.defaultVal" class="leftBtn">默认</view>
+				</view>
+				<view class="itemcenter uni-flex uni-column" @click="goOrder(item)">
+					<view class="centerPhone">{{item.bankNo}}</view>
+					<view class="centerAddress">{{item.bankName}}</view>
+				</view>
+				<view class="itemright uni-flex  justify-align-center">
+					<view class="uni-flex uni-column">
+						<text @click="goService(item)" class="uni-h5">编辑</text>
+						<text @click="del(item,key)" class="uni-h5">删除</text>
+					</view>
+					<view class="itemRt uni-flex justify-align-center" style="margin-left: 10upx;" v-if="url=='../order/order'" @click="goOrder(item)">
+						<uni-icon type="arrowright" size="20" color="#999999"></uni-icon>
+					</view>
+				</view>
+			</view>
+
+			<load-more :loadingType="loadingType" :contentText="contentText"></load-more>
+			<view @click="newService()" class="addBtn-wrap uni-flex justify-align-center" v-if="bankList.length>0">
+				<view class="addBtn uni-flex justify-align-center">新建银行信息</view>
+			</view>
+		</view>
+		<view class="uni-lists uni-flex justify-align-center uni-column" v-if="bankList.length==0">
+			<view class="addressImg uni-flex justify-align-center">
+				<image src="../../../static/address/08.png"></image>
+			</view>
+			<view class="noaddressTitle">1个银行信息也没有,</view>
+			<view class="noaddressTitle">快去添加吧</view>
+			<view @click="add()" class="addBtn-wrap uni-flex justify-align-center" v-if="bankList.length==0">
+				<view class="addBtn uni-flex justify-align-center">新建银行信息</view>
+			</view>
+		</view>
+
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+
+	import loadMore from '@/components/uni-load-more.vue';
+	import uniIcon from '../../../components/uni-icon/uni-icon.vue';
+	var index;
+	export default {
+		computed: {
+			...mapState(['hasLogin', 'forcedLogin', 'jyyUser'])
+		},
+		data() {
+			return {
+				user: {},
+				url: "",
+				integral: '',
+				bankList: [],
+				loadingType: 0,
+				contentText: {
+					contentdown: "上拉显示更多",
+					contentrefresh: "正在加载...",
+					contentnomore: "没有更多数据了"
+				}
+			};
+		},
+		onPullDownRefresh() {
+			this.init();
+			setTimeout(function() {
+				uni.stopPullDownRefresh();
+			}, 1000);
+		},
+		onShow() {
+			this.init();
+		},
+		onLoad(e) {
+			this.url = e.url;
+			this.integral = e.integral;
+			this.init();
+		},
+		methods: {
+			init() {
+				index = 1;
+				if (!this.hasLogin) {
+					uni.navigateTo({
+						url: '../login/login',
+					});
+				} else {
+					this.user = JSON.parse(this.jyyUser);
+					this.getData();
+				}
+			},
+			goOrder: function(e) {
+				if (this.url == undefined || this.url == "undefined") {
+					return false;
+				} else {
+					uni.redirectTo({
+						url: "cashOut?addressId=" + e.id + '&integral=' + this.integral
+					})
+				}
+			},
+			add() {
+				uni.redirectTo({
+					url: "bindBank?url=cashOut" + '&integral=' + this.integral
+				})
+			},
+			del(e, key) {
+				uni.showModal({
+					content: '确认删除?',
+					success: (res) => {
+						if (res.confirm) {
+							uni.showLoading({
+								title: "操作中"
+							})
+							uni.request({
+								url: this.webUrl + 'DelBank',
+								method: 'POST',
+								data: {
+									id: e.id,
+									userid: this.user.id
+								},
+								header: {
+									'content-type': 'application/x-www-form-urlencoded'
+								},
+								success: res => {
+									uni.hideLoading();
+									uni.showToast({
+										title: res.data.result.resultInfo,
+										icon: "none"
+									});
+									e.isDeleted = true;
+									this.bankList.splice(key, 1)
+								},
+								fail: () => {},
+								complete: () => {}
+							});
+						}
+					}
+				})
+			},
+			getData() {
+				if (this.loadingType !== 0) {
+					return;
+				}
+				this.loadingType = 1;
+				let user = JSON.parse(this.jyyUser);
+				uni.request({
+					url: this.webUrl + 'BankList',
+					method: 'POST',
+					data: {
+						pageIndex: index,
+						userid: user.id
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						if (res.data.result.bankList.length > 0) {
+							this.bankList = this.bankList.concat(res.data.result.bankList);
+						} else {
+							this.loadingType = 2;
+							return;
+						}
+						if (index == parseInt(res.data.result.pages)) {
+							this.loadingType = 2;
+							return;
+						} else {
+							this.loadingType = 0;
+						}
+						index++;
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			},
+			newService() {
+				uni.navigateTo({
+					// url: "bindBank?id=0",
+					url: "bindBank?integral=" + this.integral
+				})
+			},
+			goService: function(e) {
+				if (this.url == undefined) {
+					uni.navigateTo({
+						url: "bindBank?id=" + e.id + '&integral=' + this.integral
+					})
+				} else {
+					uni.redirectTo({
+						url: "bindBank?id=" + e.id + "&url=" + this.url + '&integral=' + this.integral
+					})
+				}
+
+			}
+		},
+		onReachBottom() {
+			this.getData();
+		},
+		components: {
+			loadMore,
+			uniIcon
+		}
+	}
+</script>
+<style>
+	page {
+		background: #FFFFFF;
+	}
+
+	.jz_address .addBtn {
+		background: url(../../../static/btn.png) no-repeat;
+		width: 550upx;
+		height: 115upx;
+		color: #FFFFFF;
+		font-size: 28upx;
+		margin: 0 auto;
+		background-size: 550upx 115upx;
+	}
+
+	.jz_address .addressitem .itemright {
+		margin: 0;
+	}
+</style>

+ 248 - 0
pages/user/myPoint/bindBank.vue

@@ -0,0 +1,248 @@
+<template>
+	<view class="uni-flex jz_addressServer jz_bindBank">
+		<view class="uni-flex uni-flex-item  uni-common-mt uni-column">
+			<form class="uni-flex uni-flex-item uni-column form" @submit="formSubmit" @reset="formReset">
+				<view class="uni-flex  uni-row align-items">
+					<view class="uni-flex uni-flex-item">银行名称</view>
+					<view class="uni-flex uni-flex-item4 uni-form-item">
+						<input v-model="bankObj.bankName" class="uni-input" disabled name="bankName" placeholder="请选择银行" @click="showSinglePicker" />
+					</view>
+				</view>
+				<view class="uni-flex  uni-row align-items">
+					<view class="uni-flex uni-flex-item">开户地址</view>
+					<view class="uni-flex uni-flex-item4 uni-form-item">
+						<input v-model="bankObj.bankAddress" class="uni-input" name="bankAddress" placeholder="请输入地址" />
+					</view>
+				</view>
+				<view class="uni-flex uni-row align-items">
+					<view class="uni-flex uni-flex-item">开户姓名</view>
+					<view class="uni-flex uni-flex-item4 justify-align-center uni-form-item">
+						<input class="uni-input uni-flex-item" v-model="bankObj.realName" name="realName" placeholder="请输入收款人姓名" />
+						<view class="uni-flex justify-align-center">
+							<image src="../../../static/address/05.png" class="addPeopleImg"></image>
+						</view>
+					</view>
+				</view>
+				<view class="uni-flex  uni-row align-items">
+					<view class="uni-flex uni-flex-item">银行卡号</view>
+					<view class="uni-flex uni-flex-item4 uni-form-item"><input class="uni-input" v-model="bankObj.bankNo" name="bankNo"
+						 placeholder="请输入银行卡号" /></view>
+				</view>
+				<view class="spaceone"></view>
+				<view class="space"></view>
+				<view class="uni-flex  uni-row align-items">
+					<view class="uni-flex uni-flex-item4">设为默认</view>
+					<view class="uni-flex uni-flex-item">
+						<switch :checked="bankObj.defaultVal" @change="switch1Change" color="#e40001" />
+					</view>
+				</view>
+				<view class="uni-flex justify-align-center add"><button class="btn" formType="submit">⊕ 保存银行信息</button></view>
+			</form>
+
+		</view>
+		<mpvue-picker :themeColor="themeColor" ref="mpvuePicker" :mode="mode" :deepLength="deepLength" :pickerValueDefault="pickerValueDefault"
+		 @onConfirm="onConfirm" @onCancel="onCancel" :pickerValueArray="pickerValueArray"></mpvue-picker>
+	</view>
+</template>
+
+<script>
+	var graceChecker = require('../../../common/graceChecker.js');
+
+	import mpvuePicker from '../../../components/mpvue-picker/mpvuePicker.vue';
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+
+	export default {
+		data() {
+			return {
+				themeColor: '#007AFF',
+				integral: '',
+				pickerText: '',
+				mode: '',
+				address: {},
+				user: {},
+				url: '',
+				id: '',
+				pickerValueArray: [],
+				pickerSingleArray: [],
+				deepLength: 1,
+				pickerValueDefault: [0],
+				bankPickerText: '',
+				banks: [],
+				bankObj: {
+					bankName: '',
+					bankAddress: '',
+					realName: '',
+					bankNo: '',
+					defaultVal: false
+				}
+			};
+		},
+		components: {
+			mpvuePicker
+		},
+		computed: {
+			...mapState(['hasLogin', 'forcedLogin', 'jyyUser'])
+		},
+		methods: {
+			// 单列
+			showSinglePicker() {
+				let singleArray = []
+				for (var i = 0; i < this.banks.length; i++) {
+					singleArray.push({
+						label: this.banks[i].remark,
+						value: this.banks[i].value
+					})
+				}
+				this.pickerValueArray = singleArray;
+				this.mode = 'selector';
+				this.deepLength = 1;
+				this.$refs.mpvuePicker.show();
+			},
+			onConfirm(e) {
+				this.bankObj.bankName = e.label;
+			},
+			switch1Change: function(e) {
+				this.bankObj.defaultVal = e.target.value;
+			},
+			onCancel(e) {
+				//console.log(e)
+			},
+			formSubmit: function(e) {
+				var rule = [{
+						name: 'bankName',
+						checkType: 'notnull',
+						checkRule: '',
+						errorMsg: '请选择银行'
+					},
+					{
+						name: 'bankAddress',
+						checkType: 'notnull',
+						checkRule: '',
+						errorMsg: '请选择地区'
+					},
+					{
+						name: 'realName',
+						checkType: 'string',
+						checkRule: '2,15',
+						errorMsg: '请输入开户姓名'
+					},
+					{
+						name: 'bankNo',
+						checkType: 'notnull',
+						checkRule: '',
+						errorMsg: '请输入银行卡号'
+					}
+				];
+				//进行表单检查
+				var formData = e.detail.value;
+				var checkRes = graceChecker.check(formData, rule);
+				if (checkRes) {
+					uni.request({
+						url: this.webUrl + 'SaveBank',
+						method: 'POST',
+						data: {
+							bank: JSON.stringify(this.bankObj),
+							id: this.address.id,
+							userid: this.user.id
+						},
+						header: {
+							'content-type': 'application/x-www-form-urlencoded'
+						},
+						success: res => {
+							uni.hideLoading();
+							uni.showToast({
+								title: res.data.result.resultInfo,
+								icon: 'none'
+							});
+							if (res.data.result.isSuccess) {
+								if (this.url == undefined) {
+									this.url = 'bindBank'
+								}
+								uni.redirectTo({
+									url: 'bankList?url=' + this.url + '&integral=' + this.integral
+								});
+							}
+						},
+						fail: () => {},
+						complete: () => {}
+					});
+				} else {
+					uni.showToast({
+						title: graceChecker.error,
+						icon: 'none'
+					});
+				}
+			},
+			getBanks() {
+				uni.request({
+					url: this.webUrl + 'Banks',
+					method: 'POST',
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						this.banks = res.data.banks;
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			},
+			getData() {
+				uni.request({
+					url: this.webUrl + 'GetBank',
+					method: 'POST',
+					data: {
+						userid: this.user.id,
+						id: this.address.id
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						if (res.data.bank != null) {
+							this.bankObj = res.data.bank;
+						}
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			},
+			formReset: function(e) {
+				console.log('清空数据');
+				this.chosen = '';
+			}
+		},
+		onLoad(e) {
+			if (!this.hasLogin) {
+				uni.navigateTo({
+					url: '../login/login'
+				});
+			} else {
+				this.getBanks();
+				this.url = e.url;
+				this.user = JSON.parse(this.jyyUser);
+				this.integral = e.integral;
+				if (e.id == undefined) {
+					this.address.id = 0;
+					uni.setNavigationBarTitle({
+						title: '添加银行信息'
+					});
+				} else {
+					this.address.id = e.id;
+					uni.setNavigationBarTitle({
+						title: '修改银行信息'
+					});
+					this.getData();
+				}
+			}
+		},
+		onBackPress() {},
+		onUnload() {}
+	};
+</script>
+
+<style>
+</style>

+ 249 - 0
pages/user/myPoint/cashOut.vue

@@ -0,0 +1,249 @@
+<template>
+	<view class="jz_myPoint uni-flex uni-column jz_addressServer jz_cashout">
+		<view class="myPint_header uni-flex uni-column">
+			<view class="t">账户积分</view>
+			<view class="p">{{integral}}</view>
+		</view>
+
+		<view class="uni-list uni-flex uni-column">
+			<view class="uni-list-cell " hover-class="uni-list-cell-hover" v-if="!showBank" @click="goBankList">
+				<view class="uni-list-cell-navigate uni-navigate-right">
+					<view class=" showBank">
+						{{bank.realName}} {{bank.bankName}} {{bank.bankNo}}
+					</view>
+				</view>
+			</view>
+			<view class="uni-list-cell " hover-class="uni-list-cell-hover" v-if="showBank" @click="goBindBank">
+				<view class="uni-list-cell-navigate uni-navigate-right">
+					<view class="uni-flex align-items">
+						<text style="margin-left: -8upx;">绑定银行</text>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="myPint_pace"></view>
+		<view class="uni-flex uni-flex-item  uni-common-mt uni-column">
+			<form class="uni-flex uni-flex-item uni-column form" @submit="formSubmit" @reset="formReset">
+				<view class="uni-flex  uni-row align-items">
+					<view class="uni-flex uni-flex-item">到账方式</view>
+					<view class="uni-flex uni-flex-item4 uni-form-item">
+						<input :value="pickerText" class="uni-input" disabled name="time" placeholder="选择到账方式" @click="showSinglePicker" />
+					</view>
+				</view>
+				<view class="uni-flex uni-row align-items">
+					<view class="uni-flex uni-flex-item">提现金额</view>
+					<view class="uni-flex uni-flex-item4 justify-align-center uni-form-item">
+						<input class="uni-input uni-flex-item" v-model="amount" name="amount" placeholder="请输入提现金额" />
+					</view>
+				</view>
+				<view class="uni-flex  uni-row align-items">
+					<view class="uni-flex uni-flex-item">支付密码</view>
+					<view class="uni-flex uni-flex-item4 uni-form-item"><input class="uni-input" password v-model="password" name="password"
+						 placeholder="请输入支付密码" /></view>
+				</view>
+				<view class="uni-flex justify-align-center add" style="background: #FFFFFF;"><button class="btn" formType="submit">确认提现</button></view>
+			</form>
+
+		</view>
+		<mpvue-picker :themeColor="themeColor" ref="mpvuePicker" :mode="mode" :deepLength="deepLength" :pickerValueDefault="pickerValueDefault"
+		 @onConfirm="onConfirm" @onCancel="onCancel" :pickerValueArray="pickerValueArray"></mpvue-picker>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+
+	var graceChecker = require('../../../common/graceChecker.js');
+	import mpvuePicker from '../../../components/mpvue-picker/mpvuePicker.vue';
+	export default {
+		computed: {
+			...mapState(['hasLogin', 'forcedLogin', 'jyyUser'])
+		},
+		data() {
+			return {
+				showBank: false,
+				pickerValueArray: [],
+				themeColor: '#007AFF',
+				pickerSingleArray: [],
+				mode: '',
+				deepLength: 1,
+				pickerValueDefault: [0],
+				pickerText: '',
+				backMoneys: [{
+						title: "2小时以内到账(2元手续费)",
+						id: 0
+					},
+					{
+						title: "24小时以内到账(1元手续费)",
+						id: 1
+					}
+				],
+				integral: '',
+				user: {},
+				bank: {},
+				withDraw: {
+					amount: '',
+					bank: ''
+				},
+				bankstr: '',
+				id: 0
+			}
+		},
+		components: {
+			mpvuePicker
+		},
+		onLoad(e) {
+			this.integral = e.integral;
+			this.user = JSON.parse(this.jyyUser);
+			if (e.addressId) {
+				this.id = e.addressId;
+			}
+			this.getData();
+		},
+		methods: {
+			formSubmit: function(e) {
+				var rule = [{
+						name: 'time',
+						checkType: 'notnull',
+						checkRule: '',
+						errorMsg: '请选择到账方式'
+					},
+					{
+						name: 'amount',
+						checkType: 'notnull',
+						checkRule: '',
+						errorMsg: '请输入提现金额'
+					},
+					{
+						name: 'password',
+						checkType: 'notnull',
+						checkRule: '',
+						errorMsg: '请输入支付密码'
+					}
+				];
+				//进行表单检查
+				var formData = e.detail.value;
+				var checkRes = graceChecker.check(formData, rule);
+				this.bankstr = this.bank.realName + ',' + this.bank.bankName + ',' + this.bank.bankAddress + ',' + this.bank.bankNo
+				this.withDraw.bank = this.bankstr;
+				this.withDraw.amount = this.amount;
+				this.amount = parseFloat(this.amount);
+				this.integral = parseFloat(this.integral);
+				if (checkRes) {
+					if (this.amount > 0) {
+						if (this.amount <= this.integral) {
+							uni.request({
+								url: this.webUrl + 'SaveWithDraw',
+								method: 'POST',
+								data: {
+									withDraw: JSON.stringify(this.withDraw),
+									userid: this.user.id
+								},
+								header: {
+									'content-type': 'application/x-www-form-urlencoded'
+								},
+								success: res => {
+									uni.hideLoading();
+
+									if (res.data.result.isSuccess) {
+										uni.showToast({
+											title: res.data.result.resultInfo,
+											icon: 'none'
+										});
+										// uni.redirectTo({
+										// 	url: 'bankList?url=' + this.url
+										// });
+									} else {
+										uni.showToast({
+											title: res.data.result.resultInfo,
+											icon: 'none'
+										});
+									}
+								},
+								fail: () => {},
+								complete: () => {}
+							});
+						} else {
+							uni.showToast({
+								icon: "none",
+								title: "积分不足"
+							})
+						}
+
+					} else {
+						uni.showToast({
+							icon: "none",
+							title: "提现金额必须大于0"
+						})
+					}
+				} else {
+					uni.showToast({
+						title: graceChecker.error,
+						icon: 'none'
+					});
+				}
+
+
+
+			},
+			getData() {
+				uni.request({
+					url: this.webUrl + 'WithDraw',
+					data: {
+						userid: this.user.id,
+						id: this.id
+					},
+					method: 'POST',
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						if (res.data.bank == null) {
+							this.showBank = true;
+						} else {
+							this.bank = res.data.bank;
+						}
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			},
+			goBankList() {
+				uni.redirectTo({
+					url: "bankList?url=cashOut&integral=" + this.integral
+				})
+			},
+			goBindBank() {
+				uni.redirectTo({
+					url: "bindBank?url=cashOut&integral=" + this.integral
+				})
+			},
+			onCancel(e) {
+				console.log(e)
+			},
+			onConfirm(e) {
+				this.pickerText = e.label;
+			},
+			// 单列
+			showSinglePicker() {
+				let singleArray = []
+				for (var i = 0; i < this.backMoneys.length; i++) {
+					singleArray.push({
+						label: this.backMoneys[i].title,
+						value: this.backMoneys[i].id
+					})
+				}
+				this.pickerValueArray = singleArray;
+				this.mode = 'selector';
+				this.deepLength = 1;
+				this.$refs.mpvuePicker.show();
+			},
+		}
+	}
+</script>
+
+<style>
+</style>

+ 217 - 0
pages/user/myPoint/income.vue

@@ -0,0 +1,217 @@
+<template>
+	<view class="jz_income uni-flex uni-column">
+		<view class="item_top uni-flex justify-align-center">
+			<view class="dataBtn uni-flex justify-align-center" @click="onShowDatePicker('rangetime')">
+				<view class="date"> {{range[0]}} - {{range[1]}}</view>
+				<image src="../../../static/income/03.png"></image>
+			</view>
+		</view>
+		<view class="income_item uni-flex uni-column">
+
+			<view class="income_space"></view>
+			<view class="content_list uni-flex uni-column">
+				<view class="content_item_wrap">
+					<view class="content_item uni-flex space-between align-items" v-for="(item, key) in moneyLogList" :key="key">
+						<view class="item_lf uni-flex align-items">
+							<view class="uni-flex justify-align-center lef-img">
+								<image src="../../../static/income.png"></image>
+							</view>
+							<view class="item_titles uni-flex space-between uni-column">
+								<view class="bankMsg">{{item.bank}}</view>
+								<view class="uni-flex">
+									<view class="orderNo ">{{item.withDrawNo}}</view>
+								</view>
+								<view class="">{{item.createDate}}</view>
+							</view>
+						</view>
+
+						<view class="item_rt uni-flex  justify-align-center">
+							<view class="uni-flex uni-column">
+								<view>¥{{item.amount}}</view>
+								<view v-if="item.state==0" style="color: #666666;text-align: right;">待处理</view>
+								<view v-if="item.state==1" style="color: #666666;text-align: right;">已处理</view>
+							</view>
+						</view>
+					</view>
+				</view>
+
+			</view>
+
+		</view>
+		<load-more :loadingType="loadingType" :contentText="contentText"></load-more>
+		<mx-date-picker :show="showPicker" :type="type" :value="value" :show-tips="true" :begin-text="'开始'" :end-text="'结束'"
+		 :show-seconds="true" @confirm="onSelected" @cancel="onSelected" />
+	</view>
+</template>
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+
+	import MxDatePicker from "@/components/mx-datepicker/mx-datepicker.vue";
+	import util from '../../../common/util.js'
+	import loadMore from '@/components/uni-load-more.vue';
+	import backTop from '@/components/uni-top.vue';
+	import uniIcon from '../../../components/uni-icon.vue';
+
+	var index;
+	var date = new Date();
+	var range = util.getMonthFirstLastDay(date.getFullYear(), date.getMonth() + 1);
+	export default {
+		components: {
+			MxDatePicker,
+			loadMore,
+			backTop,
+			uniIcon
+		},
+		computed: {
+			...mapState(['hasLogin', 'forcedLogin', 'jyyUser'])
+		},
+		data() {
+			return {
+				loadingType: 0,
+				contentText: {
+					contentdown: "上拉显示更多",
+					contentrefresh: "正在加载...",
+					contentnomore: "没有更多数据了"
+				},
+				backTop: {
+					"src": "../../static/top.png",
+					"scrollTop": 0
+				},
+				user: {},
+				moneyLogList: [],
+				showPicker: false,
+				type: 'rangetime',
+				range: range,
+				value: ''
+			}
+		},
+		onLoad() {
+			if (!this.hasLogin) {
+				uni.navigateTo({
+					url: '../login/login',
+				});
+			} else {
+				index = 1;
+				this.user = JSON.parse(this.jyyUser);
+				this.getData();
+			}
+
+		},
+		onPullDownRefresh() {
+			this.getData();
+			setTimeout(function() {
+				uni.stopPullDownRefresh();
+			}, 1000);
+		},
+		onReachBottom() {
+			this.getData();
+		},
+		methods: {
+			goProduct(e) {
+				uni.navigateTo({
+					url: 'product?id=' + e.id + '&userid=' + this.user.id
+				})
+			},
+			getData() {
+				if (this.loadingType !== 0) {
+					return;
+				}
+				uni.request({
+					url: this.webUrl + 'WithDrawList',
+					method: 'POST',
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					data: {
+						userid: this.user.id,
+						PageIndex: index,
+						begin: this.range[0],
+						end: this.range[1],
+					},
+					success: res => {
+						if (res.data.result.bankList.length > 0) {
+							this.moneyLogList = this.moneyLogList.concat(res.data.result.bankList);
+						} else {
+							this.loadingType = 2;
+							return;
+						}
+						if (index == parseInt(res.data.result.pages)) {
+							this.loadingType = 2;
+							return;
+						} else {
+							this.loadingType = 0;
+						}
+						index++;
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			},
+			onShowDatePicker(type) { //显示
+				this.type = type;
+				this.showPicker = true;
+				this.value = this[type];
+			},
+			onSelected(e) { //选择
+				this.showPicker = false;
+				if (e) {
+					this.range[0] = util.formatDate(e.value[0], "YY-MM-DD");
+					this.range[1] = util.formatDate(e.value[1], "YY-MM-DD");
+					index = 1;
+					this.loadingType = 0;
+					this.moneyLogList = [];
+					this.getData();
+				}
+			}
+		}
+	}
+</script>
+
+
+<style>
+	.rtLine {
+		color: #999999;
+		margin-left: 30upx;
+	}
+
+	page {
+		height: auto;
+	}
+
+	.jz_income .mescroll-uni.mescroll-uni-fixed {
+		position: static;
+	}
+
+	.jz_income .orderNo {
+		width: 300upx;
+		overflow: hidden;
+		white-space: nowrap;
+		text-overflow: ellipsis;
+	}
+
+	.jz_income .orderNoTitle {
+		width: 110upx;
+	}
+
+	.jz_income .bankMsg {
+		width: 450upx;
+		overflow: hidden;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+	}
+
+	.jz_income .item_rt {
+		margin-right: 18upx;
+	}
+
+	.jz_income .content_item {
+		margin-left: 0upx;
+	}
+
+	.jz_income .orderNo {
+		width: 450upx;
+	}
+</style>

+ 56 - 0
pages/user/myPoint/myPoint.vue

@@ -0,0 +1,56 @@
+<template>
+	<view class="jz_myPoint uni-flex uni-column">
+		<view class="myPint_header uni-flex uni-column">
+			<view class="t">账户积分</view>
+			<view class="p">{{integral}}</view>
+		</view>
+
+		<view class="uni-list uni-flex uni-column">
+			<view class="uni-list-cell " hover-class="uni-list-cell-hover" @click="goCashOut">
+				<view class="uni-list-cell-navigate uni-navigate-right">
+					<view class="uni-flex align-items">
+						<image src="../../../static/img01.png"></image>
+						<text>申请提现</text>
+					</view>
+				</view>
+			</view>
+			<view class="uni-list-cell " hover-class="uni-list-cell-hover" @click="goDetail">
+				<view class="uni-list-cell-navigate uni-navigate-right">
+					<view class="uni-flex align-items">
+						<image src="../../../static/img02.png"></image>
+						<text>提现明细</text>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="myPint_pace"></view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				integral: ''
+			}
+		},
+		onLoad(e) {
+			this.integral = e.integral;
+		},
+		methods: {
+			goCashOut() {
+				uni.navigateTo({
+					url: 'cashOut?integral='+this.integral
+				})
+			},
+			goDetail() {
+				uni.navigateTo({
+					url: 'income'
+				})
+			}
+		}
+	}
+</script>
+
+<style>
+</style>

+ 565 - 0
pages/user/myuser/myfit.vue

@@ -0,0 +1,565 @@
+<template>
+	<view class="uni-flex lists jz_lists uni-column jz_myfit jz_agent  ">
+		<view class="tab-search uni-column">
+			<view class="tabList">
+				<scroll-view class="uni-flex uni-swiper-tab" scroll-x :scroll-left="scrollLeft" id="tab-bars">
+					<view v-for="(tab, i) in categorys" :key="i" class="swiper-tab-list" :id="'tab' + tab.id" :data-current="index"
+					 @click="changeTab(i, tab)">
+						<view class="productTitle-item uni-flex uni-column">
+							<image :src="tab.ico"></image>
+							<view :class="['picname', curIndex == i ? 'activeLine' : '']">{{ tab.title }}</view>
+						</view>
+					</view>
+				</scroll-view>
+				<view  style="height: 10upx;background: #F4F5F6;width: 100%;"></view>
+			</view>
+			<view class="search uni-flex ">
+				<!-- :class="[sortNavfixed ? 'fixed' : '']" -->
+				<view class="uni-flex-item uni-flex search-input">
+					<input placeholder="关键词" @input="inputChange" v-model="key" :focus="isFocus" @focus="focus" @blur="blur" class="uni-flex-item" />
+					<icon v-if="isDelShow" class="icon icon-del" @click.stop="clear" type="clear" size="12"></icon>
+				</view>
+
+				<view class="searchBtn uni-flex justify-align-center" @click="search">
+					<image src="../../../static/search02.png"></image>
+					<text>搜索</text>
+				</view>
+			</view>
+		</view>
+
+		<view class="agent-product uni-flex uni-column" id="list">
+			<view class=" uni-flex uni-row uni-flex-item myfit-product" v-for="(item, key) in products" :key="key">
+				<view class="uni-flex product-img justify-align-center">
+					<image class="image" :class="{ lazy: !item.display }" :id="'lazy' + key" :data-index="0" @load="imageOnLoad(item, key)"
+					 :src="item.display ? item.pic : ''" style="left: 0;top: 0;"/>
+					<view class="loadbox" :class="{loaded:item.loaded}" style="left: 0;top: 0;">
+						<view class="load"></view>
+					</view>
+				</view>
+				<view class="uni-flex  uni-column space-between product-contents">
+					<view class="uni-flex title">{{item.title}}</view>
+					<view class="prices uni-flex uni-flex">
+						<view class="uni-flex">我的:{{item.costPrice}}元/{{item.unit}}</view>
+						<view class="uni-flex">代理:{{item.salePrice}}元/{{item.unit}}</view>
+					</view>
+					<view class="uni-flex fen">
+						分润:<text>{{item.share}}</text>元/瓶
+					</view>
+					<view class="myfit-slider uni-flex align-items" @touchstart="setKey(key)">
+						<slider :id="key" style="width: 100%;" :value="item.ratio" @change="sliderChange" show-value backgroundColor="#f5f5f7"
+						 activeColor="#ed0000" block-size="24" />
+						<view>%</view>
+					</view>
+
+				</view>
+			</view>
+		</view>
+
+		<load-more :loadingType="loadingType" :contentText="contentText"></load-more>
+		<backTop :src="backTop.src" :scrollTop="backTop.scrollTop"></backTop>
+
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+
+	import util from '../../../common/util.js';
+	import loadMore from '@/components/uni-load-more.vue';
+	import backTop from '@/components/uni-top.vue';
+	var index;
+	export default {
+		components: {
+			loadMore,
+			backTop
+		},
+		data() {
+			return {
+				loadingType: 0,
+				contentText: {
+					contentdown: "上拉显示更多",
+					contentrefresh: "正在加载...",
+					contentnomore: "没有更多数据了"
+				},
+				item: {},
+				showSlider: false,
+				sliderIndex: 0,
+				items: [{}, {}, {}],
+				user: {},
+				userid: 0,
+				active: false,
+				isDelShow: false,
+				isFocus: false,
+				sortNavfixed: false,
+				show: false,
+				windowHeight: 0,
+				type: 0,
+				cates: [{
+					css: '',
+					id: '0',
+					no: '000',
+					show: '0',
+					subs: [],
+					title: '全部'
+				}],
+				categorys: [{
+					ico: '../../../static/merchant/all.png',
+					id: '000',
+					no: '000',
+					title: '全部'
+				}],
+				category: {},
+				products: [],
+				product: {
+					ratio: 0
+				},
+				productKey: 0,
+				curIndex: 0,
+				key: '',
+				id: '000',
+				clock: 0,
+				scrollLeft: 0,
+				backTop: {
+					"src": "../../static/top.png",
+					"scrollTop": 0
+				}
+			};
+		},
+		computed: {
+			...mapState(['hasLogin', 'forcedLogin', 'jyyUser'])
+		},
+		onLoad(e) {
+			index = 1;
+			if (!this.hasLogin) {
+				uni.navigateTo({
+					url: '../login/login',
+				});
+			} else {
+				this.windowHeight = uni.getSystemInfoSync().windowHeight;
+				this.user = JSON.parse(this.jyyUser);
+				this.userid = e.userid;
+				this.getCategory();
+				this.getData();
+				if (e.n > 4) {
+					setTimeout(() => {
+						this.public(e.n, e);
+					}, 200);
+				}
+			}
+		},
+		onPageScroll(e) {
+			this.backTop.scrollTop = e.scrollTop;
+			util.loads(this.products, 'list', this.windowHeight);
+			uni.createSelectorQuery()
+				.selectAll('#list')
+				.boundingClientRect(datas => {
+					this.sortNavfixed = parseInt(datas[0].top) < 78 ? true : false;
+				})
+				.exec();
+		},
+		onPullDownRefresh() {
+			this.getData();
+			setTimeout(function() {
+				uni.stopPullDownRefresh();
+			}, 1000);
+		},
+		onReachBottom() {
+			this.getData();
+		},
+		methods: {
+			setKey(e) {
+				this.sliderIndex = e;
+			},
+			hidesliderPopup() {
+				this.showSlider = false;
+			},
+			set(productId, ratio, share) {
+				uni.request({
+					url: this.webUrl + 'SetUserRatio',
+					method: 'POST',
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					data: {
+						userid: this.user.id,
+						setid: this.userid,
+						productId: productId,
+						price: share,
+						ratio: ratio.toFixed(2)
+					},
+					success: res => {
+						uni.showLoading({
+							title: res.data.result.resultInfo,
+							icon: "none"
+						});
+						setTimeout(function() {
+							uni.hideLoading();
+						}, 500);
+					},
+					fail: () => {
+						mescroll.endErr();
+					},
+					complete: () => {}
+				});
+			},
+			sliderChange(e) {
+				let index;
+				// #ifndef H5
+				index = e.currentTarget.id;
+				// #endif
+				// #ifdef H5
+				index = this.sliderIndex;
+				// #endif
+				this.products[index].share = parseFloat((this.products[index].salePrice - this.products[index].costPrice) * e.detail.value /
+					100).toFixed(3);
+				this.set(this.products[index].id, e.detail.value / 100, this.products[index].share);
+			},
+			focus() {
+				this.active = true;
+				//HM修改 增加获取焦点判断
+				if (this.key != '') {
+					this.isDelShow = true;
+				}
+			},
+			inputChange(event) {
+				var keyword = event.detail.value;
+				this.$emit('input', keyword);
+				if (this.key) {
+					this.isDelShow = true;
+				}
+			},
+			blur() {
+				this.isFocus = false;
+				if (!this.key) {
+					this.active = false;
+				}
+			},
+			clear() {
+				//HM修改 收起键盘
+				uni.hideKeyboard();
+				this.isFocus = false;
+				this.key = '';
+				this.active = false;
+				//HM修改 清空内容时候触发组件input
+				this.isDelShow = false;
+			},
+			search() {
+				index = 1;
+				this.loadingType = 0;
+				this.products = [];
+				this.getData();
+			},
+			getData() {
+				if (this.loadingType !== 0) {
+					return;
+				}
+				uni.request({
+					url: this.webUrl + 'List',
+					method: 'POST',
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					data: {
+						pageNum: index,
+						id: this.id,
+						userid: this.user.id,
+						key: this.key,
+						setid: this.userid
+					},
+					success: res => {
+						if (res.data.result.ratioProducts.length > 0) {
+							this.products = this.products.concat(res.data.result.ratioProducts);
+							setTimeout(() => {
+								util.loads(this.products, 'list', this.windowHeight);
+							}, 500)
+						} else {
+							this.loadingType = 2;
+							return;
+						}
+						if (index == parseInt(res.data.result.pages)) {
+							this.loadingType = 2;
+							return;
+						} else {
+							this.loadingType = 0;
+						}
+						index++;
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			},
+			getElSize(id) {
+				//得到元素的size
+				return new Promise((res, rej) => {
+					uni.createSelectorQuery()
+						.select('#' + id)
+						.fields({
+								size: true,
+								scrollOffset: true
+							},
+							data => {
+								res(data);
+							}
+						)
+						.exec();
+				});
+			},
+			async public(i, e) {
+				this.id = e.no;
+				let index = i;
+				let tabBars = await this.getElSize('tab-bars'),
+					tabBarScrollLeft = tabBars.scrollLeft; //点击的时候记录并设置scrollLeft
+				let width = 0;
+				for (let j = 0; j < index; j++) {
+					let result = await this.getElSize('tab' + this.categorys[j].id);
+					width += result.width;
+				}
+				let winWidth = uni.getSystemInfoSync().windowWidth,
+					nowElement = await this.getElSize('tab' + this.categorys[index].id),
+					nowWidth = nowElement.width;
+				if (width + nowWidth - tabBarScrollLeft > winWidth - nowWidth) {
+					this.scrollLeft = width + nowWidth * 3 - winWidth;
+				}
+
+				if (width < tabBarScrollLeft) {
+					this.scrollLeft = width;
+				}
+			},
+			changeTab(i, e) {
+				if (this.curIndex === i) {
+					return false;
+				} else {
+					this.public(i, e);
+					this.isClickChange = true;
+					this.curIndex = i;
+					index = 1;
+					this.loadingType = 0;
+					this.products = [];
+					this.getData();
+					setTimeout(() => {
+						util.loads(this.products, 'list', this.windowHeight);
+					}, 500)
+
+				}
+			},
+			imageOnLoad(e) {
+				e.loaded = true;
+			},
+			getCategory() {
+				uni.request({
+					url: this.webUrl + 'Categorys',
+					method: 'POST',
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						this.cates = this.cates.concat(res.data.result.uniClassifys);
+						this.categorys = this.categorys.concat(res.data.result.categorys);
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			},
+			goAgentPriduct: function(e) {
+				uni.navigateTo({
+					url: 'product?id=' + e.id
+				});
+			}
+		}
+	};
+</script>
+
+<style>
+	.tab-search {
+		position: fixed;
+		width: 100%;
+		z-index: 9999;
+	}
+
+	.jz_myfit.jz_lists scroll-view.uni-swiper-tab {
+		margin-bottom: 0;
+	}
+
+	
+
+	/* #ifdef H5 */
+	.myfit-slider input {
+		display: block;
+		text-align: center;
+		width: 200upx;
+		background: #dd0101;
+		color: #FFFFFF;
+		border-radius: 30upx;
+		font-size: 26upx;
+	}
+
+	.myfit-slider>view:last-child {
+		margin-right: 10upx;
+	}
+
+	/* #endif */
+
+
+	slider {
+		display: inline;
+		margin-left: 0;
+		margin-right: 0;
+	}
+
+	.jz_agent.jz_myfit .agent-product {
+		margin-top: 300upx;
+	}
+
+	.fixed {
+		width: 100%;
+		position: fixed;
+		left: 0;
+		top: 0;
+		/* #ifdef H5 */
+		/* top: 84upx; */
+		top: 44px;
+		/* #endif */
+		background: #ffffff;
+		margin: 0 !import;
+		z-index: 999;
+		box-sizing: border-box;
+		border-bottom: 2upx solid #eeeeee;
+		transform: translateZ(0);
+		-webkit-transform: translateZ(0);
+	}
+
+	.activeLine {
+		border-bottom: 2upx solid #ff273c;
+	}
+
+	.jz_lists {
+		position: relative;
+	}
+
+
+	.jz_lists scroll-view.uni-swiper-tab {
+		border-bottom: 0;
+		height: auto;
+		line-height: auto;
+		padding-top: 20upx;
+	}
+
+	.jz_lists .productTitle-item {
+		justify-content: center;
+		align-items: center;
+	}
+
+	.jz_lists .productTitle-item .picname {
+		line-height: 60upx;
+	}
+
+	.jz_lists .productTitle-item image {
+		width: 50upx;
+		height: 50upx;
+	}
+
+	.lists .sortNav .Nav:first-child {
+		/* border-left: none; */
+	}
+
+	.list .tab-bar-wrap {
+		width: 200upx;
+	}
+
+	::-webkit-scrollbar {
+		display: none;
+	}
+
+	.lists .nav-left {
+		width: 218upx;
+		border-right: solid 1upx #e0e0e0;
+		padding-top: 20upx;
+		box-sizing: border-box;
+	}
+
+	.lists .nav-left .nav-left-title {
+		height: 80upx;
+		font-weight: 600;
+		margin: 0 auto;
+		margin-left: 10upx;
+	}
+
+	.lists .nav-left-item {
+		height: 110upx;
+		font-size: 30upx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
+
+	.lists .nav-left-item image {
+		width: 40upx;
+		height: 40upx;
+		margin-right: 18upx;
+	}
+
+	.lists .nav-right {
+		width: 100%;
+		box-sizing: border-box;
+	}
+
+	.uni-tab-bar-loading {
+		width: 100%;
+	}
+
+	.uni-tab-bar-loading .loading-text {
+		margin-top: 50upx;
+		font-size: 28upx;
+		text-align: center;
+	}
+
+	.lists .list {
+		width: 100%;
+		height: 92%;
+	}
+
+
+	#tab-bar {
+		background-color: #ffffff;
+		padding-bottom: 60upx;
+		overflow: hidden;
+	}
+
+	.uni-tab-bar .active {
+		color: #ffe200;
+		/* border-left: 10upx solid #ffe200; */
+	}
+
+
+	.prices .prices-cart image {
+		width: 52upx;
+		height: 50upx;
+		margin-right: 10upx;
+	}
+
+	.prices .prices-salePrice {
+		font-size: 22upx;
+		color: #f00000;
+	}
+
+
+	.image {
+		position: absolute;
+		width: 100%;
+		height: 100%;
+	}
+
+
+	.list-collapse {
+		padding-left: 36upx;
+		box-sizing: border-box;
+	}
+
+
+	.lists .sortNav .navActive {
+		color: #d80000;
+	}
+</style>

+ 142 - 0
pages/user/myuser/mymember.vue

@@ -0,0 +1,142 @@
+<template>
+	<view class="uni-flex uni-column jz_mymember">
+
+		<view class="uni-flex align-items menberItem" v-if="users.length>0" v-for="(item,key) in users" :key="key">
+			<view class="uni-flex justify-align-center menberItemImg">
+				<image v-if="item.headIco!=null&& item.headIco!='undefined'" :src="item.headIco"></image>
+				<image v-if="item.headIco==null|| item.headIco=='undefined'" src="../../../static/home/home12.png"></image>
+			</view>
+			<view class="uni-flex-item uni-flex space-between uni-column menberItemright">
+				<view class="uni-flex align-items">昵称:{{item.nickName}}</view>
+				<view class="uni-flex space-between align-items">
+					<view class="">注册时间:{{item.createDate}}</view>
+				</view>
+				<view class="uni-flex  align-items" v-if="user.business==1">
+					<view class="uni-flex justify-align-center btnmember btn " @click="goMyfit(item,key)">
+						推广分润设置
+					</view>
+					<view class="uni-flex justify-align-center btnmember btn" :class="[item.agency? '' : 'NoactiveClass']" @click="setAcentPrice(item,key)">
+						代理价格可见
+					</view>
+				</view>
+			</view>
+		</view>
+
+		<view class="uni-flex align-items menberItem" v-if="users.length==0" style="color: #B2B2B2;">
+			暂无会员
+		</view>
+
+
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+
+	export default {
+		computed: {
+			...mapState(['hasLogin', 'forcedLogin', 'jyyUser'])
+		},
+		data() {
+			return {
+				users: [],
+				user: {}
+			}
+		},
+		onShow() {},
+		onLoad(e) {
+
+			this.user = JSON.parse(this.jyyUser);
+			this.init();
+		},
+		methods: {
+			setAcentPrice(item, key) {
+				uni.request({
+					url: this.webUrl + 'SetAgency',
+					method: 'POST',
+					data: {
+						userid: this.user.id,
+						id: item.id,
+						agency: !item.agency
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						if (res.data.result.isSuccess) {
+							this.users[key].agency = !item.agency;
+						}
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			},
+			goMyfit(e) {
+				uni.navigateTo({
+					url: 'myfit?userid=' + e.id
+				})
+			},
+			init() {
+				if (!this.hasLogin) {
+					uni.navigateTo({
+						url: '../login/login',
+					});
+				} else {
+					this.getData();
+				}
+			},
+			getData() {
+				uni.request({
+					url: this.webUrl + 'GetMyUser',
+					method: 'POST',
+					data: {
+						userid: this.user.id,
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						if (res.data.data.length > 0) {
+							this.users = res.data.data;
+						}
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			},
+			goBuyUser(e) {
+				uni.navigateTo({
+					url: "./myuser?rank=" + e
+				})
+			}
+		}
+	}
+</script>
+<style>
+	.myuser {
+		height: 80upx;
+		text-align: center;
+		line-height: 80upx;
+	}
+
+	.mymember .number {
+		margin-right: 20upx;
+	}
+
+	.btnmember {
+		font-size: 24upx;
+		margin-top: 20upx;
+		width: 180upx;
+		height: 50upx;
+		border-radius: 8upx;
+		color: #fff;
+		line-height: 50upx;
+	}
+
+	.btnmember.NoactiveClass {
+		background: #cdcdcd;
+	}
+</style>

+ 115 - 0
pages/user/myuser/myuser.vue

@@ -0,0 +1,115 @@
+<template>
+	<view class="uni-flex uni-column myuser">
+		<view class="uni-list">
+			<view class="content">
+				<view v-for="(item,key) in users" :key="key" class="uni-flex justify-content">
+					<view class="uni-product uni-flex">
+						<view class="image-view">
+							<image v-if="item.avatarUrl" class="uni-product-image" :src="item.avatarUrl" />
+							<image v-if="!item.avatarUrl" class="uni-product-image"  src="../../../static/user/28.jpg" />
+						</view>
+						<view class="uni-product-wrap uni-flex uni-column">
+							<view class="nick">昵称:<text>{{item.nickName}}</text></view>
+							<view class="registerTime">注册时间:<text>{{item.createDate}}</text></view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<load-more :loadingType="loadingType" :contentText="contentText"></load-more>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+	import loadMore from '@/components/uni-load-more.vue';
+	var index;
+	export default {
+		computed: {
+			...mapState(['hasLogin', 'forcedLogin', 'jyyUser'])
+		},
+		data() {
+			return {
+				users: [],
+				rank: 1,
+				ico:"../",
+				loadingType: 0,
+				contentText: {
+					contentdown: "上拉显示更多",
+					contentrefresh: "正在加载...",
+					contentnomore: "没有更多数据了"
+				}
+			};
+		},
+		onPullDownRefresh() {
+			this.init();
+			setTimeout(function() {
+				uni.stopPullDownRefresh();
+			}, 1000);
+		},
+		onShow() {
+			this.init();
+		},
+		onLoad(e) {
+			this.rank = e.rank;
+			this.init();
+		},
+		methods: {
+			init() {
+				index = 1;
+				if (!this.hasLogin) {
+					uni.navigateTo({
+						url: '../login/login',
+					});
+				} else {
+					this.getData();
+				}
+			},
+			getData() {
+				if (this.loadingType !== 0) {
+					return;
+				}
+				this.loadingType = 1;
+				let user = JSON.parse(this.jyyUser);
+				uni.request({
+					url: this.webUrl + 'MyUserList',
+					method: 'POST',
+					data: {
+						pageIndex: index,
+						userid: user.id,
+						rank: this.rank
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						if (res.data.result.userList.length > 0) {
+							this.users = this.users.concat(res.data.result.userList);
+						} else {
+							this.loadingType = 2;
+							return;
+						}
+						if (index == parseInt(res.data.result.pages)) {
+							this.loadingType = 2;
+							return;
+						} else {
+							this.loadingType = 0;
+						}
+						index++;
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			},
+		},
+		onReachBottom() {
+			this.getData();
+		},
+		components: {
+			loadMore
+		}
+	}
+</script>

+ 508 - 0
pages/user/order/order.vue

@@ -0,0 +1,508 @@
+<template>
+	<view class="uni-flex uni-column cart order jz_order">
+		<view class="uni-flex uni-column uni-flex-item ">
+
+			<view v-if="!mode" class="order-address">
+				<view class="order-address-box01">
+					<view class="order-address-ico">
+						<image src="../../../static/cart/location.png"></image>
+					</view>
+					<view v-if="showAddress" class="order-message" @click="goAddress">
+						<view>
+							<view>
+								<view class="lf">收货人:{{address.nickName}}</view>
+								<view class="rt">电话:{{address.mobile}}</view>
+							</view>
+							<view class="address">收货地址:{{province}}{{city}}{{district}}{{address.addStr}}</view>
+						</view>
+					</view>
+					<view v-if="!showAddress" class="addAdress" @click="goAddressService">
+						<text>添加地址</text>
+					</view>
+
+					<view class="order-address-ico2" @click="goAddress">
+						<image src="../../../static/cart/image.png"></image>
+					</view>
+
+				</view>
+				<view class=" order-address-line01">
+					<image src="../../../static/cart/line.png"></image>
+				</view>
+			</view>
+
+			<view v-if="mode" class="order-address">
+				<view class=" order-address-box">
+					<view class="">收货信息</view>
+					<view class="expressMsg fontWnormal">
+						{{addressStr}}
+					</view>
+				</view>
+				<view class="uni-flex uni-flex-item order-address-line mg">
+					<image src="../../../static/cart/line.png"></image>
+				</view>
+			</view>
+
+			<!-- 列表循环 -->
+			<view class="uni-flex uni-column uni-flex-item cart-list" v-for="(item,m) in json" :key="m">
+				<view class="uni-flex uni-column item-shop ">
+					<!-- 商家 -->
+					<!-- <view class="uni-flex uni-row  order-line">
+						{{item.sj}}
+					</view> -->
+					<!-- 图片产品名称价格数量展示 -->
+					<view class="uni-flex uni-row order-item" v-for="(pl,n) in json[m].items" :key="n">
+						<!-- 商品图片 -->
+						<view class="uni-flex uni-flex-item  item-img">
+							<image mode="widthFix" :src="pl.img"></image>
+						</view>
+						<view class="uni-flex uni-column item-padding uni-flex-item3">
+							<view class="uni-flex uni-flex-item fontWnormal">
+								{{pl.cp}}
+							</view>
+							<view class="uni-flex uni-flex-item">
+								<view class="uni-flex text cart-attr" v-for="attr in pl.attr" :key="attr">
+									{{attr.name}}:{{attr.value}}
+								</view>
+							</view>
+							<view class="uni-flex uni-row uni-flex-item">
+								<view class="uni-flex uni-flex-item5" v-if="status==1"><text class="price-red">¥{{pl.jg*pl.unitNum}}</text></view>
+								<view class="uni-flex uni-flex-item5" v-if="status==0"><text class="price-red">¥{{pl.jg}}</text></view>
+								<view class="uni-flex uni-flex-item ">x{{pl.sl}}</view>
+							</view>
+						</view>
+					</view>
+					<view class="uni-flex uni-row  order-line">
+						配送费用:<text class="price-red">¥{{item.expressCost}}</text>
+					</view>
+					<view class="uni-flex uni-row  order-line">
+						订单小计:<text class="price-red">¥{{item.totalPrice}}</text>
+					</view>
+					<view class="uni-flex uni-row  order-line msg">
+						买家留言:
+						<input class="uni-input fontWnormal" v-model="item.message" placeholder="给卖家的留言(选填)" />
+					</view>
+				</view>
+
+			</view>
+		</view>
+
+		<view class="uni-flex uni-row footer">
+			<view class="uni-flex uni-flex-item">合计: <text class="price-red">¥{{allPrice}}</text></view>
+			<view class="uni-flex ">
+				<view class="uni-flex uni-flex-item btn" @click='order()'>去付款</view>
+			</view>
+		</view>
+		<attr-popup :show="showAttr" @hidePopup="hidePopup" :toptitle="toptitle" :productItems="items"></attr-popup>
+		<pay-popup :show="showPay" :banks="banks" @hidePopup="hidePayPopup" @wxPay="wxPay" @bankPay="bankPay"></pay-popup>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+
+	import util from '../../../common/util.js';
+	import cart from '../../../common/cart.js';
+	import province from '../../../components/mpvue-citypicker/city-data/province.js';
+	import city from '../../../components/mpvue-citypicker/city-data/city.js';
+	import area from '../../../components/mpvue-citypicker/city-data/area.js';
+	import attrPopup from '../../../components/cartcommon/uni-popup-public.vue';
+	import payPopup from '../../../components/uni-popup-pay.vue';
+	export default {
+		computed: {
+			...mapState(['hasLogin', 'forcedLogin', 'jyyUser'])
+		},
+		components: {
+			attrPopup,
+			payPopup
+		},
+		data() {
+			return {
+				allPrice: '0.00',
+				allNum: 0,
+				json: [],
+				showAddress: false,
+				address: [],
+				user: {},
+				province: "",
+				city: "",
+				district: "",
+				addressId: "",
+				mode: false,
+				addressStr: "",
+				showAttr: false,
+				showPay: false,
+				items: [], //弹窗的数组,
+				toptitle: '',
+				banks: [],
+				status: '',
+				id: '',
+				orderNo: ''
+			};
+		},
+		onLoad(e) {
+			//0为直接购买,1为订单列表处结算
+			if (e.status == 1) {
+				this.status = 1;
+			} else {
+				this.status = 0;
+			}
+			this.addressId = e.addressId;
+			this.orderNo = e.orderNo;
+			this.id = e.id;
+			this.init();
+		},
+		onPullDownRefresh() {
+			this.init();
+		},
+
+		methods: {
+			init() {
+				if (!this.hasLogin) {
+					uni.navigateTo({
+						url: '../login/login',
+					});
+
+				} else {
+					this.user = JSON.parse(this.jyyUser);
+					if (this.orderNo == undefined) {
+						this.json = cart.getOrder();
+						this.orderNo = this.json[0].no;
+						this.getAddress();
+					} else {
+						this.getData();
+					}
+				}
+				uni.stopPullDownRefresh();
+			},
+			hidePopup() {
+				this.showAttr = false;
+			},
+			hidePayPopup() {
+				this.showPay = false;
+			},
+			goAddress() {
+				uni.redirectTo({
+					url: "../address/address?url=../order/order"
+				})
+			},
+			goAddressService() {
+				uni.redirectTo({
+					url: "../addressService/addressService?url=../order/order"
+				})
+			},
+			getData() {
+				uni.showLoading({
+					title: "加载中"
+				})
+				uni.request({
+					url: this.webUrl + 'GetOrder',
+					method: 'POST',
+					data: {
+						userid: this.user.id,
+						id: this.id
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						uni.hideLoading();
+						this.mode = true;
+						this.json = [];
+						this.json.push(res.data.uniOrder);
+						this.addressStr = res.data.uniOrder.express;
+						this.showAddress = true;
+						this.allPrice = (parseFloat(this.json[0].expressCost) + parseFloat(this.json[0].totalPrice)).toFixed(2);
+						//this.Refresh();
+						this.banks = res.data.banks;
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+
+			},
+			getAddress() {
+				uni.showLoading({
+					title: "加载中",
+					mask: true
+				})
+				let data;
+				if (this.addressId == undefined) {
+					data = {
+						userid: this.user.id,
+						orderNo: this.orderNo
+					};
+				} else {
+					data = {
+						id: this.addressId,
+						orderNo: this.orderNo
+					};
+				}
+				uni.request({
+					url: this.webUrl + 'Address',
+					method: 'POST',
+					data: data,
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						uni.hideLoading();
+						if (res.data.result.isSuccess) {
+							this.showAddress = true;
+							this.address = res.data.address;
+							const p = province[res.data.address.province];
+							this.province = p.label;
+							const c = city[res.data.address.province][res.data.address.city];
+							this.city = c.label;
+							const d = area[res.data.address.province][res.data.address.city][res.data.address.district];
+							this.district = d.label;
+							this.Refresh();
+							this.banks = res.data.banks;
+						}
+					},
+					fail: () => {
+						uni.hideLoading();
+					},
+					complete: () => {
+						uni.hideLoading();
+					}
+				});
+			},
+			Refresh() {
+				let expressArr = [];
+				let all = 0;
+				for (let j = 0; j < this.json.length; j++) {
+					let arr = this.json[j].items;
+					let cost = 0;
+					let count = 0;
+					let totalPrice = 0;
+					for (let i = 0; i < arr.length; i++) {
+
+						//算同类型商品重量
+						let exist = false;
+						for (let k = 0; k < expressArr.length; k++) {
+							if (expressArr[k].id == arr[i].id) {
+								expressArr[k].weight += arr[i].weight * arr[i].sl * arr[i].unitNum;
+								expressArr[k].expressFees = arr[i].expressFees;
+								exist = true;
+								break
+							}
+						}
+						if (!exist) {
+							expressArr.push({
+								"id": arr[i].id,
+								"weight": arr[i].weight * arr[i].sl * arr[i].unitNum,
+								"expressFees": arr[i].expressFees
+							});
+						}
+						
+						count++;
+						totalPrice += parseFloat(arr[i].jg * arr[i].sl);
+						all += arr[i].jg * arr[i].sl;
+					}
+					//计算邮费
+					for (let l = 0; l < expressArr.length; l++) {
+						for (let m = 0; m < expressArr[l].expressFees.length; m++) {
+							if (expressArr[l].expressFees[m].province === this.province) {
+								cost += this.costExpress(expressArr[l].weight, expressArr[l].expressFees[m], l);
+							}
+						}
+					}
+
+					this.json[j].count = count;
+					this.json[j].totalPrice = (totalPrice + cost).toFixed(2);
+					this.json[j].expressCost = cost.toFixed(2);
+					if (!this.mode) {
+						this.json[j].express = this.address.nickName + " " + this.address.mobile + " " + this.province + " " + this.city +
+							" " + this.district + " " + this.address.addStr;
+					}
+					all += cost;
+				}
+				this.allPrice = all.toFixed(2); //返回数据	
+				if (!this.mode) {
+					this.ExpressCost();
+				}
+			},
+			ExpressCost() {
+				uni.request({
+					url: this.webUrl + 'ExpressCost',
+					method: 'POST',
+					data: {
+						user: JSON.stringify(this.user),
+						data: JSON.stringify(this.json)
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {},
+					fail: () => {},
+					complete: () => {}
+				});
+			},
+			costExpress(weight, express, m) {
+				if (parseInt(express.first) > 0) {
+					if (weight > express.weight) {
+						let n = Math.ceil((weight - express.weight) / express.weight);
+						return parseFloat(express.first) + parseFloat(express.extend * n);
+					} else {
+						return parseFloat(express.first);
+					}
+				} else {
+					return 0;
+				}
+			},
+			order() {
+				if (!this.showAddress || this.addressStr == null) {
+					uni.showModal({
+						content: "请设置收货地址!",
+						showCancel: false
+					});
+					return;
+				}
+				uni.request({
+					url: this.webUrl + 'CheckAgency',
+					method: 'POST',
+					data: {
+						user: JSON.stringify(this.user),
+						data: JSON.stringify(this.json)
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						if (!res.data.result.isSuccess) {
+							this.showAttr = true;
+							this.items = res.data.items;
+							this.toptitle = res.data.result.resultInfo;
+						} else {
+							this.showPay = true;
+						}
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			},
+			bankPay(val) {
+				uni.request({
+					url: this.webUrl + 'BankPayment',
+					method: 'POST',
+					data: {
+						data: JSON.stringify(this.json),
+						user: JSON.stringify(this.user),
+						pass: val.pass,
+						bank: val.bank
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: (res) => {
+						uni.hideLoading();
+						if (res.data.result.isSuccess) {
+							cart.updateCart([]);
+							this.showPay = false;
+							uni.reLaunch({
+								url: "../orderSuccess/orderSuccess?no=" + this.json[0].no
+							});
+						} else {
+							uni.showToast({
+								icon: "none",
+								title: res.data.result.resultInfo
+							})
+						}
+					},
+					fail: (e) => {
+						uni.hideLoading();
+						uni.showToast({
+							icon: "none",
+							title: "该订单还未完成支付"
+						})
+					}
+				})
+			},
+			wxPay() {
+
+				uni.showLoading({
+					title: "提交中"
+				})
+				uni.login({
+					success: (e) => {
+						uni.request({
+							url: this.webUrl + 'Payment',
+							method: 'POST',
+							data: {
+								data: JSON.stringify(this.json),
+								user: JSON.stringify(this.user),
+								code: e.code
+							},
+							header: {
+								'content-type': 'application/x-www-form-urlencoded'
+							},
+							success: (res) => {
+								console.log(res);
+								uni.hideLoading();
+								if (res.statusCode !== 200) {
+									uni.showToast({
+										icon: "none",
+										title: "支付失败,请重试!"
+									})
+									return;
+								}
+								if (res.data.result.isSuccess) {
+									let paymentData = JSON.parse(res.data.result.resultInfo);
+									if (paymentData.resultcode == "SUCCESS") {
+										uni.requestPayment({
+											timeStamp: paymentData.timestamp.toString(),
+											nonceStr: paymentData.noncestr,
+											package: paymentData.package,
+											signType: 'MD5',
+											paySign: paymentData.sign,
+											success: (res) => {
+												cart.updateCart([]);
+												uni.redirectTo({
+													url: "../orderSuccess/orderSuccess?no=" + this.json[0].no
+												});
+											},
+											fail: (res) => {
+												uni.showToast({
+													icon: "none",
+													title: "该订单还未完成支付"
+												})
+											},
+											complete: () => {
+												this.loading = false;
+											}
+										})
+									} else {
+										uni.showToast({
+											icon: "none",
+											title: "该订单还未完成支付"
+										})
+									}
+								}
+							},
+							fail: (e) => {
+								uni.hideLoading();
+								uni.showToast({
+									icon: "none",
+									title: "该订单还未完成支付"
+								})
+							}
+						})
+					},
+					fail: (e) => {
+						uni.hideLoading();
+						uni.showModal({
+							content: "支付失败,原因为: " + e.errMsg,
+							showCancel: false
+						})
+					}
+				})
+			}
+		}
+	}
+</script>
+<style>
+
+</style>

+ 98 - 0
pages/user/orderEms/orderEms.vue

@@ -0,0 +1,98 @@
+<template>
+	<view class="uni-flex uni-column jz_ems">
+		<view v-if="status=='0'">
+			<uni-steps :options="list" direction="column" :active="2"></uni-steps>
+		</view>
+		<view class="uni-flex  justify-align-center ems" v-if="status!='0'&status!=''">
+			<view class="tipImg">
+				<image src="../../../static/warn.png"></image>
+			</view>
+			<view class="uni-flex uni-column msgs">
+				<view class="titile">抱歉,查询物流失败!</view>
+				<view class="tip">请稍后再试。</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+	import {
+		uniSteps
+	} from "@/components/uni-steps/uni-steps.vue"
+
+	export default {
+		computed: {
+			...mapState(['hasLogin', 'forcedLogin', 'jyyUser'])
+		},
+		components: {
+			uniSteps
+		},
+		methods: {
+			getData() {
+				uni.request({
+					url: this.webUrl + 'OrderLogistics',
+					method: 'POST',
+					data: {
+						id: this.orderId
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						this.status = JSON.parse(res.data.data).status;
+						if (this.status == "0") {
+							this.list = JSON.parse(res.data.data).result.list;
+							let b = JSON.stringify(this.list).replace(/status/g, "title");
+							let c = b.replace(/time/g, "desc");
+							this.list = JSON.parse(c);
+						}
+					},
+					fail: () => {
+						uni.hideLoading();
+					},
+					complete: () => {
+						uni.hideLoading();
+					}
+				});
+			}
+		},
+		onLoad(e) {
+			this.orderId = e.order.replace(/"/g,"");
+			this.getData();
+		},
+		data() {
+			return {
+				orderNo: '',
+				list: [],
+				status: ''
+			};
+		}
+	}
+</script>
+<style>
+	.jz_ems .ems {
+		margin-top: 300upx;
+	}
+
+	.jz_ems .tipImg image {
+		width: 80upx;
+		height: 80upx;
+	}
+
+	.jz_ems .titile {
+		font-weight: bold;
+		margin-top: -22upx;
+	}
+
+	.jz_ems .msgs {
+		margin-left: 20upx;
+	}
+
+	.jz_ems .tip {
+		margin-top: -5upx;
+	}
+</style>

+ 462 - 0
pages/user/orderInfo/orderInfo.vue

@@ -0,0 +1,462 @@
+<template>
+	<view class="uni-flex uni-column  orderInfo ">
+		<view class="uni-flex uni-column orderInfo-status">
+			<!-- <image mode="widthFix" src="../../../static/order/status1.jpg"></image> -->
+			<view class="uni-flex uni-flex-item"></view>
+			<view class="uni-flex uni-flex-item2 item-padding fontWt">{{ orderStatus }}</view>
+			<view v-if="showTimer" class="uni-flex uni-flex-item2 item-padding">
+				<uni-order-countdown
+					bgrColor="transparent"
+					borderColor="transparent"
+					splitorColor="#fff"
+					fontColor="#fff"
+					:orderStr="orderStr"
+					:timer="timer"
+				></uni-order-countdown>
+			</view>
+			<view class="uni-flex uni-flex-item"></view>
+		</view>
+		<!-- <view class="uni-flex uni-column order-address">
+			<view class="uni-flex uni-column order-address-box">
+				<view class="uni-flex uni-flex-item uni-row orderMsg">收货信息</view>
+				<view class="uni-flex uni-flex-item uni-row">
+					{{data.express}}
+				</view>
+			</view>
+			<view class="uni-flex uni-flex-item order-address-line">
+				<image src="../../../static/cart/line.png" mode="widthFix"></image>
+			</view>
+		</view> -->
+		<view class=" order-address">
+			<view class=" order-address-box">
+				<view class=" orderMsg">收货信息</view>
+				<view class=" uni-row">{{ orderInfo.express }}</view>
+			</view>
+			<view class="uni-flex uni-flex-item order-address-line"><image src="../../../static/cart/line.png"></image></view>
+		</view>
+
+		<view class="uni-flex uni-column order-items">
+			<view class="uni-flex uni-row uni-flex-item order-shop-name order-boder">{{ orderInfo.shopName }}</view>
+			<view class="uni-flex uni-row order-item" v-for="(item, key) in orderInfo.items" :key="key">
+				<view class="uni-flex uni-flex-item pic item-padding"><image mode="widthFix" :src="item.pic"></image></view>
+				<view class="uni-flex uni-column uni-flex-item3 item-padding">
+					<text class="uni-text order-title">{{ item.title }}</text>
+					<text class="uni-text order-specs">{{ item.productSpecsStr }}</text>
+					<text class="uni-text order-specs">小计</text>
+				</view>
+				<view class="uni-flex uni-column uni-flex-item item-padding">
+					<text class="uni-text color-f40">¥{{ item.totalPrice / item.amount }}</text>
+					<text class="uni-text">x{{ item.amount }}</text>
+					<text class="uni-text color-f40">¥{{ item.totalPrice }}</text>
+				</view>
+			</view>
+			<view class="uni-flex order-line item-padding order-boder order-line-small">
+				<view class="uni-flex uni-flex-item">商品总件</view>
+				<view class="uni-flex uni-flex-item justify-flex-end">{{ orderInfo.orderItemCount }}</view>
+			</view>
+			<view class="uni-flex order-line item-padding order-boder order-line-small">
+				<view class="uni-flex uni-flex-item">商品总价</view>
+				<view class="uni-flex uni-flex-item justify-flex-end">¥{{ orderInfo.totalPrice }}</view>
+			</view>
+			<view class="uni-flex order-line item-padding order-boder order-line-small">
+				<view class="uni-flex uni-flex-item">运费(快递)</view>
+				<view class="uni-flex uni-flex-item justify-flex-end">¥{{ orderInfo.expressCost }}</view>
+			</view>
+			<view class="uni-flex order-line item-padding totalPrice ">
+				<view class="uni-flex uni-flex-item">订单总价</view>
+				<view class="uni-flex uni-flex-item justify-flex-end color-f40">¥{{ allPrice }}</view>
+			</view>
+		</view>
+
+		<view class="uni-flex uni-column oderinfo-other">
+			<view class="uni-flex order-line-small item-padding order-boder">订单编号:{{ orderInfo.orderNo }}</view>
+			<view class="uni-flex order-line-small item-padding order-boder">创建时间:{{ orderInfo.createDate }}</view>
+			<!-- 收款信息:<text style="font-size: 28upx; color: #FF0000;">{{orderInfo.payBankInfo}}</text> -->
+			<view v-if="orderInfo.payBankCode" class="uni-flex order-line-small item-padding order-boder uni-column">
+				<view class="uni-flex order-line-small  order-boder space-between">
+					<view>收款对象:{{ payBankInfo.getMoneyPeople }}</view>
+					<view class="setClipboardData" @click="setClipboardData(payBankInfo.getMoneyPeople)">复制</view>
+				</view>
+				<view class="uni-flex order-line-small order-boder space-between">
+					<view>银行名称:{{ payBankInfo.bankName }}</view>
+					<view class="setClipboardData" @click="setClipboardData(payBankInfo.bankName)">复制</view>
+				</view>
+				<view class="uni-flex order-line-small  order-boder space-between">
+					<view>银行账号:{{ payBankInfo.bankNum }}</view>
+					<view class="setClipboardData" @click="setClipboardData(payBankInfo.bankNum)">复制</view>
+				</view>
+				<view class="uni-flex order-line-small  order-boder space-between">
+					<view>银行地址:{{ payBankInfo.bankAddress }}</view>
+					<view class="setClipboardData" @click="setClipboardData(payBankInfo.bankAddress)">复制</view>
+				</view>
+			</view>
+			<view v-if="orderInfo.payBankCode" class="uni-flex order-line-small item-padding order-boder">
+				汇款识别码:
+				<text style="font-size: 28upx; color: #FF0000;">{{ orderInfo.payBankCode }}</text>
+			</view>
+			<view v-if="waitPayBtn" class="uni-flex order-line-small item-padding order-boder align-items" style="height: 220upx;">
+				<view class="">上传汇款单:</view>
+				<view class="uni-flex-item">
+					<robby-image-upload
+						v-model="imageData"
+						fileKeyName="data"
+						:limit="3"
+						:server-url="serverUrl"
+						:showUploadProgress="show"
+						:form-data="formData"
+						@delete="deleteImage"
+						@add="addImage"
+					></robby-image-upload>
+				</view>
+			</view>
+		</view>
+
+		<view class="uni-flex uni-row footer justify-flex-end">
+			<view v-if="delBtn" class="btn" @click="bindDel">删除订单</view>
+			<view v-if="cancelBtn" class="btn" @click="bindCancel">取消订单</view>
+			<view v-if="payBtn" class="btn" @click="bindPay">付款</view>
+			<view v-if="waitPayBtn" class="btn">等待汇款</view>
+			<view v-if="refundBtn" class="btn" @click="bindRefund">{{ refundStr }}</view>
+			<view v-if="emsBtn" class="btn" @click="bindEms">查看物流</view>
+			<view v-if="doneBtn" class="btn" @click="bindDone">确认收货</view>
+			<!-- <view v-if="evaluateBtn" class="btn" @click="bindEvaluate">
+				{{evaluateStr}}
+			</view> -->
+		</view>
+	</view>
+</template>
+
+<script>
+import order from '../../../common/order.js';
+import util from '../../../common/util.js';
+import uniOrderCountdown from '../../../components/uni-order-countdown.vue';
+import robbyImageUpload from '../../../components/robby-image-upload/robby-image-upload.vue';
+import { mapState, mapMutations } from 'vuex';
+
+export default {
+	components: {
+		uniOrderCountdown,
+		robbyImageUpload
+	},
+	computed: {
+		...mapState(['hasLogin', 'forcedLogin', 'jyyUser']),
+		allPrice: function() {
+			return (parseFloat(this.orderInfo.totalPrice) + parseFloat(this.orderInfo.expressCost)).toFixed(2);
+		},
+		delBtn: function() {
+			return this.orderInfo.orderStatus == 99;
+		},
+		cancelBtn: function() {
+			return this.orderInfo.orderStatus == 1;
+		},
+		payBtn: function() {
+			return (this.orderInfo.orderStatus == 1) & (this.orderInfo.payMode == 0);
+		},
+		waitPayBtn: function() {
+			return (this.orderInfo.orderStatus == 1) & (this.orderInfo.payMode == 2);
+		},
+		refundBtn: function() {
+			return this.orderInfo.orderStatus == 2 || this.orderInfo.orderStatus == 3;
+		},
+		refundStr: function() {
+			let str = '';
+			switch (parseInt(this.orderInfo.refundState)) {
+				case 0:
+					str = '申请退款';
+					break;
+				case 1:
+					str = '退款中';
+					break;
+				case 2:
+					str = '退款成功';
+					break;
+				case 3:
+					str = '退款失败';
+			}
+			return str;
+		},
+		emsBtn: function() {
+			return this.orderInfo.orderStatus == 3 || this.orderInfo.orderStatus == 4;
+		},
+		doneBtn: function() {
+			return this.orderInfo.orderStatus == 3;
+		},
+		evaluateBtn: function() {
+			return this.orderInfo.orderStatus == 4;
+		},
+		evaluateStr: function() {
+			let str = '';
+			switch (parseInt(this.orderInfo.evaluateState)) {
+				case 0:
+					str = '立即评价';
+					break;
+				case 1:
+					str = '查看评价';
+					break;
+			}
+			return str;
+		},
+		orderStatus: function() {
+			let str = '';
+			switch (parseInt(this.orderInfo.orderStatus)) {
+				case 1:
+					str = '待付款';
+					break;
+				case 2:
+					str = '已支付';
+					break;
+				case 3:
+					str = '已发货';
+					break;
+				case 4:
+					str = '交易成功';
+					break;
+				case 99:
+					str = '订单取消';
+					break;
+			}
+			return str;
+		}
+	},
+	methods: {
+		setClipboardData(val) {
+			uni.setClipboardData({
+				data: val,
+				success() {
+					uni.showToast({
+						title: '复制成功',
+						icon: 'none'
+					});
+				}
+			});
+		},
+		bindDone(e) {
+			order.done(this.webUrl, this.orderInfo, this.user);
+		},
+		bindDel() {
+			order.del(this.webUrl, this.orderInfo, this.user.id);
+		},
+		bindCancel(e) {
+			order.cancel(this.webUrl, this.orderInfo, this.user.id);
+		},
+		bindPay(e) {
+			order.pay(this.orderInfo);
+		},
+		bindRefund(e) {
+			order.refund(this.orderInfo);
+		},
+		bindEms(e) {
+			order.ems(this.orderInfo);
+		},
+		bindEvaluate(e) {
+			order.evaluate(this.orderInfo);
+		},
+		init() {
+			this.getData();
+		},
+		deleteImage: function(e) {
+			let imageData2 = [];
+			if (e.allImages.length > 0) {
+				for (let i = 0; i < e.allImages.length; i++) {
+					imageData2.push({ pic: e.allImages[i] });
+				}
+			}
+			uni.request({
+				url: this.webUrl + 'OrderPayBankPic',
+				method: 'POST',
+				data: {
+					orderNo: this.orderInfo.orderNo,
+					userid: this.user.id,
+					pic: JSON.stringify(imageData2)
+				},
+				header: {
+					'content-type': 'application/x-www-form-urlencoded'
+				},
+				success: res => {
+					if (res.data.result.isSuccess) {
+						uni.showToast({
+							title: res.data.result.resultInfo,
+							icon: 'none'
+						});
+					}
+				},
+				fail: () => {},
+				complete: () => {}
+			});
+		},
+		addImage: function(e) {
+			let imageData2 = [];
+			if (e.allImages.length > 0) {
+				for (let i = 0; i < e.allImages.length; i++) {
+					imageData2.push({ pic: e.allImages[i] });
+				}
+				uni.request({
+					url: this.webUrl + 'OrderPayBankPic',
+					method: 'POST',
+					data: {
+						orderNo: this.orderInfo.orderNo,
+						userid: this.user.id,
+						pic: JSON.stringify(imageData2)
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						if (res.data.result.isSuccess) {
+							uni.showToast({
+								title: res.data.result.resultInfo,
+								icon: 'none'
+							});
+						}
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			}
+		},
+		getData() {
+			uni.showLoading({
+				title: '加载中'
+			});
+			uni.request({
+				url: this.webUrl + 'GetOrderInfo',
+				method: 'POST',
+				data: {
+					orderNo: this.orderNo,
+					userId: this.user.id
+				},
+				header: {
+					'content-type': 'application/x-www-form-urlencoded'
+				},
+				success: res => {
+					uni.hideLoading();
+					if (res.data.result.isSuccess) {
+						this.orderInfo = res.data.result.uniOrder;
+						if (this.orderInfo.payBankPic != null) {
+							let arr = JSON.parse(this.orderInfo.payBankPic);
+							for (let i = 0; i < arr.length; i++) {
+								this.imageData.push(arr[i].Pic);
+							}
+						}
+						this.payBankInfo.getMoneyPeople = this.orderInfo.payBankInfo.split(',')[0];
+						this.payBankInfo.bankName = this.orderInfo.payBankInfo.split(',')[1];
+						this.payBankInfo.bankNum = this.orderInfo.payBankInfo.split(',')[2];
+						this.payBankInfo.bankAddress = this.orderInfo.payBankInfo.split(',')[3];
+						let s = '';
+						switch (parseInt(this.orderInfo.orderStatus)) {
+							case 1:
+								s = '后自动关闭';
+								this.timer = util.dateAddDays(this.orderInfo.createDate, 1 / 96);
+								this.showTimer = true;
+								break;
+							case 2:
+								break;
+							case 3:
+								this.showTimer = true;
+								this.timer = util.dateAddDays(this.orderInfo.expressDate, 7);
+								s = '后自动确认';
+								break;
+							case 4:
+								break;
+							case 99:
+								break;
+						}
+						this.orderStr = s;
+						switch (parseInt(this.orderInfo.orderStatus)) {
+							case 1:
+								break;
+							case 2:
+								break;
+							case 3:
+								break;
+							case 4:
+								break;
+							case 99:
+								break;
+						}
+					} else {
+						uni.showToast({
+							title: res.data.result.resultInfo,
+							icon: 'none'
+						});
+					}
+				},
+				fail: () => {},
+				complete: () => {}
+			});
+		}
+	},
+	onPullDownRefresh() {
+		this.getData();
+		setTimeout(function() {
+			uni.stopPullDownRefresh();
+		}, 1000);
+	},
+	onLoad(e) {
+		if (!this.hasLogin) {
+			uni.navigateTo({
+				url: '../login/login'
+			});
+		} else {
+			this.user = JSON.parse(this.jyyUser);
+			this.orderNo = e.order.replace(/"/g, '');
+			/*let arr = JSON.parse(e.arr);
+				this.newsitems = arr[0];
+				this.one = arr[1];
+				this.two = arr[2]; */
+			this.init();
+		}
+	},
+	data() {
+		return {
+			orderStr: '关闭交易',
+			timer: '',
+			showTimer: false,
+			one: '',
+			two: '',
+			orderInfo: {},
+			user: {},
+			newsitems: [],
+			imageData: [],
+			serverUrl: this.webUrl + 'Upload',
+			show: true,
+			formData: {
+				userId: 2
+			},
+			orderNo: '',
+			payBankInfo: {
+				getMoneyPeople: '',
+				bankName: '',
+				bankNum: '',
+				bankAddress: ''
+			}
+		};
+	}
+};
+</script>
+
+<style>
+.order-items .order-specs {
+	width: auto;
+}
+.orderMsg {
+	/* font-weight: 700; */
+	color: #000000;
+}
+.orderInfo .order-line-small {
+	height: auto;
+}
+.setClipboardData {
+	margin-left: 30upx;
+	color: #ff4400;
+}
+.orderInfo .imageItem,
+.orderInfo .imageUpload {
+	width: 140upx;
+	height: 140upx;
+}
+.imageItem image, .moveImage{
+	width: 140upx!important;
+	height: 140upx!important;
+}
+</style>

+ 338 - 0
pages/user/orderList/orderList.vue

@@ -0,0 +1,338 @@
+<template>
+	<view class="uni-tab-bar">
+		<scroll-view id="tab-bar" class="uni-swiper-tab jz_orderList" scroll-x :scroll-left="scrollLeft">
+			<view v-for="(tab, index) in tabBars" :key="tab.id" :class="['swiper-tab-list', tabIndex == index ? 'active' : '']" :id="tab.id" :data-current="index" @tap="tapTab">
+				{{ tab.name }}
+			</view>
+		</scroll-view>
+		<swiper :current="tabIndex" class="swiper-box" duration="300" @change="changeTab">
+			<swiper-item v-for="(tab, index1) in newsitems" :key="index1">
+				<scroll-view class="list" scroll-y :scroll-top="scrollTop" @scrolltolower="loadMore(index1)" @scroll="scroll">
+					<block v-for="(item, index2) in tab.items" :key="index2">
+						<!-- <order-Item :popItem="newsitem" :popNewsitems="newsitems" :one="index1" :two="index2" :user="user"></order-Item> -->
+						<view v-if="item.orderStatus < 100" class="uni-flex uni-column order-items" @click="bindClick(item)">
+							<view class="uni-flex uni-row uni-flex-item order-shop-name order-boder">
+								<view class="orderNo">订单号: {{ item.orderNo }}</view>
+								<view class="uni-flex uni-flex-item order-status">
+									<text v-if="item.orderStatus == 1">待付款</text>
+									<text v-if="item.orderStatus == 2">已支付</text>
+									<text v-if="item.orderStatus == 3">已发货</text>
+									<text v-if="item.orderStatus == 4">交易成功</text>
+									<text v-if="item.orderStatus == 99">订单取消</text>
+								</view>
+							</view>
+							<view class="uni-flex uni-column orderList">
+								<view class="uni-flex uni-row order-item" v-for="(item, key) in item.items" :key="key" :class="[]">
+									<view class="uni-flex uni-flex-item pic item-padding"><image mode="widthFix" :src="item.pic"></image></view>
+									<view class="uni-flex uni-column uni-flex-item3 item-padding" style="margin-top: -10upx;">
+										<text class="uni-text order-title">{{ item.title }}</text>
+										<text class="uni-text order-specs">{{ item.productSpecsStr }}</text>
+										<text class="uni-text order-specs">小计</text>
+									</view>
+									<view class="uni-flex uni-column uni-flex-item item-padding" style="margin-top: -16upx;">
+										<text class="uni-text price-red">¥{{ item.prices }}</text>
+										<text class="uni-text" style="padding-left: 10upx;">x{{ item.amount }}</text>
+										<text class="uni-text price-red">¥{{ item.totalPrice }}</text>
+									</view>
+								</view>
+							</view>
+							
+							<view class="uni-flex order-line item-padding ">
+								<text class="allCount">共{{ item.orderItemCount }}件商品</text>
+								合计:
+								<text class="price-red allPrice">¥{{ item.actualPayment }}</text>
+								(含运费:
+								<text class="price-red">¥{{ item.expressCost }}</text>
+								)
+							</view>
+							<view class="uni-flex order-line item-padding order-boder">{{ item.createDate }}</view>
+							<view v-if="item.sales > 0" class="uni-flex uni-row order-line item-padding order-boder order-status">{{ item.groupStatus }}</view>
+							<view class="uni-flex order-line item-padding order-btn">
+								<view v-if="item.orderStatus == 99" class="btn" @click.stop="bindDel(item)">删除订单</view>
+								<view v-if="item.orderStatus == 1" class="btn" @click.stop="bindCancel(item)">取消订单</view>
+								<view v-if="(item.orderStatus == 1) & (item.payMode == 0)" class="btn" @click.stop="bindPay(item)">付款</view>
+								<view v-if="(item.orderStatus == 1) & (item.payMode == 2)" class="btn" @click.stop="bindClick(item)">等待汇款</view>
+								<view v-if="item.orderStatus == 2" class="btn" @click.stop="bindClick(item)">等待发货</view>
+								<view v-if="refundBtn" class="btn" @click.stop="bindRefund(item)">
+									<text v-if="item.refundState == 0">申请退款</text>
+									<text v-if="item.refundState == 1">退款中</text>
+									<text v-if="item.refundState == 2">退款成功</text>
+									<text v-if="item.refundState == 3">退款失败</text>
+								</view>
+								<view v-if="item.orderStatus == 3 || item.orderStatus == 4" class="btn" @click.stop="bindEms(item)">查看物流</view>
+								<view v-if="item.orderStatus == 3" class="btn" @click.stop="bindDone(item)">确认收货</view>
+								<!-- <view v-if="item.orderStatus == 4" class="btn" @click.stop="bindEvaluate(item)">
+									<text v-if="item.evaluateState==0">立即评价</text>
+									<text v-if="item.evaluateState==1">查看评价</text>
+								</view> -->
+							</view>
+						</view>
+					</block>
+					<view class="uni-tab-bar-loading"><uni-load-more :loadingType="tab.loadingType" :contentText="loadingText"></uni-load-more></view>
+				</scroll-view>
+			</swiper-item>
+		</swiper>
+		<backTop :src="backTop.src" @setScrollTop="setScrollTop" tab="true" :scrollTop="backTop.scrollTop"></backTop>
+	</view>
+</template>
+<script>
+import { mapState, mapMutations } from 'vuex';
+
+import orderItem from '@/components/tab-nvue/orderItem.vue';
+import uniLoadMore from '@/components/uni-load-more.vue';
+import backTop from '@/components/uni-top.vue';
+import order from '../../../common/order.js';
+export default {
+	computed: {
+		...mapState(['hasLogin', 'forcedLogin', 'jyyUser'])
+	},
+	components: {
+		orderItem,
+		uniLoadMore,
+		backTop
+	},
+	data() {
+		return {
+			backTop: {
+				src: '../../../static/top.png',
+				scrollTop: 0
+			},
+			scrollTop: 0,
+			oldScrollTop: 0,
+			loadingText: {
+				contentdown: '上拉显示更多',
+				contentrefresh: '正在加载...',
+				contentnomore: '没有更多数据了'
+			},
+			scrollLeft: 0,
+			isClickChange: false,
+			tabIndex: 0,
+			user: {},
+			newsitems: [
+				{
+					loadingType: 0,
+					pageIndex: 1,
+					items: []
+				},
+				{
+					loadingType: 0,
+					pageIndex: 1,
+					items: []
+				},
+				{
+					loadingType: 0,
+					pageIndex: 1,
+					items: []
+				},
+				{
+					loadingType: 0,
+					pageIndex: 1,
+					items: []
+				},
+				{
+					loadingType: 0,
+					pageIndex: 1,
+					items: []
+				}
+			],
+			tabBars: [
+				{
+					name: '全部',
+					id: 'all'
+				},
+				{
+					name: '待付款',
+					id: 'pay'
+				},
+				{
+					name: '待发货',
+					id: 'send'
+				},
+				{
+					name: '待收货',
+					id: 'wait'
+				},
+				{
+					name: '退款/售后',
+					id: 'service'
+				}
+			]
+		};
+	},
+	onLoad(e) {
+		if (!this.hasLogin) {
+			uni.navigateTo({
+				url: '../login/login'
+			});
+		} else {
+			this.tabIndex = e.tab;
+			this.user = JSON.parse(this.jyyUser);
+			this.getData(this.tabIndex);
+		}
+	},
+	methods: {
+		bindDone(e) {
+			order.done(this.webUrl, e, this.user);
+		},
+		bindDel(e) {
+			order.del(this.webUrl, e, this.user.id);
+		},
+		bindCancel(e) {
+			order.cancel(this.webUrl, e, this.user.id);
+		},
+		bindClick(e) {
+			order.view(e);
+		},
+		bindPay(e) {
+			order.pay(e);
+		},
+		bindRefund(e) {
+			order.refund(e);
+		},
+		bindEms(e) {
+			order.ems(e);
+		},
+		bindEvaluate(e) {
+			order.evaluate(e);
+		},
+		loadMore(e) {
+			setTimeout(() => {
+				this.addData(e);
+			}, 1200);
+		},
+		setScrollTop() {
+			this.scrollTop = this.oldScrollTop;
+			this.$nextTick(function() {
+				this.scrollTop = 0;
+			});
+			this.backTop.scrollTop = 0;
+		},
+		noRepeat(arr) {
+			var i,
+				j,
+				len = arr.length;
+			for (i = 0; i < len; i++) {
+				for (j = i + 1; j < len; j++) {
+					if (arr[i].orderNo == arr[j].orderNo) {
+						arr.splice(j, 1);
+						len--;
+						j--;
+					}
+				}
+			}
+			return arr;
+		},
+		scroll(e) {
+			this.backTop.scrollTop = e.detail.scrollTop;
+			this.oldScrollTop = e.detail.scrollTop;
+		},
+		addData(e) {
+			this.getData(e);
+		},
+		async changeTab(e) {
+			if (this.newsitems[e.target.current].items.length == 0) {
+				this.getData(e.target.current);
+			}
+			let index = e.target.current;
+			if (this.isClickChange) {
+				this.tabIndex = index;
+				this.isClickChange = false;
+				return;
+			}
+			let tabBar = await this.getElSize('tab-bar'),
+				tabBarScrollLeft = tabBar.scrollLeft;
+			let width = 0;
+
+			for (let i = 0; i < index; i++) {
+				let result = await this.getElSize(this.tabBars[i].id);
+				width += result.width;
+			}
+			let winWidth = uni.getSystemInfoSync().windowWidth,
+				nowElement = await this.getElSize(this.tabBars[index].id),
+				nowWidth = nowElement.width;
+			if (width + nowWidth - tabBarScrollLeft > winWidth) {
+				this.scrollLeft = width + nowWidth - winWidth;
+			}
+			if (width < tabBarScrollLeft) {
+				this.scrollLeft = width;
+			}
+			this.isClickChange = false;
+			this.tabIndex = index; //一旦访问data就会出问题
+		},
+		getData(e) {
+			if (this.newsitems[e].loadingType == 2) {
+				return;
+			}
+			this.newsitems[e].loadingType = 1;
+			uni.request({
+				url: this.webUrl + 'OrderList',
+				method: 'POST',
+				data: {
+					pageIndex: this.newsitems[e].pageIndex,
+					userid: this.user.id,
+					status: e
+				},
+				header: {
+					'content-type': 'application/x-www-form-urlencoded'
+				},
+				success: res => {
+					if (res.data.result.uniOrderList.length > 0) {
+						this.newsitems[e].items = this.newsitems[e].items.concat(res.data.result.uniOrderList);
+						this.newsitems[e].items = this.noRepeat(this.newsitems[e].items);
+					} else {
+						this.newsitems[e].loadingType = 2;
+						return;
+					}
+					if (this.newsitems[e].pageIndex == parseInt(res.data.result.pages)) {
+						this.newsitems[e].loadingType = 2;
+						return;
+					} else {
+						this.newsitems[e].loadingType = 0;
+					}
+					this.newsitems[e].pageIndex++;
+				},
+				fail: () => {},
+				complete: () => {}
+			});
+		},
+		getElSize(id) {
+			//得到元素的size
+			return new Promise((res, rej) => {
+				uni.createSelectorQuery()
+					.select('#' + id)
+					.fields(
+						{
+							size: true,
+							scrollOffset: true
+						},
+						data => {
+							res(data);
+						}
+					)
+					.exec();
+			});
+		},
+		async tapTab(e) {
+			//点击tab-bar
+			if (this.tabIndex === e.target.dataset.current) {
+				return false;
+			} else {
+				let tabBar = await this.getElSize('tab-bar'),
+					tabBarScrollLeft = tabBar.scrollLeft; //点击的时候记录并设置scrollLeft
+				this.scrollLeft = tabBarScrollLeft;
+				this.isClickChange = true;
+				this.tabIndex = e.target.dataset.current;
+			}
+		}
+	}
+};
+</script>
+
+<style>
+.uni-swiper-tab {
+	background: #ffffff;
+}
+.order-items .order-specs {
+	width: auto;
+}
+</style>

+ 151 - 0
pages/user/orderPay/orderPay.vue

@@ -0,0 +1,151 @@
+<template>
+	<view class="uni-flex uni-column cart order">
+		<view class="uni-flex uni-column uni-flex-item" style="margin-bottom: 80upx;">
+
+			<view class="uni-flex uni-column order-address">
+				<view class="uni-flex uni-column order-address-box">
+					<view class="uni-flex uni-flex-item uni-row">收货信息</view>
+					<view class="uni-flex uni-flex-item uni-row">
+						xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+					</view>
+				</view>				
+				<view class="uni-flex uni-flex-item order-address-line">
+					<image src="../../../static/cart/line.png" mode="widthFix"></image>
+				</view>
+			</view>
+
+			<!-- 列表循环 -->
+			<view class="uni-flex uni-column uni-flex-item  cart-list" v-for="(item,m) in json" :key="item">
+				<view class="uni-flex uni-column item-shop ">
+					<!-- 商家 -->
+					<view class="uni-flex uni-row  order-line">
+						{{item.sj}}
+					</view>
+					<!-- 图片产品名称价格数量展示 -->
+					<view class="uni-flex uni-row  order-item" v-for="pl in json[m].items" :key="pl">
+						<!-- 商品图片 -->
+						<view class="uni-flex uni-flex-item item-padding item-img">
+							<image mode="widthFix" :src="pl.img"></image>
+						</view>
+						<view class="uni-flex uni-column item-padding uni-flex-item3">
+							<view class="uni-flex uni-flex-item">
+								{{pl.cp}}
+							</view>
+							<view class="uni-flex uni-flex-item">
+								<view class="uni-flex text cart-attr" v-for="(attr,n) in pl.attr" :key="attr">
+									{{attr.name}}:{{attr.value}}
+								</view>
+							</view>
+							<view class="uni-flex uni-row uni-flex-item">
+								<view class="uni-flex uni-flex-item5">¥{{pl.jg}}</view>
+								<view class="uni-flex uni-flex-item ">x{{pl.sl}}</view>
+							</view>
+						</view>
+					</view>
+
+					<view class="uni-flex uni-row  order-line">
+						订单编号:快递
+					</view>
+					<view class="uni-flex uni-row  order-line">
+						买家留言:{{item.message}}
+					</view>
+					<view class="uni-flex uni-row  order-line">
+						配送方式:快递{{item.expressCost}}
+					</view>
+					<view class="uni-flex uni-row  order-line">
+						支付金额:{{item.totalPrice}}
+					</view>
+				</view>
+			</view>
+
+			<view class="uni-flex uni-flex-item">
+				<radio-group class="uni-flex-item" @change="radioChange">
+					<label class="uni-list-cell uni-list-cell-pd">
+						<view>
+							<radio :value="1" checked="true" />
+						</view>
+						<view>金YY</view>
+					</label>
+					<label class="uni-list-cell uni-list-cell-pd">
+						<view>
+							<radio :value="1" />
+						</view>
+						<view>支付宝</view>
+					</label>
+					<label class="uni-list-cell uni-list-cell-pd">
+						<view>
+							<radio :value="1" />
+						</view>
+						<view>微信</view>
+					</label>
+				</radio-group>
+			</view>
+		</view>
+
+
+		<view class="uni-flex uni-row footer">
+			<view class="uni-flex-item3 uni-flex">付款金额: ¥{{allPrice}}</view>
+			<view class="uni-flex uni-flex-item justify-flex-end">
+				<view class="uni-flex uni-flex-item btn" @click='pay()'>立即支付</view>
+			</view>		
+		</view>
+
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+
+	import cart from '../../../common/cart.js';
+
+	export default {
+		computed: {
+			...mapState(['hasLogin', 'forcedLogin', 'jyyUser'])
+		},
+		data() {
+			return {
+				allPrice: '0.00',
+				allNum: 0,
+				json: [],
+				user: {},
+			};
+		},
+		onLoad(e) {
+			if (!this.hasLogin) {
+				uni.navigateTo({
+					url: '../login/login',
+				});
+			} else {
+				this.user = JSON.parse(this.jyyUser);
+				this.json = cart.getOrder();
+				this.price();
+				if (this.debug) {
+					console.log(this.json);
+				}
+			}
+		},
+		methods: {
+			price() {
+				let all = 0;
+				for (let j = 0; j < this.json.length; j++) {
+					all += parseFloat(this.json[j].expressCost) + parseFloat(this.json[j].totalPrice);
+				}
+				this.allPrice = all.toFixed(2); //返回数据
+			},
+			pay() {
+				uni.showToast({
+					icon: "none",
+					title: "未完成"
+				})
+			}
+		}
+	}
+</script>
+
+<style>
+
+
+</style>

+ 236 - 0
pages/user/orderRefund/orderRefund.vue

@@ -0,0 +1,236 @@
+<template>
+	<view class="uni-flex uni-column  orderInfo ">
+		<view class="uni-flex uni-column order-items">
+			<view class="uni-flex uni-row uni-flex-item order-shop-name order-boder">
+				{{orderInfo.shopName}}
+			</view>
+			<view class="uni-flex uni-row order-item" v-for="(item,key) in orderInfo.items" :key="key">
+				<view class="uni-flex uni-flex-item pic item-padding">
+					<image mode="widthFix" :src="item.pic"></image>
+				</view>
+				<view class="uni-flex uni-column uni-flex-item3 item-padding">
+					<text class="uni-text order-title">{{item.title}}</text>
+					<text class="uni-text order-specs">{{item.productSpecsStr}}</text>
+				</view>
+				<view class="uni-flex uni-column uni-flex-item item-padding">
+					<text class="uni-text">¥{{item.price}}</text>
+					<text class="uni-text">x{{item.amount}}</text>
+				</view>
+			</view>
+			<view class="uni-flex order-line item-padding order-boder order-line-small">
+				<view class="uni-flex uni-flex-item">商品总价</view>
+				<view class="uni-flex uni-flex-item justify-flex-end">¥{{orderInfo.totalPrice}}</view>
+			</view>
+			<view class="uni-flex order-line item-padding order-boder order-line-small">
+				<view class="uni-flex uni-flex-item">运费(快递)</view>
+				<view class="uni-flex uni-flex-item justify-flex-end">¥{{orderInfo.expressCost}}</view>
+			</view>
+			<view class="uni-flex order-line item-padding totalPrice ">
+				<view class="uni-flex uni-flex-item">订单总价</view>
+				<view class="uni-flex uni-flex-item justify-flex-end color-f40">¥{{totalPrice}}</view>
+			</view>
+		</view>
+
+		<view class="uni-flex uni-column oderinfo-other">
+			<view class="uni-flex order-line-small item-padding order-boder">
+				订单编号:{{orderInfo.orderNo}}
+			</view>
+			<view class="uni-flex order-line-small item-padding order-boder">
+				创建时间:{{orderInfo.createDate}}
+			</view>
+		</view>
+
+		<view v-if="orderInfo.refundState == 0" class="uni-flex uni-flex-item order oderinfo-other">
+			<view class="uni-flex uni-flex-item uni-row order-address-box">
+				<view class="uni-flex order-address-ico">
+					<image src="../../../static/cart/location.png" mode="widthFix"></image>
+				</view>
+				<view v-if="orderInfo.orderStatus==2" class="uni-flex uni-column uni-flex-item4" @click="showPopup">
+					<view class="uni-flex uni-flex-item">仅退款</view>
+					<view class="uni-flex uni-flex-item">未收到货或商家协商同意前提下</view>
+				</view>
+				<view v-if="orderInfo.orderStatus==3" class="uni-flex uni-column uni-flex-item4" @click="showPopup">
+					<view class="uni-flex uni-flex-item">退款退货</view>
+					<view class="uni-flex uni-flex-item">已收到货,需要退款退货</view>
+				</view>
+			</view>
+		</view>
+
+		<view class="uni-flex uni-column order-refundLogs">
+			<view :class="refundLog.Mode=='1'? 'buyer': 'saler'" class="uni-flex uni-column " v-for="refundLog in refundLogs"
+			 :key="refundLog">
+				<view class="uni-flex uni-flex-item uni-row order-refundLog-title">
+					<view class="uni-flex uni-flex-item4">{{refundLog.Name}}</view>
+					<view class="uni-flex uni-flex-item1 order-refundLog-date">{{refundLog.CreateDate}}</view>
+				</view>
+				<view class="uni-flex uni-column order-refundLog">
+					<view class="uni-flex uni-flex-item uni-row">
+						{{refundLog.Step}}
+					</view>
+					<view class="uni-flex uni-flex-item uni-row order-refundLog-text">
+						{{refundLog.Text}}
+					</view>
+				</view>
+
+			</view>
+		</view>
+		<view class="uni-flex space"></view>
+		<refund-popup :show="hasShowPop" :user="user" :refunds="refunds" :express="express" :orderInfo="orderInfo" v-on:getData="getData"
+		 v-on:hidePopup="hidePopup"></refund-popup>
+
+		<view v-if="orderInfo.refundState > 0" class="uni-flex uni-row footer justify-flex-end">
+			<view v-if="orderInfo.refundState==1" class="btn">
+				等待处理
+			</view>
+			<view v-if="orderInfo.refundState==2" class="btn">
+				成功退款
+			</view>
+			<view v-if="orderInfo.refundState==3" class="btn" @click="reapply">
+				重新申请
+			</view>
+		</view>
+
+	</view>
+</template>
+
+<script>
+	import order from '../../../common/order.js';
+	import refundPopup from '../../../components/uni-popup-refund.vue';
+
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+
+	export default {
+		components: {
+			refundPopup
+		},
+		computed: {
+			...mapState(['hasLogin', 'forcedLogin', 'jyyUser']),
+			totalPrice: function() {
+				return (parseFloat(this.orderInfo.totalPrice) + parseFloat(this.orderInfo.expressCost)).toFixed(2);
+			}
+		},
+		methods: {
+			init() {
+				switch (parseInt(this.orderInfo.orderStatus)) {
+					case 2:
+						this.show = true;
+						break
+					case 3:
+						this.show = true;
+						break
+				}
+				this.refundLogs = JSON.parse(this.orderInfo.refundLog);
+			},
+			reapply() {
+				order.reapply(this.webUrl, this.orderInfo, this.user);
+				this.getData();
+			},
+			getRefunds() {
+				uni.request({
+					url: this.webUrl + 'OrderRefund',
+					method: 'POST',
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						this.refunds = res.data.result.uniOrderRefundList;
+						this.express = res.data.result.uniExpress;
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			},
+			hidePopup() {
+				this.hasShowPop = false;
+			},
+			showPopup() {
+				this.hasShowPop = true;
+			},
+			getData() {
+				uni.showLoading({
+					title: "加载中"
+				})
+				uni.request({
+					url: this.webUrl + 'GetOrderInfo',
+					method: 'POST',
+					data: {
+						orderNo: this.orderNo,
+						userId: this.user.id
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						uni.hideLoading();
+						if (res.data.result.isSuccess) {
+							this.orderInfo = res.data.result.uniOrder;
+							this.init();
+						}
+						else{
+							uni.showToast({
+								title:res.data.result.resultInfo,
+								icon:"none"
+							})
+						}
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			}
+
+		},
+		onPullDownRefresh() {
+			this.getData();
+			setTimeout(function() {
+				uni.stopPullDownRefresh();
+			}, 1000);
+		},
+		onLoad(e) {
+			if (!this.hasLogin) {
+				uni.navigateTo({
+					url: '../login/login',
+				});
+			} else {
+				this.user = JSON.parse(this.jyyUser);
+				console.log(e.order)
+				this.orderNo = e.order.replace(/"/g,"");
+				this.getRefunds();
+				this.getData();
+			}
+		},		
+		data() {
+			return {
+				hasShowPop: false,
+				orderInfo: {},
+				user: {},
+				refunds: [],
+				refundLogs: [],
+				express: [],
+				orderNo: ''
+			};
+		}
+	}
+</script>
+
+
+<style>
+	.order-address-ico { 
+		margin-top: 35upx;
+		margin-right: 10upx;
+		width: 40upx;
+		height: 40upx;
+	}
+	
+	.order-address-ico image {
+		width: 40upx;
+		height: 40upx;
+	}
+	
+	.orderInfo .order-refundLogs {
+		padding: 0;
+		margin: 16upx;
+	}
+</style>

+ 183 - 0
pages/user/orderSuccess/orderSuccess.vue

@@ -0,0 +1,183 @@
+<template>
+	<view class="uni-flex paySuccess jz_paySuccess uni-column jz_merchant">
+
+		<view v-if="order.payMode==2" class="paySuccess_header uni-flex uni-column">
+			<view class="payok uni-flex justify-align-center">提交成功</view>
+			<view class="payarrive  uni-flex justify-align-center">转账请备注订单识别码:<text style="font-size: 28upx; color: #FF0000;">{{order.payBankCode}}</text></view>
+			<view class="paybtns  uni-flex justify-align-center uni-row">
+				<view @click="view()" class="lookOrder uni-flex justify-align-center">查看订单</view>
+				<view @click="home()" class="goHome uni-flex justify-align-center">继续逛</view>
+			</view>
+		</view>
+
+		<view v-else class="paySuccess_header uni-flex uni-column">
+			<view class="payok uni-flex justify-align-center">付款成功</view>
+			<view class="paybtns  uni-flex justify-align-center uni-row">
+				<view @click="view()" class="lookOrder uni-flex justify-align-center">查看订单</view>
+				<view @click="home()" class="goHome uni-flex justify-align-center">继续逛</view>
+
+			</view>
+		</view>
+
+		<!-- <view class="paySuccess_footer uni-flex uni-column">
+			<view class="payname uni-flex ">
+				<view class="paynick commonfont">{{address[0]}}</view>
+				<view class="payphone commonfont">{{address[1]}}</view>
+			</view>
+			<view class="payaddress commonfont">{{address[2]}}{{address[3]}}{{address[4]}}{{address[5]}}</view>
+			<view class="payprice uni-flex">
+				<view class="commonfont">实付</view>
+				<view class="commonfont">¥{{order.totalPrice}}</view>
+			</view>
+		</view> -->
+			<!-- <recommend :items="items" :src="src"></recommend> -->
+		<view class="recommend uni-flex uni-column">
+			<view class="push_product_title uni-flex justify-align-center">
+				<image :src="src"></image>
+				<view class="push_title">为你推荐</view>
+			</view>
+			<view class="uni-flex lists-wrap">
+				<view class="uni-flex uni-row list">
+					<view class="uni-product-list" id="list">
+						<view class="uni-product" v-for="(item, key) in items" :key="key" @click="goProduct(item)">
+							<view class="image-view uni-flex justify-align-center">
+								<!-- <image :src="item.pic"></image> -->
+								<image class="image" :class="{lazy:!item.display}" :id="'lazy'+ key" :data-index="0" @load="imageOnLoad(item)"
+								 :src="item.display?item.pic:''" />
+								<view class="loadbox" :class="{loaded:item.loaded}">
+									<view class="load"></view>
+								</view>
+							</view>
+							<view class="uni-flex uni-column uni-product-title-wrap">
+								<view class="uni-product-title uni-flex-item">{{ item.title }}</view>
+								<view class="product_details uni-flex uni-row">
+									{{item.profile}}
+								</view>
+								<view class="uni-flex-item prices uni-flex">
+									<view class="prices-salePrice">¥{{ item.salePrice }}</view>
+									<view class="prices-cart">
+										<image src="../../../static/category/cart.png"></image>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	import util from '../../../common/util.js';
+	export default {
+		computed: {
+			...mapState(['hasLogin', 'forcedLogin', 'jyyUser'])
+		},
+		components: {
+			
+		},
+		methods: {
+			home() {
+				uni.switchTab({
+					url: '../../home/home'
+				});
+			},
+			view() {
+				uni.navigateTo({
+					url: '../orderInfo/orderInfo?order=' + JSON.stringify(this.order.orderNo),
+				});
+			},
+			getItems() {
+				uni.request({
+					url: this.webUrl + 'Recommend',
+					method: 'POST',
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						this.items = res.data.result.resultInfo;
+						setTimeout(()=>{
+							util.loads(this.items, 'list', this.windowHeight);
+						},300)
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			},
+			imageOnLoad(e) {
+				e.loaded = true;
+			},
+			goProduct(e) {
+				uni.navigateTo({
+					url: '../../merchant/product/product?id=' + e.id
+				})
+			},
+			getDate() {
+				uni.showLoading({
+					title: "加载中"
+				})
+				uni.request({
+					url: this.webUrl + 'GetOrderInfo',
+					method: 'POST',
+					data: {
+						orderNo: this.no,
+						userid: this.user.id
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						uni.hideLoading();
+						if (res.data.result.isSuccess) {
+							this.order = res.data.result.uniOrder;
+							let add = this.order.express;
+							this.address = add.split(" ");
+						} else {
+							uni.showToast({
+								title: res.data.result.resultInfo,
+								icon: "none"
+							})
+						}
+
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			}
+		},
+		onLoad(e) {
+			if (!this.hasLogin) {
+				uni.navigateTo({
+					url: '../login/login'
+				});
+			} else {
+				this.windowHeight = uni.getSystemInfoSync().windowHeight;
+				this.user = JSON.parse(this.jyyUser);
+				this.no = e.no;
+				this.getDate();
+				this.getItems();
+			}
+		},
+		onPageScroll() {
+			util.loads(this.items, 'list', this.windowHeight);
+		},
+		data() {
+			return {
+				user: {},
+				order: {},
+				address: [],
+				items: [],
+				src: '../../../static/pay04.png',
+				windowHeight: 0
+			};
+		}
+	};
+</script>
+
+<style></style>

+ 303 - 0
pages/user/pay/pay.vue

@@ -0,0 +1,303 @@
+<template>
+	<view class="uni-flex uni-column cart jz_order order">
+		<view class="uni-flex uni-column uni-flex-item">
+			<!-- 列表循环 -->
+			<view class="uni-flex uni-column uni-flex-item  cart-list" v-for="(item,m) in json" :key="item">
+				<view class="uni-flex uni-column order-address">
+					<view class=" order-address-box">
+						<view class="">收货信息</view>
+						<view class="expressMsg fontWnormal">
+							{{item.express}}
+						</view>
+					</view>
+					<view class="uni-flex uni-flex-item order-address-line mg">
+						<image src="../../../static/cart/line.png"></image>
+					</view>
+				</view>
+				<view class="uni-flex uni-column item-shop ">
+					<!-- 商家 -->
+					<view class="uni-flex uni-row  order-line">
+						{{item.sj}}
+					</view>
+					<!-- 图片产品名称价格数量展示 -->
+					<view class="uni-flex uni-row  order-item" v-for="pl in json[m].items" :key="pl">
+						<!-- 商品图片 -->
+						<view class="uni-flex uni-flex-item item-padding item-img">
+							<image mode="widthFix" :src="pl.img"></image>
+						</view>
+						<view class="uni-flex uni-column item-padding uni-flex-item3">
+							<view class="uni-flex uni-flex-item">
+								{{pl.cp}}
+							</view>
+							<view class="uni-flex uni-flex-item">
+								<view class="uni-flex text cart-attr" v-for="(attr,n) in pl.attr" :key="attr">
+									{{attr.name}}:{{attr.value}}
+								</view>
+							</view>
+							<view class="uni-flex uni-row uni-flex-item">
+								<view class="uni-flex uni-flex-item5 price-red">¥{{pl.jg}}</view>
+								<view class="uni-flex uni-flex-item ">x{{pl.sl}}</view>
+							</view>
+						</view>
+					</view>
+
+					<view class="uni-flex uni-row  order-line">
+						订单编号:<text class="fontWnormal">{{item.no}}</text>
+					</view>
+					<view class="uni-flex uni-row  order-line">
+						配送费用:<text class="price-red">¥{{item.expressCost}}</text>
+					</view>
+					<view class="uni-flex uni-row  order-line">
+						支付金额:<text class="price-red">¥{{allprice}}</text>
+					</view>
+					<view class="uni-flex uni-row  order-line usermsg">
+						<view class="usermsg-lf">买家留言:</view>
+						<view class="fontWnormal usermsg-rt">{{item.message}}</view>
+					</view>
+				</view>
+			</view>
+		</view>
+
+		<view class="uni-btn-v uni-common-mt">
+			<button type="primary" @click="weixinPay" :loading="loading">微信支付</button>
+		</view>
+
+
+		<view class="uni-flex uni-row footer">
+			<!-- <view class="uni-flex-item uni-flex">付款金额: <text class="price-red">¥{{allprice}}</text></view>
+			<view class="buttons">
+				<view class="button" @click='home()'>再逛逛</view>
+			</view> -->
+			<view class="uni-flex uni-flex-item">付款金额:  <text class="price-red">¥{{allPrice}}</text></view>
+			<view class="uni-flex ">
+				<view class="uni-flex uni-flex-item btn" @click='home()'>再逛逛</view>
+			</view>
+		</view>
+
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+
+
+	import cart from '../../../common/cart.js';
+	import smsPopup from '../../../components/uni-popup-sms.vue';
+
+	export default {
+		components: {
+			smsPopup
+		},
+		computed: {
+			...mapState(['hasLogin', 'forcedLogin', 'jyyUser']),
+			allprice: function() {
+				let allprice = 0;
+				for (let j = 0; j < this.json.length; j++) {
+					let arr = this.json[j].items;
+					for (let i = 0; i < arr.length; i++) {
+						allprice += arr[i].jg * arr[i].sl;
+					}
+					allprice = allprice + parseFloat(this.json[j].expressCost)
+				}
+				return allprice.toFixed(2);
+			}
+		},
+		data() {
+			return {
+				allPrice: "0.00",
+				orderNo: "",
+				loading: false,
+				json: [],
+				user: {},
+			};
+		},
+		onLoad(e) {
+			if (!this.hasLogin) {
+				uni.navigateTo({
+					url: '../login/login',
+				});
+			} else {
+				this.user = JSON.parse(this.jyyUser);
+				this.orderNo = e.orderNo;
+				this.init();
+			}
+		},
+		onPullDownRefresh() {
+			this.init();
+			setTimeout(function() {
+				uni.stopPullDownRefresh();
+			}, 1000);
+		},
+		methods: {
+			weixinPay() {
+				console.log("发起支付");
+				this.loading = true;
+				uni.login({
+					success: (e) => {
+						console.log("login success", e);
+						uni.request({
+							url: this.webUrl + 'Payment',
+							method: 'POST',
+							data: {
+								data: JSON.stringify(this.json),
+								user: JSON.stringify(this.user)
+							},
+							header: {
+								'content-type': 'application/x-www-form-urlencoded'
+							},
+							success: (res) => {
+								if (res.statusCode !== 200) {
+									uni.showModal({
+										content: "支付失败,请重试!",
+										showCancel: false
+									});
+									return;
+								}
+								if (res.data.ret === 0) {
+									let paymentData = JSON.parse(res.data.payment);
+									if (paymentData.resultcode == "SUCCESS") {
+										uni.requestPayment({
+											timeStamp: paymentData.timestamp.toString(),
+											nonceStr: paymentData.noncestr,
+											package: paymentData.package,
+											signType: 'MD5',
+											paySign: paymentData.sign,
+											success: (res) => {
+												uni.showToast({
+													title: "支付成功!"
+												})
+												uni.navigateTo({
+													url: "../orderSuccess/orderSuccess"
+												});
+											},
+											fail: (res) => {
+												uni.showModal({
+													content: "支付失败,原因为: " + res
+														.errMsg,
+													showCancel: false
+												})
+											},
+											complete: () => {
+												this.loading = false;
+											}
+										})
+									} else {
+										uni.showModal({
+											content: "支付失败,原因为: " + paymentData.errcode + paymentData.errcodedes,
+											showCancel: false
+										})
+									}
+
+								} else {
+									uni.showModal({
+										content: res.data.desc,
+										showCancel: false
+									})
+								}
+							},
+							fail: (e) => {
+								this.loading = false;
+								uni.showModal({
+									content: "支付失败,原因为: " + e.errMsg,
+									showCancel: false
+								})
+							}
+						})
+					},
+					fail: (e) => {
+						this.loading = false;
+						uni.showModal({
+							content: "支付失败,原因为: " + e.errMsg,
+							showCancel: false
+						})
+					}
+				})
+			},
+			init() {
+				if (this.orderNo == undefined) {
+					this.json = cart.getOrder();
+				} else {
+					this.getData();
+				}
+				setTimeout(() => {
+					this.price();
+				}, 500)
+
+			},
+			getData() {
+				uni.showLoading({
+					title: "加载中"
+				})
+				uni.request({
+					url: this.webUrl + 'GetOrder',
+					method: 'POST',
+					data: {
+						userid: this.user.id,
+						orderNo: this.orderNo
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						uni.hideLoading();
+						this.json = [];
+						this.json.push(res.data.uniOrder);
+						let express = this.json[0].express;
+						let index = express.indexOf(" ");
+						this.mobile = express.slice(index, index + 12);
+						this.tip = this.mobile.substr(0, 3) + "******" + this.mobile.substr(10, 2);
+
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+
+			},
+			price() {
+				let all = 0;
+				for (let j = 0; j < this.json.length; j++) {
+					all = parseFloat(this.json[j].totalPrice)
+				}
+				this.allPrice = all.toFixed(2); //返回数据
+			},
+			home() {
+				uni.switchTab({
+					url: '../../home/home'
+				});
+			}
+		}
+	}
+</script>
+
+<style>
+	.order .footer .button {
+		width: 160upx;
+		height: 64upx;
+		margin: 0 8upx;
+		color: #fff;
+		line-height: 64upx;
+		background: #f40;
+		border-radius: 16px;
+		padding: 0;
+		font-size: 28upx;
+		display: inline-block;
+		text-align: center;
+	}
+
+	.mg {
+		margin-top: 10upx;
+		width: 100%;
+	}
+
+	.mg image {
+		width: 100%;
+		height: 10upx;
+	}
+
+	.expressMsg {
+		width: calc(100% - 20upx);
+	}
+</style>

+ 578 - 0
pages/user/profit/index.vue

@@ -0,0 +1,578 @@
+<template>
+	<view class="uni-flex lists jz_lists uni-column jz_myfit jz_agent  ">
+		<view class="tab-search uni-column">
+			<view class="tabList">
+				<scroll-view class="uni-flex uni-swiper-tab" scroll-x :scroll-left="scrollLeft" id="tab-bars">
+					<view v-for="(tab, i) in categorys" :key="i" class="swiper-tab-list" :id="'tab' + tab.id" :data-current="index"
+					 @click="changeTab(i, tab)">
+						<view class="productTitle-item uni-flex uni-column">
+							<image :src="tab.ico"></image>
+							<view :class="['picname', curIndex == i ? 'activeLine' : '']">{{ tab.title }}</view>
+						</view>
+					</view>
+				</scroll-view>
+				<view style="height: 10upx;background: #F4F5F6;width: 100%;"></view>
+			</view>
+			<view class="search uni-flex ">
+				<!-- :class="[sortNavfixed ? 'fixed' : '']" -->
+				<view class="uni-flex-item uni-flex search-input">
+					<input placeholder="关键词" @input="inputChange" v-model="key" :focus="isFocus" @focus="focus" @blur="blur" class="uni-flex-item" />
+					<icon v-if="isDelShow" class="icon icon-del" @click.stop="clear" type="clear" size="12"></icon>
+				</view>
+
+				<view class="searchBtn uni-flex justify-align-center" @click="search">
+					<image src="../../../static/search02.png"></image>
+					<text>搜索</text>
+				</view>
+			</view>
+		</view>
+
+		<view class="agent-product uni-flex uni-column" id="list">
+			<view class=" uni-flex uni-row uni-flex-item myfit-product" v-for="(item, key) in products" :key="key">
+				<view class="uni-flex product-img justify-align-center">
+					<image class="image" :class="{ lazy: !item.display }" :id="'lazy' + key" :data-index="0" @load="imageOnLoad(item, key)"
+					 :src="item.display ? item.pic : ''" style="left: 0;top: 0;"/>
+					<view class="loadbox" :class="{loaded:item.loaded}" style="left: 0;top: 0;">
+						<view class="load"></view>
+					</view>
+				</view>
+				<view class="uni-flex  uni-column space-between product-contents">
+					<view class="uni-flex title">{{item.title}}</view>
+					<view class="prices uni-flex uni-flex">
+						<view class="uni-flex">我的价格:{{item.costPrice}}/瓶</view>
+						<view class="uni-flex" style="margin-left: 20upx;">代理价格:{{item.salePrice}}/瓶</view>
+					</view>
+					<view class="uni-flex fen">
+						利润:<text>{{Math.round(item.salePrice*100-item.costPrice*100)/100}}</text>元
+					</view>
+				</view>
+			</view>
+		</view>
+
+		<load-more :loadingType="loadingType" :contentText="contentText"></load-more>
+		<backTop :src="backTop.src" :scrollTop="backTop.scrollTop"></backTop>
+
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+
+	import util from '../../../common/util.js';
+	import loadMore from '@/components/uni-load-more.vue';
+	import backTop from '@/components/uni-top.vue';
+	var index;
+	export default {
+		components: {
+			loadMore,
+			backTop
+		},
+		data() {
+			return {
+				loadingType: 0,
+				contentText: {
+					contentdown: "上拉显示更多",
+					contentrefresh: "正在加载...",
+					contentnomore: "没有更多数据了"
+				},
+				item: {},
+				showSlider: false,
+				sliderIndex: 0,
+				items: [{}, {}, {}],
+				user: {},
+				userid: 0,
+				active: false,
+				isDelShow: false,
+				isFocus: false,
+				sortNavfixed: false,
+				show: false,
+				windowHeight: 0,
+				type: 0,
+				cates: [{
+					css: '',
+					id: '0',
+					no: '000',
+					show: '0',
+					subs: [],
+					title: '全部'
+				}],
+				categorys: [{
+					ico: '../../../static/merchant/all.png',
+					id: '000',
+					no: '000',
+					title: '全部'
+				}],
+				category: {},
+				products: [],
+				product: {
+					ratio: 0
+				},
+				productKey: 0,
+				curIndex: 0,
+				key: '',
+				id: '000',
+				clock: 0,
+				scrollLeft: 0,
+				backTop: {
+					"src": "../../static/top.png",
+					"scrollTop": 0
+				}
+			};
+		},
+		computed: {
+			...mapState(['hasLogin', 'forcedLogin', 'jyyUser'])
+		},
+		onLoad(e) {
+			index = 1;
+			if (!this.hasLogin) {
+				uni.navigateTo({
+					url: '../login/login',
+				});
+			} else {
+				this.windowHeight = uni.getSystemInfoSync().windowHeight;
+				this.user = JSON.parse(this.jyyUser);
+				this.getCategory();
+				this.getData();
+				if (e.n > 4) {
+					setTimeout(() => {
+						this.public(e.n, e);
+					}, 200);
+				}
+			}
+		},
+		onPageScroll(e) {
+			this.backTop.scrollTop = e.scrollTop;
+			util.loads(this.products, 'list', this.windowHeight);
+			uni.createSelectorQuery()
+				.selectAll('#list')
+				.boundingClientRect(datas => {
+					this.sortNavfixed = parseInt(datas[0].top) < 78 ? true : false;
+				})
+				.exec();
+		},
+		onPullDownRefresh() {
+			this.getData();
+			setTimeout(function() {
+				uni.stopPullDownRefresh();
+			}, 1000);
+		},
+		onReachBottom() {
+			this.getData();
+		},
+		methods: {
+			setKey(e) {
+				this.sliderIndex = e;
+			},
+			hidesliderPopup() {
+				this.showSlider = false;
+			},
+			set(productId, ratio, share) {
+				uni.request({
+					url: this.webUrl + 'SetUserRatio',
+					method: 'POST',
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					data: {
+						userid: this.user.id,
+						setid: this.userid,
+						productId: productId,
+						price: share,
+						ratio: ratio.toFixed(2)
+					},
+					success: res => {
+						uni.showLoading({
+							title: res.data.result.resultInfo,
+							icon: "none"
+						});
+						setTimeout(function() {
+							uni.hideLoading();
+						}, 500);
+					},
+					fail: () => {
+						mescroll.endErr();
+					},
+					complete: () => {}
+				});
+			},
+			sliderChange(e) {
+				let index;
+				// #ifndef H5
+				index = e.currentTarget.id;
+				// #endif
+				// #ifdef H5
+				index = this.sliderIndex;
+				// #endif
+				this.products[index].share = parseInt((this.products[index].salePrice - this.products[index].costPrice) * e.detail.value /
+					100);
+				this.set(this.products[index].id, e.detail.value / 100, this.products[index].share);
+			},
+			focus() {
+				this.active = true;
+				//HM修改 增加获取焦点判断
+				if (this.key != '') {
+					this.isDelShow = true;
+				}
+			},
+			inputChange(event) {
+				var keyword = event.detail.value;
+				this.$emit('input', keyword);
+				if (this.key) {
+					this.isDelShow = true;
+				}
+			},
+			blur() {
+				this.isFocus = false;
+				if (!this.key) {
+					this.active = false;
+				}
+			},
+			clear() {
+				//HM修改 收起键盘
+				uni.hideKeyboard();
+				this.isFocus = false;
+				this.key = '';
+				this.active = false;
+				//HM修改 清空内容时候触发组件input
+				this.isDelShow = false;
+			},
+			search() {
+				index = 1;
+				this.loadingType = 0;
+				this.products = [];
+				this.getData();
+			},
+			getData() {
+				if (this.loadingType !== 0) {
+					return;
+				}
+				uni.request({
+					url: this.webUrl + 'List',
+					method: 'POST',
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					data: {
+						pageNum: index,
+						id: this.id,
+						userid: this.user.id,
+						key: this.key,
+						setid: this.userid
+					},
+					success: res => {
+						if (res.data.result.ratioProducts.length > 0) {
+							this.products = this.products.concat(res.data.result.ratioProducts);
+							setTimeout(() => {
+								util.loads(this.products, 'list', this.windowHeight);
+							}, 500)
+						} else {
+							this.loadingType = 2;
+							return;
+						}
+						if (index == parseInt(res.data.result.pages)) {
+							this.loadingType = 2;
+							return;
+						} else {
+							this.loadingType = 0;
+						}
+						index++;
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			},
+			getElSize(id) {
+				//得到元素的size
+				return new Promise((res, rej) => {
+					uni.createSelectorQuery()
+						.select('#' + id)
+						.fields({
+								size: true,
+								scrollOffset: true
+							},
+							data => {
+								res(data);
+							}
+						)
+						.exec();
+				});
+			},
+			async public(i, e) {
+				this.id = e.no;
+				let index = i;
+				let tabBars = await this.getElSize('tab-bars'),
+					tabBarScrollLeft = tabBars.scrollLeft; //点击的时候记录并设置scrollLeft
+				let width = 0;
+				for (let j = 0; j < index; j++) {
+					let result = await this.getElSize('tab' + this.categorys[j].id);
+					width += result.width;
+				}
+				let winWidth = uni.getSystemInfoSync().windowWidth,
+					nowElement = await this.getElSize('tab' + this.categorys[index].id),
+					nowWidth = nowElement.width;
+				if (width + nowWidth - tabBarScrollLeft > winWidth - nowWidth) {
+					this.scrollLeft = width + nowWidth * 3 - winWidth;
+				}
+
+				if (width < tabBarScrollLeft) {
+					this.scrollLeft = width;
+				}
+			},
+			changeTab(i, e) {
+				if (this.curIndex === i) {
+					return false;
+				} else {
+					this.public(i, e);
+					this.isClickChange = true;
+					this.curIndex = i;
+					index = 1;
+					this.loadingType = 0;
+					this.products = [];
+					this.getData();
+					setTimeout(() => {
+						util.loads(this.products, 'list', this.windowHeight);
+					}, 500)
+
+				}
+			},
+			imageOnLoad(e) {
+				e.loaded = true;
+			},
+			getCategory() {
+				uni.request({
+					url: this.webUrl + 'Categorys',
+					method: 'POST',
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						this.cates = this.cates.concat(res.data.result.uniClassifys);
+						this.categorys = this.categorys.concat(res.data.result.categorys);
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			},
+			goAgentPriduct: function(e) {
+				uni.navigateTo({
+					url: 'product?id=' + e.id
+				});
+			}
+		}
+	};
+</script>
+
+<style>
+	.tab-search {
+		position: fixed;
+		width: 100%;
+		z-index: 9999;
+	}
+
+	.jz_myfit.jz_lists scroll-view.uni-swiper-tab {
+		margin-bottom: 0;
+	}
+	.jz_myfit .myfit-product .product-img{
+		width: 180upx;
+		height: 180upx;
+		margin-right: 20upx;
+		margin-top: 17.5upx;
+	}
+	.jz_myfit .myfit-product image{
+		width: 180upx;
+		height: 180upx;
+		border-radius: 20upx;
+	}
+
+
+	/* #ifdef H5 */
+	.myfit-slider input {
+		display: block;
+		text-align: center;
+		width: 200upx;
+		background: #dd0101;
+		color: #FFFFFF;
+		border-radius: 30upx;
+		font-size: 26upx;
+	}
+
+	.myfit-slider>view:last-child {
+		margin-right: 10upx;
+	}
+
+	/* #endif */
+
+
+	slider {
+		display: inline;
+		margin-left: 0;
+		margin-right: 0;
+	}
+
+	.jz_agent.jz_myfit .agent-product {
+		margin-top: 280upx;
+	}
+
+	.jz_myfit .myfit-product {
+		padding: 10upx;
+	}
+	
+	.jz_myfit .product-contents{
+		padding: 25upx 0;
+		width: auto!important;
+		margin-left: 0!important;
+	}
+
+	.fixed {
+		width: 100%;
+		position: fixed;
+		left: 0;
+		top: 0;
+		/* #ifdef H5 */
+		/* top: 84upx; */
+		top: 44px;
+		/* #endif */
+		background: #ffffff;
+		margin: 0 !import;
+		z-index: 999;
+		box-sizing: border-box;
+		border-bottom: 2upx solid #eeeeee;
+		transform: translateZ(0);
+		-webkit-transform: translateZ(0);
+	}
+
+	.activeLine {
+		border-bottom: 2upx solid #ff273c;
+	}
+
+	.jz_lists {
+		position: relative;
+	}
+
+
+	.jz_lists scroll-view.uni-swiper-tab {
+		border-bottom: 0;
+		height: auto;
+		line-height: auto;
+		padding-top: 20upx;
+	}
+
+	.jz_lists .productTitle-item {
+		justify-content: center;
+		align-items: center;
+	}
+
+	.jz_lists .productTitle-item .picname {
+		line-height: 60upx;
+	}
+
+	.jz_lists .productTitle-item image {
+		width: 50upx;
+		height: 50upx;
+	}
+
+	.lists .sortNav .Nav:first-child {
+		/* border-left: none; */
+	}
+
+	.list .tab-bar-wrap {
+		width: 200upx;
+	}
+
+	::-webkit-scrollbar {
+		display: none;
+	}
+
+	.lists .nav-left {
+		width: 218upx;
+		border-right: solid 1upx #e0e0e0;
+		padding-top: 20upx;
+		box-sizing: border-box;
+	}
+
+	.lists .nav-left .nav-left-title {
+		height: 80upx;
+		font-weight: 600;
+		margin: 0 auto;
+		margin-left: 10upx;
+	}
+
+	.lists .nav-left-item {
+		height: 110upx;
+		font-size: 30upx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
+
+	.lists .nav-left-item image {
+		width: 40upx;
+		height: 40upx;
+		margin-right: 18upx;
+	}
+
+	.lists .nav-right {
+		width: 100%;
+		box-sizing: border-box;
+	}
+
+	.uni-tab-bar-loading {
+		width: 100%;
+	}
+
+	.uni-tab-bar-loading .loading-text {
+		margin-top: 50upx;
+		font-size: 28upx;
+		text-align: center;
+	}
+
+	.lists .list {
+		width: 100%;
+		height: 92%;
+	}
+
+
+	#tab-bar {
+		background-color: #ffffff;
+		padding-bottom: 60upx;
+		overflow: hidden;
+	}
+
+	.uni-tab-bar .active {
+		color: #ffe200;
+		/* border-left: 10upx solid #ffe200; */
+	}
+
+
+	.prices .prices-cart image {
+		width: 52upx;
+		height: 50upx;
+		margin-right: 10upx;
+	}
+
+	.prices .prices-salePrice {
+		font-size: 22upx;
+		color: #f00000;
+	}
+
+
+	.image {
+		position: absolute;
+		width: 100%;
+		height: 100%;
+	}
+
+
+	.list-collapse {
+		padding-left: 36upx;
+		box-sizing: border-box;
+	}
+
+
+	.lists .sortNav .navActive {
+		color: #d80000;
+	}
+</style>

+ 201 - 0
pages/user/register/register.1.vue

@@ -0,0 +1,201 @@
+<template>
+
+	<view class="login uni-flex uni-column register">
+		<view class="uni-flex login-top" @click="Home">
+			<image mode="widthFix" src="../../../static/login/login_bg.png"></image>
+		</view>
+		<view class="login-bottom uni-flex-item uni-column uni-flex">
+			<view class="login-form uni-flex uni-column">
+				<view class="logoImg uni-flex">
+					<image src="../../../static/login/login_logo.png"></image>
+				</view>
+				<view class="tab uni-flex uni-flex-item uni-column">
+					<view class="content uni-flex-item">
+						<view>
+							<view class="form-phone uni-flex">
+								<view class="form-phone-lf uni-flex">
+									<image src="../../../static/login/ico1.png"></image>
+								</view>
+								<input class="uni-flex-item userNameIput" placeholder-style="color:#e2e2e2" v-model="phone" name="input"
+								 placeholder="输入手机号码" />
+							</view>
+							<view class="form-phone uni-flex">
+								<view class="form-phone-lf uni-flex">
+									<image src="../../../static/login/ico2.png"></image>
+								</view>
+								<input class="uni-flex-item userNameIput" placeholder-style="color:#e2e2e2" v-model="password" name="input"
+								 placeholder="输入登录密码" />
+							</view>
+							<view class="form-phone uni-flex">
+								<view class="form-phone-lf uni-flex">
+									<image src="../../../static/login/ico2.png"></image>
+								</view>
+								<input class="uni-flex-item userNameIput" placeholder-style="color:#e2e2e2" v-model="password" name="input"
+								 placeholder="确认登录密码" />
+							</view>
+							<view class="form-phone uni-flex">
+								<view class="form-phone-lf uni-flex">
+									<image src="../../../static/login/login_message.png"></image>
+								</view>
+								<input class="uni-flex-item userNameIput" placeholder-style="color:#e2e2e2" v-model="password" name="input"
+								 placeholder="输入短信验证码" />
+								<view class="codeBtn">
+									获取验证码
+								</view>
+							</view>
+						</view>
+					</view>
+
+				</view>
+				<view class="btnImg">
+					<image src="../../../static/login/login_btn.png"></image>
+				</view>
+			</view>
+			<view class="login-tip uni-flex">
+				<view class="registerMsg">已有账号登录</view>
+			</view>
+		</view>
+	</view>
+
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+
+	export default {
+		data() {
+			return {
+				userName: "",
+				code: "",
+				vcode: "",
+				content: '发送验证码',
+				totalTime: 10,
+				type: "primary",
+				canClick: true
+
+			};
+		},
+		onLoad(e) {
+			this.id = e.id;
+		},
+		onPullDownRefresh() {
+			setTimeout(function() {
+				uni.stopPullDownRefresh();
+			}, 1000);
+		},
+		methods: {
+			...mapMutations(['login']),
+			Register() {
+				if (this.userName == "") {
+					uni.showToast({
+						icon: "none",
+						title: "请填写手机号",
+					});
+					return false;
+				}
+				if (this.code == "") {
+					uni.showToast({
+						icon: "none",
+						title: "请填写验证码",
+					});
+					return false;
+				}
+				// 				if (this.no == "") {
+				// 					uni.showToast({
+				// 						icon: "none",
+				// 						title: "请填写激活码",
+				// 					});
+				// 					return false;
+				// 				}
+				uni.showLoading({
+					title: "注册中"
+				});
+				uni.request({
+					url: this.webUrl + 'Register',
+					method: 'POST',
+					data: {
+						id: this.id,
+						userName: this.userName,
+						code: this.code,
+						vcode: this.vcode
+						// no: this.no
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						uni.hideLoading();
+						if (res.data.result.isSuccess) {
+							this.login(JSON.stringify(res.data.user));
+							uni.switchTab({
+								url: '../user/user'
+							});
+						} else {
+							uni.showToast({
+								icon: "none",
+								title: res.data.result.resultInfo,
+							})
+						}
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+
+			},
+			SendEsms() {
+				if (this.userName == "") {
+					uni.showToast({
+						icon: "none",
+						title: "请填写手机号码",
+					})
+				} else {
+					if (!this.canClick) return //改动的是这两行代码
+					uni.showLoading({
+						title: "发送中"
+					});
+					uni.request({
+						url: this.webUrl + 'SendEsms',
+						method: 'POST',
+						data: {
+							mobile: this.userName
+						},
+						header: {
+							'content-type': 'application/x-www-form-urlencoded'
+						},
+						success: res => {
+							uni.hideLoading()
+							if (res.data.result.status == "1") {
+								this.vcode = res.data.result.code;
+								this.canClick = false
+								this.type = "default";
+								this.content = this.totalTime + 's'
+								let clock = setInterval(() => {
+									this.totalTime--
+									this.content = this.totalTime + 's'
+									if (this.totalTime < 0) {
+										clearInterval(clock)
+										this.content = '重新发送'
+										this.totalTime = 10
+										this.canClick = false //这里重新开启
+										this.type = "primary"
+									}
+								}, 1000)
+
+							} else {
+								uni.showToast({
+									icon: "none",
+									title: "发送失败",
+								})
+							}
+						},
+						fail: () => {},
+						complete: () => {}
+					});
+				}
+			}
+		}
+	}
+</script>

+ 266 - 0
pages/user/register/register.vue

@@ -0,0 +1,266 @@
+<template>
+
+	<view class="jz_login jz_register">
+		<view class="uni-flex login-top" @click="Home">
+			<image mode="widthFix" src="../../../static/login/login_bg.png"></image>
+			<div class="waveWrapper waveAnimation">
+
+				<div class="circles">
+					<div class="circle"></div>
+					<div class="circle"></div>
+					<div class="circle"></div>
+					<div class="circle"></div>
+					<div class="circle"></div>
+					<div class="circle"></div>
+					<div class="circle"></div>
+				</div>
+
+
+			</div>
+		</view>
+		<view class=" space"></view>
+		<view class="login-box uni-column ">
+			<view class="login-form uni-flex uni-column">
+				<view class="logoImg uni-flex" @click="Home">
+					<image src="../../../static/login/login_logo.png"></image>
+				</view>
+				<view class="tab uni-flex uni-flex-item uni-column">
+
+					<view class="uni-flex content uni-flex-item">
+						<view class="uni-flex uni-column">
+							<view class="form-phone uni-flex">
+								<view class="form-phone-lf uni-flex">
+									<image src="../../../static/login/ico1.png"></image>
+								</view>
+								<input class="uni-flex-item userNameIput" placeholder-style="color:#e2e2e2" v-model="phone" name="input"
+								 placeholder="输入手机号码" />
+							</view>
+							<view class="form-phone uni-flex">
+								<view class="form-phone-lf uni-flex">
+									<image src="../../../static/login/ico2.png"></image>
+								</view>
+								<input class="uni-flex-item userNameIput" password placeholder-style="color:#e2e2e2" v-model="password1" name="input"
+								 placeholder="输入登录密码" />
+							</view>
+							<view class="form-phone uni-flex">
+								<view class="form-phone-lf uni-flex">
+									<image src="../../../static/login/ico2.png"></image>
+								</view>
+								<input class="uni-flex-item userNameIput" password placeholder-style="color:#e2e2e2" v-model="password2" name="input"
+								 placeholder="确认登录密码" />
+							</view>
+							<view class="form-phone uni-flex">
+								<view class="form-phone-lf uni-flex">
+									<image src="../../../static/login/login_message.png"></image>
+								</view>
+								<input class="uni-flex-item userNameIput" placeholder-style="color:#e2e2e2" v-model="code" name="input"
+								 placeholder="输入短信验证码" />
+								<view class="codeBtn uni-flex" >
+									<button class="send uni-flex-item" :type="type" size="mini" @click="SendEsms">{{content}}</button>
+								</view>
+							</view>
+						</view>
+					</view>
+
+				</view>
+				<view class="btnImg" @click="Register">
+					注册
+				</view>
+			</view>
+			<view class="login-tip uni-flex">
+				<view class="registerMsg" @click="goRegister">已有账号登录</view>
+			</view>
+		</view>
+	</view>
+
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+	import sha1 from '../../../common/sha1.js';
+
+	export default {
+		computed: {
+			...mapState(['hasLogin', 'forcedLogin', 'jyyUser', 'favs', 'shareId'])
+		},
+		data() {
+			return {
+				phone: "",
+				code: "",
+				vcode: "",
+				password1: "",
+				password2: "",
+				content: '发送验证码',
+				totalTime: 10,
+				type: "primary",
+				canClick: true,
+				shareId: 0
+			};
+		},
+		onLoad() {
+			this.init();
+		},
+		onPullDownRefresh() {
+			setTimeout(function() {
+				uni.stopPullDownRefresh();
+			}, 1000);
+		},
+		methods: {
+			...mapMutations(['login', 'setFavs', 'setShare']),
+			goRegister(){
+				uni.navigateTo({
+					url:'../login/login'
+				})
+			},
+			init() {
+				if (!this.hasLogin) {
+					uni.getStorage({
+						key: 'shareUserId',
+						success: (res) => {
+							this.shareId = res.data;
+							console.log(this.shareId)
+						}
+					});
+				}
+			},
+			Register() {
+				if (this.phone == "") {
+					uni.showToast({
+						icon: "none",
+						title: "请填写手机号",
+					});
+					return false;
+				}
+				if (this.password1 == "") {
+					uni.showToast({
+						icon: "none",
+						title: "请输入登录密码",
+					});
+					return false;
+				}
+				if (this.password2 == "") {
+					uni.showToast({
+						icon: "none",
+						title: "请确认登录密码",
+					});
+					return false;
+				}
+				if (this.code == "") {
+					uni.showToast({
+						icon: "none",
+						title: "请填写验证码",
+					});
+					return false;
+				}
+				uni.showLoading({
+					title: "注册中"
+				});
+				uni.request({
+					url: this.webUrl + 'Register',
+					method: 'POST',
+					data: {
+						phone: this.phone,
+						pass1: sha1.hex_sha1(this.password1),
+						pass2: sha1.hex_sha1(this.password2),
+						shareId: this.shareId,
+						code: this.code,
+						vcode: this.vcode
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						uni.hideLoading();
+						if (res.data.result.isSuccess) {
+							this.login(JSON.stringify(res.data.user));
+							this.setFavs(JSON.stringify(res.data.favs));
+							uni.switchTab({
+								url: '../user/user'
+							});
+						} else {
+							uni.showToast({
+								icon: "none",
+								title: res.data.result.resultInfo,
+							})
+						}
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+
+			},
+			Home() {
+				uni.switchTab({
+					url: '../../home/home'
+				})
+			},
+			SendEsms() {
+				if (this.phone == "") {
+					uni.showToast({
+						icon: "none",
+						title: "请填写手机号码",
+					})
+				} else {
+					console.log(this.canClick)
+					if (!this.canClick) return //改动的是这两行代码
+					uni.showLoading({
+						title: "发送中"
+					});
+					uni.request({
+						url: this.webUrl + 'SendEsms',
+						method: 'POST',
+						data: {
+							mobile: this.phone
+						},
+						header: {
+							'content-type': 'application/x-www-form-urlencoded'
+						},
+						success: res => {
+							uni.hideLoading()
+							if (res.data.result.status == "1") {
+								this.vcode = res.data.result.code;
+								this.canClick = false
+								this.type = "default";
+								this.content = this.totalTime + 's'
+								let clock = setInterval(() => {
+									this.totalTime--
+									this.content = this.totalTime + 's'
+									if (this.totalTime < 0) {
+										clearInterval(clock)
+										this.content = '重新发送'
+										this.totalTime = 10
+										this.canClick = true //这里重新开启
+										this.type = "primary"
+									}
+								}, 1000)
+
+							} else {
+								uni.showToast({
+									icon: "none",
+									title: "发送失败",
+								})
+							}
+						},
+						fail: () => {},
+						complete: () => {}
+					});
+				}
+			}
+		}
+	}
+</script>
+<style>
+	.jz_login .btnImg {
+		width: 460upx;
+		height: 80upx;
+		text-align: center;
+		line-height: 80upx;
+		font-size: 24upx;
+		color: #FFFFFF;
+		background: url(../../../static/btn.png) no-repeat;
+		background-size: 460upx 80upx;
+	}
+</style>

+ 103 - 0
pages/user/spreadCost/spreadCost.vue

@@ -0,0 +1,103 @@
+<template>
+	<view class="uni-flex uni-column">
+		<view class="spreadCost-wrap uni-flex justify-content align-items uni-column">
+			<view class="uni-flex-item">推广总额</view>
+			<view class="uni-flex-item spreadCost">0.00</view>
+		</view>
+		<view class="uni-list">
+			<view class="uni-list-cell">
+				<view class="uni-list-cell-navigate">
+					未确认推广费:<text class="number">¥{{count1}}</text>
+				</view>
+			</view>
+			<view class="uni-list-cell">
+				<view class="uni-list-cell-navigate">
+					已确认推广费:<text class="number">¥{{count2}}</text>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+
+
+	export default {
+		computed: {
+			...mapState(['hasLogin', 'forcedLogin', 'jyyUser'])
+		},
+		data() {
+			return {
+				user: {},
+				count1: 0,
+				count2: 0,
+			}
+		},
+		onLoad() {
+			this.init();
+		},
+		methods: {
+			init() {
+				if (!this.hasLogin) {
+					uni.navigateTo({
+						url: '../login/login',
+					});
+				} else {
+					this.user = JSON.parse(this.jyyUser);
+					this.getData();
+				}
+			},
+			getData(){
+				uni.request({
+					url: this.webUrl + 'MyOrdersCount',
+					method: 'POST',
+					data: {
+						userid: this.user.id
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						this.count1 = res.data.result.resultInfo;
+						this.count2 = res.data.result.resultInfo2;			
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			}
+			
+		}
+	}
+</script>
+<style>
+	.spreadCost-wrap {
+		height: 130upx;
+		text-align: center;
+		line-height: 80upx;
+		background: #FFFFFF;
+	}
+
+	.uni-list-cell:after {
+		background: none;
+	}
+
+	.spreadCost-wrap .spreadCost {
+		margin-top: -30upx;
+	}
+
+	.spreadCost-wrap .number {
+		margin-right: 20upx;
+	}
+
+	.spreadCostBtn {
+		margin-top: 15upx;
+		width: 95%;
+		text-align: center;
+		color: #FFFFFF;
+		background: #4cda64;
+	}
+</style>

+ 124 - 0
pages/user/spreadOrder/mySpreadOrder.vue

@@ -0,0 +1,124 @@
+<template>
+	<view class="uni-flex uni-column myuser">
+		<view class="uni-list">
+			<view class="content">
+				<view v-for="(item,key) in orders" :key="key" class="uni-flex justify-content">
+					<view class="uni-product uni-flex">
+						<view class="image-view">
+							<image class="uni-product-image" :src="item.avatarUrl" />
+						</view>
+						<view class="uni-product-wrap uni-flex uni-column">
+							<view class="nick">昵称:<text>{{item.nickName}}</text></view>
+							<view class="orders">订单:{{item.orderNo}}</view>
+							<view class="spreadMoney">金额/推广费:<text>{{item.subTotal}}/{{item.amount}}</text><text v-if="item.state==0">未确认</text><text
+								 v-if="item.state==1">已确认</text></view>
+							<view class="orderTime">下单时间:<text>{{item.createDate}}</text></view>
+						</view>
+					</view>
+				</view>
+
+			</view>
+
+		</view>
+		<load-more :loadingType="loadingType" :contentText="contentText"></load-more>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+	import loadMore from '@/components/uni-load-more.vue';
+	var index;
+	export default {
+		computed: {
+			...mapState(['hasLogin', 'forcedLogin', 'jyyUser'])
+		},
+		data() {
+			return {
+				orders: [],
+				loadingType: 0,
+				contentText: {
+					contentdown: "上拉显示更多",
+					contentrefresh: "正在加载...",
+					contentnomore: "没有更多数据了"
+				}
+			};
+		},
+		onPullDownRefresh() {
+			this.init();
+			setTimeout(function() {
+				uni.stopPullDownRefresh();
+			}, 1000);
+		},
+		onShow() {
+			this.init();
+		},
+		onLoad(e) {
+			this.rank = e.rank;
+			this.init();
+		},
+		methods: {
+			init() {
+				index = 1;
+				if (!this.hasLogin) {
+					uni.navigateTo({
+						url: '../login/login',
+					});
+				} else {
+					this.getData();
+				}
+			},
+			getData() {
+				if (this.loadingType !== 0) {
+					return;
+				}
+				this.loadingType = 1;
+				let user = JSON.parse(this.jyyUser);
+				uni.request({
+					url: this.webUrl + 'MyOrders',
+					method: 'POST',
+					data: {
+						pageIndex: index,
+						userid: user.id,
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {
+						if (res.data.result.uniMoneyLogList.length > 0) {
+							this.orders = this.orders.concat(res.data.result.uniMoneyLogList);
+						} else {
+							this.loadingType = 2;
+							return;
+						}
+						if (index == parseInt(res.data.result.pages)) {
+							this.loadingType = 2;
+							return;
+						} else {
+							this.loadingType = 0;
+						}
+						index++;
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			},
+		},
+		onReachBottom() {
+			this.getData();
+		},
+		components: {
+			loadMore
+		}
+	}
+</script>
+<style>
+	.myuser .orders {
+		width: 350upx;
+		overflow: hidden;
+		text-overflow: ellipsis;
+		white-space: nowrap
+	}
+</style>

+ 50 - 0
pages/user/spreadOrder/mymember.vue

@@ -0,0 +1,50 @@
+<template>
+	<view class="uni-flex uni-column mymember">
+		<view class="myuser">我的会员</view>
+		<view class="uni-list">
+			<view class="uni-list-cell">
+				<view class="uni-list-cell-navigate uni-navigate-right" @click="goBuyUser()">
+					一级会员<text class="number">0</text>
+				</view>
+			</view>
+			<view class="uni-list-cell">
+				<view class="uni-list-cell-navigate uni-navigate-right" @click="goBuyUser()">
+					二级会员<text class="number">0</text>
+				</view>
+			</view>
+			<view class="uni-list-cell">
+				<view class="uni-list-cell-navigate uni-navigate-right" @click="goBuyUser()">
+					三级会员<text class="number">0</text>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+			}
+		},
+		onShow() {},
+		onLoad(e) {},
+		methods: {
+			goBuyUser() {
+				uni.navigateTo({
+					url: "./mySpreadOrder"
+				})
+			}
+		}
+	}
+</script>
+<style>
+	.myuser {
+		height: 80upx;
+		text-align: center;
+		line-height: 80upx;
+	}
+	.mymember .number {
+		margin-right: 20upx;
+	}
+</style>

+ 391 - 0
pages/user/user/user.vue

@@ -0,0 +1,391 @@
+<template>
+	<view class="uni-flex jz_user uni-column">
+		<view class="user-header">
+			<view class="uni-flex userinfo">
+				<view class="inforlf uni-flex">
+					<view class="face uni-flex">
+						<image v-if="user.avatarUrl != null" :src="user.avatarUrl"></image>
+						<image v-if="user.avatarUrl == null" src="../../../static/user/02.png"></image>
+					</view>
+					<view class="username uni-flex uni-column">
+						<view class="uname">{{ user.nickName }}</view>
+						<view class="utime">上次登录时间:23:00:00</view>
+					</view>
+				</view>
+				<view class="inforrt uni-flex uni-column" @click="bindLogout">
+					<image src="../../../static/user/03.png"></image>
+					<view>退出登录</view>
+				</view>
+			</view>
+			<view class="userlist uni-flex">
+				<navigator url="../fav/fav" class="useritem uni-flex uni-column">
+					<view>{{ userbase.fav }}</view>
+					<view>我的收藏</view>
+				</navigator>
+				<view class="line"></view>
+				<navigator class="useritem uni-flex uni-column" :url="'../myPoint/myPoint?integral=' + userbase.integral">
+					<view>{{ userbase.integral }}</view>
+					<view>我的积分</view>
+				</navigator>
+				<view v-if="user.business > 0" class="line"></view>
+				<navigator v-if="user.business > 0" url="../myuser/mymember" class="useritem uni-flex uni-column">
+					<view>{{ userbase.myUser }}</view>
+					<view>我的会员</view>
+				</navigator>
+			</view>
+		</view>
+		<view class="user-content uni-flex-item">
+			<view class="userbox uni-flex">
+				<view class="uni-flex boxlf" @click="goAgent">
+					<image src="../../../static/user/04.png"></image>
+					<view class="uni-flex uni-column titles">
+						<view class="titlestop">代理查询</view>
+						<view class="titlesbottom">查询区域代理</view>
+					</view>
+				</view>
+				<view class="boxline"></view>
+				<view class="uni-flex boxlf" @click="goMyAgency">
+					<image src="../../../static/user/flash.gif"></image>
+					<view class="uni-flex uni-column titles">
+						<view class="titlestop">快速下单</view>
+						<view class="titlesbottom">代理商品一键下单</view>
+					</view>
+				</view>
+			</view>
+			<view class="orders uni-flex uni-column">
+				<view class="uni-list-cell">
+					<view class="uni-list-cell-navigate uni-navigate-right uni-flex">
+						<view class="myorder">我的订单</view>
+						<view class="lookall" @click="goAllOrder">查看全部订单</view>
+					</view>
+				</view>
+				<view class="uni-flex orderList uni-flex-item">
+					<navigator url="../orderList/orderList?tab=1" class="orderitem uni-flex uni-column">
+						<image src="../../../static/user/06.png"></image>
+						<view class="">待付款</view>
+						<view class="badge" v-if="userbase.orderPay > 0">{{ userbase.orderPay }}</view>
+					</navigator>
+					<navigator url="../orderList/orderList?tab=2" class="orderitem uni-flex uni-column">
+						<image src="../../../static/user/07.png"></image>
+						<view class="">待发货</view>
+						<view class="badge" v-if="userbase.orderShipments > 0">{{ userbase.orderShipments }}</view>
+					</navigator>
+					<navigator url="../orderList/orderList?tab=3" class="orderitem uni-flex uni-column">
+						<image src="../../../static/user/08.png"></image>
+						<view class="">待收货</view>
+						<view class="badge" v-if="userbase.orderReceiving > 0">{{ userbase.orderReceiving }}</view>
+					</navigator>
+					<navigator url="../orderList/orderList?tab=4" class="orderitem uni-flex uni-column">
+						<image src="../../../static/user/09.png"></image>
+						<view class="">退款/售后</view>
+						<view class="badge badgeF" v-if="userbase.orderReturn > 0">{{ userbase.orderReturn }}</view>
+					</navigator>
+					<navigator url="../orderList/orderList?tab=0" class="orderitem uni-flex uni-column">
+						<image src="../../../static/user/10.png"></image>
+						<view>全部订单</view>
+					</navigator>
+				</view>
+			</view>
+			<view class="card uni-flex uni-column">
+				<view v-if="user.business > 0" class="uni-list">
+					<navigator url="../myAgency/index" hover-class="navigator-hover">
+						<view class="uni-list-cell">
+							<view class="uni-list-cell-navigate uni-flex firstcell">
+								<view class="listmsg uni-flex align-items">
+									<image class="listleft" src="../../../static/user/agency.png"></image>
+									<text class="">我的代理</text>
+								</view>
+								<view class="uni-flex align-items">
+									<text class="num">{{userbase.myAgency}}</text>
+									<image class="listrt" src="../../../static/user/14.png"></image>
+								</view>
+							</view>
+						</view>
+					</navigator>
+				</view>
+
+				<!-- <view v-if="user.business>0" class="uni-list">
+					<navigator url="../agent/index" hover-class="navigator-hover">
+						<view class="uni-list-cell">
+							<view class="uni-list-cell-navigate uni-flex">
+
+								<view class="listmsg uni-flex align-items">
+									<image class="listleft" src="../../../static/user/04.png"></image>
+									<text class="">代理查询</text>
+								</view>
+								<image class="listrt" src="../../../static/user/14.png"></image>
+							</view>
+						</view>
+					</navigator>
+				</view> -->
+				<view v-if="user.business > 0" class="uni-list">
+					<navigator url="../myuser/mymember" hover-class="navigator-hover">
+						<view class="uni-list-cell">
+							<view class="uni-list-cell-navigate uni-flex">
+								<view class="listmsg uni-flex align-items">
+									<image class="listleft" src="../../../static/user/17.png"></image>
+									<text class="">我的会员</text>
+								</view>
+								<view class="uni-flex align-items">
+									<text class="num">{{userbase.myUser}}</text>
+									<image class="listrt" src="../../../static/user/14.png"></image>
+								</view>
+							</view>
+						</view>
+					</navigator>
+				</view>
+				<view v-if="user.business == 1" class="uni-list">
+					<navigator url="../profit/index" hover-class="navigator-hover">
+						<view class="uni-list-cell">
+							<view class="uni-list-cell-navigate uni-flex">
+								<view class="listmsg uni-flex align-items">
+									<image class="listleft" src="../../../static/user/40.png"></image>
+									<text class="">利润查询</text>
+								</view>
+								<image class="listrt" src="../../../static/user/14.png"></image>
+							</view>
+						</view>
+					</navigator>
+				</view>
+
+				<view v-if="user.business > 0" class="uni-list">
+					<navigator url="../income/income" hover-class="navigator-hover">
+						<view class="uni-list-cell">
+							<view class="uni-list-cell-navigate uni-flex firstcell">
+								<view class="listmsg uni-flex align-items">
+									<image class="listleft" src="../../../static/user/15.png"></image>
+									<text class="">收益明细</text>
+								</view>
+								<image class="listrt" src="../../../static/user/14.png"></image>
+							</view>
+						</view>
+					</navigator>
+				</view>
+				<view v-if="user.business > 0" class="uni-list">
+					<navigator @click="goBeginCard" hover-class="navigator-hover">
+						<view class="uni-list-cell">
+							<view class="uni-list-cell-navigate uni-flex">
+								<view class="listmsg uni-flex align-items">
+									<image class="listleft" src="../../../static/user/16.png"></image>
+									<text class="">开牌申请</text>
+								</view>
+								<image class="listrt" src="../../../static/user/14.png"></image>
+							</view>
+						</view>
+					</navigator>
+				</view>
+
+				<view class="uni-list">
+					<navigator v-if="user.business > 0" @click="goCode" hover-class="navigator-hover">
+						<view class="uni-list-cell">
+							<view class="uni-list-cell-navigate uni-flex">
+								<view class="listmsg uni-flex align-items">
+									<image class="listleft" src="../../../static/user/qr.png"></image>
+									<text class="">推广码</text>
+								</view>
+								<image class="listrt" src="../../../static/user/14.png"></image>
+							</view>
+						</view>
+					</navigator>
+				</view>
+				<view v-if="user.business == 0" class="uni-list">
+					<navigator @click="goAgentFor()" hover-class="navigator-hover">
+						<view class="uni-list-cell">
+							<view class="uni-list-cell-navigate uni-flex">
+								<view class="listmsg uni-flex align-items">
+									<image class="listleft" src="../../../static/user/16.png"></image>
+									<text class="">申请代理</text>
+								</view>
+								<image class="listrt" src="../../../static/user/14.png"></image>
+							</view>
+						</view>
+					</navigator>
+				</view>
+				<view class="uni-list">
+					<navigator url="../account/account" hover-class="navigator-hover firstcell">
+						<view class="uni-list-cell">
+							<view class="uni-list-cell-navigate uni-flex">
+								<view class="listmsg uni-flex align-items">
+									<image class="listleft" src="../../../static/user/11.png"></image>
+									<text class="">个人信息</text>
+								</view>
+								<image class="listrt" src="../../../static/user/14.png"></image>
+							</view>
+						</view>
+					</navigator>
+				</view>
+				<view class="uni-list">
+					<navigator url="../address/address" hover-class="navigator-hover">
+						<view class="uni-list-cell">
+							<view class="uni-list-cell-navigate uni-flex">
+								<view class="listmsg uni-flex align-items">
+									<image class="listleft" src="../../../static/user/12.png"></image>
+									<text class="">收货地址</text>
+								</view>
+								<image class="listrt" src="../../../static/user/14.png"></image>
+							</view>
+						</view>
+					</navigator>
+				</view>
+				<view class="uni-list">
+					<navigator url="../loginPassword/loginPassword" hover-class="navigator-hover">
+						<view class="uni-list-cell">
+							<view class="uni-list-cell-navigate uni-flex">
+								<view class="listmsg uni-flex align-items">
+									<image class="listleft" src="../../../static/user/13.png"></image>
+									<text class="">登录密码</text>
+								</view>
+								<image class="listrt" src="../../../static/user/14.png"></image>
+							</view>
+						</view>
+					</navigator>
+				</view>
+				<view class="uni-list">
+					<navigator @click="bindLogout" hover-class="navigator-hover lastcell">
+						<view class="uni-list-cell">
+							<view class="uni-list-cell-navigate uni-flex">
+								<view class="listmsg uni-flex align-items">
+									<image class="listleft" src="../../../static/user/18.png"></image>
+									<text class="">退出登录</text>
+								</view>
+								<image class="listrt" src="../../../static/user/14.png"></image>
+							</view>
+						</view>
+					</navigator>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex';
+
+export default {
+	computed: {
+		...mapState(['hasLogin', 'forcedLogin', 'jyyUser'])
+	},
+	methods: {
+		...mapMutations(['login', 'logout']),
+		goAllOrder() {
+			uni.navigateTo({
+				url: '../orderList/orderList?tab=0'
+			});
+		},
+		goAgent() {
+			uni.navigateTo({
+				url: '../agent/index'
+			});
+		},
+		goAgentFor() {
+			uni.navigateTo({
+				url: '../agent/applyfor?path=user'
+			});
+		},
+		goCode() {
+			uni.navigateTo({
+				url: '../../qrCode/index?id=' + this.user.id
+			});
+		},
+		goBeginCard() {
+			uni.navigateTo({
+				url: '../beginCard/beginCard'
+			});
+		},
+		bindLogout() {
+			uni.showModal({
+				content: '确认退出?',
+				success: res => {
+					if (res.confirm) {
+						this.logout();
+						uni.switchTab({
+							url: '../../home/home'
+						});
+					}
+				}
+			});
+		},
+		init() {
+			if (!this.hasLogin) {
+				uni.navigateTo({
+					url: '../login/login'
+				});
+			} else {
+				this.user = JSON.parse(this.jyyUser);
+				this.getData();
+
+				uni.request({
+					url: this.webUrl + 'FlashCart',
+					data: 'userid=' + this.user.id + '&id=55,56',
+					method: 'POST',
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: res => {},
+					fail: () => {},
+					complete: () => {}
+				});
+			}
+		},
+		goMyAgency() {
+			uni.navigateTo({
+				url: '../myAgency/index'
+			});
+		},
+		getData() {
+			uni.request({
+				url: this.webUrl + 'GetUserInfo',
+				data: 'userid=' + this.user.id,
+				method: 'POST',
+				header: {
+					'content-type': 'application/x-www-form-urlencoded'
+				},
+				success: res => {
+					this.userbase = res.data.result;
+					this.login(JSON.stringify(res.data.user));
+				},
+				fail: () => {},
+				complete: () => {}
+			});
+		}
+	},
+	onShow() {
+		this.init();
+	},
+	onLoad(e) {
+		this.init();
+	},
+	onPullDownRefresh() {
+		this.init();
+		setTimeout(function() {
+			uni.stopPullDownRefresh();
+		}, 1000);
+	},
+	data() {
+		return {
+			user: {},
+			userbase: {}
+		};
+	}
+};
+</script>
+
+<style>
+.user-header {
+	background: url(../../../static/user/01.png);
+	background-size: 100% 100%;
+}
+
+.boxline {
+	background: url(../../../static/user/line.png) no-repeat;
+}
+
+.jz_income .content_item .item_titles > view:first-child {
+	margin-top: 20upx;
+}
+.num {
+	font-size: 26rpx;
+	color: #ca0000;
+	margin-right: 10upx;
+}
+</style>

+ 50 - 28
pages/visitor/historyList.vue

@@ -2,60 +2,81 @@
 	<view class="pageBg">
 		<view class="content">
 			<scroll ref="pullScroll" :pullDown="pullDown" :pullUp="loadData">
-				<view class="item" v-for="(item,index) in item" :key="index">
+				<view class="item" v-for="(item,index) in data" :key="index">
 					<view class="itemTitle">
-						<view class="leftDate">02-05</view>
+						<view class="leftDate">{{(item.createDate).substr(5,5)}}</view>
 						<view class="name">
 							肖战
 						</view>
-						<view style="width:196rpx ;height: 40rpx;ont-size:28px;font-family:PingFang SC;font-weight:bold;line-height:40rpx;color:rgba(41,138,253,1);">15222256210</view>
+						<view style="width:196rpx ;height: 40rpx;ont-size:28px;font-family:PingFang SC;font-weight:bold;line-height:40rpx;color:rgba(41,138,253,1);">
+							{{item.visitorPhone}}
+						</view>
 					</view>
 					<view class="itemList">
 						<view style="width: 100%;display: flex;justify-content: space-between;margin-top: 14rpx;">
 							<view class="left">
 								身份证号:
 							</view>
-							<view class="right">371322200002020202</view>
+							<view class="right">{{item.cardNo}}</view>
+						</view>
+						<view style="width: 100%;display: flex;justify-content: space-between;margin-top: 24rpx;">
+							<view class="left">
+								业主姓名:
+							</view>
+							<view class="right">{{item.personName}}</view>
 						</view>
 						<view style="width: 100%;display: flex;justify-content: space-between;margin-top: 24rpx;">
 							<view class="left">
 								访问事由:
 							</view>
-							<view class="right" style="">来看看你啊,看你过得好不好啊,你过的好我就放心了啊</view>
+							<view class="right" style="">{{item.visitorReason}}</view>
 						</view>
 						<view style="width: 100%;display: flex;justify-content: space-between;margin-top: 24rpx;">
 							<view class="left">
-								视频对讲:
+								通行设备名称:
 							</view>
-							<view class="right">视频对讲</view>
+							<view class="right">{{item.deviceName}}</view>
 						</view>
 						<view style="width: 100%;display: flex;justify-content: space-between;margin-top: 24rpx;">
 							<view class="left">
-								访问入口:
+								通行类型:
 							</view>
-							<view class="right">访问入口</view>
+							<view class="right" v-if="item.passType==1">人脸识别</view>
+							<view class="right" v-else-if="item.passType==2">门禁卡</view>
+							<view class="right" v-else-if="item.passType==3">密码开门</view>
+							<view class="right" v-else-if="item.passType==4">app远程开门</view>
+							<view class="right" v-else-if="item.passType==5">人脸与身份证比对</view>
+							<view class="right" v-else-if="item.passType==6">二维码开门</view>
+							<view class="right" v-else-if="item.passType==10">一键开门</view>
+							<view class="right" v-else>其他</view>
 						</view>
 						<view style="width: 100%;display: flex;justify-content: space-between;margin-top: 24rpx;">
 							<view class="left">
+								通行时间:
+							</view>
+							<view class="right">{{item.passTime}}</view>
+						</view>
+						<!-- <view style="width: 100%;display: flex;justify-content: space-between;margin-top: 24rpx;">
+							<view class="left">
 								一键解锁记录:
 							</view>
 							<view class="right" style="display: flex;flex-wrap: wrap;width: 306rpx;">2020-02-05 17:10:15解锁 2020-02-05
 								17:10:15解锁</view>
-						</view>
-						<view style="width: 100%;display: flex;justify-content: space-between;margin-top: 24rpx;">
+						</view> -->
+						<!-- <view style="width: 100%;display: flex;justify-content: space-between;margin-top: 24rpx;">
 							<view class="left">
 								二维码密码:
 							</view>
 							<view class="right">EEEEEE</view>
-						</view>
-						<view style="width: 100%;display: flex;justify-content: space-between;margin-top: 24rpx;">
+						</view> -->
+						<!-- 	<view style="width: 100%;display: flex;justify-content: space-between;margin-top: 24rpx;">
 							<view class="left">
 								二维码:
 							</view>
 							<view class="right">
 								<image src="../../static/complain_icon_complain@2x.png" style="width: 120rpx;height: 120rpx;"></image>
 							</view>
-						</view>
+						</view> -->
 					</view>
 				</view>
 			</scroll>
@@ -68,7 +89,8 @@
 	export default {
 		data() {
 			return {
-				phoneHeight: 0, //手机状态栏的高度
+				phoneHeight: 0, //手机状态栏的高度,
+				data: []
 			}
 		},
 		onLoad() {
@@ -100,20 +122,20 @@
 					// if (pullScroll.page == 1) {
 					// 	this.doorData = [];
 					// }
-					this.http.httpRequest('/wxapplet/owner/peolepass/visitList', 'get', {
+					this.http.httpRequest('/wxapplet/owner/peolepass/list', 'get', {
 						cardNo: uni.getStorageSync('idNumber'),
 						pageNum: pullScroll.page,
-						pageSize: 2
+						pageSize: 5
 					}).then((res) => {
 						if (res.code == 0) {
-							this.total=res.data.total
-					         if(this.data.length>=res.data.total){
-								 pullScroll.finish();
-							 }else{
-								 pullScroll.success();
-								 let data = res.data.rows
-								 this.data = this.data.concat(data);
-							 }
+							this.total = res.data.total
+							if (this.data.length == res.data.total) {
+								pullScroll.finish();
+							} else {
+								pullScroll.success();
+								let data = res.data.rows
+								this.data = this.data.concat(data);
+							}
 						} else {
 							pullScroll.finish();
 							uni.showToast({
@@ -130,11 +152,11 @@
 					// }
 				}, 500);
 			}
-			},
+		},
 		components: {
 
 		},
-		
+
 	}
 </script>
 
@@ -180,7 +202,7 @@
 		box-shadow: 0rpx 6rpx 12rpx rgba(41, 138, 253, 0.16);
 		opacity: 1;
 		border-radius: 14rpx;
-		margin-top: 40rpx;
+		margin-top: 35rpx;
 	}
 
 	.itemTitle {

BIN
static/bike@2x.png


BIN
static/carBg.png


BIN
static/ceng.png


BIN
static/dzed.png


BIN
static/homeNum.png


BIN
static/old.png


BIN
static/qingShao.png


BIN
static/ri.png


BIN
static/shaonian.png


BIN
static/talk.png


BIN
static/youer.png


BIN
static/young.png


BIN
static/zhongnian.png


+ 13 - 0
store/index.js

@@ -0,0 +1,13 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+
+Vue.use(Vuex)
+
+const store = new Vuex.Store({
+	state: {
+	},
+	mutations: {
+	}
+})
+
+export default store

+ 36 - 0
utils/prototype.js

@@ -0,0 +1,36 @@
+export default{
+	// 时间戳转换成日期
+		formatDate(DateNum, AccurateTo) {
+			var date = new Date(DateNum)
+			var returnValue = ''
+			var Y = date.getFullYear()
+			var M = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1
+			var D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
+			var h = date.getHours() < 10 ? '0' + date.getHours() : date.getHours()
+			var m = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()
+			var s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
+			switch (AccurateTo) {
+			  case 'Y':
+				returnValue = Y
+				break
+			  case 'M':
+				returnValue = Y + '-' + M
+				break
+			  case 'D':
+				returnValue = Y + '-' + M + '-' + D
+				break
+			  case 'h':
+				returnValue = Y + '-' + M + '-' + D + ' ' + h
+				break
+			  case 'm':
+				returnValue = Y + '-' + M + '-' + D + ' ' + h + ':' + m
+				break
+			  case 's':
+				returnValue = Y + '-' + M + '-' + D + ' ' + h + ':' + m + ':' + s
+				break
+			  default:
+				returnValue = Y + '-' + M + '-' + D + ' ' + h + ':' + m + ':' + s
+			}
+			return returnValue
+		},
+}

+ 1 - 2
utils/request.js

@@ -15,9 +15,8 @@ const httpRequest = (url, method, data,isJson) => {
         method: meth,
 		header:{
 			'X-Requested-With': 'XMLHttpRequest',
-			'content-type': isJson==false ? 'application/x-www-form-urlencoded' : 'application/json',
+			'content-type': isJson==false ? 'application/x-www-form-urlencoded;charset=UTF-8' : 'application/json',//判断需要json格式还是formData格式传参
 			// 'content-type': 'application/json',
-			'token':'JSESSIONID=97efb80d-ec73-493e-ad1e-cd521f2061e1'
 		},
         dataType: 'json',
     }

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 4 - 0
utils/weapp.qrcode.min.js


Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác