فهرست منبع

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

zhengjinyi 1 سال پیش
والد
کامیت
be081fd9a7
29فایلهای تغییر یافته به همراه1591 افزوده شده و 263 حذف شده
  1. 16 0
      src/main/java/com/caimei/www/controller/authorized/supplier/SupplierPageController.java
  2. 5 1
      src/main/resources/static/css/base/base.h5.css
  3. 16 3
      src/main/resources/static/css/base/base.pc.css
  4. 29 22
      src/main/resources/static/css/index/index_new.h5.css
  5. 8 4
      src/main/resources/static/css/supplier-center/dashboard.css
  6. 67 0
      src/main/resources/static/css/supplier-center/shop/category-edit.css
  7. 72 0
      src/main/resources/static/css/supplier-center/shop/disguise.css
  8. 2 2
      src/main/resources/static/css/supplier-center/shop/goods.css
  9. 5 1
      src/main/resources/static/css/supplier/index.css
  10. 99 1
      src/main/resources/static/js/common/serviceapi/supplier.service.js
  11. 11 4
      src/main/resources/static/js/index.js
  12. 2 3
      src/main/resources/static/js/mixins/cmSysMixins.js
  13. 49 29
      src/main/resources/static/js/product/detail.js
  14. 122 0
      src/main/resources/static/js/supplier-center/shop/category-edit.js
  15. 34 0
      src/main/resources/static/js/supplier-center/shop/disguise.js
  16. 99 0
      src/main/resources/static/js/supplier-center/shop/mixins/categoryMixins.js
  17. 224 0
      src/main/resources/static/js/supplier-center/shop/mixins/disguiseMixins.js
  18. 78 51
      src/main/resources/static/js/supplier/index.js
  19. 32 13
      src/main/resources/templates/index.html
  20. 3 4
      src/main/resources/templates/product/detail.html
  21. 127 0
      src/main/resources/templates/supplier-center/components/disguise-banner.html
  22. 73 0
      src/main/resources/templates/supplier-center/components/disguise-category.html
  23. 56 0
      src/main/resources/templates/supplier-center/components/disguise-dialog.html
  24. 1 1
      src/main/resources/templates/supplier-center/components/tableft.html
  25. 82 0
      src/main/resources/templates/supplier-center/shop/category-edit.html
  26. 0 1
      src/main/resources/templates/supplier-center/shop/decoration.html
  27. 71 0
      src/main/resources/templates/supplier-center/shop/disguise.html
  28. 0 1
      src/main/resources/templates/supplier-center/shop/goods.html
  29. 208 122
      src/main/resources/templates/supplier/index.html

+ 16 - 0
src/main/java/com/caimei/www/controller/authorized/supplier/SupplierPageController.java

@@ -64,6 +64,10 @@ public class SupplierPageController extends BaseController {
 	private static final String PHONE = "supplier-center/setting/phone";
     /** 装扮主页 */
 	private static final String DECORATION_SHOP = "supplier-center/shop/decoration";
+    /** 装扮主页 */
+	private static final String DISGUISE = "supplier-center/shop/disguise";
+    /** 添加/编辑楼层 */
+	private static final String CATEGORY_EDIT = "supplier-center/shop/category-edit";
     /** 发布商品 */
 	private static final String RELEASE_GOODS = "supplier-center/shop/release";
     /** 商品管理 */
@@ -260,6 +264,18 @@ public class SupplierPageController extends BaseController {
         return DECORATION_SHOP;
     }
 
+    /** 装扮主页 */
+    @GetMapping("/supplier/disguise.html")
+    public String shopDisguise() {
+        return DISGUISE;
+    }
+
+    /** 装扮主页 */
+    @GetMapping("/supplier/category-edit.html")
+    public String categoryEdit() {
+        return CATEGORY_EDIT;
+    }
+
     /** 发布商品 */
     @GetMapping("/supplier/release.html")
     public String releaseGoods() {

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

@@ -2,6 +2,10 @@
 /**
 * 移动端
 */
+/*定义滚动条样式*/
+::-webkit-scrollbar{display: none;}
+::-webkit-scrollbar-track{display: none;}
+::-webkit-scrollbar-thumb{display: none;}
 .noneImportant .footTop,
 .noneImportant .footMain{display:none!important;}
 .wechat_qrcode{display: none;}
@@ -280,7 +284,7 @@
 .cmbeans-alert-content-bean .icon-text{font-weight: bold;}
 .cmbeans-alert-content-tips{width: 100%;height: 5.6vw;line-height: 5.6vw;margin-top: 4vw;box-sizing: border-box;display: flex;flex-direction: column;align-items: center;}
 .cmbeans-alert-content-tips .tips{width: 27.2vw;height: 5.6vw;background-color: rgba(226, 91, 28, 0.1);border-radius: 2.8vw;line-height: 5.6vw;font-size: 2.6vw;color: #FF5B00;text-align: center;padding: 0 1.2vw;}
-#globalHead{position: sticky !important; top: 0 !important; left: 0 !important; z-index: 1200;}
+#globalHead{width: 100%;box-sizing: border-box; position: fixed !important; top: 0 !important; left: 0 !important; z-index: 1200;}
 
 /*ross宣传弹窗*/
 .ross-banner-fiexd{width: 100%;height: 113.8vw;position: fixed;z-index: 999;background: linear-gradient(0deg, #FFA86E, #FF5B00);left: 0;right: 0;bottom: -113.8vw;box-sizing: border-box;padding: 4vw;background-size: cover;animation: all 1s;}

+ 16 - 3
src/main/resources/static/css/base/base.pc.css

@@ -234,7 +234,7 @@ iframe{width:320px !important;height: 280px !important}
 .baseTopNav>.wrap{height:44px;box-sizing:border-box;position:relative;z-index:991;}
 .baseTopNav .home,.baseTopNav .classBtn,.baseTopNav .navBox{float:left}
 .baseTopNav .service{float:right}
-.baseTopNav .nav{display:inline-block;height:44px;line-height:44px;padding:0 34px;color:#4A4F58;font-size:14px;text-align:center;position:relative;border-left:1px solid transparent;border-right:1px solid transparent}
+.baseTopNav .nav{display:inline-block;height:44px;line-height:44px;padding:0 30px;color:#4A4F58;font-size:14px;text-align:center;position:relative;border-left:1px solid transparent;border-right:1px solid transparent}
 .baseTopNav .nav:hover,.baseTopNav .nav.on{color:#FF5B00;border-image:-webkit-linear-gradient(white,#FF5B00,white)1 20 1;border-image:-moz-linear-gradient(white,#FF5B00,white)1 20 1;border-image:-o-linear-gradient(white,#FF5B00,white)1 20 1;border-image:linear-gradient(white,#FF5B00,white)1 20 1}
 .baseTopNav .classBtn:after{background-position:0 -31px;transition: all .5s;}
 .baseTopNav .classBtn.on:after{transform:rotate(90deg);}
@@ -247,8 +247,8 @@ iframe{width:320px !important;height: 280px !important}
 .baseTopNav .navBox li:nth-of-type(6) .nav:after{background-position:-210px -31px}
 .baseTopNav .navBox li:nth-of-type(7) .nav:after{background-position:-240px -31px}
 .baseTopNav .service:after{background-position:-270px -31px}
-.baseTopNav .navBox{width:500px}
-.baseTopNav .navBox ul{width:980px;}
+.baseTopNav .navBox{width:975px;float: left;}
+.baseTopNav .navBox ul{width:975px;float: left;}
 .baseTopNav .navBox li{float:left;position:relative}
 .baseTopNav .classifyBox{display:none;position:absolute;left:0;top:44px;z-index:990;padding: 0 0 20px 0;}
 /* 分类 */
@@ -532,6 +532,19 @@ iframe{width:320px !important;height: 280px !important}
 @keyframes rundbottom{ 0%{bottom: -260px;opacity: 0;} 100%{bottom:0;opacity: 1;} }
 
 
+.filter-control {
+    display: inline-block;
+    margin-bottom: 10px;
+    margin-right: 10px;}
+.filter-control span,
+.filter-control.el-input {
+    display: inline-block;
+    vertical-align: middle;
+}
+.filter-control .el-input,
+.filter-control .el-select {
+    width: 200px;
+}
 
 
 

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

@@ -1,8 +1,22 @@
  /* 首页导航 */
-.mNavBox{width:100%;margin:0 auto;padding:2.2vw 0;position:relative;background:#FFF;}
-.mNavBox .nav{width:25vw;margin:0;display:block;box-sizing: border-box;padding:2.2vw 0;text-align:center;color:#4A4F58;font-size:3.4vw;float: left;}
-.mNavBox .nav-icon{display:block;width: 11vw;height: 11vw;margin: 0 auto;}
-.mNavBox .nav p{line-height:6.4vw;white-space:nowrap;width: 100%;}
+.mNavBox{width:100%;position:fixed;top:26.8vw;left:0;background:#FFF;height: 10vw; z-index: 999;padding: 0 10vw 0 2vw;box-sizing: border-box;}
+.mNavBox .mNavBox-main{display: flex;white-space: nowrap;overflow-x: auto;font-size: 0;}
+.mNavBox .mNavBox-main .nav{margin:0;display:block;box-sizing: border-box;padding:0 2.2vw;text-align:center;color:#4A4F58;font-size:3.4vw;float: left;}
+.mNavBox .mNavBox-main .nav.active{ color: #ff5b00;font-weight: bold;position: relative; }
+.mNavBox .mNavBox-main .nav.active:before{content: '';width: 4vw;height: 0.8vw;border-radius: 0.4vw;background: #ff5b00;position: absolute;bottom: 1vw;left: 50%;margin-left: -2vw;}
+.mNavBox .mNavBox-main .nav-icon{display:none;}
+.mNavBox .mNavBox-main .nav p{line-height:10vw;white-space:nowrap;}
+.mNavBox .mNavBox-down{ width: 10vw;height: 10vw;position: absolute;right: 0;top: 0;background: #FFFFFF; }
+.mNavBox .mNavBox-down .mIcon{ width: 10vw;height: 10vw;display: block;}
+.mNavBox .mNavBox-down .mIcon:before{ width: 10vw;height: 10vw;background-position: -48.8vw 1.5vw;}
+.mNavBox .mNavBox-down.none .mIcon:before{ width: 10vw;height: 10vw;background-position: -40vw 1.5vw;}
+.mNavBox-dropdown{ width: 100%;min-height:40vw;background: #FFFFFF;box-sizing: border-box;padding: 3vw;position: absolute;top: 9.5vw;left: 0;border-radius: 0 0 4vw 4vw;}
+.mNavBox-dropdown .drop-item{ padding: 0 3vw;height: 7.2vw;float: left;line-height:7.2vw;background: #f5f5f5;font-size: 3.2vw;margin: 1.6vw;text-align: center;border: 1px solid #f5f5f5;color: #666666;border-radius: 1vw; }
+.mNavBox-dropdown .drop-item.active{ background: #ffffff;border-color: #ff5b00;color: #ff5b00;font-weight: bold;}
+.mNavBox-dropdown-more{ width: 100%;height: 100%;position: fixed;top: 0;left: 0;background: rgba(0,0,0,0.7);z-index: 888;}
+
+
+#container{ margin-top: 36.8vw; }
 /* 轮播 */
 #swiper-container{width:100%;height:48vw;overflow:hidden;position:relative}
 #swiper-container .swiper-wrapper{position:relative;height:100%;z-index:0}
@@ -17,21 +31,16 @@
  .quickOperation {
  }
  .quickOperation .my-swipe .van-swipe-item {
-  height: 57.8vw;
+  height: auto;
  }
  .carousel-list {
-  padding: 2.4vw;
-  display: grid !important;
-  grid-template-columns: repeat(2, 1fr);
-  grid-template-rows: repeat(2, 1fr);
-  grid-gap: 2.4vw;
+  padding:5vw 0vw 3.2vw 0vw;
  }
  .quickOperation .van-swipe-item .list {
-  width: 45.6vw;
-  height: 20vw;
-  display: flex;
-  align-items: center;
-  background: linear-gradient(180deg, #FFF1EB 0%, #FFFFFF 100%);
+   width: 20%;
+   height: auto;
+   margin-bottom: 3vw;
+   float: left;
  }
  .quickOperation .van-swipe__indicator {
   width: 1.867vw;
@@ -48,14 +57,12 @@
   border-radius: 8px;
  }
  .quickOperation .list .list-content {
-  height: 11.067vw;
-  margin-left: 3.2vw;
-  display: flex;
-  justify-content: space-between;
+   height: auto;
  }
  .quickOperation .list .list-content .list-icon {
-  width: 11.067vw;
-  height: 100%;
+  width: 12vw;
+  height: 12vw;
+  margin: 0 auto;
   border-radius: 50%;
   overflow: hidden;
  }
@@ -91,7 +98,7 @@
   font-size: 2.8vw;
  }
   /*公告*/
- #new-container{height: 12vw;background-color: #F7F7F7;padding:4vw 3.2vw 0 3.2vw;box-sizing: border-box;}
+ #new-container{height: 8vw;background-color: #F5F5F5;padding:0 3.2vw 0 3.2vw;box-sizing: border-box;}
  #new-container .inner{width: 100%;height: 100%;background: url("/img/base/icon-newbgh5@2x.png");background-size: cover;box-sizing: border-box;padding:0 3vw;border-radius: 1vw;}
  #new-container .new-list{float: left;width: 62vw;}
  #new-container .new-label{float: left;line-height: 8vw;font-size: 16px;color: #FF5B00;font-weight: bold;}

+ 8 - 4
src/main/resources/static/css/supplier-center/dashboard.css

@@ -74,7 +74,7 @@
 
 /*移动端*/
  @media screen and (max-width:768px){
- #dashboard{width: 100%;overflow: hidden;}
+ #dashboard{width: 100%;overflow: hidden;padding-top: 27vw;}
  #dashboard li {list-style: none;}
      .wrap_tittle{height: 10.6vw;line-height: 10.6vw;background: #fff;padding: 0 2.7vw;font-size: 3.4vw;color: #22272e;border-bottom: solid .27vw #e2e7ef;}
      .mIcon.wrap_tittle:before{width: 6.7vw;height: 6.7vw;background-position: -50.7vw -51.5vw;position: absolute;top: 28vw;}
@@ -99,9 +99,13 @@
      .product p {font-size: 3.4vw;font-weight: normal;font-stretch: normal;line-height: 5.6vw;letter-spacing: 0px;color: #22272e;padding: 2.7vw 3.3vw;}
      .product ul {height:10.6vw;line-height:17vw;background-color: #ffffff;padding: 4vw;width: 100%;float: left;}
      .product li {display: inline-block;width: 32%;text-align: center;color: #333333;position: relative;cursor: pointer;}
-     .mIcon.confirm:before {width: 9vw;height: 9vw;background-position: -66.7vw -60vw;right: 13.9vw;top: -2.53vw;position: absolute}
-     .mIcon.other:before {background-position: -74vw -60vw;}
-     .mIcon.down:before {background-position: -83vw -60vw;}
+     .product .product-li {width: 110px;height: 100%; display: block;margin-right: 20px;text-align: center;color: #333333;position: relative;cursor: pointer;}
+     .product .product-li .product-li-icon{ width:100%;height: 9vw;float: left;}
+     .product .product-li .icon{ width: 9vw;height: 9vw;margin: 0 auto; display: block;position: relative;}
+     .product .product-li .icon:before {width: 9vw;height: 9vw;background-position: -33.7vw -27.8vw;position: absolute;left: 0;}
+     .mIcon.confirm:before {width: 9vw;height: 9vw;background-position: -64.7vw -60vw;right: 13.9vw;top: -2.53vw;position: absolute}
+     .mIcon.other:before {background-position: -73vw -60vw;}
+     .mIcon.down:before {background-position: -81vw -60vw;}
      .rank_top p {font-size: 3.4vw;color: #22272e;display: inline-block;}
      .rank_top span {color: #627386;font-size: 2.6vw;}
      .sales-ranke ul li {display: inline-block;width: 15%;}

+ 67 - 0
src/main/resources/static/css/supplier-center/shop/category-edit.css

@@ -0,0 +1,67 @@
+@media screen and (min-width:768px) {
+  input::placeholder{color: #9aa5b5;font-size: 12px;}
+  table, td, th{border: none;}
+  .crumbs{color: #22272e;font-size: 16px;}
+  .head-top{overflow: hidden;background: #fff;padding:17px;box-shadow: 0px 3px 6px 0px rgba(0, 0, 0, 0.07)}
+  .head-top>div {float: left; height: 40px;font-size: 12px;color: #627386;line-height: 40px;margin-right: 10px;margin-bottom: 10px}
+  .state {width: 158px !important;}
+  #newBtn div{height: 36px;border-radius: 2px;display: inline-block;text-align: center;cursor: pointer}
+  #newBtn{float: left;margin: 0}
+  .disguise-content{ width: 100%;min-height: 653px;background: #FFFFFF;box-sizing: border-box;padding: 40px 100px;}
+
+  .bgFrom{position: fixed; background: rgba(34,39,46, 0.3);top: 0;left: 0; width: 100%;height: 100%;z-index: 1000;opacity: 0}
+  .bgFrom.show{opacity: 1}
+  .modalForm{ width: 650px;height: 350px;background-color: #ffffff;box-shadow: 0px 3px 6px 0px rgba(0, 0, 0, 0.16);border-radius: 2px;border: solid 1px #efefef; position: absolute;left: 0;top: 0;right: 0;bottom: 0; margin: auto }
+  .modal-header{ height: 42px; background-color: #f8f8f8; border-radius: 2px 2px 0px 0px;border: solid 1px #efefef; line-height: 42px;padding: 0 16px;color: #333333;}
+  .icon.close{float: right; cursor: pointer;}
+  .icon.close:before{width: 20px;height: 20px;background-position: -315px 2px}
+  .modal-div span{color: #22272e;}
+  .modal-div input{width: 560px;height: 36px;line-height:36px;border-radius: 2px;border: solid 1px #b8bfca;margin-bottom: 15px;color: #9aa5b5;padding-left: 5px}
+  .modal-content{padding: 15px}
+  .upimg { width: 56px;height: 56px;background-color: #ffffff;border-radius: 2px; border: solid 1px #b8bfca; display: inline-block; position: relative;}
+  .icon.add:before { width: 25px;height: 25px;background-position: -168px -374px; position: relative;top: 15px;right: -15px;}
+  .add-pic {width: 56px;height: 56px;position: absolute;top: 50%; left: 50%;transform: translate(-50%,-50%); border-radius: 2px;opacity: 0;cursor: pointer;}
+  .upimg img {width: 100%; height: 100%;}
+  .red{color: red}
+  .upload-img .up{ vertical-align: baseline; height: 60px;display: inline-block}
+  .colorstyle{color: #FF5B00}
+  .saveBtn{ text-align: center;float: right;width: 68px;height: 32px; background-color: #FF5B00; border-radius: 2px;line-height: 32px;color: #ffffff;cursor: pointer;}
+  .Note{float: left}
+  .navLayout{min-height: auto;}
+
+  .pagination{width: 100%;margin-top: 10px;float: left; background: #FFFFFF;padding: 8px 0px;box-sizing: border-box;}
+}
+
+/*移动端*/
+@media screen and (max-width:768px) {
+  table, td, th{border: none;}
+  .head-top{padding: 3vw 0;background: #fff;}
+  .head-top .form-row{margin:1.5vw 0;color: #627386;float: left;width: 50%;}
+  .state {width: 92% !important;margin: 0 2vw;}
+  #newBtn{float: left;margin: 2vw;}
+
+  .bgFrom{position: fixed; background: rgba(34,39,46, 0.3);top: 0;left: 0; width: 100%;height: 100%;z-index: 1000;opacity: 0}
+  .bgFrom.show{opacity: 1}
+  .modalForm{ width: 74.7vw;height:fit-content;background-color: #ffffff;box-shadow: 0px .8vw 1.6vw 0px rgba(0, 0, 0, 0.16);border-radius: 2.7vw;
+    border: solid .27vw #efefef; position: absolute;left: 0;top: 0;right: 0;bottom: 0; margin: auto }
+  .modal-header{height: 10.96vw;border-bottom: solid .27vw #efefef; line-height:10.9vw;padding: 0 4vw;color: #22272e;}
+  .mIcon.close{float: right; cursor: pointer;}
+  .mIcon.close:before{width: 5.3vw;height: 5.3vw;background-position: -33.3vw .53vw}
+  .modal-div span{color: #22272e;display: inline-block;}
+  .modal-div input{width: 54vw;height: 8.8vw;line-height:8.8vw;border-radius: .27vw;border: solid .27vw #b8bfca;margin-bottom: 4vw;
+  color: #9aa5b5;padding-left: 1.3vw;display: inline-block;}
+  .modal-content{padding: 2.7vw}
+  input::placeholder{color: #9aa5b5;font-size: 3vw}
+  .upimg { width: 13vw;height: 13vw;background-color: #ffffff;border-radius: .53vw; border: solid .27vw #b8bfca; display: inline-block; position: relative;}
+  .mIcon.add:before {width: 5vw;height: 5vw;background-position: -9.6vw -62vw;position: relative;top: 4vw;right: -4vw;}
+  .add-pic {width: 13vw;height: 13vw;position: absolute;top: 50%; left: 50%;transform: translate(-50%,-50%); border-radius: .53vw;opacity: 0;cursor: pointer;}
+  .upimg img {width: 100%; height: 100%;}
+  .red{color: red}
+  .upload-img .up{ vertical-align: baseline; height: 60px;display: inline-block}
+  .colorstyle{color: #FF5B00}
+  .Note{float: left;font-size: 2.2vw;}
+  .pagination{width: 100%;min-height: 2vw;position: fixed;bottom: 0;left: 0;background: #FFFFFF;z-index: 99;padding: 2vw;box-sizing: border-box;}
+}
+ @media screen and (max-width: 360px){
+    .modal-div input{width: 51vw}
+  }

+ 72 - 0
src/main/resources/static/css/supplier-center/shop/disguise.css

@@ -0,0 +1,72 @@
+@media screen and (min-width:768px) {
+    input::placeholder{color: #9aa5b5;font-size: 12px;}
+    table, td, th{border: none;}
+    .crumbs{color: #22272e;font-size: 16px;}
+    .head-top{overflow: hidden;background: #fff;padding:17px;box-shadow: 0px 3px 6px 0px rgba(0, 0, 0, 0.07)}
+    .head-top>div {float: left; height: 40px;font-size: 12px;color: #627386;line-height: 40px;margin-right: 10px;margin-bottom: 10px}
+    .state {width: 158px !important;}
+    #newBtn div{height: 36px;border-radius: 2px;display: inline-block;text-align: center;cursor: pointer}
+    #newBtn{float: left;margin: 0}
+    .disguise-content{ width: 100%;min-height: 500px;background: #FFFFFF; position: relative;}
+    .disguise-message{ height: 40px;position: absolute;top: 0;right: 0;line-height: 40px;font-size: 14px;color: #9AA5B5;box-sizing: border-box;padding: 0 20px; cursor: pointer;}
+    .bgFrom{position: fixed; background: rgba(34,39,46, 0.3);top: 0;left: 0; width: 100%;height: 100%;z-index: 1000;opacity: 0}
+    .bgFrom.show{opacity: 1}
+    .modalForm{ width: 650px;height: 470px;background-color: #ffffff;box-shadow: 0px 3px 6px 0px rgba(0, 0, 0, 0.16);border-radius: 2px;border: solid 1px #efefef; position: absolute;left: 0;top: 0;right: 0;bottom: 0; margin: auto }
+    .modal-header{ height: 42px; background-color: #f8f8f8; border-radius: 2px 2px 0px 0px;border: solid 1px #efefef; line-height: 42px;padding: 0 16px;color: #333333;}
+    .icon.close{float: right; cursor: pointer;}
+    .icon.close:before{width: 20px;height: 20px;background-position: -315px 2px}
+    .modal-div{ width: 100%;float: left; }
+    .modal-div span{color: #22272e;}
+    .modal-div input{width: 560px;height: 36px;line-height:36px;border-radius: 2px;border: solid 1px #b8bfca;margin-bottom: 15px;color: #333333;padding-left: 5px}
+    .modal-content{padding: 15px}
+    .upload-img{ width: 100%;height: auto; float: left;}
+    .upload-img .label{ float: left;height: 120px; }
+    .upimg { float: left;width: 400px;height: 120px;background-color: #ffffff;border-radius: 2px; border: solid 1px #b8bfca; display: inline-block; position: relative;}
+    .upimg .icon{ width: 30px;height: 30px;position:absolute;top:40px;left: 50%;margin-left: -15px;  }
+    .upimg .icon.add:before { width: 30px;height: 30px;background-position: -163px -370px; position: relative;top: 0;right: 0;}
+    .add-pic {width: 400px;height: 120px;position: absolute;top: 50%; left: 50%;transform: translate(-50%,-50%); border-radius: 2px;opacity: 0;cursor: pointer;}
+    .upimg img {width: 100%; height: 100%;}
+    .red{color: red}
+    .upload-img .up{ vertical-align: baseline; height: 120px;display: inline-block}
+    .colorstyle{color: #FF5B00}
+    .saveBtn{ width: 100%;height: 40px;float: left; text-align: right;}
+    .Note{float: left;margin-top: 10px;}
+    .navLayout{min-height: auto;}
+    .tablie{ width: 120px; white-space: nowrap;overflow: hidden;text-overflow: ellipsis;}
+
+    .pagination{width: 100%;margin-top: 10px;float: left; background: #FFFFFF;padding: 8px 0px;box-sizing: border-box;}
+  }
+
+/*移动端*/
+@media screen and (max-width:768px) {
+  table, td, th{border: none;}
+  .head-top{padding: 3vw 0;background: #fff;}
+  .head-top .form-row{margin:1.5vw 0;color: #627386;float: left;width: 50%;}
+  .state {width: 92% !important;margin: 0 2vw;}
+  #newBtn{float: left;margin: 2vw;}
+
+  .bgFrom{position: fixed; background: rgba(34,39,46, 0.3);top: 0;left: 0; width: 100%;height: 100%;z-index: 1000;opacity: 0}
+  .bgFrom.show{opacity: 1}
+  .modalForm{ width: 74.7vw;height:fit-content;background-color: #ffffff;box-shadow: 0px .8vw 1.6vw 0px rgba(0, 0, 0, 0.16);border-radius: 2.7vw;
+    border: solid .27vw #efefef; position: absolute;left: 0;top: 0;right: 0;bottom: 0; margin: auto }
+  .modal-header{height: 10.96vw;border-bottom: solid .27vw #efefef; line-height:10.9vw;padding: 0 4vw;color: #22272e;}
+  .mIcon.close{float: right; cursor: pointer;}
+  .mIcon.close:before{width: 5.3vw;height: 5.3vw;background-position: -33.3vw .53vw}
+  .modal-div span{color: #22272e;display: inline-block;}
+  .modal-div input{width: 54vw;height: 8.8vw;line-height:8.8vw;border-radius: .27vw;border: solid .27vw #b8bfca;margin-bottom: 4vw;
+  color: #9aa5b5;padding-left: 1.3vw;display: inline-block;}
+  .modal-content{padding: 2.7vw}
+  input::placeholder{color: #9aa5b5;font-size: 3vw}
+  .upimg { width: 13vw;height: 13vw;background-color: #ffffff;border-radius: .53vw; border: solid .27vw #b8bfca; display: inline-block; position: relative;}
+  .mIcon.add:before {width: 5vw;height: 5vw;background-position: -9.6vw -62vw;position: relative;top: 4vw;right: -4vw;}
+  .add-pic {width: 13vw;height: 13vw;position: absolute;top: 50%; left: 50%;transform: translate(-50%,-50%); border-radius: .53vw;opacity: 0;cursor: pointer;}
+  .upimg img {width: 100%; height: 100%;}
+  .red{color: red}
+  .upload-img .up{ vertical-align: baseline; height: 60px;display: inline-block}
+  .colorstyle{color: #FF5B00}
+  .Note{float: left;font-size: 2.2vw;}
+  .pagination{width: 100%;min-height: 2vw;position: fixed;bottom: 0;left: 0;background: #FFFFFF;z-index: 99;padding: 2vw;box-sizing: border-box;}
+}
+ @media screen and (max-width: 360px){
+    .modal-div input{width: 51vw}
+ }

+ 2 - 2
src/main/resources/static/css/supplier-center/shop/goods.css

@@ -1,13 +1,13 @@
 li{list-style: none}
  @media screen and (min-width:768px) {
     table, td, th{border: none;}
+    input::placeholder{color: #9aa5b5;font-size: 12px;}
+    textarea::placeholder{color: #9aa5b5;}
     .crumbs{color: #22272e;font-size: 16px;}
     .head-top{overflow: hidden;background: #fff;padding:17px;box-shadow: 0px 3px 6px 0px rgba(0, 0, 0, 0.07)}
     .head-top>div {float: left; height: 40px;font-size: 12px;color: #627386;line-height: 40px;margin-right: 10px;margin-bottom: 10px}
     .state {width: 158px !important;}
     .state.small{width: 170px;margin: 0 0;}
-    input::placeholder{color: #9aa5b5;font-size: 12px;}
-    textarea::placeholder{color: #9aa5b5;}
     #newBtn div{height: 36px;border-radius: 2px;display: inline-block;text-align: center;cursor: pointer}
     #newBtn{float: left;margin: 0}
     .goods-main{width: 100%; height: auto; float: left; margin:10px 0;background: #fff;}

+ 5 - 1
src/main/resources/static/css/supplier/index.css

@@ -30,10 +30,14 @@ li{list-style:none}
     .supplierTit .search .searchBtn{position:absolute;right:0;top:0;font-size:0;padding:7px 12px;height:30px;line-height:30px}
     .supplierTit .search .searchBtn:before{width:30px;height:30px;background-position:4px 4px}
     .supplierInfo{width:1200px;margin:0 auto;}
-    .supplierInfo .tabTit{width:100%;height:40px;line-height:40px;margin:16px auto;background:#FFF;border-bottom:1px solid #ffe6dc;font-size:16px;color:#93979F}
+    .supplierInfo .tabTit{width:100%;height:40px;line-height:40px;margin:16px auto 0;background:#FFF;border-bottom:1px solid #ffe6dc;font-size:16px;color:#93979F}
     .supplierInfo .tabTit span{display:inline-block;box-sizing:border-box;min-width:130px;text-align:center;height:100%;padding:0 32px;cursor:pointer}
     .supplierInfo .tabTit span:hover{color:#E15621}
     .supplierInfo .tabTit span.on,.supplierInfo .tabTit span.on:hover{color:#E15621;background:#ffe6dc;font-weight:bold;}
+
+    .supplierInfo .shop-tabsItem{ width:100%;height:auto;box-sizing: border-box;padding: 22px;background: #FFFFFF; margin-bottom: 16px;}
+    .supplierInfo .shop-tabsItem .tabs-list{float: left; display: block;box-sizing: border-box;height: 56px;padding: 0 20px;margin-right: 16px; background: #F5F5F5;line-height: 56px;text-align: center;font-size: 16px;color: #4A4F58;}
+    .supplierInfo .shop-tabsItem .tabs-list.active{ background: #FFE6DC;color: #FF5B00; }
     .supplierInfo .tabCon{width:100%;}
     .supplierInfo .infoBox{box-sizing:border-box;padding:16px;font-size:16px;line-height:22px;color:#4A4F58;background:#FFF;}
     .supplierInfo .infoBox .part{margin-top:30px}

+ 99 - 1
src/main/resources/static/js/common/serviceapi/supplier.service.js

@@ -1114,7 +1114,105 @@ var SupplierApi = {
             }).then(function (res) {
                 callback(res);
             });
+        },
+        // 供应商主页类别配置列表
+        getShopCategory: function (params, callback) {
+            Http.AjaxService({
+                url: '/user/shop/getShopCategory',
+                type:'get',
+                data:params,
+                json:false,
+            }).then(function (res) {
+                callback(res);
+            });
+        },
+        // 供应商主页类别配置列表排序
+        renewShopCategory: function (params, callback) {
+            Http.AjaxService({
+                url: '/user/shop/renewShopCategory',
+                type:'get',
+                data:params,
+                json:false,
+            }).then(function (res) {
+                callback(res);
+            });
+        },
+        // 供应商主页类别配置编辑回显
+        echoShopCategory: function (params, callback) {
+            Http.AjaxService({
+                url: '/user/shop/echoShopCategory',
+                type:'get',
+                data:params,
+                json:false,
+            }).then(function (res) {
+                callback(res);
+            });
+        },
+        // 供应商主页类别配置编辑选择啥拜佛
+        getShopProductList: function (params, callback) {
+            Http.AjaxService({
+                url: '/user/shop/getShopProductList',
+                type:'get',
+                data:params,
+                json:false,
+            }).then(function (res) {
+                callback(res);
+            });
+        },
+        // 供应商主页类别配置删除
+        removeCategory: function (params, callback) {
+            Http.AjaxService({
+                url: '/user/shop/removeCategory',
+                type:'get',
+                data:params,
+                json:false,
+            }).then(function (res) {
+                callback(res);
+            });
+        },
+        // 供应商主页--产品展示
+        getCategoryProducts: function (params, callback) {
+            Http.AjaxService({
+                url: '/commodity/Shop/getCategoryProducts',
+                type:'get',
+                data:params,
+                json:false,
+            }).then(function (res) {
+                callback(res);
+            });
+        },
+        // 供应商主页类别配置保存
+        saveShopCategory: function (params, callback) {
+            Http.AjaxService({
+                url: '/user/shop/saveShopCategory',
+                type:'post',
+                data:params,
+                json:false
+            }).then(function (res) {
+                callback(res);
+            });
+        },
+        // 供应商主页装扮banner图排序
+        renewShopBannerSort: function (params, callback) {
+            Http.AjaxService({
+                url: '/user/shop/renewShopBannerSort',
+                type:'get',
+                data:params,
+                json:false,
+            }).then(function (res) {
+                callback(res);
+            });
+        },
+        // 供应商主页装扮banner图排序
+        getShopHomeData: function (params, callback) {
+            Http.AjaxService({
+                url: '/user/shop/home/data',
+                type:'get',
+                data:params,
+                json:false,
+            }).then(function (res) {
+                callback(res);
+            });
         }
 
-
 };

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

@@ -15,11 +15,18 @@ var homeData = new Vue({
         hotListPageFloor:[],// 新皮橱窗
         homePageFloor:[],//楼层
         quickoperaList: [], // 快捷运营入口列表
+        dropScreenShow:false
     },
     filters: {
 
     },
     methods: {
+        showDropScreen(){
+            this.dropScreenShow = !this.dropScreenShow
+        },
+        hideDropScreen(){
+            this.dropScreenShow = false
+        },
         //处理金额
         filtersFormat(value) {
             if (value) {
@@ -31,10 +38,10 @@ var homeData = new Vue({
         // 快捷运营列表
         footList(arr) {
             if (!Array.isArray(arr)) return []
-            let newArr = [],
-                a = []
+            let newArr = [],a = []
+            let indexNum = isPC ? 4 : 10
             arr.map((item, index) => {
-                if (index !== 0 && index % 4 === 0) {
+                if (index !== 0 && index % indexNum === 0) {
                     newArr.push(a)
                     a = []
                     a.push(item)
@@ -159,7 +166,7 @@ var homeData = new Vue({
         GetHomeData: function(){//获取首页楼层
             var _self = this;
             PublicApi.GetHomeData({ source: 1,userId: _self.userId },function(response){
-                if(response.code == 0){
+                if(response.code === 0){
                     var data = response.data;
                     _self.homePageFloor = data.homePageFloor;
                     _self.hotListPageFloor =  data.pageFloorList;

+ 2 - 3
src/main/resources/static/js/mixins/cmSysMixins.js

@@ -22,7 +22,7 @@ var cmSysVitaMixins = function () {
                 handleShopKey:'',
                 consultParams:{
                     ip:'',
-                    shopId:'',
+                    shopProductId:'',
                     createTime:'',
                     consultMobile: '',
                     consultName: '',
@@ -54,7 +54,6 @@ var cmSysVitaMixins = function () {
             handleCmSysNetInfo() {
                 //设置定时器
                 const globalUserData = JSON.parse(localStorage.getItem('userInfo'));
-                console.log('handleProsKey',this.handleProsKey)
                 if(globalUserData){ this.cmSysParams.userId = globalUserData.userId * 1; }
                 if( this.handleProsId || this.handleShopId || this.handlearticleId || this.handleProsKey || this.handleShopKey ){
                     this.popUpParams.shopId = this.handleShopId
@@ -120,7 +119,7 @@ var cmSysVitaMixins = function () {
                 PublicApi.getUserPopUpInfo(params, function (response) {
                     if(response.code === 0){
                         _self.advertisement = response.data
-                        _self.consultParams.shopId =  response.data.shopId
+                        _self.consultParams.shopProductId =  response.data.shopProductId
                     }else{
                         console.log('error',response.msg);
                     }

+ 49 - 29
src/main/resources/static/js/product/detail.js

@@ -72,7 +72,8 @@ var productDetail = new Vue({
         isShowCaimeiShop:false,
         isHideButton:false,
         returnGoodsStutas: false, // 当前商品是否为特殊商品
-        helpContent: '' // 退货提示
+        helpContent: '', // 退货提示
+        tooltipVisible:false
     },
     filters: {
         TypeFormat: function (value) {
@@ -388,44 +389,63 @@ var productDetail = new Vue({
                 looseBody();
             }
         },
-        numberSub: function () {
-            this.number -= this.priceObj.step;
+        handleNumberSub () {
+            if(this.priceObj.step === 2){
+                this.number -= this.priceObj.minBuyNumber
+            }else{
+                this.number -= this.priceObj.step
+            }
             console.log('number', this.number)
             this.numberResize();
         },
-        numberAdd: function () {
-            this.number += this.priceObj.step;
+        handleNumberAdd () {
+            if(this.priceObj.step === 2){
+                this.number += this.priceObj.minBuyNumber
+            }else{
+                this.number += this.priceObj.step
+            }
             console.log('number', this.number)
             this.numberResize();
 
         },
-        numberChange: function () {
-            this.number = Math.ceil(this.number / this.priceObj.step) * this.priceObj.step;
-            this.numberResize();
-
+        handleNumberChange (event) {
+            const value = event.target.value;
+            console.log('value',value)
+           if (value < this.priceObj.minBuyNumber) {
+                this.number = this.priceObj.minBuyNumber
+            } else {
+                if (this.priceObj.step === 2) {
+                    if (value % this.priceObj.minBuyNumber !== 0) {
+                        this.$message.error('购买量必须为起订量的整数倍');
+                        this.number = this.priceObj.minBuyNumber
+                    } else if (value > this.priceObj.stock) {
+                        this.number = this.priceObj.stock
+                    } else {
+                        this.number = value
+                    }
+                }else{
+                    if (value > this.priceObj.stock) {
+                        this.productCount = this.priceObj.stock
+                    } else {
+                        this.productCount = value
+                    }
+                }
+            }
         },
-        numberResize: function () {
-            var _self = this;
+        numberResize () {
             if (this.number < this.priceObj.minBuyNumber) {
                 this.number = this.priceObj.minBuyNumber;
             }
             if (this.number > this.productStock) {
                 this.number = this.productStock;
             }
-            // if (this.priceObj.ladderPriceFlag) {
-            //     this.ladderList.forEach(function (ladder) {
-            //         if (_self.number >= ladder.buyNum) {
-            //             _self.priceObj.price = ladder.buyPrice;
-            //         }
-            //     });
-            // }
             console.log('number', this.number)
         },
         handleCollection:function (){// 收藏操作
-            var _self = this;
+            const _self = this;
             console.log('_self.userId',_self.userId)
-            if (_self.userId > 0) {
-                ProductApi.getProductUserLike({userId: _self.userId, productId: _self.productId}, function (response) {
+            if (this.userId > 0) {
+                ProductApi.getProductUserLike({userId: this.userId, productId: this.productId}, function (response) {
                     if (response.code === 0 && response.data) {
                         _self.collectionType = !_self.collectionType
                         CAIMEI.dialog(response.data,false);
@@ -434,7 +454,7 @@ var productDetail = new Vue({
                     }
                 });
             }else{
-                _self.toLogin();
+                this.toLogin();
             }
         },
         toLogin: function () {
@@ -606,24 +626,24 @@ var productDetail = new Vue({
                     pros.number--
                 }
             }
-            _self.numberChange(pros);
+            this.numberChange(pros);
         },
         supportingNumberAdd: function(pros){  // 配套商品数量加加
-            var _self = this;
+            const _self = this;
             if (pros.step === 2) {
                 pros.number += pros.minBuyNumber
             } else {
                 pros.number++
             }
-            _self.numberChange(pros);
+            this.numberChange(pros);
         },
         supportingNumberChange: function(pros){ // 配套商品数量输入
-            var _self = this;
+            const _self = this;
             pros.number = Math.ceil(pros.number/pros.step)*pros.step;
-            _self.numberChange(pros);
+            this.numberChange(pros);
         },
-        numberChange: function(pros){
-            var _self = this;
+        numberChange(pros){
+            const _self = this;
             if(pros.ladderPriceFlag){
                 pros.ladderPrices.forEach(function(ladder){
                     if(pros.number>=ladder.buyNum){

+ 122 - 0
src/main/resources/static/js/supplier-center/shop/category-edit.js

@@ -0,0 +1,122 @@
+;
+var decoration = new Vue({
+    el:'#decoration',
+    mixins: [categoryMixins,cmSysVitaMixins],
+    data:{
+        rules: {
+            category: [{ required: true, message: '请输入类别名称', trigger: 'blur' }],
+            sort: [{ required: true, message: '请输入类别排序', trigger: 'blur' }],
+            products: [{ required: true, type: 'array', message: '请添加一个商品', trigger: ['change'] }],
+        },
+        shopId:'',
+        formType:'',
+        dialogVisible:false,
+        productList:[],
+        disguiseForm:{
+            id:'',
+            shopId:'',
+            category:'',
+            sort:'',
+            productIds:'',
+            products:[]
+        },
+        productRadio:[]
+    },
+    computed: {
+        delDisabled() {
+            return this.productRadio.length === 0
+        }
+    },
+    methods:{
+        // 显示选择商品弹窗
+        handleDialogVisible() {
+            this.getList()
+            this.dialogVisible = true
+        },
+        // 选择已选择商品
+        handleSelecChange(row) {
+            this.productRadio = row
+            console.log('productRadio', this.productRadio)
+        },
+        // 批量删除已选择
+        handleAlldel(){
+            this.$confirm('确定全部删除吗?', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                this.disguiseForm.productIds =''
+                this.disguiseForm.products =[]
+            })
+        },
+        // 获取广告图片列
+        echoShopCategory(params) {
+            const _this = this;
+            SupplierApi.echoShopCategory(params, function (res) {
+                if (res.code === 0) {
+                    const data = res.data
+                    _this.disguiseForm = { ...this.disguiseForm, ...data }
+                }
+            });
+        },
+        // 提交保存
+        handleSavsDisguise(){
+            const  _this = this;
+            this.$refs['dataForm'].validate(valid => {
+                if (valid) {
+                    console.log('disguiseForm',_this.disguiseForm)
+                    _this.$confirm('确定提交保存数据吗?', '提示', {
+                        confirmButtonText: '确定',
+                        cancelButtonText: '取消',
+                        type: 'warning'
+                    }).then(() => {
+                        const productIds = []
+                        _this.disguiseForm.products.forEach((ele) => {
+                            productIds.push(ele.productId)
+                        })
+                        this.disguiseForm.productIds = productIds.join(',')
+                        _this.saveShopCategory(_this.disguiseForm)
+                    })
+                } else {
+                    return false
+                }
+            })
+        },
+        // 获取广告图片列表
+        saveShopCategory(params) {
+            const _this = this;
+            SupplierApi.saveShopCategory({params:JSON.stringify(params)}, function (res) {
+                if (res.code === 0) {
+                    console.log(res);
+                    _this.$message({ message: '保存成功',type: 'success'});
+                    setTimeout(()=>{
+                        window.location.href = '/supplier/disguise.html';
+                    },2000)
+                }
+            });
+        },
+        handleDeletePros(index) {
+            // 删除商品
+            this.$confirm('确定删除吗?', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                this.disguiseForm.products.splice(index, 1)
+            })
+        }
+    },
+    mounted:function () {
+        if (globalUserData) {
+            this.listQuery.shopId =this.disguiseForm.shopId = globalUserData.shopId;
+        }
+        this.formType = CAIMEI.getUrlParam('type') ? CAIMEI.getUrlParam('type') : 'add' ;
+        this.disguiseForm.id = this.listQuery.categoryId =  CAIMEI.getUrlParam('type') ? CAIMEI.getUrlParam('id') : '';
+        if(this.formType === 'edit'){
+            this.echoShopCategory({ id:this.disguiseForm.id})
+        }
+        // this.getList();
+        $('.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(1).addClass("on");
+    }
+})

+ 34 - 0
src/main/resources/static/js/supplier-center/shop/disguise.js

@@ -0,0 +1,34 @@
+;
+var decoration = new Vue({
+    el:'#decoration',
+    mixins: [disguiseMixins,cmSysVitaMixins],
+    data:{
+        iconflag:true,
+        messageVisible:false,
+        dialogVisible:false,
+        logoShow:false,
+        activeName:'first',
+    },
+    methods:{
+        handleClick(tab, event) {
+            if(this.activeName === 'first'){
+                this.getCategoryList()
+            }else{
+                this.getBannerList()
+            }
+        }
+    },
+    mounted:function () {
+        if (globalUserData) {
+            this.categoryQuery.shopId = this.bannerQuery.shopId = this.bannerForm.shopId = globalUserData.shopId;
+        }
+        if(isPC){
+            this.layout ='total, prev, pager, next, jumper';
+        }else{
+            this.layout ='total, prev, pager, next';
+        }
+        this.getCategoryList();
+        $('.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(1).addClass("on");
+    }
+})

+ 99 - 0
src/main/resources/static/js/supplier-center/shop/mixins/categoryMixins.js

@@ -0,0 +1,99 @@
+const categoryMixins = function () {
+    return {
+        data() {
+            return {
+                visible: true,
+                listQuery: {
+                    categoryId: '',
+                    name: '',
+                    shopId:'',
+                    pageNum:1,
+                    pageSize:100
+                },
+                list: [],
+                total: 0,
+                layout:'total, prev, pager, next, jumper',
+                productSelRadio: null,
+                isLoading: true
+            }
+        },
+        computed: {
+            disabled() {
+                return this.productSelRadio === null
+            }
+        },
+        mounted () {
+
+        },
+        methods: {
+            // 获取所有供应商列表
+            getList() {
+                this.list = []
+                this.listQuery.pageNum = 1
+                this.getShopList()
+            },
+            //切换类别页码
+            handleCategoryChange(val){
+                this.listQuery.pageNum = val;
+                this.getShopList();
+            },
+            // 获取所有供应商列表
+            getShopList() {
+                const _this = this;
+                SupplierApi.getShopProductList(this.listQuery, function (res) {
+                    if (res.code === 0) {
+                        const data = res.data
+                        if(_this.disguiseForm.products.length>0){
+                            data.results.forEach((item) => {
+                                // 在disguiseForm.products数组中查找是否存在与当前元素的productId匹配的元素
+                                const prosItem = _this.disguiseForm.products.find((prosItem) => prosItem.productId === item.productId);
+                                if (prosItem) {
+                                    item.flag = false; // 如果找到匹配的productId,将flag设置为false
+                                }
+                            });
+                        }
+                        _this.list = data.results
+                        console.log('list',_this.list)
+                        _this.total = data.totalRecord
+                        _this.isLoading = false
+                    }
+                });
+            },
+            // 选择供应商
+            handleSelectionChange(row) {
+                this.productSelRadio = row
+                console.log('row', row)
+            },
+            // 确认选择供应商
+            handleConfirm() {
+                this.disguiseForm.products =[...this.disguiseForm.products, ...this.productSelRadio]
+                this.handleCanle()
+            },
+            handleCanle() {
+                // 取消弹窗
+               this.dialogVisible = false
+            },
+            // 已选择的禁用勾选框
+            selectable(row) {
+                if (row.flag) {
+                    return true
+                } else {
+                    return false
+                }
+            },
+            checkedInput(event, type) {
+                let pattern = ''
+                switch (type) {
+                    case 1:
+                        pattern = /[^\d]/g
+                        break
+                    case 2:
+                        pattern = /[^u4E00-u9FA5|d|a-zA-Z|rns,.?!,。?!…—&$=()-+/*{}[]]|s/g
+                        break
+                }
+                return event.replace(pattern, '')
+            }
+        }
+    }
+}();
+

+ 224 - 0
src/main/resources/static/js/supplier-center/shop/mixins/disguiseMixins.js

@@ -0,0 +1,224 @@
+const disguiseMixins = function () {
+    return {
+        data() {
+            return {
+                total:0,
+                bannerTotal:0,
+                layout: '',
+                listLoading:true,
+                bannerLoading:true,
+                categoryQuery:{
+                    category: '',
+                    shopId:'',
+                    pageNum:1,
+                    pageSize:10
+                },
+                bannerQuery:{
+                    title: '',
+                    shopId:'',
+                    pageNum:1,
+                    pageSize:10
+                },
+                formTitle:'添加广告图',
+                bannerForm:{
+                    id: '',
+                    sort:1,
+                    shopId:'',
+                    title:'',
+                    link:'',
+                    info:'',
+                    image:'',
+                },
+                categoryList:[],
+                bannerList:[]
+            }
+        },
+        computed: {
+
+        },
+        mounted () {
+
+        },
+        methods: {
+            //切换类别页码
+            handleCategoryChange(val){
+                this.categoryQuery.pageNum = val;
+                this.getCategoryList();
+            },
+            // 获取类别列表
+            getCategoryList() {
+                this.categoryQuery.pageNum = 1
+                this.categoryList=[]
+                this.getDisguiseCategory()
+            },
+            // 获取类别列表
+            getDisguiseCategory(){
+                const _self = this;
+                SupplierApi.getShopCategory(this.categoryQuery, function (res) {
+                    if (res.code === 0) {
+                        const data = res.data
+                        if (data.results.length > 0) {
+                            _self.categoryList = data.results
+                            _self.total = data.totalRecord
+                        }
+                        _self.listLoading = false
+                    }
+                });
+            },
+            // 类别排序
+            handleCategorySort(row) {
+                const params = { id:row.id,sort:row.sort }
+                this.renewShopCategory(params)
+            },
+            // 编辑类别排
+            handleEditCategory(row) {
+                window.location.href='/supplier/category-edit.html?type=edit&id='+row.id;
+            },
+            // 类别排序
+            renewShopCategory(params){
+                const _this = this;
+                console.log('params',params)
+                SupplierApi.renewShopCategory(params, function (res) {
+                    if (res.code === 0) {
+                        _this.getCategoryList()
+                    }
+                })
+            },
+            // 删除类别
+            handleDelCategory(row){
+                const _this = this;
+                this.$confirm('确定要删除该类别吗?', '提示', {
+                    confirmButtonText: '确定',
+                    cancelButtonText: '取消',
+                    type: 'warning'
+                }).then(() => {
+                    this.removeCategory({id:row.id})
+                })
+            },
+            // 删除类别
+            removeCategory(params){
+                const _this = this;
+                console.log('params',params)
+                SupplierApi.removeCategory(params, function (res) {
+                    if (res.code === 0) {
+                        _this.$message({ message: '删除成功',type: 'success'});
+                        _this.getCategoryList()
+                    }
+                })
+            },
+            //切换广告图页码
+            handleBannerChange(val){
+                this.bannerQuery.pageNum = val;
+                this.getBannerList();
+            },
+            // 获取广告图列表
+            getBannerList() {
+                this.bannerQuery.pageNum = 1
+                this.bannerList=[]
+                this.getDisguiseBanner()
+            },
+            // 获取广告图列表
+            getDisguiseBanner(){
+                const _self = this;
+                SupplierApi.dressUpList(this.bannerQuery, function (res) {
+                    if (res.code === 0) {
+                        const data = res.data
+                        if (data.results.length > 0) {
+                            _self.bannerList = data.results
+                            _self.bannerTotal = data.totalRecord
+                        }
+                        _self.bannerLoading = false
+                    }
+                });
+            },
+            // banner排序
+            handleBannerSort(row) {
+                const params = { id:row.id,sort:row.sort }
+                this.renewShopBannerSort(params)
+            },
+            // banner排序
+            renewShopBannerSort(params){
+                const _this = this;
+                SupplierApi.renewShopBannerSort(params, function (res) {
+                    if (res.code === 0) {
+                        _this.getBannerList()
+                    }
+                })
+            },
+            // 添加广告图
+            handleAddBanner() {
+                this.formTitle = '添加广告图';
+                this.dialogVisible = true;
+                this.iconflag=true;
+                this.logoShow =false;
+            },
+            // 编辑广告图
+            handleEditBanner(row) {
+                this.formTitle = '编辑广告图';
+                this.bannerForm = {...this.bannerForm ,...row}
+                this.dialogVisible = true
+                this.iconflag=true;
+                this.logoShow = true;
+            },
+            // 删除广告图
+            handleDelBanner(row){
+                const _this = this;
+                this.$confirm('确定要删除该图片吗?', '提示', {
+                    confirmButtonText: '确定',
+                    cancelButtonText: '取消',
+                    type: 'warning'
+                }).then(() => {
+                    this.deleteShopBanner(row.id)
+                    _this.getBannerList()
+                })
+            },
+            // 删除广告图
+            deleteShopBanner(id){
+                const _this = this;
+                SupplierApi.deleteShopBanner({id: id}, function (res) {
+                    if (res.code === 0) {
+                        CAIMEI.dialog('删除成功')
+                        _this.getBannerList()
+                    }
+                })
+            },
+            handleCloseBanner() {
+                this.dialogVisible = false;
+                this.bannerForm.title = '';
+                this.bannerForm.sort = 1;
+                this.bannerForm.link = '';
+                this.bannerForm.info = '';
+                this.bannerForm.image = '';
+            },
+            handleUploadlogo() { //上传图片
+                const _this = this;
+                const inputDOM = this.$refs.images;
+                const file = inputDOM.files;
+                const formData = new FormData();
+                formData.append('file', file[0]);
+                SupplierApi.uploadimg(formData, function (response) {
+                    _this.bannerForm.image = response.data;
+                    _this.logoShow = true;
+                    _this.iconflag = false;
+                    event.target.value = '';
+                });
+            },
+            handleSaveBanner(){//提交
+                if(this.bannerForm.image===''){
+                    CAIMEI.dialog('请上传广告图片')
+                    return
+                }
+                this.sveShopBanner(this.bannerForm)
+            },
+            sveShopBanner(params){
+                const _this = this;
+                SupplierApi.ShopBanner(params, function (res) {
+                    _this.$message({ message: '保存成功',type: 'success'});
+                    _this.getBannerList();
+                    _this.dialogVisible = false
+                })
+            },
+        }
+    }
+}();
+

+ 78 - 51
src/main/resources/static/js/supplier/index.js

@@ -6,7 +6,10 @@ var supplierHome = new Vue({
         userId: 0,
         supplierInfo:{},
         supplierBanner: [],
+        shopCategory: [],
         mainProducts:[],
+        choiceIndex:'',
+        handleTabIndex:1,
         params: {
             size: 12,
             num: 1,
@@ -15,6 +18,8 @@ var supplierHome = new Vue({
         },
         listRecord:0,
         productLists:[],
+        categoryProducts:[],// 类别商品列表
+        isShopAll:true,
         addhtml:'<span class="tag">美博会</span>'
     },
     computed: {
@@ -28,7 +33,7 @@ var supplierHome = new Vue({
                 },
                 {
                     type: 2,
-                    title: '供应商产品',
+                    title: '全部商品',
                     productList: this.productLists,
                     showEmpty: true
                 }
@@ -41,8 +46,11 @@ var supplierHome = new Vue({
         }
     },
     methods: {
+        handleTabClick(type){
+            this.handleTabIndex = type
+        },
         // 是否显示vip标签价格
-        showVipPriceTag: function(pros){
+        showVipPriceTag(pros){
             //非会员
             // if(!GLOBAL_VIP_FLAG === 1) return false;
             // 商品所有机构可见
@@ -54,20 +62,14 @@ var supplierHome = new Vue({
             // 其它
             return false;
         },
-        getShopInfo: function(){
-            var _self = this;
-            $.getJSON(coreServer + "/user/shop/home/data",{shopId: this.params.id}).done(function (r) {
-                if (r.code === 0 && r.data) {
-                    _self.supplierInfo = r.data;
-                }
-            });
-        },
-        getBanners: function(){
-            var _self = this;
-            $.getJSON(coreServer + "/user/shop/home/images",{shopId: this.params.id}).done(function (r) {
-                if (r.code === 0 && r.data) {
-                   _self.supplierBanner = r.data;
-                    _self.supplierBanner = r.data;
+        getShopInfo(){
+            const _self = this;
+            SupplierApi.getShopHomeData({shopId: this.params.id}, function (res) {
+                if (res.code === 0) {
+                    const data = res.data
+                    _self.supplierInfo = data;
+                    _self.supplierBanner = data.shopHomeImages // 供应商轮播
+                    _self.shopCategory = data.shopCategory// 供应商类别
                     setTimeout(function(){
                         if (isPC) {
                             $('#supplierBanner').slide({
@@ -75,7 +77,7 @@ var supplierHome = new Vue({
                                 ,titCell:".swiper-pagination span"
                                 ,effect: "leftLoop"
                                 ,prevCell:".swiper-button-prev"
-		                        ,nextCell:".swiper-button-next"
+                                ,nextCell:".swiper-button-next"
                                 ,interTime: 2000
                                 ,autoPlay: true
                                 ,autoPage: false
@@ -102,7 +104,44 @@ var supplierHome = new Vue({
                 }
             });
         },
-        getMainProducts: function(){
+        // 点击全部
+        handleChangeAll(){
+            this.choiceIndex = ''
+            this.isShopAll = true
+            this.getMainProducts()
+            this.getProductLists()
+        },
+        handleCategory(category, index){
+            this.isShopAll = false
+            this.choiceIndex = index
+            this.getCategoryProducts({ shopId:this.handleShopId,categoryId:category.id })
+        },
+        // 获取类别商品列表
+        getCategoryProducts(params){
+            const _self = this;
+            SupplierApi.getCategoryProducts(params, function (res) {
+                if (res.code === 0) {
+                    if(_self.userId && _self.userId>0){
+                        const productIdArr = [];
+                        res.data.map((item) =>{
+                            // 0公开价格 1不公开价格 2仅对会员机构公开
+                            if (item.priceFlag !== 1) {
+                                productIdArr.push(item.productId)
+                            }
+                        });
+                        setProductPrice(res.data, productIdArr.join(","), _self.userId, function () {
+                            _self.$forceUpdate();
+                        });
+                    }
+                    _self.categoryProducts = res.data
+                    setTimeout(function(){
+                        // 图片懒加载
+                        $("img[data-original]").lazyload();
+                    },500);
+                }
+            });
+        },
+        getMainProducts(){
             var _self = this;
             SupplierApi.GetShopProductMain(
                 {
@@ -121,21 +160,19 @@ var supplierHome = new Vue({
                             });
                             setProductPrice(res.data, productIdArr.join(","), _self.userId, function () {
                                 _self.$forceUpdate();
-                                setTimeout(function(){
-                                    // 图片懒加载
-                                    $("img[data-original]").lazyload();
-                                },500);
                             });
                         }
                         _self.mainProducts = res.data;
-                    } else {
-                        _self.$message.error(res.msg)
+                        setTimeout(function(){
+                            // 图片懒加载
+                            $("img[data-original]").lazyload();
+                        },500);
                     }
                 }
             );
         },
-        getProductLists: function(){
-            var _self = this;
+        getProductLists(){
+            const _self = this;
             SupplierApi.GetSearchQueryProductSupplier(
                 {
                     keyword: _self.params.keyword,
@@ -146,8 +183,7 @@ var supplierHome = new Vue({
                 },
                 function (res) {
                     if (res.code === 0 && res.data) {
-                        var result = JSON.parse(res.data);
-                        console.log('result',result)
+                        const result = JSON.parse(res.data);
                         _self.listRecord = result.total;
                         var resultData = setSearchProductList(result.items, _self.userId, function () {
                             _self.$forceUpdate();
@@ -160,15 +196,13 @@ var supplierHome = new Vue({
                         _self.productLists = _self.productLists.concat(resultData);
                         console.log('productLists',_self.productLists)
                         _self.requestFlag = true;
-                    } else {
-                        _self.$message.error(res.msg)
                     }
                 }
             );
         },
-        PromotionsFormat:function(promo){//促销活动类型数据处理
+        PromotionsFormat(promo){//促销活动类型数据处理
             if(promo!=null){
-                if(promo.type == 1 && promo.mode == 1){
+                if(promo.type === 1 && promo.mode === 1){
                     return true
                 }else{
                     return false
@@ -176,14 +210,14 @@ var supplierHome = new Vue({
             }
             return false
         },
-        keyupSearch: function(event) {
+        keyupSearch(event) {
             // 搜索输入框 按回车键搜索
             var keyCode = event.keyCode || event.which;
             if(keyCode === 13){
                 this.supplierSearch();
             }
         },
-        supplierSearch: function(){
+        supplierSearch(){
             if (this.params.keyword.length < 2) {
                 $.confirm({
                     useBootstrap: false,
@@ -203,6 +237,8 @@ var supplierHome = new Vue({
                 });
                 return false;
             }
+            this.choiceIndex = ''
+            this.isShopAll = true
             this.productLists = [];
             this.getProductLists();
             var floorScroll = $('#supProduct').offset().top;
@@ -212,32 +248,23 @@ var supplierHome = new Vue({
             location.href='/upgrade.html';
         }
     },
-    created: function () {
-        // this.params.id = getUrlParam("id") ? getUrlParam("id") * 1 : 0;
-        var paramsArr = window.location.pathname.split(".")[0].split("-");
+    created(){
+        const paramsArr = window.location.pathname.split(".")[0].split("-");
         this.params.id = this.cmSysParams.shopId = this.handleShopId =  paramsArr.length>=1 ? paramsArr[1]*1 : 0;
         this.cmSysParams.pageType = 14;
         this.cmSysParams.pageLabel = `供应商主页`;//设置统计数据标签
-        if(this.params.id !== 0) {
-            this.getShopInfo();
-            this.getBanners();
-        }
     },
     mounted: function () {
+        const _self = this;
+        const userInfo = localStorage.getItem('userInfo');
         if(this.params.id !== 0) {
+            this.getShopInfo();
             this.getMainProducts();
             this.getProductLists();
         }
-         var userInfo = localStorage.getItem('userInfo');
-            if(userInfo){
-                this.userId = JSON.parse(userInfo).userId;
-            }
-        var _self = this;
-        $('.supplierInfo').slide({
-            mainCell:".tabCon"
-            ,titCell:".tabTit span"
-            ,trigger: "click"
-        });
+        if(userInfo){
+            this.userId = JSON.parse(userInfo).userId;
+        }
         //上垃加载更多
         $(window).on('scroll', function(){
             var scrollTop = $(this).scrollTop();

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

@@ -38,28 +38,47 @@
         <a class="swiper-button-prev" href="javascript:void(0)"></a>
         <a class="swiper-button-next" href="javascript:void(0)"></a>
     </div>
-    <div class="mNavBox h5Only clear">
-        <!--导航菜单-->
-        <a th:each="menu: ${topMenuList}" class="nav" th:href="${menu.link}">
-            <img class="nav-icon" th:src="${menu.icon}" th:alt="${menu.name}">
-            <p th:text="${menu.name}"></p>
-        </a>
-    </div>
+    <template v-if="!isPC">
+        <div class="mNavBox h5Only clear">
+            <!--导航菜单-->
+            <div class="mNavBox-main">
+                <a class="nav active" href="/"><p>首页</p> </a>
+                <a th:each="menu,stat: ${topMenuList}" class="nav" th:href="${menu.link}" th:if="${stat.index} < 8">
+                    <img class="nav-icon" th:src="${menu.icon}" th:alt="${menu.name}">
+                    <p th:text="${menu.name}"></p>
+                </a>
+            </div>
+            <div class="mNavBox-down" :class="dropScreenShow ? 'none' : ''" @click="showDropScreen"><i class="icon mIcon"></i></div>
+            <div class="mNavBox-dropdown" v-if="dropScreenShow">
+                <a class="drop-item" href="javascript:void(0)">全部分类</a>
+                <a class="drop-item active" href="/">首页</a>
+                <a th:each="menu: ${topMenuList}" class="drop-item" th:href="${menu.link}">
+                    <p th:text="${menu.name}"></p>
+                </a>
+            </div>
+        </div>
+        <div class="mNavBox-dropdown-more" v-if="dropScreenShow" @click="hideDropScreen"></div>
+    </template>
     <div class="quickOperation" v-if="quickoperaList.length > 0 && !isPC" v-cloak>
         <van-swipe class="my-swipe" :autoplay="false">
             <van-swipe-item v-for="(item, index) in quickoperaList" :key="item">
-                <div class="carousel-list">
+                <div class="carousel-list clear">
                     <div class="list" v-for="(i, o) in item" :key="o" @click="goQuickOpera(i)">
                         <div class="list-content">
                             <div class="list-icon">
                                 <van-image style="width: 100%; height: 100%;" :src="i.icon" />
                             </div>
                             <div class="list-title">
-                                <div class="title-1">
-                                    <div class="title-1-item">{{i.name}}</div>
-                                    <div class="title-2-item">GO></div>
-                                </div>
-                                <div class="title-2">{{i.remark || ''}}</div>
+                                <template v-if="isPC">
+                                    <div class="title-1">
+                                        <div class="title-1-item"></div>
+                                        <div class="title-2-item">GO></div>
+                                    </div>
+                                    <div class="title-2">{{i.remark || ''}}</div>
+                                </template>
+                                <template v-else>
+                                    <p>{{i.name}}</p>
+                                </template>
                             </div>
                         </div>
                     </div>

+ 3 - 4
src/main/resources/templates/product/detail.html

@@ -251,10 +251,9 @@
                     </div>
                     <div v-show="GLOBAL_USER_ID && GLOBAL_USER_ID>0" class="row"><span class="l">采购量:</span>
                         <span class="number">
-                            <em class="sub" @click="numberSub">-</em>
-                            <input type="number" :value="number" v-model="number" maxlength='6'
-                                   @change="numberChange">
-                            <em class="add" @click="numberAdd">+</em>
+                            <em class="sub" @click="handleNumberSub">-</em>
+                            <input type="number" :value="number" v-model="number" maxlength='6' @change="handleNumberChange">
+                            <em class="add" @click="handleNumberAdd">+</em>
                         </span>
                         <input type="hidden" th:value="*{step}">
                     </div>

+ 127 - 0
src/main/resources/templates/supplier-center/components/disguise-banner.html

@@ -0,0 +1,127 @@
+<div class="category-main">
+  <div class="head-top clear">
+    <div class="form-row low">
+      <span v-if="isPC">标题名称:</span>
+      <el-input v-model="bannerQuery.title"
+                class="state"
+                placeholder="请输入标题名称"
+                clearable
+                @keyup.enter.native="getBannerList"
+                @clear="getBannerList">
+      </el-input>
+    </div>
+    <div id="newBtn">
+      <el-button type="primary" @click="getBannerList">查询</el-button>
+      <el-button type="primary" @click="getBannerList">一键排序</el-button>
+      <el-button type="primary" @click="handleAddBanner">添加广告图</el-button>
+    </div>
+  </div>
+  <el-table
+          :data="bannerList"
+          v-loading="bannerLoading"
+          element-loading-text="Loading"
+          border
+          fit
+          height="500px"
+          highlight-current-row
+          :header-cell-style="{background:'#E1E1E1',color:'#606266'}"
+  >
+    <el-table-column label="轮播图" align="center" prop="image" width="120">
+      <template slot-scope="{ row }">
+        <el-popover v-if="row.image" placement="top-start" title="" width="400" trigger="hover">
+          <img :src="row.image" alt="" style="width: 400px; height: 120px" />
+          <img slot="reference" :src="row.image" alt="" style="width: 120px; height: 40px" />
+        </el-popover>
+        <span v-else>--</span>
+      </template>
+    </el-table-column>
+    <el-table-column label="标题" align="center" prop="title"></el-table-column>
+    <el-table-column label="链接" align="center" prop="link">
+      <template slot-scope="{row}">
+        <span class="tablie" >
+           <a :href="row.link" v-text="row.link"></a>
+        </span>
+      </template>
+    </el-table-column>
+    <el-table-column label="排序" width="80" align="center">
+      <template slot-scope="{ row }">
+        <el-input
+                v-model="row.sort"
+                maxlength="4"
+                minlength="1"
+                @blur="handleBannerSort(row)"
+                style="text-align: center;">
+        </el-input>
+      </template>
+    </el-table-column>
+    <el-table-column label="说明" align="center" prop="info">
+      <template slot-scope="{row}">
+        <span>{{  row.info }}</span>
+      </template>
+    </el-table-column>
+    <el-table-column label="创建时间" align="center" prop="addTime" width="100">
+      <template slot-scope="{row}">
+        <span v-if="row.addTime">{{  row.addTime }}</span>
+        <span v-else>--</span>
+      </template>
+    </el-table-column>
+    <el-table-column label="操作" align="center">
+      <template slot-scope="{row}">
+          <el-button type="primary" style="margin: 5px;" size="mini" plain  @click="handleEditBanner(row)">编辑</el-button>
+          <el-button type="primary" style="margin: 5px;" size="mini" plain  @click="handleDelBanner(row)">删除</el-button>
+      </template>
+    </el-table-column>
+  </el-table>
+</div>
+<div class="pagination">
+  <el-pagination
+          background
+          :small="false"
+          @current-change="handleBannerChange"
+          :current-page="bannerQuery.pageNum"
+          :page-size="bannerQuery.pageSize"
+          :layout="layout"
+          :total="bannerTotal"
+  >
+  </el-pagination>
+</div>
+<div class="bgFrom" :class="dialogVisible?'show':''" v-if="dialogVisible">
+  <div class="modalForm">
+    <div class="modal-header">
+      <span class="shou-address add-main-image" v-text="formTitle"></span>
+      <span class="icon mIcon close" @click="handleCloseBanner"></span>
+    </div>
+    <div class="modal-content">
+      <div class="modal-div">
+        <span>标题 :</span> <input type="text" name="title" v-model="bannerForm.title" class="modal-input-common keyword_filter">
+      </div>
+      <div class="modal-div">
+        <span>排序 :</span> <input type="text" name="sort" v-model="bannerForm.sort" class="modal-input-common keyword_filter">
+      </div>
+      <div class="modal-div">
+        <span> 链接 :</span>
+        <input type="text" v-model="bannerForm.link" placeholder="例如:http://www.caimei365.com"class="modal-input-common keyword_filter" name="link">
+      </div>
+      <div class="modal-div">
+        <span> 说明 :</span> <input type="text" v-model="bannerForm.info" class="modal-input-common keyword_filter" name="info">
+      </div>
+      <div class="upload-img">
+        <div class="label">
+          <span class="red up">*</span>
+          <span class="up">图片:</span>
+        </div>
+        <div class="upimg">
+          <img class="center" :src="bannerForm.image" v-if="logoShow">
+          <i class="icon mIcon add" v-if="iconflag"></i>
+          <input type="file" ref="images" class="add-pic"  id="uploadfile" accept="image/*" @change="handleUploadlogo"/>
+        </div>
+        <div >
+          <p class="Note">注:仅支持<span class="colorstyle">jpg、gif、jpeg、png、emp</span>,文件小于<span class="colorstyle">5M</span></p>
+        </div>
+      </div>
+      <div class="saveBtn">
+        <el-button type="primary" size="mini" @click="handleSaveBanner">保存</el-button>
+      </div>
+    </div>
+  </div>
+</div>

+ 73 - 0
src/main/resources/templates/supplier-center/components/disguise-category.html

@@ -0,0 +1,73 @@
+<div class="category-main">
+  <div class="head-top clear">
+    <div class="form-row low">
+      <span v-if="isPC">类别名称:</span>
+      <el-input
+              v-model="categoryQuery.category"
+              class="state"
+              placeholder="请输入类别名称"
+              clearable
+              @keyup.enter.native="getCategoryList"
+              @clear="getCategoryList"
+      ></el-input>
+    </div>
+    <div id="newBtn">
+      <el-button type="primary" @click="getCategoryList">查询</el-button>
+      <el-button type="primary" @click="getCategoryList">一键排序</el-button>
+      <a href="/supplier/category-edit.html">
+        <el-button type="primary">添加类别</el-button>
+      </a>
+    </div>
+  </div>
+  <el-table
+          :data="categoryList"
+          v-loading="listLoading"
+          element-loading-text="Loading"
+          border
+          fit
+          height="500px"
+          highlight-current-row
+          :header-cell-style="{background:'#E1E1E1',color:'#606266'}"
+  >
+    <el-table-column label="类别名称" align="center" prop="category">
+      <template slot-scope="{row}">
+        <span>{{  row.category }}</span>
+      </template>
+    </el-table-column>
+    <el-table-column label="商品数量" align="center" prop="productNumber" width="100"></el-table-column>
+    <el-table-column label="排序" width="100" align="center">
+      <template slot-scope="{ row }">
+        <el-input
+                v-model="row.sort"
+                maxlength="4"
+                minlength="1"
+                @blur="handleCategorySort(row)"
+                style="text-align: center;">
+        </el-input>
+      </template>
+    </el-table-column>
+    <el-table-column label="创建时间" align="center" prop="addTime">
+      <template slot-scope="{row}">
+        <span>{{  row.addTime }}</span>
+      </template>
+    </el-table-column>
+    <el-table-column label="操作" align="center">
+      <template slot-scope="{row}">
+          <el-button type="primary" style="margin: 5px;" size="mini" plain  @click="handleEditCategory(row)">编辑</el-button>
+          <el-button type="primary" style="margin: 5px;" size="mini" plain  @click="handleDelCategory(row)">删除</el-button>
+      </template>
+    </el-table-column>
+  </el-table>
+</div>
+<div class="pagination">
+  <el-pagination
+          background
+          :small="false"
+          @current-change="handleCategoryChange"
+          :current-page="categoryQuery.pageNum"
+          :page-size="categoryQuery.pageSize"
+          :layout="layout"
+          :total="total"
+  >
+  </el-pagination>
+</div>

+ 56 - 0
src/main/resources/templates/supplier-center/components/disguise-dialog.html

@@ -0,0 +1,56 @@
+<el-dialog
+        title="添加商品"
+        :visible.sync="dialogVisible"
+        width="900px"
+        :close-on-click-modal="false"
+        :show-close="false"
+>
+  <div class="filter-container">
+    <div class="filter-control">
+      <span>商品名称:</span>
+      <el-input
+              v-model="listQuery.name"
+              placeholder="商品名称"
+              clearable
+              style="width: 160px"
+              @keyup.enter.native="getList"
+              @clear="getList"></el-input>
+    </div>
+    <div class="filter-control">
+      <el-button type="primary" @click="getList"> 查询 </el-button>
+    </div>
+  </div>
+  <el-table
+          ref="table"
+          v-loading="isLoading"
+          :data="list"
+          height="400px"
+          border
+          @selection-change="handleSelectionChange"
+  >
+    <el-table-column type="selection" width="55" :selectable="selectable"></el-table-column>
+    <el-table-column label="商品图片" align="center" prop="image" width="80">
+      <template slot-scope="{row}">
+        <img :src="row.image" :alt="row.name" style="width: 40px;height: 40px;">
+      </template>
+    </el-table-column>
+    <el-table-column label="商品名称" prop="name" align="center"></el-table-column>
+  </el-table>
+  <!-- 页码 -->
+  <div class="pagination">
+    <el-pagination
+            background
+            :small="false"
+            @current-change="handleCategoryChange"
+            :current-page="listQuery.pageNum"
+            :page-size="listQuery.pageSize"
+            :layout="layout"
+            :total="total"
+    >
+  </div>
+  </el-pagination>
+  <div slot="footer">
+    <el-button @click="handleCanle"> 取 消 </el-button>
+    <el-button type="primary" :disabled="disabled" @click="handleConfirm"> 确 定 </el-button>
+  </div>
+</el-dialog>

+ 1 - 1
src/main/resources/templates/supplier-center/components/tableft.html

@@ -14,7 +14,7 @@
         <span class="tab">我的店铺</span>
         <div class="con" style="display:none">
             <a :href="'/supplier-'+GLOBAL_SHOP_ID+'.html'">查看店铺</a>
-            <a href="/supplier/decoration.html">装扮主页</a>
+            <a href="/supplier/disguise.html">装扮主页</a>
             <a href="/supplier/release.html" v-if="isForbidTabs">发布商品</a>
             <a href="/supplier/goods.html">我的商品</a>
             <a href="/supplier/brand.html">品牌管理</a>

+ 82 - 0
src/main/resources/templates/supplier-center/shop/category-edit.html

@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<html lang="zh-CN" xmlns:th="https://www.thymeleaf.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      xsi:schemaLocation="https://www.thymeleaf.org ">
+<head>
+    <title>采美365网-我的店铺-添加楼层</title>
+    <template th:replace="components/head-link"></template>
+    <link th:href="@{/css/base/center.css(v=${version})}" rel="stylesheet" type="text/css">
+    <link th:href="@{/css/supplier-center/shop/category-edit.css(v=${version})}" rel="stylesheet" type="text/css">
+    <template th:replace="components/analysis"></template>
+</head>
+<body>
+<!-- 引用头部 -->
+<template th:replace="components/header"></template>
+
+<!-- 我的采美 -->
+<div id="decoration">
+    <div class="navLayout" v-cloak>
+        <div class="crumbs" v-if="isPC">
+            <span>我的店铺</span>
+            <span>&gt;</span>
+            <span>添加楼层</span>
+        </div>
+        <div class="wrap clear">
+             <!--左侧面包屑-->
+            <template th:replace="supplier-center/components/tableft"></template>
+            <div class="right">
+                <div class="disguise-content">
+                    <el-form ref="dataForm" :rules="rules" :model="disguiseForm" label-position="right" label-width="100px">
+                        <el-form-item label="类别名称:" prop="category" :rules="rules.category">
+                            <el-input v-model="disguiseForm.category" placeholder="请输入类别名称"  maxlength="10"></el-input>
+                        </el-form-item>
+                        <el-form-item label="类别排序:" prop="sort" :rules="rules.sort">
+                            <el-input v-model="disguiseForm.sort" placeholder="请输入类别排序" maxlength="3"></el-input>
+                        </el-form-item>
+                        <el-form-item label="商品信息:" prop="products" :rules="rules.products">
+                            <template>
+                                <el-button type="primary" autofocussize="mini" size="mini" icon="el-icon-plus" @click="handleDialogVisible">添加商品</el-button>
+                                <el-button type="danger" :disabled="delDisabled" autofocussize="mini" size="mini" icon="el-icon-delete" @click="handleAlldel">删除</el-button>
+                                <el-checkbox-group v-show="false" v-model="disguiseForm.products"></el-checkbox-group>
+                            </template>
+                            <template v-if="disguiseForm.products && disguiseForm.products.length > 0">
+                                <el-table :data="disguiseForm.products" border height="500" @selection-change="handleSelecChange">
+                                    <el-table-column type="selection" width="55"></el-table-column>
+                                    <el-table-column property="image" label="商品图片" align="center" width="100">
+                                        <template slot-scope="{ row }">
+                                            <img :src="row.image" alt="" style="width:80px;height:80px;" />
+                                        </template>
+                                    </el-table-column>
+                                    <el-table-column prop="name" label="商品名称" align="center"></el-table-column>
+                                    <el-table-column label="操作" align="center" width="100">
+                                        <template slot-scope="scope">
+                                            <el-button type="text" @click="handleDeletePros(scope.$index)">删除</el-button>
+                                        </template>
+                                    </el-table-column>
+                                </el-table>
+                            </template>
+                        </el-form-item>
+                        <el-form-item style="margin-top: 50px;">
+                            <a href="/supplier/disguise.html">
+                                <el-button type="primary" style="margin: 5px;" plain>返回</el-button>
+                            </a>
+                            <el-button type="primary" style="margin: 5px;" @click="handleSavsDisguise">确定</el-button>
+                        </el-form-item>
+                    </el-form>
+                </div>
+                <template>
+                    <template th:replace="supplier-center/components/disguise-dialog"></template>
+                </template>
+            </div>
+        </div>
+    </div>
+</div>
+
+<!-- 引入底部 -->
+<template th:replace="components/footer"></template>
+<template th:replace="components/foot-link"></template>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/center.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/supplier.service.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/supplier-center/shop/mixins/categoryMixins.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/supplier-center/shop/category-edit.js(v=${version})}"></script>
+</body>
+</html>

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

@@ -83,7 +83,6 @@
                   </div>
              </template>
             </div>
-
         </div>
            <div class="bgFrom" :class="bgflag?'show':''" v-if="bgflag">
                 <div class="modalForm">

+ 71 - 0
src/main/resources/templates/supplier-center/shop/disguise.html

@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<html lang="zh-CN" xmlns:th="https://www.thymeleaf.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      xsi:schemaLocation="https://www.thymeleaf.org ">
+<head>
+    <title>采美365网</title>
+    <template th:replace="components/head-link"></template>
+    <link th:href="@{/css/base/center.css(v=${version})}" rel="stylesheet" type="text/css">
+    <link th:href="@{/css/supplier-center/shop/disguise.css(v=${version})}" rel="stylesheet" type="text/css">
+    <template th:replace="components/analysis"></template>
+</head>
+<body>
+<!-- 引用头部 -->
+<template th:replace="components/header"></template>
+
+<!-- 我的采美 -->
+<div id="decoration">
+    <div class="navLayout" v-cloak>
+        <div class="crumbs" v-if="isPC">
+            <span>我的店铺</span>
+            <span>&gt;</span>
+            <span>装扮主页</span>
+        </div>
+        <div class="wrap clear">
+             <!--左侧面包屑-->
+            <template th:replace="supplier-center/components/tableft"></template>
+            <div class="right">
+                <div class="disguise-content">
+                    <!-- 顶部操作区域 -->
+                    <el-tabs v-model="activeName" type="border-card" @tab-click="handleClick">
+                        <el-tab-pane label="主页类别配置" name="first"></el-tab-pane>
+                        <el-tab-pane label="banner广告图" name="second"></el-tab-pane>
+                        <!-- 列表 -->
+                        <template v-if="activeName === 'first'">
+                            <template th:replace="supplier-center/components/disguise-category"></template>
+                        </template>
+                        <template v-if="activeName === 'second'">
+                            <template th:replace="supplier-center/components/disguise-banner"></template>
+                        </template>
+                    </el-tabs>
+                    <div class="disguise-message" @click="messageVisible = true">
+                        <span>装扮主页说明</span>
+                        <i class="el-icon-warning-outline"></i>
+                    </div>
+                </div>
+                <el-dialog
+                        title="说明"
+                        :visible.sync="messageVisible"
+                        width="30%"
+                        style="margin: 200px auto;"
+                        :close-on-click-modal="false"
+                        :show-close="false">
+                    <p style="margin-bottom: 10px;">1、主页类别配置可将商品进行归类,在店铺主页商品将按照归类进行展示。</p>
+                    <p>2、banner广告图可上传主页banner图,图片将展示在店铺主页顶部。</p>
+                    <span slot="footer" class="dialog-footer">
+                        <el-button type="primary" @click="messageVisible = false">确 定</el-button>
+                    </span>
+                </el-dialog>
+            </div>
+        </div>
+    </div>
+</div>
+
+<!-- 引入底部 -->
+<template th:replace="components/footer"></template>
+<template th:replace="components/foot-link"></template>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/center.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/supplier.service.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/supplier-center/shop/mixins/disguiseMixins.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/supplier-center/shop/disguise.js(v=${version})}"></script>
+</body>
+</html>

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

@@ -293,7 +293,6 @@
                             </el-col>
                         </el-row>
                     </template>
-
                     <div slot="footer" class="dialog-footer">
                         <el-button @click="dialogFormVisible = false">取消</el-button>
                         <el-button type="primary" @click="handleConfirmShelf">确定</el-button>

+ 208 - 122
src/main/resources/templates/supplier/index.html

@@ -41,149 +41,235 @@
         </div>
         <div class="search">
             <input class="keyword" v-model.trim="params.keyword" type="text" placeholder="请输入商品名称(商铺内商品)">
-            <a class="searchBtn icon mIcon" href="javascript:void(0);" @click="supplierSearch()" @keyup="keyupSearch()"></a>
+            <a class="searchBtn icon mIcon" href="javascript:void(0);" @click="supplierSearch" @keyup="keyupSearch"></a>
         </div>
     </div>
 
     <div class="supplierInfo">
         <div class="tabTit">
-            <span class="on">产品展示</span>
-            <span>公司介绍</span>
+            <span @click="handleTabClick(1)" :class="handleTabIndex === 1 ? 'on' : ''">商品展示</span>
+            <span @click="handleTabClick(2)" :class="handleTabIndex === 2 ? 'on' : ''">公司介绍</span>
             <a v-if="!isPC" class="showSearch" href="javascript:void(0);">商铺内搜索</a>
         </div>
+        <div class="shop-tabsItem clear" v-if="handleTabIndex === 1 && shopCategory.length > 0">
+            <a href="javascript:void(0)"
+               class="tabs-list"
+               :class="choiceIndex === '' ? 'active' : ''"
+               @click="handleChangeAll">全部</a>
+            <a class="tabs-list"
+               :class="choiceIndex === index ? 'active' : ''"
+               v-for="(category,index) in shopCategory"
+               :key="index"
+               href="javascript:void(0)"
+               :title="category.category"
+               @click="handleCategory(category, index)"
+               v-html="category.category">
+            </a>
+        </div>
         <div class="tabCon">
-            <div class="item productBox">
-                <template v-for="(floor,index) in floorData">
-                    <div v-if="(floor.type === 1 && floor.productList.length > 0) || floor.type === 2" class="part">
-                        <div class="title" v-html="floor.title" :id="floor.type === 2 ? 'supProduct' : ''"></div>
-                        <!--主推商品列表-->
-                        <ul class="productList clear mfw" v-if="floor.productList.length > 0">
-                            <li class="productItem " v-for="p in floor.productList">
-                                <a class="image" :href="'/product-'+p.productId+'.html'">
-                                    <div class="page_main_type" v-if="p.productType == 2">医疗器械</div>
-                                    <img src="/img/base/placeholder.png" :data-original="p.image" :alt="p.name">
-                                    <p class="name" v-html="addhtml + p.name" v-if="p.beautyActFlag==1"></p>
-                                    <p class="name" v-html="p.name" v-else></p>
-                                    <div class="price">
-                                        <!--已登录-->
-                                        <template v-if="GLOBAL_USER_ID && GLOBAL_USER_ID > 0">
-                                            <!--用户身份 0、个人 1、协销 2、会员机构 3、供应商 4,普通机构-->
-                                            <div class="price_text_tag">
-                                                <p class="couponTag" v-if="p.couponsLogo">优惠券</p>
-                                                <template v-if="p.svipProductFlag === 1">
-                                                    <div class="svip-tag">
-                                                        <div class="svip-icon">SVIP</div>
-                                                        <div class="svip-price" v-if="showVipPriceTag(p)">
-                                                            <span>¥</span><span v-html="p.svipPriceTag"></span>
-                                                        </div>
+            <template v-if="handleTabIndex === 1">
+                <template v-if="!isShopAll">
+                    <ul class="productList clear mfw" v-if="categoryProducts.length > 0">
+                        <li class="productItem " v-for="p in categoryProducts">
+                            <a class="image" :href="'/product-'+p.productId+'.html'" target="_blank">
+                                <div class="page_main_type" v-if="p.productType == 2">医疗器械</div>
+                                <img :src="p.image" :alt="p.name">
+                                <p class="name" v-html="addhtml + p.name" v-if="p.beautyActFlag==1"></p>
+                                <p class="name" v-html="p.name" v-else></p>
+                                <div class="price">
+                                    <!--已登录-->
+                                    <template v-if="GLOBAL_USER_ID && GLOBAL_USER_ID > 0">
+                                        <!--用户身份 0、个人 1、协销 2、会员机构 3、供应商 4,普通机构-->
+                                        <div class="price_text_tag">
+                                            <p class="couponTag" v-if="p.couponsLogo">优惠券</p>
+                                            <template v-if="p.svipProductFlag === 1">
+                                                <div class="svip-tag">
+                                                    <div class="svip-icon">SVIP</div>
+                                                    <div class="svip-price" v-if="showVipPriceTag(p)">
+                                                        <span>¥</span><span v-html="p.svipPriceTag"></span>
                                                     </div>
-                                                </template>
-                                                <template v-else>
-                                                    <p class="listTag" v-if="p.actStatus==1">
-                                                        {{p.promotions.name}}
-                                                        <template v-if="GLOBAL_USER_IDENTITY === 2 || (p.priceFlag === 0 && GLOBAL_USER_IDENTITY === 4) || (GLOBAL_USER_IDENTITY === 3 && p.shopId === GLOBAL_SHOP_ID) || GLOBAL_VIP_FLAG === 1">
-                                                            <span v-if="p.priceFlag != 1 && PromotionsFormat(p.promotions)">:¥{{p.price | NumFormat}}</span>
-                                                        </template>
-                                                    </p>
-                                                </template>
-                                            </div>
-                                            <div class="main_price_unde" v-if="p.priceFlag == 1">¥价格未公开</div>
-                                            <!--机构价仅会员可见 && 用户是普通机构-->
-                                            <div class="main_price_unde" v-else-if="p.priceFlag==2 && GLOBAL_USER_IDENTITY === 4 && GLOBAL_VIP_FLAG!=1">¥会员可见</div>
-                                            <!--仅医美机构可见-->
-                                            <div class="main_price_unde" v-else-if="p.priceFlag==3 && (GLOBAL_CLUB_TYPE !=1)">
-                                                ¥仅医美机构可见
-                                            </div>
-                                            <!--机构价格-->
-                                            <template v-else-if="GLOBAL_USER_IDENTITY === 2 || (p.priceFlag === 0 && GLOBAL_USER_IDENTITY === 4) || (GLOBAL_USER_IDENTITY === 3 && p.shopId === GLOBAL_SHOP_ID) || GLOBAL_VIP_FLAG === 1">
-                                                <div class="main_price_show" :class="{none: PromotionsFormat(p.promotions) || (p.svipProductFlag === 1 && showVipPriceTag(p))}">
-                                                    ¥{{ (PromotionsFormat(p.promotions) || p.svipProductFlag == 1 ? p.originalPrice : p.price ) | NumFormat }}
                                                 </div>
                                             </template>
-                                            <!--供应商除自己的商品外,也显示价格等级-->
-                                            <div class="price_grade" v-else><span class="bold">¥</span><i :class="'icon mIcon i'+p.priceGrade"></i></div>
+                                            <template v-else>
+                                                <p class="listTag" v-if="p.actStatus==1">
+                                                    {{p.promotions.name}}
+                                                    <template v-if="GLOBAL_USER_IDENTITY === 2 || (p.priceFlag === 0 && GLOBAL_USER_IDENTITY === 4) || (GLOBAL_USER_IDENTITY === 3 && p.shopId === GLOBAL_SHOP_ID) || GLOBAL_VIP_FLAG === 1">
+                                                        <span v-if="p.priceFlag != 1 && PromotionsFormat(p.promotions)">:¥{{p.price | NumFormat}}</span>
+                                                    </template>
+                                                </p>
+                                            </template>
+                                        </div>
+                                        <div class="main_price_unde" v-if="p.priceFlag == 1">¥价格未公开</div>
+                                        <!--机构价仅会员可见 && 用户是普通机构-->
+                                        <div class="main_price_unde" v-else-if="p.priceFlag==2 && GLOBAL_USER_IDENTITY === 4 && GLOBAL_VIP_FLAG!=1">¥会员可见</div>
+                                        <!--仅医美机构可见-->
+                                        <div class="main_price_unde" v-else-if="p.priceFlag==3 && (GLOBAL_CLUB_TYPE !=1)">
+                                            ¥仅医美机构可见
+                                        </div>
+                                        <!--机构价格-->
+                                        <template v-else-if="GLOBAL_USER_IDENTITY === 2 || (p.priceFlag === 0 && GLOBAL_USER_IDENTITY === 4) || (GLOBAL_USER_IDENTITY === 3 && p.shopId === GLOBAL_SHOP_ID) || GLOBAL_VIP_FLAG === 1">
+                                            <div class="main_price_show" :class="{none: PromotionsFormat(p.promotions) || (p.svipProductFlag === 1 && showVipPriceTag(p))}">
+                                                ¥{{ (PromotionsFormat(p.promotions) || p.svipProductFlag == 1 ? p.originalPrice : p.price ) | NumFormat }}
+                                            </div>
                                         </template>
-                                        <!--未登录-->
-                                        <template v-else>
-                                            <div class="price_text_tag ">
-                                                <p class="couponTag" v-if="p.couponsLogo">优惠券</p>
-                                                <template v-if="p.svipProductFlag === 1">
-                                                    <div class="svip-tag">
-                                                        <div class="svip-icon">SVIP</div>
+                                        <!--供应商除自己的商品外,也显示价格等级-->
+                                        <div class="price_grade" v-else><span class="bold">¥</span><i :class="'icon mIcon i'+p.priceGrade"></i></div>
+                                    </template>
+                                    <!--未登录-->
+                                    <template v-else>
+                                        <div class="price_text_tag ">
+                                            <p class="couponTag" v-if="p.couponsLogo">优惠券</p>
+                                            <template v-if="p.svipProductFlag === 1">
+                                                <div class="svip-tag">
+                                                    <div class="svip-icon">SVIP</div>
+                                                </div>
+                                            </template>
+                                            <template v-else>
+                                                <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
+                                            </template>
+                                        </div>
+                                        <div class="price_grade "><span class="bold">¥</span><i :class="'icon mIcon i'+p.priceGrade"></i></div>
+                                    </template>
+                                </div>
+                            </a>
+                        </li>
+                    </ul>
+                </template>
+                <div class="item productBox" v-else>
+                    <template v-for="(floor,index) in floorData">
+                        <div v-if="(floor.type === 1 && floor.productList.length > 0) || floor.type === 2" class="part">
+                            <div class="title" v-html="floor.title" :id="floor.type === 2 ? 'supProduct' : ''"></div>
+                            <!--主推商品列表-->
+                            <ul class="productList clear mfw" v-if="floor.productList.length > 0">
+                                <li class="productItem " v-for="p in floor.productList">
+                                    <a class="image" :href="'/product-'+p.productId+'.html'" target="_blank">
+                                        <div class="page_main_type" v-if="p.productType == 2">医疗器械</div>
+                                        <img src="/img/base/placeholder.png" :data-original="p.image" :alt="p.name">
+                                        <p class="name" v-html="addhtml + p.name" v-if="p.beautyActFlag==1"></p>
+                                        <p class="name" v-html="p.name" v-else></p>
+                                        <div class="price">
+                                            <!--已登录-->
+                                            <template v-if="GLOBAL_USER_ID && GLOBAL_USER_ID > 0">
+                                                <!--用户身份 0、个人 1、协销 2、会员机构 3、供应商 4,普通机构-->
+                                                <div class="price_text_tag">
+                                                    <p class="couponTag" v-if="p.couponsLogo">优惠券</p>
+                                                    <template v-if="p.svipProductFlag === 1">
+                                                        <div class="svip-tag">
+                                                            <div class="svip-icon">SVIP</div>
+                                                            <div class="svip-price" v-if="showVipPriceTag(p)">
+                                                                <span>¥</span><span v-html="p.svipPriceTag"></span>
+                                                            </div>
+                                                        </div>
+                                                    </template>
+                                                    <template v-else>
+                                                        <p class="listTag" v-if="p.actStatus==1">
+                                                            {{p.promotions.name}}
+                                                            <template v-if="GLOBAL_USER_IDENTITY === 2 || (p.priceFlag === 0 && GLOBAL_USER_IDENTITY === 4) || (GLOBAL_USER_IDENTITY === 3 && p.shopId === GLOBAL_SHOP_ID) || GLOBAL_VIP_FLAG === 1">
+                                                                <span v-if="p.priceFlag != 1 && PromotionsFormat(p.promotions)">:¥{{p.price | NumFormat}}</span>
+                                                            </template>
+                                                        </p>
+                                                    </template>
+                                                </div>
+                                                <div class="main_price_unde" v-if="p.priceFlag == 1">¥价格未公开</div>
+                                                <!--机构价仅会员可见 && 用户是普通机构-->
+                                                <div class="main_price_unde" v-else-if="p.priceFlag==2 && GLOBAL_USER_IDENTITY === 4 && GLOBAL_VIP_FLAG!=1">¥会员可见</div>
+                                                <!--仅医美机构可见-->
+                                                <div class="main_price_unde" v-else-if="p.priceFlag==3 && (GLOBAL_CLUB_TYPE !=1)">
+                                                    ¥仅医美机构可见
+                                                </div>
+                                                <!--机构价格-->
+                                                <template v-else-if="GLOBAL_USER_IDENTITY === 2 || (p.priceFlag === 0 && GLOBAL_USER_IDENTITY === 4) || (GLOBAL_USER_IDENTITY === 3 && p.shopId === GLOBAL_SHOP_ID) || GLOBAL_VIP_FLAG === 1">
+                                                    <div class="main_price_show" :class="{none: PromotionsFormat(p.promotions) || (p.svipProductFlag === 1 && showVipPriceTag(p))}">
+                                                        ¥{{ (PromotionsFormat(p.promotions) || p.svipProductFlag == 1 ? p.originalPrice : p.price ) | NumFormat }}
                                                     </div>
                                                 </template>
-                                                <template v-else>
-                                                    <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
-                                                </template>
-                                            </div>
-                                            <div class="price_grade "><span class="bold">¥</span><i :class="'icon mIcon i'+p.priceGrade"></i></div>
-                                        </template>
-                                    </div>
-                                </a>
-                            </li>
-                        </ul>
-                        <div v-else class="empty">
-                            <img src="/img/order/icon-dianpu.svg">
-                            <div class="msg">
-                                <p>该供应商暂未发布商品,去<a href="/">商城</a>,逛逛吧~</p>
+                                                <!--供应商除自己的商品外,也显示价格等级-->
+                                                <div class="price_grade" v-else><span class="bold">¥</span><i :class="'icon mIcon i'+p.priceGrade"></i></div>
+                                            </template>
+                                            <!--未登录-->
+                                            <template v-else>
+                                                <div class="price_text_tag ">
+                                                    <p class="couponTag" v-if="p.couponsLogo">优惠券</p>
+                                                    <template v-if="p.svipProductFlag === 1">
+                                                        <div class="svip-tag">
+                                                            <div class="svip-icon">SVIP</div>
+                                                        </div>
+                                                    </template>
+                                                    <template v-else>
+                                                        <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
+                                                    </template>
+                                                </div>
+                                                <div class="price_grade "><span class="bold">¥</span><i :class="'icon mIcon i'+p.priceGrade"></i></div>
+                                            </template>
+                                        </div>
+                                    </a>
+                                </li>
+                            </ul>
+                            <div v-else class="empty">
+                                <img src="/img/order/icon-dianpu.svg">
+                                <div class="msg">
+                                    <p>该供应商暂未发布商品,去<a href="/">商城</a>,逛逛吧~</p>
+                                </div>
                             </div>
                         </div>
-                    </div>
-                </template>
-            </div>
-            <div class="item infoBox">
-                <div class="part">
-                    <div class="title">公司基本信息</div>
-                    <p><span class="l">公司</span>:<span th:text="${supplier.name}"></span></p>
-                    <p><span class="l">满意度</span>:<span><i v-for="i in 5" class="icon mIcon heart"></i></span></p>
-                    <p th:if="not${#strings.isEmpty(supplier.businessScopeArr)}"><span class="l">经营范围</span>:<span><em class="tag" th:each="bus: ${supplier.businessScopeArr}" th:text="${bus}"></em></span></p>
-                </div>
-                <div class="part" >
-                    <div class="title">公司介绍</div>
-                    <div class="cont" th:utext="${supplier.info}" th:if="not${#strings.isEmpty(supplier.info)}"></div>
-                    <div class="cont" th:if="${#strings.isEmpty(supplier.info)}">暂无</div>
+                    </template>
                 </div>
-                <div class="part">
-                    <div class="title">主打系列产品说明</div>
-                    <div class="cont" th:utext="${supplier.productDesc}" th:if="not${#strings.isEmpty(supplier.productDesc)}"></div>
-                    <div class="cont" th:if="${#strings.isEmpty(supplier.productDesc)}">暂无</div>
-                </div>
-                <div class="part">
-                    <div class="title">营业执照</div>
-                    <div class="photo">
-                        <a th:href="${supplier.businessLicense}" target="_blank" th:if="not${#strings.isEmpty(supplier.businessLicense)}">
-                            <img th:src="${supplier.businessLicense}">
-                        </a>
-                        <div class="cont" th:if="${#strings.isEmpty(supplier.businessLicense)}">暂无</div>
+            </template>
+            <template v-if="handleTabIndex === 2">
+                <div class="item infoBox">
+                    <div class="part">
+                        <div class="title">公司基本信息</div>
+                        <p><span class="l">公司</span>:<span th:text="${supplier.name}"></span></p>
+                        <p><span class="l">满意度</span>:<span><i v-for="i in 5" class="icon mIcon heart"></i></span></p>
+                        <p th:if="not${#strings.isEmpty(supplier.businessScopeArr)}"><span class="l">经营范围</span>:<span><em class="tag" th:each="bus: ${supplier.businessScopeArr}" th:text="${bus}"></em></span></p>
                     </div>
-                </div>
-                <div class="part" >
-                    <div class="title">公司资质</div>
-                    <div class="photo">
-                        <a th:href="${supplier.medicalPracticeLicense}" target="_blank" th:if="not${#strings.isEmpty(supplier.medicalPracticeLicense)}">
-                            <img th:src="${supplier.medicalPracticeLicense}">
-                        </a>
-                        <a th:href="${supplier.medicalPracticeLicenseImg1}" target="_blank" th:if="not${#strings.isEmpty(supplier.medicalPracticeLicenseImg1)}">
-                            <img th:src="${supplier.medicalPracticeLicenseImg1}">
-                        </a>
-                        <a th:href="${supplier.medicalPracticeLicenseImg2}" target="_blank" th:if="not${#strings.isEmpty(supplier.medicalPracticeLicenseImg2)}">
-                            <img th:src="${supplier.medicalPracticeLicenseImg2}">
-                        </a>
-                        <a th:href="${supplier.medicalPracticeLicenseImg3}" target="_blank" th:if="not${#strings.isEmpty(supplier.medicalPracticeLicenseImg3)}">
-                            <img th:src="${supplier.medicalPracticeLicenseImg3}">
-                        </a>
+                    <div class="part" >
+                        <div class="title">公司介绍</div>
+                        <div class="cont" th:utext="${supplier.info}" th:if="not${#strings.isEmpty(supplier.info)}"></div>
+                        <div class="cont" th:if="${#strings.isEmpty(supplier.info)}">暂无</div>
                     </div>
-                </div>
-                <div class="part" >
-                    <div class="title">授权牌照</div>
-                    <div class="photo">
-                        <a th:href="${supplier.license}" target="_blank" th:if="not${#strings.isEmpty(supplier.license)}">
-                            <img th:src="${supplier.license}">
-                        </a>
-                        <div class="cont" th:if="${#strings.isEmpty(supplier.license)}">暂无</div>
+                    <div class="part">
+                        <div class="title">主打系列产品说明</div>
+                        <div class="cont" th:utext="${supplier.productDesc}" th:if="not${#strings.isEmpty(supplier.productDesc)}"></div>
+                        <div class="cont" th:if="${#strings.isEmpty(supplier.productDesc)}">暂无</div>
+                    </div>
+                    <div class="part">
+                        <div class="title">营业执照</div>
+                        <div class="photo">
+                            <a th:href="${supplier.businessLicense}" target="_blank" th:if="not${#strings.isEmpty(supplier.businessLicense)}">
+                                <img th:src="${supplier.businessLicense}">
+                            </a>
+                            <div class="cont" th:if="${#strings.isEmpty(supplier.businessLicense)}">暂无</div>
+                        </div>
+                    </div>
+                    <div class="part" >
+                        <div class="title">公司资质</div>
+                        <div class="photo">
+                            <a th:href="${supplier.medicalPracticeLicense}" target="_blank" th:if="not${#strings.isEmpty(supplier.medicalPracticeLicense)}">
+                                <img th:src="${supplier.medicalPracticeLicense}">
+                            </a>
+                            <a th:href="${supplier.medicalPracticeLicenseImg1}" target="_blank" th:if="not${#strings.isEmpty(supplier.medicalPracticeLicenseImg1)}">
+                                <img th:src="${supplier.medicalPracticeLicenseImg1}">
+                            </a>
+                            <a th:href="${supplier.medicalPracticeLicenseImg2}" target="_blank" th:if="not${#strings.isEmpty(supplier.medicalPracticeLicenseImg2)}">
+                                <img th:src="${supplier.medicalPracticeLicenseImg2}">
+                            </a>
+                            <a th:href="${supplier.medicalPracticeLicenseImg3}" target="_blank" th:if="not${#strings.isEmpty(supplier.medicalPracticeLicenseImg3)}">
+                                <img th:src="${supplier.medicalPracticeLicenseImg3}">
+                            </a>
+                        </div>
+                    </div>
+                    <div class="part" >
+                        <div class="title">授权牌照</div>
+                        <div class="photo">
+                            <a th:href="${supplier.license}" target="_blank" th:if="not${#strings.isEmpty(supplier.license)}">
+                                <img th:src="${supplier.license}">
+                            </a>
+                            <div class="cont" th:if="${#strings.isEmpty(supplier.license)}">暂无</div>
+                        </div>
                     </div>
                 </div>
-            </div>
+            </template>
         </div>
     </div>
     <!--Ross 弹窗-->