Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/developer' into developer

zhengjinyi 3 gadi atpakaļ
vecāks
revīzija
b2bcc7b9af
98 mainītis faili ar 2895 papildinājumiem un 781 dzēšanām
  1. 17 0
      src/main/java/com/caimei/www/controller/authorized/user/UserPageController.java
  2. 3 3
      src/main/resources/config/dev/application-dev.yml
  3. 33 8
      src/main/resources/static/css/base/floor.css
  4. 9 0
      src/main/resources/static/css/pay/caimei-pay.css
  5. 17 0
      src/main/resources/static/css/pay/caimei-paycash.css
  6. 10 0
      src/main/resources/static/css/product/detail.h5.css
  7. 9 0
      src/main/resources/static/css/product/detail.pc.css
  8. 52 139
      src/main/resources/static/css/product/instruement-list.css
  9. 40 87
      src/main/resources/static/css/product/list.css
  10. 10 1
      src/main/resources/static/css/product/product-coupon.css
  11. 20 3
      src/main/resources/static/css/shopping/shopping.css
  12. 26 3
      src/main/resources/static/css/supplier/index.css
  13. 1 1
      src/main/resources/static/css/user-center/account/coupon.css
  14. 49 12
      src/main/resources/static/css/user-center/dashboard.css
  15. 197 0
      src/main/resources/static/css/user-center/member/member-page.css
  16. 83 0
      src/main/resources/static/css/user-center/member/member-product.css
  17. 91 0
      src/main/resources/static/css/user-center/member/member-record.css
  18. 19 2
      src/main/resources/static/css/user-center/order/detail.css
  19. BIN
      src/main/resources/static/img/member/h5-cm-svip-bg-01.png
  20. BIN
      src/main/resources/static/img/member/h5-cm-svip-bg-02.png
  21. BIN
      src/main/resources/static/img/member/h5-cm-svip-bg-03.png
  22. BIN
      src/main/resources/static/img/member/h5-cm-svip-coupon-able.png
  23. BIN
      src/main/resources/static/img/member/h5-cm-svip-coupon-unable.png
  24. BIN
      src/main/resources/static/img/member/h5-cm-svip-icon1.png
  25. BIN
      src/main/resources/static/img/member/h5-cm-svip-icon2.png
  26. BIN
      src/main/resources/static/img/member/h5-cm-svip-icon3.png
  27. BIN
      src/main/resources/static/img/member/h5-cm-svip-icon4.png
  28. BIN
      src/main/resources/static/img/member/h5-cm-svip-icon5.png
  29. BIN
      src/main/resources/static/img/member/h5-cm-svip-icon6.png
  30. BIN
      src/main/resources/static/img/member/h5-cm-svip-icon7.png
  31. BIN
      src/main/resources/static/img/member/h5-cm-svip-icon8.png
  32. BIN
      src/main/resources/static/img/member/pc-cm-svip-bg-01.png
  33. BIN
      src/main/resources/static/img/member/pc-cm-svip-bg-02.png
  34. BIN
      src/main/resources/static/img/member/pc-cm-svip-bg-03.png
  35. BIN
      src/main/resources/static/img/member/pc-cm-svip-coupon-able.png
  36. BIN
      src/main/resources/static/img/member/pc-cm-svip-coupon-unable.png
  37. BIN
      src/main/resources/static/img/member/pc-cm-svip-icon1.png
  38. BIN
      src/main/resources/static/img/member/pc-cm-svip-icon2.png
  39. BIN
      src/main/resources/static/img/member/pc-cm-svip-icon3.png
  40. BIN
      src/main/resources/static/img/member/pc-cm-svip-icon4.png
  41. BIN
      src/main/resources/static/img/member/pc-cm-svip-icon5.png
  42. BIN
      src/main/resources/static/img/member/pc-cm-svip-icon6.png
  43. BIN
      src/main/resources/static/img/member/pc-cm-svip-icon7.png
  44. BIN
      src/main/resources/static/img/member/pc-cm-svip-icon8.png
  45. 5 2
      src/main/resources/static/js/account/login.js
  46. 24 1
      src/main/resources/static/js/account/register-club.js
  47. 6 0
      src/main/resources/static/js/base.js
  48. 41 0
      src/main/resources/static/js/common/serviceapi/pay.service.js
  49. 12 0
      src/main/resources/static/js/common/serviceapi/product.service.js
  50. 56 1
      src/main/resources/static/js/common/serviceapi/user.service.js
  51. 4 0
      src/main/resources/static/js/index.js
  52. 56 15
      src/main/resources/static/js/pay/caimei-pay.js
  53. 157 16
      src/main/resources/static/js/pay/caimei-paycash.js
  54. 27 7
      src/main/resources/static/js/pay/caimei-paymobile.js
  55. 30 11
      src/main/resources/static/js/pay/caimei-success.js
  56. 49 12
      src/main/resources/static/js/pay/caimei-wechatpay.js
  57. 4 0
      src/main/resources/static/js/product/detail.js
  58. 6 0
      src/main/resources/static/js/product/instruement.js
  59. 5 0
      src/main/resources/static/js/product/list.js
  60. 7 1
      src/main/resources/static/js/product/produce-list.js
  61. 4 0
      src/main/resources/static/js/product/product-coupon.js
  62. 34 29
      src/main/resources/static/js/shopping/cart.js
  63. 3 0
      src/main/resources/static/js/shopping/confirm.js
  64. 20 1
      src/main/resources/static/js/supplier/index.js
  65. 2 1
      src/main/resources/static/js/user-center/account/beans.js
  66. 52 0
      src/main/resources/static/js/user-center/dashboard.js
  67. 381 0
      src/main/resources/static/js/user-center/member/memberPage.js
  68. 126 0
      src/main/resources/static/js/user-center/member/memberProduct.js
  69. 123 0
      src/main/resources/static/js/user-center/member/memberRecord.js
  70. 23 7
      src/main/resources/static/js/user-center/setting/information.js
  71. 19 5
      src/main/resources/static/js/user-center/setting/upgrade.js
  72. 0 0
      src/main/resources/static/lib/datapicker/moment-2.29.min.js
  73. 19 8
      src/main/resources/templates/account/register-club.html
  74. 9 0
      src/main/resources/templates/account/upgrade.html
  75. 7 2
      src/main/resources/templates/components/footer.html
  76. 1 0
      src/main/resources/templates/components/header.html
  77. 43 30
      src/main/resources/templates/index.html
  78. 16 2
      src/main/resources/templates/pay/caimei-pay.html
  79. 18 3
      src/main/resources/templates/pay/caimei-paycash.html
  80. 8 6
      src/main/resources/templates/pay/caimei-paymobile.html
  81. 3 2
      src/main/resources/templates/pay/caimei-success.html
  82. 31 9
      src/main/resources/templates/product/detail.html
  83. 42 35
      src/main/resources/templates/product/instruelist.html
  84. 43 32
      src/main/resources/templates/product/instrument.html
  85. 38 34
      src/main/resources/templates/product/list.html
  86. 37 33
      src/main/resources/templates/product/product-coupon.html
  87. 52 39
      src/main/resources/templates/shopping/cart.html
  88. 57 41
      src/main/resources/templates/shopping/confirm.html
  89. 57 111
      src/main/resources/templates/supplier/index.html
  90. 19 10
      src/main/resources/templates/user-center/dashboard.html
  91. 69 0
      src/main/resources/templates/user-center/member/member-product.html
  92. 113 0
      src/main/resources/templates/user-center/member/member-record.html
  93. 199 0
      src/main/resources/templates/user-center/member/member.html
  94. 20 6
      src/main/resources/templates/user-center/order/detail.html
  95. 1 1
      src/main/resources/templates/user-center/order/list.html
  96. 1 1
      src/main/resources/templates/user-center/repair/list.html
  97. 14 3
      src/main/resources/templates/user-center/setting/information.html
  98. 16 5
      src/main/resources/templates/user-center/setting/upgrade.html

+ 17 - 0
src/main/java/com/caimei/www/controller/authorized/user/UserPageController.java

@@ -58,6 +58,12 @@ public class UserPageController extends BaseController {
 	private static final String COUPON_COLLECTION = "user-center/account/coupon-collection";
 	/** 兑换优惠券 */
 	private static final String COUPON_EXCHANGE = "user-center/account/coupon-exchange";
+	/** 会员中心 */
+	private static final String MEMBER_PAGE = "user-center/member/member";
+	/** 会员优惠商品 */
+	private static final String MEMBER_PRODUCT_LIST = "user-center/member/member-product";
+	/** 会员购买记录 */
+	private static final String MEMBER_RECORD = "user-center/member/member-record";
 	/** 收藏商品 */
 	private static final String COLLECTION = "user-center/collection/collection";
 
@@ -186,4 +192,15 @@ public class UserPageController extends BaseController {
     @GetMapping("/user/collection.html")
     public String collection() {return COLLECTION;}
 
+    /** 会员中心 */
+    @GetMapping("/user/member.html")
+    public String member() {return MEMBER_PAGE;}
+
+    /** 会员优惠商品 */
+    @GetMapping("/user/member-product.html")
+    public String memberProduct() {return MEMBER_PRODUCT_LIST;}
+
+    /** 会员开通记录 */
+    @GetMapping("/user/member-record.html")
+    public String memberRecord() {return MEMBER_RECORD;}
 }

+ 3 - 3
src/main/resources/config/dev/application-dev.yml

@@ -12,7 +12,7 @@ spring:
     url: jdbc:mysql://120.79.25.27:3306/caimei?characterEncoding=UTF8&serverTimezone=Asia/Shanghai
     username: developer
     password: J5p3tgOVazNl4ydf
-    type: com.zaxxer.hikari.HikariDataSource
+    #type: com.zaxxer.hikari.HikariDataSource
     hikari:
       minimum-idle: 5
       maximum-pool-size: 15
@@ -55,9 +55,9 @@ logging:
 caimei:
   siteEnv: 0 #网站环境,(2:正式环境,1:测试环境,0:开发环境)
   spiServer: https://spi-b.caimei365.com
-#  spiServer: http://192.168.2.67:8008
+  #spiServer: http://192.168.2.68:8008
   coreServer: https://core-b.caimei365.com
-#  coreServer: http://192.168.2.67:18002
+  #coreServer: http://192.168.2.68:18002
   imageDomain: https://img-b.caimei365.com
   wwwDomain: http:localhost:8009
   destPath: D:/_PLAN_WORKSPACE/test/static

+ 33 - 8
src/main/resources/static/css/base/floor.css

@@ -25,22 +25,24 @@
 .section_page_main.section_2 .page_main_item.ad_02,.section_page_main.section_4 .page_main_item.ad_03{width:344px}
 .section_page .page_main_item_adv{width:100%;height:100%;display:block}
 .section_page .page_main_image{width:164px;height:164px;display:block;float:left;border-radius:2px 2px 0 0}
-.section_page .page_main_text{width:100%;height:42px;float:left;box-sizing:border-box;margin-top:10px;padding:0 8px;white-space:normal;word-break:break-all;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-height:21px}
+.section_page .page_main_text{width:100%;height:42px;float:left;box-sizing:border-box;margin-top:10px;padding:0 4px;white-space:normal;word-break:break-all;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-height:21px}
 .section_page .page_main_tag{width:100%;height:24px;float:left;margin-top:16px;padding:0 8px}
 .section_page .page_main_tag p{display:block;padding:0 4px;height:24px;box-sizing:border-box;border:1px solid #e3ebf7;border-radius:2px;float:left;font-size:12px;line-height:22px;text-align:center;color:#9aa5b5}
-.section_page .page_main_price{width:100%;height:54px;float:left;box-sizing:border-box;padding:0 8px}
+.section_page .page_main_price{width:100%;height:54px;float:left;box-sizing:border-box;padding:0 4px}
 .section_page .page_main_price .main_price_text{width:100%;height:54px;float:left;box-sizing:border-box}
 .section_page .page_main_price .main_price_unde{width:100%;height:31px;line-height:31px;font-size:14px;color:#4a4f58;text-align:left;float:left}
 .section_page .page_main_price .main_price_show{width:100%;height:30px;line-height:30px;font-size:14px;color:#f94b4b;text-align:left;float:left}
+.section_page .page_main_price .main_price_show del{color: #B8BFCA}
 .section_page .page_main_price .main_price_show.none{color:#999999;text-decoration:line-through}
 .section_page .page_main_price .section_page .page_main_price .main_price_show.none{display:none}
 .section_page .page_main_price .price_text_tag{width:100%;height:22px;box-sizing:border-box;float:left;margin-top:0px}
-.section_page .page_main_price .price_text_tag .couponTag{float:left;margin-right: 4px;}
+.section_page .page_main_price .price_text_tag .couponTag{float:left;margin-right: 2px;}
 .section_page .page_main_price .price_text_tag .listTag{margin:0;float:left}
 .section_page .page_main_price .main_price_none{width:100%;height:24px;box-sizing:border-box;float:left;margin-top:2px}
 .section_page .page_main_price .main_price_none.sec{margin-top:25px}
 .section_page .page_main_price .main_price_none .listTag{margin:0}
 .section_page .page_main_price .price_grade,.section_page .page_main_price .price_grade_shop,.section_page .page_main_price .price_grade_club{float:left;margin:0;height:22px;line-height:22px;color:#4A4F58;font-style:normal;font-size:14px}
+.section_page .page_main_price .price_grade{float: unset}
 .section_page .page_main_price .price_grade span,.section_page .page_main_price .price_grade_shop span,.section_page .page_main_price .price_grade_club span{display:inline-block;float:left}
 .section_page .page_main_price .icon:before{width:67px;height:22px}
 .section_page .page_main_price .price_grade_1:before{background-position:0 -714px}
@@ -48,6 +50,17 @@
 .section_page .page_main_price .price_grade_3:before{background-position:0 -774px}
 .section_page .page_main_price .price_grade_4:before{background-position:0 -804px}
 .section_page .page_main_price .price_grade_5:before{background-position:0 -834px}
+/*标签缩小*/
+.section_page .page_main_price .price_text_tag {-webkit-transform: scale(0.8) translateX(-18px);-ms-transform: scale(0.8) translateX(-18px);transform: scale(0.8) translateX(-18px)}
+.section_page .page_main_price .price_text_tag .svip-tag,
+.section_page .page_main_price .price_text_tag .listTag{-webkit-transform: translateX(4px);-ms-transform: translateX(4px);transform: translateX(4px)}
+/*会员标签*/
+.section_page .page_main_price .price_text_tag .svip-tag{width:100%;height:22px;letter-spacing:0}
+.section_page .page_main_price .price_text_tag .svip-tag .svip-icon{position:relative;z-index:9;display:inline-block;width:30px;height:22px;text-align:center;line-height:22px;font-size:12px;font-weight:400;color:#F0CB72;opacity:1;background:#333333}
+.section_page .page_main_price .price_text_tag .svip-tag .svip-icon.btr{border-radius:2px 8px 0px 2px}
+.section_page .page_main_price .price_text_tag .svip-tag .svip-price{z-index:1;position:relative;display:inline-block;padding-left:24px;padding-right:2px;margin-left:-27px;line-height:22px;background:#F0CB72;opacity:1;border-radius:2px;font-size:12px}
+.section_page .page_main_price .price_text_tag .svip-tag .svip-price span{color: #333}
+
 .section_page .section_page_more{width:100%;height:32px;margin-top:16px;float:left;display:none}
 .section_page .section_page_more.show{display:block}
 .section_page .section_page_more .more{width:98px;height:32px;line-height:32px;font-size:14px;margin:0 auto;border-radius:2px;border:1px solid #cccccc;color:#909090;text-align:left;transition:all 0.2s;cursor:pointer;padding-left:15px;box-sizing:border-box;position:relative}
@@ -78,14 +91,15 @@
 .section_page .section_page_title p{font-weight:normal;color:#93979f;font-size:3.4vw;line-height:4.3vw}
 .section_page .page_main_item{width:45.6vw !important;height:68vw;overflow:hidden;margin:0 1.3vw 2.6vw 1.3vw;background:#fff;text-align:left}
 .section_page .page_main_image{width:45.6vw;height:45.6vw}
-.section_page .page_main_text{padding:0 3.2vw;height:9.3vw;line-height:5vw;font-size:3.4vw;vertical-align:middle;word-break:break-all;overflow:hidden;text-overflow:ellipsis;display:-webkit-inline-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;margin-top:1vw}
+.section_page .page_main_text{padding:0 2vw;height:9.3vw;line-height:5vw;font-size:3.4vw;vertical-align:middle;word-break:break-all;overflow:hidden;text-overflow:ellipsis;display:-webkit-inline-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;margin-top:1vw}
 .section_page .page_main_item.ad_02 img,.section_page .page_main_item.ad_03 img,.section_page .page_main_item.ad_01 img{height:100%;width:100%}
-.section_page .page_main_price{width:100%;box-sizing:border-box;padding:0 3.2vw}
-.section_page .page_main_price .price_text_tag{width:100%;box-sizing:border-box;float:left}
+.section_page .page_main_price{width:100%;box-sizing:border-box;padding:0 1.5vw}
+.section_page .page_main_price .price_text_tag{width:100%;box-sizing:border-box;float:left;margin-top: 1.2vw}
 .section_page .page_main_price .main_price_show{color:#f94b4b}
+.section_page .page_main_price .main_price_show del{color: #B8BFCA}
 .section_page .page_main_price .section_page .page_main_price .main_price_show.none{display:none}
 .section_page .page_main_price .main_price_unde{width:100%;height:6.5vw;line-height:6.5vw;font-size:3.4vw;color:#4a4f58;text-align:left;float:left}
-.section_page .page_main_price .price_text_tag .couponTag{padding:0 2vw;border:.27vw solid #f94b4b;background:#fff1eb;font-size:2.8vw;float:left;height:4.2vw;line-height:4.2vw;color: #f94b4b;border-radius: 0.2vw;margin-right: 1vw;}
+.section_page .page_main_price .price_text_tag .couponTag{padding:0 0.5vw;border:.27vw solid #f94b4b;background:#fff1eb;font-size:2.8vw;float:left;height:4.2vw;line-height:4.2vw;color: #f94b4b;border-radius: 0.2vw;margin-right: 0.8vw;}
 .section_page .page_main_price .price_text_tag .listTag{padding:0 2vw;border:.27vw solid #ffe6dc;background:none;font-size:2.8vw;float:left;height:4.2vw;line-height:4.2vw;border-radius: 0.2vw;}
 .section_page .section_page_main.section_6{height:auto}
 .section_page .section_page_main.section_6 .section_page_more{display:none}
@@ -130,6 +144,17 @@
 .section_page .page_main_price .price_grade .icon,.section_page .page_main_price .price_grade_shop .icon,.section_page .page_main_price .price_grade_club .icon{display:inline-block;font-size:0;height:5vw;line-height:5vw;vertical-align:text-bottom}
 .section_page .page_main_tag{color:#9aa5b5;margin:1vw 3.2vw;border:.27vw solid #e3ebf7;display:inline-block;padding:0 1.3vw;border-radius:.54vw}
 .section_page .page_main_price .bold{font-weight:bold}
+/*会员标签*/
+.section_page .page_main_price .price_text_tag {-webkit-transform: scale(0.8) translateX(-4.2vw);-ms-transform: scale(0.8) translateX(-4.2vw);transform: scale(0.8) translateX(-4.2vw)}
+.section_page .page_main_price .price_text_tag .svip-tag,
+.section_page .page_main_price .price_text_tag .listTag{-webkit-transform: translateX(1.2vw);-ms-transform: translateX(1.2vw);transform: translateX(1.2vw)}
+.section_page .page_main_price .price_text_tag .svip-tag{float: left; height:4.74vw;letter-spacing:0;overflow: hidden}
+.section_page .page_main_price .price_text_tag .svip-tag .svip-icon{position:relative;z-index:9;float: left; width:9.8vw;height:4.74vw;text-align:center;line-height:4.74vw;font-size:2.8vw;font-weight:400;color:#F0CB72;opacity:1;background:#333333}
+.section_page .page_main_price .price_text_tag .svip-tag .svip-icon.btr{border-radius:2px 8px 0px 2px}
+.section_page .page_main_price .price_text_tag .svip-tag .svip-price{z-index:1;position:relative;float: left;padding-left:5.4vw;padding-right:0.6vw;margin-left:-6vw;line-height:4.74vw;height: 4.74vw; background:#F0CB72;opacity:1;border-radius:2px;font-size:2.8vw}
+.section_page .page_main_price .price_text_tag .svip-tag .svip-price span{color: #333}
+.section_page .page_main_price .price_text_tag .svip-tag .svip-price span:nth-child(2){margin-left: -0.4vw}
+
 
 #recommendBox{width: calc(100%);height:150vw;overflow:hidden;position:relative;}
 #recommendBox .swiper-pagination{width:100%;height:2.6vw;z-index:1;text-align:center;font-size:0;position:absolute;bottom:2.6vw;left:0}
@@ -137,4 +162,4 @@
 #recommendBox .swiper-pagination .swiper-pagination-bullet:before{content:"";display:block;width:100%;height:.6vw;background:#E15616;border-radius:.3vw}
 #recommendBox .swiper-pagination .swiper-pagination-bullet.swiper-pagination-bullet-active{width:3.8vw;opacity:1}
 #recommendBox .swiper-wrapper{height:inherit}
-}
+}

+ 9 - 0
src/main/resources/static/css/pay/caimei-pay.css

@@ -22,6 +22,15 @@
     .pay-title .title-right{float: right;height: 40px;}
     .pay-title .title-right .time{width: 172px;height: 40px;padding-left: 62px;background: url("/img/pay/icon-time.png")no-repeat;background-size: cover;box-sizing: border-box;}
     .pay-title .title-right .time span{width: 24px;height: 24px;display: block;margin: 8px 5px;float: left;font-size: 16px;line-height: 24px;text-align: center;color: #FFFFFF;}
+    .pay-svip{margin-top:24px}
+    .pay-svip+.pay-method .method-title{background:#F5F5F5 !important}
+    .pay-svip .pay-svip-title{padding:0 0 16px 16px;font-size:16px;font-weight:400;color:#2D3036}
+    .pay-svip .content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:1184px;height:78px;padding-left:112px;padding-right:24px;-webkit-box-sizing:border-box;box-sizing:border-box;background:url(/img/member/pc-cm-svip-bg-03.png) no-repeat center;background-size:1184px 78px}
+    .pay-svip .pay-svip-detail{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}
+    .pay-svip .pay-svip-detail .tit{font-size:16px;font-weight:400;color:#4E4539;padding-bottom:4px}
+    .pay-svip .pay-svip-detail .pay-amount{margin-left:18px;font-size:28px;font-weight:bold;color:#4E4539}
+    .pay-svip .pay-svip-detail .pay-amount > span{font-size:12px;vertical-align:0}
+    .pay-svip .svip-indent{padding-top:24px;font-size:16px;font-weight:bold;color:#4E4539}
     .pay-goods .good-top{width: 100%;float: left;box-sizing: border-box;}
     .pay-goods .good-top .good-top-inner{width: 100%;height: 55px;padding: 0 20px;float: left;border-bottom: 1px solid #F7F7F7;box-sizing: border-box;}
     .pay-goods .good-top .bot-left{float: right;height: 24px;line-height: 24px;font-size: 12px;padding: 16px 0 15px 0;color: #999999;cursor: pointer;}

+ 17 - 0
src/main/resources/static/css/pay/caimei-paycash.css

@@ -37,6 +37,15 @@ input::-webkit-outer-spin-button {
     .pay-title .pay-input .input-text{font-size: 18px;color: #333333;}
     .pay-title .pay-input .input-text span{font-size: 14px;}
     .pay-title .pay-input .input{width: 215px;height: 34px;display: inline-block;font-size: 14px;line-height: 34px;padding: 0 10px;border: 1px solid #EBEBEB;border-radius: 5px;}
+    .pay-svip{margin-top:24px}
+    .pay-svip+.pay-method .method-title{background:#F5F5F5 !important}
+    .pay-svip .pay-svip-title{padding:0 0 16px 16px;font-size:16px;font-weight:400;color:#2D3036}
+    .pay-svip .content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:1184px;height:78px;padding-left:112px;padding-right:24px;-webkit-box-sizing:border-box;box-sizing:border-box;background:url(/img/member/pc-cm-svip-bg-03.png) no-repeat center;background-size:1184px 78px}
+    .pay-svip .pay-svip-detail{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}
+    .pay-svip .pay-svip-detail .tit{font-size:16px;font-weight:400;color:#4E4539;padding-bottom:4px}
+    .pay-svip .pay-svip-detail .pay-amount{margin-left:18px;font-size:28px;font-weight:bold;color:#4E4539}
+    .pay-svip .pay-svip-detail .pay-amount > span{font-size:12px;vertical-align:0}
+    .pay-svip .svip-indent{padding-top:24px;font-size:16px;font-weight:bold;color:#4E4539}
     .pay-ment{width: 100%;height: auto;float: left;background: #FFFFFF;margin-top: 7px;box-shadow: 0px 3px 6px 0px rgba(0, 0, 0, 0.07);}
     .pay-ment .pay-record{width: 100%;height: auto;float: left;background: #FFFFFF;padding: 10px 0;box-sizing:border-box;}
     .pay-ment .pay-record .record-title{width: 100%;padding: 0 20px;background: #FFFFFF;line-height: 44px;font-size: 16px;color: #333333;text-align: left;box-sizing:border-box;}
@@ -127,6 +136,14 @@ input::-webkit-outer-spin-button {
     .pay-title .pay-input{white-space:nowrap}
     .pay-title .pay-input p{display:inline-block}
     .pay-title .pay-input input{outline:none;box-sizing:border-box;width:100%;height:7vw;line-height:5vw;padding:1vw 0;text-indent:1.2em;font-size:3.4vw;text-align:left;background-color:#ffffff;border-radius:2px;border:solid 1px #b8bfca}
+    .pay-svip{padding-top:4vw;background:#fff}
+    .pay-svip .pay-svip-title{padding:0 0 2.7vw 3.3vw;font-size:3.7vw;font-weight:400;color:#2D3036}
+    .pay-svip .content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100vw;height:20.6vw;padding-left:17vw;padding-right:3.2vw;-webkit-box-sizing:border-box;box-sizing:border-box;background:url(/img/member/h5-cm-svip-bg-03.png) no-repeat center;background-size:100vw 20.6vw}
+    .pay-svip .pay-svip-detail{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}
+    .pay-svip .pay-svip-detail .tit{font-size:2.6vw;font-weight:400;color:#4E4539;padding-bottom:0.4vw}
+    .pay-svip .pay-svip-detail .pay-amount{margin-left:1.7vw;font-size:5.6vw;font-weight:bold;color:#4E4539}
+    .pay-svip .pay-svip-detail .pay-amount > span{font-size:2.4vw;vertical-align:0}
+    .pay-svip .svip-indent{padding-top:8vw;font-size:2.8vw;font-weight:bold;color:#4E4539}
     .record-title,.method-title{font-size:3.7vw;color:#22272e;line-height:8vw}
     .pay-method-tab{padding-top:1.5vw;border-bottom:1px solid #EBEBEB;color:#22272e}
     .pay-method-tab .item{display:block;box-sizing:border-box;height:9vw;line-height:9vw;padding:0 5vw;border:1px solid transparent;font-size:3.4vw;margin-bottom:-1px}

+ 10 - 0
src/main/resources/static/css/product/detail.h5.css

@@ -27,6 +27,7 @@ li{list-style:none}
 .productBox .detailBox .row>i{font-style:normal;margin-right:2vw;}
 .productBox .detailBox .row>em{font-style:normal;color:#4A4F58}
 .productBox .detailBox .row>em.p{font-weight:bold;}
+.productBox .detailBox .row>em del{color: #93979F}
 .productBox .detailBox .row>em.ser{color:#93979F;display:inline-block;width: 24%}
 .productBox .detailBox .row>em.ser:before{content:'\2713';display:inline-block;width:3.4vw;height:3.4vw;text-align:center;line-height:3.4vw;font-size:3.4vw;background:#E15616;border-radius:1.7vw;color:#FFF;margin-right:1.4vw}
 .productBox .detailBox .row .coupon-tags{display: inline-block;box-sizing: border-box;line-height: 5vw;}
@@ -42,6 +43,15 @@ li{list-style:none}
 .productBox .detailBox .price .icon.i3:before{background-position:0 -33.8vw}
 .productBox .detailBox .price .icon.i4:before{background-position:0 -38.8vw}
 .productBox .detailBox .price .icon.i5:before{background-position:0 -44vw}
+
+/*会员标签*/
+.productBox .detailBox .price .svip-tag{height:4.74vw;letter-spacing:0;overflow: hidden;display: inline-block;vertical-align: text-bottom}
+.productBox .detailBox .price .svip-tag .svip-icon{position:relative;z-index:9;float: left; width:9.8vw;height:4.74vw;text-align:center;line-height:4.74vw;font-size:2.8vw;font-weight:400;color:#F0CB72;opacity:1;background:#333333}
+.productBox .detailBox .price .svip-tag .svip-icon.btr{border-radius:2px 8px 0px 2px}
+.productBox .detailBox .price .svip-tag .svip-price{z-index:1;position:relative;float: left;padding-left:5.4vw;padding-right:0.6vw;margin-left:-6vw;line-height:4.74vw;height: 4.74vw; background:#F0CB72;opacity:1;border-radius:2px;font-size:2.8vw}
+.productBox .detailBox .price .svip-tag .svip-price span{color: #333}
+.productBox .detailBox .price .svip-tag .svip-price span:nth-child(2){margin-left: -0.4vw}
+
 .productBox .detailBox .number{display:inline-block;width:26.6vw;line-height:6.4vw;height:6.4vw;box-sizing:border-box;border:1px solid #FFE6DC;border-radius:2px;font-size:0;white-space:nowrap;text-align:center;overflow:hidden;vertical-align:top}
 .productBox .detailBox .number>em{display:inline-block;width:6.4vw;height:6.4vw;background:#FFE6DC;font-size:4vw;line-height:6vw;vertical-align:top}
 .productBox .detailBox .number input{width:13.5vw;border:none;line-height:6vw;vertical-align:top;text-align:center;color:#E15616;font-size:3.4vw}

+ 9 - 0
src/main/resources/static/css/product/detail.pc.css

@@ -38,6 +38,7 @@ li{list-style:none;}
 .productBox .detailBox .row .l:after{content:'';display:inline-block;width:100%}
 .productBox .detailBox .row>i{font-style:normal;}
 .productBox .detailBox .row>em{font-style:normal;color:#333333;margin-left: 15px}
+.productBox .detailBox .row>em del{color: #93979F}
 .productBox .detailBox .row>em.p{font-weight:bold;}
 .productBox .detailBox .row>em.ser{color:#93979F;display:inline-block;margin-right:20px;}
 .productBox .detailBox .row>em.ser:before{width:20px;height:20px;margin-right:5px;background-position:-60px 0;vertical-align:text-top;}
@@ -55,6 +56,14 @@ li{list-style:none;}
 .productBox .detailBox .price .icon.i4:before{background-position:-295px -242px}
 .productBox .detailBox .price .icon.i5:before{background-position:-295px -276px}
 .productBox .detailBox .priceTag {position:absolute;top:0px;left:88px;}
+
+/*会员标签*/
+.productBox .detailBox .price .svip-tag{width:100%;height:22px;letter-spacing:0;display: inline;margin-left: 10px}
+.productBox .detailBox .price .svip-tag .svip-icon{position:relative;z-index:9;display:inline-block;width:36px;height:22px;text-align:center;line-height:22px;font-size:12px;font-weight:400;color:#F0CB72;opacity:1;background:#333333}
+.productBox .detailBox .price .svip-tag .svip-icon.btr{border-radius:2px 8px 0px 2px}
+.productBox .detailBox .price .svip-tag .svip-price{z-index:1;position:relative;display:inline-block;padding-left:22px;padding-right:4px;margin-left:-27px;line-height:22px;background:#F0CB72;opacity:1;border-radius:2px;font-size:14px}
+.productBox .detailBox .price .svip-tag .svip-price span{color: #333;margin-left: 4px}
+
 .productBox .detailBox .number{display:inline-block;width:96px;line-height:24px;height:24px;box-sizing:border-box;border:1px solid #FFE6DC;border-radius:2px;font-size:0;white-space:nowrap;text-align:center;overflow:hidden;vertical-align:top;}
 .productBox .detailBox .number>em{display:inline-block;width:24px;height:22px;background:#FFE6DC;font-size:20px;font-style:normal;line-height:20px;vertical-align:top;cursor:pointer}
 .productBox .detailBox .number input{width:48px;border:none;line-height:22px;font-size:14px;vertical-align:top;text-align:center;color:#E15616;}

+ 52 - 139
src/main/resources/static/css/product/instruement-list.css

@@ -1,3 +1,5 @@
+.productItem .price .price_text_tag{-webkit-transform: scale(0.8) translateX(-20px);-ms-transform: scale(0.8) translateX(-20px);transform: scale(0.8) translateX(-20px)}
+
 @media screen and (min-width:768px){
     #productList{width: 1184px;margin:32px auto}
     .crumbs-nav{height: 40px}
@@ -10,149 +12,51 @@
     .sortBox li.up:after{border-top-color:#E15616;opacity:.3}
     .sortBox li.down:after{border-top-color:#E15616}
     .sortBox li.down:before{border-bottom-color:#E15616;opacity:.3}
-    .classification .class-nav-main div,.classification .class-nav-main li{
-        text-align: center;
-        display: inline-block;
-        line-height: 64px;
-        color: #4a4f58;
-        font-size: 16px;
-        cursor: pointer;
-        padding: 0 16px;
-    }
-    #listClassify{
-        margin: 0 auto;
-        box-sizing: border-box;
-        background: rgba(255,255,255,1);
-        border-radius: 0 0 2px 2px;
-    }
-     .classification {
-        border-bottom: 1px solid #f7f7f7;
-        align-items: center;
-        display: -webkit-flex;
-    }
-    .classification .class-title{
-        width: 127px;
-        text-align: center;
-        font-size: 16px;
-        line-height: 64px;
-    }
-    .classification .class-nav-main{
-        width:1040px;
-        display: inline-block;
-        border-left: 1px solid #f7f7f7;
-        font-size: 0;
-    }
-    .classification .class-nav-main div.on, .classification .class-nav-main div.on a{
-        color: #e15616;
-    }
-    .crumbs-nav >div{display: inline-block}
-    .crumbs-nav-item{
-        display: inline-block;
-        padding: 0 12px;
-        border: 1px solid #cccccc;
-        line-height: 24px;
-        margin-right: 16px;
-        color: #909090;
-        border-radius: 2px;
-        cursor: pointer;
-    }
-    .crumbs-nav-item.on{
-        color: #e15616;
-        border: 1px solid #e15616;
-    }
-    .sortBox .on{background:#ffe6dc }
-    .classification.sortBox .class-nav-main li{
-        border-right: 1px solid #f7f7f7;
-        width: 127px;
-        padding: 0;
-        position: relative;
-    }
-
-    .list-container{
-        margin-top: 32px;
-        width: 1200px;
-    }
-    .list-container ul li.productItem {
-        width: 184px;
-        height: 268px;
-        float: left;
-        background: #fff;
-        position: relative;
-        margin: 0 16px 16px 0;
-        overflow: hidden;
-        float: left;
-    }
-    .list-container ul li img {
-        width: 100%;
-        height: 164px;
-    }
-    .list-container ul li .name{
-        display: block;
-        padding: 0 8px;
-        margin-top: 8px;
-        height: 40px;
-        line-height: 21px;
-        vertical-align: middle;
-        word-break: break-all;
-        overflow: hidden;
-        text-overflow: ellipsis;
-        display: -webkit-inline-box;
-        -webkit-line-clamp: 2;
-        -webkit-box-orient: vertical
-    }
-    .productItem .price{
-        border: 0;
-        box-sizing: border-box;
-        padding: 0 8px;
-        height: 54px;
-        width: 100%;
-    }
-    .productItem .price .icon:before{
-        width: 63px;
-    }
-    .productItem .price .icon.i5:before {
-        background-position: -2px -832px;
-    }
-    .productItem .price .icon.i1:before {
-        background-position: -2px -712px;
-    }
-    .productItem .price .icon.i2:before {
-        background-position: -2px -742px;
-    }
-    .productItem .price .icon.i3:before {
-        background-position: -2px -772px;
-    }
-    .productItem .price .icon.i4:before {
-        background-position: -2px -802px;
-    }
-    .listTag{
-        margin: 12px 8px 0 0;
-        padding: 0 2px;
-    }
-    .productItem .image .icon{
-        position: inherit;
-    }
-    .sortBox li.on, .sortBox li.up, .sortBox li.down {
-        background: #FFE6DC;
-        color: #E15616;
-    }
-    .empty{
-        margin-top: 32px;
-        background: #fff;
-    }
-    .empty p{
-        color: #909090;
-        font-size: 14px;
-    }
+    .classification .class-nav-main div,.classification .class-nav-main li{text-align:center;display:inline-block;line-height:64px;color:#4a4f58;font-size:16px;cursor:pointer;padding:0 16px}
+    #listClassify{margin:0 auto;-webkit-box-sizing:border-box;box-sizing:border-box;background:rgba(255,255,255,1);border-radius:0 0 2px 2px}
+    .classification{border-bottom:1px solid #f7f7f7;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-flex}
+    .classification .class-title{width:127px;text-align:center;font-size:16px;line-height:64px}
+    .classification .class-nav-main{width:1040px;display:inline-block;border-left:1px solid #f7f7f7;font-size:0}
+    .classification .class-nav-main div.on,.classification .class-nav-main div.on a{color:#e15616}
+    .crumbs-nav >div{display:inline-block}
+    .crumbs-nav-item{display:inline-block;padding:0 12px;border:1px solid #cccccc;line-height:24px;margin-right:16px;color:#909090;border-radius:2px;cursor:pointer}
+    .crumbs-nav-item.on{color:#e15616;border:1px solid #e15616}
+    .sortBox .on{background:#ffe6dc}
+    .classification.sortBox .class-nav-main li{border-right:1px solid #f7f7f7;width:127px;padding:0;position:relative}
+    .list-container{margin-top:32px;width:1200px}
+    .list-container ul li.productItem{width:184px;height:268px;float:left;background:#fff;position:relative;margin:0 16px 16px 0;overflow:hidden;float:left}
+    .list-container ul li img{width:100%;height:164px}
+    .list-container ul li .name{display:block;padding:0 8px;margin-top:8px;height:40px;line-height:21px;vertical-align:middle;word-break:break-all;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;display:-webkit-inline-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
+    .productItem .price{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 8px;height:54px;width:100%}
+    .productItem .price .icon:before{width:63px}
+    .productItem .price .icon.i5:before{background-position:-2px -832px}
+    .productItem .price .icon.i1:before{background-position:-2px -712px}
+    .productItem .price .icon.i2:before{background-position:-2px -742px}
+    .productItem .price .icon.i3:before{background-position:-2px -772px}
+    .productItem .price .icon.i4:before{background-position:-2px -802px}
+    .listTag{margin:12px 8px 0 0;padding:0 2px}
+    .productItem .image .icon{position:inherit}
+    .sortBox li.on,.sortBox li.up,.sortBox li.down{background:#FFE6DC;color:#E15616}
+    .empty{margin-top:32px;background:#fff}
+    .empty p{color:#909090;font-size:14px}
     .productItem .price em{font-weight: normal}
     .productItem .price em.bold{font-weight: bold}
     .productItem .price .price_text_tag{width: 100%;height: 22px;box-sizing: border-box;float: left;margin-top: 3px;}
     .productItem .price .price_text_tag .listTag{margin: 0;float: left}
-    .productItem .price .price_text_tag .couponTag{margin: 0 8px 0 0;float: left}
+    .productItem .price .price_text_tag .couponTag{margin: 0 4px 0 0;float: left}
     .productItem .price .main_price_unde { width: 100%;height: 31px;line-height: 31px;font-size: 14px;color: #4a4f58;text-align: left;float: left;}
     .productItem .price .main_price_show { width: 100%;height: 30px;line-height: 30px;font-size: 14px;color: #f94b4b;text-align: left;float: left;}
     .productItem .price .main_price_show.none { color: #999999; text-decoration: line-through;}
     .productItem .name .tag{width: 44px;height: 18px;line-height: 18px;font-size: 12px;display: inline-block;margin-right: 5px;text-align: center;color: #FFFFFF !important;background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);border-radius: 0px 10px 0px 0px;}
+    /*会员标签*/
+    .productItem .price .price_text_tag {-webkit-transform: scale(0.8) translateX(-18px);-ms-transform: scale(0.8) translateX(-18px);transform: scale(0.8) translateX(-18px)}
+    .productItem .price .price_text_tag .svip-tag,
+    .productItem .price .price_text_tag .listTag{-webkit-transform: translateX(4px);-ms-transform: translateX(4px);transform: translateX(4px)}
+    .productItem .price .price_text_tag .svip-tag{width:100%;height:22px;letter-spacing:0}
+    .productItem .price .price_text_tag .svip-tag .svip-icon{position:relative;z-index:9;display:inline-block;width:30px;height:22px;text-align:center;line-height:22px;font-size:12px;font-weight:400;color:#F0CB72;opacity:1;background:#333333}
+    .productItem .price .price_text_tag .svip-tag .svip-icon.btr{border-radius:2px 8px 0px 2px}
+    .productItem .price .price_text_tag .svip-tag .svip-price{z-index:1;position:relative;display:inline-block;padding-left:24px;padding-right:2px;margin-left:-27px;line-height:22px;background:#F0CB72;opacity:1;border-radius:2px;font-size:12px}
+    .productItem .price .price_text_tag .svip-tag .svip-price span{color: #333}
 
 }
 
@@ -181,15 +85,24 @@
     .productItem .price .mIcon.i4:before {background-position: -84vw -90.7vw;}
     .productItem .price .mIcon {display: inline-block;font-size: 0;height: 5vw;line-height: 5vw;vertical-align: text-bottom;}
     .productItem img {width: 45.6vw;height: 45.6vw;}
-    .productItem .name {display: block;padding: 0 3.2vw;height: 9.3vw;line-height: 4.8vw;font-size: 3.4vw;vertical-align: middle;word-break: break-all;overflow: hidden;text-overflow: ellipsis;display: -webkit-inline-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;}
-    .price {padding: 2vw 3.2vw;overflow: hidden;}
-    .couponTag{padding:0 2vw;border:.27vw solid #f94b4b;background:#fff1eb;font-size:2.8vw;float:left;height:4.2vw;line-height:4.2vw;color: #f94b4b;border-radius: 0.2vw;margin-right: 1vw;}
+    .productItem .name {display: block;padding: 0 1.2vw;height: 9.3vw;line-height: 4.8vw;font-size: 3.4vw;vertical-align: middle;word-break: break-all;overflow: hidden;text-overflow: ellipsis;display: -webkit-inline-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;}
+    .price {padding: 2vw 1.2vw;overflow: hidden;}
+    .couponTag{padding:0 0.4vw;border:.27vw solid #f94b4b;background:#fff1eb;font-size:2.8vw;float:left;height:4.2vw;line-height:4.2vw;color: #f94b4b;border-radius: 0.2vw;margin-right: 1vw;}
     .listTag{padding:0 2vw;border:.27vw solid #ffe6dc;background:none;font-size:2.8vw;float:left;height:4.2vw;line-height:4.2vw;border-radius: 0.2vw;}
     .price_grade{width: 100%;float: left;margin-top: 2vw;}
     .productItem .price .main_price_unde {width: 100%;height: 6.5vw;line-height: 6.5vw;font-size: 3.4vw;color: #4a4f58;text-align: left;float: left;}
     .productItem .price .price_text_tag {width: 100%;box-sizing: border-box;float: left;}
     .productItem .price .main_price_show{color: #f94b4b}
     .productItem .name span.tag{width: 11.3vw;height: 4.3vw;line-height: 4.3vw;font-size: 2.8vw;display: inline-block;margin-right: 1.3vw;text-align: center;color: #FFFFFF !important;background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);border-radius: 0px 10px 0px 0px;margin-top: .25vw;}
-
+    /*会员标签*/
+    .productItem .price .price_text_tag {-webkit-transform: scale(0.8) translateX(-4.2vw);-ms-transform: scale(0.8) translateX(-4.2vw);transform: scale(0.8) translateX(-4.2vw)}
+    .productItem .price .price_text_tag .svip-tag,
+    .productItem .price .price_text_tag .listTag{-webkit-transform: translateX(1.2vw);-ms-transform: translateX(1.2vw);transform: translateX(1.2vw)}
+    .productItem .price .price_text_tag .svip-tag{float: left; height:4.74vw;letter-spacing:0;overflow: hidden}
+    .productItem .price .price_text_tag .svip-tag .svip-icon{position:relative;z-index:9;float: left; width:9.8vw;height:4.74vw;text-align:center;line-height:4.74vw;font-size:2.8vw;font-weight:400;color:#F0CB72;opacity:1;background:#333333}
+    .productItem .price .price_text_tag .svip-tag .svip-icon.btr{border-radius:2px 8px 0px 2px}
+    .productItem .price .price_text_tag .svip-tag .svip-price{z-index:1;position:relative;float: left;padding-left:5.4vw;padding-right:0.6vw;margin-left:-6vw;line-height:4.74vw;height: 4.74vw; background:#F0CB72;opacity:1;border-radius:2px;font-size:2.8vw}
+    .productItem .price .price_text_tag .svip-tag .svip-price span{color: #333}
+    .productItem .price .price_text_tag .svip-tag .svip-price span:nth-child(2){margin-left: -0.4vw}
 }
 

+ 40 - 87
src/main/resources/static/css/product/list.css

@@ -16,84 +16,28 @@ li{list-style:none}
     .sortBox li.down:after{border-top-color:#E15616}
     .sortBox li.down:before{border-bottom-color:#E15616;opacity:.3}
     .productList{width:1184px;margin:0 auto;box-sizing:border-box}
-    .productList .productItem {
-        width: 184px;
-        height: 268px;
-        float: left;
-        background: #fff;
-        position: relative;
-        margin: 0 16px 16px 0;
-        overflow: hidden;
-        float: left;
-    }
-    .productList .productItem:nth-child(6n){margin-right: 0;}
-    .productList .productItem img {
-        width: 100%;
-        height: 164px;
-    }
-    .productList .productItem .name{
-        display: block;
-        padding: 0 8px;
-        margin-top: 8px;
-        height: 40px;
-        line-height: 21px;
-        vertical-align: middle;
-        word-break: break-all;
-        overflow: hidden;
-        text-overflow: ellipsis;
-        display: -webkit-inline-box;
-        -webkit-line-clamp: 2;
-        -webkit-box-orient: vertical
-    }
-    .productItem .price{
-        border: 0;
-        box-sizing: border-box;
-        padding: 0 8px;
-        height: 54px;
-        width: 100%;
-    }
-    .productItem .price .icon:before{
-        width: 63px;
-    }
-    .productItem .price .icon.i5:before {
-        background-position: -2px -832px;
-    }
-    .productItem .price .icon.i1:before {
-        background-position: -2px -712px;
-    }
-    .productItem .price .icon.i2:before {
-        background-position: -2px -742px;
-    }
-    .productItem .price .icon.i3:before {
-        background-position: -2px -772px;
-    }
-    .productItem .price .icon.i4:before {
-        background-position: -2px -802px;
-    }
-    .listTag{
-        margin: 12px 8px 0 0;
-        padding: 0 2px;
-    }
-    .productItem .image .icon{
-        position: inherit;
-    }
-    .sortBox li.on, .sortBox li.up, .sortBox li.down {
-        background: #FFE6DC;
-        color: #E15616;
-    }
-    .empty{
-        margin-top: 32px;
-        background: #fff;
-    }
-    .empty p{
-        color: #909090;
-        font-size: 14px;
-    }
+    .productList .productItem{width:184px;height:268px;float:left;background:#fff;position:relative;margin:0 16px 16px 0;overflow:hidden;float:left}
+    .productList .productItem:nth-child(6n){margin-right:0}
+    .productList .productItem img{width:100%;height:164px}
+    .productList .productItem .name{display:block;padding:0 8px;margin-top:8px;height:40px;line-height:21px;vertical-align:middle;word-break:break-all;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;display:-webkit-inline-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
+    .productItem .price{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 8px;height:54px;width:100%}
+    .productItem .price .icon:before{width:63px}
+    .productItem .price .icon.i5:before{background-position:-2px -832px}
+    .productItem .price .icon.i1:before{background-position:-2px -712px}
+    .productItem .price .icon.i2:before{background-position:-2px -742px}
+    .productItem .price .icon.i3:before{background-position:-2px -772px}
+    .productItem .price .icon.i4:before{background-position:-2px -802px}
+    .listTag{margin:12px 8px 0 0;padding:0 2px}
+    .productItem .image .icon{position:inherit}
+    .sortBox li.on,.sortBox li.up,.sortBox li.down{background:#FFE6DC;color:#E15616}
+    .empty{margin-top:32px;background:#fff}
+    .empty p{color:#909090;font-size:14px}
+
     .productItem .price em{font-weight: normal}
     .productItem .price em.bold{font-weight: bold}
     .productItem .price .price_text_tag{width: 100%;height: 22px;box-sizing: border-box;float: left;margin-top: 3px;}
     .productItem .price .price_text_tag .listTag{margin: 0;float: left}
-    .productItem .price .price_text_tag .couponTag{margin: 0 8px 0 0;float: left}
+    .productItem .price .price_text_tag .couponTag{margin: 0 4px 0 0;float: left}
     .productItem .price .main_price_unde { width: 100%;height: 31px;line-height: 31px;font-size: 14px;color: #4a4f58;text-align: left;float: left;}
     .productItem .price .main_price_show { width: 100%;height: 30px;line-height: 30px;font-size: 14px;color: #f94b4b;text-align: left;float: left;}
     .productItem .price .main_price_show.none { color: #999999; text-decoration: line-through;}
@@ -105,9 +49,15 @@ li{list-style:none}
     .listTitle p{text-indent:1em;line-height:36px;font-size:16px}
     .listTitle p em{color:#e15616;font-style:normal;display:inline-block;height:24px;line-height:24px;padding:0 10px;background:#FFF}
     .productItem .name span.tag{width: 44px;height: 18px;line-height: 18px;font-size: 12px;display: inline-block;margin-right: 5px;text-align: center;color: #FFFFFF !important;background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);border-radius: 0px 10px 0px 0px;margin-top: 2px;}
-
-
-
+    /*会员标签*/
+    .productItem .price .price_text_tag {-webkit-transform: scale(0.8) translateX(-18px);-ms-transform: scale(0.8) translateX(-18px);transform: scale(0.8) translateX(-18px)}
+    .productItem .price .price_text_tag .svip-tag,
+    .productItem .price .price_text_tag .listTag{-webkit-transform: translateX(4px);-ms-transform: translateX(4px);transform: translateX(4px)}
+    .productItem .price .svip-tag{width:100%;height:22px;letter-spacing:0}
+    .productItem .price .svip-tag .svip-icon{position:relative;z-index:9;display:inline-block;width:30px;height:22px;text-align:center;line-height:22px;font-size:12px;font-weight:400;color:#F0CB72;opacity:1;background:#333333}
+    .productItem .price .svip-tag .svip-icon.btr{border-radius:2px 8px 0px 2px}
+    .productItem .price .svip-tag .svip-price{z-index:1;position:relative;display:inline-block;padding-left:24px;padding-right:2px;margin-left:-27px;line-height:22px;background:#F0CB72;opacity:1;border-radius:2px;font-size:12px}
+    .productItem .price .svip-tag .svip-price span{color: #333}
 }
 /**
 * 移动端
@@ -136,9 +86,9 @@ li{list-style:none}
     .productItem .price .mIcon.i4:before {background-position: -84vw -90.7vw;}
     .productItem .price .mIcon {display: inline-block;font-size: 0;height: 5vw;line-height: 5vw;vertical-align: text-bottom;}
     .productItem img {width: 45.6vw;height: 45.6vw;}
-    .productItem .name {display: block;padding: 0 3.2vw;height: 9.3vw;line-height: 4.8vw;font-size: 3.4vw;vertical-align: middle;word-break: break-all;overflow: hidden;text-overflow: ellipsis;display: -webkit-inline-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;}
-    .price {padding: 2vw 3.2vw;overflow: hidden;}
-    .couponTag{padding:0 2vw;border:.27vw solid #f94b4b;background:#fff1eb;font-size:2.8vw;float:left;height:4.2vw;line-height:4.2vw;color: #f94b4b;border-radius: 0.2vw;margin-right: 1vw;}
+    .productItem .name {display: block;padding: 0 1.2vw;height: 9.3vw;line-height: 4.8vw;font-size: 3.4vw;vertical-align: middle;word-break: break-all;overflow: hidden;text-overflow: ellipsis;display: -webkit-inline-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;}
+    .price {padding: 2vw 1.2vw;overflow: hidden;}
+    .couponTag{padding:0 .4vw;border:.27vw solid #f94b4b;background:#fff1eb;font-size:2.8vw;float:left;height:4.2vw;line-height:4.2vw;color: #f94b4b;border-radius: 0.2vw;margin-right: .4vw;}
     .listTag{padding:0 2vw;border:.27vw solid #ffe6dc;background:none;font-size:2.8vw;float:left;height:4.2vw;line-height:4.2vw;border-radius: 0.2vw;}
     .price_grade{width: 100%;float: left;margin-top: 2vw;}
     .productItem .price .main_price_unde {width: 100%;height: 6.5vw;line-height: 6.5vw;font-size: 3.4vw;color: #4a4f58;text-align: left;float: left;}
@@ -152,13 +102,16 @@ li{list-style:none}
     .listTitle p{text-indent:1em;line-height:7vw;font-size:3.2vw}
     .listTitle p em{color:#e15616;font-style:normal;display:inline-block;height:4.8vw;line-height:4.8vw;padding:0 1.5vw;background:#FFF}
 
-
-
-
-
-
-
-
+    /*会员标签*/
+    .productItem .price .price_text_tag {-webkit-transform: scale(0.8) translateX(-4.2vw);-ms-transform: scale(0.8) translateX(-4.2vw);transform: scale(0.8) translateX(-4.2vw)}
+    .productItem .price .price_text_tag .svip-tag,
+    .productItem .price .price_text_tag .listTag{-webkit-transform: translateX(1.2vw);-ms-transform: translateX(1.2vw);transform: translateX(1.2vw)}
+    .productItem .price .svip-tag{float: left; height:4.74vw;letter-spacing:0;overflow: hidden}
+    .productItem .price .svip-tag .svip-icon{position:relative;z-index:9;float: left; width:9.8vw;height:4.74vw;text-align:center;line-height:4.74vw;font-size:2.8vw;font-weight:400;color:#F0CB72;opacity:1;background:#333333}
+    .productItem .price .svip-tag .svip-icon.btr{border-radius:2px 8px 0px 2px}
+    .productItem .price .svip-tag .svip-price{z-index:1;position:relative;float: left;padding-left:5.4vw;padding-right:0.6vw;margin-left:-6vw;line-height:4.74vw;height: 4.74vw; background:#F0CB72;opacity:1;border-radius:2px;font-size:2.8vw}
+    .productItem .price .svip-tag .svip-price span{color: #333}
+    .productItem .price .svip-tag .svip-price span:nth-child(2){margin-left: -0.4vw}
 
 }
 

+ 10 - 1
src/main/resources/static/css/product/product-coupon.css

@@ -24,7 +24,7 @@ li{list-style:none}
     .productItem .price em.bold{font-weight: bold}
     .productItem .price .price_text_tag{width: 100%;height: 22px;box-sizing: border-box;float: left;margin-top: 3px;}
     .productItem .price .price_text_tag .listTag{margin: 0;float: left}
-    .productItem .price .price_text_tag .couponTag{margin: 0 8px 0 0;float: left}
+    .productItem .price .price_text_tag .couponTag{margin: 0 4px 0 0;float: left}
     .productItem .price .main_price_unde { width: 100%;height: 31px;line-height: 31px;font-size: 14px;color: #4a4f58;text-align: left;float: left;}
     .productItem .price .main_price_show { width: 100%;height: 30px;line-height: 30px;font-size: 14px;color: #f94b4b;text-align: left;float: left;}
     .productItem .price .main_price_show.none { color: #999999; text-decoration: line-through;}
@@ -35,6 +35,15 @@ li{list-style:none}
     .listTitle p{text-indent:1em;line-height:36px;font-size:16px}
     .listTitle p em{color:#e15616;font-style:normal;display:inline-block;height:24px;line-height:24px;padding:0 10px;background:#FFF}
     .productItem .name span.tag{width: 44px;height: 18px;line-height: 18px;font-size: 12px;display: inline-block;margin-right: 5px;text-align: center;color: #FFFFFF !important;background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);border-radius: 0px 10px 0px 0px;margin-top: 2px;}
+    /*会员标签*/
+    .productItem .price .price_text_tag {-webkit-transform: scale(0.8) translateX(-18px);-ms-transform: scale(0.8) translateX(-18px);transform: scale(0.8) translateX(-18px)}
+    .productItem .price .price_text_tag .svip-tag,
+    .productItem .price .price_text_tag .listTag{-webkit-transform: translateX(4px);-ms-transform: translateX(4px);transform: translateX(4px)}
+    .productItem .price .price_text_tag .svip-tag{width:100%;height:22px;letter-spacing:0}
+    .productItem .price .price_text_tag .svip-tag .svip-icon{position:relative;z-index:9;display:inline-block;width:30px;height:22px;text-align:center;line-height:22px;font-size:12px;font-weight:400;color:#F0CB72;opacity:1;background:#333333}
+    .productItem .price .price_text_tag .svip-tag .svip-icon.btr{border-radius:2px 8px 0px 2px}
+    .productItem .price .price_text_tag .svip-tag .svip-price{z-index:1;position:relative;display:inline-block;padding-left:24px;padding-right:2px;margin-left:-27px;line-height:22px;background:#F0CB72;opacity:1;border-radius:2px;font-size:12px}
+    .productItem .price .price_text_tag .svip-tag .svip-price span{color: #333}
 
 }
 /**

+ 20 - 3
src/main/resources/static/css/shopping/shopping.css

@@ -2,6 +2,7 @@
 li{list-style:none}
 .addressWrap input[type=checkbox]:after{color:#1890f9;border-color:#1890f9;}
 .addressWrap input[type=checkbox]:checked:after{background:#1890f9;border-color:#1890f9;color:#FFF;}
+[v-cloak]{display: none}
 /**
  * PC端
  */
@@ -73,7 +74,7 @@ li{list-style:none}
     .listWrap .del:hover .tips{opacity:1}
     .listWrap .price{position:relative;display:inline-block;line-height:24px}
     .listWrap .price>em{font-style:normal;font-size:16px;display:inline-block;width:100%}
-    .listWrap .price>del{font-size:16px;display:inline-block;width:100%}
+    .listWrap .price>del{font-size:16px;display:inline-block;width:100%;color:#B8BFCA}
     .invalidTit{height:44px;line-height:44px;padding-top:16px;font-size:16px}
     .invalidTit .tit{color:#22272e;float:left}
     .invalidTit .delAll{color:#e15616;float:right;cursor:pointer}
@@ -230,7 +231,12 @@ li{list-style:none}
     .coupon-popup .coupon-list-cell .coupon-list-ri{width: 70px;height: 148px;float: left;box-sizing: border-box;padding: 54px 27px;font-size: 16px;color: #FFF;cursor: pointer;}
     .coupon-popup .coupon-list-cell .coupon-list-ri.none{padding: 45px 27px;}
     .coupon-popup .coupon-list-cell .coupon-tags{height: 24px;line-height: 24px;text-align: center;border-radius: 8px 0 8px 0;position: absolute;top: 0;left: 0;padding: 0 10px;background-color: #f94b4b;color: #FFF;}
-
+    /*会员标签*/
+    .listWrap .cartItem .priceTag .svip-tag{width:100%;height:22px;letter-spacing:0}
+    .listWrap .cartItem .priceTag .svip-tag .svip-icon{position:relative;z-index:9;display:inline-block;width:30px;height:22px;text-align:center;line-height:22px;font-size:12px;font-weight:400;color:#F0CB72;opacity:1;background:#333333}
+    .listWrap .cartItem .priceTag .svip-tag .svip-icon.btr{border-radius:2px 8px 0px 2px}
+    .listWrap .cartItem .priceTag .svip-tag .svip-price{z-index:1;position:relative;display:inline-block;padding-left:24px;padding-right:2px;margin-left:-27px;line-height:22px;background:#F0CB72;opacity:1;border-radius:2px;font-size:14px}
+    .listWrap .cartItem .priceTag .svip-tag .svip-price span{color: #333}
 
 }
 
@@ -263,6 +269,16 @@ li{list-style:none}
     .listWrap .supplierTit .shop{display: block;float: left;}
     .listWrap .supplierTit .couponTag{float:left;margin-left: 10px;height: 6.4vw;line-height: 6.4vw;box-sizing: border-box;border-radius: 0.2vw;}
     .listWrap .supplierTit .priceTag .tag{float: left;position: relative;top: 0;left: 0;margin-left: 2vw;}
+
+    /*会员标签*/
+    .listWrap .cartItem .c4{height: auto !important;}
+    .listWrap .cartItem .price .svip-tag{height:4.74vw;letter-spacing:0;overflow: hidden}
+    .listWrap .cartItem .price .svip-tag .svip-icon{position:relative;z-index:9;float: left; width:9.8vw;height:4.74vw;text-align:center;line-height:4.74vw;font-size:2.8vw;font-weight:400;color:#F0CB72;opacity:1;background:#333333}
+    .listWrap .cartItem .price .svip-tag .svip-icon.btr{border-radius:2px 8px 0px 2px}
+    .listWrap .cartItem .price .svip-tag .svip-price{z-index:1;position:relative;float: left;padding-left:5.4vw;padding-right:0.6vw;margin-left:-6vw;line-height:4.74vw;height: 4.74vw; background:#F0CB72;opacity:1;border-radius:2px;font-size:2.8vw}
+    .listWrap .cartItem .price .svip-tag .svip-price span{color: #333}
+    .listWrap .cartItem .price .svip-tag .svip-price span:nth-child(2){margin-left: -0.4vw}
+
     .listWrap .cartItem{padding:2.2vw 3.3vw;height:24vw;line-height:24vw;position:relative}
     .listWrap .supplierBtn{border-top:1px solid #F7F7F7;width:93vw;margin:0 auto;padding-bottom:2vw;color:#22272e;font-size:3.4vw;text-align:right}
     .listWrap .supplierBtn em{color:#f55c5c}
@@ -308,7 +324,8 @@ li{list-style:none}
     .couponWrap .coupon-list-cell{background: url("/img/account/icon-coupon-uesb@h52x.png") no-repeat;background-size: cover;}
 
     /* 底部结算 */
-    .listWrap{padding-bottom: 24vw;}
+    /*.listWrap{padding-bottom: 24vw;}*/
+    #shoppingConfirm .wrap{padding-bottom: 14vw;}
     .summaryWrap{width:100%;background:#FFF;position: fixed;bottom: 0;left: 0;}
     .summaryWrap .summary{width:93vw;margin:0 auto;font-size:3.4vw;padding:1.5vw 0}
     .summaryWrap .summary em{font-style:normal}

+ 26 - 3
src/main/resources/static/css/supplier/index.css

@@ -1,9 +1,12 @@
 @charset "utf-8";
 li{list-style:none}
+
+
 /**
  * PC端
  */
 @media screen and (min-width:768px){
+
     #supplierBanner{width:100%;height:358px;margin-top:10px;background:#FFF;overflow:hidden;position:relative}
     #supplierBanner .swiper-wrapper{position:relative;height:100%;z-index:0}
     #supplierBanner .swiper-wrapper li{position:relative;zoom:1;vertical-align:middle;width:100%;overflow:hidden}
@@ -70,6 +73,16 @@ li{list-style:none}
     .productItem .price .price_text_tag{width: 100%;height: 22px;box-sizing: border-box;float: left;margin-top: 3px;}
     .productItem .price .price_text_tag .listTag{margin: 0;float: left}
     .productItem .price .price_text_tag .couponTag{margin: 0 8px 0 0;float: left}
+
+    /*标签缩小*/
+    .productItem .price .price_text_tag {-webkit-transform: scale(0.8) translateX(-18px);-ms-transform: scale(0.8) translateX(-18px);transform: scale(0.8) translateX(-18px)}
+    /*会员标签*/
+    .productItem .price .price_text_tag .svip-tag{width:100%;height:22px;letter-spacing:0}
+    .productItem .price .price_text_tag .svip-tag .svip-icon{position:relative;z-index:9;display:inline-block;width:30px;height:22px;text-align:center;line-height:22px;font-size:12px;font-weight:400;color:#F0CB72;opacity:1;background:#333333}
+    .productItem .price .price_text_tag .svip-tag .svip-icon.btr{border-radius:2px 8px 0px 2px}
+    .productItem .price .price_text_tag .svip-tag .svip-price{z-index:1;position:relative;display:inline-block;padding-left:22px;padding-right:4px;margin-left:-27px;line-height:22px;background:#F0CB72;opacity:1;border-radius:2px;font-size:12px}
+    .productItem .price .price_text_tag .svip-tag .svip-price span{color: #333}
+
     .productItem .price .main_price_unde { width: 100%;height: 31px;line-height: 31px;font-size: 14px;color: #4a4f58;text-align: left;float: left;}
     .productItem .price .main_price_show { width: 100%;height: 30px;line-height: 30px;font-size: 14px;color: #f94b4b;text-align: left;float: left;}
     .productItem .price .main_price_show.none { color: #999999; text-decoration: line-through;}
@@ -124,13 +137,23 @@ li{list-style:none}
     .productItem .price .mIcon.i4:before {background-position: -84vw -90.7vw;}
     .productItem .price .mIcon {display: inline-block;font-size: 0;height: 5vw;line-height: 5vw;vertical-align: text-bottom;}
     .productItem img {width: 45.6vw;height: 45.6vw;}
-    .productItem .name {display: block;padding: 0 3.2vw;height: 9.3vw;line-height: 4.8vw;font-size: 3.4vw;vertical-align: middle;word-break: break-all;overflow: hidden;text-overflow: ellipsis;display: -webkit-inline-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;}
-    .price {padding: 2vw 3.2vw;overflow: hidden;}
-    .couponTag{padding:0 2vw;border:.27vw solid #f94b4b;background:#fff1eb;font-size:2.8vw;float:left;height:4.2vw;line-height:4.2vw;color: #f94b4b;border-radius: 0.2vw;margin-right: 1vw;}
+    .productItem .name {display: block;padding: 0 1.6vw;height: 9.3vw;line-height: 4.8vw;font-size: 3.4vw;vertical-align: middle;word-break: break-all;overflow: hidden;text-overflow: ellipsis;display: -webkit-inline-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;}
+    .price {padding: 2vw 1.6vw;overflow: hidden;}
+    .couponTag{padding:0 0.4vw;border:.27vw solid #f94b4b;background:#fff1eb;font-size:2.8vw;float:left;height:4.2vw;line-height:4.2vw;color: #f94b4b;border-radius: 0.2vw;margin-right: 1.2vw;}
     .listTag{padding:0 2vw;border:.27vw solid #ffe6dc;background:none;font-size:2.8vw;float:left;height:4.2vw;line-height:4.2vw;border-radius: 0.2vw;}
     .price_grade{width: 100%;float: left;margin-top: 2vw;}
     .productItem .price .main_price_unde {width: 100%;height: 6.5vw;line-height: 6.5vw;font-size: 3.4vw;color: #4a4f58;text-align: left;float: left;}
     .productItem .price .price_text_tag {width: 100%;box-sizing: border-box;}
+    /*标签缩小*/
+    .productItem .price .price_text_tag {-webkit-transform: scale(0.8) translateX(-4.2vw);-ms-transform: scale(0.8) translateX(-4.2vw);transform: scale(0.8) translateX(-4.2vw)}
+    /*会员标签*/
+    .productItem .price .price_text_tag .svip-tag{float: left; height:4.74vw;letter-spacing:0;overflow: hidden}
+    .productItem .price .price_text_tag .svip-tag .svip-icon{position:relative;z-index:9;float: left; width:9.8vw;height:4.74vw;text-align:center;line-height:4.74vw;font-size:2.8vw;font-weight:400;color:#F0CB72;opacity:1;background:#333333}
+    .productItem .price .price_text_tag .svip-tag .svip-icon.btr{border-radius:2px 8px 0px 2px}
+    .productItem .price .price_text_tag .svip-tag .svip-price{z-index:1;position:relative;float: left;padding-left:5.4vw;padding-right:0.6vw;margin-left:-6vw;line-height:4.74vw;height: 4.74vw; background:#F0CB72;opacity:1;border-radius:2px;font-size:2.8vw}
+    .productItem .price .price_text_tag .svip-tag .svip-price span{color: #333}
+    .productItem .price .price_text_tag .svip-tag .svip-price span:nth-child(2){margin-left: -0.4vw}
+
     .productItem .price .main_price_show{color: #f94b4b}
     .productItem .name span.tag{width: 11.3vw;height: 4.3vw;line-height: 4.3vw;font-size: 2.8vw;display: inline-block;margin-right: 1.3vw;text-align: center;color: #FFFFFF !important;background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);border-radius: 0px 10px 0px 0px;margin-top: .25vw;}
 }

+ 1 - 1
src/main/resources/static/css/user-center/account/coupon.css

@@ -32,7 +32,7 @@ li{list-style:none}
     .coupon-list-cell .coupon-tags.none{background-color: #dbdbdb;color: #FFF;}
     .coupon-list-cell.used{background: url("/img/account/icon-coupon-uesb@2x.png") no-repeat;background-size: cover;}
     .coupon-list-cell.none{background: url("/img/account/icon-coupon-none@2x.png") no-repeat;background-size: cover;}
-    .empty{width: 100%;float: left;}
+    .empty{width: 100%;float: left;padding: 140px 0}
     .empty img{width: 180px;height: 180px;}
     .empty .msg{color: #999;}
 

+ 49 - 12
src/main/resources/static/css/user-center/dashboard.css

@@ -13,11 +13,18 @@ li{list-style:none}
     .user-header .logo .file:before{width:40px;height:40px;background-position:-161px -367px;vertical-align:middle}
     .user-header .logo img{width:110px;height:78px;display:block;border-radius:2px}
     .user-header .account{float:left;box-sizing:border-box;padding:5px 0}
-    .user-header .account .name{width:100%;height:36px;float:left;margin-bottom:10px}
-    .user-header .account .name span{line-height:36px;font-size:18px;font-weight:bold;color:#22272e;display:inline-block;float:left}
-    .user-header .account .name a{position: relative;margin-left:30px;width:118px;height:34px;border:1px solid #E15616;border-radius:2px;background-color:#ffe6dc;color:#E15616;display:block;line-height:34px;text-align:center;float:left}
-    .user-header .account .name a .name-tips{width: 44px;height: 19px;line-height: 19px;text-align: center;border-radius: 10px;background-color: #ffe6dc;font-size: 12px;color: #E15616;position: absolute;right: -20px;top: -25px;z-index: 99;}
-    .user-header .account .name a .name-tips:before{content: '';width: 6px;height: 6px;background-color: #ffe6dc;position: absolute;bottom: -3px;left: 12px;z-index: -1;transform:rotate(45deg);}
+    .user-header .account .name{width:100%;height:36px;float:left;margin-bottom:10px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}
+    .user-header .account .name a,.user-header .account .name span{display:block;margin-left:8px}
+    .user-header .account .name .username{line-height:36px;font-size:18px;font-weight:bold;color:#22272e;display:inline-block;float:left}
+    .user-header .account .name .update{position:relative;width:104px;height:24px;background:#FFE6DC;border:1px solid #E15616;opacity:1;border-radius:2px;color:#E15616;font-size:12px;line-height:22px;text-align:center}
+    .user-header .account .name .update .name-tips{width:44px;height:19px;line-height:19px;text-align:center;border-radius:10px;background-color:#ffe6dc;font-size:12px;color:#E15616;position:absolute;right:-20px;top:-25px;z-index:99}
+    .user-header .account .name .update .name-tips:before{content:'';width:6px;height:6px;background-color:#ffe6dc;position:absolute;bottom:-3px;left:12px;z-index:-1;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}
+    .user-header .account .name .agency{width:64px;height:24px;text-align:center;line-height:22px;border-radius:2px;font-size:12px;-webkit-box-sizing:border-box;box-sizing:border-box}
+    .user-header .account .name .agency.ordinary{background:#E7EAEF;border:1px solid #627386;color:#627386}
+    .user-header .account .name .agency.vip{background:#FFF2D5;border:1px solid #FFD54F;color:#E4AA43}
+    .user-header .account .name .vip-icon{width:32px;height:24px;text-align:center;line-height:24px;border-radius:2px;font-size:12px;font-weight:400}
+    .user-header .account .name .vip-icon.vip{color:#4E4539;background:#F0CB72}
+    .user-header .account .name .vip-icon.svip{color:#F0CB72;background:#333333}
     .user-header .account .msg{width:100%;font-size:14px;line-height:26px;color:#22272e;margin-top:20px}
     .user-header .account .msg em{color:#22272e;display:inline-block;margin-right:8px}
     .user-header .account .msg .red{color:#f94b4b;font-style:normal;margin:0 5px}
@@ -94,7 +101,16 @@ li{list-style:none}
     .user-content .section .user-main .new-list .time{line-height: 36px;font-size: 12px;color: #9aa5b5;float: right;}
     .user-content.coupon{width: 100%;height: 240px}
     .user-content.coupon .coupon_img{width: 100%;height: 100%;}
-
+    /*SVIP*/
+    .svip-content{margin-top:10px}
+    .svip-content .title{width:100%;height:44px;line-height:44px;font-size:16px;text-align:left;color:#22272e;padding:0 20px}
+    .svip-content .section{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:968px;height:78px;padding:0 24px 0 110px;background:url(https://static.caimei365.com/app/img/svip/pc-cm-svip-bg-01.png) no-repeat center;background-size:968px 78px;-webkit-box-sizing:border-box;box-sizing:border-box}
+    .svip-content .section div{-webkit-box-flex:1;-ms-flex:1;flex:1;color:#F0CB72}
+    .svip-content .section div span:first-child{font-size:16px;font-weight:400;color:#F0CB72}
+    .svip-content .section div span.error{color: #FF2A2A}
+    .svip-content .section div span:last-child{font-size:14px;font-weight:400;color:#BCBCBC;margin-left: 10px}
+    .svip-content .section a.btn{width:104px;height:36px;color:#4E4539;text-align:center;line-height:36px;background:-webkit-gradient(linear,right top,left top,from(#FEE9BA),to(#F0CB72));background:-o-linear-gradient(right,#FEE9BA 0%,#F0CB72 100%);background:linear-gradient(270deg,#FEE9BA 0%,#F0CB72 100%);border-radius:2px}
+    .svip-content .section a.link{font-size:16px;font-weight:400;color:#F0CB72}
 }
 
 /**
@@ -107,18 +123,30 @@ li{list-style:none}
     .user-header .logo .file{position:absolute;top:5vw;left:9vw;width:9vw;height:9vw}
     .user-header .logo .file:before{width:9vw;height:9vw;background-position:-7.5vw -60.3vw}
     .user-header .logo img{max-width:100%;max-height:100%;display:block;margin:0 auto;}
-    .user-header .account{width:64vw;height:quto;box-sizing:border-box;color:#9aa5b5;font-size:3.1vw;line-height:6.4vw;position:relative}
+    .user-header .account{width:64vw;height:auto;box-sizing:border-box;color:#9aa5b5;font-size:3.1vw;line-height:6.4vw;position:relative}
     .user-header .account .name{font-size:3.7vw;color:#22272e}
     .user-header .account em{font-style:normal;color:#e15616}
     .user-header .account .name a,.user-header .account .msg a{display:inline-block;height:5.4vw;line-height:5.4vw;padding:0 2vw;color:#FFF;border-radius:2px;margin-left:2vw}
     .user-header .account .name a{background-color:#e15616;position: relative;}
     .user-header .account .name a .name-tips{width: 11.6vw;height: 4.8vw;line-height: 4.8vw;text-align: center;border-radius: 2.4vw;background-color: #ffe6dc;font-size: 12px;color: #E15616;position: absolute;right: -20px;top: -25px;z-index: 99;}
     .user-header .account .name a .name-tips:before{content: '';width: 6px;height: 6px;background-color: #ffe6dc;position: absolute;bottom: -3px;left: 12px;z-index: -1;transform:rotate(45deg);}
+    .user-header .account .msg{ margin-top: 1.2vw;}
     .user-header .account .msg a{background-color:#313a43}
-    .user-header .account .upgrade{margin-top: 6.5vw;}
-    .user-header .account .upgrade a{position: relative;width: 32.6vw;height: 8.5vw;display: block; background-color:#ffe6dc;box-sizing: border-box;border: 1px solid #E15616;line-height: 8.5vw;text-align: center;color: #E15616;font-size: 3.4vw;border-radius: 4.25vw;}
-    .user-header .account .upgrade a .name-tips{width: 12.6vw;height: 4.8vw;line-height: 4.8vw;text-align: center;border-radius: 2.4vw;background-color: #ffe6dc;font-size: 2.8vw;color: #E15616;position: absolute;right: -2vw;top: -6.5vw;z-index: 99;}
-    .user-header .account .upgrade a .name-tips:before{content: '';width: 6px;height: 6px;background-color: #ffe6dc;position: absolute;bottom: -3px;left: 12px;z-index: -1;transform:rotate(45deg);}
+    .user-header .account .user-info{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-ms-flex-wrap:wrap;flex-wrap:wrap}
+    .user-header .account .user-info a,.user-header .account .user-info span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-sizing:border-box;box-sizing:border-box;margin-right:1.6vw}
+    .user-header .account .user-info .username{width:100%;font-size:3.6vw;font-weight:bold;color:#22272e;display:inline-block}
+    .user-header .account .user-info .update{position:relative;height:5.4vw;background:#FFE6DC;border:1px solid #E15616;opacity:1;border-radius:2px;color:#E15616;font-size:3.2vw;line-height:22px;text-align:center;margin-left:0}
+    .user-header .account .user-info .update .name-tips{width:44px;height:19px;line-height:19px;text-align:center;border-radius:10px;background-color:#ffe6dc;font-size:12px;color:#E15616;position:absolute;right:0;top:-25px;z-index:99}
+    .user-header .account .user-info .update .name-tips:before{content:'';width:6px;height:6px;background-color:#ffe6dc;position:absolute;bottom:-3px;left:12px;z-index:-1;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}
+    .user-header .account .user-info .agency{width:16vw;height:5.4vw;text-align:center;border-radius:2px;font-size:3.2vw;-webkit-box-sizing:border-box;box-sizing:border-box}
+    .user-header .account .user-info .agency.ordinary{background:#E7EAEF;border:1px solid #627386;color:#627386}
+    .user-header .account .user-info .agency.vip{background:#FFF2D5;border:1px solid #FFD54F;color:#E4AA43}
+    .user-header .account .user-info .vip-icon{height:5.4vw;text-align:center;border-radius:2px;font-size:3.2vw;font-weight:400}
+    .user-header .account .user-info .vip-icon.vip{width:8vw;color:#4E4539;background:#F0CB72}
+    .user-header .account .user-info .vip-icon.svip{width:9vw;color:#F0CB72;background:#333333}
+    .user-header .account .update a{position: relative;width: 32.6vw;height: 8.5vw;display: block; background-color:#ffe6dc;box-sizing: border-box;border: 1px solid #E15616;line-height: 8.5vw;text-align: center;color: #E15616;font-size: 3.4vw;border-radius: 4.25vw;}
+    .user-header .account .update a .name-tips{width: 12.6vw;height: 4.8vw;line-height: 4.8vw;text-align: center;border-radius: 2.4vw;background-color: #ffe6dc;font-size: 2.8vw;color: #E15616;position: absolute;right: -2vw;top: -6.5vw;z-index: 99;}
+    .user-header .account .update a .name-tips:before{content: '';width: 6px;height: 6px;background-color: #ffe6dc;position: absolute;bottom: -3px;left: 12px;z-index: -1;transform:rotate(45deg);}
     .user-header .message{position:absolute;right:0;top:5vw}
     .user-header .message .mIcon{position:absolute;right:0;top:0}
     .user-header .message .mIcon:before{width:8vw;height:8vw;background-position:-16.5vw -60.3vw}
@@ -150,7 +178,16 @@ li{list-style:none}
     .user-content .user-main .new-list .time{color:#9aa5b5}
     .user-content.coupon{width: 100%;height: 32vw;background: none}
     .user-content.coupon .coupon_img{width: 100%;height: 100%;}
+    /*SVIP*/
+    .svip-content{margin-top:2vw}
+    .svip-content .title{display: none}
 
-
+    .svip-content .section{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100vw;height:20.6vw;padding:0 5vw 0 17vw ;background:url(https://static.caimei365.com/app/img/svip/h5-cm-svip-bg-01.png) no-repeat center;background-size:100vw 20.6vw;-webkit-box-sizing:border-box;box-sizing:border-box}
+    .svip-content .section div{-webkit-box-flex:1;-ms-flex:1;flex:1;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-orient: vertical;-webkit-box-direction: normal;-ms-flex-direction: column;flex-direction: column;-webkit-box-pack: start;-ms-flex-pack: start;justify-content: flex-start;-webkit-box-align: start;-ms-flex-align: start;align-items: flex-start;color:#F0CB72}
+    .svip-content .section div span:first-child{font-size:3.4vw;font-weight:400;color:#F0CB72}
+    .svip-content .section div span.error{color: #FF2A2A}
+    .svip-content .section div span:last-child{font-size:3.2vw;font-weight:400;color:#BCBCBC;margin-top: 1.6vw}
+    .svip-content .section a.btn{width:19.2vw;height:7.2vw;color:#4E4539;text-align:center;line-height:7.2vw;background:-webkit-gradient(linear,right top,left top,from(#FEE9BA),to(#F0CB72));background:-o-linear-gradient(right,#FEE9BA 0%,#F0CB72 100%);background:linear-gradient(270deg,#FEE9BA 0%,#F0CB72 100%);border-radius:2px}
+    .svip-content .section a.link{font-size:3.2vw;font-weight:400;color:#F0CB72}
 }
 

+ 197 - 0
src/main/resources/static/css/user-center/member/member-page.css

@@ -0,0 +1,197 @@
+/*公共样式*/
+.cm-text-ellipsis-2{overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}
+/*pc端样式*/
+@media screen and (min-width:768px){
+#memberPage{position: relative;margin-bottom: 105px;}
+.right{width:968px;overflow:hidden}
+.section .section-title{padding:30px 20px 12px;font-size:16px;font-weight:400;color:#22272E}
+.section .section-title span{font-size: 14px;color: #E4AA43;margin-left: 8px}
+.section .section-title a{font-size: 14px;color: #333;float: right}
+.section .section-title a:hover{ color: #E4AA43}
+.section .content{padding:30px 24px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#fff;-webkit-box-shadow:0px 3px 6px rgba(0,0,0,0.07);box-shadow:0px 3px 6px rgba(0,0,0,0.07)}
+/*会标标记*/
+.vip-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:968px;height:68px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:104px;padding-right:24px;line-height:68px;background:url(/img/member/pc-cm-svip-bg-02.png) no-repeat center;background-size:968px 68px;font-weight:400}
+.vip-bar>div>span:first-child{font-size:16px;line-height:21px;color:#55331D}
+.vip-bar>div>span:last-child{font-size:14px;color:#55331D;opacity:1;margin-left:16px}
+.vip-bar>div>span.error{color:#FF2A2A}
+.vip-bar .right-box{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-align:center;-ms-flex-align:center;align-items:center}
+.vip-bar>div>a{display:block;margin-left:16px}
+.vip-bar>div>a.link{font-size:14px;color:#55331D}
+.vip-bar>div>a.btn{width:104px;height:36px;background:-webkit-gradient(linear,right top,left top,from(#585658),to(#323031));background:-o-linear-gradient(right,#585658 0%,#323031 100%);background:linear-gradient(270deg,#585658 0%,#323031 100%);border-radius:2px;line-height:36px;text-align:center;font-size:16px;color:#F0CB72}
+/*套餐价格*/
+.combo-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}
+.combo-list > div:first-child{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center}
+.combo-list .combo{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:122px;height:132px;margin-right:14px;background:#FFFFFF;border:1px solid #F0F0F0;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}
+.combo-list .combo.recommend::after{content:"推荐";position:absolute;top:-4px;left:-1px;z-index:9;width:42px;height:20px;background:#FF2A2A;opacity:1;border-radius:0px 4px 4px 4px;text-align:center;line-height:20px;color:#fff;font-size:14px}
+.combo-list .combo.active{background:#FDF8EE;border:1px solid #F0CC8C}
+.combo-list .combo .how-mounts{font-size:16px;font-weight:400;line-height:21px;color:#22272E}
+.combo-list .combo .price{padding:10px 0;height:31px;font-size:24px;font-weight:bold;line-height:31px;color:#FF2A2A}
+.combo-list .combo .price > i{font-style:unset;font-size:16px;font-weight:400;line-height:21px;color:#FF2A2A}
+.combo-list .combo .average{font-size:14px;font-weight:400;line-height:19px;color:#627386}
+.combo-list > div:last-child{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}
+.combo-list .pay-btn{width:336px;height:50px;background:-webkit-gradient(linear,left top,right top,from(#FEE9BA),to(#F0CB72));background:-o-linear-gradient(left,#FEE9BA 0%,#F0CB72 100%);background:linear-gradient(90deg,#FEE9BA 0%,#F0CB72 100%);border-radius:2px;font-size:16px;font-weight:bold;line-height:21px;color:#55331D}
+.combo-list .pay-btn.plain{margin-top:15px;background:transparent;border:1px solid #F0CB72;border-radius:2px;font-size:16px;font-weight:400;color:#55331D;-webkit-box-sizing:border-box;box-sizing:border-box}
+.combo-list .pay-btn > a{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:100%;color:inherit}
+.combo-list .pay-btn > a:hover{color:unset}
+/*特权服务*/
+.service-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}
+.service-list>div{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}
+.service-list>div img{display:block;width:64px;height:64px}
+.service-list>div .tit{font-size:16px;font-weight:400;color:#333333;padding:16px 0 8px}
+.service-list>div .sub-tit{font-size:14px;font-weight:400;color:#B8BFCA}
+/*优惠券*/
+.coupon-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}
+.coupon-list>div{position:relative;width:219px;height:96px;padding-left:24px;-webkit-box-sizing:border-box;box-sizing:border-box;background:url(/img/member/pc-cm-svip-coupon-unable.png) no-repeat center;background-size:219px 96px}
+.coupon-list>div.un-received{background-image:url(/img/member/pc-cm-svip-coupon-able.png)}
+.coupon-list>div .type{position:absolute;left:0;top:0;z-index:9;width:46px;height:18px;font-size:12px;text-align:center;line-height:18px;background:#E4AA43;border-radius:2px 0px 2px 0px}
+.coupon-list>div .amount{padding-top:20px;font-size:26px;font-weight:bold;color:#55331D}
+.coupon-list>div .amount>i{font-size:14px;font-weight:400;color:#55331D;font-style:unset}
+.coupon-list>div .condition{font-size:12px;font-weight:400;color:#55331D}
+.coupon-list>div .receive-btn{width:48px;height:100%;position:absolute;right:0;top:0;z-index:9;font-size:14px;font-weight:400;color:#55331D;-webkit-writing-mode:vertical-lr;-ms-writing-mode:tb-lr;writing-mode:vertical-lr;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;cursor:pointer}
+/*商品列表*/
+.goods-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}
+.goods-list .goods a:hover{color:unset}
+.goods-list .goods{width:173px;margin-right: 14px;}
+.goods-list .goods:last-child{margin-right: 0;}
+
+.goods-list .goods img{display:block;width:184px;height:184px;-webkit-box-sizing:border-box;box-sizing:border-box;border: 1px dashed #f1f1f1;}
+.goods-list .goods .goods-price,
+.goods-list .goods .goods-title,
+.goods-list .goods .goods-tag{padding: 0 8px;}
+
+.goods-list .goods .goods-title{height:41px;margin-top:12px;font-size:14px;font-weight:400;line-height:22px;color:#4A4F58;text-align:justify-all;word-break:break-all}
+.goods-list .goods .goods-tag{height:22px;padding:8px 8px}
+.goods-list .goods .goods-tag .tag{line-height:20px;font-size:12px;padding:0 2px}
+.goods-list .goods .goods-tag .tag.styl1{color:#F94B4B;background:#FFF1EB;border:1px solid #F94B4B}
+.goods-list .goods .goods-tag .tag.styl2{color:#E15616;background:#FFF1EB;border:1px solid #F94B4B}
+
+.goods-list .goods .svip-tag{height:18px;letter-spacing:0;display: inline-block;}
+.goods-list .goods .svip-tag .svip-icon{position:relative;z-index:9;display:inline-block;width:30px;height:18px;text-align:center;line-height:18px;font-size:12px;font-weight:400;color:#F0CB72;opacity:1;background:#333333}
+.goods-list .goods .svip-tag .svip-icon.btr{border-radius:2px 8px 0px 2px}
+.goods-list .goods .svip-tag .svip-price{z-index:1;position:relative;display:inline-block;padding-left:22px;padding-right:4px;margin-left:-24px;line-height:18px;background:#F0CB72;opacity:1;border-radius:2px;font-size:12px}
+.goods-list .goods .svip-tag .svip-price span{color: #333}
+
+.goods-list .good .goods-price del{color: #B8BFCA}
+
+/*底部支付按钮*/
+.pay-amount-bottom a:hover{color:unset}
+.pay-amount-bottom{position:fixed;bottom:0;width:100%;background:#fff;z-index: 9999;}
+.pay-amount-bottom.absolute{position:absolute;bottom: -104px;}
+.pay-amount-bottom>div{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:1184px;height:72px;margin:0 auto}
+.pay-amount-bottom .pay-btn{width:336px;height:50px;background:-webkit-gradient(linear,left top,right top,from(#FEE9BA),to(#F0CB72));background:-o-linear-gradient(left,#FEE9BA 0%,#F0CB72 100%);background:linear-gradient(90deg,#FEE9BA 0%,#F0CB72 100%);border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;font-size:16px;font-weight:500;line-height:22px;margin-left:15px}
+.pay-amount-bottom .pay-btn.plain{border:1px solid #F0CB72;background:#fff}
+.pay-amount-bottom .pay-btn>a{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#55331D;width:100%;height:100%}
+/*续费弹窗*/
+.renew-popup{position:fixed;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:540px;height:424px;background:#FFFFFF;opacity:1;border-radius:2px;z-index:9999}
+.renew-popup .popup-title{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px;padding:0 16px 0 24px;-webkit-box-sizing:border-box;box-sizing:border-box;font-size:16px;font-weight:bold;color:#4A4F58;opacity:1;border-bottom:1px solid #E2E7EF}
+.renew-popup .popup-title .close{color: #d4d4d4;font-size:30px;font-weight:400;cursor:pointer}
+.renew-popup .combo-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}
+.renew-popup .combo-list>div:first-child{margin-top:37px}
+.renew-popup .combo-list>div:last-child{margin-top:56px}
+/*遮罩*/
+.mask{content:"";display:block;position:fixed;width:100vw;height:100vh;background:#333333;opacity:0.7;left:0;top:0;z-index:9998}
+/*确认支付 立即支付弹窗*/
+.payment-confirm-popup{position:fixed;top:50%;left:50%;z-index:99999;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:338px;height:168px;padding:16px;background:#FFFFFF;opacity:1;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box}
+.payment-confirm-popup .popup-title{padding-bottom:16px;font-size:16px;font-weight:bold;color:#4A4F58}
+.payment-confirm-popup .popup-title .close{position:absolute;right:16px;top:4px;color:#d4d4d4;font-size:30px;font-weight:400;cursor:pointer}
+.payment-confirm-popup .content{font-size:14px;font-weight:400;line-height:24px;color:#22272E;opacity:1}
+.payment-confirm-popup .popup-btn{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:48px}
+.payment-confirm-popup .popup-btn .confirm-btn{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:104px;height:32px;background:#E15616;opacity:1;border-radius:2px;font-size:14px;font-weight:400;color:#FFFFFF}
+
+}
+
+/*h5端样式*/
+@media screen and (max-width:768px){
+.section{background:#fff;margin: 2vw 0;overflow: hidden}
+.section .section-title{padding:4vw 0 5.2vw 3.3vw;font-size:3.4vw;font-weight:400;color:#22272E}
+.section .section-title span{font-size: 3.2vw;color: #E4AA43;margin-left: 2.4vw}
+.section .section-title a{font-size: 3.2vw;color: #E4AA43;float: right;margin-right: 3.3vw}
+.section .content{-webkit-box-sizing:border-box;box-sizing:border-box}
+/*会员标记*/
+.vip-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;width:100vw;height:20.6vw;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:17.1vw;padding-right:3.3vw;background:url(/img/member/h5-cm-svip-bg-02.png) no-repeat center;background-size:100vw 20.6vw;font-weight:400}
+.vip-bar .row2,.vip-bar .right-box{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}
+.vip-bar .left-box span:first-child{font-size:3.4vw;color:#55331D}
+.vip-bar .left-box span:last-child{font-size:3vw;color:#55331D;opacity:1;margin-top:2.4vw}
+.vip-bar .row1 span:last-child{margin-top:0;margin-left:2.4vw}
+.vip-bar .right-box{-webkit-box-align:center;-ms-flex-align:center;align-items:center}
+.vip-bar .right-box a{display:block}
+.vip-bar .right-box a.link{font-size:2.8vw;color:#55331D}
+.vip-bar .right-box a.btn{width:19.2vw;height:7.2vw;background:-webkit-gradient(linear,right top,left top,from(#585658),to(#323031));background:-o-linear-gradient(right,#585658 0%,#323031 100%);background:linear-gradient(270deg,#585658 0%,#323031 100%);border-radius:2px;line-height:7.2vw;text-align:center;font-size:3.2vw;color:#F0CB72;margin-top:2.4vw}
+/*套餐价格*/
+.combo-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}
+.combo-list > div:first-child{width:93.2vw;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}
+.combo-list .combo{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:29vw;height:31.4vw;background:#FFFFFF;border:1px solid #F0F0F0;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}
+.combo-list .combo.recommend::after{content:"推荐";position:absolute;top:-1.4vw;left:-1px;z-index:9;width:10vw;height:4.8vw;text-align:center;line-height:4.8vw;background:#FF2A2A;color:#fff;font-size:2.8vw}
+.combo-list .combo.active{background:#FDF8EE;border:1px solid #F0CC8C}
+.combo-list .combo .how-mounts{font-size:3.6vw;font-weight:400;color:#22272E}
+.combo-list .combo .price{padding:2.6vw 0;font-size:5.6vw;font-weight:bold;color:#FF2A2A}
+.combo-list .combo .price > i{font-style:unset;font-size:3.7vw;font-weight:400;color:#FF2A2A}
+.combo-list .combo .average{font-size:3.2vw;font-weight:400;color:#627386}
+.combo-list > div:last-child{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:8vw;margin-bottom: 4.4vw}
+.combo-list .pay-btn{width:93.2vw;height:11.2vw;background:-webkit-gradient(linear,left top,right top,from(#FEE9BA),to(#F0CB72));background:-o-linear-gradient(left,#FEE9BA 0%,#F0CB72 100%);background:linear-gradient(90deg,#FEE9BA 0%,#F0CB72 100%);border-radius:2px;font-size:4.3vw;font-weight:bold;line-height:21px;color:#55331D;}
+.combo-list .pay-btn.plain{margin-top:15px;background:transparent;border:1px solid #F0CB72;border-radius:2px;font-weight:400;color:#55331D;-webkit-box-sizing:border-box;box-sizing:border-box}
+.combo-list .pay-btn > a{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:100%;color:inherit}
+.combo-list .pay-btn > a:hover{color:unset}
+/*特权服务*/
+.service-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:space-evenly;-ms-flex-pack:space-evenly;justify-content:space-evenly;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}
+.service-list>div{width:25%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-bottom:4.8vw}
+.service-list>div img{display:block;width:11.8vw;height:11.8vw}
+.service-list>div .tit{font-size:3.2vw;font-weight:400;color:#333333;padding:2.4vw 0 1.2vw}
+.service-list>div .sub-tit{font-size:2.8vw;font-weight:400;color:#B8BFCA}
+/*优惠券*/
+.coupon-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 3.3vw}
+.coupon-list>div{position:relative;width:45vw;height:19.8vw;padding-left:4.9vw;margin-bottom:3.4vw;-webkit-box-sizing:border-box;box-sizing:border-box;background:url(/img/member/pc-cm-svip-coupon-unable.png) no-repeat center;background-size:45vw 19.8vw}
+.coupon-list>div.un-received{background-image:url(/img/member/pc-cm-svip-coupon-able.png)}
+.coupon-list>div .type{position:absolute;left:0;top:0;z-index:9;width:11vw;height:3.9vw;font-size:2.4vw;text-align:center;line-height:3.9vw;background:#E4AA43;border-radius:2px 0px 2px 0px}
+.coupon-list>div .amount{padding-top:3.6vw;font-size:5.2vw;font-weight:bold;color:#55331D}
+.coupon-list>div .amount>i{font-size:2.8vw;font-weight:400;color:#55331D;font-style:unset}
+.coupon-list>div .condition{font-size:2.6vw;font-weight:400;color:#55331D}
+.coupon-list>div .receive-btn{width:10vw;height:100%;position:absolute;right:0;top:0;z-index:9;font-size:3vw;font-weight:400;color:#55331D;-webkit-writing-mode:vertical-lr;-ms-writing-mode:tb-lr;writing-mode:vertical-lr;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;cursor:pointer}
+/*商品列表*/
+.goods-list{width:100vw;overflow-x:scroll;white-space:nowrap;padding-bottom:4.8vw}
+.goods-list .goods a:hover{color:unset}
+.goods-list .goods{display:inline-block;width:34.9vw;margin-right:2.4vw}
+.goods-list .goods:first-child{margin-left:3.3vw}
+
+.goods-list .goods img{border: 1px dashed #f1f1f1; box-sizing: border-box;}
+
+.goods-list .goods .goods-title{white-space:pre-wrap;height:9.2vw;margin-top:0.8vw;font-size:3.4vw;font-weight:400;line-height:4.7vw;color:#627386}
+.goods-list .goods .goods-tag{margin:1.6vw 0}
+.goods-list .goods .goods-tag .tag{line-height:4.2vw;font-size:2.8vw;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 0.5vw}
+.goods-list .goods .goods-tag .tag.styl1{color:#F94B4B;background:#FFF1EB;border:1px solid #F94B4B}
+.goods-list .goods .goods-tag .tag.styl2{color:#E15616;background:#FFF1EB;border:1px solid #F94B4B}
+/*会员标签*/
+.svip-tag{height:4.2vw;letter-spacing:0;overflow: hidden;display: inline-block;vertical-align: middle;}
+.svip-tag .svip-icon{position:relative;z-index:9;float: left; width:7.8vw;height:4.2vw;text-align:center;line-height:4.2vw;font-size:2.8vw;font-weight:400;color:#F0CB72;opacity:1;background:#333333}
+.svip-tag .svip-icon.btr{border-radius:2px 8px 0px 2px}
+.svip-tag .svip-price{z-index:1;position:relative;float: left;padding-left:6.4vw;padding-right:0.6vw;margin-left:-6vw;line-height:4.2vw;height: 4.2vw; background:#F0CB72;opacity:1;border-radius:2px;font-size:2.8vw}
+.svip-tag .svip-price span{color: #333}
+.svip-tag .svip-price span:nth-child(2){margin-left: -0.4vw}
+.goods-list .good .goods-price del{color: #B8BFCA}
+
+.pay-amount-bottom{display: none; opacity: 0}
+/*续费弹窗*/
+.renew-popup{position:fixed;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:74.6vw;height:72.8vw;background:#fff;-webkit-box-shadow:0px 10px 20px rgba(0,0,0,0.16);box-shadow:0px 10px 20px rgba(0,0,0,0.16);opacity:1;border-radius:1.2vw;z-index:9999}
+.renew-popup .popup-title{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:4.8vw 4vw 0;-webkit-box-sizing:border-box;box-sizing:border-box;font-size:3.6vw;font-weight:bold;color:#4A4F58;opacity:1}
+.renew-popup .popup-title .close{position:absolute;right:2.4vw;top:1vw;font-size:7vw;font-weight:normal;cursor:pointer}
+.renew-popup .combo-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}
+.renew-popup .combo-list>div:first-child{-webkit-box-pack:space-evenly;-ms-flex-pack:space-evenly;justify-content:space-evenly;width:100%;margin-top:5.8vw}
+.renew-popup .combo-list>div:last-child{width:100%;margin-top:8vw}
+.renew-popup .combo-list .combo{width:20.6vw;height:22.4vw}
+.renew-popup .combo-list .combo.recommend::after{width:8vw;height:4vw;line-height:4vw;top:-1.55vw}
+.renew-popup .combo-list .combo .how-mounts{font-size:3.2vw}
+.renew-popup .combo-list .combo .price{font-size:3.9vw;padding:1.2vw 0}
+.renew-popup .combo-list .combo .price i{font-size:2.6vw}
+.renew-popup .combo-list .combo .average{font-size:2.6vw}
+.renew-popup .combo-list .pay-btn{width:66.6vw;height:9.9vw;font-size:3.2vw}
+.renew-popup .combo-list .pay-btn.plain{margin-top:3.3vw}
+/*遮罩*/
+.mask{content:"";display:block;position:fixed;width:100vw;height:100vh;background:#333333;opacity:0.7;left:0;top:0;z-index:9998}
+/*确认支付,立即支付弹窗*/
+.payment-confirm-popup{position:fixed;top:50%;left:50%;z-index:99999;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:74.6vw;height:46vw;padding:4.4vw;background:#FFFFFF;opacity:1;border-radius:1.2vw;-webkit-box-sizing:border-box;box-sizing:border-box}
+.payment-confirm-popup .popup-title{padding-bottom:3.2vw;padding-top:2.4vw;font-size:3.8vw;font-weight:bold;color:#4A4F58}
+.payment-confirm-popup .popup-title .close{position:absolute;right:3.2vw;top:1.2vw;color:#d4d4d4;font-size:5.6vw;font-weight:400;cursor:pointer}
+.payment-confirm-popup .content{font-size:3.6vw;font-weight:400;line-height:6.4vw;color:#22272E;opacity:1}
+.payment-confirm-popup .popup-btn{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:10.4vw}
+.payment-confirm-popup .popup-btn .confirm-btn{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:66.6vw;height:9.9vw;background:#E15616;opacity:1;border-radius:2px;font-size:14px;font-weight:400;color:#FFFFFF}
+}

+ 83 - 0
src/main/resources/static/css/user-center/member/member-product.css

@@ -0,0 +1,83 @@
+/*公共样式*/
+.cm-text-ellipsis-2{overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}
+/*pc端*/
+@media screen and (min-width:768px){
+.p-icon{display:inline-block;width:66px;height:22px;vertical-align:middle}
+.p-icon::before{content:'';display:inline-block;width:66px;height:22px;background:url(/img/base/icon.png) no-repeat;margin-left:-5px}
+.p-icon.i1::before{background-position:0px -714px}
+.p-icon.i2::before{background-position:0px -744px}
+.p-icon.i3::before{background-position:0px -774px}
+.p-icon.i4::before{background-position:0px -804px}
+.p-icon.i5::before{background-position:0px -834px}
+
+.banner-box{position:relative;height:510px;overflow:hidden}
+.banner-box img{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);border:none;vertical-align:auto;max-width:unset}
+.container{width:1184px;margin:24px auto}
+.goods-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-flex-wrap:wrap;flex-wrap:wrap}
+.goods-list .goods a:hover{color:unset}
+.goods-list .goods{width:184px;margin-right:16px;margin-bottom:16px;padding-bottom:8px;background:#fff;overflow:hidden;-webkit-transition:all .4s;-o-transition:all .4s;transition:all .4s}
+.goods-list .goods:nth-child(6n){margin-right:0}
+
+.goods-list .goods img{display:block;width:184px;height:184px;-webkit-box-sizing:border-box;box-sizing:border-box}
+.goods-list .goods .goods-price,
+.goods-list .goods .goods-title,
+.goods-list .goods .goods-tag{padding: 0 8px;}
+
+.goods-list .goods .goods-title{height:41px;margin-top:12px;font-size:14px;font-weight:400;line-height:22px;color:#4A4F58;text-align:justify-all;word-break:break-all}
+.goods-list .goods .goods-tag{height:22px;padding:8px 8px}
+.goods-list .goods .goods-tag .tag{line-height:20px;font-size:12px;padding:0 2px}
+.goods-list .goods .goods-tag .tag.styl1{color:#F94B4B;background:#FFF1EB;border:1px solid #F94B4B}
+.goods-list .goods .goods-tag .tag.styl2{color:#E15616;background:#FFF1EB;border:1px solid #F94B4B}
+
+.goods-list .goods .svip-tag{height:18px;letter-spacing:0;display: inline-block;}
+.goods-list .goods .svip-tag .svip-icon{position:relative;z-index:9;display:inline-block;width:30px;height:18px;text-align:center;line-height:18px;font-size:12px;font-weight:400;color:#F0CB72;opacity:1;background:#333333}
+.goods-list .goods .svip-tag .svip-icon.btr{border-radius:2px 8px 0px 2px}
+.goods-list .goods .svip-tag .svip-price{z-index:1;position:relative;display:inline-block;padding-left:22px;padding-right:4px;margin-left:-24px;line-height:18px;background:#F0CB72;opacity:1;border-radius:2px;font-size:12px}
+.goods-list .goods .svip-tag .svip-price span{color: #333}
+
+.goods-list .good .goods-price del{color: #B8BFCA}
+
+.goods-list .goods:hover{-webkit-transform:translateY(-6px);-ms-transform:translateY(-6px);transform:translateY(-6px);-webkit-box-shadow:0 0 16px rgba(0,0,0,.2);box-shadow:0 0 16px rgba(0,0,0,.2)}
+.goods-list .goods:hover .goods-title{color:#E15616}
+}/*h5端*/
+@media screen and (max-width:768px){
+.p-icon{display:inline-block;width:16vw;height:5vw;vertical-align:middle;margin-bottom:1vw;margin-left:-1vw}
+.p-icon::before{content:'';display:inline-block;width:16vw;height:5vw;background:url(/img/base/icon_m.png) no-repeat;background-size:100vw auto}
+.p-icon.i1::before{background-position:-84vw -69.5vw}
+.p-icon.i2::before{background-position:-84vw -76.5vw}
+.p-icon.i3::before{background-position:-84vw -83.5vw}
+.p-icon.i4::before{background-position:-84vw -90.5vw}
+.p-icon.i5::before{background-position:-84vw -97.5vw}
+
+.banner-box{position:relative;width:95.2vw;height:36vw;margin:2.4vw;overflow:hidden}
+.banner-box img{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);border:none;vertical-align:auto;max-width:unset;height:36vw}
+.container{width:100vw;margin:2.4vw 0;-webkit-box-sizing:border-box;box-sizing:border-box}
+.goods-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-flex-wrap:wrap;flex-wrap:wrap}
+.goods-list .goods a:hover{color:unset}
+.goods-list .goods{width: 46.4vw; margin:0 2.4vw 2.4vw;background:#fff;overflow:hidden;padding-bottom: 1.2vw;}
+.goods-list .goods:nth-child(2n){margin-left: 0}
+.goods-list .goods img{display:block;width:45.6vw;height:45.6vw;-webkit-box-sizing:border-box;box-sizing:border-box}
+
+.goods-list .goods .goods-price,
+.goods-list .goods .goods-title,
+.goods-list .goods .goods-tag{padding: 0 1.2vw;}
+
+.goods-list .goods .goods-title{white-space:pre-wrap;height:9.2vw;margin-top:0.8vw;font-size:3.4vw;font-weight:400;line-height:4.7vw;color:#627386}
+.goods-list .goods .goods-tag{margin:1.6vw 0}
+.goods-list .goods .goods-tag .tag{line-height:4.2vw;font-size:2.8vw;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 0.5vw}
+.goods-list .goods .goods-tag .tag.styl1{color:#F94B4B;background:#FFF1EB;border:1px solid #F94B4B}
+.goods-list .goods .goods-tag .tag.styl2{color:#E15616;background:#FFF1EB;border:1px solid #F94B4B}
+/*会员标签*/
+.svip-tag{height:4.2vw;letter-spacing:0;overflow: hidden;display: inline-block;vertical-align: middle;border-radius: 2px;}
+.svip-tag .svip-icon{position:relative;z-index:9;float: left; width:7.8vw;height:4.2vw;text-align:center;line-height:4.2vw;font-size:2.8vw;font-weight:400;color:#F0CB72;opacity:1;background:#333333}
+.svip-tag .svip-icon.btr{border-radius:2px 8px 0px 2px}
+.svip-tag .svip-price{z-index:1;position:relative;float: left;padding-left:6.4vw;padding-right:0.6vw;margin-left:-6vw;line-height:4.2vw;height: 4.2vw; background:#F0CB72;opacity:1;border-radius:2px;font-size:2.8vw}
+.svip-tag .svip-price span{color: #333}
+.svip-tag .svip-price span:nth-child(2){margin-left: -0.4vw}
+.goods-list .good .goods-price del{color: #B8BFCA}
+
+
+.show-more{width:100vw;margin:2.4vw 0 4.8vw;text-align:center}
+.show-more .more-btn{display:inline-block;width:20vw;height:6vw;font-size:3vw;line-height:6vw;border:1px solid #ccc}
+.show-more .more-btn::after{content:'';width:4vw;height:2.4vw;display:inline-block;background:url(/img/base/icon_m.png) no-repeat;background-size:100vw auto;background-position:-51.5vw -2vw}
+}

+ 91 - 0
src/main/resources/static/css/user-center/member/member-record.css

@@ -0,0 +1,91 @@
+
+/*pc端*/
+@media screen and (min-width:768px){
+#memberPage{position: relative;margin-bottom: 105px;}
+.right{width:968px;overflow:hidden}
+.pageWrap{width: 968px}
+/*会标标记*/
+.vip-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:968px;height:68px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:104px;padding-right:24px;line-height:68px;background:url(/img/member/pc-cm-svip-bg-02.png) no-repeat center;background-size:968px 68px;font-weight:400}
+.vip-bar>div>span:first-child{font-size:16px;line-height:21px;color:#55331D}
+.vip-bar>div>span:last-child{font-size:14px;color:#55331D;opacity:1;margin-left:16px}
+.vip-bar>div>span.error{color:#FF2A2A}
+.vip-bar .right-box{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-align:center;-ms-flex-align:center;align-items:center}
+.vip-bar>div>a{display:block;margin-left:16px}
+.vip-bar>div>a.link{font-size:14px;color:#55331D}
+.vip-bar>div>a.btn{width:104px;height:36px;background:-webkit-gradient(linear,right top,left top,from(#585658),to(#323031));background:-o-linear-gradient(right,#585658 0%,#323031 100%);background:linear-gradient(270deg,#585658 0%,#323031 100%);border-radius:2px;line-height:36px;text-align:center;font-size:16px;color:#F0CB72}
+/*记录列表*/
+.record-list{width:100%;background:#fff;-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 24px}
+.record-list .record{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;padding:24px 0;-webkit-box-sizing:border-box;box-sizing:border-box;border-top:1px solid #E2E7EF}
+.record-list .record:first-child{border-top:0}
+.record-list .record .desc{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}
+.record-list .record .desc>span:first-child{font-size:16px;font-weight:400;color:#22272E}
+.record-list .record .desc>span:last-child{font-size:14px;font-weight:400;color:#627386;margin-top:12px}
+.record-list .record .amount span{font-size:16px;font-weight:400;color:#E15616}
+/*续费弹窗*/
+.renew-popup{position:fixed;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:540px;height:424px;background:#FFFFFF;opacity:1;border-radius:2px;z-index:9999}
+.renew-popup .popup-title{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px;padding:0 16px 0 24px;-webkit-box-sizing:border-box;box-sizing:border-box;font-size:16px;font-weight:bold;color:#4A4F58;opacity:1;border-bottom:1px solid #E2E7EF}
+.renew-popup .popup-title .close{color: #d4d4d4;font-size:30px;font-weight:400;cursor:pointer}
+.renew-popup .combo-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}
+.renew-popup .combo-list>div:first-child{margin-top:37px}
+.renew-popup .combo-list>div:last-child{margin-top:56px}
+/*遮罩*/
+.mask{content:"";display:block;position:fixed;width:100vw;height:100vh;background:#333333;opacity:0.7;left:0;top:0;z-index:9998}
+/*确认支付 立即支付弹窗*/
+.payment-confirm-popup{position:fixed;top:50%;left:50%;z-index:99999;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:338px;height:168px;padding:16px;background:#FFFFFF;opacity:1;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box}
+.payment-confirm-popup .popup-title{padding-bottom:16px;font-size:16px;font-weight:bold;color:#4A4F58}
+.payment-confirm-popup .popup-title .close{position:absolute;right:16px;top:4px;color:#d4d4d4;font-size:30px;font-weight:400;cursor:pointer}
+.payment-confirm-popup .content{font-size:14px;font-weight:400;line-height:24px;color:#22272E;opacity:1}
+.payment-confirm-popup .popup-btn{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:48px}
+.payment-confirm-popup .popup-btn .confirm-btn{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:104px;height:32px;background:#E15616;opacity:1;border-radius:2px;font-size:14px;font-weight:400;color:#FFFFFF}
+}
+
+/*h5*/
+@media screen and (max-width:768px){
+/*会员标记*/
+.vip-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;width:100vw;height:20.6vw;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:17.1vw;padding-right:3.3vw;background:url(/img/member/h5-cm-svip-bg-02.png) no-repeat center;background-size:100vw 20.6vw;font-weight:400}
+.vip-bar .row2,.vip-bar .right-box{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}
+.vip-bar .left-box span:first-child{font-size:3.4vw;color:#55331D}
+.vip-bar .left-box span:last-child{font-size:3vw;color:#55331D;opacity:1;margin-top:2.4vw}
+.vip-bar .row1 span:last-child{margin-top:0;margin-left:2.4vw}
+.vip-bar .right-box{-webkit-box-align:center;-ms-flex-align:center;align-items:center}
+.vip-bar .right-box a{display:block}
+.vip-bar .right-box a.link{font-size:2.8vw;color:#55331D}
+.vip-bar .right-box a.btn{width:19.2vw;height:7.2vw;background:-webkit-gradient(linear,right top,left top,from(#585658),to(#323031));background:-o-linear-gradient(right,#585658 0%,#323031 100%);background:linear-gradient(270deg,#585658 0%,#323031 100%);border-radius:2px;line-height:7.2vw;text-align:center;font-size:3.2vw;color:#F0CB72;margin-top:2.4vw}
+/*记录列表*/
+.record-list{padding:0 3.2vw;-webkit-box-sizing:border-box;box-sizing:border-box;background:#fff}
+.record-list .record{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;padding:3.2vw 0;-webkit-box-sizing:border-box;box-sizing:border-box;border-top:1px solid #B8BFCA}
+.record-list .record:first-child{border-top:0}
+.record-list .record:first-child{border-top:0}
+.record-list .record .desc{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}
+.record-list .record .desc > span:first-child{font-size:3.6vw;font-weight:400;color:#22272E}
+.record-list .record .desc > span:last-child{font-size:2.8vw;font-weight:400;color:#627386;margin-top:2vw}
+.record-list .record .amount span{font-size:3.8vw;font-weight:400;color:#E15616}
+/*续费弹窗*/
+.renew-popup{position:fixed;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:74.6vw;height:72.8vw;background:#fff;-webkit-box-shadow:0px 10px 20px rgba(0,0,0,0.16);box-shadow:0px 10px 20px rgba(0,0,0,0.16);opacity:1;border-radius:1.2vw;z-index:9999}
+.renew-popup .popup-title{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:4.8vw 4vw 0;-webkit-box-sizing:border-box;box-sizing:border-box;font-size:3.6vw;font-weight:bold;color:#4A4F58;opacity:1}
+.renew-popup .popup-title .close{position:absolute;right:2.4vw;top:1vw;font-size:7vw;font-weight:normal;cursor:pointer}
+.renew-popup .combo-list{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}
+.renew-popup .combo-list>div:first-child{-webkit-box-pack:space-evenly;-ms-flex-pack:space-evenly;justify-content:space-evenly;width:100%;margin-top:5.8vw}
+.renew-popup .combo-list>div:last-child{width:100%;margin-top:8vw}
+.renew-popup .combo-list .combo{width:20.6vw;height:22.4vw}
+.renew-popup .combo-list .combo.recommend::after{width:8vw;height:4vw;line-height:4vw;top:-1.55vw}
+.renew-popup .combo-list .combo .how-mounts{font-size:3.2vw}
+.renew-popup .combo-list .combo .price{font-size:3.9vw;padding:1.2vw 0}
+.renew-popup .combo-list .combo .price i{font-size:2.6vw}
+.renew-popup .combo-list .combo .average{font-size:2.6vw}
+.renew-popup .combo-list .pay-btn{width:66.6vw;height:9.9vw;font-size:3.2vw}
+.renew-popup .combo-list .pay-btn.plain{margin-top:3.3vw}
+/*遮罩*/
+.mask{content:"";display:block;position:fixed;width:100vw;height:100vh;background:#333333;opacity:0.7;left:0;top:0;z-index:9998}
+/*确认支付,立即支付弹窗*/
+.payment-confirm-popup{position:fixed;top:50%;left:50%;z-index:99999;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:74.6vw;height:46vw;padding:4.4vw;background:#FFFFFF;opacity:1;border-radius:1.2vw;-webkit-box-sizing:border-box;box-sizing:border-box}
+.payment-confirm-popup .popup-title{padding-bottom:3.2vw;padding-top:2.4vw;font-size:3.8vw;font-weight:bold;color:#4A4F58}
+.payment-confirm-popup .popup-title .close{position:absolute;right:3.2vw;top:1.2vw;color:#d4d4d4;font-size:5.6vw;font-weight:400;cursor:pointer}
+.payment-confirm-popup .content{font-size:3.6vw;font-weight:400;line-height:6.4vw;color:#22272E;opacity:1}
+.payment-confirm-popup .popup-btn{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:10.4vw}
+.payment-confirm-popup .popup-btn .confirm-btn{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:66.6vw;height:9.9vw;background:#E15616;opacity:1;border-radius:2px;font-size:14px;font-weight:400;color:#FFFFFF}
+/*加载更多*/
+.show-more{width:100vw;margin:2.4vw 0;text-align:center}
+.show-more .more-btn{display:inline-block;width:20vw;height:6vw;font-size:3vw;line-height:6vw;border:1px solid #ccc}
+.show-more .more-btn::after{content:'';width:4vw;height:2.4vw;display:inline-block;background:url(/img/base/icon_m.png) no-repeat;background-size:100vw auto;background-position:-51.5vw -2vw}
+}

+ 19 - 2
src/main/resources/static/css/user-center/order/detail.css

@@ -45,8 +45,16 @@ li{list-style:none}
     .order-container .section-shopinfo .product-t .text{width: 810px;float: left;}
     .order-container .section-shopinfo .product-t .tit{float: left;width: 100%;margin-bottom: 6px;line-height: 22px;font-size: 16px;text-align: left;color: #22272E;}
     .order-container .section-shopinfo .product-t .info{width: 100%;height: auto;float: left;}
-    .order-container .section-shopinfo .product-t .info>p{line-height:24px;font-size:14px;color:#627386;text-align:left;display:inline-block;width:30%}
-    .order-container .section-shopinfo .product-t .info>p .red{color: #FF2A2A;}
+    .order-container .section-shopinfo .product-t .info>.col{line-height:24px;font-size:14px;color:#627386;text-align:left;display:inline-block;width:25%}
+    .order-container .section-shopinfo .product-t .info>.col .red{color: #FF2A2A;}
+    .order-container .section-shopinfo .product-t .info>div.col{width: 40%;}
+    /*会员标签*/
+    .order-container .section-shopinfo .product-t .info>.col .svip-tag{width:100%;height:22px;letter-spacing:0;display: inline;margin-left: 10px;}
+    .order-container .section-shopinfo .product-t .info>.col .svip-tag .svip-icon{position:relative;z-index:9;display:inline-block;width:30px;height:22px;text-align:center;line-height:22px;font-size:12px;font-weight:400;color:#F0CB72;opacity:1;background:#333333}
+    .order-container .section-shopinfo .product-t .info>.col .svip-tag .svip-icon.btr{border-radius:2px 8px 0px 2px}
+    .order-container .section-shopinfo .product-t .info>.col .svip-tag .svip-price{z-index:1;position:relative;display:inline-block;padding-left:25px;padding-right:4px;margin-left:-27px;line-height:22px;background:#F0CB72;opacity:1;border-radius:2px;font-size:14px}
+    .order-container .section-shopinfo .product-t .info>.col .svip-tag .svip-price span{color: #333}
+
     .order-container .section-shopinfo .product-t .price>p{line-height:24px;font-size:14px;color:#627386;text-align:left;display:inline-block;width:30%}
     .order-container .section-shopinfo .product-t .price>p .red{color: #FF2A2A;}
     .price-total{padding-top:20px;text-align:right;color:#22272e;font-size:16px}
@@ -152,6 +160,15 @@ li{list-style:none}
     .section-prosinfo .text .info .priceTag .tag{position:absolute;right:0;top:auto;left:auto;}
     .section-prosinfo .text .info>p{display:inline-block;min-width:48%;font-size:3.1vw;color:#627386}
     .section-prosinfo .text .info>p .red{color:#FF2A2A}
+
+    /*会员标签*/
+    .section-prosinfo .text .svip-tag{height:4.74vw;letter-spacing:0;overflow: hidden;margin-left: 12vw;}
+    .section-prosinfo .text .svip-tag .svip-icon{position:relative;z-index:9;float: left; width:9.8vw;height:4.74vw;text-align:center;line-height:4.74vw;font-size:2.8vw;font-weight:400;color:#F0CB72;opacity:1;background:#333333}
+    .section-prosinfo .text .svip-tag .svip-icon.btr{border-radius:2px 8px 0px 2px}
+    .section-prosinfo .text .svip-tag .svip-price{z-index:1;position:relative;float: left;padding-left:5.4vw;padding-right:0.6vw;margin-left:-6vw;line-height:4.74vw;height: 4.74vw; background:#F0CB72;opacity:1;border-radius:2px;font-size:2.8vw}
+    .section-prosinfo .text .svip-tag .svip-price span{color: #333}
+    .section-prosinfo .text .svip-tag .svip-price span:nth-child(2){margin-left: -0.4vw}
+
     .section-prosinfo .text .price{font-size:3.4vw;color:#627386}
     .section-prosinfo .text .price .red{color:#f94b4b}
     .shopinfo-bott{border-top:1px solid #F7F7F7;width:100%;box-sizing:border-box;margin:0 auto;line-height:10.6vw;color:#22272e;font-size:3.4vw;text-align:right;padding:0 3.2vw}

BIN
src/main/resources/static/img/member/h5-cm-svip-bg-01.png


BIN
src/main/resources/static/img/member/h5-cm-svip-bg-02.png


BIN
src/main/resources/static/img/member/h5-cm-svip-bg-03.png


BIN
src/main/resources/static/img/member/h5-cm-svip-coupon-able.png


BIN
src/main/resources/static/img/member/h5-cm-svip-coupon-unable.png


BIN
src/main/resources/static/img/member/h5-cm-svip-icon1.png


BIN
src/main/resources/static/img/member/h5-cm-svip-icon2.png


BIN
src/main/resources/static/img/member/h5-cm-svip-icon3.png


BIN
src/main/resources/static/img/member/h5-cm-svip-icon4.png


BIN
src/main/resources/static/img/member/h5-cm-svip-icon5.png


BIN
src/main/resources/static/img/member/h5-cm-svip-icon6.png


BIN
src/main/resources/static/img/member/h5-cm-svip-icon7.png


BIN
src/main/resources/static/img/member/h5-cm-svip-icon8.png


BIN
src/main/resources/static/img/member/pc-cm-svip-bg-01.png


BIN
src/main/resources/static/img/member/pc-cm-svip-bg-02.png


BIN
src/main/resources/static/img/member/pc-cm-svip-bg-03.png


BIN
src/main/resources/static/img/member/pc-cm-svip-coupon-able.png


BIN
src/main/resources/static/img/member/pc-cm-svip-coupon-unable.png


BIN
src/main/resources/static/img/member/pc-cm-svip-icon1.png


BIN
src/main/resources/static/img/member/pc-cm-svip-icon2.png


BIN
src/main/resources/static/img/member/pc-cm-svip-icon3.png


BIN
src/main/resources/static/img/member/pc-cm-svip-icon4.png


BIN
src/main/resources/static/img/member/pc-cm-svip-icon5.png


BIN
src/main/resources/static/img/member/pc-cm-svip-icon6.png


BIN
src/main/resources/static/img/member/pc-cm-svip-icon7.png


BIN
src/main/resources/static/img/member/pc-cm-svip-icon8.png


+ 5 - 2
src/main/resources/static/js/account/login.js

@@ -104,7 +104,8 @@ var loginPage = new Vue({
                             userIdentity: response.data.userIdentity,
                             permission: response.data.userPermission,
                             token: response.data.token,
-                            unionId:response.data.unionId
+                            unionId:response.data.unionId,
+                            vipFlag: response.data.vipFlag
                         };
                         _self.setStorages( _self.userData);
                         // 登录成功页面跳转
@@ -200,6 +201,7 @@ var loginPage = new Vue({
                 UserApi.PostLoginAccount(params,function(response){
                     _self.loginLoading = false;
                     if(response.code === 0){
+                        console.log(response);
                         _self.userData = {
                             account: response.data.account,
                             email: response.data.email,
@@ -212,7 +214,8 @@ var loginPage = new Vue({
                             shopId: response.data.shopId,
                             userIdentity: response.data.userIdentity,
                             permission: response.data.userPermission,
-                            token: response.data.token
+                            token: response.data.token,
+                            vipFlag: response.data.vipFlag
                         };
                         _self.setStorages( _self.userData);
                         // 登录成功页面跳转

+ 24 - 1
src/main/resources/static/js/account/register-club.js

@@ -47,6 +47,7 @@ var registerPage = new Vue({
             {value:1,name:'整形'},
             {value:2,name:'轻医美'},
             {value:3,name:'皮肤科'},
+            {value:4,name:'产后修复'},
         ],
         medicaCampNullList: [
             {name:'美容'},
@@ -75,12 +76,23 @@ var registerPage = new Vue({
             license: '^[a-zA-Z0-9_]{18}$',
             email: '^(([^<>()\\[\\]\\\\.,;:\\s@&quot;]+(\\.[^<>()\\[\\]\\\\.,;:\\s@&quot;]+)*)|(&quot;.+&quot;))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$',
             password: "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$"
-        }
+        },
+        medicalPracticeLicenseFlag: false
     },
     computed: {
 
+    },
+    watch: {
+        userMainPros: function(){
+            $('#business').parent().find('.errTips').removeClass("show");
+        }
     },
     methods: {
+        handleChangeType: function(type){
+            if(type === parseInt(this.clubUpgradeUser.firstClubType)) return;
+            this.userMainPros = [];
+            this.clubUpgradeUser.secondClubType = (type === 1 ? 1 : 5);
+        },
         clubRegister: function(){ //机构注册提交
             var _self = this;
             var pass = verifyForm();
@@ -205,6 +217,11 @@ var registerPage = new Vue({
                     $('#firstClubType').siblings('.errTips').text('请选择机构类型').addClass("show");
                     return  false;
                 }
+                if(!_self.clubUpgradeUser.firstClubType){
+                    $('#firstClubType').parent().addClass("error");
+                    $('#firstClubType').siblings('.errTips').text('请选择机构类型').addClass("show");
+                    return  false;
+                }
                 if(Number(_self.clubUpgradeUser.firstClubType) == 1){
                     if(!_self.clubUpgradeUser.medicalPracticeLicense){
                         $('#formmedicalPracticeLicenseImage').parent().addClass("error").find('.checked').removeClass("show");
@@ -212,6 +229,10 @@ var registerPage = new Vue({
                         return  false;
                     }
                 }
+                if(_self.userMainPros.length === 0){
+                    $('#business').siblings('.errTips').text('请选择或添加主营产品').addClass("show");
+                    return false;
+                }
                 _self.clubUpgradeUser.mainProduct = _self.userMainPros.join("/");
                 _self.loginLoading = true;
                 UserApi.ClubUpgrade(_self.clubUpgradeUser,function (response) {
@@ -339,6 +360,8 @@ var registerPage = new Vue({
             var file = inputDOM.files;
             _this.formData.append('file', file[0]);
             PublicApi.uploadimg(_this.formData,function(response){
+                $('#formmedicalPracticeLicenseImage').parent().removeClass("error");
+                $('#formmedicalPracticeLicenseImage').siblings('.errTips').removeClass("show");
                 _this.clubUpgradeUser.medicalPracticeLicense = response.data;
                 event.target.value = '';
             });

+ 6 - 0
src/main/resources/static/js/base.js

@@ -6,11 +6,13 @@ var GLOBAL_TOKEN = 'X-Token';
 var GLOBAL_USER_ID = 0;
 var GLOBAL_USER_IDENTITY = 0;//2-会员机构;3-供应商;4-普通机构
 var GLOBAL_SHOP_ID = 0;
+var GLOBAL_VIP_FLAG = 0;
 if(localStorage.getItem('userInfo')){
     globalUserData = JSON.parse(localStorage.getItem('userInfo'));
     GLOBAL_TOKEN = globalUserData.token;
     GLOBAL_USER_ID = globalUserData.userId*1;
     GLOBAL_USER_IDENTITY = globalUserData.userIdentity*1;
+    GLOBAL_VIP_FLAG = globalUserData.vipFlag;
     GLOBAL_SHOP_ID = globalUserData.shopId*1;
     if (GLOBAL_USER_ID === 5261 || GLOBAL_USER_ID === 10947 || GLOBAL_USER_ID === 11579) {
         GLOBAL_USER_IDENTITY = 1;
@@ -648,6 +650,10 @@ function setProductPrice(productList, productIds, userId, callback){
                         product.actStatus =item.actStatus;
                         product.couponsLogo =item.couponsLogo;
                         product.promotions =item.promotions;
+
+                        product.svipPriceTag =item.svipPriceTag;
+                        product.svipPriceType =item.svipPriceType;
+                        product.svipProductFlag =item.svipProductFlag;
                     }
                 });
             });

+ 41 - 0
src/main/resources/static/js/common/serviceapi/pay.service.js

@@ -147,5 +147,46 @@ var PayApi = {
             .then(function(res){
                 callback(res);
             });
+        },
+
+
+        /*---------------------支付vip接口---------------------------*/
+
+        PayVipPcMallPay: function(params, callback){ // vip网银支付
+            Http.AjaxService({
+                url:'/order/pay/vip/union',
+                type:'POST',
+                data:params,
+                json:false,
+                isHost:true
+            })
+            .then(function(res){
+                callback(res);
+            });
+        },
+
+        PayVipAliPay: function(params, callback){ // vip支付宝支付
+            Http.AjaxService({
+                url:'/order/pay/vip/alipay',
+                type:'POST',
+                data:params,
+                json:false,
+                isHost:true
+            })
+            .then(function(res){
+                callback(res);
+            });
+        },
+        PayVipMiniWxPay: function(params, callback){ // 微信支付宝支付
+            Http.AjaxService({
+                url:'/order/pay/vip/wechat',
+                type:'POST',
+                data:params,
+                json:false,
+                isHost:true
+            })
+            .then(function(res){
+                callback(res);
+            });
         }
 };

+ 12 - 0
src/main/resources/static/js/common/serviceapi/product.service.js

@@ -4,6 +4,18 @@
  * auther xw
  */
 var ProductApi = {
+        GetSvipProductList: function (params, callback) {  //获取svip商品列表
+            Http.AjaxService({
+                url: '/commodity/svip/product/page',
+                type: 'get',
+                data: params,
+                json: true,
+                isHost: true
+            }).then(function (res) {
+                callback(res);
+            });
+        },
+
         GetProductDdtails: function (params, callback) {//获取商品详情
             Http.AjaxService({
                 url:'/commodity/product/details',

+ 56 - 1
src/main/resources/static/js/common/serviceapi/user.service.js

@@ -307,5 +307,60 @@ var UserApi = {
                 callback(res)
             });
         },
-
+        GetSuperCenterInfo: function (params, callback) {//会员中心数据
+            Http.AjaxService({
+                url: '/user/super/center',
+                type:'get',
+                data:params,
+                json:false,
+                isHost:true
+            }).then(function (res) {
+                callback(res);
+            });
+        },
+        RegisterSuperByBeans: function (params, callback) {//会员中心采美豆抵扣开通svip会员
+            Http.AjaxService({
+                url: '/user/register/super/beans',
+                type:'get',
+                data:params,
+                json:false,
+                isHost:true
+            }).then(function (res) {
+                callback(res);
+            });
+        },
+        SuperHistory: function (params, callback) {//会员开通记录
+            Http.AjaxService({
+                url: '/user/super/history',
+                type:'get',
+                data:params,
+                json:false,
+                isHost:true
+            }).then(function (res) {
+                callback(res);
+            });
+        },
+        // user/super/package
+        FetchSuperPackage: function (params, callback) {//获取会员套餐
+            Http.AjaxService({
+                url: '/user/super/package',
+                type:'get',
+                data:params,
+                json:false,
+                isHost:true
+            }).then(function (res) {
+                callback(res);
+            });
+        },
+        RegisterSuperPay: function(params, callback){ // 在线支付超级会员预处理
+            Http.AjaxService({
+                url: '/user/register/super/pay',
+                type: 'get',
+                data: params,
+                json: false,
+                isHost: true
+            }).then(function (res) {
+                callback(res);
+            });
+        }
 };

+ 4 - 0
src/main/resources/static/js/index.js

@@ -18,6 +18,10 @@ var homeData = new Vue({
         },
     },
     methods: {
+        // 是否显示vip标签价格
+        showVipPriceTag: function(product){
+            return (product.priceFlag !== 1 && product.svipProductFlag === 1 && ((GLOBAL_USER_IDENTITY === 4 && GLOBAL_VIP_FLAG === 1) || GLOBAL_USER_IDENTITY === 2));
+        },
         popupPage:function(){  // 弹窗点击跳转链接
             var _self = this;
             this.popupFlag=false;

+ 56 - 15
src/main/resources/static/js/pay/caimei-pay.js

@@ -46,7 +46,11 @@ var payContainer = new Vue({
         organizeId:'',  //组织机构id
         orderNo:'',      //订单号
         orderTotalFee:'',
-        unpaidAmount:''  //真正的付款金额
+        unpaidAmount:'',  //真正的付款金额
+        comboInfo: [], // 会员套餐
+        type: 1,
+        vipMonth: 0,
+        vipRecordId: undefined
     },
     filters: {
         NumFormat :function(value) {
@@ -81,11 +85,20 @@ var payContainer = new Vue({
                     _self.payInfo.payLinkTypeText =  _self.payInfo.payLinkType == 1 ? '企业网银' : '个人网银';
                     _self.payInfo.payUserType =  _self.payInfo.payLinkType == 1 ? 'ENTERPRISE' : 'USER';
                     _self.unpaidAmount = _data.orderPayLink.unpaidAmount;
+                    _self.type = _data.type;
                     if(_data.code == 0){
                         setTimeout(function () {  //支付倒计时
                             _self.countTime(_self.payInfo.payTime)
                         }, 1000);
-                        _self.infoPayOrderCheckoutCounter();
+                        if(_self.type === 1){
+                            _self.infoPayOrderCheckoutCounter();
+                        }else{
+                            console.log('本次支付链接是支付超级会员');
+                            _self.userName = _data.userName;
+                            _self.vipMonth = _data.orderPayLink.vipMonth;
+                            _self.vipRecordId = _data.orderPayLink.vipRecordId;
+                            _self.isRequest = true;
+                        }
                     }else{
                         _self.isErrorShow = true;
                         _self.isRequest = true;
@@ -154,15 +167,45 @@ var payContainer = new Vue({
                 CAIMEI.dialog('请选择银行!');
                 return;
             }
-            var params = {
-                    payWay:'UNIONPAY',
-                    payAmount: _self.payInfo.payUnpaidAmount*100,
-                    bankCode:_self.payInfo.payBankNum,
-                    returnUrl:'https://www.caimei365.com/pay/success.html?pageType=www&type=success&payAmount='+_self.payInfo.payUnpaidAmount,
-                    orderId:_self.payInfo.payOrderId,
-                    userType:_self.payInfo.payUserType
+            if (_self.type === 2){
+                // 支付超级会员
+                console.log('支付超级会员');
+                var params = {
+                    bankCode: this.payInfo.payBankNum,
+                    returnUrl: 'https://www.caimei365.com/pay/success.html?pageType=www&type=success&payAmount='+_self.payAmount,
+                    userType: _self.payInfo.payUserType,
+                    vipRecordId: _self.vipRecordId,
+                };
+                _self.PayVipPcMallPay(params);
+            }else {
+                // 普通订单
+                console.log('支付普通订单');
+                var params = {
+                    payWay: 'UNIONPAY',
+                    payAmount: _self.payInfo.payUnpaidAmount * 100,
+                    bankCode: _self.payInfo.payBankNum,
+                    returnUrl: 'https://www.caimei365.com/pay/success.html?pageType=www&type=success&payAmount='+_self.payAmount,
+                    orderId: _self.payInfo.payOrderId,
+                    userType: _self.payInfo.payUserType
                 };
-            _self.PayOrderPcMallPay(params);
+                _self.PayOrderPcMallPay(params);
+            }
+        },
+        // 网银支付超级会员
+        PayVipPcMallPay: function(params){
+            var _self = this;
+            _self.isSubMitStatus=true;
+            PayApi.PayVipPcMallPay(params, function(response){
+                if (response.code == 0) {
+                    _self.isPayAlert = true;
+                    _self.mbOrderId = response.data.data.mbOrderId;
+                    window.open(response.data.data.payUrl);
+                    _self.isSubMitStatus = false;
+                } else {
+                    CAIMEI.Alert(response.msg, '确定', false);
+                    _self.isSubMitStatus = false;
+                }
+            });
         },
         PayOrderPcMallPay:function(params){//订单网银支付请求
             var _self = this;
@@ -185,11 +228,9 @@ var payContainer = new Vue({
             PayApi.PayOrderFindOrderStatus({mbOrderId:_self.mbOrderId},function(response){
                 _self.isPayAlert = false;
                 var data = response.data.data;
-                if(data.status === '1'){
-                    window.location.href = '/pay/success.html?pageType=www&type=success&payAmount='+ _self.payInfo.payUnpaidAmount;
-                }else{
-                    window.location.href = '/pay/success.html?pageType=www&type=error&payAmount='+ _self.payInfo.payUnpaidAmount;
-                }
+                var pageType = _self.type === 1 ? 'www' : 'vip&payFlag=1'; // 1 普通订单 2 vip订单
+                var type = data.status === '1' ? 'success' : 'error'; // 成功 or 失败
+                window.location.href = '/pay/success.html?pageType='+ pageType +'&type='+ type +'&payAmount=' + _self.payInfo.payUnpaidAmount;
             });
         },
         changeTab:function(index,item){// 选择银行

+ 157 - 16
src/main/resources/static/js/pay/caimei-paycash.js

@@ -50,7 +50,9 @@ var payContainer = new Vue({
         onlinePayFlag:'',
         payStatusText:'使用微信和企业网银支付全部金额后,供应商会在24小时后发货(周末、节假日顺延)。若着急发货,可以选择使用线下转账进行付款。',
         productID:'',//发布商品的ID
-        is_Wechat_bowcr:false
+        is_Wechat_bowcr:false,
+        comboInfo: null, //选中的svip套餐信息
+        vipRecordId: undefined,
     },
     filters: {
         NumFormat:function(value) {
@@ -110,6 +112,10 @@ var payContainer = new Vue({
                 if(response.code == 0){
                     if(response.data === 0){
                         _self.isPaySwitch = true;
+                        if (_self.pageType === '2') {
+                            CAIMEI.dialog('支付系统遇到点小问题,请稍后重试', false);
+                            return;
+                        }
                         CAIMEI.Alert('线上支付功能正在维护中,请前往订单详情页面查看线下转账方式后进行付款','确定',true,function(){
                             window.location.href='/user/order/detail.html?orderId='+_self.payInfo.payOrderId;
                         });
@@ -121,6 +127,10 @@ var payContainer = new Vue({
         },
         PayMobileSubmitFn:function(){//点击移动支付方式
             var _self = this;
+            if(_self.isPaySwitch && _self.pageType === '2'){
+                CAIMEI.dialog('支付系统遇到点小问题,请稍后重试', false);
+                return;
+            }
             if(_self.invoiceStatus){
                 _self.layerConfirm();
             }else{
@@ -173,6 +183,8 @@ var payContainer = new Vue({
                             window.open("/pay/caimei-paymobile.html?pageType=1");
                             _self.isPayAlert = true;
                         }
+                    }else if(_self.pageType === '2'){ // 微信支付会员
+                        _self.payVipMiniWxPay();
                     }else{
                         if(!isPC){
                             var orderInfo = {//普通订单微信二维码参数
@@ -201,6 +213,8 @@ var payContainer = new Vue({
                                 productId:_self.productID,
                             };
                         _self.PayOrdersecondAliPay(params);
+                    }else if(_self.pageType === '2'){ // 支付宝支付会员
+                        _self.payVipAliPay();
                     }else{
                         var params = {//正常订单
                                 payAmount:Math.round(_self.payAmount*100),
@@ -217,6 +231,8 @@ var payContainer = new Vue({
                             productId:_self.productID,
                         };
                         _self.PayOrdersecondUnion(params,_self.payInfo.payBankNum);
+                    }else if(_self.pageType === '2'){ // 网银支付会员
+                        console.log('网银支付会员');
                     }else{
                         var params = {//正常订单
                             payWay:_self.payInfo.payBankNum,
@@ -231,6 +247,10 @@ var payContainer = new Vue({
         },
         PaySubmitFn:function(){//点击网银支付方式
             var _self = this;
+            if(_self.isPaySwitch && _self.pageType === '2'){
+                CAIMEI.dialog('支付系统遇到点小问题,请稍后重试', false);
+                return;
+            }
             if(_self.invoiceStatus){
                 _self.layerConfirm();
             }else{
@@ -250,7 +270,9 @@ var payContainer = new Vue({
                             userType:_self.payInfo.payUserType,
                     };
                     _self.PayOrdersecondUnion(params);
-                }else{
+                } else if (_self.pageType === '2') { // 网银付会员
+                    _self.payVipPcMallPay();
+                } else {
                     var params = {//正常订单
                             payAmount:Math.round(_self.payAmount*100),
                             bankCode:_self.payInfo.payBankNum,
@@ -403,6 +425,10 @@ var payContainer = new Vue({
         },
         copyLinkPaySubmitFn:function(){//复制网银支付链接
             var _self = this;
+            if(_self.isPaySwitch && _self.pageType === '2'){
+                CAIMEI.dialog('支付系统遇到点小问题,请稍后重试', false);
+                return;
+            }
             if(_self.invoiceStatus){
                 _self.layerConfirm();
             }else{
@@ -418,13 +444,23 @@ var payContainer = new Vue({
                     CAIMEI.dialog('企业网银支付的金额必须大于¥10.00');
                     return;
                 }
-                PayApi.PayOrderPayLink(
-                    {
+
+                var params = {};
+
+                if(_self.pageType == 2){
+                    params = {
+                        unpaidAmount:_self.payAmount,
+                        vipRecordId: _self.vipRecordId,
+                        payType:_self.payInfo.payType,
+                    }
+                }else{
+                    params = {
                         unpaidAmount:_self.payAmount,
                         orderId:_self.payInfo.payOrderId,
                         payType:_self.payInfo.payType
-                    },
-                    function(response){
+                    }
+                }
+                PayApi.PayOrderPayLink(params,function(response){
                         _self.bankPayLink_url = response.data;
                         var oInput = document.createElement("textarea");
                         oInput.value = _self.bankPayLink_url;
@@ -453,6 +489,19 @@ var payContainer = new Vue({
         },
         RefreshBody:function(){//刷新页面
             var _self = this;
+            // 验证支付(支付会员)
+            if(_self.pageType == 2){
+                PayApi.PayOrderFindOrderStatus({mbOrderId:_self.mbOrderId},function(response){
+                    _self.isPayAlert = false;
+                    var data = response.data.data;
+                    if(data.status === '1'){
+                        _self.windowLocationHref('success');
+                    }else{
+                        _self.windowLocationHref('error');
+                    }
+                });
+                return;
+            }
             if(_self.payInfo.payBankNum == 'WEIXIN'){
                 PayApi.PayOrderPayWhetherSuccess({orderId: _self.payInfo.payOrderId, paySuccessCounter:_self.paySuccessCounter},function(response){
                     _self.isPayAlert = false;
@@ -478,6 +527,8 @@ var payContainer = new Vue({
             var _self = this;
             if( _self.pageType === '1'){
                 window.location.href = '/pay/success.html?pageType=second&type='+state+'&payAmount='+_self.payAmount;
+            }else if(_self.pageType === '2'){
+                window.location.href = '/pay/success.html?pageType=vip&type='+state+'&payAmount='+_self.payAmount;
             }else{
                 window.location.href = '/pay/success.html?pageType=www&type='+state+'&payAmount='+_self.payAmount;
             }
@@ -507,25 +558,115 @@ var payContainer = new Vue({
                 _self.payStatusText = '使用微信和企业网银支付全部金额后,供应商会在24小时后发货(周末、节假日顺延)。若着急发货,可以选择使用线下转账进行付款。';
                 _self.isReceiptStatus = true;
             });
-        }
+        },
+        // 网银支付会员
+        payVipPcMallPay: function(){
+            console.log('网银支付会员');
+            var _self = this;
+            var params = {
+                bankCode: this.payInfo.payBankNum,
+                returnUrl: 'https://www.caimei365.com/pay/success.html?pageType=www&type=success&payAmount='+_self.payAmount,
+                userType: _self.payInfo.payUserType,
+                vipRecordId: _self.vipRecordId
+            };
+            PayApi.PayVipPcMallPay(params, function (response) {
+                if (response.code == 0) {
+                    _self.isPayAlert = true;
+                    _self.isSubMitStatus = false;
+                    _self.mbOrderId = response.data.data.mbOrderId;
+                    window.open(response.data.data.payUrl);
+                } else {
+                    _self.isSubMitStatus = false;
+                    CAIMEI.Alert(response.msg, '确定', false);
+                }
+            });
+        },
+        // 支付宝支付会员
+        payVipAliPay: function(){
+            console.log('支付宝支付会员');
+            var _self = this;
+            var params = {
+                bankCode: _self.payInfo.payBankNum,
+                returnUrl: 'https://www.caimei365.com/',
+                userType: _self.payInfo.payUserType,
+                vipRecordId: _self.vipRecordId
+            };
+            console.log(params);
+            PayApi.PayVipAliPay(params, function(response){
+                console.log(response);
+                if (response.code === 0) {
+                    _self.isPayAlert = true;
+                    _self.mbOrderId = response.data.data.mbOrderId;
+                    _self.payInfo.payMobileUrl = response.data.data.payUrl;
+                    _self.payInfo.payData = {
+                        mbOrderId: _self.mbOrderId,
+                        type: _self.payInfo.payBankNum,
+                        amount: _self.payAmount,
+                        url: _self.payInfo.payMobileUrl,
+                    };
+                    CAIMEI.Storage.setItem('payData', JSON.stringify(_self.payInfo.payData));
+                    if (!isPC) {
+                        location.href = _self.payInfo.payMobileUrl;
+                    } else {
+                        window.open("/pay/caimei-paymobile.html?pageType=2&duration=" + _self.comboInfo.duration);
+                    }
+                } else {
+                    CAIMEI.Alert(response.msg, '确定', false);
+                    _self.isSubMitStatus = false;
+                }
+            });
+        },
+        // 微信支付会员
+        payVipMiniWxPay: function(){
+            if (!isPC) {
+                var orderInfo = {//普通订单微信二维码参数
+                    pageType: 2,
+                    vipId: this.comboInfo.id,
+                    vipRecordId: this.vipRecordId,
+                    payAmount: this.payAmount
+                };
+                this.payInfo.payMobileUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxea43a0f9ebce9e66&redirect_uri=https://www.caimei365.com/pay/wechatpay.html&response_type=code&scope=snsapi_base&state=" + JSON.stringify(orderInfo) + "#wechat_redirect";
+                location.href = this.payInfo.payMobileUrl;
+            } else {
+                this.payInfo.payData = {
+                    type: this.payInfo.payBankNum,
+                    vipId: this.comboInfo.id,
+                    vipRecordId: this.vipRecordId,
+                    amount: this.payAmount,
+                    duration: this.comboInfo.duration,
+                };
+                CAIMEI.Storage.setItem('payData', JSON.stringify(this.payInfo.payData));
+                window.open("/pay/caimei-paymobile.html?pageType=2");
+                this.isPayAlert = true;
+            }
+        },
     },
     mounted: function () {
         var _self = this;
+        // 判断当前支付是订单支付
         _self.pageType = CAIMEI.getUrlParam('pageType');
-        if( _self.pageType === '1'){//二手
+        _self.vipRecordId = parseInt(CAIMEI.getUrlParam('vipRecordId'));
+        if (_self.pageType === '1') {//二手
             _self.productID = CAIMEI.getUrlParam('productID');
             _self.payAmount = _self.toFixedFn(100);
             _self.isRequest = true;
             _self.payStatusText = '';
-        }else{
-             var HrefType = CAIMEI.getUrlParam('type');
-            if(HrefType == 'payfirm'){
-                _self.payInfo.payOrderId =  CAIMEI.getUrlParam('orderId');
-                _self.orderIdentificationId = '#'+_self.payInfo.payOrderId+'#';
-            }else{
-                var data =JSON.parse(localStorage.getItem("confirmOrderInfo"));
+        } else if (_self.pageType === '2') { // 支付会员
+            this.PayOrderOnLineSwitch();
+            // 从本地获取选中的svip套餐信息后删除本地信息
+            this.comboInfo = JSON.parse(CAIMEI.Storage.getItem('comboInfo'));
+            // CAIMEI.Storage.removeItem('comboInfo');
+            // 设置支付金额
+            this.payAmount = _self.toFixedFn(this.comboInfo.price);
+        } else {
+            var HrefType = CAIMEI.getUrlParam('type');
+            if (HrefType == 'payfirm') {
+                _self.payInfo.payOrderId = CAIMEI.getUrlParam('orderId');
+                _self.orderIdentificationId = '#' + _self.payInfo.payOrderId + '#';
+            } else {
+                var data = JSON.parse(localStorage.getItem("confirmOrderInfo"));
                 _self.payInfo.payOrderId = data.data.orderId;
-                _self.orderIdentificationId = '#'+_self.payInfo.payOrderId+'#';
+                _self.orderIdentificationId = '#' + _self.payInfo.payOrderId + '#';
             }
             _self.infoPayOrderCheckoutCounter();//正常订单初始化
         }

+ 27 - 7
src/main/resources/static/js/pay/caimei-paymobile.js

@@ -26,7 +26,10 @@ var payContainer = new Vue({
         isRefresh:false,
         maxtime:300,
         pageType:'',//页面跳转类型
-        productID:''//商品ID
+        productID:'',//商品ID
+        duration: 0, // 购买的会员期限
+        vipId: null, // vip套餐id
+        vipRecordId: undefined
     },
     filters: {
         NumFormat:function(value) {
@@ -50,7 +53,7 @@ var payContainer = new Vue({
     methods: {
         infoPayOrderCheckoutCounter:function(){//初始化订单数据
             var _self = this;
-            if( _self.pageType === '1'){
+            if( _self.pageType === '1' || _self.pageType === '2'){
                 setTimeout(function(){
                     switch (_self.payInfo.payType) {
                         case 'WEIXIN':
@@ -60,8 +63,8 @@ var payContainer = new Vue({
                             _self.getAliPayQrcodeInfo();
                             break;
                     }
-                },2000);
-            }else{
+                }, 2000);
+            } else {
                 PayApi.PayOrderCheckoutCounter({orderId:_self.payInfo.payOrderId},function(response){
                     if(response.code == 0){
                         // console.log(response);
@@ -115,7 +118,15 @@ var payContainer = new Vue({
                     productId:_self.productID,
                     payAmount:_self.payAmount
                 };
-            }else{
+            } else if (_self.pageType === '2') { // 微信支付会员
+                console.log('微信支付会员');
+                orderInfo = {
+                    pageType: 2,
+                    payAmount: _self.payAmount,
+                    vipId: _self.vipId,
+                    vipRecordId: _self.vipRecordId
+                };
+            } else {
                 orderInfo = {//普通订单微信二维码参数
                     pageType:0,
                     orderID:_self.payInfo.payOrderId,
@@ -123,6 +134,7 @@ var payContainer = new Vue({
                 };
             }
             _self.payInfo.payMobileUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxea43a0f9ebce9e66&redirect_uri=https://www.caimei365.com/pay/wechatpay.html&response_type=code&scope=snsapi_base&state="+JSON.stringify(orderInfo)+"#wechat_redirect";
+            console.log(_self.payInfo.payMobileUrl);
             var qrcode = new QRCode(document.getElementById("wx_pay_container"), {
                 render: "canvas", //也可以替换为table
                 text: _self.payInfo.payMobileUrl,
@@ -192,8 +204,7 @@ var payContainer = new Vue({
         var _self = this;
         var payData = JSON.parse(CAIMEI.Storage.getItem('payData'));
         _self.pageType = CAIMEI.getUrlParam('pageType');
-        console.log(payData);
-        console.log(_self.pageType);
+        _self.duration = CAIMEI.getUrlParam('duration');
         if( _self.pageType === '1'){
             console.log('二手商品');
             _self.payInfo.payType = payData.type;
@@ -201,6 +212,15 @@ var payContainer = new Vue({
             _self.payInfo.payMobileUrl = payData.url;
             _self.mbOrderId = payData.mbOrderId;
             _self.payAmount = _self.payableAmount = payData.amount;
+        }else if(_self.pageType === '2'){
+            _self.payInfo.payType = payData.type;
+            _self.payAmount = _self.payableAmount = payData.amount;
+            _self.payInfo.payMobileUrl = payData.url;
+            _self.vipId = payData.vipId;
+            _self.vipRecordId = payData.vipRecordId;
+            if(!_self.duration) { // 微信支付获取会员开通月份
+                _self.duration = payData.duration;
+            }
         }else{
             console.log('订单支付');
             _self.payInfo.payType = payData.type;

+ 30 - 11
src/main/resources/static/js/pay/caimei-success.js

@@ -13,7 +13,9 @@ var payContainer = new Vue({
         maxtime:10,
         linkText:'立即跳转',
         openLink:'/myaccount/orderlist--1-1.html',
-        isSuccessText:''
+        isSuccessText:'',
+        refreshType: false,
+        payFlag: '',
     },
     filters: {
         NumFormat:function(value) {
@@ -49,21 +51,34 @@ var payContainer = new Vue({
                         _self.openLink = '/flea-market/form.html';
                     }
                     break;
+                case 'vip':
+                    if (_self.payFlag) {
+                        _self.linkText = '采美商城首页';
+                        _self.openLink = '/index.html';
+                    } else {
+                        _self.linkText = '会员中心';
+                        _self.openLink = '/user/member.html';
+                    }
+                    break;
                 default:
                     _self.linkText = '采美商城首页';
                     _self.openLink = '/index.html';
             }
             _self.isRequest = true;
-            //自动跳转
-            // var timeClock = setInterval(function(){
-            //     _self.maxtime--;
-            //     if (_self.maxtime == 0) {
-            //         window.location.href = _self.openLink;
-            //         clearInterval(timeClock);
-            //         _self.maxtime = 10;
-            //         _self.isRefresh = true;
-            //     }
-            // },1000);
+
+            if(_self.pageType === 'vip'){
+                //自动跳转
+                var timeClock = setInterval(function () {
+                    _self.maxtime--;
+                    if (_self.maxtime == 1) {
+                        window.location.href = _self.openLink;
+                        clearInterval(timeClock);
+                        _self.maxtime = 10;
+                        _self.isRefresh = true;
+                        _self.refreshType = false;
+                    }
+                }, 1000);
+            }
         },
         toFixedFn:function(text){//处理小数点后两位数
             return Number(text).toFixed(2);
@@ -72,8 +87,12 @@ var payContainer = new Vue({
     mounted: function () {
         var _self = this;
         _self.pageType = CAIMEI.getUrlParam('pageType');
+        _self.payFlag = CAIMEI.getUrlParam('payFlag');
         _self.type = CAIMEI.getUrlParam('type');
         _self.payAmount = CAIMEI.getUrlParam('payAmount');
+        if(_self.pageType === 'vip' && !_self.payFlag){
+            _self.refreshType = true;
+        }
         _self.infoRequestBody();
     }
 });

+ 49 - 12
src/main/resources/static/js/pay/caimei-wechatpay.js

@@ -11,6 +11,8 @@ var payContainer = new Vue({
         state:0,//随机数
         isRequest:false,
         productId:'',//二手商品ID
+        vipId: null, // vip套餐id
+        vipRecordId: undefined
     },
     computed: {
 
@@ -25,26 +27,61 @@ var payContainer = new Vue({
             _this.isRequest = true;
             if( _this.pageType == 1){
                 _this.productId = _this.state.productId;
+            }else if(_this.pageType == 2){
+                _this.vipId = _this.state.vipId;
+                _this.vipRecordId = _this.state.vipRecordId;
             }else{
                 _this.orderID = _this.state.orderID;
             }
         },
         WxPaySubmit:function(){
-            var _this = this;
-            if(_this.pageType == 1){
-                _this.WxRequestsecondHandPay();
-            }else{
-                _this.WxRequestPaymentFn();
+            if (this.pageType == 1) {
+                this.WxRequestsecondHandPay();
+            } else if (this.pageType == 2) {
+                this.WxRequestPaymentVipFn();
+            } else {
+                this.WxRequestPaymentFn();
             }
         },
-        WxRequestsecondHandPay:function(){
+        // 会员支付
+        WxRequestPaymentVipFn: function(){
             var _this = this;
             var params = {
-                    code:_this.wechatcode,
-                    state:_this.rand(1000,9999),
-                    productId:_this.productId,
-                    returnUrl:'https://www.caimei365.com/',
-                };
+                code: _this.wechatcode,
+                state: _this.rand(1000, 9999),
+                vipId: _this.vipId,
+                vipRecordId: _this.vipRecordId,
+                returnUrl: 'https://www.caimei365.com/',
+            };
+            PayApi.PayVipMiniWxPay(params,function(response){
+                if(response.code == 0){
+                    var PayInfo = JSON.parse(response.data.data.payInfo);
+                    if (typeof WeixinJSBridge == "undefined"){
+                        if( document.addEventListener ){
+                            document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
+                        }else if (document.attachEvent){
+                            document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
+                            document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
+                        }
+                    }else{
+                        _this.onBridgeReady(PayInfo);
+                    }
+                }else{
+                     CAIMEI.dialog("支付链接已失效,请重新扫码支付");
+                    setTimeout(function(){
+                        WeixinJSBridge.call('closeWindow');
+                    },3000);
+                }
+            });
+        },
+        WxRequestsecondHandPay:function(){ // 二手商品支付
+            var _this = this;
+            var params = {
+                code: _this.wechatcode,
+                state: _this.rand(1000, 9999),
+                productId: _this.productId,
+                returnUrl: 'https://www.caimei365.com/',
+            };
             PayApi.PayOrdersecondWechat(params,function(response){
                 if(response.code == 0){
                     var PayInfo = JSON.parse(response.data.data.payInfo);
@@ -66,7 +103,7 @@ var payContainer = new Vue({
                 }
             });
         },
-        WxRequestPaymentFn:function(){
+        WxRequestPaymentFn:function(){ // 普通订单支付
             var _this = this;
             var params={
                     payAmount:Math.round(_this.payAmount*100),

+ 4 - 0
src/main/resources/static/js/product/detail.js

@@ -467,6 +467,10 @@ var productDetail = new Vue({
                     _self.initPreviewImage()
                 })
             }
+        },
+        // 是否显示vip标签价格
+        showVipPriceTag(product){
+            return (product.priceFlag !== 1 && product.svipProductFlag === 1 && ((GLOBAL_USER_IDENTITY === 4 && GLOBAL_VIP_FLAG === 1) || GLOBAL_USER_IDENTITY === 2));
         }
     },
     created: function () {

+ 6 - 0
src/main/resources/static/js/product/instruement.js

@@ -22,6 +22,12 @@
          }
      },
      methods:{
+        // 是否显示vip标签价格
+        showVipPriceTag: function(product){
+            console.log(product);
+            return (product.priceFlag !== 1 && product.svipProductFlag === 1 && ((GLOBAL_USER_IDENTITY === 4 && GLOBAL_VIP_FLAG === 1) || GLOBAL_USER_IDENTITY === 2));
+        },
+
         closeup:function(){
             this.showflag = false;
             document.body.style.overflow='';

+ 5 - 0
src/main/resources/static/js/product/list.js

@@ -54,6 +54,10 @@ var productList = new Vue({
         }
     },
     methods: {
+        // 是否显示vip标签价格
+        showVipPriceTag: function(product){
+            return (product.priceFlag !== 1 && product.svipProductFlag === 1 && ((GLOBAL_USER_IDENTITY === 4 && GLOBAL_VIP_FLAG === 1) || GLOBAL_USER_IDENTITY === 2));
+        },
         toPagination: function (pageNum) {
             if (pageNum <= this.pageTotal) {
                 var params = {pageNum: pageNum};
@@ -97,6 +101,7 @@ var productList = new Vue({
                 console.log(res);
                 if (res.code === 0 && res.data ) {
                     var result = JSON.parse(res.data);
+                    console.log(result.items);
                     _self.listRecord = result.total;
                     var resultData = setSearchProductList(result.items, _self.userId, function(){
                         _self.$forceUpdate();

+ 7 - 1
src/main/resources/static/js/product/produce-list.js

@@ -36,12 +36,17 @@ var productList = new Vue({
         },
     },
     methods:{
-       getproductList:function(){//商品列表
+        // 是否显示vip标签价格
+        showVipPriceTag: function(product){
+            return (product.priceFlag !== 1 && product.svipProductFlag === 1 && ((GLOBAL_USER_IDENTITY === 4 && GLOBAL_VIP_FLAG === 1) || GLOBAL_USER_IDENTITY === 2));
+        },
+        getproductList:function(){//商品列表
            var _self=this;
            ProductApi.GetSearchProduct(_self.params,function (res) {
                if( res.code==0){
                      _self.listData=[];
                      var result = JSON.parse(res.data);
+                     console.log(result);
                       _self.listRecord = result.total;
                        var resultData = setSearchProductList(result.items, _self.userId, function(){
                             _self.$forceUpdate();
@@ -50,6 +55,7 @@ var productList = new Vue({
                                 $("img[data-original]").lazyload();
                             },500);
                         });
+                        console.log(resultData);
                         if(isPC){
                             _self.listData = resultData;
                         }else{

+ 4 - 0
src/main/resources/static/js/product/product-coupon.js

@@ -30,6 +30,10 @@ var productList = new Vue({
 
     },
     methods: {
+        // 是否显示vip标签价格
+        showVipPriceTag: function(product){
+            return (product.priceFlag !== 1 && product.svipProductFlag === 1 && ((GLOBAL_USER_IDENTITY === 4 && GLOBAL_VIP_FLAG === 1) || GLOBAL_USER_IDENTITY === 2));
+        },
         getListByKeyword: function () {
             var _self = this;
             ProductApi.QueryCouponActivityList(_self.listQuery,function (response) {

+ 34 - 29
src/main/resources/static/js/shopping/cart.js

@@ -31,7 +31,6 @@ var shoppingCart = new Vue({
         couponPrice:0,							// 优惠金额
         totalDiscountAmount:0,					// 总共减去金额
         isDiscount:false,						// 控制显示优惠明细
-
     },
     watch:{
         listData: {
@@ -80,6 +79,7 @@ var shoppingCart = new Vue({
                     _self.totalPrice = data.totalPrice;
                     _self.promotionsList = data.promotions;
                     _self.totalCouponList = data.couponList;
+                    _self.reducedPrice = data.reducedPrice;
                     // 默认全选
                     _self.listData.forEach(function(supplier){
                         supplier.isChecked = true;
@@ -178,60 +178,65 @@ var shoppingCart = new Vue({
                 });
             });
         },
-        computedPrice: function(){
+        computedPrice: function() {
             var _self = this;
-            this.$nextTick(function(){
+            this.$nextTick(function () {
                 var totalPrice = 0;
                 var reducedPrice = 0;
                 var originalPrice = 0;
                 var kindCount = 0;
                 var totalCount = 0;
-                _self.listData.forEach(function(supplier){
+                _self.listData.forEach(function (supplier) {
                     var supplierPrice = 0;
                     var supplierReducedPrice = 0;
-                    if(supplier.cartList.length>0){
-                        supplier.cartList.forEach(function(cart){
-                            if (_self.submitIds.includes(cart.productId*1)){
-                                supplierPrice += cart.price*cart.number;
+                    var svipSupplierPrice = 0;
+                    if (supplier.cartList.length > 0) {
+                        supplier.cartList.forEach(function (cart) {
+                            if (_self.submitIds.includes(cart.productId * 1)) {
+                                supplierPrice += cart.price * cart.number;
                                 kindCount += 1;
                                 totalCount += cart.number;
                                 // 单品满减
-                                if(cart.promotions && cart.promotions.type*1===1 && cart.promotions.mode*1===2){
+                                if (cart.promotions && cart.promotions.type * 1 === 1 && cart.promotions.mode * 1 === 2) {
                                     // 单品满减-重新计算供应商总价/满减金额
-                                    if(cart.price*cart.number >= cart.promotions.touchPrice){
+                                    if (cart.price * cart.number >= cart.promotions.touchPrice) {
                                         supplierPrice -= cart.promotions.reducedPrice;
                                         supplierReducedPrice += cart.promotions.reducedPrice;
                                     }
                                 }
+                                //sivp优惠价格
+                                if(cart.svipProductFlag && GLOBAL_VIP_FLAG === 1){
+                                    svipSupplierPrice += ((cart.originalPrice - cart.price) * cart.number);
+                                }
                             }
                         });
                         // 店铺满减
-                        if(supplier.promotions && supplier.promotions.mode*1===2){
+                        if (supplier.promotions && supplier.promotions.mode * 1 === 2) {
                             // 店铺满减-计算供应商总价/满减金额
-                            if(supplierPrice >= supplier.promotions.touchPrice){
+                            if (supplierPrice >= supplier.promotions.touchPrice) {
                                 supplierPrice -= supplier.promotions.reducedPrice;
                                 supplierReducedPrice += supplier.promotions.reducedPrice;
                             }
                         }
                     }
                     supplier.totalPrice = supplierPrice;
-                    supplier.reducedPrice = supplierReducedPrice;
-                    supplier.originalPrice = (supplierPrice+supplierReducedPrice);
+                    supplier.reducedPrice = supplierReducedPrice + svipSupplierPrice; // 其他优惠价 + svip优惠价
+                    supplier.originalPrice = (supplierPrice + supplierReducedPrice);
                     totalPrice += supplier.totalPrice;
                     reducedPrice += supplier.reducedPrice;
                     originalPrice += supplier.originalPrice;
                 });
                 // 总促销计算
-                _self.promotionsList.forEach(function(promotions){
+                _self.promotionsList.forEach(function (promotions) {
                     // 凑单满减
-                    if(promotions.mode*1===2 && promotions.type*1===2){
+                    if (promotions.mode * 1 === 2 && promotions.type * 1 === 2) {
                         var total = 0;
-                        promotions.productList.forEach(function(product){
-                            if (_self.submitIds.includes(product.productId*1)){
+                        promotions.productList.forEach(function (product) {
+                            if (_self.submitIds.includes(product.productId * 1)) {
                                 total += product.number * product.price;
                             }
                         });
-                        if(total>=promotions.touchPrice){
+                        if (total >= promotions.touchPrice) {
                             totalPrice -= promotions.reducedPrice;
                             reducedPrice += promotions.reducedPrice;
                         }
@@ -243,26 +248,26 @@ var shoppingCart = new Vue({
                 _self.kindCount = kindCount;
                 _self.totalCount = totalCount;
                 // 计算优惠券
-                if(_self.totalCouponList.length>0){
+                if (_self.totalCouponList.length > 0) {
                     let eligibleCoupons = _self.calculationCoupon();
-                    if(eligibleCoupons.length>0){
-                        _self.eligibleCoupons.splice(0,_self.eligibleCoupons.length);
-                        _self.eligibleCoupons = eligibleCoupons.sort((a,b)=> b.couponAmount - a.couponAmount)
+                    if (eligibleCoupons.length > 0) {
+                        _self.eligibleCoupons.splice(0, _self.eligibleCoupons.length);
+                        _self.eligibleCoupons = eligibleCoupons.sort((a, b) => b.couponAmount - a.couponAmount)
                         _self.couponPrice = this.eligibleCoupons[0].couponAmount
-                    }else{
+                    } else {
                         _self.couponPrice = 0
                     }
                 }
                 // 最后满减金额 = 店铺减去金额 + 单品减去金额 + 凑单减去金额
                 _self.totalDiscountAmount = _self.reducedPrice + _self.couponPrice;
-                console.log('最终优惠金额',_self.totalDiscountAmount);
+                console.log('最终优惠金额', _self.totalDiscountAmount);
                 // 控制显示优惠明细
-                if(_self.totalDiscountAmount > 0 ){
+                if (_self.totalDiscountAmount > 0) {
                     _self.isDiscount = true;
-                }else{
+                } else {
                     _self.isDiscount = false;
                 }
-            });
+            })
         },
         calculationCoupon:function(){// 优惠券计算
             var _self = this;
@@ -315,7 +320,7 @@ var shoppingCart = new Vue({
                         return;
                     }
                 })
-            })
+            });
             return eligibleCoupons;
         },
         cartNumberSub: function(cart){

+ 3 - 0
src/main/resources/static/js/shopping/confirm.js

@@ -117,6 +117,7 @@ var shoppingConfirm = new Vue({
         checkedIndex:null,
         couponList:[], // 可用优惠券列表
         isCouponShow:false,
+        svipReducedPrice: 0, //超级会员优惠金额
     },
     computed: {
 
@@ -169,6 +170,7 @@ var shoppingConfirm = new Vue({
                     _self.balance.userMoney = data.userMoney;
                     _self.balance.originUserMoney = data.userMoney;
                     _self.hanldShouldPayFee = data.totalPrice;
+                    _self.svipReducedPrice = data.svipReducedPrice;
                     _self.postageParam.productIds =  _self.getProductIds(data.list); // 获取订单商品id列表 以 , 隔开
                     console.log('邮费接口数据',  _self.postageParam)
                     _self.getAddressList(_self.userId,20);
@@ -206,6 +208,7 @@ var shoppingConfirm = new Vue({
                     _self.balance.userMoney = data.userMoney;
                     _self.balance.originUserMoney = data.userMoney;
                     _self.hanldShouldPayFee = data.totalPrice;
+                    _self.svipReducedPrice = data.svipReducedPrice;
                     _self.postageParam.productIds =  _self.getProductIds(data.list); // 获取订单商品id列表 以 , 隔开
                     _self.getAddressList(_self.userId,20);
                     console.log('邮费接口数据',  _self.postageParam)

+ 20 - 1
src/main/resources/static/js/supplier/index.js

@@ -17,7 +17,22 @@ var supplierHome = new Vue({
         addhtml:'<span class="tag">美博会</span>'
     },
     computed: {
-
+        floorData: function() {
+            return [
+                {
+                    type: 1,
+                    title: '主推商品',
+                    productList: this.mainProducts,
+                    showEmpty: false
+                },
+                {
+                    type: 2,
+                    title: '供应商产品',
+                    productList: this.productLists,
+                    showEmpty: true
+                }
+            ]
+        }
     },
     filters: {
         NumFormat:function(value) {
@@ -25,6 +40,10 @@ var supplierHome = new Vue({
         }
     },
     methods: {
+        // 是否显示vip标签价格
+        showVipPriceTag: function(product){
+            return (product.priceFlag !== 1 && product.svipProductFlag === 1 && ((GLOBAL_USER_IDENTITY === 4 && GLOBAL_VIP_FLAG === 1) || GLOBAL_USER_IDENTITY === 2));
+        },
         getShopInfo: function(){
             var _self = this;
             $.getJSON(spiServer + "/supplier/home/detail",{supplierId: this.params.id}).done(function (r) {

+ 2 - 1
src/main/resources/static/js/user-center/account/beans.js

@@ -70,7 +70,8 @@ var orderPage = new Vue({
                     10:'抵用运费',
                     11:'退款回收',
                     12:'登录奖励',
-                    13:'查看商品资料'
+                    13:'查看商品资料',
+                    14:'购买超级会员'
                 };
             Object.keys(stateTextObject).forEach(function(key){
                 if(key == state){

+ 52 - 0
src/main/resources/static/js/user-center/dashboard.js

@@ -7,6 +7,7 @@ var helpSuggestion = new Vue({
         userId: 0,
         degree:'',
         userInfo:{},
+        vipInfo: {},
         formData:new FormData(),
         unReadMessageCount:'',// 消息数
         confirmedCount:'',// 待確認數量
@@ -22,6 +23,44 @@ var helpSuggestion = new Vue({
         couponNum:0,// 优惠券数量
         beansType:1
     },
+
+    computed:{
+        svipTips: function () {
+            var vipFlag = this.vipInfo.vipFlag;
+            var endTime = moment(this.vipInfo.endTime).format('yyyy.MM.DD');
+            if (vipFlag === 1) {
+                return '<span>已开通采美超级会员</span><span class="time">有效期至' + endTime + '</span>'
+            } else if (vipFlag === -1) {
+                return '<span class="error">采美超级会员已过期</span><span class="time">有效期至' + endTime + '</span>';
+            } else {
+                return '开通采美超级会员,享专属特权'
+            }
+        },
+        // 机构标签
+        userIdentityTag: function(){
+            var userIdentity = this.userInfo.userIdentity;
+            var vipFlag = this.vipInfo.vipFlag;
+            var names = {
+                2: '资质机构',
+                3: '供应商',
+                4: '个人机构'
+            };
+            var vipType = 'vip'; // 普通会员
+            var agencyType = 'ordinary'; // 个人机构
+            if(userIdentity === 2){
+                agencyType = 'vip'; // 资质机构
+            }
+            if(vipFlag === 1){
+                vipType= 'svip' // 超级会员
+            }
+            return {
+                name: names[userIdentity],
+                vipType: vipType,
+                agencyType: agencyType
+            }
+        }
+    },
+
     methods: {
         GetMyPcCenterInfo:function(){
             var _self = this;
@@ -46,6 +85,18 @@ var helpSuggestion = new Vue({
                 }
             })
         },
+        GetUserClubHome(){
+            var _self = this;
+            UserApi.GetUserClubHome({userId:_self.userId}, function(response){
+                console.log(response);
+                if(response.code === 0){
+                    _self.vipInfo = response.data.vip;
+                }else{
+                    CAIMEI.Alert(response.msg, '确定', false);
+                    _self.isRequset = false;
+                }
+            })
+        },
         uploadUserPuploadAvatar: function(event){//上传头像
             var _self = this;
             var inputDOM = _self.$refs.clubUseLogo;
@@ -103,6 +154,7 @@ var helpSuggestion = new Vue({
         var _self = this;
         if(globalUserData){
             _self.userId = globalUserData.userId;
+            _self.GetUserClubHome();
             _self.GetMyPcCenterInfo();
             _self.GetInitBeansInfo();
             _self.isShowBeansAlet = false;

+ 381 - 0
src/main/resources/static/js/user-center/member/memberPage.js

@@ -0,0 +1,381 @@
+// 服务列表
+var serviceList = [
+    {
+        name: '优惠商品',
+        subTitle: '超级会员专享'
+    },
+    {
+        name: '专属优惠券',
+        subTitle: '每月可领'
+    },
+    {
+        name: '采美豆翻倍',
+        subTitle: '下单返采美豆'
+    },
+    {
+        name: '专属客服',
+        subTitle: '一对一'
+    },
+    {
+        name: '专属销售顾问',
+        subTitle: '一对一'
+    },
+    {
+        name: '快速发货',
+        subTitle: '会员加速'
+    },
+    {
+        name: '售后服务',
+        subTitle: '会员加速'
+    }, {
+        name: '敬请期待',
+        subTitle: '更多特权'
+    }
+];
+var memberPage = new Vue({
+    el: '#memberPage',
+    data: {
+        serviceList: serviceList, // 服务列表
+        comboInfo: [], // svip套餐信息
+        showMask: false, // 遮罩层
+        showRenewPopup: false, // 续费弹窗
+        showConfirmPopup: false, // 支付确认弹窗
+        showBottomBtns: false,
+        // 优惠券列表
+        couponList: [],
+        comboCurrent: 0,  // 当前选择的套餐
+        vipInfo: {}, // 用户svip信息
+        currentIndex: 0,
+        productList: [],
+        listQuery: {
+            userId: GLOBAL_USER_ID,
+            source: 1,
+            pageNum: 1,
+            pageSize: 6
+        },
+        payType: 1, // 1:RMB支付  2:采美豆抵扣
+        payBtnType: 1, // 1: 支付/抵扣按钮1, 2: 支付/抵扣按钮2   3:续费
+    },
+    computed: {
+        svipTips: function () {
+            var vipFlag = this.vipInfo.vipFlag;
+            var endTime = moment(this.vipInfo.endTime).format('yyyy.MM.DD');
+            if (vipFlag === 1) {
+                return '<span>已开通采美超级会员</span><span class="time">有效期至' + endTime + '</span>'
+            } else if (vipFlag === -1) {
+                return '<span class="error">采美·超级会员已过期</span><span class="time">有效期至' + endTime + '</span>';
+            } else {
+                return '<span>采美·超级会员</span><span>享专属特权</span>'
+            }
+        },
+    },
+    mounted: function () {
+        this.fetchSuperPackage();
+        this.initCenter();
+        this.getSvipProductList();
+        this.setBottomBtnsVisiable();
+
+    },
+    methods: {
+        // 是否显示vip标签价格
+        showVipPriceTag: function(product){
+            return (product.priceFlag !== 1 && product.svipProductFlag === 1 && ((GLOBAL_USER_IDENTITY === 4 && GLOBAL_VIP_FLAG === 1) || GLOBAL_USER_IDENTITY === 2));
+        },
+
+        // 初始化会员中心
+        initCenter: function () {
+            var _self = this;
+            UserApi.GetSuperCenterInfo({userId: GLOBAL_USER_ID, source: 1}, function (res) {
+                if (res.code === 0) {
+                    _self.vipInfo = res.data.vip;
+                    window.localStorage.setItem('vipInfo', JSON.stringify(_self.vipInfo));
+                    _self.couponList = _self.initCouponInfo(res.data.coupon.splice(0, 4));
+                } else {
+                    CAIMEI.Alert(response.msg, '确定', false);
+                    _self.isRequset = false;
+                }
+            })
+        },
+        //选择套餐
+        chooseCombo: function (index) {
+            this.currentIndex = index
+        },
+        //支付会员
+        payAction: function (type, payBtnType) {
+            this.payBtnType = payBtnType;
+            // RMB支付
+            switch (type) {
+                case 1: // RMB支付
+                    this.payByRMB();
+                    break;
+                case 2: // 采美豆支付
+                    this.payByBeans();
+                    break;
+                default:
+                    return;
+            }
+        },
+        // RMB支付
+        payByRMB: function (packageId) {
+            console.log('RMB支付');
+            var currentCombo = this.comboInfo[this.currentIndex];
+            var _self = this;
+            UserApi.RegisterSuperPay({userId: GLOBAL_USER_ID, packageId: currentCombo.id}, function (response) {
+                if (response.code === 0) {
+                    console.log(response);
+                    //本地保存一下选中的会员套餐信息
+                    window.localStorage.setItem('comboInfo', JSON.stringify(currentCombo));
+                    window.open('/pay/caimei-paycash.html?pageType=2&vipRecordId=' + response.data);
+                    _self.showRenewPopup = false;
+                    _self.showMask = false;
+                    // this.showConfirmPopup = true;
+                } else {
+                    CAIMEI.dialog(response.data, false);
+                }
+            });
+        },
+        // 采美豆支付
+        payByBeans: function (packageId) {
+            var _self = this;
+            var currentPackage = _self.comboInfo[this.currentIndex];
+            var popupParams = {
+                content: '确认使用' + (currentPackage.price * currentPackage.proportion) + '采美豆开通' + (currentPackage.duration) + '个月会员?',
+                confitmBtnText: '确认开通',
+                cancelBtnText: '取消',
+            };
+            CAIMEI.Popup(popupParams, function () {
+                console.log('采美豆支付');
+                var params = {
+                    userId: GLOBAL_USER_ID,
+                    packageId: currentPackage.id
+                };
+                UserApi.RegisterSuperByBeans(params, function (res) {
+                    if (res.code) {
+                        CAIMEI.dialog(res.msg, false);
+                        _self._czcPushHandle(true);
+                    } else {
+                        CAIMEI.dialog('开通会员成功', true, function () {
+                            var userInfo = JSON.parse(localStorage.getItem('userInfo'));
+                            userInfo.vipFlag = 1;
+                            window.localStorage.setItem('userInfo', JSON.stringify(userInfo));
+                            window.location.reload();
+                        })
+                    }
+                    _self.handleCloseRenewPopup()
+                })
+            },function(){
+                _self._czcPushHandle(false);
+            });
+        },
+        // 本页面友盟统计 flag 确认/取消
+        _czcPushHandle: function (flag = true) {
+            var arg1 = ''; // 事件类别
+            var arg2 = '超级会员'; // 分类
+            var arg3 = ''; // 说明
+            var eventName = '';
+            // 配置参数
+            if(this.payBtnType === 1){
+                arg1 = '开通超级会员';
+                arg3 = '采美豆抵扣1';
+                eventName = 'RegisterSuperPayOne';
+            }else if(this.payBtnType === 2){
+                arg1 = '开通超级会员';
+                arg3 = '采美豆抵扣2';
+                eventName = 'RegisterSuperPayTwo';
+            }else{
+                arg1 = '续费超级会员';
+                arg3 = '采美豆抵扣';
+                eventName = 'RenewSuperPay';
+            }
+            // 确认 or 取消
+            if(flag){
+                eventName += 'Confirm';
+                arg3 += '-确认抵扣'
+            }else{
+                eventName += 'Cancel';
+                arg3 += '-取消'
+            }
+            var pushParamsList = ['_trackEvent', arg1, arg2, arg3, '', 'Um_Event_' + eventName];
+            _czc.push(pushParamsList);
+            // console.log(pushParamsList); for debugger
+        },
+
+        fetchSuperPackage: function () {
+            var _self = this;
+            UserApi.FetchSuperPackage({}, function (response) {
+                if (response.code === 0) {
+                    _self.comboInfo = response.data;
+                }
+            })
+        },
+        // 初始化优惠券信息
+        initCouponInfo: function (couponList) {
+            var typeText = {
+                0: '活动券',
+                1: '品类券',
+                2: '用户专享券',
+                3: '店铺券',
+                4: '新用户券'
+            };
+            return couponList.map(function (item, index) {
+                item.typeText = typeText[item.couponType];
+                return item;
+            })
+        },
+        // 点击去使用跳转路由处理
+        toUseCoupon: function (coupon) {
+            var resultUrl = '';
+            switch (coupon.couponType) {
+                case 0:// 活动券跳转到商城首页 / 或者活动页(看是否指定了商品)
+                    if (coupon.productType === 1) {
+                        resultUrl = '/index.html';
+                    } else {
+                        resultUrl = '/product/product-coupon.html?couponId=' + coupon.couponId;
+                    }
+                    break;
+                case 1:// 品类券:跳转到产品 / 仪器页
+                    if (coupon.categoryType === 1) {
+                        resultUrl = '/product/type-287.html';
+                    } else {
+                        resultUrl = '/product/type-286.html';
+                    }
+                    break;
+                case 2:// 专享券:跳转到商城首页
+                    resultUrl = '/index.html';
+                    break;
+                case 3:// 店铺券:跳转到店铺首页
+                    resultUrl = '/supplier-' + coupon.shopId + '.html';
+                debugger
+                    break;
+                case 4:// 新用户券:跳转到商城首页
+                    resultUrl = '/index.html';
+                    break;
+            }
+            window.open(resultUrl, '_blank');
+        },
+
+        // 领取专属优惠券
+        receiveCoupon: function (id) {
+            var _self = this;
+            if(_self.vipInfo.vipFlag !== 1){
+               return CAIMEI.dialog('您还未开通超级会员,不能领取', false);
+            }
+            ProductApi.ReceiveCoupon({
+                userId: GLOBAL_USER_ID,
+                couponId: id,
+                source: 1
+            }, function (response) {
+                if (!response.code) {
+                    _self.couponList = _self.couponList.map(function (item, i) {
+                        if (item.couponId === id) {
+                            item.getFlag = 1
+                        }
+                        return item;
+                    });
+                    CAIMEI.dialog(response.data, false);
+                }
+            })
+        },
+        // 续费弹窗
+        handleShowRenewPopup: function () {
+            if(this.comboInfo.length === 0){
+                return CAIMEI.dialog('暂无可选套餐~', false);
+            }
+            this.fetchSuperPackage();
+            this.currentIndex = 0;
+            this.showMask = true;
+            this.showRenewPopup = true;
+        },
+        // 关闭续费弹窗
+        handleCloseRenewPopup: function () {
+            this.showMask = false;
+            this.showRenewPopup = false;
+        },
+        // 获取页面优惠商品
+        getSvipProductList: function () {
+            var _self = this;
+            ProductApi.GetSvipProductList(this.listQuery, function (res) {
+                if (res.code) return;
+                var resultData = res.data;
+                if (isPC) {
+                    _self.productList = resultData.svipProductPage.results.splice(0, 5);
+                } else {
+                    _self.productList = resultData.svipProductPage.results.splice(0, 6);
+                }
+                setTimeout(function () {
+                    $("img[data-original]").lazyload();
+                });
+            })
+        },
+        makePrice: function (product) {
+            if (!product) return;
+            // 普通商品
+            var priceFlag = parseInt(product.priceFlag);  //商品可见度 0公开价格 1不公开价格 2仅对会员机构公开
+            var userIdentity = parseInt(product.userIdentity);  //用户身份 0、个人  1、协销 2、资质机构 3、供应商 4,个人机构
+            var shopID = parseInt(product.shopID); // 所属供应商id
+            var originalPrice = parseFloat(product.originalPrice).toFixed(2);  //商品原价
+            var price = parseFloat(product.price).toFixed(2); // 商品价格
+            var priceGrade = parseInt(product.priceGrade); // 价格等级
+
+            // 二手商品价格标识 2 :价格详聊
+            var detailTalkFlag = parseInt(detailTalkFlag);
+
+            // 标签
+            var promotions = product.promotions; // 促销标签内容
+            var svipProductFlag = product.svipProductFlag; // SVIP标识 1 是 2 不是
+            var isSvip = true;
+
+            if (product.productCategory === '1') {
+                // 登录后查看
+                if (!GLOBAL_USER_ID) {
+                    return '¥登录后查看'
+                }
+                if (priceFlag === 1) {
+                    return '¥价格未公开'
+                }
+                if ((priceFlag === 2 && GLOBAL_USER_IDENTITY !== 2) && GLOBAL_VIP_FLAG !== 1) {
+                    return '¥会员可见'
+                }
+                // 价格可见
+                if ((priceFlag === 0 && userIdentity !== 3) || (GLOBAL_USER_IDENTITY === 2) || (userIdentity === 3 && GLOBAL_SHOP_ID === shopID) || GLOBAL_VIP_FLAG === 1) {
+                    if (promotions || (svipProductFlag === 1 && GLOBAL_VIP_FLAG === 1)) {
+                        return '<del>¥' + originalPrice + '</del>'
+                    }
+                    return '¥' + price;
+                }
+                return '<span>¥</span><span class=\"p-icon i' + priceGrade + '\"></span>'
+            } else {
+                // 二手商品
+                if (detailTalkFlag === 2) {
+                    return '¥价格详聊'
+                }
+                return '¥' + price;
+            }
+        },
+
+        setBottomBtnsVisiable: function () {
+            var _self = this;
+            setTimeout(function () {
+                if (isPC && _self.comboInfo.length > 0 && _self.vipInfo.vipFlag !== 1) {
+                    $(window).scroll(function () {
+                        var vipPackage = document.querySelector('#vipPackage').getBoundingClientRect();
+                        var memberPage = document.querySelector('#memberPage').getBoundingClientRect();
+                        var clientHeight = $(window).height();
+                        if(vipPackage.bottom < 185 ){
+                            _self.showBottomBtns = true;
+                        }
+                        if (clientHeight - memberPage.bottom > 104) {
+                            _self.showBottomBtns = true;
+                            $('#pay-amount-bottom').addClass('absolute');
+                        } else {
+                            $('#pay-amount-bottom').removeClass('absolute');
+                            if (vipPackage.bottom > 185) {
+                                _self.showBottomBtns = false;
+                            }
+                        }
+                    })
+                }
+            },200)
+        }
+    }
+});

+ 126 - 0
src/main/resources/static/js/user-center/member/memberProduct.js

@@ -0,0 +1,126 @@
+var memberProduct = new Vue({
+    el: '#memberProduct',
+    data: {
+        listQuery: {
+            userId: GLOBAL_USER_ID,
+            source: 1,
+            pageNum: 1,
+            pageSize: 18
+        },
+        hasNextPage: true,
+        totalPage: 10,
+        jumpPageSize: 1,
+        total: 10,
+        productList: [],
+        bannerImage: '',
+    },
+    computed: {
+        pagination: function () {
+            var index = this.listQuery.pageNum, arr = [];
+            if (this.totalPage <= 6) {
+                for (var i = 1; i <= this.totalPage; i++) {
+                    arr.push(i);
+                }
+                return arr;
+            }
+            if (index <= 3) {
+                return [1, 2, 3, 4, 5, 0, this.totalPage];
+            }
+            if (index >= this.totalPage - 2) {
+                return [1, 0, this.totalPage - 4, this.totalPage - 3, this.totalPage - 2, this.totalPage - 1, this.totalPage];
+            }
+            return [1, 0, index - 2, index - 1, index, index + 1, index + 2, 0, this.totalPage];
+        }
+    },
+    mounted: function () {
+        this.productList = [];
+        this.getSvipProductList();
+    },
+    methods: {
+        // 是否显示vip标签价格
+        showVipPriceTag: function(product){
+            return (product.priceFlag !== 1 && product.svipProductFlag === 1 && ((GLOBAL_USER_IDENTITY === 4 && GLOBAL_VIP_FLAG === 1) || GLOBAL_USER_IDENTITY === 2));
+        },
+        // 获取商品列表
+        getSvipProductList() {
+            var _self = this;
+            ProductApi.GetSvipProductList(this.listQuery, function (res) {
+                if (res.code) return;
+                var resultData = res.data;
+                _self.listQuery.pageNum = resultData.svipProductPage.pageNum;
+                _self.listQuery.pageSize = resultData.svipProductPage.pageSize;
+                _self.totalPage = resultData.svipProductPage.totalPage;
+                _self.hasNextPage = resultData.svipProductPage.hasNextPage;
+                _self.bannerImage = resultData.adsImage;
+                setTimeout(function () {
+                    $("img[data-original]").lazyload();
+                });
+                if (isPC){
+                    _self.productList = resultData.svipProductPage.results;
+                }else {
+                    _self.productList = _self.productList.concat(resultData.svipProductPage.results);
+                }
+            })
+        },
+        makePrice(product) {
+            if (!product) return;
+            // 普通商品
+            var priceFlag = parseInt(product.priceFlag);  //商品可见度 0公开价格 1不公开价格 2仅对会员机构公开
+            var userIdentity = parseInt(product.userIdentity);  //用户身份 0、个人  1、协销 2、资质机构 3、供应商 4,个人机构
+            var shopID = parseInt(product.shopID); // 所属供应商id
+            var originalPrice = parseFloat(product.originalPrice).toFixed(2);  //商品原价
+            var price = parseFloat(product.price).toFixed(2); // 商品价格
+            var priceGrade = parseInt(product.priceGrade); // 价格等级
+
+            // 二手商品价格标识 2 :价格详聊
+            var detailTalkFlag = parseInt(detailTalkFlag);
+
+            // 标签
+            var promotions = product.promotions; // 促销标签内容
+            var svipProductFlag = product.svipProductFlag; // SVIP标识 1 是 2 不是
+            var isSvip = true;
+
+            if (product.productCategory === '1') {
+                // 登录后查看
+                if (!GLOBAL_USER_ID) {
+                    return '¥登录后查看'
+                }
+                if (priceFlag === 1) {
+                    return '¥价格未公开'
+                }
+                if ((priceFlag === 2 && GLOBAL_USER_IDENTITY === 4) && GLOBAL_VIP_FLAG !== 1) {
+                    return '¥会员可见'
+                }
+                // 价格可见
+                if ((priceFlag === 0 && userIdentity !== 3) || (GLOBAL_USER_IDENTITY === 2) || (userIdentity === 3 && GLOBAL_SHOP_ID === shopID) || GLOBAL_VIP_FLAG === 1) {
+                    if (promotions || (svipProductFlag === 1 && GLOBAL_VIP_FLAG === 1)) {
+                        return '<del>¥' + originalPrice + '</del>'
+                    }
+                    return '¥' + price;
+                }
+                return '<span>¥</span><span class=\"p-icon i' + priceGrade + '\"></span>'
+            } else {
+                // 二手商品
+                if (detailTalkFlag === 2) {
+                    return '¥价格详聊'
+                }
+                return '¥' + price;
+            }
+        },
+        //页码跳转
+        toPagination: function (pageNum) {
+            if (pageNum > this.totalPage || pageNum <= 0) {
+                return this.jumpPageSize = '';
+            }
+            this.listQuery.pageNum = parseInt(pageNum);
+            this.getSvipProductList(); //获取列表
+        },
+        //h5查看更多
+        showMore() {
+            if(this.hasNextPage){
+                this.listQuery.pageNum ++;
+                this.getSvipProductList();
+            }
+        }
+    }
+});

+ 123 - 0
src/main/resources/static/js/user-center/member/memberRecord.js

@@ -0,0 +1,123 @@
+// 会员套餐
+var comboInfo = [
+    {
+        id: 1,
+        duration: 12,
+        price: 4800,
+        recommend: false,
+    }, {
+        id: 2,
+        duration: 3,
+        price: 1500,
+        recommend: true,
+    }, {
+        id: 3,
+        duration: 1,
+        price: 600,
+        recommend: false,
+    }
+];
+
+var memberRecord = new Vue({
+    el: '#memberRecord',
+    data: {
+        listQuery: {
+            userId: GLOBAL_USER_ID,
+            pageNum: 1,
+            pageSize: 10
+        },
+        vipInfo:{},
+        hasMore: false,
+        totalPage: 0,
+        jumpPageSize: 1,
+        total: 0,
+        recordList: [],
+        comboInfo: []
+    },
+    computed: {
+        pagination: function () {
+            var index = this.listQuery.pageNum, arr = [];
+            if (this.totalPage <= 6) {
+                for (var i = 1; i <= this.totalPage; i++) {
+                    arr.push(i);
+                }
+                return arr;
+            }
+            if (index <= 3) {
+                return [1, 2, 3, 4, 5, 0, this.totalPage];
+            }
+            if (index >= this.totalPage - 2) {
+                return [1, 0, this.totalPage - 4, this.totalPage - 3, this.totalPage - 2, this.totalPage - 1, this.totalPage];
+            }
+            return [1, 0, index - 2, index - 1, index, index + 1, index + 2, 0, this.totalPage];
+        },
+        svipTips: function () {
+            var vipFlag = this.vipInfo.vipFlag;
+            var endTime = moment(this.vipInfo.endTime).format('yyyy.MM.DD');
+            if (vipFlag === 1) {
+                return '<span>已开通采美超级会员</span><span class="time">有效期至' + endTime + '</span>'
+            } else if (vipFlag === -1) {
+                return '<span class="error">采美·超级会员已过期</span><span class="time">有效期至' + endTime + '</span>';
+            } else {
+                return '<span>采美·超级会员</span><span>享专属特权</span>'
+            }
+        },
+    },
+    mounted: function(){
+        this.vipInfo = JSON.parse(window.localStorage.getItem('vipInfo'));
+        this.fetchSuperPackage();
+        this.getHistoryList();
+    },
+    methods: {
+        //页码跳转
+        toPagination: function (pageNum) {
+            if (pageNum > this.totalPage || pageNum <= 0) {
+                return this.jumpPageSize = '';
+            }
+            this.listQuery.pageNum = parseInt(pageNum);
+            this.getHistoryList(); //获取列表
+        },
+        // 获取会员开通记录
+        getHistoryList: function(){
+            var _self = this;
+            UserApi.SuperHistory(this.listQuery, function(res){
+                if(res.code === 0){
+                    _self.totalPage = res.data.pages;
+                    _self.total = res.data.total;
+                    _self.hasMore = res.data.hasNextPage;
+                    _self.listQuery.pageNum = res.data.pageNum;
+                    if(isPC){
+                        _self.recordList = res.data.list;
+                    }else{
+                        _self.recordList = _self.recordList.concat(res.data.list);
+                    }
+                }
+            })
+        },
+        // 获取套餐
+        fetchSuperPackage: function () {
+            var _self = this;
+            UserApi.FetchSuperPackage({}, function (response) {
+                if (response.code === 0) {
+                    _self.comboInfo = response.data;
+                }
+            })
+        },
+        duration: function(id){
+            var duration = 0;
+            this.comboInfo.forEach(function(item){
+                if(id === item.id){
+                    return duration = item.duration;
+                }
+            });
+            return duration;
+        },
+        //h5查看更多
+        showMore: function() {
+            if (this.total > this.recordList.length) {
+                this.listQuery.pageNum++;
+                this.getHistoryList()
+            }
+        }
+    }
+});

+ 23 - 7
src/main/resources/static/js/user-center/setting/information.js

@@ -52,6 +52,7 @@ var informationPage = new Vue({
             {value:'1',name:'整形'},
             {value:'2',name:'轻医美'},
             {value:'3',name:'皮肤科'},
+            {value:'4',name:'产后修复'},
         ],
         medicaCampNullList: [
             {name:'美容'},
@@ -88,11 +89,20 @@ var informationPage = new Vue({
         secondtypeflag:false,
         mproflag:false,
         userMainProflag:false,
+        medicalPracticeLicenseFlag: false
     },
     computed: {
 
+    },
+    watch: {
+
     },
     methods: {
+        handleChangeType: function(type){
+            if(type === parseInt(this.clubUpgradeUser.firstClubType)) return;
+            this.userMainPros = [];
+            this.clubUpgradeUser.secondClubType = (type === 1 ? 1 : 5);
+        },
         infoInformationData:function(){
             var _self = this;
             UserApi.GetApplicationData({userId:_self.userId},function (response) {
@@ -116,7 +126,7 @@ var informationPage = new Vue({
                     _self.clubUpgradeUser.firstClubType = data.club.firstClubType ? data.club.firstClubType : null;
                     _self.clubUpgradeUser.secondClubType = data.club.secondClubType ? data.club.secondClubType :null;
                     _self.clubUpgradeUser.address = data.club.address ? data.club.address : null;
-                    console.log('1111111111111111111');
+                    _self.firstClubType = _self.clubUpgradeUser.firstClubType;
                     if( _self.clubUpgradeUser.firstClubType == 1){
                         if(data.club.mainProduct){
                             _self.userMainPros = _self.setNewMainpro(data.club.mainProduct);
@@ -148,20 +158,20 @@ var informationPage = new Vue({
             var _self = this;
             var params ={};
             var pass = verifyForm();
-             if (!pass) {return false;}
+            if (!pass) {return false;}
             if(_self.userIdentity === 2) {
                 if (_self.clubUpgradeUser.townId == 0 || _self.clubUpgradeUser.address == '') {
                     _self.flagshow = true;
                     setTimeout(function () {
                         _self.flagshow = false;
-                    }, 2000)
+                    }, 2000);
                     return;
                 }
                 if (_self.clubUpgradeUser.businessLicense == '' || _self.clubUpgradeUser.businessLicense == null) {
                     _self.businessflag = true;
                     setTimeout(function () {
                         _self.businessflag = false;
-                    }, 2000)
+                    }, 2000);
                     return;
                 }
                 if (_self.clubUpgradeUser.firstClubType == '' || _self.clubUpgradeUser.firstClubType == null) {
@@ -179,6 +189,13 @@ var informationPage = new Vue({
                         }, 2000);
                         return;
                     }
+                    if (!_self.clubUpgradeUser.medicalPracticeLicense) {
+                        _self.medicalPracticeLicenseFlag = true;
+                        setTimeout(function () {
+                            _self.medicalPracticeLicenseFlag = false;
+                        }, 2000);
+                        return;
+                    }
                     if (_self.userMainPros == '') {
                         _self.mproflag = true;
                         setTimeout(function () {
@@ -278,12 +295,14 @@ var informationPage = new Vue({
                             CAIMEI.dialog('主营内容已存在!',false);
                         }else {
                             _self.mentuzCampNullList.push(obj);
+                            _self.mainProEdit = '';
                         }
                     }else{
                         if(_self.checkedArray(_self.mainProEdit,_self.medicaCampNullList)){
                             CAIMEI.dialog('主营内容已存在!',false);
                         }else {
                             _self.medicaCampNullList.push(obj);
+                            _self.mainProEdit = '';
                         }
                     }
                 }
@@ -430,9 +449,6 @@ var informationPage = new Vue({
         showViewerImageFn2:function(){//预览资质图片
             var viewer = new Viewer(document.getElementById('medicalPracticeLicenseImg'));
         },
-    },
-    created: function () {
-
     },
     mounted: function () {
         var _self = this;

+ 19 - 5
src/main/resources/static/js/user-center/setting/upgrade.js

@@ -29,6 +29,7 @@ var upgradePage = new Vue({
             {value:'1',name:'整形'},
             {value:'2',name:'轻医美'},
             {value:'3',name:'皮肤科'},
+            {value:'4',name:'产后修复'},
         ],
         medicaCampNullList: [
             {name:'美容'},
@@ -64,11 +65,17 @@ var upgradePage = new Vue({
         secondtypeflag:false,
         mproflag:false,
         userMainProflag:false,
+        medicalPracticeLicenseFlag: false
     },
     computed: {
 
     },
     methods: {
+        handleChangeType: function(type){
+            if(type === parseInt(this.clubUpgradeUser.firstClubType)) return;
+            this.userMainPros = [];
+            this.clubUpgradeUser.secondClubType = (type === 1 ? 1 : 5);
+        },
         infoInformationData:function(){//机构资料初始化
             var _self = this;
             UserApi.GetApplicationData({userId:_self.clubUpgradeUser.userId},function (response) {
@@ -148,22 +155,29 @@ var upgradePage = new Vue({
                _self.typeflag = true;
                setTimeout(function () {
                     _self.typeflag = false;
-                },2000)
+                },2000);
                return;
             }
             if(_self.clubUpgradeUser.firstClubType==1){
-                if(_self.clubUpgradeUser.secondClubType==''||_self.clubUpgradeUser.secondClubType==null){
+                if (_self.clubUpgradeUser.secondClubType == '' || _self.clubUpgradeUser.secondClubType == null) {
                     _self.secondtypeflag = true;
                     setTimeout(function () {
-                    _self.secondtypeflag = false;
-                },2000)
+                        _self.secondtypeflag = false;
+                    }, 2000);
+                    return;
+                }
+                if(!_self.clubUpgradeUser.medicalPracticeLicense){
+                    _self.medicalPracticeLicenseFlag = true;
+                    setTimeout(function () {
+                        _self.medicalPracticeLicenseFlag = false;
+                    }, 2000);
                     return;
                 }
                 if(_self.userMainPros==''){
                       _self.mproflag = true;
                      setTimeout(function () {
                         _self.mproflag = false;
-                    },2000)
+                    },2000);
                     return;
                 }
             }

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
src/main/resources/static/lib/datapicker/moment-2.29.min.js


+ 19 - 8
src/main/resources/templates/account/register-club.html

@@ -67,8 +67,8 @@
         </div>
     </div>
     <div class="signAccount upgrade clear" v-show="showTabContentIndex == 2">
-        <div class="title">升级会员机构</div>
-        <div class="title-tips"><p>补充以下详细信息即可升级为会员机构,享受更多更好的服务</p></div>
+        <div class="title">升级资质机构</div>
+        <div class="title-tips"><p>补充以下详细信息即可升级为资质机构,享受更多更好的服务</p></div>
         <div class="registerClub clear">
             <!--机构注册表单-->
             <form>
@@ -144,19 +144,28 @@
                 </div>
                 <div class="formLine">
                     <p id="firstClubType"><em>*</em>机构类型:</p>
-                    <label class="diyBox"><input type="radio" name="firstShopType" v-model="clubUpgradeUser.firstClubType" value="1"  @change="ChangeFirstClubType"><i class="icon mIcon">医美</i></label>
-                    <label class="diyBox"><input type="radio" name="firstShopType" v-model="clubUpgradeUser.firstClubType" value="2" checked  @change="ChangeFirstClubType"><i class="icon mIcon">生美</i></label>
+                    <label class="diyBox" @click="handleChangeType(1)"><input type="radio" name="firstShopType" v-model="clubUpgradeUser.firstClubType" value="1"  @change="ChangeFirstClubType"><i class="icon mIcon">医美</i></label>
+                    <label class="diyBox" @click="handleChangeType(2)"><input type="radio" name="firstShopType" v-model="clubUpgradeUser.firstClubType" value="2" checked  @change="ChangeFirstClubType"><i class="icon mIcon">生美</i></label>
                     <span class="errTips icon mIcon" tips="请选择公司类型"></span>
                 </div>
+                <!-- 医美 -->
                 <div v-show="clubUpgradeUser.firstClubType == 1" class="formLine">
                     <label class="diyBox second"><input type="radio" name="secondClubType" v-model="clubUpgradeUser.secondClubType" value="1" checked><i class="icon mIcon">诊所</i></label>
                     <label class="diyBox second"><input type="radio" name="secondClubType" v-model="clubUpgradeUser.secondClubType" value="2" ><i class="icon mIcon">门诊</i></label>
                     <label class="diyBox second"><input type="radio" name="secondClubType" v-model="clubUpgradeUser.secondClubType" value="3" ><i class="icon mIcon">医院</i></label>
+                    <label class="diyBox second"><input type="radio" name="secondClubType" v-model="clubUpgradeUser.secondClubType" value="4" ><i class="icon mIcon">其他</i></label>
                     <span class="errTips icon mIcon" tips="请选择公司类型"></span>
                 </div>
+                <!-- 生美 -->
+                <div v-show="clubUpgradeUser.firstClubType == 2" class="formLine">
+                    <label class="diyBox second"><input type="radio" name="secondClubType" v-model="clubUpgradeUser.secondClubType" value="5" checked><i class="icon mIcon">美容院</i></label>
+                    <label class="diyBox second"><input type="radio" name="secondClubType" v-model="clubUpgradeUser.secondClubType" value="6" ><i class="icon mIcon">养生馆</i></label>
+                    <label class="diyBox second"><input type="radio" name="secondClubType" v-model="clubUpgradeUser.secondClubType" value="7" ><i class="icon mIcon">其他</i></label>
+                    <span class="errTips icon mIcon" tips="请选择公司类型">请选择公司类型</span>
+                </div>
                 <div v-show="clubUpgradeUser.firstClubType == 1" class="formLine">
                     <div class="form-upload">
-                        <p>资质:</p>
+                        <p><em>*</em>资质:</p>
                         <div class="form-upload-image" v-if="clubUpgradeUser.medicalPracticeLicense!=''">
                             <img class="upload-img" :src="clubUpgradeUser.medicalPracticeLicense" alt="" id="medicalPracticeLicenseImg" @click="showViewerImageFn2()">
                             <i class="icon mIcon" @click="deleteMedicalImage()"></i>
@@ -178,7 +187,7 @@
                 </div>
                 <div class="formLine clear" v-if="clubUpgradeUser.firstClubType == 1">
                     <p><em>*</em>主营内容:</p>
-                    <p class="business clear">
+                    <p class="business clear" id="business">
                         <label v-for="pro in medicaCampNullList" class="diyBox second" >
                             <input type="checkbox" name="secondClubType" v-model="userMainPros" :value="pro.name" >
                             <i class="icon mIcon">{{pro.name}}</i>
@@ -188,12 +197,13 @@
                         <input type="text" placeholder="请输入其他自定义品项目" v-model.trim="mainProEdit">
                         <a href="javascript:void(0);" @click="mainProAdd()">确认添加</a>
                     </p>
+                    <div style="clear:both;"></div>
                     <span class="errTips icon mIcon" tips="请选择或添加主营产品"></span>
                 </div>
                 <div class="formLine clear" v-if="clubUpgradeUser.firstClubType == 2">
                     <p><em>*</em>主营内容:</p>
-                    <p class="business clear">
-                        <label v-for="pro in mentuzCampNullList" class="diyBox second">
+                    <p class="business clear" id="business">
+                        <label v-for="pro in mentuzCampNullList" class="diyBox second" @click>
                             <input type="checkbox" name="secondClubType" v-model="userMainPros" :value="pro.name" >
                             <i class="icon mIcon">{{pro.name}}</i>
                         </label>
@@ -202,6 +212,7 @@
                         <input type="text" placeholder="请输入其他自定义品项目" v-model.trim="mainProEdit">
                         <a href="javascript:void(0);" @click="mainProAdd()">确认添加</a>
                     </p>
+                    <div style="clear:both;"></div>
                     <span class="errTips icon mIcon" tips="请选择或添加主营产品"></span>
                 </div>
                 <div class="subLine">

+ 9 - 0
src/main/resources/templates/account/upgrade.html

@@ -81,12 +81,21 @@
                     <label class="diyBox"><input type="radio" name="firstShopType" v-model="clubUser.firstShopType" value="2" checked><i class="icon mIcon">生美</i></label>
                     <span class="errTips icon mIcon mIcon" tips="请选择公司类型"></span>
                 </div>
+                <!-- 医美 -->
                 <div v-show="clubUser.firstShopType == 1" class="formLine">
                     <label class="diyBox second"><input type="radio" name="department" v-model="clubUser.department" value="1" checked><i class="icon mIcon">诊所</i></label>
                     <label class="diyBox second"><input type="radio" name="department" v-model="clubUser.department" value="2" ><i class="icon mIcon">门诊</i></label>
                     <label class="diyBox second"><input type="radio" name="department" v-model="clubUser.department" value="3" ><i class="icon mIcon">医院</i></label>
+                    <label class="diyBox second"><input type="radio" name="secondClubType" v-model="clubUpgradeUser.secondClubType" value="7" ><i class="icon mIcon">其他</i></label>
                     <span class="errTips icon mIcon mIcon" tips="请选择公司类型"></span>
                 </div>
+                <!-- 生美 -->
+                <div v-show="clubUpgradeUser.firstClubType == 2" class="formLine">
+                    <label class="diyBox second"><input type="radio" name="secondClubType" v-model="clubUpgradeUser.secondClubType" value="5" checked><i class="icon mIcon">美容院</i></label>
+                    <label class="diyBox second"><input type="radio" name="secondClubType" v-model="clubUpgradeUser.secondClubType" value="6" ><i class="icon mIcon">养生馆</i></label>
+                    <label class="diyBox second"><input type="radio" name="secondClubType" v-model="clubUpgradeUser.secondClubType" value="7" ><i class="icon mIcon">其他</i></label>
+                    <span class="errTips icon mIcon" tips="请选择公司类型" ></span>
+                </div>
                 <div v-show="clubUser.firstShopType == 1" class="formLine">
                     <p>资质:</p>
                     <div v-if="clubUser.businessLicenseImage!=''">

+ 7 - 2
src/main/resources/templates/components/footer.html

@@ -76,8 +76,13 @@
                 <p>
                     <span>Copyright © 2015-2021 CAIMEI365.com All Rights Reserved.</span><span>深圳市采美网络信息有限公司</span>
                     <span>
-                        <!-- CNZZ统计 start -->
-                        <script type="text/javascript">document.write(unescape("%3Cspan id='cnzz_stat_icon_1279558759'%3E%3C/span%3E%3Cscript src='https://s9.cnzz.com/z_stat.php%3Fid%3D1279558759%26show%3Dpic' type='text/javascript'%3E%3C/script%3E"));</script>
+                        <!-- CNZZ统计 start 只www.caimei365.com下初始化-->
+                        <script type="text/javascript">
+                        if (window.location.href.indexOf('www.caimei365.com') !== -1) {
+                            document.write(unescape("%3Cspan id='cnzz_stat_icon_1279558759'%3E%3C/span%3E%3Cscript src='https://s9.cnzz.com/z_stat.php%3Fid%3D1279558759%26show%3Dpic' type='text/javascript'%3E%3C/script%3E"));
+                        }
+                        var _czc = _czc || []; // 防止脚本未加载时报错
+                        </script>
                         <!-- CNZZ统计 start -->
                     </span>
                 </p>

+ 1 - 0
src/main/resources/templates/components/header.html

@@ -34,6 +34,7 @@
                         </div>
                     </div>
                 </li>
+                <li v-if="GLOBAL_USER_IDENTITY !== 3"><a :href="GLOBAL_USER_ID === 0 ? '/login.html' : '/user/member.html'">超级会员</a></li>
                 <li v-if="loginStatus" id="mGlobalMenu" @click="hideGlobalMenu()">
                     <a class="cTab" href="javascript:void(0);" v-if="userIdentity == 3" v-text="userData.name"></a>
                     <a class="cTab" href="javascript:void(0);" v-else v-text="userData.name"></a>

+ 43 - 30
src/main/resources/templates/index.html

@@ -165,42 +165,50 @@
                                                 <!-- 正常商品 -->
                                                 <template v-if="pros.product.productCategory == 1">
                                                     <div class="price_text_tag">
-<!--                                                        <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
-                                                        <p class="listTag" v-if="pros.product.actStatus ==1 && pros.product.promotions">
-                                                            <span v-text="pros.product.promotions.name"></span>
-                                                            <template v-if="PromotionsFormat(pros.product.promotions)">
-                                                                <!--单品优惠:优惠价-->
-                                                                <span class="price_unit">:¥</span><span class="price_num">{{ pros.product.price | NumFormat }}</span>
-                                                            </template>
-                                                        </p>
+                                                        <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>
+                                                        <!--超级会员价格标签 svipProductFlag 1:超级会员优惠商品 0 不是商超级会员优惠商品-->
+                                                        <template v-if="pros.product.svipProductFlag === 1">
+                                                            <div class="svip-tag">
+                                                                <div class="svip-icon">SVIP</div>
+                                                                <!-- 公开价格 && (个人机构 || 资质机构) && 开通SVIP 可查看价格-->
+                                                                <template v-if="showVipPriceTag(pros.product)">
+                                                                    <div class="svip-price">
+                                                                        <span v-html="pros.product.svipPriceTag"></span>
+                                                                    </div>
+                                                                </template>
+                                                            </div>
+                                                        </template>
+                                                        <template v-else>
+                                                            <p class="listTag" v-if="pros.product.actStatus ==1 && pros.product.promotions">
+                                                                <span v-text="pros.product.promotions.name"></span>
+                                                                <template v-if="PromotionsFormat(pros.product.promotions)">
+                                                                    <!--单品优惠:优惠价-->
+                                                                    <span class="price_unit">:¥</span><span class="price_num">{{ pros.product.price | NumFormat }}</span>
+                                                                </template>
+                                                            </p>
+                                                        </template>
                                                     </div>
                                                     <div class="main_price_login">
-                                                        <!--0公开价格 1不公开价格 2仅对会员机构公开-->
+                                                        <!--priceFlag 0公开价格 1不公开价格 2仅对会员机构公开-->
                                                         <template v-if="pros.product.priceFlag == 1">
                                                             <em class="price_grade"><span>¥</span>价格未公开</em>
                                                         </template>
+                                                        <!-- 资质机构 || (价格全部机构可见 && 普通机构) || (供应商 && 商品为供应商下的商品) || 超级会员用户 -->
+                                                        <template v-else-if="GLOBAL_USER_IDENTITY === 2 || (pros.product.priceFlag === 0 && GLOBAL_USER_IDENTITY === 4) || (GLOBAL_USER_IDENTITY === 3 && pros.product.shopID==GLOBAL_SHOP_ID) || GLOBAL_VIP_FLAG === 1">
+                                                            <div class="main_price_show" :class="{none: showVipPriceTag(pros.product) || PromotionsFormat(pros.product.promotions)}">
+                                                                ¥<span class="price_num" v-if="showVipPriceTag(pros.product)">{{ pros.product.originalPrice | NumFormat }}</span>
+                                                                <span class="price_num" v-else>{{ pros.product.price | NumFormat }}</span>
+                                                            </div>
+                                                        </template>
+                                                        <!--机构价仅会员可见 && 用户是普通机构-->
+                                                        <template v-else-if="pros.product.priceFlag==2 && GLOBAL_USER_IDENTITY === 4">
+                                                            <em class="price_grade_club"><span>¥</span>会员可见</em>
+                                                        </template>
                                                         <template v-else>
-                                                            <template v-if="PromotionsFormat(pros.product.promotions)">
-                                                                <!--单品优惠时的划线价-->
-                                                                <div class="main_price_show none">
-                                                                    ¥<span class="price_o_num">{{ pros.product.originalPrice | NumFormat }}</span>
-                                                                </div>
-                                                            </template>
-                                                            <template v-else-if="(pros.product.priceFlag==0 && pros.product.userIdentity!=3) || pros.product.userIdentity==2 || (pros.product.userIdentity==3 && pros.product.shopID==GLOBAL_SHOP_ID)">
-                                                                <!--机构价-->
-                                                                <div class="main_price_show">¥<span class="price_num">{{ pros.product.price | NumFormat }}</span></div>
-                                                            </template>
-                                                            <template v-else-if="pros.product.priceFlag==2 && pros.product.userIdentity==4">
-                                                                <em class="price_grade_club">
-                                                                    <span>¥</span>会员可见
-                                                                </em>
-                                                            </template>
-                                                            <template v-else>
-                                                                <!--供应商除自己的商品外,也显示价格等级-->
-                                                                <em class="price_grade_shop">
-                                                                    <span class="bold">¥</span><i :class="'icon mIcon price_grade_'+pros.product.priceGrade"></i>
-                                                                </em>
-                                                            </template>
+                                                            <!--供应商除自己的商品外,也显示价格等级-->
+                                                            <em class="price_grade_shop">
+                                                                <span class="bold">¥</span><i :class="'icon mIcon price_grade_'+pros.product.priceGrade"></i>
+                                                            </em>
                                                         </template>
                                                     </div>
                                                 </template>
@@ -290,6 +298,11 @@
                                                             <!-- 正常商品 -->
                                                             <th:block th:if="*{productCategory}==1">
                                                                 <div class="price_text_tag">
+                                                                    <p class="couponTag" th:if="*{couponsLogo}">优惠券</p>
+                                                                    <!--超级会员价格标签 svipProductFlag 1:超级会员优惠商品 0 不是商超级会员优惠商品-->
+                                                                    <div class="svip-tag" th:if="*{svipProductFlag}==1">
+                                                                        <div class="svip-icon">SVIP</div>
+                                                                    </div>
                                                                     <p class="listTag" th:if="*{actStatus}==1 and ${pros.get('product').get('promotions')}!=null">
                                                                         <template th:text="*{promotions.name}"></template>
                                                                         <th:block th:if="*{promotions.type}==1 and *{promotions.mode}==1">

+ 16 - 2
src/main/resources/templates/pay/caimei-pay.html

@@ -19,7 +19,7 @@
     <div class="container" v-if="!isErrorShow">
         <div class="pay-content clear">
             <div class="pay-title">
-                <div class="title-left"><p><span id="userName">{{userName}}</span></p></div>
+                <div class="title-left"><p><span id="userName">{{ userName }}</span></p></div>
                 <div class="title-right">
                     <div class="time">
                         <span id="downHour">{{downHour}}</span>
@@ -29,7 +29,7 @@
                 </div>
             </div>
             <!-- 维沙 -->
-             <template v-if="organizeId === 3">
+            <template v-if="organizeId === 3">
                 <div class="pay-goods">
                     <div class="good-top">
                         <div class="good-top-inner ws">
@@ -76,6 +76,19 @@
                     </div>
                 </div>
             </template>
+            <!--购买会员-->
+            <template v-else-if="type === 2">
+                <div class="pay-svip">
+                    <div class="pay-svip-title">购买超级会员</div>
+                    <div class="content">
+                        <div class="pay-svip-detail">
+                            <div class="tit">支付金额</div>
+                            <div class="pay-amount"><span>¥</span>{{ unpaidAmount | NumFormat }}</div>
+                        </div>
+                        <div class="svip-indent">套餐{{ vipMonth }}个月</div>
+                    </div>
+                </div>
+            </template>
             <!-- 采美 -->
             <template v-else>
                 <div class="pay-goods">
@@ -184,6 +197,7 @@
 <script src="https://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/pay.service.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/lib/qrcode.min.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/user.service.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/pay/caimei-bank.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/pay/caimei-pay.js(v=${version})}"></script>
 </body>

+ 18 - 3
src/main/resources/templates/pay/caimei-paycash.html

@@ -11,7 +11,7 @@
 <!-- 引用头部 -->
 <template th:replace="components/header"></template>
 <div id="payContainer" class="pay-container clear" v-cloak>
-    <div class="wrap">
+    <div class="wrap" v-if="pageType !== '2'">
         <div class="pageTitle">
             <div class="step">
                 <span class="prev">我的购物车</span>
@@ -23,6 +23,7 @@
     </div>
     <div class="container">
         <div class="pay-content clear" >
+            <!--二手支付-->
             <template v-if="pageType === '1'">
                 <div class="pay-title">
                     <div class="title-money big">
@@ -30,6 +31,20 @@
                     </div>
                 </div>
             </template>
+            <!--购买会员-->
+            <template v-else-if="pageType === '2'">
+                <div class="pay-svip">
+                    <div class="pay-svip-title">购买超级会员</div>
+                    <div class="content">
+                        <div class="pay-svip-detail">
+                            <div class="tit">支付金额</div>
+                            <div class="pay-amount"><span>¥</span>{{ comboInfo.price | NumFormat }}</div>
+                        </div>
+                        <div class="svip-indent">套餐{{ comboInfo.duration }}个月</div>
+                    </div>
+                </div>
+            </template>
+            <!--普通订单-->
             <template v-else>
                 <div class="pay-title">
                     <div class="title-money big">
@@ -51,7 +66,7 @@
                     </div>
                 </div>
             </template>
-            <div class="pay-ment"  v-if="pageType != '1'">
+            <div class="pay-ment"  v-if="pageType != '1' && pageType != '2'">
                 <div class="pay-record">
                     <div class="record-title">支付记录</div>
                     <div class="record-content clear" id="discernReceipt">
@@ -72,7 +87,7 @@
                 </div>
                 <div class="method-content">
                     <div class="payment" id="mobilePayment" v-if="tabIndex === 0">
-                        <div class="payment-title">{{payStatusText}}</div>
+                        <div class="payment-title" v-if="pageType !== '2'">{{payStatusText}}</div>
                         <div class="pay-bank">
                             <div class="bank-list" id="mobileContent">
                                 <a v-if="!is_Wechat_bowcr" href="javascript:void(0);" class="bank-a mIcon" @click="checkMobilePay(0,'ALIPAY')" :class="{ active: mobileTabIndex === 0 }">

+ 8 - 6
src/main/resources/templates/pay/caimei-paymobile.html

@@ -16,17 +16,18 @@
     </div>
 </div>
 <div class="pay-container weixin clear" id="payContainer" >
-<!--    <div v-if="loginLoading" class="loading" :style="{opacity: loginLoading ? '1' :'0'}">-->
-<!--        <img src="/img/base/loading.gif">-->
-<!--    </div>-->
-    <div class="container" :class="isRequest ? 'active' : ''">
+    <div v-if="loginLoading" class="loading" :style="{opacity: loginLoading ? '1' :'0'}">
+        <img src="/img/base/loading.gif">
+    </div>
+    <div class="container" :class="{active: isRequest}" v-show="isRequest">
         <div class="pay-content weixin clearfix" v-if="payInfo.payType === 'WEIXIN'">
             <div class="pay-codecontent">
                 <div class="pay-amount">
                     <div class="pay-amount-text">
+                        <p v-if="pageType == '2'">超级会员套餐:{{ duration }}个月 </p>
                         <p>交易金额: <span>¥{{payAmount | NumFormat}}</span> </p>
                         <p>收款方: <span>深圳市采美信息技术有限公司</span> </p>
-                        <p v-if="pageType!='1' ">订单号: <span>{{orderNo}}</span> </p>
+                        <p v-if="pageType!='1' && pageType!='2'">订单号: <span>{{orderNo}}</span> </p>
                     </div>
                     <div class="pay-amount-icon"><img src="/img/pay/icon-pay@2x.png" alt=""></div>
                 </div>
@@ -51,9 +52,10 @@
             <div class="pay-codecontent">
                 <div class="pay-amount">
                     <div class="pay-amount-text">
+                        <p v-if="pageType == '2'">超级会员套餐:{{ duration }}个月 </p>
                         <p>交易金额: <span>¥{{payAmount | NumFormat}}</span> </p>
                         <p>收款方: <span>深圳市采美信息技术有限公司</span> </p>
-                        <p v-if="pageType!='1' ">订单号: <span>{{orderNo}}</span> </p>
+                        <p v-if="pageType!='1' && pageType!='2'">订单号: <span>{{orderNo}}</span> </p>
                     </div>
                     <div class="pay-amount-icon"><img src="/img/pay/icon-pay@2x.png" alt=""></div>
                 </div>

+ 3 - 2
src/main/resources/templates/pay/caimei-success.html

@@ -24,8 +24,9 @@
             </div>
             <div class="success-text"><p class="tx1">{{isSuccessText}}</p></div>
             <div class="success-text"><p class="tx2">付款金额: <span>¥{{payAmount | NumFormat}}</span> </p></div>
-            <!-- <div class="success-text"><p class="tx2"><span>{{maxtime}}s</span>后自动跳转到{{linkText}}<a :href="openLink">立即跳转</a></p></div>-->
-            <div class="success-text"><p class="tx2">点击<a :href="openLink">立即跳转</a>到{{linkText}}</p></div>
+<!--            <div class="success-text"><p class="tx2"><span>{{maxtime}}s</span>后自动跳转到{{linkText}}<a :href="openLink">立即跳转</a></p></div>-->
+            <div class="success-text" v-if="refreshType"><p class="tx2">点击<a :href="openLink">立即跳转</a>到{{linkText}}<span style="margin-left: 25px;">{{maxtime}}s后自动跳转</span></p></div>
+            <div class="success-text" v-else><p class="tx2">点击<a :href="openLink">立即跳转</a>到{{linkText}}</p></div>
     </div>
 </div>
 <!-- 引入底部 -->

+ 31 - 9
src/main/resources/templates/product/detail.html

@@ -66,21 +66,43 @@
                             <p>扫码添加采美微信客服咨询更快捷</p></div>
                     </div>
                     <div class="row price"><span class="l">采美价</span><i>:</i>
+                        <!--登录-->
                         <template v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0">
                             <!--用户身份 0、个人 1、协销 2、会员机构 3、供应商 4,普通机构-->
                             <em v-if="priceObj.priceFlag==1" v-text="'¥价格未公开'"></em>
-                            <em v-else-if="priceObj.priceFlag==2 && priceObj.userIdentity==4" v-text="'¥会员可见'"></em>
-                            <template
-                                    v-else-if="(priceObj.priceFlag==0 && priceObj.userIdentity!=3) || priceObj.userIdentity==2 || (priceObj.userIdentity==3 && priceObj.shopId==GLOBAL_SHOP_ID)">
-                                <em v-if="priceObj.actStatus==1 && promotions && promotions.type==1 && promotions.mode==1"
-                                    class="p">
+                            <!--SVIP时的划线价格-->
+                            <!--满足条件:只有开通会员才显示划线价格-->
+                            <em v-else-if="GLOBAL_VIP_FLAG === 1 && priceObj.svipProductFlag === 1">
+                                <del v-text="'¥'+parseFloat(priceObj.originalPrice).toFixed(2)"></del>
+                            </em>
+                            <!--可见价格 -->
+                            <template v-else-if="(priceObj.priceFlag==0 && priceObj.userIdentity!=3) || priceObj.userIdentity==2 || (priceObj.userIdentity==3 && priceObj.shopId==GLOBAL_SHOP_ID) || GLOBAL_VIP_FLAG === 1">
+                                <em v-if="priceObj.actStatus==1 && promotions && promotions.type==1 && promotions.mode==1" class="p">
                                     <del v-text="'¥'+parseFloat(priceObj.originalPrice).toFixed(2)"></del>
                                 </em>
                                 <em v-else class="p" v-text="'¥'+parseFloat(priceObj.price).toFixed(2)"></em>
                             </template>
+                            <!--仅会员可见 -->
+                            <em v-else-if="priceObj.priceFlag==2 && priceObj.userIdentity==4" v-text="'¥会员可见'"></em>
+                            <!--隐藏价格 -->
                             <em v-else>¥<i th:attr="class=${'icon mIcon i'+product.priceGrade}"></i></em>
+                            <!--SVIP会员标签-->
+                            <div class="svip-tag" v-if="priceObj.svipProductFlag == 1">
+                                <div class="svip-icon">SVIP</div>
+                                <!-- !价格未公开 && ((个人机构 + SVIP) || 资质机构 ) 可查看价格 -->
+                                <div class="svip-price" v-if="showVipPriceTag(priceObj)">
+                                    <span v-html="priceObj.svipPriceTag"></span>
+                                </div>
+                            </div>
+                        </template>
+                        <!--未登录-->
+                        <template v-else>
+                            <em>¥<i th:attr="class=${'icon mIcon i'+product.priceGrade}"></i></em>
+                            <!--SVIP会员标签 有svip会员价-->
+                            <div class="svip-tag" v-if="priceObj.svipProductFlag == 1">
+                                <div class="svip-icon">SVIP</div>
+                            </div>
                         </template>
-                        <em v-else>¥<i th:attr="class=${'icon mIcon i'+product.priceGrade}"></i></em>
                     </div>
                     <template
                             v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0 && priceObj.normalPrice>0 && ((priceObj.priceFlag==0 && priceObj.userIdentity!=3) || (priceObj.priceFlag==2 && priceObj.userIdentity==2) || (priceObj.userIdentity==3 && priceObj.shopId==GLOBAL_SHOP_ID))">
@@ -216,12 +238,12 @@
                 <div v-if="!isPC" class="wechatH5 btnBox"><img src="/img/base/wechat.h5.png" style="padding: 2.7vw 0">
                 </div>
                 <template v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0">
-                    <div class="btnBox" v-if="priceObj.priceFlag==2 && priceObj.userIdentity==4">
+                    <div class="btnBox" v-if="priceObj.priceFlag==2 && priceObj.userIdentity==4 && GLOBAL_VIP_FLAG !== 1">
                         <a class="upgrade" href="/user/setting/upgrade.html"
                            onclick="_czc.push(['_trackEvent','商品详情','点击','升级查看价格','','Um_Event_ProductUpgrade'])">升级会员查看价格</a>
                     </div>
                     <div class="btnBox"
-                         v-else-if="(priceObj.priceFlag==0 && priceObj.userIdentity!=3) || (priceObj.priceFlag==2 && priceObj.userIdentity==2)">
+                         v-else-if="(priceObj.priceFlag==0 && priceObj.userIdentity!=3) || (priceObj.priceFlag==2 && priceObj.userIdentity==2) || GLOBAL_VIP_FLAG === 1">
                         <a href="javascript:void(0);" class="cart icon" @click='addShopCart()' v-if="!isNoneDisabled"
                            onclick="_czc.push(['_trackEvent','商品详情','点击','加入购物车','','Um_Event_ProductAddCart'])">加入购物车</a>
                         <a href="javascript:void(0);" class="buy" @click="buyNowSubmit()" v-if="!isNoneDisabled"
@@ -491,7 +513,7 @@
 <!-- 引入底部 -->
 <template th:replace="components/footer"></template>
 <template th:replace="components/foot-link"></template>
-<script src="https://cdn.bootcdn.net/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
+<script src="/lib/datapicker/moment-2.29.min.js"></script>
 <script charset="utf-8" type="text/javascript" src="/lib/magnifier.js"></script>
 <script charset="utf-8" type="text/javascript" src="/lib/viewer.min.js"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/product.service.js(v=${version})}"></script>

+ 42 - 35
src/main/resources/templates/product/instruelist.html

@@ -110,50 +110,57 @@
                             <p class="name" v-html="addhtml + p.name" v-if="p.beautyActFlag==1"></p>
                             <p class="name" v-html="p.name" v-else></p>
                             <div class="price">
-                                <!--<template v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0">-->
-                                    <!--用户身份 0、个人 1、协销 2、会员机构 3、供应商 4,普通机构-->
-                                    <template v-if="p.priceFlag==1">
-                                        <div class="price_text_tag">
-                                            <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
-                                        </div>
-                                        <div class="main_price_unde">¥价格未公开</div>
-                                    </template>
-                                    <template v-else>
-                                        <template v-if="(p.priceFlag==0 && p.userIdentity!=3) || p.userIdentity==2 || (p.userIdentity==3 && p.shopId==GLOBAL_SHOP_ID)">
-                                           <div class="price_text_tag">
-<!--                                                <p class="couponTag"v-if="p.couponsLogo">优惠券</p>-->
-                                                <p class="listTag" v-if="p.actStatus==1">
-                                                    {{p.promotions.name}}
-                                                    <span v-if="p.priceFlag != 1 && PromotionsFormat(p.promotions)">:¥{{p.price | NumFormat}}</span>
-                                                </p>
-                                            </div>
-                                            <div class="main_price_show" :class="PromotionsFormat(p.promotions) ? 'none' : ''">
-                                                ¥{{ (PromotionsFormat(p.promotions) ? p.originalPrice : p.price ) | NumFormat }}
+                                <!--用户身份 0、个人 1、协销 2、会员机构 3、供应商 4,普通机构-->
+                                <template v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0">
+                                    <div class="price_text_tag">
+                                        <p class="couponTag"v-if="p.couponsLogo">优惠券</p>
+                                        <template v-if="p.svipProductFlag === 1">
+                                            <div class="svip-tag">
+                                                <div class="svip-icon">SVIP</div>
+                                                <template v-if="showVipPriceTag(p)">
+                                                    <div class="svip-price">
+                                                        <span v-html="p.svipPriceTag"></span>
+                                                    </div>
+                                                </template>
                                             </div>
                                         </template>
-                                        <template v-else-if="p.priceFlag==2 && p.userIdentity==4">
-                                             <div class="price_text_tag">
-<!--                                                <p class="couponTag" v-if="p.couponsLogo">优惠券</p>-->
-                                                <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
-                                            </div>
-                                            <div class="main_price_unde">¥会员可见</div>
-                                        </template>
                                         <template v-else>
-                                         <div class="price_text_tag">
-<!--                                            <p class="couponTag" v-if="p.couponsLogo">优惠券</p>-->
-                                            <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
-                                        </div>
-                                        <div class="price_grade"><span class="bold">¥</span><i :class="'icon mIcon i'+p.priceGrade"></i></div>
+                                            <p class="listTag" v-if="p.actStatus==1">
+                                                {{p.promotions.name}}
+                                                <span v-if="p.priceFlag != 1 && PromotionsFormat(p.promotions)">:¥{{p.price | NumFormat}}</span>
+                                            </p>
                                         </template>
+                                    </div>
+                                    <!--价格未公开-->
+                                    <div class="main_price_unde" v-if="p.priceFlag==1">¥价格未公开</div>
+                                    <!--机构价格-->
+                                    <template v-else-if="GLOBAL_USER_IDENTITY === 2 || (p.priceFlag === 0 && GLOBAL_USER_IDENTITY === 4) || (GLOBAL_USER_IDENTITY === 3 && p.shopId === GLOBAL_SHOP_ID) || GLOBAL_VIP_FLAG === 1">
+                                        <div class="main_price_show"
+                                            :class="{none: PromotionsFormat(p.promotions) || showVipPriceTag(p)}">
+                                            <span>¥{{ (PromotionsFormat(p.promotions) || showVipPriceTag(p) ? p.originalPrice : p.price ) | NumFormat }}</span>
+                                        </div>
                                     </template>
-                                <!--</template>
+                                    <!--会员可见-->
+                                    <div class="main_price_unde" v-if="p.priceFlag==2 && GLOBAL_USER_IDENTITY === 4">¥会员可见</div>
+                                    <!--其他-->
+                                    <div class="price_grade" v-else><span class="bold">¥</span><i :class="'icon mIcon i'+p.priceGrade"></i></div>
+                                </template>
+                                <!--
                                 <template v-else>
-                                     <div class="price_text_tag ">
+                                     <div class="price_text_tag">
                                          <p class="couponTag" v-if="p.couponsLogo">优惠券</p>
-                                         <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
+                                         <template v-if="p.svipProductFlag === 1">
+                                             <div class="svip-tag">
+                                                 <div class="svip-icon">SVIP</div>
+                                             </div>
+                                         </template>
+                                         <template v-else>
+                                             <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
+                                         </template>
                                       </div>
                                       <div class="price_grade "><span class="bold">¥</span><i :class="'icon mIcon i'+p.priceGrade"></i></div>
-                                </template>-->
+                                </template>
+                                -->
                             </div>
                         </a>
                     </li>

+ 43 - 32
src/main/resources/templates/product/instrument.html

@@ -115,45 +115,52 @@
                                     <div class="page_main_price" v-if="pros.listType == 1">
                                         <!-- 商品价格 -->
                                         <div class="main_price_text">
-                                        <!-- 正常商品 -->
+                                            <!-- 正常商品 -->
                                             <template v-if="pros.product.productCategory == 1">
                                                 <div class="price_text_tag">
-<!--                                                    <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
-                                                    <p class="listTag" v-if="pros.product.actStatus ==1 && pros.product.promotions">
-                                                        <span v-text="pros.product.promotions.name"></span>
-                                                        <template v-if="PromotionsFormat(pros.product.promotions)">
-                                                            <!--单品优惠:优惠价-->
-                                                            <span class="price_unit">:¥</span><span class="price_num">{{ pros.product.price | NumFormat }}</span>
-                                                        </template>
-                                                    </p>
+                                                    <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>
+                                                    <!--超级会员价格标签 svipProductFlag 1:超级会员优惠商品 0 不是商超级会员优惠商品-->
+                                                    <template v-if="pros.product.svipProductFlag === 1">
+                                                        <div class="svip-tag">
+                                                            <div class="svip-icon">SVIP</div>
+                                                            <!-- !价格未公开 && ((个人机构 + SVIP) || 资质机构 ) 可查看价格 -->
+                                                            <template v-if="showVipPriceTag(pros.product)">
+                                                                <div class="svip-price">
+                                                                    <span v-html="pros.product.svipPriceTag"></span>
+                                                                </div>
+                                                            </template>
+                                                        </div>
+                                                    </template>
+                                                    <template v-else>
+                                                        <p class="listTag" v-if="pros.product.actStatus ==1 && pros.product.promotions">
+                                                            <span v-text="pros.product.promotions.name"></span>
+                                                            <template v-if="PromotionsFormat(pros.product.promotions)">
+                                                                <!--单品优惠:优惠价-->
+                                                                <span class="price_unit">:¥</span><span class="price_num">{{ pros.product.price | NumFormat }}</span>
+                                                            </template>
+                                                        </p>
+                                                    </template>
                                                 </div>
                                                 <div class="main_price_login">
                                                     <!--0公开价格 1不公开价格 2仅对会员机构公开-->
-                                                    <template v-if="pros.product.priceFlag == 1">
-                                                        <em class="price_grade"><span>¥</span>价格未公开</em>
+                                                    <em class="price_grade" v-if="pros.product.priceFlag == 1"><span>¥</span>价格未公开</em>
+                                                    <template v-else-if="GLOBAL_USER_IDENTITY === 2 || (pros.product.priceFlag === 0 && GLOBAL_USER_IDENTITY === 4) || (GLOBAL_USER_IDENTITY === 3 && pros.product.shopId === GLOBAL_SHOP_ID) || GLOBAL_VIP_FLAG === 1">
+                                                        <!--机构价-->
+                                                        <div class="main_price_show" :class="{none: PromotionsFormat(pros.product.promotions) || showVipPriceTag(pros.product) }">
+                                                            ¥<span class="price_num" v-if="showVipPriceTag(pros.product) || PromotionsFormat(pros.product.promotions)">{{ pros.product.originalPrice | NumFormat }}</span>
+                                                              <span class="price_num" v-else>{{ pros.product.price | NumFormat }}</span>
+                                                        </div>
+                                                    </template>
+                                                    <template v-else-if="pros.product.priceFlag === 2 && GLOBAL_USER_IDENTITY === 4">
+                                                        <em class="price_grade_club">
+                                                            <span>¥</span>会员可见
+                                                        </em>
                                                     </template>
                                                     <template v-else>
-                                                        <template v-if="PromotionsFormat(pros.product.promotions)">
-                                                            <!--单品优惠时的划线价-->
-                                                            <div class="main_price_show none">
-                                                                ¥<span class="price_o_num">{{ pros.product.originalPrice | NumFormat }}</span>
-                                                            </div>
-                                                        </template>
-                                                        <template v-else-if="(pros.product.priceFlag==0 && pros.product.userIdentity!=3) || pros.product.userIdentity==2 || (pros.product.userIdentity==3 && pros.product.shopID==GLOBAL_SHOP_ID)">
-                                                            <!--机构价-->
-                                                            <div class="main_price_show">¥<span class="price_num">{{ pros.product.price | NumFormat }}</span></div>
-                                                        </template>
-                                                        <template v-else-if="pros.product.priceFlag==2 && pros.product.userIdentity==4">
-                                                            <em class="price_grade_club">
-                                                                <span>¥</span>会员可见
-                                                            </em>
-                                                        </template>
-                                                        <template v-else>
-                                                            <!--供应商除自己的商品外,也显示价格等级-->
-                                                            <em class="price_grade_shop">
-                                                                <span class="bold">¥</span><i :class="'icon mIcon price_grade_'+pros.product.priceGrade"></i>
-                                                            </em>
-                                                        </template>
+                                                        <!--供应商除自己的商品外,也显示价格等级-->
+                                                        <em class="price_grade_shop">
+                                                            <span class="bold">¥</span><i :class="'icon mIcon price_grade_'+pros.product.priceGrade"></i>
+                                                        </em>
                                                     </template>
                                                 </div>
                                             </template>
@@ -244,6 +251,10 @@
                                                         <th:block th:if="*{productCategory}==1">
                                                             <div class="price_text_tag">
                                                                 <p class="couponTag" th:if="*{couponsLogo}">优惠券</p>
+                                                                <!--超级会员价格标签-->
+                                                                <div class="svip-tag" th:if="*{svipProductFlag}==1">
+                                                                    <div class="svip-icon">SVIP</div>
+                                                                </div>
                                                                 <p class="listTag" th:if="*{actStatus}==1 and ${pros.get('product').get('promotions')}!=null">
                                                                     <template th:text="*{promotions.name}"></template>
                                                                     <th:block th:if="*{promotions.type}==1 and *{promotions.mode}==1">

+ 38 - 34
src/main/resources/templates/product/list.html

@@ -113,49 +113,53 @@
                     <p class="name" v-html="addhtml + p.name" v-if="p.beautyActFlag==1"></p>
                     <p class="name" v-html="p.name" v-else></p>
                     <div class="price">
+                        <!--用户身份 0、个人 1、协销 2、会员机构 3、供应商 4,普通机构-->
                         <template v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0">
-                            <!--用户身份 0、个人 1、协销 2、会员机构 3、供应商 4,普通机构-->
-                            <template v-if="p.priceFlag==1">
-                                <div class="price_text_tag">
-                                    <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
-                                </div>
-                                <div class="main_price_unde">¥价格未公开</div>
-                            </template>
-                            <template v-else>
-                                <template v-if="(p.priceFlag==0 && p.userIdentity!=3) || p.userIdentity==2 || (p.userIdentity==3 && p.shopId==GLOBAL_SHOP_ID)">
-                                    <div class="price_text_tag">
-<!--                                        <p class="couponTag" v-if="p.couponsLogo">优惠券</p>-->
-                                        <p class="listTag" v-if="p.actStatus==1">
-                                            {{p.promotions.name}}
-                                            <span v-if="p.priceFlag != 1 && PromotionsFormat(p.promotions)">:¥{{p.price | NumFormat}}</span>
-                                        </p>
-                                    </div>
-                                    <div class="main_price_show" :class="PromotionsFormat(p.promotions) ? 'none' : ''">
-                                        ¥{{ (PromotionsFormat(p.promotions) ? p.originalPrice : p.price ) | NumFormat }}
+                            <div class="price_text_tag clear">
+                                <p class="couponTag" v-if="p.couponsLogo">优惠券</p>
+                                <template v-if="p.svipProductFlag === 1">
+                                    <div class="svip-tag">
+                                        <div class="svip-icon">SVIP</div>
+                                        <template v-if="showVipPriceTag(p)">
+                                            <div class="svip-price">
+                                                <span v-html="p.svipPriceTag"></span>
+                                            </div>
+                                        </template>
                                     </div>
                                 </template>
-                                <template v-else-if="p.priceFlag==2 && p.userIdentity==4">
-                                    <div class="price_text_tag">
-<!--                                        <p class="couponTag" v-if="p.couponsLogo">优惠券</p>-->
-                                        <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
-                                    </div>
-                                    <div class="main_price_unde">¥会员可见</div>
-                                </template>
                                 <template v-else>
-                                    <div class="price_text_tag">
-<!--                                        <p class="couponTag" v-if="p.couponsLogo">优惠券</p>-->
-                                        <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
-                                    </div>
-                                    <div class="price_grade"><span class="bold">¥</span><i :class="'icon mIcon i'+p.priceGrade"></i></div>
+                                    <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}
+                                        <span v-if="p.priceFlag != 1 && PromotionsFormat(p.promotions)">:¥{{p.price | NumFormat}}</span>
+                                    </p>
                                 </template>
+                            </div>
+                            <!--0公开价格 1不公开价格 2仅对会员机构公开-->
+                            <div class="main_price_unde" v-if="p.priceFlag==1">¥价格未公开</div>
+                            <!-- 资质机构 || (价格全部机构可见 && 普通机构) || (供应商 && 商品为供应商下的商品) || 超级会员用户 -->
+                            <template v-else-if="GLOBAL_USER_IDENTITY === 2 || (p.priceFlag === 0 && GLOBAL_USER_IDENTITY === 4) || (GLOBAL_USER_IDENTITY === 3 && p.shopId === GLOBAL_SHOP_ID) || GLOBAL_VIP_FLAG === 1">
+                                <div class="main_price_show"
+                                    :class="{none: PromotionsFormat(p.promotions) || (p.svipProductFlag === 1 && showVipPriceTag(p))}">
+                                    ¥{{ (PromotionsFormat(p.promotions) || showVipPriceTag(p) ? p.originalPrice : p.price ) | NumFormat }}
+                                </div>
                             </template>
+                            <!--机构价仅会员可见 && 用户是普通机构-->
+                            <div class="main_price_unde" v-else-if="p.priceFlag==2 && GLOBAL_USER_IDENTITY === 4">¥会员可见</div>
+                            <!--供应商除自己的商品外,也显示价格等级-->
+                            <div class="price_grade" v-else><span class="bold">¥</span><i :class="'icon mIcon i'+p.priceGrade"></i></div>
                         </template>
                         <template v-else>
-                            <div class="price_text_tag ">
-<!--                                <p class="couponTag" v-if="p.couponsLogo">优惠券</p>-->
-                                <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
+                            <div class="price_text_tag">
+                                <p class="couponTag" v-if="p.couponsLogo">优惠券</p>
+                                <template v-if="p.svipProductFlag === 1">
+                                    <div class="svip-tag">
+                                        <div class="svip-icon">SVIP</div>
+                                    </div>
+                                </template>
+                                <template v-else>
+                                    <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
+                                </template>
                             </div>
-                            <div class="price_grade "><span class="bold">¥</span><i :class="'icon mIcon i'+p.priceGrade"></i></div>
+                            <div class="price_grade"><span class="bold">¥</span><i :class="'icon mIcon i'+p.priceGrade"></i></div>
                         </template>
                     </div>
                 </a>

+ 37 - 33
src/main/resources/templates/product/product-coupon.html

@@ -18,7 +18,7 @@
     </div>
     <template v-else>
         <!--banner图-->
-        <div class="coupon-banner">
+        <div class="coupon-banner" v-if="appletsBanner">
             <a href='javascript:void(0)'>
                 <img :src="pcBanner" v-if="isPC">
                 <img :src="appletsBanner" v-else>
@@ -35,45 +35,49 @@
                         <div class="price">
                             <template v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0">
                                 <!--用户身份 0、个人 1、协销 2、会员机构 3、供应商 4,普通机构-->
-                                <template v-if="p.priceFlag==1">
-                                    <div class="price_text_tag">
-                                        <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
-                                    </div>
-                                    <div class="main_price_unde">¥价格未公开</div>
-                                </template>
-                                <template v-else>
-                                    <template v-if="(p.priceFlag==0 && p.userIdentity!=3) || p.userIdentity==2 || p.userIdentity==3">
-                                        <div class="price_text_tag">
-<!--                                            <p class="couponTag" v-if="p.couponsLogo">优惠券</p>-->
-                                            <p class="listTag" v-if="p.actStatus==1">
-                                                {{p.promotions.name}}
-                                                <span v-if="p.priceFlag != 1 && PromotionsFormat(p.promotions)">:¥{{p.price | NumFormat}}</span>
-                                            </p>
-                                        </div>
-                                        <div class="main_price_show" :class="PromotionsFormat(p.promotions) ? 'none' : ''">
-                                            ¥{{ (PromotionsFormat(p.promotions) ? p.originalPrice : p.price ) | NumFormat }}
+                                <div class="price_text_tag clear">
+                                    <p class="couponTag" v-if="p.couponsLogo">优惠券</p>
+                                    <template v-if="p.svipProductFlag === 1">
+                                        <div class="svip-tag">
+                                            <div class="svip-icon">SVIP</div>
+                                            <template v-if="showVipPriceTag(p)">
+                                                <div class="svip-price">
+                                                    <span v-html="p.svipPriceTag"></span>
+                                                </div>
+                                            </template>
                                         </div>
                                     </template>
-                                    <template v-else-if="p.priceFlag==2 && p.userIdentity==4">
-                                        <div class="price_text_tag">
-<!--                                            <p class="couponTag" v-if="p.couponsLogo">优惠券</p>-->
-                                            <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
-                                        </div>
-                                        <div class="main_price_unde">¥会员可见</div>
-                                    </template>
                                     <template v-else>
-                                        <div class="price_text_tag">
-<!--                                            <p class="couponTag" v-if="p.couponsLogo">优惠券</p>-->
-                                            <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
-                                        </div>
-                                        <div class="price_grade"><span class="bold">¥</span><i :class="'icon mIcon i'+p.priceGrade"></i></div>
+                                        <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}
+                                            <span v-if="p.priceFlag != 1 && PromotionsFormat(p.promotions)">:¥{{p.price | NumFormat}}</span>
+                                        </p>
                                     </template>
+                                </div>
+                                <!--0公开价格 1不公开价格 2仅对会员机构公开-->
+                                <div class="main_price_unde" v-if="p.priceFlag==1">¥价格未公开</div>
+                                <!-- 资质机构 || (价格全部机构可见 && 普通机构) || (供应商 && 商品为供应商下的商品) || 超级会员用户 -->
+                                <template v-else-if="GLOBAL_USER_IDENTITY === 2 || (p.priceFlag === 0 && GLOBAL_USER_IDENTITY === 4) || (GLOBAL_USER_IDENTITY === 3 && p.shopId === GLOBAL_SHOP_ID) || GLOBAL_VIP_FLAG === 1">
+                                    <div class="main_price_show"
+                                        :class="{none: PromotionsFormat(p.promotions) || (p.svipProductFlag === 1 && showVipPriceTag(p))}">
+                                        ¥{{ (PromotionsFormat(p.promotions) || showVipPriceTag(p) ? p.originalPrice : p.price ) | NumFormat }}
+                                    </div>
                                 </template>
+                                <!--机构价仅会员可见 && 用户是普通机构-->
+                                <div class="main_price_unde" v-else-if="p.priceFlag==2 && GLOBAL_USER_IDENTITY === 4">¥会员可见</div>
+                                <!--供应商除自己的商品外,也显示价格等级-->
+                                <div class="price_grade" v-else><span class="bold">¥</span><i :class="'icon mIcon i'+p.priceGrade"></i></div>
                             </template>
                             <template v-else>
-                                <div class="price_text_tag ">
-<!--                                    <p class="couponTag" v-if="p.couponsLogo">优惠券</p>-->
-                                    <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
+                                <div class="price_text_tag">
+                                    <p class="couponTag" v-if="p.couponsLogo">优惠券</p>
+                                    <template v-if="p.svipProductFlag === 1">
+                                        <div class="svip-tag">
+                                            <div class="svip-icon">SVIP</div>
+                                        </div>
+                                    </template>
+                                    <template v-else>
+                                        <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
+                                    </template>
                                 </div>
                                 <div class="price_grade "><span class="bold">¥</span><i :class="'icon mIcon i'+p.priceGrade"></i></div>
                             </template>

+ 52 - 39
src/main/resources/templates/shopping/cart.html

@@ -34,7 +34,7 @@
             </div>
             <h1>我的购物车</h1>
         </div>
-        <div class="listWrap">
+        <div class="listWrap" v-cloak>
             <div v-if="isPC" class="cartTit clear">
                 <div class="c0"><input class="check" type="checkbox" @change="ckeckAll()" v-model="allChecked"></div>
                 <div class="c1">全选</div>
@@ -95,53 +95,66 @@
                     </div>
                     <div class="c4">
                         <div class="price">
-                            <template v-if="cart.actStatus==1 && cart.promotions && cart.promotions.type==1 && cart.promotions.mode==1">
+                            <template v-if="(GLOBAL_VIP_FLAG === 1 && cart.svipProductFlag === 1)|| (cart.actStatus==1 && cart.promotions && cart.promotions.type==1 && cart.promotions.mode==1)">
                                 <del v-text="'¥'+toFloat(cart.originalPrice)"></del>
                             </template>
                             <template v-else>
                                 <em> {{ cart.price | NumFormat }} </em>
                             </template>
                             <!-- 促销活动 -->
-                            <div v-if="cart.actStatus==1 && cart.promotions" class="priceTag">
-                                <i v-if="cart.promotions.type==1 && cart.promotions.mode==1" @click="toggleThisLadder($event)" class="tag icon mIcon" v-text="cart.promotions.name+':¥'+toFloat(cart.promotions.touchPrice)"></i>
-                                <i v-else class="tag icon mIcon" @click="toggleThisLadder($event)" v-text="cart.promotions?cart.promotions.name:''"></i>
-                                <div class="promotion mFixed">
-                                    <div>
-                                        <p class="t">
-                                            <em v-if="cart.promotions.type==1 && cart.promotions.mode==1">{{cart.promotions.name+':¥'+toFloat(cart.promotions.touchPrice)}}</em>
-                                            <em v-if="cart.promotions.mode==2">{{cart.promotions.name+',满 ¥'+toFloat(cart.promotions.touchPrice)+' 减 ¥'+toFloat(cart.promotions.reducedPrice)}}</em>
-                                            <em v-if="cart.promotions.mode==3">{{cart.promotions.name+',满 ¥'+toFloat(cart.promotions.touchPrice)+' 赠送商品'}}</em>
-                                        </p>
-                                        <p>促销时间:<em v-if="cart.promotions.status==1">不限时</em><em v-else>{{cart.promotions.beginTime.substr(0,10)+' ~ '+cart.promotions.endTime.substr(0,10)}}</em></p>
-                                        <p v-if="cart.promotions.type==2" class="r"><a class="more" :href="'/product/promotions.html?id='+cart.promotions.id">更多凑单商品>>></a></p>
-                                        <template v-if="cart.promotions.mode==3">
-                                            <p>赠品:</p>
-                                            <p>
-                                                <span v-for="g in cart.promotions.giftList" class="p">
-                                                    <img :src="g.image">
-                                                    <span v-text="g.name"></span>
-                                                    <span v-text="'× '+g.number"></span>
-                                                </span>
+                            <template v-if="cart.svipProductFlag == 1">
+                                <div class="priceTag">
+                                    <!--超级会员价格标签-->
+                                    <div class="svip-tag">
+                                        <div class="svip-icon">SVIP</div>
+                                        <div class="svip-price" v-if="cart.svipProductFlag == 1 && GLOBAL_VIP_FLAG === 1">
+                                            <span v-html="cart.svipPriceTag"></span>
+                                        </div>
+                                    </div>
+                                </div>
+                            </template>
+                            <template v-else>
+                                <div v-if="cart.actStatus==1 && cart.promotions" class="priceTag">
+                                    <i v-if="cart.promotions.type==1 && cart.promotions.mode==1" @click="toggleThisLadder($event)" class="tag icon mIcon" v-text="cart.promotions.name+':¥'+toFloat(cart.promotions.touchPrice)"></i>
+                                    <i v-else class="tag icon mIcon" @click="toggleThisLadder($event)" v-text="cart.promotions?cart.promotions.name:''"></i>
+                                    <div class="promotion mFixed">
+                                        <div>
+                                            <p class="t">
+                                                <em v-if="cart.promotions.type==1 && cart.promotions.mode==1">{{cart.promotions.name+':¥'+toFloat(cart.promotions.touchPrice)}}</em>
+                                                <em v-if="cart.promotions.mode==2">{{cart.promotions.name+',满 ¥'+toFloat(cart.promotions.touchPrice)+' 减 ¥'+toFloat(cart.promotions.reducedPrice)}}</em>
+                                                <em v-if="cart.promotions.mode==3">{{cart.promotions.name+',满 ¥'+toFloat(cart.promotions.touchPrice)+' 赠送商品'}}</em>
                                             </p>
-                                        </template>
-                                        <p class="c"><a class="close" @click="hideThisLadder($event)" href="JavaScript:void(0);">了解</a></p>
+                                            <p>促销时间:<em v-if="cart.promotions.status==1">不限时</em><em v-else>{{cart.promotions.beginTime.substr(0,10)+' ~ '+cart.promotions.endTime.substr(0,10)}}</em></p>
+                                            <p v-if="cart.promotions.type==2" class="r"><a class="more" :href="'/product/promotions.html?id='+cart.promotions.id">更多凑单商品>>></a></p>
+                                            <template v-if="cart.promotions.mode==3">
+                                                <p>赠品:</p>
+                                                <p>
+                                                    <span v-for="g in cart.promotions.giftList" class="p">
+                                                        <img :src="g.image">
+                                                        <span v-text="g.name"></span>
+                                                        <span v-text="'× '+g.number"></span>
+                                                    </span>
+                                                </p>
+                                            </template>
+                                            <p class="c"><a class="close" @click="hideThisLadder($event)" href="JavaScript:void(0);">了解</a></p>
+                                        </div>
                                     </div>
                                 </div>
-                            </div>
-                            <!-- 阶梯价 -->
-                            <div v-else-if="cart.ladderFlag" class="priceTag">
-                                <i class="tag icon mIcon" @click="toggleThisLadder($event)">阶梯价格</i>
-                                <div class="ladder mFixed">
-                                    <span>
-                                        <em class="t"><i>价格</i><i>起订量</i></em>
-                                        <em v-for="l in cart.ladderPrices">
-                                            <i class="p">¥{{toFloat(l.buyPrice)}}</i>
-                                            <i>{{l.numRange}}</i>
-                                        </em>
-                                        <em @click="hideThisLadder($event)" class="close">了解</em>
-                                    </span>
+                                <!-- 阶梯价 -->
+                                <div v-else-if="cart.ladderFlag" class="priceTag">
+                                    <i class="tag icon mIcon" @click="toggleThisLadder($event)">阶梯价格</i>
+                                    <div class="ladder mFixed">
+                                        <span>
+                                            <em class="t"><i>价格</i><i>起订量</i></em>
+                                            <em v-for="l in cart.ladderPrices">
+                                                <i class="p">¥{{toFloat(l.buyPrice)}}</i>
+                                                <i>{{l.numRange}}</i>
+                                            </em>
+                                            <em @click="hideThisLadder($event)" class="close">了解</em>
+                                        </span>
+                                    </div>
                                 </div>
-                            </div>
+                            </template>
                         </div>
                     </div>
                     <div class="c5">
@@ -157,7 +170,7 @@
                 </div>
                 <div class="supplierBtn">
                     <span :class="supplier.reducedPrice>0?'priceTotal':'item'">合计:<em>¥{{ supplier.totalPrice | NumFormat}}</em>
-                        <span v-if="supplier.reducedPrice>0" class="dl"><del>¥{{ supplier.originalPrice | NumFormat}}</del><em>减¥{{supplier.reducedPrice | NumFormat}}</em></span>
+                        <span v-if="supplier.reducedPrice>0 || supplier.svipReducedPrice > 0" class="dl"><del>¥{{ supplier.originalPrice | NumFormat}}</del><em>减¥{{supplier.reducedPrice | NumFormat}}</em></span>
                     </span>
                 </div>
             </div>

+ 57 - 41
src/main/resources/templates/shopping/confirm.html

@@ -146,53 +146,68 @@
                     </div>
                     <div class="c4">
                         <div class="price">
-                            <template v-if="cart.actStatus==1 && cart.promotions && cart.promotions.type==1 && cart.promotions.mode==1">
-                                <del v-text="'¥'+toFloat(cart.originalPrice)"></del>
+                            <template v-if="cart.svipProductFlag == 1">
+                                <del v-text="'¥'+toFloat(cart.originalPrice)" v-if="GLOBAL_VIP_FLAG === 1"></del>
+                                <span v-text="'¥'+toFloat(cart.originalPrice)" v-else></span>
+                                <div class="priceTag" v-if="cart.svipProductFlag == 1 && GLOBAL_VIP_FLAG === 1">
+                                    <!--超级会员价格标签-->
+                                    <div class="svip-tag">
+                                        <div class="svip-icon">SVIP</div>
+                                        <div class="svip-price">
+                                            <span v-html="cart.svipPriceTag"></span>
+                                        </div>
+                                    </div>
+                                </div>
                             </template>
                             <template v-else>
-                                <em v-text="'¥'+toFloat(cart.price)"></em>
-                            </template>
-                            <!-- 促销活动 -->
-                            <div v-if="cart.actStatus==1 && cart.promotions" class="priceTag">
-                                <i v-if="cart.promotions.type==1 && cart.promotions.mode==1" @click="toggleThisLadder($event)" class="tag icon mIcon" v-text="cart.promotions.name+':¥'+toFloat(cart.promotions.touchPrice)"></i>
-                                <i v-else class="tag icon mIcon" @click="toggleThisLadder($event)" v-text="cart.promotions?cart.promotions.name:''"></i>
-                                <div class="promotion mFixed">
-                                    <div>
-                                        <p class="t">
-                                            <em v-if="cart.promotions.type==1 && cart.promotions.mode==1">{{cart.promotions.name+':¥'+toFloat(cart.promotions.touchPrice)}}</em>
-                                            <em v-if="cart.promotions.mode==2">{{cart.promotions.name+',满 ¥'+toFloat(cart.promotions.touchPrice)+' 减 ¥'+toFloat(cart.promotions.reducedPrice)}}</em>
-                                            <em v-if="cart.promotions.mode==3">{{cart.promotions.name+',满 ¥'+toFloat(cart.promotions.touchPrice)+' 赠送商品'}}</em>
-                                        </p>
-                                        <p>促销时间:<em v-if="cart.promotions.status==1">不限时</em><em v-else>{{cart.promotions.beginTime.substr(0,10)+' ~ '+cart.promotions.endTime.substr(0,10)}}</em></p>
-                                        <p v-if="cart.promotions.type==2" class="r"><a class="more" :href="'/product/promotions.html?id='+cart.promotions.id">更多凑单商品>>></a></p>
-                                        <template v-if="cart.promotions.mode==3">
-                                            <p>赠品:</p>
-                                            <p>
-                                                <span v-for="g in cart.promotions.giftList" class="p">
-                                                    <img :src="g.image">
-                                                    <span v-text="g.name"></span>
-                                                    <span v-text="'× '+g.number"></span>
-                                                </span>
+                                <template v-if="cart.actStatus==1 && cart.promotions && cart.promotions.type==1 && cart.promotions.mode==1">
+                                    <del v-text="'¥'+toFloat(cart.originalPrice)"></del>
+                                </template>
+                                <template v-else>
+                                    <em v-text="'¥'+toFloat(cart.price)"></em>
+                                </template>
+                                <!-- 促销活动 -->
+                                <div v-if="cart.actStatus==1 && cart.promotions" class="priceTag">
+                                    <i v-if="cart.promotions.type==1 && cart.promotions.mode==1" @click="toggleThisLadder($event)" class="tag icon mIcon" v-text="cart.promotions.name+':¥'+toFloat(cart.promotions.touchPrice)"></i>
+                                    <i v-else class="tag icon mIcon" @click="toggleThisLadder($event)" v-text="cart.promotions?cart.promotions.name:''"></i>
+                                    <div class="promotion mFixed">
+                                        <div>
+                                            <p class="t">
+                                                <em v-if="cart.promotions.type==1 && cart.promotions.mode==1">{{cart.promotions.name+':¥'+toFloat(cart.promotions.touchPrice)}}</em>
+                                                <em v-if="cart.promotions.mode==2">{{cart.promotions.name+',满 ¥'+toFloat(cart.promotions.touchPrice)+' 减 ¥'+toFloat(cart.promotions.reducedPrice)}}</em>
+                                                <em v-if="cart.promotions.mode==3">{{cart.promotions.name+',满 ¥'+toFloat(cart.promotions.touchPrice)+' 赠送商品'}}</em>
                                             </p>
-                                        </template>
-                                        <p class="c"><a class="close" @click="hideThisLadder($event)" href="JavaScript:void(0);">了解</a></p>
+                                            <p>促销时间:<em v-if="cart.promotions.status==1">不限时</em><em v-else>{{cart.promotions.beginTime.substr(0,10)+' ~ '+cart.promotions.endTime.substr(0,10)}}</em></p>
+                                            <p v-if="cart.promotions.type==2" class="r"><a class="more" :href="'/product/promotions.html?id='+cart.promotions.id">更多凑单商品>>></a></p>
+                                            <template v-if="cart.promotions.mode==3">
+                                                <p>赠品:</p>
+                                                <p>
+                                                    <span v-for="g in cart.promotions.giftList" class="p">
+                                                        <img :src="g.image">
+                                                        <span v-text="g.name"></span>
+                                                        <span v-text="'× '+g.number"></span>
+                                                    </span>
+                                                </p>
+                                            </template>
+                                            <p class="c"><a class="close" @click="hideThisLadder($event)" href="JavaScript:void(0);">了解</a></p>
+                                        </div>
                                     </div>
                                 </div>
-                            </div>
-                            <!-- 阶梯价 -->
-                            <div v-else-if="cart.ladderFlag" class="priceTag">
-                                <i class="tag icon mIcon" @click="toggleThisLadder($event)">阶梯价格</i>
-                                <div class="ladder mFixed">
-                                    <span>
-                                        <em class="t"><i>价格</i><i>起订量</i></em>
-                                        <em v-for="l in cart.ladderPrices">
-                                            <i class="p">¥{{toFloat(l.buyPrice)}}</i>
-                                            <i>{{l.numRange}}</i>
-                                        </em>
-                                        <em @click="hideThisLadder($event)" class="close">了解</em>
-                                    </span>
+                                <!-- 阶梯价 -->
+                                <div v-else-if="cart.ladderFlag" class="priceTag">
+                                    <i class="tag icon mIcon" @click="toggleThisLadder($event)">阶梯价格</i>
+                                    <div class="ladder mFixed">
+                                        <span>
+                                            <em class="t"><i>价格</i><i>起订量</i></em>
+                                            <em v-for="l in cart.ladderPrices">
+                                                <i class="p">¥{{toFloat(l.buyPrice)}}</i>
+                                                <i>{{l.numRange}}</i>
+                                            </em>
+                                            <em @click="hideThisLadder($event)" class="close">了解</em>
+                                        </span>
+                                    </div>
                                 </div>
-                            </div>
+                            </template>
                         </div>
                     </div>
                     <div class="c5">{{cart.number}}</div>
@@ -322,6 +337,7 @@
                 <span v-if="hanldPostageFlag == 0">包邮</span>
                 <span v-if="hanldPostageFlag == 1"><em>¥{{ hanldPostage | NumFormat }}</em></span>
             </p>
+            <p v-if="svipReducedPrice>0 && GLOBAL_VIP_FLAG === 1">超级会员优惠: <span><em>- ¥{{svipReducedPrice | NumFormat}}</em></span></p>
             <p v-if="reducedPrice>0">促销满减: <span><em>- ¥{{reducedPrice | NumFormat}}</em></span></p>
             <p>优惠券: <span><em>- ¥{{couponAmount | NumFormat}}</em></span></p>
             <p v-if="balance.deductMoney>0">抵扣账户余额: <span><em>- ¥{{balance.deductMoney | NumFormat}}</em></span></p>

+ 57 - 111
src/main/resources/templates/supplier/index.html

@@ -53,130 +53,76 @@
         </div>
         <div class="tabCon">
             <div class="item productBox">
-                <div v-if="mainProducts.length>0" class="part">
-                    <div class="title">主推商品</div>
-                    <!--主推商品列表-->
-                    <ul class="productList clear mfw">
-                        <li class="productItem " v-for="p in mainProducts">
-                            <a class="image" :href="'/product-'+p.productId+'.html'">
-                                <img src="/img/base/placeholder.png" :data-original="p.image" :alt="p.name">
-                                <p class="name" v-html="addhtml + p.name" v-if="p.beautyActFlag==1"></p>
-                                <p class="name" v-html="p.name" v-else></p>
-                                <div class="price">
-                                    <template v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0">
-                                        <!--用户身份 0、个人 1、协销 2、会员机构 3、供应商 4,普通机构-->
-                                        <template v-if="p.priceFlag==1">
+                <template v-for="(floor,index) in floorData">
+                    <div v-if="(floor.type === 1 && floor.productList.length > 0) || floor.type === 2" class="part">
+                        <div class="title" v-html="floor.title" :id="floor.type === 2 ? 'supProduct' : ''"></div>
+                        <!--主推商品列表-->
+                        <ul class="productList clear mfw" v-if="floor.type === 2 && floor.productList.length > 0">
+                            <li class="productItem " v-for="p in floor.productList">
+                                <a class="image" :href="'/product-'+p.productId+'.html'">
+                                    <img src="/img/base/placeholder.png" :data-original="p.image" :alt="p.name">
+                                    <p class="name" v-html="addhtml + p.name" v-if="p.beautyActFlag==1"></p>
+                                    <p class="name" v-html="p.name" v-else></p>
+                                    <div class="price">
+                                        <!--已登录-->
+                                        <template v-if="GLOBAL_USER_ID && GLOBAL_USER_ID > 0">
+                                            <!--用户身份 0、个人 1、协销 2、会员机构 3、供应商 4,普通机构-->
                                             <div class="price_text_tag">
-                                                <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
-                                            </div>
-                                            <div class="main_price_unde">¥价格未公开</div>
-                                        </template>
-                                        <template v-else>
-                                            <template v-if="(p.priceFlag==0 && p.userIdentity!=3) || p.userIdentity==2 || (p.userIdentity==3 && p.shopId==GLOBAL_SHOP_ID)">
-                                                <div class="price_text_tag">
-<!--                                                    <p class="couponTag" v-if="p.couponsLogo">优惠券</p>-->
+                                                <p class="couponTag" v-if="p.couponsLogo">优惠券</p>
+                                                <template v-if="p.svipProductFlag === 1">
+                                                    <div class="svip-tag">
+                                                        <div class="svip-icon">SVIP</div>
+                                                        <div class="svip-price" v-if="showVipPriceTag(p)">
+                                                            <span>¥</span><span v-html="p.svipPriceTag"></span>
+                                                        </div>
+                                                    </div>
+                                                </template>
+                                                <template v-else>
                                                     <p class="listTag" v-if="p.actStatus==1">
                                                         {{p.promotions.name}}
                                                         <span v-if="p.priceFlag != 1 && PromotionsFormat(p.promotions)">:¥{{p.price | NumFormat}}</span>
                                                     </p>
+                                                </template>
+                                            </div>
+                                            <div class="main_price_unde" v-if="p.priceFlag == 1">¥价格未公开</div>
+                                            <!--机构价格-->
+                                            <template v-else-if="GLOBAL_USER_IDENTITY === 2 || (p.priceFlag === 0 && GLOBAL_USER_IDENTITY === 4) || (GLOBAL_USER_IDENTITY === 3 && p.shopId === GLOBAL_SHOP_ID) || GLOBAL_VIP_FLAG === 1">
+                                                <div class="main_price_show" :class="{none: PromotionsFormat(p.promotions) || showVipPriceTag(p)}">
+                                                    ¥{{ (PromotionsFormat(p.promotions) || showVipPriceTag(p) ? p.originalPrice : p.price ) | NumFormat }}
                                                 </div>
-                                                <div class="main_price_show" :class="PromotionsFormat(p.promotions) ? 'none' : ''">
-                                                    ¥{{ (PromotionsFormat(p.promotions) ? p.originalPrice : p.price ) | NumFormat }}
-                                                </div>
-                                            </template>
-                                            <template v-else-if="p.priceFlag==2 && p.userIdentity==4">
-                                                <div class="price_text_tag">
-<!--                                                    <p class="couponTag" v-if="p.couponsLogo">优惠券</p>-->
-                                                    <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
-                                                </div>
-                                                <div class="main_price_unde">¥会员可见</div>
-                                            </template>
-                                            <template v-else>
-                                                <div class="price_text_tag">
-<!--                                                    <p class="couponTag" v-if="p.couponsLogo">优惠券</p>-->
-                                                    <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
-                                                </div>
-                                                <div class="price_grade"><span class="bold">¥</span><i :class="'icon mIcon i'+p.priceGrade"></i></div>
                                             </template>
+                                            <!--机构价仅会员可见 && 用户是普通机构-->
+                                            <div class="main_price_unde" v-else-if="p.priceFlag==2 && GLOBAL_USER_IDENTITY === 4">¥会员可见</div>
+                                            <!--供应商除自己的商品外,也显示价格等级-->
+                                            <div class="price_grade" v-else><span class="bold">¥</span><i :class="'icon mIcon i'+p.priceGrade"></i></div>
                                         </template>
-                                    </template>
-                                    <template v-else>
-                                        <div class="price_text_tag ">
-<!--                                            <p class="couponTag" v-if="p.couponsLogo">优惠券</p>-->
-                                            <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
-                                        </div>
-                                        <div class="price_grade "><span class="bold">¥</span><i :class="'icon mIcon i'+p.priceGrade"></i></div>
-                                    </template>
-                                </div>
-                            </a>
-                        </li>
-                    </ul>
-                </div>
-                <div class="part">
-                    <div class="title" id="supProduct">供应商产品</div>
-                    <!--主推商品列表-->
-                    <ul v-if="productLists.length>0" class="productList clear mfw">
-                        <li class="productItem " v-for="p in productLists">
-                            <a class="image" :href="'/product-'+p.productId+'.html'">
-                                <img src="/img/base/placeholder.png" :data-original="p.image" :alt="p.name">
-                                <p class="name" v-html="addhtml + p.name" v-if="p.beautyActFlag==1"></p>
-                                <p class="name" v-html="p.name" v-else></p>
-                                <div class="price">
-                                    <template v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0">
-                                        <!--用户身份 0、个人 1、协销 2、会员机构 3、供应商 4,普通机构-->
-                                        <template v-if="p.priceFlag==1">
-                                            <div class="price_text_tag">
-                                                <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
-                                            </div>
-                                            <div class="main_price_unde">¥价格未公开</div>
-                                        </template>
+                                        <!--未登录-->
                                         <template v-else>
-                                            <template v-if="(p.priceFlag==0 && p.userIdentity!=3) || p.userIdentity==2 || (p.userIdentity==3 && p.shopId==GLOBAL_SHOP_ID)">
-                                                <div class="price_text_tag">
-<!--                                                    <p class="couponTag" v-if="p.couponsLogo">优惠券</p>-->
-                                                    <p class="listTag" v-if="p.actStatus==1">
-                                                        {{p.promotions.name}}
-                                                        <span v-if="p.priceFlag != 1 && PromotionsFormat(p.promotions)">:¥{{p.price | NumFormat}}</span>
-                                                    </p>
-                                                </div>
-                                                <div class="main_price_show" :class="PromotionsFormat(p.promotions) ? 'none' : ''">
-                                                    ¥{{ (PromotionsFormat(p.promotions) ? p.originalPrice : p.price ) | NumFormat }}
-                                                </div>
-                                            </template>
-                                            <template v-else-if="p.priceFlag==2 && p.userIdentity==4">
-                                                <div class="price_text_tag">
-<!--                                                    <p class="couponTag" v-if="p.couponsLogo">优惠券</p>-->
+                                            <div class="price_text_tag ">
+                                                <p class="couponTag" v-if="p.couponsLogo">优惠券</p>
+                                                <template v-if="p.svipProductFlag === 1">
+                                                    <div class="svip-tag">
+                                                        <div class="svip-icon">SVIP</div>
+                                                    </div>
+                                                </template>
+                                                <template v-else>
                                                     <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
-                                                </div>
-                                                <div class="main_price_unde">¥会员可见</div>
-                                            </template>
-                                            <template v-else>
-                                                <div class="price_text_tag">
-<!--                                                    <p class="couponTag" v-if="p.couponsLogo">优惠券</p>-->
-                                                    <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
-                                                </div>
-                                                <div class="price_grade"><span class="bold">¥</span><i :class="'icon mIcon i'+p.priceGrade"></i></div>
-                                            </template>
+                                                </template>
+                                            </div>
+                                            <div class="price_grade "><span class="bold">¥</span><i :class="'icon mIcon i'+p.priceGrade"></i></div>
                                         </template>
-                                    </template>
-                                    <template v-else>
-                                        <div class="price_text_tag ">
-<!--                                            <p class="couponTag" v-if="p.couponsLogo">优惠券</p>-->
-                                            <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
-                                        </div>
-                                        <div class="price_grade "><span class="bold">¥</span><i :class="'icon mIcon i'+p.priceGrade"></i></div>
-                                    </template>
-                                </div>
-                            </a>
-                        </li>
-                    </ul>
-                    <div v-else class="empty">
-                        <img src="/img/order/icon-dianpu.svg">
-                        <div class="msg">
-                            <p>该供应商暂未发布商品,去<a href="/">商城</a>,逛逛吧~</p>
+                                    </div>
+                                </a>
+                            </li>
+                        </ul>
+                        <div v-else class="empty">
+                            <img src="/img/order/icon-dianpu.svg">
+                            <div class="msg">
+                                <p>该供应商暂未发布商品,去<a href="/">商城</a>,逛逛吧~</p>
+                            </div>
                         </div>
                     </div>
-                </div>
+                </template>
             </div>
             <div class="item infoBox">
                 <div class="part">

+ 19 - 10
src/main/resources/templates/user-center/dashboard.html

@@ -34,20 +34,18 @@
                             <img v-else :src="userInfo.image == null ? '' : userInfo.image" alt="">
                         </div>
                         <div class="account">
-                            <div class="name">
-                                <span>{{userInfo.name}}</span>
-                                <a href="/user/setting/upgrade.html" v-if="userInfo.userIdentity === 4 && isPC" onclick="_czc.push(['_trackEvent','个人中心','升级入口','点击','','Um_Event_ClubUpgrade'])">
-                                    去升级会员机构
+                            <div class="name user-info">
+                                <span class="username">{{userInfo.name}}</span>
+                                <!-- 机构类型 -->
+                                <span class="agency" :class="[userIdentityTag.agencyType]" v-html="userIdentityTag.name"></span>
+                                <span class="vip-icon" :class="[userIdentityTag.vipType]" v-if="GLOBAL_USER_IDENTITY === 2 || GLOBAL_VIP_FLAG === 1" v-html="userIdentityTag.vipType.toUpperCase()"></span>
+                                <!-- 升级 -->
+                                <a class="update" href="/user/setting/upgrade.html" v-if="userInfo.userIdentity === 4" onclick="_czc.push(['_trackEvent','个人中心','升级入口','点击','','Um_Event_ClubUpgrade'])">
+                                    去升级资质机构
                                     <div class="name-tips">采美豆</div>
                                 </a>
                             </div>
                             <div class="msg"><span>资料完整度:<em class="red">{{degree}}</em></span><a href="/user/setting/information.html">立即完善</a></div>
-                            <div class="upgrade">
-                                <a href="/user/setting/upgrade.html" v-if="userInfo.userIdentity === 4 && !isPC" onclick="_czc.push(['_trackEvent','个人中心','升级入口','点击','','Um_Event_ClubUpgrade'])">
-                                    去升级会员机构
-                                    <div class="name-tips">采美豆</div>
-                                </a>
-                            </div>
                         </div>
                         <div class="message">
                             <a href="/user/message/list.html">
@@ -57,6 +55,16 @@
                             </a>
                         </div>
                     </div>
+                    <div class="svip-content clear">
+                        <div class="title order">超级会员</div>
+                        <div class="section">
+                            <div v-html="svipTips"></div>
+                            <a v-if="true" href="/user/member.html" :class="vipInfo.vipFlag === 0 ? 'btn' : 'link'">
+                                <span v-if="vipInfo.vipFlag === 0" onclick="_czc.push(['_trackEvent','立即开通','超级会员','跳转会员中心','','Um_Event_RegisterSuper'])">立即开通</span>
+                                <span v-else>进入会员中心&gt;</span>
+                            </a>
+                        </div>
+                    </div>
                     <div class="user-content clear">
                         <div class="title order">我的资产</div>
                         <div class="section">
@@ -214,6 +222,7 @@
 <!-- 引入底部 -->
 <template th:replace="components/footer"></template>
 <template th:replace="components/foot-link"></template>
+<script charset="utf-8" type="text/javascript" th:src="@{/lib/datapicker/moment-2.29.min.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/center.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/user.service.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/user-center/dashboard.js(v=${version})}"></script>

+ 69 - 0
src/main/resources/templates/user-center/member/member-product.html

@@ -0,0 +1,69 @@
+<!DOCTYPE html>
+<html lang="zh-CN" xmlns:th="https://www.thymeleaf.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      xsi:schemaLocation="https://www.thymeleaf.org ">
+<head>
+    <meta charset="UTF-8">
+    <title>采美365网-会员中心-优惠商品</title>
+    <template th:replace="components/head-link"></template>
+    <link th:href="@{/css/base/center.css(v=${version})}" rel="stylesheet" type="text/css">
+    <link th:href="@{/css/user-center/member/member-product.css(v=${version})}" rel="stylesheet" type="text/css">
+</head>
+<body>
+<!-- 引用头部 -->
+<template th:replace="components/header"></template>
+<div id="memberProduct" v-cloak>
+    <div class="banner-box" v-if="bannerImage">
+        <img :src="bannerImage"/>
+    </div>
+    <div class="container goods-list">
+        <div class="goods" v-for="(product, index) in productList" :key="index">
+            <a :href="'/product-' + product.productId + '.html'">
+                <img src="/img/base/placeholder.png" :data-original="product.image"/>
+                <div class="goods-title cm-text-ellipsis-2" v-html="product.name"></div>
+                <div class="goods-tag">
+                    <span class="tag styl1" v-if="product.couponsLogo">优惠券</span>
+                    <div class="svip-tag" v-if="product.svipProductFlag === 1">
+                        <div class="svip-icon ">SVIP</div>
+                        <!-- 公开价格 && (个人机构 || 资质机构) && 开通SVIP 可查看价格-->
+                        <template v-if="showVipPriceTag(product)">
+                            <div class="svip-price">
+                                <span v-html="product.svipPriceTag"></span>
+                            </div>
+                        </template>
+                    </div>
+                </div>
+                <div class="goods-price" v-html="makePrice(product)"></div>
+            </a>
+        </div>
+    </div>
+    <!-- PC分页 -->
+    <div v-if="isPC && totalPage > 1" class="pageWrap cm-clearfix">
+        <a v-if="listQuery.pageNum>1" class="prev" @click="toPagination(listQuery.pageNum*1-1)"
+           href="javascript:void(0);"></a>
+        <template v-for="n in pagination">
+            <a v-if="n" :class="{'on':(n==listQuery.pageNum)}" @click="toPagination(n)"
+               href="javascript:void(0);">{{n}}</a>
+            <span v-else>···</span>
+        </template>
+        <a v-if="listQuery.pageNum < total" class="next" @click="toPagination(listQuery.pageNum*1+1)"
+           href="javascript:void(0);"></a>
+        <span>共<b v-text="totalPage > 1 ? totalPage : 1"></b>页</span>
+        <span>跳至</span>
+        <input v-model="jumpPageSize">
+        <span>页</span>&nbsp;
+        <a class="btn" href="javascript:void(0);" @click="toPagination(jumpPageSize)">点击跳转</a>
+    </div>
+    <!-- h5查看更多 -->
+    <div class="show-more" v-if="!isPC && hasNextPage">
+        <div class="more-btn" @click="showMore()">查看更多</div>
+    </div>
+</div>
+
+<!-- 引入底部 -->
+<template th:replace="components/footer"></template>
+<template th:replace="components/foot-link"></template>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/center.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/product.service.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/user-center/member/memberProduct.js(v=${version})}"></script>
+</body>
+</html>

+ 113 - 0
src/main/resources/templates/user-center/member/member-record.html

@@ -0,0 +1,113 @@
+<!DOCTYPE html>
+<html lang="zh-CN" xmlns:th="https://www.thymeleaf.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      xsi:schemaLocation="https://www.thymeleaf.org ">
+<head>
+    <meta charset="UTF-8">
+    <title>采美365网-会员中心-购买记录</title>
+    <template th:replace="components/head-link"></template>
+    <link th:href="@{/css/base/center.css(v=${version})}" rel="stylesheet" type="text/css">
+    <link th:href="@{/css/user-center/member/member-record.css(v=${version})}" rel="stylesheet" type="text/css">
+</head>
+<body>
+<!-- 引用头部 -->
+<template th:replace="components/header"></template>
+<!--内容区域-->
+<!-- 采美豆明细 -->
+<div id="memberRecord" v-cloak>
+    <div class="navLayout">
+        <div class="crumbs" v-if="isPC">
+            <span>我的采美</span>
+            <span>&gt;</span>
+            <span>超级会员</span>
+        </div>
+        <div class="wrap clear">
+            <!--左侧导航-->
+            <template th:replace="user-center/components/tableft"></template>
+            <div class="right">
+                <!--会员信息-->
+                <!--会员信息-->
+                <div class="vip-bar">
+                    <div class="left-box" :class="isPC ? 'row1' : 'row2'" v-html="svipTips"></div>
+                    <div class="right-box">
+<!--                        <template v-if="vipInfo.vipFlag !== 0">-->
+<!--                            <a href="/user/member-record.html" class="link">购买记录</a>-->
+<!--                            <a href="javascript:void(0)" @click="handleShowRenewPopup" class="btn">续费</a>-->
+<!--                        </template>-->
+                    </div>
+                </div>
+                <!--记录列表-->
+                <div class="record-list">
+                    <div class="record" v-for="(item, index) in recordList" :key="index">
+                        <div class="desc">
+                            <span>超级会员-{{ item.duration }}个月</span>
+                            <span>{{ moment(item.payTime).format('yyyy-MM-DD HH:mm:ss') }}</span>
+                        </div>
+                        <div class="amount">
+                            <span v-if="item.price">¥{{ item.price.toFixed(2) }}</span>
+                            <span v-else>{{ item.userBeans }}采美豆</span>
+                        </div>
+                    </div>
+                </div>
+
+                <!-- PC分页 -->
+                <div v-if="isPC && totalPage > 1" class="pageWrap cm-clearfix">
+                    <a v-if="listQuery.pageNum>1" class="prev" @click="toPagination(listQuery.pageNum*1-1)"
+                       href="javascript:void(0);"></a>
+                    <template v-for="n in pagination">
+                        <a v-if="n" :class="{'on':(n==listQuery.pageNum)}" @click="toPagination(n)"
+                           href="javascript:void(0);">{{n}}</a>
+                        <span v-else>···</span>
+                    </template>
+                    <a v-if="listQuery.pageNum < total" class="next" @click="toPagination(listQuery.pageNum*1+1)"
+                       href="javascript:void(0);"></a>
+                    <span>共<b v-text="totalPage > 1 ? totalPage : 1"></b>页</span>
+                    <span>跳至</span>
+                    <input v-model="jumpPageSize">
+                    <span>页</span>&nbsp;
+                    <a class="btn" href="javascript:void(0);" @click="toPagination(jumpPageSize)">点击跳转</a>
+                </div>
+                <!-- h5查看更多 -->
+                <div class="show-more" v-if="!isPC && hasMore">
+                    <div class="more-btn" @click="showMore()">查看更多</div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <!--遮罩-->
+    <div class="mask" v-if="false"></div>
+    <!--续费弹窗-->
+    <div class="renew-popup" v-if="false">
+        <div class="popup-title">超级会员套餐<span class="close">&times;</span></div>
+        <div class="content combo-list">
+            <div>
+                <div class="combo" :class="{active: index === 1,recommend: index === 1}"
+                     v-for="(i, index) in 3" :key="index">
+                    <div class="how-mounts">12个月</div>
+                    <div class="price"><i>¥</i>4800</div>
+                    <div class="average">400元/月</div>
+                </div>
+            </div>
+            <div>
+                <div class="pay-btn"><a href="">立即支付4800元开通</a></div>
+                <div class="pay-btn plain"><a href="">抵扣480000个采美豆开通</a></div>
+            </div>
+        </div>
+    </div>
+    <!--立即支付弹窗-->
+    <div class="payment-confirm-popup" v-if="false">
+        <div class="popup-title">请在您新打开的页面上完成付款!<span class="close">&times;</span></div>
+        <div class="content">完成付款后请点击下面的按钮</div>
+        <div class="popup-btn"><a href="" class="confirm-btn">已完成支付</a></div>
+    </div>
+</div>
+
+
+<!-- 引入底部 -->
+<template th:replace="components/footer"></template>
+<template th:replace="components/foot-link"></template>
+<script charset="utf-8" type="text/javascript" src="/lib/datapicker/moment-2.29.min.js"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/center.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/user.service.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/user-center/member/memberRecord.js(v=${version})}"></script>
+</body>
+</html>

+ 199 - 0
src/main/resources/templates/user-center/member/member.html

@@ -0,0 +1,199 @@
+<!DOCTYPE html>
+<html lang="zh-CN" xmlns:th="https://www.thymeleaf.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      xsi:schemaLocation="https://www.thymeleaf.org ">
+<head>
+    <meta charset="UTF-8">
+    <title>采美365网-会员中心</title>
+    <template th:replace="components/head-link"></template>
+    <link th:href="@{/css/base/center.css(v=${version})}" rel="stylesheet" type="text/css">
+    <link th:href="@{/css/user-center/member/member-page.css(v=${version})}" rel="stylesheet" type="text/css">
+</head>
+<body>
+<!-- 引用头部 -->
+<template th:replace="components/header"></template>
+<!--内容区域-->
+<!-- 采美豆明细 -->
+<div id="memberPage" v-cloak :style="{ marginBottom: GLOBAL_VIP_FLAG === 1 ? '0' : ''}">
+    <div class="navLayout">
+        <div class="crumbs" v-if="isPC">
+            <span>我的采美</span>
+            <span>&gt;</span>
+            <span>超级会员</span>
+        </div>
+        <div class="wrap clear">
+            <!--左侧导航-->
+            <template th:replace="user-center/components/tableft"></template>
+            <div class="right">
+                <!--会员信息-->
+                <div class="vip-bar">
+                    <div class="left-box" :class="isPC ? 'row1' : 'row2'" v-html="svipTips"></div>
+                    <div class="right-box">
+                        <template v-if="vipInfo.vipFlag !== 0">
+                            <a href="/user/member-record.html" class="link">购买记录</a>
+                            <a href="javascript:void(0)" @click="handleShowRenewPopup" class="btn" onclick="_czc.push(['_trackEvent','续费超级会员','超级会员','续费按钮','','Um_Event_RenewButton'])">续费</a>
+                        </template>
+                    </div>
+                </div>
+                <!--套餐价格 仅未开通和到期显示-->
+                <div class="section" v-if="vipInfo.vipFlag !== 1" id="vipPackage">
+                    <div class="section-title">超级会员套餐</div>
+                    <div class="content combo-list">
+                        <template v-if="comboInfo.length > 0">
+                            <div>
+                                <template v-for="(item, index) in comboInfo">
+                                    <div class="combo" :class="{active: index === currentIndex,recommend: index === 0}"
+                                         :key="index" @click="chooseCombo(index)">
+                                        <div class="how-mounts">{{ item.duration }}个月</div>
+                                        <div class="price"><i>¥</i>{{ item.price }}</div>
+                                        <div class="average">{{ item.price / item.duration }}元/月</div>
+                                    </div>
+                                </template>
+                            </div>
+                            <div>
+                                <div class="pay-btn" onclick="_czc.push(['_trackEvent','开通超级会员','超级会员','支付1','','Um_Event_RegisterSuperPayOne'])">
+                                    <a href="javascript:void(0);" @click="payAction(1, 1)">
+                                        立即支付{{ comboInfo[currentIndex].price }}元开通
+                                    </a>
+                                </div>
+                                <div class="pay-btn plain" onclick="_czc.push(['_trackEvent','开通超级会员','超级会员','采美豆抵扣1','','Um_Event_RegisterSuperByBeansOne'])">
+                                    <a href="javascript:void(0);" @click="payAction(2, 1)">
+                                        或抵扣{{ comboInfo[currentIndex].price * comboInfo[currentIndex].proportion }}个采美豆开通
+                                    </a>
+                                </div>
+                            </div>
+                        </template>
+                        <span v-else>暂无可选套餐~</span>
+                    </div>
+                </div>
+                <!--服务列表-->
+                <div class="section">
+                    <div class="section-title">专属特权</div>
+                    <div class="content service-list">
+                        <div v-for="(item, index) in serviceList" :key="index">
+                            <img :src="'/img/member/pc-cm-svip-icon' + (index + 1) + '.png'"
+                                 v-if="isPC"/>
+                            <img :src="'/img/member/h5-cm-svip-icon' + (index + 1) + '.png'"
+                                 v-else/>
+                            <span class="tit" v-html="item.name"></span>
+                            <span class="sub-tit" v-html="item.subTitle"></span>
+                        </div>
+                    </div>
+                </div>
+                <!--优惠券列表-->
+                <div class="section" v-if="couponList.length > 0">
+                    <div class="section-title">专属优惠券<span>每月可领4个</span></div>
+                    <div class="content coupon-list">
+                        <template v-if="couponList.length > 0">
+                            <div v-for="(item, index) in couponList" :key="index" :class="{'un-received':item.useStatus === 1}">
+                                <span class="type" v-html="item.typeText"></span>
+                                <div class="amount"><i>¥</i>{{ item.couponAmount }}</div>
+                                <div class="condition">满{{ item.touchPrice }}可用</div>
+                                <template>
+                                    <div class="condition" v-if="item.couponType == 0">
+                                      {{ item.productType && item.productType == 1 ? '全商城商品通用' : '仅可购买指定商品'  }}
+                                    </div>
+                                    <div class="condition" v-if="item.couponType == 1">
+                                      {{ item.categoryType == 1 ? '仅限购买产品类商品' : '仅限购买仪器类商品' }}
+                                    </div>
+                                    <div class="condition" v-if="item.couponType == 3">
+                                        <abbr :title="'仅限购买店铺【' + item.shopName + '】的商品'">仅限购买店铺【...】的商品</abbr>
+                                    </div>
+                                    <div class="condition" v-if="item.couponType == 4 || item.couponType == 2">全商城商品通用</div>
+                                </template>
+                                <div class="receive-btn" v-if="!item.getFlag" @click="receiveCoupon(item.couponId)">立即领取</div>
+                                <div class="receive-btn" v-else-if="item.useStatus === 1"  @click="toUseCoupon(item)">去使用</div>
+                                <div class="receive-btn" v-else="item.useStatus === 2">已使用</div>
+                            </div>
+                        </template>
+                        <span v-else>暂无可领取优惠券~</span>
+                    </div>
+
+                </div>
+                <!--优惠商品-->
+                <div class="section" v-if="productList.length > 0">
+                    <div class="section-title clear">优惠商品<a href="/user/member-product.html">查看更多&gt;</a></div>
+                    <div class="content goods-list">
+                        <div class="goods" v-for="(product, index) in productList" :key="index">
+                            <a :href="'/product-' + product.productId + '.html'">
+                                <img src="/img/base/placeholder.png" :data-original="product.image"/>
+                                <div class="goods-title cm-text-ellipsis-2" v-html="product.name"></div>
+                                <div class="goods-tag">
+                                    <span class="tag styl1" v-if="product.couponsLogo">优惠券</span>
+                                    <div class="svip-tag" v-if="product.svipProductFlag === 1">
+                                        <div class="svip-icon ">SVIP</div>
+                                        <!-- 公开价格 && (个人机构 || 资质机构) && 开通SVIP 可查看价格-->
+                                        <template v-if="showVipPriceTag(product)">
+                                            <div class="svip-price">
+                                                <span v-html="product.svipPriceTag"></span>
+                                            </div>
+                                        </template>
+                                    </div>
+                                </div>
+                                <div class="goods-price" v-html="makePrice(product)"></div>
+                            </a>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <!--底部支付按钮 仅未开通和到期显示-->
+    <div class="pay-amount-bottom" id="pay-amount-bottom" v-if="showBottomBtns">
+        <div>
+            <div class="pay-btn plain" onclick="_czc.push(['_trackEvent','开通超级会员','超级会员','采美豆抵扣2','','Um_Event_RegisterSuperByBeansTwo'])">
+                <a href="javascript:void(0);" @click="payAction(2, 2)">
+                    抵扣{{ comboInfo[currentIndex].price * comboInfo[currentIndex].proportion }}个采美豆开通
+                </a>
+            </div>
+            <div class="pay-btn" onclick="_czc.push(['_trackEvent','开通超级会员','超级会员','支付2','','Um_Event_RegisterSuperPayTwo'])">
+                <a href="javascript:void(0);" @click="payAction(1, 2)">
+                    立即支付{{ comboInfo[currentIndex].price }}元开通
+                </a>
+            </div>
+        </div>
+    </div>
+    <!--遮罩-->
+    <div class="mask" v-if="showMask"></div>
+    <!--续费弹窗-->
+    <div class="renew-popup" v-if="showRenewPopup">
+        <div class="popup-title">续费超级会员套餐<span class="close" @click="handleCloseRenewPopup">&times;</span></div>
+        <div class="content combo-list">
+            <template v-if="comboInfo.length > 0">
+                <div>
+                    <template v-for="(item, index) in comboInfo">
+                        <div class="combo" :class="{active: index === currentIndex,recommend: index === 0}"
+                             :key="index" @click="chooseCombo(index)">
+                            <div class="how-mounts">{{ item.duration }}个月</div>
+                            <div class="price"><i>¥</i>{{ item.price }}</div>
+                            <div class="average">{{ item.price / item.duration }}元/月</div>
+                        </div>
+                    </template>
+                </div>
+                <div>
+                    <div class="pay-btn" onclick="_czc.push(['_trackEvent','续费超级会员','超级会员','支付','','Um_Event_RenewSuperPay'])">
+                        <a href="javascript:void(0);" @click="payAction(1, 3)">
+                            立即支付{{ comboInfo[currentIndex].price }}元开通
+                        </a>
+                    </div>
+                    <div class="pay-btn plain" onclick="_czc.push(['_trackEvent','续费超级会员','超级会员','采美豆抵扣','','Um_Event_RenewSuperPayByBeans'])">
+                        <a href="javascript:void(0);" @click="payAction(2, 3)">
+                            或抵扣{{ comboInfo[currentIndex].price * comboInfo[currentIndex].proportion }}个采美豆开通
+                        </a>
+                    </div>
+                </div>
+            </template>
+            <span v-else>暂无可选套餐~</span>
+        </div>
+    </div>
+</div>
+
+<!-- 引入底部 -->
+<template th:replace="components/footer"></template>
+<template th:replace="components/foot-link"></template>
+<script charset="utf-8" type="text/javascript" src="/lib/datapicker/moment-2.29.min.js"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/center.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/user.service.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/product.service.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/user-center/member/memberPage.js(v=${version})}"></script>
+</body>
+</html>

+ 20 - 6
src/main/resources/templates/user-center/order/detail.html

@@ -73,6 +73,7 @@
                                     <p v-if="orderInfo.discountFee>0">经理折扣:<span class="none">¥{{orderInfo.discountFee | NumFormat}}</span> </p>
                                     <p v-if="orderInfo.promotionFullReduction>0">促销满减:<span class="red">¥{{orderInfo.promotionFullReduction | NumFormat}}</span> </p>
                                     <p>优惠券:<span class="red">¥{{orderInfo.couponAmount | NumFormat}}</span> </p>
+                                    <p v-if="orderInfo.svipFullReduction">超级会员优惠:<span class="red">¥{{orderInfo.svipFullReduction | NumFormat}}</span> </p>
                                     <p v-if="orderInfo.presentCount>0">赠品数:<span class="none">{{orderInfo.presentCount}}</span></p>
                                 </div>
                             </div>
@@ -107,12 +108,25 @@
                                             <div class="text">
                                                 <p class="tit">{{pros.name}}</p>
                                                 <div class="info">
-                                                    <p v-if="pros.productCategory != 2">规格:<span class="none">{{pros.productUnit ? pros.productUnit : ''}}</span> </p>
-                                                    <p>数量:<span class="none">{{pros.num}}</span> </p>
-                                                    <p>单价:<span class="none">¥{{pros.price | NumFormat}}</span></p>
-                                                    <p>税率:<span class="none">{{pros.taxRate}}%</span></p>
-                                                    <p>折扣:<span class="none">{{pros.discount == null ? '0' : pros.discount}}%</span></p>
-                                                    <p>折后单价:<span class="none">¥{{pros.discountPrice | NumFormat}}</span></p>
+                                                    <p class="col" v-if="pros.productCategory != 2">规格:<span class="none">{{pros.productUnit ? pros.productUnit : ''}}</span> </p>
+                                                    <p class="col">数量:<span class="none">{{pros.num}}</span> </p>
+                                                    <div class="col">
+                                                        <template v-if="pros.svipPriceFlag === 1">
+                                                            <span>单价: </span>
+                                                            <span class="none"><del>¥{{pros.price | NumFormat}}</del></span>
+                                                            <!--超级会员价格标签-->
+                                                            <div class="svip-tag" >
+                                                                <div class="svip-icon">SVIP</div>
+                                                                <div class="svip-price">
+                                                                    <span v-html="pros.svipPriceTag"></span>
+                                                                </div>
+                                                            </div>
+                                                        </template>
+                                                        <p v-else>单价: <span class="none">¥{{pros.price | NumFormat}}</span></p>
+                                                    </div>
+                                                    <p class="col">税率:<span class="none">{{pros.taxRate}}%</span></p>
+                                                    <p class="col" v-if="pros.svipPriceType === 2">折扣:<span class="none">{{pros.discount == null ? '0' : pros.discount}}%</span></p>
+                                                    <p class="col">折后单价:<span class="none">¥{{pros.discountPrice | NumFormat}}</span></p>
                                                     <!-- 促销活动 -->
                                                     <div v-if="pros.productPromotion && pros.productPromotion.type !=3" class="priceTag">
                                                         <i v-if="pros.productPromotion.type==1 && pros.productPromotion.mode==1" @click="toggleThisLadder($event)" class="tag icon mIcon" v-text="pros.productPromotion.name+':¥'+toFloat(pros.productPromotion.touchPrice)"></i>

+ 1 - 1
src/main/resources/templates/user-center/order/list.html

@@ -163,7 +163,7 @@
 <template th:replace="components/footer"></template>
 <template th:replace="components/foot-link"></template>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/center.js(v=${version})}"></script>
-<script charset="utf-8" type="text/javascript" src="/lib/datapicker/moment.min.js"></script>
+<script charset="utf-8" type="text/javascript" src="/lib/datapicker/moment-2.29.min.js"></script>
 <script charset="utf-8" type="text/javascript" src="/lib/datapicker/jquery.daterangepicker.js"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/order.service.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/user-center/order/list.js(v=${version})}"></script>

+ 1 - 1
src/main/resources/templates/user-center/repair/list.html

@@ -121,7 +121,7 @@
 <template th:replace="components/footer"></template>
 <template th:replace="components/foot-link"></template>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/center.js(v=${version})}"></script>
-<script charset="utf-8" type="text/javascript" src="/lib/datapicker/moment.min.js"></script>
+<script charset="utf-8" type="text/javascript" src="/lib/datapicker/moment-2.29.min.js"></script>
 <script charset="utf-8" type="text/javascript" src="/lib/datapicker/jquery.daterangepicker.js"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/repair.service.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/user-center/repair/list.js(v=${version})}"></script>

+ 14 - 3
src/main/resources/templates/user-center/setting/information.html

@@ -115,19 +115,28 @@
                             </div>
                             <div class="formLine">
                                 <p id="firstClubType"><em>*</em>机构类型:</p>
-                                <label class="diyBox"><input type="radio" name="firstShopType" v-model="clubUpgradeUser.firstClubType" value="1"><i class="icon mIcon">医美</i></label>
-                                <label class="diyBox"><input type="radio" name="firstShopType" v-model="clubUpgradeUser.firstClubType" value="2" checked><i class="icon mIcon">生美</i></label>
+                                <label class="diyBox" @click="handleChangeType(1)"><input type="radio" name="firstShopType" v-model="clubUpgradeUser.firstClubType" value="1"><i class="icon mIcon">医美</i></label>
+                                <label class="diyBox" @click="handleChangeType(2)"><input type="radio" name="firstShopType" v-model="clubUpgradeUser.firstClubType" value="2" checked><i class="icon mIcon">生美</i></label>
                                 <span class="errTips icon mIcon" tips="" :class="typeflag?'show':''">请选择公司类型</span>
                             </div>
+                            <!-- 医美 -->
                             <div v-show="clubUpgradeUser.firstClubType == 1" class="formLine">
                                 <label class="diyBox second"><input type="radio" name="secondClubType" v-model="clubUpgradeUser.secondClubType" value="1" checked><i class="icon mIcon">诊所</i></label>
                                 <label class="diyBox second"><input type="radio" name="secondClubType" v-model="clubUpgradeUser.secondClubType" value="2" ><i class="icon mIcon">门诊</i></label>
                                 <label class="diyBox second"><input type="radio" name="secondClubType" v-model="clubUpgradeUser.secondClubType" value="3" ><i class="icon mIcon">医院</i></label>
+                                <label class="diyBox second"><input type="radio" name="secondClubType" v-model="clubUpgradeUser.secondClubType" value="4" ><i class="icon mIcon">其他</i></label>
+                                <span class="errTips icon mIcon" tips="" :class="secondtypeflag?'show':''">请选择公司类型</span>
+                            </div>
+                            <!-- 生美 -->
+                            <div v-show="clubUpgradeUser.firstClubType == 2" class="formLine">
+                                <label class="diyBox second"><input type="radio" name="secondClubType" v-model="clubUpgradeUser.secondClubType" value="5" checked><i class="icon mIcon">美容院</i></label>
+                                <label class="diyBox second"><input type="radio" name="secondClubType" v-model="clubUpgradeUser.secondClubType" value="6" ><i class="icon mIcon">养生馆</i></label>
+                                <label class="diyBox second"><input type="radio" name="secondClubType" v-model="clubUpgradeUser.secondClubType" value="7" ><i class="icon mIcon">其他</i></label>
                                 <span class="errTips icon mIcon" tips="" :class="secondtypeflag?'show':''">请选择公司类型</span>
                             </div>
                             <div v-show="clubUpgradeUser.firstClubType == 1" class="formLine">
                                 <div class="form-upload">
-                                    <p>资质:</p>
+                                    <p><em>*</em>资质:</p>
                                     <div class="form-upload-image" v-if="clubUpgradeUser.medicalPracticeLicense!=''&&clubUpgradeUser.medicalPracticeLicense!=null">
                                         <img class="upload-img" :src="clubUpgradeUser.medicalPracticeLicense" alt="" id="medicalPracticeLicenseImg" @click="showViewerImageFn2()">
                                         <i class="icon mIcon" @click="deleteMedicalImage()"></i>
@@ -142,6 +151,8 @@
                                     <i class="icon icon-wen"></i>
                                     <div class="wen-tips">点击图片可放大图片</div>
                                 </div>
+                                <div style="clear:both"></div>
+                                <span class="errTips icon mIcon" tips="" :class="medicalPracticeLicenseFlag?'show':''">请上传医疗执业许可证</span>
                             </div>
                             <div v-if="clubUpgradeUser.secondClubType == 2 || clubUpgradeUser.secondClubType == 3" class="formLine">
                                 <p>科室:</p>

+ 16 - 5
src/main/resources/templates/user-center/setting/upgrade.html

@@ -29,8 +29,8 @@
                     <img src="/img/base/loading.gif">
                 </div>
                 <div class="container clear" v-else>
-                    <div class="title">升级会员机构</div>
-                    <div class="title-tips"><p>补充以下详细信息即可升级为会员机构,享受更多更好的服务</p></div>
+                    <div class="title">升级资质机构</div>
+                    <div class="title-tips"><p>补充以下详细信息即可升级为资质机构,享受更多更好的服务</p></div>
                     <div class="registerClub clear">
                         <form>
                             <div class="formLine">
@@ -108,19 +108,28 @@
                             </div>
                             <div class="formLine">
                                 <p><em>*</em>机构类型:</p>
-                                <label class="diyBox"><input type="radio" name="firstShopType" v-model="clubUpgradeUser.firstClubType" value="1" ><i class="icon mIcon">医美</i></label>
-                                <label class="diyBox"><input type="radio" name="firstShopType" v-model="clubUpgradeUser.firstClubType" value="2" checked><i class="icon mIcon">生美</i></label>
+                                <label class="diyBox" @click="handleChangeType(1)"><input type="radio" name="firstShopType" v-model="clubUpgradeUser.firstClubType" value="1" ><i class="icon mIcon">医美</i></label>
+                                <label class="diyBox" @click="handleChangeType(2)"><input type="radio" name="firstShopType" v-model="clubUpgradeUser.firstClubType" value="2" checked><i class="icon mIcon">生美</i></label>
                                 <span class="errTips icon mIcon" tips="" :class="typeflag?'show':''">请选择公司类型</span>
                             </div>
+                            <!-- 医美 -->
                             <div v-show="clubUpgradeUser.firstClubType == 1" class="formLine">
                                 <label class="diyBox second"><input type="radio" name="secondClubType" v-model="clubUpgradeUser.secondClubType" value="1" checked><i class="icon mIcon">诊所</i></label>
                                 <label class="diyBox second"><input type="radio" name="secondClubType" v-model="clubUpgradeUser.secondClubType" value="2" ><i class="icon mIcon">门诊</i></label>
                                 <label class="diyBox second"><input type="radio" name="secondClubType" v-model="clubUpgradeUser.secondClubType" value="3" ><i class="icon mIcon">医院</i></label>
+                                <label class="diyBox second"><input type="radio" name="secondClubType" v-model="clubUpgradeUser.secondClubType" value="4" ><i class="icon mIcon">其他</i></label>
+                                <span class="errTips icon mIcon" tips="" :class="secondtypeflag?'show':''">请选择公司类型</span>
+                            </div>
+                            <!-- 生美 -->
+                            <div v-show="clubUpgradeUser.firstClubType == 2" class="formLine">
+                                <label class="diyBox second"><input type="radio" name="secondClubType" v-model="clubUpgradeUser.secondClubType" value="5" checked><i class="icon mIcon">美容院</i></label>
+                                <label class="diyBox second"><input type="radio" name="secondClubType" v-model="clubUpgradeUser.secondClubType" value="6" ><i class="icon mIcon">养生馆</i></label>
+                                <label class="diyBox second"><input type="radio" name="secondClubType" v-model="clubUpgradeUser.secondClubType" value="7" ><i class="icon mIcon">其他</i></label>
                                 <span class="errTips icon mIcon" tips="" :class="secondtypeflag?'show':''">请选择公司类型</span>
                             </div>
                             <div v-show="clubUpgradeUser.firstClubType == 1" class="formLine">
                                 <div class="form-upload">
-                                    <p>资质:</p>
+                                    <p><em>*</em>资质:</p>
                                     <div class="form-upload-image" v-if="clubUpgradeUser.medicalPracticeLicense!=''&&clubUpgradeUser.medicalPracticeLicense!=null">
                                         <img class="upload-img" :src="clubUpgradeUser.medicalPracticeLicense" alt="" id="medicalPracticeLicenseImg" @click="showViewerImageFn2()">
                                         <i class="icon mIcon" @click="deleteMedicalImage()"></i>
@@ -135,6 +144,8 @@
                                     <i class="icon icon-wen"></i>
                                     <div class="wen-tips">点击图片可放大图片</div>
                                 </div>
+                                <div style="clear:both"></div>
+                                <span class="errTips icon mIcon" tips="" :class="medicalPracticeLicenseFlag?'show':''">请上传医疗执业许可证</span>
                             </div>
                             <div v-if="clubUpgradeUser.secondClubType == 2 || clubUpgradeUser.secondClubType == 3" class="formLine">
                                 <p>科室:</p>

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