瀏覽代碼

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

# Conflicts:
#	src/main/resources/templates/product/instruelist.html
chao 3 年之前
父節點
當前提交
8ba63a0742
共有 100 個文件被更改,包括 5740 次插入537 次删除
  1. 7 3
      src/main/java/com/caimei/www/controller/RedirectController.java
  2. 18 0
      src/main/java/com/caimei/www/controller/authorized/user/UserPageController.java
  3. 23 0
      src/main/java/com/caimei/www/controller/unlimited/ProductController.java
  4. 5 0
      src/main/java/com/caimei/www/mapper/SinglePageDao.java
  5. 5 0
      src/main/java/com/caimei/www/service/page/SinglePageService.java
  6. 7 0
      src/main/java/com/caimei/www/service/page/impl/SinglePageServiceImpl.java
  7. 6 0
      src/main/resources/mapper/SinglePageMapper.xml
  8. 157 151
      src/main/resources/static/css/activity/activityTopic.css
  9. 737 0
      src/main/resources/static/css/activity/beautyTopic.css
  10. 349 0
      src/main/resources/static/css/activity/normalize.css
  11. 14 0
      src/main/resources/static/css/activity/swiper.min.css
  12. 4 1
      src/main/resources/static/css/base/base.h5.css
  13. 4 1
      src/main/resources/static/css/base/base.pc.css
  14. 3 1
      src/main/resources/static/css/base/floor.css
  15. 2 2
      src/main/resources/static/css/index/index_new.h5.css
  16. 2 2
      src/main/resources/static/css/index/index_new.pc.css
  17. 41 22
      src/main/resources/static/css/product/detail.h5.css
  18. 37 16
      src/main/resources/static/css/product/detail.pc.css
  19. 7 4
      src/main/resources/static/css/product/instruement-list.css
  20. 105 4
      src/main/resources/static/css/product/list.css
  21. 82 0
      src/main/resources/static/css/product/product-coupon.css
  22. 121 6
      src/main/resources/static/css/shopping/shopping.css
  23. 123 84
      src/main/resources/static/css/supplier/index.css
  24. 1 1
      src/main/resources/static/css/user-center/account/beans.css
  25. 55 0
      src/main/resources/static/css/user-center/account/coupon-collection.css
  26. 74 0
      src/main/resources/static/css/user-center/account/coupon-exchange.css
  27. 74 0
      src/main/resources/static/css/user-center/account/coupon.css
  28. 2 2
      src/main/resources/static/css/user-center/dashboard.css
  29. 二進制
      src/main/resources/static/img/account/icon-coupon-alertbg@2x.png
  30. 二進制
      src/main/resources/static/img/account/icon-coupon-alertbg@h52x.png
  31. 二進制
      src/main/resources/static/img/account/icon-coupon-alertbtnbg@2x.png
  32. 二進制
      src/main/resources/static/img/account/icon-coupon-alertbtnbg@h52x.png
  33. 二進制
      src/main/resources/static/img/account/icon-coupon-bg@2x.png
  34. 二進制
      src/main/resources/static/img/account/icon-coupon-bg@h52x.png
  35. 二進制
      src/main/resources/static/img/account/icon-coupon-empty@2x.png
  36. 二進制
      src/main/resources/static/img/account/icon-coupon-none@2x.png
  37. 二進制
      src/main/resources/static/img/account/icon-coupon-none@h52x.png
  38. 二進制
      src/main/resources/static/img/account/icon-coupon-received@2x.png
  39. 二進制
      src/main/resources/static/img/account/icon-coupon-received@h52x.png
  40. 二進制
      src/main/resources/static/img/account/icon-coupon-uesb@2x.png
  41. 二進制
      src/main/resources/static/img/account/icon-coupon-uesb@h52x.png
  42. 二進制
      src/main/resources/static/img/activity/cm_cover_bg_h5.png
  43. 二進制
      src/main/resources/static/img/activity/cm_cover_bg_pc.png
  44. 二進制
      src/main/resources/static/img/activity/icon.png
  45. 二進制
      src/main/resources/static/img/activity/pc-palyer.png
  46. 二進制
      src/main/resources/static/img/activity/pc_01.png
  47. 二進制
      src/main/resources/static/img/activity/pc_02.png
  48. 二進制
      src/main/resources/static/img/activity/pc_a1.png
  49. 二進制
      src/main/resources/static/img/activity/pc_a2.png
  50. 二進制
      src/main/resources/static/img/activity/pc_bottom.png
  51. 二進制
      src/main/resources/static/img/activity/pc_close.png
  52. 二進制
      src/main/resources/static/img/activity/pc_icon.png
  53. 二進制
      src/main/resources/static/img/activity/pc_note.png
  54. 二進制
      src/main/resources/static/img/activity/placeholder.png
  55. 二進制
      src/main/resources/static/img/activity/wechat_1.jpg
  56. 二進制
      src/main/resources/static/img/cart/icon_weigouxuan@2x.png
  57. 二進制
      src/main/resources/static/img/cart/icon_yixuanze@2x.png
  58. 1 0
      src/main/resources/static/js/activity/base.js
  59. 286 0
      src/main/resources/static/js/activity/index.js
  60. 382 0
      src/main/resources/static/js/activity/layout.js
  61. 89 0
      src/main/resources/static/js/activity/mixin.js
  62. 14 0
      src/main/resources/static/js/activity/swiper.min.js
  63. 124 0
      src/main/resources/static/js/activity/utils.js
  64. 3 1
      src/main/resources/static/js/base.js
  65. 1 3
      src/main/resources/static/js/common/ajax.service.js
  66. 1 3
      src/main/resources/static/js/common/locallhostAjax.service.js
  67. 128 1
      src/main/resources/static/js/common/serviceapi/product.service.js
  68. 46 2
      src/main/resources/static/js/common/serviceapi/shopping.service.js
  69. 13 1
      src/main/resources/static/js/common/serviceapi/user.service.js
  70. 12 4
      src/main/resources/static/js/common/serviceapi/utils.service.js
  71. 29 16
      src/main/resources/static/js/index.js
  72. 110 9
      src/main/resources/static/js/product/detail.js
  73. 15 0
      src/main/resources/static/js/product/list.js
  74. 108 0
      src/main/resources/static/js/product/product-coupon.js
  75. 184 19
      src/main/resources/static/js/shopping/cart.js
  76. 110 57
      src/main/resources/static/js/shopping/confirm.js
  77. 15 0
      src/main/resources/static/js/supplier/index.js
  78. 176 0
      src/main/resources/static/js/user-center/account/coupon-collection.js
  79. 72 0
      src/main/resources/static/js/user-center/account/coupon-exchange.js
  80. 202 0
      src/main/resources/static/js/user-center/account/coupon.js
  81. 11 9
      src/main/resources/static/js/user-center/dashboard.js
  82. 1 1
      src/main/resources/templates/account/login.html
  83. 64 8
      src/main/resources/templates/activity/activityTopic.html
  84. 823 0
      src/main/resources/templates/activity/beautyTopic.html
  85. 1 1
      src/main/resources/templates/components/header.html
  86. 13 15
      src/main/resources/templates/index.html
  87. 5 0
      src/main/resources/templates/product/beautytopic.html
  88. 54 1
      src/main/resources/templates/product/detail.html
  89. 15 10
      src/main/resources/templates/product/instruelist.html
  90. 3 1
      src/main/resources/templates/product/instrument.html
  91. 36 20
      src/main/resources/templates/product/list.html
  92. 96 0
      src/main/resources/templates/product/product-coupon.html
  93. 52 6
      src/main/resources/templates/shopping/cart.html
  94. 33 3
      src/main/resources/templates/shopping/confirm.html
  95. 72 42
      src/main/resources/templates/supplier/index.html
  96. 81 0
      src/main/resources/templates/user-center/account/coupon-collection.html
  97. 79 0
      src/main/resources/templates/user-center/account/coupon-exchange.html
  98. 106 0
      src/main/resources/templates/user-center/account/coupon.html
  99. 5 1
      src/main/resources/templates/user-center/dashboard.html
  100. 4 3
      src/main/resources/templates/user-center/order/detail.html

+ 7 - 3
src/main/java/com/caimei/www/controller/RedirectController.java

@@ -112,9 +112,13 @@ public class RedirectController {
     public String activityTopics2(@RequestParam("id") Integer id) {
         return "redirect:/product/activity-"+id+".html";
     }
-    @GetMapping("/product/beautytopic.html")
-    public String activityTopics3() {
-        return "redirect:/product/beauty.html";
+
+    /**
+     * 云上美博会
+     */
+    @GetMapping("/cmpage/info-7-{id}.html")
+    public String activityTopics3(@PathVariable("id") Integer id) {
+        return "redirect:/product/beauty-" + id + ".html";
     }
 
     /**

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

@@ -52,6 +52,12 @@ public class UserPageController extends BaseController {
 	private static final String ACCOUNT_LIST = "user-center/account/account";
 	/** 采美豆明细 */
 	private static final String BEANS_LIST = "user-center/account/beans";
+	/** 优惠券列表 */
+	private static final String COUPON_LIST = "user-center/account/coupon";
+	/** 领券中心 */
+	private static final String COUPON_COLLECTION = "user-center/account/coupon-collection";
+	/** 兑换优惠券 */
+	private static final String COUPON_EXCHANGE = "user-center/account/coupon-exchange";
 
     /** 我的采美 */
     @GetMapping("/user/dashboard.html")
@@ -162,4 +168,16 @@ public class UserPageController extends BaseController {
     @GetMapping("/user/beans.html")
     public String beans() {return BEANS_LIST;}
 
+    /** 优惠券列表 */
+    @GetMapping("/user/coupon.html")
+    public String coupon() {return COUPON_LIST;}
+
+    /** 领券中心 */
+    @GetMapping("/user/coupon-collection.html")
+    public String couponCollection() {return COUPON_COLLECTION;}
+
+    /** 兑换优惠券 */
+    @GetMapping("/user/coupon-exchange.html")
+    public String couponExchange() {return COUPON_EXCHANGE;}
+
 }

+ 23 - 0
src/main/java/com/caimei/www/controller/unlimited/ProductController.java

@@ -33,6 +33,9 @@ public class ProductController extends BaseController {
     private static final String INSTRUMENT_LIST_PATH = "product/instruelist";
     private static final String QUALITY_AUTHORRIZE_PATH = "product/qualityauthorize";
     private static final String ACTIVITY_TOP_PATH = "activity/activityTopic";
+    private static final String CLOUD_BEAUTY_PATH = "activity/beautyTopic";
+    /** 优惠券活动商品列表 */
+    private static final String PRODUCT_COUPON = "product/product-coupon";
     /**
      * 美博会专题页
      */
@@ -60,6 +63,12 @@ public class ProductController extends BaseController {
         return PRODUCT_LIST_PATH;
     }
 
+    /**
+     * 搜索结果 页面
+     */
+    @GetMapping("/product/product-coupon.html")
+    public String productCoupon() { return PRODUCT_COUPON; }
+
     /**
      * 促销活动商品列表
      */
@@ -294,4 +303,18 @@ public class ProductController extends BaseController {
         return ACTIVITY_TOP_PATH;
     }
 
+    /**
+     * 云上美博会
+     */
+    @GetMapping("/product/beauty-{id}.html")
+    public String getCloudBeautyPath(final Model model, @PathVariable("id") Integer id) {
+        // 活动专题页
+        Integer pageId = singlePageService.getBeautyPageIdById(id);
+        if (pageId == null) {
+            return super.errorPath();
+        }
+        model.addAttribute("pageId", id);
+        return CLOUD_BEAUTY_PATH;
+    }
+
 }

+ 5 - 0
src/main/java/com/caimei/www/mapper/SinglePageDao.java

@@ -101,4 +101,9 @@ public interface SinglePageDao {
     Integer getActivityPageIdById(Integer id);
 
     Integer getPageTypeSort(Integer pageId);
+
+    /**
+     * 云上美博会
+     */
+    Integer getBeautyPageIdById(Integer id);
 }

+ 5 - 0
src/main/java/com/caimei/www/service/page/SinglePageService.java

@@ -40,4 +40,9 @@ public interface SinglePageService {
     Integer getActivityPageIdById(Integer id);
 
     Integer getPageTypeSort(Integer pageId);
+
+    /**
+     * 云上美博会
+     */
+    Integer getBeautyPageIdById(Integer id);
 }

+ 7 - 0
src/main/java/com/caimei/www/service/page/impl/SinglePageServiceImpl.java

@@ -132,4 +132,11 @@ public class SinglePageServiceImpl implements SinglePageService {
         return singlePageDao.getPageTypeSort(pageId);
     }
 
+    @Override
+    public Integer getBeautyPageIdById(Integer id) {
+        if (id == null) {
+            return null;
+        }
+        return singlePageDao.getBeautyPageIdById(id);
+    }
 }

+ 6 - 0
src/main/resources/mapper/SinglePageMapper.xml

@@ -95,5 +95,11 @@
         select typeSort from cm_page
         where id = #{pageId} and enabledStatus = '1'
     </select>
+    <select id="getBeautyPageIdById" resultType="java.lang.Integer">
+        select id from cm_page a
+        where
+            a.type=7 and a.enabledStatus=1
+          and a.id=#{id}
+    </select>
 
 </mapper>

+ 157 - 151
src/main/resources/static/css/activity/activityTopic.css

@@ -5,7 +5,8 @@ a:hover{color:#333}
 100%{opacity:0.8}
 }@keyframes my-fade-ease{0%{opacity:0}
 100%{opacity:0.8}
-}@media screen and (min-width:768px){.banner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:hidden}
+}@media screen and (min-width:768px){
+.banner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:hidden}
 .banner img{display:block;width:auto;height:510px;max-width:unset}
 .show-more{float:left;width:100%;text-align:center;padding-top:30px}
 .show-more .more-btn{display:inline-block;width:98px;height:30px;line-height:30px;border:1px solid #cccccc;cursor:pointer;-webkit-transition:all 0.4s;-o-transition:all 0.4s;transition:all 0.4s}
@@ -106,7 +107,8 @@ a:hover{color:#333}
 .product-template .floor-item .floor-item-text .pro-price span{vertical-align:middle}
 .product-template .floor-item .floor-item-text .pro-price .price-tag{height:22px;margin:2px 0 ;}
 .product-template .floor-item .floor-item-text .pro-price .none{color: #999999;text-decoration: line-through;}
-.product-template .floor-item .floor-item-text .pro-price .price-tag .tag{display:inline-block;height:20px;line-height:20px;border:1px solid #ffe6dc;border-radius:2px;font-size:12px;color:#e15616;cursor:pointer;background:#fff;padding:0 4px;position:relative;font-style:normal}
+.product-template .floor-item .floor-item-text .pro-price .price-tag .tag{display:inline-block;height:20px;line-height:20px;border:1px solid #ffe6dc;border-radius:2px;font-size:12px;color:#e15616;cursor:pointer;background:#fff;padding:0 4px;position:relative;font-style:normal;float: left;}
+.product-template .floor-item .floor-item-text .pro-price .price-tag .couponTag{display:inline-block;height:20px;line-height:20px;border:1px solid #f94b4b;border-radius:2px;font-size:12px;color:#f94b4b;background:#fff1eb;padding:0 2px;position:relative;font-style:normal;float: left;margin-right: 5px;}
 .product-template.floor-grid-1 .floor-main{height:604.42857px;overflow:hidden}
 .product-template.floor-grid-1 .floor-item-ad.ad1{width:100%;height:117.14286px;margin-right:0}
 .product-template.floor-grid-1 .floor-item-ad.ad2{width:434px;height:175.71429px}
@@ -148,153 +150,157 @@ a:hover{color:#333}
 .product-template.floor-grid-10 .floor-main{height:559.14286px;overflow:hidden}
 .product-template.floor-grid-10 .floor-item-ad.ad1{width:100%;height:117.14286px}
 .product-template.floor-grid-10 .floor-item:nth-of-type(5n){margin-right:0}
-}@media screen and (max-width:768px){.banner{width:100vw;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:hidden}
-.banner img{display:block;width:100vw;height:48vw;max-width:unset}
-.show-more{padding-top:6vw;width:100vw;text-align:center}
-.show-more .more-btn{display:inline-block;width:20vw;height:6vw;font-size:3vw;line-height:6vw;border:1px solid #ccc}
-.show-more .more-btn::after{content:'';width:4vw;height:2.4vw;display:inline-block;background:url(/img/base/icon_m.png) no-repeat;background-size:100vw auto;background-position:-51.5vw -2vw}
-.max{height:auto !important}
-.p-icon{display:inline-block;width:16vw;height:5vw;vertical-align:middle;margin-bottom:1vw;margin-left:-1vw}
-.p-icon::before{content:'';display:inline-block;width:16vw;height:5vw;background:url(/img/base/icon_m.png) no-repeat;background-size:100vw auto}
-.p-icon.i1::before{background-position:-84vw -69.5vw}
-.p-icon.i2::before{background-position:-84vw -76.5vw}
-.p-icon.i3::before{background-position:-84vw -83.5vw}
-.p-icon.i4::before{background-position:-84vw -90.5vw}
-.p-icon.i5::before{background-position:-84vw -97.5vw}
-.swiper-container .swiper-pagination{position:relative;padding-top:2.6vw}
-.swiper-container .swiper-pagination .cm-bullet{display:inline-block;margin:0 2px;width:3vw;height:0.5vw;background:#e15616;opacity:0.2;cursor:pointer}
-.swiper-container .swiper-pagination .cm-bullet.cm-bullet-active{width:20px;opacity:1}
-.inner .floor-item{display:block}
-.inner .floor-scroll{overflow:visible;overflow-x:scroll !important;white-space:nowrap}
-.inner .floor-scroll::-webkit-scrollbar{width:0;height:0;opacity:0;visibility:hidden}
-.inner .floor-scroll .floor-item{display:inline-block !important}
-.inner .floor-title{padding-left:3vw;padding-top:4vw}
-.inner .floor-title h2{font-weight:bold;color:#4a4f58;font-size:4.8vw;line-height:9.7vw}
-.inner .floor-title p{font-weight:normal;color:#93979f;font-size:3.4vw;line-height:4.3vw}
-.picture-template.floor-grid-1 .swiper-slide{padding:0 3vw;-webkit-box-sizing:border-box;box-sizing:border-box}
-.picture-template.floor-grid-1 .floor-item{width:22vw;height:22vw;margin:2vw 2vw 0 0;float:left}
-.picture-template.floor-grid-1 .floor-item img{width:22vw;height:22vw}
-.picture-template.floor-grid-1 .floor-item:nth-of-type(4n){margin-right:0}
-.picture-template.floor-grid-2 .swiper-slide{padding:0 3vw;-webkit-box-sizing:border-box;box-sizing:border-box}
-.picture-template.floor-grid-2 .floor-item{width:30vw;height:21vw;margin:2vw 2vw 0 0;float:left}
-.picture-template.floor-grid-2 .floor-item img{width:30vw;height:21vw}
-.picture-template.floor-grid-2 .floor-item:nth-of-type(3n){margin-right:0}
-.picture-template.floor-grid-3 .floor-item{width:41vw;height:32vw;margin:2vw 2vw 0 0}
-.picture-template.floor-grid-3 .floor-item img{width:41vw;height:32vw}
-.picture-template.floor-grid-3 .floor-item:first-of-type{margin-left:3vw}
-.picture-template.floor-grid-3 .floor-item:last-of-type{margin-right:3vw}
-.picture-template.floor-grid-4{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 3vw}
-.picture-template.floor-grid-4 .floor-item{width:94vw;height:48vw;margin:2vw 2vw 0 0}
-.picture-template.floor-grid-4 .floor-item img{width:94vw;height:48vw}
-.picture-template.floor-grid-5 .swiper-slide{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 3vw}
-.picture-template.floor-grid-5 .floor-item{width:46vw;height:28vw;margin:2vw 2vw 0 0;float:left}
-.picture-template.floor-grid-5 .floor-item img{width:46vw;height:28vw}
-.picture-template.floor-grid-5 .floor-item:nth-of-type(2n){margin-right:0}
-.picture-template.floor-grid-6{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 3vw}
-.picture-template.floor-grid-6 .floor-item{width:94vw;height:45vw;margin:2vw 2vw 0 0}
-.picture-template.floor-grid-6 .floor-item img{width:94vw;height:45vw}
-.article-template .floor-item .floor-item-text h2{font-size:4vw;font-weight:normal;color:#4a4f58;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical}
-.article-template .floor-item .floor-item-text p{color:#86878b;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;text-align:justify}
-.article-template.floor-grid-1 .floor-item{width:94vw;height:33vw;margin:2vw 3vw;background:#fff;-webkit-box-sizing:border-box;box-sizing:border-box;padding:3vw}
-.article-template.floor-grid-1 .floor-item img{width:94vw;height:33vw}
-.article-template.floor-grid-1 .floor-item .floor-item-cover{width:27vw;height:27vw;float:left}
-.article-template.floor-grid-1 .floor-item .floor-item-cover img{width:27vw;height:27vw}
-.article-template.floor-grid-1 .floor-item .floor-item-text{float:right;width:57vw}
-.article-template.floor-grid-1 .floor-item .floor-item-text h2{line-height:5vw;-webkit-line-clamp:1}
-.article-template.floor-grid-1 .floor-item .floor-item-text p{margin-top:3vw;font-size:3vw;line-height:5vw;-webkit-line-clamp:4}
-.article-template.floor-grid-2 .floor-item{width:94vw;height:72vw;margin:2vw 3vw;background:#fff}
-.article-template.floor-grid-2 .floor-item .floor-item-cover{width:94vw;height:48vw}
-.article-template.floor-grid-2 .floor-item .floor-item-cover img{width:94vw;height:48vw}
-.article-template.floor-grid-2 .floor-item .floor-item-text{width:84vw;-webkit-box-sizing:border-box;box-sizing:border-box;padding:3vw}
-.article-template.floor-grid-2 .floor-item .floor-item-text h2{line-height:5vw;-webkit-line-clamp:1}
-.article-template.floor-grid-2 .floor-item .floor-item-text p{margin-top:3vw;font-size:3vw;line-height:5vw;-webkit-line-clamp:2}
-.article-template.floor-grid-3 .floor-item{width:41vw;height:52vw;margin:2vw 2vw 0 0;background:#fff}
-.article-template.floor-grid-3 .floor-item:first-of-type{margin-left:3vw}
-.article-template.floor-grid-3 .floor-item:last-of-type{margin-right:3vw}
-.article-template.floor-grid-3 .floor-item .floor-item-cover{width:41vw;height:29vw}
-.article-template.floor-grid-3 .floor-item .floor-item-cover img{width:41vw;height:29vw}
-.article-template.floor-grid-3 .floor-item .floor-item-text{width:41vw;-webkit-box-sizing:border-box;box-sizing:border-box;padding:3vw}
-.article-template.floor-grid-3 .floor-item .floor-item-text h2{line-height:5vw;-webkit-line-clamp:1}
-.article-template.floor-grid-3 .floor-item .floor-item-text p{margin-top:3vw;font-size:3vw;line-height:5vw;-webkit-line-clamp:2}
-.article-template.floor-grid-4{padding:0 3vw;-webkit-box-sizing:border-box;box-sizing:border-box}
-.article-template.floor-grid-4 .floor-item{width:46vw;height:57vw;margin:2vw 2vw 0 0;float:left;background:#fff}
-.article-template.floor-grid-4 .floor-item:nth-of-type(2n){margin-right:0}
-.article-template.floor-grid-4 .floor-item .floor-item-cover{width:46vw;height:33vw}
-.article-template.floor-grid-4 .floor-item .floor-item-cover img{width:46vw;height:33vw}
-.article-template.floor-grid-4 .floor-item .floor-item-text{width:46vw;-webkit-box-sizing:border-box;box-sizing:border-box;padding:3vw}
-.article-template.floor-grid-4 .floor-item .floor-item-text h2{line-height:5vw;-webkit-line-clamp:1}
-.article-template.floor-grid-4 .floor-item .floor-item-text p{margin-top:3vw;font-size:3vw;line-height:5vw;-webkit-line-clamp:2}
-.product-template{padding:0 3vw;width:100vw;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}
-.product-template .floor-item-ad{display:block}
-.product-template .floor-item-ad img{width:100%;height:100%}
-.product-template .floor-item{display:block;position:relative;width:46vw;height:68vw;float:left;margin:2vw 2vw 0 0;background:#fff}
-.product-template .floor-item .floor-item-cover{width:46vw;height:46vw}
-.product-template .floor-item .floor-item-cover img{width:46vw;height:46vw}
-.product-template .floor-item .floor-item-text{position:absolute;width:46vw;padding:2vw 3vw;bottom:0;-webkit-box-sizing:border-box;box-sizing:border-box}
-.product-template .floor-item .floor-item-text .pro-tags .tag{display:inline-block;font-size:3vw;padding:0.5vw 0.8vw;border:1px solid #ccc}
-.product-template .floor-item .floor-item-text .pro-title{height:9vw;font-size:3vw;line-height:5vw;color:#4a4f58;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}
-.product-template .floor-item .floor-item-text .pro-price .price-tag{height:5vw;padding:1vw 0}
-.product-template .floor-item .floor-item-text .pro-price .price-tag .tag{font-size:2.4vw;display:inline-block;line-height:5vw;color:#e15616;padding:0 0.8vw;border:1px solid #e15616;border-radius:0.5vw}
-.product-template .floor-item .floor-item-text .pro-price .price{height:5vw;line-height:5vw}
-.product-template .floor-item .floor-item-text .pro-price .none{color: #999999;text-decoration: line-through;}
-.product-template.floor-grid-1 .floor-item-ad{float:left;margin:2vw 2vw 0 0}
-.product-template.floor-grid-1 .floor-item-ad.ad1{width:94vw;height:32vw;margin-right:0}
-.product-template.floor-grid-1 .floor-item-ad.ad2{width:46vw;height:35vw}
-.product-template.floor-grid-1 .floor-item-ad.ad3{width:46vw;height:35vw;margin-right:0}
-.product-template.floor-grid-1 .floor-item:nth-of-type(2n){margin-right:0}
-.product-template.floor-grid-2 .floor-item-ad{float:left;margin:2vw 2vw 0 0}
-.product-template.floor-grid-2 .floor-item-ad.ad1{width:46vw;height:68vw}
-.product-template.floor-grid-2 .floor-item-ad.ad2{width:46vw;height:33vw;margin-right:0}
-.product-template.floor-grid-2 .floor-item-ad.ad3{width:46vw;height:33vw;margin-right:0}
-.product-template.floor-grid-2 .floor-item:nth-of-type(2n){margin-right:0}
-.product-template.floor-grid-3 .floor-item-ad{float:left;margin:2vw 2vw 0 0}
-.product-template.floor-grid-3 .floor-item-ad.ad1{width:46vw;height:68vw}
-.product-template.floor-grid-3 .floor-item-ad.ad2{width:46vw;height:33vw;margin-right:0}
-.product-template.floor-grid-3 .floor-item-ad.ad3{width:46vw;height:33vw;margin-right:0}
-.product-template.floor-grid-3 .floor-item-ad.ad4{width:46vw;height:33vw}
-.product-template.floor-grid-3 .floor-item-ad.ad5{width:46vw;height:33vw;margin-right:0}
-.product-template.floor-grid-3 .floor-item:nth-of-type(2n){margin-right:0}
-.product-template.floor-grid-4 .floor-item:nth-of-type(2n){margin-right:0}
-.product-template.floor-grid-5 .floor-item-ad{float:left;margin:2vw 2vw 0 0}
-.product-template.floor-grid-5 .floor-item-ad.ad1{width:94vw;height:24vw}
-.product-template.floor-grid-5 .floor-item-ad.ad2{width:46vw;height:68vw}
-.product-template.floor-grid-5 .floor-item-ad.ad3{width:46vw;height:68vw;margin-right:0}
-.product-template.floor-grid-5 .floor-item:nth-of-type(2n){margin-right:0}
-.product-template.floor-grid-6 .floor-item-ad{float:left;margin:2vw 2vw 0 0}
-.product-template.floor-grid-6 .floor-item-ad.ad1{width:94vw;height:24vw}
-.product-template.floor-grid-6 .floor-item-ad.ad2{width:46vw;height:68vw}
-.product-template.floor-grid-6 .floor-item:nth-of-type(2n+1){margin-right:0}
-.product-template.floor-grid-7 .floor-item-ad{float:left;margin:2vw 2vw 0 0}
-.product-template.floor-grid-7 .floor-item-ad.ad1{width:46vw;height:68vw}
-.product-template.floor-grid-7 .floor-item-ad.ad2{width:46vw;height:68vw;margin-right:0}
-.product-template.floor-grid-7 .floor-item:nth-of-type(2n){margin-right:0}
-.product-template.floor-grid-8 .floor-item-ad{float:left;margin:2vw 2vw 0 0}
-.product-template.floor-grid-8 .floor-item-ad.ad1{width:46vw;height:68vw}
-.product-template.floor-grid-8 .floor-item:nth-of-type(2n+1){margin-right:0}
-.product-template.floor-grid-9 .floor-item-ad,.product-template.floor-grid-10 .floor-item-ad{float:left;margin:2vw 2vw 0 0}
-.product-template.floor-grid-9 .floor-item-ad.ad1,.product-template.floor-grid-10 .floor-item-ad.ad1{width:94vw;height:24vw}
-.product-template.floor-grid-9 .floor-item:nth-of-type(2n),.product-template.floor-grid-10 .floor-item:nth-of-type(2n){margin-right:0}
-.product-template.floor-grid-11{padding:0 !important}
-.product-template.floor-grid-11 .swiper-slide{padding:0 3vw;-webkit-box-sizing:border-box;box-sizing:border-box}
-.product-template.floor-grid-11 .floor-item:nth-of-type(2n){margin-right:0}
-.article-template.floor-main{overflow:hidden}
-.article-template.floor-main.floor-grid-1{height:140vw}
-.article-template.floor-main.floor-grid-2{height:148vw}
-.article-template.floor-main.floor-grid-4{height:118vw}
-.picture-template.floor-main{overflow:hidden}
-.picture-template.floor-main.floor-grid-4{height:100vw}
-.picture-template.floor-main.floor-grid-6{height:47vw}
-.product-template .floor-main{overflow:hidden}
-.product-template .show-more{float:left}
-.product-template.floor-grid-1 .floor-main{height:141vw}
-.product-template.floor-grid-2 .floor-main{height:140vw}
-.product-template.floor-grid-3 .floor-main{height:175vw}
-.product-template.floor-grid-4 .floor-main{height:140vw}
-.product-template.floor-grid-5 .floor-main{height:166vw}
-.product-template.floor-grid-6 .floor-main{height:166vw}
-.product-template.floor-grid-7 .floor-main{height:140vw}
-.product-template.floor-grid-8 .floor-main{height:140vw}
-.product-template.floor-grid-9 .floor-main{height:166vw}
-.product-template.floor-grid-10 .floor-main{height:140vw}
-.product-template.floor-grid-11 .floor-main{overflow:visible}
+}
+
+@media screen and (max-width:768px){
+    .banner{width:100vw;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:hidden}
+    .banner img{display:block;width:100vw;height:48vw;max-width:unset}
+    .show-more{padding-top:6vw;width:100vw;text-align:center}
+    .show-more .more-btn{display:inline-block;width:20vw;height:6vw;font-size:3vw;line-height:6vw;border:1px solid #ccc}
+    .show-more .more-btn::after{content:'';width:4vw;height:2.4vw;display:inline-block;background:url(/img/base/icon_m.png) no-repeat;background-size:100vw auto;background-position:-51.5vw -2vw}
+    .max{height:auto !important}
+    .p-icon{display:inline-block;width:16vw;height:5vw;vertical-align:middle;margin-bottom:1vw;margin-left:-1vw}
+    .p-icon::before{content:'';display:inline-block;width:16vw;height:5vw;background:url(/img/base/icon_m.png) no-repeat;background-size:100vw auto}
+    .p-icon.i1::before{background-position:-84vw -69.5vw}
+    .p-icon.i2::before{background-position:-84vw -76.5vw}
+    .p-icon.i3::before{background-position:-84vw -83.5vw}
+    .p-icon.i4::before{background-position:-84vw -90.5vw}
+    .p-icon.i5::before{background-position:-84vw -97.5vw}
+    .swiper-container .swiper-pagination{position:relative;padding-top:2.6vw}
+    .swiper-container .swiper-pagination .cm-bullet{display:inline-block;margin:0 2px;width:3vw;height:0.5vw;background:#e15616;opacity:0.2;cursor:pointer}
+    .swiper-container .swiper-pagination .cm-bullet.cm-bullet-active{width:20px;opacity:1}
+    .inner .floor-item{display:block}
+    .inner .floor-scroll{overflow:visible;overflow-x:scroll !important;white-space:nowrap}
+    .inner .floor-scroll::-webkit-scrollbar{width:0;height:0;opacity:0;visibility:hidden}
+    .inner .floor-scroll .floor-item{display:inline-block !important}
+    .inner .floor-title{padding-left:3vw;padding-top:4vw}
+    .inner .floor-title h2{font-weight:bold;color:#4a4f58;font-size:4.8vw;line-height:9.7vw}
+    .inner .floor-title p{font-weight:normal;color:#93979f;font-size:3.4vw;line-height:4.3vw}
+    .picture-template.floor-grid-1 .swiper-slide{padding:0 3vw;-webkit-box-sizing:border-box;box-sizing:border-box}
+    .picture-template.floor-grid-1 .floor-item{width:22vw;height:22vw;margin:2vw 2vw 0 0;float:left}
+    .picture-template.floor-grid-1 .floor-item img{width:22vw;height:22vw}
+    .picture-template.floor-grid-1 .floor-item:nth-of-type(4n){margin-right:0}
+    .picture-template.floor-grid-2 .swiper-slide{padding:0 3vw;-webkit-box-sizing:border-box;box-sizing:border-box}
+    .picture-template.floor-grid-2 .floor-item{width:30vw;height:21vw;margin:2vw 2vw 0 0;float:left}
+    .picture-template.floor-grid-2 .floor-item img{width:30vw;height:21vw}
+    .picture-template.floor-grid-2 .floor-item:nth-of-type(3n){margin-right:0}
+    .picture-template.floor-grid-3 .floor-item{width:41vw;height:32vw;margin:2vw 2vw 0 0}
+    .picture-template.floor-grid-3 .floor-item img{width:41vw;height:32vw}
+    .picture-template.floor-grid-3 .floor-item:first-of-type{margin-left:3vw}
+    .picture-template.floor-grid-3 .floor-item:last-of-type{margin-right:3vw}
+    .picture-template.floor-grid-4{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 3vw}
+    .picture-template.floor-grid-4 .floor-item{width:94vw;height:48vw;margin:2vw 2vw 0 0}
+    .picture-template.floor-grid-4 .floor-item img{width:94vw;height:48vw}
+    .picture-template.floor-grid-5 .swiper-slide{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 3vw}
+    .picture-template.floor-grid-5 .floor-item{width:46vw;height:28vw;margin:2vw 2vw 0 0;float:left}
+    .picture-template.floor-grid-5 .floor-item img{width:46vw;height:28vw}
+    .picture-template.floor-grid-5 .floor-item:nth-of-type(2n){margin-right:0}
+    .picture-template.floor-grid-6{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 3vw}
+    .picture-template.floor-grid-6 .floor-item{width:94vw;height:45vw;margin:2vw 2vw 0 0}
+    .picture-template.floor-grid-6 .floor-item img{width:94vw;height:45vw}
+    .article-template .floor-item .floor-item-text h2{font-size:4vw;font-weight:normal;color:#4a4f58;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical}
+    .article-template .floor-item .floor-item-text p{color:#86878b;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;text-align:justify}
+    .article-template.floor-grid-1 .floor-item{width:94vw;height:33vw;margin:2vw 3vw;background:#fff;-webkit-box-sizing:border-box;box-sizing:border-box;padding:3vw}
+    .article-template.floor-grid-1 .floor-item img{width:94vw;height:33vw}
+    .article-template.floor-grid-1 .floor-item .floor-item-cover{width:27vw;height:27vw;float:left}
+    .article-template.floor-grid-1 .floor-item .floor-item-cover img{width:27vw;height:27vw}
+    .article-template.floor-grid-1 .floor-item .floor-item-text{float:right;width:57vw}
+    .article-template.floor-grid-1 .floor-item .floor-item-text h2{line-height:5vw;-webkit-line-clamp:1}
+    .article-template.floor-grid-1 .floor-item .floor-item-text p{margin-top:3vw;font-size:3vw;line-height:5vw;-webkit-line-clamp:4}
+    .article-template.floor-grid-2 .floor-item{width:94vw;height:72vw;margin:2vw 3vw;background:#fff}
+    .article-template.floor-grid-2 .floor-item .floor-item-cover{width:94vw;height:48vw}
+    .article-template.floor-grid-2 .floor-item .floor-item-cover img{width:94vw;height:48vw}
+    .article-template.floor-grid-2 .floor-item .floor-item-text{width:84vw;-webkit-box-sizing:border-box;box-sizing:border-box;padding:3vw}
+    .article-template.floor-grid-2 .floor-item .floor-item-text h2{line-height:5vw;-webkit-line-clamp:1}
+    .article-template.floor-grid-2 .floor-item .floor-item-text p{margin-top:3vw;font-size:3vw;line-height:5vw;-webkit-line-clamp:2}
+    .article-template.floor-grid-3 .floor-item{width:41vw;height:52vw;margin:2vw 2vw 0 0;background:#fff}
+    .article-template.floor-grid-3 .floor-item:first-of-type{margin-left:3vw}
+    .article-template.floor-grid-3 .floor-item:last-of-type{margin-right:3vw}
+    .article-template.floor-grid-3 .floor-item .floor-item-cover{width:41vw;height:29vw}
+    .article-template.floor-grid-3 .floor-item .floor-item-cover img{width:41vw;height:29vw}
+    .article-template.floor-grid-3 .floor-item .floor-item-text{width:41vw;-webkit-box-sizing:border-box;box-sizing:border-box;padding:3vw}
+    .article-template.floor-grid-3 .floor-item .floor-item-text h2{line-height:5vw;-webkit-line-clamp:1}
+    .article-template.floor-grid-3 .floor-item .floor-item-text p{margin-top:3vw;font-size:3vw;line-height:5vw;-webkit-line-clamp:2}
+    .article-template.floor-grid-4{padding:0 3vw;-webkit-box-sizing:border-box;box-sizing:border-box}
+    .article-template.floor-grid-4 .floor-item{width:46vw;height:57vw;margin:2vw 2vw 0 0;float:left;background:#fff}
+    .article-template.floor-grid-4 .floor-item:nth-of-type(2n){margin-right:0}
+    .article-template.floor-grid-4 .floor-item .floor-item-cover{width:46vw;height:33vw}
+    .article-template.floor-grid-4 .floor-item .floor-item-cover img{width:46vw;height:33vw}
+    .article-template.floor-grid-4 .floor-item .floor-item-text{width:46vw;-webkit-box-sizing:border-box;box-sizing:border-box;padding:3vw}
+    .article-template.floor-grid-4 .floor-item .floor-item-text h2{line-height:5vw;-webkit-line-clamp:1}
+    .article-template.floor-grid-4 .floor-item .floor-item-text p{margin-top:3vw;font-size:3vw;line-height:5vw;-webkit-line-clamp:2}
+    .product-template{padding:0 3vw;width:100vw;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}
+    .product-template .floor-item-ad{display:block}
+    .product-template .floor-item-ad img{width:100%;height:100%}
+    .product-template .floor-item{display:block;position:relative;width:46vw;height:68vw;float:left;margin:2vw 2vw 0 0;background:#fff}
+    .product-template .floor-item .floor-item-cover{width:46vw;height:46vw}
+    .product-template .floor-item .floor-item-cover img{width:46vw;height:46vw}
+    .product-template .floor-item .floor-item-text{position:absolute;width:46vw;padding:2vw 3vw;bottom:0;-webkit-box-sizing:border-box;box-sizing:border-box}
+    .product-template .floor-item .floor-item-text .pro-tags .tag{display:inline-block;font-size:3vw;padding:0.5vw 0.8vw;border:1px solid #ccc}
+    .product-template .floor-item .floor-item-text .pro-title{height:9vw;font-size:3vw;line-height:5vw;color:#4a4f58;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}
+    .product-template .floor-item .floor-item-text .pro-price .price-tag{height:5vw;padding:1vw 0}
+    .product-template .floor-item .floor-item-text .pro-price .price-tag .tag{font-size:2.4vw;display:inline-block;line-height:5vw;color:#e15616;padding:0 0.8vw;border:1px solid #e15616;border-radius:0.5vw}
+    .product-template .floor-item .floor-item-text .pro-price .price-tag .couponTag{padding:0 2vw;border:.27vw solid #f94b4b;background:#fff1eb;font-size:2.8vw;float:left;height:4.2vw;line-height:4.2vw;color: #f94b4b;border-radius: 0.2vw;margin-right: 1vw;}
+    .product-template .floor-item .floor-item-text .pro-price .price{height:5vw;line-height:5vw}
+    .product-template .floor-item .floor-item-text .pro-price .none{color: #999999;text-decoration: line-through;}
+    .product-template.floor-grid-1 .floor-item-ad{float:left;margin:2vw 2vw 0 0}
+    .product-template.floor-grid-1 .floor-item-ad.ad1{width:94vw;height:32vw;margin-right:0}
+    .product-template.floor-grid-1 .floor-item-ad.ad2{width:46vw;height:35vw}
+    .product-template.floor-grid-1 .floor-item-ad.ad3{width:46vw;height:35vw;margin-right:0}
+    .product-template.floor-grid-1 .floor-item:nth-of-type(2n){margin-right:0}
+    .product-template.floor-grid-2 .floor-item-ad{float:left;margin:2vw 2vw 0 0}
+    .product-template.floor-grid-2 .floor-item-ad.ad1{width:46vw;height:68vw}
+    .product-template.floor-grid-2 .floor-item-ad.ad2{width:46vw;height:33vw;margin-right:0}
+    .product-template.floor-grid-2 .floor-item-ad.ad3{width:46vw;height:33vw;margin-right:0}
+    .product-template.floor-grid-2 .floor-item:nth-of-type(2n){margin-right:0}
+    .product-template.floor-grid-3 .floor-item-ad{float:left;margin:2vw 2vw 0 0}
+    .product-template.floor-grid-3 .floor-item-ad.ad1{width:46vw;height:68vw}
+    .product-template.floor-grid-3 .floor-item-ad.ad2{width:46vw;height:33vw;margin-right:0}
+    .product-template.floor-grid-3 .floor-item-ad.ad3{width:46vw;height:33vw;margin-right:0}
+    .product-template.floor-grid-3 .floor-item-ad.ad4{width:46vw;height:33vw}
+    .product-template.floor-grid-3 .floor-item-ad.ad5{width:46vw;height:33vw;margin-right:0}
+    .product-template.floor-grid-3 .floor-item:nth-of-type(2n){margin-right:0}
+    .product-template.floor-grid-4 .floor-item:nth-of-type(2n){margin-right:0}
+    .product-template.floor-grid-5 .floor-item-ad{float:left;margin:2vw 2vw 0 0}
+    .product-template.floor-grid-5 .floor-item-ad.ad1{width:94vw;height:24vw}
+    .product-template.floor-grid-5 .floor-item-ad.ad2{width:46vw;height:68vw}
+    .product-template.floor-grid-5 .floor-item-ad.ad3{width:46vw;height:68vw;margin-right:0}
+    .product-template.floor-grid-5 .floor-item:nth-of-type(2n){margin-right:0}
+    .product-template.floor-grid-6 .floor-item-ad{float:left;margin:2vw 2vw 0 0}
+    .product-template.floor-grid-6 .floor-item-ad.ad1{width:94vw;height:24vw}
+    .product-template.floor-grid-6 .floor-item-ad.ad2{width:46vw;height:68vw}
+    .product-template.floor-grid-6 .floor-item:nth-of-type(2n+1){margin-right:0}
+    .product-template.floor-grid-7 .floor-item-ad{float:left;margin:2vw 2vw 0 0}
+    .product-template.floor-grid-7 .floor-item-ad.ad1{width:46vw;height:68vw}
+    .product-template.floor-grid-7 .floor-item-ad.ad2{width:46vw;height:68vw;margin-right:0}
+    .product-template.floor-grid-7 .floor-item:nth-of-type(2n){margin-right:0}
+    .product-template.floor-grid-8 .floor-item-ad{float:left;margin:2vw 2vw 0 0}
+    .product-template.floor-grid-8 .floor-item-ad.ad1{width:46vw;height:68vw}
+    .product-template.floor-grid-8 .floor-item:nth-of-type(2n+1){margin-right:0}
+    .product-template.floor-grid-9 .floor-item-ad,.product-template.floor-grid-10 .floor-item-ad{float:left;margin:2vw 2vw 0 0}
+    .product-template.floor-grid-9 .floor-item-ad.ad1,.product-template.floor-grid-10 .floor-item-ad.ad1{width:94vw;height:24vw}
+    .product-template.floor-grid-9 .floor-item:nth-of-type(2n),.product-template.floor-grid-10 .floor-item:nth-of-type(2n){margin-right:0}
+    .product-template.floor-grid-11{padding:0 !important}
+    .product-template.floor-grid-11 .swiper-slide{padding:0 3vw;-webkit-box-sizing:border-box;box-sizing:border-box}
+    .product-template.floor-grid-11 .floor-item:nth-of-type(2n){margin-right:0}
+    .article-template.floor-main{overflow:hidden}
+    .article-template.floor-main.floor-grid-1{height:140vw}
+    .article-template.floor-main.floor-grid-2{height:148vw}
+    .article-template.floor-main.floor-grid-4{height:118vw}
+    .picture-template.floor-main{overflow:hidden}
+    .picture-template.floor-main.floor-grid-4{height:100vw}
+    .picture-template.floor-main.floor-grid-6{height:47vw}
+    .product-template .floor-main{overflow:hidden}
+    .product-template .show-more{float:left}
+    .product-template.floor-grid-1 .floor-main{height:141vw}
+    .product-template.floor-grid-2 .floor-main{height:140vw}
+    .product-template.floor-grid-3 .floor-main{height:175vw}
+    .product-template.floor-grid-4 .floor-main{height:140vw}
+    .product-template.floor-grid-5 .floor-main{height:166vw}
+    .product-template.floor-grid-6 .floor-main{height:166vw}
+    .product-template.floor-grid-7 .floor-main{height:140vw}
+    .product-template.floor-grid-8 .floor-main{height:140vw}
+    .product-template.floor-grid-9 .floor-main{height:166vw}
+    .product-template.floor-grid-10 .floor-main{height:140vw}
+    .product-template.floor-grid-11 .floor-main{overflow:visible}
 }

+ 737 - 0
src/main/resources/static/css/activity/beautyTopic.css

@@ -0,0 +1,737 @@
+body{background:#f5f5f5}
+a{color:#333;text-decoration:none}
+.swiper-wrapper{height: auto;}
+.cm-left{float:left}
+.cm-right{float:right}
+.cm-clearfix::after,.cm-container::after,.cm-row::after{content:'';display:block;clear:both}
+.cm-hidden,.cm-text-ellipsis-1,.cm-text-ellipsis-2,.cm-text-ellipsis-3,.cm-text-ellipsis-4{overflow:hidden}
+.cm-none{display:none}
+.cm-not-visible{visibility:hidden}
+.cm-flex,.cm-flex-j-between{display:-webkit-box;display:-ms-flexbox;display:flex}
+.bg-white{background-color:#fff}
+.cm-flex-j-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}
+.cm-flex-1{-webkit-box-flex:1;-ms-flex:1;flex:1}
+.text-justify{text-align:justify}
+.cm-radius-4{border-radius:4px;overflow:hidden}
+.cm-absolute{position:absolute}
+.cm-relative{position:relative}
+.cm-top,.cm-top-left,.cm-top-right{top:0}
+.cm-bottom,.cm-bottom-right,.cm-bottom-left{bottom:0}
+.cm-left,.cm-top-left,.cm-bottom-left{left:0}
+.cm-right,.cm-top-right,.cm-bottom-right{right:0}
+.bg-white{background-color:#fff}
+.cm-text-ellipsis-1,.cm-text-ellipsis-2,.cm-text-ellipsis-3,.cm-text-ellipsis-4{display:-webkit-box;-webkit-box-orient:vertical;white-space:normal}
+.cm-text-ellipsis-1{-webkit-line-clamp:1}
+.cm-text-ellipsis-2{-webkit-line-clamp:2}
+.cm-text-ellipsis-3{-webkit-line-clamp:3}
+.cm-text-ellipsis-4{-webkit-line-clamp:4}
+.cm-img-responsive{max-width:100%;height:auto;display:block}
+.cm-container{width:100%;margin:0 auto}
+[class*='cm-col-']{float:left;-webkit-box-sizing:border-box;box-sizing:border-box}
+.cm-floor .swiper-slide{ height: auto;}
+@media (max-width:560px){.cm-col-xs-1{width:1.66667%}
+.cm-col-xs-2{width:3.33333%}
+.cm-col-xs-3{width:5%}
+.cm-col-xs-4{width:6.66667%}
+.cm-col-xs-5{width:8.33333%}
+.cm-col-xs-6{width:10%}
+.cm-col-xs-7{width:11.66667%}
+.cm-col-xs-8{width:13.33333%}
+.cm-col-xs-9{width:15%}
+.cm-col-xs-10{width:16.66667%}
+.cm-col-xs-11{width:18.33333%}
+.cm-col-xs-12{width:20%}
+.cm-col-xs-13{width:21.66667%}
+.cm-col-xs-14{width:23.33333%}
+.cm-col-xs-15{width:25%}
+.cm-col-xs-16{width:26.66667%}
+.cm-col-xs-17{width:28.33333%}
+.cm-col-xs-18{width:30%}
+.cm-col-xs-19{width:31.66667%}
+.cm-col-xs-20{width:33.33333%}
+.cm-col-xs-21{width:35%}
+.cm-col-xs-22{width:36.66667%}
+.cm-col-xs-23{width:38.33333%}
+.cm-col-xs-24{width:40%}
+.cm-col-xs-25{width:41.66667%}
+.cm-col-xs-26{width:43.33333%}
+.cm-col-xs-27{width:45%}
+.cm-col-xs-28{width:46.66667%}
+.cm-col-xs-29{width:48.33333%}
+.cm-col-xs-30{width:50%}
+.cm-col-xs-31{width:51.66667%}
+.cm-col-xs-32{width:53.33333%}
+.cm-col-xs-33{width:55%}
+.cm-col-xs-34{width:56.66667%}
+.cm-col-xs-35{width:58.33333%}
+.cm-col-xs-36{width:60%}
+.cm-col-xs-37{width:61.66667%}
+.cm-col-xs-38{width:63.33333%}
+.cm-col-xs-39{width:65%}
+.cm-col-xs-40{width:66.66667%}
+.cm-col-xs-41{width:68.33333%}
+.cm-col-xs-42{width:70%}
+.cm-col-xs-43{width:71.66667%}
+.cm-col-xs-44{width:73.33333%}
+.cm-col-xs-45{width:75%}
+.cm-col-xs-46{width:76.66667%}
+.cm-col-xs-47{width:78.33333%}
+.cm-col-xs-48{width:80%}
+.cm-col-xs-49{width:81.66667%}
+.cm-col-xs-50{width:83.33333%}
+.cm-col-xs-51{width:85%}
+.cm-col-xs-52{width:86.66667%}
+.cm-col-xs-53{width:88.33333%}
+.cm-col-xs-54{width:90%}
+.cm-col-xs-55{width:91.66667%}
+.cm-col-xs-56{width:93.33333%}
+.cm-col-xs-57{width:95%}
+.cm-col-xs-58{width:96.66667%}
+.cm-col-xs-59{width:98.33333%}
+.cm-col-xs-60{width:100%}
+.cm-m-a-1{margin:0.25vw}
+.cm-p-a-1{padding:0.25vw}
+.cm-m-t-1{margin-top:0.25vw}
+.cm-p-t-1{padding-top:0.25vw}
+.cm-m-b-1{margin-bottom:0.25vw}
+.cm-p-b-1{padding-bottom:0.25vw}
+.cm-m-l-1{margin-left:0.25vw}
+.cm-p-l-1{padding-left:0.25vw}
+.cm-m-r-1{margin-right:0.25vw}
+.cm-p-r-1{padding-right:0.25vw}
+.cm-m-a-2{margin:0.5vw}
+.cm-p-a-2{padding:0.5vw}
+.cm-m-t-2{margin-top:0.5vw}
+.cm-p-t-2{padding-top:0.5vw}
+.cm-m-b-2{margin-bottom:0.5vw}
+.cm-p-b-2{padding-bottom:0.5vw}
+.cm-m-l-2{margin-left:0.5vw}
+.cm-p-l-2{padding-left:0.5vw}
+.cm-m-r-2{margin-right:0.5vw}
+.cm-p-r-2{padding-right:0.5vw}
+.cm-m-a-3{margin:0.75vw}
+.cm-p-a-3{padding:0.75vw}
+.cm-m-t-3{margin-top:0.75vw}
+.cm-p-t-3{padding-top:0.75vw}
+.cm-m-b-3{margin-bottom:0.75vw}
+.cm-p-b-3{padding-bottom:0.75vw}
+.cm-m-l-3{margin-left:0.75vw}
+.cm-p-l-3{padding-left:0.75vw}
+.cm-m-r-3{margin-right:0.75vw}
+.cm-p-r-3{padding-right:0.75vw}
+.cm-m-a-4{margin:1vw}
+.cm-p-a-4{padding:1vw}
+.cm-m-t-4{margin-top:1vw}
+.cm-p-t-4{padding-top:1vw}
+.cm-m-b-4{margin-bottom:1vw}
+.cm-p-b-4{padding-bottom:1vw}
+.cm-m-l-4{margin-left:1vw}
+.cm-p-l-4{padding-left:1vw}
+.cm-m-r-4{margin-right:1vw}
+.cm-p-r-4{padding-right:1vw}
+.cm-m-a-5{margin:1.25vw}
+.cm-p-a-5{padding:1.25vw}
+.cm-m-t-5{margin-top:1.25vw}
+.cm-p-t-5{padding-top:1.25vw}
+.cm-m-b-5{margin-bottom:1.25vw}
+.cm-p-b-5{padding-bottom:1.25vw}
+.cm-m-l-5{margin-left:1.25vw}
+.cm-p-l-5{padding-left:1.25vw}
+.cm-m-r-5{margin-right:1.25vw}
+.cm-p-r-5{padding-right:1.25vw}
+.cm-m-a-6{margin:1.5vw}
+.cm-p-a-6{padding:1.5vw}
+.cm-m-t-6{margin-top:1.5vw}
+.cm-p-t-6{padding-top:1.5vw}
+.cm-m-b-6{margin-bottom:1.5vw}
+.cm-p-b-6{padding-bottom:1.5vw}
+.cm-m-l-6{margin-left:1.5vw}
+.cm-p-l-6{padding-left:1.5vw}
+.cm-m-r-6{margin-right:1.5vw}
+.cm-p-r-6{padding-right:1.5vw}
+.cm-m-a-7{margin:1.75vw}
+.cm-p-a-7{padding:1.75vw}
+.cm-m-t-7{margin-top:1.75vw}
+.cm-p-t-7{padding-top:1.75vw}
+.cm-m-b-7{margin-bottom:1.75vw}
+.cm-p-b-7{padding-bottom:1.75vw}
+.cm-m-l-7{margin-left:1.75vw}
+.cm-p-l-7{padding-left:1.75vw}
+.cm-m-r-7{margin-right:1.75vw}
+.cm-p-r-7{padding-right:1.75vw}
+.cm-m-a-8{margin:2vw}
+.cm-p-a-8{padding:2vw}
+.cm-m-t-8{margin-top:2vw}
+.cm-p-t-8{padding-top:2vw}
+.cm-m-b-8{margin-bottom:2vw}
+.cm-p-b-8{padding-bottom:2vw}
+.cm-m-l-8{margin-left:2vw}
+.cm-p-l-8{padding-left:2vw}
+.cm-m-r-8{margin-right:2vw}
+.cm-p-r-8{padding-right:2vw}
+.cm-m-a-9{margin:2.25vw}
+.cm-p-a-9{padding:2.25vw}
+.cm-m-t-9{margin-top:2.25vw}
+.cm-p-t-9{padding-top:2.25vw}
+.cm-m-b-9{margin-bottom:2.25vw}
+.cm-p-b-9{padding-bottom:2.25vw}
+.cm-m-l-9{margin-left:2.25vw}
+.cm-p-l-9{padding-left:2.25vw}
+.cm-m-r-9{margin-right:2.25vw}
+.cm-p-r-9{padding-right:2.25vw}
+.cm-m-a-10{margin:2.5vw}
+.cm-p-a-10{padding:2.5vw}
+.cm-m-t-10{margin-top:2.5vw}
+.cm-p-t-10{padding-top:2.5vw}
+.cm-m-b-10{margin-bottom:2.5vw}
+.cm-p-b-10{padding-bottom:2.5vw}
+.cm-m-l-10{margin-left:2.5vw}
+.cm-p-l-10{padding-left:2.5vw}
+.cm-m-r-10{margin-right:2.5vw}
+.cm-p-r-10{padding-right:2.5vw}
+.cm-m-a-11{margin:2.75vw}
+.cm-p-a-11{padding:2.75vw}
+.cm-m-t-11{margin-top:2.75vw}
+.cm-p-t-11{padding-top:2.75vw}
+.cm-m-b-11{margin-bottom:2.75vw}
+.cm-p-b-11{padding-bottom:2.75vw}
+.cm-m-l-11{margin-left:2.75vw}
+.cm-p-l-11{padding-left:2.75vw}
+.cm-m-r-11{margin-right:2.75vw}
+.cm-p-r-11{padding-right:2.75vw}
+.cm-m-a-12{margin:3vw}
+.cm-p-a-12{padding:3vw}
+.cm-m-t-12{margin-top:3vw}
+.cm-p-t-12{padding-top:3vw}
+.cm-m-b-12{margin-bottom:3vw}
+.cm-p-b-12{padding-bottom:3vw}
+.cm-m-l-12{margin-left:3vw}
+.cm-p-l-12{padding-left:3vw}
+.cm-m-r-12{margin-right:3vw}
+.cm-p-r-12{padding-right:3vw}
+.cm-m-a-13{margin:3.25vw}
+.cm-p-a-13{padding:3.25vw}
+.cm-m-t-13{margin-top:3.25vw}
+.cm-p-t-13{padding-top:3.25vw}
+.cm-m-b-13{margin-bottom:3.25vw}
+.cm-p-b-13{padding-bottom:3.25vw}
+.cm-m-l-13{margin-left:3.25vw}
+.cm-p-l-13{padding-left:3.25vw}
+.cm-m-r-13{margin-right:3.25vw}
+.cm-p-r-13{padding-right:3.25vw}
+.cm-m-a-14{margin:3.5vw}
+.cm-p-a-14{padding:3.5vw}
+.cm-m-t-14{margin-top:3.5vw}
+.cm-p-t-14{padding-top:3.5vw}
+.cm-m-b-14{margin-bottom:3.5vw}
+.cm-p-b-14{padding-bottom:3.5vw}
+.cm-m-l-14{margin-left:3.5vw}
+.cm-p-l-14{padding-left:3.5vw}
+.cm-m-r-14{margin-right:3.5vw}
+.cm-p-r-14{padding-right:3.5vw}
+.cm-m-a-15{margin:3.75vw}
+.cm-p-a-15{padding:3.75vw}
+.cm-m-t-15{margin-top:3.75vw}
+.cm-p-t-15{padding-top:3.75vw}
+.cm-m-b-15{margin-bottom:3.75vw}
+.cm-p-b-15{padding-bottom:3.75vw}
+.cm-m-l-15{margin-left:3.75vw}
+.cm-p-l-15{padding-left:3.75vw}
+.cm-m-r-15{margin-right:3.75vw}
+.cm-p-r-15{padding-right:3.75vw}
+.cm-m-a-16{margin:4vw}
+.cm-p-a-16{padding:4vw}
+.cm-m-t-16{margin-top:4vw}
+.cm-p-t-16{padding-top:4vw}
+.cm-m-b-16{margin-bottom:4vw}
+.cm-p-b-16{padding-bottom:4vw}
+.cm-m-l-16{margin-left:4vw}
+.cm-p-l-16{padding-left:4vw}
+.cm-m-r-16{margin-right:4vw}
+.cm-p-r-16{padding-right:4vw}
+.cm-m-a-17{margin:4.25vw}
+.cm-p-a-17{padding:4.25vw}
+.cm-m-t-17{margin-top:4.25vw}
+.cm-p-t-17{padding-top:4.25vw}
+.cm-m-b-17{margin-bottom:4.25vw}
+.cm-p-b-17{padding-bottom:4.25vw}
+.cm-m-l-17{margin-left:4.25vw}
+.cm-p-l-17{padding-left:4.25vw}
+.cm-m-r-17{margin-right:4.25vw}
+.cm-p-r-17{padding-right:4.25vw}
+.cm-m-a-18{margin:4.5vw}
+.cm-p-a-18{padding:4.5vw}
+.cm-m-t-18{margin-top:4.5vw}
+.cm-p-t-18{padding-top:4.5vw}
+.cm-m-b-18{margin-bottom:4.5vw}
+.cm-p-b-18{padding-bottom:4.5vw}
+.cm-m-l-18{margin-left:4.5vw}
+.cm-p-l-18{padding-left:4.5vw}
+.cm-m-r-18{margin-right:4.5vw}
+.cm-p-r-18{padding-right:4.5vw}
+.cm-m-a-19{margin:4.75vw}
+.cm-p-a-19{padding:4.75vw}
+.cm-m-t-19{margin-top:4.75vw}
+.cm-p-t-19{padding-top:4.75vw}
+.cm-m-b-19{margin-bottom:4.75vw}
+.cm-p-b-19{padding-bottom:4.75vw}
+.cm-m-l-19{margin-left:4.75vw}
+.cm-p-l-19{padding-left:4.75vw}
+.cm-m-r-19{margin-right:4.75vw}
+.cm-p-r-19{padding-right:4.75vw}
+.cm-m-a-20{margin:5vw}
+.cm-p-a-20{padding:5vw}
+.cm-m-t-20{margin-top:5vw}
+.cm-p-t-20{padding-top:5vw}
+.cm-m-b-20{margin-bottom:5vw}
+.cm-p-b-20{padding-bottom:5vw}
+.cm-m-l-20{margin-left:5vw}
+.cm-p-l-20{padding-left:5vw}
+.cm-m-r-20{margin-right:5vw}
+.cm-p-r-20{padding-right:5vw}
+.p-icon{display:inline-block;width:66px;height:22px;vertical-align:middle}
+.p-icon::before{content:'';display:inline-block;width:66px;height:22px;background:url(/img/activity/icon.png) no-repeat;background-position-x:0px}
+.p-icon.i1::before{background-position-y:-714px}
+.p-icon.i2::before{background-position-y:-744px}
+.p-icon.i3::before{background-position-y:-774px}
+.p-icon.i4::before{background-position-y:-804px}
+.p-icon.i5::before{background-position-y:-834px}
+.cm-container{padding-left:1vw;padding-right:1vw;-webkit-box-sizing:border-box;box-sizing:border-box}
+.cm-floor{padding:3.2vw 0}
+.cm-p-a{padding:1vw}
+.cm-m-a{padding:1vw}
+.cm-floor-title .cm-title{font-size:5vw;color:#4a4f58;font-weight:700;line-height:7.5vw;padding-top:1vw;padding-bottom:1vw}
+.cm-floor-title .cm-subtitle{font-size:4vw;color:#93979f;padding-top:1vw;padding-bottom:1vw}
+.cm-article-item{overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box}
+.cm-article-item .cm-article-title{font-size:3.5vw;color:#4a4f58;-webkit-transition:all 0.4s;-o-transition:all 0.4s;transition:all 0.4s}
+.cm-article-item .cm-article-title.has-border{border-left:2px solid #fff}
+.cm-article-item .cm-article-desc{font-size:2.5vw;color:#93979f;line-height:2em;text-align:justify}
+.cm-article-item .cm-article-desc.h56{height:10.5vw}
+.cm-article-item .cm-article-cover.cover-168-168{width:27vw;height:27vw}
+.cm-article-item.h200{height:33vw}
+.cm-article-item .cm-line{display:none;height:1px;background-color:#f0f0f0}
+.cm-article-item .cm-line::before{content:'';display:block;height:2px;width:16px;background-color:#ff5c00}
+.cm-product-item .cm-product-title{font-size:3vw;color:#4a4f58;line-height:5vw;-webkit-transition:all 0.4s;-o-transition:all 0.4s;transition:all 0.4s}
+.cm-product-item .cm-prodcut-price{font-size:3vw;font-weight:bold}
+.cm-product-item .cm-prodcut-price .price-tag .tag{display:inline-block;height:20px;line-height:20px;border:1px solid #ffe6dc;border-radius:2px;font-size:12px;color:#e15616;cursor:pointer;background:#fff;padding:0 4px;position:relative;font-style:normal}
+.cm-product-item .h20{height:20px}
+.cm-product-item .h24{height:24px;line-height: 24px;}
+.cm-product-item .h44{height:10vw}
+.swiper-container{padding-bottom:8vw}
+.cm-scroll-container{overflow-x:scroll;overflow-y:hidden;white-space:nowrap}
+.cm-scroll-container::-webkit-scrollbar{display:none}
+.cm-scroll-container .cm-scroll-item{max-width:41vw;display:inline-block;margin-right:2vw}
+.cm-scroll-container .cm-scroll-item:last-child{margin-right:0}
+.cm-cover-tag{width:11vw;height:4vw;font-size:3vw;line-height:4vw;padding:0.5vw 1vw;border-radius:4px}
+.cm-tabs{height:6vw}
+.cm-tabs .cm-tab{font-size:3vw;width:12vw;height:6vw;line-height:6vw;text-align:center}
+.cm-btn-box{text-align:center}
+.cm-btn-box .cm-toggle-btn{width:20vw;height:6vw;border:1px solid #ccc;color:#909090;display:inline-block;text-align:center;line-height:6vw;font-size:3vw;cursor:pointer;-webkit-transition:all 0.4s;-o-transition:all 0.4s;transition:all 0.4s}
+.cm-btn-box .cm-toggle-btn::after{content:'';display:inline-block;width:10px;height:16px;vertical-align:middle;background:url(/img/activity/icon.png) no-repeat;background-position-y:-2px}
+.cm-btn-box .cm-toggle-btn.down::after{background-position-x:-96px}
+.cm-btn-box .cm-toggle-btn.up::after{background-position-x:-125px}
+.cm-float-container{position:fixed;z-index:999;bottom:12%;right:15px}
+.cm-float-container .cm-slide{position:relative;width:12vw;height:12vw;margin:0.8vw 0;border-radius:6px;-webkit-transition:all 0.2s;-o-transition:all 0.2s;transition:all 0.2s;cursor:pointer}
+.cm-float-container .cm-slide .cm-toggle-btn{top:0;right:0;position:absolute;width:100%;height:100%}
+.cm-float-container .cm-slide:hover .cm-tooltop{display:block}
+.cm-float-container .cm-slide:hover .cm-toggle-btn{width:150%}
+.cm-float-container .cm-slide:nth-child(1){height:13.2vw;background:url(https://static.caimei365.com/app/img/icon2/pc_note.png) no-repeat center;background-size:12vw}
+.cm-float-container .cm-slide:nth-child(2){background:#fff url(/img/activity/pc_01.png) no-repeat center}
+.cm-float-container .cm-slide:nth-child(2):hover{background:#ff5c00 url(/img/activity/pc_a1.png) no-repeat center}
+.cm-float-container .cm-slide:nth-child(3){background:#fff url(/img/activity/pc_02.png) no-repeat center}
+.cm-float-container .cm-slide:nth-child(3):hover{background:#ff5c00 url(/img/activity/pc_a2.png) no-repeat center}
+.cm-float-container .cm-tooltop{position:absolute;padding:3.5vw;background:#ff5c00;top:0;right:16vw;border-radius:6px;display:none}
+.cm-float-container .cm-tooltop::after{position:absolute;content:'';width:15px;height:15px;-webkit-transform:rotateZ(45deg);-ms-transform:rotate(45deg);transform:rotateZ(45deg);background:#ff5c00;right:-7px;top:15px}
+.cm-float-container .cm-tooltop .cm-tooltop-content{font-size:2.2vw;color:#fff}
+.cm-float-container .cm-tooltop .cm-tooltop-content.cm-tooltop-1{width:51.6vw}
+.cm-float-container .cm-tooltop .cm-tooltop-content.cm-tooltop-1 i{display:block;border-top:1px solid #f1f1f1}
+.cm-float-container .cm-tooltop .cm-tooltop-content.cm-tooltop-1 .cm-item{padding:2.5vw 0}
+.cm-float-container .cm-tooltop .cm-tooltop-content.cm-tooltop-2{text-align:center;width:40.8vw}
+.cm-float-container .cm-tooltop .cm-tooltop-content.cm-tooltop-2 .line{height:11vw;margin:3vw 3vw 0;width:1px;background:#f1f1f1}
+.cm-float-container .cm-tooltop .cm-tooltop-content.cm-tooltop-2 img{display:inline-block;width:16.4vw;height:16.4vw}
+.cm-float-container .cm-tooltop .cm-tooltop-content.cm-tooltop-2 span{text-align:center;display:block;margin-top:2vw}
+.cm-entry{z-index:9999;position:fixed;top:0;width:100vw;height:100vh;background:rgba(0,0,0,0.5)}
+.cm-entry .cm-icon-content{position:absolute;width:75.1vw;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}
+.cm-entry .cm-icon-content img{width:100%}
+.cm-entry .cm-icon-content .cm-close{cursor:pointer;position:absolute;width:6.45vw;height:6.45vw;right:5vw;top:-5vw;background:url(/img/activity/pc_close.png) no-repeat center center;background-size:6.4vw}
+.cm-footer{padding:4vw 0 2vw;background-color:#4a4f58;text-align:center;color:#fff;font-size:2.4vw;overflow:hidden}
+.cm-footer img{width:12vw}
+.banner-container{position:relative;width:100vw;height:45vw;background:pink;overflow:hidden}
+.banner-container .banner{width:100vw;position:absolute;height:100%;top:0;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}
+.banner-container .cm-container{height:100%;padding: 0;}
+.banner-container img{display:block;height:100%}
+.has-player{position:absolute;top:0;left:0;width:100%;height:100%;}
+.has-player::before{content:'';display:block;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:6vw;height:6vw; background:url(/img/activity/pc-palyer.png) no-repeat center center;background-size: 6vw;}
+.cm-to-top{width:12vw;height:12vw;position:fixed;z-index:999;bottom:5%;right:15px;border-radius:6px;text-align:center;background:#fff;cursor:pointer;-webkit-transition:all 0.2s;-o-transition:all 0.2s;transition:all 0.2s}
+.cm-to-top .cm-icon-bar{display:block;margin:0 auto;-webkit-transition:all 0.2s;-o-transition:all 0.2s;transition:all 0.2s}
+.cm-to-top .cm-icon-bar:nth-child(1){width:6vw;height:1vw;background:#999999;margin-top:4vw;}
+.cm-to-top .cm-icon-bar:nth-child(2){width:0;height:0;border-left:3vw solid transparent;border-right:3vw solid transparent;border-bottom:2vw solid #999999}
+.cm-to-top .cm-icon-bar:nth-child(3){width:10px;height:10px;background:#999999}
+}@media (max-width:992px){.cm-swiper-button-prev,.cm-swiper-button-next{display:none}
+}@media (min-width:560px){.cm-col-md-1{width:1.66667%}
+.cm-col-md-2{width:3.33333%}
+.cm-col-md-3{width:5%}
+.cm-col-md-4{width:6.66667%}
+.cm-col-md-5{width:8.33333%}
+.cm-col-md-6{width:10%}
+.cm-col-md-7{width:11.66667%}
+.cm-col-md-8{width:13.33333%}
+.cm-col-md-9{width:15%}
+.cm-col-md-10{width:16.66667%}
+.cm-col-md-11{width:18.33333%}
+.cm-col-md-12{width:20%}
+.cm-col-md-13{width:21.66667%}
+.cm-col-md-14{width:23.33333%}
+.cm-col-md-15{width:25%}
+.cm-col-md-16{width:26.66667%}
+.cm-col-md-17{width:28.33333%}
+.cm-col-md-18{width:30%}
+.cm-col-md-19{width:31.66667%}
+.cm-col-md-20{width:33.33333%}
+.cm-col-md-21{width:35%}
+.cm-col-md-22{width:36.66667%}
+.cm-col-md-23{width:38.33333%}
+.cm-col-md-24{width:40%}
+.cm-col-md-25{width:41.66667%}
+.cm-col-md-26{width:43.33333%}
+.cm-col-md-27{width:45%}
+.cm-col-md-28{width:46.66667%}
+.cm-col-md-29{width:48.33333%}
+.cm-col-md-30{width:50%}
+.cm-col-md-31{width:51.66667%}
+.cm-col-md-32{width:53.33333%}
+.cm-col-md-33{width:55%}
+.cm-col-md-34{width:56.66667%}
+.cm-col-md-35{width:58.33333%}
+.cm-col-md-36{width:60%}
+.cm-col-md-37{width:61.66667%}
+.cm-col-md-38{width:63.33333%}
+.cm-col-md-39{width:65%}
+.cm-col-md-40{width:66.66667%}
+.cm-col-md-41{width:68.33333%}
+.cm-col-md-42{width:70%}
+.cm-col-md-43{width:71.66667%}
+.cm-col-md-44{width:73.33333%}
+.cm-col-md-45{width:75%}
+.cm-col-md-46{width:76.66667%}
+.cm-col-md-47{width:78.33333%}
+.cm-col-md-48{width:80%}
+.cm-col-md-49{width:81.66667%}
+.cm-col-md-50{width:83.33333%}
+.cm-col-md-51{width:85%}
+.cm-col-md-52{width:86.66667%}
+.cm-col-md-53{width:88.33333%}
+.cm-col-md-54{width:90%}
+.cm-col-md-55{width:91.66667%}
+.cm-col-md-56{width:93.33333%}
+.cm-col-md-57{width:95%}
+.cm-col-md-58{width:96.66667%}
+.cm-col-md-59{width:98.33333%}
+.cm-col-md-60{width:100%}
+.cm-m-a-1{margin:2px}
+.cm-p-a-1{padding:2px}
+.cm-m-t-1{margin-top:2px}
+.cm-p-t-1{padding-top:2px}
+.cm-m-b-1{margin-bottom:2px}
+.cm-p-b-1{padding-bottom:2px}
+.cm-m-l-1{margin-left:2px}
+.cm-p-l-1{padding-left:2px}
+.cm-m-r-1{margin-right:2px}
+.cm-p-r-1{padding-right:2px}
+.cm-m-a-2{margin:4px}
+.cm-p-a-2{padding:4px}
+.cm-m-t-2{margin-top:4px}
+.cm-p-t-2{padding-top:4px}
+.cm-m-b-2{margin-bottom:4px}
+.cm-p-b-2{padding-bottom:4px}
+.cm-m-l-2{margin-left:4px}
+.cm-p-l-2{padding-left:4px}
+.cm-m-r-2{margin-right:4px}
+.cm-p-r-2{padding-right:4px}
+.cm-m-a-3{margin:6px}
+.cm-p-a-3{padding:6px}
+.cm-m-t-3{margin-top:6px}
+.cm-p-t-3{padding-top:6px}
+.cm-m-b-3{margin-bottom:6px}
+.cm-p-b-3{padding-bottom:6px}
+.cm-m-l-3{margin-left:6px}
+.cm-p-l-3{padding-left:6px}
+.cm-m-r-3{margin-right:6px}
+.cm-p-r-3{padding-right:6px}
+.cm-m-a-4{margin:8px}
+.cm-p-a-4{padding:8px}
+.cm-m-t-4{margin-top:8px}
+.cm-p-t-4{padding-top:8px}
+.cm-m-b-4{margin-bottom:8px}
+.cm-p-b-4{padding-bottom:8px}
+.cm-m-l-4{margin-left:8px}
+.cm-p-l-4{padding-left:8px}
+.cm-m-r-4{margin-right:8px}
+.cm-p-r-4{padding-right:8px}
+.cm-m-a-5{margin:10px}
+.cm-p-a-5{padding:10px}
+.cm-m-t-5{margin-top:10px}
+.cm-p-t-5{padding-top:10px}
+.cm-m-b-5{margin-bottom:10px}
+.cm-p-b-5{padding-bottom:10px}
+.cm-m-l-5{margin-left:10px}
+.cm-p-l-5{padding-left:10px}
+.cm-m-r-5{margin-right:10px}
+.cm-p-r-5{padding-right:10px}
+.cm-m-a-6{margin:12px}
+.cm-p-a-6{padding:12px}
+.cm-m-t-6{margin-top:12px}
+.cm-p-t-6{padding-top:12px}
+.cm-m-b-6{margin-bottom:12px}
+.cm-p-b-6{padding-bottom:12px}
+.cm-m-l-6{margin-left:12px}
+.cm-p-l-6{padding-left:12px}
+.cm-m-r-6{margin-right:12px}
+.cm-p-r-6{padding-right:12px}
+.cm-m-a-7{margin:14px}
+.cm-p-a-7{padding:14px}
+.cm-m-t-7{margin-top:14px}
+.cm-p-t-7{padding-top:14px}
+.cm-m-b-7{margin-bottom:14px}
+.cm-p-b-7{padding-bottom:14px}
+.cm-m-l-7{margin-left:14px}
+.cm-p-l-7{padding-left:14px}
+.cm-m-r-7{margin-right:14px}
+.cm-p-r-7{padding-right:14px}
+.cm-m-a-8{margin:16px}
+.cm-p-a-8{padding:16px}
+.cm-m-t-8{margin-top:16px}
+.cm-p-t-8{padding-top:16px}
+.cm-m-b-8{margin-bottom:16px}
+.cm-p-b-8{padding-bottom:16px}
+.cm-m-l-8{margin-left:16px}
+.cm-p-l-8{padding-left:16px}
+.cm-m-r-8{margin-right:16px}
+.cm-p-r-8{padding-right:16px}
+.cm-m-a-9{margin:18px}
+.cm-p-a-9{padding:18px}
+.cm-m-t-9{margin-top:18px}
+.cm-p-t-9{padding-top:18px}
+.cm-m-b-9{margin-bottom:18px}
+.cm-p-b-9{padding-bottom:18px}
+.cm-m-l-9{margin-left:18px}
+.cm-p-l-9{padding-left:18px}
+.cm-m-r-9{margin-right:18px}
+.cm-p-r-9{padding-right:18px}
+.cm-m-a-10{margin:20px}
+.cm-p-a-10{padding:20px}
+.cm-m-t-10{margin-top:20px}
+.cm-p-t-10{padding-top:20px}
+.cm-m-b-10{margin-bottom:20px}
+.cm-p-b-10{padding-bottom:20px}
+.cm-m-l-10{margin-left:20px}
+.cm-p-l-10{padding-left:20px}
+.cm-m-r-10{margin-right:20px}
+.cm-p-r-10{padding-right:20px}
+.cm-m-a-11{margin:22px}
+.cm-p-a-11{padding:22px}
+.cm-m-t-11{margin-top:22px}
+.cm-p-t-11{padding-top:22px}
+.cm-m-b-11{margin-bottom:22px}
+.cm-p-b-11{padding-bottom:22px}
+.cm-m-l-11{margin-left:22px}
+.cm-p-l-11{padding-left:22px}
+.cm-m-r-11{margin-right:22px}
+.cm-p-r-11{padding-right:22px}
+.cm-m-a-12{margin:24px}
+.cm-p-a-12{padding:24px}
+.cm-m-t-12{margin-top:24px}
+.cm-p-t-12{padding-top:24px}
+.cm-m-b-12{margin-bottom:24px}
+.cm-p-b-12{padding-bottom:24px}
+.cm-m-l-12{margin-left:24px}
+.cm-p-l-12{padding-left:24px}
+.cm-m-r-12{margin-right:24px}
+.cm-p-r-12{padding-right:24px}
+.cm-m-a-13{margin:26px}
+.cm-p-a-13{padding:26px}
+.cm-m-t-13{margin-top:26px}
+.cm-p-t-13{padding-top:26px}
+.cm-m-b-13{margin-bottom:26px}
+.cm-p-b-13{padding-bottom:26px}
+.cm-m-l-13{margin-left:26px}
+.cm-p-l-13{padding-left:26px}
+.cm-m-r-13{margin-right:26px}
+.cm-p-r-13{padding-right:26px}
+.cm-m-a-14{margin:28px}
+.cm-p-a-14{padding:28px}
+.cm-m-t-14{margin-top:28px}
+.cm-p-t-14{padding-top:28px}
+.cm-m-b-14{margin-bottom:28px}
+.cm-p-b-14{padding-bottom:28px}
+.cm-m-l-14{margin-left:28px}
+.cm-p-l-14{padding-left:28px}
+.cm-m-r-14{margin-right:28px}
+.cm-p-r-14{padding-right:28px}
+.cm-m-a-15{margin:30px}
+.cm-p-a-15{padding:30px}
+.cm-m-t-15{margin-top:30px}
+.cm-p-t-15{padding-top:30px}
+.cm-m-b-15{margin-bottom:30px}
+.cm-p-b-15{padding-bottom:30px}
+.cm-m-l-15{margin-left:30px}
+.cm-p-l-15{padding-left:30px}
+.cm-m-r-15{margin-right:30px}
+.cm-p-r-15{padding-right:30px}
+.cm-m-a-16{margin:32px}
+.cm-p-a-16{padding:32px}
+.cm-m-t-16{margin-top:32px}
+.cm-p-t-16{padding-top:32px}
+.cm-m-b-16{margin-bottom:32px}
+.cm-p-b-16{padding-bottom:32px}
+.cm-m-l-16{margin-left:32px}
+.cm-p-l-16{padding-left:32px}
+.cm-m-r-16{margin-right:32px}
+.cm-p-r-16{padding-right:32px}
+.cm-m-a-17{margin:34px}
+.cm-p-a-17{padding:34px}
+.cm-m-t-17{margin-top:34px}
+.cm-p-t-17{padding-top:34px}
+.cm-m-b-17{margin-bottom:34px}
+.cm-p-b-17{padding-bottom:34px}
+.cm-m-l-17{margin-left:34px}
+.cm-p-l-17{padding-left:34px}
+.cm-m-r-17{margin-right:34px}
+.cm-p-r-17{padding-right:34px}
+.cm-m-a-18{margin:36px}
+.cm-p-a-18{padding:36px}
+.cm-m-t-18{margin-top:36px}
+.cm-p-t-18{padding-top:36px}
+.cm-m-b-18{margin-bottom:36px}
+.cm-p-b-18{padding-bottom:36px}
+.cm-m-l-18{margin-left:36px}
+.cm-p-l-18{padding-left:36px}
+.cm-m-r-18{margin-right:36px}
+.cm-p-r-18{padding-right:36px}
+.cm-m-a-19{margin:38px}
+.cm-p-a-19{padding:38px}
+.cm-m-t-19{margin-top:38px}
+.cm-p-t-19{padding-top:38px}
+.cm-m-b-19{margin-bottom:38px}
+.cm-p-b-19{padding-bottom:38px}
+.cm-m-l-19{margin-left:38px}
+.cm-p-l-19{padding-left:38px}
+.cm-m-r-19{margin-right:38px}
+.cm-p-r-19{padding-right:38px}
+.cm-m-a-20{margin:40px}
+.cm-p-a-20{padding:40px}
+.cm-m-t-20{margin-top:40px}
+.cm-p-t-20{padding-top:40px}
+.cm-m-b-20{margin-bottom:40px}
+.cm-p-b-20{padding-bottom:40px}
+.cm-m-l-20{margin-left:40px}
+.cm-p-l-20{padding-left:40px}
+.cm-m-r-20{margin-right:40px}
+.cm-p-r-20{padding-right:40px}
+.p-icon{display:inline-block;width:80px;height:24px;vertical-align:middle}
+.p-icon::before{content:'';display:inline-block;width:80px;height:24px;background:url(/img/activity/icon.png) no-repeat;background-position-x:0px}
+.p-icon.i1::before{background-position-y:-714px}
+.p-icon.i2::before{background-position-y:-744px}
+.p-icon.i3::before{background-position-y:-774px}
+.p-icon.i4::before{background-position-y:-804px}
+.p-icon.i5::before{background-position-y:-834px}
+.cm-container{width:960px;padding-left:8px;padding-right:8px}
+.cm-container .cm-row{margin-left:-8px;margin-right:-8px}
+.cm-floor{padding:20px 0}
+.cm-p-a{padding:8px}
+.cm-m-a{padding:8px}
+.cm-floor-title .cm-title{font-size:24px;color:#4a4f58;line-height:30px;font-weight:700;padding-top:4px;padding-bottom:4px}
+.cm-floor-title .cm-subtitle{font-size:14px;color:#93979f;padding-top:4px;padding-bottom:4px}
+.cm-article-item{-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}
+.cm-article-item .cm-article-title{font-size:18px;color:#4a4f58;-webkit-transition:all 0.4s;-o-transition:all 0.4s;transition:all 0.4s}
+.cm-article-item .cm-article-title.has-border{border-left:2px solid #fff}
+.cm-article-item .cm-article-desc{font-size:14px;color:#93979f;line-height:2em;text-align:justify}
+.cm-article-item .cm-article-desc.h56{height:56px}
+.cm-article-item .cm-article-cover.cover-168-168{width:168px;height:168px}
+.cm-article-item:hover .cm-article-title{color:#ff5c00}
+.cm-article-item:hover .cm-article-title.has-border{border-color:#ff5c00}
+.cm-article-item.h200{height:200px}
+.cm-article-item .cm-line{height:1px;background-color:#f0f0f0}
+.cm-article-item .cm-line::before{content:'';display:block;height:2px;width:16px;background-color:#ff5c00}
+.cm-product-item .cm-product-title{font-size:14px;color:#4a4f58;line-height:20px;-webkit-transition:all 0.4s;-o-transition:all 0.4s;transition:all 0.4s}
+.cm-product-item .h20{height:20px}
+.cm-product-item .h24{height:24px}
+.cm-product-item .h44{height:44px}
+.swiper-container{padding-bottom:30px}
+.swiper-container.no-bottom{padding-bottom:0 !important}
+.cm-cover-tag{width:72px;height:32px;font-size:16px;line-height:32px;border-radius:4px}
+.cm-tabs .cm-tab{font-size:16px;width:60px;height:30px;line-height:30px;text-align:center}
+.hover-class{-webkit-transition:all 0.4s;-o-transition:all 0.4s;transition:all 0.4s}
+.hover-class:hover{-webkit-transform:translateY(-2px);-ms-transform:translateY(-2px);transform:translateY(-2px);-webkit-box-shadow:0 0 15px rgba(0,0,0,0.2);box-shadow:0 0 15px rgba(0,0,0,0.2)}
+.has-player{position:absolute;top:0;left:0;width:100%;height:100%;}
+.has-player::before{content:'';display:block;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:40px;height:40px;background:url(/img/activity/pc-palyer.png) no-repeat center center;background-size: 40px 40px; }
+.cm-btn-box{text-align:center}
+.cm-btn-box .cm-toggle-btn{width:98px;height:32px;border:1px solid #ccc;color:#909090;display:inline-block;text-align:center;line-height:32px;font-size:14px;cursor:pointer;-webkit-transition:all 0.4s;-o-transition:all 0.4s;transition:all 0.4s}
+.cm-btn-box .cm-toggle-btn::after{content:'';display:inline-block;width:20px;height:16px;margin-right:2px;vertical-align:middle;background:url(/img/activity/icon.png) no-repeat;background-position-y:-2px}
+.cm-btn-box .cm-toggle-btn.down::after{background-position-x:-90px}
+.cm-btn-box .cm-toggle-btn.up::after{background-position-x:-119px}
+.cm-btn-box .cm-toggle-btn:hover{color:#ff5c00;border-color:#ff5c00}
+.cm-btn-box .cm-toggle-btn:hover.down::after{background-position-x:-150px}
+.cm-btn-box .cm-toggle-btn:hover.up::after{background-position-x:-180px}
+.cm-float-container{position:fixed;z-index:999;bottom:12%;right:15px}
+.cm-float-container .cm-slide{position:relative;width:64px;height:64px;margin:6px 0;border-radius:6px;-webkit-transition:all 0.2s;-o-transition:all 0.2s;transition:all 0.2s;cursor:pointer}
+.cm-float-container .cm-slide .cm-toggle-btn{top:0;right:0;position:absolute;width:100%;height:100%}
+.cm-float-container .cm-slide:hover .cm-tooltop{display:block}
+.cm-float-container .cm-slide:hover .cm-toggle-btn{width:150%}
+.cm-float-container .cm-slide:nth-child(1){height:70px;background:url(https://static.caimei365.com/app/img/icon2/pc_note.png) no-repeat center;background-size:64px}
+.cm-float-container .cm-slide:nth-child(2){background:#fff url(/img/activity/pc_01.png) no-repeat center}
+.cm-float-container .cm-slide:nth-child(2):hover{background:#ff5c00 url(/img/activity/pc_a1.png) no-repeat center}
+.cm-float-container .cm-slide:nth-child(3){background:#fff url(/img/activity/pc_02.png) no-repeat center}
+.cm-float-container .cm-slide:nth-child(3):hover{background:#ff5c00 url(/img/activity/pc_a2.png) no-repeat center}
+.cm-float-container .cm-tooltop{position:absolute;padding:15px;background:#ff5c00;top:0;right:80px;border-radius:6px;display:none}
+.cm-float-container .cm-tooltop::after{position:absolute;content:'';width:15px;height:15px;-webkit-transform:rotateZ(45deg);-ms-transform:rotate(45deg);transform:rotateZ(45deg);background:#ff5c00;right:-7px;top:15px}
+.cm-float-container .cm-tooltop .cm-tooltop-content{font-size:14px;color:#fff}
+.cm-float-container .cm-tooltop .cm-tooltop-content.cm-tooltop-1{width:190px}
+.cm-float-container .cm-tooltop .cm-tooltop-content.cm-tooltop-1 i{display:block;border-top:1px solid #f1f1f1}
+.cm-float-container .cm-tooltop .cm-tooltop-content.cm-tooltop-1 .cm-item{padding:8px 0}
+.cm-float-container .cm-tooltop .cm-tooltop-content.cm-tooltop-2{width:262px}
+.cm-float-container .cm-tooltop .cm-tooltop-content.cm-tooltop-2 .line{height:72px;margin:15px 15px 0;width:1px;background:#f1f1f1}
+.cm-float-container .cm-tooltop .cm-tooltop-content.cm-tooltop-2 img{display:block}
+.cm-float-container .cm-tooltop .cm-tooltop-content.cm-tooltop-2 span{text-align:center;display:block;margin-top:8px}
+.cm-footer{padding:25px 0 12px;background-color:#4a4f58;text-align:center;color:#fff;font-size:12px;overflow:hidden}
+.cm-entry{z-index:9999;position:fixed;top:0;width:100vw;height:100vh;background:rgba(0,0,0,0.3)}
+.cm-entry .cm-icon-content{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}
+.cm-entry .cm-icon-content .cm-close{cursor:pointer;position:absolute;width:32px;height:32px;right:20px;top:-20px;background:url(/img/activity/pc_close.png) no-repeat center center}
+.banner-container{position:relative;height:480px;background:pink;overflow:hidden}
+.banner-container .banner{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}
+.banner-container .cm-container{height:100%}
+.banner-container img{display:block;min-width:1920px;}
+.cm-to-top{width:64px;height:64px;position:fixed;z-index:999;bottom:5%;right:15px;border-radius:6px;text-align:center;background:#fff;cursor:pointer;-webkit-transition:all 0.2s;-o-transition:all 0.2s;transition:all 0.2s}
+.cm-to-top .cm-icon-bar{display:block;margin:0 auto;-webkit-transition:all 0.2s;-o-transition:all 0.2s;transition:all 0.2s}
+.cm-to-top .cm-icon-bar:nth-child(1){width:28px;height:4px;background:#999999;margin-top:20px}
+.cm-to-top .cm-icon-bar:nth-child(2){width:0;height:0;border-left:14px solid transparent;border-right:14px solid transparent;border-bottom:10px solid #999999}
+.cm-to-top .cm-icon-bar:nth-child(3){width:10px;height:10px;background:#999999}
+.cm-to-top:hover{background:#ff5c00}
+.cm-to-top:hover .cm-icon-bar:nth-child(1),.cm-to-top:hover .cm-icon-bar:nth-child(3){background:#fff !important}
+.cm-to-top:hover .cm-icon-bar:nth-child(2){border-bottom-color:#fff}
+}@media (min-width:1200px){.cm-container{width:1140px}
+}.cm-tags{white-space:nowrap}
+.cm-tags .cm-tag{display:inline-block;padding:1px 4px;font-size:12px;border:1px solid #999;border-radius:2px}
+.cm-tags .cm-tag.color1{border-color:#aaa;background-color:#fff;color:#888}
+.cm-tags .cm-tag.color2{border-color:#f94b4b;background-color:#fff1eb;color:#f94b4b}
+.cm-tags .cm-tag.color3{border-color:rgba(225,86,22,0.24);background-color:#fff;color:#e15616}
+.cm-meibohui-tag{font-size:12px;display:inline-block;padding:2px 4px;text-align:center;color:#ffffff !important;background-image:-webkit-gradient(linear,right top,left top,from(#f9c023),to(#f83600));background-image:-o-linear-gradient(right,#f9c023 0%,#f83600 100%);background-image:linear-gradient(270deg,#f9c023 0%,#f83600 100%);border-radius:0px 10px 0px 0px}
+.cm-swiper .cm-swiper-button-prev,.cm-swiper .cm-swiper-button-next{visibility:hidden;width:44px;height:100px;background:rgba(102,102,102,0.74) no-repeat center;z-index:20;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;border-radius:6px;opacity:0;-webkit-transition:all 0.8s;-o-transition:all 0.8s;transition:all 0.8s;background-size:30px !important}
+.cm-swiper .cm-swiper-button-prev{background-image:url(/img/activity/prev-icon.png);left:-60px}
+.cm-swiper .cm-swiper-button-next{background-image:url(/img/activity/next-icon.png);right:-60px}
+.cm-swiper:hover .cm-swiper-button-prev,.cm-swiper:hover .cm-swiper-button-next{opacity:1;visibility:visible}
+.swiper-container .swiper-pagination-bullet-active{width:28px !important;background:#ff5c00}
+.swiper-container .swiper-pagination-bullet{width:14px;height:4px;display:inline-block;border-radius:2px}
+.cm-scroll-container{overflow-x:scroll;overflow-y:hidden;white-space:nowrap}
+.cm-scroll-container .cm-scroll-item{max-width:41vw;display:inline-block;margin-right:2vw}
+.cm-scroll-container .cm-scroll-item:last-child{margin-right:0}
+.cm-cover-tag{display:block;background:#000;text-align:center;color:#fff}
+.cm-cover-tag.color1{background:rgba(0,0,0,0.5)}
+.cm-cover-tag.color2{background:#1ece70}
+.cm-cover-tag.color3{background:#ff5c00}
+.cm-tabs{text-align:right}
+.cm-tabs .cm-tab-content{display:inline-block;overflow:hidden;border-radius:4px}
+.cm-tabs .cm-tab{position:relative;display:inline-block;color:#4a4f58;cursor:pointer;background:#fff}
+.cm-tabs .cm-tab.on{color:#fff;background-color:#ff5c00}
+.cm-loading{z-index:99999;width:100vw;height:100vh;position:fixed;top:0;background:#fff}
+.cm-prodcut-price .red { color: #f94b4b;}

+ 349 - 0
src/main/resources/static/css/activity/normalize.css

@@ -0,0 +1,349 @@
+/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
+
+/* Document
+   ========================================================================== */
+
+/**
+ * 1. Correct the line height in all browsers.
+ * 2. Prevent adjustments of font size after orientation changes in iOS.
+ */
+
+html {
+  line-height: 1.15; /* 1 */
+  -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/* Sections
+   ========================================================================== */
+
+/**
+ * Remove the margin in all browsers.
+ */
+
+body {
+  margin: 0;
+}
+
+/**
+ * Render the `main` element consistently in IE.
+ */
+
+main {
+  display: block;
+}
+
+/**
+ * Correct the font size and margin on `h1` elements within `section` and
+ * `article` contexts in Chrome, Firefox, and Safari.
+ */
+
+h1 {
+  font-size: 2em;
+  margin: 0.67em 0;
+}
+
+/* Grouping content
+   ========================================================================== */
+
+/**
+ * 1. Add the correct box sizing in Firefox.
+ * 2. Show the overflow in Edge and IE.
+ */
+
+hr {
+  box-sizing: content-box; /* 1 */
+  height: 0; /* 1 */
+  overflow: visible; /* 2 */
+}
+
+/**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+
+pre {
+  font-family: monospace, monospace; /* 1 */
+  font-size: 1em; /* 2 */
+}
+
+/* Text-level semantics
+   ========================================================================== */
+
+/**
+ * Remove the gray background on active links in IE 10.
+ */
+
+a {
+  background-color: transparent;
+}
+
+/**
+ * 1. Remove the bottom border in Chrome 57-
+ * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
+ */
+
+abbr[title] {
+  border-bottom: none; /* 1 */
+  text-decoration: underline; /* 2 */
+  text-decoration: underline dotted; /* 2 */
+}
+
+/**
+ * Add the correct font weight in Chrome, Edge, and Safari.
+ */
+
+b,
+strong {
+  font-weight: bolder;
+}
+
+/**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+
+code,
+kbd,
+samp {
+  font-family: monospace, monospace; /* 1 */
+  font-size: 1em; /* 2 */
+}
+
+/**
+ * Add the correct font size in all browsers.
+ */
+
+small {
+  font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` elements from affecting the line height in
+ * all browsers.
+ */
+
+sub,
+sup {
+  font-size: 75%;
+  line-height: 0;
+  position: relative;
+  vertical-align: baseline;
+}
+
+sub {
+  bottom: -0.25em;
+}
+
+sup {
+  top: -0.5em;
+}
+
+/* Embedded content
+   ========================================================================== */
+
+/**
+ * Remove the border on images inside links in IE 10.
+ */
+
+img {
+  border-style: none;
+}
+
+/* Forms
+   ========================================================================== */
+
+/**
+ * 1. Change the font styles in all browsers.
+ * 2. Remove the margin in Firefox and Safari.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+  font-family: inherit; /* 1 */
+  font-size: 100%; /* 1 */
+  line-height: 1.15; /* 1 */
+  margin: 0; /* 2 */
+}
+
+/**
+ * Show the overflow in IE.
+ * 1. Show the overflow in Edge.
+ */
+
+button,
+input { /* 1 */
+  overflow: visible;
+}
+
+/**
+ * Remove the inheritance of text transform in Edge, Firefox, and IE.
+ * 1. Remove the inheritance of text transform in Firefox.
+ */
+
+button,
+select { /* 1 */
+  text-transform: none;
+}
+
+/**
+ * Correct the inability to style clickable types in iOS and Safari.
+ */
+
+button,
+[type="button"],
+[type="reset"],
+[type="submit"] {
+  -webkit-appearance: button;
+}
+
+/**
+ * Remove the inner border and padding in Firefox.
+ */
+
+button::-moz-focus-inner,
+[type="button"]::-moz-focus-inner,
+[type="reset"]::-moz-focus-inner,
+[type="submit"]::-moz-focus-inner {
+  border-style: none;
+  padding: 0;
+}
+
+/**
+ * Restore the focus styles unset by the previous rule.
+ */
+
+button:-moz-focusring,
+[type="button"]:-moz-focusring,
+[type="reset"]:-moz-focusring,
+[type="submit"]:-moz-focusring {
+  outline: 1px dotted ButtonText;
+}
+
+/**
+ * Correct the padding in Firefox.
+ */
+
+fieldset {
+  padding: 0.35em 0.75em 0.625em;
+}
+
+/**
+ * 1. Correct the text wrapping in Edge and IE.
+ * 2. Correct the color inheritance from `fieldset` elements in IE.
+ * 3. Remove the padding so developers are not caught out when they zero out
+ *    `fieldset` elements in all browsers.
+ */
+
+legend {
+  box-sizing: border-box; /* 1 */
+  color: inherit; /* 2 */
+  display: table; /* 1 */
+  max-width: 100%; /* 1 */
+  padding: 0; /* 3 */
+  white-space: normal; /* 1 */
+}
+
+/**
+ * Add the correct vertical alignment in Chrome, Firefox, and Opera.
+ */
+
+progress {
+  vertical-align: baseline;
+}
+
+/**
+ * Remove the default vertical scrollbar in IE 10+.
+ */
+
+textarea {
+  overflow: auto;
+}
+
+/**
+ * 1. Add the correct box sizing in IE 10.
+ * 2. Remove the padding in IE 10.
+ */
+
+[type="checkbox"],
+[type="radio"] {
+  box-sizing: border-box; /* 1 */
+  padding: 0; /* 2 */
+}
+
+/**
+ * Correct the cursor style of increment and decrement buttons in Chrome.
+ */
+
+[type="number"]::-webkit-inner-spin-button,
+[type="number"]::-webkit-outer-spin-button {
+  height: auto;
+}
+
+/**
+ * 1. Correct the odd appearance in Chrome and Safari.
+ * 2. Correct the outline style in Safari.
+ */
+
+[type="search"] {
+  -webkit-appearance: textfield; /* 1 */
+  outline-offset: -2px; /* 2 */
+}
+
+/**
+ * Remove the inner padding in Chrome and Safari on macOS.
+ */
+
+[type="search"]::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+
+/**
+ * 1. Correct the inability to style clickable types in iOS and Safari.
+ * 2. Change font properties to `inherit` in Safari.
+ */
+
+::-webkit-file-upload-button {
+  -webkit-appearance: button; /* 1 */
+  font: inherit; /* 2 */
+}
+
+/* Interactive
+   ========================================================================== */
+
+/*
+ * Add the correct display in Edge, IE 10+, and Firefox.
+ */
+
+details {
+  display: block;
+}
+
+/*
+ * Add the correct display in all browsers.
+ */
+
+summary {
+  display: list-item;
+}
+
+/* Misc
+   ========================================================================== */
+
+/**
+ * Add the correct display in IE 10+.
+ */
+
+template {
+  display: none;
+}
+
+/**
+ * Add the correct display in IE 10.
+ */
+
+[hidden] {
+  display: none;
+}

文件差異過大導致無法顯示
+ 14 - 0
src/main/resources/static/css/activity/swiper.min.css


+ 4 - 1
src/main/resources/static/css/base/base.h5.css

@@ -13,6 +13,7 @@
 .icon.shop:before{width:7.5vw;height:6vw;background-position:-91vw -.5vw}
 .icon.heart:before{width:5.5vw;height:5.5vw;background-position:0 -17vw}
 .icon.shop .tips{display:none;}
+.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;}
 .mf{display:-ms-flexbox;display:-webkit-flex;display:flex;}
 .mfbt{display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-justify-content:space-between;justify-content:space-between;}
 .mfc{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center}
@@ -226,7 +227,9 @@
     display: inline-block;
 }
 /*采美豆弹窗样式*/
-.cmbeans-alert-box{width: 100%;height: 100%;display: flex;align-items: center;justify-content: center;flex-direction: column;position: fixed;left: 0;top: 0;background: rgba(51,51,51,0.5);z-index: 99999;}
+.cmbeans-alert-box{width: 100%;height: 100%;display: flex;align-items: center;justify-content: center;flex-direction: column;position: fixed;left: 0;top: 0;background: rgba(51,51,51,0.5);z-index: 99999;opacity: 0;}
+.cmbeans-alert-box.hide{opacity: 0;}
+.cmbeans-alert-box.show{opacity: 1;}
 .cmbeans-alert-image{width: 87.2vw;height: 68.6vw;position: absolute;top: 0;left: 0;bottom: 0;right: 0;margin: auto;box-sizing: border-box;}
 .cmbeans-alert-image img{width: 87.2vw;height: 68.6vw;display: block;}
 .cmbeans-alert-image .mIcon{width:8vw;height:8vw;display: block;position: absolute;top: 45px;right: -3px;cursor: pointer;}

+ 4 - 1
src/main/resources/static/css/base/base.pc.css

@@ -321,6 +321,7 @@ iframe{width:320px !important;height: 280px !important}
 #scrollTop .item:hover .phoneHover{display:block}
 /* 活动标签,阶梯价格 */
 .priceTag{position:relative}
+.couponTag{display:inline-block;height:20px;line-height:20px;border:1px solid #f94b4b;border-radius:2px;font-size:12px;color:#f94b4b;background:#fff1eb;padding:0 2px;position:relative;font-style:normal}
 .priceTag .tag,.listTag{display:inline-block;height:20px;line-height:20px;border:1px solid #ffe6dc;border-radius:2px;font-size:12px;color:#E15616;cursor:pointer;background:#fff;padding:0 24px 0 10px;position:relative;font-style:normal}
 .listTag{float:right;padding:0 5px;margin:12px 15px 0 0;}
 .priceTag .tag:before{width:24px;height:24px;background-position:-88px 3px;position:absolute;right:0;top:0}
@@ -349,7 +350,9 @@ iframe{width:320px !important;height: 280px !important}
 .empty a{color:#E15616;}
 
 /*采美豆弹窗样式*/
-.cmbeans-alert-box{width: 100%;height: 100%;display: flex;align-items: center;justify-content: center;flex-direction: column;position: fixed;left: 0;top: 0;background: rgba(51,51,51,0.7);z-index: 99999;}
+.cmbeans-alert-box{width: 100%;height: 100%;display: flex;align-items: center;justify-content: center;flex-direction: column;position: fixed;left: 0;top: 0;background: rgba(51,51,51,0.7);z-index: 99999;opacity: 0;}
+.cmbeans-alert-box.hide{opacity: 0;}
+.cmbeans-alert-box.show{opacity: 1;}
 .cmbeans-alert-image{width: 404px;height: 342px;position: absolute;top: 0;left: 0;bottom: 0;right: 0;margin: auto;box-sizing: border-box;}
 .cmbeans-alert-image img{width: 404px;height: 342px;display: block;}
 .cmbeans-alert-image .icon{width:30px;height:30px;display: block;position: absolute;top: 45px;right: -35px;cursor: pointer;}

+ 3 - 1
src/main/resources/static/css/base/floor.css

@@ -35,6 +35,7 @@
 .section_page .page_main_price .main_price_show.none{color:#999999;text-decoration:line-through}
 .section_page .page_main_price .section_page .page_main_price .main_price_show.none{display:none}
 .section_page .page_main_price .price_text_tag{width:100%;height:22px;box-sizing:border-box;float:left;margin-top:0px}
+.section_page .page_main_price .price_text_tag .couponTag{float:left;margin-right: 4px;}
 .section_page .page_main_price .price_text_tag .listTag{margin:0;float:left}
 .section_page .page_main_price .main_price_none{width:100%;height:24px;box-sizing:border-box;float:left;margin-top:2px}
 .section_page .page_main_price .main_price_none.sec{margin-top:25px}
@@ -84,7 +85,8 @@
 .section_page .page_main_price .main_price_show{color:#f94b4b}
 .section_page .page_main_price .section_page .page_main_price .main_price_show.none{display:none}
 .section_page .page_main_price .main_price_unde{width:100%;height:6.5vw;line-height:6.5vw;font-size:3.4vw;color:#4a4f58;text-align:left;float:left}
-.section_page .page_main_price .price_text_tag .listTag{padding:0 2vw;border:.27vw solid #ffe6dc;background:none;font-size:2.8vw;float:left;height:4.2vw;line-height:4.2vw}
+.section_page .page_main_price .price_text_tag .couponTag{padding:0 2vw;border:.27vw solid #f94b4b;background:#fff1eb;font-size:2.8vw;float:left;height:4.2vw;line-height:4.2vw;color: #f94b4b;border-radius: 0.2vw;margin-right: 1vw;}
+.section_page .page_main_price .price_text_tag .listTag{padding:0 2vw;border:.27vw solid #ffe6dc;background:none;font-size:2.8vw;float:left;height:4.2vw;line-height:4.2vw;border-radius: 0.2vw;}
 .section_page .section_page_main.section_6{height:auto}
 .section_page .section_page_main.section_6 .section_page_more{display:none}
 .section_page .section_page_main.section_3,.section_page .section_page_main.section_4,.section_page .section_page_main.section_5{height:167vw}

+ 2 - 2
src/main/resources/static/css/index/index_new.h5.css

@@ -22,8 +22,8 @@
 .section_page .page_main_text .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:.5vw}
 .Popup{position:fixed;background:rgba(34,39,46,0.5);top:0;left:0;width:100%;height:100%;z-index:99999;opacity:0}
 .Popup.show{opacity:1}
-.Popup .show_popup{width:97vw;height:73.6vw;position:absolute;top:0;right:0;left:0;bottom:0;margin:auto}
+.Popup .show_popup{width:70vw;height:94.9vw;position:absolute;top:0;right:0;left:0;bottom:0;margin:auto}
 .bg_img img{width:100%;height:100%}
-.bg_icon{text-align:right;position:absolute;right:10vw}
+.bg_icon{text-align:right;position:absolute;right:-5vw}
 .bg_icon .mIcon{width:10vw;height:10vw;display:inline-block}
 .bg_icon .mIcon:before{width:10vw;height:10vw;background-position:-33.3vw -77.3vw;cursor:pointer}

+ 2 - 2
src/main/resources/static/css/index/index_new.pc.css

@@ -70,8 +70,8 @@ footer{width:100%;height:auto;float:left}
 .section_page .page_main_text .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;}
 .Popup{position: fixed;background: rgba(34,39,46, 0.5);top: 0;left: 0;width: 100%;height: 100%;z-index: 99999;opacity: 0;}
 .Popup.show{opacity: 1;}
-.Popup .show_popup{width: 655px;height: 460px;position: absolute;top: 0;right: 0;left: 0;bottom: 0;margin: auto;cursor: pointer}
+.Popup .show_popup{width: 344px;height: 472px;position: absolute;top: 0;right: 0;left: 0;bottom: 0;margin: auto;cursor: pointer}
 .bg_img img{width: 100%;height: 100%;}
-.bg_icon{text-align: right;position: absolute;right: 70px; top: 50px;}
+.bg_icon{text-align: right;position: absolute;right: -50px; top: 30px;}
 .bg_icon .icon{width: 50px;height: 50px;display: inline-block;}
 .bg_icon .icon:before{width: 50px;height: 50px;background-position: -187px -545px;cursor: pointer;}

+ 41 - 22
src/main/resources/static/css/product/detail.h5.css

@@ -7,6 +7,7 @@ li{list-style:none}
 .productBox .imageBox{width:100%;height:100vw;position:relative}
 #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 .crumbs{height:8vw;line-height:8vw;font-size:3.1vw;overflow:hidden;color:#93979F}
 .productBox .detailBox .crumbs a{color:#93979F}
@@ -26,6 +27,11 @@ li{list-style:none}
 .productBox .detailBox .row>em.p{font-weight:bold;}
 .productBox .detailBox .row>em.ser{color:#93979F;display:inline-block;width: 24%}
 .productBox .detailBox .row>em.ser:before{content:'\2713';display:inline-block;width:3.4vw;height:3.4vw;text-align:center;line-height:3.4vw;font-size:3.4vw;background:#E15616;border-radius:1.7vw;color:#FFF;margin-right:1.4vw}
+.productBox .detailBox .row .coupon-tags{display: inline-block;box-sizing: border-box;line-height: 5vw;}
+.productBox .detailBox .row .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;}
+.productBox .detailBox .row .coupon-tags>em{font-style:normal;display: inline-block;margin-right: 8px;}
+.productBox .detailBox .row .coupon-tags>em.couponTag-more{color: #4a4f58;cursor: pointer;}
+.productBox .detailBox .row .coupon-tags>em{font-style:normal;display: inline-block;}
 .productBox .detailBox .price .icon{display:inline-block;font-size:0;height:5vw;line-height:5vw;vertical-align:text-bottom;}
 .productBox .detailBox .price .icon:before{width:11vw;height:5vw;}
 .productBox .detailBox .price .icon.i0:before{background-position:0 -23.2vw}
@@ -74,28 +80,41 @@ li{list-style:none}
 .tabCon .item div p.tl{line-height:8vw;text-align: left; font-weight: bold;}
 .productInfo .comment{color:#93979F;padding:5vw 0;    margin-right: 25px;position: relative}
 .productBox .detailBox .row .l{display: inline-block;min-width: 14.5vw;text-align-last: justify;vertical-align: top}
-.icon.comment:before{
-     width: 6.7vw;
-    height: 6.7vw;
-    background-position: 0px -33px;
-    position: absolute;
-    top:4vw;
-}
+.icon.comment:before{width: 6.7vw;height: 6.7vw;background-position: 0px -33px;position: absolute;top:4vw;}
 .comment-right{float: right}
 .noprice{color: #e15616;font-size: 3vw}
 .noprice .mIcon::before{width: 5vw;height: 4vw;background-position: -48.2vw -69.2vw;position: relative;top: 1vw}
-.Beautyfair .tag{
-        width: 11.3vw;
-        height: 4.3vw;
-        line-height: 4.3vw;
-        font-size: 2.8vw;
-        float: left;
-        margin-right: 1.3vw;
-        text-align: center;
-        color: #FFFFFF !important;
-        background-image: linear-gradient(270deg,
-                #f9c023 0%,
-                #f83600 100%);
-        border-radius: 0px 2.7vw 0px 0px;
-        margin-top: 1vw;
-}
+.Beautyfair .tag{width: 11.3vw;height: 4.3vw;line-height: 4.3vw;font-size: 2.8vw;float: left;margin-right: 1.3vw;text-align: center;color: #FFFFFF !important;background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);border-radius: 0px 2.7vw 0px 0px;margin-top: 1vw;}
+/*优惠券弹窗*/
+.coupon-popup{width:100%;height:100%;position:fixed;bottom:0;left:0;background-color:rgba(0,0,0,.4);z-index: 99999;opacity: 0;}
+.coupon-popup.hide{opacity: 0;}
+.coupon-popup.show{opacity: 1;}
+.coupon-popup .coupon-popup-model-content{width:100%;height:106.7vw;position:absolute;bottom:0;left:0;right:0;bottom:0;background-color:#FFFFFF;margin:auto;border-radius:2px;box-sizing:border-box}
+.coupon-popup .title{width:100%;height:11vw;float:left;box-sizing:border-box;position:relative;padding:2.3vw 0;background-color: #f8f8f8;}
+.coupon-popup .title p{font-size:3.4vw;line-height:6.4vw;text-align:center;color:#333333;font-weight: bold;}
+.coupon-popup .title .icon{width:6.4vw;height:6.4vw;display:block;position:absolute;right:0;top:0;cursor:pointer;padding:10px}
+.coupon-popup .title .icon:before{width:6.4vw;height:6.4vw;background-position:-33.6vw 0;}
+.coupon-popup .coupon-popup-main{width:100%;height:95.7vw;box-sizing:border-box;padding:0 3.5vw;float:left;}
+.coupon-popup .coupon-popup-tabs{width: 100%;height: 11vw;box-sizing: border-box;border-bottom: 1px solid #efefef;float: left;}
+.coupon-popup .popup-tabs-cell{width: 50%; float: left;box-sizing: border-box;padding: 0 18.1vw;}
+.coupon-popup .popup-tabs-cell span{display: block;line-height: 11vw;height: 11vw;font-size: 3.4vw;color: #333;cursor: pointer;box-sizing: border-box;text-align: center;}
+.coupon-popup .popup-tabs-cell.active span{color: #E15621;border-bottom: 1px solid #E15621;}
+.coupon-popup .coupon-popup-content{width:100%;height:84.7vw;box-sizing:border-box;padding: 4vw 0;float: left;}
+.coupon-popup .coupon-popup-content .empty{padding: 15vw 0;}
+.coupon-popup .coupon-popup-content .empty img{width: 20vw;height: 20vw;}
+.coupon-popup .coupon-popup-content .empty .msg{color: #999;font-size: 3vw;}
+.coupon-popup .coupon-popup-scroll{width:100%;height:100%;box-sizing:border-box;float:left;overflow:hidden;overflow-y:auto}
+.coupon-popup .coupon-list-cell{width: 93.1vw;height: 33vw;float: left;margin: 0 0 2.4vw 0;position: relative;border-radius: 1vw;}
+.coupon-popup .coupon-list-cell .coupon-list-le{width: 77.6vw;height: 33vw;float: left;box-sizing: border-box;padding: 6.8vw 3.7vw 3.3vw 3.7vw;}
+.coupon-popup .coupon-list-cell .coupon-list-money{width: 100%;height:10vw;line-height: 10vw;color: #f94b4b;font-size: 3vw;text-align: left; }
+.coupon-popup .coupon-list-cell .coupon-list-money .maxMoney{font-size: 7.2vw;margin-right: 2.4vw;}
+.coupon-popup .coupon-list-cell .coupon-list-money.none, .coupon-list-cell .coupon-list-name.none, .coupon-list-cell .coupon-list-time.none{color: #FFF;}
+.coupon-popup .coupon-list-cell .coupon-list-name{width: 100%;height: 4.8vw;line-height: 4.8vw;color: #333333;font-size: 3.4vw;text-align: left;margin-top: 4vw;}
+.coupon-popup .coupon-list-cell .coupon-list-time{width: 100%;height: 4.8vw;line-height: 4.8vw;color: #999999;font-size: 2.4vw;text-align: left;}
+.coupon-popup .coupon-list-cell .coupon-list-ri{width: 15.5vw;height: 33vw;float: left;box-sizing: border-box;font-size:3.4vw;color: #FFF;cursor: pointer;}
+.coupon-popup .coupon-list-cell .coupon-list-ri span{display: block;width: 100%;height: 100%;box-sizing: border-box;padding: 9.5vw 6vw;}
+.coupon-popup .coupon-list-cell .coupon-list-ri span.none{padding: 11.8vw 6vw;}
+.coupon-popup .coupon-list-cell .coupon-tags{height: 4.8vw;line-height: 4.8vw;text-align: center;background-color: #f94b4b;color: #FFF;border-radius: 1.6vw 0 1.6vw 0;position: absolute;top: 0;left: 0;padding: 0 1.5vw;font-size: 3vw;}
+.coupon-popup .coupon-list-cell{background: url("/img/account/icon-coupon-uesb@h52x.png") no-repeat;background-size: cover;}
+.coupon-popup .coupon-list-cell.none{background: url("/img/account/icon-coupon-received@h52x.png") no-repeat;background-size: cover;}
+

+ 37 - 16
src/main/resources/static/css/product/detail.pc.css

@@ -7,8 +7,9 @@ li{list-style:none;}
 .productBox .imageBox{float:left;width:452px;height:545px;position:relative}
 .productBox .detailBox{float:right;width:686px}
 .productBox img{width:100%;height:100%;display:block}
-.productBox .bigImage{width:452px;height:452px;background:#F3F7FE;border: 1px solid #e4e4e4;}
+.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}
+.productBox .bigImage .cm-product-cover-tag{position:absolute;top: 10px;right: 10px;width: 75px;height: 27px;background: url(/img/activity/cm_cover_bg_pc.png) no-repeat center;background-size: 75px;text-align: center;color: #fff;line-height: 27px;font-size: 12px;}
 .productBox .smallImage{height:79px;padding-top:14px;overflow:hidden}
 .productBox .smallImage ul{width:452px}
 .productBox .smallImage li{float:left;box-sizing:border-box;width:79px;height:79px;margin-left:14px;background:#F3F7FE;opacity:.5;-moz-transition:.5s;-webkit-transition:.5s;transition:.5s}
@@ -38,6 +39,9 @@ li{list-style:none;}
 .productBox .detailBox .row>em.p{font-weight:bold;}
 .productBox .detailBox .row>em.ser{color:#93979F;display:inline-block;margin-right:20px;}
 .productBox .detailBox .row>em.ser:before{width:20px;height:20px;margin-right:5px;background-position:-60px 0;vertical-align:text-top;}
+.productBox .detailBox .row .coupon-tags{display: inline-block;padding-left: 7px;}
+.productBox .detailBox .row .coupon-tags>em{font-style:normal;display: inline-block;margin-right: 8px;}
+.productBox .detailBox .row .coupon-tags>em.couponTag-more{color: #4a4f58;cursor: pointer;}
 .productBox .detailBox .price{height:24px}
 .productBox .detailBox .price .rmb{font-weight:bold;}
 .productBox .detailBox .price .icon{display:inline-block;font-size:0;height:24px;line-height:24px;vertical-align:text-top;}
@@ -147,18 +151,35 @@ input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appear
 .WechatBg{background: url(/img/base/Wechat.bg.png) no-repeat left top;width: 174px;height: 218px;position: absolute;right: -150px;top: -20px;opacity: 0}
 .WechatBg img{margin: 18px auto 10px;width: 132px;height: 132px;}
 .WechatBg p{font-size: 12px;text-align: center;width: 120px;margin: auto;}
-.Beautyfair .tag{
-        width: 44px;
-        height: 18px;
-        line-height: 18px;
-        font-size: 12px;
-        float: left;
-        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: 8px;
-}
+.Beautyfair .tag{width: 44px;height: 18px;line-height: 18px;font-size: 12px;float: left;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: 8px;}
+/*优惠券弹窗*/
+.coupon-popup{width:100%;height:100%;position:fixed;top:0;left:0;background-color:rgba(0,0,0,.4);z-index: 99999;opacity: 0;}
+.coupon-popup.hide{opacity: 0;}
+.coupon-popup.show{opacity: 1;}
+.coupon-popup .coupon-popup-model-content{width:540px;height:492px;position:absolute;top:0;left:0;right:0;bottom:0;background-color:#FFFFFF;margin:auto;border-radius:2px;box-sizing:border-box}
+.coupon-popup .title{width:100%;height:50px;float:left;box-sizing:border-box;position:relative;padding:0 24px;background-color: #f8f8f8;}
+.coupon-popup .title p{font-size:16px;line-height:50px;text-align:left;color:#333333;float:left;font-weight: bold;}
+.coupon-popup .title .icon{width:16px;height:16px;display:block;position:absolute;right:0;top:0;cursor:pointer;padding:10px}
+.coupon-popup .title .icon:before{width:16px;height:16px;background-position:-318px 0}
+.coupon-popup .coupon-popup-main{width:100%;height:442px;box-sizing:border-box;padding:0 40px;float:left;}
+.coupon-popup .coupon-popup-tabs{width: 100%;height: 57px;box-sizing: border-box;border-bottom: 1px solid #efefef;float: left;}
+.coupon-popup .popup-tabs-cell{width: 230px; float: left;box-sizing: border-box;padding: 0 91px;}
+.coupon-popup .popup-tabs-cell span{display: block;line-height: 57px;height: 57px;font-size: 16px;color: #333;cursor: pointer;box-sizing: border-box;text-align: center;}
+.coupon-popup .popup-tabs-cell.active span{color: #E15621;border-bottom: 1px solid #E15621;}
+.coupon-popup .coupon-popup-content{width:100%;height:385px;box-sizing:border-box;padding: 16px 0;float: left;}
+.coupon-popup .coupon-popup-content .empty{padding: 60px 0;}
+.coupon-popup .coupon-popup-content .empty img{width: 120px;height: 120px;}
+.coupon-popup .coupon-popup-content .empty .msg{color: #999;}
+.coupon-popup .coupon-popup-scroll{width:100%;height:100%;box-sizing:border-box;padding:0 45px;float:left;overflow:hidden;overflow-y:auto}
+.coupon-popup .coupon-list-cell{width: 369px;height: 148px;float: left;margin-bottom:24px;position: relative;background: url("/img/account/icon-coupon-uesb@2x.png") no-repeat;background-size: cover;}
+.coupon-popup .coupon-list-cell.none{background: url("/img/account/icon-coupon-received@2x.png") no-repeat;background-size: cover;}
+.coupon-popup .coupon-list-cell .coupon-list-le{width: 299px;height: 148px;float: left;box-sizing: border-box;padding: 24px 14px 12px 14px;}
+.coupon-popup .coupon-list-cell .coupon-list-money{width: 100%;height: 56px;line-height: 56px;color: #f94b4b;font-size: 14px;text-align: left;}
+.coupon-popup .coupon-list-cell .coupon-list-money .maxMoney{font-size: 40px;margin-right: 8px;}
+.coupon-popup .coupon-list-cell .coupon-list-name{width: 100%;height: 22px;line-height: 22px;color: #333333;font-size: 14px;text-align: left;margin-top: 13px;}
+.coupon-popup .coupon-list-cell .coupon-list-time{width: 100%;height: 22px;line-height: 22px;color: #999999;font-size: 12px;text-align: left;}
+.coupon-popup .coupon-list-cell .coupon-list-ri{width: 70px;height: 148px;float: left;box-sizing: border-box;font-size: 16px;color: #FFF;cursor: pointer;}
+.coupon-popup .coupon-list-cell .coupon-list-ri span{display:block;padding: 45px 27px;color: #FFFFFF;}
+.coupon-popup .coupon-list-cell .coupon-list-ri span.none{padding: 54px 27px;color: #FFFFFF;}
+.coupon-popup .coupon-list-cell .coupon-tags{height: 24px;line-height: 24px;text-align: center;border-radius: 8px 0 8px 0;position: absolute;top: 0;left: 0;padding: 0 10px;background-color: #f94b4b;color: #FFF;}
+

+ 7 - 4
src/main/resources/static/css/product/instruement-list.css

@@ -148,6 +148,7 @@
     .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;}
@@ -170,7 +171,7 @@
     .sortBox li.down:after{border-top-color:#E15616}
     .sortBox li.down:before{border-bottom-color:#E15616;opacity:.3}
     .list-container ul{margin: 3.2vw auto;width: 97vw;}
-    .list-container ul li{width: 45.6vw;height: 68vw;overflow: hidden;margin: 0 1.3vw 2.6vw 1.3vw;background: #fff;text-align: left;}
+    .list-container ul li{width: 45.6vw;height: 70vw;overflow: hidden;margin: 0 1.3vw 2.6vw 1.3vw;background: #fff;text-align: left;}
     .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;}
@@ -181,10 +182,12 @@
     .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: 2.7vw 3.2vw;overflow: hidden;}
-    .priceTag .tag, .listTag {padding: 0 2vw;border: .27vw solid #ffe6dc;background: none;font-size: 2.8vw;float: right;}
+    .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 .price_text_tag {width: 100%;box-sizing: border-box;float: left;}
     .productItem .price .main_price_show{color: #f94b4b}
     .productItem .name span.tag{width: 11.3vw;height: 4.3vw;line-height: 4.3vw;font-size: 2.8vw;display: inline-block;margin-right: 1.3vw;text-align: center;color: #FFFFFF !important;background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);border-radius: 0px 10px 0px 0px;margin-top: .25vw;}
 

+ 105 - 4
src/main/resources/static/css/product/list.css

@@ -15,8 +15,90 @@ li{list-style:none}
     .sortBox li.up:after{border-top-color:#E15616;opacity:.3}
     .sortBox li.down:after{border-top-color:#E15616}
     .sortBox li.down:before{border-bottom-color:#E15616;opacity:.3}
-    .productList{width:1200px;margin:0 auto;box-sizing:border-box}
-    .productList .productItem{margin-bottom:16px}
+    .productList{width:1184px;margin:0 auto;box-sizing:border-box}
+    .productList .productItem {
+        width: 184px;
+        height: 268px;
+        float: left;
+        background: #fff;
+        position: relative;
+        margin: 0 16px 16px 0;
+        overflow: hidden;
+        float: left;
+    }
+    .productList .productItem:nth-child(6n){margin-right: 0;}
+    .productList .productItem img {
+        width: 100%;
+        height: 164px;
+    }
+    .productList .productItem .name{
+        display: block;
+        padding: 0 8px;
+        margin-top: 8px;
+        height: 40px;
+        line-height: 21px;
+        vertical-align: middle;
+        word-break: break-all;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        display: -webkit-inline-box;
+        -webkit-line-clamp: 2;
+        -webkit-box-orient: vertical
+    }
+    .productItem .price{
+        border: 0;
+        box-sizing: border-box;
+        padding: 0 8px;
+        height: 54px;
+        width: 100%;
+    }
+    .productItem .price .icon:before{
+        width: 63px;
+    }
+    .productItem .price .icon.i5:before {
+        background-position: -2px -832px;
+    }
+    .productItem .price .icon.i1:before {
+        background-position: -2px -712px;
+    }
+    .productItem .price .icon.i2:before {
+        background-position: -2px -742px;
+    }
+    .productItem .price .icon.i3:before {
+        background-position: -2px -772px;
+    }
+    .productItem .price .icon.i4:before {
+        background-position: -2px -802px;
+    }
+    .listTag{
+        margin: 12px 8px 0 0;
+        padding: 0 2px;
+    }
+    .productItem .image .icon{
+        position: inherit;
+    }
+    .sortBox li.on, .sortBox li.up, .sortBox li.down {
+        background: #FFE6DC;
+        color: #E15616;
+    }
+    .empty{
+        margin-top: 32px;
+        background: #fff;
+    }
+    .empty p{
+        color: #909090;
+        font-size: 14px;
+    }
+    .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}
@@ -43,13 +125,32 @@ li{list-style:none}
     .sortBox li.up:after{border-top-color:#E15616;opacity:.3}
     .sortBox li.down:after{border-top-color:#E15616}
     .sortBox li.down:before{border-bottom-color:#E15616;opacity:.3}
-    .productList{width:96.6vw;margin:1.3vw auto;box-sizing:border-box}
+    .productList{margin: 3.2vw auto;width: 97vw;}
+    .productList .productItem{width: 45.6vw;height: 70vw;overflow: hidden;margin: 0 1.3vw 2.6vw 1.3vw;background: #fff;text-align: left;}
+    .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}
-    .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: .5vw;}
 
 
 

+ 82 - 0
src/main/resources/static/css/product/product-coupon.css

@@ -0,0 +1,82 @@
+@charset "utf-8";
+li{list-style:none}
+/**
+ * PC端
+ */
+@media screen and (min-width:768px){
+    .coupon-banner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:hidden}
+    .coupon-banner img{display:block;width:auto;height:510px;max-width:unset}
+    .coupon-content{width: 100%;margin-top: 24px;}
+    .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;}
+    .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;}
+
+}
+/**
+* 移动端
+*/
+@media screen and (max-width:768px){
+    .coupon-banner{width:100vw;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:hidden}
+    .coupon-banner img{display:block;width:100vw;height:48vw;max-width:unset}
+    .productList{margin: 3.2vw auto;width: 97vw;}
+    .productList .productItem{width: 45.6vw;height: 70vw;overflow: hidden;margin: 0 1.3vw 2.6vw 1.3vw;background: #fff;text-align: left;}
+    .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}
+
+
+
+
+
+
+
+
+
+}
+

+ 121 - 6
src/main/resources/static/css/shopping/shopping.css

@@ -13,6 +13,7 @@ li{list-style:none}
     .pageTitle h1{color:#2D3036;font-size:16px;font-weight:bold;float:left}
     .pageTitle h1 span{color:#627386;font-size:12px;font-weight:normal;margin-left:10px}
     h2.title{height:36px;font-size:16px;padding:0 16px;line-height:36px;color:#22272e;font-weight:normal;clear:both}
+    h2.title>a{color: #E15621;margin-left: 32px;}
     .pageTitle .step{float:right;color:#999999;font-size:14px;height:44px;line-height:44px}
     .pageTitle .step span{display:inline-block;height:20px;line-height:20px;vertical-align:middle;position:relative;padding-right:55px;}
     .pageTitle .step span:before{font-style:normal;font-size:20px;vertical-align:text-top;margin-right:5px}
@@ -32,6 +33,7 @@ li{list-style:none}
     .listWrap .supplierTit{border-bottom:1px solid #F7F7F7;height:60px;line-height:60px;text-align:left}
     .listWrap .supplierTit .img{width:auto;height:32px;border:1px solid #F7F7F7;margin-right:10px}
     .listWrap .supplierTit .name{color:#9aa5b5}
+    .listWrap .supplierTit .couponTag{cursor: pointer;}
     .listWrap .cartTit,.listWrap .supplierBtn{height:60px;line-height:60px}
     .listWrap .cartTit{color:#333333}
     .listWrap .supplierItem,.listWrap .supplierBtn{color:#22272E}
@@ -76,6 +78,20 @@ li{list-style:none}
     .invalidTit .tit{color:#22272e;float:left}
     .invalidTit .delAll{color:#e15616;float:right;cursor:pointer}
     .invalidTit .tit em{font-style:normal;color:#e15616}
+    /*优惠券选择*/
+    .couponWrap{width: 100%;min-height: 200px;box-sizing: border-box;padding: 32px 16px 10px 16px;background: #FFF;box-shadow: 0px 3px 6px 0px rgba(0, 0, 0, 0.07);margin-bottom: 32px;float: left;}
+    .couponWrap .coupon-list-cell{width: 369px;height: 148px;float: left;cursor: pointer;margin-bottom:24px;margin-right: 15px;position: relative;background: url("/img/account/icon-coupon-uesb@2x.png") no-repeat;background-size: cover;}
+    .couponWrap .coupon-list-cell .coupon-list-le{width: 299px;height: 148px;float: left;box-sizing: border-box;padding: 24px 14px 12px 14px;position: relative;}
+    .couponWrap .coupon-list-cell .coupon-list-le .coupon-list-checked{position: absolute;right: 16px;top: 16px;width: 16px;height: 16px;background: url("/img/cart/icon_weigouxuan@2x.png") no-repeat;background-size: cover;}
+    .couponWrap .coupon-list-cell .coupon-list-le .coupon-list-checked.checked{background: url("/img/cart/icon_yixuanze@2x.png") no-repeat;background-size: cover;}
+    .couponWrap .coupon-list-cell .coupon-list-money{width: 100%;height: 56px;line-height: 56px;color: #f94b4b;font-size: 14px;text-align: left;}
+    .couponWrap .coupon-list-cell .coupon-list-money .maxMoney{font-size: 40px;margin-right: 8px;}
+    .couponWrap .coupon-list-cell .coupon-list-name{width: 100%;height: 22px;line-height: 22px;color: #333333;font-size: 14px;text-align: left;margin-top: 13px;}
+    .couponWrap .coupon-list-cell .coupon-list-time{width: 100%;height: 22px;line-height: 22px;color: #999999;font-size: 12px;text-align: left;}
+    .couponWrap .coupon-list-cell .coupon-list-ri{width: 70px;height: 148px;float: left;box-sizing: border-box;padding: 54px 27px;font-size: 16px;color: #FFF;cursor: pointer;}
+    .couponWrap .coupon-list-cell .coupon-list-ri.none{padding: 45px 27px;}
+    .couponWrap .coupon-list-cell .coupon-tags{height: 24px;line-height: 24px;text-align: center;border-radius: 8px 0 8px 0;position: absolute;top: 0;left: 0;padding: 0 10px;background-color: #f94b4b;color: #FFF;}
+
     /* 底部结算 */
     .summaryWrap{width:100%;background:#FFF;margin:16px 0 -29px 0;position:relative}
     .summaryWrap .summary{width:1184px;margin:0 auto;font-size:18px;padding:11px 0;height:50px;line-height:50px;text-align:right}
@@ -83,9 +99,17 @@ li{list-style:none}
     .summaryWrap .summary .left,.summaryWrap .summary .right{display:inline}
     .summaryWrap .summary .left .item:first-child{float:left}
     .summaryWrap .summary .item{display:inline-block;margin-right:32px;position:relative}
+    .summaryWrap .summary .item.priceTotal{float: right;margin-right: 0;}
+    .summaryWrap .summary .item p.priceTotal-t{height: 32px;font-size: 16px;display: inline-block;width: 100%;float: left;text-align: left;line-height: 30px;}
+    .summaryWrap .summary .item p.priceTotal-b{height: 18px;font-size: 14px;display: inline-block;width: 100%;float: left;text-align: left;line-height: 18px;}
     .summaryWrap .summary .check{width:14px;height:14px;line-height:14px;vertical-align:top;margin:18px 16px 0 16px}
     .summaryWrap .summary .delete{margin-left:16px;color:#f55c5c}
-    .summaryWrap .summary .submit{display:inline-block;width:232px;height:50px;line-height:50px;text-align:center;background:linear-gradient(135deg,rgba(242,143,49,1) 0%,rgba(225,86,22,1) 100%);border-radius:2px;color:#FFF}
+    .summaryWrap .summary .totalMoney{display:inline-block;margin-right:32px;position:relative;}
+    .summaryWrap .summary .totalPrice{line-height: 24px;font-size: 18px;}
+    .summaryWrap .summary .totalPrice.none{line-height: 50px;}
+    .summaryWrap .summary .totalPrice span{color: #f55c5c;}
+    .summaryWrap .summary .totalCoupon{font-size:14px;line-height:24px;color: #f55c5c;text-align: left;}
+    .summaryWrap .summary .submit{display:inline-block;width:232px;height:50px;line-height:50px;text-align:center;background:linear-gradient(135deg,rgba(242,143,49,1) 0%,rgba(225,86,22,1) 100%);border-radius:2px;color:#FFF;float: right;}
     .summaryWrap .summary .submit.dis{background:#999;}
     .summaryWrap.fixed{position:fixed;bottom:0;left:0;margin:0;z-index:99999;box-shadow:20px 20px 102px rgba(0,0,0,0.1)}
     .summaryWrap .summary .back{color:#f55c5c}
@@ -167,7 +191,7 @@ li{list-style:none}
     .balanceWrap{padding:16px;text-align:left}
     .balanceWrap .text{display:inline-block;height:16px;line-height:16px;font-size:14px;color:#333;margin-left:15px;vertical-align:top}
     .balanceWrap .text .red{color:#FF2A2A}
-    .totalPriceWrap{line-height:36px;text-align:right;padding:16px}
+    .totalPriceWrap{line-height:36px;text-align:right;padding:16px;width: 100%;float: left;}
     .totalPriceWrap span{display:inline-block;width:200px}
     .totalPriceWrap .pis{color: #E15616;}
     .totalPriceWrap span em{font-style:normal;color:#FF2A2A}
@@ -177,12 +201,45 @@ li{list-style:none}
     .invoiceForm .formLine .label{position:absolute;left:0;top:0;width:120px;text-align:right;line-height:36px;font-size:14px}
     .invoiceForm .formLine input[disabled]{border:none}
 
+    /*优惠券弹窗*/
+    .coupon-popup{width:100%;height:100%;position:fixed;top:0;left:0;background-color:rgba(0,0,0,.4);z-index: 99999;opacity: 0;}
+    .coupon-popup.hide{opacity: 0;}
+    .coupon-popup.show{opacity: 1;}
+    .coupon-popup .coupon-popup-model-content{width:540px;height:492px;position:absolute;top:0;left:0;right:0;bottom:0;background-color:#FFFFFF;margin:auto;border-radius:2px;box-sizing:border-box}
+    .coupon-popup .title{width:100%;height:50px;float:left;box-sizing:border-box;position:relative;padding:0 24px;background-color: #f8f8f8;}
+    .coupon-popup .title p{font-size:16px;line-height:50px;text-align:left;color:#333333;float:left;font-weight: bold;}
+    .coupon-popup .title .icon{width:16px;height:16px;display:block;position:absolute;right:0;top:0;cursor:pointer;padding:10px}
+    .coupon-popup .title .icon:before{width:16px;height:16px;background-position:-318px 0}
+    .coupon-popup .coupon-popup-main{width:100%;height:442px;box-sizing:border-box;padding:0 40px;float:left;}
+    .coupon-popup .coupon-popup-tabs{width: 100%;height: 57px;box-sizing: border-box;border-bottom: 1px solid #efefef;float: left;}
+    .coupon-popup .popup-tabs-cell{width: 230px; float: left;box-sizing: border-box;padding: 0 91px;}
+    .coupon-popup .popup-tabs-cell span{display: block;line-height: 57px;height: 57px;font-size: 16px;color: #333;cursor: pointer;box-sizing: border-box;text-align: center;}
+    .coupon-popup .popup-tabs-cell.active span{color: #E15621;border-bottom: 1px solid #E15621;}
+    .coupon-popup .coupon-popup-content{width:100%;height:385px;box-sizing:border-box;padding: 16px 0;float: left;}
+    .coupon-popup .coupon-popup-content .empty{padding: 60px 0;}
+    .coupon-popup .coupon-popup-content .empty img{width: 120px;height: 120px;}
+    .coupon-popup .coupon-popup-content .empty .msg{color: #999;}
+    .coupon-popup .coupon-popup-scroll{width:100%;height:100%;box-sizing:border-box;padding:0 45px;float:left;overflow:hidden;overflow-y:auto}
+    .coupon-popup .coupon-list-cell{width: 369px;height: 148px;float: left;margin-bottom:24px;position: relative;background: url("/img/account/icon-coupon-uesb@2x.png") no-repeat;background-size: cover;}
+    .coupon-popup .coupon-list-cell.none{background: url("/img/account/icon-coupon-received@2x.png") no-repeat;background-size: cover;}
+    .coupon-popup .coupon-list-cell .coupon-list-le{width: 299px;height: 148px;float: left;box-sizing: border-box;padding: 24px 14px 12px 14px;}
+    .coupon-popup .coupon-list-cell .coupon-list-money{width: 100%;height: 56px;line-height: 56px;color: #f94b4b;font-size: 14px;text-align: left;}
+    .coupon-popup .coupon-list-cell .coupon-list-money .maxMoney{font-size: 40px;margin-right: 8px;}
+    .coupon-popup .coupon-list-cell .coupon-list-name{width: 100%;height: 22px;line-height: 22px;color: #333333;font-size: 14px;text-align: left;margin-top: 13px;}
+    .coupon-popup .coupon-list-cell .coupon-list-time{width: 100%;height: 22px;line-height: 22px;color: #999999;font-size: 12px;text-align: left;}
+    .coupon-popup .coupon-list-cell .coupon-list-ri{width: 70px;height: 148px;float: left;box-sizing: border-box;padding: 54px 27px;font-size: 16px;color: #FFF;cursor: pointer;}
+    .coupon-popup .coupon-list-cell .coupon-list-ri.none{padding: 45px 27px;}
+    .coupon-popup .coupon-list-cell .coupon-tags{height: 24px;line-height: 24px;text-align: center;border-radius: 8px 0 8px 0;position: absolute;top: 0;left: 0;padding: 0 10px;background-color: #f94b4b;color: #FFF;}
+
+
 }
 
 /**
 * 移动端
 */
 @media screen and (max-width:768px){
+    footer{display: none;}
+    h2.title>a{color: #E15621;margin-left: 2vw;}
     .pageTitle .step{width:100%;height:12.4vw;line-height:12.4vw;background:#FFF;color:#9AA5B5;font-size:3.1vw;text-align:center}
     .pageTitle .step span{display:inline-block;height:4.2vw;line-height:4.2vw;vertical-align:middle;position:relative;padding-right:6.4vw}
     .pageTitle .step span:before{font-style:normal;font-size:5.2vw;vertical-align:text-top;margin-right:1vw}
@@ -202,8 +259,10 @@ li{list-style:none}
     .listWrap .supplierItem.disable{background:#f1f0f5}
     .listWrap .supplierItem em{font-style:normal}
     .listWrap .supplierTit{border-bottom:1px solid #F7F7F7;height:7.4vw;line-height:7.4vw;padding:1.3vw 3.3vw;position:relative;}
-    .listWrap .supplierTit .price{width:22vw;height:6.4vw;position:absolute;right:0;top:2vw;}
-    .listWrap .supplierTit .priceTag .tag{top:0;}
+    .listWrap .supplierTit .price{height:6.4vw;float: left;}
+    .listWrap .supplierTit .shop{display: block;float: left;}
+    .listWrap .supplierTit .couponTag{float:left;margin-left: 10px;height: 6.4vw;line-height: 6.4vw;box-sizing: border-box;border-radius: 0.2vw;}
+    .listWrap .supplierTit .priceTag .tag{float: left;position: relative;top: 0;left: 0;margin-left: 2vw;}
     .listWrap .cartItem{padding:2.2vw 3.3vw;height:24vw;line-height:24vw;position:relative}
     .listWrap .supplierBtn{border-top:1px solid #F7F7F7;width:93vw;margin:0 auto;padding-bottom:2vw;color:#22272e;font-size:3.4vw;text-align:right}
     .listWrap .supplierBtn em{color:#f55c5c}
@@ -231,15 +290,39 @@ li{list-style:none}
     .invalidTit .tit{color:#22272e;float:left}
     .invalidTit .delAll{color:#e15616;float:right}
     .invalidTit .tit em{font-style:normal;color:#e15616}
+    /*优惠券*/
+    .couponWrap{width: 100%;box-sizing: border-box;padding: 4.8vw 3.2vw 2vw 3.2vw;background: #FFF;box-shadow: 0px 3px 6px 0px rgba(0, 0, 0, 0.07);margin-bottom: 4.8vw;float: left;}
+    .couponWrap .coupon-list-cell{width: 93.1vw;height: 33vw;float: left;margin: 0 0 2.4vw 0;position: relative;border-radius: 1vw;}
+    .couponWrap .coupon-list-cell .coupon-list-le{width: 77.6vw;height: 33vw;float: left;box-sizing: border-box;padding: 6.8vw 3.7vw 3.3vw 3.7vw;position: relative;}
+    .couponWrap .coupon-list-cell .coupon-list-le .coupon-list-checked{position: absolute;right: 4vw;top: 4vw;width: 3.6vw;height: 3.6vw;background: url("/img/cart/icon_weigouxuan@2x.png") no-repeat;background-size: cover;}
+    .couponWrap .coupon-list-cell .coupon-list-le .coupon-list-checked.checked{background: url("/img/cart/icon_yixuanze@2x.png") no-repeat;background-size: cover;}
+    .couponWrap .coupon-list-cell .coupon-list-money{width: 100%;height:10vw;line-height: 10vw;color: #f94b4b;font-size: 3vw;text-align: left; }
+    .couponWrap .coupon-list-cell .coupon-list-money .maxMoney{font-size: 7.2vw;margin-right: 2.4vw;}
+    .couponWrap .coupon-list-cell .coupon-list-money.none, .coupon-list-cell .coupon-list-name.none, .coupon-list-cell .coupon-list-time.none{color: #FFF;}
+    .couponWrap .coupon-list-cell .coupon-list-name{width: 100%;height: 4.8vw;line-height: 4.8vw;color: #333333;font-size: 3.4vw;text-align: left;margin-top: 4vw;}
+    .couponWrap .coupon-list-cell .coupon-list-time{width: 100%;height: 4.8vw;line-height: 4.8vw;color: #999999;font-size: 2.4vw;text-align: left;}
+    .coupon-popup .coupon-list-cell .coupon-list-ri{width: 70px;height: 148px;float: left;box-sizing: border-box;font-size: 16px;color: #FFF;cursor: pointer;}
+    .coupon-popup .coupon-list-cell .coupon-list-ri span{display:block;padding: 45px 27px;color: #FFFFFF;}
+    .coupon-popup .coupon-list-cell .coupon-list-ri span.none{padding: 54px 27px;color: #FFFFFF;}
+    .couponWrap .coupon-list-cell .coupon-tags{height: 4.8vw;line-height: 4.8vw;text-align: center;background-color: #f94b4b;color: #FFF;border-radius: 1.6vw 0 1.6vw 0;position: absolute;top: 0;left: 0;padding: 0 1.5vw;font-size: 3vw;}
+    .couponWrap .coupon-list-cell{background: url("/img/account/icon-coupon-uesb@h52x.png") no-repeat;background-size: cover;}
+
     /* 底部结算 */
     .summaryWrap{width:100%;background:#FFF;margin:1.4vw 0}
     .summaryWrap .summary{width:93vw;margin:0 auto;font-size:3.4vw;padding:1.5vw 0}
     .summaryWrap .summary em{font-style:normal}
     .summaryWrap .summary .left{height:9.4vw;line-height:9.4vw}
     .summaryWrap .summary .right{height:11.2vw;line-height:11.2vw}
+    .summaryWrap .summary .item.priceTotal{float: left;margin-left: 11vw;}
+    .summaryWrap .summary .item p.priceTotal-t{height: 6.6vw;font-size: 3.4vw;display: inline-block;width: 100%;float: left;text-align: left;line-height:6.6vw;}
+    .summaryWrap .summary .item p.priceTotal-b{height: 4.6vw;font-size: 3vw;display: inline-block;width: 100%;float: left;text-align: left;line-height: 4.6vw;}
     .summaryWrap .summary .check{width:3.5vw;height:3.5vw;line-height:3.5vw;vertical-align:top;margin:3vw 3vw 0 3.3vw}
     .summaryWrap .summary .delete{width:12vw;height:6vw;line-height:6vw;display:inline-block;text-align:center;color:#f55c5c}
-    .summaryWrap .summary .submit{display:inline-block;width:30.4vw;height:11.2vw;line-height:11.2vw;text-align:center;background-color:#e15616;border-radius:2px;color:#FFF}
+    .summaryWrap .summary .totalPrice{line-height: 5.1vw;font-size: 3.4vw;}
+    .summaryWrap .summary .totalPrice.none{line-height: 11.2vw;}
+    .summaryWrap .summary .totalPrice span{color: #f55c5c;}
+    .summaryWrap .summary .totalCoupon{font-size:3vw;line-height:5.1vw;color: #f55c5c;text-align: left;}
+    .summaryWrap .summary .submit{display:inline-block;width:30.4vw;height:11.2vw;line-height:11.2vw;text-align:center;background-color:#e15616;border-radius:2px;color:#FFF;float: right;}
     .summaryWrap.fixed{position:fixed;bottom:0;left:0;margin:0;z-index:99999;box-shadow:20px 20px 102px rgba(0,0,0,0.1)}
     .priceTotal{position:relative;text-align:right;margin-left:6.8vw;height:10.6vw;line-height:18vw;display:inline-block;}
     .priceTotal em{color:#f55c5c}
@@ -286,13 +369,45 @@ li{list-style:none}
     .balanceWrap,.totalPriceWrap,.invoiceWrap{width:100%;box-sizing:border-box;background:#FFF;color:#9aa5b5;font-size:3.4vw;margin-bottom:1.2vw;text-align:left;padding:3.4vw}
     .balanceWrap .text{display:inline-block;height:4vw;line-height:4vw;color:#333;margin-left:2vw;vertical-align:top;white-space:nowrap}
     .balanceWrap .text .red{color:#FF2A2A}
-    .totalPriceWrap{color:#333;line-height:6vw;text-align:left;padding:3.3vw}
+    .totalPriceWrap{color:#333;line-height:6vw;text-align:left;padding:3.3vw;float: left;}
     .totalPriceWrap span{width:46vw;float:right;text-align:right}
     .totalPriceWrap span em{font-style:normal;color:#FF2A2A}
     .totalPriceWrap:after,.invoiceWrap:after,.invoiceWrap .formLine:after{content:'';display:table;clear:both}
     /* 发票 */
     .invoiceWrap .formLine .diyBox {width: 28vw;}
 
+    /*优惠券弹窗*/
+    .coupon-popup{width:100%;height:100%;position:fixed;bottom:0;left:0;background-color:rgba(0,0,0,.4);z-index: 99999;opacity: 0;}
+    .coupon-popup.hide{opacity: 0;}
+    .coupon-popup.show{opacity: 1;}
+    .coupon-popup .coupon-popup-model-content{width:100%;height:106.7vw;position:absolute;bottom:0;left:0;right:0;bottom:0;background-color:#FFFFFF;margin:auto;border-radius:2px;box-sizing:border-box}
+    .coupon-popup .title{width:100%;height:11vw;float:left;box-sizing:border-box;position:relative;padding:2.3vw 0;background-color: #f8f8f8;}
+    .coupon-popup .title p{font-size:3.4vw;line-height:6.4vw;text-align:center;color:#333333;font-weight: bold;}
+    .coupon-popup .title .icon{width:6.4vw;height:6.4vw;display:block;position:absolute;right:0;top:0;cursor:pointer;padding:10px}
+    .coupon-popup .title .icon:before{width:6.4vw;height:6.4vw;background-position:-33.6vw 0;}
+    .coupon-popup .coupon-popup-main{width:100%;height:95.7vw;box-sizing:border-box;padding:0 3.5vw;float:left;}
+    .coupon-popup .coupon-popup-tabs{width: 100%;height: 11vw;box-sizing: border-box;border-bottom: 1px solid #efefef;float: left;}
+    .coupon-popup .popup-tabs-cell{width: 50%; float: left;box-sizing: border-box;padding: 0 18.1vw;}
+    .coupon-popup .popup-tabs-cell span{display: block;line-height: 11vw;height: 11vw;font-size: 3.4vw;color: #333;cursor: pointer;box-sizing: border-box;text-align: center;}
+    .coupon-popup .popup-tabs-cell.active span{color: #E15621;border-bottom: 1px solid #E15621;}
+    .coupon-popup .coupon-popup-content{width:100%;height:84.7vw;box-sizing:border-box;padding: 4vw 0;float: left;}
+    .coupon-popup .coupon-popup-content .empty{padding: 15vw 0;}
+    .coupon-popup .coupon-popup-content .empty img{width: 20vw;height: 20vw;}
+    .coupon-popup .coupon-popup-content .empty .msg{color: #999;font-size: 3vw;}
+    .coupon-popup .coupon-popup-scroll{width:100%;height:100%;box-sizing:border-box;float:left;overflow:hidden;overflow-y:auto}
+    .coupon-popup .coupon-list-cell{width: 93.1vw;height: 33vw;float: left;margin: 0 0 2.4vw 0;position: relative;border-radius: 1vw;}
+    .coupon-popup .coupon-list-cell .coupon-list-le{width: 77.6vw;height: 33vw;float: left;box-sizing: border-box;padding: 6.8vw 3.7vw 3.3vw 3.7vw;}
+    .coupon-popup .coupon-list-cell .coupon-list-money{width: 100%;height:10vw;line-height: 10vw;color: #f94b4b;font-size: 3vw;text-align: left; }
+    .coupon-popup .coupon-list-cell .coupon-list-money .maxMoney{font-size: 7.2vw;margin-right: 2.4vw;}
+    .coupon-popup .coupon-list-cell .coupon-list-money.none, .coupon-list-cell .coupon-list-name.none, .coupon-list-cell .coupon-list-time.none{color: #FFF;}
+    .coupon-popup .coupon-list-cell .coupon-list-name{width: 100%;height: 4.8vw;line-height: 4.8vw;color: #333333;font-size: 3.4vw;text-align: left;margin-top: 4vw;}
+    .coupon-popup .coupon-list-cell .coupon-list-time{width: 100%;height: 4.8vw;line-height: 4.8vw;color: #999999;font-size: 2.4vw;text-align: left;}
+    .coupon-popup .coupon-list-cell .coupon-list-ri{width: 15.5vw;height: 33vw;float: left;box-sizing: border-box;font-size:3.4vw;color: #FFF;cursor: pointer;}
+    .coupon-popup .coupon-list-cell .coupon-list-ri span{display: block;width: 100%;height: 100%;box-sizing: border-box;padding: 9.5vw 6vw;}
+    .coupon-popup .coupon-list-cell .coupon-list-ri span.none{padding: 11.8vw 6vw;}
+    .coupon-popup .coupon-list-cell .coupon-tags{height: 4.8vw;line-height: 4.8vw;text-align: center;background-color: #f94b4b;color: #FFF;border-radius: 1.6vw 0 1.6vw 0;position: absolute;top: 0;left: 0;padding: 0 1.5vw;font-size: 3vw;}
+    .coupon-popup .coupon-list-cell{background: url("/img/account/icon-coupon-uesb@h52x.png") no-repeat;background-size: cover;}
+    .coupon-popup .coupon-list-cell.none{background: url("/img/account/icon-coupon-received@h52x.png") no-repeat;background-size: cover;}
 
 }
 

+ 123 - 84
src/main/resources/static/css/supplier/index.css

@@ -4,94 +4,133 @@ li{list-style:none}
  * PC端
  */
 @media screen and (min-width:768px){
-#supplierBanner{width:100%;height:358px;margin-top:10px;background:#FFF;overflow:hidden;position:relative}
-#supplierBanner .swiper-wrapper{position:relative;height:100%;z-index:0}
-#supplierBanner .swiper-wrapper li{position:relative;zoom:1;vertical-align:middle;width:100%;overflow:hidden}
-#supplierBanner .swiper-wrapper img{width:100%;height:358px;display:block;margin-left:50%;-o-transform:translateX(-50%);-ms-transform:translateX(-50%);-moz-transform:translateX(-50%);-webkit-transform:translateX(-50%);transform:translateX(-50%)}
-#supplierBanner .swiper-button-prev,#supplierBanner .swiper-button-next{position:absolute;top:50%;margin-top:-25px;width:30px;height:50px;line-height:50px;background:rgba(255,230,220,.2);color:#FFF;font-size:30px;text-align:center;border-radius:2px}
-#supplierBanner .swiper-button-prev{left:0;right:auto}
-#supplierBanner .swiper-button-next{left:auto;right:0}
-#supplierBanner .swiper-button-prev:after{content:"\276C"}
-#supplierBanner .swiper-button-next:after{content:"\276D"}
-#supplierBanner .swiper-button-prev:hover,#supplierBanner .swiper-button-next:hover{background:rgba(255,230,220,.6)}
-#supplierBanner .swiper-pagination{width:100%;height:14px;position:absolute;left:0;bottom:10px;z-index:1;text-align:center;font-size:0}
-#supplierBanner .swiper-pagination span{display:inline-block;border:5px solid transparent;cursor:pointer}
-#supplierBanner .swiper-pagination span:before{content:"";display:inline-block;width:14px;height:4px;background:rgba(255,255,255,.4);border-radius:2px}
-#supplierBanner .swiper-pagination span.on:before{width:28px;background:#fff}
-.supplierTit{width:1184px;margin:0 auto;background:#FFF;position:relative}
-.supplierTit .title{box-sizing:border-box;min-height:100px;padding:16px}
-.supplierTit .title img{display:inline-block;height:90px;width: 90px;margin-right:10px;vertical-align:middle}
-.supplierTit .title h1{display:inline-block;max-width:550px;line-height:36px;vertical-align:middle;font-size:24px;font-weight:bold;text-overflow: ellipsis;overflow: hidden;white-space: nowrap}
-.supplierTit .search{width:490px;height:44px;line-height:44px;box-sizing:border-box;border:1px solid #FFE6DC;position:absolute;bottom:27px;right:16px}
-.supplierTit .search input{width:100%;height:42px;line-height:42px;text-indent:15px;position:absolute;right:0;top:0;border:none;outline:none}
-.supplierTit .search .searchBtn{position:absolute;right:0;top:0;font-size:0;padding:7px 12px;height:30px;line-height:30px}
-.supplierTit .search .searchBtn:before{width:30px;height:30px;background-position:4px 4px}
-.supplierInfo{width:1184px;margin:0 auto;}
-.supplierInfo .tabTit{width:100%;height:40px;line-height:40px;margin:16px auto;background:#FFF;border-bottom:1px solid #ffe6dc;font-size:16px;color:#93979F}
-.supplierInfo .tabTit span{display:inline-block;box-sizing:border-box;min-width:130px;text-align:center;height:100%;padding:0 32px;cursor:pointer}
-.supplierInfo .tabTit span:hover{color:#E15621}
-.supplierInfo .tabTit span.on,.supplierInfo .tabTit span.on:hover{color:#E15621;background:#ffe6dc;font-weight:bold;}
-.supplierInfo .tabCon{width:100%;}
-.supplierInfo .infoBox{box-sizing:border-box;padding:16px;font-size:16px;line-height:22px;color:#4A4F58;background:#FFF;}
-.supplierInfo .infoBox .part{margin-top:30px}
-.supplierInfo .infoBox .part:first-child{margin-top:0}
-.supplierInfo .infoBox .title{height:24px;line-height:24px;font-size:24px;color:#4A4F58;font-weight:bold;text-align:left;margin-bottom:20px}
-.supplierInfo .infoBox span.l{display:inline-block;min-width:70px;height:24px;text-align:justify;vertical-align:top;overflow:hidden}
-.supplierInfo .infoBox span.l:after{content:'';display:inline-block;width:100%}
-.supplierInfo .tabCon .tag{display:inline-block;height:20px;line-height:20px;font-style:normal;background:#86B2FB;color:#FFF;border-radius:2px;margin-right:10px;padding:0 5px}
-.supplierInfo .infoBox .cont{text-indent:2em;text-align:justify}
-.supplierInfo .infoBox .photo img{width:240px;height:180px}
-.supplierInfo .infoBox p{margin:5px 0}
-.supplierInfo .productBox{box-sizing:border-box;width:100%;overflow:hidden;}
-.supplierInfo .productList{width:1200px;margin-left:-8px;margin-bottom:18px;}
-.supplierInfo .productBox .title{color:#4A4F58;font-size:20px;height:54px;line-height:54px}
-.supplierInfo .productItem {margin-bottom: 16px;}
-.empty{background: #fff;margin-top: 10px;}
-.navLayout{min-height: auto;}
-.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;}
+    #supplierBanner{width:100%;height:358px;margin-top:10px;background:#FFF;overflow:hidden;position:relative}
+    #supplierBanner .swiper-wrapper{position:relative;height:100%;z-index:0}
+    #supplierBanner .swiper-wrapper li{position:relative;zoom:1;vertical-align:middle;width:100%;overflow:hidden}
+    #supplierBanner .swiper-wrapper img{width:100%;height:358px;display:block;margin-left:50%;-o-transform:translateX(-50%);-ms-transform:translateX(-50%);-moz-transform:translateX(-50%);-webkit-transform:translateX(-50%);transform:translateX(-50%)}
+    #supplierBanner .swiper-button-prev,#supplierBanner .swiper-button-next{position:absolute;top:50%;margin-top:-25px;width:30px;height:50px;line-height:50px;background:rgba(255,230,220,.2);color:#FFF;font-size:30px;text-align:center;border-radius:2px}
+    #supplierBanner .swiper-button-prev{left:0;right:auto}
+    #supplierBanner .swiper-button-next{left:auto;right:0}
+    #supplierBanner .swiper-button-prev:after{content:"\276C"}
+    #supplierBanner .swiper-button-next:after{content:"\276D"}
+    #supplierBanner .swiper-button-prev:hover,#supplierBanner .swiper-button-next:hover{background:rgba(255,230,220,.6)}
+    #supplierBanner .swiper-pagination{width:100%;height:14px;position:absolute;left:0;bottom:10px;z-index:1;text-align:center;font-size:0}
+    #supplierBanner .swiper-pagination span{display:inline-block;border:5px solid transparent;cursor:pointer}
+    #supplierBanner .swiper-pagination span:before{content:"";display:inline-block;width:14px;height:4px;background:rgba(255,255,255,.4);border-radius:2px}
+    #supplierBanner .swiper-pagination span.on:before{width:28px;background:#fff}
+    .supplierTit{width:1200px;margin:0 auto;background:#FFF;position:relative}
+    .supplierTit .title{box-sizing:border-box;min-height:100px;padding:16px}
+    .supplierTit .title img{display:inline-block;height:90px;width: 90px;margin-right:10px;vertical-align:middle}
+    .supplierTit .title h1{display:inline-block;max-width:550px;line-height:36px;vertical-align:middle;font-size:24px;font-weight:bold;text-overflow: ellipsis;overflow: hidden;white-space: nowrap}
+    .supplierTit .search{width:490px;height:44px;line-height:44px;box-sizing:border-box;border:1px solid #FFE6DC;position:absolute;bottom:27px;right:16px}
+    .supplierTit .search input{width:100%;height:42px;line-height:42px;text-indent:15px;position:absolute;right:0;top:0;border:none;outline:none}
+    .supplierTit .search .searchBtn{position:absolute;right:0;top:0;font-size:0;padding:7px 12px;height:30px;line-height:30px}
+    .supplierTit .search .searchBtn:before{width:30px;height:30px;background-position:4px 4px}
+    .supplierInfo{width:1200px;margin:0 auto;}
+    .supplierInfo .tabTit{width:100%;height:40px;line-height:40px;margin:16px auto;background:#FFF;border-bottom:1px solid #ffe6dc;font-size:16px;color:#93979F}
+    .supplierInfo .tabTit span{display:inline-block;box-sizing:border-box;min-width:130px;text-align:center;height:100%;padding:0 32px;cursor:pointer}
+    .supplierInfo .tabTit span:hover{color:#E15621}
+    .supplierInfo .tabTit span.on,.supplierInfo .tabTit span.on:hover{color:#E15621;background:#ffe6dc;font-weight:bold;}
+    .supplierInfo .tabCon{width:100%;}
+    .supplierInfo .infoBox{box-sizing:border-box;padding:16px;font-size:16px;line-height:22px;color:#4A4F58;background:#FFF;}
+    .supplierInfo .infoBox .part{margin-top:30px}
+    .supplierInfo .infoBox .part:first-child{margin-top:0}
+    .supplierInfo .infoBox .title{height:24px;line-height:24px;font-size:24px;color:#4A4F58;font-weight:bold;text-align:left;margin-bottom:20px}
+    .supplierInfo .infoBox span.l{display:inline-block;min-width:70px;height:24px;text-align:justify;vertical-align:top;overflow:hidden}
+    .supplierInfo .infoBox span.l:after{content:'';display:inline-block;width:100%}
+    .supplierInfo .tabCon .tag{display:inline-block;height:20px;line-height:20px;font-style:normal;background:#86B2FB;color:#FFF;border-radius:2px;margin-right:10px;padding:0 5px}
+    .supplierInfo .infoBox .cont{text-indent:2em;text-align:justify}
+    .supplierInfo .infoBox .photo img{width:240px;height:180px}
+    .supplierInfo .infoBox p{margin:5px 0}
+    .supplierInfo .productBox{box-sizing:border-box;width:100%;}
+    .supplierInfo .productList{width:1200px;margin-bottom:18px;}
+    .supplierInfo .productBox .title{color:#4A4F58;font-size:20px;height:54px;line-height:54px}
+    .supplierInfo .productItem {margin-bottom: 16px;}
+    .empty{background: #fff;margin-top: 10px;}
+    .navLayout{min-height: auto;}
+    .productList .productItem {width: 184px;height: 268px;float: left;background: #fff;position: relative;margin: 0 16px 16px 0;overflow: hidden;float: left;}
+    .productList .productItem:nth-child(6n){margin-right: 0;}
+    .productList .productItem a{width: 100%;height: 100%;display: block;box-sizing: border-box;}
+    .productList .productItem img {width: 100%;height: 164px;}
+    .productList .productItem .name{display: block;padding: 0 8px;margin-top: 8px;height: 40px;line-height: 21px;vertical-align: middle;word-break: break-all;overflow: hidden;text-overflow: ellipsis;display: -webkit-inline-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical}
+    .productItem .price{border: 0;box-sizing: border-box;padding: 0 8px;height: 54px;width: 100%;}
+    .productItem .price .icon:before{width: 63px;}
+    .productItem .price .icon.i5:before {background-position: -2px -832px;}
+    .productItem .price .icon.i1:before {background-position: -2px -712px;}
+    .productItem .price .icon.i2:before {background-position: -2px -742px;}
+    .productItem .price .icon.i3:before {background-position: -2px -772px;}
+    .productItem .price .icon.i4:before {background-position: -2px -802px;}
+    .listTag{margin: 12px 8px 0 0;padding: 0 2px;}
+    .productItem .image .icon{position: inherit;}
+    .sortBox li.on, .sortBox li.up, .sortBox li.down {background: #FFE6DC;color: #E15616;}
+    .empty{margin-top: 32px;background: #fff;}
+    .empty p{color: #909090;font-size: 14px;}
+    .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;}
 }
 
 /**
 * 移动端
 */
 @media screen and (max-width:768px){
-#supplierBanner{width:93.4vw;height:28.2vw;overflow:hidden;position:relative;margin:0 auto}
-#supplierBanner .swiper-wrapper{position:relative;height:100%;z-index:0}
-#supplierBanner .swiper-wrapper .swiper-slide{position:relative;zoom:1;vertical-align:middle;width:100%;overflow:hidden;text-align:center;background:#fff}
-#supplierBanner .swiper-wrapper img{width:100%;height:28.2vw;display:block}
-#supplierBanner .swiper-button-prev,#supplierBanner .swiper-button-next{display:none}
-#supplierBanner .swiper-pagination{width:100%;height:2.6vw;z-index:1;text-align:center;font-size:0;position:absolute;bottom:1.5vw;left:0}
-#supplierBanner .swiper-pagination .swiper-pagination-bullet{display:block;width:2vw;border-width:1vw 1px;border-color:transparent;cursor:pointer;background:none;font-size:0;opacity:.2}
-#supplierBanner .swiper-pagination .swiper-pagination-bullet:before{content:"";display:block;width:100%;height:.6vw;background:#FFF;border-radius:.3vw}
-#supplierBanner .swiper-pagination .swiper-pagination-bullet.swiper-pagination-bullet-active{width:3.8vw;opacity:1}
-.supplierTit{width:100%;background:#FFF;position:relative;box-sizing:border-box;padding:13.4vw 3.3vw 2vw 3.3vw;border-top:1px solid #F5F5F5;}
-.supplierTit .title{box-sizing:border-box;min-height:13.4vw;padding:2.2vw 0;position:absolute;top:0;left:3.3vw}
-.supplierTit .title img{display:inline-block;height:9vw;margin-right:1vw;vertical-align:middle}
-.supplierTit .title h1{display:inline-block;max-width:70vw;max-height:9vw;overflow:hidden;line-height:4.5vw;vertical-align:middle;font-size:3.7vw;font-weight:bold}
-.supplierTit .search{width:93.4vw;height:9.6vw;margin:2vw auto 0 auto;border:1px solid #FFE6DC;border-radius:2px;position:relative;overflow:hidden}
-.supplierTit .search input{border:none;outline:none;width:100%;height:9.6vw;line-height:9.2vw;font-size:3.7vw;color:#4A4F58;text-indent:2.6vw}
-.supplierTit .searchBtn{position:absolute;right:1.2vw;top:0}
-.supplierTit .searchBtn:before{content:'';display:block;width:9.6vw;height:9.6vw;background-position:-24vw 1.5vw}
-.supplierInfo{margin-bottom: 2.7vw;}
-.supplierInfo .tabTit{padding:1.5vw 3.3vw;background:#FFF;position:relative;}
-.supplierInfo .tabTit span{display:inline-block;height:7.5vw;line-height:7.5vw;border-bottom:2px solid transparent;color:#93979F;font-size:3.4vw;margin-left:8vw;}
-.supplierInfo .tabTit span.on{color:#E15621;border-color:#E15621}
-.supplierInfo .tabTit span:first-child{margin-left:0;}
-.supplierInfo .showSearch{position:absolute;right:3.3vw;bottom:1.5vw;padding:0 2vw;height:7.5vw;line-height:7.5vw;background:#E15621;color:#FFF;font-weight:normal;font-size:3.1vw;border-radius:2px}
-.supplierInfo .infoBox{padding:1.2vw 3.3vw 3.3vw;border-top:1px solid #F5F5F5;font-size:3.7vw;line-height:5.2vw;color:#93979F;}
-.supplierInfo .infoBox .title{color:#4A4F58;font-weight:bold;padding-left:1vw;border-left:.4vw solid #E15616;margin:2.7vw 0;}
-.supplierInfo .infoBox .tag{display:inline-block;height:4.4vw;line-height:4.4vw;font-size:2.6vw;font-style:normal;background:#86B2FB;color:#FFF;border-radius:2px;margin-right:2.2vw;padding:0 1vw}
-.supplierInfo .infoBox .part{margin-top:5.4vw}
-.supplierInfo .infoBox .part:first-child{margin-top:0}
-.supplierInfo .infoBox .cont{text-indent:2em;text-align: justify;}
-.supplierInfo .infoBox .photo img{width:45.3vw;height:34vw}
-.supplierInfo .infoBox p{margin:1vw 0;}
-.supplierInfo .productList{width:96.6vw;margin:1.3vw auto;box-sizing:border-box}
-.supplierInfo .productBox .title{width:93.4vw;color:#2D3036;font-size:3.7vw;height:5vw;line-height:5vw;margin:2.7vw auto 0}
-.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;}
-
-
-
-
-
+    #supplierBanner{width:93.4vw;height:28.2vw;overflow:hidden;position:relative;margin:0 auto}
+    #supplierBanner .swiper-wrapper{position:relative;height:100%;z-index:0}
+    #supplierBanner .swiper-wrapper .swiper-slide{position:relative;zoom:1;vertical-align:middle;width:100%;overflow:hidden;text-align:center;background:#fff}
+    #supplierBanner .swiper-wrapper img{width:100%;height:28.2vw;display:block}
+    #supplierBanner .swiper-button-prev,#supplierBanner .swiper-button-next{display:none}
+    #supplierBanner .swiper-pagination{width:100%;height:2.6vw;z-index:1;text-align:center;font-size:0;position:absolute;bottom:1.5vw;left:0}
+    #supplierBanner .swiper-pagination .swiper-pagination-bullet{display:block;width:2vw;border-width:1vw 1px;border-color:transparent;cursor:pointer;background:none;font-size:0;opacity:.2}
+    #supplierBanner .swiper-pagination .swiper-pagination-bullet:before{content:"";display:block;width:100%;height:.6vw;background:#FFF;border-radius:.3vw}
+    #supplierBanner .swiper-pagination .swiper-pagination-bullet.swiper-pagination-bullet-active{width:3.8vw;opacity:1}
+    .supplierTit{width:100%;background:#FFF;position:relative;box-sizing:border-box;padding:13.4vw 3.3vw 2vw 3.3vw;border-top:1px solid #F5F5F5;}
+    .supplierTit .title{box-sizing:border-box;min-height:13.4vw;padding:2.2vw 0;position:absolute;top:0;left:3.3vw}
+    .supplierTit .title img{display:inline-block;height:9vw;margin-right:1vw;vertical-align:middle}
+    .supplierTit .title h1{display:inline-block;max-width:70vw;max-height:9vw;overflow:hidden;line-height:4.5vw;vertical-align:middle;font-size:3.7vw;font-weight:bold}
+    .supplierTit .search{width:93.4vw;height:9.6vw;margin:2vw auto 0 auto;border:1px solid #FFE6DC;border-radius:2px;position:relative;overflow:hidden}
+    .supplierTit .search input{border:none;outline:none;width:100%;height:9.6vw;line-height:9.2vw;font-size:3.7vw;color:#4A4F58;text-indent:2.6vw}
+    .supplierTit .searchBtn{position:absolute;right:1.2vw;top:0}
+    .supplierTit .searchBtn:before{content:'';display:block;width:9.6vw;height:9.6vw;background-position:-24vw 1.5vw}
+    .supplierInfo{margin-bottom: 2.7vw;}
+    .supplierInfo .tabTit{padding:1.5vw 3.3vw;background:#FFF;position:relative;}
+    .supplierInfo .tabTit span{display:inline-block;height:7.5vw;line-height:7.5vw;border-bottom:2px solid transparent;color:#93979F;font-size:3.4vw;margin-left:8vw;}
+    .supplierInfo .tabTit span.on{color:#E15621;border-color:#E15621}
+    .supplierInfo .tabTit span:first-child{margin-left:0;}
+    .supplierInfo .showSearch{position:absolute;right:3.3vw;bottom:1.5vw;padding:0 2vw;height:7.5vw;line-height:7.5vw;background:#E15621;color:#FFF;font-weight:normal;font-size:3.1vw;border-radius:2px}
+    .supplierInfo .infoBox{padding:1.2vw 3.3vw 3.3vw;border-top:1px solid #F5F5F5;font-size:3.7vw;line-height:5.2vw;color:#93979F;}
+    .supplierInfo .infoBox .title{color:#4A4F58;font-weight:bold;padding-left:1vw;border-left:.4vw solid #E15616;margin:2.7vw 0;}
+    .supplierInfo .infoBox .tag{display:inline-block;height:4.4vw;line-height:4.4vw;font-size:2.6vw;font-style:normal;background:#86B2FB;color:#FFF;border-radius:2px;margin-right:2.2vw;padding:0 1vw}
+    .supplierInfo .infoBox .part{margin-top:5.4vw}
+    .supplierInfo .infoBox .part:first-child{margin-top:0}
+    .supplierInfo .infoBox .cont{text-indent:2em;text-align: justify;}
+    .supplierInfo .infoBox .photo img{width:45.3vw;height:34vw}
+    .supplierInfo .infoBox p{margin:1vw 0;}
+    .supplierInfo .productList{width:96.6vw;margin:1.3vw auto;box-sizing:border-box}
+    .supplierInfo .productBox .title{width:93.4vw;color:#2D3036;font-size:3.7vw;height:5vw;line-height:5vw;margin:2.7vw auto 0}
+    .productList{margin: 3.2vw auto;width: 97vw;}
+    .productList .productItem{width: 45.6vw;height: 70vw;overflow: hidden;margin: 0 1.3vw 2.6vw 1.3vw;background: #fff;text-align: left;}
+    .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;}
 }

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

@@ -27,7 +27,7 @@ li{list-style:none}
     .beans-content-tabs .time-template .time-next .icon{width:30px;height:30px;display: block;}
     .beans-content-tabs .time-template .time-next .icon:before{width:30px;height:30px;background-position:-311px -550px}
     .beans-content-tabs .time-tabs{width: 216px;height:30px;position: absolute;right: 0;top: 33px;cursor: pointer;}
-    .beans-content-tabs .time-tabs-cell{width: 72px;height: 100%;float: left;text-align: center;font-size: 14px;color: #22272e;line-height: 30px;display: block;}
+    .beans-content-tabs .time-tabs-cell{width: 72px;height: 100%;float: left;text-align: center;font-size: 14px;color: #22272e;line-height: 30px;display: block;cursor: pointer;}
     .beans-content-tabs .time-tabs-cell.active{color: #E15616;}
 
     .beans-content-list{width: 100%;height: auto;box-sizing: border-box;padding:24px;}

+ 55 - 0
src/main/resources/static/css/user-center/account/coupon-collection.css

@@ -0,0 +1,55 @@
+@charset "utf-8";
+li{list-style:none}
+/**
+ * PC端
+ */
+@media screen and (min-width:768px){
+    .coupon-title{width: 1184px;margin: 0 auto;box-sizing: border-box;height: 60px;padding: 0 24px;padding-top: 16px;line-height: 44px;}
+    .coupon-title .coupon-name{float: left;font-size: 16px;color: #4a4f58;font-weight: bold;}
+    .coupon-title .coupon-name-use{float: right;font-size: 14px;color: #627386;cursor: pointer;}
+    .coupon-title .coupon-name-use:hover{color: #E15621;}
+    .pageWrap{width: 968px;}
+    .navLayout{min-height: 500px;}
+    .coupon-container{width: 100%;min-height: 600px;background-color: #FFFFFF;}
+    .coupon-content-list{width: 100%;height: auto;box-sizing: border-box;padding:24px 13px 7px 13px;}
+    .coupon-list-cell{width: 369px;height: 148px;float: left;margin: 0 24px 17px 0;position: relative;background: url("/img/account/icon-coupon-uesb@2x.png") no-repeat;background-size: cover;}
+    .coupon-list-cell:nth-child(3n){margin-right: 0;}
+    .coupon-list-cell .coupon-list-le{width: 299px;height: 148px;float: left;box-sizing: border-box;padding: 24px 14px 12px 14px;}
+    .coupon-list-cell .coupon-list-money{width: 100%;height: 56px;line-height: 56px;color: #f94b4b;font-size: 14px;text-align: left;}
+    .coupon-list-cell .coupon-list-money .maxMoney{font-size: 40px;margin-right: 8px;}
+    .coupon-list-cell .coupon-list-name{width: 100%;height: 22px;line-height: 22px;color: #333333;font-size: 14px;text-align: left;margin-top: 13px;}
+    .coupon-list-cell .coupon-list-time{width: 100%;height: 22px;line-height: 22px;color: #999999;font-size: 12px;text-align: left;}
+    .coupon-list-cell .coupon-list-ri{width: 70px;height: 148px;float: left;box-sizing: border-box;font-size: 16px;color: #FFF;cursor: pointer;}
+    .coupon-list-cell .coupon-list-ri span{display: block;width: 100%;height: 100%;box-sizing: border-box;padding: 45px 27px;}
+    .coupon-list-cell .coupon-list-ri span.none{padding: 54px 27px;}
+    .coupon-list-cell .coupon-tags{height: 24px;line-height: 24px;text-align: center;border-radius: 8px 0 8px 0;position: absolute;top: 0;left: 0;padding: 0 10px;background-color: #f94b4b;color: #FFF;}
+    .empty{width: 100%;float: left;}
+    .empty img{width: 180px;height: 180px;}
+}
+
+/**
+* 移动端
+*/
+@media screen and (max-width:768px){
+    .coupon-title{width: 100%;margin: 0 auto;box-sizing: border-box;height:10.8vw;padding: 0 3.4vw;line-height: 10.8vw;}
+    .coupon-title .coupon-name{float: left;font-size: 3.7vw;color: #4a4f58;font-weight: bold;}
+    .coupon-title .coupon-name-use{float: right;font-size: 3vw;color: #627386;cursor: pointer;}
+    .coupon-container{width: 100%;min-height: 500px;background-color: #FFFFFF;}
+    .coupon-content-list{width: 100%;height: auto;box-sizing: border-box;padding:3.45vw;}
+    .coupon-list-cell{width: 93.1vw;height: 33vw;float: left;margin: 0 0 2.4vw 0;position: relative;border-radius: 1vw;}
+    .coupon-list-cell .coupon-list-le{width: 77.6vw;height: 33vw;float: left;box-sizing: border-box;padding: 6.8vw 3.7vw 3.3vw 3.7vw;}
+    .coupon-list-cell .coupon-list-money{width: 100%;height:10vw;line-height: 10vw;color: #f94b4b;font-size: 3vw;text-align: left; }
+    .coupon-list-cell .coupon-list-money .maxMoney{font-size: 7.2vw;margin-right: 2.4vw;}
+    .coupon-list-cell .coupon-list-money.none, .coupon-list-cell .coupon-list-name.none, .coupon-list-cell .coupon-list-time.none{color: #FFF;}
+    .coupon-list-cell .coupon-list-name{width: 100%;height: 4.8vw;line-height: 4.8vw;color: #333333;font-size: 3.4vw;text-align: left;margin-top: 4vw;}
+    .coupon-list-cell .coupon-list-time{width: 100%;height: 4.8vw;line-height: 4.8vw;color: #999999;font-size: 2.4vw;text-align: left;}
+    .coupon-list-cell .coupon-list-ri{width: 15.5vw;height: 33vw;float: left;box-sizing: border-box;font-size:3.4vw;color: #FFF;cursor: pointer;}
+    .coupon-list-cell .coupon-list-ri span{display: block;width: 100%;height: 100%;box-sizing: border-box;padding: 9.5vw 6vw;}
+    .coupon-list-cell .coupon-list-ri span.none{padding: 11.8vw 6vw;}
+    .coupon-list-cell .coupon-tags{height: 4.8vw;line-height: 4.8vw;text-align: center;background-color: #f94b4b;color: #FFF;border-radius: 1.6vw 0 1.6vw 0;position: absolute;top: 0;left: 0;padding: 0 1.5vw;font-size: 3vw;}
+    .coupon-list-cell{background: url("/img/account/icon-coupon-uesb@h52x.png") no-repeat;background-size: cover;}
+    .empty{width: 100%;float: left;}
+    .empty img{width: 36vw;height: 36vw;}
+
+}
+

+ 74 - 0
src/main/resources/static/css/user-center/account/coupon-exchange.css

@@ -0,0 +1,74 @@
+@charset "utf-8";
+li{list-style:none}
+/**
+ * PC端
+ */
+@media screen and (min-width:768px){
+    /*采美豆右侧*/
+    .crumbs{font-size: 16px;}
+    .pageWrap{width: 968px;}
+    .navLayout{min-height: 600px;}
+    .coupon-container{width: 100%;min-height: 500px;background-color: #FFFFFF;}
+    .coupon-content{width: 100%;height: auto;box-sizing: border-box;padding:40px 128px;}
+    .coupon-input{width: 100%;height: 36px;box-sizing: border-box;margin-bottom: 48px;}
+    .coupon-input .input{width: 528px;height: 36px;box-sizing: border-box;border: 1px solid #b8bfca;padding: 0 20px;border-radius: 2px;}
+    .coupon-input .coupon-btn{width: 168px;height: 36px;box-sizing: border-box;border-radius: 2px;line-height: 36px;display: block;font-size: 16px;text-align: center;color: #FFF;background: #E15621;float: right;}
+    .coupon-text{width: 100%;height: auto;color: #4a4f58;}
+    .coupon-text h1{width: 100%;height: auto;font-size: 16px;line-height: 40px;text-align: left;font-weight: normal;}
+    .coupon-text p{width: 100%;height: auto;font-size: 14px;line-height: 35px;text-align: left;}
+    /*优惠券弹窗样式*/
+    .cmcoupon-alert-box{width: 100%;height: 100%;display: flex;align-items: center;justify-content: center;flex-direction: column;position: fixed;left: 0;top: 0;background: rgba(51,51,51,0.7);z-index: 99999;opacity: 0;}
+    .cmcoupon-alert-box.hide{opacity: 0;}
+    .cmcoupon-alert-box.show{opacity: 1;}
+    .cmcoupon-alert-content{width: 353px;height: 367px;position: absolute;top: 0;left: 0;bottom: 0;right: 0;margin: auto;box-sizing: border-box;padding-top: 61px;background-size: cover;}
+    .cmcoupon-alert-content .cmcoupon-main{width: 100%;height: 307px;background: url("/img/account/icon-coupon-alertbg@2x.png") no-repeat;background-size: cover;box-sizing: border-box;padding: 136px 23px 0 23px;}
+    .cmcoupon-alert-content .icon{width:30px;height:30px;display: block;position: absolute;top: 0;right: 0;cursor: pointer;}
+    .cmcoupon-alert-content .icon:before{width:33px;height:33px;background-position:-197px -550px}
+    .cmcoupon-alert-content .coupon-list{width: 306px;height: 85px;background: url("/img/account/icon-coupon-bg@2x.png") no-repeat;background-size: cover;float: left;position: relative;margin-bottom: 20px;}
+    .cmcoupon-alert-content .list-cell-tags{height: 18px;line-height: 18px;padding: 0 6px;background-color: #f94b4b;border-radius: 8px 0 8px 0;font-size: 12px;color: #FFF;position: absolute;left:0 ;top: 0;}
+    .cmcoupon-alert-content .list-cell-le{width: 91px;height: 100%;box-sizing: border-box;padding: 18px 0 0 0;float: left;}
+    .cmcoupon-alert-content .coupon-maxMoney{width: 100%;height: 31px;line-height: 31px;font-size: 24px;color: #f94b4b;text-align: center;margin-top: 2px;font-weight: bold;}
+    .cmcoupon-alert-content .coupon-maxMoney .small{font-size: 12px;font-weight: normal;}
+    .cmcoupon-alert-content .coupon-minMoney{width: 100%;height: 16px;float: left;box-sizing: border-box;display:flex;justify-content: center;align-items: center; margin-top: 2px;}
+    .cmcoupon-alert-content .coupon-minMoney .txt{display: flex;height: 16px;line-height: 16px;font-size: 12px;color: #f94b4b;text-align: center;padding: 0 5px;background-color: #fff1eb;border-radius: 4px;float: left;}
+    .cmcoupon-alert-content .list-cell-ri{width: 215px;height: 100%;box-sizing: border-box;padding:18px 10px;float: left;}
+    .cmcoupon-alert-content .list-cell-top{width: 100%;height: 28px;line-height: 28px;font-size: 14px;color: #333333;float: left;}
+    .cmcoupon-alert-content .list-cell-time{width: 100%;height: 24px;line-height: 24px;text-align: left;font-size: 12px;color: #999999;}
+    .cmcoupon-alert-content .coupon-btn{width: 100%;height: 46px;cursor: pointer;background: url("/img/account/icon-coupon-alertbtnbg@2x.png") no-repeat;background-size: cover;line-height: 46px;text-align: center;color: #FFFFFF;font-size: 20px;float: left;}
+
+}
+
+/**
+* 移动端
+*/
+@media screen and (max-width:768px){
+    .coupon-container{width: 100%;min-height: 40vw;background-color: #FFFFFF;}
+    .coupon-content{width: 100%;height: auto;box-sizing: border-box;padding:3.3vw}
+    .coupon-input{width: 100%;height: 11.2vw;box-sizing: border-box;margin-bottom: 8.8vw;}
+    .coupon-input .input{width: 69.4vw;height: 11.2vw;box-sizing: border-box;border: 1px solid #b8bfca;padding: 0 3.6vw;border-radius: 0.5vw;}
+    .coupon-input .coupon-btn{width: 21.4vw;height:11.2vw;box-sizing: border-box;border-radius: 0.5vw;line-height: 11.2vw;display: block;font-size: 3vw;text-align: center;color: #FFF;background: #E15621;float: right;}
+    .coupon-text{width: 100%;height: auto;color: #4a4f58;}
+    .coupon-text h1{width: 100%;height: auto;font-size: 3.4vw;line-height: 7.2vw;text-align: left;font-weight: normal;}
+    .coupon-text p{width: 100%;height: auto;font-size: 2.4vw;line-height:5vw;text-align: left;}
+    /*优惠券弹窗样式*/
+    .cmcoupon-alert-box{width: 100%;height: 100%;display: flex;align-items: center;justify-content: center;flex-direction: column;position: fixed;left: 0;top: 0;background: rgba(51,51,51,0.7);z-index: 99999;opacity: 0;}
+    .cmcoupon-alert-box.hide{opacity: 0;}
+    .cmcoupon-alert-box.show{opacity: 1;}
+    .cmcoupon-alert-content{width: 70.9vw;height: 61.7vw;position: absolute;top: 0;left: 0;bottom: 0;right: 0;margin: auto;box-sizing: border-box;background-size: cover;}
+    .cmcoupon-alert-content .cmcoupon-main{width: 100%;height: 61.7vw;background: url("/img/account/icon-coupon-alertbg@h52x.png") no-repeat;background-size: cover;box-sizing: border-box;padding: 27.3vw 4.7vw 0 4.7vw;}
+    .cmcoupon-alert-content .mIcon{width:8vw;height:8vw;display: block;position: absolute;top: -12vw;right: 0;cursor: pointer;}
+    .cmcoupon-alert-content .mIcon:before{width:8vw;height:8vw;background-position:-34.1vw -77.9vw;}
+    .cmcoupon-alert-content .coupon-list{width: 61.5vw;height: 17.3vw;background: url("/img/account/icon-coupon-bg@h52x.png") no-repeat;background-size: cover;float: left;position: relative;margin-bottom: 3.7vw;}
+    .cmcoupon-alert-content .list-cell-tags{height: 3.5vw;line-height: 3.5vw;padding: 0 1.1vw;background-color: #f94b4b;border-radius: 1.6vw 0 1.6vw 0;font-size: 2vw;color: #FFF;position: absolute;left:0 ;top: 0;}
+    .cmcoupon-alert-content .list-cell-le{width: 18.3vw;height: 100%;box-sizing: border-box;padding: 3.5vw 0 0 0;float: left;}
+    .cmcoupon-alert-content .coupon-maxMoney{width: 100%;height: 6.5vw;line-height: 6.5vw;font-size: 4.9vw;color: #f94b4b;text-align: center;margin-top: 0.4vw;font-weight: bold;}
+    .cmcoupon-alert-content .coupon-maxMoney .small{font-size: 2.4vw;font-weight: normal;}
+    .cmcoupon-alert-content .coupon-minMoney{width: 100%;height: 3.2vw;float: left;box-sizing: border-box;display:flex;justify-content: center;align-items: center; margin-top: 2px;}
+    .cmcoupon-alert-content .coupon-minMoney .txt{display: flex;height: 3.2vw;line-height: 3.2vw;font-size: 1.8vw;color: #f94b4b;text-align: center;padding: 0 0.8vw;background-color: #fff1eb;border-radius: 0.4vw;float: left;}
+    .cmcoupon-alert-content .list-cell-ri{width: 43.2vw;height: 100%;box-sizing: border-box;padding:3.5vw 0 3.5vw 1.9vw;float: left;}
+    .cmcoupon-alert-content .list-cell-top{width: 100%;height: 5vw;line-height: 5vw;font-size: 3.2vw;color: #333333;float: left;}
+    .cmcoupon-alert-content .list-cell-time{width: 100%;height: 5vw;;line-height:5vw;text-align: left;font-size: 2vw;color: #999999;float: left;margin-top: 1vw;}
+    .cmcoupon-alert-content .coupon-btn{width: 100%;height: 9.2vw;cursor: pointer;background: url("/img/account/icon-coupon-alertbtnbg@h52x.png") no-repeat;background-size: cover;line-height: 9.2vw;text-align: center;color: #FFFFFF;font-size: 4.2vw;float: left;font-weight: bold;}
+
+}
+

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

@@ -0,0 +1,74 @@
+@charset "utf-8";
+li{list-style:none}
+/**
+ * PC端
+ */
+@media screen and (min-width:768px){
+    /*采美豆右侧*/
+    .crumbs{font-size: 16px;}
+    .pageWrap{width: 968px;}
+    .navLayout{min-height: 500px;}
+    .coupon-container{width: 100%;min-height: 500px;background-color: #FFFFFF;}
+    .coupon-content-tabs{width: 100%;height: 64px;box-sizing: border-box;padding:0 24px;}
+    .coupon-content-tabs .tabs-main{width: 100%;height:100%;border-bottom: 1px solid #e2e7ef;box-sizing: border-box;padding:18px 0 0 0; position: relative;}
+    .coupon-content-tabs .time-tabs{height:46px;float: left}
+    .coupon-content-tabs .time-tabs-cell{width: 72px;height: 100%;float: left;text-align: center;font-size: 14px;color: #22272e;line-height: 46px;display: block;cursor: pointer;margin-right: 40px;}
+    .coupon-content-tabs .time-tabs-cell.active{color: #E15616;border-bottom: 1px solid #E15621;box-sizing: border-box;}
+    .coupon-content-tabs .time-btn{float: right;}
+    .coupon-content-tabs .time-btn a{display: inline-block;float: left;text-align: center;font-size: 14px;color: #627386;line-height: 46px;margin-left: 24px;}
+    .coupon-content-tabs .time-btn a:hover{color: #E15621;}
+    .coupon-content-list{width: 100%;height: auto;box-sizing: border-box;padding:24px 147px 24px 24px;}
+    .coupon-list-cell{width: 369px;height: 148px;float: left;margin: 0 24px 24px 0;position: relative;}
+    .coupon-list-cell .coupon-list-le{width: 299px;height: 148px;float: left;box-sizing: border-box;padding: 24px 14px 12px 14px;}
+    .coupon-list-cell .coupon-list-money{width: 100%;height: 56px;line-height: 56px;color: #f94b4b;font-size: 14px;text-align: left;}
+    .coupon-list-cell .coupon-list-money .maxMoney{font-size: 40px;margin-right: 8px;}
+    .coupon-list-cell .coupon-list-money.none, .coupon-list-cell .coupon-list-name.none, .coupon-list-cell .coupon-list-time.none{color: #FFF;}
+    .coupon-list-cell .coupon-list-name{width: 100%;height: 22px;line-height: 22px;color: #333333;font-size: 14px;text-align: left;margin-top: 13px;}
+    .coupon-list-cell .coupon-list-time{width: 100%;height: 22px;line-height: 22px;color: #999999;font-size: 12px;text-align: left;}
+    .coupon-list-cell .coupon-list-ri{width: 70px;height: 148px;float: left;box-sizing: border-box;padding: 45px 27px;font-size: 16px;color: #FFF;cursor: pointer;}
+    .coupon-list-cell .coupon-list-ri.none{cursor: default;}
+    .coupon-list-cell .coupon-tags{height: 24px;line-height: 24px;text-align: center;border-radius: 8px 0 8px 0;position: absolute;top: 0;left: 0;padding: 0 10px;}
+    .coupon-list-cell .coupon-tags.used{background-color: #f94b4b;color: #FFF;}
+    .coupon-list-cell .coupon-tags.none{background-color: #dbdbdb;color: #FFF;}
+    .coupon-list-cell.used{background: url("/img/account/icon-coupon-uesb@2x.png") no-repeat;background-size: cover;}
+    .coupon-list-cell.none{background: url("/img/account/icon-coupon-none@2x.png") no-repeat;background-size: cover;}
+    .empty{width: 100%;float: left;}
+    .empty img{width: 180px;height: 180px;}
+    .empty .msg{color: #999;}
+
+}
+
+/**
+* 移动端
+*/
+@media screen and (max-width:768px){
+    .coupon-container{width: 100%;min-height: 50vw;background-color: #FFFFFF;margin-top:2vw;}
+    .coupon-content-tabs{width: 100%;height: 11.7vw;box-sizing: border-box;padding:4.2vw 0 0 0;}
+    .coupon-content-tabs .tabs-main{width: 100%;height:100%;border-bottom: 1px solid #e2e7ef;box-sizing: border-box;position: relative;}
+    .coupon-content-tabs .time-tabs{width: 100%;height:7.5vw;float: left;box-sizing: border-box;padding: 0 2.4vw;}
+    .coupon-content-tabs .time-tabs-cell{width: 33.3%;height: 100%;float: left;text-align: center;font-size: 4vw;color: #22272e;line-height:7.5vw;display: block;}
+    .coupon-content-tabs .time-tabs-cell.active{color: #E15616;border-bottom: 1px solid #E15621;box-sizing: border-box;}
+    .coupon-content-tabs .time-btn{float: right;}
+    .coupon-content-tabs .time-btn a{display: inline-block;float: left;text-align: center;font-size: 14px;color: #627386;line-height: 46px;margin-left: 24px;}
+    .coupon-content-tabs .time-btn a:hover{color: #E15621;}
+    .coupon-content-list{width: 100%;height: auto;box-sizing: border-box;padding:3.45vw;}
+    .coupon-list-cell{width: 93.1vw;height: 33vw;float: left;margin: 0 0 2.4vw 0;position: relative;border-radius: 1vw;}
+    .coupon-list-cell .coupon-list-le{width: 77.6vw;height: 33vw;float: left;box-sizing: border-box;padding: 6.8vw 3.7vw 3.3vw 3.7vw;}
+    .coupon-list-cell .coupon-list-money{width: 100%;height:10vw;line-height: 10vw;color: #f94b4b;font-size: 3vw;text-align: left; }
+    .coupon-list-cell .coupon-list-money .maxMoney{font-size: 7.2vw;margin-right: 2.4vw;}
+    .coupon-list-cell .coupon-list-money.none, .coupon-list-cell .coupon-list-name.none, .coupon-list-cell .coupon-list-time.none{color: #FFF;}
+    .coupon-list-cell .coupon-list-name{width: 100%;height: 4.8vw;line-height: 4.8vw;color: #333333;font-size: 3.4vw;text-align: left;margin-top: 4vw;}
+    .coupon-list-cell .coupon-list-time{width: 100%;height: 4.8vw;line-height: 4.8vw;color: #999999;font-size: 2.4vw;text-align: left;}
+    .coupon-list-cell .coupon-list-ri{width: 15.5vw;height: 33vw;float: left;box-sizing: border-box;padding: 9.5vw 6vw;font-size:3.4vw;color: #FFF;cursor: pointer;}
+    .coupon-list-cell .coupon-list-ri.none{cursor: default;}
+    .coupon-list-cell .coupon-tags{height: 4.8vw;line-height: 4.8vw;text-align: center;border-radius: 1.6vw 0 1.6vw 0;position: absolute;top: 0;left: 0;padding: 0 1.5vw;font-size: 3vw;}
+    .coupon-list-cell .coupon-tags.used{background-color: #f94b4b;color: #FFF;}
+    .coupon-list-cell .coupon-tags.none{background-color: #dbdbdb;color: #FFF;}
+    .coupon-list-cell.used{background: url("/img/account/icon-coupon-uesb@h52x.png") no-repeat;background-size: cover;}
+    .coupon-list-cell.none{background: url("/img/account/icon-coupon-none@h52x.png") no-repeat;background-size: cover;}
+    .empty{width: 100%;float: left;}
+    .empty img{width: 36vw;height: 36vw;}
+    .empty .msg{color: #999;}
+
+}
+

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

@@ -121,8 +121,8 @@ li{list-style:none}
     .user-header .message .ellipse,.user-header .message .circular{padding:.6vw;border-radius:3.1vw;font-size:3.1vw;background-color:#f55c5c;color:#FFF;font-style:normal;position:absolute;right:4vw;top:-1vw;transform:scale(.7)}
     .user-header .message .circular{padding:0 1vw;}
     .user-content{width:100%;margin:0 auto 2.4vw auto;background:#FFF;padding-top: 2.4vw;margin-top: 2.4vw;}
-    .user-content .section .user-main.account{height: 14vw;box-sizing: border-box;padding: 0 3.2vw;}
-    .user-content .section .user-main.account .account-cell{line-height:14vw;font-size:3.4vw;color: #333333;float: left;margin-right: 10vw;display: block;}
+    .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 .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}

二進制
src/main/resources/static/img/account/icon-coupon-alertbg@2x.png


二進制
src/main/resources/static/img/account/icon-coupon-alertbg@h52x.png


二進制
src/main/resources/static/img/account/icon-coupon-alertbtnbg@2x.png


二進制
src/main/resources/static/img/account/icon-coupon-alertbtnbg@h52x.png


二進制
src/main/resources/static/img/account/icon-coupon-bg@2x.png


二進制
src/main/resources/static/img/account/icon-coupon-bg@h52x.png


二進制
src/main/resources/static/img/account/icon-coupon-empty@2x.png


二進制
src/main/resources/static/img/account/icon-coupon-none@2x.png


二進制
src/main/resources/static/img/account/icon-coupon-none@h52x.png


二進制
src/main/resources/static/img/account/icon-coupon-received@2x.png


二進制
src/main/resources/static/img/account/icon-coupon-received@h52x.png


二進制
src/main/resources/static/img/account/icon-coupon-uesb@2x.png


二進制
src/main/resources/static/img/account/icon-coupon-uesb@h52x.png


二進制
src/main/resources/static/img/activity/cm_cover_bg_h5.png


二進制
src/main/resources/static/img/activity/cm_cover_bg_pc.png


二進制
src/main/resources/static/img/activity/icon.png


二進制
src/main/resources/static/img/activity/pc-palyer.png


二進制
src/main/resources/static/img/activity/pc_01.png


二進制
src/main/resources/static/img/activity/pc_02.png


二進制
src/main/resources/static/img/activity/pc_a1.png


二進制
src/main/resources/static/img/activity/pc_a2.png


二進制
src/main/resources/static/img/activity/pc_bottom.png


二進制
src/main/resources/static/img/activity/pc_close.png


二進制
src/main/resources/static/img/activity/pc_icon.png


二進制
src/main/resources/static/img/activity/pc_note.png


二進制
src/main/resources/static/img/activity/placeholder.png


二進制
src/main/resources/static/img/activity/wechat_1.jpg


二進制
src/main/resources/static/img/cart/icon_weigouxuan@2x.png


二進制
src/main/resources/static/img/cart/icon_yixuanze@2x.png


+ 1 - 0
src/main/resources/static/js/activity/base.js

@@ -0,0 +1 @@
+

+ 286 - 0
src/main/resources/static/js/activity/index.js

@@ -0,0 +1,286 @@
+'use strict';
+var activeApp = (function () {
+    return new Vue({
+        el: '#app',
+        mixins: [swiperMixin, showMoreMixin],
+        data: {
+            isMobile: window.innerWidth < 992,
+            isActive: true,
+            isRequest: true,
+            isLoading: true,
+            // showScrollTop: false,
+            activityEntryVisiable: false,
+            contactVisiable: false,
+            scrollTopSize: 0,
+            msg: 'hello world',
+            src: './img/test.jpg',
+            // 显示个数
+            countMap: {},
+            size: 10,
+            swiperList: {},
+            needReload: false,
+            floorList: [],
+            pageInfo: null,
+            params: {
+                //请求参数
+                pageId: '293',
+                userId: '',
+                source: 1
+            },
+            selectVideoTabMap: {},
+            //用户权限
+            globalUserData: '',
+            GLOBAL_USER_ID: 0,
+            GLOBAL_USER_IDENTITY: 0,//2-会员机构;3-供应商;4-普通机构
+            GLOBAL_SHOP_ID: 0,
+        },
+        mounted: function mounted() {
+            this.pageLoaded();
+        }
+        ,
+        created: function created() {
+            this.initUserInfo();
+            this.getFloorData();
+        }
+        ,
+        computed: {
+            showScrollTop: function () {
+                return this.scrollTopSize > 600
+            }
+        }
+        ,
+        watch: {
+            isMobile: function isMobile() {
+                // if (this.needReload) window.location.reload()
+                this.isLoading = true;
+                window.location.reload();
+            }
+        }
+        ,
+        filters: {
+            NumFormat: function NumFormat(value) {//处理金额
+                return Number(value).toFixed(2);
+            }
+            ,
+            tabTime: function tabTime(val) {
+                // 2021-08-16 00:00:00
+                var first = val.split(' ')[0];
+                var second = first.split('-');
+                return second[1] + '-' + second[2];
+            }
+        }
+        ,
+        methods: {
+            //促销活动类型数据处理
+            PromotionsFormat: function (promo) {
+                if (promo !== null) {
+                    if (promo.type === 1 && promo.mode === 1) {
+                        return true;
+                    } else {
+                        return false;
+                    }
+                }
+                return false;
+            }
+            ,
+            // 创建tab与轮播图的对应关系
+            makeVideoFetchMap: function makeVideoFetchMap() {
+                var videoList = [22, 23, 24, 25];
+                var videoMap = {};
+                this.floorList.forEach(function (item, index) {
+                    if (videoList.indexOf(parseInt(item.floorContent.templateType)) !== -1) {
+                        videoMap[item.floorContent.templateType + '-' + index] = 0;
+                    }
+                });
+                this.selectVideoTabMap = videoMap;
+            }
+            ,
+
+            // tab点击事件
+            handleTabClick: function handleTabClick(type, index, val) {
+                var that = this;
+                var swiperId = 'swiper-template-' + index + '-' + type + '-' + val;
+                this.selectVideoTabMap[type + '-' + index] = val;
+                if (this.swiperList[swiperId]) this.swiperList[swiperId].destroy();
+                setTimeout(function () {
+                    that.swiperList[swiperId] = utils.createSwiperId(swiperId, swiperConfig);
+                    utils.responsive('.aspect', 'scalc');
+                    console.log('轮播图切换');
+                });
+            }
+            ,
+
+            // 当前选中的轮播图
+            currentVideoSwiper: function currentVideoSwiper(type, index) {
+                return this.selectVideoTabMap[type + '-' + index];
+            }
+            ,
+            getFloorImageListType: function getFloorImageListType(index) {
+                return index === 0 ? 'floorImageList' : 'floorImageList' + (index + 1);
+            }
+            ,
+
+            // 获取楼层信息
+            getFloorData: function getFloorData() {
+                var that = this;
+                var paramsArr = window.location.pathname.split(".")[0].split("-");
+                var pageId = paramsArr.length >= 1 ? paramsArr[1] : '';
+                this.params.pageId = pageId;
+                ProductApi.getActivityData(that.params, function (res) {
+                    if (res.code === 0) {
+                        that.floorList = res.data.floorList;
+                        that.pageInfo = res.data.page;
+                        that.isRequest = false;
+                        that.makeVideoFetchMap();
+                        that.activityEntryVisiable = that.initActivityEntry(res.data.page.redPacketBeginTime, res.data.page.redPacketEndTime);
+                        that.contactVisiable = res.data.page.infoBarStatus === 1;
+                    }
+                })
+            }
+            ,
+            // 初始化红包入口状态
+            initActivityEntry: function initActivityEntry(begin, end) {
+                const nowTime = new Date().getTime();
+                const beginTime = new Date(begin).getTime();
+                const endTime = new Date(end).getTime();
+                return nowTime >= beginTime && nowTime <= endTime
+            }
+            ,
+            fetchTemplate: function fetchTemplate(list, type) {
+                return list.indexOf(parseInt(type)) !== -1;
+            }
+            ,
+
+            // 获取直播状态
+            makeVideoStatus: function makeVideoStatus(floorData, index) {
+                var displayDate = new Date(floorData.floorContent['displayDate' + index]).getTime();
+                var nowDate = new Date().getTime();
+                // 一天的时间戳
+                var oneDay = 60 * 60 * 24 * 1000;
+                // 直播开始时间:displayDate
+                // 直播结束时间:displayDate + oneDay
+                if (nowDate >= displayDate && nowDate <= displayDate + oneDay) {
+                    return 1; // 已开始
+                }
+                if (nowDate < displayDate) {
+                    return 0; // 未开始
+                }
+                if (nowDate - oneDay > displayDate) {
+                    return 2; // 已结束
+                }
+            }
+            ,
+
+            // 使用产品楼层的布局
+            getProductScalcMap: function getProductScalcMap(templateId) {
+                var current = this.isMobile ? 'mobile' : 'pc';
+                var scalcLayout = layoutMapping.productScalcMap['template-' + templateId];
+                return {
+                    scalc: scalcLayout[current].scalc,
+                    col: scalcLayout[current].col
+                };
+            }
+            ,
+            // 使用文章楼层的布局
+            getArticleScalcMap: function getArticleScalcMap(templateId) {
+                var current = this.isMobile ? 'mobile' : 'pc';
+                var scalcLayout = layoutMapping.articleScalcMap['template-' + templateId];
+                return {
+                    scalc: scalcLayout[current],
+                    swiper: scalcLayout['swiper']
+                };
+            }
+            ,
+            // 使用图片楼层的布局
+            getImageScalcMap: function getImageScalcMap(templateId) {
+                var current = this.isMobile ? 'mobile' : 'pc';
+                var scalcLayout = layoutMapping.imageScalcMap['template-' + templateId];
+                return {
+                    scalc: scalcLayout[current],
+                    swiper: scalcLayout['swiper']
+                };
+            }
+            ,
+            // 使用直播楼层的布局
+            getVideoScalcMap: function getVideoScalcMap(templateId) {
+                var current = this.isMobile ? 'mobile' : 'pc';
+                var scalcLayout = layoutMapping.videoScalcMap['template-' + templateId];
+                return {
+                    scalc: scalcLayout[current],
+                    swiper: scalcLayout['swiper']
+                };
+            }
+            ,
+            // 处理link
+            reallink: function reallink(link) {
+                return link ? link : 'javascript:void(0)';
+            }
+            ,
+            handleToggleActive: function handleToggleActive(flag) {
+                console.log(flag);
+                this.isActive = flag;
+            }
+            ,
+            // 页面挂载完毕
+            pageLoaded: function pageLoaded() {
+                // 轮播图配置
+                var options = {
+                    el: '.swiper-container',
+                    split: '-',
+                    config: swiperConfig,
+                    protertyFix: 'swiper-template-'
+                };
+                var resizeTimer = null;
+                // 延迟处理
+                var that = this;
+                var timer = setInterval(function () {
+                    if (!that.isRequest) {
+                        that.swiperList = utils.createSwiper(options);
+                        // console.log(that.swiperList);
+                        console.log('轮播图创建完毕...');
+                        that.initCountMap(countMapping);
+                        // console.log(that.countMap);
+                        console.log('商品列表处理完毕...');
+                        utils.responsive('.aspect', 'scalc');
+                        that.isLoading = false;
+                        clearInterval(timer);
+                        $('img[data-original]').lazyload();
+                        console.log('页面图片初始化完成...');
+                    }
+                }, 500);
+                // 监听window窗口大小
+                window.addEventListener('resize', function () {
+                    clearTimeout(resizeTimer);
+                    resizeTimer = setTimeout(function () {
+                        utils.responsive('.aspect', 'scalc');
+                        console.log('图片大小已刷新...');
+                    }, 200);
+                    activeApp.$set(activeApp.$data, 'isMobile', window.innerWidth < 560);
+                });
+                window.addEventListener('scroll', function (event) {
+                    that.scrollTopSize = $('body').scrollTop();
+                });
+                console.log('窗口resize事件注册完毕...');
+            }
+            ,
+            //    初始化用户信息
+            initUserInfo: function initUserInfo() {
+                var userInfo = localStorage.getItem('userInfo');
+                if (!userInfo) {
+                    console.log('用户未登录...');
+                    return false
+                }
+                this.globalUserData = JSON.parse(localStorage.getItem('userInfo'));
+                this.GLOBAL_USER_ID = this.globalUserData.userId * 1;
+                this.GLOBAL_USER_IDENTITY = this.globalUserData.userIdentity * 1;
+                this.GLOBAL_SHOP_ID = this.globalUserData.shopId * 1;
+                this.params.userId = this.globalUserData.userId;
+                if (this.GLOBAL_USER_ID === 5261 || this.GLOBAL_USER_ID === 10947 || this.GLOBAL_USER_ID === 11579) {
+                    this.GLOBAL_USER_IDENTITY = 1;
+                }
+                console.log('已获取用户登录信息')
+            }
+        }
+    })
+        ;
+})();

+ 382 - 0
src/main/resources/static/js/activity/layout.js

@@ -0,0 +1,382 @@
+'use strict';
+
+function _defineProperty(obj, key, value) {
+	if (key in obj) {
+		Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true });
+	} else {
+		obj[key] = value;
+	}
+	return obj;
+}
+
+// 列表相关配置
+var countMapping = function () {
+	return {
+		'template-3': {
+			action: false,
+			count: {
+				pc: [6, 99],
+				mobile: [4, 99]
+			}
+		},
+		'template-4': {
+			action: false,
+			count: {
+				pc: [6, 99],
+				mobile: [2, 99]
+			}
+		},
+		'template-6': {
+			action: false,
+			count: {
+				pc: [6, 99],
+				mobile: [4, 99]
+			}
+		},
+		'template-8': {
+			action: false,
+			count: {
+				pc: [6, 99],
+				mobile: [2, 99]
+			}
+		},
+		'template-10': {
+			action: false,
+			count: {
+				pc: [6, 99],
+				mobile: [1, 99]
+			}
+		},
+		'template-11': {
+			action: false,
+			count: {
+				pc: [6, 99],
+				mobile: [4, 99]
+			}
+		},
+		'template-12': {
+			action: false,
+			count: {
+				pc: [6, 99],
+				mobile: [4, 99]
+			}
+		},
+		'template-13': {
+			action: false,
+			count: {
+				pc: [6, 99],
+				mobile: [4, 99]
+			}
+		},
+		'template-14': {
+			action: false,
+			count: {
+				pc: [12, 99],
+				mobile: [4, 99]
+			}
+		},
+		'template-15': {
+			action: false,
+			count: {
+				pc: [6, 99],
+				mobile: [4, 99]
+			}
+		},
+		'template-16': {
+			action: false,
+			count: {
+				pc: [8, 99],
+				mobile: [4, 99]
+			}
+		},
+		'template-17': {
+			action: false,
+			count: {
+				pc: [6, 99],
+				mobile: [4, 99]
+			}
+		},
+		'template-18': {
+			action: false,
+			count: {
+				pc: [7, 99],
+				mobile: [4, 99]
+			}
+		},
+		'template-19': {
+			action: false,
+			count: {
+				pc: [12, 99],
+				mobile: [4, 99]
+			}
+		},
+		'template-20': {
+			action: false,
+			count: {
+				pc: [12, 99],
+				mobile: [4, 99]
+			}
+		}
+	};
+}();
+
+// 列表布局
+var layoutMapping = function () {
+	// 商品布局及广告图宽高比 col:宽占用的份数(最大为60,最小为1) scalc = 高/宽
+	var productScalcMap = {
+		'template-11': {
+			mobile: {
+				col: ['60', '30', '30'],
+				scalc: ['0.341', '0.767', '0.767']
+			},
+			pc: {
+				col: ['60', '30', '30'],
+				scalc: ['0.13', '0.4', '0.4']
+			}
+		},
+		'template-12': {
+			mobile: {
+				col: ['30', '30', '30'],
+				scalc: ['1.6', '0.78', '0.78']
+			},
+			pc: {
+				col: ['35', '25', '25'],
+				scalc: ['0.5', '0.338', '0.338']
+			}
+		},
+		'template-13': {
+			mobile: {
+				col: ['30', '30', '30', '30', '30'],
+				scalc: ['1.6', '0.782249275', '0.782249275', '0.782249275', '0.782249275']
+			},
+			pc: {
+				col: ['34', '13', '13', '13', '13'],
+				scalc: ['0.5', '0.649', '0.649', '0.649', '0.649']
+			}
+		},
+		'template-14': {},
+		'template-15': {
+			mobile: {
+				col: ['60', '30', '30'],
+				scalc: ['0.341', '1.55', '1.55']
+			},
+			pc: {
+				col: ['60', '35', '25'],
+				scalc: ['0.13', '0.5', '0.708']
+			}
+		},
+		'template-16': {
+			mobile: {
+				col: ['60', '30'],
+				scalc: ['0.341', '1.55']
+			},
+			pc: {
+				col: ['60', '40'],
+				scalc: ['0.13', '0.393']
+			}
+		},
+		'template-17': {
+			mobile: {
+				col: ['30', '30'],
+				scalc: ['1.55', '1.55']
+			},
+			pc: {
+				col: ['35', '25'],
+				scalc: ['0.5', '0.708']
+			}
+		},
+		'template-18': {
+			mobile: {
+				col: ['30'],
+				scalc: ['1.55']
+			},
+			pc: {
+				col: ['40'],
+				scalc: ['0.393']
+			}
+		},
+		'template-19': {
+			mobile: {
+				col: ['60'],
+				scalc: ['0.341']
+			},
+			pc: {
+				col: ['60'],
+				scalc: ['0.13']
+			}
+		},
+		'template-20': {
+			mobile: {
+				col: ['60'],
+				scalc: ['0.341']
+			},
+			pc: {
+				col: ['60'],
+				scalc: ['0.13']
+			}
+		}
+	};
+
+	// 文章长宽比
+	var articleScalcMap = {
+		'template-3': {
+			mobile: 0.351,
+			pc: 0.351,
+			swiper: '2-2-1-1'
+		},
+		'template-4': {
+			mobile: 0.5128,
+			pc: 0.5136,
+			swiper: '1-2-1-1'
+		},
+		'template-5': {
+			mobile: 0.7122,
+			pc: 0.5729,
+			swiper: '1-3-1-1'
+		},
+		'template-6': {
+			mobile: 0.7122,
+			pc: 0.5729,
+			swiper: '2-3-1-1'
+		}
+	};
+
+	// 图片长宽比
+	var imageScalcMap = {
+		// 普通图片
+		'template-1': {
+			mobile: 1,
+			pc: 1,
+			swiper: '2-6-2-4'
+		},
+		'template-2': {
+			mobile: 0.6993,
+			pc: 0.7,
+			swiper: '2-3-2-3'
+		},
+		'template-7': {
+			mobile: 0.778,
+			pc: 0.775,
+			swiper: '1-4-1-1'
+		},
+		'template-8': {
+			mobile: 0.5128,
+			pc: 0.616,
+			swiper: '1-2-1-1'
+		},
+		'template-9': {
+			mobile: 0.6184,
+			pc: 0.616,
+			swiper: '2-2-2-2'
+		},
+		'template-10': {
+			mobile: 0.483,
+			pc: 0.3,
+			swiper: '1-1-1-1'
+		},
+
+		// 视频
+		'template-26': {
+			mobile: 0.78,
+			pc: 0.7,
+			swiper: '2-3-2-2'
+		},
+		'template-27': {
+			mobile: 0.778,
+			pc: 0.775,
+			swiper: '1-4-1-1'
+		},
+		'template-28': {
+			mobile: 0.6,
+			pc: 0.613,
+			swiper: '2-2-2-2'
+		},
+		'template-29': {
+			mobile: 0.51,
+			pc: 0.613,
+			swiper: '1-2-2-1'
+		}
+	};
+
+	// 直播
+	var videoScalcMap = {
+		'template-22': {
+			mobile: 0.674,
+			pc: 0.7,
+			swiper: '2-3-2-2'
+		},
+		'template-23': {
+			mobile: 0.78,
+			pc: 0.7,
+			swiper: '1-4-1-4'
+		},
+		'template-24': {
+			mobile: 0.608,
+			pc: 0.613,
+			swiper: '2-2-2-2'
+		},
+		'template-25': {
+			mobile: 0.51,
+			pc: 0.613,
+			swiper: '1-2-2-1'
+		}
+	};
+
+	return {
+		productScalcMap: productScalcMap,
+		articleScalcMap: articleScalcMap,
+		imageScalcMap: imageScalcMap,
+		videoScalcMap: videoScalcMap
+	};
+}();
+
+// 轮播图布局
+var swiperConfig = function () {
+	// 创建非响应式轮播图配置
+	function createClearSwiperMap(row, col) {
+		var list = {};
+		for (var i = 1; i <= row; i++) {
+			for (var j = 1; j <= col; j++) {
+				list['swiper-template-' + i + '-' + j] = {
+					pagination: '.swiper-pagination',
+					paginationClickable: true, // 页码可点击
+					slidesPerView: j, //列
+					slidesPerColumn: i, //行
+					slidesPerGroup: j, //每次滚动多少列
+					spaceBetween: 16, // 每个slide的间隔
+					nextButton: '.swiper-button-next',
+					prevButton: '.swiper-button-prev'
+				};
+			}
+		}
+		return list;
+	}
+	// 创建响应式轮播图配置
+	function createMediaSwiper(dlist) {
+		var breakpoints = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+		var list = {};
+		// 添加响应式配置
+		for (var key in dlist) {
+			if (Object.hasOwnProperty.call(dlist, key)) {
+				for (var i = 1; i <= breakpoints.row; i++) {
+					for (var j = 1; j <= breakpoints.col; j++) {
+						list[key + '-' + i + '-' + j] = {};
+						// 先合并
+						Object.assign(list[key + '-' + i + '-' + j], dlist[key]);
+						list[key + '-' + i + '-' + j]['breakpoints'] = _defineProperty({}, breakpoints.size, {
+							slidesPerView: j, //行
+							slidesPerGroup: j, //每次滚动多少列
+							slidesPerColumn: i, //列
+							spaceBetween: 10
+						});
+					}
+				}
+			}
+		}
+		return list;
+	}
+	var dlist = createClearSwiperMap(2, 6);
+	var list = createMediaSwiper(dlist, { size: 560, row: 2, col: 4 });
+	return list;
+}();

+ 89 - 0
src/main/resources/static/js/activity/mixin.js

@@ -0,0 +1,89 @@
+'use strict';
+
+var showMoreMixin = function () {
+	return {
+		methods: {
+			// 初始化列配置对象
+			initCountMap: function initCountMap(config) {
+				var map = {};
+				var list = document.querySelectorAll('.fold-box');
+				if (!list) return;
+				list.forEach(function (item) {
+					var floorType = item.getAttribute('data-floor-type');
+					if (!floorType) return;
+					// 模板id
+					var templateId = floorType.split('-')[0];
+					// 楼层id
+					var floorId = floorType.split('-')[1];
+					var key = 'template-' + templateId + '-' + floorId;
+					map[key] = utils.deepClone(config['template-' + templateId]);
+				});
+				// 像vue实例中添加一组响应式数据
+				this.$set(this.$data, 'countMap', map);
+			},
+			//获取显示个数
+			makeList: function makeList(floorData, floorId) {
+				var key = 'template-' + floorData.floorContent.templateType + '-' + floorId;
+				var rule = this.isMobile ? 'mobile' : 'pc';
+				var count = 999;
+				if (this.countMap[key]) {
+				    count = this.countMap[key].action ? this.countMap[key].count[rule][1] : this.countMap[key].count[rule][0]
+				}
+
+				if (floorData.floorImageList.length > count && this.countMap[key]) {
+					this.countMap[key]['hasMore'] = true;
+				}
+				return floorData.floorImageList.filter(function (v, i) {
+					return i < count;
+				});
+			},
+			// 获取列表展开状态
+			toggleState: function toggleState(templateId, floorId) {
+				var key = 'template-' + templateId + '-' + floorId;
+				if (this.countMap[key]) {
+					return this.countMap[key].action;
+				}
+				return false;
+			},
+			// 是否显示加载更多按钮
+			showToggleBtn: function showToggleBtn(floorData, floorId) {
+				var key = 'template-' + floorData.floorContent.templateType + '-' + floorId;
+				if (this.countMap[key]) {
+					return this.countMap[key]['hasMore'];
+				}
+				return false;
+			},
+			// 展示更多
+			toggleMore: function toggleMore(templateId, floorId) {
+				var key = 'template-' + templateId + '-' + floorId;
+				this.countMap[key].action = !this.countMap[key].action;
+				setTimeout(function () {
+					utils.responsive('.aspect', 'scalc');
+				});
+			}
+		}
+	};
+}();
+
+// 轮播图相关配置
+var swiperMixin = function () {
+	// vue轮播图混入对象
+	return {
+		methods: {
+			// 上一页
+			handlePrevClick: function handlePrevClick(floorId) {
+				var id = '#swiper-template-' + floorId;
+				var floor = document.querySelector(id);
+				var prev = floor.querySelector('.swiper-button-prev');
+				prev.click();
+			},
+			// 下一页
+			handleNextClick: function handleNextClick(floorId) {
+				var id = '#swiper-template-' + floorId;
+				var floor = document.querySelector(id);
+				var nexp = floor.querySelector('.swiper-button-next');
+				nexp.click();
+			}
+		}
+	};
+}();

文件差異過大導致無法顯示
+ 14 - 0
src/main/resources/static/js/activity/swiper.min.js


+ 124 - 0
src/main/resources/static/js/activity/utils.js

@@ -0,0 +1,124 @@
+'use strict';
+
+var _typeof2 = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
+    return typeof obj;
+} : function (obj) {
+    return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj;
+};
+
+var _typeof = typeof Symbol === 'function' && _typeof2(Symbol.iterator) === 'symbol' ? function (obj) {
+    return typeof obj === 'undefined' ? 'undefined' : _typeof2(obj);
+} : function (obj) {
+    return obj && typeof Symbol === 'function' && obj.constructor === Symbol ? 'symbol' : typeof obj === 'undefined' ? 'undefined' : _typeof2(obj);
+};
+
+// 工具库
+var utils = function () {
+    /**
+     * 固定宽高比
+     * @param {String} bind 绑定元素
+     * @param {String} attr 定义从元素的那个data-attr字段中获取长宽比,其值为一个数值,number 或者 float,默认为 1
+     */
+    function responsive(bind, attr) {
+        try {
+            var list = document.querySelectorAll(bind);
+            list.forEach(function (item) {
+                var scalc = parseFloat(item.getAttribute('data-' + attr)) || 1;
+                item.style.height = item.offsetWidth * scalc + 'px';
+            });
+        } catch (error) {
+            throw new Error(error);
+        }
+    }
+
+    /**
+     * 批量创建轮播图
+     * @param {Object} [options={}] 配置对象
+     * el: 轮播图最外层容器的class, 默认为 .swiper-container
+     * split: 轮播图id的拼接方式,默认为 - ,为了获取轮播图唯一id值,如swiper-template-1, 解析后的id就为1
+     * config:轮播图的相关配置,由键值对构成,例如:{'swiper-template-1':{ swiper相关配置,详见swiper官网 }}
+     * protertyFix:将和attr中的值一起构成config中的key 默认值为swiper-template-
+     * attr: 将和protertyFix的值一起构成config中的key 默认值为floor-type
+     * @return {Object} 所有轮播图的实例,{key:swiper,...},key的值为swiper最外层容器的id
+     */
+    function createSwiper() {
+        var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+
+        // 默认配置
+        var o = {
+            el: 'swiper-container',
+            split: '-',
+            config: {},
+            protertyFix: 'swiper-template-',
+            attr: 'swiper-type'
+        };
+        if (options) {
+            Object.assign(o, options);
+        }
+        // 保存轮播图实例对象
+        var swipers = {};
+        var list = document.querySelectorAll(o.el);
+        list.forEach(function (item) {
+            var id = item.getAttribute('data-' + o.attr);
+            if (!item.id || !id) return;
+            // 模板id
+            // var id = item.id.split(options.split)[2]
+            swipers[item.id] = new Swiper('#' + item.id, o.config[o.protertyFix + id]);
+        });
+        return swipers;
+    }
+
+    // 创建轮播图
+    function createSwiperId(el, options) {
+        var list = document.querySelector('#' + el);
+        var swiperType = list.getAttribute('data-swiper-type');
+        return new Swiper('#' + el, options['swiper-template-' + swiperType]);
+    }
+
+    // 判断arr是否为一个数组,返回一个bool值
+    function isArray(arr) {
+        return Object.prototype.toString.call(arr) === '[object Array]';
+    }
+
+    // 深度克隆
+    function deepClone(obj) {
+        if ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) !== 'object' && typeof obj !== 'function') {
+            return obj; //原始类型直接返回
+        }
+        var o = isArray(obj) ? [] : {};
+        for (var i in obj) {
+            if (obj.hasOwnProperty(i)) {
+                o[i] = _typeof(obj[i]) === 'object' ? deepClone(obj[i]) : obj[i];
+            }
+        }
+        return o;
+    }
+
+    //从cokie中获取用户信息
+    function getBaseCookie(cname) {
+        if (document.cookie) {
+            var name = cname + "=";
+            var ca = document.cookie.split(';');
+            for (var i = 0; i < ca.length; i++) {
+                var c = ca[i].trim();
+                if (c && c.indexOf(name) === 0) {
+                    return c.substring(name.length, c.length);
+                }
+            }
+        }
+        return "";
+    }
+
+
+    return {
+        responsive: responsive,
+        createSwiper: createSwiper,
+        deepClone: deepClone,
+        createSwiperId: createSwiperId,
+        getBaseCookie: getBaseCookie
+    };
+}();
+
+
+
+

+ 3 - 1
src/main/resources/static/js/base.js

@@ -630,7 +630,8 @@ function setSearchProductList(list, userId, callback) {//处理搜索
 function setProductPrice(productList, productIds, userId, callback){
     $.getJSON(coreServer+"/commodity/price/list",{
         userId: userId,
-        productIds: productIds
+        productIds: productIds,
+        source: 1
     }).done(function (r) {
         if (r.code === 0 && r.data) {
             var priceList = r.data;
@@ -644,6 +645,7 @@ function setProductPrice(productList, productIds, userId, callback){
                         product.priceLoaded = true;
                         product.ladderPriceFlag = item.ladderPriceFlag;
                         product.actStatus =item.actStatus;
+                        product.couponsLogo =item.couponsLogo;
                         product.promotions =item.promotions;
                     }
                 });

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

@@ -52,9 +52,7 @@ var Http = {
                     def.resolve(res);
                 }
             }, function(error) {
-                CAIMEI.Alert('网络请求超时,请重试~','确定',true,function () {
-                    window.location.reload();
-                });
+                console.log('网络请求超时,请重试~')
                 def.reject(error);
             });
             return def;

+ 1 - 3
src/main/resources/static/js/common/locallhostAjax.service.js

@@ -38,9 +38,7 @@ var LocakkHost = {
                     def.resolve(res);
                 }
             }, function(error) {
-                CAIMEI.Alert('网络请求超时,请重试~','确定',true,function () {
-                    window.location.reload();
-                });
+                console.log('网络请求超时,请重试~')
                 def.reject(error);
             });
             return def;

+ 128 - 1
src/main/resources/static/js/common/serviceapi/product.service.js

@@ -205,5 +205,132 @@ var ProductApi = {
             .then(function (res) {
                 callback(res);
             });
-        }
+        },
+        /**
+         * @优惠券-活动商品页列表数据
+         * @param:userId 用户userId(未登录传0)
+         * @param:pageNum 每页页码
+         * @param:pageSize 条数
+         * @param:couponId 优惠券ID
+         */
+        QueryCouponActivityList:function (params, callback) {//获取促销活动详情
+            Http.AjaxService({
+                url:'/commodity/coupon/activity/page',
+                type:'get',
+                data:params,
+                json:true,
+                isHost:true
+            })
+            .then(function(res){
+                callback(res);
+            });
+        },
+        /**
+         * @商品详情-查看相关优惠券
+         * @param:userId 用户userId
+         * @param:productId 商品ID
+         * @param:source 来源 1 WWW 2小程序
+         * @param:status 状态 1 未领取 2已领取
+         */
+        QueryProductDetilsCoupons:function (params, callback) {
+            Http.AjaxService({
+                url:'/commodity/coupon/details/coupons',
+                type:'get',
+                data:params,
+                json:true,
+                isHost:true
+            })
+            .then(function(res){
+                callback(res);
+            });
+        },
+        /**
+         * @优惠券-领取中心优惠券列表
+         * @param:userId 用户userId(未登录传0)
+         * @param:pageNum 每页页码
+         * @param:pageSize 条数
+         */
+        QueryCouponCollarList:function (params, callback) {//获取促销活动详情
+            Http.AjaxService({
+                url:'/commodity/coupon/collar/list',
+                type:'get',
+                data:params,
+                json:true,
+                isHost:true
+            })
+            .then(function(res){
+                callback(res);
+            });
+        },
+        /**
+         * @优惠券-个人中心优惠券列表
+         * @param:userId 用户userId(必传)
+         * @param:pageNum 页码
+         * @param:pageSize 每页条数
+         * @param:status 使用状态 1未使用 2已使用 3已失效
+         */
+        QueryCouponCenter:function (params, callback) {//获取促销活动详情
+            Http.AjaxService({
+                url:'/commodity/coupon/center',
+                type:'get',
+                data:params,
+                json:true,
+                isHost:true
+            })
+            .then(function(res){
+                callback(res);
+            });
+        },
+        /**
+         * @优惠券-领取优惠券
+         * @param:userId 用户userId
+         * @param:couponId 优惠券Id
+         * @param:source 来源: 1WWW 2小程序
+         */
+        ReceiveCoupon:function (params, callback) {//获取促销活动详情
+            Http.AjaxService({
+                url:'/commodity/coupon/collar',
+                type:'post',
+                data:params,
+                json:false,
+                isHost:true
+            })
+            .then(function(res){
+                callback(res);
+            });
+        },
+        /**
+         * @优惠券-兑换优惠券
+         * @param:userId 用户userId
+         * @param:redemptionCode 优惠券兑换码
+         * @param:source 来源: 1WWW 2小程序
+         */
+        ExchangeCoupon:function (params, callback) {//获取促销活动详情
+            Http.AjaxService({
+                url:'/commodity/coupon/redeem',
+                type:'post',
+                data:params,
+                json:false,
+                isHost:true
+            })
+            .then(function(res){
+                callback(res);
+            });
+        },
+        /**
+         * @优惠券-我的优惠券数量统计
+         * @param:userId 用户userId
+         */
+        QueryCouponsCount:function (params, callback) {//获取促销活动详情
+            Http.AjaxService({
+                url:'/commodity/coupon/coupons/count',
+                type:'get',
+                data:params,
+                json:true,
+                isHost:true
+            })
+            .then(function(res){
+                callback(res);
+            });
+        },
 };

+ 46 - 2
src/main/resources/static/js/common/serviceapi/shopping.service.js

@@ -4,7 +4,11 @@
  * auther ZHJY
  */
 var ShoppingApi = {
-        GetShoppingCartList: function (params, callback) {//网银支付链接初始化数据
+        /**
+         * @购物车列表
+         * @param:userId 用户userId
+         */
+        QueryShoppingCartList: function (params, callback) {
             Http.AjaxService({
                 url:'/shoppingCart/list',
                 type:'GET',
@@ -15,7 +19,11 @@ var ShoppingApi = {
                 callback(res);
             });
         },
-        DeleteCartProducts: function (params, callback) {//查询跳转网银页面
+        /**
+         * @购物车-删除商品
+         * @param:userId 用户userId
+         */
+        DeleteCartProducts: function (params, callback) {
             Http.AjaxService({
                 url:'/shoppingCart/delete',
                 type:'POST',
@@ -25,5 +33,41 @@ var ShoppingApi = {
             .then(function(res){
                 callback(res);
             });
+        },
+        /**
+         * @购物车-更新商品数量
+         * @param:userId 用户userId
+         * @param:productCount 商品数量
+         * @param:productID 商品Id
+         */
+        ShoppingCartUpdate: function (params, callback) {
+            Http.AjaxService({
+                url:'/shoppingCart/update',
+                type:'POST',
+                data:params,
+                json:false
+            })
+            .then(function(res){
+                callback(res);
+            });
+        },
+        /**
+         * @购物车-查看相关优惠券
+         * @param:userId 用户userId
+         * @param:shopId 供应商Id
+         * @param:source 来源 1 WWW 2小程序
+         * @param:status 状态 1 未领取 2已领取
+         */
+        ShoppingCartGetCoupon:function (params, callback) {
+            Http.AjaxService({
+                url:'/shoppingCart/get/coupon',
+                type:'get',
+                data:params,
+                json:true,
+                isHost:false
+            })
+                .then(function(res){
+                    callback(res);
+                });
         }
 };

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

@@ -120,7 +120,7 @@ var UserApi = {
                 callback(res);
             });
         },
-        GetMyPcCenterInfo : function(params,callback) {//机构个人中心数据查询
+        GetMyPcCenterInfo : function(params,callback) {//机构个人中心数据查询(暂时废除)
             Http.AjaxService({
                 url:'/pcCenter/myPcCenter',
                 type:'get',
@@ -283,6 +283,18 @@ var UserApi = {
                 callback(res)
             });
         },
+        GetUserClubHome : function(params,callback) {// 机构个人中心
+            Http.AjaxService({
+                url:'/user/club/home',
+                type:'get',
+                data:params,
+                json:false,
+                isHost:true
+            })
+            .then(function(res){
+                callback(res)
+            });
+        },
         GetUserClubBeansList : function(params,callback) {//机构采美豆收支明细
             Http.AjaxService({
                 url:'/user/club/beans/history',

+ 12 - 4
src/main/resources/static/js/common/serviceapi/utils.service.js

@@ -27,10 +27,6 @@ var PublicApi = {
                 });
         },
         GetHomeData:function(params,callback){ //首页数据
-            // Http.AjaxService({ url:'/home/data', type:'get', data:params, json:false})
-            //     .then(function(res){
-            //         callback(res)
-            //     });
             Http.AjaxService({
                 url:'/commodity/home/floor',
                 type:'get',
@@ -42,6 +38,18 @@ var PublicApi = {
                 callback(res)
             });
         },
+        GetHomeInit:function(params,callback){ //首页数据
+            Http.AjaxService({
+                url:'/commodity/home/init',
+                type:'get',
+                data:params,
+                json:false,
+                isHost:true
+            })
+            .then(function(res){
+                callback(res)
+            });
+        },
         GetHomeBanner:function(params,callback){ //首页bnner
             Http.AjaxService({
                 url:'/home/banner',

+ 29 - 16
src/main/resources/static/js/index.js

@@ -9,6 +9,7 @@ var homeData = new Vue({
         cmImageList:[],//右侧活动模块
         infoList:[],//右侧文章模块
         popupFlag:false,
+        couponEntry:2,// 活动优惠券弹窗显示控制
         homePageFloor:[]//楼层
     },
     filters: {
@@ -17,15 +18,14 @@ var homeData = new Vue({
         },
     },
     methods: {
-        // 美博会弹窗链接
-        popupPage:function(){
+        popupPage:function(){  // 弹窗点击跳转链接
+            var _self = this;
             this.popupFlag=false;
-            window.location.href='/product/activity-306.html';
+            window.location.href='/user/coupon-collection.html';
             localStorage.setItem('lockTime',Date.now());
             window.localStorage.setItem('isActivityStatus',true);
         },
-        // 关闭美博会弹窗
-        closePopup:function(){
+        closePopup:function(){  // 关闭弹窗
               this.popupFlag=false;
               $('.Popup').slideUp(100);
               localStorage.setItem('lockTime',Date.now());
@@ -72,7 +72,29 @@ var homeData = new Vue({
                 }
             },300);
         },
-        GetHomeRightData: function(){
+        GetHomeInit: function(){// 初始化
+            var _self = this;
+            PublicApi.GetHomeInit({ source: 1 },function(response){
+                if(response.code == 0){
+                    _self.couponEntry = response.data.couponEntry
+                    console.log('couponEntry', _self.couponEntry)
+                    console.log('GLOBAL_USER_ID', GLOBAL_USER_ID)
+                    if(GLOBAL_USER_ID == 0 &&_self.couponEntry == 1){
+                        var isActivityStatus =  localStorage.getItem('isActivityStatus');
+                        //新加优惠券弹窗
+                        if(isActivityStatus){
+                            var  lockTime = localStorage.getItem('lockTime');
+                            _self.popupFlag = this.diffTime(lockTime);
+                        }else{
+                            setTimeout(function () {
+                                _self.popupFlag = true;
+                            },1000);
+                        }
+                    }
+                }
+            });
+        },
+        GetHomeRightData: function(){//模块加载
             var _self = this;
             PublicApi.GetHomeRightData({ source: 1 },function(response){
                 if(response.code == 0){
@@ -293,6 +315,7 @@ var homeData = new Vue({
             this.setAsideNav();
             // 推荐专区商品轮播
             this.swiperFloor();
+            this.GetHomeInit();
         }
         // Dom加载后
         this.$nextTick(function(){
@@ -352,15 +375,5 @@ var homeData = new Vue({
         // $('#advertising').on('click','.close',function () {
         //     $(this).parents('.item').hide();
         // });
-        // var isActivityStatus =  localStorage.getItem('isActivityStatus');
-        // //新加优惠券弹窗
-        // if(isActivityStatus){
-        //     var  lockTime = localStorage.getItem('lockTime');
-        //     _this.popupFlag = this.diffTime(lockTime);
-        // }else{
-        //     setTimeout(function () {
-        //          _this.popupFlag = true;
-        //     },1000);
-        // }
     }
 });

+ 110 - 9
src/main/resources/static/js/product/detail.js

@@ -36,7 +36,40 @@ var productDetail = new Vue({
         productTypeName:"",
         beautyActFlag:'',
         trainingMethodText:'',
-        trainingType:''
+        trainingType:'',
+        isShowPopup:false,
+        currentTab:1,
+        couponParam:{// 获取弹窗优惠券领取参数
+            userId:0,
+            productId:0,
+            status:1,
+            source:1
+        },
+        isCouponEmpty:false,
+        productCoupon:[], 							// 优惠券
+        productCouponList:[],						// 优惠券弹窗列表
+
+    },
+    filters: {
+        TypeFormat:function(value) {
+            switch (value) {
+                case 0:
+                    return  '活动券';
+                    break;
+                case 1:
+                    return  '品类券';
+                    break;
+                case 2:
+                    return  '用户专享券';
+                    break;
+                case 3:
+                    return  '店铺券';
+                    break;
+                case 4:
+                    return  '新用户券';
+                    break;
+            }
+        }
     },
     computed: {},
     methods: {
@@ -49,12 +82,12 @@ var productDetail = new Vue({
                     setTimeout(function(){
                         if (isPC) {
                             var magnifier = new ImageMagnifier(
-                                '#imgShown .smallImage li'
-                                ,'#imgShown .bigImage'
-                                ,'#imgShown .zoomImage'
-                                ,'#imgShown .mask'
-                                ,'#imgShown .zoom'
-                                ,"on"
+                                '#imgShown .smallImage li',
+                                '#imgShown .bigImage',
+                                '#imgShown .zoomImage',
+                                '#imgShown .mask',
+                                '#imgShown .zoom',
+                                "on"
                             ).init();
                         } else {
                             var swiper = new Swiper('#swiperImage', {
@@ -261,13 +294,80 @@ var productDetail = new Vue({
                 }
             });
         },
+        queryProductDetilsCoupons(){// 初始化商品详情优惠券信息
+            var  _self = this;
+            ProductApi.QueryProductDetilsCoupons(_self.couponParam, function (response) {
+                if(response.code == 0){
+                    var data = response.data;
+                    if(isPC){
+                        _self.productCoupon = response.data.list.splice(0,3);
+                    }else{
+                        _self.productCoupon = response.data.list.splice(0,2);
+                    }
+                }else{
+                    console.log('获取优惠券列表失败');
+                }
+            })
+        },
+        queryPopupCoupons:function(){// 获取弹窗优惠券列表
+            var  _self = this;
+            ProductApi.QueryProductDetilsCoupons(_self.couponParam, function (response) {
+                if(response.code == 0){
+                    var data = response.data;
+                    if(data.couponList && data.couponList.length >0){
+                        _self.productCouponList = data.couponList;
+                        _self.isCouponEmpty = false;
+                        console.log('有优惠券')
+                        console.log(_self.productCouponList)
+                    }else{
+                        console.log('没有优惠券')
+                        _self.isCouponEmpty = true;
+                    }
+                }else{
+                    console.log('获取优惠券列表失败')
+                }
+            })
+        },
+        receiveCoupon:function(coupon){// 点击领取优惠券
+            var  _self = this;
+            ProductApi.ReceiveCoupon({userId:_self.couponParam.userId, couponId:coupon.couponId, source:1}, function (response) {
+                if(response.code == 0){
+                    _self.currentTab = 2;
+                    _self.couponParam.status = 2;
+                    _self.queryPopupCoupons();
+                }else{
+                    CAIMEI.Alert(response.msg, '确定', false);
+                }
+            })
+        },
+        queryCouponTabs:function (value){// 切换优惠券
+            var _self = this;
+            _self.currentTab = _self.couponParam.status = value;
+            _self.queryPopupCoupons();
+        },
+        showPopup:function(){// 显示优惠券弹窗
+            var _self = this;
+            if(_self.userId>0){
+                _self.productCouponList = [];
+                _self.currentTab = 1;
+                _self.couponParam.status = 1;
+                _self.queryPopupCoupons();
+                _self.isShowPopup = true;
+            }else{
+                window.location.href='/login.html';
+            }
+        },
+        hidePopup:function(){// 隐藏优惠券弹窗
+            var _self = this;
+            _self.isShowPopup = false;
+        },
         detailsClicktab:function(index){
             var _self = this;
             _self.tabsIndex = index;
         }
     },
     created: function () {
-        this.productId = $("#productId").val();
+        this.productId = this.couponParam.productId = $("#productId").val();
         this.productStock = $("#productStock").val();
         this.getImages();
         // identity: 0个人,1协销,2会员机构,3供应商,4普通机构
@@ -280,10 +380,11 @@ var productDetail = new Vue({
         }
     },
     mounted: function () {
-        this.userId = GLOBAL_USER_ID;
+        this.userId = this.couponParam.userId = GLOBAL_USER_ID;
         this.getProductDetails();
         this.getProductPrice();
         this.getParameters();
+        this.queryProductDetilsCoupons();
         // $('.productInfo').slide({
         //     mainCell:".tabCon"
         //     ,titCell:".tabTit span"

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

@@ -28,6 +28,11 @@ var productList = new Vue({
         userToken: '',
         addhtml:'<span class="tag">美博会</span>'
     },
+    filters: {
+        NumFormat:function(value) {
+            return Number(value).toFixed(2);
+        }
+    },
     computed: {
         pageTotal: function () {
             var total = Math.ceil(this.listRecord / this.params.size);
@@ -69,6 +74,16 @@ var productList = new Vue({
                 this.pageInput = 1;
             }
         },
+        PromotionsFormat:function(promo){//促销活动类型数据处理
+            if(promo!=null){
+                if(promo.type == 1 && promo.mode == 1){
+                    return true
+                }else{
+                    return false
+                }
+            }
+            return false
+        },
         getListByKeyword: function () {
             var _self = this;
             ProductApi.GetProductSearchList({

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

@@ -0,0 +1,108 @@
+var productList = new Vue({
+    el: "#productList",
+    data: {
+        // searchFlag: false,
+        listLoading: true,
+        requestFlag: true,
+        noMore: false,
+        listQuery:{
+            userId:0,
+            couponId: 0,
+            pageSize: 18,
+            pageNum: 1,
+            source: 1
+        },
+        listData: [], //priceflag 0公开价格 1不公开价格 2仅对会员机构公开,//userIdentity: 2-会员机构, 4-普通机构
+        listRecord: 0,
+        userId: 0,
+        shopID:0,
+        userIdentity: '',
+        appletsBanner:'',
+        pcBanner:'',
+        addhtml:'<span class="tag">美博会</span>'
+    },
+    filters: {
+        NumFormat:function(value) {
+            return Number(value).toFixed(2);
+        }
+    },
+    computed: {
+
+    },
+    methods: {
+        getListByKeyword: function () {
+            var _self = this;
+            ProductApi.QueryCouponActivityList(_self.listQuery,function (response) {
+                if (response.code === 0 ) {
+                    var data = response.data;
+                    _self.appletsBanner = data.coupon.appletsBanner;
+                    _self.pcBanner = data.coupon.pcBanner;
+                    _self.listRecord = data.pageInfo.total;
+                    _self.listData = _self.listData.concat(data.pageInfo.list);
+                    console.log(_self.listData);
+                    _self.listLoading = false;
+                    _self.requestFlag = true;
+                    setTimeout(function(){
+                        // 图片懒加载
+                        $("img[data-original]").lazyload();
+                    },500);
+                }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
+        }
+    },
+    created: function () {
+
+    },
+    mounted: function () {
+        var _self = this;
+        if(globalUserData){
+            _self.userId = _self.listQuery.userId = globalUserData.userId;
+            _self.userIdentity = globalUserData.identity;
+            _self.listQuery.couponId = CAIMEI.getUrlParam('couponId');
+        }
+        var userInfo = localStorage.getItem('userInfo');
+        if(userInfo){
+            _self.userId = JSON.parse(userInfo).userId;
+            _self.shopID = JSON.parse(userInfo).shopId;
+        }
+        // 获取列表数据
+        this.getListByKeyword();
+        //上垃加载更多
+        if(!isPC) {
+            $('footer').addClass("noneImportant");
+        }
+        $(window).on('scroll', function(){
+            var scrollTop = $(this).scrollTop();
+            var scrollHeight = $(document).height();
+            var windowHeight = window.innerHeight;
+            if (scrollTop + windowHeight >= scrollHeight-400) {
+                //此处是滚动条到底部时候触发的事件,在这里写要加载的数据,或者是拉动滚动条的操作
+                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.getListByKeyword();
+                    }
+                    _self.requestFlag = false;
+                }else{
+                    //到底了
+                    _self.noMore = true;
+                }
+            }
+        });
+    }
+});

+ 184 - 19
src/main/resources/static/js/shopping/cart.js

@@ -8,6 +8,8 @@ var shoppingCart = new Vue({
         listData: [],
         invalidData: [],
         promotionsList: [],
+        totalCouponList:[],						// 优惠券算列表
+        eligibleCoupons:[],						// 最终需要用到优惠券
         kindCount: 0,
         totalCount: 0,
         totalPrice: 0,
@@ -15,6 +17,20 @@ var shoppingCart = new Vue({
         originalPrice: 0,
         allChecked: true,
         submitIds: [],//去结算商品Ids
+        isShowPopup:false,
+        currentTab:1,
+        couponParam:{// 获取弹窗优惠券领取参数
+            userId:0,
+            shopId:0,
+            status:1,
+            source:1
+        },
+        isCouponEmpty:false,
+        productCoupon:[], 							// 优惠券
+        productCouponList:[],						// 优惠券弹窗列表
+        couponPrice:0,							// 优惠金额
+        totalDiscountAmount:0,					// 总共减去金额
+        isDiscount:false,						// 控制显示优惠明细
 
     },
     watch:{
@@ -29,20 +45,41 @@ var shoppingCart = new Vue({
     filters: {
         NumFormat: function (text) {//处理金额
             return Number(text).toFixed(2);
+        },
+        TypeFormat:function(value) {
+            switch (value) {
+                case 0:
+                    return  '活动券';
+                    break;
+                case 1:
+                    return  '品类券';
+                    break;
+                case 2:
+                    return  '用户专享券';
+                    break;
+                case 3:
+                    return  '店铺券';
+                    break;
+                case 4:
+                    return  '新用户券';
+                    break;
+            }
         }
     },
     methods: {
         getCartLists: function () {
             var _self = this;
             if(this.userId ===0){return;}
-            tokenAjax("get", "/shoppingCart/list", {userId: this.userId},function (r) {
-                if (r.code === 0 && r.data) {
-                    _self.listData = r.data.list;
-                    _self.invalidData = r.data.invalid;
-                    _self.kindCount = r.data.kindCount;
-                    _self.totalCount = r.data.totalCount;
-                    _self.totalPrice = r.data.totalPrice;
-                    _self.promotionsList = r.data.promotions;
+            ShoppingApi.QueryShoppingCartList({userId: this.userId},function(response){
+                if(response.code === 0){
+                    var data = response.data;
+                    _self.listData = data.list;
+                    _self.invalidData = data.invalid;
+                    _self.kindCount = data.kindCount;
+                    _self.totalCount = data.totalCount;
+                    _self.totalPrice = data.totalPrice;
+                    _self.promotionsList = data.promotions;
+                    _self.totalCouponList = data.couponList;
                     // 默认全选
                     _self.listData.forEach(function(supplier){
                         supplier.checked = true;
@@ -54,9 +91,11 @@ var shoppingCart = new Vue({
                     });
                     _self.allChecked = true;
                     _self.computedPrice();
+                    _self.listLoading = false;
+                }else{
+                    CAIMEI.Alert(response.msg,'确定',true, function(){});
                 }
-                _self.listLoading = false;
-            });
+            })
         },
         toggleThisLadder: function(event){
             var el = event.currentTarget;
@@ -203,8 +242,82 @@ var shoppingCart = new Vue({
                 _self.originalPrice = originalPrice;
                 _self.kindCount = kindCount;
                 _self.totalCount = totalCount;
+                // 计算优惠券
+                if(_self.totalCouponList.length>0){
+                    let eligibleCoupons = _self.calculationCoupon();
+                    if(eligibleCoupons.length>0){
+                        _self.eligibleCoupons.splice(0,_self.eligibleCoupons.length);
+                        _self.eligibleCoupons = eligibleCoupons.sort((a,b)=> b.couponAmount - a.couponAmount)
+                        _self.couponPrice = this.eligibleCoupons[0].couponAmount
+                    }else{
+                        _self.couponPrice = 0
+                    }
+                }
+                // 最后满减金额 = 店铺减去金额 + 单品减去金额 + 凑单减去金额
+                _self.totalDiscountAmount = _self.reducedPrice + _self.couponPrice;
+                console.log('最终优惠金额',_self.totalDiscountAmount);
+                // 控制显示优惠明细
+                if(_self.totalDiscountAmount > 0 ){
+                    _self.isDiscount = true;
+                }else{
+                    _self.isDiscount = false;
+                }
             });
         },
+        calculationCoupon:function(){// 优惠券计算
+            var _self = this;
+            var eligibleCoupons = [];
+            _self.listData.forEach(function(shop,index){
+                shop.cartList.forEach(function(pros){
+                    if(_self.submitIds.includes(pros.productId*1)){
+                        _self.totalCouponList.forEach(function (coupon,index){//循环优惠券
+                            switch(coupon.couponType){
+                                case 0:// 活动券
+                                    if(coupon.productType == 1){// 活动券-全商城商品
+                                        if(_self.totalPrice >= coupon.touchPrice){
+                                            eligibleCoupons.push(coupon)
+                                        }
+                                    }else if(coupon.productType == 2){// 活动券-指定商品
+                                        if(coupon.productIds && coupon.productIds.includes(pros.productId)){
+                                            if(_self.totalPrice >= coupon.touchPrice){
+                                                eligibleCoupons.push(coupon)
+                                            }
+                                        }
+                                    }
+                                    break;
+                                case 1:// 品类券适用于产品或者仪器 categoryType(commodityType) : 1 产品  2 仪器
+                                    if( coupon.categoryType && coupon.categoryType == pros.commodityType){
+                                        if(_self.totalPrice >= coupon.touchPrice){
+                                            eligibleCoupons.push(coupon)
+                                        }
+                                    }
+                                    break;
+                                case 2:// 用户专享券 适用于商城全部商品
+                                    if(_self.totalPrice >= coupon.touchPrice){
+                                        eligibleCoupons.push(coupon)
+                                    }
+                                    break;
+                                case 3:// 店铺券适用于某个供应商的全部商品
+                                    if(coupon.shopId && pros.supplierId == coupon.shopId){
+                                        if(_self.totalPrice >= coupon.touchPrice){
+                                            eligibleCoupons.push(coupon)
+                                        }
+                                    }
+                                    break;
+                                case 4://新用户券 适用于商城全部商品
+                                    if(_self.totalPrice >= coupon.touchPrice){
+                                        eligibleCoupons.push(coupon)
+                                    }
+                                    break;
+                            }
+                        })
+                    }else{
+                        return;
+                    }
+                })
+            })
+            return eligibleCoupons;
+        },
         cartNumberSub: function(cart){
             cart.number -= cart.step;
             if (cart.number<cart.min){
@@ -243,13 +356,14 @@ var shoppingCart = new Vue({
             });
         },
         updateCart: function(cart){
-            tokenAjax("post", "/shoppingCart/update", {
-                userID: this.userId,
-                productID: cart.productId,
-                productCount: cart.number
-            },function (res) {
-                console.log(res);
-            });
+            var _self = this;
+            ShoppingApi.ShoppingCartUpdate({userID:_self.userId,productID: cart.productId,productCount: cart.number},function(response){
+                if(response.code === 0){
+                    console.log('更新购物车商品数量成功');
+                }else{
+                    CAIMEI.Alert(response.msg,'确定',true, function(){});
+                }
+            })
         },
         deleteCart: function(productIds){
             var _self = this;
@@ -297,11 +411,62 @@ var shoppingCart = new Vue({
                 // type:(1购物车提交[对应表cm_cart],2直接购买提交, 3协销下单)
                 window.location.href = '/shopping/confirm.html?type=1';
             }
-        }
+        },
+        queryPopupCoupons:function(){// 获取弹窗优惠券列表
+            var  _self = this;
+            ShoppingApi.ShoppingCartGetCoupon(_self.couponParam, function (response) {
+                if(response.code == 0){
+                    var data = response.data;
+                    if(data.couponList && data.couponList.length >0){
+                        _self.productCouponList = data.couponList;
+                        _self.isCouponEmpty = false;
+                        console.log('有优惠券')
+                        console.log(_self.productCouponList)
+                    }else{
+                        console.log('没有优惠券')
+                        _self.isCouponEmpty = true;
+                    }
+                }else{
+                    console.log('获取优惠券列表失败')
+                }
+            })
+        },
+        receiveCoupon:function(coupon){// 点击领取优惠券
+            var  _self = this;
+            ProductApi.ReceiveCoupon({userId:_self.couponParam.userId, couponId:coupon.couponId, source:1}, function (response) {
+                if(response.code == 0){
+                    CAIMEI.dialog('领取成功',true,function () {
+                        _self.currentTab = 2;
+                        _self.couponParam.status = 2;
+                        _self.queryPopupCoupons();
+                    });
+                }else{
+                    CAIMEI.Alert(response.msg, '确定', false);
+                }
+            })
+        },
+        queryCouponTabs:function (value){
+            var _self = this;
+            _self.currentTab = _self.couponParam.status = value;
+            _self.queryPopupCoupons();
+        },
+        showPopup:function(shop){// 显示优惠券弹窗
+            var _self = this;
+            _self.productCouponList = [];
+            _self.currentTab = 1;
+            _self.couponParam.status = 1;
+            _self.couponParam.shopId = shop.id
+            _self.queryPopupCoupons();
+            _self.isShowPopup = true;
+        },
+        hidePopup:function(){// 隐藏优惠券弹窗
+            var _self = this;
+            _self.isShowPopup = false;
+        },
     },
     created: function () {
         if(globalUserData){
-            this.userId = globalUserData.userId;
+            this.userId = this.couponParam.userId = globalUserData.userId;
             this.userIdentity = globalUserData.identity;
             this.userToken = globalUserData.token;
         }

+ 110 - 57
src/main/resources/static/js/shopping/confirm.js

@@ -10,7 +10,9 @@ var shoppingConfirm = new Vue({
         kindCount: 0,
         totalCount: 0,
         totalPrice: 0,
-        reducedPrice: 0,
+        reducedPrice: 0,          // 满减金额
+        couponAmount:0,	  		  // 优惠券金额
+        totalDiscountAmount:0,	  // 共减金额
         address: {
             id: '',
             townId: '',
@@ -61,6 +63,7 @@ var shoppingConfirm = new Vue({
             freight: 0.00,          //邮费
             freePostFlag:-1      // 0包邮 -1到付 1 有运费
         },
+        clubCouponId:0,			  // 用户关联优惠Id
         invoice: {
             id:'',
             type: 0,
@@ -79,6 +82,9 @@ var shoppingConfirm = new Vue({
         deductionBeans:0,
         hanldUserBeans:0,
         submitLoading: false,
+        checkedIndex:null,
+        couponList:[], // 可用优惠券列表
+        isCouponShow:false,
     },
     computed: {
 
@@ -91,6 +97,25 @@ var shoppingConfirm = new Vue({
           }else{
             return Number(num);
           }
+        },
+        TypeFormat:function(value) {
+            switch (value) {
+                case 0:
+                    return  '活动券';
+                    break;
+                case 1:
+                    return  '品类券';
+                    break;
+                case 2:
+                    return  '用户专享券';
+                    break;
+                case 3:
+                    return  '店铺券';
+                    break;
+                case 4:
+                    return  '新用户券';
+                    break;
+            }
         }
     },
     methods: {
@@ -98,35 +123,46 @@ var shoppingConfirm = new Vue({
             var el = event.currentTarget;
             verifyHandle(el);
         },
-        getConfirmList: function (productCount) {
+        getConfirmList: function (productCount) {// 初始化确认订单信息
             var _self = this;
             if(this.userId ===0){return;}
             OrderApi.GetOrderConfirmInfo({
                 userId: _self.userId,
                 count: productCount,
                 productIds: this.productIds
-            },function(r){
-                if (r.code === 0 && r.data) {
-                    _self.listData = r.data.list;
-                    _self.totalPrice =  r.data.totalPrice;
-                    _self.reducedPrice = r.data.reducedPrice;
-                    _self.totalCount =  r.data.totalCount;
-                    _self.kindCount = r.data.kindCount;
-                    _self.balance.userMoney = r.data.userMoney;
-                    _self.balance.originUserMoney = r.data.userMoney;
-                    _self.payInfo.orderShouldPayFee = r.data.totalPrice;
-                    if(r.data.invoice){
-                        r.data.invoice.type = 0;
-                        _self.invoice =  r.data.invoice;
-                    }
+            },function(response){
+                if (response.code === 0 ) {
+                    var data = response.data;
+                    _self.listData = data.list;
+                    _self.totalPrice =  data.totalPrice;
+                    _self.reducedPrice = data.reducedPrice;
+                    _self.totalCount =  data.totalCount;
+                    _self.kindCount = data.kindCount;
+                    _self.balance.userMoney = data.userMoney;
+                    _self.balance.originUserMoney = data.userMoney;
+                    _self.payInfo.orderShouldPayFee = data.totalPrice;
                     _self.getAddressList(_self.userId,20);
+                    if( data.couponList &&  data.couponList.length>0){
+                        _self.isCouponShow = true;
+                        _self.couponAmount = data.couponList[0].couponAmount;
+                        _self.clubCouponId = data.couponList[0].clubCouponId;
+                        data.couponList.forEach((el) => {
+                            _self.couponList.push(Object.assign(el,{ischecked:false}))
+                        })
+                        _self.couponList[0].ischecked = true;
+                        _self.payInfo.orderShouldPayFee = data.totalPrice - _self.couponAmount;
+                    }
+                    _self.totalDiscountAmount =  _self.reducedPrice + _self.couponAmount;
+                    if(data.invoice){
+                        data.invoice.type = 0;
+                        _self.invoice =  data.invoice;
+                    }
                 }else{
                     CAIMEI.Alert(r.msg, '确定', false);
                 }
             });
         },
-        // 获取邮费
-        getFreight: function(townId){
+        getFreight: function(townId){// 获取邮费
             var _self = this;
             OrderApi.GetOrderPostage({
                 userId: this.userId,
@@ -138,7 +174,7 @@ var shoppingConfirm = new Vue({
                     _self.payInfo.freePostFlag = r.data.freePostFlag;
                     _self.userBeans = r.data.userBeans;
                     _self.payInfo.freight = (r.data.freePostFlag===1 ? r.data.freight : 0);
-                    _self.payInfo.orderShouldPayFee = _self.totalPrice + _self.payInfo.freight;
+                    _self.payInfo.orderShouldPayFee = _self.totalPrice + _self.payInfo.freight - _self.couponAmount;
                     switch (_self.payInfo.freePostFlag) {
                         case 1:
                             if( _self.userBeans > 0 ){
@@ -181,8 +217,7 @@ var shoppingConfirm = new Vue({
                 }
             })
         },
-        // 获取收货地址
-        getAddressList: function(userId,pageSize){
+        getAddressList: function(userId,pageSize){ // 获取收货地址
             var _self = this;
             OrderApi.GetAddressList({
                 userID:userId,
@@ -215,8 +250,7 @@ var shoppingConfirm = new Vue({
                 }
             })
         },
-        // 获取全部省份
-        getProvinceOptions: function(){
+        getProvinceOptions: function(){ // 获取全部省份
             var _self = this;
             PublicApi.GetProvince({},function(r){
                 if(r.code === 0 && r.data){
@@ -226,7 +260,7 @@ var shoppingConfirm = new Vue({
                 }
             });
         },
-        getCityOptions: function(provinceId,callback){
+        getCityOptions: function(provinceId,callback){// 获取地区
             var _self = this;
             if(provinceId && provinceId>0){
                 _self.cityOptions = [];
@@ -258,19 +292,19 @@ var shoppingConfirm = new Vue({
                 })
             }
         },
-        showAddressBox: function(){
+        showAddressBox: function(){// 显示地址弹窗
             this.isShowAddressList = true;
             if(!isPC){fixedBody();}
         },
-        closeAddressBox: function(){
+        closeAddressBox: function(){// 关闭地址弹窗
             this.isShowAddressList = false;
             if(!isPC){looseBody();}
         },
-        hideAddressForm: function(){
+        hideAddressForm: function(){// 隐藏地址表单
             this.isShowAddressForm = false;
             if(!isPC){looseBody();}
         },
-        createAddress: function(){
+        createAddress: function(){// 新建地址
             this.isShowAddressForm = true;
             this.addressForm.name= '';
             this.addressForm.mobile= '';
@@ -282,7 +316,7 @@ var shoppingConfirm = new Vue({
             this.getProvinceOptions();
             if(!isPC){fixedBody();}
         },
-        updateAddress: function(){
+        updateAddress: function(){// 更新选择地址
             this.isShowAddressForm = true;
             this.addressForm.id = this.address.id;
             this.addressForm.name = this.address.name;
@@ -299,7 +333,7 @@ var shoppingConfirm = new Vue({
             });
             if(!isPC){fixedBody();}
         },
-        saveAddressForm: function(){
+        saveAddressForm: function(){// 更新保存地址
             var _self = this;
             var pass = verifyForm();
             if (_self.saveLoading) { return false; }
@@ -325,7 +359,7 @@ var shoppingConfirm = new Vue({
                 _self.saveAddress(params);
             });
         },
-        saveAddress: function(params){
+        saveAddress: function(params){// 更新保存地址
             var _self = this;
             OrderApi.AddSaveAddress(params,function(r){
                 if(r.code === 0){
@@ -339,8 +373,7 @@ var shoppingConfirm = new Vue({
                 }
             });
         },
-        // 列表直接设为默认地址
-        setDefaultAddress: function(addressId){
+        setDefaultAddress: function(addressId){// 列表直接设为默认地址
             var _self = this;
             OrderApi.DefaultAddress({addressId:addressId,userId:_self.userId},function (r) {
                 if(r.code === 0 ){
@@ -351,8 +384,7 @@ var shoppingConfirm = new Vue({
                 }
             });
         },
-        // 列表删除单个地址
-        deleteAddress: function(addressId){
+        deleteAddress: function(addressId){// 列表删除单个地址
             var _self = this;
             CAIMEI.Modal('确定要删除该地址?','取消','确定',function () {
                 OrderApi.DeleteAddress({addressID:addressId,userID:_self.userId},function (r) {
@@ -369,7 +401,7 @@ var shoppingConfirm = new Vue({
         chooseAddress: function(selectedId){
             this.address.selectedId = selectedId;
         },
-        confirmAddress: function(){
+        confirmAddress: function(){// 确认地址并查询邮费
             var _self = this;
             this.addressList.forEach(function(item){
                 if (_self.address.selectedId==item.addressID){
@@ -389,6 +421,27 @@ var shoppingConfirm = new Vue({
             });
             this.closeAddressBox();
         },
+        checkedCoupon:function(idx){// 选择优惠券
+            var _self = this;
+            var coupon = { couponAmount:0,clubCouponId:0 };
+            _self.checkedIndex = idx;
+            _self.couponList.forEach((el,index) => {
+                if(_self.checkedIndex == index){
+                    el.ischecked = !el.ischecked;
+                }else{
+                    el.ischecked = false;
+                }
+                if(el.ischecked){
+                    coupon.couponAmount = el.couponAmount;
+                    coupon.clubCouponId = el.clubCouponId;
+                }
+            })
+            _self.couponAmount = coupon.couponAmount;
+            _self.totalDiscountAmount = _self.reducedPrice + _self.couponAmount;
+            _self.clubCouponId = coupon.clubCouponId;
+            _self.changeDeductibleFreight();
+            _self.useUserMoney();
+        },
         toggleThisLadder: function(event){
             var el = event.currentTarget;
             if($(el).hasClass("on")){
@@ -408,23 +461,23 @@ var shoppingConfirm = new Vue({
             var _self = this;
             if(this.balance.userMoney>0){
                 this.$nextTick(function() {
-                    var total = _self.totalPrice + _self.payInfo.freight; // 订单总金额 + 邮费金额
+                    var total = _self.totalPrice + _self.payInfo.freight - _self.couponAmount; // 订单总金额 + 邮费金额
                     if(_self.balance.flag){
                         _self.payInfo.balancePayFlag = 1;
-                        if(_self.balance.userMoney>=total){ // 全部抵扣
+                        if(_self.balance.userMoney >= total){ // 全部抵扣
                             _self.payInfo.orderShouldPayFee = 0;
                             if(_self.balance.isFreight){// 勾选了采美豆丢运费
-                                _self.balance.deductMoney = _self.totalPrice; // 抵扣使用金额 = 订单总金额
+                                _self.balance.deductMoney = _self.totalPrice - _self.couponAmount; // 抵扣使用金额 = 订单总金额
                                 _self.balance.surplusMoney = _self.repiceNumSub(_self.balance.userMoney,_self.totalPrice); // 抵扣后剩余余额 = 余额总额 - (订单总金额+邮费金额)
                                 console.log('余额全部抵扣勾选了采美豆运费',_self.balance.surplusMoney)
                             }else{
-                                _self.balance.deductMoney = total; // 抵扣使用金额 = 订单总金额 + 邮费金额
+                                _self.balance.deductMoney = total; // 抵扣使用金额 = 订单总金额 + 邮费金额 - 优惠券金额
                                 _self.balance.surplusMoney = _self.repiceNumSub(_self.balance.userMoney,_self.balance.deductMoney); // 抵扣后剩余余额 = 余额总额 - 抵扣使用金额
                                 console.log('余额全部抵扣未勾选了采美豆运费',_self.balance.surplusMoney)
                             }
-                        }else{ // 部分抵扣
+                       }else{ // 部分抵扣
                             if(_self.balance.isFreight){// 勾选了采美豆丢运费
-                                _self.payInfo.orderShouldPayFee = _self.repiceNumSub(_self.totalPrice,_self.balance.userMoney); // 最终订单总价 = 订单总金额 - 余额总额
+                                _self.payInfo.orderShouldPayFee = _self.repiceNumSub(_self.totalPrice,_self.balance.userMoney) - _self.couponAmount; // 最终订单总价 = 订单总金额 - 余额总额
                                 _self.balance.deductMoney = _self.balance.userMoney; // 抵扣使用金额 = 余额总额
                                 _self.balance.surplusMoney = 0; // 抵扣后剩余余额 = 0
                                 console.log('部分抵扣勾选了采美豆运费',_self.payInfo.orderShouldPayFee)
@@ -441,7 +494,7 @@ var shoppingConfirm = new Vue({
                         _self.balance.deductMoney = 0;
                         _self.balance.surplusMoney = _self.balance.originUserMoney;
                         if(_self.balance.isFreight){//判断是否有采美豆抵扣运费
-                            _self.payInfo.orderShouldPayFee = _self.totalPrice; // 最终订单总价 = 订单总金额
+                            _self.payInfo.orderShouldPayFee = _self.totalPrice - _self.couponAmount; // 最终订单总价 = 订单总金额
                         }else{
                             _self.payInfo.orderShouldPayFee = total; // 最终订单总价 = 订单总金额 + 邮费金额
                         }
@@ -452,51 +505,50 @@ var shoppingConfirm = new Vue({
         },
         changeDeductibleFreight: function(){//选择采美豆抵扣邮费
             var _self = this;
-            var total = _self.totalPrice + _self.payInfo.freight;
+            var total = _self.totalPrice + _self.payInfo.freight - _self.couponAmount;
             if(_self.balance.isFreight){//判断是否勾选运费
                 if(_self.payInfo.freePostFlag == 1){//有邮费
                     _self.hanldUserBeans = _self.freightBeansMoney*100;
                     if( _self.userBeans > 0 ){// 判断采美豆大于0
                         if(_self.balance.flag) {// 勾选了余额抵扣
-                            console.log('订单总额11111',total)
+                            console.log('订单总额',total)
                             if(_self.balance.userMoney>=total){ // 全部抵扣
                                 _self.payInfo.orderShouldPayFee = 0;
-                                _self.balance.deductMoney = _self.totalPrice;  // 抵扣使用金额 = 订单总金额
+                                _self.balance.deductMoney = _self.totalPrice - _self.couponAmount;  // 抵扣使用金额 = 订单总金额
                                 _self.balance.surplusMoney = _self.repiceNumSub(_self.balance.userMoney,_self.balance.deductMoney);  // 抵扣后剩余余额 = 余额总额 - 抵扣使用金额
                                 console.log('有勾选余额抵扣全抵',_self.payInfo.orderShouldPayFee)
                             }else{ // 部分抵扣
-                                _self.payInfo.orderShouldPayFee = _self.repiceNumSub(_self.totalPrice,_self.balance.userMoney);
+                                _self.payInfo.orderShouldPayFee = _self.repiceNumSub(_self.totalPrice,_self.balance.userMoney) - _self.couponAmount;
                                 _self.balance.deductMoney = _self.balance.userMoney; // 抵扣使用金额 = 余额总额
                                 _self.balance.surplusMoney = _self.repiceNumSub(_self.balance.userMoney,_self.balance.deductMoney); // 抵扣后剩余余额 = 余额总额 - 抵扣使用金额
                                 console.log('有勾选余额抵扣部分抵',_self.payInfo.orderShouldPayFee)
                             }
                         }else{
-                            console.log('订单总额2222222',total)
-                            _self.payInfo.orderShouldPayFee = (_self.totalPrice*100 + _self.payInfo.freight*100 - _self.freightBeansMoney*100)/100;
+                            _self.payInfo.orderShouldPayFee = ((_self.totalPrice*100 + _self.payInfo.freight*100 - _self.freightBeansMoney*100)/100) - _self.couponAmount;
                             console.log('无余额抵扣',_self.payInfo.orderShouldPayFee)
                         }
                     }
                 }else if(_self.payInfo.freePostFlag == -1){// 到付
                     _self.hanldUserBeans = _self.freightBeansMoney*100;
                     if(_self.balance.flag) {// 勾选了余额抵扣
-                        if(_self.balance.userMoney>=total){ // 全部抵扣
+                        if(_self.balance.userMoney >= total){ // 全部抵扣
                             _self.payInfo.orderShouldPayFee = 0;
-                            _self.balance.deductMoney = _self.totalPrice;  // 抵扣使用金额 = 订单总金额
+                            _self.balance.deductMoney = _self.totalPrice - _self.couponAmount;  // 抵扣使用金额 = 订单总金额
                             _self.balance.surplusMoney = _self.repiceNumSub(_self.balance.userMoney,_self.balance.deductMoney);  // 抵扣后剩余余额 = 余额总额 - 抵扣使用金额
                             console.log('到付有勾选余额抵扣全抵',_self.payInfo.orderShouldPayFee)
                         }else{ // 部分抵扣
-                            _self.payInfo.orderShouldPayFee = _self.repiceNumSub(_self.totalPrice,_self.balance.userMoney);
+                            _self.payInfo.orderShouldPayFee = _self.repiceNumSub(_self.totalPrice,_self.balance.userMoney) - _self.couponAmount;
                             _self.balance.deductMoney = _self.balance.userMoney; // 抵扣使用金额 = 余额总额
                             _self.balance.surplusMoney = _self.repiceNumSub(_self.balance.userMoney,_self.balance.deductMoney); // 抵扣后剩余余额 = 余额总额 - 抵扣使用金额
                             console.log('到付有勾选余额抵扣部分抵',_self.payInfo.orderShouldPayFee)
                         }
                     }else{
-                        _self.payInfo.orderShouldPayFee = _self.totalPrice ;
+                        _self.payInfo.orderShouldPayFee = _self.totalPrice - _self.couponAmount ;
                         console.log('到付未勾选余额抵扣',_self.payInfo.orderShouldPayFee)
                     }
                 }else{
                     _self.hanldUserBeans = 0;
-                    _self.payInfo.orderShouldPayFee = _self.totalPrice ;
+                    _self.payInfo.orderShouldPayFee = _self.totalPrice - _self.couponAmount ;
                     console.log('其他',_self.payInfo.orderShouldPayFee)
                 }
             }else{
@@ -506,18 +558,18 @@ var shoppingConfirm = new Vue({
                     if(_self.balance.userMoney>=total) { // 全部抵扣
                         console.log('勾选采美豆抵扣=========》',total)
                         _self.payInfo.orderShouldPayFee = 0 ;
-                        _self.balance.deductMoney = total; // 抵扣使用金额 = (订单总金额+邮费金额)
+                        _self.balance.deductMoney = total; // 抵扣使用金额 = (订单总金额+邮费金额-优惠券价格)
                         _self.balance.surplusMoney = _self.repiceNumSub(_self.balance.userMoney,_self.balance.deductMoney); // 抵扣后剩余余额 = 余额总额 - 抵扣使用金额
                         console.log('余额全抵抵未勾选采美豆抵扣',_self.payInfo.orderShouldPayFee)
                     }else{
                         console.log('未勾选采美豆抵扣=========》',total)
-                        _self.payInfo.orderShouldPayFee = _self.repiceNumSub(total,_self.balance.userMoney) ;
+                        _self.payInfo.orderShouldPayFee = _self.repiceNumSub(total,_self.balance.userMoney);
                         _self.balance.deductMoney = _self.balance.userMoney; // 抵扣使用金额 = (订单总金额+邮费金额)
                         _self.balance.surplusMoney = _self.repiceNumSub(_self.balance.userMoney,_self.balance.deductMoney); // 抵扣后剩余余额 = 余额总额 - 抵扣使用金额
                         console.log('余额部分抵未勾选采美豆抵扣',_self.payInfo.orderShouldPayFee)
                     }
                 }else{
-                    _self.payInfo.orderShouldPayFee = _self.totalPrice + _self.payInfo.freight;
+                    _self.payInfo.orderShouldPayFee = (_self.totalPrice + _self.payInfo.freight) - _self.couponAmount;
                 }
             }
         },
@@ -611,6 +663,7 @@ var shoppingConfirm = new Vue({
                     userBeans:this.hanldUserBeans
                 };
             var params = {
+                    clubCouponId:this.clubCouponId,
                     cartType: this.type,
                     orderSource: 1,            // 购买类型:(1购物车提交[对应表cm_cart],2直接购买提交, 3协销下单)
                     serviceProviderId: '',     // 协销ID(小程序忽略)

+ 15 - 0
src/main/resources/static/js/supplier/index.js

@@ -18,6 +18,11 @@ var supplierHome = new Vue({
     },
     computed: {
 
+    },
+    filters: {
+        NumFormat:function(value) {
+            return Number(value).toFixed(2);
+        }
     },
     methods: {
         getShopInfo: function(){
@@ -129,6 +134,16 @@ var supplierHome = new Vue({
                 }
             );
         },
+        PromotionsFormat:function(promo){//促销活动类型数据处理
+            if(promo!=null){
+                if(promo.type == 1 && promo.mode == 1){
+                    return true
+                }else{
+                    return false
+                }
+            }
+            return false
+        },
         keyupSearch: function(event) {
             // 搜索输入框 按回车键搜索
             var keyCode = event.keyCode || event.which;

+ 176 - 0
src/main/resources/static/js/user-center/account/coupon-collection.js

@@ -0,0 +1,176 @@
+;
+var orderPage = new Vue({
+    el: "#beansPage",
+    data: {
+        isRequset:false,
+        noMore: false,
+        tabsListIndex:0,
+        listQuery:{
+            userId:0,
+            pageNum:1,
+            pageSize:9
+        },
+        beansList:[],
+        listRecord: 0,
+        pageInput: '1',
+        modelType:0,
+        coupinList:[],
+    },
+    filters: {
+        TypeFormat:function(value) {
+            switch (value) {
+                case 0:
+                    return  '活动券';
+                    break;
+                case 1:
+                    return  '品类券';
+                    break;
+                case 2:
+                    return  '用户专享券';
+                    break;
+                case 3:
+                    return  '店铺券';
+                    break;
+                case 4:
+                    return  '新用户券';
+                    break;
+            }
+        }
+    },
+    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.QueryCouponCollarList();
+            }
+        },
+        checkNum: function () {//输入跳转分页
+            if (this.pageInput > this.pageTotal) {
+                this.pageInput = this.pageTotal;
+            } else if (this.pageInput < 1) {
+                this.pageInput = 1;
+            }
+        },
+        changeOrderFn:function(index,status){
+            var  _self = this;
+            _self.orderTabBarIndex = index;
+            _self.listQuery.orderState = status;
+            _self.listQuery.searchNo = '';
+            _self.listQuery.beginTime = '';
+            _self.listQuery.endTime = '';
+            _self.listQuery.pageNum = 1;
+            _self.isRequset = true;
+            _self.QueryCouponCollarList()
+        },
+        QueryCouponCollarList:function(){//查询优惠券列表
+            var _self = this;
+            ProductApi.QueryCouponCollarList(_self.listQuery,function (response) {
+                if(response.code == 0){
+                    var data = response.data;
+                    if( data.list && data.list.length>0) {
+                        _self.coupinList = [];
+                        _self.coupinList = data.list;
+                        _self.listRecord = data.total;
+                    }else{
+                        _self.coupinList = [];
+                        _self.coupinList = data.list;
+                        _self.listRecord = data.total;
+                    }
+                    _self.isRequset = false;
+                }else{
+                    CAIMEI.Alert(response.msg, '确定', false);
+                }
+            })
+        },
+        receiveCoupon:function(coupon){// 点击领取按钮事件处理
+            var  _self = this;
+            console.log(coupon)
+            if(_self.listQuery.userId == 0){
+                window.location.href='/login.html';
+            }else{
+                ProductApi.ReceiveCoupon({userId:_self.listQuery.userId, couponId:coupon.couponId, source:1}, function (response) {
+                    if(response.code == 0){
+                        CAIMEI.dialog('领取成功',true,function () {
+                            setTimeout(function(){
+                                coupon.couponBtnType = 1;
+                            },200)
+                        });
+                    }else{
+                        CAIMEI.Alert(response.msg, '确定', false);
+                    }
+                })
+            }
+        },
+        myClickCoupon:function (){// 我的优惠券跳转
+            var  _self = this;
+            if(_self.listQuery.userId>0){
+                window.location.href='/user/coupon.html';
+            }else{
+                window.location.href='/login.html';
+            }
+        },
+        toUseCoupon:function (coupon){// 去使用跳转路径
+            var _self = this;
+            switch (coupon.couponType) {
+                case 0:// 活动券跳转到商城首页 / 或者活动页(看是否指定了商品)
+                    if(coupon.productType == 1){
+                        _self.QueryCouponCollarList()
+                        window.open('/index.html');
+                    }else{
+                        _self.QueryCouponCollarList()
+                        window.open('/product/product-coupon.html?couponId='+coupon.couponId);
+                    }
+                    break;
+                case 1:// 品类券:跳转到产品 / 仪器页
+                    if(coupon.categoryType == 1){
+                        _self.QueryCouponCollarList()
+                        window.open('/product/type-287.html');
+                    }else{
+                        _self.QueryCouponCollarList()
+                        window.open('/product/type-286.html');
+                    }
+                    break;
+                case 2:// 专享券:跳转到商城首页
+                    _self.QueryCouponCollarList()
+                    window.open('/index.html');
+                    break;
+                case 3:// 店铺券:跳转到店铺首页
+                    _self.QueryCouponCollarList()
+                    window.open('/supplier-'+coupon.shopId+'.html');
+                    break;
+                case 4:// 新用户券:跳转到商城首页
+                    _self.QueryCouponCollarList()
+                    window.open('/index.html');
+                    break;
+            }
+        }
+    },
+    mounted: function () {
+        var _self = this;
+        if(globalUserData){
+            _self.userId = globalUserData.userId;
+            _self.listQuery.userId = _self.userId;
+        }
+        _self.QueryCouponCollarList();
+    }
+});

+ 72 - 0
src/main/resources/static/js/user-center/account/coupon-exchange.js

@@ -0,0 +1,72 @@
+;
+var orderPage = new Vue({
+    el: "#beansPage",
+    data: {
+        params:{
+            userId:0,
+            redemptionCode:'',
+            source:2
+        },
+        isCouponModel:false,
+        coupon:{},
+        userId: 0,
+    },
+    computed: {
+
+    },
+    filters: {
+        TypeFormat:function(value) {
+            switch (value) {
+                case 0:
+                    return  '活动券';
+                    break;
+                case 1:
+                    return  '品类券';
+                    break;
+                case 2:
+                    return  '用户专享券';
+                    break;
+                case 3:
+                    return  '店铺券';
+                    break;
+                case 4:
+                    return  '新用户券';
+                    break;
+            }
+        }
+    },
+    methods: {
+        exchangeConfirm:function(){//查询订单列表
+            var _self = this;
+            if( _self.params.redemptionCode == ''){
+                CAIMEI.dialog('请输入位兑换码',false)
+                return
+            }
+            _self.ExchangeCoupon(_self.params);
+        },
+        ExchangeCoupon: function (){// 兑换优惠券
+            var _self = this;
+            ProductApi.ExchangeCoupon(_self.params,function (response) {
+                if(response.code == 0){
+                    _self.coupon = response.data
+                    _self.isCouponModel = true
+                }else{
+                    CAIMEI.Alert(response.msg, '确定', false);
+                }
+            })
+        },
+        handleClickCancel:function (){
+            var _self = this;
+            _self.isCouponModel = false
+            setTimeout(function(){
+                window.location.href='/user/coupon.html';
+            },500)
+        }
+    },
+    mounted: function () {
+        var _self = this;
+        if(globalUserData){
+            _self.params.userId = globalUserData.userId;
+        }
+    }
+});

+ 202 - 0
src/main/resources/static/js/user-center/account/coupon.js

@@ -0,0 +1,202 @@
+;
+var orderPage = new Vue({
+    el: "#beansPage",
+    data: {
+        isRequset:true,
+        noMore: false,
+        tabsListIndex:0,
+        tabsList: [
+            {value: 0,text: '未使用'},
+            {value: 1,text: '已使用'},
+            {value: 2,text: '已失效'}
+        ],
+        listQuery:{
+            userId:0,
+            pageNum:1,
+            pageSize:6,
+            status:1
+        },
+        coupinList:[],
+        listRecord: 0,
+        pageInput: '1',
+        userBeans:0,
+        confirmedCount:'',//待確認數量
+        paymentCount:'',//待付款
+        waitShipmentsCount:'',//待发货
+        shipmentsCount:'',//已发货
+        salesReturnCount:'',//退货款
+        modelType:0,
+        orderIdentificationId:0,
+        payModelData:{},
+        hanldOrderData:{},//监听点击的单个订单项的按钮
+        confrimsBtn:true,
+        listClass:'used',
+        dataList:[],
+    },
+    filters: {
+        TypeBtnFormat:function(value){
+            switch (value) {
+                case 1:
+                    return  '去使用';
+                    break;
+                case 2:
+                    return  '已使用';
+                    break;
+                case 3:
+                    return  '已失效';
+                    break;
+            }
+        },
+        TypeFormat:function(value) {
+            switch (value) {
+                case 0:
+                    return  '活动券';
+                    break;
+                case 1:
+                    return  '品类券';
+                    break;
+                case 2:
+                    return  '用户专享券';
+                    break;
+                case 3:
+                    return  '店铺券';
+                    break;
+                case 4:
+                    return  '新用户券';
+                    break;
+            }
+        }
+    },
+    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: {
+        tabClick:function(index){//点击Tab切换查询列表
+            var  _self = this;
+            _self.tabsListIndex = index;
+            console.log('tabsListIndex',_self.tabsListIndex)
+            switch(_self.tabsListIndex){
+                case 0:
+                    _self.listClass = 'used'
+                    _self.listQuery.status = 1
+                    break;
+                case 1:
+                    _self.listClass = 'none'
+                    _self.listQuery.status = 2
+                    break;
+                case 2:
+                    _self.listClass = 'none'
+                    _self.listQuery.status = 3
+                    break;
+            }
+            _self.listQuery.pageNum = 1;
+            _self.QueryCouponCenter();
+        },
+        getQueryCouponsCount: function (){// 获取优惠券数量
+            var _self = this;
+            ProductApi.QueryCouponsCount({userId:this.listQuery.userId,},function (response) {
+                if(response.code == 0){
+                    let data = response.data
+                    _self.tabsList[0].num = data.unusedNum
+                    _self.tabsList[1].num = data.usedNum
+                    _self.tabsList[2].num = data.expiredNum
+                }else{
+                    CAIMEI.Alert(response.msg, '确定', false);
+                }
+            })
+        },
+        toPagination: function (pageNum) {//点击切换分页
+            if (pageNum <= this.pageTotal) {
+                this.listQuery.pageNum = pageNum;
+                this.QueryCouponCenter();
+            }
+        },
+        checkNum: function () {//输入跳转分页
+            if (this.pageInput > this.pageTotal) {
+                this.pageInput = this.pageTotal;
+            } else if (this.pageInput < 1) {
+                this.pageInput = 1;
+            }
+        },
+        QueryCouponCenter:function(){//查询订单列表
+            var _self = this;
+            ProductApi.QueryCouponCenter(_self.listQuery,function (response) {
+                if(response.code == 0){
+                    var data = response.data;
+                    if( data.list && data.list.length>0) {
+                        _self.coupinList = [];
+                        _self.coupinList = data.list;
+                        _self.listRecord = data.total;
+                    }else{
+                        _self.coupinList = [];
+                        _self.coupinList = data.list;
+                        _self.listRecord = data.total;
+                    }
+                    _self.isRequset = false;
+                }else{
+                    CAIMEI.Alert(response.msg, '确定', false);
+                }
+            })
+        },
+        toUseCoupon:function(coupon){// 点击去使用跳转路由处理
+            console.log(coupon)
+            if(coupon.useStatus == 1){
+                switch (coupon.couponType) {
+                    case 0:// 活动券跳转到商城首页 / 或者活动页(看是否指定了商品)
+                        if(coupon.productType == 1){
+                            window.location.href='/index.html';
+                        }else{
+                            window.location.href='/product/product-coupon.html?couponId='+coupon.couponId;
+                        }
+                        break;
+                    case 1:// 品类券:跳转到产品 / 仪器页
+                        if(coupon.categoryType == 1){
+                            window.location.href='/product/type-287.html';
+                        }else{
+                            window.location.href='/product/type-286.html';
+                        }
+                        break;
+                    case 2:// 专享券:跳转到商城首页
+                        window.location.href='/index.html';
+                        break;
+                    case 3:// 店铺券:跳转到店铺首页
+                        console.log('22222222222')
+                        window.location.href='/supplier-'+coupon.shopId+'.html';
+                        debugger
+                        break;
+                    case 4:// 新用户券:跳转到商城首页
+                        window.location.href='/index.html';
+                        break;
+                }
+            }else{
+                return;
+            }
+        },
+    },
+    mounted: function () {
+        var _self = this;
+        if(globalUserData){
+            _self.userId = globalUserData.userId;
+            _self.listQuery.userId = this.userId;
+            _self.getQueryCouponsCount();
+            _self.QueryCouponCenter();
+        }
+    }
+});

+ 11 - 9
src/main/resources/static/js/user-center/dashboard.js

@@ -8,17 +8,18 @@ var helpSuggestion = new Vue({
         degree:'',
         userInfo:{},
         formData:new FormData(),
-        unReadMessageCount:'',//消息数
-        confirmedCount:'',//待確認數量
-        paymentCount:'',//待付款
-        waitShipmentsCount:'',//待发货
-        shipmentsCount:'',//已发货
-        salesReturnCount:'',//退货款
-        productList:[],//推荐商品
-        newsList:[],//新闻动态
+        unReadMessageCount:'',// 消息数
+        confirmedCount:'',// 待確認數量
+        paymentCount:'',// 待付款
+        waitShipmentsCount:'',// 待发货
+        shipmentsCount:'',// 已发货
+        salesReturnCount:'',// 退货款
+        productList:[],// 推荐商品
+        newsList:[],// 新闻动态
         isShowBeansAlet:false,
-        bgImagePath:'',//根据类型显示图片标记
+        bgImagePath:'',// 根据类型显示图片标记
         beanNumber:100,
+        couponNum:0,// 优惠券数量
         beansType:1
     },
     methods: {
@@ -37,6 +38,7 @@ var helpSuggestion = new Vue({
                     _self.salesReturnCount = _self.showBadge(data.salesReturnCount);
                     _self.productList = data.homePageAdvertiseList;
                     _self.newsList = data.homePageInfoList;
+                    _self.couponNum = data.couponNum;
                     _self.isRequset = false;
                 }else{
                     CAIMEI.Alert(response.msg, '确定', false);

+ 1 - 1
src/main/resources/templates/account/login.html

@@ -36,7 +36,7 @@
                     <a href="/forget.html">忘记密码?</a>
                 </div>
                 <div class="submit clear">
-                    <a v-if="isPC" class="btn" href="/register.html" rel="nofollow">免费注册</a>
+                    <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>
                     <a v-if="!isPC && isWeChat" class="weChat" @click="weChatLogin()" href="javascript:void(0);">

+ 64 - 8
src/main/resources/templates/activity/activityTopic.html

@@ -396,6 +396,7 @@
                           <!-- 样式1 价格未公开-->
                           <template v-if="pros.product.priceFlag==1">
                             <div class="price-tag">
+<!--                              <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                               <span class="tag" v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
                             </div>
                             <div class="price">¥价格未公开</div>
@@ -405,6 +406,7 @@
                             <template
                               v-if="(pros.product.priceFlag==0 && pros.product.userIdentity!=3) || pros.product.userIdentity==2 || (pros.product.userIdentity==3 && pros.product.shopID==GLOBAL_SHOP_ID)">
                               <div class="price-tag">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag" v-if="pros.product.actStatus==1">
                                   {{pros.product.promotions.name}}
                                   <span v-if="pros.priceFlag != 1 && PromotionsFormat(pros.product.promotions)">:¥{{pros.product.price | NumFormat}}</span>
@@ -420,6 +422,7 @@
                             <!-- 样式3 -->
                             <template v-else-if="pros.product.priceFlag==2 && pros.product.userIdentity==4">
                               <div class="price-tag" v-if="pros.product.actStatus==1">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag">{{pros.product.promotions.name}}</span>
                               </div>
                               <div class="price"><span>¥会员可见</span></div>
@@ -427,6 +430,7 @@
                             <!-- 样式4 -->
                             <template v-else>
                               <div class="price-tag" v-if="pros.product.actStatus==1">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag">{{pros.product.promotions.name}}</span>
                               </div>
                               <div class="price"><span>¥</span>
@@ -448,6 +452,7 @@
                         <!-- 样式6 -->
                         <template v-if="pros.product.productCategory == 1">
                           <div class="price-tag" v-if="params.userId>0">
+<!--                            <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                             <span class="tag" v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
                           </div>
                           <div class="price">
@@ -513,6 +518,7 @@
                           <!-- 样式1 价格未公开-->
                           <template v-if="pros.product.priceFlag==1">
                             <div class="price-tag">
+<!--                              <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                               <span class="tag" v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
                             </div>
                             <div class="price">¥价格未公开</div>
@@ -522,6 +528,7 @@
                             <template
                               v-if="(pros.product.priceFlag==0 && pros.product.userIdentity!=3) || pros.product.userIdentity==2 || (pros.product.userIdentity==3 && pros.product.shopID==GLOBAL_SHOP_ID)">
                               <div class="price-tag">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag" v-if="pros.product.actStatus==1">
                                   {{pros.product.promotions.name}}
                                   <span v-if="pros.priceFlag != 1 && PromotionsFormat(pros.product.promotions)">:¥{{pros.product.price | NumFormat}}</span>
@@ -537,6 +544,7 @@
                             <!-- 样式3 -->
                             <template v-else-if="pros.product.priceFlag==2 && pros.product.userIdentity==4">
                               <div class="price-tag" v-if="pros.product.actStatus==1">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag">{{pros.product.promotions.name}}</span>
                               </div>
                               <div class="price"><span>¥会员可见</span></div>
@@ -544,6 +552,7 @@
                             <!-- 样式4 -->
                             <template v-else>
                               <div class="price-tag" v-if="pros.product.actStatus==1">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag">{{pros.product.promotions.name}}</span>
                               </div>
                               <div class="price"><span>¥</span>
@@ -565,6 +574,7 @@
                         <!-- 样式6 -->
                         <template v-if="pros.product.productCategory == 1">
                           <div class="price-tag" v-if="params.userId>0">
+<!--                            <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                             <span class="tag" v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
                           </div>
                           <div class="price  ">
@@ -641,6 +651,7 @@
                           <!-- 样式1 价格未公开-->
                           <template v-if="pros.product.priceFlag==1">
                             <div class="price-tag">
+<!--                              <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                               <span class="tag" v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
                             </div>
                             <div class="price">¥价格未公开</div>
@@ -650,6 +661,7 @@
                             <template
                               v-if="(pros.product.priceFlag==0 && pros.product.userIdentity!=3) || pros.product.userIdentity==2 || (pros.product.userIdentity==3 && pros.product.shopID==GLOBAL_SHOP_ID)">
                               <div class="price-tag">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag" v-if="pros.product.actStatus==1">
                                   {{pros.product.promotions.name}}
                                   <span v-if="pros.priceFlag != 1 && PromotionsFormat(pros.product.promotions)">:¥{{pros.product.price | NumFormat}}</span>
@@ -665,6 +677,7 @@
                             <!-- 样式3 -->
                             <template v-else-if="pros.product.priceFlag==2 && pros.product.userIdentity==4">
                               <div class="price-tag" v-if="pros.product.actStatus==1">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag">{{pros.product.promotions.name}}</span>
                               </div>
                               <div class="price"><span>¥会员可见</span></div>
@@ -672,6 +685,7 @@
                             <!-- 样式4 -->
                             <template v-else>
                               <div class="price-tag" v-if="pros.product.actStatus==1">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag">{{pros.product.promotions.name}}</span>
                               </div>
                               <div class="price"><span>¥</span>
@@ -693,6 +707,7 @@
                         <!-- 样式6 -->
                         <template v-if="pros.product.productCategory == 1">
                           <div class="price-tag" v-if="params.userId>0">
+<!--                            <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                             <span class="tag" v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
                           </div>
                           <div class="price  ">
@@ -742,6 +757,7 @@
                           <!-- 样式1 价格未公开-->
                           <template v-if="pros.product.priceFlag==1">
                             <div class="price-tag">
+<!--                              <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                               <span class="tag" v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
                             </div>
                             <div class="price">¥价格未公开</div>
@@ -751,6 +767,7 @@
                             <template
                               v-if="(pros.product.priceFlag==0 && pros.product.userIdentity!=3) || pros.product.userIdentity==2 || (pros.product.userIdentity==3 && pros.product.shopID==GLOBAL_SHOP_ID)">
                               <div class="price-tag">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag" v-if="pros.product.actStatus==1">
                                   {{pros.product.promotions.name}}
                                   <span v-if="pros.priceFlag != 1 && PromotionsFormat(pros.product.promotions)">:¥{{pros.product.price | NumFormat}}</span>
@@ -766,6 +783,7 @@
                             <!-- 样式3 -->
                             <template v-else-if="pros.product.priceFlag==2 && pros.product.userIdentity==4">
                               <div class="price-tag" v-if="pros.product.actStatus==1">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag">{{pros.product.promotions.name}}</span>
                               </div>
                               <div class="price"><span>¥会员可见</span></div>
@@ -773,6 +791,7 @@
                             <!-- 样式4 -->
                             <template v-else>
                               <div class="price-tag" v-if="pros.product.actStatus==1">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag">{{pros.product.promotions.name}}</span>
                               </div>
                               <div class="price"><span>¥</span>
@@ -794,6 +813,7 @@
                         <!-- 样式6 -->
                         <template v-if="pros.product.productCategory == 1">
                           <div class="price-tag" v-if="params.userId>0">
+<!--                            <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                             <span class="tag" v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
                           </div>
                           <div class="price  ">
@@ -860,6 +880,7 @@
                           <!-- 样式1 价格未公开-->
                           <template v-if="pros.product.priceFlag==1">
                             <div class="price-tag">
+<!--                              <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                               <span class="tag" v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
                             </div>
                             <div class="price">¥价格未公开</div>
@@ -869,6 +890,7 @@
                             <template
                               v-if="(pros.product.priceFlag==0 && pros.product.userIdentity!=3) || pros.product.userIdentity==2 || (pros.product.userIdentity==3 && pros.product.shopID==GLOBAL_SHOP_ID)">
                               <div class="price-tag">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag" v-if="pros.product.actStatus==1">
                                   {{pros.product.promotions.name}}
                                   <span v-if="pros.priceFlag != 1 && PromotionsFormat(pros.product.promotions)">:¥{{pros.product.price | NumFormat}}</span>
@@ -884,6 +906,7 @@
                             <!-- 样式3 -->
                             <template v-else-if="pros.product.priceFlag==2 && pros.product.userIdentity==4">
                               <div class="price-tag" v-if="pros.product.actStatus==1">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag">{{pros.product.promotions.name}}</span>
                               </div>
                               <div class="price"><span>¥会员可见</span></div>
@@ -891,6 +914,7 @@
                             <!-- 样式4 -->
                             <template v-else>
                               <div class="price-tag" v-if="pros.product.actStatus==1">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag">{{pros.product.promotions.name}}</span>
                               </div>
                               <div class="price"><span>¥</span>
@@ -912,6 +936,7 @@
                         <!-- 样式6 -->
                         <template v-if="pros.product.productCategory == 1">
                           <div class="price-tag" v-if="params.userId>0">
+<!--                            <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                             <span class="tag" v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
                           </div>
                           <div class="price  ">
@@ -972,6 +997,7 @@
                           <!-- 样式1 价格未公开-->
                           <template v-if="pros.product.priceFlag==1">
                             <div class="price-tag">
+<!--                              <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                               <span class="tag" v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
                             </div>
                             <div class="price">¥价格未公开</div>
@@ -981,6 +1007,7 @@
                             <template
                               v-if="(pros.product.priceFlag==0 && pros.product.userIdentity!=3) || pros.product.userIdentity==2 || (pros.product.userIdentity==3 && pros.product.shopID==GLOBAL_SHOP_ID)">
                               <div class="price-tag">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag" v-if="pros.product.actStatus==1">
                                   {{pros.product.promotions.name}}
                                   <span v-if="pros.priceFlag != 1 && PromotionsFormat(pros.product.promotions)">:¥{{pros.product.price | NumFormat}}</span>
@@ -996,6 +1023,7 @@
                             <!-- 样式3 -->
                             <template v-else-if="pros.product.priceFlag==2 && pros.product.userIdentity==4">
                               <div class="price-tag" v-if="pros.product.actStatus==1">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag">{{pros.product.promotions.name}}</span>
                               </div>
                               <div class="price"><span>¥会员可见</span></div>
@@ -1003,6 +1031,7 @@
                             <!-- 样式4 -->
                             <template v-else>
                               <div class="price-tag" v-if="pros.product.actStatus==1">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag">{{pros.product.promotions.name}}</span>
                               </div>
                               <div class="price"><span>¥</span>
@@ -1024,6 +1053,7 @@
                         <!-- 样式6 -->
                         <template v-if="pros.product.productCategory == 1">
                           <div class="price-tag" v-if="params.userId>0">
+<!--                            <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                             <span class="tag" v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
                           </div>
                           <div class="price  ">
@@ -1084,6 +1114,7 @@
                           <!-- 样式1 价格未公开-->
                           <template v-if="pros.product.priceFlag==1">
                             <div class="price-tag">
+<!--                              <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                               <span class="tag" v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
                             </div>
                             <div class="price">¥价格未公开</div>
@@ -1093,6 +1124,7 @@
                             <template
                               v-if="(pros.product.priceFlag==0 && pros.product.userIdentity!=3) || pros.product.userIdentity==2 || (pros.product.userIdentity==3 && pros.product.shopID==GLOBAL_SHOP_ID)">
                               <div class="price-tag">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag" v-if="pros.product.actStatus==1">
                                   {{pros.product.promotions.name}}
                                   <span v-if="pros.priceFlag != 1 && PromotionsFormat(pros.product.promotions)">:¥{{pros.product.price | NumFormat}}</span>
@@ -1108,6 +1140,7 @@
                             <!-- 样式3 -->
                             <template v-else-if="pros.product.priceFlag==2 && pros.product.userIdentity==4">
                               <div class="price-tag" v-if="pros.product.actStatus==1">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag">{{pros.product.promotions.name}}</span>
                               </div>
                               <div class="price"><span>¥会员可见</span></div>
@@ -1115,6 +1148,7 @@
                             <!-- 样式4 -->
                             <template v-else>
                               <div class="price-tag" v-if="pros.product.actStatus==1">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag">{{pros.product.promotions.name}}</span>
                               </div>
                               <div class="price"><span>¥</span>
@@ -1136,6 +1170,7 @@
                         <!-- 样式6 -->
                         <template v-if="pros.product.productCategory == 1">
                           <div class="price-tag" v-if="params.userId>0">
+<!--                            <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                             <span class="tag" v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
                           </div>
                           <div class="price  ">
@@ -1191,6 +1226,7 @@
                           <!-- 样式1 价格未公开-->
                           <template v-if="pros.product.priceFlag==1">
                             <div class="price-tag">
+<!--                              <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                               <span class="tag" v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
                             </div>
                             <div class="price">¥价格未公开</div>
@@ -1200,6 +1236,7 @@
                             <template
                               v-if="(pros.product.priceFlag==0 && pros.product.userIdentity!=3) || pros.product.userIdentity==2 || (pros.product.userIdentity==3 && pros.product.shopID==GLOBAL_SHOP_ID)">
                               <div class="price-tag">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag" v-if="pros.product.actStatus==1">
                                   {{pros.product.promotions.name}}
                                   <span v-if="pros.priceFlag != 1 && PromotionsFormat(pros.product.promotions)">:¥{{pros.product.price | NumFormat}}</span>
@@ -1215,6 +1252,7 @@
                             <!-- 样式3 -->
                             <template v-else-if="pros.product.priceFlag==2 && pros.product.userIdentity==4">
                               <div class="price-tag" v-if="pros.product.actStatus==1">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag">{{pros.product.promotions.name}}</span>
                               </div>
                               <div class="price"><span>¥会员可见</span></div>
@@ -1222,6 +1260,7 @@
                             <!-- 样式4 -->
                             <template v-else>
                               <div class="price-tag" v-if="pros.product.actStatus==1">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag">{{pros.product.promotions.name}}</span>
                               </div>
                               <div class="price"><span>¥</span>
@@ -1243,6 +1282,7 @@
                         <!-- 样式6 -->
                         <template v-if="pros.product.productCategory == 1">
                           <div class="price-tag" v-if="params.userId>0">
+<!--                            <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                             <span class="tag" v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
                           </div>
                           <div class="price  ">
@@ -1299,6 +1339,7 @@
                           <!-- 样式1 价格未公开-->
                           <template v-if="pros.product.priceFlag==1">
                             <div class="price-tag">
+<!--                              <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                               <span class="tag" v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
                             </div>
                             <div class="price">¥价格未公开</div>
@@ -1308,6 +1349,7 @@
                             <template
                               v-if="(pros.product.priceFlag==0 && pros.product.userIdentity!=3) || pros.product.userIdentity==2 || (pros.product.userIdentity==3 && pros.product.shopID==GLOBAL_SHOP_ID)">
                               <div class="price-tag">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag" v-if="pros.product.actStatus==1">
                                   {{pros.product.promotions.name}}
                                   <span v-if="pros.priceFlag != 1 && PromotionsFormat(pros.product.promotions)">:¥{{pros.product.price | NumFormat}}</span>
@@ -1323,6 +1365,7 @@
                             <!-- 样式3 -->
                             <template v-else-if="pros.product.priceFlag==2 && pros.product.userIdentity==4">
                               <div class="price-tag" v-if="pros.product.actStatus==1">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag">{{pros.product.promotions.name}}</span>
                               </div>
                               <div class="price"><span>¥会员可见</span></div>
@@ -1330,6 +1373,7 @@
                             <!-- 样式4 -->
                             <template v-else>
                               <div class="price-tag" v-if="pros.product.actStatus==1">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag">{{pros.product.promotions.name}}</span>
                               </div>
                               <div class="price"><span>¥</span>
@@ -1351,6 +1395,7 @@
                         <!-- 样式6 -->
                         <template v-if="pros.product.productCategory == 1">
                           <div class="price-tag" v-if="params.userId>0">
+<!--                            <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                             <span class="tag" v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
                           </div>
                           <div class="price  ">
@@ -1400,6 +1445,7 @@
                           <!-- 样式1 价格未公开-->
                           <template v-if="pros.product.priceFlag==1">
                             <div class="price-tag">
+<!--                              <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                               <span class="tag" v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
                             </div>
                             <div class="price">¥价格未公开</div>
@@ -1409,6 +1455,7 @@
                             <template
                               v-if="(pros.product.priceFlag==0 && pros.product.userIdentity!=3) || pros.product.userIdentity==2 || (pros.product.userIdentity==3 && pros.product.shopID==GLOBAL_SHOP_ID)">
                               <div class="price-tag">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag" v-if="pros.product.actStatus==1">
                                   {{pros.product.promotions.name}}
                                   <span v-if="pros.priceFlag != 1 && PromotionsFormat(pros.product.promotions)">:¥{{pros.product.price | NumFormat}}</span>
@@ -1424,6 +1471,7 @@
                             <!-- 样式3 -->
                             <template v-else-if="pros.product.priceFlag==2 && pros.product.userIdentity==4">
                               <div class="price-tag" v-if="pros.product.actStatus==1">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag">{{pros.product.promotions.name}}</span>
                               </div>
                               <div class="price"><span>¥会员可见</span></div>
@@ -1431,6 +1479,7 @@
                             <!-- 样式4 -->
                             <template v-else>
                               <div class="price-tag" v-if="pros.product.actStatus==1">
+<!--                                <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                 <span class="tag">{{pros.product.promotions.name}}</span>
                               </div>
                               <div class="price"><span>¥</span>
@@ -1452,6 +1501,7 @@
                         <!-- 样式6 -->
                         <template v-if="pros.product.productCategory == 1">
                           <div class="price-tag" v-if="params.userId>0">
+<!--                            <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                             <span class="tag" v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
                           </div>
                           <div class="price  ">
@@ -1511,8 +1561,8 @@
                                 <!-- 样式1 价格未公开-->
                                 <template v-if="pros.product.priceFlag==1">
                                   <div class="price-tag">
-                                    <span class="tag"
-                                      v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
+<!--                                    <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
+                                    <span class="tag" v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
                                   </div>
                                   <div class="price">¥价格未公开</div>
                                 </template>
@@ -1521,6 +1571,7 @@
                                   <template
                                     v-if="(pros.product.priceFlag==0 && pros.product.userIdentity!=3) || pros.product.userIdentity==2 || (pros.product.userIdentity==3 && pros.product.shopID==GLOBAL_SHOP_ID)">
                                     <div class="price-tag">
+<!--                                      <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                       <span class="tag" v-if="pros.product.actStatus==1">
                                         {{pros.product.promotions.name}}
                                         <span v-if="pros.priceFlag != 1 && PromotionsFormat(pros.product.promotions)">:¥{{pros.product.price |
@@ -1537,6 +1588,7 @@
                                   <!-- 样式3 -->
                                   <template v-else-if="pros.product.priceFlag==2 && pros.product.userIdentity==4">
                                     <div class="price-tag" v-if="pros.product.actStatus==1">
+<!--                                      <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                       <span class="tag">{{pros.product.promotions.name}}</span>
                                     </div>
                                     <div class="price"><span>¥会员可见</span></div>
@@ -1544,6 +1596,7 @@
                                   <!-- 样式4 -->
                                   <template v-else>
                                     <div class="price-tag" v-if="pros.product.actStatus==1">
+<!--                                      <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                       <span class="tag">{{pros.product.promotions.name}}</span>
                                     </div>
                                     <div class="price"><span>¥</span>
@@ -1566,8 +1619,8 @@
                               <!-- 样式6 -->
                               <template v-if="pros.product.productCategory == 1">
                                 <div class="price-tag" v-if="params.userId>0">
-                                  <span class="tag"
-                                    v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
+<!--                                  <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
+                                  <span class="tag" v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
                                 </div>
                                 <div class="price  ">
                                   <span>¥</span>
@@ -1617,8 +1670,8 @@
                                 <!-- 样式1 价格未公开-->
                                 <template v-if="pros.product.priceFlag==1">
                                   <div class="price-tag">
-                                    <span class="tag"
-                                      v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
+<!--                                    <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
+                                    <span class="tag" v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
                                   </div>
                                   <div class="price">¥价格未公开</div>
                                 </template>
@@ -1627,6 +1680,7 @@
                                   <template
                                     v-if="(pros.product.priceFlag==0 && pros.product.userIdentity!=3) || pros.product.userIdentity==2 || (pros.product.userIdentity==3 && pros.product.shopID==GLOBAL_SHOP_ID)">
                                     <div class="price-tag">
+<!--                                      <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                       <span class="tag" v-if="pros.product.actStatus==1">
                                         {{pros.product.promotions.name}}
                                         <span v-if="pros.priceFlag != 1 && PromotionsFormat(pros.product.promotions)">:¥{{pros.product.price |
@@ -1643,6 +1697,7 @@
                                   <!-- 样式3 -->
                                   <template v-else-if="pros.product.priceFlag==2 && pros.product.userIdentity==4">
                                     <div class="price-tag" v-if="pros.product.actStatus==1">
+<!--                                      <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                       <span class="tag">{{pros.product.promotions.name}}</span>
                                     </div>
                                     <div class="price"><span>¥会员可见</span></div>
@@ -1650,6 +1705,7 @@
                                   <!-- 样式4 -->
                                   <template v-else>
                                     <div class="price-tag" v-if="pros.product.actStatus==1">
+<!--                                      <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                       <span class="tag">{{pros.product.promotions.name}}</span>
                                     </div>
                                     <div class="price"><span>¥</span>
@@ -1672,8 +1728,8 @@
                               <!-- 样式6 -->
                               <template v-if="pros.product.productCategory == 1">
                                 <div class="price-tag" v-if="params.userId>0">
-                                  <span class="tag"
-                                    v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
+<!--                                  <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
+                                  <span class="tag" v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
                                 </div>
                                 <div class="price  ">
                                   <span>¥</span>

+ 823 - 0
src/main/resources/templates/activity/beautyTopic.html

@@ -0,0 +1,823 @@
+<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>云上美博会</title>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+    <!--    <meta name="keywords" content="美业采购商城,美业信息平台,美业采购顾问,美业采购咨询,美容产品,美容仪器,医美产品,医美器械,二手仪器,美业正品联盟">-->
+    <!--    <meta name="description"-->
+    <!--          content="采美365网是一家专注于医美生美的B2B采购平台,拥有各类医疗器械资质和进出口资质,聚集全球众多知名供应商,上架丰富的医美生美产品和仪器,一站式解决美容机构的采购需求">-->
+    <link href="/css/activity/normalize.css" rel="stylesheet" type="text/css">
+    <link rel="stylesheet" href="/css/activity/swiper.min.css"/>
+    <link th:href="@{/css/activity/beautyTopic.css(v=${version})}" rel="stylesheet" type="text/css">
+    <link th:href="@{/css/activity/beautyTopic.css(v=${version})}" rel="stylesheet" type="text/css">
+</head>
+<body>
+<input type="hidden" th:value="${coreServer}" id="coreServer">
+<div id="app">
+    <!-- 大图 -->
+    <div class="banner-container">
+        <div class="cm-container cm-relative">
+            <div class="banner">
+                <a :href="pageInfo && pageInfo.headLink">
+                    <img :src="pageInfo && pageInfo.crmHeadImage" alt="" v-if="isMobile"/>
+                    <img :src="pageInfo && pageInfo.headImage" alt="" v-else/>
+                </a>
+            </div>
+        </div>
+    </div>
+    <template v-for="(floorData,index) in floorList">
+        <div class="cm-floor">
+            <div class="cm-container">
+                <!-- 楼层标题 -->
+                <div
+                        class="cm-row cm-floor-title cm-p-l-4 cm-m-b-4"
+                        :class="fetchTemplate([22,23,24,25],floorData.floorContent.templateType)?['cm-p-r-4','cm-relative']:''"
+                >
+                    <div :class="fetchTemplate([22,23,24,25],floorData.floorContent.templateType)?['cm-col-md-40', 'cm-col-xs-36']:''">
+                        <div class="cm-title cm-text-ellipsis-1">{{floorData.title}}</div>
+                        <div class="cm-subtitle cm-text-ellipsis-1">{{floorData.detail}}<span>{{floorData.floorContent.templateType}}</span>
+                        </div>
+                    </div>
+                    <div
+                            class="cm-tabs cm-p-t-12 cm-absolute cm-bottom-right"
+                            v-if="fetchTemplate([22,23,24,25],floorData.floorContent.templateType)"
+                    >
+                        <div class="cm-tab-content cm-p-r-4">
+                            <div
+                                    class="cm-tab"
+                                    :class="{on:currentVideoSwiper(floorData.floorContent.templateType,index) === 0}"
+                                    @click="handleTabClick(floorData.floorContent.templateType,index,0)"
+                            >
+                                <span>{{floorData.floorContent.displayDate1 | tabTime}}</span>
+                            </div>
+                            <div
+                                    class="cm-tab"
+                                    :class="{on:currentVideoSwiper(floorData.floorContent.templateType,index) === 1}"
+                                    @click="handleTabClick(floorData.floorContent.templateType,index, 1)"
+                            >
+                                <span>{{floorData.floorContent.displayDate2 | tabTime}}</span>
+                            </div>
+                            <div
+                                    class="cm-tab"
+                                    :class="{on:currentVideoSwiper(floorData.floorContent.templateType,index) === 2}"
+                                    @click="handleTabClick(floorData.floorContent.templateType,index, 2)"
+                            >
+                                <span>{{floorData.floorContent.displayDate3 | tabTime}}</span>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <!-- 商品楼层11-21 -->
+                <template v-if="fetchTemplate([11,12,13,14,15,16,17,18,19,20,21],floorData.floorContent.templateType)">
+                    <!-- 轮播图 -->
+                    <div class="cm-row cm-relative cm-swiper" v-if="floorData.floorContent.templateType == 21">
+                        <div class="cm-p-a-4">
+                            <div class="swiper-container" :id="'swiper-template-' + index" data-swiper-type="1-6-2-2">
+                                <div class="swiper-wrapper">
+                                    <div class="swiper-slide" v-for="(pros , index) in floorData.floorImageList">
+                                        <a target="_blank" :href="reallink(pros.link)">
+                                            <div class="cm-product-item hover-class bg-white">
+                                                <div class="aspect">
+                                                    <img width="100%" height="100%" src="/img/activity/placeholder.png"
+                                                         :data-original="pros.image" alt=""/>
+                                                </div>
+                                                <div class="cm-p-l-8 cm-p-r-8 cm-p-t-8 cm-p-b-4">
+                                                    <div class="cm-tags cm-p-b-2">
+                                                        <span class="cm-tag color1" v-if="pros.listType == 2">{{ pros.label }}</span>
+                                                    </div>
+                                                    <div class="cm-product-title cm-text-ellipsis-2 h44">
+                                                        <span class="cm-meibohui-tag"
+                                                              v-if="pros.product!=null && pros.product.beautyActFlag==1">美博会</span>
+                                                        {{pros.name}}
+                                                    </div>
+                                                    <div class="cm-tags cm-p-t-2 cm-p-b-2 h20">
+<!--                                                        <span class="cm-tag color2" v-if="pros.product.couponsLogo">优惠券</span>-->
+                                                        <span class="cm-tag color3" v-if="pros.listType == 2">{{ pros.label }}</span>
+                                                    </div>
+                                                    <div class="cm-prodcut-price h24">
+                                                        <div class="pro-price" v-if="pros.listType == 1">
+                                                            <template v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0">
+                                                                <template v-if="pros.product.productCategory==1">
+                                                                    <!-- 样式1 价格未公开-->
+                                                                    <template v-if="pros.product.priceFlag==1">
+                                                                        <div class="price-tag cm-left">
+                                                                            <span class="tag"
+                                                                                  v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
+                                                                        </div>
+                                                                        <div class="price cm-left">¥价格未公开</div>
+                                                                    </template>
+                                                                    <template v-else>
+                                                                        <!-- 样式2-->
+                                                                        <template
+                                                                                v-if="(pros.product.priceFlag==0 && pros.product.userIdentity!=3) || pros.product.userIdentity==2 || (pros.product.userIdentity==3 && pros.product.shopID==GLOBAL_SHOP_ID)">
+                                                                            <div class="price-tag cm-left">
+                                                                                <span class="tag"
+                                                                                      v-if="pros.product.actStatus==1">
+                                                                                  {{pros.product.promotions.name}}
+                                                                                  <span class="red"
+                                                                                        v-if="pros.priceFlag != 1 && PromotionsFormat(pros.product.promotions)">:¥{{pros.product.price | NumFormat}}</span>
+                                                                                </span>
+                                                                            </div>
+                                                                            <div class="price cm-left"
+                                                                                 :class="PromotionsFormat(pros.product.promotions) ? 'none' : ''">
+                                                                                <span class="red">
+                                                                                  ¥{{(PromotionsFormat(pros.product.promotions) ? pros.product.originalPrice
+                                                                                  : pros.product.price) | NumFormat }}
+                                                                                </span>
+                                                                            </div>
+                                                                        </template>
+                                                                        <!-- 样式3 -->
+                                                                        <template
+                                                                                v-else-if="pros.product.priceFlag==2 && pros.product.userIdentity==4">
+                                                                            <div class="price-tag cm-left"
+                                                                                 v-if="pros.product.actStatus==1">
+                                                                                <span class="tag">{{pros.product.promotions.name}}</span>
+                                                                            </div>
+                                                                            <div class="price cm-left">
+                                                                                <span>¥会员可见</span></div>
+                                                                        </template>
+                                                                        <!-- 样式4 -->
+                                                                        <template v-else>
+                                                                            <div class="price-tag cm-left"
+                                                                                 v-if="pros.product.actStatus==1">
+                                                                                <span class="tag">{{pros.product.promotions.name}}</span>
+                                                                            </div>
+                                                                            <div class="price cm-left"><span>¥</span>
+                                                                                <span class="p-icon"
+                                                                                      :class="'i'+pros.product.priceGrade"></span>
+                                                                            </div>
+                                                                        </template>
+                                                                    </template>
+                                                                </template>
+                                                                <!-- 样式5 -->
+                                                                <template v-else>
+                                                                    <div class="price-tag cm-left"></div>
+                                                                    <div class="price"
+                                                                         v-if="pros.product.detailTalkFlag == '2'">¥价格详聊
+                                                                    </div>
+                                                                    <div class="price cm-left" v-else>
+                                                                        <span class="red">¥{{ pros.product.price | NumFormat }}</span>
+                                                                    </div>
+                                                                </template>
+                                                            </template>
+                                                            <template v-else>
+                                                                <!-- 样式6 -->
+                                                                <template v-if="pros.product.productCategory == 1">
+                                                                    <div class="price-tag cm-left"
+                                                                         v-if="params.userId>0">
+                                                                        <span class="tag"
+                                                                              v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
+                                                                    </div>
+                                                                    <div class="price cm-left ">
+                                                                        <span>¥</span>
+                                                                        <span class="p-icon"
+                                                                              :class="'i'+pros.product.priceGrade"></span>
+                                                                    </div>
+                                                                </template>
+                                                                <!-- 样式7 -->
+                                                                <template v-else>
+                                                                    <div class="price-tag cm-left"></div>
+                                                                    <div class="price  cm-left"><span>¥登录可见</span></div>
+                                                                </template>
+                                                            </template>
+                                                        </div>
+
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        </a>
+                                    </div>
+                                </div>
+                                <!-- Add Pagination -->
+                                <div class="swiper-pagination"></div>
+                                <!-- Add Navigation -->
+                                <div class="swiper-button-prev swiper-button-white cm-none"></div>
+                                <div class="swiper-button-next swiper-button-white cm-none"></div>
+                            </div>
+                        </div>
+                    </div>
+                    <!-- 普通列表 -->
+                    <div class="cm-row" v-else>
+                        <div class="fold-box cm-clearfix"
+                             :data-floor-type="floorData.floorContent.templateType + '-' + index">
+                            <!-- banner -->
+                            <template v-for="(i,index) in 5">
+                                <div
+                                        class="cm-p-a-4"
+                                        :class="[ 'cm-col-md-'+ getProductScalcMap(floorData.floorContent.templateType).col[index],  'cm-col-xs-'+ getProductScalcMap(floorData.floorContent.templateType).col[index]]"
+                                        v-if="floorData.floorContent['pcAdsImage' + (index + 1)] && floorData.floorContent.templateType != 20"
+                                >
+                                    <div class="aspect"
+                                         :data-scalc="getProductScalcMap(floorData.floorContent.templateType).scalc[index]">
+                                        <a target="_blank"
+                                           :href="reallink(floorData.floorContent['adsLink' + (index + 1)])">
+                                            <img
+                                                    width="100%"
+                                                    height="100%"
+                                                    :src="floorData.floorContent['appletsAdsImage' + (index + 1)]"
+                                                    alt="/banner.jpg"
+                                                    v-if="isMobile"
+                                            />
+                                            <img
+                                                    width="100%"
+                                                    height="100%"
+                                                    :src="floorData.floorContent['pcAdsImage' + (index + 1)]"
+                                                    alt="/banner.jpg"
+                                                    v-else
+                                            />
+                                        </a>
+                                    </div>
+                                </div>
+                            </template>
+                            <!-- banner END -->
+                            <div class="cm-col-md-10 cm-col-xs-30" v-for="(pros , index) in makeList(floorData,index)">
+                                <div class="cm-p-a-4">
+                                    <a target="_blank" :href="pros.link">
+                                        <div class="cm-product-item hover-class bg-white">
+                                            <div class="aspect">
+                                                <img width="100%" height="100%" src="/img/activity/placeholder.png"
+                                                     :data-original="pros.image" alt=""/>
+                                            </div>
+                                            <div class="cm-p-l-8 cm-p-r-8 cm-p-t-8 cm-p-b-4">
+                                                <div class="cm-tags cm-p-b-2">
+                                                    <span class="cm-tag color1" v-if="pros.listType == 2">{{ pros.label }}</span>
+                                                </div>
+                                                <div class="cm-product-title cm-text-ellipsis-2 h44">
+                                                    <span class="cm-meibohui-tag"
+                                                          v-if="pros.product!=null && pros.product.beautyActFlag==1">美博会</span>
+                                                    {{pros.name}}
+                                                </div>
+                                                <div class="cm-tags cm-p-t-2 cm-p-b-2 h20">
+<!--                                                     <span class="cm-tag color3" v-if="pros.product.couponsLogo">优惠券</span>-->
+                                                    <span class="cm-tag color2" v-if="pros.listType == 2">{{ pros.label }}</span>
+                                                </div>
+                                                <div class="cm-prodcut-price h24">
+                                                    <div class="pro-price cm-clearfix" v-if="pros.listType == 1">
+                                                        <template v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0">
+                                                            <template v-if="pros.product.productCategory != 1">
+                                                                <!-- 样式1 价格未公开-->
+                                                                <template v-if="pros.product.priceFlag == 1">
+                                                                    <div class="price-tag cm-left">
+                                                                            <span class="tag"
+                                                                                  v-if="pros.product.actStatus == 1">{{pros.product.promotions.name}}</span>
+                                                                    </div>
+                                                                    <div class="price cm-left">¥价格未公开</div>
+                                                                </template>
+                                                                <template v-else>
+                                                                    <!-- 样式2-->
+                                                                    <template
+                                                                            v-if="(pros.product.priceFlag==0 && pros.product.userIdentity!=3) || pros.product.userIdentity==2 || (pros.product.userIdentity==3 && pros.product.shopID==GLOBAL_SHOP_ID)">
+                                                                        <div class="price-tag  cm-left">
+                                                                                <span class="tag"
+                                                                                      v-if="pros.product.actStatus==1">
+                                                                                  {{pros.product.promotions.name}}
+                                                                                  <span class="red"
+                                                                                        v-if="pros.priceFlag != 1 && PromotionsFormat(pros.product.promotions)">:¥{{pros.product.price | NumFormat}}</span>
+                                                                                </span>
+                                                                        </div>
+                                                                        <div class="price  cm-left"
+                                                                             :class="PromotionsFormat(pros.product.promotions) ? 'none' : ''">
+                                                                                <span class="red">
+                                                                                  ¥{{(PromotionsFormat(pros.product.promotions) ? pros.product.originalPrice
+                                                                                  : pros.product.price) | NumFormat }}
+                                                                                </span>
+                                                                        </div>
+                                                                    </template>
+                                                                    <!-- 样式3 -->
+                                                                    <template
+                                                                            v-else-if="pros.product.priceFlag==2 && pros.product.userIdentity==4">
+                                                                        <div class="price-tag cm-left"
+                                                                             v-if="pros.product.actStatus==1">
+                                                                            <span class="tag">{{pros.product.promotions.name}}</span>
+                                                                        </div>
+                                                                        <div class="price cm-left"><span>¥会员可见</span>
+                                                                        </div>
+                                                                    </template>
+                                                                    <!-- 样式4 -->
+                                                                    <template v-else>
+                                                                        <div class="price-tag cm-left"
+                                                                             v-if="pros.product.actStatus==1">
+                                                                            <span class="tag">{{pros.product.promotions.name}}</span>
+                                                                        </div>
+                                                                        <div class="price cm-left"><span>¥</span>
+                                                                            <span class="p-icon"
+                                                                                  :class="'i'+pros.product.priceGrade"></span>
+                                                                        </div>
+                                                                    </template>
+                                                                </template>
+                                                            </template>
+                                                            <!-- 样式5 -->
+                                                            <template v-else>
+                                                                <div class="price-tag cm-left"></div>
+                                                                <div class="price"
+                                                                     v-if="pros.product.detailTalkFlag == '2'">¥价格详聊
+                                                                </div>
+                                                                <div class="price cm-left" v-else>
+                                                                    <span class="red">¥{{ pros.product.price | NumFormat }}</span>
+                                                                </div>
+                                                            </template>
+                                                        </template>
+                                                        <template v-else>
+                                                            <!-- 样式6 -->
+                                                            <template v-if="pros.product.productCategory == 1">
+                                                                <div class="price-tag cm-left" v-if="params.userId>0">
+                                                                        <span class="tag"
+                                                                              v-if="pros.product.actStatus==1">{{pros.product.promotions.name}}</span>
+                                                                </div>
+                                                                <div class="price cm-left ">
+                                                                    <span>¥</span>
+                                                                    <span class="p-icon"
+                                                                          :class="'i'+pros.product.priceGrade"></span>
+                                                                </div>
+                                                            </template>
+                                                            <!-- 样式7 -->
+                                                            <template v-else>
+                                                                <div class="price-tag cm-left"></div>
+                                                                <div class="price  cm-left"><span>¥登录可见</span></div>
+                                                            </template>
+                                                        </template>
+                                                    </div>
+
+                                                </div>
+                                            </div>
+                                        </div>
+                                    </a>
+                                </div>
+                            </div>
+                            <template v-for="(i,index) in 5">
+                                <div
+                                        class="cm-p-a-4"
+                                        :class="[ 'cm-col-md-'+ getProductScalcMap(floorData.floorContent.templateType).col[index],  'cm-col-xs-'+ getProductScalcMap(floorData.floorContent.templateType).col[index]]"
+                                        v-if="floorData.floorContent.templateType == 20"
+                                >
+                                    <div class="aspect"
+                                         :data-scalc="getProductScalcMap(floorData.floorContent.templateType).scalc[index]">
+                                        <a target="_blank"
+                                           :href="reallink(floorData.floorContent['adsLink' + (index + 1)])">
+                                            <img
+                                                    width="100%"
+                                                    height="100%"
+                                                    :src="floorData.floorContent['appletsAdsImage' + (index + 1)]"
+                                                    alt="/banner.jpg"
+                                                    v-if="isMobile"
+                                            />
+                                            <img
+                                                    width="100%"
+                                                    height="100%"
+                                                    :src="floorData.floorContent['pcAdsImage' + (index + 1)]"
+                                                    alt="/banner.jpg"
+                                                    v-else
+                                            />
+                                        </a>
+                                    </div>
+                                </div>
+                            </template>
+                        </div>
+                        <div class="cm-btn-box cm-p-t-12" v-if="showToggleBtn(floorData,index)">
+                            <div
+                                    class="cm-toggle-btn"
+                                    :class="toggleState(floorData.floorContent.templateType, index) ? 'up':'down'"
+                                    @click="toggleMore(floorData.floorContent.templateType, index)"
+                            >
+                                查看更多
+                            </div>
+                        </div>
+                    </div>
+                </template>
+                <!-- 文章楼层3-6 -->
+                <!-- fetchTemplate([3,4,5,6],floorData.floorContent.templateType) -->
+                <template v-if="fetchTemplate([3,4,5,6],floorData.floorContent.templateType)">
+                    <!-- 轮播式 pc -->
+                    <div class="cm-row cm-relative cm-swiper" v-show="!isMobile">
+                        <div class="cm-p-a-4">
+                            <template v-if="fetchTemplate([4,5],floorData.floorContent.templateType)">
+                                <div class="cm-swiper-button-prev cm-absolute cm-pc-only"
+                                     @click="handlePrevClick(index)"></div>
+                                <div class="cm-swiper-button-next cm-absolute cm-pc-only"
+                                     @click="handleNextClick(index)"></div>
+                            </template>
+                            <div
+                                    class="swiper-container"
+                                    :class="{'no-bottom':fetchTemplate([4,5],floorData.floorContent.templateType)}"
+                                    :id="'swiper-template-' + index"
+                                    :data-swiper-type="getArticleScalcMap(floorData.floorContent.templateType).swiper"
+                            >
+                                <div class="swiper-wrapper">
+                                    <div class="swiper-slide" v-for="(item, item_index) in floorData.floorImageList"
+                                         :key="item_index">
+                                        <a target="_blank" :href="reallink(item.link)">
+                                            <!-- 模板3 -->
+                                            <div
+                                                    class="cm-article-item h200 bg-white cm-p-a-8 cm-flex-j-between"
+                                                    v-if="floorData.floorContent.templateType == 3"
+                                            >
+                                                <div class="cm-left cm-article-cover cover-168-168">
+                                                    <img width="100%" height="100%" :src="item.appletsImage"
+                                                         :alt="item.name" v-if="isMobile"/>
+                                                    <img width="100%" height="100%" :src="item.image" :alt="item.name"
+                                                         v-else/>
+                                                </div>
+                                                <div class="cm-right cm-article-content cm-p-l-8 cm-flex-1">
+                                                    <div class="cm-article-title cm-m-b-10 cm-text-ellipsis-1">
+                                                        {{item.name}}
+                                                    </div>
+                                                    <div class="cm-line"></div>
+                                                    <div class="cm-article-desc cm-m-t-10 cm-text-ellipsis-4">
+                                                        {{item.content}}
+                                                    </div>
+                                                </div>
+                                            </div>
+                                            <!-- 模板4 5 6 -->
+                                            <div class="cm-article-item bg-white" v-else>
+                                                <div class="cm-article-cover aspect"
+                                                     :data-scalc="getArticleScalcMap(floorData.floorContent.templateType).scalc">
+                                                    <img width="100%" height="100%" :src="item.appletsImage"
+                                                         :alt="item.name" v-if="isMobile"/>
+                                                    <img width="100%" height="100%" :src="item.image" :alt="item.name"
+                                                         v-else/>
+                                                </div>
+                                                <div class="cm-article-title has-border cm-m-t-8 cm-m-r-8 cm-m-b-8 cm-p-l-6 cm-text-ellipsis-1">
+                                                    {{item.name}}
+                                                </div>
+                                                <div class="cm-m-a-8">
+                                                    <div class="cm-article-desc cm-text-ellipsis-2 h56">
+                                                        {{item.content}}
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        </a>
+                                    </div>
+                                </div>
+                                <!-- Add Pagination -->
+                                <div class="swiper-pagination"
+                                     v-show="isMobile || !fetchTemplate([4,5],floorData.floorContent.templateType)"></div>
+                                <!-- Add Navigation -->
+                                <div class="swiper-button-prev swiper-button-white cm-none"></div>
+                                <div class="swiper-button-next swiper-button-white cm-none"></div>
+                            </div>
+                        </div>
+                    </div>
+                    <!-- 列表式 mobile 3 4 6 -->
+                    <div class="cm-row"
+                         v-show="isMobile && fetchTemplate([3,4,6],floorData.floorContent.templateType)">
+                        <div class="fold-box cm-clearfix"
+                             :data-floor-type="floorData.floorContent.templateType + '-' + index">
+                            <div
+                                    class="cm-col-md-30"
+                                    :class="floorData.floorContent.templateType == 6 ? 'cm-col-xs-30' : 'cm-col-xs-60'"
+                                    v-for="(item, item_index) in makeList(floorData,index)"
+                                    :key="item_index"
+                            >
+                                <a target="_blank" :href="reallink(item.link)">
+                                    <div class="cm-p-a-4">
+                                        <!-- 3 -->
+                                        <div
+                                                class="cm-article-item h200 bg-white cm-p-a-8 cm-flex-j-between"
+                                                v-if="floorData.floorContent.templateType == 3"
+                                        >
+                                            <div class="cm-left cm-article-cover cover-168-168">
+                                                <img width="100%" height="100%" :src="item.appletsImage"
+                                                     :alt="item.name" v-if="isMobile"/>
+                                                <img width="100%" height="100%" :src="item.image" :alt="item.name"
+                                                     v-else/>
+                                            </div>
+                                            <div class="cm-right cm-article-content cm-p-l-8 cm-flex-1">
+                                                <div class="cm-article-title cm-m-b-10 cm-text-ellipsis-1">
+                                                    {{item.name}}
+                                                </div>
+                                                <div class="cm-line"></div>
+                                                <div class="cm-article-desc cm-m-t-10 cm-text-ellipsis-4">
+                                                    {{item.content}}
+                                                </div>
+                                            </div>
+                                        </div>
+                                        <!-- 4 6  -->
+                                        <div class="cm-article-item bg-white" v-else>
+                                            <div class="cm-article-cover aspect"
+                                                 :data-scalc="getArticleScalcMap(floorData.floorContent.templateType).scalc">
+                                                <img width="100%" height="100%" :src="item.appletsImage"
+                                                     :alt="item.name" v-if="isMobile"/>
+                                                <img width="100%" height="100%" :src="item.image" :alt="item.name"
+                                                     v-else/>
+                                            </div>
+                                            <div class="cm-article-title has-border cm-m-t-8 cm-m-r-8 cm-m-b-8 cm-p-l-6 cm-text-ellipsis-1">
+                                                {{item.name}}
+                                            </div>
+                                            <div class="cm-m-a-8">
+                                                <div class="cm-article-desc cm-text-ellipsis-2 h56">{{item.content}}
+                                                </div>
+                                            </div>
+                                        </div>
+                                    </div>
+                                </a>
+                            </div>
+                        </div>
+                        <!-- 查看更多 v-if="showToggleBtn(floorData,index)"-->
+                        <div class="cm-btn-box cm-p-t-12" v-if="showToggleBtn(floorData,index)">
+                            <div
+                                    class="cm-toggle-btn"
+                                    :class="toggleState(floorData.floorContent.templateType, index) ? 'up':'down'"
+                                    @click="toggleMore(floorData.floorContent.templateType, index)"
+                            >
+                                查看更多
+                            </div>
+                        </div>
+                    </div>
+                    <!-- 左右滑动式 mobile 5-->
+                    <div class="cm-row" v-show="isMobile && floorData.floorContent.templateType == 5">
+                        <div class="cm-p-a-4">
+                            <div class="cm-scroll-container">
+                                <div class="cm-scroll-item" v-for="(item, item_index) in floorData.floorImageList"
+                                     :key="item_index">
+                                    <a target="_blank" :href="reallink(item.link)">
+                                        <div class="cm-article-item bg-white">
+                                            <div class="cm-article-cover aspect"
+                                                 :data-scalc="getArticleScalcMap(floorData.floorContent.templateType).scalc">
+                                                <img width="100%" height="100%" :src="item.appletsImage"
+                                                     :alt="item.name" v-if="isMobile"/>
+                                                <img width="100%" height="100%" :src="item.image" :alt="item.name"
+                                                     v-else/>
+                                            </div>
+                                            <div class="cm-article-title has-border cm-m-t-8 cm-m-r-8 cm-m-b-8 cm-p-l-6 cm-text-ellipsis-1">
+                                                {{item.name}}
+                                            </div>
+                                            <div class="cm-m-a-8">
+                                                <div class="cm-article-desc cm-text-ellipsis-2 h56">{{item.content}}
+                                                </div>
+                                            </div>
+                                        </div>
+                                    </a>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </template>
+                <!-- 图片楼层1 2 7 8 9 10  -->
+                <!-- fetchTemplate([1,2,7,8,9,10],floorData.floorContent.templateType) -->
+                <template v-if="fetchTemplate([1,2,7,8,9,10,26,27,28,29],floorData.floorContent.templateType)">
+                    <!-- 轮播式 mobile(1 2 9) pc(全部)-->
+                    <div
+                            class="cm-row cm-relative cm-swiper"
+                            v-show="!isMobile || (fetchTemplate([1,2,9,26,28,29],floorData.floorContent.templateType) && isMobile)"
+                    >
+                        <div class="cm-p-a-4">
+                            <template v-if="fetchTemplate([7,8,10],floorData.floorContent.templateType)">
+                                <div class="cm-swiper-button-prev cm-absolute" @click="handlePrevClick(index)"></div>
+                                <div class="cm-swiper-button-next cm-absolute" @click="handleNextClick(index)"></div>
+                            </template>
+                            <div
+                                    class="swiper-container"
+                                    :id="'swiper-template-' + index"
+                                    :class="{'no-bottom':fetchTemplate([7,8,10],floorData.floorContent.templateType)}"
+                                    :data-swiper-type="getImageScalcMap(floorData.floorContent.templateType).swiper"
+                            >
+                                <div class="swiper-wrapper">
+                                    <div class="swiper-slide" v-for="(item, item_index) in floorData.floorImageList"
+                                         :key="item_index">
+                                        <div
+                                                class="bg-white hover-class aspect cm-relative"
+                                                :data-scalc="getImageScalcMap(floorData.floorContent.templateType).scalc"
+                                        >
+                                            <a target="_blank" :href="reallink(item.link)">
+                                                <img width="100%" height="100%" :src="item.appletsImage" alt=""
+                                                     v-if="isMobile"/>
+                                                <img width="100%" height="100%" :src="item.image" alt="" v-else/>
+                                                <div class="has-player"
+                                                     v-if="floorData.floorContent.templateClassify == 4"></div>
+                                            </a>
+                                        </div>
+                                    </div>
+                                </div>
+                                <!-- Add Pagination -->
+                                <div class="swiper-pagination"
+                                     v-show="isMobile || !fetchTemplate([7,8,10],floorData.floorContent.templateType)"></div>
+                                <!-- Add Navigation -->
+                                <div class="swiper-button-prev swiper-button-white cm-none"></div>
+                                <div class="swiper-button-next swiper-button-white cm-none"></div>
+                            </div>
+                        </div>
+                    </div>
+                    <!-- 列表式 mobile 8 10 -->
+                    <div class="cm-row" v-show="fetchTemplate([8,10],floorData.floorContent.templateType) && isMobile">
+                        <div class="fold-box cm-clearfix"
+                             :data-floor-type="floorData.floorContent.templateType + '-' + index">
+                            <div class="cm-col-md-30 cm-col-xs-60">
+                                <div class="cm-p-a-4" v-for="(item, item_index) in makeList(floorData,index)"
+                                     :key="item_index">
+                                    <div class="bg-white aspect"
+                                         :data-scalc="getImageScalcMap(floorData.floorContent.templateType).scalc">
+                                        <a target="_blank" :href="reallink(item.link)">
+                                            <img width="100%" height="100%" :src="item.appletsImage" alt=""
+                                                 v-if="isMobile"/>
+                                            <img width="100%" height="100%" :src="item.image" alt="" v-else/>
+                                        </a>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                        <!-- 查看更多 v-if="showToggleBtn(floorData,index)"-->
+                        <div class="cm-btn-box cm-p-t-12" v-if="showToggleBtn(floorData,index)">
+                            <div
+                                    class="cm-toggle-btn"
+                                    :class="toggleState(floorData.floorContent.templateType, index) ? 'up':'down'"
+                                    @click="toggleMore(floorData.floorContent.templateType, index)"
+                            >
+                                查看更多
+                            </div>
+                        </div>
+                    </div>
+                    <!-- 左右滑动式 mobile 7-->
+                    <div class="cm-row" v-show="fetchTemplate([7,27],floorData.floorContent.templateType) && isMobile">
+                        <div class="cm-p-a-4">
+                            <div class="cm-scroll-container">
+                                <div class="cm-scroll-item" v-for="(item, item_index) in floorData.floorImageList"
+                                     :key="item_index">
+                                    <div class="bg-white aspect cm-relative"
+                                         :data-scalc="getImageScalcMap(floorData.floorContent.templateType).scalc">
+                                        <a target="_blank" :href="reallink(item.link)">
+                                            <img width="100%" height="100%" :src="item.appletsImage" alt=""
+                                                 v-if="isMobile"/>
+                                            <img width="100%" height="100%" :src="item.image" alt="" v-else/>
+                                            <div class="has-player"
+                                                 v-if="floorData.floorContent.templateClassify == 4"></div>
+                                        </a>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </template>
+                <!-- 直播楼层22 23 24 25 -->
+                <!-- v-if="fetchTemplate([22,23,24,25],floorData.floorContent.templateType)" -->
+                <template v-if="fetchTemplate([22,23,24,25],floorData.floorContent.templateType)">
+                    <!-- 轮播式 && tab切换 22 24 25 -->
+                    <!-- 选项卡 -->
+                    <div class="cm-row"
+                         v-show="!isMobile || (fetchTemplate([22,24,25],floorData.floorContent.templateType) && isMobile)">
+                        <div class="cm-p-a-4">
+                            <div class="cm-relative cm-swiper">
+                                <template v-for="(i,i_index) in 3">
+                                    <div v-show="currentVideoSwiper(floorData.floorContent.templateType,index) === i_index">
+                                        <div
+                                                class="swiper-container"
+                                                :id="'swiper-template-' + index + '-' + floorData.floorContent.templateType + '-' + i_index"
+                                                :data-swiper-type="getVideoScalcMap(floorData.floorContent.templateType).swiper"
+                                        >
+                                            <div class="swiper-wrapper">
+                                                <div
+                                                        class="swiper-slide"
+                                                        v-for="(item, item_index) in floorData[getFloorImageListType(i_index)]"
+                                                        :key="item_index"
+                                                >
+                                                    <div
+                                                            class="bg-white aspect cm-relative"
+                                                            :data-scalc="getVideoScalcMap(floorData.floorContent.templateType).scalc"
+                                                    >
+                                                        <a target="_blank" :href="reallink(item.link)">
+																<span
+                                                                        class="cm-cover-tag color1 cm-absolute cm-top-right"
+                                                                        v-if="makeVideoStatus(floorData,i_index + 1) === 2"
+                                                                >已结束</span
+                                                                >
+                                                            <span
+                                                                    class="cm-cover-tag color2 cm-absolute cm-top-right"
+                                                                    v-if="makeVideoStatus(floorData,i_index + 1) === 0"
+                                                            >未开始</span
+                                                            >
+                                                            <span
+                                                                    class="cm-cover-tag color3 cm-absolute cm-top-right"
+                                                                    v-if="makeVideoStatus(floorData,i_index + 1) === 1"
+                                                            >已开始</span
+                                                            >
+                                                            <img width="100%" height="100%" :src="item.appletsImage"
+                                                                 alt="" v-if="isMobile"/>
+                                                            <img width="100%" height="100%" :src="item.image" alt=""
+                                                                 v-else/>
+                                                        </a>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                            <!-- Add Pagination -->
+                                            <div class="swiper-pagination"></div>
+                                            <!-- Add Navigation -->
+                                            <div class="swiper-button-prev swiper-button-white cm-none"></div>
+                                            <div class="swiper-button-next swiper-button-white cm-none"></div>
+                                        </div>
+                                    </div>
+                                </template>
+                            </div>
+                        </div>
+                    </div>
+                    <!-- 左右滑动式 mobile 23-->
+                    <div class="cm-row" v-show="isMobile && floorData.floorContent.templateType == 23">
+                        <div class="cm-p-a-4">
+                            <template v-for="(i,i_index) in 3">
+                                <div class="cm-scroll-container"
+                                     v-if="currentVideoSwiper(floorData.floorContent.templateType,index) === i_index">
+                                    <div class="cm-scroll-item"
+                                         v-for="(item, item_index) in floorData[getFloorImageListType(i_index)]">
+                                        <div
+                                                class="bg-white aspect cm-relative cm-radius-4"
+                                                :data-scalc="getVideoScalcMap(floorData.floorContent.templateType).scalc"
+                                        >
+                                            <a target="_blank" :href="reallink(item.link)">
+                                                <span class="cm-cover-tag color2 cm-absolute cm-top-right">已开始</span>
+                                                <img width="100%" height="100%" :src="item.appletsImage" alt=""
+                                                     v-if="isMobile"/>
+                                                <img width="100%" height="100%" :src="item.image" alt="" v-else/>
+                                            </a>
+                                        </div>
+                                    </div>
+                                </div>
+                            </template>
+                        </div>
+                    </div>
+                </template>
+            </div>
+        </div>
+    </template>
+    <!-- 侧边浮窗 -->
+    <div class="cm-float-container" v-if="activityEntryVisiable || contactVisiable">
+        <div class="cm-slide" v-show="activityEntryVisiable">
+            <div class="cm-toggle-btn" @click="handleToggleActive(true)"></div>
+        </div>
+        <template v-if="contactVisiable">
+            <div class="cm-slide">
+                <div class="cm-toggle-btn"></div>
+                <div class="cm-tooltop">
+                    <div class="cm-tooltop-content cm-tooltop-1">
+                        <div class="cm-item">展会咨询电话:15338851365</div>
+                        <i></i>
+                        <div class="cm-item">业务咨询电话:15338897365</div>
+                    </div>
+                </div>
+            </div>
+            <div class="cm-slide">
+                <div class="cm-toggle-btn"></div>
+                <div class="cm-tooltop">
+                    <div class="cm-tooltop-content cm-tooltop-2 cm-clearfix">
+                        <div class="cm-item cm-left">
+                            <img width="108" height="108" src="https://static.caimei365.com/app/img/icon2/cm_wechat_01.png" alt=""/>
+                            <span>展会咨询微信</span>
+                        </div>
+                        <div class="cm-left line"></div>
+                        <div class="cm-item cm-left">
+                            <img width="108" height="108" src="https://static.caimei365.com/app/img/icon2/cm_wechat_02.png" alt=""/>
+                            <span>业务咨询微信</span>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </template>
+    </div>
+    <!-- 获取入口图标 -->
+    <div class="cm-entry" v-show="activityEntryVisiable && isActive">
+        <div class="cm-icon-content">
+            <span class="cm-close" @click="handleToggleActive(false)"></span>
+            <a id="entry" target="_blank" href="/user/coupon-collection.html"
+               onclick="_czc.push(['_trackEvent','云上美博会','点击','红包优惠券','1','entry'])">
+                <img src="https://static.caimei365.com/app/img/icon2/pc_icon.png" alt=""/>
+            </a>
+        </div>
+    </div>
+    <!-- 返回顶部 -->
+    <div class="cm-to-top" id="cm-to-top" v-show="showScrollTop">
+        <span class="cm-icon-bar"></span>
+        <span class="cm-icon-bar"></span>
+        <span class="cm-icon-bar"></span>
+    </div>
+    <!-- loading动画 -->
+    <div class="cm-loading" v-if="isLoading"></div>
+    <!--  底部  -->
+    <div class="cm-footer">
+        <img src="/img/activity/pc_bottom.png" alt=""/>
+        <p>——&nbsp;&nbsp;深圳市采美信息技术有限公司提供技术支持&nbsp;&nbsp;——</p>
+    </div>
+</div>
+<!-- 引入js文件 -->
+<script charset="utf-8" type="text/javascript" src="/lib/jquery-3.5.1.min.js"></script>
+<script charset="utf-8" type="text/javascript" src="/lib/vue2.6.12.min.js"></script>
+<script charset="utf-8" src="/js/activity/swiper.min.js"></script>
+<script charset="utf-8" type="text/javascript" src="/lib/lazyload.js"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/common/ajax.service.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/activity/base.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript"
+        th:src="@{/js/common/serviceapi/product.service.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/activity/utils.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/activity/layout.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/activity/mixin.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/activity/index.js(v=${version})}"></script>
+<script>
+    var isFormal = window.location.href.indexOf('www.caimei365.com') !== -1;
+    if (isFormal) {
+        document.write(unescape("%3Cspan id='cnzz_stat_icon_1279558759'%3E%3C/span%3E%3Cscript src='https://s9.cnzz.com/z_stat.php%3Fid%3D1279558759%26show%3Dpic' type='text/javascript'%3E%3C/script%3E"));
+        var _czc = _czc || [];
+        _czc.push(["_setAccount", "1279558759"]);
+    }
+    $('#cm-to-top').on("click", function () {
+        $("html,body").animate({scrollTop: 0}, 500);
+    });
+</script>
+</body>
+</html>

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

@@ -110,7 +110,7 @@
     <div class="baseTopNav">
         <div class="wrap clear">
             <div class="baseTopNav_nav">
-                <a class="classBtn nav on" href="javascript:void(0);">分类展示</a>
+                <a class="classBtn nav on" href="javascript:void(0);">商品分类</a>
                 <a class="home nav" href="/">首页</a>
                 <div class="navBox">
                     <ul class="clear">

+ 13 - 15
src/main/resources/templates/index.html

@@ -165,6 +165,7 @@
                                                 <!-- 正常商品 -->
                                                 <template v-if="pros.product.productCategory == 1">
                                                     <div class="price_text_tag">
+<!--                                                        <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                                         <p class="listTag" v-if="pros.product.actStatus ==1 && pros.product.promotions">
                                                             <span v-text="pros.product.promotions.name"></span>
                                                             <template v-if="PromotionsFormat(pros.product.promotions)">
@@ -181,7 +182,7 @@
                                                         <template v-else>
                                                             <template v-if="PromotionsFormat(pros.product.promotions)">
                                                                 <!--单品优惠时的划线价-->
-                                                                <div class="main_price_show">
+                                                                <div class="main_price_show none">
                                                                     ¥<span class="price_o_num">{{ pros.product.originalPrice | NumFormat }}</span>
                                                                 </div>
                                                             </template>
@@ -200,7 +201,6 @@
                                                                     <span class="bold">¥</span><i :class="'icon mIcon price_grade_'+pros.product.priceGrade"></i>
                                                                 </em>
                                                             </template>
-
                                                         </template>
                                                     </div>
                                                 </template>
@@ -289,7 +289,7 @@
                                                         <div th:attr="class=*{'main_price_text product_'+productId}, data-id=*{productId}">
                                                             <!-- 正常商品 -->
                                                             <th:block th:if="*{productCategory}==1">
-                                                                <div class="price_text_tag" th:if="${pros.get('product').containsKey('actStatus')}">
+                                                                <div class="price_text_tag">
                                                                     <p class="listTag" th:if="*{actStatus}==1 and ${pros.get('product').get('promotions')}!=null">
                                                                         <template th:text="*{promotions.name}"></template>
                                                                         <th:block th:if="*{promotions.type}==1 and *{promotions.mode}==1">
@@ -313,7 +313,6 @@
                                                 </div>
                                             </a>
                                         </th:block>
-
                                         <!-- 广告图 -->
                                         <th:block th:if="*{templateType}==6">
                                             <a th:href="*{#strings.isEmpty(adsLink1)}? 'javascript:;' : *{adsLink1}" th:attr="target=(*{#strings.isEmpty(adsLink1)} ? '_self' : '_blank')" class="page_main_item ad_01">
@@ -357,17 +356,16 @@
             <a class="item-sideNav" href="javascript:void(0);" v-for="nav in asideNav" :data-id="nav.id" v-text="nav.value" ></a>
         </div>
     </div>
-    <!--美博会弹窗-->
-<!--    <div id="meibohui" class="Popup" v-if="popupFlag" :class="popupFlag ? 'show' :'' "-->
-<!--         onclick="_czc.push(['_trackEvent','美博会','点击','用户访问','','meibohui'])">-->
-<!--        <div class="show_popup">-->
-<!--            <div class="bg_icon" @click="closePopup"><i class="icon mIcon"></i></div>-->
-<!--            <div class="bg_img" @click="popupPage">-->
-<!--                <img src="https://static.caimei365.com/app/meibohui/www/activity-pop-pc.png" v-if="isPC">-->
-<!--                <img src="https://static.caimei365.com/app/meibohui/www/activity-pop-h5.png" v-else>-->
-<!--            </div>-->
-<!--        </div>-->
-<!--    </div>-->
+    <!--新用户优惠券弹窗-->
+    <div id="meibohui" class="Popup" v-if="popupFlag" :class="popupFlag ? 'show' :'' ">
+        <div class="show_popup">
+            <div class="bg_icon" @click="closePopup"><i class="icon mIcon"></i></div>
+            <div class="bg_img" @click="popupPage">
+                <img src="https://static.caimei365.com/app/meibohui/www/coupon-pop-pc.png" v-if="isPC">
+                <img src="https://static.caimei365.com/app/meibohui/www/coupon-pop-h5.png" v-else>
+            </div>
+        </div>
+    </div>
 </div>
 <!-- 引入底部 -->
 <template th:replace="components/footer"></template>

+ 5 - 0
src/main/resources/templates/product/beautytopic.html

@@ -101,6 +101,7 @@
                                                     <!--价格未公开-->
                                                     <div class="main_price_text">
                                                         <div class="price_text_tag">
+<!--															<p class="couponTag" v-if="pros.couponsLogo">优惠券</p>-->
                                                             <p class="listTag" v-if="pros.actStatus==1">{{pros.promotions.name}}</p>
                                                         </div>
                                                         <div class="main_price_unde">¥价格未公开</div>
@@ -111,6 +112,7 @@
                                                     <template v-if="(pros.price1TextFlag==0 && pros.userIdentity!=3) || pros.userIdentity==2 || (pros.userIdentity==3 && pros.shopID==GLOBAL_SHOP_ID)">
                                                         <div class="main_price_text" v-if="pros.productCategory == 1">
                                                             <div class="price_text_tag">
+<!--																<p class="couponTag" v-if="pros.couponsLogo">优惠券</p>-->
                                                                 <p class="listTag" v-if="pros.actStatus==1">
                                                                     {{pros.promotions.name}}
                                                                     <span v-if="pros.priceFlag != 1">:¥{{pros.retailPrice | NumFormat}}</span>
@@ -125,6 +127,7 @@
                                                     <template v-else-if="pros.price1TextFlag==2 && pros.userIdentity==4">
                                                         <div class="main_price_text">
                                                             <div class="price_text_tag">
+<!--																<p class="couponTag" v-if="pros.couponsLogo">优惠券</p>-->
                                                                 <p class="listTag" v-if="pros.actStatus==1">{{pros.promotions.name}}</p>
                                                             </div>
                                                             <div class="main_price_unde">¥会员可见</div>
@@ -132,6 +135,7 @@
                                                     </template>
                                                     <template v-else>
                                                         <div class="price_text_tag">
+<!--															<p class="couponTag" v-if="pros.couponsLogo">优惠券</p>-->
                                                             <p class="listTag" v-if="pros.actStatus==1">{{pros.promotions.name}}</p>
                                                         </div>
                                                         <div class="main_price_none">
@@ -155,6 +159,7 @@
                                         <template v-else>
                                             <template v-if="pros.productCategory == 1">
                                                 <div class="price_text_tag ">
+<!--													<p class="couponTag" v-if="pros.couponsLogo">优惠券</p>-->
                                                     <p class="listTag" v-if="pros.actStatus==1">{{pros.promotions.name}}</p>
                                                 </div>
                                                 <div class="main_price_none">

+ 54 - 1
src/main/resources/templates/product/detail.html

@@ -13,7 +13,7 @@
 <template th:replace="components/header"></template>
 
 <!-- 商品详情 -->
-<div id="productDetail" v-show="showProduct">
+<div id="productDetail" v-show="showProduct" v-cloak>
     <input type="hidden" th:value="${productId}" id="productId">
     <input type="hidden" th:value="${product?.stock}" id="productStock">
     <input type="hidden" th:value="${product?.visibility}" id="productVisibility">
@@ -23,11 +23,13 @@
                 <div v-if="isPC" class="bigImage">
                     <img :src="images[0]">
                     <span class="mask"></span>
+                    <span class="cm-product-cover-tag">云上美博会</span>
                 </div>
                 <div id="swiperImage" class="smallImage swiper-container">
                     <ul class="swiper-wrapper clear">
                         <li class="swiper-slide mfc" v-for="img in images">
                             <img :src="img">
+                            <span class="cm-product-cover-tag" v-if="!isPC">云上美博会</span>
                         </li>
                     </ul>
                     <div class="swiper-pagination mfc"></div>
@@ -138,6 +140,14 @@
                             </div>
                         </template>
                     </div>
+                    <div class="row" v-if="productCoupon.length>0">
+                        <span class="l">优惠券</span>
+                        <i>:</i>
+                        <span class="coupon-tags">
+                            <em class="couponTag" v-for="(coupon, index) in productCoupon" :key="index">满{{ coupon.touchPrice }}减{{ coupon.couponAmount }} </em>
+                            <em class="couponTag-more" @click="showPopup">更多></em>
+                        </span>
+                    </div>
                     <div th:if="not${#strings.isEmpty(product.brandName)}" class="row"><span class="l">品牌</span><i>:</i><em th:text="*{brandName}"></em></div>
                     <div class="row" th:if="not${#strings.isEmpty(product.unit)}"><span class="l">包装规格</span><i>:</i><em th:text="*{unit}"></em></div>
                     <div class="row" th:if="not${#strings.isEmpty(product.productCode)}"><span class="l">商品编码</span><i>:</i><em th:text="*{productCode}"></em></div>
@@ -290,6 +300,49 @@
                 </div>
             </div>
         </div>
+        <!--优惠券弹窗-->
+        <div class="coupon-popup" v-show="isShowPopup" :class="isShowPopup ? 'show' : 'hide'">
+            <div class="coupon-popup-model-content">
+                <div class="title"><p>优惠券</p><i class="icon mIcon" @click="hidePopup"></i></div>
+                <div class="coupon-popup-main">
+                    <div class="coupon-popup-tabs">
+                        <div class="popup-tabs-cell" :class="currentTab == 1 ? 'active' : ''" @click="queryCouponTabs(1)"><span>未领取</span></div>
+                        <div class="popup-tabs-cell" :class="currentTab == 2 ? 'active' : ''" @click="queryCouponTabs(2)"><span>已领取</span></div>
+                    </div>
+                    <div class="coupon-popup-content">
+                        <div class="empty" v-if="isCouponEmpty">
+                            <img src="/img/account/icon-coupon-empty@2x.png">
+                            <div class="msg"><p>暂无可领的优惠券</p></div>
+                        </div>
+                        <div class="coupon-popup-scroll" v-else>
+                            <div class="coupon-list-cell" v-for="(coupon, index) in productCouponList" :key="index" :class="currentTab == 2 ? 'none' : ''">
+                                <div class="coupon-list-le">
+                                    <div class="coupon-list-money">
+                                        <p>¥<span class="maxMoney">{{ coupon.couponAmount }}</span><span class="minMoney">满{{ coupon.touchPrice }}可用</span></p>
+                                    </div>
+                                    <div class="coupon-list-name">
+                                        <p v-if="coupon.couponType == 0">
+                                            {{ coupon.productType && coupon.productType == 1 ? '全商城商品通用' : '仅可购买指定商品'  }}
+                                        </p>
+                                        <p v-if="coupon.couponType == 1">
+                                            {{ coupon.categoryType == 1 ? '仅限购买产品类商品' : '仅限购买仪器类商品' }}
+                                        </p>
+                                        <p v-if="coupon.couponType == 3">仅限购买店铺【{{ coupon.shopName }}】的商品</p>
+                                        <p v-if="coupon.couponType == 4 || coupon.couponType == 2">全商城商品通用</p>
+                                    </div>
+                                    <div class="coupon-list-time"> {{ coupon.startDate }} - {{ coupon.endDate }}</div>
+                                </div>
+                                <div class="coupon-list-ri">
+                                    <span class="none" v-if="currentTab == 1" @click="receiveCoupon(coupon)">领取</span>
+                                    <span v-if="currentTab == 2">已领取</span>
+                                </div>
+                                <div class="coupon-tags">{{ coupon.couponType | TypeFormat }}</div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
     </div>
 </div>
 

+ 15 - 10
src/main/resources/templates/product/instruelist.html

@@ -120,7 +120,8 @@
                                     </template>
                                     <template v-else>
                                         <template v-if="(p.priceFlag==0 && p.userIdentity!=3) || p.userIdentity==2 || (p.userIdentity==3 && p.shopId==GLOBAL_SHOP_ID)">
-                                            <div class="price_text_tag">
+                                           <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>
@@ -131,24 +132,27 @@
                                             </div>
                                         </template>
                                         <template v-else-if="p.priceFlag==2 && p.userIdentity==4">
-                                            <div class="price_text_tag">
+                                             <div class="price_text_tag">
+<!--                                                <p class="couponTag" v-if="p.couponsLogo">优惠券</p>-->
                                                 <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
                                             </div>
                                             <div class="main_price_unde">¥会员可见</div>
                                         </template>
                                         <template v-else>
-                                            <div class="price_text_tag">
-                                                <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>
+                                         <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="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>
+                                     <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>
@@ -164,6 +168,7 @@
             </div>
         </div>
     </template>
+    <!--分页-->
     <div v-if="(!isPC) && noMore" class="noMore">---- 没有更多了 ----</div>
     <div v-if="isPC && pageTotal>1" class="pageWrap clear">
         <th:block th:each="page : ${pageBtnList}">

+ 3 - 1
src/main/resources/templates/product/instrument.html

@@ -118,6 +118,7 @@
                                         <!-- 正常商品 -->
                                             <template v-if="pros.product.productCategory == 1">
                                                 <div class="price_text_tag">
+<!--                                                    <p class="couponTag" v-if="pros.product.couponsLogo">优惠券</p>-->
                                                     <p class="listTag" v-if="pros.product.actStatus ==1 && pros.product.promotions">
                                                         <span v-text="pros.product.promotions.name"></span>
                                                         <template v-if="PromotionsFormat(pros.product.promotions)">
@@ -241,7 +242,8 @@
                                                     <div th:attr="class=*{'main_price_text product_'+productId}, data-id=*{productId}">
                                                         <!-- 正常商品 -->
                                                         <th:block th:if="*{productCategory}==1">
-                                                            <div class="price_text_tag" th:if="${pros.get('product').containsKey('actStatus')}">
+                                                            <div class="price_text_tag">
+                                                                <p class="couponTag" th:if="*{couponsLogo}">优惠券</p>
                                                                 <p class="listTag" th:if="*{actStatus}==1 and ${pros.get('product').get('promotions')}!=null">
                                                                     <template th:text="*{promotions.name}"></template>
                                                                     <th:block th:if="*{promotions.type}==1 and *{promotions.mode}==1">

+ 36 - 20
src/main/resources/templates/product/list.html

@@ -107,42 +107,58 @@
         </div>
         <!--商品列表-->
         <ul class="productList clear mfw">
-            <li class="productItem mfc" v-for="p in listData">
-                <div class="item">
-                    <a class="image" :href="'/product-'+p.productId+'.html'">
-                        <img src="/img/base/placeholder.png" :data-original="p.image" :alt="p.name">
-                    </a>
-                    <a class="name" :href="'/product-'+p.productId+'.html'">
-                         <span v-html="addhtml +p.name" v-if="p.beautyActFlag==1"></span>
-                         <span v-html="p.name" v-else></span>
-                    </a>
-                    <div class="price mfhc">
+            <li class="productItem " v-for="p in listData">
+                <a class="image" :href="'/product-'+p.productId+'.html'">
+                    <img src="/img/base/placeholder.png" :data-original="p.image" :alt="p.name">
+                    <p class="name" v-html="addhtml + p.name" v-if="p.beautyActFlag==1"></p>
+                    <p class="name" v-html="p.name" v-else></p>
+                    <div class="price">
                         <template v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0">
                             <!--用户身份 0、个人 1、协销 2、会员机构 3、供应商 4,普通机构-->
                             <template v-if="p.priceFlag==1">
-                                <em>¥价格未公开</em>
+                                <div class="price_text_tag">
+                                    <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
+                                </div>
+                                <div class="main_price_unde">¥价格未公开</div>
                             </template>
                             <template v-else>
                                 <template v-if="(p.priceFlag==0 && p.userIdentity!=3) || p.userIdentity==2 || (p.userIdentity==3 && p.shopId==GLOBAL_SHOP_ID)">
-                                    <em class="p" v-text="'¥'+parseFloat(p.price).toFixed(2)"></em>
-                                    <span class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</span>
+                                    <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">
-                                    <em>¥会员可见</em>
-                                    <span class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</span>
+                                    <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>
-                                    <em>¥<i :class="'icon mIcon i'+p.priceGrade"></i></em>
-                                    <span class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</span>
+                                    <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>
-                            <em>¥<i :class="'icon mIcon i'+p.priceGrade"></i></em>
-                            <span class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</span>
+                            <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>
-                </div>
+                </a>
             </li>
         </ul>
     </template>

+ 96 - 0
src/main/resources/templates/product/product-coupon.html

@@ -0,0 +1,96 @@
+<!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/product/product-coupon.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>
+        <!--banner图-->
+        <div class="coupon-banner">
+            <a href='javascript:void(0)'>
+                <img :src="pcBanner" v-if="isPC">
+                <img :src="appletsBanner" v-else>
+            </a>
+        </div>
+        <!--商品列表-->
+        <div class="coupon-content clear">
+            <ul class="productList clear mfw">
+                <li class="productItem " v-for="p in listData">
+                    <a class="image" :href="'/product-'+p.productId+'.html'">
+                        <img src="/img/base/placeholder.png" :data-original="p.image" :alt="p.name">
+                        <p class="name" v-html="addhtml + p.name" v-if="p.beautyActFlag==1"></p>
+                        <p class="name" v-html="p.name" v-else></p>
+                        <div class="price">
+                            <template v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0">
+                                <!--用户身份 0、个人 1、协销 2、会员机构 3、供应商 4,普通机构-->
+                                <template v-if="p.priceFlag==1">
+                                    <div class="price_text_tag">
+                                        <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
+                                    </div>
+                                    <div class="main_price_unde">¥价格未公开</div>
+                                </template>
+                                <template v-else>
+                                    <template v-if="(p.priceFlag==0 && p.userIdentity!=3) || p.userIdentity==2 || p.userIdentity==3">
+                                        <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>
+    </template>
+    <!--分页-->
+    <div v-if="(!isPC) && noMore" class="noMore">---- 没有更多了 ----</div>
+
+</div>
+<!-- 引入底部 -->
+<template th:replace="components/footer"></template>
+<template th:replace="components/foot-link"></template>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/product.service.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/product/product-coupon.js(v=${version})}"></script>
+</body>
+</html>

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

@@ -49,13 +49,13 @@
                     <div class="c0">
                         <input class="check" type="checkbox" @change="ckeckSupplier($event, supplier.checked)" v-model="supplier.checked">
                     </div>
-                    <a  :href="'/supplier-'+supplier.id+'.html'" target="_blank">
+                    <a  class="shop" :href="'/supplier-'+supplier.id+'.html'" target="_blank">
                         <img class="img" :src="supplier.logo">
                         <span class="name" v-text="supplier.name"></span>
                     </a>
                     <!--店铺促销-->
                     <div class="price">
-                        <div v-if="supplier.promotions" class="priceTag">
+                        <div v-if="supplier.promotions" class="priceTag" style="float: left;">
                             <i @click="toggleThisLadder($event)" class="tag icon mIcon" v-text="supplier.promotions.name"></i>
                             <div class="promotion mFixed">
                                 <div>
@@ -78,6 +78,7 @@
                                 </div>
                             </div>
                         </div>
+                        <div class="couponTag" v-if="supplier.couponsLogo" @click="showPopup(supplier)">领券</div>
                     </div>
                 </div>
                 <div class="cartItem clear"  v-for="cart in supplier.cartList" >
@@ -199,11 +200,55 @@
                 <div class="item">商品种类:<em v-text="kindCount"></em></div>
                 <div class="item">商品数量:<em v-text="totalCount"></em></div>
             </div>
-            <div class="right mfbt">
-                <div  :class="reducedPrice>0?'item priceTotal':'item'">合计:<em>¥{{totalPrice | NumFormat}}</em>
-                    <span v-if="reducedPrice>0" class="dl"><del>¥{{originalPrice | NumFormat}}</del><em>减¥{{reducedPrice | NumFormat}}</em></span>
-                </div>
+            <div class="right">
                 <a class="submit" href="javascript:void(0);" @click="submitCart()" onclick="_czc.push(['_trackEvent','购物车去结算','点击','去结算','','Um_Event_CartConfirmOrder'])">去结算</a>
+                <div  :class="isDiscount ?'item priceTotal':'item'">
+                    <p class="priceTotal-t">合计:<em>¥{{ totalPrice - couponPrice  | NumFormat }}</em></p>
+                    <p class="priceTotal-b" v-if="isDiscount"><em>共减¥{{ totalDiscountAmount | NumFormat }}</em></p>
+                </div>
+            </div>
+        </div>
+    </div>
+    <!--优惠券弹窗-->
+    <div class="coupon-popup" v-show="isShowPopup" :class="isShowPopup ? 'show' : 'hide'">
+        <div class="coupon-popup-model-content">
+            <div class="title"><p>优惠券</p><i class="icon mIcon" @click="hidePopup"></i></div>
+            <div class="coupon-popup-main">
+                <div class="coupon-popup-tabs">
+                    <div class="popup-tabs-cell" :class="currentTab == 1 ? 'active' : ''" @click="queryCouponTabs(1)"><span>未领取</span></div>
+                    <div class="popup-tabs-cell" :class="currentTab == 2 ? 'active' : ''" @click="queryCouponTabs(2)"><span>已领取</span></div>
+                </div>
+                <div class="coupon-popup-content">
+                    <div class="empty" v-if="isCouponEmpty">
+                        <img src="/img/account/icon-coupon-empty@2x.png">
+                        <div class="msg"><p>暂无可领的优惠券</p></div>
+                    </div>
+                    <div class="coupon-popup-scroll" v-else>
+                        <div class="coupon-list-cell" v-for="(coupon, index) in productCouponList" :key="index" :class="currentTab == 2 ? 'none' : ''">
+                            <div class="coupon-list-le">
+                                <div class="coupon-list-money">
+                                    <p>¥<span class="maxMoney">{{ coupon.couponAmount }}</span><span class="minMoney">满{{ coupon.touchPrice }}可用</span></p>
+                                </div>
+                                <div class="coupon-list-name">
+                                    <p v-if="coupon.couponType == 0">
+                                        {{ coupon.productType && coupon.productType == 1 ? '全商城商品通用' : '仅可购买指定商品'  }}
+                                    </p>
+                                    <p v-if="coupon.couponType == 1">
+                                        {{ coupon.categoryType == 1 ? '仅限购买产品类商品' : '仅限购买仪器类商品' }}
+                                    </p>
+                                    <p v-if="coupon.couponType == 3">仅限购买店铺【{{ coupon.shopName }}】的商品</p>
+                                    <p v-if="coupon.couponType == 4 || coupon.couponType == 2">全商城商品通用</p>
+                                </div>
+                                <div class="coupon-list-time"> {{ coupon.startDate }} - {{ coupon.endDate }} </div>
+                            </div>
+                            <div class="coupon-list-ri">
+                                <span class="none" v-if="currentTab == 1" @click="receiveCoupon(coupon)">领取</span>
+                                <span v-if="currentTab == 2">已领取</span>
+                            </div>
+                            <div class="coupon-tags">{{ coupon.couponType | TypeFormat }}</div>
+                        </div>
+                    </div>
+                </div>
             </div>
         </div>
     </div>
@@ -212,6 +257,7 @@
 <!-- 引入底部 -->
 <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/shopping/cart.js(v=${version})}"></script>
 </body>

+ 33 - 3
src/main/resources/templates/shopping/confirm.html

@@ -15,7 +15,7 @@
 <!-- 核对订单 -->
 <div id="shoppingConfirm" v-cloak>
     <!--列表-->
-    <div class="wrap">
+    <div class="wrap clear">
         <div class="pageTitle">
             <div class="step">
                 <span class="prev">我的购物车</span>
@@ -287,6 +287,33 @@
                 <span class="text">剩余:<span class="red">¥{{balance.surplusMoney | NumFormat}}</span></span>
             </label>
         </div>
+        <h2 class="title" v-if="isCouponShow">
+            优惠券
+            <a href="/user/coupon-exchange.html">兑换优惠券</a>
+        </h2>
+        <div class="couponWrap" v-if="isCouponShow">
+            <div class="coupon-list-cell" v-for="(coupon, index) in couponList" :key="index" @click="checkedCoupon(index)">
+                <div class="coupon-list-le">
+                    <div class="coupon-list-money">
+                        <p>¥<span class="maxMoney">{{ coupon.couponAmount }}</span><span class="minMoney">满{{ coupon.touchPrice }}可用</span></p>
+                    </div>
+                    <div class="coupon-list-name">
+                        <p v-if="coupon.couponType == 0">
+                            {{ coupon.productType && coupon.productType == 1 ? '全商城商品通用' : '仅可购买指定商品'  }}
+                        </p>
+                        <p v-if="coupon.couponType == 1">
+                            {{ coupon.categoryType == 1 ? '仅限购买产品类商品' : '仅限购买仪器类商品' }}
+                        </p>
+                        <p v-if="coupon.couponType == 3">仅限购买店铺【{{ coupon.shopName }}】的商品</p>
+                        <p v-if="coupon.couponType == 4 || coupon.couponType == 2">全商城商品通用</p>
+                    </div>
+                    <div class="coupon-list-time"> {{ coupon.startDate }} - {{ coupon.endDate }}</div>
+                    <span class="coupon-list-checked" :class="[coupon.ischecked ?'checked':'']"></span>
+                </div>
+                <div class="coupon-list-ri"><span>已领取</span></div>
+                <div class="coupon-tags">{{ coupon.couponType | TypeFormat }}</div>
+            </div>
+        </div>
         <div class="totalPriceWrap">
             <p>商品种类: <span>{{kindCount}}种</span></p>
             <p>数量总计: <span>{{totalCount}}件</span></p>
@@ -296,6 +323,7 @@
                 <span v-if="payInfo.freePostFlag==1"><em>¥{{payInfo.freight | NumFormat}}</em></span>
             </p>
             <p v-if="reducedPrice>0">促销满减: <span><em>- ¥{{reducedPrice | NumFormat}}</em></span></p>
+            <p>优惠券: <span><em>- ¥{{couponAmount | NumFormat}}</em></span></p>
             <p v-if="balance.deductMoney>0">抵扣账户余额: <span><em>- ¥{{balance.deductMoney | NumFormat}}</em></span></p>
             <p>总价: <span><em>¥{{payInfo.orderShouldPayFee | NumFormat}}</em></span></p>
             <p class="pis" v-if="isBeansShow">
@@ -309,7 +337,6 @@
             </p>
         </div>
     </div>
-
     <div class="summaryWrap">
         <div class="summary">
             <div v-if="isPC" class="left">
@@ -318,7 +345,10 @@
                 </div>
             </div>
             <div class="right mfbt">
-                <div class="item">总价:<em>¥{{payInfo.orderShouldPayFee | NumFormat}}</em></div>
+                <div class="totalMoney">
+                    <div class="totalPrice" :class="totalDiscountAmount == 0 ? 'none' : ''">总价:<span>¥{{payInfo.orderShouldPayFee | NumFormat}}</span></div>
+                    <div class="totalCoupon" v-if="totalDiscountAmount > 0">共减:¥{{ totalDiscountAmount | NumFormat }}</div>
+                </div>
                 <a :class="submitLoading?'submit dis':'submit'" href="javascript:void(0);" @click="submitOrder()" onclick="_czc.push(['_trackEvent','确认订单','点击','用户提交订单','','Um_Event_ConfirmOrder'])">提交订单</a>
             </div>
         </div>

+ 72 - 42
src/main/resources/templates/supplier/index.html

@@ -55,43 +55,58 @@
                     <div class="title">主推商品</div>
                     <!--主推商品列表-->
                     <ul class="productList clear mfw">
-                        <li class="productItem mfc" v-for="p in mainProducts">
-                            <div class="item">
-                                <a class="image" :href="'/product-'+p.productId+'.html'">
-                                    <img :src="p.image" :alt="p.name">
-                                    <span v-if="p.actType==1||p.actType==2" :class="p.actType==1?'icon mIcon hot':'icon mIcon new'"></span>
-                                </a>
-                                <a class="name" :href="'/product-'+p.productId+'.html'">
-                                    <span v-html="addhtml + p.name" v-if="p.beautyActFlag==1"></span>
-                                    <span v-html="p.name" v-else></span>
-                                </a>
-                                <div class="price mfhc">
+                        <li class="productItem " v-for="p in mainProducts">
+                            <a class="image" :href="'/product-'+p.productId+'.html'">
+                                <img src="/img/base/placeholder.png" :data-original="p.image" :alt="p.name">
+                                <p class="name" v-html="addhtml + p.name" v-if="p.beautyActFlag==1"></p>
+                                <p class="name" v-html="p.name" v-else></p>
+                                <div class="price">
                                     <template v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0">
                                         <!--用户身份 0、个人 1、协销 2、会员机构 3、供应商 4,普通机构-->
                                         <template v-if="p.priceFlag==1">
-                                            <em>¥价格未公开</em>
+                                            <div class="price_text_tag">
+                                                <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
+                                            </div>
+                                            <div class="main_price_unde">¥价格未公开</div>
                                         </template>
                                         <template v-else>
                                             <template v-if="(p.priceFlag==0 && p.userIdentity!=3) || p.userIdentity==2 || (p.userIdentity==3 && p.shopId==GLOBAL_SHOP_ID)">
-                                                <em class="p" v-text="'¥'+parseFloat(p.price).toFixed(2)"></em>
-                                                <span class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</span>
+                                                <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">
-                                                <em>¥会员可见</em>
-                                                <span class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</span>
+                                                <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>
-                                                <em>¥<i :class="'icon mIcon i'+p.priceGrade"></i></em>
-                                                <span class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</span>
+                                                <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>
-                                        <em class="">¥<i :class="'icon mIcon i'+p.priceGrade"></i></em>
-                                        <span class="listTag " v-if="p.actStatus==1">{{p.promotions.name}}</span>
+                                        <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>
-                            </div>
+                            </a>
                         </li>
                     </ul>
                 </div>
@@ -99,43 +114,58 @@
                     <div class="title" id="supProduct">供应商产品</div>
                     <!--主推商品列表-->
                     <ul v-if="productLists.length>0" class="productList clear mfw">
-                        <li class="productItem mfc" v-for="p in productLists">
-                            <div class="item">
-                                <a class="image" :href="'/product-'+p.productId+'.html'">
-                                    <img src="/img/base/placeholder.png" :data-original="p.image" :alt="p.name">
-                                    <span v-if="p.actType==1||p.actType==2" :class="p.actType==1?'icon mIcon hot':'icon mIcon new'"></span>
-                                </a>
-                                <a class="name" :href="'/product-'+p.id+'.html'">
-                                    <span v-html="addhtml + p.name" v-if="p.beautyActFlag==1"></span>
-                                    <span v-html="p.name" v-else></span>
-                                </a>
-                                <div class="price mfhc">
+                        <li class="productItem " v-for="p in productLists">
+                            <a class="image" :href="'/product-'+p.productId+'.html'">
+                                <img src="/img/base/placeholder.png" :data-original="p.image" :alt="p.name">
+                                <p class="name" v-html="addhtml + p.name" v-if="p.beautyActFlag==1"></p>
+                                <p class="name" v-html="p.name" v-else></p>
+                                <div class="price">
                                     <template v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0">
                                         <!--用户身份 0、个人 1、协销 2、会员机构 3、供应商 4,普通机构-->
                                         <template v-if="p.priceFlag==1">
-                                            <em>¥价格未公开</em>
+                                            <div class="price_text_tag">
+                                                <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
+                                            </div>
+                                            <div class="main_price_unde">¥价格未公开</div>
                                         </template>
                                         <template v-else>
                                             <template v-if="(p.priceFlag==0 && p.userIdentity!=3) || p.userIdentity==2 || (p.userIdentity==3 && p.shopId==GLOBAL_SHOP_ID)">
-                                                <em class="p" v-text="'¥'+parseFloat(p.price).toFixed(2)"></em>
-                                                <span class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</span>
+                                                <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">
-                                                <em>¥会员可见</em>
-                                                <span class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</span>
+                                                <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>
-                                                <em>¥<i :class="'icon mIcon i'+p.priceGrade"></i></em>
-                                                <span class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</span>
+                                                <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>
-                                        <em class="">¥<i :class="'icon mIcon i'+p.priceGrade"></i></em>
-                                        <span class="listTag " v-if="p.actStatus==1">{{p.promotions.name}}</span>
+                                        <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>
-                            </div>
+                            </a>
                         </li>
                     </ul>
                     <div v-else class="empty">

+ 81 - 0
src/main/resources/templates/user-center/account/coupon-collection.html

@@ -0,0 +1,81 @@
+<!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/base/center.css(v=${version})}" rel="stylesheet" type="text/css">
+  <link th:href="@{/css/user-center/account/coupon-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="beansPage" v-cloak>
+  <div class="navLayout" v-cloak>
+    <div class="coupon-title">
+      <div class="coupon-name">领券中心</div>
+      <div class="coupon-name-use"  @click="myClickCoupon">我的优惠券</div>
+    </div>
+    <div class="wrap clear">
+        <!--loading-->
+        <div v-if="isRequset" class="loading">
+          <img src="/img/base/loading.gif">
+        </div>
+        <div class="coupon-container clear" v-else>
+          <div class="coupon-content-list clear" v-if="coupinList.length > 0">
+            <div class="coupon-list-cell" v-for="(coupon, index) in coupinList" :key="index">
+              <div class="coupon-list-le">
+                <div class="coupon-list-money">
+                  <p>¥<span class="maxMoney">{{ coupon.couponAmount }}</span><span class="minMoney">满{{ coupon.touchPrice }}可用</span></p>
+                </div>
+                <div class="coupon-list-name">
+                  <p v-if="coupon.couponType == 0">
+                    {{ coupon.productType && coupon.productType == 1 ? '全商城商品通用' : '仅可购买指定商品'  }}
+                  </p>
+                  <p v-if="coupon.couponType == 1">
+                    {{ coupon.categoryType == 1 ? '仅限购买产品类商品' : '仅限购买仪器类商品' }}
+                  </p>
+                  <p v-if="coupon.couponType == 3">仅限购买店铺【{{ coupon.shopName }}】的商品</p>
+                  <p v-if="coupon.couponType == 4 || coupon.couponType == 2">全商城商品通用</p>
+                </div>
+                <div class="coupon-list-time"> {{ coupon.startDate }} - {{ coupon.endDate }}</div>
+              </div>
+              <div class="coupon-list-ri">
+                <span class="none" v-if="coupon.couponBtnType == 0" @click="receiveCoupon(coupon)">领取</span>
+                <span v-if="coupon.couponBtnType == 1" @click="toUseCoupon(coupon)">去使用</span>
+              </div>
+              <div class="coupon-tags">{{ coupon.couponType | TypeFormat }}</div>
+            </div>
+          </div>
+          <div v-else class="empty">
+            <img src="/img/account/icon-coupon-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>
+    </div>
+  </div>
+</div>
+<!-- 引入底部 -->
+<template th:replace="components/footer"></template>
+<template th:replace="components/foot-link"></template>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/product.service.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/user-center/account/coupon-collection.js(v=${version})}"></script>
+</body>
+</html>

+ 79 - 0
src/main/resources/templates/user-center/account/coupon-exchange.html

@@ -0,0 +1,79 @@
+<!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/base/center.css(v=${version})}" rel="stylesheet" type="text/css">
+  <link th:href="@{/css/user-center/account/coupon-exchange.css(v=${version})}" rel="stylesheet" type="text/css">
+  <template th:replace="components/analysis"></template>
+</head>
+<body>
+<!-- 引用头部 -->
+<template th:replace="components/header"></template>
+<!-- 采美豆明细 -->
+<div id="beansPage" v-cloak>
+  <div class="navLayout" v-cloak>
+    <div v-if="isPC" class="crumbs">
+      <span>我的采美</span>
+      <span>&gt;</span>
+      <span>兑换优惠券</span>
+    </div>
+    <div class="wrap clear">
+      <!--左侧导航-->
+      <template th:replace="user-center/components/tableft"></template>
+      <div class="right">
+        <div class="coupon-container clear">
+          <div class="coupon-content">
+              <div class="coupon-input">
+                <input class="input" type="text"  v-model="params.redemptionCode" placeholder="请输入16位兑换码">
+                <a href="javascript:void(0);" class="coupon-btn" @click="exchangeConfirm">立即兑换</a>
+              </div>
+              <div class="coupon-text">
+                <h1>注意事项:</h1>
+                <p>1. 兑换码获取:可通过采美线下发放或者销售顾问线上发放获得优惠券兑换码。兑换码由16位数字和字母组成;</p>
+                <p>2. 兑换码使用:在当前页面输入兑换码即可兑换相应优惠券,一个兑换码只能兑换一张优惠券,不可重复使用;</p>
+                <p>3. 输入兑换码时请区分字母大小写。</p>
+              </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+  <!-- 采美豆弹窗 -->
+  <div class="cmcoupon-alert-box" v-if="isCouponModel" :class="isCouponModel ? 'show' : 'hide'">
+      <div class="cmcoupon-alert-content">
+        <div class="cmcoupon-main">
+          <div class="coupon-list">
+            <div class="list-cell-tags">{{ coupon.couponType | TypeFormat }}</text></div>
+            <div class="list-cell-le">
+              <div class="coupon-maxMoney">
+                <span class="small">¥</span>
+                <span> {{ coupon.couponAmount }}</span>
+              </div>
+              <div class="coupon-minMoney"><span class="txt">满{{ coupon.touchPrice }}可用</span></div>
+            </div>
+            <div class="list-cell-ri">
+              <div class="list-cell-top">
+                <p v-if="coupon.couponType == 0">{{ coupon.productType && coupon.productType == 1 ? '全商城商品通用' : '仅可购买指定商品'  }}</p>
+                <p v-if="coupon.couponType == 1">{{ coupon.categoryType == 1 ? '仅限购买产品类商品' : '仅限购买仪器类商品' }}</p>
+                <p v-if="coupon.couponType == 3">仅限购买店铺【{{ coupon.shopName }}】的商品</p>
+                <p v-if="coupon.couponType == 4 || coupon.couponType == 2">全商城商品通用</p>
+              </div>
+              <div class="list-cell-time">{{ coupon.startDate }} - {{ coupon.endDate }}</div>
+            </div>
+          </div>
+          <div class="coupon-btn" @click.stop="handleClickCancel">立即收下</div>
+        </div>
+        <i class="icon mIcon" @click.stop="handleClickCancel"></i>
+      </div>
+  </div>
+</div>
+<!-- 引入底部 -->
+<template th:replace="components/footer"></template>
+<template th:replace="components/foot-link"></template>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/center.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/product.service.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/user-center/account/coupon-exchange.js(v=${version})}"></script>
+</body>
+</html>

+ 106 - 0
src/main/resources/templates/user-center/account/coupon.html

@@ -0,0 +1,106 @@
+<!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/base/center.css(v=${version})}" rel="stylesheet" type="text/css">
+  <link th:href="@{/css/user-center/account/coupon.css(v=${version})}" rel="stylesheet" type="text/css">
+  <template th:replace="components/analysis"></template>
+</head>
+<body>
+<!-- 引用头部 -->
+<template th:replace="components/header"></template>
+<!-- 采美豆明细 -->
+<div id="beansPage" v-cloak>
+  <div class="navLayout" v-cloak>
+    <div v-if="isPC" class="crumbs">
+      <span>我的采美</span>
+      <span>&gt;</span>
+      <span>优惠券</span>
+    </div>
+    <div class="wrap clear">
+      <!--左侧导航-->
+      <template th:replace="user-center/components/tableft"></template>
+      <div class="right">
+        <!--loading-->
+        <div v-if="isRequset" class="loading">
+          <img src="/img/base/loading.gif">
+        </div>
+        <div class="coupon-container clear" v-else>
+          <div class="coupon-content-tabs clear">
+            <div class="tabs-main">
+              <div class="time-tabs">
+                <div   class="time-tabs-cell"
+                       v-for="(tabs, index) in tabsList"
+                       :key="index"
+                       :class="tabsListIndex == index ? 'active' : ''"
+                       @click="tabClick(index)"
+                >
+                  {{ tabs.text }}
+                </div>
+              </div>
+              <div class="time-btn" v-if="isPC">
+                <a href="/user/coupon-exchange.html">兑换优惠券</a>
+                <a href="/user/coupon-collection.html">领取更多好券</a>
+              </div>
+              <div class="time-btn" v-else></div>
+            </div>
+          </div>
+          <!--数据为空-->
+          <div class="coupon-content-list clear" v-if="coupinList.length > 0">
+              <div class="coupon-list-cell" v-for="(coupon, index) in coupinList" :key="index" :class="coupon.useStatus == 2 || coupon.useStatus == 3 ? 'none' : 'used'">
+                <div class="coupon-list-le">
+                  <div class="coupon-list-money" :class="coupon.useStatus == 2 || coupon.useStatus == 3 ? 'none' : 'used'">
+                    <p>¥<span class="maxMoney">{{ coupon.couponAmount }}</span><span class="minMoney">满{{ coupon.touchPrice }}可用</span></p>
+                  </div>
+                  <div class="coupon-list-name" :class="coupon.useStatus == 2 || coupon.useStatus == 3 ? 'none' : 'used'">
+                    <p v-if="coupon.couponType == 0">
+                      {{ coupon.productType && coupon.productType == 1 ? '全商城商品通用' : '仅可购买指定商品'  }}
+                    </p>
+                    <p v-if="coupon.couponType == 1">
+                      {{ coupon.categoryType == 1 ? '仅限购买产品类商品' : '仅限购买仪器类商品' }}
+                    </p>
+                    <p v-if="coupon.couponType == 3">仅限购买店铺【{{ coupon.shopName }}】的商品</p>
+                    <p v-if="coupon.couponType == 4 || coupon.couponType == 2">全商城商品通用</p>
+                  </div>
+                  <div class="coupon-list-time" :class="coupon.useStatus == 2 || coupon.useStatus == 3 ? 'none' : 'used'">
+                    {{ coupon.startDate }} - {{ coupon.endDate }}
+                  </div>
+                </div>
+                <div class="coupon-list-ri" :class="coupon.useStatus == 2 || coupon.useStatus == 3 ? 'none' : 'used'" @click="toUseCoupon(coupon)">{{ coupon.useStatus | TypeBtnFormat }}</div>
+                <div class="coupon-tags" :class="coupon.useStatus == 2 || coupon.useStatus == 3 ? 'none' : 'used'">{{ coupon.couponType | TypeFormat }}</div>
+              </div>
+          </div>
+          <div v-else class="empty">
+            <img src="/img/account/icon-coupon-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>
+      </div>
+    </div>
+  </div>
+</div>
+<!-- 引入底部 -->
+<template th:replace="components/footer"></template>
+<template th:replace="components/foot-link"></template>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/center.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/product.service.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/user-center/account/coupon.js(v=${version})}"></script>
+</body>
+</html>

+ 5 - 1
src/main/resources/templates/user-center/dashboard.html

@@ -69,6 +69,10 @@
                                     <span>采美豆:</span>
                                     <span class="red">{{ userInfo.userBeans }}</span>
                                 </a>
+                                <a href="/user/coupon.html" class="account-cell">
+                                    <span>优惠券:</span>
+                                    <span class="red">{{ couponNum }}</span>
+                                </a>
                             </div>
                         </div>
                     </div>
@@ -162,7 +166,7 @@
             </div>
         </div>
         <!-- 采美豆弹窗 -->
-        <div class="cmbeans-alert-box" v-if="isShowBeansAlet">
+        <div class="cmbeans-alert-box" v-if="isShowBeansAlet" :class="isShowBeansAlet ? 'show' : 'hide'">
             <template v-if="beansType == 12">
                 <div class="cmbeans-alert-image">
                     <img src="/img/account/icon-beans-12@2x.png" alt="">

+ 4 - 3
src/main/resources/templates/user-center/order/detail.html

@@ -69,9 +69,10 @@
                                     <p v-if="orderInfo.freePostFlag == '0'">运费:<span class="none">包邮</span> </p>
                                     <p v-if="orderInfo.freePostFlag == '-1'">运费:<span class="none">到付</span> </p>
                                     <p v-if="orderInfo.freePostFlag == '1'">运费:<span class="none">¥{{orderInfo.freight | NumFormat}}</span> </p>
-                                    <p>采美豆抵用运费:<span class="none" v-if="orderInfo.userBeans>0">{{orderInfo.userBeans }}</span> </p>
+                                    <p v-if="orderInfo.userBeans>0">采美豆抵用运费:<span class="none" >{{orderInfo.userBeans }}</span> </p>
                                     <p v-if="orderInfo.discountFee>0">经理折扣:<span class="none">¥{{orderInfo.discountFee | NumFormat}}</span> </p>
-                                    <p v-if="orderInfo.promotionFullReduction>0">促销满减:<span class="none">¥{{orderInfo.promotionFullReduction | NumFormat}}</span> </p>
+                                    <p v-if="orderInfo.promotionFullReduction>0">促销满减:<span class="red">¥{{orderInfo.promotionFullReduction | NumFormat}}</span> </p>
+                                    <p>优惠券:<span class="red">¥{{orderInfo.couponAmount | NumFormat}}</span> </p>
                                     <p v-if="orderInfo.presentCount>0">赠品数:<span class="none">{{orderInfo.presentCount}}</span></p>
                                 </div>
                             </div>
@@ -244,7 +245,7 @@
         </div>
     </div>
     <!-- 采美豆弹窗 -->
-    <div class="cmbeans-alert-box" v-if="isShowBeansAlet">
+    <div class="cmbeans-alert-box" v-if="isShowBeansAlet" :class="isShowBeansAlet ? 'show' : 'hide'">
         <div class="cmbeans-alert-content" :style="{'background-image': 'url('+bgImagePath+')'}">
             <div class="cmbeans-alert-content-text">恭喜您获得采美豆!</div>
             <div class="cmbeans-alert-content-bean">

部分文件因文件數量過多而無法顯示