Browse Source

SKU需求

zhengjinyi 2 years ago
parent
commit
6eff2b4c73
24 changed files with 1872 additions and 1213 deletions
  1. 8 8
      src/main/resources/config/dev/application-dev.yml
  2. 8 1
      src/main/resources/static/css/product/detail.h5.css
  3. 45 1
      src/main/resources/static/css/product/detail.pc.css
  4. 42 1
      src/main/resources/static/css/product/product-supporting.h5.css
  5. 91 2
      src/main/resources/static/css/shopping/shopping.css
  6. 145 134
      src/main/resources/static/css/supplier-center/shop/release.css
  7. BIN
      src/main/resources/static/img/base/WEB-icon.png
  8. 16 0
      src/main/resources/static/js/common/serviceapi/shopping.service.js
  9. 9 150
      src/main/resources/static/js/product/detail.js
  10. 105 0
      src/main/resources/static/js/product/mixins/productMixins.js
  11. 113 0
      src/main/resources/static/js/product/mixins/supportMixins.js
  12. 3 80
      src/main/resources/static/js/product/product-supporting.js
  13. 32 17
      src/main/resources/static/js/shopping/cart.js
  14. 1 0
      src/main/resources/static/js/shopping/confirm.js
  15. 123 0
      src/main/resources/static/js/shopping/mixins/cartMixins.js
  16. 392 0
      src/main/resources/static/js/supplier-center/shop/mixins/checkeMixins.js
  17. 245 0
      src/main/resources/static/js/supplier-center/shop/mixins/getInfoMixins.js
  18. 88 0
      src/main/resources/static/js/supplier-center/shop/mixins/releaseMixins.js
  19. 4 704
      src/main/resources/static/js/supplier-center/shop/release.js
  20. 112 10
      src/main/resources/templates/product/detail.html
  21. 86 1
      src/main/resources/templates/product/product-supporting.html
  22. 118 51
      src/main/resources/templates/shopping/cart.html
  23. 2 0
      src/main/resources/templates/shopping/confirm.html
  24. 84 53
      src/main/resources/templates/supplier-center/shop/release.html

+ 8 - 8
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://120.79.25.27:3306/caimei?characterEncoding=UTF8&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://192.168.2.100:3306/caimei?characterEncoding=UTF8&serverTimezone=Asia/Shanghai
     username: developer
-    password: J5p3tgOVazNl4ydf
+    password: 05bZ/OxTB:X+yd%1
+    #测试连接数据库
+#    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,8 +54,8 @@ logging:
 caimei:
   siteEnv: 0 #网站环境,(2:正式环境,1:测试环境,0:开发环境)
   #spiServer: http://192.168.2.68:8008
-  coreServer: https://core-b.caimei365.com
-  #coreServer: http://192.168.2.67:18002
+#  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.200:18002
   imageDomain: https://img-b.caimei365.com

+ 8 - 1
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}

+ 45 - 1
src/main/resources/static/css/product/detail.pc.css

@@ -42,11 +42,18 @@ li{list-style:none;}
 .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;}
@@ -101,7 +108,42 @@ 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 .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-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}
@@ -117,6 +159,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}

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

@@ -17,7 +17,46 @@
     .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 .icon:before {width: 15.8vw;height: 5vw;}
+    .supporting-list .list-unit .sku-popup-viw .sku-price .icon: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-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 +94,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:350px}
+    .listWrap .c3{float:left;width:100px}
     .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;}

+ 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
+    }
 }
 
 /*移动*/

BIN
src/main/resources/static/img/base/WEB-icon.png


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

@@ -20,6 +20,22 @@ var ShoppingApi = {
                     callback(res);
                 });
         },
+        /**
+         * @机构添加购物车替换Sku
+         * @param:userId 用户userId
+         */
+        ClubAddCart: 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

+ 9 - 150
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,7 @@ var productDetail = new Vue({
                     var $pageLabel = '';
                     _self.product = response.data;
                     _self.pcActType = product.pcActType;
+                    _self.addParams.skuId = product.skus[0].skuId;
                     _self.beautyActFlag = product.beautyActFlag;
                     _self.productTypeName = product.typeName;
                     _self.recommendType = product.recommendType ? product.recommendType : 0;
@@ -305,24 +306,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 = sku.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;
                     }
@@ -427,63 +421,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;
@@ -708,84 +645,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) {
@@ -825,7 +684,7 @@ var productDetail = new Vue({
         },
     },
     created: function () {
-        this.productId = this.couponParam.productId = this.listQuery.productId = $("#productId").val();
+        this.productId = this.couponParam.productId = this.addParams.productId = this.listQuery.productId = $("#productId").val();
         this.cmSysParams.pageType = 6;
         this.cmSysParams.productId = this.productId;
         this.typeId = $("#typeId").val();
@@ -845,7 +704,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();

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

@@ -0,0 +1,105 @@
+// 商品详情
+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: [],//阶梯价
+            }
+        },
+        filters: {
+            NumFormat(value) {
+                console.log('value',value)
+                //处理金额
+                return Number(value).toFixed(2)
+            }
+        },
+        methods: {
+            addShopCart(){ //加入购物车
+                var _self = this;
+                if(this.addStatus){
+                    this.addStatus = false;
+                    this.addParams.productCount = this.number;
+                    ShoppingApi.ClubAddCart(this.addParams,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协销下单)
+                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.price = sku.price;
+                this.addParams.skuId = sku.skuId;
+                this.ladderList = sku.ladderPriceList ? sku.ladderPriceList : [];
+            },
+            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();
+        }
+    }
+}();
+

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

@@ -0,0 +1,113 @@
+// 组合商品
+var supportMixins = function () {
+    return {
+        data() {
+            return {
+                currentIndex:0,
+                skuIndex:0,
+                skuSupportingIndex: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
+                pros.isSkuPopup = false;
+            },
+            handleSupportingChoisSku(pros,sku,index){// 配套商品选择规格
+                this.skuSupportingIndex = index;
+                pros.unit = sku.unit;
+                pros.price = sku.price;
+                pros.skuId = sku.skuId;
+            },
+            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(!_self.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';

+ 32 - 17
src/main/resources/static/js/shopping/cart.js

@@ -1,5 +1,6 @@
 var shoppingCart = new Vue({
     el: "#shoppingCart",
+    mixins: [cartMixins],
     data: {
         userId: 0,
         userIdentity: '',
@@ -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,18 +84,29 @@ 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.map(function(cart){
+                                if(cart.stock === 0 || cart.number > cart.stock ){
+                                    cart.isChecked = false;
+                                    supplier.isDisable = true
+                                    cart.isDisable = true
+                                }else{
+                                    supplier.isDisable = false
+                                    cart.isDisable = false
+                                    cart.isChecked = true;
+                                }
+                                cart.isSkuPopup = false;
+                                // _self.submitIds.push(cart.productId);
+                                _self.checkenProsList.push(cart);
                                 _self.isCheckedProductStatus = true;
+                                return cart;
                             })
                         }
-                    });
-                    _self.allChecked = true;
+                        _self.updateProductCheckedAllBtn(supplier);
+                        return supplier;
+                    })
+                    _self.updateCheckAllBtn();
                     _self.computedPrice();
                     _self.listLoading = false;
                 }else{
@@ -102,6 +114,7 @@ var shoppingCart = new Vue({
                 }
             })
         },
+
         toggleThisLadder: function(event){
             var el = event.currentTarget;
             if($(el).hasClass("on")){
@@ -119,18 +132,19 @@ 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);
-                    _self.checkenProsList.push(pro);
-                }
-                _self.isCheckedProductStatus = true;
+                this.checkenProsList.push(pro);
+                this.isCheckedProductStatus = true;
+                // if (!_self.submitIds.includes(pro.productId * 1)) {
+                //     _self.submitIds.push(pro.productId);
+                // }
             } else {
                 var lent = _self.submitIds.indexOf(pro.productId * 1)
                 if (lent >= 0) {
                     _self.submitIds.splice(lent, 1);
-                    _self.checkenProsList.splice(lent, 1);
+                    this.checkenProsList.splice(lent, 1);
                 }
             }
             _self.updateProductCheckedAllBtn(supplier)
@@ -139,6 +153,7 @@ var shoppingCart = new Vue({
         },
         ckeckSupplier: function(supplier){
             var _self = this;
+            if(supplier.isDisable){ return }
             supplier.isChecked = !supplier.isChecked;
             _self.setProductChecked(supplier);
             _self.updateCheckAllBtn();
@@ -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 (cart.isChecked) {
                                 supplierPrice += cart.price * cart.number;
                                 kindCount += 1;
                                 totalCount += cart.number;
@@ -599,7 +614,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;
         }

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

@@ -823,6 +823,7 @@ var shoppingConfirm = new Vue({
                 _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();
                 }

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

@@ -0,0 +1,123 @@
+// 商品详情
+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: {
+            checkedDisable(cart){
+
+            },
+            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.ClubAddCart(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);
+            },
+        }
+    }
+}();
+

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

@@ -0,0 +1,245 @@
+// 初始化
+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,
+                    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);
+                }
+            }
+        }
+    }
+}();
+

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

@@ -0,0 +1,88 @@
+// 发布商品
+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)
+            },
+            checkedSku(){// 校验SKU 是否填写完整
+                console.log('skuParams',this.skuParams)
+                return this.skuParams.every((params) => Object.keys(params).every(key => params[key]))
+            },
+            handleSkuInput(){
+                this.isSkuRule = false
+            }
+        }
+    }
+}();
+

+ 4 - 704
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,48 +507,7 @@ 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;
@@ -1111,110 +520,9 @@ var releaseContainer = new Vue({
                 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);
-            }
-        }
+
     }
 });

+ 112 - 10
src/main/resources/templates/product/detail.html

@@ -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>
@@ -120,18 +120,18 @@
                         </div>
                     </template>
                     <div class="row actStatus"
-                         v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0 && priceObj.actStatus==1||priceObj.ladderPriceFlag==1">
+                         v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0 && priceObj.actStatus==1 || ladderList.length >0">
                         <span class="l">促销</span><i>:</i>
                         <template
                                 v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0 && ((priceObj.priceFlag==0 && priceObj.userIdentity!=3) || (priceObj.priceFlag==2 && priceObj.userIdentity==2) || (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>
@@ -214,8 +214,28 @@
                     </div>
                     <div th:if="not${#strings.isEmpty(product.brandName)}" class="row"><span class="l">品牌</span><i>:</i><em
                             th:text="*{brandName}"></em></div>
-                    <div class="row" th:if="not${#strings.isEmpty(product.unit)}"><span class="l">包装规格</span><i>:</i><em
-                            th:text="*{unit}"></em></div>
+                    <template v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0">
+                        <div class="row">
+                            <span class="l">包装规格</span> <i>:</i>
+                            <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> <i>:</i>
+                            <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
@@ -256,9 +276,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" @click='addShopCart' v-if="!isNoneDisabled"
                                onclick="_czc.push(['_trackEvent','商品详情','点击','加入购物车','','Um_Event_ProductAddCart'])">加入购物车</a>
-                            <a href="javascript:void(0);" class="buy" @click="buyNowSubmit()" v-if="!isNoneDisabled"
+                            <a href="javascript:void(0);" class="buy" @click="buyNowSubmit" v-if="!isNoneDisabled"
                                onclick="_czc.push(['_trackEvent','商品详情','点击','立即购买','','Um_Event_ProductBuyConfirm'])">立即购买</a>
                         </div>
                     </template>
@@ -300,7 +320,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" href="javascript:void(0);" @click="handleSkuConfirm(pros)">确定</a>
+                                            </div>
+                                        </div>
+                                    </div>
                                 </div>
                                 <div class="tr tr-4">
                                     <div class="price">
@@ -773,6 +873,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" 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>

+ 118 - 51
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,20 +221,21 @@
                                             </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>
+                            <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.productId)">×<em class="tips">删除</em></span></div>
                 </div>
                 <div class="supplierBtn">
@@ -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">

+ 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>