瀏覽代碼

Merge branch 'master' into feature/yc-apply_purchase_new-0126

# Conflicts:
#	nuxt.config.js
yangc 7 年之前
父節點
當前提交
9dfe867ad4
共有 88 個文件被更改,包括 870 次插入269 次删除
  1. 133 29
      assets/scss/activity.css
  2. 3 3
      components/default/Footer.vue
  3. 1 1
      components/default/Header.vue
  4. 1 1
      components/default/RightBar.vue
  5. 90 27
      components/home/floor/Floor.vue
  6. 4 4
      components/home/floor/FloorBar.vue
  7. 88 12
      components/home/floor/FloorList.vue
  8. 1 2
      components/mobile/Home.vue
  9. 54 28
      components/mobile/brand/ComponentDetail.vue
  10. 23 10
      components/mobile/common/RemindBox.vue
  11. 1 1
      components/mobile/help/HelpHeader.vue
  12. 45 20
      components/mobile/store/StoreDetail.vue
  13. 5 2
      components/personalMaterial/PersonalMaterial.vue
  14. 1 1
      components/product/ComponentGoods.vue
  15. 0 2
      components/product/Recommends.vue
  16. 1 1
      components/product/brand/BrandComponent.vue
  17. 3 3
      components/product/component/ComponentMenu.vue
  18. 10 6
      components/product/component/StoreInfo.vue
  19. 4 4
      components/product/original/OriginalDetail.vue
  20. 1 1
      components/provider/ExcellentSuppliers.vue
  21. 1 1
      components/provider/HotCommodity.vue
  22. 1 2
      components/provider/RecommendOriginal.vue
  23. 4 1
      components/register-saler/register/StepFirst.vue
  24. 1 1
      components/search/DetailBrand.vue
  25. 2 2
      components/search/GoodList.vue
  26. 1 1
      components/searchStore/StoreContent.vue
  27. 7 7
      components/store/BaseInfo.vue
  28. 5 5
      components/store/CommodityInfo.vue
  29. 114 8
      components/store/CommodityList.vue
  30. 11 2
      components/store/RecommendProduct.vue
  31. 9 0
      layouts/shop.vue
  32. 47 3
      nuxt.config.js
  33. 59 17
      pages/activity/business.vue
  34. 1 1
      pages/help/helpDetail/_id.vue
  35. 1 1
      pages/help/helpList/_id.vue
  36. 1 1
      pages/help/home.vue
  37. 55 37
      pages/index.vue
  38. 6 1
      pages/mobile/search/_keycode.vue
  39. 2 1
      pages/personalMaterial/index.vue
  40. 1 0
      pages/product/brand/brandList.vue
  41. 2 0
      pages/provider/factories.vue
  42. 3 0
      pages/provider/home.vue
  43. 0 0
      pages/store/productDetail/_batchCode.vue
  44. 21 0
      run.sh
  45. 22 19
      server.js
  46. 二進制
      static/images/activity/advantage01.png
  47. 二進制
      static/images/activity/advantage02.png
  48. 二進制
      static/images/activity/advantage03.png
  49. 二進制
      static/images/activity/advantage04.png
  50. 二進制
      static/images/activity/advantage05.png
  51. 二進制
      static/images/activity/advantage06.png
  52. 二進制
      static/images/activity/business-banner.png
  53. 二進制
      static/images/activity/conection01.png
  54. 二進制
      static/images/activity/conection02.png
  55. 二進制
      static/images/activity/contact01.png
  56. 二進制
      static/images/activity/contact02.png
  57. 二進制
      static/images/activity/contact03.png
  58. 二進制
      static/images/activity/contact04.png
  59. 二進制
      static/images/activity/contact05.png
  60. 二進制
      static/images/activity/enter01.png
  61. 二進制
      static/images/activity/enter02.png
  62. 二進制
      static/images/activity/enter03.png
  63. 二進制
      static/images/activity/enter04.png
  64. 二進制
      static/images/all/banner-agency2.jpg
  65. 二進制
      static/images/all/banner-brandcenter2.jpg
  66. 二進制
      static/images/all/banner-consignment2.jpg
  67. 二進制
      static/images/all/banner-cuxiao.png
  68. 二進制
      static/images/all/banner-home2.jpg
  69. 二進制
      static/images/all/banner-original2.jpg
  70. 二進制
      static/images/floor/2SD2704KT146.png
  71. 二進制
      static/images/floor/BL125-27RL-TAGF.png
  72. 二進制
      static/images/floor/BL8563CKETR18.png
  73. 二進制
      static/images/floor/BU28TD3WG-TR.png
  74. 二進制
      static/images/floor/BU30TD2WNVX-TL.png
  75. 二進制
      static/images/floor/EMVE350ADA331MJA0G.png
  76. 二進制
      static/images/floor/EMZR100ADA471MF801.png
  77. 二進制
      static/images/floor/RHU002N06T106.png
  78. 二進制
      static/images/floor/RRR015P03TL.png
  79. 二進制
      static/images/floor/RSB6.8CST2RA.png
  80. 二進制
      static/images/floor/RSU002P03T106.png
  81. 二進制
      static/images/floor/US6K4TR.png
  82. 二進制
      static/images/floor/banner1.jpg
  83. 二進制
      static/images/floor/banner2.jpg
  84. 二進制
      static/images/floor/specificPrice-home.png
  85. 二進制
      static/images/floor/specificPrice-store.png
  86. 二進制
      static/images/store/store-remind.png
  87. 14 0
      store/floor.js
  88. 10 0
      store/index.js

+ 133 - 29
assets/scss/activity.css

@@ -7,15 +7,13 @@ ul,li{
   margin: 0 auto;
 }
 .business .banner{
-  width: 100%;
-  height: 676px;
-  margin: 0 auto;
-  background: url("/images/activity/business-banner.jpg") no-repeat center;
+  height: 630px;
+  margin-top: -47px;
+  background: url("/images/activity/business-banner.png") no-repeat center;
 }
 @media screen and (max-width: 1366px) {
   .business .banner{
-    height: 560px;
-    background-size: 100% 100%;
+    height: 630px;
   }
 }
 .business  .session{
@@ -27,14 +25,23 @@ ul,li{
   margin: 0 auto;
 }
 .business .introduction{
-  margin-top: 75px;
+  height: 420px;
 }
 .business h3{
   text-align: center;
   font-size: 30px;
   margin: 0;
 }
+.business .introduction .theme{
+  width: 60px;
+  height: 11px;
+  border-top:2px solid #ff8400;
+  margin: 0 auto;
+  position: relative;
+  top: 3px;
+}
 .business .introduction .text{
+  text-indent: 2em;
   font-size: 16px;
   color: #666;
   line-height: 35px;
@@ -43,6 +50,9 @@ ul,li{
   transform:scale(0);
   transition:.5s 0.1s;*/
 }
+.business .introduction .text p {
+  margin: 0;
+}
 .business .introduction.active .text{
   opacity:1 !important; transform:none !important;
 }
@@ -52,17 +62,17 @@ ul,li{
   margin: 0 auto;
 }
 .business .introduction .join{
-  margin-bottom: 45px;
+  margin-top: -100px;
 }
 .business .join a{
-  width: 154px;
+  width: 170px;
   height: 46px;
   display: inline-block;
   line-height: 46px;
   text-align: center;
-  background: #f51f1f;
-  font-size: 18px;
-  border-radius: 25px;
+  background: #ff8400;
+  font-size: 20px;
+  border-radius: 4px;
   color: #fff;
 }
 .business .join a:hover{
@@ -82,7 +92,8 @@ ul,li{
   display: inline-block;
 }
 .business .advantage .advantage-list ul{
-  width: 100%;
+  width: 95%;
+  padding-left: 110px;
   margin: 0 auto;
   display: inline-block;
   height: 235px;
@@ -96,6 +107,11 @@ ul,li{
   margin: 0 10px;
   overflow: hidden;
   position: relative;
+  text-align: center;
+}
+.business .advantage .advantage-list ul  li img{
+  margin-top: 25px;
+  margin-bottom: 10px;
 }
 .business .advantage .advantage-list ul  li:hover{
   cursor: pointer;
@@ -104,26 +120,29 @@ ul,li{
   transform:scale(1.2);
 }
 .business .advantage .advantage-list ul  li:hover p.title{
-  background: #61d2f3;
-  height: 70px;
-  line-height: 70px;
-  color: #fff;
+  height: 40px;
+  line-height: 40px;
   font-size: 18px;
 }
+.business .advantage .advantage-list ul  li:hover img{
+  margin-top: 15px;
+  margin-bottom: 10px;
+}
 .business .advantage .advantage-list ul  li:hover p:last-child{
   color: #333;
 }
 .business .advantage .advantage-list ul  li p{
   display: inline-block;
   width: 100%;
+  text-align: left;
+  margin-top: -20px;
 }
 .business .advantage .advantage-list ul  li p.title{
-  height: 58px;
-  line-height: 58px;
-  background: #e1eafc;
+  height: 28px;
+  line-height: 28px;
   text-align: center;
-  font-size: 14px;
-  color: #666;
+  font-size: 16px;
+  color: #333;
 }
 .business .advantage .advantage-list ul  li p:last-child{
   padding: 16px 20px;
@@ -132,7 +151,7 @@ ul,li{
   line-height: 20px;
 }
 .business .advantage .join{
-  margin-top: 85px;
+  margin-top: 75px;
 }
 .business .style{
   height: 700px;
@@ -140,6 +159,14 @@ ul,li{
 .business .style h3{
   padding-top: 80px;
 }
+.business .style .theme{
+  width: 80px;
+  height: 11px;
+  border-top:2px solid #ff8400;
+  margin: 0 auto;
+  position: relative;
+  top: 3px;
+}
 .business .style .style-list{
   width: 100%;
   margin: 0 auto;
@@ -150,19 +177,20 @@ ul,li{
   width: 96%;
   margin: 0 auto;
   display: inline-block;
+  overflow: hidden;
 }
 .business .style .style-list ul li{
   float: left;
   width: 25%;
   text-align: center;
 }
-.business .style .style-list ul li:hover img{
+.business .style .style-list ul li:hover img {
   transform: scale(1.01);
 }
 /*.business .style .style-list ul li:hover p{
     color: #5078cb;
 }*/
-.business .style .style-list ul li img{
+.business .style .style-list ul li img {
   width: 108px;
   height: 108px;
 }
@@ -173,16 +201,15 @@ ul,li{
   margin-bottom: 20px;
 }
 .business .style .join{
-  margin-top: 15px;
+  margin-top: 25px;
 }
 .business  .join-us{
   background: #64c7f2;
   height: 630px;
-  margin-bottom: 40px;
 }
 .business  .join-us h3{
   color: #fff;
-  padding-top: 55px;
+  padding-top: 75px;
 }
 .business  .join-us .content{
   height: 660px;
@@ -214,12 +241,89 @@ ul,li{
   color: #fff;
 }
 .business  .join-us .join{
-  margin-top: 90px;
+  margin-top: 50px;
 }
 .business .join a:hover{
   transform: scale(1.1);
   transition: transform .2s ease-out;
 }
+.business  .contact-us{
+  background: url("/images/activity/contact01.png") no-repeat center;
+  height: 630px;
+  margin-top: -50px;
+}
+.business  .contact-us h3{
+  color: #fff;
+  padding-top: 100px;
+  margin-bottom: 70px;
+}
+.business .contact-us .contact-step{
+  background-color: #fff;
+  width: 900px;
+  height: 300px;
+  margin: 0 auto;
+  overflow: hidden;
+}
+.business .contact-us .contact-step img{
+  float: left;
+  padding: 90px 0px 0px 50px;
+}
+.business .contact-us .contact-step div {
+  float: right;
+  border-left: 1px solid #ccc;
+  height: 250px;
+  width: 470px;
+  padding: 75px 35px 0px 45px;
+  margin: 30px 0px 30px 0px;
+}
+.business .contact-us .contact-step .list-one {
+  background: url("/images/activity/contact03.png") no-repeat 2% 70%;
+  padding: 10px 0px 5px 50px;
+  font-size: 15px;
+}
+.business .contact-us .contact-step .list-two {
+  background: url("/images/activity/contact04.png") no-repeat 2% 70%;
+  padding: 10px 0px 5px 50px;
+  font-size: 15px;
+}
+.business .contact-us .contact-step .list-three {
+  background: url("/images/activity/contact05.png") no-repeat 3% 70%;
+  padding: 10px 0px 5px 50px;
+  font-size: 15px;
+}
+.business .function-hinting{
+  height: 200px;
+  margin: -30px 0px 35px 0px;
+}
+.business .function-hinting .hinting-list{
+  width: 100%;
+  margin: 0 auto;
+  display: inline-block;
+  margin-top: 55px;
+}
+.business .function-hinting .hinting-list ul{
+  width: 96%;
+  margin: 0 auto;
+  display: inline-block;
+}
+.business .function-hinting .hinting-list ul li{
+  float: left;
+  width: 25%;
+  text-align: center;
+}
+.business .function-hinting .hinting-list ul li img{
+  width: 108px;
+  height: 108px;
+}
+.business .function-hinting .hinting-list ul li p{
+  font-size: 16px;
+  color: #333;
+  line-height: 70px;
+  margin-bottom: 20px;
+}
+
+
+
 /*
 .business .join{
     animation:come_on 2s infinite;

+ 3 - 3
components/default/Footer.vue

@@ -15,13 +15,13 @@
           <ul class="list-unstyled">
             <li><a href="http://www.usoftmall.com/help/helpDetail/1" target="_blank">公司简介</a></li>
             <li><a href="http://www.usoftmall.com/help/helpDetail/28" target="_blank">公司地址</a></li>
-            <li><a href="http://www.usoftmall.com/help/helpDetail/1" target="_blank">联系我们</a></li>
+            <li><a href="https://www.usoftmall.com/help/helpDetail/28" target="_blank">联系我们</a></li>
           </ul>
         </div>
         <div class="item">
           <h5>更多服务</h5>
           <ul class="list-unstyled">
-            <li><a href="http://www.usoftchina.com/usoft/"  target="_blank">优软科技</a></li>
+            <li><a href="http://www.usoftchina.com/"  target="_blank">优软科技</a></li>
             <li><a href="http://www.ubtob.com" target="_blank">优软云</a></li>
           </ul>
         </div>
@@ -43,7 +43,7 @@
       </ul>
       <ul class="footer-notice list-unstyled">
         <li>客服电话:400-830-1818</li>
-        <li>公司地址:深圳市南山区英唐大厦6楼</li>
+        <li>公司地址:深圳市南山区英唐大厦楼</li>
         <li>©2016 深圳市优软科技有限公司 粤ICP备15112126号-3</li>
       </ul>
       <div class="footer-credit">

+ 1 - 1
components/default/Header.vue

@@ -16,7 +16,7 @@
                 <a @click="logout()">[退出]</a>
                 <span>{{enterprise.enName}}</span>
               </div>
-              <div class="dropdown-menu">
+              <div class="dropdown-menu" v-if="user.data.enterprises && user.data.enterprises.length > 0">
                 <div class="menu-item-first">
                   <span>您可切换至以下账户:</span>
                 </div>

+ 1 - 1
components/default/RightBar.vue

@@ -46,7 +46,7 @@
             <h3><a href="/user#/browsingHistory">浏览历史</a></h3>
             <dl>
               <dd v-for="item in listMe(history)">
-                  <a :href="'/store/' + item.storeid + '/' + item.batchCode" target="_blank" :title="item.code" v-text="item.code" v-if="item.status== 1"></a>
+                  <a :href="'/store/productDetail/' + item.batchCode" target="_blank" :title="item.code" v-text="item.code" v-if="item.status== 1"></a>
                   <a :title="item.code" v-text="item.code" v-if="item.status== 0" disabled="disabled"></a>
                   <div class="hover-shows">
                       <em :class="{ 'off' : item.status== 0}"></em>

+ 90 - 27
components/home/floor/Floor.vue

@@ -1,14 +1,16 @@
 <template>
-  <div class="floor">
-    <h3>F{{ floor.floorNumber }}&nbsp;{{ floor.name }}</h3>
+  <div class="floor" :class="!isDefault ? 'normal-floor' : 'price-floor'">
+    <h3><span v-if="!isDefault">F{{ floor.floorNumber }}&nbsp;{{ floor.name }}</span></h3>
     <ul class="list-unstyled clearfix" :style="{borderColor: floor.items[1].backGroundColor || '#d8d8d8'}">
-      <li v-for="(item, index) in floor.items" :key="index" class="floor-item" :class="item.size"
+      <li v-for="(item, index) in floor.items" :key="index" class="floor-item" :class="item.size + (isDefault ? ' default-floor' : '')"
           :style="{backgroundColor: item.backGroundColor || '#fff', borderColor: item.borderColor || floor.items[1].backGroundColor || '#d8d8d8'}">
+        <img v-if="item.size != 'large' && isDefault" src="/images/floor/specificPrice-home.png" alt="">
         <a :href="item.hrefUrl" target="_blank">
           <img :src="item.pictureUrl" class="floor-item-img"/>
           <div class="floor-content">
-            <p v-if="item.name" class="floor-item-name">{{ item.name }}</p>
+            <p v-if="item.name" class="floor-item-name" :title="item.name">{{ item.name }}</p>
             <p v-if="item.body" v-html="item.body" class="floor-item-body"></p>
+            <p class="floor-item-price" v-if="item.size != 'large' && isDefault">{{item.currency == 'RMB' ? '¥' : '$'}}&nbsp;{{item.price}}</p>
           </div>
         </a>
       </li>
@@ -18,9 +20,7 @@
 <script>
   export default {
     name: 'floor',
-    props: {
-      floor: Object
-    }
+    props: ['floor', 'isDefault']
   }
 </script>
 <style lang="scss" scoped>
@@ -35,6 +35,10 @@
   }
   .floor {
 
+    &.price-floor {
+      margin-top: -35px;
+    }
+
     ul {
       border-bottom: 1px solid #d8d8d8;
     }
@@ -56,6 +60,13 @@
       .floor-content {
         position: absolute;
         text-align: center;
+
+        .floor-item-price {
+          color: #ff4040;
+          font-size: 16px;
+          font-weight: bold;
+        }
+
       }
 
       &.medium,&.small {
@@ -67,22 +78,39 @@
         width: 360px;
         height: 400px;
 
-        img {
-          width: 226px;
-          height: 226px;
-          margin-top: 40px;
+        a {
+          img {
+            width: 226px;
+            height: 226px;
+            margin-top: 40px;
+          }
+        }
+
+        &.default-floor {
+          a {
+            img {
+              width: 360px;
+              height: 400px;
+              margin-top: 0;
+              &:hover {
+                transform: none;
+              }
+            }
+          }
         }
       }
       &.medium {
         width: 390px;
         height: 200px;
 
-        img {
-          position: absolute;
-          bottom: 50px;
-          right: 52px;
-          width: 100px;
-          height: 100px;
+        a {
+          img {
+            position: absolute;
+            bottom: 50px;
+            right: 52px;
+            width: 100px;
+            height: 90px;
+          }
         }
 
         .floor-content {
@@ -94,17 +122,18 @@
 
         .floor-item-name {
           color: #575757;
-          font-size: 24px;
+          font-size: 20px;
           margin-bottom: 30px;
           text-align: left;
           font-weight: 600;
           overflow: hidden;
           text-overflow: ellipsis;
-          display: -webkit-box;
-          -webkit-box-orient: vertical;
-          -webkit-line-clamp: 2;
+          /*display: -webkit-box;*/
+          /*-webkit-box-orient: vertical;*/
+          /*-webkit-line-clamp: 2;*/
           width: 300px;
           word-wrap: break-word;
+          white-space: nowrap;
         }
 
         .floor-item-body {
@@ -114,15 +143,33 @@
           line-height: 20px;
           text-align: left;
         }
+
+        &.default-floor {
+          .floor-content {
+            .floor-item-body {
+              color: #666;
+            }
+            .floor-item-price {
+              text-align: left;
+            }
+          }
+          > img {
+            position: absolute;
+            top: 0;
+            left: 0;
+          }
+        }
       }
       &.small {
         width: 220px;
         height: 200px;
 
-        img {
-          margin-top: 15px;
-          width: 70px;
-          height: 70px;
+        a {
+          img {
+            margin-top: 15px;
+            width: 70px;
+            height: 70px;
+          }
         }
 
         .floor-content {
@@ -139,11 +186,12 @@
           font-weight: 600;
           text-overflow: ellipsis;
           overflow: hidden;
-          display: -webkit-box;
+         /* display: -webkit-box;
           -webkit-box-orient: vertical;
-          -webkit-line-clamp: 2;
+          -webkit-line-clamp: 2;*/
           word-break: break-all;
           display: inherit;
+          white-space: nowrap;
         }
 
         .floor-item-body {
@@ -151,6 +199,21 @@
           font-size: 14px;
           line-height: 18px;
         }
+
+        &.default-floor {
+          > img {
+            position: absolute;
+            top: 0;
+            left: 0;
+          }
+          .floor-content {
+            top: 85px;
+            .floor-item-body {
+              color: #666;
+            }
+          }
+        }
+
       }
       &.tiny {
         display: none;

+ 4 - 4
components/home/floor/FloorBar.vue

@@ -30,13 +30,13 @@
       onScroll () {
         if (window.location.pathname === '/') {
           let scrolled = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop
-          let floors = document.querySelectorAll('.floor')
+          let floors = document.querySelectorAll('.normal-floor')
           let barOffset = document.querySelector('.floor-bar').offsetTop
           if (floors[0].offsetTop === 0) {
             this.visible = scrolled >= floors[0].offsetTop + this.floor_scrollTop - barOffset && scrolled <= floors[floors.length - 1].offsetTop + floors[floors.length - 1].offsetHeight - barOffset - document.querySelector('.floor-bar').offsetHeight + this.floor_scrollTop
             if (this.visible) {
               for (let i = 0; i < floors.length; i++) {
-                if (barOffset >= floors[i].offsetTop + this.floor_scrollTop - scrolled + 60) {
+                if (barOffset >= floors[i].offsetTop + this.floor_scrollTop - scrolled + 20) {
                   this.activeFloor = i
                 }
               }
@@ -45,7 +45,7 @@
             this.visible = scrolled >= floors[0].offsetTop - barOffset + 40 && scrolled <= floors[floors.length - 1].offsetTop + floors[floors.length - 1].offsetHeight - barOffset - document.querySelector('.floor-bar').offsetHeight
             if (this.visible) {
               for (let i = 0; i < floors.length; i++) {
-                if (barOffset >= floors[i].offsetTop - scrolled + 60) {
+                if (barOffset >= floors[i].offsetTop - scrolled + 20) {
                   this.activeFloor = i
                 }
               }
@@ -55,7 +55,7 @@
       },
       jumpFloor (index) {
         if (this.visible) {
-          scrollTo(document.querySelectorAll('.floor').item(index), 300, { offset: -60 })
+          scrollTo(document.querySelectorAll('.normal-floor').item(index), 300, { offset: -60 })
         }
       }
     },

+ 88 - 12
components/home/floor/FloorList.vue

@@ -2,8 +2,12 @@
   <div class="floor-list">
     <div class="container">
       <floor-bar :floors="floors"></floor-bar>
-      <floor v-for="(floor, index) in floors.data" :floor="floor" :key="index"></floor>
+      <a href="/store/33069557578d44e69bd91ad12d28a8d4" target="_blank"><img src="/images/all/banner-cuxiao.png" alt=""></a>
+      <floor :floor="defaultFloors[0]" :isDefault="true" v-if="!isEmpty"></floor>
+      <floor :floor="defaultFloors[1]" :isDefault="true" v-if="!isEmpty"></floor>
+      <floor v-for="(floor, index) in floors.data" :floor="floor" :isDefault="false" :key="index"></floor>
     </div>
+    <span v-if="expandFloors && false">floor</span>
   </div>
 </template>
 <script>
@@ -15,20 +19,89 @@
       Floor,
       FloorBar
     },
-//    data () {
-//      return {
-//        floors: {}
-//      }
-//    },
-//    mounted () {
-//      this.$http.get('/api/floors/home')
-//        .then(response => {
-//          this.floors = response
-//        })
-//    }
+    data () {
+      return {
+        defaultFloors: [
+          {
+            items: [
+              {
+                backGroundColor: '',
+                body: '',
+                hrefUrl: '/store/33069557578d44e69bd91ad12d28a8d4',
+                pictureUrl: '/images/floor/banner1.jpg',
+                size: 'large'
+              }
+            ]
+          },
+          {
+            items: [
+              {
+                backGroundColor: '',
+                body: '',
+                hrefUrl: '/store/33069557578d44e69bd91ad12d28a8d4',
+                pictureUrl: '/images/floor/banner2.jpg',
+                size: 'large'
+              }
+            ]
+          }
+        ]
+      }
+    },
     computed: {
       floors () {
         return this.$store.state.floor.list
+      },
+      isProd () {
+        return this.$store.state.option.url === 'http://www.usoftmall.com'
+      },
+      expandFloors () {
+        let data = this.$store.state.floor.list_expand.data
+        let _this = this
+        for (let i = 0; i < data.length; i++) {
+          let obj = {
+            backGroundColor: '',
+            body: '',
+            hrefUrl: '',
+            name: '',
+            pictureUrl: '',
+            size: '',
+            price: '',
+            currency: 'RMB'
+          }
+          if (data[i]) {
+            obj.name = data[i].code
+            obj.body = data[i].brandNameEn + '<br/>' + (data[i].kindNameCn || '其他')
+            obj.hrefUrl = '/store/productDetail/' + data[i].batchCode
+            obj.pictureUrl = '/images/floor/' + (this.isProd ? data[i].code : '2SD2704KT146') + '.png'
+            obj.size = i % 3 === 0 ? 'medium' : 'small'
+            obj.currency = data[i].currencyName
+            obj.price = _this.getMinPrice(data[i].prices, data[i].currencyName)
+            _this.defaultFloors[i < 6 ? 0 : 1].items.push(obj)
+          }
+        }
+        return data
+      },
+      isEmpty () {
+        let data = this.$store.state.floor.list_expand.data
+        if (!data.length) {
+          return true
+        } else {
+          for (let i = 0; i < data.length; i++) {
+            if (!(data[0] && data[0] !== null)) {
+              return true
+            }
+          }
+        }
+        return false
+      }
+    },
+    methods: {
+      getMinPrice: function (prices, currency) {
+        for (let i = 0; i < prices.length; i++) {
+          if (i === prices.length - 1) {
+            return currency === 'RMB' ? prices[i].rMBPrice : prices[i].uSDPrice
+          }
+        }
       }
     }
   }
@@ -42,4 +115,7 @@
   .floor-list {
     margin-bottom: $xlg-pad;
   }
+  .floor-list .container > a > img {
+    margin-top: 30px;
+  }
 </style>

+ 1 - 2
components/mobile/Home.vue

@@ -219,8 +219,6 @@
         }
         .home-input{
           width: 6rem;
-          height: .61rem;
-          line-height: .61rem;
           input{
             width:5.17rem;
             display: inline-block;
@@ -229,6 +227,7 @@
             font-size:.24rem;
             border:.04rem solid #3c7cf5;
             border-radius:.05rem;
+            height: .68rem;
           }
           i{
              display:inline-block;

+ 54 - 28
components/mobile/brand/ComponentDetail.vue

@@ -19,8 +19,8 @@
       <i class="iconfont icon-shoucang" :style="isCollect?'color:#ff7800':'color: #ddd'" @click="collectComponent"></i>
     </div>
     <div class="product-switch-item">
-      <span :class="activeType=='param'?'mobile-switch-btn active':'mobile-switch-btn'" @click="activeType='param'">参数</span>
       <span :class="activeType=='store'?'mobile-switch-btn active':'mobile-switch-btn'" @click="activeType='store'">商家</span>
+      <span :class="activeType=='param'?'mobile-switch-btn active':'mobile-switch-btn'" @click="activeType='param'">参数</span>
     </div>
     <div class="product-params" v-if="activeType == 'param'">
       <div class="param-item" v-if="prop.value && prop.value!=''" v-for="prop in component.properties">
@@ -30,23 +30,20 @@
     </div>
     <div class="product-store" v-if="activeType == 'store'">
       <table v-if="searchLists&&searchLists.length > 0">
-        <thead>
+        <thead id="product-head" :class="{'active': isScrollOverTab}">
           <tr>
-            <th>商家</th>
-            <th>生产日期</th>
-            <th>数量<span>(PCS)</span></th>
-            <th>单价</th>
-            <th>交期(天)</th>
+            <th style="width: 1.55rem;">商家</th>
+            <th style="width: 1.59rem;">生产日期</th>
+            <th style="width: 2.58rem;">价格梯度</th>
+            <th style="width: 1.77rem;">交期(天)</th>
           </tr>
         </thead>
-        <tbody>
+        <tbody id="product-body">
           <tr v-for="store in searchLists">
             <td class="store-name">
-              <div>
-                <nuxt-link :to="'/mobile/shop/' + store.storeid">
-                  {{store.storeName || '-' | storeNameFilter}}
-                </nuxt-link>
-              </div>
+              <nuxt-link :to="'/mobile/shop/' + store.storeid">
+                {{store.storeName || '-' | storeNameFilter}}
+              </nuxt-link>
             </td>
             <td>
               <div v-if="!store.packaging && !store.breakUp && !store.produceDate">-</div>
@@ -54,17 +51,16 @@
               <div>{{store.packaging}}</div>
               <div>{{store.breakUp?'可拆卖':'不可拆卖'}}</div>
             </td>
-            <td>
+            <td class="price-level-wrap">
               <div v-if="!store.prices || store.prices.length == 0">-</div>
-              <div v-for="price in store.prices">{{price.start}}+</div>
-            </td>
-            <td>
-              <div v-if="!store.prices || store.prices.length == 0">
-                <span>—</span>
+              <div class="price-number fl">
+                <div v-for="price in store.prices">{{price.start}}+</div>
               </div>
-              <div v-for="price in store.prices" class="price-level">
-                <span v-if="store.currencyName.indexOf('RMB')!==-1">¥{{price.rMBPrice | currency}}</span>
-                <span v-if="store.currencyName.indexOf('USD')!==-1">${{price.uSDPrice | currency}}</span>
+              <div class="price-number fr">
+                <div v-for="price in store.prices" class="price-level">
+                  <span v-if="store.currencyName.indexOf('RMB')!==-1">¥{{price.rMBPrice | currency}}</span>
+                  <span v-if="store.currencyName.indexOf('USD')!==-1">${{price.uSDPrice | currency}}</span>
+                </div>
               </div>
             </td>
             <td class="push-date">
@@ -74,6 +70,7 @@
                 <span v-if="store.b2cMaxDelivery && store.b2cMaxDelivery !== store.b2cMinDelivery">{{store.b2cMaxDelivery}}</span>
               </div>
               <div v-if="store.minBuyQty"><span class="order-tag">订</span>{{store.minBuyQty}}起订</div>
+              <div v-if="store.reserve"><span class="order-tag reserve-tag">库</span>{{store.reserve}}</div>
               <div v-if="!store.b2cMinDelivery">
                 <span>—</span>
               </div>
@@ -98,7 +95,7 @@
   export default {
     data () {
       return {
-        activeType: 'param',
+        activeType: 'store',
         collectResult: '收藏成功',
         timeoutCount: 0,
         storeIds: [],
@@ -117,7 +114,8 @@
         },
         isSearchingMore: false,
         searchLists: [],
-        showLoginBox: false
+        showLoginBox: false,
+        isScrollOverTab: false
       }
     },
     components: {
@@ -238,6 +236,9 @@
         if (Math.ceil(scrolled + window.screen.availHeight) >= document.body.scrollHeight && !this.isSearchingMore && this.params.page < this.allPage) {
           this.getMoreStore()
         }
+        let tbodyObj = document.getElementById('product-body')
+        let theadObj = document.getElementById('product-head')
+        this.isScrollOverTab = tbodyObj.getBoundingClientRect().top <= theadObj.getBoundingClientRect().height
       },
       getMoreStore: function () {
         if (!this.isSearchingMore) {
@@ -405,6 +406,11 @@
         font-size: .28rem;
         thead {
           background: #d5e5fb;
+          &.active {
+            position: fixed;
+            top: .88rem;
+            z-index: 2;
+          }
           tr {
             th {
               font-weight: bold;
@@ -425,13 +431,29 @@
               padding: .2rem .1rem;
               &.store-name {
                 color: #418bf6;
-                div {
+                a {
                   padding: 0;
+                  display: block;
                   width: 1.2rem;
                   overflow: hidden;
                   margin-left: .16rem;
                 }
               }
+              &.price-level-wrap {
+                text-align: center;
+              }
+              > div {
+                overflow: hidden;
+                text-overflow: ellipsis;
+                white-space: nowrap;
+                max-width: 1.58rem;
+              }
+              .price-number {
+                display: inline-block;
+                vertical-align: middle;
+                margin-bottom: 0;
+                width: .9rem;
+              }
               div {
                 margin-bottom: .2rem;
                 text-align: left;
@@ -440,9 +462,9 @@
                 }
               }
               &.push-date {
-              text-align: center;
+              text-align: left;
                 div {
-                  text-align: center;
+                  text-align: left;
                 }
             }
               .price-level:last-child {
@@ -460,7 +482,11 @@
                 text-align: center;
                 border-radius: .05rem;
                 position: relative;
-                top: -.03rem;
+                top: -.05rem;
+                margin-right: .05rem;
+                &.reserve-tag {
+                  background: #07bb1c;
+                }
               }
             }
           }

+ 23 - 10
components/mobile/common/RemindBox.vue

@@ -1,5 +1,7 @@
 <template>
-  <div class="com-remind-box" v-show="showBox">{{title}}</div>
+  <div class="com-remind-box" v-show="showBox">
+    <div>{{title}}</div>
+  </div>
 </template>
 <script>
   export default {
@@ -24,25 +26,36 @@
       setTimer: function () {
         let _this = this
         _this.showBox = true
+        let timeout = 1000
+        if (_this.title === '收藏成功' || _this.title === '取消成功') {
+          timeout = 1000
+        } else {
+          timeout = 2000
+        }
         _this.timer = setTimeout(function () {
           _this.showBox = false
-        }, 1000)
+        }, timeout)
       }
     }
   }
 </script>
-<style>
+<style lang="scss" scoped>
   .com-remind-box{
     position: fixed;
     top: 50%;
-    left: 50%;
-    margin-left: -1.07rem;
+    left: 0;
+    right: 0;
     margin-top: -.6rem;
     z-index: 100;
-    background: rgba(0,0,0,.6);
-    color: #fff;
-    font-size: .28rem;
-    padding: .44rem .51rem;
-    border-radius: .1rem;
+    div {
+      background: rgba(0,0,0,.6);
+      color: #fff;
+      font-size: .28rem;
+      padding: .44rem .51rem;
+      border-radius: .1rem;
+      width: max-content;
+      margin: 0 auto;
+      max-width: 70%;
+    }
   }
 </style>

+ 1 - 1
components/mobile/help/HelpHeader.vue

@@ -2,7 +2,7 @@
   <nav id="nav" class="navbar navbar-default">
     <div class="container-fluid">
       <div class="navbar-header">
-        <a class="navbar-brand pull-left" href="/" style="color: #fff; font-size: 16px;">返回首页</a>
+        <nuxt-link class="navbar-brand pull-left" to="/" style="color: #fff; font-size: 16px;">返回首页</nuxt-link>
       </div>
     </div>
   </nav>

+ 45 - 20
components/mobile/store/StoreDetail.vue

@@ -17,16 +17,15 @@
     </div>
     <div class="product-store" v-if="activeType == 'product'">
       <table v-if="commodities.content&&commodities.content.length > 0">
-        <thead>
+        <thead id="product-head" :class="{'active': isScrollOverTab}">
         <tr>
-          <th>型号/品牌</th>
-          <th>包装</th>
-          <th>数量</th>
-          <th>单价</th>
-          <th>交期(天)</th>
+          <th style="width: 1.77rem;">型号/品牌</th>
+          <th style="width: 1.75rem;">包装</th>
+          <th style="width: 2.2rem;">价格梯度</th>
+          <th style="width: 1.77rem;">交期(天)</th>
         </tr>
         </thead>
-        <tbody>
+        <tbody id="product-body">
         <tr v-for="commodity in searchLists" @click="goProductDetail(commodity.uuid)">
           <td class="store-name">
             <div>{{commodity.code}}</div>
@@ -38,17 +37,16 @@
             <div>{{commodity.breakUp?'可拆卖':'不可拆卖'}}</div>
             <div>{{commodity.produceDate}}</div>
           </td>
-          <td>
+          <td class="price-level-wrap">
             <div v-if="!commodity.prices || commodity.prices.length == 0">-</div>
-            <div v-for="price in commodity.prices">{{price.start}}+</div>
-          </td>
-          <td>
-            <div v-if="!commodity.prices || commodity.prices.length == 0">
-              <span>—</span>
+            <div class="price-number fl">
+              <div v-for="price in commodity.prices">{{price.start}}+</div>
             </div>
-            <div v-for="price in commodity.prices" class="price-level">
-              <span v-if="commodity.currencyName.indexOf('RMB')!==-1">¥{{price.rMBPrice | currency}}</span>
-              <span v-if="commodity.currencyName.indexOf('USD')!==-1">${{price.uSDPrice | currency}}</span>
+            <div class="price-number fr">
+              <div v-for="price in commodity.prices" class="price-level">
+                <span v-if="commodity.currencyName.indexOf('RMB')!==-1">¥{{price.rMBPrice | currency}}</span>
+                <span v-if="commodity.currencyName.indexOf('USD')!==-1">${{price.uSDPrice | currency}}</span>
+              </div>
             </div>
           </td>
           <td>
@@ -58,6 +56,7 @@
               <span v-if="commodity.b2cMaxDelivery && commodity.b2cMaxDelivery !== commodity.b2cMinDelivery">{{commodity.b2cMaxDelivery}}</span>
             </div>
             <div v-if="commodity.minBuyQty"><span class="order-tag">订</span>{{commodity.minBuyQty}}起订</div>
+            <div v-if="commodity.reserve"><span class="order-tag reserve-tag">库</span>{{commodity.reserve}}</div>
             <div v-if="!commodity.b2cMinDelivery">
               <span>—</span>
             </div>
@@ -86,7 +85,8 @@
         isSearchingMore: false,
         searchLists: [],
         page: 1,
-        showLoginBox: false
+        showLoginBox: false,
+        isScrollOverTab: false
       }
     },
     components: {
@@ -154,12 +154,14 @@
         if (Math.ceil(scrolled + window.screen.availHeight) >= document.body.scrollHeight && !this.isSearchingMore && this.page < this.allPage && this.activeType === 'product') {
           this.getMoreCom()
         }
+        let tbodyObj = document.getElementById('product-body')
+        let theadObj = document.getElementById('product-head')
+        this.isScrollOverTab = tbodyObj.getBoundingClientRect().top <= theadObj.getBoundingClientRect().height
       },
       getMoreCom: function () {
         if (!this.isSearchingMore) {
           this.page++
           this.isSearchingMore = true
-          console.log(this.page)
           this.pageCommodity({ page: this.page, count: 6 })
         }
       },
@@ -175,7 +177,12 @@
         }
       },
       goProductDetail: function (uuid) {
-        this.$router.push('/mobile/brand/componentDetail/' + uuid)
+        if (uuid) {
+          this.$router.push('/mobile/brand/componentDetail/' + uuid)
+        } else {
+          this.collectResult = '卖家上传的产品暂无参数,请联系卖家了解具体详情。'
+          this.timeoutCount ++
+        }
       },
       collectStore: function () {
         if (this.user.logged) {
@@ -289,6 +296,11 @@
         font-size: .28rem;
         thead {
           background: #d5e5fb;
+          &.active {
+            position: fixed;
+            top: .88rem;
+            z-index: 2;
+          }
           tr {
             th {
               font-weight: bold;
@@ -305,6 +317,9 @@
             td {
               padding: .2rem .1rem;
               text-align: left;
+              &.price-level-wrap {
+                text-align: center;
+              }
               div {
                 overflow: hidden;
                 text-overflow: ellipsis;
@@ -318,6 +333,12 @@
               .price-level:last-child {
                 color: #fc5708;
               }
+              .price-number {
+                display: inline-block;
+                vertical-align: middle;
+                margin-bottom: 0;
+                width: .9rem;
+              }
               .order-tag {
                 display: inline-block;
                 font-size: .18rem;
@@ -330,7 +351,11 @@
                 text-align: center;
                 border-radius: .05rem;
                 position: relative;
-                top: -.03rem;
+                top: -.05rem;
+                margin-right: .05rem;
+                &.reserve-tag {
+                  background: #07bb1c;
+                }
               }
             }
             &:active {

+ 5 - 2
components/personalMaterial/PersonalMaterial.vue

@@ -53,7 +53,7 @@
     <div class="modal-wrap" v-show="showRemindBox || showApplyRecord"></div>
     <div class="com-del-box" v-if="showRemindBox">
       <div class="title">
-        <i @click="showRemindBox = false"></i>
+        <i @click="goLastPage"></i>
       </div>
       <p><img src="/images/material/check.png" alt="">绑定申请提交成功!</p>
       <div class="result">审批结果将以短信通知,请保持手机通畅。</div>
@@ -146,6 +146,8 @@
         this.$http.get('/basic/enterprise/applyUserSpace', {params: {phone: this.user.data.userTel, enName: this.enInfo.name, businessCode: this.enInfo.businessCode}})
           .then(response => {
             if (response.data.data === 'success') {
+              this.showSearchResultStatus = 0
+              this.keyword = ''
               this.showRemindBox = true
               this.startInterval()
             } else {
@@ -164,6 +166,7 @@
           if (_this.timer === 0) {
             clearInterval(interval)
             this.showRemindBox = false
+            this.goLastPage()
           }
         }, 1000)
       },
@@ -222,7 +225,6 @@
       }
     }
     .personal-material-content {
-      height: 593px;
       border: 1px solid #ebeaea;
       margin-bottom: 147px;
       padding: 0 95px;
@@ -335,6 +337,7 @@
         }
       }
       .not-open-store {
+        margin-bottom: 62px;
         > div {
           height: 171px;
           border: 1px solid #ff8522;

+ 1 - 1
components/product/ComponentGoods.vue

@@ -25,7 +25,7 @@
         <td style="position: relative">
           <img class="sellout-flag" v-if="compGoods.status === 602" src="/images/search/sellout-search.png" alt="">
           <!--store/{{compGoods.storeId}}#/batchInfo/{{compGoods.batchCode}}-->
-          <nuxt-link v-if="compGoods.batchCode" :to="`/store/${compGoods.storeId}/${compGoods.batchCode}`" target="_blank">
+          <nuxt-link v-if="compGoods.batchCode" :to="`/store/productDetail/${compGoods.batchCode}`" target="_blank">
             <img :src="compGoods.img?compGoods.img:compGoods.brand&&compGoods.brand.logoUrl?compGoods.brand.logoUrl:'/images/all/default.png'"/>
           </nuxt-link>
             <img v-if="!compGoods.batchCode" :src="compGoods.img?compGoods.img:compGoods.brand&&compGoods.brand.logoUrl?compGoods.brand.logoUrl:'/images/all/default.png'"/>

+ 0 - 2
components/product/Recommends.vue

@@ -60,7 +60,6 @@
     margin-bottom: 20px;
   }
   #recommends .recommend-list {
-    margin-bottom: 20px;
     text-align: center;
     margin: 0;
   }
@@ -69,7 +68,6 @@
     height: 210px;
     border: 1px solid #D6D3CE;
     margin-right: 22.5px;
-    margin-bottom: 22px;
     padding: 0;
     float: left;
     overflow: hidden;

+ 1 - 1
components/product/brand/BrandComponent.vue

@@ -18,7 +18,7 @@
       </thead>
       <tbody>
         <tr class="text-center" v-for="item in list.content">
-          <td><a :href="'/product/component/' + item.uuid"><span>{{item.code}}</span></a></td>
+          <td><nuxt-link :to="'/product/component/' + item.uuid"><span>{{item.code}}</span></nuxt-link></td>
           <td><a @click="toAttach(item.attach)"><button class="btn btn-default"  :disabled="!item.attach" :class="{'disabledbtn':!item.attach}">Datasheet手册</button></a></td>
           <td>
             <button class="btn btn-default disabledbtn" :disabled="true">申请样片</button>

+ 3 - 3
components/product/component/ComponentMenu.vue

@@ -2,9 +2,9 @@
   <div class="componentMenu container">
     <div class="menu-com row">
       <div class="menu-title col-md-12">
-        <a href="/product/kind/home">器件选型</a> >
-        <span v-for="item in list">
-					<a :href="`/product/kind/${item.id}`"><span>{{item.nameCn}}</span></a>
+        <nuxt-link to="/product/kind/home">器件选型</nuxt-link> >
+        <span v-for="(item, key) in list">
+					<nuxt-link :to="`/product/kind/${item.id}`" :key="key"><span>{{item.nameCn}}</span></nuxt-link>
           <span> > </span>
 				  </span>
         <span>器件详情</span>

+ 10 - 6
components/product/component/StoreInfo.vue

@@ -46,7 +46,7 @@
           </tr>
         </thead>
         <tbody class="text-center">
-          <tr style="cursor: pointer;" v-for="list in storeList.content" @click="goProductDetail(list.storeid, list.batchCode)">
+          <tr style="cursor: pointer;" v-for="list in storeList.content" @click="goProductDetail(list.batchCode)">
             <td style="position: relative">
               <img class="sellout-flag" v-if="list.status === 602" src="/images/search/sellout-search.png" alt="">
               <a v-if="list.code">{{list.code}}</a>
@@ -260,8 +260,8 @@
         }
         this.$store.dispatch('loadComponentInformation', this.params)
       },
-      goProductDetail: function (storeid, batchcode) {
-        window.location.href = '/store/' + storeid + '/' + batchcode
+      goProductDetail: function (batchCode) {
+        window.location.href = '/store/productDetail/' + batchCode
       }
     }
   }
@@ -270,16 +270,20 @@
   .storeInfo .storeIns{
     margin-top: 20px;
     width: 1190px;
-    height: 48px;
     line-height: 48px;
+    position: relative;
+    padding-left: 70px;
   }
   .storeInfo .storeIns .sign {
-    display: table-cell;
+    display: inline-block;
     vertical-align: middle;
     font-size: 14px;
+    position: absolute;
+    left: 0;
+    top: 0;
   }
   .storeInfo .storeIns .storeInList {
-    display: table-cell;
+    display: inline-block;
   }
   .storeInfo .choose {
     border: 1px solid #ccc;

+ 4 - 4
components/product/original/OriginalDetail.vue

@@ -9,7 +9,7 @@
         <div class="hot-center clearfix">
           <div class="hot-center-1 clearfix">
             <div class="hot-pro" v-for="item in list1">
-              <a :title="item.code" :href="'/store/' + item.storeid + '/' + item.batchCode" target="_blank">
+              <a :title="item.code" :href="'/store/productDetail/' + item.batchCode" target="_blank">
                 <p><img :src="item.img" alt=""></p>
                 <span><em>{{item.code}}</em></span>
               </a>
@@ -18,7 +18,7 @@
           <div class="hot-center-2 clearfix">
             <ul>
               <li v-for="item in list2">
-                <a :title="item.code" :href="'/store/' + item.storeid + '/' + item.batchCode" target="_blank">
+                <a :title="item.code" :href="'/store/productDetail/' + item.batchCode" target="_blank">
                   <p><img :src="item.img" alt=""></p>
                   <span><em>{{item.code}}</em></span>
                 </a>
@@ -29,7 +29,7 @@
           <div class="hot-center clearfix pad-b10">
             <div class="hot-center-1 clearfix">
               <div class="hot-pro" v-for="item in list3">
-                <a title="" :title="item.code" :href="'/store/' + item.storeid + '/' + item.batchCode" target="_blank">
+                <a title="" :title="item.code" :href="'/store/productDetail/' + item.batchCode" target="_blank">
                   <p><img :src="item.img" alt=""></p>
                   <span><em>{{item.code}}</em></span>
                 </a>
@@ -38,7 +38,7 @@
             <div class="hot-center-2 clearfix">
               <ul>
                 <li v-for="item in list4">
-                  <nuxt-link title="" :to="'/store/' + item.storeid + '/' + item.batchCode" target="_blank">
+                  <nuxt-link title="" :to="'/store/productDetail/' + item.batchCode" target="_blank">
                     <p><img :src="item.img" alt=""></p>
                     <span><em>{{item.code}}</em></span>
                   </nuxt-link>

+ 1 - 1
components/provider/ExcellentSuppliers.vue

@@ -160,7 +160,7 @@ export default {
 		-webkit-line-clamp: 4;
 	}
 	.store-box .description span {
-		word-break: normal;
+		word-break: break-all;
 		width: 204px;
 		display: inline;
 		white-space: pre-wrap;

+ 1 - 1
components/provider/HotCommodity.vue

@@ -3,7 +3,7 @@
     <div class="title">热销器件</div>
     <ul class="list-unstyled list-inline">
       <li class="hot-commodity-box" v-for="(component, index) in hotComponents" :class="{ 'border-right' : index % 5 == 4 }">
-        <a :href="'/store/' + component.storeid + '/' + component.batchCode" target="_blank">
+        <a :href="'/store/productDetail/' + component.batchCode" target="_blank">
           <img :src="component.img || '/images/store/common/default.png'"/>
           <span>{{component.code}}</span>
         </a>

+ 1 - 2
components/provider/RecommendOriginal.vue

@@ -64,7 +64,6 @@ export default {
 		height: 210px;
 		border: 1px solid #D6D3CE;
 		margin-right: 22.5px;
-		margin-bottom: 22px;
 	}
 	#recommends .recommend-list .recommend:last-child{
 		margin-right: 0px !important;
@@ -138,7 +137,7 @@ export default {
 		border: #5078cb 1px solid;
 	}
 	#recommends .recommend-list .recommend .description span {
-		word-break: keep-all;
+		word-break: break-all;
 		width: 204px;
 		display: inline;
 		overflow: hidden;

+ 4 - 1
components/register-saler/register/StepFirst.vue

@@ -96,7 +96,7 @@
               <div class="x-item-ext">
                 <div class="form-group">
                   <div class="col-sm-12">
-                    <textarea id="street" name="street" rows="4" v-model="address.detail" class="form-control x-input" placeholder="xx路xx大厦xx栋xx楼xx室"></textarea>
+                    <textarea id="street" name="street" rows="4" v-model="address.detail" @input="onDetailAddressInput" class="form-control x-input" placeholder="xx路xx大厦xx栋xx楼xx室"></textarea>
                   </div>
                 </div>
                 <div class="text-right">
@@ -698,6 +698,9 @@
       },
       removeTag: function (index) {
         this.data.tagsData.splice(index, 1)
+      },
+      onDetailAddressInput: function () {
+        this.address.detail = this.address.detail.trim()
       }
     }
   }

+ 1 - 1
components/search/DetailBrand.vue

@@ -10,7 +10,7 @@
           <div>应用领域:</div><span v-for="(item, index) in applications"><span>{{item}}</span><span v-show="index+1 < applications.length">|</span></span>
         </div>
         <div class="brand-main" v-show="list.brief"><div>品牌介绍:</div><span>{{list.brief}}</span></div>
-        <div class="brand-main" v-show="list.url"><div>官网地址:</div><a class="office-address" :href="list.url">{{list.url}}</a></div>
+        <div class="brand-main" v-show="list.url"><div>官网地址:</div><a class="office-address" :href="list.url" target="_blank">{{list.url}}</a></div>
       </div>
     </div>
     <nuxt-link :to="`/product/brand/${list_brands.uuid}`" class="brand-url">进入品牌中心</nuxt-link>

+ 2 - 2
components/search/GoodList.vue

@@ -294,8 +294,8 @@
         this.$emit('filterPriceEvent', this.filter)
       },
       goUnstandardDetail: function (comp) {
-        if (!comp.brand && comp.brandEn) {
-          this.$router.push('/store/' + comp.storeId + '/' + comp.batchCode)
+        if (!comp.uuid) {
+          this.$router.push('/store/productDetail/' + comp.batchCode)
         }
       }
     }

+ 1 - 1
components/searchStore/StoreContent.vue

@@ -125,7 +125,7 @@
         this.$emit('pageAction', page)
       },
       goStore: function (index, compIndex) {
-        window.open('/store/' + this.componentData[index].content[compIndex].storeid + '/' + this.componentData[index].content[compIndex].batchCode)
+        window.open('/store/productDetail/' + this.componentData[index].content[compIndex].batchCode)
       }
     }
   }

+ 7 - 7
components/store/BaseInfo.vue

@@ -4,12 +4,12 @@
       <div class="container">
         <div class="menu-com row">
           <div class="menu-title col-md-12">
-            <a href="/">商城首页</a> >
-            <a href="/provider/home" v-if="storeInfo.type == 'AGENCY' || storeInfo.type == 'DISTRIBUTION'" title="代理经销">代理经销</a>
-            <a href="/provider/factories" v-if="storeInfo.type == 'ORIGINAL_FACTORY'" title="原厂专区">原厂专区</a>
-            <a :href="'/store/' + storeInfo.uuid" v-if="storeInfo.type == 'CONSIGNMENT'" title="库存寄售">库存寄售</a>
+            <nuxt-link to="/">商城首页</nuxt-link> >
+            <nuxt-link to="/provider/home" v-if="storeInfo.type == 'AGENCY' || storeInfo.type == 'DISTRIBUTION'" title="代理经销">代理经销</nuxt-link>
+            <nuxt-link to="/provider/factories" v-if="storeInfo.type == 'ORIGINAL_FACTORY'" title="原厂专区">原厂专区</nuxt-link>
+            <nuxt-link :to="'/store/' + storeInfo.uuid" v-if="storeInfo.type == 'CONSIGNMENT'" title="库存寄售">库存寄售</nuxt-link>
             >
-            <span v-if="storeInfo.type != 'CONSIGNMENT'"><a :href="'/store/' + storeInfo.uuid" :title="storeInfo.storeName" v-text="storeInfo.storeName">店铺名称</a>> </span>
+            <span v-if="storeInfo.type != 'CONSIGNMENT'"><nuxt-link :to="'/store/' + storeInfo.uuid" :title="storeInfo.storeName" v-text="storeInfo.storeName">店铺名称</nuxt-link>> </span>
             <span>了解更多</span>
           </div>
         </div>
@@ -17,7 +17,7 @@
           <h3 class="col-xs-2">
             商家介绍
           </h3>
-          <a class="col-xs-10" :href="'/store/' + storeInfo.uuid">返回店铺</a>
+          <nuxt-link class="col-xs-10" :to="'/store/' + storeInfo.uuid">返回店铺</nuxt-link>
         </div>
         <div class="intro-text" v-text="storeInfo.description">店铺简介</div>
       </div>
@@ -40,7 +40,7 @@
       </div>
     </div>
     <div id="proof-fragment" v-show="qualifications.length > 0">
-      <div class="container" style="margin-top: 30px; margin-bottom: 20px;">
+      <div class="container" style="margin-top: 30px; margin-bottom: 60px;">
         <div class="proof-title">
           <h3>
             资质证明

+ 5 - 5
components/store/CommodityInfo.vue

@@ -2,12 +2,12 @@
   <div>
     <div class="menu-com row">
       <div class="menu-title col-md-12">
-        <a href="/">商城首页</a> >
-        <a href="/provider/home" v-if="storeInfo.type == 'AGENCY' || storeInfo.type == 'DISTRIBUTION'" title="代理经销">代理经销</a>
-        <a href="/provider/factories" v-if="storeInfo.type == 'ORIGINAL_FACTORY'" title="原厂专区">原厂专区</a>
-        <a :href="'/store/' + storeInfo.uuid" v-if="storeInfo.type == 'CONSIGNMENT'" title="库存寄售">库存寄售</a>
+        <nuxt-link to="/">商城首页</nuxt-link> >
+        <nuxt-link to="/provider/home" v-if="storeInfo.type == 'AGENCY' || storeInfo.type == 'DISTRIBUTION'" title="代理经销">代理经销</nuxt-link>
+        <nuxt-link to="/provider/factories" v-if="storeInfo.type == 'ORIGINAL_FACTORY'" title="原厂专区">原厂专区</nuxt-link>
+        <nuxt-link :to="'/store/' + storeInfo.uuid" v-if="storeInfo.type == 'CONSIGNMENT'" title="库存寄售">库存寄售</nuxt-link>
         >
-        <span v-if="storeInfo.type != 'CONSIGNMENT'"><a :href="'/store/' + storeInfo.uuid" :title="storeInfo.storeName" v-text="storeInfo.storeName">storeInfo.storeName</a>> </span>
+        <span v-if="storeInfo.type != 'CONSIGNMENT'"><nuxt-link :to="'/store/' + storeInfo.uuid" :title="storeInfo.storeName" v-text="storeInfo.storeName">storeInfo.storeName</nuxt-link>> </span>
         <span>产品详情</span>
       </div>
     </div>

+ 114 - 8
components/store/CommodityList.vue

@@ -6,7 +6,7 @@
           <span style="line-height: 34px;">产品分类</span>
         </div>
         <div class="category-content">
-          <el-tree :data="kinds" :props="defaultProps" :default-expanded-keys="[0]" node-key="level" accordion :highlight-current="true" @current-change="handlerCurrentNode"></el-tree>
+          <el-tree :data="kinds" :props="defaultProps" :default-expanded-keys="[0]" node-key="level" accordion :highlight-current="true" @node-expand="handlerCurrentNode" @node-collapse="onNodeCollapse"></el-tree>
         </div>
       </div>
       <!-- 产品列表 -->
@@ -44,9 +44,10 @@
           </tr>
           </thead>
           <tbody id="goodslist-content">
-          <tr v-for="commodity in commodities.content" @click="goBatchDetail(storeInfo.uuid, commodity.batchCode)">
+          <tr v-for="commodity in commodities.content" @click="goBatchDetail(commodity.batchCode)">
             <td class="brand-code">
               <img class="sellout-store-commodity" v-if="commodity.status === 602" src="/images/search/sellout-search.png" alt="">
+              <img class="specific-price-tag" v-if="isSpecificPriceTag(commodity.tag) && isConsignment" src="/images/floor/specificPrice-store.png" alt="">
               <div class="brand" v-if="commodity.brandNameEn || commodity.brandEn">
                 <a v-if="commodity.brandNameEn && commodity.branduuid" @click="goBrandDetail('/product/brand/' + commodity.branduuid, $event)" v-text="commodity.brandNameEn"></a>
                 <span v-if="commodity.brandNameEn && !commodity.branduuid" v-text="commodity.brandNameEn"></span>
@@ -126,10 +127,13 @@
           </tr>
           </tbody>
         </table>
-        <div style="float: right;">
-          <page :total="commodities.totalElements" :page-size="pageParams.count"
-                :current="pageParams.page" @childEvent="handleCurrentChange"></page>
+        <div class="remind-area">
+          <img src="/images/store/store-remind.png" alt="">
+          所有报价、库存信息的真实性及准确性均由店铺负责,如有疑问请点击
+          <a @click="goWebChat()" class="link-seller">联系卖家</a>
         </div>
+        <page :total="commodities.totalElements" :page-size="pageParams.count"
+              :current="pageParams.page" @childEvent="handleCurrentChange"></page>
       </div>
     </div>
   </div>
@@ -211,9 +215,21 @@ export default {
     },
     storeInfo () {
       return this.$store.state.shop.storeInfo.store.data
+    },
+    user () {
+      return this.$store.state.option.user
+    },
+    tab () {
+      return this.$store.state.chat.tab.tab.data
+    },
+    isConsignment () {
+      return this.storeInfo.type === 'CONSIGNMENT'
     }
   },
   methods: {
+    isSpecificPriceTag: function (tag) {
+      return tag && tag.indexOf('特价') !== -1
+    },
     handlerCurrentNode (data, node) {
       this.searchCode = ''
       if (this.parentKindId === data.id) {
@@ -229,6 +245,9 @@ export default {
 
       this.pageCommodity(this.pageParams, this.ids)
     },
+    onNodeCollapse () {
+      this.parentKindId = ''
+    },
     goodsSearch (keyword) {
       this.pageParams.page = 1
       this.pageCommodity(this.pageParams, this.ids, keyword)
@@ -255,12 +274,74 @@ export default {
       this.pageParams.page = page
       this.pageCommodity(this.pageParams, this.ids, this.searchCode)
     },
-    goBatchDetail (storeId, batchCode) {
-      window.open('/store/' + storeId + '/' + batchCode)
+    goBatchDetail (batchCode) {
+      window.open('/store/productDetail/' + batchCode)
     },
     goBrandDetail (url, event) {
       event.stopPropagation()
       window.open(url)
+    },
+    goWebChat: function () {
+      if (!this.user.logged) {
+        this.$http.get('/login/page').then(response => {
+          if (response.data) {
+            this.$router.push('/auth/login')
+          }
+        })
+      } else {
+        // 获得窗口的垂直位置
+        let iTop = (window.screen.availHeight - 30 - 780) / 2
+        // 获得窗口的水平位置
+        let iLeft = (window.screen.availWidth - 10 - 1030) / 2
+        if (this.tab.close) {
+          this.tab.close()
+        }
+        let newTab = window.open('', '即时对话框', 'height=750, width=1000, top=' + iTop + ', left=' + iLeft + ', toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no')
+        newTab.close()
+        newTab = window.open('', '即时对话框', 'height=750, width=1000, top=' + iTop + ', left=' + iLeft + ', toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no')
+        this.$store.dispatch('chat/setChatTab', {tab: newTab})
+        this.$http.get('/basic/enterprise/' + this.storeInfo.enUU + '/info')
+          .then(response => {
+            let obj = {}
+            obj.userPhone = this.user.data.userTel
+            obj.userType = 'ENTERPRISE'
+            this.user.data.enterprises.forEach(function (item, index) {
+              if (item.current) {
+                obj.enUU = item.uu
+                obj.enterprise = {enUU: item.uu, name: item.enName}
+              }
+            })
+            obj.otherEnUU = response.data.uu
+            obj.otherUserType = 'STORE'
+            obj.otherEnterprise = {enUU: response.data.uu, name: response.data.enName}
+            obj.type = 'CHAT'
+            if (!(/^1\d{10}$/).test(response.data.enTel)) {
+              this.$http.get('/basic/enterprise/' + response.data.uu + '/admin').then(response => {
+                console.log(response)
+                obj.toPhone = response.data.userTel
+                console.log(obj)
+                this.openWebChat(newTab, obj)
+              }, err => {
+                console.log(err)
+                this.$message.error('暂无卖家管理员手机号!')
+              })
+            } else {
+              obj.toPhone = response.data.enTel
+              console.log(obj)
+              this.openWebChat(newTab, obj)
+            }
+          }, err => {
+            console.log(err)
+          })
+      }
+    },
+    openWebChat: function (newTab, obj) {
+      this.$http.post('https://im.ubtob.com/api/chat/infos?condition=chat_info', obj)
+        .then(response => {
+          if (response.data.success) {
+            newTab.location.href = 'https://im.ubtob.com/chat/visit?gid=' + response.data.content
+          }
+        })
     }
 //    goBack () {
 //      this.$router.back(-1)
@@ -481,6 +562,11 @@ export default {
     position: absolute;
     right: 0;
     bottom: 0;
+  }
+  #goods-list-fragment .goodslist tbody>tr td.brand-code .specific-price-tag {
+    position: absolute;
+    top: 0;
+    left: 0;
   }
 	#goods-list-fragment .goodslist td {
 		font-size: 12px;
@@ -560,7 +646,7 @@ export default {
 		font-size: 14px;
 	}
 	.goodslist{
-		margin-bottom: 16px;
+		margin-bottom: 11px;
 	}
 
 	@font-face {
@@ -577,4 +663,24 @@ export default {
     border-color: #5078cb !important;
     background-color: #5078cb !important;
   }
+
+  .remind-area {
+    font-size: 12px;
+    color: #666;
+  }
+  .remind-area img {
+    margin-right: 12px;
+  }
+  .remind-area .link-seller {
+    font-size: 12px;
+    color: #fff;
+    line-height: 20px;
+    height: 20px;
+    padding: 0 7px;
+    background: #ef7f03;
+    border-radius: 2px;
+  }
+  #goods-list-fragment .goods-area .page-wrap {
+    margin-top: 18px;
+  }
 </style>

+ 11 - 2
components/store/RecommendProduct.vue

@@ -3,6 +3,7 @@
     <div class="recommend-list">
       <ul>
         <li v-for="commodity in commodities">
+          <img v-if="isConsignment" class="specific-img" src="/images/floor/specificPrice-home.png" alt="">
           <div class="img">
             <a href="javascript:void(0);">
               <img :src="commodity.comImg.startsWith('static')?'/'+commodity.comImg:commodity.comImg"/>
@@ -14,8 +15,8 @@
             <p class="price" v-if="commodity.minPriceRMB">¥ {{commodity.minPriceRMB | currency}}</p>
             <p class="price" v-if="!commodity.minPriceRMB">$ {{commodity.minPriceUSD | currency}}</p>
           </div>
-          <div class="hover-show" :href="commodity.batchCode ? '/store/' + storeInfo.uuid + '/' + commodity.batchCode : '#'">
-            <a :href="commodity.batchCode ? '/store/' + storeInfo.uuid + '/' + commodity.batchCode : '#'" class="href">
+          <div class="hover-show" :href="commodity.batchCode ? '/store/productDetail/'  + commodity.batchCode : ''">
+            <a :href="commodity.batchCode ? '/store/productDetail/' + commodity.batchCode : ''" class="href">
               <div class="title" v-text="commodity.comCode">MRFE6S9045NF001</div>
               <div class="type" v-text="commodity.brandNameCn">PANFAEFQ</div>
               <div class="hr"><span>抢购价</span></div>
@@ -44,6 +45,9 @@
       },
       storeInfo () {
         return this.$store.state.shop.storeInfo.store.data
+      },
+      isConsignment () {
+        return this.storeInfo.type === 'CONSIGNMENT'
       }
     },
     filters: {
@@ -260,6 +264,11 @@
     text-align: center;
     line-height: 170px;
   }
+  #recommend-fragment ul li .specific-img {
+    position: absolute;
+    left: 0;
+    top: 0;
+  }
   #recommend-fragment ul li .img img{
     max-width: 120px;
     max-height: 120px;

+ 9 - 0
layouts/shop.vue

@@ -4,7 +4,9 @@
     <store-header/>
     <store-title/>
     <img v-if="isConsignment" class="banner-img" src="/images/all/banner-consignment.png" alt="">
+    <!--<img v-if="isConsignment" class="cuxiao-banner" src="/images/all/banner-cuxiao.png" alt="">-->
     <nuxt/>
+    <img v-if="isConsignment && !isInDetail" class="banner-img" src="/images/all/banner-consignment2.jpg" alt="" style="margin: 10px auto 30px;">
     <footer-view></footer-view>
     <right-bar></right-bar>
   </div>
@@ -93,6 +95,9 @@
       isConsignment () {
         return this.storeInfo.type === 'CONSIGNMENT'
       },
+      isInDetail () {
+        return this.$route.path.indexOf('/store/productDetail/') !== -1
+      },
       commodity () {
         return this.$store.state.shop.storeInfo.commodity.data
       }
@@ -117,4 +122,8 @@
   .banner-img {
     margin-top: -10px;
   }
+  .cuxiao-banner {
+    margin: 15px auto 20px ;
+    display: block;
+  }
 </style>

+ 47 - 3
nuxt.config.js

@@ -1,6 +1,6 @@
 const path = require('path')
 const isProdMode = Object.is(process.env.NODE_ENV, 'production')
-const baseUrl = process.env.BASE_URL || (isProdMode ? 'http://10.10.100.107:8081/platform-b2c/' : 'http://10.1.51.90:8080/platform-b2c/')
+const baseUrl = process.env.BASE_URL || (isProdMode ? 'http://192.168.253.60:9090/platform-b2c/' : 'http://192.168.253.121:9090/platform-b2c/')
 
 module.exports = {
   router: {
@@ -104,6 +104,50 @@ module.exports = {
     src: '~plugins/jsonp.js',
     ssr: false
   }],
-  /* TODO 暂时代理到商城测试版,之后再做出调整 */
-  proxyTable: ['/api/**', '/search/**', '/user/**', '/login/**', '/register/**', '/logout/**', '/static/**', '/vendor**', '/user**', '/trade/**', '/recommendation/**', '/store-service/**', '/basic/**', '/logout**', '/operation/**', '/help**', '/product**', '/store**', '/order/proxy**', '/report/**', '/store/**#/**', '/kdn/**', '/product/**Submit', '/admin**', '/product/**Submit/**', '/release/**', '/auth/store/**', '/produce/**', '/file**', '/rate/**', '/log/**', '/help-service/**', '/keyword/**', '/tip/**', '/seek/**']
+  // proxyTable: ['/api/**', '/search/**', '/user/**', '/login/**', '/register/**', '/logout/**', '/static/**', '/vendor**', '/user**', '/trade/**', '/recommendation/**', '/store-service/**', '/basic/**', '/logout**', '/operation/**', '/help**', '/product**', '/store**', '/order/proxy**', '/report/**', '/store/**#/**', '/kdn/**', '/product/**Submit', '/admin**', '/product/**Submit/**', '/release/**', '/auth/store/**', '/produce/**', '/file**', '/rate/**', '/log/**', '/help-service/**', '/keyword/**', '/tip/**', '/UASBatchPutOnProperty**', '/UASBatchPutOnProperty/**']
+  /**
+   * http-proxy configuration example: {
+   *    '/api/order/**': 'https://api-order.example.com',
+   *    '/api/product/**': 'https://api-product.example.com'
+   *   }
+   */
+  proxyTable: {
+    '/api/**': baseUrl,
+    '/search/**': baseUrl,
+    '/user/**': baseUrl,
+    '/user**': baseUrl,
+    '/login/**': baseUrl,
+    '/register/**': baseUrl,
+    '/logout/**': baseUrl,
+    '/static/**': baseUrl,
+    '/vendor**': baseUrl,
+    '/trade/**': baseUrl,
+    '/recommendation/**': baseUrl,
+    '/store-service/**': baseUrl,
+    '/basic/**': baseUrl,
+    '/logout**': baseUrl,
+    '/operation/**': baseUrl,
+    '/help**': baseUrl,
+    '/product**': baseUrl,
+    '/store**': baseUrl,
+    '/order/proxy**': baseUrl,
+    '/report/**': baseUrl,
+    '/store/**#/**': baseUrl,
+    '/kdn/**': baseUrl,
+    '/product/**Submit': baseUrl,
+    '/admin**': baseUrl,
+    '/product/**Submit/**': baseUrl,
+    '/release/**': baseUrl,
+    '/auth/store/**': baseUrl,
+    '/produce/**': baseUrl,
+    '/file**': baseUrl,
+    '/rate/**': baseUrl,
+    '/log/**': baseUrl,
+    '/help-service/**': baseUrl,
+    '/keyword/**': baseUrl,
+    '/tip/**': baseUrl,
+    '/UASBatchPutOnProperty**': baseUrl,
+    '/UASBatchPutOnProperty/**': baseUrl,
+    '/seek/**': baseUrl
+  }
 }

+ 59 - 17
pages/activity/business.vue

@@ -7,12 +7,13 @@
     <!--介绍-->
     <div class="session introduction">
       <div class="content">
-        <h3>优软商城</h3>
+        <h3>优软商城介绍</h3>
+        <div class="theme"></div>
         <div class="text">
-          优软商城是由深圳市优软商城科技有限公司,为真正地解决电子信息行业的众多难题,秉持回归互联网精神的“分享与链接”,<br/>
-          基于垂直细分理念打造的一个独立的第三方电子交易商城。目前优软商城已经收录了3000家的原厂品牌,700多万现货型号.<br/>
-          针对电子信息行业的难题,优软商城将为客户提供更简单,更放心的解决方案。<br/>
-          我们严格把关供应商资质,从源头上杜绝虚假信息,做到付款交期如实,借助物流仓储的一站式服务帮您实现交易高效、库存无忧。<br/>
+          <p> 优软商城是由深圳市优软商城科技有限公司,为真正地解决电子信息行业的众多难题,秉持回归互联网精神的“分享与链接”,
+          基于垂直细分理念打造的一个独立的第三方电子交易商城。目前优软商城已经收录了3000家的原厂品牌,700多万现货型号.</p>
+          针对电子信息行业的难题,优软商城将为客户提供更简单,更放心的解决方案。
+          <p>我们严格把关供应商资质,从源头上杜绝虚假信息,做到付款交期如实,借助物流仓储的一站式服务帮您实现交易高效、库存无忧。</p>
         </div>
         <div class="join">
           <a href="https://account.ubtob.com/sso/register_mall?appId=mall&returnURL=https%3A%2F%2Fwww.usoftmall.com%2F%3FreturnURL%3Dhttps%253A%252F%252Fwww.usoftmall.com%252F
@@ -22,30 +23,31 @@
     </div>
     <div class="session advantage">
       <div class="content">
-        <h3>大特色功能</h3>
+        <h3>大特色功能</h3>
         <div class="advantage-list">
           <ul>
             <li>
+              <img src="/images/activity/advantage01.png" alt="">
               <p class="title">标准器件库</p>
               <p>原厂型号,从源头上杜绝假货,品质更放心,售后有保障。</p>
             </li>
             <li>
+              <img src="/images/activity/advantage02.png" alt="">
               <p class="title">元器件选型</p>
               <p>3000家原厂品牌,700万产品型号,一键搜索,选您所需。</p>
             </li>
             <li>
+              <img src="/images/activity/advantage03.png" alt="">
               <p class="title">现货交易</p>
               <p>现货交易,如期如实,一周交货,生产高效不断链。</p>
             </li>
             <li>
+              <img src="/images/activity/advantage04.png" alt="">
               <p class="title">库存寄售</p>
               <p>死库料号,无需开店,免费注册,即可上架售卖。</p>
             </li>
             <li>
-              <p class="title">样品申领</p>
-              <p>海量原装料号,先试用再下单,采购零误差。</p>
-            </li>
-            <li>
+              <img src="/images/activity/advantage06.png" alt="">
               <p class="title">电子社区</p>
               <p>齐聚全球大人、发烧友和行业专家,分享行业快讯,交流高新技术难题。</p>
             </li>
@@ -60,6 +62,7 @@
     <div class="session style">
       <div class="content">
         <h3>商家入驻  优势多多</h3>
+        <div class="theme"></div>
         <div class="style-list">
           <ul>
             <li>
@@ -67,31 +70,31 @@
               <p>真实客户</p>
             </li>
             <li>
-              <img src="/images/activity/style02.jpg" alt="">
+              <img  src="/images/activity/style02.jpg" alt="">
               <p>免费入驻</p>
             </li>
             <li>
-              <img src="/images/activity/style03.jpg" alt="">
+              <img  src="/images/activity/style03.jpg" alt="">
               <p>免费广告</p>
             </li>
             <li>
-              <img src="/images/activity/style04.jpg" alt="">
+              <img  src="/images/activity/style04.jpg" alt="">
               <p>海量订单</p>
             </li>
             <li>
-              <img src="/images/activity/style05.jpg" alt="">
+              <img  src="/images/activity/style05.jpg" alt="">
               <p>极速上传</p>
             </li>
             <li>
-              <img src="/images/activity/style06.jpg" alt="">
+              <img  src="/images/activity/style06.jpg" alt="">
               <p>零佣金</p>
             </li>
             <li>
-              <img src="/images/activity/style07.jpg" alt="">
+              <img  src="/images/activity/style07.jpg" alt="">
               <p>库存寄售</p>
             </li>
             <li>
-              <img src="/images/activity/style08.jpg" alt="">
+              <img  src="/images/activity/style08.jpg" alt="">
               <p>订单通知</p>
             </li>
           </ul>
@@ -125,6 +128,45 @@
         </div>
       </div>
     </div>
+    <div class="session contact-us">
+      <div class="content">
+        <h3>联系我们</h3>
+        <div class="contact-step">
+          <img src="/images/activity/contact02.png" alt="">
+          <div>
+           <ul>
+             <li class="list-one">地址:深圳市南山区科技南五路5号英唐大厦1楼</li>
+             <li class="list-two">邮箱:yrsc@usoftchina.com</li>
+             <li class="list-three">电话:400-830-1818</li>
+           </ul>
+          </div>
+        </div>
+      </div>
+    </div>
+    <div class="session function-hinting">
+      <div class="content">
+        <div class="hinting-list">
+          <ul>
+            <li>
+              <img src="/images/activity/enter01.png" alt="">
+              <p>订单查询</p>
+            </li>
+            <li>
+              <img src="/images/activity/enter02.png" alt="">
+              <p>器件选型</p>
+            </li>
+            <li>
+              <img src="/images/activity/enter03.png" alt="">
+              <p>快速入住</p>
+            </li>
+            <li>
+              <img src="/images/activity/enter04.png" alt="">
+              <p>品牌百科</p>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </div>
   </div>
 </template>
 <script>

+ 1 - 1
pages/help/helpDetail/_id.vue

@@ -11,7 +11,7 @@
           <div class="help-center">
             <div class="help-head"><img src="/images/help/help-title.png"></div>
             <div class="help-center-title">
-              <a v-bind:href="'/help/home'" style="font-size: 14px">帮助中心首页<i class="fa fa-angle-right"></i></a>
+              <nuxt-link :to="'/help/home'" style="font-size: 14px">帮助中心首页<i class="fa fa-angle-right"></i></nuxt-link>
               <span>
               <nuxt-link :to="`/help/home`" class="box" style="font-size: 16px">
                 <span>{{helpTitle.item}}</span><i class="fa fa-close"></i></nuxt-link>

+ 1 - 1
pages/help/helpList/_id.vue

@@ -11,7 +11,7 @@
           <div class="help-center">
             <div class="help-head"><img src="/images/help/help-title.png"></div>
             <div class="help-center-title">
-              <a v-bind:href="'/help/home'" style="font-size: 14px">帮助中心首页<i class="fa fa-angle-right"></i></a>
+              <nuxt-link :to="'/help/home'" style="font-size: 14px">帮助中心首页<i class="fa fa-angle-right"></i></nuxt-link>
               <span>
                 <nuxt-link :to="`/help/home`" class="box" style="font-size: 16px"><span>{{helpTitle.item}}</span><i class="fa fa-close"></i></nuxt-link>
               </span>

+ 1 - 1
pages/help/home.vue

@@ -11,7 +11,7 @@
           <div class="help-center">
             <div class="help-head"><img src="/images/help/help-title.png"></div>
             <div class="help-center-title">
-              <a style="font-size: 14px" v-bind:href="'/help/home'">帮助中心首页</a>
+              <nuxt-link style="font-size: 14px" :to="'/help/home'">帮助中心首页</nuxt-link>
             </div>
             <div class="help-center-home">
               <div v-for="nav01 in helpNav">

+ 55 - 37
pages/index.vue

@@ -10,6 +10,7 @@
       </carousel>
       <advert></advert>
       <floor-list></floor-list>
+      <img class="banner-img" src="/images/all/banner-home2.jpg" style="margin: 44px auto 24px;" alt="">
       <news></news>
       <partner></partner>
     </div>
@@ -28,7 +29,33 @@
     data () {
       return {
         isOpen: false,
-        hasNewYear: false
+        hasNewYear: false,
+        defaultFloorsData: [
+//        'BT2018012500000141',
+//        'BT2018012500000126',
+//        'BT2018012500000131',
+//        'BT2018012500000152',
+//        'BT2018012500000124',
+//        'BT2018012500000164',
+//        'BT2018012500000167',
+//        'BT2018012500000145',
+//        'BT2018012500000151',
+//        'BT2018012500000161',
+//        'BT2018012500000149',
+//        'BT2018012500000162'
+          'BT2018012900002056',
+          'BT2018012900002056',
+          'BT2018012900002056',
+          'BT2018012900002056',
+          'BT2018012900002056',
+          'BT2018012900002056',
+          'BT2018012900002056',
+          'BT2018012900002056',
+          'BT2018012900002056',
+          'BT2018012900002056',
+          'BT2018012900002056',
+          'BT2018012900002056'
+        ]
       }
     },
     components: {
@@ -46,44 +73,35 @@
         store.dispatch('loadFloors'),
         store.dispatch('loadBanners', {type: 'home'}),
         store.dispatch('loadProductKinds', { id: 0 }),
-        store.dispatch('loadNewsSnapshot', { page: 1, pageSize: 10 })
+        store.dispatch('loadNewsSnapshot', { page: 1, pageSize: 10 }),
+        store.dispatch('loadBatchCommodities', {batchCodeList: store.state.option.url === 'http://www.usoftmall.com' ? [
+          'BT2018013000000043',
+          'BT2018013000000026',
+          'BT2018013000000030',
+          'BT2018013000000052',
+          'BT2018013000000025',
+          'BT2018013000000053',
+          'BT2018013000000033',
+          'BT2018013000000047',
+          'BT2018013000000057',
+          'BT2018013000000048',
+          'BT2018013000000051',
+          'BT2018013000000020'] : [
+            'BT2018012900002056',
+            'BT2018012900002056',
+            'BT2018012900002056',
+            'BT2018012900002056',
+            'BT2018012900002056',
+            'BT2018012900002056',
+            'BT2018012900002056',
+            'BT2018012900002056',
+            'BT2018012900002056',
+            'BT2018012900002056',
+            'BT2018012900002056',
+            'BT2018012900002056']
+        })
       ]) : []
     },
-    mounted () {
-      let user = this.user.logged
-      let count = 1
-      let self = this
-      const nowDate = new Date()
-      const activeStartDate = new Date('2017/12/20 00:00:00')
-      const activeEndDate = new Date('2018/1/2 00:00:00')
-      const EndDate = new Date('2017/12/26 00:00:00')
-      this.hasNewYear = nowDate > EndDate
-      if (nowDate > activeStartDate && nowDate < activeEndDate) {
-        const endTime = window.localStorage.getItem('endTime')
-        if (!user) {
-          setInterval(function () {
-            count++
-            if (count >= 60 * 60 * 2) {
-              count = 1
-              self.isOpen = true
-            }
-          }, 1000)
-        }
-        if (endTime) {
-          if (nowDate.getTime() - endTime >= 1000 * 60 * 60 * 2) {
-            user ? this.isOpen = false : this.isOpen = true
-            window.localStorage.setItem('endTime', nowDate.getTime())
-          } else {
-            this.isOpen = false
-          }
-        } else {
-          user ? this.isOpen = false : this.isOpen = true
-          window.localStorage.setItem('endTime', nowDate.getTime())
-        }
-      } else {
-        this.isOpen = false
-      }
-    },
     computed: {
       user () {
         return this.$store.state.option.user

+ 6 - 1
pages/mobile/search/_keycode.vue

@@ -176,7 +176,12 @@
       },
       goComponent: function (uuid) {
         if (!this.isClickCollect) {
-          this.$router.push('/mobile/brand/componentDetail/' + uuid)
+          if (uuid) {
+            this.$router.push('/mobile/brand/componentDetail/' + uuid)
+          } else {
+            this.collectResult = '卖家上传的产品暂无参数,请联系卖家了解具体详情。'
+            this.timeoutCount++
+          }
         } else {
           this.isClickCollect = false
         }

+ 2 - 1
pages/personalMaterial/index.vue

@@ -4,8 +4,9 @@
   </div>
 </template>
 <script>
-  import {PersonalMaterial} from '~components/PersonalMaterial'
+  import {PersonalMaterial} from '~components/personalMaterial'
   export default {
+    middleware: 'authenticated',
     components: {
       PersonalMaterial
     }

+ 1 - 0
pages/product/brand/brandList.vue

@@ -2,6 +2,7 @@
   <div>
     <img class="banner-img" src="/images/all/banner-brandcenter.jpg" alt="">
     <recommends></recommends>
+    <img class="banner-img" src="/images/all/banner-brandcenter2.jpg" alt="">
     <div id="brandsList" class="container">
       <div class="title-icon">品牌索引</div>
       <div class="hr-blue"></div>

+ 2 - 0
pages/provider/factories.vue

@@ -8,6 +8,8 @@
 
     <recommend-original/>
 
+    <img class="banner-img" src="/images/all/banner-original2.jpg" style="margin: 15px auto;" alt="">
+
     <suppliers :types="'ORIGINAL_FACTORY'"/>
   </div>
 </template>

+ 3 - 0
pages/provider/home.vue

@@ -8,6 +8,9 @@
     <excellent-suppliers :isShowMore="true"/>
 
     <hot-commodity/>
+
+    <img class="banner-img" src="/images/all/banner-agency2.jpg" alt="" style="margin: 63px auto 43px;">
+
   </div>
 </template>
 <script>

+ 0 - 0
pages/store/_uuid/_batchCode.vue → pages/store/productDetail/_batchCode.vue


+ 21 - 0
run.sh

@@ -3,7 +3,28 @@
 echo "NODE_ENV: $NODE_ENV"
 echo "BASE_URL: $BASE_URL"
 
+updateHost(){
+  in_ip = ${1}
+  in_url = ${2}
+  inner_host=`cat /etc/hosts | grep ${in_url} | awk '{print $1}'`
+  if [ ${inner_host} = ${in_ip} ];then
+    echo "${inner_host} ${in_url} ok"
+  else
+    if [ ${inner_host} != "" ];then
+      echo " change is ok "
+    else
+      inner_ip_map="${in_ip} ${in_url}"
+      echo ${inner_ip_map} >> /etc/hosts
+      if [ $? = 0 ]; then
+        echo "${inner_ip_map} to hosts success host is `cat /etc/hosts`"
+      fi
+    fi
+  fi
+}
+
 if [ "$NODE_ENV" == 'production' ]; then
+  # updateHost 10.10.0.150 api-order.usoftmall.com
+  # updateHost 10.10.0.150 api-product.usoftmall.com
   npm run build
   npm run start
 else

+ 22 - 19
server.js

@@ -5,6 +5,7 @@ const cookiejar = require('cookiejar')
 const host = process.env.HOST || '127.0.0.1'
 const port = process.env.PORT || 3000
 process.noDeprecation = true
+const url = require('url')
 
 app.set('port', port)
 
@@ -16,39 +17,41 @@ config.dev = !(process.env.NODE_ENV === 'production')
 const proxyTable = config.proxyTable
 if (proxyTable) {
   // 本地代理支持localhost、127.0.0.1等不同地址跨域
-  app.use((req, res, next, store) => {
+  app.use((req, res, next) => {
     res.header('Access-Control-Allow-Origin', '*')
     res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE')
     res.header('Access-Control-Allow-Headers', 'Content-Type')
     res.header('Access-Control-Allow-Credentials', 'true')
-    if (res.req.headers.referer && res.req.headers.referer.substring(res.req.headers.referer.length - 9, res.req.headers.referer.length) === '?type=erp') {
+    const refer = res.req.headers.referer
+    if (refer && url.parse(refer, true).query.type === 'erp') {
       res.cookie('type', 'erp')
     }
     next()
   })
+  const defaultOptions = {
+    target: config.env.baseUrl,
+    changeOrigin: true,
+    onProxyRes: (proxyRes) => {
+      const setCookieHeaders = proxyRes.headers['set-cookie'] || []
+      const modifiedSetCookieHeaders = setCookieHeaders
+        .map(str => new cookiejar.Cookie(str))
+        .map(cookie => {
+          cookie.path = '/'
+          return cookie
+        })
+        .map(cookie => cookie.toString())
+      proxyRes.headers['set-cookie'] = modifiedSetCookieHeaders
+    }
+  }
   if (Array.isArray(proxyTable)) {
-    app.use(proxy(proxyTable, {
-      target: config.env.baseUrl,
-      changeOrigin: true,
-      onProxyRes: (proxyRes) => {
-        const setCookieHeaders = proxyRes.headers['set-cookie'] || []
-        const modifiedSetCookieHeaders = setCookieHeaders
-          .map(str => new cookiejar.Cookie(str))
-          .map(cookie => {
-            cookie.path = '/'
-            return cookie
-          })
-          .map(cookie => cookie.toString())
-        proxyRes.headers['set-cookie'] = modifiedSetCookieHeaders
-      }
-    }))
+    app.use(proxy(proxyTable, defaultOptions))
   } else {
     Object.keys(proxyTable).forEach((context) => {
       var options = proxyTable[context]
       if (typeof options === 'string') {
-        options = { target: options }
+        options = {target: options}
       }
-      app.use(proxy(context, options))
+      app.use(proxy(context, Object.assign(defaultOptions, options)))
     })
   }
   // axios use proxy url

二進制
static/images/activity/advantage01.png


二進制
static/images/activity/advantage02.png


二進制
static/images/activity/advantage03.png


二進制
static/images/activity/advantage04.png


二進制
static/images/activity/advantage05.png


二進制
static/images/activity/advantage06.png


二進制
static/images/activity/business-banner.png


二進制
static/images/activity/conection01.png


二進制
static/images/activity/conection02.png


二進制
static/images/activity/contact01.png


二進制
static/images/activity/contact02.png


二進制
static/images/activity/contact03.png


二進制
static/images/activity/contact04.png


二進制
static/images/activity/contact05.png


二進制
static/images/activity/enter01.png


二進制
static/images/activity/enter02.png


二進制
static/images/activity/enter03.png


二進制
static/images/activity/enter04.png


二進制
static/images/all/banner-agency2.jpg


二進制
static/images/all/banner-brandcenter2.jpg


二進制
static/images/all/banner-consignment2.jpg


二進制
static/images/all/banner-cuxiao.png


二進制
static/images/all/banner-home2.jpg


二進制
static/images/all/banner-original2.jpg


二進制
static/images/floor/2SD2704KT146.png


二進制
static/images/floor/BL125-27RL-TAGF.png


二進制
static/images/floor/BL8563CKETR18.png


二進制
static/images/floor/BU28TD3WG-TR.png


二進制
static/images/floor/BU30TD2WNVX-TL.png


二進制
static/images/floor/EMVE350ADA331MJA0G.png


二進制
static/images/floor/EMZR100ADA471MF801.png


二進制
static/images/floor/RHU002N06T106.png


二進制
static/images/floor/RRR015P03TL.png


二進制
static/images/floor/RSB6.8CST2RA.png


二進制
static/images/floor/RSU002P03T106.png


二進制
static/images/floor/US6K4TR.png


二進制
static/images/floor/banner1.jpg


二進制
static/images/floor/banner2.jpg


二進制
static/images/floor/specificPrice-home.png


二進制
static/images/floor/specificPrice-store.png


二進制
static/images/store/store-remind.png


+ 14 - 0
store/floor.js

@@ -6,6 +6,10 @@ export const state = () => ({
   list_v3: {
     fetching: false,
     data: []
+  },
+  list_expand: {
+    fetching: false,
+    data: []
   }
 })
 export const mutations = {
@@ -28,5 +32,15 @@ export const mutations = {
   GET_NEWLIST_SUCCESS (state, result) {
     state.list_v3.fetching = false
     state.list_v3.data = result
+  },
+  REQUEST_EXPANDLIST (state) {
+    state.list_expand.fetching = true
+  },
+  GET_EXPANDLIST_FAILURE (state) {
+    state.list_expand.fetching = false
+  },
+  GET_EXPANDLIST_SUCCESS (state, result) {
+    state.list_expand.fetching = false
+    state.list_expand.data = result
   }
 }

+ 10 - 0
store/index.js

@@ -74,6 +74,16 @@ export const actions = {
         commit('floor/GET_LIST_FAILURE', err)
       })
   },
+  // 批量获取产品信息
+  loadBatchCommodities ({ commit }, params = {}) {
+    commit('floor/REQUEST_EXPANDLIST')
+    return axios.post('/api/commodity/detail', params.batchCodeList)
+      .then(response => {
+        commit('floor/GET_EXPANDLIST_SUCCESS', response.data)
+      }, err => {
+        commit('floor/GET_EXPANDLIST_FAILURE', err)
+      })
+  },
   // 获取轮播配置
   loadBanners ({ commit }, params = {}) {
     commit('carousel/REQUEST_BANNER')