Просмотр исходного кода

Merge branch 'developer' into developerA

# Conflicts:
#	src/main/resources/config/dev/application-dev.yml
JiangChongBo 2 лет назад
Родитель
Сommit
136cc07d2d
53 измененных файлов с 2246 добавлено и 1351 удалено
  1. 3 0
      src/main/java/com/caimei/www/mapper/ProductDao.java
  2. 46 0
      src/main/java/com/caimei/www/pojo/page/LadderPriceVo.java
  3. 1 0
      src/main/java/com/caimei/www/pojo/page/ProductDetail.java
  4. 72 0
      src/main/java/com/caimei/www/pojo/page/Sku.java
  5. 16 3
      src/main/java/com/caimei/www/service/page/impl/ProductServiceImpl.java
  6. 9 9
      src/main/resources/config/dev/application-dev.yml
  7. 6 4
      src/main/resources/mapper/ProductMapper.xml
  8. 6 4
      src/main/resources/static/css/pay/caimei-pay.css
  9. 4 4
      src/main/resources/static/css/pay/caimei-paylist.css
  10. 11 2
      src/main/resources/static/css/product/detail.h5.css
  11. 56 3
      src/main/resources/static/css/product/detail.pc.css
  12. 47 1
      src/main/resources/static/css/product/product-supporting.h5.css
  13. 91 2
      src/main/resources/static/css/shopping/shopping.css
  14. 5 5
      src/main/resources/static/css/supplier-center/order/detail.css
  15. 2 2
      src/main/resources/static/css/supplier-center/order/logistics-detail.css
  16. 2 2
      src/main/resources/static/css/supplier-center/order/logistics.css
  17. 2 2
      src/main/resources/static/css/supplier-center/order/record.css
  18. 145 134
      src/main/resources/static/css/supplier-center/shop/release.css
  19. 2 2
      src/main/resources/static/css/user-center/collection/collection.css
  20. 0 1
      src/main/resources/static/js/base.js
  21. 16 0
      src/main/resources/static/js/common/serviceapi/shopping.service.js
  22. 12 0
      src/main/resources/static/js/common/serviceapi/supplier.service.js
  23. 30 166
      src/main/resources/static/js/product/detail.js
  24. 117 0
      src/main/resources/static/js/product/mixins/productMixins.js
  25. 126 0
      src/main/resources/static/js/product/mixins/supportMixins.js
  26. 3 80
      src/main/resources/static/js/product/product-supporting.js
  27. 57 49
      src/main/resources/static/js/shopping/cart.js
  28. 17 14
      src/main/resources/static/js/shopping/confirm.js
  29. 125 0
      src/main/resources/static/js/shopping/mixins/cartMixins.js
  30. 392 0
      src/main/resources/static/js/supplier-center/shop/mixins/checkeMixins.js
  31. 246 0
      src/main/resources/static/js/supplier-center/shop/mixins/getInfoMixins.js
  32. 97 0
      src/main/resources/static/js/supplier-center/shop/mixins/releaseMixins.js
  33. 14 7
      src/main/resources/static/js/supplier-center/shop/preview.js
  34. 7 707
      src/main/resources/static/js/supplier-center/shop/release.js
  35. 2 0
      src/main/resources/static/js/supplier/index.js
  36. 1 1
      src/main/resources/templates/help/clubinfo.html
  37. 2 0
      src/main/resources/templates/pay/caimei-pay.html
  38. 5 0
      src/main/resources/templates/pay/caimei-paylist.html
  39. 130 27
      src/main/resources/templates/product/detail.html
  40. 86 1
      src/main/resources/templates/product/product-supporting.html
  41. 120 53
      src/main/resources/templates/shopping/cart.html
  42. 2 0
      src/main/resources/templates/shopping/confirm.html
  43. 2 0
      src/main/resources/templates/supplier-center/order/delivery-record.html
  44. 2 0
      src/main/resources/templates/supplier-center/order/detail.html
  45. 1 0
      src/main/resources/templates/supplier-center/order/list.html
  46. 2 0
      src/main/resources/templates/supplier-center/order/logistics-add.html
  47. 2 0
      src/main/resources/templates/supplier-center/order/logistics-detail.html
  48. 2 0
      src/main/resources/templates/supplier-center/order/logistics.html
  49. 6 1
      src/main/resources/templates/supplier-center/order/sales-list.html
  50. 1 1
      src/main/resources/templates/supplier-center/shop/preview.html
  51. 84 53
      src/main/resources/templates/supplier-center/shop/release.html
  52. 1 1
      src/main/resources/templates/supplier/index.html
  53. 10 10
      src/main/resources/templates/user-center/collection/collection.html

+ 3 - 0
src/main/java/com/caimei/www/mapper/ProductDao.java

@@ -7,6 +7,7 @@ import com.caimei.www.pojo.baike.BaikeProduct;
 import com.caimei.www.pojo.page.Parameter;
 import com.caimei.www.pojo.page.ProductDetail;
 import com.caimei.www.pojo.page.ProductList;
+import com.caimei.www.pojo.page.Sku;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
@@ -74,4 +75,6 @@ public interface ProductDao {
     List<String> getProductInfo();
 
     Integer getRecommendType(Integer productId);
+
+    List<Sku> findSkus(Integer productId);
 }

+ 46 - 0
src/main/java/com/caimei/www/pojo/page/LadderPriceVo.java

@@ -0,0 +1,46 @@
+package com.caimei.www.pojo.page;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 阶梯价格
+ *
+ * @author : Charles
+ * @date : 2021/4/9
+ */
+@Data
+public class LadderPriceVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private Integer id;
+
+    private Integer skuId;
+    /**
+     * 商品id
+     */
+    private Integer productId;
+    /**
+     * 第几阶梯
+     */
+    private Integer ladderNum;
+    /**
+     * 购买数量
+     */
+    private Integer buyNum;
+    /**
+     * 购买价格
+     */
+    private Double buyPrice;
+    /**
+     * 下一阶数量
+     */
+    private Integer maxNum;
+    /**
+     * 显示数量 如:1~3
+     */
+    private String numRange;
+
+}
+

+ 1 - 0
src/main/java/com/caimei/www/pojo/page/ProductDetail.java

@@ -25,6 +25,7 @@ public class ProductDetail extends ProductList {
 	private String tags;
 	private String[] tagList;
 	private String remarks;
+	private List<Sku> skus;
 	/** 详情 */
 	private Integer productDetailChose;
 	private String detailInfo;

+ 72 - 0
src/main/java/com/caimei/www/pojo/page/Sku.java

@@ -0,0 +1,72 @@
+package com.caimei.www.pojo.page;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author zzj
+ */
+@Data
+public class Sku {
+
+    private Integer productId;
+    /**
+     * 划线价格
+     */
+    private Double originalPrice;
+    /**
+     * 最大购买量
+     */
+    private Integer maxBuyNumber;
+    /**
+     * 计算后价格等级
+     */
+    private Integer priceGrade;
+    /**
+     * 是否复购 0否 1是
+     */
+    private Integer repurchaseFlag;
+    /**
+     * 启用阶梯价格标识 0否 1是
+     */
+    private Integer ladderPriceFlag;
+    /**
+     * 比例成本百分比
+     */
+    private Double costProportional;
+    /**
+     * 成本价选中标志:1固定成本 2比例成
+     */
+    private Integer costCheckFlag;
+
+    private Integer skuId;
+    /**
+     * 起订量
+     */
+    private Integer minBuyNumber;
+    /**
+     * 成本价
+     */
+    private Double costPrice;
+    /**
+     * 库存
+     */
+    private Integer stock;
+    /**
+     * 机构价格
+     */
+    private Double price;
+    /**
+     * 市场价
+     */
+    private Double normalPrice;
+    /**
+     * 包装规格
+     */
+    private String unit;
+    /**
+     * 阶梯价格
+     */
+    private List<LadderPriceVo> ladderPriceList;
+}

+ 16 - 3
src/main/java/com/caimei/www/service/page/impl/ProductServiceImpl.java

@@ -11,6 +11,7 @@ import com.caimei.www.pojo.baike.*;
 import com.caimei.www.pojo.page.Parameter;
 import com.caimei.www.pojo.page.ProductDetail;
 import com.caimei.www.pojo.page.ProductList;
+import com.caimei.www.pojo.page.Sku;
 import com.caimei.www.service.page.ProductService;
 import com.caimei.www.utils.ImageUtil;
 import com.caimei.www.utils.OssUtil;
@@ -24,8 +25,10 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 
 /**
@@ -55,14 +58,24 @@ public class ProductServiceImpl implements ProductService {
     @Override
     public ProductDetail getProductDetailById(Integer productId) {
         ProductDetail product = productDao.getProductDetailById(productId);
+        List<Sku> skus = productDao.findSkus(productId);
+        List<Integer> integers = new ArrayList<>();
+        skus.forEach(s -> {
+            Integer integer = PriceUtil.getpriceGrade(s.getPrice());
+            s.setPriceGrade(integer);
+            integers.add(integer);
+        });
+        Integer min = Collections.min(integers);
+        product.setPriceGrade(min);
+        product.setSkus(skus);
+        product.setStock(skus.get(0).getStock());
+        product.setMinBuyNumber(skus.get(0).getMinBuyNumber());
         log.info(product.getName());
         if (null != product) {
             if (!StringUtil.isNullOrEmpty(product.getTags())) {
                 product.setTagList(product.getTags().split(","));
             }
             product.setImage(ImageUtil.getImageURL("product", product.getImage(), 0, domain));
-            // 价格等级
-            product.setPriceGrade(PriceUtil.getpriceGrade(product.getPrice()));
         }
         return product;
     }
@@ -301,7 +314,7 @@ public class ProductServiceImpl implements ProductService {
             } else {
                 recommendList = baikeDao.getAutoRecommendList(baikeProduct.getPublishSource(), baikeProduct.getShopId(), baikeProduct.getTypeId(), baikeProduct.getProductId());
             }
-            recommendList.forEach(recommendProduct->{
+            recommendList.forEach(recommendProduct -> {
                 // 问题列表
                 List<BaikeProductQuestion> queList = baikeDao.findQuestionList(recommendProduct.getProductId());
                 recommendProduct.setQuestionList(queList);

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

@@ -4,13 +4,13 @@ spring:
   #数据源连接--start
   datasource:
     #本地连接数据库
-    url: jdbc:mysql://192.168.2.100:3306/caimei?characterEncoding=UTF8&serverTimezone=Asia/Shanghai
-    username: developer
-    password: 05bZ/OxTB:X+yd%1
+#    url: jdbc:mysql://192.168.2.100:3306/caimei?characterEncoding=UTF8&serverTimezone=Asia/Shanghai
+#    username: developer
+#    password: 05bZ/OxTB:X+yd%1
     #测试连接数据库
-    #url: jdbc:mysql://120.79.25.27:3306/caimei?characterEncoding=UTF8&serverTimezone=Asia/Shanghai
-    #username: developer
-    #password: J5p3tgOVazNl4ydf
+    url: jdbc:mysql://120.79.25.27:3306/caimei?characterEncoding=UTF8&serverTimezone=Asia/Shanghai
+    username: developer
+    password: J5p3tgOVazNl4ydf
     #type: com.zaxxer.hikari.HikariDataSource
     hikari:
       minimum-idle: 5
@@ -54,10 +54,10 @@ logging:
 caimei:
   siteEnv: 0 #网站环境,(2:正式环境,1:测试环境,0:开发环境)
   #spiServer: http://192.168.2.68:8008
-  #coreServer: https://core-b.caimei365.com
+  coreServer: https://core-b.caimei365.com
   #coreServer: http://192.168.2.67:18002
-  #coreServer: http://192.168.2.17:18002
-  coreServer: http://192.168.2.103:18002
+#  coreServer: http://192.168.2.17:18002
+  #coreServer: http://192.168.2.200:18002
   imageDomain: https://img-b.caimei365.com
   wwwDomain: http://localhost:8009
   destPath: classpath:/

+ 6 - 4
src/main/resources/mapper/ProductMapper.xml

@@ -6,16 +6,12 @@
 			p.productID as id,
 			p.`name` as `name`,
 			p.mainImage as image,
-			p.price,
-			p.unit as unit,
 			p.priceFlag,
 
 			p.tags as tags,
 			p.productRemarks as remarks,
 			p.validFlag as validFlag,
-			p.stock as stock,
 			p.productCode as productCode,
-			p.minBuyNumber as minBuyNumber,
 			p.step as step,
 			p.recommendType as recommendType,
 			p.visibility as visibility,
@@ -136,5 +132,11 @@
 	<select id="getRecommendType" resultType="java.lang.Integer">
 		select recommendType from product where productId=#{productId}
 	</select>
+	<select id="findSkus" resultType="com.caimei.www.pojo.page.Sku">
+		select unit,price,ifnull(stock,0) as stock,
+		       ifnull(minBuyNumber,(select buyNum from product_ladder_price where productId=#{productId} order by buynum asc limit 1)) as minBuyNumber
+		from cm_sku
+		where productId= #{productId}
+	</select>
 
 </mapper>

+ 6 - 4
src/main/resources/static/css/pay/caimei-pay.css

@@ -54,9 +54,10 @@
     .pay-goods .good-main .list-title .t-li:nth-child(1){width: 8%;}
     .pay-goods .good-main .list-title .t-li:nth-child(2){width: 15%;}
     .pay-goods .good-main .list-title .t-li:nth-child(3){width: 27%;}
-    .pay-goods .good-main .list-title .t-li:nth-child(4){width: 15%;}
+    .pay-goods .good-main .list-title .t-li:nth-child(4){width: 10%;}
     .pay-goods .good-main .list-title .t-li:nth-child(5){width: 15%;}
-    .pay-goods .good-main .list-title .t-li:nth-child(6){width: 20%;}
+    .pay-goods .good-main .list-title .t-li:nth-child(6){width: 10%;}
+    .pay-goods .good-main .list-title .t-li:nth-child(7){width: 15%;}
 
     .pay-goods .good-main .list-container{width: 100%;height: auto;background: #ffffff;padding: 10px 20px;float: left;border-bottom: 1px solid #F7F7F7;opacity: 1;box-sizing: border-box;}
     .pay-goods .good-main .list-container.active{height: 0;opacity: 0;}
@@ -66,9 +67,10 @@
     .pay-goods .good-main .list-container .list-main .t-li:nth-child(1){width: 8%;}
     .pay-goods .good-main .list-container .list-main .t-li:nth-child(2){width: 15%;}
     .pay-goods .good-main .list-container .list-main .t-li:nth-child(3){width: 27%;text-align: justify;text-overflow:ellipsis;display: -webkit-box;word-break: break-all;-webkit-box-orient: vertical;-webkit-line-clamp: 1;overflow: hidden;}
-    .pay-goods .good-main .list-container .list-main .t-li:nth-child(4){width: 15%;}
+    .pay-goods .good-main .list-container .list-main .t-li:nth-child(4){width: 10%;}
     .pay-goods .good-main .list-container .list-main .t-li:nth-child(5){width: 15%;}
-    .pay-goods .good-main .list-container .list-main .t-li:nth-child(6){width: 20%;}
+    .pay-goods .good-main .list-container .list-main .t-li:nth-child(6){width: 10%;}
+    .pay-goods .good-main .list-container .list-main .t-li:nth-child(7){width: 15%;}
     .pay-goods .good-main .list-container .list-main .t-li img{width: 30px;height: 30px;border-radius: 5px;background-color: #f7f7f7;margin-top: 9px;}
     .pay-goods .good-main .list-container .list-main .t-li .tag{display: block; position: absolute;z-index: 10;left: 50%;top: 33px;transform: translateX(-50%);width: 40px;font-size: 12px;background: #FF2A2A;color: #fff;line-height: 18px;text-align: center;border-radius: 0 0 4px 4px}
     .pay-goods .good-main .ws-list-container .list-main {height: 60px !important;}

+ 4 - 4
src/main/resources/static/css/pay/caimei-paylist.css

@@ -13,9 +13,9 @@
     .pay-list-title{width: 100%;height: 56px;background-color: #FFFFFF;padding: 0 16px;box-sizing: border-box;margin-bottom: 10px;}
     .pay-list-title .pay-list-view{float: left;line-height: 56px;font-size: 14px;color: #627386;text-align: left;}
     .pay-list-title .pay-list-view.t1{width: 40%;}
-    .pay-list-title .pay-list-view.t2{width: 30%;}
+    .pay-list-title .pay-list-view.t2{width: 20%;}
     .pay-list-title .pay-list-view.t3{width: 15%;}
-    .pay-list-title .pay-list-view.t4{width: 15%;}
+    .pay-list-title .pay-list-view.t4{width: 10%;}
     .pay-list-cell{width: 100%;height: auto;box-sizing: border-box;padding: 0 16px 20px 16px;background-color: #FFFFFF;margin-bottom: 10px;}
     .pay-list-cell .list-cell-title{width: 100%;height:60px;box-sizing: border-box;padding:10px 0;border-bottom: 1px solid #E1E1E1;}
     .pay-list-cell .list-cell-title .list-cell-logo{width: 40px;height: 40px;box-sizing: border-box;border: 1px solid #E1E1E1;border-radius: 2px;float: left;}
@@ -24,9 +24,9 @@
     .pay-list-cell .list-cell-content{width: 100%;height: 134px;box-sizing: border-box;padding: 17px 0;}
     .pay-list-cell .list-cell-pros{float: left;}
     .pay-list-cell .list-cell-pros.p1{width: 40%;}
-    .pay-list-cell .list-cell-pros.p2{width: 30%;}
+    .pay-list-cell .list-cell-pros.p2{width: 20%;}
     .pay-list-cell .list-cell-pros.p3{width: 15%;}
-    .pay-list-cell .list-cell-pros.p4{width: 15%;}
+    .pay-list-cell .list-cell-pros.p4{width: 10%;}
     .pay-list-cell .list-cell-pros.p1 .cell-pros-image{width: 100px;height: 100px;float: left;margin-right: 16px;box-sizing: border-box;border: 1px solid #E1E1E1;border-radius: 2px;}
     .pay-list-cell .list-cell-pros.p1 .cell-pros-image img{width: 100%;height: 100%;display: block;}
     .pay-list-cell .list-cell-pros.p1 .cell-pros-name{width: 300px;float: left;height: 100px;box-sizing: border-box;padding:30px 0;}

+ 11 - 2
src/main/resources/static/css/product/detail.h5.css

@@ -28,14 +28,21 @@ li{list-style:none}
 .productBox .detailBox .row>i{font-style:normal;margin-right:2vw;}
 .productBox .detailBox .row>em{font-style:normal;color:#4A4F58}
 .productBox .detailBox .row>em.p{font-weight:bold;}
+.productBox .detailBox .row>em.p.price{color: #F94B4B;font-size:3.8vw;}
 .productBox .detailBox .row>em del{color: #93979F}
 .productBox .detailBox .row>em.ser{color:#93979F;display:inline-block;width: 24%}
 .productBox .detailBox .row>em.ser:before{content:'\2713';display:inline-block;width:3.4vw;height:3.4vw;text-align:center;line-height:3.4vw;font-size:3.4vw;background:#E15616;border-radius:1.7vw;color:#FFF;margin-right:1.4vw}
 .productBox .detailBox .row .coupon-tags{display: inline-block;box-sizing: border-box;line-height: 5vw;}
 .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{font-style:normal;display: inline-block;}
 .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 .row .unit-tags{display: inline-block;box-sizing: border-box;line-height: 5vw;}
+.productBox .detailBox .row .unit-tags>em{font-style:normal;display: inline-block;margin-right: 8px;position: relative;}
+.productBox .detailBox .row .unit-tags .unitTags{display: inline-block;height: 5.2vw;line-height: 5.2vw;border: 1px solid #BFC6D2;border-radius: 2px;font-size: 2.8vw;color: #627386;background: #FFFFFF;padding: 0 1.6vw;position: relative;font-style: normal;cursor: pointer;margin-right: 8px;margin-bottom: 3vw;}
+.productBox .detailBox .row .unit-tags .unitTags.active{border-color: #E15621;color: #E15621;}
+.productBox .detailBox .row .unit-tags .unitTags.active .tips{background: #E15616;}
+.productBox .detailBox .row .unit-tags .tips{display: block;padding: 0 1.2vw;height: 4.2vw;line-height: 4.2vw;font-style: normal; font-size: 2.4vw;text-align: center;background: #CBD2DF;border-radius: 2px;position: absolute;right: -5px;top: -12px;color: #FFFFFF;}
 .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}
@@ -54,13 +61,15 @@ li{list-style:none}
 .productBox .detailBox .price .svip-tag .svip-price span:nth-child(2){margin-left: -0.4vw}
 
 .productBox .detailBox .number{display:inline-block;width:26.6vw;line-height:6.4vw;height:6.4vw;box-sizing:border-box;border:1px solid #FFE6DC;border-radius:2px;font-size:0;white-space:nowrap;text-align:center;overflow:hidden;vertical-align:top}
-.productBox .detailBox .number>em{display:inline-block;width:6.4vw;height:6.4vw;background:#FFE6DC;font-size:4vw;line-height:6vw;vertical-align:top}
+.productBox .detailBox .number>em{display:inline-block;width:6.4vw;height:6.4vw;background:#FFE6DC;font-size:4vw;line-height:6vw;vertical-align:top;font-style: normal;}
 .productBox .detailBox .number input{width:13.5vw;border:none;line-height:6vw;vertical-align:top;text-align:center;color:#E15616;font-size:3.4vw}
 .productBox .detailBox .detail .btn{position:absolute;right:2.8vw;top:2.8vw;height:6vw;line-height:6vw;padding:0 2vw;background:#F94B4B;font-size:3.4vw;color:#FFF;border-radius:2px}
 .productBox .detailBox .btnBox:before{content:'';display:block;width:200%;height:2.7vw;background:#F5F5F5;margin-left:-25%}
 .productBox .detailBox .btnBox{text-align:center}
 .productBox .detailBox .btnBox .cart,.productBox .detailBox .btnBox .buy{display:inline-block;width:40vw;height:11.2vw;line-height:11.2vw;text-align:center;border:1px solid #E15616;background:#FFE6DC;cursor:pointer;border-radius:2px;font-size:3.4vw;color:#E15616;margin:1.7vw 1.1vw}
 .productBox .detailBox .btnBox .buy{background:#E15616;color:#FFF}
+.productBox .detailBox .btnBox .cart.disable{background: #FFE6DC;border-color: rgba(255, 230, 220, 0.3);}
+.productBox .detailBox .btnBox .buy.disable{background: rgba(225, 86, 22, 0.2);border-color: rgba(225, 86, 22, 0.2);}
 .productBox .detailBox .concatBox{height:20vw;padding-bottom:4vw}
 .productBox .detailBox .concatBox img{height:20vw;width:auto}
 .productBox .detailBox .upgrade{width:100%;background:#F94B4B;border-radius:2px;display:inline-block;text-align:center;height:11.2vw;line-height:11.2vw;font-size:3.4vw;color:#FFF;margin:1.7vw 0}

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

@@ -35,18 +35,25 @@ li{list-style:none;}
 .productBox .detailBox .detail hr{border:none;border-top:1px dashed #E2E7EF;margin:12px 0}
 .productBox .detailBox .row{padding:3px 0 3px 80px;line-height:24px;}
 .productBox .detailBox .row.actStatus{position: relative}
-.productBox .detailBox .row .l{display:inline-block;min-width:60px;height:24px;text-align:justify;vertical-align:top;margin-left:-80px;}
+.productBox .detailBox .row .l{display:inline-block;min-width:70px;height:24px;text-align:justify;vertical-align:top;margin-left:-80px;}
 .productBox .detailBox .row .l:after{content:'';display:inline-block;width:100%}
 .productBox .detailBox .row>i{font-style:normal;}
 .productBox .detailBox .row>em{font-style:normal;color:#333333;margin-left: 15px}
 .productBox .detailBox .row>em.red {color: #f94b4b;}
 .productBox .detailBox .row>em del{color: #93979F}
 .productBox .detailBox .row>em.p{font-weight:bold;}
+.productBox .detailBox .row>em.p.price{color: #F94B4B;font-size: 18px;}
 .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 .row .unit-tags{display: inline-block;padding-left: 7px;}
+.productBox .detailBox .row .unit-tags>em{font-style:normal;display: inline-block;margin-right: 8px;position: relative;}
+.productBox .detailBox .row .unit-tags .unitTags{display: inline-block;height: 24px;line-height: 24px;border: 1px solid #BFC6D2;border-radius: 3px;font-size: 14px;color: #627386;background: #FFFFFF;padding: 0 8px;position: relative;font-style: normal;cursor: pointer;margin-right: 8px;margin-bottom: 11px;}
+.productBox .detailBox .row .unit-tags .unitTags.active{border-color: #E15621;color: #E15621;}
+.productBox .detailBox .row .unit-tags .unitTags.active .tips{background: #E15616;}
+.productBox .detailBox .row .unit-tags .tips{display: block;padding: 0 4px;height: 16px;line-height: 16px;font-style: normal; font-size: 12px;text-align: center;background: #CBD2DF;border-radius: 2px;position: absolute;right: -5px;top: -8px;color: #FFFFFF;}
 .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;}
@@ -74,6 +81,8 @@ li{list-style:none;}
 .productBox .detailBox .detail .row .btn{top:6px;right:0}
 .productBox .detailBox .btnBox{padding:15px 0}
 .productBox .detailBox .btnBox .cart,.productBox .detailBox .btnBox .buy{display:inline-block;width:160px;height:40px;line-height:40px;text-align:center;border:1px solid #E15616;background:#fff;cursor:pointer;border-radius:2px;font-size:16px;color:#E15616;margin:0 10px}
+.productBox .detailBox .btnBox .cart.disable{background: #FFE6DC;border-color: rgba(255, 230, 220, 0.3);color: #EFC5B2;}
+.productBox .detailBox .btnBox .buy.disable{background: rgba(225, 86, 22, 0.2);border-color: rgba(225, 86, 22, 0.2);}
 .productBox .detailBox .btnBox .cart:before{display:inline-block;width:20px;height:20px;vertical-align:middle;background-position:-30px -1px;margin-right:2px}
 .productBox .detailBox .btnBox .buy{background:#E15616;color:#FFF}
 .productBox .detailBox .detail .btn:hover,.productBox .detailBox .btnBox .cart:hover,.productBox .detailBox .btnBox .buy:hover{opacity:.8}
@@ -101,14 +110,56 @@ li{list-style:none;}
 .product-supporting-list .tr-1 .images{width: 70px;height: 70px;display: block;box-sizing: border-box;border: 1px solid #E2E7EF;border-radius: 2px;}
 .product-supporting-list .tr-2{width:20%;height: 100%;box-sizing: border-box;padding: 16px 0;}
 .product-supporting-list .tr-2 p{text-align: justify;text-overflow: ellipsis;overflow: hidden;display: -webkit-box;-webkit-line-clamp: 2;line-clamp: 2;-webkit-box-orient: vertical;word-break: break-all;}
-.product-supporting-list .tr-3{width:15%;height: 100%;box-sizing: border-box;padding: 16px;}
+.product-supporting-list .tr-3{width:15%;box-sizing: border-box;padding: 16px;position: relative;}
+.product-supporting-list .tr-3 .sku-popup{position: relative;height: 26px;display: inline-block;box-sizing: border-box;cursor: pointer; border: 1px solid #E2E7EF;border-radius: 2px;padding: 0 8px;}
+.product-supporting-list .tr-3 .sku-popup .sku-text{width: 54px;height: 24px;text-align: left; display: block;line-height: 24px;font-size: 12px;color: #22272E;overflow: hidden;text-overflow: ellipsis;-webkit-line-clamp: 1;-webkit-box-orient: vertical;float: left;}
+.product-supporting-list .tr-3 .sku-popup .sku-icon{width: 24px;height: 24px;float: right;}
+.product-supporting-list .tr-3 .sku-popup .sku-icon .icon:before{width: 24px;height: 24px;background-position:-83px 2px;}
+.product-supporting-list .tr-3 .sku-popup-viw{width: 360px;height: 394px;z-index: 99; box-sizing: border-box;padding: 16px;position: absolute;bottom: -376px;left: 36px;background: #FFFFFF;box-shadow: 0px 6px 16px 1px rgba(0,0,0,0.1);border: 1px solid #E2E7EF;}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-title{width: 100%;height: 80px;float: left;margin-bottom: 10px;}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-image{width: 80px;height: 80px;float: left;border: 1px dashed #E2E7EF;box-sizing: border-box;}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-image img{width: 100%;height: 100%;display: block}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-price{width: 200px;height: 80px;float: left;box-sizing: border-box;padding-left: 16px;padding-top: 16px;text-align: left;color: #F94B4B;}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-price .price_grade{float: left;width: 100%;margin-bottom: 10px;}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-price .icon:before{width:63px;height: 22px;}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-price .icon.i1:before{background-position:-2px -715px}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-price .icon.i2:before{background-position:-2px -745px}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-price .icon.i3:before{background-position:-2px -775px}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-price .icon.i4:before{background-position:-2px -805px}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-price .icon.i5:before{background-position:-2px -835px}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-price .main_price_show{float: left;width: 100%;margin-bottom: 10px;color: #F94B4B;text-align: left;}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-price .price_text_tag{float: left;}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-price .couponTag{float: left;margin-right: 5px;}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-price .icon{float: left;}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-price .icon:before {width: 63px;height: 22px;}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-price .icon:before {background-position: -2px -715px;}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-price .svip-tag{height:22px;letter-spacing:0;float: left;}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-price .svip-tag .svip-icon{position:relative;z-index:9;display:inline-block;width:30px;height:22px;text-align:center;line-height:22px;font-size:12px;font-weight:400;color:#F0CB72;opacity:1;background:#333333}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-price .svip-tag .svip-icon.btr{border-radius:2px 8px 0px 2px}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-price .svip-tag .svip-price{z-index:1;position:relative;display:inline-block;padding-left:24px;padding-right:2px;margin-left:-27px;line-height:22px;background:#F0CB72;opacity:1;border-radius:2px;font-size:12px}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-price .svip-tag .svip-price span{color: #333}
+
+.product-supporting-list .tr-3 .sku-popup-viw .sku-h1 {width: 100%;height: 20px;line-height: 20px;font-size: 14px;color: #22272E;font-weight: bold;float: left;text-align: left;}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-unit{width: 100%;height: 180px;padding: 12px 0;overflow-y: scroll;box-sizing: border-box;}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-unit .unitTags{display: inline-block;height: 24px;line-height: 24px;border: 1px solid #BFC6D2;border-radius: 2px;font-size: 12px;color: #627386;background: #FFFFFF;padding: 0 8px;position: relative;font-style: normal;cursor: pointer;margin-right: 8px;margin-bottom: 11px;float: left;}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-unit .unitTags.active{border-color: #E15621;color: #E15621;}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-unit .unitTags.active .tips{background: #E15616;}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-unit .tips{display: block;padding: 0 4px;height: 16px;line-height: 16px;font-style: normal; font-size: 12px;text-align: center;background: #CBD2DF;border-radius: 2px;position: absolute;right: -5px;top: -8px;color: #FFFFFF;}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-button{width: 100%;height: 80px;position: absolute;bottom: 0;left: 0;}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-button .sku-button-center{width: 184px;height: 80px;margin: 0 auto;box-sizing: border-box;padding: 24px 0;}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-button .sku-btn{width: 68px;height: 32px;display: block;margin: 0 12px;font-size: 14px;text-align: center;line-height: 32px;float: left;}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-button .sku-btn.cancel{background: #E2E2E2;color: #4A4F58;}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-button .sku-btn.confirm{background: #E15621;color: #FFFFFF;}
+.product-supporting-list .tr-3 .sku-popup-viw .sku-button .sku-btn.disable{background: rgba(255,86,22,0.3);color: #FFFFFF;}
+
+
 .product-supporting-list .tr-4{width:20%;box-sizing: border-box;padding: 16px 0 0 44px;text-align: left;}
 .product-supporting-list .tr-4 .price .icon:before{width:63px;height: 22px;}
-.product-supporting-list .tr-4 .price .icon.i5:before{background-position:-2px -835px}
 .product-supporting-list .tr-4 .price .icon.i1:before{background-position:-2px -715px}
 .product-supporting-list .tr-4 .price .icon.i2:before{background-position:-2px -745px}
 .product-supporting-list .tr-4 .price .icon.i3:before{background-position:-2px -775px}
 .product-supporting-list .tr-4 .price .icon.i4:before{background-position:-2px -805px}
+.product-supporting-list .tr-4 .price .icon.i5:before{background-position:-2px -835px}
 .product-supporting-list .tr-4 .price .price_text_tag .svip-tag{-webkit-transform: translateX(4px);-ms-transform: translateX(4px);transform: translateX(4px);}
 .product-supporting-list .tr-4 .price .price_text_tag .listTag{-webkit-transform: translateX(4px);-ms-transform: translateX(4px);transform: translateX(4px);margin: 0;float: left;}
 .product-supporting-list .tr-4 .price .svip-tag{width:100%;height:22px;letter-spacing:0}
@@ -117,6 +168,8 @@ li{list-style:none;}
 .product-supporting-list .tr-4 .price .svip-tag .svip-icon.btr{border-radius:2px 8px 0px 2px}
 .product-supporting-list .tr-4 .price .svip-tag .svip-price{z-index:1;position:relative;display:inline-block;padding-left:24px;padding-right:2px;margin-left:-27px;line-height:22px;background:#F0CB72;opacity:1;border-radius:2px;font-size:12px}
 .product-supporting-list .tr-4 .price .svip-tag .svip-price span{color: #333}
+.product-supporting-list .tr-4 .price .main_price_unde{float: left;width: 100%;margin-bottom: 10px;color: #F94B4B;text-align: left;}
+.product-supporting-list .tr-4 .price .main_price_show{float: left;width: 100%;margin-bottom: 10px;color: #F94B4B;text-align: left;}
 .product-supporting-list .tr-5{width:20%;box-sizing: border-box;padding: 16px 0;}
 .product-supporting-list .tr-5 .number{display:inline-block;width:96px;line-height:24px;height:24px;box-sizing:border-box;border:1px solid #FFE6DC;border-radius:2px;font-size:0;white-space:nowrap;text-align:center;overflow:hidden;vertical-align:top}
 .product-supporting-list .tr-5 .number>em{display:inline-block;width:24px;height:22px;background:#FFE6DC;font-size:20px;font-style:normal;line-height:20px;vertical-align:top;cursor:pointer}

+ 47 - 1
src/main/resources/static/css/product/product-supporting.h5.css

@@ -17,7 +17,51 @@
     .supporting-list .list-image img{width: 24vw;height: 24vw;box-sizing: border-box;display: block;border: 1px solid #E1E1E1;border-radius: 2px;}
     .supporting-list .list-info{width: 59vw;float: left;height: 100%;}
     .supporting-list .list-info .list-name{width:100%;height: 10.5vw;text-overflow: ellipsis;overflow: hidden;display: -webkit-box;-webkit-line-clamp: 2;line-clamp: 2;-webkit-box-orient: vertical;word-break: break-all;line-height: 5.2vw;text-align: justify;font-size: 3.6vw;color: #22272E;}
-    .supporting-list .list-info .list-unit{width: 100%;line-height: 5vw;height: 5vw;font-size: 2.8vw;color: #627386;}
+    .supporting-list .list-info .list-unit{width: 100%;line-height: 6vw;height: 6vw;font-size: 2.8vw;color: #627386;margin-bottom: 2vw;}
+    .supporting-list .list-info .list-unit .sku-label{line-height: 6vw;height: 6vw;font-size: 2.8vw;color: #627386;float: left;}
+    .supporting-list .list-info .list-unit .sku-popup{position: relative;height: 6vw;display: inline-block;box-sizing: border-box;cursor: pointer; border: 1px solid #E2E7EF;border-radius: 2px;padding: 0 8px;}
+    .supporting-list .list-info .list-unit .sku-popup .sku-text{width: 54px;height: 6vw;text-align: left; display: block;line-height: 6vw;font-size: 12px;color: #22272E;overflow: hidden;text-overflow: ellipsis;-webkit-line-clamp: 1;-webkit-box-orient: vertical;float: left;}
+    .supporting-list .list-info .list-unit .sku-popup .sku-icon{width: 24px;height: 24px;float: right;}
+    .supporting-list .list-info .list-unit .sku-popup .sku-icon .mIcon:before{width: 24px;height: 24px;background-position:-208px -1px;}
+    /*SKU弹窗*/
+    .supporting-list .list-unit .sku-popup-model{width: 100%;height: 100%;background: rgba(0,0,0,0.6);position: fixed;top: 0;left: 0;z-index: 1000;}
+    .supporting-list .list-unit .sku-popup-viw{width: 100%;height: 105vw;z-index: 1001; box-sizing: border-box;padding: 3.2vw;position: fixed;bottom: 0;left: 0;background: #FFFFFF;box-shadow: 0px 6px 16px 1px rgba(0,0,0,0.1);border: 1px solid #E2E7EF;}
+    .supporting-list .list-unit .sku-popup-viw .sku-title{width: 100%;height: 80px;float: left;margin-bottom: 10px;}
+    .supporting-list .list-unit .sku-popup-viw .sku-image{width: 80px;height: 80px;float: left;border: 1px dashed #E2E7EF;box-sizing: border-box;}
+    .supporting-list .list-unit .sku-popup-viw .sku-image img{width: 100%;height: 100%;display: block}
+    .supporting-list .list-unit .sku-popup-viw .sku-price{width: 200px;height: 80px;float: left;box-sizing: border-box;padding-left: 16px;padding-top: 16px;}
+    .supporting-list .list-unit .sku-popup-viw .sku-price .bold{float: left;display: block;font-size: 4vw;}
+    .supporting-list .list-unit .sku-popup-viw .sku-price .price_grade{float: left;width: 100%;margin-bottom: 10px;line-height: 4.8vw;}
+    .supporting-list .list-unit .sku-popup-viw .sku-price .main_price_unde{float: left;width: 100%;margin-bottom: 10px;color: #F94B4B;text-align: left;line-height: 24px;font-size: 4vw;}
+    .supporting-list .list-unit .sku-popup-viw .sku-price .main_price_show{float: left;width: 100%;margin-bottom: 10px;color: #F94B4B;text-align: left;line-height: 24px;font-size: 4vw;}
+    .supporting-list .list-unit .sku-popup-viw .sku-price .price_text_tag{float: left;line-height: 22px;}
+    .supporting-list .list-unit .sku-popup-viw .sku-price .couponTag{float: left;margin-right: 5px;}
+    .supporting-list .list-unit .sku-popup-viw .sku-price .icon{float: left;}
+    .supporting-list .list-unit .sku-popup-viw .sku-price .mIcon:before {width: 15.8vw;height: 5vw;}
+    .supporting-list .list-unit .sku-popup-viw .sku-price .mIcon:before {background-position: -84vw -90.7vw;}
+    .supporting-list .list-unit .sku-popup-viw .sku-price .mIcon.i5:before {background-position: -84vw -97.5vw;}
+    .supporting-list .list-unit .sku-popup-viw .sku-price .mIcon.i1:before {background-position: -84vw -69.5vw;}
+    .supporting-list .list-unit .sku-popup-viw .sku-price .mIcon.i2:before {background-position: -84vw -76.5vw;}
+    .supporting-list .list-unit .sku-popup-viw .sku-price .mIcon.i3:before {background-position: -84vw -83.7vw;}
+    .supporting-list .list-unit .sku-popup-viw .sku-price .mIcon.i4:before {background-position: -84vw -90.7vw;}
+    .supporting-list .list-unit .sku-popup-viw .sku-price .svip-tag{height:22px;letter-spacing:0;float: left;}
+    .supporting-list .list-unit .sku-popup-viw .sku-price .svip-tag .svip-icon{position:relative;z-index:9;display:inline-block;width:30px;height:4.8vw;text-align:center;line-height:4.8vw;font-size:12px;font-weight:400;color:#F0CB72;opacity:1;background:#333333;}
+    .supporting-list .list-unit .sku-popup-viw .sku-price .svip-tag .svip-icon.btr{border-radius:2px 8px 0px 2px}
+    .supporting-list .list-unit .sku-popup-viw .sku-price .svip-tag .svip-price{z-index:1;position:relative;display:inline-block;padding-left:24px;padding-right:2px;margin-left:-22px;line-height:22px;background:#F0CB72;opacity:1;border-radius:2px;font-size:12px}
+    .supporting-list .list-unit .sku-popup-viw .sku-price .svip-tag .svip-price span{color: #333}
+    .supporting-list .list-unit .sku-popup-viw .sku-h1 {width: 100%;height: 20px;line-height: 20px;font-size: 14px;color: #22272E;font-weight: bold;float: left;text-align: left;}
+    .supporting-list .list-unit .sku-popup-viw .sku-unit{width: 100%;height: 148px;padding: 12px 0;overflow-y: scroll;box-sizing: border-box;}
+    .supporting-list .list-unit .sku-popup-viw .sku-unit .unitTags{display: inline-block;height: 28px;line-height: 28px;border: 1px solid #BFC6D2;border-radius: 2px;font-size: 12px;color: #627386;background: #FFFFFF;padding: 0 8px;position: relative;font-style: normal;cursor: pointer;margin-right: 8px;margin-bottom: 11px;float: left;}
+    .supporting-list .list-unit .sku-popup-viw .sku-unit .unitTags.active{border-color: #E15621;color: #E15621;}
+    .supporting-list .list-unit .sku-popup-viw .sku-unit .unitTags.active .tips{background: #E15616;}
+    .supporting-list .list-unit .sku-popup-viw .sku-unit .tips{display: block;padding: 0 4px;height: 18px;line-height: 18px;font-style: normal; font-size: 12px;text-align: center;background: #CBD2DF;border-radius: 2px;position: absolute;right: -5px;top: -8px;color: #FFFFFF;}
+    .supporting-list .list-unit .sku-popup-viw .sku-button{width: 100%;height: 30vw;position: absolute;bottom: 0;left: 0;}
+    .supporting-list .list-unit .sku-popup-viw .sku-button .sku-button-center{width: 72vw;height: 17vw;margin: 24px auto;box-sizing: border-box;padding: 16px 0;}
+    .supporting-list .list-unit .sku-popup-viw .sku-button .sku-btn{width: 30vw;height: 9vw;display: block;margin: 0 12px;font-size: 14px;text-align: center;line-height: 9vw;float: left;}
+    .supporting-list .list-unit .sku-popup-viw .sku-button .sku-btn.cancel{background: #E2E2E2;color: #4A4F58;}
+    .supporting-list .list-unit .sku-popup-viw .sku-button .sku-btn.confirm{background: #E15621;color: #FFFFFF;}
+    .supporting-list .list-unit .sku-popup-viw .sku-button .sku-btn.disable{background: rgba(255,86,22,0.3);color: #FFFFFF;}
+    
     .supporting-list .list-info .list-price{width: 100%;line-height: 5vw;height: 5vw;font-size: 2.8vw;margin-bottom: 1.5vw;}
     .supporting-list .list-info .list-price .price-box{float: left;line-height: 5vw;}
     .supporting-list .list-info .list-price .price-box .main_price_unde{color: #f94b4b;}
@@ -55,4 +99,6 @@
     .supporting-submit .btn{width: 22.4vw;height: 11.2vw;flex: 1;line-height: 11.2vw;border: 1px solid #E15621;text-align: center;color: #FFFFFF;font-size: 3.4vw;margin: 0 2vw;border-radius: 2px;}
     .supporting-submit .btn.buy{background-color: #E15621;}
     .supporting-submit .btn.add{background-color: #FFE6DC;color: #E15621;}
+
+
 }

+ 91 - 2
src/main/resources/static/css/shopping/shopping.css

@@ -49,8 +49,8 @@ li{list-style:none}
     .listWrap .cartItem>div>*{vertical-align:middle}
     .listWrap .c0{float:left;width:34px;text-align:left;height: 100%;display: flex;align-items: center;}
     .listWrap .c1{float:left;width:102px;height:100%;position:relative;}
-    .listWrap .c2{float:left;width:400px}
-    .listWrap .c3{float:left;width:200px}
+    .listWrap .c2{float:left;width:280px}
+    .listWrap .c3{float:left;width:170px}
     .listWrap .c4{float:left;width:142px}
     .listWrap .c5{float:left;width:185px;position:relative}
     .listWrap .c6{float:left;width:122px}
@@ -61,6 +61,7 @@ li{list-style:none}
     .listWrap .c1 span.tip{position:absolute;background:#ff4500;line-height:20px;height:20px;padding:0 10px;white-space:nowrap;font-size:12px;color:#FFF;top:0;left:0}
     .listWrap .coll-checked{width: 16px;height: 16px;cursor: pointer;background: url("/img/cart/icon_weigouxuan@2x.png") no-repeat;background-size: cover;display: block;margin-right: 6px;}
     .listWrap .coll-checked.checked{background: url("/img/cart/icon_yixuanze@2x.png") no-repeat;background-size: cover;}
+    .listWrap .coll-checked.disable{background: url("/img/cart/icon_weigouxuan_desied@2x.png") no-repeat;background-size: cover;}
     .listWrap .image{display:block;width:100px;height:100px;border:1px solid #F7F7F7}
     .listWrap .name,.listWrap .unit{line-height:20px;display:inline-block;max-height:100px;overflow:hidden;vertical-align:middle}
     .listWrap .cartItem .name{padding-left:14px}
@@ -81,6 +82,52 @@ 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}
+    /*重选规格*/
+    .listWrap .c8{float:left;width: 450px;height: 100%;box-sizing: border-box;padding: 37px 120px;position: relative;}
+    .listWrap .sku-popup{float:left;width: 100%;height: 100%;}
+    .listWrap .sku-popup .sku-text{float:left;font-size: 16px;line-height: 24px;color: #22272E;text-align: left;margin-right: 10px;}
+    .listWrap .sku-popup .sku-btn{display: block;height: 24px;padding: 0 8px; float:left;font-size: 14px;line-height: 24px;color: #E15621;text-align: center;box-sizing: border-box;border: 1px solid #E15621;border-radius: 2px;}
+    .listWrap .c8 .sku-popup-viw{width: 360px;height: 394px;z-index: 999; box-sizing: border-box;padding: 16px;position: absolute;bottom: -360px;left: 36px;background: #FFFFFF;box-shadow: 0px 6px 16px 1px rgba(0,0,0,0.1);border: 1px solid #E2E7EF;}
+    .listWrap .c8 .sku-popup-viw.none{display: none;}
+    .listWrap .c8 .sku-popup-viw.show{display: block;}
+    .listWrap .c8 .sku-popup-viw .sku-title{width: 100%;height: 80px;float: left;margin-bottom: 10px;}
+    .listWrap .c8 .sku-popup-viw .sku-image{width: 80px;height: 80px;float: left;border: 1px dashed #E2E7EF;box-sizing: border-box;}
+    .listWrap .c8 .sku-popup-viw .sku-image img{width: 100%;height: 100%;display: block}
+    .listWrap .c8 .sku-popup-viw .sku-price{width: 200px;height: 80px;float: left;box-sizing: border-box;padding-left: 16px;padding-top: 16px;}
+    .listWrap .c8 .sku-popup-viw .sku-price .price_grade{float: left;width: 100%;margin-bottom: 10px;}
+    .listWrap .c8 .sku-popup-viw .sku-price .main_price_unde{float: left;width: 100%;margin-bottom: 10px;color: #F94B4B;text-align: left;line-height: 24px;}
+    .listWrap .c8 .sku-popup-viw .sku-price .main_price_show{float: left;width: 100%;margin-bottom: 10px;color: #F94B4B;text-align: left;line-height: 24px;}
+    .listWrap .c8 .sku-popup-viw .sku-price .price_text_tag{float: left;line-height: 22px;}
+    .listWrap .c8 .sku-popup-viw .sku-price .couponTag{float: left;margin-right: 5px;}
+    .listWrap .c8 .sku-popup-viw .sku-price .icon{float: left;}
+    .listWrap .c8 .sku-popup-viw .sku-price .icon:before {width: 63px;height: 22px;}
+    .listWrap .c8 .sku-popup-viw .sku-price .icon:before {background-position: -2px -715px;}
+    .listWrap .c8 .sku-popup-viw .sku-price .svip-tag{height:22px;letter-spacing:0;float: left;}
+    .listWrap .c8 .sku-popup-viw .sku-price .svip-tag .svip-icon{position:relative;z-index:9;display:inline-block;width:30px;height:22px;text-align:center;line-height:22px;font-size:12px;font-weight:400;color:#F0CB72;opacity:1;background:#333333}
+    .listWrap .c8 .sku-popup-viw .sku-price .svip-tag .svip-icon.btr{border-radius:2px 8px 0px 2px}
+    .listWrap .c8 .sku-popup-viw .sku-price .svip-tag .svip-price{z-index:1;position:relative;display:inline-block;padding-left:24px;padding-right:2px;margin-left:-27px;line-height:22px;background:#F0CB72;opacity:1;border-radius:2px;font-size:12px}
+    .listWrap .c8 .sku-popup-viw .sku-price .svip-tag .svip-price span{color: #333}
+
+    .listWrap .c8 .sku-popup-viw .sku-h1 {width: 100%;height: 20px;line-height: 20px;font-size: 14px;color: #22272E;font-weight: bold;float: left;text-align: left;}
+    .listWrap .c8 .sku-popup-viw .sku-unit{width: 100%;height: 148px;padding: 12px 0;overflow-y: scroll;box-sizing: border-box;}
+    .listWrap .c8 .sku-popup-viw .sku-unit .unitTags{display: inline-block;height: 24px;line-height: 24px;border: 1px solid #BFC6D2;border-radius: 2px;font-size: 12px;color: #627386;background: #FFFFFF;padding: 0 8px;position: relative;font-style: normal;cursor: pointer;margin-right: 8px;margin-bottom: 11px;float: left;}
+    .listWrap .c8 .sku-popup-viw .sku-unit .unitTags.active{border-color: #E15621;color: #E15621;}
+    .listWrap .c8 .sku-popup-viw .sku-unit .unitTags.active .tips{background: #E15616;}
+    .listWrap .c8 .sku-popup-viw .sku-unit .tips{display: block;padding: 0 4px;height: 16px;line-height: 16px;font-style: normal; font-size: 12px;text-align: center;background: #CBD2DF;border-radius: 2px;position: absolute;right: -5px;top: -8px;color: #FFFFFF;}
+    .listWrap .c8 .sku-popup-viw .sku-button{width: 100%;height: 104px;position: absolute;bottom: 0;left: 0;}
+    .listWrap .c8 .sku-popup-viw .sku-button .sku-button-center{width: 184px;height: 80px;margin: 24px auto;box-sizing: border-box;padding: 16px 0;}
+    .listWrap .c8 .sku-popup-viw .sku-button .sku-btn{width: 68px;height: 32px;display: block;margin: 0 12px;font-size: 14px;text-align: center;line-height: 32px;float: left;}
+    .listWrap .c8 .sku-popup-viw .sku-button .sku-btn.cancel{background: #E2E2E2;color: #4A4F58;}
+    .listWrap .c8 .sku-popup-viw .sku-button .sku-btn.confirm{background: #E15621;color: #FFFFFF;}
+    .listWrap .c8 .sku-popup-viw .sku-button .sku-btn.disable{background: rgba(255,86,22,0.3);color: #FFFFFF;}
+    .listWrap .c8 .sku-popup-viw .sku-num{width: 100%;height: 24px;float: left;box-sizing: border-box;padding: 0 16px;}
+    .listWrap .c8 .sku-popup-viw .sku-num .sku-numlabe{float: left;line-height: 24px;font-size: 14px;color: #22272E;font-weight: bold;}
+    .listWrap .c8 .sku-popup-viw .sku-num .sku-number{float: right;display: inline-block;width: 96px;line-height: 24px;height: 24px;box-sizing: border-box;border: 1px solid #FFE6DC;border-radius: 2px;font-size: 0;white-space: nowrap;text-align: center;overflow: hidden;vertical-align: top;}
+    .listWrap .c8 .sku-popup-viw .sku-num .sku-number .input{width: 48px;border: none;line-height: 24px;font-size: 14px;vertical-align: top;text-align: center;color: #E15616;}
+    .listWrap .c8 .sku-popup-viw .sku-num .sku-number>span{display: inline-block;width: 24px;height: 24px;background: #FFE6DC;font-size: 20px;font-style: normal;line-height: 22px;vertical-align: top;cursor: pointer;}
+
+
+
     /*优惠券选择*/
     .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;}
@@ -329,6 +376,48 @@ li{list-style:none}
     .invalidTit .tit{color:#22272e;float:left}
     .invalidTit .delAll{color:#e15616;float:right}
     .invalidTit .tit em{font-style:normal;color:#e15616}
+    /*重选规格*/
+    .listWrap .c8{position: absolute;width: 58vw;left: 39vw;top: 19vw;height: 6vw;}
+    .listWrap .sku-popup{float:left;width: 100%;height: 100%;}
+    .listWrap .sku-popup .sku-text{float:left;font-size: 3.6vw;line-height: 6vw;color: #22272E;text-align: left;margin-right: 10px;}
+    .listWrap .sku-popup .sku-btn{display: block;height: 6vw;padding: 0 8px; float:left;font-size: 3.4vw;line-height: 6vw;color: #E15621;text-align: center;box-sizing: border-box;border: 1px solid #E15621;border-radius: 2px;}
+    .listWrap .c8 .sku-popup-viw{width: 100%;height: 110vw;z-index: 999; box-sizing: border-box;padding: 3.2vw;position: fixed;bottom: 0;left: 0;background: #FFFFFF;box-shadow: 0px 6px 16px 1px rgba(0,0,0,0.1);border: 1px solid #E2E7EF;}
+    .listWrap .c8 .sku-popup-model{width: 100%;height: 100%;background: rgba(0,0,0,0.6);position: fixed;top: 0;left: 0;z-index: 990;}
+    .listWrap .c8 .sku-popup-viw .sku-title{width: 100%;height: 80px;float: left;margin-bottom: 10px;}
+    .listWrap .c8 .sku-popup-viw .sku-image{width: 80px;height: 80px;float: left;border: 1px dashed #E2E7EF;box-sizing: border-box;}
+    .listWrap .c8 .sku-popup-viw .sku-image img{width: 100%;height: 100%;display: block}
+    .listWrap .c8 .sku-popup-viw .sku-price{width: 200px;height: 80px;float: left;box-sizing: border-box;padding-left: 16px;padding-top: 16px;}
+    .listWrap .c8 .sku-popup-viw .sku-price .price_grade{float: left;width: 100%;margin-bottom: 10px;}
+    .listWrap .c8 .sku-popup-viw .sku-price .main_price_unde{float: left;width: 100%;margin-bottom: 10px;color: #F94B4B;text-align: left;line-height: 24px;font-size: 4vw;}
+    .listWrap .c8 .sku-popup-viw .sku-price .main_price_show{float: left;width: 100%;margin-bottom: 10px;color: #F94B4B;text-align: left;line-height: 24px;font-size: 4vw;}
+    .listWrap .c8 .sku-popup-viw .sku-price .price_text_tag{float: left;line-height: 22px;}
+    .listWrap .c8 .sku-popup-viw .sku-price .couponTag{float: left;margin-right: 5px;}
+    .listWrap .c8 .sku-popup-viw .sku-price .icon{float: left;}
+    .listWrap .c8 .sku-popup-viw .sku-price .icon:before {width: 63px;height: 22px;}
+    .listWrap .c8 .sku-popup-viw .sku-price .icon:before {background-position: -2px -715px;}
+    .listWrap .c8 .sku-popup-viw .sku-price .svip-tag{height:4.2vw;letter-spacing:0;float: left;}
+    .listWrap .c8 .sku-popup-viw .sku-price .svip-tag .svip-icon{position:relative;z-index:9;display:inline-block;width:30px;height:4.2vw;text-align:center;line-height:4.2vw;font-size:12px;font-weight:400;color:#F0CB72;opacity:1;background:#333333}
+    .listWrap .c8 .sku-popup-viw .sku-price .svip-tag .svip-icon.btr{border-radius:2px 8px 0px 2px}
+    .listWrap .c8 .sku-popup-viw .sku-price .svip-tag .svip-price{z-index:1;position:relative;display:inline-block;padding-left:24px;padding-right:2px;margin-left:-25px;line-height:4.2vw;background:#F0CB72;opacity:1;border-radius:2px;font-size:12px}
+    .listWrap .c8 .sku-popup-viw .sku-price .svip-tag .svip-price span{color: #333}
+    .listWrap .c8 .sku-popup-viw .sku-h1 {width: 100%;height: 20px;line-height: 20px;font-size: 14px;color: #22272E;font-weight: bold;float: left;text-align: left;}
+    .listWrap .c8 .sku-popup-viw .sku-unit{width: 100%;height: 148px;padding: 12px 0;overflow-y: scroll;box-sizing: border-box;}
+    .listWrap .c8 .sku-popup-viw .sku-unit .unitTags{display: inline-block;height: 28px;line-height: 28px;border: 1px solid #BFC6D2;border-radius: 2px;font-size: 12px;color: #627386;background: #FFFFFF;padding: 0 8px;position: relative;font-style: normal;cursor: pointer;margin-right: 8px;margin-bottom: 11px;float: left;}
+    .listWrap .c8 .sku-popup-viw .sku-unit .unitTags.active{border-color: #E15621;color: #E15621;}
+    .listWrap .c8 .sku-popup-viw .sku-unit .unitTags.active .tips{background: #E15616;}
+    .listWrap .c8 .sku-popup-viw .sku-unit .tips{display: block;padding: 0 4px;height: 18px;line-height: 18px;font-style: normal; font-size: 12px;text-align: center;background: #CBD2DF;border-radius: 2px;position: absolute;right: -5px;top: -8px;color: #FFFFFF;}
+    .listWrap .c8 .sku-popup-viw .sku-button{width: 100%;height: 38vw;position: absolute;bottom: 0;left: 0;}
+    .listWrap .c8 .sku-popup-viw .sku-button .sku-button-center{width: 72vw;height: 17vw;margin: 24px auto;box-sizing: border-box;padding: 16px 0;}
+    .listWrap .c8 .sku-popup-viw .sku-button .sku-btn{width: 30vw;height: 9vw;display: block;margin: 0 12px;font-size: 14px;text-align: center;line-height: 9vw;float: left;}
+    .listWrap .c8 .sku-popup-viw .sku-button .sku-btn.cancel{background: #E2E2E2;color: #4A4F58;}
+    .listWrap .c8 .sku-popup-viw .sku-button .sku-btn.confirm{background: #E15621;color: #FFFFFF;}
+    .listWrap .c8 .sku-popup-viw .sku-button .sku-btn.disable{background: rgba(255,86,22,0.3);color: #FFFFFF;}
+    .listWrap .c8 .sku-popup-viw .sku-num{width: 100%;height: 24px;box-sizing: border-box;padding: 0 16px;}
+    .listWrap .c8 .sku-popup-viw .sku-num .sku-numlabe{float: left;line-height: 24px;font-size: 14px;color: #22272E;font-weight: bold;}
+    .listWrap .c8 .sku-popup-viw .sku-num .sku-number{float: right;display: inline-block;width: 96px;line-height: 24px;height: 24px;box-sizing: border-box;border: 1px solid #FFE6DC;border-radius: 2px;font-size: 0;white-space: nowrap;text-align: center;overflow: hidden;vertical-align: top;}
+    .listWrap .c8 .sku-popup-viw .sku-num .sku-number .input{width: 48px;border: none;line-height: 24px;font-size: 14px;vertical-align: top;text-align: center;color: #E15616;}
+    .listWrap .c8 .sku-popup-viw .sku-num .sku-number>span{display: inline-block;width: 24px;height: 24px;background: #FFE6DC;font-size: 20px;font-style: normal;line-height: 22px;vertical-align: top;cursor: pointer;}
+
     /*优惠券*/
     .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;}

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

@@ -14,17 +14,17 @@
     .red {color: #f94b4b;}
     .product {background: #fff;padding: 10px 15px;box-shadow: 0px 3px 6px 0px rgba(0, 0, 0, 0.07);}
     .product-title {border-bottom: solid 1px #e2e7ef;height: 54px;line-height: 54px}
-    .product-title li {display: inline-block;list-style: none;color: #627386;width: 20%;text-align: center;}
-    .product-title li:nth-child(1) {width: 46%;text-align: left}
+    .product-title li {display: inline-block;list-style: none;color: #627386;width: 15%;text-align: center;}
+    .product-title li:nth-child(1) {width: 40%;text-align: left}
     .product-title li:last-child{width: 12%}
     .pro-information li {list-style: none;}
     .pro-information li {width: 100%;padding: 10px 0;}
-    .pro-information li div {display: inline-block;width:20%;text-align: center;color: #627386;}
+    .pro-information li div {display: inline-block;width:15%;text-align: center;color: #627386;}
      .pro-information li div:last-child{width: 12%}
-    .pro-information li div.product-img {width: 46%;text-align: left;position: relative;}
+    .pro-information li div.product-img {width: 40%;text-align: left;position: relative;}
     .product-img .tips{width: 40px;height: 20px;border-radius: 2px;font-size: 12px;line-height: 20px;text-align: center;display: block;position: absolute;top: 0;left: 0;color: #FFFFFF; background-image: linear-gradient(214deg, #ff4500 0%, #ff5800 53%, #ff4367 100%);}
     .product-img img {width: 70px;height: 70px;border: solid 1px #e2e7ef;}
-    .product-img h3 {display: inline-block;width: 300px;margin-left: 10px;font-size: 16px;color: #22272e;vertical-align: middle;word-break: break-all;overflow: hidden;text-overflow: ellipsis;display: -webkit-inline-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical}
+    .product-img h3 {display: inline-block;width: 286px;margin-left: 10px;font-size: 16px;color: #22272e;vertical-align: middle;word-break: break-all;overflow: hidden;text-overflow: ellipsis;display: -webkit-inline-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical}
     .info-title {color: #22272e;font-size: 16px;padding: 15px;}
     .title-name {color: #22272e;margin-bottom: 20px}
     .title-time {float: right;color: #9aa5b5;}

+ 2 - 2
src/main/resources/static/css/supplier-center/order/logistics-detail.css

@@ -12,12 +12,12 @@
     .protitle {color: #22272e;font-size: 16px;padding: 15px 20px;}
     .product ul li {list-style: none;display: inline-block;}
     .product-title li {width: 11%;text-align: center;}
-    .product-title li:nth-child(1) {width: 50%;text-align: left;}
+    .product-title li:nth-child(1) {width: 42%;text-align: left;}
     .product {padding: 0 21px;background: #fff;overflow: hidden;padding-bottom: 30px;box-shadow: 0px 3px 6px 0px rgba(0, 0, 0, 0.07)}
     .product-title {height: 56px;line-height: 56px;color: #627386;border-bottom: solid 1px #e2e7ef}
     .product-info li {width: 100%;padding: 15px 0}
     .product-img h3 {display: inline-block;width: 300px;margin-left: 10px;font-size: 16px;letter-spacing: 1px;color: #22272e;vertical-align: middle;word-break: break-all;overflow: hidden;text-overflow: ellipsis;display: -webkit-inline-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical}
-    .product-info li div.product-img {width: 50%;text-align: left}
+    .product-info li div.product-img {width: 42%;text-align: left}
     .product-img img {width: 70px;height: 70px;border: solid 1px #e2e7ef;}
     .product-info li div {display: inline-block;width: 11%;text-align: center;color: #627386}
     .record-time {color: #9aa5b5;font-size: 12px;padding-top: 5px}

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

@@ -13,11 +13,11 @@
     .product {background: #fff;padding: 10px 20px;box-shadow: 0px 3px 6px 0px rgba(0, 0, 0, 0.07);}
     .product-title {border-bottom: solid 1px #e2e7ef;height: 54px;line-height: 54px}
     .product-title li {display: inline-block;list-style: none;color: #627386;width: 11%;text-align: center;}
-    .product-title li:nth-child(1) {width: 50%;text-align: left}
+    .product-title li:nth-child(1) {width: 42%;text-align: left}
     .pro-information li {list-style: none;}
     .pro-information li {width: 100%;padding: 10px 0;}
     .pro-information li div {display: inline-block;width: 11%;text-align: center;color: #627386;}
-    .pro-information li div.product-img {width: 50%;text-align: left;position: relative;}
+    .pro-information li div.product-img {width: 42%;text-align: left;position: relative;}
     .product-img .tips{width: 40px;height: 20px;border-radius: 2px;font-size: 12px;line-height: 20px;text-align: center;display: block;position: absolute;top: 0;left: 0;color: #FFFFFF; background-image: linear-gradient(214deg, #ff4500 0%, #ff5800 53%, #ff4367 100%);}
     .product-img img {width: 70px;height: 70px;border: solid 1px #e2e7ef;}
     .product-img h3 {display: inline-block;width: 300px;margin-left: 10px;font-size: 16px;color: #22272e;vertical-align: middle;word-break: break-all;overflow: hidden;text-overflow: ellipsis;display: -webkit-inline-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical}

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

@@ -13,14 +13,14 @@
     .protitle {color: #22272e;font-size: 16px;padding: 15px 20px; }
     .product ul li {list-style: none;display: inline-block; }
     .product-title li {width: 11%;text-align: center;}
-    .product-title li:nth-child(1) {width: 50%;text-align: left; }
+    .product-title li:nth-child(1) {width: 42%;text-align: left; }
     .product {padding: 0 20px;background: #fff;overflow: hidden;box-shadow: 0px 3px 6px 0px rgba(0, 0, 0, 0.07); }
     .product-title {height: 56px;line-height: 56px;color: #627386;border-bottom: solid 1px #e2e7ef}
     .product-info li {width: 100%;padding: 15px 0}
     .product-img{position: relative;}
     .product-img .tips{width: 40px;height: 20px;border-radius: 2px;font-size: 12px;line-height: 20px;text-align: center;display: block;position: absolute;top: 0;left: 0;color: #FFFFFF; background-image: linear-gradient(214deg, #ff4500 0%, #ff5800 53%, #ff4367 100%);}
     .product-img h3 {display: inline-block;width: 300px;margin-left: 10px;font-size: 16px;vertical-align: middle;word-break: break-all;overflow: hidden;text-overflow: ellipsis;display: -webkit-inline-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical}
-    .product-info li div.product-img {width: 50%;text-align: left}
+    .product-info li div.product-img {width: 42%;text-align: left}
     .product-img img {width: 70px;height: 70px;border: solid 1px #e2e7ef;}
     .product-info li div {display: inline-block;width: 11%;text-align: center}
     .record-time {color: #9aa5b5;font-size: 12px;padding-top: 5px;}

+ 145 - 134
src/main/resources/static/css/supplier-center/shop/release.css

@@ -7,140 +7,151 @@ input[type="number"]{
 }
 div{box-sizing: border-box;}
 @media screen and (min-width:768px) {
-.container{width: 100%;height: auto;box-sizing: border-box;background-color: #FFFFFF;padding: 0 16px;}
-.release-stepbox{width: 100%;box-sizing: border-box;    line-height: 60px; }
-.release-stepbox .stepSpan{float: left;padding: 0 15px;margin-right: 80px;position: relative;}
-.release-stepbox .stepSpan:last-child{margin-right: 0;}
-.release-stepbox .stepSpan p{font-size: 16px;line-height: 24px;color: #9aa5b5;text-align: center;display: inline-block}
-.release-stepbox .stepSpan p span{display: inline-block;width: 24px;height: 24px;font-size: 14px;text-align: center;line-height: 24px;background: #9aa5b5;color: #FFFFFF;border-radius: 40px;margin-top: 5px;}
-.release-stepbox .stepSpan.active  p{color:#E15616 ;}
-.release-stepbox .stepSpan.active p span{background: #E15616;}
-.release-container{width: 100%;height: auto;border-top: 1px solid #e2e7ef;padding:20px 0;opacity: 0;}
-.release-container.active{opacity: 1;}
-.release-main-container{width: 100%;padding: 0 220px;box-sizing: border-box;}
-.release-main-container.new{width: 100%;padding: 0 24px;box-sizing: border-box;}
-.release-main-container.new .release-image{width: 100%;height: auto;}
-.release-main-container.new .release-image img{width: 100%;height: auto;}
-.release-from{width: 100%;height:auto;margin-bottom: 15px;line-height: 32px;font-size: 14px;color: #333;}
-.release-from.text p .em{color: #e15616;}
-.release-from.none{margin-bottom: 0;}
-.release-from .release-label{width: 100%;float: left;text-align: left;height: 32px;color: #627386;}
-.release-from .release-label span{color: #FF0000;}
-.release-from .release-input{width: 100%;height: auto;float: left;position: relative;}
-.release-from .release-input.expen{margin-top:10px;}
-.release-from .release-input.expen .input{padding-left:30px;}
-.release-from .release-input.expen .span{width:30px;height:36px;display:block;position:absolute;top:0;left:0;text-align:center;line-height:36px;font-size:14px;color:#22272e;}
-.release-from .release-input .input{width: 100%;height: 36px;padding: 0 10px;border-radius: 2px;border: 1px solid #b8bfca;float: left;font-size: 13px;box-sizing: border-box;}
-.release-from .release-input .input.price{padding-left: 30px;}
-.release-from .release-input .yang{width: 30px;height: 36px;position: absolute;left: 0;top: 0;line-height: 36px;text-align: center;}
-.release-from .release-input .unit{height: 36px;padding: 0 10px;position: absolute;right: 0;top: 0;line-height: 36px;text-align: right;font-size: 14px;}
-.release-from .release-input .tax{display: block;float: left;}
-.release-from .release-input .mg{margin-left: 10px;}
-.release-from .release-input .edit-btn{display: block;float: left;margin-left: 20px;color: #e15616;text-decoration: underline;}
-.release-from .release-input .input.keyword{width: 243px;margin:0 10px 10px 0;}
-.release-from .release-input .p{display: block;position: absolute;right: 0;bottom: 0;line-height: 32px;font-size: 12px;color: #e15616;text-decoration: underline;}
-.release-from .release-input .add{display: inline-block;width: 100%;height: 20px;float: right;line-height: 20px;font-size: 14px;color: #e15616;text-align: right;}
-.release-from .release-input .add span{font-size: 20px;}
-.release-from .release-input .input.keyword:nth-child(2n){margin-right: 0;}
-.release-from .release-input .release-param{width:100%;height: auto;padding: 0 10px;border: 1px solid #b8bfca;float: left;margin-bottom: 10px;border-radius: 2px;position: relative;}
-.release-from .release-input .release-param .param-input{width: 100%;height: 36px;border: none;font-size: 13px;line-height: 36px;}
-.release-from .release-input .release-param .param-input:first-child{border-bottom: 1px solid #e2e7ef;}
-.release-from .release-input .release-param .del-btn{display: block;line-height: 64px;color: #FF0000;font-size: 14px;position: absolute;    top: -18px;right: 0px;}
-.release-from .release-input .release-opt{width: 100%;height: 155px;border: 1px solid #e4e7ed;border-radius: 2px;background-color: #fff;box-shadow: 0 2px 12px 0 rgba(0,0,0,.1);overflow: hidden;overflow-y: scroll;box-sizing: border-box;margin: 5px 0;padding: 10px 0;z-index: 88;position: absolute;top: 31px;left: 0;}
-.release-from .release-input .textarea{width: 420px;height: 150px;position: relative;padding: 10px;overflow: hidden;}
-.release-from .release-input .textarea .limit-text{position: absolute;right: 15px;bottom: 10px;line-height: 30px;font-size:13px ;color: #D0D0D0;}
-.release-from .release-input .textarea .limit-text .red{color:#e15616 ;}
-.release-from .release-input .textarea textarea{width: 100%;height: 100%;border: 1px solid #EBEBEB;border-radius: 2px;resize: none;padding: 10px;font-size: 13px;color: #333;}
-.release-from .release-input .release-opt .opt-item{font-size: 14px;padding: 0 10px;position: relative;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;color: #606266;height: 34px;line-height: 34px;box-sizing: border-box;cursor: pointer;}
-.release-from .release-input .release-opt .opt-item:hover {background-color: #F5E7E0;color: #e15616;}
-.release-from .release-input.upload{height: 78px;}
-.release-from .release-input.upload.image{height: auto;width: 500px;}
-.release-from .release-input.Editor{width: 600px;min-height: 540px;margin: 0;}
-.release-from  .upload-file{width: 90px;height: 90px;border-radius: 2px;position: relative;float: left;margin-right: 10px;margin-bottom: 10px;cursor: pointer;}
-.release-from  .upload-file .icon-del:before{width: 16px;height: 16px;cursor: pointer;    background-position: -117px -140px;position: absolute;top: 0;right: 0}
-.release-from  .upload-file .icon-add{width:100% ;height: 100%;background: url("/img/account/icon-addimg.svg");display: block}
-.release-from  .upload-file .input-file{width: 90px;height: 90px;opacity: 0;cursor: pointer;position: absolute;top: 0}
-.release-from  .upload-file .upload-img{width: 100%;height: 100%;display: block;border-radius: 2px;}
-.release-from .release-input .input.tags{width: 390px;}
-.release-from .release-input .add-btn{width: 90px;height: 34px;border-radius: 2px;border: 1px solid #e15616;background:#ffe6dc;float: left;margin-left: 15px;text-align: center;line-height: 34px;font-size: 14px;color:#e15616 ;cursor: pointer;}
-.release-from .release-input .add-btn.active{background-color: #ffe6dc;color: #e15616;}
-.release-from .release-tips{width: 100%;color: #FF0000;float: left;}
-.release-from.text{height: auto;}
-.release-from .text{width: 303px;line-height: 32px;font-size: 12px;color: #e15616;}
-.release-from .tags-main{width: 100%;height: auto;}
-.release-from .tags-main .item-tags{padding: 0 10px;line-height: 28px;background: #FFF3E5;text-align: center;font-size:14px;color:  #333333;margin: 5px;border-radius: 2px;float: left;position: relative;}
-.release-from .tags-main .item-tags .del-tags{width: 16px;height: 16px;display: block;background: url("/img/base/icon.png") no-repeat;background-position: -175px -300px;position: absolute;right: -5px;top: -5px;cursor: pointer;}
-.release-from .select-main{padding: 0 10px;cursor: pointer;width: 155px;height: 36px;border: 1px solid #b8bfca;border-radius: 2px;line-height: 32px;color: #333;font-size: 14px;margin-right: 15px;float: left;appearance: none;-webkit-appearance: none;-moz-appearance: none;position: relative;}
-.release-from .select-main:last-child{margin-right: 0;}
-.release-from .select-main.border{border: 1px solid #e15616;}
-.release-from .select-main .select{cursor: pointer;width: 135px;height: 36px;line-height: 36px;color: #22272e;font-size: 12px;float: left;appearance: none;-webkit-appearance: none;-moz-appearance: none;border: none;background: url("/img/supplier/Retract.png") no-repeat scroll right 0px center transparent;}
-.release-from .select-main .option-main{width: 100%;min-height:50px;max-height: 200px;border: 1px solid #e4e7ed;border-radius: 2px;background-color: #fff;box-shadow: 0 2px 12px 0 rgba(0,0,0,.1);overflow: hidden;overflow-y: scroll;box-sizing: border-box;margin: 5px 0;padding: 10px 0;z-index: 88;position: absolute;top: 28px;left: 0;}
-.release-from .select-main .option {font-size: 14px;padding: 0 20px;position: relative;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;color: #606266;height: 34px;line-height: 34px;box-sizing: border-box;cursor: pointer;}
-.release-from .select-main .option:hover {background-color: #F5E7E0;color: #e15616;}
-.release-from .from-button{width: fit-content;height: 70px;padding: 10px 0;margin: auto}
-.release-from .from-button.last{margin-left: 0;}
-.release-from .from-button.last .btn{width: 153px;}
-.release-from .from-button .btn{box-sizing: border-box;width: 232px;height: 50px;background-color: #e15616;box-shadow: 0px 3px 6px 0px rgba(249, 75, 75, 0.17);border-radius: 2px;display: block;line-height: 50px;text-align: center;float: left;margin: 0 5px;}
-.release-from .from-button .btn.prev{border: 1px solid #e15616;background-color: #ffe6dc;color: #e15616;}
-.release-from .from-button .btn.next{background-color: #e15616;color: #fff;}
-.release-from .from-button .btn.eyes{background-color:#A69DFE;color: #fff;}
-/*预览*/
-.preview-container{width: 100%;height: 100%;position: fixed;top: 0;left: 0;background: rgba(0,0,0,.5);z-index: 99999;display: none;}
-.preview-container .preview-content{width: 100%;height: 100%;display: flex;justify-content: center;align-items: center;}
-.preview-container .preview-content img{border-radius: 4px;}
-/*销售信息*/
-input[type="radio"]{opacity:0;}
-.release-from .release-input .release-props{width: 100%;height: 36px;}
-.release-from .release-input .release-props .release-radio{width:150px;height:36px;margin-right:10px;line-height:34px;box-sizing:border-box;font-size:14px;text-align:center;display:inline-block}
-.release-from .release-input .release-props .release-radio.second{width:100px;}
-.release-from .release-input .release-props .release-radio input{display:none}
-.release-from .release-input .release-props .release-radio i{display:block;font-style:normal;cursor:pointer;width:100%;height:100%;position:relative;overflow:hidden;border-radius:2px;background:#FFF;border:1px solid #b8bfca;color:#627386;}
-.release-from .release-input .release-props .release-radio i:before{position:absolute;right:0;bottom:0;display:none;width:20px;height:20px;background-position:-208px -253px}
-.release-from .release-input .release-props .release-radio input:checked + i{border-color:#e15616;color:#e15616}
-.release-from .release-input .release-props .release-radio input:checked + i:before{display:block}
-.release-from .release-input .release-province{width: 100%;height: auto;margin-top: 20px;}
-.release-from .release-input .release-province .province-item{line-height:26px;padding: 0 10px;text-align: center;font-size: 14px;color: #627386;background: #F0F3F7;border-radius: 2px;display: block;margin: 0 10px 10px 0;float: left;}
-.release-from .release-input .release-province .province-item.active{background: #e15616;color: #FFF;}
-/*税率弹窗*/
-.popup{width: 100%;height: 100%;background: rgba(0,0,0,0.3);position: fixed;top: 0;left: 0;z-index: 999;opacity: 0;}
-.popup.active{opacity: 1;}
-.popup-layer{-webkit-overflow-scrolling: touch;width: 338px;position: absolute;top: 0;left: 0;bottom: 0;right: 0;margin: auto;background-color: #fff;-webkit-background-clip: content;border-radius: 2px;box-shadow: 1px 1px 50px rgba(0,0,0,.3);z-index: 1000;}
-.popup-layer.bran{height: 330px;}
-.popup-layer.edit{height: 153px;}
-.popup-layer .popup-title{padding: 0 80px 0 20px;height: 42px;line-height: 42px;border-bottom: 1px solid #eee;font-size: 14px;color: #333;overflow: hidden;background-color: #F8F8F8;border-radius: 2px 2px 0 0;position: relative;}
-.popup-title .popup-close{width: 16px;height: 16px;display: block;position: absolute;right: 10px;top: 13px;background-position: 1px -40px;cursor: pointer;}
-.popup-layer .popup-content{padding: 13px;}
-.popup-layer .popup-content .popup-from{height: auto;color: #999999;line-height: 32px;position: relative;}
-.popup-layer .popup-content .popup-from input{width: 260px;height: 32px;border: 1px solid #EFEFEF;font-size: 14px;color: #333;padding: 0 10px;margin-left: 10px;box-sizing: border-box;}
-.popup-layer .popup-content .popup-from span{display: inline-block;height: 32px;font-size: 14px;color: #999;float: left;}
-.popup-layer .popup-content .popup-from .popup-p{width: 220px;height: 32px;font-size: 14px;color: #333;padding: 0 10px;float: left;}
-.popup-layer .popup-content .popup-from .popup-textarea{height: 78px;float: left;margin-left: 10px;border-radius: 2px;}
-.popup-layer .popup-content .popup-from textarea{width: 100%;height: 100%;font-size: 12px;resize:none;border: 1px solid #EFEFEF;padding: 5px;}
-.popup-layer .popup-content .popup-from  .poze{width: 40px;height: 30px;text-align: center;font-size: 14px;position: absolute;right: 0;top: 0;}
-.popup-layer .popup-content .popup-tips{color: #FF0000;float: left;margin-left: 10px;}
-.popup-layer .popup-content .popup-from .popup-upload{height: 48px;float: left;margin-left: 10px;}
-.popup-layer .popup-content .popup-from  .upload-file{width: 48px;height: 48px;border: 1px solid #EFEFEF;border-radius: 2px;position: relative;cursor: pointer;}
-.popup-layer .popup-content .popup-from .upload-file .icon-del{width: 16px;height: 16px;display: block;background: url("/img/base/icon.png") no-repeat;background-position: -175px -300px;position: absolute;right: -8px;top: -8px;cursor: pointer;}
-.popup-layer .popup-content .popup-from  .upload-file .icon-add{display: block;width:26px ;height: 26px;background: url("/img/base/icon.png") no-repeat;background-position: -168px -374px;position: absolute;top: 0;left: 0;right: 0;bottom: 0;margin: auto;}
-.popup-layer .popup-content .popup-from .upload-file .input-file{width: 48px;height: 48px;opacity:0;cursor: pointer;margin-left: 0;padding: 0;}
-.popup-layer .popup-content .popup-from  .upload-file .upload-img{width: 100%;height: 100%;display: block;border-radius: 2px;}
-.popup-layer .popup-button{text-align: right;padding: 0 15px 12px;pointer-events: auto;user-select: none;-webkit-user-select: none;}
-.popup-layer .popup-button .btn{height: 28px;line-height: 28px;margin: 5px 5px 0;padding: 0 15px;border: 1px solid #dedede;background-color: #fff;color: #333;border-radius: 2px;font-weight: 400;cursor: pointer;text-decoration: none;display: inline-block;}
-.popup-layer .popup-button .btn.btn-confim{border-color: #E15616;background-color: #E15616;color: #fff}
-.popup-layer .popup-button .btn.btn-cancel{}
-.ck-editor {min-width: 600px !important;}
-.ck-content {min-height: 500px;}
-.footTop{height: 100px;}
-.baseHeadCenter .keyword{height: 40px;line-height: 40px;}
-input::placeholder{color: #9aa5b5}
-.release-from.shili .text{width: 100%;color: #627386}
-.imgText .text{width: 100%;color: #627386}
-.release-from .release-label.rightTxt{padding-left: 6px}
-.icon.del-btn:before{
-    width: 20px;
-    background-position: -114px -140px;
-    height: 20px
-}
+    .container{width: 100%;height: auto;box-sizing: border-box;background-color: #FFFFFF;padding: 0 16px;}
+    .release-stepbox{width: 100%;box-sizing: border-box;    line-height: 60px; }
+    .release-stepbox .stepSpan{float: left;padding: 0 15px;margin-right: 80px;position: relative;}
+    .release-stepbox .stepSpan:last-child{margin-right: 0;}
+    .release-stepbox .stepSpan p{font-size: 16px;line-height: 24px;color: #9aa5b5;text-align: center;display: inline-block}
+    .release-stepbox .stepSpan p span{display: inline-block;width: 24px;height: 24px;font-size: 14px;text-align: center;line-height: 24px;background: #9aa5b5;color: #FFFFFF;border-radius: 40px;margin-top: 5px;}
+    .release-stepbox .stepSpan.active  p{color:#E15616 ;}
+    .release-stepbox .stepSpan.active p span{background: #E15616;}
+    .release-container{width: 100%;height: auto;border-top: 1px solid #e2e7ef;padding:20px 0;opacity: 0;}
+    .release-container.active{opacity: 1;}
+    .release-main-container{width: 100%;padding:0 168px;box-sizing: border-box;}
+    .release-main-container.new{width: 100%;padding: 0 24px;box-sizing: border-box;}
+    .release-main-container.new .release-image{width: 100%;height: auto;}
+    .release-main-container.new .release-image img{width: 100%;height: auto;}
+    .release-from{width: 100%;height:auto;margin-bottom: 15px;line-height: 32px;font-size: 14px;color: #333;}
+    .release-from.text p .em{color: #e15616;}
+    .release-from.none{margin-bottom: 0;}
+    .release-from .release-label{width: 100%;float: left;text-align: left;height: 32px;color: #627386;font-weight: bold;}
+    .release-from .release-label span{color: #FF0000;}
+    .release-from .release-from-tr{width: 100%;height: 32px;float: left;}
+    .release-from .release-from-tr .tr-labe{width: 88px;height: 32px;float: left;text-align: left;font-size: 14px;color: #627386;line-height: 32px;margin-right: 14px;}
+    .release-from .release-from-tr .tr-labe .star{color: #F94B4B;}
+    .release-from .release-from-tr .tr-labe.none{margin-right: 0;}
+    .release-from .release-from-td{width: 100%;height: auto;float: left;margin: 8px 0;position: relative;}
+    .release-from .release-from-td .tr-labe{width: 88px;height: 36px;float: left;text-align: left;margin-right: 14px;}
+    .release-from .release-from-td .tr-labe.none{margin-right: 0;}
+    .release-from .release-from-td .tr-labe .tr-input{width: 100%;height: 36px;font-size: 14px;color: #627386;line-height: 36px;box-sizing: border-box;border: 1px solid #B8BFCA;padding: 0 5px;}
+    .release-from .release-from-td .tr-icon{width: 36px;height: 36px;box-sizing: border-box;padding: 4px;position: absolute;right: -46px;top: 0; cursor: pointer;}
+    .release-from .release-from-td .tr-icon .add:before{display: inline-block;width: 20px;height: 20px;vertical-align: middle;background-position: -51px 1px;margin-right: 2px;}
+    .release-from .release-from-td .tr-icon .del:before{display: inline-block;width: 20px;height: 20px;vertical-align: middle;background-position: -77px 1px;margin-right: 2px;}
+    .release-from .release-input{width: 100%;height: auto;float: left;position: relative;}
+    .release-from .release-input.expen{margin-top:10px;}
+    .release-from .release-input.expen .input{padding-left:30px;}
+    .release-from .release-input.expen .span{width:30px;height:36px;display:block;position:absolute;top:0;left:0;text-align:center;line-height:36px;font-size:14px;color:#22272e;}
+    .release-from .release-input .input{width: 100%;height: 36px;padding: 0 10px;border-radius: 2px;border: 1px solid #b8bfca;float: left;font-size: 13px;box-sizing: border-box;}
+    .release-from .release-input .input.price{padding-left: 30px;}
+    .release-from .release-input .yang{width: 30px;height: 36px;position: absolute;left: 0;top: 0;line-height: 36px;text-align: center;}
+    .release-from .release-input .unit{height: 36px;padding: 0 10px;position: absolute;right: 0;top: 0;line-height: 36px;text-align: right;font-size: 14px;}
+    .release-from .release-input .tax{display: block;float: left;}
+    .release-from .release-input .mg{margin-left: 10px;}
+    .release-from .release-input .edit-btn{display: block;float: left;margin-left: 20px;color: #e15616;text-decoration: underline;}
+    .release-from .release-input .input.keyword{width: 243px;margin:0 10px 10px 0;}
+    .release-from .release-input .p{display: block;position: absolute;right: 0;bottom: 0;line-height: 32px;font-size: 12px;color: #e15616;text-decoration: underline;}
+    .release-from .release-input .add{display: inline-block;width: 100%;height: 20px;float: right;line-height: 20px;font-size: 14px;color: #e15616;text-align: right;}
+    .release-from .release-input .add span{font-size: 20px;}
+    .release-from .release-input .input.keyword:nth-child(2n){margin-right: 0;}
+    .release-from .release-input .release-param{width:100%;height: auto;padding: 0 10px;border: 1px solid #b8bfca;float: left;margin-bottom: 10px;border-radius: 2px;position: relative;}
+    .release-from .release-input .release-param .param-input{width: 100%;height: 36px;border: none;font-size: 13px;line-height: 36px;}
+    .release-from .release-input .release-param .param-input:first-child{border-bottom: 1px solid #e2e7ef;}
+    .release-from .release-input .release-param .del-btn{display: block;line-height: 64px;color: #FF0000;font-size: 14px;position: absolute;    top: -18px;right: 0px;}
+    .release-from .release-input .release-opt{width: 100%;height: 155px;border: 1px solid #e4e7ed;border-radius: 2px;background-color: #fff;box-shadow: 0 2px 12px 0 rgba(0,0,0,.1);overflow: hidden;overflow-y: scroll;box-sizing: border-box;margin: 5px 0;padding: 10px 0;z-index: 88;position: absolute;top: 31px;left: 0;}
+    .release-from .release-input .textarea{width: 420px;height: 150px;position: relative;padding: 10px;overflow: hidden;}
+    .release-from .release-input .textarea .limit-text{position: absolute;right: 15px;bottom: 10px;line-height: 30px;font-size:13px ;color: #D0D0D0;}
+    .release-from .release-input .textarea .limit-text .red{color:#e15616 ;}
+    .release-from .release-input .textarea textarea{width: 100%;height: 100%;border: 1px solid #EBEBEB;border-radius: 2px;resize: none;padding: 10px;font-size: 13px;color: #333;}
+    .release-from .release-input .release-opt .opt-item{font-size: 14px;padding: 0 10px;position: relative;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;color: #606266;height: 34px;line-height: 34px;box-sizing: border-box;cursor: pointer;}
+    .release-from .release-input .release-opt .opt-item:hover {background-color: #F5E7E0;color: #e15616;}
+    .release-from .release-input.upload{height: 78px;}
+    .release-from .release-input.upload.image{height: auto;width: 500px;}
+    .release-from .release-input.Editor{width: 600px;min-height: 540px;margin: 0;}
+    .release-from  .upload-file{width: 90px;height: 90px;border-radius: 2px;position: relative;float: left;margin-right: 10px;margin-bottom: 10px;cursor: pointer;}
+    .release-from  .upload-file .icon-del:before{width: 16px;height: 16px;cursor: pointer; background-position: -118px -140px;position: absolute;top: 0;right: 0}
+    .release-from  .upload-file .icon-add{width:100% ;height: 100%;background: url("/img/account/icon-addimg.svg");display: block}
+    .release-from  .upload-file .input-file{width: 90px;height: 90px;opacity: 0;cursor: pointer;position: absolute;top: 0}
+    .release-from  .upload-file .upload-img{width: 100%;height: 100%;display: block;border-radius: 2px;}
+    .release-from .release-input .input.tags{width: 390px;}
+    .release-from .release-input .add-btn{width: 90px;height: 34px;border-radius: 2px;border: 1px solid #e15616;background:#ffe6dc;float: left;margin-left: 15px;text-align: center;line-height: 34px;font-size: 14px;color:#e15616 ;cursor: pointer;}
+    .release-from .release-input .add-btn.active{background-color: #ffe6dc;color: #e15616;}
+    .release-from .release-tips{width: 100%;color: #FF0000;float: left;}
+    .release-from.text{height: auto;}
+    .release-from .text{width: 303px;line-height: 32px;font-size: 12px;color: #e15616;}
+    .release-from .tags-main{width: 100%;height: auto;}
+    .release-from .tags-main .item-tags{padding: 0 10px;line-height: 28px;background: #FFF3E5;text-align: center;font-size:14px;color:  #333333;margin: 5px;border-radius: 2px;float: left;position: relative;}
+    .release-from .tags-main .item-tags .del-tags{width: 16px;height: 16px;display: block;background: url("/img/base/icon.png") no-repeat;background-position: -175px -300px;position: absolute;right: -5px;top: -5px;cursor: pointer;}
+    .release-from .select-main{padding: 0 10px;cursor: pointer;width: 155px;height: 36px;border: 1px solid #b8bfca;border-radius: 2px;line-height: 32px;color: #333;font-size: 14px;margin-right: 15px;float: left;appearance: none;-webkit-appearance: none;-moz-appearance: none;position: relative;}
+    .release-from .select-main:last-child{margin-right: 0;}
+    .release-from .select-main.border{border: 1px solid #e15616;}
+    .release-from .select-main .select{cursor: pointer;width: 135px;height: 36px;line-height: 36px;color: #22272e;font-size: 12px;float: left;appearance: none;-webkit-appearance: none;-moz-appearance: none;border: none;background: url("/img/supplier/Retract.png") no-repeat scroll right 0px center transparent;}
+    .release-from .select-main .option-main{width: 100%;min-height:50px;max-height: 200px;border: 1px solid #e4e7ed;border-radius: 2px;background-color: #fff;box-shadow: 0 2px 12px 0 rgba(0,0,0,.1);overflow: hidden;overflow-y: scroll;box-sizing: border-box;margin: 5px 0;padding: 10px 0;z-index: 88;position: absolute;top: 28px;left: 0;}
+    .release-from .select-main .option {font-size: 14px;padding: 0 20px;position: relative;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;color: #606266;height: 34px;line-height: 34px;box-sizing: border-box;cursor: pointer;}
+    .release-from .select-main .option:hover {background-color: #F5E7E0;color: #e15616;}
+    .release-from .from-button{width: fit-content;height: 70px;padding: 10px 0;}
+    .release-from .from-button.last{margin-left: 0;}
+    .release-from .from-button.last .btn{width: 153px;}
+    .release-from .from-button .btn{box-sizing: border-box;width: 232px;height: 50px;background-color: #e15616;box-shadow: 0px 3px 6px 0px rgba(249, 75, 75, 0.17);border-radius: 2px;display: block;line-height: 50px;text-align: center;float: left;margin-right: 6px;}
+    .release-from .from-button .btn.prev{border: 1px solid #e15616;background-color: #ffe6dc;color: #e15616;}
+    .release-from .from-button .btn.next{background-color: #e15616;color: #fff;}
+    .release-from .from-button .btn.eyes{background-color:#A69DFE;color: #fff;}
+    /*预览*/
+    .preview-container{width: 100%;height: 100%;position: fixed;top: 0;left: 0;background: rgba(0,0,0,.5);z-index: 99999;display: none;}
+    .preview-container .preview-content{width: 100%;height: 100%;display: flex;justify-content: center;align-items: center;}
+    .preview-container .preview-content img{border-radius: 4px;}
+    /*销售信息*/
+    input[type="radio"]{opacity:0;}
+    .release-from .release-input .release-props{width: 100%;height: 36px;}
+    .release-from .release-input .release-props .release-radio{width:150px;height:36px;margin-right:10px;line-height:34px;box-sizing:border-box;font-size:14px;text-align:center;display:inline-block}
+    .release-from .release-input .release-props .release-radio.second{width:100px;}
+    .release-from .release-input .release-props .release-radio input{display:none}
+    .release-from .release-input .release-props .release-radio i{display:block;font-style:normal;cursor:pointer;width:100%;height:100%;position:relative;overflow:hidden;border-radius:2px;background:#FFF;border:1px solid #b8bfca;color:#627386;}
+    .release-from .release-input .release-props .release-radio i:before{position:absolute;right:0;bottom:0;display:none;width:20px;height:20px;background-position:-208px -253px}
+    .release-from .release-input .release-props .release-radio input:checked + i{border-color:#e15616;color:#e15616}
+    .release-from .release-input .release-props .release-radio input:checked + i:before{display:block}
+    .release-from .release-input .release-province{width: 100%;height: auto;margin-top: 20px;}
+    .release-from .release-input .release-province .province-item{line-height:26px;padding: 0 10px;text-align: center;font-size: 14px;color: #627386;background: #F0F3F7;border-radius: 2px;display: block;margin: 0 10px 10px 0;float: left;}
+    .release-from .release-input .release-province .province-item.active{background: #e15616;color: #FFF;}
+    /*税率弹窗*/
+    .popup{width: 100%;height: 100%;background: rgba(0,0,0,0.3);position: fixed;top: 0;left: 0;z-index: 999;opacity: 0;}
+    .popup.active{opacity: 1;}
+    .popup-layer{-webkit-overflow-scrolling: touch;width: 338px;position: absolute;top: 0;left: 0;bottom: 0;right: 0;margin: auto;background-color: #fff;-webkit-background-clip: content;border-radius: 2px;box-shadow: 1px 1px 50px rgba(0,0,0,.3);z-index: 1000;}
+    .popup-layer.bran{height: 330px;}
+    .popup-layer.edit{height: 153px;}
+    .popup-layer .popup-title{padding: 0 80px 0 20px;height: 42px;line-height: 42px;border-bottom: 1px solid #eee;font-size: 14px;color: #333;overflow: hidden;background-color: #F8F8F8;border-radius: 2px 2px 0 0;position: relative;}
+    .popup-title .popup-close{width: 16px;height: 16px;display: block;position: absolute;right: 10px;top: 13px;background-position: 1px -40px;cursor: pointer;}
+    .popup-layer .popup-content{padding: 13px;}
+    .popup-layer .popup-content .popup-from{height: auto;color: #999999;line-height: 32px;position: relative;}
+    .popup-layer .popup-content .popup-from input{width: 260px;height: 32px;border: 1px solid #EFEFEF;font-size: 14px;color: #333;padding: 0 10px;margin-left: 10px;box-sizing: border-box;}
+    .popup-layer .popup-content .popup-from span{display: inline-block;height: 32px;font-size: 14px;color: #999;float: left;}
+    .popup-layer .popup-content .popup-from .popup-p{width: 220px;height: 32px;font-size: 14px;color: #333;padding: 0 10px;float: left;}
+    .popup-layer .popup-content .popup-from .popup-textarea{height: 78px;float: left;margin-left: 10px;border-radius: 2px;}
+    .popup-layer .popup-content .popup-from textarea{width: 100%;height: 100%;font-size: 12px;resize:none;border: 1px solid #EFEFEF;padding: 5px;}
+    .popup-layer .popup-content .popup-from  .poze{width: 40px;height: 30px;text-align: center;font-size: 14px;position: absolute;right: 0;top: 0;}
+    .popup-layer .popup-content .popup-tips{color: #FF0000;float: left;margin-left: 10px;}
+    .popup-layer .popup-content .popup-from .popup-upload{height: 48px;float: left;margin-left: 10px;}
+    .popup-layer .popup-content .popup-from  .upload-file{width: 48px;height: 48px;border: 1px solid #EFEFEF;border-radius: 2px;position: relative;cursor: pointer;}
+    .popup-layer .popup-content .popup-from .upload-file .icon-del{width: 16px;height: 16px;display: block;background: url("/img/base/icon.png") no-repeat;background-position: -175px -300px;position: absolute;right: -8px;top: -8px;cursor: pointer;}
+    .popup-layer .popup-content .popup-from  .upload-file .icon-add{display: block;width:26px ;height: 26px;background: url("/img/base/icon.png") no-repeat;background-position: -168px -374px;position: absolute;top: 0;left: 0;right: 0;bottom: 0;margin: auto;}
+    .popup-layer .popup-content .popup-from .upload-file .input-file{width: 48px;height: 48px;opacity:0;cursor: pointer;margin-left: 0;padding: 0;}
+    .popup-layer .popup-content .popup-from  .upload-file .upload-img{width: 100%;height: 100%;display: block;border-radius: 2px;}
+    .popup-layer .popup-button{text-align: right;padding: 0 15px 12px;pointer-events: auto;user-select: none;-webkit-user-select: none;}
+    .popup-layer .popup-button .btn{height: 28px;line-height: 28px;margin: 5px 5px 0;padding: 0 15px;border: 1px solid #dedede;background-color: #fff;color: #333;border-radius: 2px;font-weight: 400;cursor: pointer;text-decoration: none;display: inline-block;}
+    .popup-layer .popup-button .btn.btn-confim{border-color: #E15616;background-color: #E15616;color: #fff}
+    .popup-layer .popup-button .btn.btn-cancel{}
+    .ck-editor {min-width: 600px !important;}
+    .ck-content {min-height: 500px;}
+    .footTop{height: 100px;}
+    .baseHeadCenter .keyword{height: 40px;line-height: 40px;}
+    input::placeholder{color: #9aa5b5}
+    .release-from.shili .text{width: 100%;color: #627386}
+    .imgText .text{width: 100%;color: #627386}
+    .release-from .release-label.rightTxt{padding-left: 6px}
+    .icon.del-btn:before{
+        width: 20px;
+        background-position: -114px -140px;
+        height: 20px
+    }
 }
 
 /*移动*/

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

@@ -19,7 +19,7 @@ li{list-style:none}
     .productList{width:1200px;margin:0 auto;box-sizing:border-box}
     .productList .productItem {width: 184px;height: 268px;float: left;background: #fff;position: relative;margin: 0 16px 16px 0;overflow: hidden;float: left;position: relative;}
     .productList .productItem:nth-child(6n){margin-right: 0;}
-    .productList .product-cancel{width: 100%;height: 32px;line-height: 32px;text-align: center;background-color: #FFE6DC;color: #E15621;font-size: 14px;cursor: pointer;position: absolute;top: -32px;left: 0;z-index:99;display: none;transition: all 0.3s;}
+    .productList .product-cancel{width: 100%;height: 32px;line-height: 32px;text-align: center;background-color: #FFE6DC;color: #E15621;font-size: 14px;cursor: pointer;position: absolute;bottom: 0;left: 0;z-index:99;display: none;transition: all 0.3s;}
     .productList .product-button{width: 100%;height: 40px;position: absolute;bottom: -40px;left: 0;display: none;transition: all 0.2s;z-index: 99;}
     .productList .product-button .coll-btn{width: 50%;height: 100%;line-height: 40px;font-size: 14px;text-align: center;float: left;position: relative;cursor: pointer;}
     .productList .product-button .coll-btn.add{background-color: #FFE6DC;color: #E15621;}
@@ -28,7 +28,7 @@ li{list-style:none}
     .productList .product-mask{width: 100%;height: 100%;background: rgba(0,0,0,0.3);position: absolute;top: 0;left: 0;z-index: 99;cursor: pointer;}
     .productList .product-mask .mask-checked{width: 16px;height: 16px;background: url("/img/account/icon-weigouxuan@2x.png") no-repeat;background-size: cover;display: block;position: absolute;right: 0;top: 0;}
     .productList .product-mask .mask-checked.checked{background: url("/img/account/icon-yigouxuan@2x.png") no-repeat;background-size: cover;}
-    .productList .productItem:hover .product-cancel{top: 0;display: block;}
+    .productList .productItem:hover .product-cancel{display: block;}
     .productList .productItem:hover .product-button{bottom: 0;display: block;}
     .productList .productItem img {width: 100%;height: 164px;}
     .productItem .page_main_type{width: 34px;height: 34px;text-align: justify;box-sizing: border-box;padding: 5px;border-radius: 0 0 8px 8px;background-color: #33CCBF;font-size: 12px;color: #FFFFFF;line-height: 13px;position: absolute;top: 0;right: 10px;z-index: 88;}

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

@@ -730,7 +730,6 @@ function setProductPrice(productList, productIds, userId, callback){
                         product.actStatus =item.actStatus;
                         product.couponsLogo =item.couponsLogo;
                         product.promotions =item.promotions;
-
                         product.svipPriceTag =item.svipPriceTag;
                         product.svipPriceType =item.svipPriceType;
                         product.svipProductFlag =item.svipProductFlag;

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

@@ -20,6 +20,22 @@ var ShoppingApi = {
                     callback(res);
                 });
         },
+        /**
+         * @机构添加购物车替换Sku
+         * @param:userId 用户userId
+         */
+        clubCheckSku: function (params, callback) {
+            Http.AjaxService({
+                url:'/order/club/check/sku',
+                type:'get',
+                data:params,
+                json:false,
+                isHost:true
+            })
+                .then(function(res){
+                    callback(res);
+                });
+        },
         /**
          * @购物车列表
          * @param:userId 用户userId

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

@@ -423,6 +423,18 @@ var SupplierApi = {
                     callback(res);
                 });
         },
+        UpdateDelProductSku: function (params, callback) {//编辑商品更新搜索索引
+            Http.AjaxService({
+                url:'/commodity/del/sku',
+                type:'get',
+                data:params,
+                json:false,
+                isHost:true
+            })
+                .then(function(res){
+                    callback(res);
+                });
+        },
         SupplierViewShop: function (params, callback) {//查看店铺
             Http.AjaxService({
                 url:'/supplier/viewShop',

+ 30 - 166
src/main/resources/static/js/product/detail.js

@@ -1,6 +1,6 @@
 var productDetail = new Vue({
     el: "#productDetail",
-    mixins: [beautyArchiveDetailMixin,cmSysVitaMixins],
+    mixins: [beautyArchiveDetailMixin,cmSysVitaMixins,productMixins,supportMixins],
     data: {
         showProduct: false,
         productId: 0,
@@ -25,7 +25,6 @@ var productDetail = new Vue({
             userIdentity: 0 //2-会员机构;3-供应商;4-普通机构
         },
         product:{},// 商品信息
-        ladderList: [],//阶梯价
         promotions: {},//促销活动信息
         promotionsId: 0,//活动id
         addStatus: true,
@@ -120,6 +119,7 @@ var productDetail = new Vue({
                     if(data.results.length > 0 ){
                         var list = data.results.map((el,index)=>{
                             el.isChecked = false;
+                            el.isSkuPopup = false;
                             el.number = el.minBuyNumber;
                             return el;
                         });
@@ -179,6 +179,10 @@ var productDetail = new Vue({
                     var $pageLabel = '';
                     _self.product = response.data;
                     _self.pcActType = product.pcActType;
+                    _self.productStock = product.stock;
+                    _self.addParams.skuId = product.skus[0].skuId;
+                    _self.isDetailsBtnDisable = product.skus[0].stock === 0;
+                    _self.ladderList = product.skus[0].ladderPriceList ? product.skus[0].ladderPriceList : [];
                     _self.beautyActFlag = product.beautyActFlag;
                     _self.productTypeName = product.typeName;
                     _self.recommendType = product.recommendType ? product.recommendType : 0;
@@ -208,26 +212,26 @@ var productDetail = new Vue({
                     }else{
                         _self.isQualificationImg = false
                     }
-                    if (product.commodityType == 2 && product.trainingMethod) {
+                    if (product.commodityType === 2 && product.trainingMethod) {
                         _self.isTrainingMethod = true;
-                        _self.trainingMethodText = product.trainingMethod == 1 ? '线上培训' : '线下培训';
-                        _self.trainingType = product.trainingType == 1 ? '¥' + product.trainingFee : '售价已包含';
+                        _self.trainingMethodText = product.trainingMethod === 1 ? '线上培训' : '线下培训';
+                        _self.trainingType = product.trainingType === 1 ? '¥' + product.trainingFee : '售价已包含';
                     }
-                    if (product.validFlag == 3 || product.validFlag == 9 || product.validFlag == 0 || product.validFlag == 10 || product.stock == 0) {
+                    if (product.saleOutFlag === 1 || product.validFlag === 3 || product.validFlag === 9 || product.validFlag === 0 || product.validFlag === 10) {
                         _self.isNoneDisabled = true;
                     } else {
                         _self.isNoneDisabled = false;
                     }
-                    if (product.validFlag == 3) {
+                    if (product.validFlag === 3) {
                         _self.disabledText = '下架'
                     }
-                    if (product.validFlag == 10) {
+                    if (product.validFlag === 10) {
                         _self.disabledText = '停售'
                     }
-                    if (product.validFlag == 9 || product.validFlag == 0) {
+                    if (product.validFlag === 9 || product.validFlag === 0) {
                         _self.disabledText = '失效'
                     }
-                    if (product.stock == 0 && product.validFlag != 3) {
+                    if (product.saleOutFlag === 1 || product.validFlag !== 3 ) {
                         _self.disabledText = '售罄'
                     }
                     _self.handleShowProductType(product.commodityDetailsFlag);
@@ -310,24 +314,17 @@ var productDetail = new Vue({
         },
         getProductPrice: function () {//获取商品价格
             var _self = this;
-            if (_self.productId === 0) {
-                return;
-            }
-            ProductApi.GetProductDdtailsPrice({
-                userId: GLOBAL_USER_ID,
-                productId: _self.productId
-            }, function (response) {
+            if (this.productId === 0) {return;}
+            ProductApi.GetProductDdtailsPrice({ userId: GLOBAL_USER_ID,productId: this.productId }, function (response) {
                 if (response.code === 0 && response.data) {
                     _self.priceObj = response.data;
                     _self.number = response.data.minBuyNumber;
-                    if (response.data.ladderPriceFlag === 1) {
-                        _self.ladderPrice();
-                    }
+                    _self.addParams.skuId = response.data.skuId;
                     if (response.data.actStatus == 1) {
                         _self.promotions = response.data.promotions;
                         _self.promotionsId = response.data.promotions.id;
                     }
-                    console.log('userIdentity',_self.priceObj.userIdentity)
+                    console.log('priceObj',_self.priceObj)
                     if(_self.userId === 0 || GLOBAL_USER_IDENTITY === 2 || GLOBAL_USER_IDENTITY === 4){
                         _self.isShowSupportingList = true;
                     }
@@ -381,10 +378,12 @@ var productDetail = new Vue({
         },
         numberSub: function () {
             this.number -= this.priceObj.step;
+            console.log('number', this.number)
             this.numberResize();
         },
         numberAdd: function () {
             this.number += this.priceObj.step;
+            console.log('number', this.number)
             this.numberResize();
 
         },
@@ -401,13 +400,14 @@ var productDetail = new Vue({
             if (this.number > this.productStock) {
                 this.number = this.productStock;
             }
-            if (this.priceObj.ladderPriceFlag) {
-                this.ladderList.forEach(function (ladder) {
-                    if (_self.number >= ladder.buyNum) {
-                        _self.priceObj.price = ladder.buyPrice;
-                    }
-                });
-            }
+            // if (this.priceObj.ladderPriceFlag) {
+            //     this.ladderList.forEach(function (ladder) {
+            //         if (_self.number >= ladder.buyNum) {
+            //             _self.priceObj.price = ladder.buyPrice;
+            //         }
+            //     });
+            // }
+            console.log('number', this.number)
         },
         handleCollection:function (){// 收藏操作
             var _self = this;
@@ -432,63 +432,6 @@ var productDetail = new Vue({
         toUpgrade: function () {
             setBeforeUrl();
             window.location.href = '/user/setting/upgrade.html';
-        },
-		addShopCart: function(){ //加入购物车
-		    var _self = this;
-		    if(_self.addStatus){
-		        _self.addStatus = false;
-                ShoppingApi.ClubAddCart(
-                    {
-                        productCount:this.number,
-                        productId:this.productId,
-                        userId:this.userId,
-                        source:1
-                    },
-                    function (response){
-                        if(response.code == 0){
-                            _self.addStatus = true;
-                            $.confirm({
-                                useBootstrap: false,
-                                boxWidth: (isPC?'338px':'74.6vw'),
-                                title: false,
-                                content:'<div class="cartAlert"><h6>商品已成功加入购物车!</h6><p>当前购物车共<em>'+response.data+'</em>种商品</p></div>',
-                                closeIcon: true,
-                                animation: 'opacity',
-                                closeAnimation: 'opacity',
-                                animateFromElement: false,
-                                scrollToPreviousElement: false,
-                                buttons: {
-                                    login: {
-                                        text: '去结算',
-                                        btnClass: 'btn-to-cart',
-                                        action: function(){
-                                            window.location.href = '/shopping/cart.html';
-                                        }
-                                    },
-                                    close: {
-                                        text: '继续购物',
-                                        btnClass: 'btn-to-goon',
-                                        action:function(){
-
-                                        }
-                                    }
-                                }
-                            });
-                            globalHead.getHeadCart(_self.userId);
-                        }else{
-                            CAIMEI.dialog('加入购物车失败!',true,function () {
-                                _self.addStatus = true;
-                            });
-                        }
-                    }
-                )
-		    }
-		},
-        buyNowSubmit: function(){ // type:(1购物车提交[对应表cm_cart],2直接购买提交, 3协销下单)
-            var _self = this;
-            if(_self.productId && _self.number){
-                window.location.href = '/shopping/confirm.html?type=2&productId='+_self.productId+'&count='+_self.number;
-            }
         },
         getRecommends: function () {
             var _self = this;
@@ -713,84 +656,6 @@ var productDetail = new Vue({
             }
             _self.calculatetTtalPrice();
         },
-        handleSupportingSubmit:function (type) {
-            var _self = this;
-            if (_self.userId > 0) {
-                switch (type) {
-                    case 'buy':
-                        console.log('立即购买')
-                        _self.toConfirmation()
-                        break
-                    case 'add':
-                        console.log('加入购物车')
-                        _self.getAddProductCart()
-                        break
-                }
-            } else {
-                _self.toLogin();
-            }
-        },
-        getAddProductCart:function () {
-            //批量增加购物车成功和toast弹窗提示成功
-            var _self = this;
-            var checkedList = [];
-            if(!_self.isProductChecked){
-                CAIMEI.dialog('请先选择商品',false);
-                return;
-            }
-            _self.supportingList.forEach((el)=>{
-                if(el.isChecked){
-                    checkedList.push({ productId:el.productId , productCount: el.number });
-                }
-            })
-            ShoppingApi.ShoppingAddCarts({userId:_self.listQuery.userId,productInfo:JSON.stringify(checkedList)},function(response){
-                if(response.code === 0){
-                    globalHead.getHeadCart(_self.listQuery.userId);
-                    $.confirm({
-                        useBootstrap: false,
-                        boxWidth: (isPC?'338px':'74.6vw'),
-                        title: false,
-                        content:'<div class="cartAlert"><h6>商品已成功加入购物车!</h6><p>当前购物车共<em>'+response.data+'</em>种商品</p></div>',
-                        closeIcon: true,
-                        animation: 'opacity',
-                        closeAnimation: 'opacity',
-                        animateFromElement: false,
-                        scrollToPreviousElement: false,
-                        buttons: {
-                            login: {
-                                text: '去结算',
-                                btnClass: 'btn-to-cart',
-                                action: function(){
-                                    window.location.href = '/shopping/cart.html';
-                                }
-                            },
-                            close: {
-                                text: '继续购物',
-                                btnClass: 'btn-to-goon'
-                            }
-                        }
-                    });
-                } else {
-                    dialog("加入购物车失败!");
-                }
-            })
-        },
-        toConfirmation:function () {
-            var _self = this;
-            //跳转确认订单页面
-            var checkedList = []
-            if(!_self.isProductChecked){
-                CAIMEI.dialog('请先选择商品',false);
-                return;
-            }
-            _self.supportingList.forEach((el)=>{
-                if(el.isChecked){
-                    checkedList.push({ id:el.productId , count: el.number })
-                }
-            })
-            CAIMEI.Storage.setItem('KEY_SUPPORE', JSON.stringify(checkedList));
-            window.location.href = '/shopping/confirm.html?type=3';
-        },
         toBuyCoupon:function (coupon) {// 点击购买按钮事件处理
             var _self = this;
             ProductApi.createCouponRecord({userId:_self.listQuery.userId, couponId:coupon.couponId}, function (response) {
@@ -830,13 +695,12 @@ var productDetail = new Vue({
         },
     },
     created: function () {
-        this.productId = this.couponParam.productId = this.listQuery.productId = this.handleProsId = $("#productId").val();
+        this.productId = this.couponParam.productId = this.addParams.productId = this.listQuery.productId =  this.handleProsId = $("#productId").val();
         this.cmSysParams.pageType = 6;
         this.cmSysParams.productId = this.productId;
         this.typeId = $("#typeId").val();
         console.log('typeId', this.typeId)
         this.userId = this.couponParam.userId = this.listQuery.userId = GLOBAL_USER_ID;
-        this.productStock = $("#productStock").val();
         // this.getImages();
         // identity: 0个人,1协销,2会员机构,3供应商,4普通机构
         // visibility:3:所有人可见,2:普通机构可见,1:会员机构可见 4:仅医美机构可见
@@ -850,7 +714,7 @@ var productDetail = new Vue({
         // }
     },
     mounted: function () {
-        this.userId = this.couponParam.userId = GLOBAL_USER_ID;
+        this.userId = this.couponParam.userId = this.addParams.userId = GLOBAL_USER_ID;
         this.getProductDetails();
         this.getProductPrice();
         // this.getParameters();

+ 117 - 0
src/main/resources/static/js/product/mixins/productMixins.js

@@ -0,0 +1,117 @@
+// 商品详情
+var productMixins = function () {
+    return {
+        data() {
+            return {
+                addParams:{
+                    skuId:0,
+                    productCount:0,
+                    productId:0,
+                    userId:0,
+                    source:1
+                },
+                handleSkuId:0,
+                currentIndex:0,
+                skuIndex:0,
+                skuSupportingIndex:0,
+                ladderList: [],//阶梯价
+                isDetailsBtnDisable:false
+            }
+        },
+        filters: {
+            NumFormat(value) {
+                console.log('value',value)
+                //处理金额
+                return Number(value).toFixed(2)
+            }
+        },
+        methods: {
+            handleAddShopCart(){ //加入购物车
+                if(this.isDetailsBtnDisable){ return }
+                if(this.addStatus){
+                    this.addStatus = false;
+                    this.addParams.productCount = this.number;
+                    this.handleClubAddCart(this.addParams)
+                }
+            },
+            handleClubAddCart(params){// 调用加入购物车
+                var _self = this;
+                ShoppingApi.ClubAddCart(params,function (response){
+                    if(response.code == 0){
+                        _self.addStatus = true;
+                        $.confirm({
+                            useBootstrap: false,
+                            boxWidth: (isPC?'338px':'74.6vw'),
+                            title: false,
+                            content:'<div class="cartAlert"><h6>商品已成功加入购物车!</h6><p>当前购物车共<em>'+response.data+'</em>种商品</p></div>',
+                            closeIcon: true,
+                            animation: 'opacity',
+                            closeAnimation: 'opacity',
+                            animateFromElement: false,
+                            scrollToPreviousElement: false,
+                            buttons: {
+                                login: {
+                                    text: '去结算',
+                                    btnClass: 'btn-to-cart',
+                                    action: function(){
+                                        window.location.href = '/shopping/cart.html';
+                                    }
+                                },
+                                close: {
+                                    text: '继续购物',
+                                    btnClass: 'btn-to-goon',
+                                    action:function(){
+
+                                    }
+                                }
+                            }
+                        });
+                        globalHead.getHeadCart(_self.userId);
+                    }else{
+                        CAIMEI.dialog('加入购物车失败!',true,function () {
+                            _self.addStatus = true;
+                        });
+                    }
+                })
+            },
+            handleBuyNowSubmit(){ // type:(1购物车提交[对应表cm_cart],2直接购买提交, 3协销下单)
+                if(this.isDetailsBtnDisable){ return }
+                if(this.productId && this.number){
+                    window.location.href = '/shopping/confirm.html?type=2&productId='+this.productId+'&count='+this.number+'&skuId='+this.addParams.skuId;
+                }
+            },
+            handleChoisSku(sku,index){
+                this.skuIndex = index;
+                this.priceObj.originalPrice = sku.originalPrice;
+                this.priceObj.normalPrice = sku.normalPrice;
+                this.priceObj.price = sku.price;
+                this.addParams.skuId = sku.skuId;
+                this.number = this.priceObj.minBuyNumber = sku.minBuyNumber;
+                this.productStock = sku.stock;
+                this.ladderList = sku.ladderPriceList ? sku.ladderPriceList : [];
+                this.isDetailsBtnDisable = sku.stock === 0;
+                $('#prosductStock').text(sku.stock);
+                $('#proMinBuyNumber').text(sku.minBuyNumber);
+            },
+            hanSkuClickSEo(){// 静态化下控制点击
+                var grade = $(".unitTags").eq(0).attr('data-grade');
+                $('#priceGrade').addClass(`i${grade}`);
+                $(".unitTags").each(function() {
+                    var _this = $(this);
+                    _this.click(function () {
+                        _this.addClass("active");
+                        _this.siblings().removeClass('active');
+                        var priceGrade = 'i'+_this.attr('data-grade');
+                        const el = $('#priceGrade');
+                        el.parent().append('<i id="priceGrade" class="icon mIcon ' + priceGrade +'"></i>');
+                        el.remove();
+                    })
+                });
+            }
+        },
+        mounted: function() {
+            this.hanSkuClickSEo();
+        }
+    }
+}();
+

+ 126 - 0
src/main/resources/static/js/product/mixins/supportMixins.js

@@ -0,0 +1,126 @@
+// 组合商品
+var supportMixins = function () {
+    return {
+        data() {
+            return {
+                currentIndex:0,
+                skuIndex:0,
+                skuSupportingIndex:0,
+                isbtnDisable:false,
+                handldSku:{},
+                handlePros:{},
+                suppPriceGrade:0
+            }
+        },
+        mounted: function() {
+
+        },
+        methods: {
+            handleShowPopup(pros,index){
+                this.currentIndex = index;
+                pros.isSkuPopup = !pros.isSkuPopup;
+            },
+            handleSkuCancel(pros,index){// 取消选择Sku
+                pros.isSkuPopup = false;
+            },
+            handleSkuConfirm(pros,index){// 确认选择Sku
+                if(this.isbtnDisable){ return; }
+                pros.unit = this.handldSku.unit;
+                pros.price = this.handldSku.price;
+                pros.skuId = this.handldSku.skuId;
+                pros.isSkuPopup = false;
+            },
+            handleSupportingChoisSku(pros,sku,index){// 配套商品选择规格
+                this.handlePros = pros;
+                this.handldSku = sku;
+                this.skuSupportingIndex = index;
+                this.handlePros.price = sku.price
+                this.handlePros.originalPrice = sku.originalPrice
+                this.isbtnDisable = sku.stock === 0;
+                pros.priceGrade  = sku.priceGrade
+                pros.number  = sku.minBuyNumber
+                console.log('priceGrade',pros.priceGrade)
+            },
+            handleSupportingSubmit (type) {
+                var _self = this;
+                if (this.listQuery.userId > 0) {
+                    switch (type) {
+                        case 'buy':
+                            console.log('配套商品立即购买')
+                            _self.handleConfirmation()
+                            break
+                        case 'add':
+                            console.log('配套商品加入购物车')
+                            _self.handleAddProductCart()
+                            break
+                    }
+                } else {
+                    this.toLogin();
+                }
+            },
+            handleConfirmation() { //跳转确认订单页面
+                var _self = this;
+                var checkedList = []
+                if(!this.isProductChecked){
+                    CAIMEI.dialog('请先选择商品',false);
+                    return;
+                }
+                this.supportingList.forEach((el)=>{
+                    if(el.isChecked){
+                        checkedList.push({ id:el.productId , count: el.number ,skuId:el.skuId })
+                    }
+                })
+                CAIMEI.Storage.setItem('KEY_SUPPORE', JSON.stringify(checkedList));
+                window.location.href = '/shopping/confirm.html?type=3';
+            },
+            handleAddProductCart() {//批量增加购物车成功和toast弹窗提示成功
+                var checkedList = [];
+                if(!this.isProductChecked){
+                    CAIMEI.dialog('请先选择商品',false);
+                    return;
+                }
+                this.supportingList.forEach((el)=>{
+                    if(el.isChecked){
+                        checkedList.push({ productId:el.productId , productCount: el.number ,skuId:el.skuId });
+                    }
+                })
+                this.handleShoppingAddCarts({userId:this.listQuery.userId,productInfo:JSON.stringify(checkedList)})
+            },
+            handleShoppingAddCarts(params){// 接口请求
+                var _self = this;
+                ShoppingApi.ShoppingAddCarts(params,function(response){
+                    if(response.code === 0){
+                        globalHead.getHeadCart(_self.listQuery.userId);
+                        $.confirm({
+                            useBootstrap: false,
+                            boxWidth: (isPC?'338px':'74.6vw'),
+                            title: false,
+                            content:'<div class="cartAlert"><h6>商品已成功加入购物车!</h6><p>当前购物车共<em>'+response.data+'</em>种商品</p></div>',
+                            closeIcon: true,
+                            animation: 'opacity',
+                            closeAnimation: 'opacity',
+                            animateFromElement: false,
+                            scrollToPreviousElement: false,
+                            buttons: {
+                                login: {
+                                    text: '去结算',
+                                    btnClass: 'btn-to-cart',
+                                    action: function(){
+                                        window.location.href = '/shopping/cart.html';
+                                    }
+                                },
+                                close: {
+                                    text: '继续购物',
+                                    btnClass: 'btn-to-goon'
+                                }
+                            }
+                        });
+                    } else {
+                        dialog("加入购物车失败!");
+                    }
+                })
+            }
+        }
+    }
+}();
+

+ 3 - 80
src/main/resources/static/js/product/product-supporting.js

@@ -1,5 +1,6 @@
 var supporting = new Vue({
     el: "#supporting",
+    mixins: [supportMixins],
     data: {
         listLoading: true,
         showProduct: false,
@@ -30,12 +31,12 @@ var supporting = new Vue({
                 if (response.code === 0 ) {
                     var data = response.data;
                     if(data.results.length > 0 ){
-                        var list = data.results.map((el,index)=>{
+                        _self.supportingList = data.results.map((el,index)=>{
                             el.isChecked = false;
+                            el.isSkuPopup = false;
                             el.number = el.minBuyNumber;
                             return el;
                         });
-                        _self.supportingList = list;
                         if(_self.supportingList.length > 0 ){
                             _self.isShowMoreButton = true;
                         }
@@ -175,84 +176,6 @@ var supporting = new Vue({
             }
             return false
         },
-        handleSupportingSubmit:function (type) {
-            var _self = this;
-            if (_self.listQuery.userId > 0) {
-                switch (type) {
-                    case 'buy':
-                        console.log('立即购买')
-                        _self.toConfirmation()
-                        break
-                    case 'add':
-                        console.log('加入购物车')
-                        _self.getAddProductCart()
-                        break
-                }
-            } else {
-                _self.toLogin();
-            }
-        },
-        getAddProductCart:function () {
-            //批量增加购物车成功和toast弹窗提示成功
-            var _self = this;
-            var checkedList = [];
-            if(!_self.isProductChecked){
-                CAIMEI.dialog('请先选择商品',false);
-                return;
-            }
-            _self.supportingList.forEach((el)=>{
-                if(el.isChecked){
-                    checkedList.push({ productId:el.productId , productCount: el.number });
-                }
-            })
-            ShoppingApi.ShoppingAddCarts({userId:_self.listQuery.userId,productInfo:JSON.stringify(checkedList)},function(response){
-                if(response.code === 0){
-                    globalHead.getHeadCart(_self.listQuery.userId);
-                    $.confirm({
-                        useBootstrap: false,
-                        boxWidth: (isPC?'338px':'74.6vw'),
-                        title: false,
-                        content:'<div class="cartAlert"><h6>商品已成功加入购物车!</h6><p>当前购物车共<em>'+response.data+'</em>种商品</p></div>',
-                        closeIcon: true,
-                        animation: 'opacity',
-                        closeAnimation: 'opacity',
-                        animateFromElement: false,
-                        scrollToPreviousElement: false,
-                        buttons: {
-                            login: {
-                                text: '去结算',
-                                btnClass: 'btn-to-cart',
-                                action: function(){
-                                    window.location.href = '/shopping/cart.html';
-                                }
-                            },
-                            close: {
-                                text: '继续购物',
-                                btnClass: 'btn-to-goon'
-                            }
-                        }
-                    });
-                } else {
-                    dialog("加入购物车失败!");
-                }
-            })
-        },
-        toConfirmation:function () {
-            var _self = this;
-            //跳转确认订单页面
-            var checkedList = []
-            if(!_self.isProductChecked){
-                CAIMEI.dialog('请先选择商品',false);
-                return;
-            }
-            _self.supportingList.forEach((el)=>{
-                if(el.isChecked){
-                    checkedList.push({ id:el.productId , count: el.number })
-                }
-            })
-            CAIMEI.Storage.setItem('KEY_SUPPORE', JSON.stringify(checkedList));
-            window.location.href = '/shopping/confirm.html?type=3';
-        },
         toLogin: function () {
             setBeforeUrl();
             window.location.href = '/login.html';

+ 57 - 49
src/main/resources/static/js/shopping/cart.js

@@ -1,5 +1,6 @@
 var shoppingCart = new Vue({
     el: "#shoppingCart",
+    mixins: [cartMixins],
     data: {
         userId: 0,
         userIdentity: '',
@@ -16,7 +17,7 @@ var shoppingCart = new Vue({
         reducedPrice: 0,
         originalPrice: 0,
         allChecked: true,
-        submitIds: [],//去结算商品Ids
+        submitIds: [],//去结算商品SkuIds
         checkenProsList:[],// 勾选中的商品
         isShowPopup:false,
         currentTab:1,
@@ -74,7 +75,7 @@ var shoppingCart = new Vue({
             ShoppingApi.QueryShoppingCartList({userId: _self.userId,source:1},function(response){
                 if(response.code === 0){
                     var data = response.data;
-                    _self.listData = data.list;
+                    // _self.listData = data.list;
                     _self.invalidData = data.invalid;
                     _self.kindCount = data.kindCount;
                     _self.totalCount = data.totalCount;
@@ -83,25 +84,36 @@ var shoppingCart = new Vue({
                     _self.totalCouponList = data.couponList;
                     _self.reducedPrice = data.reducedPrice;
                     // 默认全选
-                    _self.listData.forEach(function(supplier){
-                        supplier.isChecked = true;
+                    _self.listData = data.list.map(function(supplier){
                         if(supplier.cartList.length>0){
-                            supplier.cartList.forEach(function(pros){
-                                pros.isChecked = true
-                                _self.submitIds.push(pros.productId);
-                                _self.checkenProsList.push(pros);
+                            supplier.cartList.forEach(function(cart){
+                                if(cart.stock === 0 || cart.number > cart.stock ){
+                                    cart.isChecked = false;
+                                    supplier.isDisable = true
+                                    cart.isDisable = true
+                                }else{
+                                    cart.isDisable = false
+                                    cart.isChecked = true;
+                                    _self.submitIds.push(cart.skuId);
+                                    _self.checkenProsList.push(cart);
+                                }
+                                cart.isSkuPopup = false;
                                 _self.isCheckedProductStatus = true;
                             })
                         }
-                    });
-                    _self.allChecked = true;
+                        _self.updateProductCheckedAllBtn(supplier);
+                        return supplier;
+                    })
+                    _self.updateCheckAllBtn();
                     _self.computedPrice();
                     _self.listLoading = false;
+                    console.log('listData',_self.listData)
                 }else{
                     CAIMEI.Alert(response.msg,'确定',true, function(){});
                 }
             })
         },
+
         toggleThisLadder: function(event){
             var el = event.currentTarget;
             if($(el).hasClass("on")){
@@ -119,15 +131,16 @@ var shoppingCart = new Vue({
         },
         ckeckItem: function(supplier,pro){//为未选中的时候改变为true,反之为true
             var _self = this;
+            if(pro.isDisable){ return }
             pro.isChecked = !pro.isChecked;
             if (pro.isChecked) {
-                if (!_self.submitIds.includes(pro.productId * 1)) {
-                    _self.submitIds.push(pro.productId);
+                if (!_self.submitIds.includes(pro.skuId * 1)) {
+                    _self.submitIds.push(pro.skuId);
                     _self.checkenProsList.push(pro);
                 }
                 _self.isCheckedProductStatus = true;
             } else {
-                var lent = _self.submitIds.indexOf(pro.productId * 1)
+                var lent = _self.submitIds.indexOf(pro.skuId * 1)
                 if (lent >= 0) {
                     _self.submitIds.splice(lent, 1);
                     _self.checkenProsList.splice(lent, 1);
@@ -139,6 +152,7 @@ var shoppingCart = new Vue({
         },
         ckeckSupplier: function(supplier){
             var _self = this;
+            if(supplier.isDisable){ return }
             supplier.isChecked = !supplier.isChecked;
             _self.setProductChecked(supplier);
             _self.updateCheckAllBtn();
@@ -163,40 +177,40 @@ var shoppingCart = new Vue({
                         goodsCheckedLength++;
                     }
                 })
-            _self.allChecked = goodsCheckedLength === goodsList.length;
+            this.allChecked = goodsCheckedLength === goodsList.length;
         },
         updateBothCheckBtn: function(){// 更新商铺勾选状态
             var _self = this;
-            _self.listData.forEach(supplier => {
+            this.listData = this.listData.map(supplier => {
                 supplier.isChecked = _self.allChecked;
                 _self.setProductChecked(supplier);
+                return supplier
             })
         },
         setProductChecked: function(supplier) {//
             var _self = this;
-            supplier.cartList.forEach(pros => {
-                if (supplier.isChecked) {
-                    pros.isChecked = true;
-                    if (!_self.submitIds.includes(pros.productId * 1)) {
-                        _self.submitIds.push(pros.productId);
-                        _self.checkenProsList.push(pros);
+            supplier.cartList.forEach(cart => {
+                if (supplier.isChecked && (cart.stock !== 0 || cart.number < cart.stock)) {
+                    cart.isChecked = true;
+                    if (!_self.submitIds.includes(cart.skuId * 1)) {
+                        _self.submitIds.push(cart.skuId);
+                        _self.checkenProsList.push(cart);
                     }
                     _self.isCheckedProductStatus = true;
                 } else {
-                    pros.isChecked = false;
-                    var lent = this.submitIds.indexOf(pros.productId * 1);
+                    cart.isChecked = false;
+                    var lent = this.submitIds.indexOf(cart.skuId * 1);
                     if (lent >= 0) {
                         _self.submitIds.splice(lent, 1);
                         _self.checkenProsList.splice(lent, 1);
                     }
                 }
             })
-            _self.computedPrice();
+            this.computedPrice();
         },
         ckeckAll: function(){
-            var _self = this;
-            _self.allChecked = !_self.allChecked;
-            _self.updateBothCheckBtn()
+            this.allChecked = !this.allChecked;
+            this.updateBothCheckBtn()
         },
         setPromotions:function(){
             var _self = this;
@@ -214,6 +228,7 @@ var shoppingCart = new Vue({
         },
         computedPrice: function() {
             var _self = this;
+            console.log('submitIds',this.submitIds)
             this.$nextTick(function () {
                 var totalPrice = 0;
                 var reducedPrice = 0;
@@ -226,7 +241,7 @@ var shoppingCart = new Vue({
                     var svipSupplierPrice = 0;
                     if (supplier.cartList.length > 0) {
                         supplier.cartList.forEach(function (cart) {
-                            if (_self.submitIds.includes(cart.productId * 1)) {
+                            if (_self.submitIds.includes(cart.skuId * 1)) {
                                 supplierPrice += cart.price * cart.number;
                                 kindCount += 1;
                                 totalCount += cart.number;
@@ -351,7 +366,7 @@ var shoppingCart = new Vue({
             var eligibleCoupons = [];
             _self.listData.forEach(function(shop,index){
                 shop.cartList.forEach(function(pros){
-                    if(_self.submitIds.includes(pros.productId*1)){
+                    if(_self.submitIds.includes(pros.skuId*1)){
                         _self.totalCouponList.forEach(function (coupon,index){//循环优惠券
                             switch(coupon.couponType){
                                 case 0:// 活动券
@@ -442,9 +457,10 @@ var shoppingCart = new Vue({
             ShoppingApi.ShoppingCartUpdate(
                 {
                     userId:_self.userId,
-                    productId: cart.productId,
+                    skuId: cart.skuId,
                     productCount: cart.number,
-                    source:1
+                    source:1,
+
                 },
                 function(response){
                     if(response.code === 0){
@@ -455,9 +471,9 @@ var shoppingCart = new Vue({
                  }
             )
         },
-        deleteCart: function(productIds){
+        deleteCart: function(skuIds){
             var _self = this;
-            ShoppingApi.DeleteCartProducts({userId:_self.userId,productIds:productIds},function(response){
+            ShoppingApi.DeleteCartProducts({userId:_self.userId,skuIds:skuIds},function(response){
                 if(response.code === 0){
                     CAIMEI.dialog('删除成功',true,function () {
                         _self.getCartLists();
@@ -471,41 +487,33 @@ var shoppingCart = new Vue({
             var _self = this;
             var delGoodsList='';
             _self.invalidData.forEach(function(item){
-                delGoodsList+= item.productId+','
+                delGoodsList+= item.skuId+','
             });
             CAIMEI.Modal('确定清空全部失效商品吗?','取消','确定',function(){
                 _self.deleteCart(delGoodsList)
             });
         },
-        deleteCartOne:function(productIds){
+        deleteCartOne:function(skuId){
             var _self = this;
             CAIMEI.Modal('确定删除该商品吗?','取消','确定',function(){
-                _self.deleteCart(productIds);
+                _self.deleteCart(skuId);
             });
         },
         deleteSelected: function(){
             var _self = this;
-            var productIds = _self.submitIds.join(",");
-            if(productIds == ''){
+            var skuIds = _self.submitIds.join(",");
+            if(skuIds === ''){
                 CAIMEI.dialog('请选择要删除的商品~');
                 return false;
             }
             CAIMEI.Modal('确定删除选中的商品吗?','取消','确定',function(){
-                _self.deleteCart(productIds);
+                _self.deleteCart(skuIds);
             });
         },
-        submitCart: function(){ // type:(1购物车提交[对应表cm_cart],2直接购买提交, 3协销下单)
-            var  _self = this;
-            if (_self.submitIds.length>0){
-                var productIds = _self.submitIds.join(",");
-                window.localStorage.setItem("shoppingProductIds", productIds);
-                window.location.href = '/shopping/confirm.html?type=1';
-            }
-        },
         queryPopupCoupons:function(){// 获取弹窗优惠券列表
             var  _self = this;
             ShoppingApi.ShoppingCartGetCoupon(_self.couponParam, function (response) {
-                if(response.code == 0){
+                if(response.code === 0){
                     var data = response.data;
                     if(data.couponList && data.couponList.length >0){
                         _self.productCouponList = data.couponList;
@@ -599,7 +607,7 @@ var shoppingCart = new Vue({
     },
     created: function () {
         if(globalUserData){
-            this.userId = this.couponParam.userId = globalUserData.userId;
+            this.userId = this.couponParam.userId = this.addParams.userId = globalUserData.userId;
             this.userIdentity = globalUserData.identity;
             this.userToken = globalUserData.token;
         }

+ 17 - 14
src/main/resources/static/js/shopping/confirm.js

@@ -1,16 +1,17 @@
 const defaultProductParam = {
         productCount:0, 	// 商品数量
         productId:0,		// 商品Id
+        skuId:0,
         source:1,			// 来源:1WWW 2小程序
         userId:0			// 用户Id
 };
 const defaultCartParam = {
-        productIds:0,		// 商品Id(逗号隔开)
+        skuIds:0,		    // 商品SkuId(逗号隔开)
         source:1,			// 来源:1WWW 2小程序
         userId:0			// 用户Id
 };
 const defaultPostageParam = {
-        productIds:0,		// 商品Id(逗号隔开)
+        skuIds:0,		    // skuId(逗号隔开)
         userId:0,			// 用户Id
         townId:0			// 地区Id
 };
@@ -164,7 +165,7 @@ var shoppingConfirm = new Vue({
             var el = event.currentTarget;
             verifyHandle(el);
         },
-        getProductCreateOrderInfo:function(){// 商品立即购买确认订单初始化
+        getProductCreateOrderInfo(){// 商品立即购买确认订单初始化
             var _self = this;
             if(_self.userId ===0){return;}
             OrderApi.ProductCreateOrderInfo(_self.productParam,function(response){
@@ -175,7 +176,7 @@ var shoppingConfirm = new Vue({
                 }
             });
         },
-        OrderClubProductSupporting:function(){// 组合商品确认订单初始化
+        OrderClubProductSupporting(){// 组合商品确认订单初始化
             var _self = this;
             if(_self.userId ===0){return;}
             OrderApi.OrderClubProductSupporting(_self.supportParm,function(response){
@@ -186,7 +187,7 @@ var shoppingConfirm = new Vue({
                 }
             });
         },
-        getCartCreateOrderInfo: function () {// 购物车去结算确认订单初始化
+        getCartCreateOrderInfo () {// 购物车去结算确认订单初始化
             var _self = this;
             if(_self.userId ===0){return;}
             OrderApi.GetOrderConfirmInfo(_self.cartParam,function(response){
@@ -208,7 +209,7 @@ var shoppingConfirm = new Vue({
             _self.balance.originUserMoney = data.userMoney;
             _self.hanldShouldPayFee = data.totalPrice;
             _self.svipReducedPrice = data.svipReducedPrice;
-            _self.postageParam.productIds =  _self.getProductIds(data.list); // 获取订单商品id列表 以 , 隔开
+            _self.postageParam.skuIds =  _self.getProductIds(data.list); // 获取订单商品id列表 以 , 隔开
             _self.getAddressList(_self.userId,20);
             console.log('邮费接口数据',  _self.postageParam)
             if( data.couponList &&  data.couponList.length>0){
@@ -716,12 +717,13 @@ var shoppingConfirm = new Vue({
             //商品信息
             _self.confirmParam.orderInfo = _self.listData.map(el => {
                 var productInfo = [];
-                el.cartList.forEach(item => {
+                el.cartList.forEach(cart => {
                     productInfo.push({
-                        productId:item.productId,
-                        productNum:item.number,
+                        skuId:cart.skuId,
+                        productId:cart.productId,
+                        productNum:cart.number,
                         presentNum:0,
-                        productType:item.giftType
+                        productType:cart.giftType
                     })
                 })
                 return {splitCode:el.splitCode,shopId:el.shopId,note:el.note?el.note:'',productInfo:productInfo}
@@ -794,14 +796,14 @@ var shoppingConfirm = new Vue({
             this.isShowConfirm= true;
         },
         getProductIds: function(list){// 获取订单商品id列表
-            var productIds = [];
+            var skuIds = [];
             list.forEach(function(supplier){
                 supplier.cartList.forEach(function(product){
-                    productIds.push(product.productId)
+                    skuIds.push(product.skuId)
                 });
             })
             // console.log(list);
-            return productIds.join(',');
+            return skuIds.join(',');
         }
     },
     created: function () {
@@ -816,13 +818,14 @@ var shoppingConfirm = new Vue({
             // type:(1购物车提交[对应表cm_cart],2直接购买提交, 3协销下单)
             if(urlType === 1) {//购物车提交
                 _self.confirmParam.cartType = 1;
-                _self.cartParam.productIds =  _self.productIds = window.localStorage.getItem("shoppingProductIds");
+                _self.cartParam.skuIds =  _self.productIds = window.localStorage.getItem("shoppingSkuIds");
                 // 获取列表数据
                 _self.getCartCreateOrderInfo();
             }else if(urlType === 2){//立即购买
                 _self.confirmParam.cartType = 2;
                 _self.productParam.productId =  _self.productIds = getUrlParam("productId");
                 _self.productParam.productCount = getUrlParam("count");
+                _self.productParam.skuId = getUrlParam("skuId");
                 if(_self.productParam.productId && _self.productParam.productCount) {
                     _self.getProductCreateOrderInfo();
                 }

+ 125 - 0
src/main/resources/static/js/shopping/mixins/cartMixins.js

@@ -0,0 +1,125 @@
+// 商品详情
+var cartMixins = function () {
+    return {
+        data() {
+            return {
+                skuChangNumber:1,
+                skuCartPros:{},// 重选商品规格
+                skuIndex:0,
+                skuSupportingIndex:0,
+                addParams:{
+                    oldSkuId:0,
+                    newSkuId:0,
+                    count:0,
+                    productId:0,
+                    userId:0,
+                    source:1
+                },
+                handleSkuStock:0,//监听选择Sku的库存
+                handleMinNumber:0,//监听选择Sku的库存
+                isbtnDisable:false,
+            }
+        },
+        mounted: function() {
+
+        },
+        methods: {
+            handleSubmitCart(){ // type:(1购物车提交[对应表cm_cart],2直接购买提交, 3协销下单)
+                if( this.submitIds.length === 0 ){ return }
+                const skuIds = this.submitIds.join(",");
+                window.localStorage.setItem("shoppingSkuIds", skuIds);
+                window.location.href = '/shopping/confirm.html?type=1';
+            },
+            showVipPriceTag(cart){ // 是否显示vip标签价格
+                //非会员
+                if(!GLOBAL_VIP_FLAG === 1) return false;
+                // 商品所有机构可见
+                if(cart.priceFlag === 0  && cart.svipProductFlag === 1 ) return true;
+                // 商品价格仅资质机构可见
+                if(cart.priceFlag === 2  && cart.svipProductFlag === 1 && GLOBAL_USER_IDENTITY === 2) return true;
+                // 商品价格仅医美机构可见
+                if(cart.priceFlag === 3  && cart.svipProductFlag === 1 && GLOBAL_USER_IDENTITY === 2 &&  GLOBAL_CLUB_TYPE == 1) return true;
+                // 其它
+                return false;
+            },
+            PromotionsFormat:function(promo){//促销活动类型数据处理
+                if(promo!=null){
+                    if(promo.type == 1 && promo.mode == 1){
+                        return true
+                    }else{
+                        return false
+                    }
+                }
+                return false
+            },
+            handleChoisSku(sku,index){
+                this.skuIndex = index;
+            },
+            handleShowPopup(cart,index){// 重新选择规格弹窗
+                this.skuCartPros = cart;
+                this.addParams.productId = cart.productId;
+                this.addParams.oldSkuId = cart.skuId;
+                this.addParams.newSkuId = cart.skus[0].skuId;
+                this.addParams.count = this.handleMinNumber = cart.skus[0].minBuyNumber;
+                cart.isSkuPopup = !cart.isSkuPopup;
+            },
+            handleSupportingChoisSku(sku,index){// 选择商品规格
+                this.skuSupportingIndex = index;
+                this.addParams.newSkuId = sku.skuId;
+                this.addParams.count = sku.minBuyNumber;
+                this.handleSkuStock = sku.stock;
+                this.handleMinNumber = sku.minBuyNumber;
+                this.skuCartPros.price = sku.price;
+                this.skuCartPros.originalPrice = sku.originalPrice;
+                this.isbtnDisable = sku.stock === 0;
+            },
+            skuChangNumberSub() {// 减数
+                if ( this.addParams.count <= this.handleMinNumber) {
+                    this.addParams.count = this.handleMinNumber
+                } else {
+                    if (this.skuCartPros.step == 2) {
+                        this.addParams.count -= this.handleMinNumber
+                    } else {
+                        this.addParams.count--
+                    }
+                }
+            },
+            skuChangNumberAdd() {// 加数
+                if(this.addParams.count === this.handleSkuStock){ return }
+                console.log('handleSkuStock',this.handleSkuStock)
+                if (this.skuCartPros.step === 2) {
+                    this.addParams.count += this.handleMinNumber;
+                } else {
+                    this.addParams.count++;
+                }
+            },
+            skuChangNumberChange() {// 修改
+                if (this.addParams.count < this.handleMinNumber || this.addParams.count % this.handleMinNumber != 0) {
+                    this.addParams.count = this.handleMinNumber;
+                }else if(this.addParams.count > this.handleSkuStock) {
+                    this.addParams.count = this.handleSkuStock;
+                }
+            },
+            handleSkuCancel(cart){// 取消选择Sku
+                cart.isSkuPopup = false;
+            },
+            handleSkuConfirm(cart){// 确认选择Sku加入购物车
+                if(this.isbtnDisable){ return }
+                this.handleClubAddCart(this.addParams,cart)
+            },
+            handleClubAddCart(params,cart){// 调接口
+                var _self = this;
+                ShoppingApi.clubCheckSku(params,function (response){
+                    if(response.code == 0){
+                        cart.isSkuPopup = false;
+                        _self.getCartLists();
+                        globalHead.getHeadCart(_self.addParams.userId);
+                    }else{
+                        CAIMEI.dialog('加入购物车失败!',true,function () {});
+                    }
+                })
+            }
+        }
+    }
+}();
+

+ 392 - 0
src/main/resources/static/js/supplier-center/shop/mixins/checkeMixins.js

@@ -0,0 +1,392 @@
+// 处理input&部分校验
+var checkeMixins = function () {
+    return {
+        data() {
+            return {
+                vShow_Name:false,
+                vShow_AliasName:false,
+                vShow_TinyTypeID:false,
+                vShow_BrandID:false,
+                vShow_GoodsType:false,
+                vShow_QualificationImg:false,
+                vShow_Tags:false,
+                vShow_price:false,
+                vShow_includedTax:false,
+                vShow_isProvince:false,
+                vShow_isNewProductType:false,
+                vShow_taxPoint:false,
+                vShow_GoodsImages:false,
+                vShow_detailInfoEditor:true,
+                vShow_orderInfoEditor:true,
+                vShow_attribute:false,
+                vShow_trainingMethod:false,
+                vShow_trainingType:false,
+                vShow_QualificationNo:false,
+                vShow_ProductName:false,
+                vShow_QualificationTime:false,
+            }
+        },
+        mounted: function() {
+
+        },
+        methods: {
+            PrevStep: function(){//返回上一步
+                this.activeNum--;
+                this.scrollIntoView();
+            },
+            NextStep: function(){//进入第二步
+                this.handleNextStep();
+            },
+            NextStep1: function(){//进入第三步
+                this.handleNextStep1();
+            },
+            NextStep2: function() {//点击进入第四步
+                this.handleNextStep2();
+            },
+            NextStep3: function() {//点击进入5步
+                this.activeNum++;
+                this.scrollIntoView();
+            },
+            handleNextStep(){// 进入第二步
+                var _this = this;
+                var KeyString = '',TagString='';
+                console.log(_this.releaseParams);
+                if(_this.releaseParams.name == ''){
+                    _this.vShow_Name = true;
+                    _this.fromMessage = '请输入商品显示名';
+                    _this.scrollIntoView();
+                    setTimeout(function(){
+                        _this.vShow_Name = false;
+                    },2000);
+                    return
+                }
+                if(_this.releaseParams.aliasName == ''){
+                    _this.vShow_AliasName = true;
+                    _this.fromMessage = '请输入内部商品名';
+                    _this.scrollIntoView();
+                    setTimeout(function(){
+                        _this.vShow_AliasName = false;
+                    },2000);
+                    return;
+                }
+                if(_this.releaseParams.commodityType == ''){
+                    _this.vShow_attribute=true;
+                    _this.fromMessage = '请选择商品属性';
+                    _this.scrollIntoView();
+                    setTimeout(function(){
+                        _this.vShow_attribute = false;
+                    },2000);
+                    return;
+                }
+                if(_this.releaseParams.commodityType == 2){
+                    if(_this.releaseParams.trainingMethod == 0){
+                        _this.vShow_trainingMethod=true;
+                        _this.fromMessage = '请选择培训方式';
+                        _this.scrollIntoView();
+                        setTimeout(function(){
+                            _this.vShow_trainingMethod = false;
+                        },2000);
+                        return;
+                    }
+                    if(_this.releaseParams.trainingType == 0){
+                        _this.vShow_trainingType=true;
+                        _this.fromMessage = '请选择培训费用';
+                        _this.scrollIntoView();
+                        setTimeout(function(){
+                            _this.vShow_trainingType = false;
+                        },2000);
+                        return;
+                    }
+                    if(_this.releaseParams.trainingType == 1){
+                        if(_this.releaseParams.trainingFee == ''){
+                            _this.vShow_trainingType=true;
+                            _this.fromMessage = '请填写包含食宿,交通等各项费用的培训总金额';
+                            _this.scrollIntoView();
+                            setTimeout(function(){
+                                _this.vShow_trainingType = false;
+                            },2000);
+                            return;
+                        }
+                    }
+                }
+                if(_this.releaseParams.bigTypeId == ''){
+                    _this.vShow_TinyTypeID = true;
+                    _this.fromMessage = '请选择商品分类';
+                    _this.scrollIntoView();
+                    setTimeout(function(){
+                        _this.vShow_TinyTypeID = false;
+                    },2000);
+                    return;
+                }
+                if(_this.classificationTwoList!=''&& _this.classificationTwoList!=null){
+                    if(_this.releaseParams.smallTypeId == ''){
+                        _this.vShow_TinyTypeID = true;
+                        _this.fromMessage = '请选择二级分类';
+                        _this.scrollIntoView();
+                        setTimeout(function(){
+                            _this.vShow_TinyTypeID = false;
+                        },2000);
+                        return;
+                    }
+                }
+                if(_this.classificationThreeList!='' && _this.classificationThreeList!=null){
+                    if(_this.releaseParams.tinyTypeId == ''){
+                        _this.vShow_TinyTypeID = true;
+                        _this.fromMessage = '请选择三级分类';
+                        _this.scrollIntoView();
+                        setTimeout(function(){
+                            _this.vShow_TinyTypeID = false;
+                        },2000);
+                        return;
+                    }
+                }
+                if(_this.releaseParams.brandId == ''){
+                    _this.vShow_BrandID = true;
+                    _this.fromMessage = '请选择商品品牌';
+                    _this.scrollIntoView();
+                    setTimeout(function(){
+                        _this.vShow_BrandID = false;
+                    },2000);
+                    return;
+                }
+                if(_this.releaseParams.productType === ""){
+                    _this.vShow_GoodsType = true;
+                    _this.fromMessage = '请选择商品类型';
+                    _this.scrollIntoView();
+                    setTimeout(function(){
+                        _this.vShow_GoodsType = false;
+                    },2000);
+                    return;
+                }
+                if(_this.releaseParams.productType == 2){
+                    if(_this.releaseParams.machineType == ''){
+                        _this.vShow_GoodsType = true;
+                        _this.fromMessage = '请选择器械类型';
+                        _this.scrollIntoView();
+                        setTimeout(function(){
+                            _this.vShow_GoodsType = false;
+                        },3000);
+                        return;
+                    }
+                    if(_this.releaseParams.qualificationImg == ''){
+                        _this.vShow_QualificationImg = true;
+                        _this.fromMessage = '请上传资质图片';
+                        _this.scrollIntoView();
+                        setTimeout(function(){
+                            _this.vShow_QualificationImg = false;
+                        },3000);
+                        return;
+                    }
+                    if(_this.releaseParams.qualificationNo == ''){
+                        _this.vShow_QualificationNo = true;
+                        _this.fromMessage = '请输入证书编号';
+                        _this.scrollIntoView();
+                        setTimeout(function(){
+                            _this.vShow_QualificationNo = false;
+                        },3000);
+                        return;
+                    }
+                    if(_this.releaseParams.productName == ''){
+                        _this.vShow_ProductName = true;
+                        _this.fromMessage = '请输入产品名称';
+                        _this.scrollIntoView();
+                        setTimeout(function(){
+                            _this.vShow_ProductName = false;
+                        },3000);
+                        return;
+                    }
+                    if(_this.releaseParams.qualificationTime == ''){
+                        _this.vShow_QualificationTime = true;
+                        _this.fromMessage = '请选择证书有效期';
+                        _this.scrollIntoView();
+                        setTimeout(function(){
+                            _this.vShow_QualificationTime = false;
+                        },3000);
+                        return;
+                    }
+                }
+                //商品标签
+                if(_this.tagsList =='') {
+                    _this.vShow_Tags = true;
+                    _this.fromMessage = '请添加商品标签';
+                    _this.scrollIntoView();
+                    setTimeout(function(){
+                        _this.vShow_Tags = false;
+                    },3000);
+                    return;
+                }else{
+                    _this.tagsList.forEach(function(el){
+                        TagString += el.tag+',';
+                    });
+                    _this.releaseParams.tags = TagString.substring(0, TagString.lastIndexOf(','));
+                }
+                //搜索关键词
+                if(_this.searchKeyList!=''){
+                    _this.searchKeyList.forEach(function(el){
+                        KeyString+=el.value+',';
+                    });
+                    _this.releaseParams.searchKey = KeyString.substring(0, KeyString.lastIndexOf(','));
+                }
+                if( _this.paramKeyList[0].paramsName == ''){
+                    _this.params.param = [];
+                }else{
+                    _this.params.param = _this.paramKeyList;
+                }
+                _this.activeNum++;
+                _this.scrollIntoView();
+            },
+            handleNextStep1(){ //进入第三步
+                var _this = this;
+                if(!this.checkedSku()){
+                    _this.isSkuRule = true;
+                    _this.fromMessage = '请将SKU数据补充完整';
+                    setTimeout(function(){
+                        _this.isSkuRule = false;
+                    },3000);
+                    return;
+                }
+                if(_this.releaseParams.includedTax == 3){
+                    _this.vShow_includedTax = true;
+                    _this.fromMessage = '请选择是否含税';
+                    _this.scrollIntoView();
+                    setTimeout(function(){
+                        _this.vShow_includedTax = false;
+                    },3000);
+                    return;
+                }
+                if(_this.releaseParams.areaFlag == '0'){
+                    _this.ProvinceList.forEach(function(el){
+                        if(el.isChecked){
+                            _this.releaseParams.provinceIds+=el.provinceID+',';
+                        }
+                    });
+                    if(_this.releaseParams.provinceIds == ''){
+                        _this.vShow_isProvince = true;
+                        _this.fromMessage = '请选择指定区域';
+                        setTimeout(function(){
+                            _this.vShow_isProvince = false;
+                        },3000);
+                        return;
+                    }
+                }
+                _this.activeNum++;
+                _this.scrollIntoView();
+                if(_this.vShow_detailInfoEditor){
+                    _this.initCKeditor();
+                }
+            },
+            handleNextStep2(){//点击进入第四步
+                var _this = this;
+                var detailInfo= detailInfoEditor.getData();
+                _this.releaseParams.detailInfo = detailInfo;
+                if(_this.GoodsImagesList ==''){
+                    CAIMEI.dialog('请上传商品图片');
+                    return;
+                }
+                if( _this.releaseParams.detailInfo ==''){
+                    CAIMEI.dialog('请填写商品详情');
+                    return;
+                }
+                _this.params.image = [];
+                _this.GoodsImagesList.forEach(function(el,index){
+                    var imageObject = {};
+                    if(index == 0 ){
+                        imageObject = {productImageId:'',image:el,mainFlag:'1'};
+                    }else{
+                        imageObject = {productImageId:'',image:el,mainFlag:'0'};
+                    }
+                    _this.params.image.push(imageObject);
+                });
+                _this.activeNum++;
+                _this.scrollIntoView();
+                if(_this.vShow_orderInfoEditor){
+                    _this.initOrderCKeditor();
+                    _this.initSeverCKeditor();
+                }
+            },
+            blur_name: function(e){//商品名失去焦点
+                var _this = this;
+                _this.vShow_Name = false;
+                if(e.target.value == ''){
+                    _this.vShow_Name = true;
+                    _this.fromMessage = '请输入商品显示名';
+                    setTimeout(function(){
+                        _this.vShow_Name = false;
+                    },3000);
+                }else{
+                    _this.vShow_Name = false;
+                }
+            },
+            blur_aliasName: function(e){//内部商品名失去焦点
+                var _this = this;
+                _this.vShow_AliasName = false;
+                if(e.target.value == ''){
+                    _this.vShow_AliasName = true;
+                    _this.fromMessage = '请输入内部商品名';
+                    setTimeout(function(){
+                        _this.vShow_AliasName = false;
+                    },3000);
+                }else{
+                    _this.vShow_AliasName = false;
+                }
+            },
+            blur_taxPoint: function(event){
+                var E_TaxPoint = event.target.value;
+                if(E_TaxPoint!=''){
+                    this.releaseParams.taxPoint = parseFloat(E_TaxPoint);
+                }else{
+                    this.releaseParams.taxPoint = '';
+                }
+                this.vShow_taxPoint = false;
+            },
+            blur_tags: function(e){
+                this.vShow_Tags = false;
+            },
+            blur_aliasUnit: function(e){
+                this.vShow_Unit = false;
+            },
+            blur_qualificationNo: function(e){
+                this.vShow_QualificationNo = false;
+            },
+            blur_productName: function(e){
+                this.vShow_ProductName = false;
+            },
+            input_normalPrice: function(e){
+                this.vShow_NormalPrice = false;
+            },
+            input_price: function(e){
+                this.vShow_price = false;
+            },
+            input_trainingFee: function(event){
+                var E_Number = event.target.value;
+                if(E_Number!=''){
+                    this.releaseParams.trainingFee = parseInt(E_Number.replace(/[^0-9]/g,''));
+                }else{
+                    this.releaseParams.trainingFee = '';
+                }
+            },
+            input_minBuyNumber: function(event){
+                this.vShow_MinBuyNumber = false;
+                var E_Number = event.target.value;
+                if(E_Number!=''){
+                    this.releaseParams.minBuyNumber = parseInt(E_Number.replace(/[^0-9]/g,''));
+                }else{
+                    this.releaseParams.minBuyNumber = '';
+                }
+            },
+            input_stock: function(event){
+                this.vShow_Stock = false;
+                var E_stock = event.target.value;
+                if(E_stock!=''){
+                    this.releaseParams.stock = parseInt(E_stock.replace(/[^0-9]/g,''));
+                }else{
+                    this.releaseParams.stock = '';
+                }
+            },
+            toFixedFn: function(text){
+                return Number(text).toFixed(2);
+            },
+        }
+    }
+}();
+

+ 246 - 0
src/main/resources/static/js/supplier-center/shop/mixins/getInfoMixins.js

@@ -0,0 +1,246 @@
+// 初始化
+var getInfoMixins = function () {
+    return {
+        data() {
+            return {
+
+            }
+        },
+        methods: {
+            GetEditReleaseProductInfo: function(productId){
+                var _this = this;
+                SupplierApi.EditReleaseProductInfo({productId:productId},function(response){
+                    if(response.code == 0){
+                        console.log(response);
+                        var data = response.data;
+                        _this.skuParams = _this.setNewSkuArray(data.skus);
+                        _this.releaseParams.brandId = data.brandId;
+                        _this.releaseParams.name = data.name;
+                        _this.releaseParams.aliasName = data.aliasName;
+                        _this.releaseParams.productType = data.productType;
+                        _this.releaseParams.trainingMethod = data.trainingMethod;
+                        _this.releaseParams.trainingType = data.trainingType;
+                        _this.releaseParams.trainingFee = data.trainingFee;
+                        _this.releaseParams.machineType = data.machineType;
+                        _this.releaseParams.qualificationImg = data.qualificationImg;
+                        _this.releaseParams.unit = data.unit;
+                        _this.releaseParams.productCode = data.productCode;
+                        _this.releaseParams.normalPrice = data.normalPrice;
+                        _this.releaseParams.price = data.price;
+                        _this.releaseParams.includedTax = data.includedTax;
+                        _this.releaseParams.invoiceType = data.invoiceType;
+                        _this.releaseParams.taxPoint = data.supplierTaxPoint;
+                        _this.releaseParams.costPrice = data.costPrice;
+                        _this.releaseParams.minBuyNumber = data.minBuyNumber;
+                        _this.releaseParams.stock = data.stock;
+                        _this.releaseParams.step = data.step;
+                        _this.releaseParams.byFlag = data.byFlag;
+                        _this.releaseParams.allAreaFlag = data.allAreaFlag;
+                        _this.releaseParams.productName = data.productName;
+                        _this.releaseParams.qualificationNo = data.qualificationNo;
+                        _this.releaseParams.qualificationTime = data.qualificationTime;
+                        _this.releaseParams.newProductType = data.newProductType;
+                        _this.releaseParams.detailInfo = data.productDetail.detailInfo;
+                        _this.releaseParams.serviceInfo = data.productDetail.serviceInfo;
+                        _this.releaseParams.orderInfo = data.productDetail.orderInfo;
+                        _this.productDetailInfoId = data.productDetail.productDetailInfoId;
+                        _this.tagsList = _this.setTagArray(data.tags);
+                        _this.EchoProductFn(data.productType);
+                        _this.EchoMachineTypeFn(data.machineType);
+                        _this.selectText.bigTypeID = data.bigTypeName;
+                        _this.selectText.smallTypeID = data.smallTypeName;
+                        _this.selectText.tinyTypeID = data.tinyTypeName;
+                        _this.releaseParams.bigTypeId = data.bigTypeId;
+                        _this.releaseParams.smallTypeId =data.smallTypeId;
+                        _this.releaseParams.tinyTypeId =data.tinyTypeId;
+                        _this.releaseParams.firstClassifyName = data.bigTypeName;
+                        _this.releaseParams.twoClassifyName = data.smallTypeName;
+                        _this.releaseParams.threeClassifyName = data.tinyTypeName;
+                        _this.releaseParams.commodityType =data.commodityType;
+                        _this.releaseParams.brandName = data.brandName;
+                        _this.GoodsImagesList = _this.EchoGoodsImagesListFn(data.imageList);
+                        _this.classificationTwoList = data.smallTypeName;
+                        _this.classificationThreeList = data.tinyTypeName;
+                        if(data.commodityType !=null||data.commodityType != ''){
+                            _this.releaseParams.commodityType = data.commodityType;
+                            _this.GetFistClassFn(data.commodityType);
+                        }
+                        if(_this.classificationTwoList!=''){
+                            _this.GetTwoClassFn(data.bigTypeID);
+                        }
+                        if (_this.classificationThreeList){
+                            _this.GetThreeClassFn(data.smallTypeID);
+                        }
+                        if(data.searchKey != null){
+                            _this.setSearchKeyArray(data.searchKey);
+                        }
+                        if(data.parametersList == ''){
+                            _this.paramKeyList = [{paramsName:'',paramsContent:''}];
+                        }else{
+                            _this.paramKeyList = data.parametersList;
+                        }
+                        // 下拉列表初始化
+                        setTimeout(function(){
+                            _this.ChangeClassificationFirst({bigTypeId:data.bigTypeId, name:data.bigTypeName});
+                            setTimeout(function(){
+                                _this.ChangeClassificationTwo({smallTypeId:data.smallTypeId, name:data.smallTypeName});
+                                setTimeout(function(){
+                                    _this.ChangeClassificationThree({tinyTypeId:data.tinyTypeId, name:data.tinyTypeName});
+                                },500);
+                            },500);
+                        },500);
+                    }else{
+                        CAIMEI.Alert(response.msg, '确定', false);
+                    }
+                })
+            },
+            setNewSkuArray(arr){// 回显处理Sku数据
+                return arr.map((el)=>({
+                    unit: el.unit,
+                    stock: el.stock,
+                    price: el.price,
+                    skuId: el.skuId,
+                    costPrice: el.costPrice,
+                    normalPrice: el.normalPrice,
+                    minBuyNumber: el.minBuyNumber
+                }))
+            },
+            setTagArray(arr){//回显处理商品标签
+                var arrSplit = arr.split(',');
+                var _ARRAY = [];
+                arrSplit.forEach(function(item){
+                    var _OBJ = {tag:item};
+                    _ARRAY.push(_OBJ)
+                });
+                return _ARRAY
+            },
+            setSearchKeyArray(arr){//回显处理商品搜索关键词
+                var _this = this;
+                var arrSplit = arr.split(',');
+                return _this.searchKeyList.map(function(el,index){
+                    el.value = arrSplit[index] || '';
+                })
+            },
+            EchoProductFn(type) {
+                switch (type) {
+                    case 0:
+                        this.selectText.goodsType = '其他';
+                        break;
+                    case 1:
+                        this.selectText.goodsType = '妆字号';
+                        break;
+                    case 2:
+                        this.selectText.goodsType = '械字号';
+                        break;
+                }
+            },
+            EchoMachineTypeFn(type) {
+                switch (type) {
+                    case 1:
+                        this.selectText.apparatusType = '一类医疗器械';
+                        break;
+                    case 2:
+                        this.selectText.apparatusType = '二类医疗器械';
+                        break;
+                    case 3:
+                        this.selectText.apparatusType = '三类医疗器械';
+                        break;
+                }
+            },
+            EchoGoodsImagesListFn(arr){//处理商品主图回显
+                var newArray =[];
+                arr.forEach( function(el){ newArray.push(el.image) });
+                return newArray;
+            },
+            GetFistClassFn(val){//获取一级分类菜单
+                var _this = this;
+                PublicApi.GetFirstClassFication({typeSort:val},function (response) {
+                    if(response.code == 0){
+                        _this.classificationFirstList = response.data;
+                    }else{
+                        CAIMEI.Alert(response.msg, '确定', false);
+                    }
+                })
+            },
+            GetTwoClassFn(value){//获取二级分类菜单
+                var _this = this;
+                PublicApi.GetTwoClassFication({bigTypeId:value},function (response) {
+                    if(response.code == 0){
+                        if(response.data.length>0){
+                            _this.classificationTwoList = response.data;
+                        }else {
+                            _this.classificationTwoList = [];
+                            _this.releaseParams.twoClassifyName = '';
+                            _this.releaseParams.smallTypeId = ''
+                        }
+                    }else{
+                        CAIMEI.Alert(response.msg, '确定', false);
+                    }
+                })
+            },
+            GetThreeClassFn(value){//获取三级分类菜单
+                var _this = this;
+                PublicApi.GetThreeClassFication({smallTypeId:value},function (response) {
+                    if(response.code == 0){
+                        if(response.data.length>0){
+                            _this.classificationThreeList = response.data;
+                        }else {
+                            _this.releaseParams.threeClassifyName = '';
+                            _this.classificationThreeList = [];
+                            _this.releaseParams.tinyTypeId = ''
+                        }
+                    }else{
+                        CAIMEI.Alert(response.msg, '确定', false);
+                    }
+                })
+            },
+            ChangeClassificationFirst(option){//选择一级分类
+                var _this = this;
+                _this.selectText.bigTypeID = option.name;
+                _this.releaseParams.firstClassifyName = option.name;
+                _this.releaseParams.bigTypeId = option.bigTypeId
+                _this.selectText.smallTypeID='请选择二级分类';
+                _this.selectText.tinyTypeID = '请选择三级分类';
+                _this.releaseParams.smallTypeId ='';
+                _this.releaseParams.tinyTypeId ='';
+                _this.classificationTwoList=[];
+                _this.classificationThreeList =[];
+                _this.isSelectActive = 0;
+                if(_this.releaseParams.bigTypeId!=''){
+                    _this.GetTwoClassFn(option.bigTypeId);
+                }
+            },
+            ChangeClassificationTwo(option){//选择二级分类
+                var _this = this;
+                if(!option.smallTypeId){_this.isSelectActive = 0; return;}
+                _this.selectText.smallTypeID = option.name;
+                _this.selectText.tinyTypeID = '请选择三级分类';
+                _this.releaseParams.smallTypeId = option.smallTypeId;
+                _this.releaseParams.twoClassifyName = option.name;
+                _this.isSelectActive = 0;
+                _this.GetThreeClassFn(option.smallTypeId);
+            },
+            ChangeClassificationThree(option){//选择三级分类
+                var _this = this;
+                if(!option.tinyTypeId){_this.isSelectActive = 0; return;}
+                _this.releaseParams.tinyTypeId = option.tinyTypeId;
+                _this.selectText.tinyTypeID = option.name;
+                _this.releaseParams.threeClassifyName = option.name;
+                _this.isSelectActive = 0;
+                _this.vShow_TinyTypeID = false;
+            }
+        },
+        mounted: function() {
+            if(globalUserData){
+                this.releaseParams.shopId = globalUserData.shopId;
+                this.releaseParams.userId = globalUserData.userId;
+                this.releaseType = CAIMEI.getUrlParam('type');
+                if(  this.releaseType == 'edit'){
+                    this.productId = Number(CAIMEI.getUrlParam('productId'));
+                    this.GetEditReleaseProductInfo(this.productId);
+                }
+            }
+        }
+    }
+}();
+

+ 97 - 0
src/main/resources/static/js/supplier-center/shop/mixins/releaseMixins.js

@@ -0,0 +1,97 @@
+// 发布商品
+const defaultSku = {
+    unit:'', // 规格
+    normalPrice:'', // 市场价
+    price:'', // 售价
+    costPrice:'', // 结算价
+    minBuyNumber:'',// 起订量
+    stock:'' // 库存
+}
+var releaseMixins = function () {
+    return {
+        data() {
+            return {
+                skuParams:[],
+                isSkuRule:false
+            }
+        },
+        mounted: function() {
+            this.skuParams.push(defaultSku)
+        },
+        methods: {
+            addSupplierReleaseInfo(){
+                var _this = this;
+                if(_this.releaseParams.newProductType === 0){
+                    _this.vShow_isNewProductType = true;
+                    _this.fromMessage = '请选择是否参与新品展示';
+                    _this.scrollIntoView();
+                    setTimeout(function(){
+                        _this.vShow_isNewProductType = false;
+                    },3000);
+                    return;
+                }
+                _this.releaseParams.orderInfo = orderInfoEditor.getData();
+                _this.releaseParams.serviceInfo = severInfoEditor.getData();
+                if(_this.releaseType == 'edit'){
+                    _this.releaseParams.productDetailInfoId = _this.productDetailInfoId;
+                    _this.releaseParams.productId = _this.productId;
+                    CAIMEI.returnedTarget();
+                    _this.releaseParams = Object.assign(_this.releaseParams,{params:JSON.stringify(_this.params)});
+                    delete _this.releaseParams.imageList;
+                    delete _this.releaseParams.parametersList;
+                    delete _this.releaseParams.productDetail;
+                }else{
+                    CAIMEI.returnedTarget();
+                    _this.releaseParams = Object.assign(_this.releaseParams,{params:JSON.stringify(_this.params)});
+                }
+                this.releaseParams.skus = JSON.stringify(this.skuParams);
+                this.addSupplierReleaseProduct(_this.releaseParams);
+            },
+            addSupplierReleaseProduct(params){// 发布商品
+                var _this = this;
+                console.log('======', params);
+                SupplierApi.AddSupplierReleaseProduct(params,function(response){
+                    if(response.code == 0){
+                        CAIMEI.dialog('提交成功,等待审核',true,function () {
+                            if(_this.releaseType == 'edit'){
+                                SupplierApi.UpdateSearchManageProduct({productId:_this.productId},function (res) {
+                                    console.log('编辑商品更新搜索索引~~~成功');
+                                })
+                            }
+                            location.href = '/supplier/goods.html';
+                            if(CAIMEI.Storage.getItem('adProductPeview')){
+                                CAIMEI.Storage.removeItem('adProductPeview');
+                            }
+                        });
+                    }else{
+                        CAIMEI.Alert(response.msg, '确定', false);
+                    }
+                });
+            },
+            addskuParamsFn(sku,index){ // 添加
+                let defSku = {unit:'', normalPrice:'', price:'', costPrice:'',minBuyNumber:'', stock:''}
+                this.skuParams.push(defSku)
+            },
+            delskuParamsFn(sku,index){// 删除
+                this.skuParams.splice(index, 1)
+                if(this.releaseType == 'edit'){
+                    this.updateDelProductSku(sku.skuId);
+                }
+            },
+            updateDelProductSku(skuId){
+                SupplierApi.UpdateDelProductSku({skuId:skuId},function(response){
+                    if(response.code === 0){
+                       console.log('')
+                    }
+                });
+            },
+            checkedSku(){// 校验SKU 是否填写完整
+                return this.skuParams.every((params) => Object.keys(params).every(key => params[key]))
+            },
+            handleSkuInput(){
+                this.isSkuRule = false
+            }
+        }
+    }
+}();
+

+ 14 - 7
src/main/resources/static/js/supplier-center/shop/preview.js

@@ -18,23 +18,30 @@ var previewContainer = new Vue({
         trainingMethodText:'',
         trainingType:'',
         isTrainingMethod:false,
+        skuStext:''
     },
     computed: {
 
     },
     methods: {
         shopInfoData: function(){
-            var _this = this;
+            const _this = this;
             SupplierApi.SupplierViewShopInfo({userId:_this.userId},function(response){
-                if(response.code ==0 ){
+                if(response.code ===0 ){
                     _this.isRequest = true;
                     _this.shopData = response.data.shop;
                 }
             });
         },
         infoFata: function(){
-            var _this = this;
+            const _this = this;
             _this.previewThumb = _this.shopInfo.params.image;
+            let newArray = this.shopInfo.skus
+            this.skuStext = newArray.map(item =>{ return item.unit }).join(',')
+            this.shopInfo.price = newArray[0].price;
+            this.shopInfo.normalPrice = newArray[0].normalPrice;
+            this.shopInfo.minBuyNumber = newArray[0].minBuyNumber;
+            this.shopInfo.stock = newArray[0].stock;
         },
         changeTab: function(index){
             this.tabIndex = index;
@@ -49,7 +56,7 @@ var previewContainer = new Vue({
             return "title_" +index
         },
         setArray: function(arr){//回显处理字符串
-            var _ARRAY = [];
+            const _ARRAY = [];
             arr.split(',').forEach(function(item,index){
                 var _OBJ = {name:item};
                 _ARRAY.push(_OBJ)
@@ -58,7 +65,7 @@ var previewContainer = new Vue({
         },
     },
     mounted: function () {
-        var _this = this;
+        const _this = this;
         if(globalUserData){
             _this.userId = globalUserData.userId;
             _this.shopId = globalUserData.shopId;
@@ -77,7 +84,7 @@ var previewContainer = new Vue({
             }
             console.log(_this.previewTags);
         }
-        var magnifier = new mag('.preview-banner-big', '.preview-box','#CM____pic_thumb','.hover','.bigitem');
-            magnifier.init();
+        const magnifier = new mag('.preview-banner-big', '.preview-box', '#CM____pic_thumb', '.hover', '.bigitem');
+        magnifier.init();
     }
 });

+ 7 - 707
src/main/resources/static/js/supplier-center/shop/release.js

@@ -1,11 +1,11 @@
 /**
  * Created by ZHJY on 2020/9/17.
  */
-;
 $('.navLayout').find('.navList').removeClass("on").find('.con').hide().find('a').removeClass("on");
 $('.navLayout').find('.navList').eq(1).addClass("on").find('.con').show().find('a').eq(2).addClass("on");
 var releaseContainer = new Vue({
     el:"#releaseContainer",
+    mixins: [getInfoMixins,checkeMixins,releaseMixins],
     data: {
         NODE_ENV_BASE_URL:'',
         releaseType:'',
@@ -62,6 +62,7 @@ var releaseContainer = new Vue({
             qualificationNo:'',//资质证书编号
             productName:'',//资质产品名称
             qualificationTime:'',//证书有效日期
+            skus:[]// sku
         },
         params:{
             param:[],//相关参数
@@ -119,122 +120,9 @@ var releaseContainer = new Vue({
         isTaxPonitEdit:false,
         fromMessage:'',//提示文字
         isBrandAssociation:false,
-        vShow_Name:false,
-        vShow_AliasName:false,
-        vShow_TinyTypeID:false,
-        vShow_BrandID:false,
-        vShow_GoodsType:false,
-        vShow_QualificationImg:false,
-        vShow_Tags:false,
-        vShow_Unit:false,
-        vShow_NormalPrice:false,
-        vShow_price:false,
-        vShow_includedTax:false,
-        vShow_MinBuyNumber:false,
-        vShow_Stock:false,
-        vShow_isProvince:false,
-        vShow_isNewProductType:false,
-        vShow_taxPoint:false,
-        vShow_GoodsImages:false,
-        vShow_detailInfoEditor:true,
-        vShow_orderInfoEditor:true,
-        vShow_attribute:false,
-        vShow_trainingMethod:false,
-        vShow_trainingType:false,
-        vShow_QualificationNo:false,
-        vShow_ProductName:false,
-        vShow_QualificationTime:false,
-    },
-    computed: {
 
     },
     methods: {
-        GetEditReleaseProductInfo: function(productId){
-            var _this = this;
-            SupplierApi.EditReleaseProductInfo({productId:productId},function(response){
-                if(response.code == 0){
-                    console.log(response);
-                    var data = response.data;
-                    _this.releaseParams.brandId = data.brandId;
-                    _this.releaseParams.name = data.name;
-                    _this.releaseParams.aliasName = data.aliasName;
-                    _this.releaseParams.productType = data.productType;
-                    _this.releaseParams.trainingMethod = data.trainingMethod;
-                    _this.releaseParams.trainingType = data.trainingType;
-                    _this.releaseParams.trainingFee = data.trainingFee;
-                    _this.releaseParams.machineType = data.machineType;
-                    _this.releaseParams.qualificationImg = data.qualificationImg;
-                    _this.releaseParams.unit = data.unit;
-                    _this.releaseParams.productCode = data.productCode;
-                    _this.releaseParams.normalPrice = data.normalPrice;
-                    _this.releaseParams.price = data.price;
-                    _this.releaseParams.includedTax = data.includedTax;
-                    _this.releaseParams.invoiceType = data.invoiceType;
-                    _this.releaseParams.taxPoint = data.supplierTaxPoint;
-                    _this.releaseParams.costPrice = data.costPrice;
-                    _this.releaseParams.minBuyNumber = data.minBuyNumber;
-                    _this.releaseParams.stock = data.stock;
-                    _this.releaseParams.step = data.step;
-                    _this.releaseParams.byFlag = data.byFlag;
-                    _this.releaseParams.allAreaFlag = data.allAreaFlag;
-                    _this.releaseParams.productName = data.productName;
-                    _this.releaseParams.qualificationNo = data.qualificationNo;
-                    _this.releaseParams.qualificationTime = data.qualificationTime;
-                    _this.releaseParams.newProductType = data.newProductType;
-                    _this.releaseParams.detailInfo = data.productDetail.detailInfo;
-                    _this.releaseParams.serviceInfo = data.productDetail.serviceInfo;
-                    _this.releaseParams.orderInfo = data.productDetail.orderInfo;
-                    _this.productDetailInfoId = data.productDetail.productDetailInfoId;
-                    _this.tagsList = _this.setTagArray(data.tags);
-                    _this.EchoProductFn(data.productType);
-                    _this.EchoMachineTypeFn(data.machineType);
-                    _this.selectText.bigTypeID = data.bigTypeName;
-                    _this.selectText.smallTypeID = data.smallTypeName;
-                    _this.selectText.tinyTypeID = data.tinyTypeName;
-                    _this.releaseParams.bigTypeId = data.bigTypeId;
-                    _this.releaseParams.smallTypeId =data.smallTypeId;
-                    _this.releaseParams.tinyTypeId =data.tinyTypeId;
-                    _this.releaseParams.firstClassifyName = data.bigTypeName;
-                    _this.releaseParams.twoClassifyName = data.smallTypeName;
-                    _this.releaseParams.threeClassifyName = data.tinyTypeName;
-                    _this.releaseParams.commodityType =data.commodityType;
-                    _this.releaseParams.brandName = data.brandName;
-                    _this.GoodsImagesList = _this.EchoGoodsImagesListFn(data.imageList);
-                    _this.classificationTwoList = data.smallTypeName;
-                    _this.classificationThreeList = data.tinyTypeName;
-                    if(data.commodityType !=null||data.commodityType != ''){
-                        _this.releaseParams.commodityType = data.commodityType;
-                        _this.GetFistClassFn(data.commodityType);
-                    }
-                    if(_this.classificationTwoList!=''){
-                        _this.GetTwoClassFn(data.bigTypeID);
-                    }
-                    if (_this.classificationThreeList){
-                        _this.GetThreeClassFn(data.smallTypeID);
-                    }
-                    if(data.searchKey != null){
-                        _this.setSearchKeyArray(data.searchKey);
-                    }
-                    if(data.parametersList == ''){
-                        _this.paramKeyList = [{paramsName:'',paramsContent:''}];
-                    }else{
-                        _this.paramKeyList = data.parametersList;
-                    }
-                    // 下拉列表初始化
-                    setTimeout(function(){
-                        _this.ChangeClassificationFirst({bigTypeId:data.bigTypeId, name:data.bigTypeName});
-                        setTimeout(function(){
-                            _this.ChangeClassificationTwo({smallTypeId:data.smallTypeId, name:data.smallTypeName});
-                            setTimeout(function(){
-                                _this.ChangeClassificationThree({tinyTypeId:data.tinyTypeId, name:data.tinyTypeName});
-                            },500);
-                        },500);
-                    },500);
-                }else{
-                    CAIMEI.Alert(response.msg, '确定', false);
-                }
-            })
-        },
         getclass:function(val){
             this.selectText.bigTypeID='请选择一级分类';
             this.selectText.smallTypeID = '请选择二级分类';
@@ -243,32 +131,6 @@ var releaseContainer = new Vue({
             this.classificationThreeList =[];
             this.GetFistClassFn(val);
         },
-        EchoProductFn : function(type) {
-            switch (type) {
-                case 0 && null:
-                    this.selectText.goodsType = '其他';
-                    break;
-                case 1:
-                    this.selectText.goodsType = '妆字号';
-                    break;
-                case 2:
-                    this.selectText.goodsType = '械字号';
-                    break;
-            }
-        },
-        EchoMachineTypeFn : function(type) {
-            switch (type) {
-                case 1 && null:
-                    this.selectText.apparatusType = '一类医疗器械';
-                    break;
-                case 2:
-                    this.selectText.apparatusType = '二类医疗器械';
-                    break;
-                case 3:
-                    this.selectText.apparatusType = '三类医疗器械';
-                    break;
-            }
-        },
         choiceTrain : function(val){
             var _this = this;
             _this.releaseParams.trainType = Number(val);
@@ -277,11 +139,6 @@ var releaseContainer = new Vue({
             var _this = this;
             _this.releaseParams.expensesType = Number(val);
         },
-        EchoGoodsImagesListFn: function(arr){//处理商品主图回显
-            var newArray =[];
-            arr.forEach( function(el){ newArray.push(el.image) });
-            return newArray;
-        },
         touchmoveFn: function(){
             this.isSelectActive =0;
         },
@@ -408,83 +265,6 @@ var releaseContainer = new Vue({
             _this.isBrandAssociation = false;
             _this.vShow_BrandID = false;
         },
-        GetFistClassFn: function(val){//获取一级分类菜单
-            var _this = this;
-            PublicApi.GetFirstClassFication({typeSort:val},function (response) {
-                if(response.code == 0){
-                    _this.classificationFirstList = response.data;
-                }else{
-                    CAIMEI.Alert(response.msg, '确定', false);
-                }
-            })
-        },
-        GetTwoClassFn: function(value){//获取二级分类菜单
-            var _this = this;
-            PublicApi.GetTwoClassFication({bigTypeId:value},function (response) {
-                if(response.code == 0){
-                     if(response.data.length>0){
-                        _this.classificationTwoList = response.data;
-                    }else {
-                        _this.classificationTwoList = [];
-                        _this.releaseParams.twoClassifyName = '';
-                        _this.releaseParams.smallTypeId = ''
-                    }
-                }else{
-                    CAIMEI.Alert(response.msg, '确定', false);
-                }
-            })
-        },
-        GetThreeClassFn: function(value){//获取三级分类菜单
-            var _this = this;
-            PublicApi.GetThreeClassFication({smallTypeId:value},function (response) {
-                if(response.code == 0){
-                    if(response.data.length>0){
-                        _this.classificationThreeList = response.data;
-                    }else {
-                        _this.releaseParams.threeClassifyName = '';
-                        _this.classificationThreeList = [];
-                        _this.releaseParams.tinyTypeId = ''
-                    }
-                }else{
-                    CAIMEI.Alert(response.msg, '确定', false);
-                }
-            })
-        },
-        ChangeClassificationFirst: function(option){//选择一级分类
-            var _this = this;
-            _this.selectText.bigTypeID = option.name;
-            _this.releaseParams.firstClassifyName = option.name;
-            _this.releaseParams.bigTypeId = option.bigTypeId
-            _this.selectText.smallTypeID='请选择二级分类';
-            _this.selectText.tinyTypeID = '请选择三级分类';
-            _this.releaseParams.smallTypeId ='';
-            _this.releaseParams.tinyTypeId ='';
-            _this.classificationTwoList=[];
-            _this.classificationThreeList =[];
-            _this.isSelectActive = 0;
-            if(_this.releaseParams.bigTypeId!=''){
-                 _this.GetTwoClassFn(option.bigTypeId);
-            }
-        },
-        ChangeClassificationTwo: function(option){//选择二级分类
-            var _this = this;
-            if(!option.smallTypeId){_this.isSelectActive = 0; return;}
-            _this.selectText.smallTypeID = option.name;
-            _this.selectText.tinyTypeID = '请选择三级分类';
-            _this.releaseParams.smallTypeId = option.smallTypeId;
-            _this.releaseParams.twoClassifyName = option.name;
-            _this.isSelectActive = 0;
-            _this.GetThreeClassFn(option.smallTypeId);
-        },
-        ChangeClassificationThree: function(option){//选择三级分类
-            var _this = this;
-            if(!option.tinyTypeId){_this.isSelectActive = 0; return;}
-            _this.releaseParams.tinyTypeId = option.tinyTypeId;
-            _this.selectText.tinyTypeID = option.name;
-            _this.releaseParams.threeClassifyName = option.name;
-            _this.isSelectActive = 0;
-            _this.vShow_TinyTypeID = false;
-        },
         addTag:function(){//添加标签
             var _this = this;
             if(_this.tagsText == ''){
@@ -679,336 +459,6 @@ var releaseContainer = new Vue({
                 return;
             }
         },
-        PrevStep: function(){//返回上一步
-            this.activeNum--;
-            this.scrollIntoView();
-        },
-        NextStep: function(){//进入第二步
-            var _this = this;
-            var KeyString = '',TagString='';
-            console.log(_this.releaseParams);
-            if(_this.releaseParams.name == ''){
-                _this.vShow_Name = true;
-                _this.fromMessage = '请输入商品显示名';
-                _this.scrollIntoView();
-                setTimeout(function(){
-                    _this.vShow_Name = false;
-                },2000);
-                return
-            }
-            if(_this.releaseParams.aliasName == ''){
-                _this.vShow_AliasName = true;
-                _this.fromMessage = '请输入内部商品名';
-                _this.scrollIntoView();
-                setTimeout(function(){
-                    _this.vShow_AliasName = false;
-                },2000);
-                return;
-            }
-            if(_this.releaseParams.commodityType == ''){
-                _this.vShow_attribute=true;
-                _this.fromMessage = '请选择商品属性';
-                 _this.scrollIntoView();
-                setTimeout(function(){
-                    _this.vShow_attribute = false;
-                },2000);
-                return;
-            }
-            if(_this.releaseParams.commodityType == 2){
-                if(_this.releaseParams.trainingMethod == 0){
-                    _this.vShow_trainingMethod=true;
-                    _this.fromMessage = '请选择培训方式';
-                    _this.scrollIntoView();
-                    setTimeout(function(){
-                        _this.vShow_trainingMethod = false;
-                    },2000);
-                    return;
-                }
-                if(_this.releaseParams.trainingType == 0){
-                    _this.vShow_trainingType=true;
-                    _this.fromMessage = '请选择培训费用';
-                    _this.scrollIntoView();
-                    setTimeout(function(){
-                        _this.vShow_trainingType = false;
-                    },2000);
-                    return;
-                }
-                if(_this.releaseParams.trainingType == 1){
-                    if(_this.releaseParams.trainingFee == ''){
-                        _this.vShow_trainingType=true;
-                        _this.fromMessage = '请填写包含食宿,交通等各项费用的培训总金额';
-                        _this.scrollIntoView();
-                        setTimeout(function(){
-                            _this.vShow_trainingType = false;
-                        },2000);
-                        return;
-                    }
-                }
-            }
-            if(_this.releaseParams.bigTypeId == ''){
-                _this.vShow_TinyTypeID = true;
-                _this.fromMessage = '请选择商品分类';
-                _this.scrollIntoView();
-                setTimeout(function(){
-                    _this.vShow_TinyTypeID = false;
-                },2000);
-                return;
-            }
-            if(_this.classificationTwoList!=''&& _this.classificationTwoList!=null){
-                if(_this.releaseParams.smallTypeId == ''){
-                    _this.vShow_TinyTypeID = true;
-                    _this.fromMessage = '请选择二级分类';
-                    _this.scrollIntoView();
-                    setTimeout(function(){
-                        _this.vShow_TinyTypeID = false;
-                    },2000);
-                      return;
-                }
-            }
-            if(_this.classificationThreeList!='' && _this.classificationThreeList!=null){
-                if(_this.releaseParams.tinyTypeId == ''){
-                    _this.vShow_TinyTypeID = true;
-                    _this.fromMessage = '请选择三级分类';
-                    _this.scrollIntoView();
-                    setTimeout(function(){
-                        _this.vShow_TinyTypeID = false;
-                    },2000);
-                     return;
-                }
-            }
-            if(_this.releaseParams.brandId == ''){
-                _this.vShow_BrandID = true;
-                _this.fromMessage = '请选择商品品牌';
-                _this.scrollIntoView();
-                setTimeout(function(){
-                    _this.vShow_BrandID = false;
-                },2000);
-                return;
-            }
-            if(_this.releaseParams.productType === ""){
-                _this.vShow_GoodsType = true;
-                _this.fromMessage = '请选择商品类型';
-                _this.scrollIntoView();
-                setTimeout(function(){
-                    _this.vShow_GoodsType = false;
-                },2000);
-                return;
-            }
-            if(_this.releaseParams.productType == 2){
-                if(_this.releaseParams.machineType == ''){
-                    _this.vShow_GoodsType = true;
-                    _this.fromMessage = '请选择器械类型';
-                    _this.scrollIntoView();
-                    setTimeout(function(){
-                        _this.vShow_GoodsType = false;
-                    },3000);
-                    return;
-                }
-                if(_this.releaseParams.qualificationImg == ''){
-                    _this.vShow_QualificationImg = true;
-                    _this.fromMessage = '请上传资质图片';
-                    _this.scrollIntoView();
-                    setTimeout(function(){
-                        _this.vShow_QualificationImg = false;
-                    },3000);
-                    return;
-                }
-                if(_this.releaseParams.qualificationNo == ''){
-                    _this.vShow_QualificationNo = true;
-                    _this.fromMessage = '请输入证书编号';
-                    _this.scrollIntoView();
-                    setTimeout(function(){
-                        _this.vShow_QualificationNo = false;
-                    },3000);
-                    return;
-                }
-                if(_this.releaseParams.productName == ''){
-                    _this.vShow_ProductName = true;
-                    _this.fromMessage = '请输入产品名称';
-                    _this.scrollIntoView();
-                    setTimeout(function(){
-                        _this.vShow_ProductName = false;
-                    },3000);
-                    return;
-                }
-                if(_this.releaseParams.qualificationTime == ''){
-                    _this.vShow_QualificationTime = true;
-                    _this.fromMessage = '请选择证书有效期';
-                    _this.scrollIntoView();
-                    setTimeout(function(){
-                        _this.vShow_QualificationTime = false;
-                    },3000);
-                    return;
-                }
-            }
-            //商品标签
-            if(_this.tagsList =='') {
-                _this.vShow_Tags = true;
-                _this.fromMessage = '请添加商品标签';
-                _this.scrollIntoView();
-                setTimeout(function(){
-                    _this.vShow_Tags = false;
-                },3000);
-                return;
-            }else{
-                _this.tagsList.forEach(function(el){
-                    TagString += el.tag+',';
-                });
-                _this.releaseParams.tags = TagString.substring(0, TagString.lastIndexOf(','));
-            }
-            if(_this.releaseParams.unit == ''){
-                _this.vShow_Unit = true;
-                _this.fromMessage = '请输入包装规格';
-                setTimeout(function(){
-                    _this.vShow_Unit = false;
-                },3000);
-                _this.scrollIntoView();
-                return;
-            }
-            //搜索关键词
-            if(_this.searchKeyList!=''){
-                _this.searchKeyList.forEach(function(el){
-                    KeyString+=el.value+',';
-                });
-                _this.releaseParams.searchKey = KeyString.substring(0, KeyString.lastIndexOf(','));
-            }
-            if( _this.paramKeyList[0].paramsName == ''){
-                _this.params.param = [];
-            }else{
-                _this.params.param = _this.paramKeyList;
-            }
-            _this.activeNum++;
-            _this.scrollIntoView();
-        },
-        NextStep1: function(){//进入第三步
-            var _this = this;
-            if(_this.releaseParams.normalPrice == ''){
-                _this.vShow_NormalPrice = true;
-                _this.fromMessage = '请输入市场价';
-                _this.scrollIntoView();
-                setTimeout(function(){
-                    _this.vShow_NormalPrice = false;
-                },3000);
-                return
-            }
-            if(_this.releaseParams.normalPrice == 0){
-                _this.vShow_NormalPrice = true;
-                _this.fromMessage = '市场价不能为0';
-                _this.scrollIntoView();
-                setTimeout(function(){
-                    _this.vShow_NormalPrice = false;
-                },3000);
-                return
-            }
-            if(_this.releaseParams.price == ''){
-                _this.vShow_price = true;
-                _this.fromMessage = '请输入售价';
-                _this.scrollIntoView();
-                setTimeout(function(){
-                    _this.vShow_price = false;
-                },3000);
-                return;
-            }
-            if(_this.releaseParams.price == 0){
-                _this.vShow_price = true;
-                _this.fromMessage = '售价不能为0';
-                _this.scrollIntoView();
-                setTimeout(function(){
-                    _this.vShow_price = false;
-                },3000);
-                return;
-            }
-            if(_this.releaseParams.includedTax == 3){
-                _this.vShow_includedTax = true;
-                _this.fromMessage = '请选择是否含税';
-                _this.scrollIntoView();
-                setTimeout(function(){
-                    _this.vShow_includedTax = false;
-                },3000);
-                return;
-            }
-            if(_this.releaseParams.minBuyNumber === ''){
-                _this.vShow_MinBuyNumber = true;
-                _this.fromMessage = '请输入起订量';
-                _this.scrollIntoView();
-                setTimeout(function(){
-                    _this.vShow_MinBuyNumber = false;
-                },3000);
-                return;
-            }
-            if(_this.releaseParams.stock === ''){
-                _this.vShow_Stock = true;
-                _this.fromMessage = '请输入库存';
-                _this.scrollIntoView();
-                setTimeout(function(){
-                    _this.vShow_Stock = false;
-                },3000);
-                return;
-            }
-            if(_this.releaseParams.minBuyNumber > _this.releaseParams.stock){
-                _this.vShow_MinBuyNumber = true;
-                _this.fromMessage = '起订量不能大于库存';
-                _this.scrollIntoView();
-                setTimeout(function(){
-                    _this.vShow_MinBuyNumber = false;
-                },3000);
-                return;
-            }
-            if(_this.releaseParams.areaFlag == '0'){
-                _this.ProvinceList.forEach(function(el){
-                    if(el.isChecked){
-                        _this.releaseParams.provinceIds+=el.provinceID+',';
-                    }
-                });
-                if(_this.releaseParams.provinceIds == ''){
-                    _this.vShow_isProvince = true;
-                    _this.fromMessage = '请选择指定区域';
-                    setTimeout(function(){
-                        _this.vShow_isProvince = false;
-                    },3000);
-                    return;
-                }
-            }
-            _this.activeNum++;
-            _this.scrollIntoView();
-            if(_this.vShow_detailInfoEditor){
-                _this.initCKeditor();
-            }
-        },
-        NextStep2: function() {//点击进入第四步
-            var _this = this;
-            var detailInfo= detailInfoEditor.getData();
-            _this.releaseParams.detailInfo = detailInfo;
-            if(_this.GoodsImagesList ==''){
-                CAIMEI.dialog('请上传商品图片');
-                return;
-            }
-            if( _this.releaseParams.detailInfo ==''){
-                CAIMEI.dialog('请填写商品详情');
-                return;
-            }
-            _this.params.image = [];
-            _this.GoodsImagesList.forEach(function(el,index){
-                var imageObject = {};
-                if(index == 0 ){
-                    imageObject = {productImageId:'',image:el,mainFlag:'1'};
-                }else{
-                    imageObject = {productImageId:'',image:el,mainFlag:'0'};
-                }
-                _this.params.image.push(imageObject);
-            });
-            _this.activeNum++;
-            _this.scrollIntoView();
-            if(_this.vShow_orderInfoEditor){
-                _this.initOrderCKeditor();
-                _this.initSeverCKeditor();
-            }
-        },
-        NextStep3: function() {//点击进入5步
-            var _this = this;
-            _this.activeNum++;
-            _this.scrollIntoView();
-        },
         initCKeditor: function(){//富文本
             var _this = this;
             _this.vShow_detailInfoEditor = false;
@@ -1057,164 +507,22 @@ var releaseContainer = new Vue({
             });
         },
         addReleaseGoodSubmitFn: function(){//提交发布商品
-            var _this = this;
-            if(_this.releaseParams.newProductType === 0){
-                _this.vShow_isNewProductType = true;
-                _this.fromMessage = '请选择是否参与新品展示';
-                _this.scrollIntoView();
-                setTimeout(function(){
-                    _this.vShow_isNewProductType = false;
-                },3000);
-                return;
-            }
-            _this.releaseParams.orderInfo = orderInfoEditor.getData();
-            _this.releaseParams.serviceInfo = severInfoEditor.getData();
-            if(_this.releaseType == 'edit'){
-                _this.releaseParams.productDetailInfoId = _this.productDetailInfoId;
-                _this.releaseParams.productId = _this.productId;
-                CAIMEI.returnedTarget();
-                _this.releaseParams = Object.assign(_this.releaseParams,{params:JSON.stringify(_this.params)});
-                delete _this.releaseParams.imageList;
-                delete _this.releaseParams.parametersList;
-                delete _this.releaseParams.productDetail;
-            }else{
-                CAIMEI.returnedTarget();
-                _this.releaseParams = Object.assign(_this.releaseParams,{params:JSON.stringify(_this.params)});
-            }
-            // console.log( _this.releaseParams);
-            SupplierApi.AddSupplierReleaseProduct(_this.releaseParams,function(response){
-                if(response.code == 0){
-                    CAIMEI.dialog('提交成功,等待审核',true,function () {
-                        if(_this.releaseType == 'edit'){
-                            SupplierApi.UpdateSearchManageProduct({productId:_this.productId},function (res) {
-                                console.log('编辑商品更新搜索索引~~~成功');
-                            })
-                        }
-                        location.href = '/supplier/goods.html';
-                        if(CAIMEI.Storage.getItem('adProductPeview')){
-                            CAIMEI.Storage.removeItem('adProductPeview');
-                        }
-                    });
-                }else{
-                    CAIMEI.Alert(response.msg, '确定', false);
-                }
-            });
+            this.addSupplierReleaseInfo();
         },
         addReleasePeview: function(){//预览按钮
             var _this = this;
             CAIMEI.returnedTarget();
-            _this.releaseParams.orderInfo = orderInfoEditor.getData();
-            _this.releaseParams.serviceInfo = severInfoEditor.getData();
-            _this.releaseParams = Object.assign(_this.releaseParams,{params:_this.params});
+            this.releaseParams.orderInfo = orderInfoEditor.getData();
+            this.releaseParams.serviceInfo = severInfoEditor.getData();
+            this.releaseParams = Object.assign(_this.releaseParams,{params:_this.params,skus:_this.skuParams});
             CAIMEI.Storage.setItem('adProductPeview', JSON.stringify(_this.releaseParams));
             setTimeout(function(){
                 window.open('/supplier/goods/preview.html');
             },1000)
         },
-        blur_name: function(e){//商品名失去焦点
-            var _this = this;
-            _this.vShow_Name = false;
-            if(e.target.value == ''){
-                _this.vShow_Name = true;
-                _this.fromMessage = '请输入商品显示名';
-                setTimeout(function(){
-                    _this.vShow_Name = false;
-                },3000);
-            }else{
-                _this.vShow_Name = false;
-            }
-        },
-        blur_aliasName: function(e){//内部商品名失去焦点
-            var _this = this;
-            _this.vShow_AliasName = false;
-            if(e.target.value == ''){
-                _this.vShow_AliasName = true;
-                _this.fromMessage = '请输入内部商品名';
-                setTimeout(function(){
-                    _this.vShow_AliasName = false;
-                },3000);
-            }else{
-                _this.vShow_AliasName = false;
-            }
-        },
-        blur_taxPoint: function(event){
-            var E_TaxPoint = event.target.value;
-            if(E_TaxPoint!=''){
-                this.releaseParams.taxPoint = parseFloat(E_TaxPoint);
-            }else{
-                this.releaseParams.taxPoint = '';
-            }
-            this.vShow_taxPoint = false;
-        },
-        blur_tags: function(e){
-            this.vShow_Tags = false;
-        },
-        blur_aliasUnit: function(e){
-            this.vShow_Unit = false;
-        },
-        blur_qualificationNo: function(e){
-            this.vShow_QualificationNo = false;
-        },
-        blur_productName: function(e){
-            this.vShow_ProductName = false;
-        },
-        input_normalPrice: function(e){
-            this.vShow_NormalPrice = false;
-        },
-        input_price: function(e){
-            this.vShow_price = false;
-        },
-        input_trainingFee: function(event){
-            var E_Number = event.target.value;
-            if(E_Number!=''){
-                this.releaseParams.trainingFee = parseInt(E_Number.replace(/[^0-9]/g,''));
-            }else{
-                this.releaseParams.trainingFee = '';
-            }
-        },
-        input_minBuyNumber: function(event){
-            this.vShow_MinBuyNumber = false;
-            var E_Number = event.target.value;
-            if(E_Number!=''){
-                this.releaseParams.minBuyNumber = parseInt(E_Number.replace(/[^0-9]/g,''));
-            }else{
-                this.releaseParams.minBuyNumber = '';
-            }
-        },
-        input_stock: function(event){
-            this.vShow_Stock = false;
-            var E_stock = event.target.value;
-            if(E_stock!=''){
-                this.releaseParams.stock = parseInt(E_stock.replace(/[^0-9]/g,''));
-            }else{
-                this.releaseParams.stock = '';
-            }
-        },
-        toFixedFn: function(text){
-            return Number(text).toFixed(2);
-        },
         scrollIntoView: function(){
             document.getElementById('releaseContainer').scrollIntoView({block: 'start', behavior: 'smooth'});
         },
-        setTagArray: function(arr){//回显处理商品标签
-            var arrSplit = arr.split(',');
-            var _ARRAY = [];
-            arrSplit.forEach(function(item){
-                var _OBJ = {tag:item};
-                _ARRAY.push(_OBJ)
-            });
-            return _ARRAY
-        },
-        setSearchKeyArray: function(arr){//回显处理商品搜索关键词
-            var _this = this;
-            var arrSplit = arr.split(',');
-            return _this.searchKeyList.map(function(el,index){
-                el.value = arrSplit[index] || '';
-            })
-        },
-        gernerateTitleId: function(index){
-            return "title_" +index
-        },
         dragstart: function(value) {  // 记录初始信息
             this.oldNum = value;
         },
@@ -1243,14 +551,6 @@ var releaseContainer = new Vue({
         var _this = this;
         var NODE_ENV_BASE_URL = $('#coreServer').val();
         _this.NODE_ENV_BASE_URL = NODE_ENV_BASE_URL;
-        if(globalUserData){
-            _this.releaseParams.shopId = globalUserData.shopId;
-            _this.releaseParams.userId = globalUserData.userId;
-            _this.releaseType = CAIMEI.getUrlParam('type');
-            if(  _this.releaseType == 'edit'){
-                _this.productId = Number(CAIMEI.getUrlParam('productId'));
-                _this.GetEditReleaseProductInfo(_this.productId);
-            }
-        }
+
     }
 });

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

@@ -156,7 +156,9 @@ var supplierHome = new Vue({
                                 $("img[data-original]").lazyload();
                             }, 500);
                         });
+                        console.log('resultData',resultData)
                         _self.productLists = _self.productLists.concat(resultData);
+                        console.log('productLists',_self.productLists)
                         _self.requestFlag = true;
                     } else {
                         CAIMEI.Alert(res.msg, '确定');

+ 1 - 1
src/main/resources/templates/help/clubinfo.html

@@ -91,7 +91,7 @@
     </div>
   </div>
 </div>
-"<!-- 引入底部 -->
+<!-- 引入底部 -->
 <template th:replace="components/foot-link"></template>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/user.service.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/help/clubinfo.js(v=${version})}"></script>

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

@@ -109,6 +109,7 @@
                             <div class="t-li"><p>序号</p></div>
                             <div class="t-li"><p>商品图片</p></div>
                             <div class="t-li"><p>商品名称</p></div>
+                            <div class="t-li"><p>规格</p></div>
                             <div class="t-li"><p>单价</p></div>
                             <div class="t-li"><p>数量</p></div>
                             <div class="t-li"><p>总价</p></div>
@@ -120,6 +121,7 @@
                                     <img :src="item.image" :alt="item.name">
                                 </div>
                                 <div class="t-li"><p>{{item.name}}</p></div>
+                                <div class="t-li"><p>{{item.productUnit}}</p></div>
                                 <div class="t-li"><p>¥{{item.price | NumFormat}}</p></div>
                                 <div class="t-li"><p>{{item.num}}</p></div>
                                 <div class="t-li"><p>¥{{item.totalFee | NumFormat}}</p></div>

+ 5 - 0
src/main/resources/templates/pay/caimei-paylist.html

@@ -27,6 +27,7 @@
             <div class="pay-list-title" v-if="isPC">
                 <div class="pay-list-view t1">商品信息</div>
                 <div class="pay-list-view t2">单价(元)</div>
+                <div class="pay-list-view t3">规格</div>
                 <div class="pay-list-view t3">数量</div>
                 <div class="pay-list-view t4">小计(元)</div>
             </div>
@@ -50,6 +51,10 @@
                         <span v-if="!isPC">单价:</span>
                         <p>¥{{pros.price  | NumFormat}}</p>
                     </div>
+                    <div class="list-cell-pros p3">
+                        <span v-if="!isPC">规格:</span>
+                        <p>{{ pros.productUnit }}</p>
+                    </div>
                     <div class="list-cell-pros p3">
                         <span v-if="!isPC">数量:</span>
                         <p>{{ pros.num }}</p>

+ 130 - 27
src/main/resources/templates/product/detail.html

@@ -70,7 +70,7 @@
                         <div class="WechatBg"><img src="/img/base/Wecha.png">
                             <p>扫码添加采美微信客服咨询更快捷</p></div>
                     </div>
-                    <div class="row price"><span class="l">会员价</span><i>:</i>
+                    <div class="row price"><span class="l">会员价</span>
                         <!--登录-->
                         <template v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0">
                             <!--用户身份 0、个人 1、协销 2、会员机构 3、供应商 4,普通机构-->
@@ -89,7 +89,7 @@
                                 <em v-if="priceObj.actStatus==1 && promotions && promotions.type==1 && promotions.mode==1" class="p">
                                     <del v-text="'¥'+parseFloat(priceObj.originalPrice).toFixed(2)"></del>
                                 </em>
-                                <em v-else class="p" v-text="'¥'+parseFloat(priceObj.price).toFixed(2)"></em>
+                                <em v-else class="p price">¥{{ priceObj.price | NumFormat }}</em>
                             </template>
                             <!--隐藏价格 -->
                             <em v-else>¥<i th:attr="class=${'icon mIcon i'+product.priceGrade}"></i></em>
@@ -104,7 +104,7 @@
                         </template>
                         <!--未登录-->
                         <template v-else>
-                            <em>¥<i th:attr="class=${'icon mIcon i'+product.priceGrade}"></i></em>
+                            <em>¥<i class="icon mIcon" id="priceGrade"></i></em>
                             <!--SVIP会员标签 有svip会员价-->
                             <div class="svip-tag" v-if="priceObj.svipProductFlag == 1">
                                 <div class="svip-icon">SVIP</div>
@@ -113,25 +113,25 @@
                     </div>
                     <template
                             v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0 && priceObj.normalPrice>0 && ((priceObj.priceFlag==0 && priceObj.userIdentity!=3) || (priceObj.priceFlag==2 && priceObj.userIdentity==2) || (priceObj.priceFlag==3 && GLOBAL_CLUB_TYPE==1) || (priceObj.userIdentity==3 && priceObj.shopId==GLOBAL_SHOP_ID || GLOBAL_VIP_FLAG === 1))">
-                        <div class="row"><span class="l">市场价</span><i>:</i>
+                        <div class="row"><span class="l">市场价</span>
                             <em>
                                 <del v-text="'¥'+priceObj.normalPrice.toFixed(2)"></del>
                             </em>
                         </div>
                     </template>
                     <div class="row actStatus"
-                         v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0 && priceObj.actStatus==1||priceObj.ladderPriceFlag==1">
-                        <span class="l">促销</span><i>:</i>
+                         v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0 && priceObj.actStatus==1 || ladderList.length >0">
+                        <span class="l">促销</span>
                         <template
                                 v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0 && ((priceObj.priceFlag==0 && priceObj.userIdentity!=3) || (priceObj.priceFlag==2 && priceObj.userIdentity==2) || (priceObj.priceFlag==3 && GLOBAL_CLUB_TYPE==1) || (priceObj.userIdentity==3 && priceObj.shopId==GLOBAL_SHOP_ID || GLOBAL_VIP_FLAG === 1))">
                             <!-- 阶梯价 -->
-                            <div v-if="priceObj.ladderPriceFlag==1" class="priceTag">
+                            <div v-if="ladderList.length >0" class="priceTag">
                                 <i class="tag icon mIcon" @click="toggleThisLadder($event)">阶梯价格</i>
                                 <div class="ladder mFixed">
                                     <span>
                                         <em class="t"><i>价格</i><i>起订量</i></em>
                                         <em v-for="l in ladderList">
-                                            <i class="p" v-text="'¥'+toFloat(l.buyPrice)"></i>
+                                            <i class="p">¥{{ l.buyPrice | NumFormat }}</i>
                                             <i v-text="l.numRange"></i>
                                         </em>
                                         <em @click="hideThisLadder($event)" class="close">了解</em>
@@ -204,35 +204,56 @@
                         </template>
                     </div>
                     <div class="row" v-if="productCoupon.length>0">
-                        <span class="l">优惠券</span>
-                        <i>:</i>
+                        <span class="l">优惠券:</span>
                         <span class="coupon-tags">
                             <em class="couponTag" v-for="(coupon, index) in productCoupon" :key="index"
                                 v-text="'满'+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
+                    <div th:if="not${#strings.isEmpty(product.brandName)}" class="row"><span class="l">品牌</span><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>
+                    <template v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0">
+                        <div class="row">
+                            <span class="l">包装规格:</span>
+                            <div class="unit-tags">
+                                <span class="unitTags" @click="handleChoisSku(sku,index)" v-for="(sku, index) in priceObj.skus" :key="index" :class="skuIndex === index ? 'active':''">
+                                    {{ sku.unit }}
+                                    <i class="tips" v-if="sku.stock ===0">缺货</i>
+                                </span>
+                            </div>
+                        </div>
+                    </template>
+                    <template v-else>
+                        <div class="row">
+                            <span class="l">包装规格:</span>
+                            <div class="unit-tags">
+                                <span class="unitTags" th:attr="data-grade=${sku.priceGrade}" th:each="sku,skuStat:*{skus}" th:if="${not #strings.isEmpty(product.skus)}">
+                                    <span th:text="${sku.unit}"></span>
+                                    <i class="tips" th:if="${sku.stock == 0}">缺货</i>
+                                </span>
+                            </div>
+                        </div>
+                    </template>
                     <div class="row" th:if="not${#strings.isEmpty(product.productCode)}"><span
-                            class="l">商品编码</span><i>:</i><em th:text="*{productCode}"></em></div>
-                    <div class="row" th:if="not${#strings.isEmpty(product.stock)}"><span class="l">库存</span><i>:</i><em
-                            th:text="*{stock}"></em></div>
-                    <div class="row" th:if="not${#strings.isEmpty(product.minBuyNumber)}"><span
-                            class="l">起订量</span><i>:</i><em th:text="*{minBuyNumber}"></em></div>
-                    <div v-show="GLOBAL_USER_ID && GLOBAL_USER_ID>0" class="row"><span class="l">采购量</span><i>:</i>
+                            class="l">商品编码:</span><em th:text="*{productCode}"></em></div>
+                    <div class="row"><span class="l">库存:</span>
+                        <em id="prosductStock" th:text="*{stock}"></em>
+                    </div>
+                    <div class="row"><span class="l">起订量:</span>
+                        <em id="proMinBuyNumber" th:text="*{minBuyNumber}"></em>
+                    </div>
+                    <div v-show="GLOBAL_USER_ID && GLOBAL_USER_ID>0" class="row"><span class="l">采购量:</span>
                         <span class="number">
-                            <em class="sub" @click="numberSub()">-</em>
+                            <em class="sub" @click="numberSub">-</em>
                             <input type="number" :value="number" v-model="number" maxlength='6'
-                                   @change="numberChange()">
-                            <em class="add" @click="numberAdd()">+</em>
+                                   @change="numberChange">
+                            <em class="add" @click="numberAdd">+</em>
                         </span>
                         <input type="hidden" th:value="*{step}">
                     </div>
                     <hr>
-                    <div class="row"><span class="l">服务</span><i>:</i>
+                    <div class="row"><span class="l">服务</span>
                         <em class="ser icon mIcon">无忧退货</em>
                         <em class="ser icon mIcon">快速退款</em>
                         <em class="ser icon mIcon">正品保证</em>
@@ -256,9 +277,9 @@
                                     (priceObj.priceFlag==2 && GLOBAL_VIP_FLAG === 1) ||
                                     (priceObj.priceFlag==3 && GLOBAL_CLUB_TYPE === 1)">
 
-                            <a href="javascript:void(0);" class="cart icon" @click='addShopCart()' v-if="!isNoneDisabled"
+                            <a href="javascript:void(0);" class="cart icon"  :class="isDetailsBtnDisable ? 'disable' : ''" @click='handleAddShopCart' v-if="!isNoneDisabled"
                                onclick="_czc.push(['_trackEvent','商品详情','点击','加入购物车','','Um_Event_ProductAddCart'])">加入购物车</a>
-                            <a href="javascript:void(0);" class="buy" @click="buyNowSubmit()" v-if="!isNoneDisabled"
+                            <a href="javascript:void(0);" class="buy" :class="isDetailsBtnDisable ? 'disable' : ''" @click="handleBuyNowSubmit" v-if="!isNoneDisabled"
                                onclick="_czc.push(['_trackEvent','商品详情','点击','立即购买','','Um_Event_ProductBuyConfirm'])">立即购买</a>
                         </div>
                     </template>
@@ -272,7 +293,7 @@
             </div>
         </div>
         <!--配套商品区域-->
-        <div class="wrap" v-if="isShowSupportingList && defaultSupportingList.length>0">
+        <div class="wrap" v-if="!isNoneDisabled && isShowSupportingList && defaultSupportingList.length>0">
             <div class="product-supporting">
                 <!--PC-->
                 <template v-if="isPC">
@@ -300,7 +321,87 @@
                                     </a>
                                 </div>
                                 <div class="tr tr-3">
-                                    <p v-html="pros.unit"></p>
+                                     <div class="sku-popup" @click="handleShowPopup(pros,index)">
+                                        <p class="sku-text" v-text="pros.unit"></p>
+                                        <div class="sku-icon"><i class="icon"></i></div>
+                                    </div>
+                                    <div class="sku-popup-viw" v-if="currentIndex === index && pros.isSkuPopup">
+                                        <div class="sku-title">
+                                            <div class="sku-image"><img :src="pros.image" :alt="pros.name"></div>
+                                            <div class="sku-price">
+                                                <!--用户身份 0、个人 1、协销 2、会员机构 3、供应商 4,普通机构-->
+                                                <template v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0">
+                                                    <!--0公开价格 1不公开价格 2仅对会员机构公开-->
+                                                    <div class="main_price_unde" v-if="pros.priceFlag==1">¥价格未公开</div>
+                                                    <!--机构价仅会员可见 && 用户是普通机构-->
+                                                    <div class="main_price_unde" v-else-if="pros.priceFlag==2 && GLOBAL_USER_IDENTITY === 4 && GLOBAL_VIP_FLAG!=1">
+                                                        ¥会员可见
+                                                    </div>
+                                                    <!--机构价仅会员可见 && 用户是普通机构-->
+                                                    <div class="main_price_unde" v-else-if="pros.priceFlag==3 && (GLOBAL_CLUB_TYPE !=1)">
+                                                        ¥仅医美机构可见
+                                                    </div>
+                                                    <!-- 资质机构 || (价格全部机构可见 && 普通机构) || (供应商 && 商品为供应商下的商品) || 超级会员用户 -->
+                                                    <template
+                                                            v-else-if="GLOBAL_USER_IDENTITY === 2 || (pros.priceFlag === 0 && GLOBAL_USER_IDENTITY === 4) || (GLOBAL_USER_IDENTITY === 3 && pros.shopId === GLOBAL_SHOP_ID) || GLOBAL_VIP_FLAG === 1">
+                                                        <div class="main_price_show"
+                                                             :class="{none: PromotionsFormat(pros.promotions) || (pros.svipProductFlag === 1 && showVipPriceTag(pros))}">
+                                                            ¥{{ (PromotionsFormat(pros.promotions) || showVipPriceTag(pros) ? pros.originalPrice :
+                                                            pros.price ) | NumFormat }}
+                                                        </div>
+                                                    </template>
+                                                    <!--供应商除自己的商品外,也显示价格等级-->
+                                                    <div class="price_grade" v-else><span class="bold">¥</span><i
+                                                            :class="'icon mIcon i'+pros.priceGrade"></i></div>
+                                                    <div class="price_text_tag clear">
+                                                        <p class="couponTag" v-if="pros.couponsLogo">优惠券</p>
+                                                        <template v-if="pros.svipProductFlag === 1">
+                                                            <div class="svip-tag">
+                                                                <div class="svip-icon">SVIP</div>
+                                                                <template v-if="showVipPriceTag(pros)">
+                                                                    <div class="svip-price">
+                                                                        <span v-html="pros.svipPriceTag"></span>
+                                                                    </div>
+                                                                </template>
+                                                            </div>
+                                                        </template>
+                                                        <template v-else>
+                                                            <p class="listTag" v-if="pros.actStatus==1">{{pros.promotions.name}}
+                                                                <span v-if="pros.priceFlag != 1 && PromotionsFormat(pros.promotions)">:¥{{pros.price | NumFormat}}</span>
+                                                            </p>
+                                                        </template>
+                                                    </div>
+                                                </template>
+                                                <template v-else>
+                                                    <div class="price_grade"><i :class="'icon mIcon i'+pros.priceGrade"></i></div>
+                                                    <div class="price_text_tag">
+                                                        <p class="couponTag" v-if="pros.couponsLogo">优惠券</p>
+                                                        <template v-if="pros.svipProductFlag === 1">
+                                                            <div class="svip-tag">
+                                                                <div class="svip-icon">SVIP</div>
+                                                            </div>
+                                                        </template>
+                                                        <template v-else>
+                                                            <p class="listTag" v-if="pros.actStatus==1">{{pros.promotions.name}}</p>
+                                                        </template>
+                                                    </div>
+                                                </template>
+                                            </div>
+                                        </div>
+                                        <div class="sku-h1">规格:</div>
+                                        <div class="sku-unit">
+                                                <span class="unitTags" @click="handleSupportingChoisSku(pros,sku,index)" v-for="(sku, index) in pros.skus" :key="index" :class="skuSupportingIndex === index ? 'active':''">
+                                                    {{ sku.unit }}
+                                                    <i class="tips" v-if="sku.stock ===0">缺货</i>
+                                                </span>
+                                        </div>
+                                        <div class="sku-button">
+                                            <div class="sku-button-center">
+                                                <a class="sku-btn cancel" href="javascript:void(0);" @click="handleSkuCancel(pros)">取消</a>
+                                                <a class="sku-btn confirm" :class="isbtnDisable ? 'disable' : ''" href="javascript:void(0);" @click="handleSkuConfirm(pros)">确定</a>
+                                            </div>
+                                        </div>
+                                    </div>
                                 </div>
                                 <div class="tr tr-4">
                                     <div class="price">
@@ -777,6 +878,8 @@
 <script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/beautyArchive.service.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/document/beautyArchiveDetailMixin.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/mixins/cmSysMixins.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/product/mixins/supportMixins.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/product/mixins/productMixins.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/product/detail.js(v=${version})}"></script>
 </body>
 </html>

+ 86 - 1
src/main/resources/templates/product/product-supporting.html

@@ -39,7 +39,91 @@
                 </div>
                 <div class="list-info">
                     <div class="list-name"><a :href="'/product-'+pros.productId+'.html'">{{ pros.name }}</a></div>
-                    <div class="list-unit">规格:{{ pros.unit }}</div>
+                    <div class="list-unit">
+                        <div class="sku-label">规格:</div>
+                        <div class="sku-popup" @click="handleShowPopup(pros,index)">
+                            <p class="sku-text" v-text="pros.unit"></p>
+                            <div class="sku-icon"><i class="mIcon"></i></div>
+                        </div>
+                        <div class="sku-popup-model" v-if="pros.isSkuPopup"></div>
+                        <div class="sku-popup-viw" v-if="currentIndex === index && pros.isSkuPopup">
+                            <div class="sku-title">
+                                <div class="sku-image"><img :src="pros.image" :alt="pros.name"></div>
+                                <div class="sku-price">
+                                    <!--用户身份 0、个人 1、协销 2、会员机构 3、供应商 4,普通机构-->
+                                    <template v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0">
+                                        <!--0公开价格 1不公开价格 2仅对会员机构公开-->
+                                        <div class="main_price_unde" v-if="pros.priceFlag==1">¥价格未公开</div>
+                                        <!--机构价仅会员可见 && 用户是普通机构-->
+                                        <div class="main_price_unde" v-else-if="pros.priceFlag==2 && GLOBAL_USER_IDENTITY === 4 && GLOBAL_VIP_FLAG!=1">
+                                            ¥会员可见
+                                        </div>
+                                        <!--机构价仅会员可见 && 用户是普通机构-->
+                                        <div class="main_price_unde" v-else-if="pros.priceFlag==3 && (GLOBAL_CLUB_TYPE !=1)">
+                                            ¥仅医美机构可见
+                                        </div>
+                                        <!-- 资质机构 || (价格全部机构可见 && 普通机构) || (供应商 && 商品为供应商下的商品) || 超级会员用户 -->
+                                        <template
+                                                v-else-if="GLOBAL_USER_IDENTITY === 2 || (pros.priceFlag === 0 && GLOBAL_USER_IDENTITY === 4) || (GLOBAL_USER_IDENTITY === 3 && pros.shopId === GLOBAL_SHOP_ID) || GLOBAL_VIP_FLAG === 1">
+                                            <div class="main_price_show"
+                                                 :class="{none: PromotionsFormat(pros.promotions) || (pros.svipProductFlag === 1 && showVipPriceTag(pros))}">
+                                                ¥{{ (PromotionsFormat(pros.promotions) || showVipPriceTag(pros) ? pros.originalPrice :
+                                                pros.price ) | NumFormat }}
+                                            </div>
+                                        </template>
+                                        <!--供应商除自己的商品外,也显示价格等级-->
+                                        <div class="price_grade" v-else><span class="bold">¥</span><i
+                                                :class="'icon mIcon i'+pros.priceGrade"></i></div>
+                                        <div class="price_text_tag clear">
+                                            <p class="couponTag" v-if="pros.couponsLogo">优惠券</p>
+                                            <template v-if="pros.svipProductFlag === 1">
+                                                <div class="svip-tag">
+                                                    <div class="svip-icon">SVIP</div>
+                                                    <template v-if="showVipPriceTag(pros)">
+                                                        <div class="svip-price">
+                                                            <span v-html="pros.svipPriceTag"></span>
+                                                        </div>
+                                                    </template>
+                                                </div>
+                                            </template>
+                                            <template v-else>
+                                                <p class="listTag" v-if="pros.actStatus==1">{{pros.promotions.name}}
+                                                    <span v-if="pros.priceFlag != 1 && PromotionsFormat(pros.promotions)">:¥{{pros.price | NumFormat}}</span>
+                                                </p>
+                                            </template>
+                                        </div>
+                                    </template>
+                                    <template v-else>
+                                        <div class="price_grade"><span class="bold">¥</span><i :class="'icon mIcon i'+pros.priceGrade"></i></div>
+                                        <div class="price_text_tag">
+                                            <p class="couponTag" v-if="pros.couponsLogo">优惠券</p>
+                                            <template v-if="pros.svipProductFlag === 1">
+                                                <div class="svip-tag">
+                                                    <div class="svip-icon">SVIP</div>
+                                                </div>
+                                            </template>
+                                            <template v-else>
+                                                <p class="listTag" v-if="pros.actStatus==1">{{pros.promotions.name}}</p>
+                                            </template>
+                                        </div>
+                                    </template>
+                                </div>
+                            </div>
+                            <div class="sku-h1">规格:</div>
+                            <div class="sku-unit">
+                                <span class="unitTags" @click="handleSupportingChoisSku(pros,sku,index)" v-for="(sku, index) in pros.skus" :key="index" :class="skuSupportingIndex === index ? 'active':''">
+                                    {{ sku.unit }}
+                                    <i class="tips" v-if="sku.stock ===0">缺货</i>
+                                </span>
+                            </div>
+                            <div class="sku-button">
+                                <div class="sku-button-center">
+                                    <a class="sku-btn cancel" href="javascript:void(0);" @click="handleSkuCancel(pros)">取消</a>
+                                    <a class="sku-btn confirm" :class="isbtnDisable ? 'disable' : ''" href="javascript:void(0);" @click="handleSkuConfirm(pros)">确定</a>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
                     <div class="list-price">
                         <template v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0">
                             <div class="price-box">
@@ -132,6 +216,7 @@
 <!-- 引入底部 -->
 <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/mixins/supportMixins.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/product/product-supporting.js(v=${version})}"></script>
 </body>
 </html>

+ 120 - 53
src/main/resources/templates/shopping/cart.html

@@ -39,6 +39,7 @@
                 <div class="c0"><span class="coll-checked" :class="[allChecked ? 'checked': '']" @click="ckeckAll"></span></div>
                 <div class="c1">全选</div>
                 <div class="c2">商品信息</div>
+                <div class="c3">规格</div>
                 <div class="c4">单价(元)</div>
                 <div class="c5">数量</div>
                 <div class="c6">小计(元)</div>
@@ -47,7 +48,7 @@
             <div class="supplierItem" v-for="supplier,index in listData">
                 <div class="supplierTit">
                     <div class="c0" @click="ckeckSupplier(supplier)">
-                        <span class="coll-checked" :class="[supplier.isChecked ? 'checked': '']"></span>
+                        <span class="coll-checked" :class="[supplier.isChecked ? 'checked': '' ,supplier.isDisable ? 'disable': '' ]" ></span>
                     </div>
                     <a  class="shop" href="JavaScript:void(0);" @click="hanldHrefLink(supplier)">
                         <img class="img" :src="supplier.shopLogo">
@@ -84,9 +85,9 @@
                         </div>
                     </div>
                 </div>
-                <div class="cartItem clear"  v-for="cart in supplier.cartList" >
+                <div class="cartItem clear"  v-for="(cart,cartIndex) in supplier.cartList" >
                     <div class="c0" @click="ckeckItem(supplier,cart)">
-                        <span class="coll-checked" :class="[cart.isChecked ? 'checked': '']"></span>
+                        <span class="coll-checked" :class="[cart.isChecked ? 'checked': '',cart.isDisable ? 'disable': '']"></span>
                     </div>
                     <div class="c1"><a :href="'/product-'+cart.productId+'.html'" target="_blank">
                         <img class="smalltype" src="/img/base/icon-bigtype@2x.png" alt="">
@@ -97,57 +98,121 @@
                             <span v-text="cart.name"></span>
                         </a>
                     </div>
-                    <div class="c4">
-                        <div class="price">
-                            <template v-if="(GLOBAL_VIP_FLAG === 1 && cart.svipProductFlag === 1)|| (cart.actStatus==1 && cart.promotions && cart.promotions.type==1 && cart.promotions.mode==1)">
-                                <del v-text="'¥'+toFloat(cart.originalPrice)"></del>
-                            </template>
-                            <template v-else>
-                                <em> {{ cart.price | NumFormat }} </em>
-                            </template>
-                            <!-- 促销活动 -->
-                            <template v-if="cart.svipProductFlag == 1">
-                                <div class="priceTag">
-                                    <!--超级会员价格标签-->
-                                    <div class="svip-tag">
-                                        <div class="svip-icon">SVIP</div>
-                                        <div class="svip-price" v-if="cart.svipProductFlag == 1 && GLOBAL_VIP_FLAG === 1">
-                                            <span v-html="cart.svipPriceTag"></span>
+                    <div class="c3">
+                        <p>{{ cart.unit }}</p>
+                    </div>
+                    <template v-if="cart.number > cart.stock || cart.stock === 0">
+                        <div class="c8">
+                            <div class="sku-popup">
+                                <p class="sku-text">请重新选择商品规格</p>
+                                <a class="sku-btn" href="javascript:void(0);"  @click.stop="handleShowPopup(cart,cartIndex)">重选</a>
+                            </div>
+                            <div class="sku-popup-model" v-if="!isPC && cart.isSkuPopup"></div>
+                            <div class="sku-popup-viw" v-if="cart.isSkuPopup">
+                                <div class="sku-title">
+                                    <div class="sku-image"><img :src="cart.image"></div>
+                                    <div class="sku-price">
+                                        <div class="main_price_show"
+                                             :class="{none: PromotionsFormat(cart.promotions) || (cart.svipProductFlag === 1 && showVipPriceTag(cart))}">
+                                            ¥{{ (PromotionsFormat(cart.promotions) || showVipPriceTag(cart) ? skuCartPros.originalPrice :
+                                            skuCartPros.price ) | NumFormat }}
+                                        </div>
+                                        <div class="price_text_tag clear">
+                                            <p class="couponTag" v-if="supplier.couponsLogo">优惠券</p>
+                                            <template v-if="cart.svipProductFlag === 1">
+                                                <div class="svip-tag">
+                                                    <div class="svip-icon">SVIP</div>
+                                                    <template v-if="showVipPriceTag(cart)">
+                                                        <div class="svip-price">
+                                                            <span v-html="cart.svipPriceTag"></span>
+                                                        </div>
+                                                    </template>
+                                                </div>
+                                            </template>
+                                            <template v-else>
+                                                <p class="listTag" v-if="cart.actStatus==1">{{cart.promotions.name}}
+                                                    <span v-if="cart.priceFlag != 1 && PromotionsFormat(cart.promotions)">:¥{{skuCartPros.price | NumFormat}}</span>
+                                                </p>
+                                            </template>
                                         </div>
                                     </div>
                                 </div>
-                            </template>
-                            <template v-else>
-                                <div v-if="cart.actStatus==1 && cart.promotions" class="priceTag">
-                                    <i v-if="cart.promotions.type==1 && cart.promotions.mode==1" @click="toggleThisLadder($event)" class="tag icon mIcon" v-text="cart.promotions.name+':¥'+toFloat(cart.promotions.touchPrice)"></i>
-                                    <i v-else class="tag icon mIcon" @click="toggleThisLadder($event)" v-text="cart.promotions?cart.promotions.name:''"></i>
-                                    <div class="promotion mFixed">
-                                        <div>
-                                            <p class="t">
-                                                <em v-if="cart.promotions.type==1 && cart.promotions.mode==1">{{cart.promotions.name+':¥'+toFloat(cart.promotions.touchPrice)}}</em>
-                                                <em v-if="cart.promotions.mode==2">{{cart.promotions.name+',满 ¥'+toFloat(cart.promotions.touchPrice)+' 减 ¥'+toFloat(cart.promotions.reducedPrice)}}</em>
-                                                <em v-if="cart.promotions.mode==3">{{cart.promotions.name+',满 ¥'+toFloat(cart.promotions.touchPrice)+' 赠送商品'}}</em>
-                                            </p>
-                                            <p>促销时间:<em v-if="cart.promotions.status==1">不限时</em><em v-else>{{cart.promotions.beginTime.substr(0,10)+' ~ '+cart.promotions.endTime.substr(0,10)}}</em></p>
-                                            <p v-if="cart.promotions.type==2" class="r"><a class="more" :href="'/product/promotions.html?id='+cart.promotions.id">更多凑单商品>>></a></p>
-                                            <template v-if="cart.promotions.mode==3">
-                                                <p>赠品:</p>
-                                                <p>
+                                <div class="sku-h1">规格:</div>
+                                <div class="sku-unit">
+                                    <span class="unitTags" @click="handleSupportingChoisSku(sku,index)" v-for="(sku, index) in cart.skus" :key="index" :class="skuSupportingIndex === index ? 'active':''">
+                                        {{ sku.unit }}
+                                        <i class="tips" v-if="sku.stock === 0">缺货</i>
+                                    </span>
+                                </div>
+                                <div class="sku-button">
+                                    <div class="sku-num">
+                                        <div class="sku-numlabe">购买数量:</div>
+                                        <div class="sku-number">
+                                            <span class="sub" @click="skuChangNumberSub">-</span>
+                                            <input class='input' type="number" v-model="addParams.count" @change="skuChangNumberChange">
+                                            <span class="add" @click="skuChangNumberAdd">+</span>
+                                        </div>
+                                    </div>
+                                    <div class="sku-button-center">
+                                        <a class="sku-btn cancel" href="javascript:void(0);" @click="handleSkuCancel(cart)">取消</a>
+                                        <a class="sku-btn confirm" :class="isbtnDisable ? 'disable' : ''" href="javascript:void(0);" @click="handleSkuConfirm(cart)">确定</a>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </template>
+                    <template v-else>
+                        <div class="c4">
+                            <div class="price">
+                                <template v-if="(GLOBAL_VIP_FLAG === 1 && cart.svipProductFlag === 1)|| (cart.actStatus==1 && cart.promotions && cart.promotions.type==1 && cart.promotions.mode==1)">
+                                    <del v-text="'¥'+toFloat(cart.originalPrice)"></del>
+                                </template>
+                                <template v-else>
+                                    <em> {{ cart.price | NumFormat }} </em>
+                                </template>
+                                <!-- 促销活动 -->
+                                <template v-if="cart.svipProductFlag == 1">
+                                    <div class="priceTag">
+                                        <!--超级会员价格标签-->
+                                        <div class="svip-tag">
+                                            <div class="svip-icon">SVIP</div>
+                                            <div class="svip-price" v-if="cart.svipProductFlag == 1 && GLOBAL_VIP_FLAG === 1">
+                                                <span v-html="cart.svipPriceTag"></span>
+                                            </div>
+                                        </div>
+                                    </div>
+                                </template>
+                                <template v-else>
+                                    <div v-if="cart.actStatus==1 && cart.promotions" class="priceTag">
+                                        <i v-if="cart.promotions.type==1 && cart.promotions.mode==1" @click="toggleThisLadder($event)" class="tag icon mIcon" v-text="cart.promotions.name+':¥'+toFloat(cart.promotions.touchPrice)"></i>
+                                        <i v-else class="tag icon mIcon" @click="toggleThisLadder($event)" v-text="cart.promotions?cart.promotions.name:''"></i>
+                                        <div class="promotion mFixed">
+                                            <div>
+                                                <p class="t">
+                                                    <em v-if="cart.promotions.type==1 && cart.promotions.mode==1">{{cart.promotions.name+':¥'+toFloat(cart.promotions.touchPrice)}}</em>
+                                                    <em v-if="cart.promotions.mode==2">{{cart.promotions.name+',满 ¥'+toFloat(cart.promotions.touchPrice)+' 减 ¥'+toFloat(cart.promotions.reducedPrice)}}</em>
+                                                    <em v-if="cart.promotions.mode==3">{{cart.promotions.name+',满 ¥'+toFloat(cart.promotions.touchPrice)+' 赠送商品'}}</em>
+                                                </p>
+                                                <p>促销时间:<em v-if="cart.promotions.status==1">不限时</em><em v-else>{{cart.promotions.beginTime.substr(0,10)+' ~ '+cart.promotions.endTime.substr(0,10)}}</em></p>
+                                                <p v-if="cart.promotions.type==2" class="r"><a class="more" :href="'/product/promotions.html?id='+cart.promotions.id">更多凑单商品>>></a></p>
+                                                <template v-if="cart.promotions.mode==3">
+                                                    <p>赠品:</p>
+                                                    <p>
                                                     <span v-for="g in cart.promotions.giftList" class="p">
                                                         <img :src="g.image">
                                                         <span v-text="g.name"></span>
                                                         <span v-text="'× '+g.number"></span>
                                                     </span>
-                                                </p>
-                                            </template>
-                                            <p class="c"><a class="close" @click="hideThisLadder($event)" href="JavaScript:void(0);">了解</a></p>
+                                                    </p>
+                                                </template>
+                                                <p class="c"><a class="close" @click="hideThisLadder($event)" href="JavaScript:void(0);">了解</a></p>
+                                            </div>
                                         </div>
                                     </div>
-                                </div>
-                                <!-- 阶梯价 -->
-                                <div v-else-if="cart.ladderFlag" class="priceTag">
-                                    <i class="tag icon mIcon" @click="toggleThisLadder($event)">阶梯价格</i>
-                                    <div class="ladder mFixed">
+                                    <!-- 阶梯价 -->
+                                    <div v-else-if="cart.ladderFlag" class="priceTag">
+                                        <i class="tag icon mIcon" @click="toggleThisLadder($event)">阶梯价格</i>
+                                        <div class="ladder mFixed">
                                         <span>
                                             <em class="t"><i>价格</i><i>起订量</i></em>
                                             <em v-for="l in cart.ladderPrices">
@@ -156,21 +221,22 @@
                                             </em>
                                             <em @click="hideThisLadder($event)" class="close">了解</em>
                                         </span>
+                                        </div>
                                     </div>
-                                </div>
-                            </template>
+                                </template>
+                            </div>
                         </div>
-                    </div>
-                    <div class="c5">
+                        <div class="c5">
                         <span class="number">
                             <em class="sub" @click="cartNumberSub(cart)">-</em>
                             <input type="number" :value="cart.number" v-model="cart.number" @change="cartNumberChange(cart)">
                             <em class="add" @click="cartNumberAdd(cart)">+</em>
                         </span>
-                        <input type="hidden" :value="cart.step">
-                    </div>
-                    <div v-if="isPC" class="c6"><span>¥{{ (cart.price*cart.number) | NumFormat}}</span></div>
-                    <div v-if="isPC" class="c7"><span class="del" @click="deleteCartOne(cart.productId)">×<em class="tips">删除</em></span></div>
+                            <input type="hidden" :value="cart.step">
+                        </div>
+                        <div v-if="isPC" class="c6"><span>¥{{ (cart.price*cart.number) | NumFormat}}</span></div>
+                    </template>
+                    <div v-if="isPC" class="c7"><span class="del" @click="deleteCartOne(cart.skuId)">×<em class="tips">删除</em></span></div>
                 </div>
                 <div class="supplierBtn">
                     <span :class="supplier.reducedPrice>0?'priceTotal':'item'">合计:<em>¥{{ supplier.totalPrice | NumFormat}}</em>
@@ -219,7 +285,7 @@
                 <div class="item">商品数量:<em v-text="totalCount"></em></div>
             </div>
             <div class="right">
-                <a class="submit" href="javascript:void(0);" @click="submitCart()" onclick="_czc.push(['_trackEvent','购物车去结算','点击','去结算','','Um_Event_CartConfirmOrder'])">去结算</a>
+                <a class="submit" href="javascript:void(0);" @click="handleSubmitCart" 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>
@@ -307,6 +373,7 @@
 <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/mixins/cartMixins.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/shopping/cart.js(v=${version})}"></script>
 </body>
 </html>

+ 2 - 0
src/main/resources/templates/shopping/confirm.html

@@ -97,6 +97,7 @@
             <div v-if="isPC" class="cartTit clear">
                 <div class="c1">&nbsp;</div>
                 <div class="c2">商品信息</div>
+                <div class="c5">规格</div>
                 <div class="c4">单价(元)</div>
                 <div class="c5">数量</div>
                 <div class="c6">小计(元)</div>
@@ -144,6 +145,7 @@
                             <span v-text="cart.name"></span>
                         </a>
                     </div>
+                    <div class="c5">{{cart.unit}}</div>
                     <div class="c4">
                         <div class="price">
                             <template v-if="cart.svipProductFlag == 1">

+ 2 - 0
src/main/resources/templates/supplier-center/order/delivery-record.html

@@ -44,6 +44,7 @@
                         <div class="product" v-for="r in results">
                             <ul class="product-title">
                                 <li>商品信息</li>
+                                <li>购买规格</li>
                                 <li>购买数量</li>
                                 <li>已发数量</li>
                                 <li>未发数量</li>
@@ -56,6 +57,7 @@
 <!--                                        <span class="tips" v-if="order.productType==2||order.productType==1">赠品</span>-->
                                         <h3>{{order.productName}}</h3>
                                     </div>
+                                    <div>{{order.unit}}</div>
                                     <div>{{order.buyNum}}</div>
                                     <div>{{order.shipmentsNum}}</div>
                                     <div>{{order.notShippedNum}}</div>

+ 2 - 0
src/main/resources/templates/supplier-center/order/detail.html

@@ -49,6 +49,7 @@
                     <div class="product" >
                         <ul class="product-title">
                             <li>商品信息</li>
+                            <li>规格</li>
                             <li>单价</li>
                             <li>数量</li>
                             <li>总价</li>
@@ -60,6 +61,7 @@
                                     <img :src="pro.image"/>
                                     <h3>{{pro.name}}</h3>
                                 </div>
+                                <div>¥{{pro.productUnit}}</div>
                                 <div>¥{{pro.price}}</div>
                                 <div>{{pro.num}}</div>
                                 <div>¥{{pro.totalAmount}}</div>

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

@@ -89,6 +89,7 @@
                                             <h3>{{proitem.name}}</h3>
                                             <p>
                                             <span class="num" >数量:&nbsp;{{proitem.num}}</span>
+                                            <span class="num" >规格: {{proitem.productUnit}}</span>
                                             <span class="num">已发货:&nbsp;{{proitem.shipmentsNum}}</span>
                                             <span class="num" v-if="order.returnedNum!=null&&order.returnedNum!=0">已退/已取消:&nbsp;{{proitem.actualCancelNum}}</span>
                                             </p>

+ 2 - 0
src/main/resources/templates/supplier-center/order/logistics-add.html

@@ -47,6 +47,7 @@
                     <div class="product">
                         <ul class="product-title">
                             <li>商品信息</li>
+                            <li>规格</li>
                             <li>购买数量</li>
                             <li>已发数量</li>
                             <li>未发数量</li>
@@ -59,6 +60,7 @@
 <!--                                    <span class="tips" v-if="order.productType==2||order.productType==1">赠品</span>-->
                                     <h3>{{order.productName}}</h3>
                                 </div>
+                                <div>{{order.unit}}</div>
                                 <div>{{order.buyNum}}</div>
                                 <div>{{order.shipmentsNum}}</div>
                                 <div>{{order.notShippedNum}}</div>

+ 2 - 0
src/main/resources/templates/supplier-center/order/logistics-detail.html

@@ -43,6 +43,7 @@
                     <div class="product" >
                         <ul class="product-title">
                             <li>商品信息</li>
+                            <li>规格</li>
                             <li>购买数量</li>
                             <li>已发数量</li>
                             <li>未发数量</li>
@@ -55,6 +56,7 @@
 <!--                                    <span class="tips" v-if="order.productType==2||order.productType==1">赠品</span>-->
                                     <h3>{{order.productName}}</h3>
                                 </div>
+                                <div>{{order.unit}}</div>
                                 <div>{{order.buyNum}}</div>
                                 <div>{{order.shipmentsNum}}</div>
                                 <div>{{order.notShippedNum}}</div>

+ 2 - 0
src/main/resources/templates/supplier-center/order/logistics.html

@@ -44,6 +44,7 @@
                     <div class="product">
                         <ul class="product-title">
                             <li>商品信息</li>
+                            <li>规格</li>
                             <li>购买数量</li>
                             <li>已发数量</li>
                             <li>未发数量</li>
@@ -56,6 +57,7 @@
                                     <img :src="order.image"/>
                                     <h3>{{order.name}}</h3>
                                 </div>
+                                <div>{{order.productUnit}}</div>
                                 <div>{{order.num}}</div>
                                 <div>{{order.shipmentsNum}}</div>
                                 <div>{{order.notOutStore - order.actualCancelNum}}</div>

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

@@ -39,7 +39,12 @@
                 <div class="colour">商品信息</div>
                 <div class="goods-info-conent" v-for="(item,index) in shopOrder.orderProductList">
                 <p>{{(index*1+1)}}.{{item.name}}</p>
-                <p>数量(赠品数)x{{item.num}}({{item.presentNum}})     单价 ¥{{item.discountPrice}}      总价 ¥{{item.totalFee}}</p>
+                <p>
+                    数量(赠品数)x{{item.num}}({{item.presentNum}}) &nbsp&nbsp
+                    规格:{{item.productUnit}}  &nbsp&nbsp&nbsp&nbsp
+                    单价 ¥{{item.discountPrice}}  &nbsp&nbsp&nbsp&nbsp
+                    总价 ¥{{item.totalFee}}
+                </p>
             </div>
             </div>
             <div class="total-amount">

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

@@ -63,7 +63,7 @@
                     </div>
                     <div class="info unit">
                         <span class="label">包装规格:</span>
-                        <p>{{shopInfo.unit}}</p>
+                        <p>{{ skuStext }}</p>
                     </div>
                     <div class="info num">
                         <span class="label">商品编码:</span>

+ 84 - 53
src/main/resources/templates/supplier-center/shop/release.html

@@ -149,7 +149,7 @@
                                             <div class="popup-upload">
                                                 <div class="upload-file" v-if="brandImage!=''">
                                                     <img :src="brandImage" alt="" class="upload-img">
-                                                    <i class="icon-del" @click="removeBrandImageFn"></i>
+                                                    <i class="icon-del mIcon icon" @click="removeBrandImageFn"></i>
                                                 </div>
                                                 <div class="upload-file" v-else>
                                                     <i class="icon-add mIcon "></i>
@@ -194,7 +194,7 @@
                                 <div class="release-input upload">
                                     <div class="upload-file" v-if="releaseParams.qualificationImg!=''">
                                         <img :src="releaseParams.qualificationImg" alt="" class="upload-img">
-                                        <i class="icon-del" @click="removeQualificationsFn"></i>
+                                        <i class="icon-del mIcon icon" @click="removeQualificationsFn"></i>
                                     </div>
                                     <div class="upload-file" v-else>
                                         <i class="icon-add"></i>
@@ -236,11 +236,11 @@
                                     </div>
                                 </div>
                             </div>
-                            <div class="release-from clear">
-                                <div class="release-label"><span class="star">*</span>包装规格:</div>
-                                <div class="release-input"><input class="input" v-model="releaseParams.unit" type="text" placeholder="请输入包装规格,如:台,30ml/瓶" @blur="blur_aliasUnit" maxlength="20"></div>
-                                <div class="release-tips" v-show="vShow_Unit">{{fromMessage}}</div>
-                            </div>
+<!--                            <div class="release-from clear">-->
+<!--                                <div class="release-label"><span class="star">*</span>包装规格:</div>-->
+<!--                                <div class="release-input"><input class="input" v-model="releaseParams.unit" type="text" placeholder="请输入包装规格,如:台,30ml/瓶" @blur="blur_aliasUnit" maxlength="20"></div>-->
+<!--                                <div class="release-tips" v-show="vShow_Unit">{{fromMessage}}</div>-->
+<!--                            </div>-->
                             <div class="release-from clear">
                                 <div class="release-label rightTxt">商品编码:</div>
                                 <div class="release-input"><input class="input" v-model="releaseParams.productCode" type="text" placeholder="建议输入商品编码"></div>
@@ -276,21 +276,31 @@
                         </div>
                         <!--商品价格信息-->
                         <div class="release-main-container" v-show="activeNum == 1">
-                            <div class="release-from clear">
-                                <div class="release-label"><span class="star">*</span>市场价:</div>
-                                <div class="release-input" id="normalPrice">
-                                    <input class="input price" v-model="releaseParams.normalPrice" maxlength="40" type="number" placeholder="请输入商品市场价" @input="input_normalPrice">
-                                    <span class="yang">¥</span>
-                                </div>
-                                <div class="release-tips" v-show="vShow_NormalPrice">{{fromMessage}}</div>
+                            <div class="release-from clear none">
+                                <div class="release-label"><span class="star">*</span>SKU种类:</div>
                             </div>
                             <div class="release-from clear">
-                                <div class="release-label"><span class="star">*</span>售价:</div>
-                                <div class="release-input">
-                                    <input class="input price" v-model="releaseParams.price" maxlength="40" type="number" placeholder="请输入商品售价" @input="input_price">
-                                    <span class="yang">¥</span>
+                                <div class="release-from-tr">
+                                    <div class="tr-labe"><span class="star">*</span>规格</div>
+                                    <div class="tr-labe"><span class="star">*</span>市场价</div>
+                                    <div class="tr-labe"><span class="star">*</span>售价</div>
+                                    <div class="tr-labe"><span class="star">*</span>结算价</div>
+                                    <div class="tr-labe"><span class="star">*</span>起订量</div>
+                                    <div class="tr-labe none"><span class="star">*</span>库存</div>
                                 </div>
-                                <div class="release-tips" v-show="vShow_price">{{fromMessage}}</div>
+                                <div class="release-from-td" v-for="(sku,index) in skuParams" :key="index">
+                                    <div class="tr-labe"><input class="tr-input" type="text" v-model="sku.unit" @input="handleSkuInput" maxlength="10"></div>
+                                    <div class="tr-labe"><input class="tr-input" type="number" v-model="sku.normalPrice" @input="handleSkuInput" maxlength="10"></div>
+                                    <div class="tr-labe"><input class="tr-input" type="number" v-model="sku.price" @input="handleSkuInput" maxlength="10"></div>
+                                    <div class="tr-labe"><input class="tr-input" type="number" v-model="sku.costPrice" @input="handleSkuInput" maxlength="10"></div>
+                                    <div class="tr-labe"><input class="tr-input" type="number" v-model="sku.minBuyNumber" @input="handleSkuInput" maxlength="10"></div>
+                                    <div class="tr-labe none"><input class="tr-input" type="number" v-model="sku.stock" @input="handleSkuInput" maxlength="10"></div>
+                                    <div class="tr-icon">
+                                        <i class="WEB-icon add" @click="addskuParamsFn(sku, index)" v-if="skuParams.length < 20 && index === 0"></i>
+                                        <i class="WEB-icon del" @click="delskuParamsFn(sku, index)" v-if="skuParams.length > 1 && index !=0"></i>
+                                    </div>
+                                </div>
+                                <div class="release-tips" v-show="isSkuRule">{{fromMessage}}</div>
                             </div>
                             <div class="release-from clear">
                                 <div class="release-label"><span class="star">*</span>售价是否含税:</div>
@@ -343,25 +353,6 @@
                                     </div>
                                 </div>
                             </div>
-                            <div class="release-from clear">
-                                <div class="release-label rightTxt">结算价:</div>
-                                <div class="release-input">
-                                    <input class="input price" v-model="releaseParams.costPrice" maxlength="40" type="number" placeholder="请输入商品结算价">
-                                    <span class="yang">¥</span>
-                                </div>
-                            </div>
-                            <div class="release-from clear">
-                                <div class="release-label"><span class="star">*</span>起订量:</div>
-                                <div class="release-input">
-                                    <input class="input" v-model="releaseParams.minBuyNumber" maxlength="40" type="number" placeholder="请输入商品起订量" @input="input_minBuyNumber">
-                                </div>
-                                <div class="release-tips" v-show="vShow_MinBuyNumber">{{fromMessage}}</div>
-                            </div>
-                            <div class="release-from clear">
-                                <div class="release-label"><span class="star">*</span>库存:</div>
-                                <div class="release-input"><input class="input" v-model="releaseParams.stock" maxlength="40" type="number" placeholder="请输入商品库存量" @input="input_stock"></div>
-                                <div class="release-tips" v-show="vShow_Stock">{{fromMessage}}</div>
-                            </div>
                             <div class="release-from clear">
                                 <div class="release-label"><span class="star">*</span>购买数量:</div>
                                 <div class="release-input">
@@ -379,21 +370,6 @@
                                     </div>
                                 </div>
                             </div>
-<!--                            <div class="release-from clear">-->
-<!--                                <div class="release-label"><span class="star">*</span>运费:</div>-->
-<!--                                <div class="release-input">-->
-<!--                                    <div class="release-props">-->
-<!--                                        <label class="release-radio">-->
-<!--                                            <input type="radio" name="byFlag" v-model="releaseParams.byFlag" value="0"  @click="radioChangeByFlag">-->
-<!--                                            <i class="icon mIcon">买家承担</i>-->
-<!--                                        </label>-->
-<!--                                        <label class="release-radio">-->
-<!--                                            <input type="radio" name="byFlag" v-model="releaseParams.byFlag" value="1" checked @click="radioChangeByFlag">-->
-<!--                                            <i class="icon mIcon">卖家承担</i>-->
-<!--                                        </label>-->
-<!--                                    </div>-->
-<!--                                </div>-->
-<!--                            </div>-->
                             <div class="release-from clear">
                                 <div class="release-label"><span class="star">*</span>销售区域:</div>
                                 <div class="release-input">
@@ -419,6 +395,58 @@
                                     <a href="javascript: void(0);" class="btn next" @click="NextStep1">下一步</a>
                                 </div>
                             </div>
+<!--                            <div class="release-from clear">-->
+<!--                                <div class="release-label"><span class="star">*</span>起订量:</div>-->
+<!--                                <div class="release-input">-->
+<!--                                    <input class="input" v-model="releaseParams.minBuyNumber" maxlength="40" type="number" placeholder="请输入商品起订量" @input="input_minBuyNumber">-->
+<!--                                </div>-->
+<!--                                <div class="release-tips" v-show="vShow_MinBuyNumber">{{fromMessage}}</div>-->
+<!--                            </div>-->
+<!--                            <div class="release-from clear">-->
+<!--                                <div class="release-label"><span class="star">*</span>市场价:</div>-->
+<!--                                <div class="release-input" id="normalPrice">-->
+<!--                                    <input class="input price" v-model="releaseParams.normalPrice" maxlength="40" type="number" placeholder="请输入商品市场价" @input="input_normalPrice">-->
+<!--                                    <span class="yang">¥</span>-->
+<!--                                </div>-->
+<!--                                <div class="release-tips" v-show="vShow_NormalPrice">{{fromMessage}}</div>-->
+<!--                            </div>-->
+<!--                            <div class="release-from clear">-->
+<!--                                <div class="release-label"><span class="star">*</span>售价:</div>-->
+<!--                                <div class="release-input">-->
+<!--                                    <input class="input price" v-model="releaseParams.price" maxlength="40" type="number" placeholder="请输入商品售价" @input="input_price">-->
+<!--                                    <span class="yang">¥</span>-->
+<!--                                </div>-->
+<!--                                <div class="release-tips" v-show="vShow_price">{{fromMessage}}</div>-->
+<!--                            </div>-->
+
+<!--                            <div class="release-from clear">-->
+<!--                                <div class="release-label rightTxt">结算价:</div>-->
+<!--                                <div class="release-input">-->
+<!--                                    <input class="input price" v-model="releaseParams.costPrice" maxlength="40" type="number" placeholder="请输入商品结算价">-->
+<!--                                    <span class="yang">¥</span>-->
+<!--                                </div>-->
+<!--                            </div>-->
+<!--                            <div class="release-from clear">-->
+<!--                                <div class="release-label"><span class="star">*</span>库存:</div>-->
+<!--                                <div class="release-input"><input class="input" v-model="releaseParams.stock" maxlength="40" type="number" placeholder="请输入商品库存量" @input="input_stock"></div>-->
+<!--                                <div class="release-tips" v-show="vShow_Stock">{{fromMessage}}</div>-->
+<!--                            </div>-->
+
+<!--                            <div class="release-from clear">-->
+<!--                                <div class="release-label"><span class="star">*</span>运费:</div>-->
+<!--                                <div class="release-input">-->
+<!--                                    <div class="release-props">-->
+<!--                                        <label class="release-radio">-->
+<!--                                            <input type="radio" name="byFlag" v-model="releaseParams.byFlag" value="0"  @click="radioChangeByFlag">-->
+<!--                                            <i class="icon mIcon">买家承担</i>-->
+<!--                                        </label>-->
+<!--                                        <label class="release-radio">-->
+<!--                                            <input type="radio" name="byFlag" v-model="releaseParams.byFlag" value="1" checked @click="radioChangeByFlag">-->
+<!--                                            <i class="icon mIcon">卖家承担</i>-->
+<!--                                        </label>-->
+<!--                                    </div>-->
+<!--                                </div>-->
+<!--                            </div>-->
                         </div>
                         <!--商品信息-->
                         <div class="release-main-container" v-show="activeNum == 2">
@@ -542,6 +570,9 @@
 <script charset="utf-8" type="text/javascript" th:src="@{/js/center.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/lib/ckeditor5-new/ckeditor.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/supplier.service.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/supplier-center/shop/mixins/getInfoMixins.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/supplier-center/shop/mixins/checkeMixins.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/supplier-center/shop/mixins/releaseMixins.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/supplier-center/shop/release.js(v=${version})}"></script>
 
 </body>

+ 1 - 1
src/main/resources/templates/supplier/index.html

@@ -95,7 +95,7 @@
                                             <!--机构价格-->
                                             <template v-else-if="GLOBAL_USER_IDENTITY === 2 || (p.priceFlag === 0 && GLOBAL_USER_IDENTITY === 4) || (GLOBAL_USER_IDENTITY === 3 && p.shopId === GLOBAL_SHOP_ID) || GLOBAL_VIP_FLAG === 1">
                                                 <div class="main_price_show" :class="{none: PromotionsFormat(p.promotions) || (p.svipProductFlag === 1 && showVipPriceTag(p))}">
-                                                    ¥{{ (PromotionsFormat(p.promotions) || showVipPriceTag(p) ? p.originalPrice : p.price ) | NumFormat }}
+                                                    ¥{{ (PromotionsFormat(p.promotions) || p.svipProductFlag == 1 ? p.originalPrice : p.price ) | NumFormat }}
                                                 </div>
                                             </template>
                                             <!--供应商除自己的商品外,也显示价格等级-->

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

@@ -31,10 +31,10 @@
               <span class="coll-checked" :class="[isAllChecked ? 'checked': '']"></span>
               <span>全选</span>
             </div>
-            <div class="coll-span cart" @click="hanldAllAddCart">
-              <span class="coll-cart"></span>
-              <span>加入购物车({{ checkedNum }})</span>
-            </div>
+<!--            <div class="coll-span cart" @click="hanldAllAddCart">-->
+<!--              <span class="coll-cart"></span>-->
+<!--              <span>加入购物车({{ checkedNum }})</span>-->
+<!--            </div>-->
             <div class="coll-span coll" @click="hanldAllCancel">
               <span class="coll-icon"></span>
               <span>取消收藏({{ checkedNum }})</span>
@@ -48,12 +48,12 @@
       <ul class="productList clear mfw" v-if="isListEmpty">
         <li class="productItem " v-for="p in listData">
           <div class="product-cancel" @click="hanldCancel(p)" v-if="!isHandle">取消收藏</div>
-          <template v-if="(p.priceFlag==0 && GLOBAL_USER_IDENTITY==4) || (p.priceFlag!=3 && GLOBAL_USER_IDENTITY == 2)">
-              <div class="product-button" v-if="!isHandle">
-                <div class="coll-btn add" @click="hanldBuyCart(p,1)">加入购物车</div>
-                <div class="coll-btn buy" @click="hanldBuyCart(p,2)">立即购买</div>
-              </div>
-          </template>
+<!--          <template v-if="(p.priceFlag==0 && GLOBAL_USER_IDENTITY==4) || (p.priceFlag!=3 && GLOBAL_USER_IDENTITY == 2)">-->
+<!--              <div class="product-button" v-if="!isHandle">-->
+<!--                <div class="coll-btn add" @click="hanldBuyCart(p,1)">加入购物车</div>-->
+<!--                <div class="coll-btn buy" @click="hanldBuyCart(p,2)">立即购买</div>-->
+<!--              </div>-->
+<!--          </template>-->
           <div class="product-mask" v-if="isHandle"  @click="checkedSoperv(p)">
             <span class="mask-checked" :class="[p.isChecked ?'checked':'']"></span>
           </div>