Переглянути джерело

Merge remote-tracking branch 'remotes/origin/developerC' into developerA

# Conflicts:
#	src/main/java/com/caimei/www/controller/authorized/user/UserPageController.java
#	src/main/resources/templates/document/beauty-archive-detail.html
喻文俊 3 роки тому
батько
коміт
99e8ac6910
44 змінених файлів з 1134 додано та 147 видалено
  1. 5 10
      src/main/java/com/caimei/www/controller/authorized/user/UserPageController.java
  2. 69 60
      src/main/resources/static/css/account/login.css
  3. 6 4
      src/main/resources/static/css/product/detail.h5.css
  4. 5 3
      src/main/resources/static/css/product/detail.pc.css
  5. 8 5
      src/main/resources/static/css/supplier-center/order/detail.css
  6. 4 2
      src/main/resources/static/css/supplier-center/order/orderlist.css
  7. 124 0
      src/main/resources/static/css/user-center/collection/collection.css
  8. 8 0
      src/main/resources/static/css/user-center/dashboard.css
  9. BIN
      src/main/resources/static/img/account/icon-collection-empty@2x.png
  10. BIN
      src/main/resources/static/img/account/icon-collection-none@2x.png
  11. BIN
      src/main/resources/static/img/account/icon-collection@2x.png
  12. BIN
      src/main/resources/static/img/account/icon-weigouxuan@2x.png
  13. BIN
      src/main/resources/static/img/account/icon-yigouxuan@2x.png
  14. 25 7
      src/main/resources/static/js/account/login.js
  15. 3 5
      src/main/resources/static/js/common/ajax.service.js
  16. 52 0
      src/main/resources/static/js/common/serviceapi/product.service.js
  17. 35 0
      src/main/resources/static/js/common/serviceapi/shopping.service.js
  18. 24 0
      src/main/resources/static/js/product/detail.js
  19. 9 3
      src/main/resources/static/js/shopping/cart.js
  20. 4 1
      src/main/resources/static/js/shopping/confirm.js
  21. 6 10
      src/main/resources/static/js/supplier-center/order/delivergoods.js
  22. 3 2
      src/main/resources/static/js/supplier-center/order/logistics.js
  23. 1 1
      src/main/resources/static/js/supplier-center/order/qualifications.js
  24. 2 2
      src/main/resources/static/js/supplier-center/shop/decoration.js
  25. 8 0
      src/main/resources/static/js/supplier-center/shop/preview.js
  26. 311 0
      src/main/resources/static/js/user-center/collection/collection.js
  27. 0 5
      src/main/resources/static/lib/datapicker/moment.min.js
  28. 0 1
      src/main/resources/static/lib/jquery-3.5.1.min.js
  29. 0 0
      src/main/resources/static/lib/jquery-3.5.1.min.map
  30. 1 1
      src/main/resources/static/lib/js/pdfh5.js
  31. 229 0
      src/main/resources/static/lib/slideVerify.js
  32. 9 6
      src/main/resources/templates/account/login.html
  33. 2 2
      src/main/resources/templates/account/register-club.html
  34. 2 2
      src/main/resources/templates/components/header.html
  35. 1 1
      src/main/resources/templates/document/beauty-archive-detail.html
  36. 8 2
      src/main/resources/templates/product/detail.html
  37. 1 1
      src/main/resources/templates/supplier-center/order/delivery.html
  38. 5 4
      src/main/resources/templates/supplier-center/order/detail.html
  39. 2 1
      src/main/resources/templates/supplier-center/order/list.html
  40. 3 2
      src/main/resources/templates/supplier-center/shop/preview.html
  41. 4 2
      src/main/resources/templates/supplier/index.html
  42. 141 0
      src/main/resources/templates/user-center/collection/collection.html
  43. 11 0
      src/main/resources/templates/user-center/dashboard.html
  44. 3 2
      src/main/resources/templates/we_chat/redirect_uri.html

+ 5 - 10
src/main/java/com/caimei/www/controller/authorized/user/UserPageController.java

@@ -64,6 +64,8 @@ public class UserPageController extends BaseController {
 	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";
 
     /** 我的采美 */
     @GetMapping("/user/dashboard.html")
@@ -186,15 +188,8 @@ public class UserPageController extends BaseController {
     @GetMapping("/user/coupon-exchange.html")
     public String couponExchange() {return COUPON_EXCHANGE;}
 
-    /** 兑换优惠券 */
-    @GetMapping("/user/member.html")
-    public String member() {return MEMBER_PAGE;}
-
-    /** 会员优惠商品列表 */
-    @GetMapping("/user/member-product.html")
-    public String memberProduct() {return MEMBER_PRODUCT_LIST;}
+    /** 收藏商品 */
+    @GetMapping("/user/collection.html")
+    public String collection() {return COLLECTION;}
 
-    /** 会员购买记录 */
-    @GetMapping("/user/member-record.html")
-    public String memberRecord() {return MEMBER_RECORD;}
 }

+ 69 - 60
src/main/resources/static/css/account/login.css

@@ -5,39 +5,44 @@ li{list-style:none}
  * PC端
  */
 @media screen and (min-width:768px){
-footer .footTop{display:none;}
-.loginWrap{width:950px;height:366px;overflow:hidden;background:#FFF url(/img/account/login.png) no-repeat 30px center;margin:95px auto;box-sizing:border-box;box-shadow:0 10px 20px 0 rgba(255,180,150,0.17);border-radius:2px}
-.loginForm{float:right;width:400px;padding:20px 24px;font-size:14px;position:relative}
-.loginForm h1{color:#22272e;font-size:24px;font-weight:bold;line-height:30px}
-.loginForm h2{color:#22272e;font-size:16px;font-weight:normal;line-height:24px}
-.loginForm form{margin-top:60px}
-.loginForm .formLine{height:70px;padding:0;}
-.loginForm input{height:48px;line-height:48px;}
-.loginForm .checked{top:14px;}
-.loginForm .forget{text-align:right;color:#4a4f58;font-size:14px;line-height:14px;margin-top:0px}
-.loginForm .submit{height:44px;line-height:0;font-size:0;text-align:justify;margin-top:20px}
-.loginForm .submit:after{content:'';display:inline-block;width:100%}
-.loginForm .submit .btn{display:inline-block;box-sizing:border-box;width:192px;height:44px;line-height:44px;background-color:#ffe6dc;border-radius:2px;border:solid 1px #e15616;text-align:center;color:#e15616;font-size:14px;cursor:pointer}
-.loginForm .submit button.btn{background-color:#e15616;color:#FFF}
-.loginForm .submit .btn:hover{opacity:.8}
-.loginForm .codeBtn{position:absolute;right:0;top:0;width:100px;height:100px}
-.loginForm .codeBtn:before{width:100px;height:100px;background-position:-138px -146px}
-.loginForm .qrCodeBox{text-align:center}
-.loginForm .qrCode{width:168px;height:168px;border-radius:2px;border:solid 1px #ffb496;margin:27px auto 0 auto}
-.loginForm .qrInfo{text-align:center;height:44px;line-height:44px;font-size:16px;color:#93979f}
-.loginForm .changeBtn{display:inline-block;height:24px;line-height:24px;color:#e15616;font-size:16px;position:absolute;right:24px;top:20px}
-.loginForm .changeBtn:before{width:24px;height:24px;background-position:-175px -251px;vertical-align:top;margin-right:6px}
-.loginForm .showPwd{position:absolute;right:22px;top:16px;width:22px;height:16px;cursor:pointer}
-.loginForm .showPwd:before{width:22px;height:20px;background-position:-240px -299px}
-.loginForm .showPwd.on:before{width:22px;height:20px;background-position:-205px -299px}
-#qrCodeWrap{position:relative}
-#qrCodeWrap .model{position:absolute;width:200px;height:200px;top:15px;left:98px;display:flex;justify-content:center;align-items:center;background:rgba(255,255,255,1);color:#000;z-index:99999;cursor:pointer;border:1px solid #EBEBEB}
-#qrCodeWrap .model .refresh{width:21px;height:21px;display:block;margin:0 auto 3px}
-#qrCodeWrap .model .refresh-div{width:100px;height:64px;display:block}
-#qrCodeWrap .model .refresh-div p{text-align:center;font-size:14px;line-height:20px}
-.baseHeadCenter.account .accountLogin{display:none}
-.bg{width: 100%;height: 100%;position: fixed;top: 0;left: 0;right: 0;bottom: 0;z-index: 99999999;font-family: inherit;overflow: hidden;background-color: #4444444f;opacity: 0}
- .bg .bg-content{width: 338px;height: fit-content;position: absolute;top: 0;bottom: 0;right: 0;left: 0;margin: auto;z-index: 9999;background: #fff;}
+ footer .footTop{display:none;}
+ .loginWrap{width:950px;height:400px;overflow:hidden;background:#FFF url(/img/account/login.png) no-repeat 30px center;margin:95px auto;box-sizing:border-box;box-shadow:0 10px 20px 0 rgba(255,180,150,0.17);border-radius:2px}
+ .loginForm{float:right;width:400px;padding:20px 24px;font-size:14px;position:relative;height: 100%;box-sizing: border-box;}
+ .loginForm h1{color:#22272e;font-size:24px;font-weight:bold;line-height:30px}
+ .loginForm h2{color:#22272e;font-size:16px;font-weight:normal;line-height:24px}
+ .loginForm form{margin-top:10px;}
+ .loginForm .formLine{height:70px;padding:0;}
+ .loginForm input{height:48px;line-height:48px;}
+ .loginForm .checked{top:14px;}
+ .loginForm .forget{text-align:right;color:#4a4f58;font-size:14px;line-height:30px;margin-top:0px;}
+ .loginForm .forget .btn{float: left;color: #E15621;}
+ .loginForm .submit{height:44px;line-height:0;font-size:0;text-align:justify;margin-top:20px}
+ .loginForm .submit:after{content:'';display:inline-block;width:100%}
+ .loginForm .submit .btn{display:inline-block;box-sizing:border-box;width:100%;height:44px;line-height:44px;background-color:#ffe6dc;border-radius:2px;border:solid 1px #e15616;text-align:center;color:#e15616;font-size:14px;cursor:pointer}
+ .loginForm .submit button.btn{background-color:#e15616;color:#FFF}
+ .loginForm .submit button.disabled{background-color:#E1E1E1;color:#F7F7F7;border-color:#E1E1E1;}
+ /*.loginForm .submit .btn:hover{opacity:.8}*/
+ .loginForm .codeBtn{position:absolute;right:0;top:0;width:100px;height:100px}
+ .loginForm .codeBtn:before{width:100px;height:100px;background-position:-138px -146px}
+ .loginForm .qrCodeBox{text-align:center}
+ .loginForm .qrCode{width:168px;height:168px;border-radius:2px;border:solid 1px #ffb496;margin:27px auto 0 auto}
+ .loginForm .qrInfo{text-align:center;height:44px;line-height:44px;font-size:16px;color:#93979f}
+ .loginForm .changeBtn{display:inline-block;height:24px;line-height:24px;color:#e15616;font-size:16px;position:absolute;right:24px;top:20px}
+ .loginForm .changeBtn:before{width:24px;height:24px;background-position:-175px -251px;vertical-align:top;margin-right:6px}
+ .loginForm .showPwd{position:absolute;right:22px;top:16px;width:22px;height:16px;cursor:pointer}
+ .loginForm .showPwd:before{width:22px;height:20px;background-position:-240px -299px}
+ .loginForm .showPwd.on:before{width:22px;height:20px;background-position:-205px -299px}
+ .verify-wrap{margin-top: 0;}
+ .fix-tips {background: -webkit-gradient(linear,left top,right top,color-stop(0,#4d4d4d),color-stop(.4,#4d4d4d),color-stop(.5,#fff),color-stop(.6,#4d4d4d),color-stop(1,#4d4d4d));-webkit-background-clip: text;-webkit-text-fill-color: transparent;-webkit-animation: slidetounlock 3s infinite;color: #787878 !important;}
+ @keyframes slidetounlock { 0% {background-position: -100px 0;} 100% {background-position: 100px 0;} }
+ #qrCodeWrap{position:relative}
+ #qrCodeWrap .model{position:absolute;width:200px;height:200px;top:15px;left:98px;display:flex;justify-content:center;align-items:center;background:rgba(255,255,255,1);color:#000;z-index:99999;cursor:pointer;border:1px solid #EBEBEB}
+ #qrCodeWrap .model .refresh{width:21px;height:21px;display:block;margin:0 auto 3px}
+ #qrCodeWrap .model .refresh-div{width:100px;height:64px;display:block}
+ #qrCodeWrap .model .refresh-div p{text-align:center;font-size:14px;line-height:20px}
+ .baseHeadCenter.account .accountLogin{display:none}
+ .bg{width: 100%;height: 100%;position: fixed;top: 0;left: 0;right: 0;bottom: 0;z-index: 99999999;font-family: inherit;overflow: hidden;background-color: #4444444f;opacity: 0}
+ .bg .bg-content{width: 338px;height: 234px;position: absolute;top: 0;bottom: 0;right: 0;left: 0;margin: auto;z-index: 9999;background: #fff;}
  .bg .bg-content .bg-tittle{height: 42px;line-height: 42px;font-size: 16px;background:#f8f8f8;color: #333333;padding: 0 16px;position: relative}
  .bg-tittle .icon{width: 25px;height: 25px;position: absolute;right: 10px;top: 10px;cursor: pointer;}
  .bg-tittle .icon:before{ width: 25px;height: 25px;background-position: -313px 0px;}
@@ -51,31 +56,35 @@ footer .footTop{display:none;}
 * 移动端
 */
 @media screen and (max-width:768px){
-body{background:#FFF}
-footer{display:none}
-.loginForm .showPwd{display:none;}
-.loginForm{padding-top:4vw;text-align:center;background:#FFF url(/img/account/login_m.png) no-repeat center 25vw;background-size:57vw 43.2vw}
-.loginForm h1{color:#22272e;font-size:6.4vw;font-weight:bold;line-height:10vw}
-.loginForm h2{font-size:3.1vw;font-weight:normal;line-height:5.4vw;color:#627386}
-.loginForm form{width:93.4vw;margin:54vw auto 0}
-.loginForm .formLine{height:16.4vw;padding:0;}
-.loginForm input{height:11.2vw;line-height:6vw;padding: 2.6vw 0;box-sizing: border-box;}
-.loginForm .checked{top:3.6vw;right:3.6vw;}
-.loginForm .forget{text-align:right;color:#4a4f58;font-size:3.4vw;line-height:3.4vw;margin-bottom:4.8vw}
-.loginForm .submit{line-height:11.2vw;font-size:3.4vw;text-align:center;color:#22272e;}
-.loginForm .submit .btn{display:inline-block;box-sizing:border-box;width:100%;height:11.2vw;border:solid 1px #b8bfca;border-radius:2px;margin-bottom:4.8vw}
-.loginForm .submit button.btn{border-color:#e15616;background:#e15616;color:#FFF;}
-.loginForm .submit .weChat{display:block;margin:6vw auto;width:50vw;color:#627386;line-height:8vw}
-.loginForm .submit .weChat span{display:inline-block;width:100%}
-.loginForm .submit .weChat .mIcon:before{width:12vw;height:12vw;background-position:0 -77.8vw}
-.bg{width: 100%;height: 100%;position: fixed;top: 0;left: 0;right: 0;bottom: 0;z-index: 99999999;font-family: inherit;overflow: hidden;background-color: #4444444f;opacity: 0}
-.bg .bg-content{width: 74.7vw;height: fit-content;position: absolute;top: 0;bottom: 0;right: 0;left: 0;margin: auto;z-index: 9999;background: #fff;border-radius: 4vw;}
-.bg .bg-content .bg-tittle{height:10.7vw;line-height: 10.7vw;font-size: 3.4vw;color: #333333;padding: 0 4vw;position: relative}
-.bg-tittle .icon{width: 6.4vw;height:6.4vw;position: absolute;right: 2.7vw;top: 2.7vw;cursor: pointer;}
-.bg-tittle .mIcon:before{ width:6.4vw ;height: 6.4vw;background-position: -33.5vw 0px;}
-.bg .bg-content .text-conten{padding: 4vw;border-top: .27vw solid #e2e7ef}
-.bg .bg-content .text-conten .status{color: #333333;font-size: 3.4vw;line-height: 5.4vw;margin-bottom: 5vw;text-align: center}
-.bg .bg-content .text-conten .tip-p{text-align: center;color:#e15616;font-size: 3vw;line-height: 7vw }
-.bg .bg-content .text-conten div{cursor: pointer;text-align: center;background: #e15616;width: 66.6vw;height: 9.9vw;line-height: 9.9vw;color: #fff;margin: auto;border-radius: .54vw;margin-top: 5vw}
-
+ body{background:#FFF}
+ footer{display:none}
+ .loginForm .showPwd{display:none;}
+ .loginForm{padding-top:4vw;text-align:center;background:#FFF url(/img/account/login_m.png) no-repeat center 25vw;background-size:57vw 43.2vw}
+ .loginForm h1{color:#22272e;font-size:6.4vw;font-weight:bold;line-height:10vw}
+ .loginForm h2{font-size:3.1vw;font-weight:normal;line-height:5.4vw;color:#627386}
+ .loginForm form{width:93.4vw;margin:54vw auto 0}
+ .loginForm .formLine{height:16.4vw;padding:0;}
+ .loginForm input{height:11.2vw;line-height:6vw;padding: 2.6vw 0;box-sizing: border-box;}
+ .loginForm .checked{top:3.6vw;right:3.6vw;}
+ .loginForm .forget{text-align:right;color:#4a4f58;font-size:3.4vw;line-height:3.4vw;margin-bottom:4.8vw}
+ .loginForm .forget .btn{float: left;color: #E15621;}
+ .loginForm .submit{line-height:11.2vw;font-size:3.4vw;text-align:center;color:#22272e;margin-top: 3vw;}
+ .loginForm .submit .btn{display:inline-block;box-sizing:border-box;width:100%;height:11.2vw;border:solid 1px #b8bfca;border-radius:2px;margin-bottom:4.8vw}
+ .loginForm .submit button.btn{border-color:#e15616;background:#e15616;color:#FFF;}
+ .loginForm .submit button.disabled{background-color:#E1E1E1;color:#F7F7F7;border-color:#E1E1E1;}
+ .loginForm .submit .weChat{display:block;margin:6vw auto;width:50vw;color:#627386;line-height:8vw}
+ .loginForm .submit .weChat span{display:inline-block;width:100%}
+ .loginForm .submit .weChat .mIcon:before{width:12vw;height:12vw;background-position:0 -77.8vw}
+ .bg{width: 100%;height: 100%;position: fixed;top: 0;left: 0;right: 0;bottom: 0;z-index: 99999999;font-family: inherit;overflow: hidden;background-color: #4444444f;opacity: 0}
+ .bg .bg-content{width: 74.7vw;height: fit-content;position: absolute;top: 0;bottom: 0;right: 0;left: 0;margin: auto;z-index: 9999;background: #fff;border-radius: 4vw;}
+ .bg .bg-content .bg-tittle{height:10.7vw;line-height: 10.7vw;font-size: 3.4vw;color: #333333;padding: 0 4vw;position: relative}
+ .bg-tittle .icon{width: 6.4vw;height:6.4vw;position: absolute;right: 2.7vw;top: 2.7vw;cursor: pointer;}
+ .bg-tittle .mIcon:before{ width:6.4vw ;height: 6.4vw;background-position: -33.5vw 0px;}
+ .bg .bg-content .text-conten{padding: 4vw;border-top: .27vw solid #e2e7ef}
+ .bg .bg-content .text-conten .status{color: #333333;font-size: 3.4vw;line-height: 5.4vw;margin-bottom: 5vw;text-align: center}
+ .bg .bg-content .text-conten .tip-p{text-align: center;color:#e15616;font-size: 3vw;line-height: 7vw }
+ .bg .bg-content .text-conten div{cursor: pointer;text-align: center;background: #e15616;width: 66.6vw;height: 9.9vw;line-height: 9.9vw;color: #fff;margin: auto;border-radius: .54vw;margin-top: 5vw}
+ .verify-wrap{margin-top: 0;width: 93.4vw !important;}
+ .fix-tips {background: -webkit-gradient(linear,left top,right top,color-stop(0,#4d4d4d),color-stop(.4,#4d4d4d),color-stop(.5,#fff),color-stop(.6,#4d4d4d),color-stop(1,#4d4d4d));-webkit-background-clip: text;-webkit-text-fill-color: transparent;-webkit-animation: slidetounlock 3s infinite;color: #787878 !important;}
+ @keyframes slidetounlock { 0% {background-position: -100px 0;} 100% {background-position: 100px 0;} }
 }

+ 6 - 4
src/main/resources/static/css/product/detail.h5.css

@@ -8,10 +8,10 @@ li{list-style:none}
 #swiperImage .swiper-wrapper .swiper-slide{position:relative;zoom:1;vertical-align:middle;width:100%;overflow:hidden;text-align:center}
 #swiperImage .swiper-wrapper img{width:auto;height:100vw;display:block}
 #swiperImage .swiper-wrapper .swiper-slide .cm-product-cover-tag{position:absolute;top: 3vw;right: 3vw;width: 15.9vw;height: 5.5vw;background: url(/img/activity/cm_cover_bg_h5.png) no-repeat center;background-size: 15.9vw;text-align: center;color: #fff;line-height: 5.5vw;font-size: 2vw;}
-.productBox .detailBox{box-sizing:border-box;padding:0 3.3vw;overflow:hidden}
+.productBox .detailBox{box-sizing:border-box;padding:0 3.3vw;overflow:hidden;position: relative;}
 .productBox .detailBox .crumbs{height:8vw;line-height:8vw;font-size:3.1vw;overflow:hidden;color:#93979F}
 .productBox .detailBox .crumbs a{color:#93979F}
-.productBox .detailBox .title{font-size:4.2vw;font-weight:bold;line-height:6.4vw;color:#4A4F58;margin-bottom:3.5vw}
+.productBox .detailBox .title{width: 80vw;font-size:4.2vw;font-weight:bold;line-height:6.4vw;color:#4A4F58;margin-bottom:3.5vw;text-overflow: ellipsis;overflow: hidden;display: -webkit-box;-webkit-line-clamp: 2;line-clamp: 2;-webkit-box-orient: vertical;}
 .productBox .detailBox .tags span{display:inline-block;height:4.2vw;line-height:4.2vw;padding:0 1vw;font-size:2.6vw;color:#FFF;background:#86B2FF;border-radius:2px;margin-right:2.7vw}
 .productBox .detailBox .detail{box-sizing:border-box;padding:2.8vw;font-size:3.4vw;line-height:7.5vw;color:#93979F;background:#f3f7fe;border-radius:2px;position:relative;margin:3.5vw 0}
 .productBox .detailBox .detail hr{border:none;border-top:1px dashed #BEC2C9;margin:2vw 0}
@@ -19,10 +19,12 @@ li{list-style:none}
 .productBox .detailBox .none-details .none-image{width: 38.6vw;height: 30.5vw;display: block;margin: 0 auto;}
 .productBox .detailBox .none-details .none-text{width: 100%;height: 4vw;line-height: 4vw;text-align: center;color: #ffb496;font-size: 3.4vw;margin-top: 2vw;}
 .productBox .detailBox .none-details.show{opacity: 1;}
-
+.productBox .detailBox .product-collection{width:14vw;display: block;position: absolute;right: 2vw;top: 4.8vw;cursor: pointer;}
+.productBox .detailBox .product-collection img{height: 6.4vw;width: 6.4vw;display: block;margin: 0 auto;margin-bottom: .2vw;}
+.productBox .detailBox .product-collection p{height: 4.4vw;line-height: 4.4vw;text-align: center;font-size: 3vw;color: #333333;}
 .productBox .detailBox .row{position:relative;}
 .priceTag {position: absolute;left: 20vw;}
-.productBox .detailBox .row>i{font-style:normal;margin-right:2vw}
+.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}

+ 5 - 3
src/main/resources/static/css/product/detail.pc.css

@@ -5,7 +5,7 @@
 li{list-style:none;}
 .productBox{width:100%;margin:16px 0;background:#FFF;box-sizing:border-box;padding:15px}
 .productBox .imageBox{float:left;width:452px;height:545px;position:relative}
-.productBox .detailBox{float:right;width:686px;overflow: hidden}
+.productBox .detailBox{float:right;width:686px;position: relative;}
 .productBox img{width:100%;height:100%;display:block}
 .productBox .bigImage{position:relative; width:452px;height:452px;background:#F3F7FE;border: 1px solid #e4e4e4;}
 .productBox .bigImage .mask{display:none;position:absolute;left:0;top:0;width:215px;height:215px;border:1px solid #aaa;background:rgba(255,208,22,.4);opacity:.5;filter:alpha(opacity:50);cursor:move}
@@ -17,11 +17,13 @@ li{list-style:none;}
 .productBox .smallImage li:first-child{margin-left:0}
 .productBox .zoomImage{display:none;overflow:hidden;position:absolute;right:-466px;top:0;width:452px;height:452px;border:1px solid #e4e4e4;z-index:9999;background:#FFF}
 .productBox .zoomImage img{width:950px;height:950px;margin-right:10px;display:block;max-width:none;}
-
+.productBox .detailBox .product-collection{width: 72px;display: block;position: absolute;right: 0;top: 0;cursor: pointer;}
+.productBox .detailBox .product-collection img{height: 26px;width: 26px;display: block;margin: 0 auto;margin-bottom: 2px;}
+.productBox .detailBox .product-collection p{height: 26px;line-height: 26px;text-align: center;font-size: 14px;color: #333333;}
 .productBox .detailBox .crumbs{height:28px;line-height:28px;font-size:14px;overflow:hidden;color:#9aa5b5;padding:0;}
 .productBox .detailBox .crumbs a{color:#9aa5b5}
 .productBox .detailBox .crumbs a:hover{color:#E15616}
-.productBox .detailBox .title{font-size:18px;font-weight:bold;line-height:24px;padding:5px 0;color:#4A4F58}
+.productBox .detailBox .title{font-size:18px;font-weight:bold;line-height:24px;padding:5px 0;color:#4A4F58;width: 620px;}
 .productBox .detailBox .tags{padding:2px 0}
 .productBox .detailBox .tags span{display:inline-block;line-height:16px;padding: 3px 6px;font-size:12px;color: #9aa5b5;border-radius:2px;margin-right:10px;border: 1px solid #e2e7ef;}
 .productBox .detailBox .detail{box-sizing:border-box;padding:14px 20px;font-size:14px;color:#9aa5b5;background:#f3f7fe;border-radius:2px;margin:10px 0;position:relative;}

+ 8 - 5
src/main/resources/static/css/supplier-center/order/detail.css

@@ -21,7 +21,8 @@
     .pro-information li {width: 100%;padding: 10px 0;}
     .pro-information li div {display: inline-block;width:20%;text-align: center;color: #627386;}
      .pro-information li div:last-child{width: 12%}
-    .pro-information li div.product-img {width: 46%;text-align: left;}
+    .pro-information li div.product-img {width: 46%;text-align: left;position: relative;}
+    .product-img .tips{width: 40px;height: 20px;border-radius: 2px;font-size: 12px;line-height: 20px;text-align: center;display: block;position: absolute;top: 0;left: 0;color: #FFFFFF; background-image: linear-gradient(214deg, #ff4500 0%, #ff5800 53%, #ff4367 100%);}
     .product-img img {width: 70px;height: 70px;border: solid 1px #e2e7ef;}
     .product-img h3 {display: inline-block;width: 300px;margin-left: 10px;font-size: 16px;color: #22272e;vertical-align: middle;word-break: break-all;overflow: hidden;text-overflow: ellipsis;display: -webkit-inline-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical}
     .info-title {color: #22272e;font-size: 16px;padding: 15px;}
@@ -34,9 +35,10 @@
     .order-info .content {background: #fff;padding: 15px;box-shadow: 0px 3px 6px 0px rgba(0, 0, 0, 0.07);}
     .order-item.pay span {color: #e15616;}
     .sett-re {margin-top: 20px}
-    .sett-re div:nth-child(1) {color: #22272e;font-size: 16px;padding: 15px}
-    .sett-re div:nth-child(2) {background: #fff;height: 72px;line-height: 72px;padding-left: 15px;color: #22272e}
-    .sett-re div:nth-child(2) p {display: inline-block;margin-right: 15px}
+    .sett-re .title{color: #22272e;font-size: 16px;padding: 15px}
+    .sett-re .payShopRecord {background: #fff;height: auto;line-height: 72px;padding-left: 15px;color: #22272e;padding:20px;}
+    .sett-re .payShopRecord div{width: 100%;height: 40px;float: left;}
+    .sett-re .payShopRecord p {display: inline-block;margin-right: 15px;line-height: 40px;float: left;}
     .NoText{color: #627386}
     .section-botton {width: 100%;height: 76px;box-sizing: border-box;float: left;padding: 20px;background-color: #FFFFFF;margin-top: 20px}
     .section-botton .inner .btn {width: 90px;height: 36px;background-color: #ffe6dc;border-radius: 2px;border: solid 1px #e15616;text-align: center;line-height: 36px;color: #e15616;display: inline-block;margin-right: 16px;float: right;}
@@ -71,8 +73,9 @@
     .product-title li:nth-child(2) {text-align: left}
     .pro-information li {width: 100%;padding: 2.7vw 0;list-style: none;}
     .pro-information li div {display: inline-block;text-align: center;top: 9.6vw;width: 30%;position: relative}
-    .pro-information li div.product-img {width: 100%;text-align: left;top: 0}
+    .pro-information li div.product-img {width: 100%;text-align: left;top: 0;position: relative;}
     .pro-information li div:nth-child(2){text-align: left;}
+    .product-img .tips{position:absolute;background:#ff4500;line-height:5vw;height:5vw;padding:0 2vw;white-space:nowrap;font-size:3.1vw;color:#FFF;top:0;left:0}
     .product-img img {width: 15vw;height: 15vw;border: solid 1px #e2e7ef}
     .product-img h3 {width: 36.8vw;font-size: 3.4vw;letter-spacing: .27vw;white-space: normal;vertical-align: middle;word-break: break-all;overflow: hidden;text-overflow: ellipsis;display: -webkit-inline-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical}
     .info-title {color: #22272e;font-size: 3.4vw;padding: 4vw;}

+ 4 - 2
src/main/resources/static/css/supplier-center/order/orderlist.css

@@ -20,7 +20,8 @@ input::placeholder{color: #9aa5b5;font-size: 12px;}
 .order-botton{width: 100%;overflow: hidden;height: 60px;line-height: 60px;}
 .order-botton div{float: right;}
 .order-botton a{width: 90px;height: 36px;background-color: #ffe6dc;border-radius: 2px;border: solid 1px #e15616;text-align: center;line-height: 36px;color: #e15616;display: inline-block;margin-right: 16px;}
-.order-product .product-img{width: 100px;height: 100px;border: solid 1px #e2e7ef;float: left;}
+.order-product .product-img{width: 100px;height: 100px;border: solid 1px #e2e7ef;float: left;position: relative;}
+.order-product .product-img .tips{width: 40px;height: 20px;border-radius: 2px;font-size: 12px;line-height: 20px;text-align: center;display: block;position: absolute;top: 0;left: 0;color: #FFFFFF; background-image: linear-gradient(214deg, #ff4500 0%, #ff5800 53%, #ff4367 100%);}
 .product-info .num{margin-right: 80px;}
 .order-product .product-img img{width: 100%;height: 100%;}
 .order-product .product-info{float: right;width: 87%;}
@@ -59,9 +60,10 @@ input::placeholder{color: #9aa5b5;}
 .order-botton div{float: right;}
 .order-botton a{margin-left: 2.7vw;width: 22.4vw;height: 9.6vw;background-color: #ffe6dc;border-radius: .53vw;border: solid .27vw #e15616;text-align: center;line-height: 9.6vw;color: #e15616;display: inline-block}
 .order-botton .deatil{border: .27vw solid #1890f9;line-height: 7.2vw;right: 5.7vw;position: absolute;top: 10vw;width: 22.4vw;height: 7.2vw;border-radius: 3.6vw;color: #1890f9;background: #e0f1ff}
-.order-product .product-img{width: 28VW;height: 28VW;border: solid 1px #e2e7ef;float: left;}
+.order-product .product-img{width: 28VW;height: 28VW;border: solid 1px #e2e7ef;float: left;position: relative;}
 .product-info .num:nth-child(1){float: left;}
 .product-info .num:nth-child(2){float: right;}
+.order-product .product-img .tips{position:absolute;background:#ff4500;line-height:5vw;height:5vw;padding:0 2vw;white-space:nowrap;font-size:3.1vw;color:#FFF;top:0;left:0}
 .order-product .product-img img{width: 100%;height: 100%;}
 .order-product .product-info{float: right;width: 65%;}
 .order-product{overflow: hidden;margin-bottom: 1.9vw;}

+ 124 - 0
src/main/resources/static/css/user-center/collection/collection.css

@@ -0,0 +1,124 @@
+@charset "utf-8";
+li{list-style:none}
+/**
+ * PC端
+ */
+@media screen and (min-width:768px){
+    .collection-title{width:1200px;margin:0 auto;box-sizing:border-box;margin-top: 24px;}
+    .collection-name{height: 22px;font-size: 16px;color: #4A4F58;line-height: 22px;font-weight: bold;}
+    .collection-btnmain{height: 60px;box-sizing: border-box;padding: 16px 0;}
+    .collection-btn{height: 28px;}
+    .collection-btn .coll-btn{cursor: pointer;width: 72px;height: 28px;line-height: 28px;color: #FFFFFF;background-color: #E15621;text-align: center;font-size: 14px;border-radius: 2px;float: left;}
+    .collection-btn .coll-btn.none{color: #FFFFFF;background-color: #D8D8D8;}
+    .collection-btn .coll-eang{float: right;}
+    .collection-btn .coll-span{display: block;float: left;margin-left: 20px;height: 28px;line-height: 16px;box-sizing: border-box;padding: 6px 0;display: flex;cursor: pointer;}
+    .collection-btn .coll-checked{width: 16px;height: 16px;background: url("/img/cart/icon_weigouxuan@2x.png") no-repeat;background-size: cover;display: block;margin-right: 6px;}
+    .collection-btn .coll-checked.checked{background: url("/img/cart/icon_yixuanze@2x.png") no-repeat;background-size: cover;}
+    .collection-btn .coll-cart{width: 20px;height: 20px;background: url(/img/base/icon.png) no-repeat;background-position:-30px -1px;display: block;margin-right: 6px;}
+    .collection-btn .coll-icon{width: 16px;height: 16px;background: url("/img/account/icon-collection@2x.png") no-repeat;background-size: cover;display: block;margin-right: 6px;}
+    .productList{width:1200px;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;position: relative;}
+    .productList .productItem:nth-child(6n){margin-right: 0;}
+    .productList .product-cancel{width: 100%;height: 32px;line-height: 32px;text-align: center;background-color: #FFE6DC;color: #E15621;font-size: 14px;cursor: pointer;position: absolute;top: -32px;left: 0;display: none;transition: all 0.3s;}
+    .productList .product-button{width: 100%;height: 40px;position: absolute;bottom: -40px;left: 0;display: none;transition: all 0.2s;z-index: 99;}
+    .productList .product-button .coll-btn{width: 50%;height: 100%;line-height: 40px;font-size: 14px;text-align: center;float: left;position: relative;cursor: pointer;}
+    .productList .product-button .coll-btn.add{background-color: #FFE6DC;color: #E15621;}
+    .productList .product-button .coll-btn.add:before{content: '';width: 0;height: 0;border-bottom: 20px solid transparent;border-top: 20px solid transparent;border-right: 20px solid transparent;border-left: 13px solid #FFE6DC;position: absolute;right: -33px;top: 0;z-index: 99;}
+    .productList .product-button .coll-btn.buy{background-color: #E15621;color: #FFFFFF;}
+    .productList .product-mask{width: 100%;height: 100%;background: rgba(0,0,0,0.3);position: absolute;top: 0;left: 0;z-index: 99;cursor: pointer;}
+    .productList .product-mask .mask-checked{width: 16px;height: 16px;background: url("/img/account/icon-weigouxuan@2x.png") no-repeat;background-size: cover;display: block;position: absolute;right: 0;top: 0;}
+    .productList .product-mask .mask-checked.checked{background: url("/img/account/icon-yigouxuan@2x.png") no-repeat;background-size: cover;}
+    .productList .productItem:hover .product-cancel{top: 0;display: block;}
+    .productList .productItem:hover .product-button{bottom: 0;display: block;}
+    .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;}
+    .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 .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;}
+    .login-btn{font-size: 12px}
+    .listTitle{width:1184px;margin:0 auto 16px auto;box-sizing:border-box;padding:16px 30px;border-radius:0 0 2px 2px;background:#fc5331 url(/img/cart/promotions.png) no-repeat right;background-size:auto 100%;color:#FFF}
+    .listTitle h1{font-size:20px;line-height:42px;font-weight:normal;margin-bottom:16px}
+    .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;}
+    .empty{width: 1200px;margin: 0 auto;background-color: #FFFFFF;padding: 150px 0;}
+    .empty img{width: 180px;height: 180px;}
+    .empty .msg{color: #999;}
+}
+/**
+* 移动端
+*/
+@media screen and (max-width:768px){
+    .collection-content{padding-bottom: 20.5vw;}
+    .collection-title{width:100%;box-sizing:border-box;padding: 0 3vw;}
+    .collection-name{height:11vw;font-size: 3.4vw;color: #4A4F58;line-height: 11vw;font-weight: bold;}
+    .collection-btnmain{width:100%;height: auto;box-sizing: border-box;padding: 3.1vw 3.3vw;position: fixed;bottom: 0;left: 0;background-color: #FFF;z-index: 999;}
+    .collection-btn{height: 11.2vw;}
+    .collection-btn .coll-eang{width: 100%;float: left;margin: 1.5vw 0;display: flex;}
+    .collection-btn .coll-btn{cursor: pointer;width: 100%;height:11.2vw;line-height: 11.2vw;color: #FFFFFF;background-color: #E15621;text-align: center;font-size: 3.6vw;border-radius: 2px;float: left;}
+    .collection-btn .coll-btn.none{color: #FFFFFF;background-color: #D8D8D8;}
+    .collection-btn .coll-span.all{flex: 2;}
+    .collection-btn .coll-span.cart{flex: 4;}
+    .collection-btn .coll-span.coll{flex: 4;}
+    .collection-btn .coll-span{display: block;float: left;margin-left: 20px;height: 28px;line-height: 16px;box-sizing: border-box;padding: 6px 0;display: flex;cursor: pointer;}
+    .collection-btn .coll-checked{width: 16px;height: 16px;background: url("/img/cart/icon_weigouxuan@2x.png") no-repeat;background-size: cover;display: block;margin-right: 6px;}
+    .collection-btn .coll-checked.checked{background: url("/img/cart/icon_yixuanze@2x.png") no-repeat;background-size: cover;}
+    .collection-btn .coll-cart{width: 20px;height: 20px;background: url(/img/base/icon.png) no-repeat;background-position:-30px -1px;display: block;margin-right: 6px;}
+    .collection-btn .coll-icon{width: 16px;height: 16px;background: url("/img/account/icon-collection@2x.png") no-repeat;background-size: cover;display: block;margin-right: 6px;}
+    .productList{margin:0 auto 3.2vw;width: 97vw;}
+    .productList .productItem{width: 45.6vw;height: 70vw;overflow: hidden;margin: 0 1.3vw 2.6vw 1.3vw;background: #fff;text-align: left;position: relative;}
+    .productList .product-cancel{display: none;}
+    .productList .product-button{display: none;}
+    .productList .product-mask{width: 100%;height: 100%;background: rgba(0,0,0,0.3);position: absolute;top: 0;left: 0;z-index: 99;cursor: pointer;}
+    .productList .product-mask .mask-checked{width: 16px;height: 16px;background: url("/img/account/icon-weigouxuan@2x.png") no-repeat;background-size: cover;display: block;position: absolute;right: 0;top: 0;}
+    .productList .product-mask .mask-checked.checked{background: url("/img/account/icon-yigouxuan@2x.png") no-repeat;background-size: cover;}
+    .productItem .price em {display: block;height: 7vw;line-height: 7vw;color: #4A4F58;font-style: normal;float: left;}
+    .productItem .price .mIcon:before{width:15.8vw;height: 5vw}
+    .productItem .price .mIcon.i5:before {background-position: -84vw -97.5vw;}
+    .productItem .price .mIcon.i1:before {background-position: -84vw -69.5vw;}
+    .productItem .price .mIcon.i2:before {background-position: -84vw -76.5vw;}
+    .productItem .price .mIcon.i3:before {background-position: -84vw -83.7vw;}
+    .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;}
+    .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 .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;}
+
+    .original-price{text-decoration:line-through}
+    .listTitle{width:100%;min-height:3.2vw;box-sizing:border-box;padding:3.3vw;background:#fc5331 url(/img/cart/promotions.png) no-repeat right;background-size:auto 100%;color:#FFF}
+    .listTitle h1{font-size:4vw;line-height:8vw;font-weight:normal}
+    .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}
+    .empty{width: 100%;float: left;}
+    .empty img{width: 36vw;height: 36vw;}
+    .empty .msg{color: #999;}
+
+
+
+
+
+
+}
+

+ 8 - 0
src/main/resources/static/css/user-center/dashboard.css

@@ -48,6 +48,10 @@ li{list-style:none}
     .user-content .section .user-main.account{height: 78px;}
     .user-content .section .user-main.account .account-cell{line-height: 34px;font-size:14px;color: #333333;float: left;margin-right: 80px;display: block;}
     .user-content .section .user-main.account .account-cell .red{font-size:16px;color: #f94b4b;font-weight: bold;}
+    .user-content .section .user-main.collec{height: 78px;padding: 10px 20px;}
+    .user-content .section .user-main.collec .account-collec{width: 72px;display: block;float: left;}
+    .user-content .section .user-main.collec .account-collec img{height: 26px;width: 26px;display: block;margin: 0 auto;margin-bottom: 2px;}
+    .user-content .section .user-main.collec .account-collec p{height: 26px;line-height: 26px;text-align: center;font-size: 14px;color: #333333;}
     .user-content .section .user-main .tabs-left{height: 100%;float: left;}
     .user-content .section .user-main .tabs-left .item{width: 50px;height: 100%;float: left;margin:0 40px;}
     .user-content .section .user-main .tabs-left .item a{width: 100%;height: 100%;display: block;}
@@ -152,6 +156,10 @@ li{list-style:none}
     .user-content .section .user-main.account{height: 23vw;box-sizing: border-box;padding: 2vw 3.2vw;}
     .user-content .section .user-main.account .account-cell{line-height:9vw;font-size:3.4vw;color: #333333;float: left;margin-right: 10vw;display: block;}
     .user-content .section .user-main.account .account-cell .red{font-size:4.2vw;color: #f94b4b;font-weight: bold;}
+    .user-content .section .user-main.collec{width: 20vw;height: 20vw;box-sizing: border-box;padding: 3vw 3.2vw;}
+    .user-content .section .user-main.collec .account-collec{height: 20vw;box-sizing: border-box;width: 100%;display: block;}
+    .user-content .section .user-main.collec .account-collec img{height: 6.4vw;width: 6.4vw;display: block;margin: 0 auto;margin-bottom: 1vw;}
+    .user-content .section .user-main.collec .account-collec p{height: 4.4vw;line-height: 4.4vw;text-align: center;font-size: 3vw;color: #333333;}
     .user-content .user-main .tabs-left{box-sizing:border-box;width:100vw;padding:.7vw 6vw 4vw 6vw}
     .user-content .user-main .tabs-left .item{width:20.8vw;height:8.4vw;line-height:8.4vw;text-align:center;border-radius:4.2vw;border:1px solid #b8bfca;font-size:3.3vw;color:#627386;margin:3.3vw 4vw 0 4vw;position:relative}
     .user-content .user-main .tabs-left .item .icon span{height:4.6vw;line-height:4.6vw;padding:0 .6vw;border-radius:2.1vw;font-size:3.1vw;background-color:#f55c5c;color:#FFF;font-style:normal;position:absolute;right:1vw;top:-2vw}

BIN
src/main/resources/static/img/account/icon-collection-empty@2x.png


BIN
src/main/resources/static/img/account/icon-collection-none@2x.png


BIN
src/main/resources/static/img/account/icon-collection@2x.png


BIN
src/main/resources/static/img/account/icon-weigouxuan@2x.png


BIN
src/main/resources/static/img/account/icon-yigouxuan@2x.png


+ 25 - 7
src/main/resources/static/js/account/login.js

@@ -33,6 +33,7 @@ var loginPage = new Vue({
         text:'',
         stautsfalse:false,
         infofalse:false,
+        isSlideFinishState:true
     },
     computed: {
 
@@ -258,16 +259,33 @@ var loginPage = new Vue({
     },
     mounted: function () {
         var _self = this;
+        var SlideVerifyPlug = window.slideVerifyPlug;
+        var slideVerify = new SlideVerifyPlug('#verify-wrap',{
+            wrapWidth:'350',//设置 容器的宽度 ,不设置的话,会设置成100%,需要自己在外层包层div,设置宽度,这是为了适应方便点;
+            initText:'请向右滑动滑块',  //设置  初始的 显示文字
+            sucessText:'验证通过',//设置 验证通过 显示的文字
+            getSuccessState:function(res){
+                //当验证完成的时候 会 返回 res 值 true,只留了这个应该够用了
+                console.log(res);
+                if(slideVerify.slideFinishState){
+                    $('.value').html(slideVerify.slideFinishState)
+                    $('#resetBtn').removeClass('prohibit')
+                    _self.isSlideFinishState = false;
+                }
+            }
+        });
         $('body').on("focus",'[needverify]:visible',function(){
             $(this).siblings('.errTips').removeClass("show").siblings('.checked').removeClass("show");
         });
         //enter键登录
-        $(document).keyup(function (e) {
-            var e = e || event;
-            e.stopPropagation();
-            if (e.keyCode === 13) {
-                _self.loginSubmit();
-            }
-        });
+        if(!_self.isSlideFinishState){
+            $(document).keyup(function (e) {
+                var e = e || event;
+                e.stopPropagation();
+                if (e.keyCode === 13) {
+                    _self.loginSubmit();
+                }
+            });
+        }
     }
 });

+ 3 - 5
src/main/resources/static/js/common/ajax.service.js

@@ -43,11 +43,9 @@ var Http = {
                 }
             }).then(function(res) {
                 if(res.code== -99){
-                    CAIMEI.Alert('登录已失效,请重新登录','去登录',true,function () {
-                        CAIMEI.Storage.clear();
-                        setBeforeUrl();
-                        location.href = "/login.html";
-                    });
+                    CAIMEI.Storage.clear();
+                    setBeforeUrl();
+                    // location.href = "/login.html";
                 }else{
                     def.resolve(res);
                 }

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

@@ -333,4 +333,56 @@ var ProductApi = {
                 callback(res);
             });
         },
+        /**
+         * @商品收藏-操作商品收藏
+         * @param:userId 用户userId
+         * @param:productId 商品Id
+         */
+        getProductUserLike:function (params, callback) {//商品收藏操作
+            Http.AjaxService({
+                url:'/commodity/userLike/likeOne',
+                type:'get',
+                data:params,
+                json:true,
+                isHost:true
+            })
+            .then(function(res){
+                callback(res);
+            });
+        },
+        /**
+         * @我的商品收藏-列表
+         * @param:userId 用户userId
+         * @param:pageNum 页码
+         * @param:pageSize 每一页条数
+         */
+        getProductUserLikeList:function (params, callback) {//获取商品收藏列表
+            Http.AjaxService({
+                url:'/commodity/userLike/likeList',
+                type:'get',
+                data:params,
+                json:true,
+                isHost:true
+            })
+            .then(function(res){
+                callback(res);
+            });
+        },
+        /**
+         * @商品收藏-删除商品收藏
+         * @param:userId 用户userId
+         * @param:productIds 字符串productId逗号隔开
+         */
+        getDeleteUserLike:function (params, callback) {//获取促销活动详情
+            Http.AjaxService({
+                url:'/commodity/userLike/deleteList',
+                type:'get',
+                data:params,
+                json:true,
+                isHost:true
+            })
+            .then(function(res){
+                callback(res);
+            });
+        },
 };

+ 35 - 0
src/main/resources/static/js/common/serviceapi/shopping.service.js

@@ -100,6 +100,41 @@ var ShoppingApi = {
                 data:params,
                 json:true,
                 isHost:true
+            })
+                .then(function(res){
+                    callback(res);
+                });
+        },
+        /**
+         * @购物车-加入购物车
+         * @param:userID 用户userId
+         * @param:productID 商品Id
+         * @param:productCount 商品数量
+         */
+        ShoppingAddCart:function (params, callback) {
+            Http.AjaxService({
+                url:'/order/club/cart/add',
+                type:'post',
+                data:params,
+                json:false,
+                isHost:true
+            })
+            .then(function(res){
+                callback(res);
+            });
+        },
+        /**
+         * @购物车-批量加入购物车
+         * @param:userID 用户userId
+         * @param:productID 商品Id
+         * @param:productCount 商品数量
+         */
+        ShoppingAddCarts:function (params, callback) {
+            Http.AjaxService({
+                url:'/shoppingCart/addCarts',
+                type:'post',
+                data:params,
+                json:false
             })
             .then(function(res){
                 callback(res);

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

@@ -50,6 +50,8 @@ var productDetail = new Vue({
         isCouponEmpty: false,
         productCoupon: [], 							// 优惠券
         productCouponList: [],						// 优惠券弹窗列表
+        collectionType:false,                       // 商品收藏状态
+
     },
     filters: {
         TypeFormat: function (value) {
@@ -118,6 +120,11 @@ var productDetail = new Vue({
                     _self.productTypeName = product.typeName;
                     _self.recommendType = product.recommendType ? product.recommendType : 0;
                     _self.archiveId = product.archiveId; // 保存资料列表id
+                    if (product.userLike && product.userLike == 1) {// 商品收藏
+                        _self.collectionType = true
+                    } else {
+                        _self.collectionType = false
+                    }
                     if (product.productDetail.orderInfo != '' && product.productDetail.serviceInfo != '') {
                         _self.isServiceInfo = true;
                     }
@@ -252,6 +259,22 @@ var productDetail = new Vue({
                 });
             }
         },
+        handleCollection:function (){// 收藏操作
+            var _self = this;
+            console.log('_self.userId',_self.userId)
+            if (_self.userId > 0) {
+                ProductApi.getProductUserLike({userId: _self.userId, productId: _self.productId}, function (response) {
+                    if (response.code === 0 && response.data) {
+                        _self.collectionType = !_self.collectionType
+                        CAIMEI.dialog(response.data,false);
+                    } else {
+                        CAIMEI.Alert(response.msg, '确定', false);
+                    }
+                });
+            }else{
+                _self.toLogin();
+            }
+        },
         toLogin: function () {
             setBeforeUrl();
             window.location.href = '/login.html';
@@ -448,6 +471,7 @@ var productDetail = new Vue({
     },
     created: function () {
         this.productId = this.couponParam.productId = $("#productId").val();
+        this.userId = this.couponParam.userId = GLOBAL_USER_ID;
         this.productStock = $("#productStock").val();
         this.getImages();
         // identity: 0个人,1协销,2会员机构,3供应商,4普通机构

+ 9 - 3
src/main/resources/static/js/shopping/cart.js

@@ -148,7 +148,7 @@ var shoppingCart = new Vue({
                 if (_self.allChecked) {
                     _self.submitIds = [];
                     _self.listData.forEach(function(supplier){
-                        supplier.checked = true;
+                        supplier.isChecked = true;
                         if(supplier.cartList.length>0){
                             supplier.cartList.forEach(function(cartItem){
                                 _self.submitIds.push(cartItem.productId);
@@ -158,7 +158,7 @@ var shoppingCart = new Vue({
                 }else{
                     _self.submitIds = [];
                     _self.listData.forEach(function(supplier){
-                        supplier.checked = false;
+                        supplier.isChecked = false;
                     });
                 }
                 _self.computedPrice();
@@ -271,8 +271,10 @@ var shoppingCart = new Vue({
                 shop.cartList.forEach(function(pros){
                     if(_self.submitIds.includes(pros.productId*1)){
                         _self.totalCouponList.forEach(function (coupon,index){//循环优惠券
+                            console.log('asdasdasdada')
                             switch(coupon.couponType){
                                 case 0:// 活动券
+                                    console.log('00000000000')
                                     if(coupon.productType == 1){// 活动券-全商城商品
                                         if(_self.totalPrice >= coupon.touchPrice){
                                             eligibleCoupons.push(coupon)
@@ -286,6 +288,7 @@ var shoppingCart = new Vue({
                                     }
                                     break;
                                 case 1:// 品类券适用于产品或者仪器 categoryType(commodityType) : 1 产品  2 仪器
+                                    console.log('111111111111')
                                     if( coupon.categoryType && coupon.categoryType == pros.commodityType){
                                         if(_self.totalPrice >= coupon.touchPrice){
                                             eligibleCoupons.push(coupon)
@@ -293,18 +296,21 @@ var shoppingCart = new Vue({
                                     }
                                     break;
                                 case 2:// 用户专享券 适用于商城全部商品
+                                    console.log('2222222222')
                                     if(_self.totalPrice >= coupon.touchPrice){
                                         eligibleCoupons.push(coupon)
                                     }
                                     break;
                                 case 3:// 店铺券适用于某个供应商的全部商品
-                                    if(coupon.shopId && pros.supplierId == coupon.shopId){
+                                    if(coupon.shopId && pros.shopId == coupon.shopId){
+                                        console.log('33333333333')
                                         if(_self.totalPrice >= coupon.touchPrice){
                                             eligibleCoupons.push(coupon)
                                         }
                                     }
                                     break;
                                 case 4://新用户券 适用于商城全部商品
+                                    console.log('444444444444')
                                     if(_self.totalPrice >= coupon.touchPrice){
                                         eligibleCoupons.push(coupon)
                                     }

+ 4 - 1
src/main/resources/static/js/shopping/confirm.js

@@ -368,6 +368,7 @@ var shoppingConfirm = new Vue({
             this.isShowAddressForm = true;
             this.addressForm.name= '';
             this.addressForm.mobile= '';
+            this.addressForm.addressId= '';
             this.addressForm.townId= '';
             this.addressForm.cityId= '';
             this.addressForm.provinceId= '';
@@ -760,10 +761,12 @@ var shoppingConfirm = new Vue({
             _self.userToken = globalUserData.token;
             // type:(1购物车提交[对应表cm_cart],2直接购买提交, 3协销下单)
             if(_self.type === 1) {
+                _self.productParam.cartType = 1;
                 _self.cartParam.productIds = _self.postageParam.productIds = _self.productIds = window.localStorage.getItem("shoppingProductIds");
                 // 获取列表数据
                 _self.getCartCreateOrderInfo();
-            }else if(this.type === 2){
+            }else if(_self.type === 2){
+                _self.productParam.cartType = 2;
                 _self.productParam.productId = _self.postageParam.productIds = _self.productIds = getUrlParam("productId");
                 _self.productParam.productCount = getUrlParam("count");
                 if(_self.productParam.productId && _self.productParam.productCount) {

+ 6 - 10
src/main/resources/static/js/supplier-center/order/delivergoods.js

@@ -6,7 +6,6 @@ var delivergoods = new Vue({
         userInfo: {},
         productList: [],
         submitIds: [],//去结算商品Ids
-        inputVal:'',
         allChecked: false,
         check:false,
         open: false,
@@ -65,24 +64,22 @@ var delivergoods = new Vue({
         },
         changeCountSub:function(order) {//商品数量减
             var _this = this;
-            if(_this.inputVal > 1) {
-                _this.inputVal--;
+            if(order.inputVal > 1) {
+                order.inputVal--;
             }
-            order.inputVal =_this.inputVal;
         },
         changeaddCount:function (order) {//商品数量加
             var _this = this;
             var num=order.notOutStore - order.actualCancelNum;
-            if(_this.inputVal>=num){
-                _this.inputVal =num
+            if(order.inputVal>=num){
+                order.inputVal =num
             }else {
-             _this.inputVal++
+                order.inputVal++
             }
-            order.inputVal = _this.inputVal;
         },
         numberChange: function(order){
             var _this = this;
-           order.inputVal = _this.inputVal
+            console.log('监听手动输入发货数量')
         },
         getDataInfo:function (){
             var _self = this;
@@ -92,7 +89,6 @@ var delivergoods = new Vue({
                     _self.userInfo = data.userInfo;
                     data.orderProductList.forEach(function(order){
                         order.inputVal = order.notOutStore - order.actualCancelNum;
-                        _self.inputVal=order.inputVal
                     });
                     _self.productList = data.orderProductList;
                 }

+ 3 - 2
src/main/resources/static/js/supplier-center/order/logistics.js

@@ -67,6 +67,7 @@ var logistics = new Vue({
             var _this = this;
             var obj = {number:''};
             item.numList.push(obj);
+            console.log('logisticList',_this.logisticList)
         },
         subBtn:function (list) {
             var _this = this;
@@ -79,6 +80,7 @@ var logistics = new Vue({
         parameter:function(){//参数信息
             var _this = this;
             var record=[];
+            var logisticsArray = [];
             $('.pro-information li').each(function(){//发货数
                 var productobj={};
                 productobj.orderProductId = Number($(this).attr('orderproductid'));
@@ -92,7 +94,6 @@ var logistics = new Vue({
                 var Code = pros.value;
                 var yName = pros.name;
                 var numList = pros.numList;
-                var logisticsArray = [];
                 numList.forEach(function (item) {
                     var logisNum = item.number;
                     obj={
@@ -106,10 +107,10 @@ var logistics = new Vue({
                          CAIMEI.dialog('请输入快递单号',false);
                     }else {
                         logisticsArray.push(obj);
-                        _this.params.logistics = JSON.stringify(logisticsArray)
                     }
                 })
             })
+            _this.params.logistics = JSON.stringify(logisticsArray);
         },
         ChangeLogistics:function(event,item,index){
              var donClass = '#logistics'+index;

+ 1 - 1
src/main/resources/static/js/supplier-center/order/qualifications.js

@@ -196,7 +196,7 @@ var addlogistics = new Vue({
         },
         editButtonCanel:function(){//暂不填写
             var _this = this;
-            window.location.href = '/supplier/order/delivery_record.html?shopOrderID='+_this.shopOrderId;
+            window.location.href = '/supplier/order/delivery_record.html?shopOrderId='+_this.shopOrderId;
         }
     },
     mounted:function () {

+ 2 - 2
src/main/resources/static/js/supplier-center/shop/decoration.js

@@ -79,12 +79,12 @@ var decoration = new Vue({
             var shopBannerId = item.shopBannerID;
             console.log(shopBannerId)
             CAIMEI.Modal('您确定要删除么?','取消','确定',function () {
-                   SupplierApi.deleteShopBanner({shopBannerId:shopBannerId},function (res) {
+               SupplierApi.deleteShopBanner({shopBannerId:shopBannerId},function (res) {
                     if(res.code==0){
                         CAIMEI.dialog('删除成功');
                         location.reload()
                     }
-                   })
+               })
             })
         },
         close:function () {

+ 8 - 0
src/main/resources/static/js/supplier-center/shop/preview.js

@@ -15,6 +15,9 @@ var previewContainer = new Vue({
         previewThumb:[],
         previewTags:[],
         previewParams:[],
+        trainingMethodText:'',
+        trainingType:'',
+        isTrainingMethod:false,
     },
     computed: {
 
@@ -67,6 +70,11 @@ var previewContainer = new Vue({
             _this.previewBigimage = _this.shopInfo.params.image[0].image;
             _this.previewTags =_this.setArray(_this.shopInfo.tags);
             _this.previewParams =_this.shopInfo.params.param;
+            if(_this.shopInfo.commodityType == '2'){
+                _this.isTrainingMethod = true;
+                _this.trainingMethodText = _this.shopInfo.trainingMethod == '1' ? '线上培训' : '线下培训';
+                _this.trainingType = _this.shopInfo.trainingType == '1' ? '¥'+_this.shopInfo.trainingFee : '售价已包含';
+            }
             console.log(_this.previewTags);
         }
         var magnifier = new mag('.preview-banner-big', '.preview-box','#CM____pic_thumb','.hover','.bigitem');

+ 311 - 0
src/main/resources/static/js/user-center/collection/collection.js

@@ -0,0 +1,311 @@
+;
+var orderPage = new Vue({
+    el: "#productList",
+    data: {
+        isRequset:true,
+        noMore: false,
+        listLoading: true,
+        isHandle:false,
+        isListEmpty:false,
+        isAllChecked:false,
+        isProductChecked:false,
+        checkedNum:0,
+        productIds:'',
+        listQuery:{
+            userId:0,
+            pageNum:1,
+            pageSize:12,
+        },
+        listData:[],
+        checkedList:[],
+        listRecord: 0,
+        pageInput: '1'
+    },
+    filters: {
+        NumFormat:function(value) {
+            return Number(value).toFixed(2);
+        }
+    },
+    computed: {
+        pageTotal: function () {
+            var total = Math.ceil(this.listRecord / this.listQuery.pageSize);
+            return total > 0 ? total : 1;
+        },
+        showPageBtn: function () {
+            var total = Math.ceil(this.listRecord / this.listQuery.pageSize);
+            total = total > 0 ? total : 1;
+            var index = this.listQuery.pageNum, arr = [];
+            if (total <= 6) {
+                for (var i = 1; i <= total; i++) {
+                    arr.push(i);
+                }
+                return arr;
+            }
+            if (index <= 3) return [1, 2, 3, 4, 5, 0, total];
+            if (index >= total - 2) return [1, 0, total - 4, total - 3, total - 2, total - 1, total];
+            return [1, 0, index - 2, index - 1, index, index + 1, index + 2, 0, total];
+        }
+    },
+    methods: {
+        toPagination: function (pageNum) {//点击切换分页
+            if (pageNum <= this.pageTotal) {
+                this.listQuery.pageNum = pageNum;
+                this.getCollectionProductList();
+            }
+        },
+        checkNum: function () {//输入跳转分页
+            if (this.pageInput > this.pageTotal) {
+                this.pageInput = this.pageTotal;
+            } else if (this.pageInput < 1) {
+                this.pageInput = 1;
+            }
+        },
+        getCollectionProductList: function () {// 获取收藏商品列表
+            var _self = this;
+            ProductApi.getProductUserLikeList(_self.listQuery,function (response) {
+                if (response.code === 0 ) {
+                    var data = response.data;
+                    _self.listRecord = data.totalRecord;
+                    if(data.results.length > 0 ){
+                        var list = data.results.map((el,index)=>{
+                            el.isChecked = false;
+                            return el;
+                        });
+                        if(isPC){
+                            _self.listData = list;
+                        }else{
+                            _self.listData = _self.listData.concat(list);
+                        }
+                        _self.isListEmpty = true;
+                    }else{
+                        _self.listData = [];
+                        _self.isListEmpty = false;
+                        _self.noMore = false;
+                    }
+                    _self.listLoading = false;
+                    _self.requestFlag = true;
+                }else {
+                    CAIMEI.Alert(response.msg, '确定');
+                }
+            });
+        },
+        PromotionsFormat:function(promo){//促销活动类型数据处理
+            if(promo!=null){
+                if(promo.type == 1 && promo.mode == 1){
+                    return true
+                }else{
+                    return false
+                }
+            }
+            return false
+        },
+        shoppingCart:function (pros) {// 加入购物车
+            var _self = this;
+            ShoppingApi.ShoppingAddCart(
+                {
+                    productCount:pros.minBuyNumber,
+                    productId:pros.productId,
+                    userId:_self.listQuery.userId,
+                    source:1
+                },
+                function (response) {
+                    if(response.code === 0){
+                        globalHead.getHeadCart(_self.listQuery.userId);
+                        $.confirm({
+                            useBootstrap: false,
+                            boxWidth: (isPC?'338px':'74.6vw'),
+                            title: false,
+                            content:'<div class="cartAlert"><h6>商品已成功加入购物车!</h6><p>当前购物车共<em>'+response.data+'</em>种商品</p></div>',
+                            closeIcon: true,
+                            animation: 'opacity',
+                            closeAnimation: 'opacity',
+                            animateFromElement: false,
+                            scrollToPreviousElement: false,
+                            buttons: {
+                                login: {
+                                    text: '去结算',
+                                    btnClass: 'btn-to-cart',
+                                    action: function(){
+                                        window.location.href = '/shopping/cart.html';
+                                    }
+                                },
+                                close: {
+                                    text: '继续购物',
+                                    btnClass: 'btn-to-goon'
+                                }
+                            }
+                        });
+                    } else {
+                        dialog("加入购物车失败!");
+                    }
+            })
+        },
+        hanldBuyCart:function (pros,type) {// 1 加入购物车 2 立即购买
+            var _self = this;
+            console.log('pros',pros)
+            console.log('type',type)
+            if(type == 1) {
+                _self.shoppingCart(pros);
+            }else{
+                window.open('/shopping/confirm.html?type=2&id='+pros.productId+'&count='+pros.priceGrade);
+            }
+        },
+        hanldAllAddCart:function () {// 批量加入购物车
+            var _self = this;
+            var checkedList = [];
+            if(!_self.isProductChecked){
+                CAIMEI.dialog('请先选择商品',false);
+            }
+            _self.listData.forEach((el)=>{
+                if(el.isChecked){
+                    checkedList.push(el.productId);
+                }
+            })
+            ShoppingApi.ShoppingAddCarts({userId:_self.listQuery.userId,productIds:checkedList.join(",")},function(response){
+                if(response.code === 0){
+                    globalHead.getHeadCart(_self.listQuery.userId);
+                    $.confirm({
+                        useBootstrap: false,
+                        boxWidth: (isPC?'338px':'74.6vw'),
+                        title: false,
+                        content:'<div class="cartAlert"><h6>商品已成功加入购物车!</h6><p>当前购物车共<em>'+response.data+'</em>种商品</p></div>',
+                        closeIcon: true,
+                        animation: 'opacity',
+                        closeAnimation: 'opacity',
+                        animateFromElement: false,
+                        scrollToPreviousElement: false,
+                        buttons: {
+                            login: {
+                                text: '去结算',
+                                btnClass: 'btn-to-cart',
+                                action: function(){
+                                    window.location.href = '/shopping/cart.html';
+                                }
+                            },
+                            close: {
+                                text: '继续购物',
+                                btnClass: 'btn-to-goon'
+                            }
+                        }
+                    });
+                } else {
+                    dialog("加入购物车失败!");
+                }
+            })
+        },
+        hanldCancel:function (pros) {// 取消收藏
+            var _self = this;
+            CAIMEI.Modal('确定要取消收藏吗?','取消','确定',function () {
+                ProductApi.getDeleteUserLike({userId:_self.listQuery.userId,productIds:pros.productId+','},function(response){
+                    if(response.code == 0){
+                        CAIMEI.dialog('取消收藏成功',true,function () {
+                            _self.getCollectionProductList();
+                        });
+                    }else{
+                        CAIMEI.Alert(response.msg, '确定', false);
+                    }
+                })
+            })
+        },
+        hanldAllCancel:function () {// 批量取消收藏
+            var _self = this;
+            var checkedList =[];
+            _self.productIds = '';
+            if(!_self.isProductChecked){
+                CAIMEI.dialog('请先选择商品',false);
+                return;
+            }
+            _self.listData.forEach((el)=>{
+                if(el.isChecked){
+                    checkedList.push(el.productId)
+                }
+            })
+            _self.productIds = checkedList.join(",")
+            console.log('_self.productIds2',_self.productIds);
+            CAIMEI.Modal('确定要取消收藏吗?','取消','确定',function () {
+                ProductApi.getDeleteUserLike({userId:_self.listQuery.userId,productIds:_self.productIds},function(response){
+                    if(response.code == 0){
+                        CAIMEI.dialog('取消收藏成功',true,function () {
+                            _self.getCollectionProductList();
+                            _self.isHandle = false;
+                        });
+                    }else{
+                        CAIMEI.Alert(response.msg, '确定', false);
+                    }
+                })
+            })
+        },
+        isCheckedAll(){//全选
+            var _self = this;
+            _self.isAllChecked = !_self.isAllChecked;
+            _self.listData.forEach((el)=>{
+                el.isChecked = _self.isAllChecked;
+            })
+            if(_self.isAllChecked){
+                _self.isProductChecked = true;
+                _self.checkedNum = _self.listData.length;
+            }else{
+                _self.isProductChecked = false;
+                _self.checkedNum = 0;
+            }
+        },
+        checkedSoperv:function (pros) {// 勾选
+            console.log(pros)
+            var _self = this;
+            var goodsCheckedLength = 0;
+            pros.isChecked = !pros.isChecked
+            _self.listData.forEach(el => {
+                if(el.isChecked) {
+                    goodsCheckedLength++;
+                }
+            })
+            _self.checkedNum = goodsCheckedLength;
+            _self.isAllChecked = goodsCheckedLength === _self.listData.length;
+            if(goodsCheckedLength>0){
+                _self.isProductChecked = true
+            }else{
+                _self.isProductChecked = false
+            }
+        },
+        showHandle:function () {// 显示批量操作
+            if(this.listData.length>0){
+                this.isHandle = true;
+            }
+        },
+        hideHandle:function () {
+            this.isHandle = false;
+        }
+    },
+    mounted: function () {
+        var _self = this;
+        if(globalUserData){
+            _self.userId = globalUserData.userId;
+            _self.listQuery.userId = this.userId;
+            _self.getCollectionProductList();
+        }
+        if(!isPC){
+            //移动端上垃加载更多
+            $(window).on('scroll', function(){
+                var scrollTop = $(this).scrollTop();
+                var scrollHeight = $(document).height();
+                var windowHeight = window.innerHeight;
+                if (scrollTop + windowHeight >= scrollHeight) {
+                    //此处是滚动条到底部时候触发的事件,在这里写要加载的数据,或者是拉动滚动条的操作
+                    var totalPage = Math.ceil(_self.listRecord / _self.listQuery.pageSize)?Math.ceil(_self.listRecord / _self.listQuery.pageSize):1;
+                    var next = _self.listQuery.pageNum+1;
+                    if(next <= totalPage){
+                        if (_self.requestFlag){
+                            _self.listQuery.pageNum = next;
+                            // 获取列表数据
+                            _self.getCollectionProductList();
+                        }
+                        _self.requestFlag = false;
+                    }else{
+                        //到底了
+                        _self.noMore = true;
+                    }
+                }
+            });
+        }
+    }
+});

Різницю між файлами не показано, бо вона завелика
+ 0 - 5
src/main/resources/static/lib/datapicker/moment.min.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 1
src/main/resources/static/lib/jquery-3.5.1.min.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
src/main/resources/static/lib/jquery-3.5.1.min.map


+ 1 - 1
src/main/resources/static/lib/js/pdfh5.js

@@ -5,7 +5,7 @@
     console.log("pdfh5.js v" + version + " & https://www.gjtool.cn")
     if (typeof require !== 'undefined') {
         if (g.$ === undefined) {
-            g.$ = require('/lib/jquery-3.5.1.min.js');
+            g.$ = require('/lib/jquery-3.6.0.min.js');
         }
         g.pdfjsWorker = require('/lib/js/pdf.worker');
         g.pdfjsLib = require('/lib/js/pdf.js');

Різницю між файлами не показано, бо вона завелика
+ 229 - 0
src/main/resources/static/lib/slideVerify.js


+ 9 - 6
src/main/resources/templates/account/login.html

@@ -21,6 +21,10 @@
                 <h2>生美 / 医美采购服务平台</h2>
             </div>
             <form v-show="!qrCodeLogin">
+                <div class="forget">
+                    <a class="btn" href="/register.html" rel="nofollow" onclick="_czc.push(['_trackEvent','登录页面','注册','点击','','Um_Event_Regirster'])">免费注册</a>
+                    <a href="/forget.html">忘记密码?</a>
+                </div>
                 <div class="formLine">
                     <input type="text" v-model.trim="loginAccount" placeholder="请输入邮箱或手机号" :rule="rule.account" maxlength="30" @blur="blurHandle($event)" needverify>
                     <i class="checked icon mIcon"></i>
@@ -32,13 +36,11 @@
                     <span class="errTips icon mIcon" tips="请输入正确的密码"></span>
                     <i class="icon showPwd" @click="showPassword($event)"></i>
                 </div>
-                <div class="forget">
-                    <a href="/forget.html">忘记密码?</a>
-                </div>
+                <!-- 滑动验证 -->
+                <div class="verify-wrap" id="verify-wrap"></div>
                 <div class="submit clear">
-                    <a v-if="isPC" class="btn" href="/register.html" rel="nofollow" onclick="_czc.push(['_trackEvent','登录页面','注册','点击','','Um_Event_Regirster'])">免费注册</a>
-                    <button class="btn" type="button" @click="loginSubmit()">登录</button>
-                    <a v-if="!isPC" class="btn" href="/register.html" rel="nofollow">免费注册</a>
+                    <button class="btn" type="button" @click="loginSubmit()" :disabled="isSlideFinishState" :class="[isSlideFinishState ?'disabled':'']">登录</button>
+<!--                    <a v-if="!isPC" class="btn" href="/register.html" rel="nofollow">免费注册</a>-->
                     <a v-if="!isPC && isWeChat" class="weChat" @click="weChatLogin()" href="javascript:void(0);">
                         <span>微信授权登录</span><i class="mIcon"></i>
                     </a>
@@ -71,6 +73,7 @@
 <template th:replace="components/footer"></template>
 <template th:replace="components/foot-link"></template>
 <script charset="utf-8" type="text/javascript" src="https://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/lib/slideVerify.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/account/login.js(v=${version})}"></script>
 </body>

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

@@ -214,8 +214,8 @@
                     <span class="errTips icon mIcon" tips="请选择或添加主营产品"></span>
                 </div>
                 <div class="subLine">
-                    <button class="btn-upgrade none" type="button" @click="clubLoginIndex()">先跳过,以后再升级</button>
-                    <button class="btn-upgrade" :class="loginLoading ? 'disabled':''" type="button" @click="clubUpgrade()">确认升级并提交审核</button>
+                    <button class="btn-upgrade none" type="button" @click="clubLoginIndex()" onclick="_czc.push(['_trackEvent','机构注册','点击','跳过升级申请','','Um_Event_ClubUpgradeCanel'])">先跳过,以后再升级</button>
+                    <button class="btn-upgrade" :class="loginLoading ? 'disabled':''" type="button" @click="clubUpgrade()" onclick="_czc.push(['_trackEvent','机构注册','点击','确认提交升级申请','','Um_Event_ClubUpgradeConfirm'])">确认升级并提交审核</button>
                 </div>
             </form>
         </div>

+ 2 - 2
src/main/resources/templates/components/header.html

@@ -4,9 +4,9 @@
         <div class="wrap clear">
             <div class="header_top_left">欢迎来到采美采购服务平台</div>
             <div class="header_top_left"></div>
-            <ul class="header_top_ul">
+            <ul class="header_top_ul" >
                 <li class="headCart">
-                    <a href="javascript:void(0)" class="addBtn icon" @click="goCartsLinkFn">购物车<em v-text="'('+headCart.cartCount+')'"></em></a>
+                    <a v-if="userIdentity!=3" href="javascript:void(0)" class="addBtn icon" @click="goCartsLinkFn" onclick="_czc.push(['_trackEvent','顶部导航','购物车','点击','','Um_Event_Cart'])">购物车<em v-text="'('+headCart.cartCount+')'"></em></a>
                     <div class="cartData">
                         <div v-if="headCart.cartCount>0">
                             <div class="cartMain">

+ 1 - 1
src/main/resources/templates/document/beauty-archive-detail.html

@@ -145,7 +145,7 @@
 </div>
 <script charset="utf-8" type="text/javascript" src="/lib/vue2.6.12.min.js"></script>
 <script charset="utf-8" type="text/javascript" src="/lib/jquery-3.6.0.min.js"></script>
-<script src="https://cdn.bootcdn.net/ajax/libs/moment.js/2.29.1/moment-2.29.min.js"></script>
+<script src="https://cdn.bootcdn.net/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
 <script charset="utf-8" type="text/javascript" src="/lib/lazyload.js"></script>
 <script charset="utf-8" type="text/javascript" src="/lib/viewer.min.js"></script>
 <template th:replace="components/foot-link"></template>

+ 8 - 2
src/main/resources/templates/product/detail.html

@@ -44,7 +44,12 @@
                 </div>
             </div>
             <div class="detailBox" th:object="${product}">
-                <div class="crumbs">
+                <div class="product-collection" @click="handleCollection">
+                    <img :src="collectionType ? '/img/account/icon-collection@2x.png' : '/img/account/icon-collection-none@2x.png'"
+                         alt="">
+                    <p>{{ collectionType ? '已收藏' : '收藏' }}</p>
+                </div>
+                <div class="crumbss">
                     <span v-text="'所属分类:'+productTypeName"></span>
                 </div>
                 <div class="Beautyfair">
@@ -260,7 +265,8 @@
                     <li class="swiper-slide mfc" v-for="p in recommends">
                         <div class="item">
                             <a class="image" :href="'/product-'+p.productId+'.html'" target="_blank">
-                                <img :src="p.image" :alt="p.name" onerror="javascript:this.src='/img/base/placeholder.png';">
+                                <img :src="p.image" :alt="p.name"
+                                     onerror="javascript:this.src='/img/base/placeholder.png';">
                                 <span v-html="p.name"></span>
                             </a>
                         </div>

+ 1 - 1
src/main/resources/templates/supplier-center/order/delivery.html

@@ -68,7 +68,7 @@
                                         <div class="delivery-number">
                                             <span class="red">*</span>本次发货:
                                             <span class="sp-delivery-cal sp-delivery-reduce" @click="changeCountSub(order)">-</span>
-                                            <input type="number" class="del-num" v-model="inputVal" @change="numberChange(order)"/>
+                                            <input type="number" class="del-num" v-model="order.inputVal" @change="numberChange(order)"/>
                                             <span class="sp-delivery-cal sp-delivery-add" @click="changeaddCount(order)">+</span>
                                         </div>
                                     </div>

+ 5 - 4
src/main/resources/templates/supplier-center/order/detail.html

@@ -50,17 +50,18 @@
                         <ul class="product-title">
                             <li>商品信息</li>
                             <li>单价</li>
-                            <li>数量(赠品数)</li>
+                            <li>数量</li>
                             <li>总价</li>
                         </ul>
                         <ul class="pro-information">
                             <li v-for="pro in orderList ">
                                 <div class="product-img">
+                                    <span class="tips" v-if="pro.productType==2||pro.productType==1">赠品</span>
                                     <img :src="pro.image"/>
                                     <h3>{{pro.name}}</h3>
                                 </div>
                                 <div>¥{{pro.price}}</div>
-                                <div>{{pro.num}}({{pro.presentNum}})</div>
+                                <div>{{pro.num}}</div>
                                 <div>¥{{pro.totalAmount}}</div>
                             </li>
                         </ul>
@@ -93,8 +94,8 @@
                          </div>
                     </div>
                     <div class="sett-re">
-                        <div>结算记录</div>
-                        <div class="shadow" v-if="payShopRecord !=''">
+                        <div class="title">结算记录</div>
+                        <div class="payShopRecord shadow clear" v-if="payShopRecord !=''">
                              <div v-for="pay in payShopRecord">
                                  <p>{{pay.status}}.结算时间:{{pay.payTime}}</p>
                                  <p>结算金额:¥{{pay.payAmount}}</p>

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

@@ -31,7 +31,7 @@
                 <div class="new-s-item">
                         <form action="">
                             <div class='order-border'><span>订单编号:</span><input type="text" id="order-number" v-model="params.shopOrderNo" class="Buyer" placeholder="请输入订单编号"></div>
-                            <div class='order-border'><span>买家名称:</span><input type="text" id="name-buyer" v-model="params.receiver" class="Buyer" placeholder="请输入买家名称"> </div>
+                            <div class='order-border'><span>收货人名称:</span><input type="text" id="name-buyer" v-model="params.receiver" class="Buyer" placeholder="请输入收货人名称"> </div>
                             <div>
                                 结算状态:
                                 <select name="" id="settlement-status" class="state" @change="getpayStatus($event)">
@@ -83,6 +83,7 @@
                                     <div class="order-product" v-for="proitem in order.orderProductList">
                                         <div class="product-img">
                                             <img :src="proitem.image"/>
+                                            <span class="tips" v-if="proitem.productType==2||proitem.productType==1">赠品</span>
                                         </div>
                                         <div class="product-info">
                                             <h3>{{proitem.name}}</h3>

+ 3 - 2
src/main/resources/templates/supplier-center/shop/preview.html

@@ -106,7 +106,7 @@
                     <div class="preview-tabs-item" :class="{ active: tabIndex === 0 }" @click="changeTab(0)">产品介绍</div>
                     <div class="preview-tabs-item" :class="{ active: tabIndex === 1 }" @click="changeTab(1)" v-show="previewParams.length>0">相关参数</div>
                     <div class="preview-tabs-item" :class="{ active: tabIndex === 2 }" @click="changeTab(2)" v-show="shopInfo.orderInfo !='' || shopInfo.serviceInfo != ''">服务项目</div>
-                    <div class="preview-tabs-item" :class="{ active: tabIndex === 3 }" @click="changeTab(3)">评价(0)</div>
+                    <div class="preview-tabs-item" :class="{ active: tabIndex === 3 }" @click="changeTab(3)" v-if="isTrainingMethod">培训方案</div>
                 </div>
                 <div class="preview-section" v-show="tabIndex === 0">
                     <div class="preview-section-html" v-html="shopInfo.detailInfo"></div>
@@ -130,7 +130,8 @@
                     </div>
                 </div>
                 <div class="preview-section" v-show="tabIndex === 3">
-                    <p class="none">该商品暂无评价!</p>
+                    <div class="parameter-text-title">培训方式: <span class="sm" v-text="trainingMethodText"></span></div>
+                    <div class="parameter-text-p">培训费用: <span class="sm" v-text="trainingType"></span></div>
                 </div>
             </div>
             <div class="preview-right">

+ 4 - 2
src/main/resources/templates/supplier/index.html

@@ -18,8 +18,10 @@
         <div id="supplierBanner" class="swiper-container">
             <ul class="swiper-wrapper">
             <template v-if="supplierBanner.length>0">
-                <li class="swiper-slide mfc" v-for="imgUrl in supplierBanner">
-                    <img src="/img/base/placeholder.png" :data-original="imgUrl">
+                <li class="swiper-slide mfc" v-for="banner in supplierBanner">
+                    <a :href="banner.link" target="_blank">
+                        <img src="/img/base/placeholder.png" :data-original="banner.image">
+                    </a>
                 </li>
             </template>
             <template v-else>

+ 141 - 0
src/main/resources/templates/user-center/collection/collection.html

@@ -0,0 +1,141 @@
+<!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>
+  <title>采美365网-商品列表</title>
+  <template th:replace="components/head-link"></template>
+  <link th:href="@{/css/user-center/collection/collection.css(v=${version})}" rel="stylesheet" type="text/css">
+  <template th:replace="components/analysis"></template>
+</head>
+<body>
+<!-- 引用头部 -->
+<template th:replace="components/header"></template>
+
+<!-- 商品列表 -->
+<div id="productList">
+
+  <div v-if="listLoading" class="loading">
+    <img src="/img/base/loading.gif">
+  </div>
+  <template v-else>
+    <!--商品列表-->
+    <div class="collection-title">
+      <div class="collection-name">收藏的商品</div>
+      <div class="collection-btnmain">
+        <div class="collection-btn" v-if="!isHandle">
+          <div class="coll-btn" @click="showHandle" :class="listData.length > 0 ? '' : 'none'">批量操作</div>
+        </div>
+        <div class="collection-btn" v-else>
+          <div class="coll-eang">
+            <div class="coll-span all" @click="isCheckedAll">
+              <span class="coll-checked" :class="[isAllChecked ? 'checked': '']"></span>
+              <span>全选</span>
+            </div>
+            <div class="coll-span cart" @click="hanldAllAddCart">
+              <span class="coll-cart"></span>
+              <span>加入购物车({{ checkedNum }})</span>
+            </div>
+            <div class="coll-span coll" @click="hanldAllCancel">
+              <span class="coll-icon"></span>
+              <span>取消收藏({{ checkedNum }})</span>
+            </div>
+          </div>
+          <div class="coll-btn" @click="hideHandle">完成</div>
+        </div>
+      </div>
+    </div>
+    <div class="collection-content clear">
+      <ul class="productList clear mfw" v-if="isListEmpty">
+        <li class="productItem " v-for="p in listData">
+          <div class="product-cancel" @click="hanldCancel(p)" v-if="!isHandle">取消收藏</div>
+          <div class="product-button" v-if="!isHandle">
+            <div class="coll-btn add" @click="hanldBuyCart(p,1)">加入购物车</div>
+            <div class="coll-btn buy" @click="hanldBuyCart(p,2)">立即购买</div>
+          </div>
+          <div class="product-mask" v-if="isHandle"  @click="checkedSoperv(p)">
+            <span class="mask-checked" :class="[p.isChecked ?'checked':'']"></span>
+          </div>
+          <a class="image" :href="'/product-'+p.productId+'.html'" target="_blank">
+            <img :src="p.image" :data-original="p.image" :alt="p.name">
+            <p class="name" v-html="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">
+                    <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>-->
+                      <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>
+              </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/account/icon-collection-empty@2x.png">
+        <div class="msg"><p>暂无收藏商品~</p></div>
+      </div>
+    </div>
+    <!--分页-->
+    <div v-if="(!isPC) && noMore" class="noMore">---- 没有更多了 ----</div>
+    <div v-if="isPC && pageTotal>1" class="pageWrap clear">
+      <a v-if="listQuery.pageNum>1" class="prev" @click="toPagination(listQuery.pageNum*1-1)" href="javascript:void(0);"></a>
+      <template v-for="n in showPageBtn">
+        <a v-if="n" :class="{'on':(n==listQuery.pageNum)}" @click="toPagination(n)" href="javascript:void(0);" v-text="n"></a>
+        <span v-else>···</span>
+      </template>
+      <a v-if="listQuery.pageNum<pageTotal" class="next" @click="toPagination(listQuery.pageNum*1+1)" href="javascript:void(0);"></a>
+      <span>共<b v-text="pageTotal>1?pageTotal:1"></b>页</span>
+      <span>跳至</span>
+      <input v-model="pageInput" @blur="checkNum()"/>
+      <span>页</span>&nbsp;
+      <a class="btn" href="javascript:void(0);" @click="toPagination(pageInput)">点击跳转</a>
+    </div>
+  </template>
+
+</div>
+<!-- 引入底部 -->
+<!--<template th:replace="components/footer"></template>-->
+<template th:replace="components/foot-link"></template>
+<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/common/serviceapi/shopping.service.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/user-center/collection/collection.js(v=${version})}"></script>
+</body>
+</html>

+ 11 - 0
src/main/resources/templates/user-center/dashboard.html

@@ -85,6 +85,17 @@
                             </div>
                         </div>
                     </div>
+                    <div class="user-content clear">
+                        <div class="title order">我的收藏</div>
+                        <div class="section">
+                            <div class="user-main collec">
+                                <a href="/user/collection.html" class="account-collec">
+                                    <img src="/img/account/icon-collection@2x.png" alt="">
+                                    <p>收藏商品</p>
+                                </a>
+                            </div>
+                        </div>
+                    </div>
                     <div class="user-content clear">
                         <div class="title order">我的订单</div>
                         <div class="section">

+ 3 - 2
src/main/resources/templates/we_chat/redirect_uri.html

@@ -6,7 +6,8 @@
     <template th:replace="components/head-link"></template>
 </head>
 <body>
-<input type="hidden" th:value="${spiServer}" id="spiServer"><input type="hidden" th:value="${coreServer}" id="coreServer">
+<input type="hidden" th:value="${spiServer}" id="spiServer">
+<input type="hidden" th:value="${coreServer}" id="coreServer">
 <input type="hidden" th:value="${agent}" id="userAgent">
 <template th:replace="components/foot-link"></template>
 <script charset="utf-8" type="text/javascript">
@@ -15,7 +16,7 @@
     var wx_code = getUrlParam('code');
     var wx_state = getUrlParam('state');
     var userData = '';
-    $.get(spiServer+'/user/login/auth/website?code='+wx_code+'&state='+wx_state+'&mode='+wx_mode, function(r){
+    $.get(coreServer+'/user/login/auth/website?code='+wx_code+'&state='+wx_state+'&mode='+wx_mode, function(r){
         if(r.code===0){
             console.log(r.data);
             userData = {

Деякі файли не було показано, через те що забагато файлів було змінено