Browse Source

Merge remote-tracking branch 'origin/feature-wangcz-201814' into feature-wangcz-201814

shenjj 7 years ago
parent
commit
c49355d8ba
38 changed files with 2731 additions and 872 deletions
  1. 9 4
      components/brandCenter/BrandIndex.vue
  2. 45 40
      components/brandCenter/RecommendBrand.vue
  3. 3 2
      components/btbBusiness/means.vue
  4. 4 3
      components/home/floor/FloorBar.vue
  5. 18 3
      components/mobile/user/Info.vue
  6. 30 20
      components/product/brand/BrandComponent.vue
  7. 3 2
      components/product/brand/BrandDetail.vue
  8. 2 7
      components/product/brand/CategoriesList.vue
  9. 0 751
      components/store/CommodityList.vue
  10. 1 0
      components/store/RecommendProduct.vue
  11. 100 0
      components/store/home/Certificate.vue
  12. 785 0
      components/store/home/CommodityList.vue
  13. 325 0
      components/store/home/EnterpriseInfo.vue
  14. 288 0
      components/store/home/QualificationCertificate.vue
  15. 446 0
      components/store/home/RecommendList.vue
  16. 452 0
      components/store/home/StoreBanner.vue
  17. 5 2
      components/store/index.js
  18. 3 1
      nuxt.config.js
  19. 3 3
      pages/index.vue
  20. 5 5
      pages/mobile/center/vendor/index.vue
  21. 6 0
      pages/mobile/user/info/personal.vue
  22. 74 5
      pages/mobile/user/storeinfo.vue
  23. 0 22
      pages/product/brand/brandList/_initial.vue
  24. 71 2
      pages/store/_uuid/index.vue
  25. BIN
      static/images/brandCenter/brand-index-title.png
  26. BIN
      static/images/brandCenter/brand-index-title1.png
  27. BIN
      static/images/brandCenter/features.png
  28. BIN
      static/images/brandCenter/recommend-bg.png
  29. BIN
      static/images/brandCenter/recommend-bg1.png
  30. BIN
      static/images/logo/default.png
  31. BIN
      static/images/store/common/shadow.png
  32. BIN
      static/images/store/home/arrow-down.png
  33. BIN
      static/images/store/home/detail1.png
  34. BIN
      static/images/store/home/logo-qualification.jpg
  35. BIN
      static/images/store/home/logo-type.png
  36. BIN
      static/images/store/home/qrccode-small.png
  37. 20 0
      store/user.js
  38. 33 0
      store/user/updateUser.js

+ 9 - 4
components/brandCenter/BrandIndex.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="brand-center-index">
-    <img src="/images/brandCenter/brand-index-title.png" alt="">
+    <img src="/images/brandCenter/brand-index-title1.png" alt="">
     <div class="brand-index-tab">
       <div class="brand-index-group" v-for="(indexGroup, index) in indexGroups">
         <span v-if="index == 5"></span>
@@ -51,6 +51,7 @@
       <page :total="brandList.totalElements" :page-size="pageSize"
             :current="nowPage" v-on:childEvent="listenPage"></page>
     </div>
+    <img src="/images/brandCenter/features.png" alt="">
   </div>
 </template>
 <script>
@@ -202,8 +203,12 @@
     margin: 0 auto;
     >img {
       width: 1190px;
-      height: 70px;
-      margin-top: 28px;
+      height: 50px;
+      margin-top: 20px;
+      &:last-child{
+        height: 70px;
+        margin-bottom: 40px;
+      }
     }
     .brand-index-tab {
       height: 206px;
@@ -495,7 +500,7 @@
       }
       .page-wrap {
         text-align: right;
-        margin: 0 0 62px 0;
+        margin: 0 0 20px 0;
         float: none;
       }
     }

+ 45 - 40
components/brandCenter/RecommendBrand.vue

@@ -3,16 +3,13 @@
     <div v-swiper:mySwiper="swiperOption">
       <div class="swiper-wrapper">
         <div class="swiper-slide" v-for="banner in sliceBanners">
-          <a :href="banner.detailsLink" target="_blank" v-if="banner.detailsLink">
+          <a :href="banner.detailsLink" target="_blank">
             <img :src="banner.pictureLink"/>
           </a>
-          <span v-else>
-            <img :src="banner.pictureLink"/>
-          </span>
         </div>
         <div class="swiper-button-prev"><i class="iconfont icon-swiper-left"></i></div>
         <div class="swiper-button-next"><i class="iconfont icon-swiper-right"></i></div>
-      </div>
+       </div>
       <div class="swiper-pagination swiper-pagination-bullets"></div>
     </div>
     <div class="recommend-area">
@@ -23,7 +20,9 @@
             <div>
               <p>{{item.title}}</p>
               <span class="brand-application" v-if="item.metadatas.contExp_abstract" :title="item.metadatas.contExp_abstract">应用领域:{{item.metadatas.contExp_abstract | applicationFilter}}</span>
-              <span class="brand-introduce" v-if="item.metadatas.contExp_select">品牌介绍:{{item.metadatas.contExp_select | introduceFilter}}</span>
+              <span class="brand-application" v-if="!item.metadatas.contExp_abstract">应用领域:-</span>
+              <span class="brand-introduce" v-if="item.metadatas.contExp_select" :title="item.metadatas.contExp_select">品牌介绍:{{item.metadatas.contExp_select | introduceFilter}}</span>
+              <span class="brand-introduce" v-if="!item.metadatas.contExp_select">品牌介绍:-</span>
             </div>
           </a>
         </li>
@@ -32,12 +31,29 @@
   </div>
 </template>
 <script>
-  import { carousel } from '~utils/mixin'
   export default {
-    mixins: [carousel],
     data () {
       return {
-        activeSlide: 0
+        activeSlide: 0,
+        swiperOption: {
+          autoplay: 6000,
+          pagination: '.swiper-pagination',
+          paginationClickable: true,
+          mousewheelControl: false,
+          effect: 'fade',
+          lazyLoading: true,
+          loop: true,
+          prevButton: '.swiper-button-prev',
+          nextButton: '.swiper-button-next',
+          onTransitionStart: (swiper) => {
+            if (this.banners.data && this.banners.data.length && (swiper.activeIndex > this.banners.data.length)) {
+              swiper.activeIndex = 1
+            }
+            if (this.banners.data && this.banners.data.length && swiper.activeIndex <= 0) {
+              swiper.activeIndex = this.banners.data.length
+            }
+          }
+        }
       }
     },
     filters: {
@@ -56,7 +72,7 @@
           } else {
             len++
           }
-          if (len > 80) {
+          if (len > 60) {
             index = i
             break
           }
@@ -80,19 +96,6 @@
       },
       sliceBanners () {
         return this.banners.data && this.banners.data.length ? this.banners.data.slice(0, 3) : []
-      },
-      swiperOption () {
-        return {
-          autoplay: 6000,
-          pagination: '.swiper-pagination',
-          paginationClickable: true,
-          mousewheelControl: false,
-          effect: this.effect,
-          lazyLoading: true,
-          loop: true,
-          prevButton: '.swiper-button-prev',
-          nextButton: '.swiper-button-next'
-        }
       }
     }
   }
@@ -101,6 +104,7 @@
   .recommend-brand {
     width: 1190px;
     margin: 0 auto;
+    margin-top: 10px;
     .swiper-container {
       z-index: 2;
       .swiper-wrapper {
@@ -135,44 +139,45 @@
       border-radius: 3px;
     }
     .recommend-area {
-      margin: 29px auto 0;
+      margin: 20px auto 0;
       width: 1190px;
-      height: 362px;
-      background:url("/images/brandCenter/recommend-bg.png") no-repeat;
+      height: 263px;
+      background:url("/images/brandCenter/recommend-bg1.png") no-repeat;
       .recommend-items {
-        padding-top: 80px;
-        padding-left: 2px;
+        padding-top: 51px;
+        padding-left: 3px;
         li {
           border-radius: 3px;
-          width: 234px;
-          height: 127px;
+          width: 233px;
+          height: 98px;
           background: #fff;
           display: inline-block;
-          margin-right: 4px;
-          vertical-align: middle;
-          margin-bottom: 5px;
+          margin-right: 3px;
+          margin-bottom: 8px;
           text-align: center;
+          border: solid 1px #f4f4f4;
           &:nth-child(5n) {
             margin-right: 0;
           }
           a {
             padding-top: 22px;
-            width: 234px;
-            height: 127px;
-            line-height: 91px;
+            width: 233px;
+            height: 98px;
+            line-height: 60px;
             display: block;
             position: relative;
+            top:-1px;
+            left: -1px;
             img {
               max-width: 140px;
-              max-height: 91px;
+              max-height: 60px;
             }
             >div {
               display: none;
               position: absolute;
-              bottom: 2px;
               border-radius: 3px;
-              width: 234px;
-              height: 127px;
+              width: 233px;
+              height: 98px;
               background-color: #3a78f4;
               opacity: 0.9;
               top: 0;

+ 3 - 2
components/btbBusiness/means.vue

@@ -118,7 +118,7 @@
             font-size: 16px;
             margin: 0px 0px 15px 0px;
            &.first{
-              margin: 0px 0px 15px 5px;
+              margin: 0px 0px 15px 10px;
             }
           }
           p{
@@ -131,7 +131,8 @@
           }
           &:nth-child(1){
             p{
-              text-align: right;
+              text-align: left;
+              margin-left: 10px;
             }
           }
           &:nth-child(2){

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

@@ -33,7 +33,7 @@
         let obj1 = document.querySelectorAll('.header.clearfix')[0] || nullObj
         let obj2 = document.querySelectorAll('.nav-list')[0] || nullObj
         let obj3 = document.querySelectorAll('.carousel')[0] || nullObj
-        let obj4 = document.querySelectorAll('.advert-slide')[0] || nullObj
+        // let obj4 = document.querySelectorAll('.advert-slide')[0] || nullObj
         let obj5 = document.querySelectorAll('.banner')[0] || nullObj
         let obj6 = document.querySelectorAll('.floor.price-floor')[0] || nullObj
         let obj7 = document.querySelectorAll('.floor.price-floor')[1] || nullObj
@@ -41,11 +41,12 @@
         let _heis1 = obj1.clientHeight
         let _heis2 = obj2.clientHeight
         let _heis3 = obj3.clientHeight
-        let _heis4 = obj4.clientHeight
+        // let _heis4 = obj4.clientHeight
         let _heis5 = obj5.clientHeight
         let _heis6 = obj6.clientHeight
         let _heis7 = obj7.clientHeight
-        this.bannerHeight = _heis0 + _heis1 + _heis2 + _heis3 + _heis4 + _heis5 + _heis6 + _heis7
+        // this.bannerHeight = _heis0 + _heis1 + _heis2 + _heis3 + _heis4 + _heis5 + _heis6 + _heis7
+        this.bannerHeight = _heis0 + _heis1 + _heis2 + _heis3 + _heis5 + _heis6 + _heis7
         this.listHeight = []
         this.list = document.querySelectorAll('.normal-floor')
         let height = 0

+ 18 - 3
components/mobile/user/Info.vue

@@ -15,11 +15,11 @@
         <span><i class="iconfont icon-yonghuming"></i>用户名:</span>
         <span class="describe">{{info.userName}}</span>
       </div>
-      <div class="line">
+      <div class="line" @click="jumpSet('email')">
         <span><i class="iconfont icon-youxiang"></i>邮箱:</span>
         <span class="describe">{{info.userEmail}}</span>
       </div>
-      <div class="line">
+      <div class="line" @click="jumpSet('mobile')">
         <span><i class="iconfont icon-shouji"></i>手机:</span>
         <span class="describe">{{info.userTel}}</span>
       </div>
@@ -39,6 +39,14 @@
         imageUploadUrl: ''
       }
     },
+    computed: {
+      getEmail () {
+        return this.$store.state.user.updateUser.email.data.content
+      },
+      getMobile () {
+        return this.$store.state.user.updateUser.mobile.data.content
+      }
+    },
     methods: {
       uploadImg (e) {
         let file = e.target.files[0]
@@ -62,6 +70,13 @@
               }
             })
         }
+      },
+      jumpSet (info) {
+        if (info === 'email') {
+          window.open(this.getEmail, '_blank')
+        } else if (info === 'mobile') {
+          window.open(this.getMobile, '_blank')
+        }
       }
     }
   }
@@ -121,7 +136,7 @@
         img{
           width: .58rem;
           height: .58rem;
-          border: 1px solid #bebebe;
+          /*border: 1px solid #bebebe;*/
         }
       }
     }

+ 30 - 20
components/product/brand/BrandComponent.vue

@@ -12,11 +12,11 @@
     <table class="table" v-if="activeTab == 0">
       <thead>
         <tr class="bgf7">
-          <th width="300">类目(产品名称)</th>
-          <th width="300">型号</th>
-          <th width="300">规格</th>
-          <th width="200">数据手册</th>
-          <th width="200">操作</th>
+          <th width="350">类目(产品名称)</th>
+          <th width="350">型号</th>
+          <th width="350">规格</th>
+          <th width="250">规格书</th>
+          <!--<th width="200">操作</th>-->
         </tr>
       </thead>
       <tbody>
@@ -24,10 +24,14 @@
           <td><nuxt-link :to="'/product/kind/' + item.kindid"><span>{{item.kind.nameCn || '-'}}</span></nuxt-link></td>
           <td><nuxt-link :to="'/product/component/' + item.uuid"><span>{{item.code}}</span></nuxt-link></td>
           <td><span>{{item.spec || '-'}}</span></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>
+            <a v-if="item.attach" @click="toAttach(item.attach)"><img src="/images/store/common/pdf.png" alt=""/></a>
+            <span v-if="!item.attach">-</span>
           </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>
+          </td>-->
         </tr>
         <tr v-if="!list.content || list.content.length === 0">
           <td colspan="10" class="text-center">
@@ -51,24 +55,24 @@
     <table class="table supper-table" v-if="activeTab == 1">
       <thead>
       <tr class="bgf7">
-        <th width="100"></th>
-        <th width="200">代理商</th>
-        <th width="200">地址</th>
-        <th width="110">电话</th>
-        <th width="110">传真</th>
-        <th width="110">邮箱</th>
-        <th width="120">网址</th>
+        <!--<th width="100"></th>-->
+        <th width="210">代理商</th>
+        <th width="210">地址</th>
+        <th width="160">电话</th>
+        <th width="160">传真</th>
+        <th width="210">邮箱/网址</th>
+        <!--<th width="120">网址</th>-->
       </tr>
       </thead>
       <tbody>
       <tr class="text-center" v-for="item in supplier.content">
-        <td v-if="item.storeuuid">
+        <!--<td v-if="item.storeuuid">
           <a class='add-link' :href="'/store/' + item.storeuuid">
             <img :src="item.img || '/images/store/common/default.png'" alt="" class="showImg">
             <img src="/images/store/common/goIn.png" alt="" class="goIn">
           </a>
         </td>
-        <td v-if="!item.storeuuid"><img :src="item.img || '/images/store/common/default.png'" alt="" class="showImg"></td>
+        <td v-if="!item.storeuuid"><img :src="item.img || '/images/store/common/default.png'" alt="" class="showImg"></td>-->
         <td :title='item.vendorName'  v-if="item.storeuuid"><a class='add-link' :href="'/store/' + item.storeuuid">{{item.vendorName || '-'}}</a></td>
         <td :title='item.vendorName' v-if="!item.storeuuid">{{item.vendorName || '-'}}</td>
         <td :title='item.detailAddress' v-if="item.storeuuid"><a class='add-link' :href="'/store/' + item.storeuuid">{{item.detailAddress || '-'}}</a></td>
@@ -77,10 +81,16 @@
         <td :title='item.tel' v-if="!item.storeuuid">{{item.tel || '-'}}</td>
         <td :title='item.fax' v-if="item.storeuuid"><a class='add-link' :href="'/store/' + item.storeuuid">{{item.fax || '-'}}</a></td>
         <td :title='item.fax' v-if="!item.storeuuid">{{item.fax || '-'}}</td>
-        <td :title='item.email' v-if="item.storeuuid"><a class='add-link' :href="'/store/' + item.storeuuid">{{item.email || '-'}}</a></td>
-        <td :title='item.email' v-if="!item.storeuuid">{{item.email || '-'}}</td>
-        <td :title='item.website' v-if="item.storeuuid"><a class='add-link' :href="'/store/' + item.storeuuid">{{item.website || '-'}}</a></td>
-        <td :title='item.website' v-if="!item.storeuuid">{{item.website || '-'}}</td>
+        <td  v-if="item.storeuuid">
+          <a :title='item.email' class='add-link' :href="'/store/' + item.storeuuid">{{item.email || '-'}}</a><br>
+          <a :title='item.website' class='add-link' :href="'/store/' + item.storeuuid">{{item.website || '-'}}</a>
+        </td>
+        <td v-if="!item.storeuuid">
+          <span :title='item.email'>{{item.email || '-'}}</span><br>
+          <span :title='item.website'>{{item.website || '-'}}</span>
+        </td>
+       <!-- <td :title='item.website' v-if="item.storeuuid"><a class='add-link' :href="'/store/' + item.storeuuid">{{item.website || '-'}}</a></td>
+        <td :title='item.website' v-if="!item.storeuuid">{{item.website || '-'}}</td>-->
       </tr>
       <tr v-if="!supplier.content || supplier.content.length === 0">
         <td colspan="10" class="text-center">

+ 3 - 2
components/product/brand/BrandDetail.vue

@@ -2,7 +2,8 @@
   <div class="brandDetail container">
     <div class="menu-com row">
       <div class="menu-title col-md-12">
-        <a href="/product/brand/brandList/A">品牌中心</a> > <span>{{list.nameEn}}</span></div>
+        <a href="/product/brand/brandList/A">品牌中心</a> > <span>{{list.nameEn}}</span>
+      </div>
     </div>
     <div id="brand">
       <div class="brand-name"><h5>{{list.nameEn}}</h5><h5 v-if="list.nameCn && list.nameEn!=list.nameCn"><span>{{list.nameCn}}</span></h5></div>
@@ -121,7 +122,7 @@
             height: 40px;
             position: absolute;
             top: 140px;
-            left: 260px;
+            left: 263px;
           }
         }
         ul {

+ 2 - 7
components/product/brand/CategoriesList.vue

@@ -4,14 +4,9 @@
       <div class="categories-list-header">产品分类</div>
       <div class="categories-list-body">
         <el-tree :data="list" :props="defaultProps" accordion :highlight-current="true" @current-change="handlerCurrentNode"></el-tree>
-        <!--<ul>
-          <li v-for="kind in list[0]">
-            {{kind.nameCn}}
-          </li>
-        </ul>-->
       </div>
     </div>
-    <div v-if="isShow == 1">
+    <!--<div v-if="isShow == 1">
       <div class="categories-list-header">代理商分类</div>
       <div class="categories-list-agency-body">
         <ul>
@@ -19,7 +14,7 @@
           <li><a>未入驻代理商</a></li>
         </ul>
       </div>
-    </div>
+    </div>-->
   </div>
 </template>
 <script>

+ 0 - 751
components/store/CommodityList.vue

@@ -1,751 +0,0 @@
-<template>
-  <div id="goods-list-fragment">
-    <div class="container" style="width: 1190px; padding: 0;">
-      <div class="title-area">
-        <div class="category-title">
-          <span style="line-height: 34px;">产品分类</span>
-        </div>
-        <div class="category-content">
-          <el-tree :data="kinds" :props="defaultProps" :default-expanded-keys="[0]" node-key="id" accordion :highlight-current="true" @current-change="handlerCurrentNode" @node-collapse="onNodeCollapse"></el-tree>
-        </div>
-      </div>
-      <!-- 产品列表 -->
-      <div class="goods-area">
-        <div class="row" style="margin: 0;width: 970px;">
-          <div class="col-md-3 btn-group btn-group-sm" style="padding: 0;">
-            <a type="button" class="btn btn-default btn-line btn-info">产品列表</a>
-          </div>
-          <div class="col-md-5 col-md-offset-4" style="padding: 0;">
-            <div class="input-group">
-              <input type="search" class="form-control" id="search_input" title="code" placeholder="请输入要筛选的原厂型号"
-                     v-model="searchCode" @search="goodsSearch(searchCode)"/>
-              <span class="input-group-btn">
-							  <button type="button" class="btn" id="search_btn" @click="goodsSearch(searchCode)">&nbsp;筛&nbsp;选&nbsp;</button>
-						  </span>
-              <span class="input-group-btn">
-                <button type="button" class="btn sendprove" @click="sendprove()">我要发布产品</button>
-              </span>
-            </div>
-          </div>
-
-        </div>
-
-        <!-- 列表展示 -->
-        <table class="goodslist" style="width: 970px">
-          <thead>
-          <tr style="height: 40px;">
-            <!--<th width="90"></th>-->
-            <th width="140">品牌/类目/型号/规格</th>
-            <th width="100">包装/生产日期</th>
-            <th width="110">库存</th>
-            <th width="90">梯度/pcs</th>
-            <!--<th width="90">香港交货<span style="font-size: 12px;">($)</span></th>-->
-            <!--<th width="100">大陆交货<span style="font-size: 12px;">(¥)</span></th>-->
-            <th width="100">单价</th>
-            <th width="100">交期(天)</th>
-            <th width="90">规格书</th>
-            <th width="100">操作</th>
-          </tr>
-          </thead>
-          <tbody id="goodslist-content">
-          <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>
-                <span v-if="commodity.brandEn">{{commodity.brandEn}}</span>
-              </div>
-              <div class="brand" v-if="!commodity.brandNameEn && !commodity.brandEn">—</div>
-              <a v-if="commodity.kindNameCn" @click="goBrandDetail('/product/kind/' + commodity.kindUuid, $event)" v-text="commodity.kindNameCn"></a>
-              <div class="brand" v-if="!commodity.kindNameCn">—</div>
-              <div class="code" v-if="commodity.code" v-text="commodity.code"></div>
-              <div class="code" v-if="!commodity.code">—</div>
-              <div class="brand" v-text="commodity.spec || '—'"></div>
-            </td>
-            <td>
-              <div class="package" v-if="commodity.packaging" v-text="commodity.packaging"></div>
-              <div class="package" v-if="!commodity.packaging && !commodity.produceDate">—</div>
-              <div class="date" v-if='commodity.produceDate' v-text="commodity.produceDate">2016-12-01</div>
-            </td>
-            <td style="text-align: left;vertical-align: middle;">
-              <div class="goods" v-if="commodity.reserve || commodity.status === 602">
-                库存:<span v-text="commodity.reserve"></span>
-              </div>
-              <div v-if="!commodity.reserve && commodity.status !== 602" style="text-align: center;margin-left: 0;"><span>—</span></div>
-              <div class="from" v-if="commodity.reserve && commodity.reserve>0 || commodity.status === 602">
-                最小起订量:<span v-if="commodity.minBuyQty" v-text="commodity.minBuyQty">300</span>
-              </div>
-              <!--<div class="multiple">
-                倍数:<span>1</span>
-              </div>-->
-              <div class="can-div-sell" v-if="(commodity.reserve || commodity.status === 602) && commodity.breakUp">可拆卖</div>
-            </td>
-            <td>
-              <div v-for="price in commodity.prices" v-text="price.start + '+'"></div>
-            </td>
-            <!--<td>-->
-              <!--<div v-show="commodity.currencyName.indexOf('USD')==-1 || !commodity.prices">-->
-                <!--<span>—</span>-->
-              <!--</div>-->
-              <!--<div v-for="price in commodity.prices">{{price.uSDPrice | currency}}</div>-->
-            <!--</td>-->
-            <!--<td>-->
-              <!--<div v-show="commodity.currencyName.indexOf('RMB')==-1 || !commodity.prices">-->
-                <!--<span>—</span>-->
-              <!--</div>-->
-              <!--<div v-for="price in commodity.prices" >{{price.rMBPrice | currency}}</div>-->
-            <!--</td>-->
-            <td>
-              <div v-for="price in commodity.prices">{{commodity.currencyName.indexOf('USD')!=-1?'$':'¥'}}{{commodity.currencyName.indexOf('USD')!=-1?price.uSDPrice:price.rMBPrice | currency}}</div>
-              <div v-if="commodity.currencyName.indexOf('RMB')==-1 || !commodity.prices && commodity.currencyName.indexOf('USD')==-1 || !commodity.prices"></div>
-            </td>
-            <td>
-              <div v-if="commodity.b2cMinDelivery">
-                <!--{{commodity.b2cMinDelivery || 0}}-{{commodity.b2cMaxDelivery || 0}}天-->
-                <span v-if="commodity.b2cMinDelivery != commodity.b2cMaxDelivery" v-text="commodity.b2cMinDelivery + '-' + commodity.b2cMaxDelivery"></span>
-                <span v-if="commodity.b2cMinDelivery == commodity.b2cMaxDelivery" v-text="commodity.b2cMinDelivery"></span>
-              </div>
-              <div v-if="!commodity.b2cMinDelivery"><span>—</span></div>
-            </td>
-            <td>
-              <div v-if="commodity.attach">
-                <a @click="goAttach(commodity.attach, $event)" target="_blank"><img src="/images/store/common/pdf.png" alt=""/></a>
-              </div>
-              <div v-if="!commodity.attach">—</div>
-            </td>
-            <td>
-              <buy :item="commodity" :disabledFlag="commodity.status === 602"></buy>
-            </td>
-          </tr>
-          <tr v-if="!commodities.content || commodities.content.length == 0">
-            <td colspan="10">
-              <div class="text-center">
-                <div class="col-xs-offset-4 col-xs-2">
-                  <img src="/images/all/empty-cart.png">
-                </div>
-                <div class="col-xs-4 txt-info">
-                  <p class="grey f16">抱歉,暂无上架产品信息</p>
-                  <a href="/">马上去逛一逛</a>
-                </div>
-              </div>
-            </td>
-          </tr>
-          </tbody>
-        </table>
-        <div class="remind-area">
-          <img src="/images/store/store-remind.png" alt="">
-          所有报价、库存信息的真实性及准确性均由店铺负责,如有疑问请点击
-          <a @click="goLink" class="link-seller">联系卖家</a>
-        </div>
-        <page :total="commodities.totalElements" :page-size="pageParams.count"
-              :current="pageParams.page" @childEvent="handleCurrentChange"></page>
-      </div>
-    </div>
-    <link-saler-box
-      :tel="tel"
-      v-if="showLinkBox"
-      @cancelAction="showLinkBox = false">
-    </link-saler-box>
-  </div>
-</template>
-<script>
-function getAllLeafIds (kind) {
-  if (!kind) {
-    return null
-  }
-  if (kind.isLeaf === 1) {
-    if (kind.nameCn === '其他') {
-      return '其他'
-    }
-    return kind.id
-  } else {
-    if (!kind.children || kind.children.length === 0) {
-      return null
-    }
-    let ids = []
-    for (let i = 0; i < kind.children.length; i++) {
-      ids.push(getAllLeafIds(kind.children[i]))
-    }
-    return ids.join(',')
-  }
-}
-import Buy from '~components/common/buyOrCar/buyComponent.vue'
-import Page from '~components/common/page/pageComponent.vue'
-import LinkSalerBox from '~components/common/LinkSalerBox.vue'
-export default {
-  name: 'commodity-list',
-  props: ['kinds'],
-  components: {
-    Buy,
-    Page,
-    LinkSalerBox
-  },
-  data () {
-    return {
-      defaultProps: {
-        children: 'children',
-        label: 'nameCn'
-      },
-      pageParams: {
-        page: 1,
-        count: 6
-      },
-      searchCode: '',
-      parentKindId: 0,
-      ids: null,
-      showLinkBox: false,
-      tel: ''
-    }
-  },
-  filters: {
-    currency: function (num) {
-      if (typeof num === 'number') {
-        if (num <= 0.000001) {
-          num = 0.000001
-        } else {
-          if (num.toString().indexOf('.') === -1) {
-            num += '.00'
-          } else {
-            let inputStr = num.toString()
-            let arr = inputStr.split('.')
-            let floatNum = arr[1]
-            if (floatNum.length > 6) {
-              num = inputStr.substring(0, arr[0].length + 7)
-              if (Number(floatNum.charAt(6)) > 4) {
-                num = (Number(num) * 1000000 + 1) / 1000000
-              }
-            } else if (floatNum.length === 1) {
-              num = num + '0'
-            }
-          }
-        }
-      }
-      return num
-    }
-  },
-  computed: {
-    commodities () {
-      return this.$store.state.shop.storeInfo.storeCommodity.data
-    },
-    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'
-    },
-    enterprise () {
-      let ens = this.user.data.enterprises
-      if (ens && ens.length) {
-        return ens.find(item => item.current) || {enName: '个人账户'}
-      } else {
-        return {enName: '个人账户'}
-      }
-    }
-  },
-  methods: {
-    goAttach: function (url, event) {
-      event.stopPropagation()
-      if (this.user.logged) {
-        if (url && url !== '1') {
-          window.open(url)
-        } else {
-          this.$message.error('规格书地址错误')
-        }
-      } else {
-        this.$http.get('/login/page', {params: {returnUrl: window.location.href}}).then(response => {
-          if (response.data) {
-            window.location.href = response.data.content + '&baseUrl=' + encodeURIComponent(window.location.protocol + '//' + window.location.host + response.data.baseUrl)
-          }
-        })
-      }
-    },
-    isSpecificPriceTag: function (tag) {
-      return tag && tag.indexOf('特价') !== -1
-    },
-    handlerCurrentNode (data, node) {
-      this.searchCode = ''
-      if (this.parentKindId === data.id) {
-        this.parentKindId = 0
-        this.ids = null
-      } else {
-        if (data.level === 1) {
-          this.parentKindId = data.id
-        }
-        this.ids = getAllLeafIds(data)
-      }
-      this.pageParams.page = 1
-
-      this.pageCommodity(this.pageParams, this.ids)
-    },
-    onNodeCollapse () {
-      this.parentKindId = ''
-    },
-    goodsSearch (keyword) {
-      this.pageParams.page = 1
-      this.pageCommodity(this.pageParams, this.ids, keyword)
-    },
-    async pageCommodity (pageParams, kindId, keyword) {
-//    pageCommodity (pageParams, kindId, keyword) {
-      let params = { storeid: this.$route.params.uuid, origin: 'store', kindUuid: kindId === -10 ? '其他' : kindId, code: keyword }
-      params.page = pageParams.page
-      params.count = pageParams.count
-
-      try {
-        let { data } = await this.$http.get('/api/commodity/commodities', { params })
-        this.$store.commit('shop/storeInfo/GET_STORE_COMMODITY_SUCCESS', data)
-      } catch (err) {
-        this.$store.commit('shop/storeInfo/GET_STORE_COMMODITY_FAILURE', err)
-      }
-//      this.$http.get('/api/commodity/commodities', { params }).then(response => {
-//        this.$store.commit('shop/storeInfo/GET_STORE_COMMODITY_SUCCESS', response)
-//      }, err => {
-//        this.$store.commit('shop/storeInfo/GET_STORE_COMMODITY_FAILURE', err)
-//      })
-    },
-    handleCurrentChange (page) {
-      this.pageParams.page = page
-      this.pageCommodity(this.pageParams, this.ids, this.searchCode)
-    },
-    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 => {
-                obj.toPhone = response.data.userTel
-                this.openWebChat(newTab, obj)
-              }, err => {
-                console.log(err)
-                this.$message.error('暂无卖家管理员手机号!')
-              })
-            } else {
-              obj.toPhone = response.data.enTel
-              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)
-//    }
-    sendprove: function () {
-      if (this.user.logged) {
-        if (this.enterprise && this.enterprise.isVendor === 313) {
-          window.open('/vendor#/vendor_upload')
-        } else {
-          this.$router.push('/register-saler')
-        }
-      } else {
-        this.$router.push('/auth/login?returnUrl=' + window.location.href)
-      }
-    },
-    goLink: function () {
-      this.baseUtils.goLinkUser(this, this.storeInfo.enUU)
-    }
-  }
-}
-</script>
-<style lang="scss">
-/*  产品分类调整*/
-  .category-content .el-tree{
-    border: none;
-  }
-  .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content,.el-tree-node:hover{
-    background: none !important;
-  }
-  .el-tree-node__content:hover{
-    background: none !important;
-  }
-  .el-tree-node__content:hover span{
-    color: #5078cb;
-  }
-  .el-pagination .el-pager li.active{
-    background-color: #5078cb;
-    border-color: #337ab7;
-  }
-.el-tree-node__expand-icon{
-  font-family: "iconfont" !important;
-  font-size: 14px;
-  font-style: normal;
-  -webkit-font-smoothing: antialiased;
-  width: inherit;
-  height: inherit;
-  border: inherit;
-  font-weight: bold;
-  text-shadow: -1px 0px 0 #333;
-  margin-right: 3px !important;
-}
-.el-tree-node__content{
-  line-height: 30px;
-  height: 30px;
-}
-.el-tree-node__expand-icon.is-leaf{
-  visibility: hidden;
-}
-.el-tree-node__expand-icon:before{
-  content: "\E621";
-}
-	#goods-list-fragment .category-title {
-		height: 34px;
-		background-color: #5078cb;
-		font-size: 14px;
-		color: rgb(255,255,255);
-		font-weight: 600;
-		text-align: center;
-	}
-
-	#goods-list-fragment .category-content li {
-		line-height: 33px;
-		font-size: 14px;
-		color: #333;
-		float: left;
-		width: 100%;
-		padding-left: 10px;
-	}
-
-	#goods-list-fragment .category-content li a {
-		display: block;
-		padding-left: 15px;
-		text-decoration: none;
-		color: #333;
-		/* background:url("static/img/store/default/openblackR.png") no-repeat left; */
-	}
-
-	#goods-list-fragment .category-content li a:hover{
-		color: #5078cb;
-		cursor: pointer;
-	}
-
-	#goods-list-fragment .category-content ul.list-body {
-		display: none;
-		color: #666;
-	}
-
-	#goods-list-fragment .category-content ul.list-body.active {
-		display: block;
-	}
-
-	#goods-list-fragment .category-content ul.list-body li {
-		float: none;
-		background-image: none;
-		min-height: 26px;
-		line-height: 26px;
-		font-size: 12px;
-	}
-
-	#goods-list-fragment .category-content ul.list-body li a {
-		padding-left: 15px;
-		display: block;
-		color: rgb(50,50,50);
-		background: none;
-	}
-
-	#goods-list-fragment .category-content ul.list-body li a:hover {
-		color: #5078cb;
-		cursor: pointer;
-	}
-
-	#goods-list-fragment .category-content ul.list-body li a.cur {
-		text-decoration: none;
-		font-size: 14px;
-		/* background:url("static/img/store/default/openblackR.png") no-repeat left; */
-	}
-
-	#goods-list-fragment .title-area {
-		margin-bottom: 30px;
-		width: 200px;
-		float: left;
-	}
-	#goods-list-fragment .category-content{
-		border: 1px solid #e8e8e8;
-	}
-	/* goods-area */
-	#goods-list-fragment .goods-area {
-		margin-left: 20px;
-		float: left;
-		margin-bottom: 30px;
-	}
-
-	#goods-list-fragment .goods-area .btn-line {
-		border-radius: 0;
-	}
-
-
-	#goods-list-fragment .btn-info.btn-line {
-		background-color: #5078CB;
-		color: #fff;
-		font-weight: 600;
-	}
-
-	#goods-list-fragment .btn-line {
-		height: 34px;
-		width: 150px;
-		border: 1px solid #5078cb;
-		background-color: #fff;
-		color: rgb(80,120,203);
-		font-weight: 600;
-	}
-
-	#goods-list-fragment .btn-line:hover {
-		background-color: #5078CB;
-		color: #fff;
-	}
-
-	/* 物品列表 */
-	#goods-list-fragment .goodslist .brand-code {
-		font-size: 12px;
-		text-align: center;
-    position: relative;
-	}
-
-	#goods-list-fragment #search_btn {
-		background: #5078CB;
-		color: #FFFFFF;
-	}
-
-  #goods-list-fragment .sendprove {
-    background: #fff;
-		color: #5078CB;
-    border-radius: 4px;
-    border: 1px solid #5078CB;
-    float: right;
-    margin-left: 10px
-  }
-
-  #goods-list-fragment .sendprove:hover {
-    background: #5078CB;
-		color: #fff;
-    cursor: pointer;
-    transition: all 0.4s
-  }
-
-	#goods-list-fragment #search_input {
-		font-size: 14px;
-	}
-
-	#goods-list-fragment .brand-code .code {
-		font-weight: 600;
-	}
-#goods-list-fragment .brand-code .brand a:hover {
-  color: #f39801;
-}
-
-	#goods-list-fragment .goodslist th {
-		color: rgb(50,50,50);
-		font-size: 14px;
-		font-weight: 600;
-		background-color: #f7f7f7;
-		text-align: center;
-	}
-
-	#goods-list-fragment .category-content a.selected-node,
-	#goods-list-fragment .category-content ul.list-body li a.selected-node {
-		color: #5078cb;
-	}
-
-	#goods-list-fragment .category-content a.selected-parent-node,
-	#goods-list-fragment .category-content ul.list-body li a.selected-parent-node {
-		/* background:url("static/img/store/default/openblack.png") no-repeat left; */
-	}
-
-	#goods-list-fragment .goodslist tbody>tr {
-		border: 1px solid #e8e8e8;
-    cursor: pointer;
-	}
-#goods-list-fragment .goodslist tbody>tr:hover{
-  background: #ecf2fd;
-}
-  #goods-list-fragment .goodslist tbody>tr td.commodity-icon {
-    position: relative;
-  }
-	#goods-list-fragment .goodslist tbody>tr td.commodity-icon .img{
-		border: 1px solid #e8e8e8;
-		margin: 10px;
-		width: 80px;
-		height: 80px;
-		overflow: hidden;
-		line-height: 75px;
-	}
-	#goods-list-fragment .goodslist tbody>tr td.commodity-icon .img>img {
-		width: 80px;
-		height: 80px;
-	}
-  #goods-list-fragment .goodslist tbody>tr td.brand-code .sellout-store-commodity {
-    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;
-		color: #333;
-		text-align: center;
-		line-height: 20px;
-	}
-  #goods-list-fragment .goodslist tbody>tr td .can-div-sell {
-    color: #333;
-  }
-
-	/* 物品列表按钮 */
-	#goods-list-fragment .btn-buy-now {
-    margin: 5px 0;
-		background-color: #5078CB;
-		color: #fff;
-		width: 80px;
-		height: 30px;
-		font-size: 12px;
-		border: 1px solid #5078cb;
-	}
-
-	#goods-list-fragment .btn-add-cart {
-    margin: 10px 0 5px 0;
-		color: #214797;
-		width: 80px;
-		height: 30px;
-		font-size: 12px;
-		background-color: #fff;
-		border: 1px solid #e8e8e8;
-	}
-	#goods-list-fragment .btn-buy-now:hover{
-		background: #214797;
-	}
-	#goods-list-fragment .btn-add-cart:hover{
-		background-color: #5078CB;
-		color: #fff;
-	}
-#goods-list-fragment {
-  .no-record{
-    font-size: 14px;
-    color: #999;
-    text-align: center;
-    line-height: 200px;
-  }
-  .no-record i{
-    margin-right: 5px;
-  }
-  .text-center{
-    text-align: left;
-    padding-top: 80px;
-    height:250px;
-  }
-  .text-center  .col-xs-2  img{
-    vertical-align: middle;
-  }
-  .text-center .txt-info{
-    font-size: 14px;
-    margin-top: 15px;
-  }
-  .text-center  .col-xs-4  p{
-    color: #999;
-    margin-top: 3px;
-    margin-bottom: 2px;
-  }
-  .text-center  .txt-info a{
-    font-size: 14px;
-    display: block;
-    color: #5078cb;
-    background: url('/images/all/icon_nianxian.jpg')no-repeat 0 center;
-    padding-left: 20px;
-  }
-  .text-center  .col-xs-4 i{
-    color: #5078cb;
-    font-size: 14px;
-  }
-  .goodslist{
-    margin-bottom: 11px;
-  }
-  .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;
-  }
-}
-
-	@font-face {
-    font-family: 'iconfont';  /* project id 357960 */
-    src: url('//at.alicdn.com/t/font_27kjyd082ezpk3xr.eot');
-    src: url('//at.alicdn.com/t/font_27kjyd082ezpk3xr.eot?#iefix') format('embedded-opentype'),
-    url('//at.alicdn.com/t/font_27kjyd082ezpk3xr.woff') format('woff'),
-    url('//at.alicdn.com/t/font_27kjyd082ezpk3xr.ttf') format('truetype'),
-    url('//at.alicdn.com/t/font_27kjyd082ezpk3xr.svg#iconfont') format('svg');
-  }
-
-  #goods-list-fragment .el-pagination .el-pager li.active {
-    border-color: #5078cb !important;
-    background-color: #5078cb !important;
-  }
-
-  #goods-list-fragment .goods-area .page-wrap {
-    margin-top: 18px;
-  }
-</style>

+ 1 - 0
components/store/RecommendProduct.vue

@@ -346,3 +346,4 @@
     bottom: 0;
   }
 </style>
+

+ 100 - 0
components/store/home/Certificate.vue

@@ -0,0 +1,100 @@
+<template>
+  <div class="brand" style="padding-top: 25px;">
+    <div class="brand-content">
+      <div class="title"><span>资质证明</span></div>
+     <!-- <div class="info">
+        <div><span>注册地址&nbsp;:&nbsp;</span><span>深圳市南山区高新技术园英唐大厦一楼</span></div>
+        <div><span>注册号&nbsp;:&nbsp;</span><span>834631</span></div>
+        <div><span>企业类型&nbsp;:&nbsp;</span><span>民营企业</span></div>
+        <div><span>官网地址&nbsp;:&nbsp;</span><span>http://www.worldshine.net/profile.html</span></div>
+      </div>-->
+    </div>
+    <qualification-certificate></qualification-certificate>
+  </div>
+</template>
+<script>
+  import QualificationCertificate from './QualificationCertificate.vue'
+  export default {
+    name: 'certificate-self',
+    data () {
+      return {
+        type: 0
+      }
+    },
+    filters: {
+      introduceFilter: function (title) {
+        if (title === '') {
+          return title
+        }
+        let len = 0
+        let index = 0
+        for (let i = 0; i < title.length; i++) {
+          if (index === 0 && title.charAt(i).charCodeAt(0) > 255) {
+            len = len + 2
+          } else {
+            len++
+          }
+          if (len > 240) {
+            index = i
+            break
+          }
+        }
+        if (index > 0) {
+          return title.substring(0, index) + '...'
+        } else {
+          return title
+        }
+      }
+    },
+    components: {
+      QualificationCertificate
+    }
+  }
+</script>
+<style  lang="scss" scoped>
+  .brand{
+    min-width: 1190px;
+    background: #ece9ec;
+    .brand-content{
+      width: 1190px;
+      padding: 0px;
+      margin: 0 auto;
+      background: #fff;
+      .title {
+        width: 100%;
+        padding: 13px 0px;
+        margin-top: 9px;
+        margin-bottom: 25px;
+        border-bottom: 1px solid #edf0f4;
+        span{
+          display: inline-block;
+          height: 23px;
+          line-height: 23px;
+          color: #666;
+          padding-left: 10px;
+          border-left: 3px solid #366ad0;
+        }
+      }
+      .info{
+        margin: 0 auto;
+        padding: 32px 0px;
+        >div{
+          display: table-cell;
+          width: 200px;
+          text-align: center;
+          &:first-child,&:last-child{
+            width: 395px;
+          }
+          span:first-child{
+            font-size: 12px;
+            color: #666;
+          }
+          span:last-child{
+            font-size: 12px;
+            color: #333;
+          }
+        }
+      }
+    }
+  }
+</style>

+ 785 - 0
components/store/home/CommodityList.vue

@@ -0,0 +1,785 @@
+<template>
+  <div id="goods-list-fragment">
+    <div class="container">
+      <div style="margin-bottom: 15px;width: 100%;">
+        <div class="input-group">
+          <input type="search" class="form-control" id="search_input" title="code" placeholder="型号/品牌"
+                 v-model="searchCode" @search="goodsSearch(searchCode)"/>
+          <span class="input-group-btn">
+            <button type="button" class="btn" id="search_btn" @click="goodsSearch(searchCode)">&nbsp;搜&nbsp;索&nbsp;</button>
+          </span>
+          <span class="input-group-btn">
+            <button type="button" class="btn sendprove" @click="sendprove()">我要发布产品</button>
+          </span>
+        </div>
+      </div>
+      <div class="title-area">
+        <div class="category-title">
+          <span style="line-height: 34px;">产品分类</span>
+        </div>
+        <div class="category-content">
+          <el-tree :data="kinds" :props="defaultProps" accordion :highlight-current="true" @current-change="handlerCurrentNode" :default-expanded-keys="[0]" node-key="level">
+          </el-tree>
+          <!--<span class="empty" v-if="!kinds[0].children || !kinds[0].children.length">暂无数据</span>-->
+        </div>
+      </div>
+      <!-- 产品列表 -->
+      <div class="goods-area">
+        <!-- 列表展示 -->
+        <table class="goodslist" style="width: 936px;background:#fff;" >
+          <thead>
+          <tr>
+            <th width="189"><div>品牌/类目(产品名称)</div></th>
+            <th width="148"><div>型号/规格</div></th>
+            <th width="114"><div>包装/生产日期</div></th>
+            <th width="100"><div>库存</div></th>
+            <!-- <th width="90">数量</th>
+             <th width="90">香港交货<span style="font-size: 12px;">($)</span></th>
+             <th width="100">大陆交货<span style="font-size: 12px;">(¥)</span></th>-->
+            <th width="149"><div>价格梯度(PCS)</div></th>
+            <th width="67"><div>交期(天)</div></th>
+            <th width="66"><div>规格书</div></th>
+            <th width="95"><div>操作</div></th>
+          </tr>
+          </thead>
+          <tbody id="goodslist-content">
+          <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>
+                <span v-if="commodity.brandEn">{{commodity.brandEn}}</span>
+              </div>
+              <div class="brand" v-if="!commodity.brandNameEn && !commodity.brandEn">—</div>
+              <a v-if="commodity.kindNameCn" @click="goBrandDetail('/product/kind/' + commodity.kindUuid, $event)" v-text="commodity.kindNameCn"></a>
+              <div class="brand" v-if="!commodity.kindNameCn">—</div>
+            </td>
+            <td class="brand-code">
+              <div class="code" v-if="commodity.code" v-text="commodity.code"></div>
+              <div class="code" v-if="!commodity.code">—</div>
+              <div class="brand spec" v-text="commodity.spec || '—'"></div>
+            </td>
+            <td>
+              <div class="package" v-if="commodity.packaging" v-text="commodity.packaging"></div>
+              <div class="package" v-if="!commodity.packaging && !commodity.produceDate">—</div>
+              <div class="date" v-if='commodity.produceDate' v-text="commodity.produceDate">2016-12-01</div>
+            </td>
+            <td style="text-align: left;vertical-align: middle;">
+              <div class="goods" v-if="commodity.reserve">
+                库存:<span v-text="commodity.reserve">31500</span>
+              </div>
+              <div v-if="!commodity.reserve" style="text-align: center;margin-left: 0;"><span>—</span></div>
+              <div class="from" v-if="commodity.reserve && commodity.reserve>0">
+                起拍:<span v-if="commodity.minBuyQty" v-text="commodity.minBuyQty">300</span>
+              </div>
+              <!--<div class="multiple">
+                倍数:<span>1</span>
+              </div>-->
+              <div class="can-div-sell" v-if="commodity.reserve" v-text="commodity.breakUp?'可拆卖':'不可拆卖'"></div>
+            </td>
+            <td>
+              <div class="amount">
+                <div  v-for="price in commodity.prices" v-text="price.start + '+'"></div>
+              </div>
+              <!--<div v-show="commodity.currencyName.indexOf('USD')==-1 || !commodity.prices">
+                <span>—</span>
+              </div>
+              <div v-for="price in commodity.prices">{{price.uSDPrice | currency}}</div>-->
+              <div class="price">
+                <div v-show="commodity.currencyName.indexOf('RMB')==-1 || !commodity.prices">
+                  <span>—</span>
+                </div>
+                <div v-for="price in commodity.prices">¥{{price.rMBPrice | currency}}</div>
+              </div>
+            </td>
+            <td>
+              <div v-if="commodity.b2cMinDelivery">
+                <!--{{commodity.b2cMinDelivery || 0}}-{{commodity.b2cMaxDelivery || 0}}天-->
+                <span v-if="commodity.b2cMinDelivery != commodity.b2cMaxDelivery" v-text="commodity.b2cMinDelivery + '-' + commodity.b2cMaxDelivery"></span>
+                <span v-if="commodity.b2cMinDelivery == commodity.b2cMaxDelivery" v-text="commodity.b2cMinDelivery"></span>
+              </div>
+              <div v-if="!commodity.b2cMinDelivery"><span>—</span></div>
+            </td>
+            <td>
+              <div v-if="commodity.attach">
+                <a @click="goAttach(commodity.attach, $event)" target="_blank"><img src="/images/store/common/pdf.png" alt=""/></a>
+              </div>
+              <div v-if="!commodity.attach">—</div>
+            </td>
+            <td>
+              <buy :item="commodity"></buy>
+            </td>
+          </tr>
+          <tr class="active-empty" v-if="!commodities.content || commodities.content.length == 0">
+            <td colspan="10">
+              <div class="text-center">
+                <div class="col-xs-offset-3 col-xs-2">
+                  <img src="/images/brandList/empty-cart.jpg">
+                </div>
+                <div class="col-xs-4 txt-info">
+                  <!--<p class="grey f16">暂无器件信息</p>-->
+                  <p class="grey f16"> 暂无产品信息</p>
+                  <i class="iconfont" v-if="emptyShow === false">&#xe610;</i>&nbsp;<a v-if="emptyShow === false" href="/">返回首页</a>
+                  <img v-if="emptyShow === true" src="/images/brandList/upload.png">&nbsp;<a v-if="emptyShow === true" href="/vendor#/vendor_upload?type=company">马上去上传</a>
+                </div>
+              </div>
+            </td>
+          </tr>
+          </tbody>
+        </table>
+        <div class="remind-area">
+          <img src="/images/store/store-remind.png" alt="">
+          所有报价、库存信息的真实性及准确性均由店铺负责,如有疑问请点击
+          <a @click="goLink" class="link-seller">联系卖家</a>
+        </div>
+        <div style="float: right;">
+          <page :total="commodities.totalElements" :page-size="pageParams.count"
+                :current="pageParams.page" @childEvent="handleCurrentChange"></page>
+        </div>
+        <link-saler-box
+          :tel="tel"
+          v-if="showLinkBox"
+          @cancelAction="showLinkBox = false">
+        </link-saler-box>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+  function getAllLeafIds (kind) {
+    if (!kind) {
+      return null
+    }
+    if (kind.isLeaf === 1) {
+      return kind.id
+    } else {
+      if (!kind.children || kind.children.length === 0) {
+        return null
+      }
+      let ids = []
+      for (let i = 0; i < kind.children.length; i++) {
+        ids.push(getAllLeafIds(kind.children[i]))
+      }
+      return ids.join(',')
+    }
+  }
+  import Buy from '~components/common/buyOrCar/buyComponent.vue'
+  import Page from '~components/common/page/pageComponent.vue'
+  import LinkSalerBox from '~components/common/LinkSalerBox.vue'
+  export default {
+    name: 'commodity-list',
+    props: ['kinds'],
+    components: {
+      Buy,
+      Page,
+      LinkSalerBox
+    },
+    data () {
+      return {
+        defaultProps: {
+          children: 'children',
+          label: 'nameCn'
+        },
+        pageParams: {
+          page: 1,
+          count: 6
+        },
+        searchCode: '',
+        parentKindId: 0,
+        ids: null,
+        showLinkBox: false,
+        tel: ''
+      }
+    },
+    filters: {
+      currency: function (num) {
+        if (typeof num === 'number') {
+          if (num <= 0.000001) {
+            num = 0.000001
+          } else {
+            if (num.toString().indexOf('.') === -1) {
+              num += '.00'
+            } else {
+              let inputStr = num.toString()
+              let arr = inputStr.split('.')
+              let floatNum = arr[1]
+              if (floatNum.length > 6) {
+                num = inputStr.substring(0, arr[0].length + 7)
+                if (Number(floatNum.charAt(6)) > 4) {
+                  num = (Number(num) * 1000000 + 1) / 1000000
+                }
+              } else if (floatNum.length === 1) {
+                num = num + '0'
+              }
+            }
+          }
+        }
+        return num
+      }
+    },
+    computed: {
+      commodities () {
+        return this.$store.state.shop.storeInfo.storeCommodity.data
+      },
+      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'
+      },
+      storeStatus () {
+        return this.$store.state.option.storeStatus.data
+      },
+      emptyShow () {
+        let loggedStatus = false
+        if (this.user.logged && this.user.data.enterprise.uu) {
+          if (this.storeStatus.uuid === this.storeInfo.uuid) {
+            loggedStatus = true
+          } else {
+            loggedStatus = false
+          }
+        } else {
+          loggedStatus = false
+        }
+        return loggedStatus
+      },
+      enterprise () {
+        let ens = this.user.data.enterprises
+        if (ens && ens.length) {
+          return ens.find(item => item.current) || {enName: '个人账户'}
+        } else {
+          return {enName: '个人账户'}
+        }
+      }
+    },
+    mounted () {
+      this.kinds.forEach((item) => {
+        this.KindsNameChange(item)
+      })
+//    alert(JSON.stringify(this.kinds))
+    },
+    methods: {
+      sendprove: function () {
+        if (this.user.logged) {
+          if (this.enterprise && this.enterprise.isVendor === 313) {
+            window.open('/vendor#/vendor_upload')
+          } else {
+            this.$router.push('/register-saler')
+          }
+        } else {
+          this.$router.push('/auth/login?returnUrl=' + window.location.href)
+        }
+      },
+      goLink: function () {
+        this.baseUtils.goLinkUser(this, this.storeInfo.enUU)
+      },
+      KindsNameChange: function (obj) {
+//        obj.nameCn += ()${obj.level}
+        document.getElementsByClassName('el-tree-node__label').innerHTML = "<span style='color: red;'>(RUNOOB)</span>"
+//      console.log(obj.nameCn)
+        if (obj.children && obj.children.length) {
+          console.log(obj.children)
+          obj.children.forEach((item) => {
+            this.KindsNameChange(item)
+          })
+        }
+      },
+      goAttach: function (url, event) {
+        event.stopPropagation()
+        if (this.user.logged) {
+          if (url && url !== '1') {
+            window.open(url)
+          } else {
+            this.$message.error('规格书地址错误')
+          }
+        } else {
+          this.$http.get('/login/page', {params: {returnUrl: window.location.href}}).then(response => {
+            if (response.data) {
+              window.location.href = response.data.content + '&baseUrl=' + encodeURIComponent(window.location.protocol + '//' + window.location.host + response.data.baseUrl)
+            }
+          })
+        }
+      },
+      handlerCurrentNode (data, node) {
+        this.searchCode = ''
+        if (this.parentKindId === data.id) {
+          this.parentKindId = 0
+          this.ids = null
+        } else {
+          if (data.level === 1) {
+            this.parentKindId = data.id
+          }
+          this.ids = getAllLeafIds(data)
+        }
+        this.pageParams.page = 1
+
+        this.pageCommodity(this.pageParams, this.ids)
+      },
+      goodsSearch (keyword) {
+        this.pageParams.page = 1
+        this.pageCommodity(this.pageParams, this.ids, keyword)
+      },
+      async pageCommodity (pageParams, kindId, keyword) {
+//    pageCommodity (pageParams, kindId, keyword) {
+        let params = { storeid: this.$route.params.uuid, origin: 'store', kindUuid: kindId, code: keyword }
+        params.page = pageParams.page
+        params.count = pageParams.count
+
+        try {
+          let { data } = await this.$http.get('/api/commodity/commodities', { params })
+          this.$store.commit('shop/storeInfo/GET_STORE_COMMODITY_SUCCESS', data)
+        } catch (err) {
+          this.$store.commit('shop/storeInfo/GET_STORE_COMMODITY_FAILURE', err)
+        }
+//      this.$http.get('/api/commodity/commodities', { params }).then(response => {
+//        this.$store.commit('shop/storeInfo/GET_STORE_COMMODITY_SUCCESS', response)
+//      }, err => {
+//        this.$store.commit('shop/storeInfo/GET_STORE_COMMODITY_FAILURE', err)
+//      })
+      },
+      handleCurrentChange (page) {
+        this.pageParams.page = page
+        this.pageCommodity(this.pageParams, this.ids, this.searchCode)
+      },
+//    goBack () {
+//      this.$router.back(-1)
+//    }
+      isSpecificPriceTag: function (tag) {
+        return tag && tag.indexOf('特价') !== -1
+      },
+      goBatchDetail (batchCode) {
+        window.open('/store/productDetail/' + batchCode)
+      },
+      goBrandDetail (url, event) {
+        event.stopPropagation()
+        window.open(url)
+      }
+    }
+  }
+</script>
+<style>
+  #goods-list-fragment{
+    width: 100%;
+    background: #ece9ec;
+    padding-top: 20px;
+  }
+  #goods-list-fragment .container{
+    width: 1190px;
+    padding: 0;
+  }
+
+  /*  产品分类调整*/
+  #goods-list-fragment .category-content{
+    max-height: 496px;
+    min-height: 224px;
+    overflow-y: scroll;
+    overflow-x: hidden;
+    position: relative;
+  }
+  #goods-list-fragment .category-content .empty{
+    display: block;
+    width: 56px;
+    height: 16px;
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    transform: translate(-28px, -8px);
+    color: #5e7382;
+  }
+
+  .category-content el-tree{
+    /*border: none;*/
+  }
+  .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content,.el-tree-node:hover{
+    background: none !important;
+  }
+  .el-tree-node__content:hover{
+    background: none !important;
+  }
+  .el-tree-node__content:hover span{
+    color: #3c7df3;
+  }
+  .el-tree-node__content:hover span:last-child {
+    /*text-decoration: underline;*/
+  }
+  .el-pagination .el-pager li.active{
+    background-color: #5078cb;
+    border-color: #337ab7;
+  }
+  .el-tree-node__expand-icon{
+    margin-left: 3px;
+    font-family: "iconfont" !important;
+    font-size: 14px;
+    font-style: normal;
+    -webkit-font-smoothing: antialiased;
+    width: inherit;
+    height: inherit;
+    border: inherit;
+    font-weight: bold;
+    text-shadow: -1px 0px 0 #333;
+    margin-right: 3px !important;
+  }
+  .el-tree-node__content{
+    line-height: 30px;
+    height: 30px;
+  }
+  .el-tree-node__expand-icon.is-leaf{
+    visibility: hidden;
+  }
+  .el-tree-node__expand-icon:before{
+    content: "\E621";
+  }
+  #goods-list-fragment .category-title {
+    height: 34px;
+    background-color: #3c7df5;
+    font-size: 16px;
+    color: rgb(255,255,255);
+    text-align: center;
+    border-radius: 5px;
+  }
+
+  #goods-list-fragment .category-content li {
+    line-height: 33px;
+    font-size: 14px;
+    color: #333;
+    float: left;
+    width: 100%;
+    padding-left: 10px;
+  }
+
+  #goods-list-fragment .category-content li a {
+    display: block;
+    padding-left: 15px;
+    text-decoration: none;
+    color: #333;
+    /* background:url("static/img/store/default/openblackR.png") no-repeat left; */
+  }
+
+  #goods-list-fragment .category-content li a:hover{
+    color: #5078cb;
+    cursor: pointer;
+  }
+
+  #goods-list-fragment .category-content ul.list-body {
+    display: none;
+    color: #666;
+  }
+
+  #goods-list-fragment .category-content ul.list-body.active {
+    display: block;
+  }
+
+  #goods-list-fragment .category-content ul.list-body li {
+    float: none;
+    background-image: none;
+    min-height: 26px;
+    line-height: 26px;
+    font-size: 12px;
+  }
+
+  #goods-list-fragment .category-content ul.list-body li a {
+    padding-left: 15px;
+    display: block;
+    color: rgb(50,50,50);
+    background: none;
+  }
+
+  #goods-list-fragment .category-content ul.list-body li a:hover {
+    color: #5078cb;
+    cursor: pointer;
+  }
+
+  #goods-list-fragment .category-content ul.list-body li a.cur {
+    text-decoration: none;
+    font-size: 14px;
+    /* background:url("static/img/store/default/openblackR.png") no-repeat left; */
+  }
+
+  #goods-list-fragment .title-area {
+    margin-bottom: 30px;
+    width: 250px;
+    float: left;
+    background: #fff;
+  }
+  #goods-list-fragment .category-content{
+    border: 1px solid #e8e8e8;
+  }
+  /* goods-area */
+  #goods-list-fragment .goods-area {
+    margin-left: 3px;
+    float: left;
+    margin-bottom: 30px;
+  }
+
+  #goods-list-fragment .goods-area .btn-line {
+    border-radius: 0;
+  }
+
+
+  #goods-list-fragment .btn-info.btn-line {
+    background-color: #5078CB;
+    color: #fff;
+    font-weight: 600;
+  }
+
+  #goods-list-fragment .btn-line {
+    height: 34px;
+    width: 150px;
+    border: 1px solid #5078cb;
+    background-color: #fff;
+    color: rgb(80,120,203);
+    font-weight: 600;
+  }
+
+  #goods-list-fragment .btn-line:hover {
+    background-color: #5078CB;
+    color: #fff;
+  }
+
+  /* 物品列表 */
+  #goods-list-fragment .goodslist .brand-code {
+    font-size: 12px;
+    text-align: center;
+    position: relative;
+  }
+  #goods-list-fragment #search_btn {
+    background: #3c7cf5;
+    color: #FFF;
+    border-bottom-right-radius: 3px;
+    border-top-right-radius: 3px;
+    border-bottom-left-radius: 0px;
+    border-top-left-radius: 0px;
+    height: 28px;
+    width: 69px;
+    padding-right: 50px;
+  }
+  #goods-list-fragment .sendprove {
+    width: 110px;
+    height: 28px;
+    color: #fff;
+    background-color: #ff9000;
+    border-radius: 3px;
+    float: right;
+    margin-left: 10px
+  }
+  .btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus {
+    outline: none;
+    border-color: transparent;
+  }
+
+  #goods-list-fragment #search_input {
+    font-size: 14px;
+    height: 28px;
+    line-height: 28px;
+    width: 189px;
+    float: right;
+    border-bottom-left-radius: 3px;
+    border-top-left-radius: 3px;
+    border: 1px solid #3b7cf4;
+  }
+
+  #goods-list-fragment .brand-code .code {
+    font-weight: 600;
+  }
+  #goods-list-fragment .brand-code .brand a {
+    color: #3c7df5;
+  }
+  #goods-list-fragment .goodslist thead tr{
+    background-color: #3b7cf4;
+    height: 34px;
+  }
+  #goods-list-fragment .goodslist tr th {
+    color: #fefefe;
+    font-size: 13px;
+  }
+  #goods-list-fragment .goodslist tr th:first-child{
+    border-top-left-radius: 5px;
+    border-bottom-left-radius: 5px;
+  }
+  #goods-list-fragment .goodslist tr th:last-child{
+    border-top-right-radius: 5px;
+    border-bottom-right-radius: 5px;
+  }
+  #goods-list-fragment .goodslist tr th div{
+    text-align: center;
+    border-right: 1px solid #fff;
+  }
+  #goods-list-fragment .goodslist tr th:last-child div{
+    border-right: none;
+  }
+  #goodslist-content .goods,#goodslist-content .from, #goodslist-content .can-div-sell {
+    padding-left: 20px;
+  }
+  #goodslist-content .goods span{
+    color: #f01010;
+  }
+  #goodslist-content .amount {
+    width: 60%;
+    float: left;
+    padding-left: 30px;
+    text-align:left;
+  }
+  #goodslist-content .amount div:last-child{
+    color: #f01010;
+  }
+  #goodslist-content .price {
+    width: 40%;
+    float:right;
+    text-align:left;
+  }
+  #goods-list-fragment .category-content a.selected-node,
+  #goods-list-fragment .category-content ul.list-body li a.selected-node {
+    color: #5078cb;
+  }
+
+  #goods-list-fragment .category-content a.selected-parent-node,
+  #goods-list-fragment .category-content ul.list-body li a.selected-parent-node {
+    /* background:url("static/img/store/default/openblack.png") no-repeat left; */
+  }
+  #goods-list-fragment .goodslist tbody>tr:hover{
+    background: #ecf2fd;
+  }
+  #goods-list-fragment .goodslist tbody>tr {
+    border: 1px solid #e8e8e8;
+  }
+  #goods-list-fragment .goodslist tbody>tr td.commodity-icon .img{
+    border: 1px solid #e8e8e8;
+    margin: 10px;
+    width: 80px;
+    height: 80px;
+    overflow: hidden;
+    line-height: 75px;
+  }
+  #goods-list-fragment .goodslist tbody>tr td.commodity-icon .img>img {
+    width: 80px;
+    height: 80px;
+  }
+  #goods-list-fragment .goodslist tbody>tr td.brand-code .sellout-store-commodity {
+    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;
+    color: #333;
+    text-align: center;
+    line-height: 20px;
+    height: 88px;
+  }
+  #goods-list-fragment .goodslist tbody>tr td .can-div-sell {
+    color: #333;
+  }
+
+  /* 物品列表按钮 */
+  #goods-list-fragment .btn-buy-now {
+    background-color: #ffa422;
+    color: #fff;
+    width: 80px;
+    height: 30px;
+    font-size: 12px;
+    border: 1px solid #ffa422;
+  }
+
+  #goods-list-fragment .btn-add-cart {
+    margin-top: 10px;
+    color: #3b7cf4;
+    width: 80px;
+    height: 30px;
+    font-size: 12px;
+    background-color: #fff;
+    border: 1px solid #3b7cf4;
+  }
+  #goods-list-fragment .btn-buy-now:hover{
+    background: #214797;
+    border: 1px solid #214797;
+  }
+  #goods-list-fragment .btn-add-cart:hover{
+    background-color: #5078CB;
+    color: #fff;
+  }
+  .no-record{
+    font-size: 14px;
+    color: #999;
+    text-align: center;
+    line-height: 200px;
+  }
+  .no-record i{
+    margin-right: 5px;
+  }
+  .active-empty:hover{
+    background-color: #fff!important;
+  }
+  .text-center{
+    text-align: center;
+    margin-top: 30px;
+  }
+  .text-center  .col-xs-2  img{
+    margin: 55px 0 85px 135px;
+    vertical-align: middle;
+  }
+  .text-center .txt-info{
+    font-size: 14px;
+    margin: 50px 0px 0px -50px;
+  }
+  .text-center  .col-xs-4  p{
+    color: #999;
+    margin: 11px 0px 4px -6px;
+  }
+  .text-center  .txt-info i{
+    color: #5078cb;
+  }
+  .text-center  .txt-info a{
+    font-size: 14px;
+    color: #5078cb;
+  }
+  .text-center  .col-xs-5 img{
+    margin-left: -235px;
+  }
+  .goodslist{
+    margin-bottom: 20px;
+  }
+  .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;
+  }
+  @font-face {
+    font-family: 'iconfont';  /* project id 357960 */
+    src: url('//at.alicdn.com/t/font_27kjyd082ezpk3xr.eot');
+    src: url('//at.alicdn.com/t/font_27kjyd082ezpk3xr.eot?#iefix') format('embedded-opentype'),
+    url('//at.alicdn.com/t/font_27kjyd082ezpk3xr.woff') format('woff'),
+    url('//at.alicdn.com/t/font_27kjyd082ezpk3xr.ttf') format('truetype'),
+    url('//at.alicdn.com/t/font_27kjyd082ezpk3xr.svg#iconfont') format('svg');
+  }
+
+  <!-- 分页 -->
+  #goods-list-fragment .el-pagination .el-pager li.active {
+    border-color: #5078cb !important;
+    background-color: #5078cb !important;
+  }
+</style>
+

+ 325 - 0
components/store/home/EnterpriseInfo.vue

@@ -0,0 +1,325 @@
+<template>
+  <div id="recommend-fragment-self">
+    <div class="recommend-product">
+      <ul>
+        <li>
+          <div>
+            <div class="information-list">
+              <div>主营产品&nbsp;:</div>
+              <div v-if="storeInfo.description" :title="storeInfo.description">{{storeInfo.description | introduceFilter}}</div>
+              <div v-else>—</div>
+            </div>
+            <div class="information-list" :title="storeInfo.enterprise.enAddress">
+              <div>应用领域&nbsp;:</div>
+              <div v-if="storeInfo.storeApplication" :title="storeInfo.storeApplication">{{storeInfo.storeApplication | introduceFilter}}</div>
+              <div v-else>—</div>
+            </div>
+            <div class="information-list">
+              <div>电话&nbsp;:</div><div>{{storeInfo.enterprise.enTel || '—'}}</div>
+            </div>
+            <div class="information-list">
+              <div>传真&nbsp;:</div><div>{{storeInfo.enterprise.enFax || '—'}}</div>
+            </div>
+            <div class="information-list">
+              <div>手机&nbsp;:</div><div>{{storeInfo.enterprise.enPhone || '—'}}</div>
+            </div>
+            <div class="information-list">
+              <div>微信&nbsp;:</div><div>{{storeInfo.enterprise.enWeixin || '—'}}</div>
+            </div>
+            <div class="information-list">
+              <div>Q Q&nbsp;:</div><div>{{storeInfo.enterprise.enQQ || '—'}}</div>
+            </div>
+            <!--<div class="information-list">
+              <div>资质审核&nbsp;:</div><div>营业执照&nbsp;&nbsp;<img src="/images/store/home/logo-qualification.jpg"></div>
+            </div>-->
+            <div class="introduce">
+              <h4>企业简介</h4>
+              <p v-if="storeInfo.description">{{storeInfo.description}}</p>
+              <p v-else class="empty-introduce">暂无简介</p>
+            </div>
+          </div>
+        </li>
+        <li>
+          <div style="width: 966px; height: 356px; margin-left: 3px;">
+            <recommend-list></recommend-list>
+          </div>
+        </li>
+      </ul>
+    </div>
+    <div class="shadow"><img src="/images/store/common/shadow.png"></div>
+  </div>
+</template>
+<script>
+  import Buy from '~components/common/buyOrCar/buyComponent.vue'
+  import RecommendList from './RecommendList.vue'
+  export default {
+    name: 'product-recommend-self',
+    components: {
+      RecommendList,
+      Buy
+    },
+    computed: {
+      commodities () {
+        return this.$store.state.shop.recommend.products.data
+      },
+      storeInfo () {
+        return this.$store.state.shop.storeInfo.store.data
+      }
+    },
+    filters: {
+      introduceFilter: function (title) {
+        if (title === '') {
+          return title
+        }
+        let len = 0
+        let index = 0
+        for (let i = 0; i < title.length; i++) {
+          if (index === 0 && title.charAt(i).charCodeAt(0) > 255) {
+            len = len + 2
+          } else {
+            len++
+          }
+          if (len > 20) {
+            index = i
+            break
+          }
+        }
+        if (index > 0) {
+          return title.substring(0, index) + '...'
+        } else {
+          return title
+        }
+      }
+    },
+    methods: {
+      buyNow: function (isBuy, item) {
+        if (!this.$store.state.option.user.logged) {
+          this.$http.get('/login/page', {params: {returnUrl: window.location.href}}).then(response => {
+            if (response.data) {
+              this.$router.push('/auth/login')
+            }
+          })
+        } else {
+          if (item) {
+            if (isBuy) {
+              this.$http.post('trade/order/buyNow', [{
+                uuid: item.comUuid,
+                batchCode: item.batchCode,
+                number: item.minBuyQty,
+                storeid: item.storeId,
+                storeUuid: item.storeUuid,
+                currencyName: item.currency,
+                minPackQty: item.minPackQty ? item.minPackQty : item.minBuyQty
+              }])
+                .then(response => {
+                  //        window.location.href = '/user#/order/pay/' + this.enidfilter(response.data.orderid)
+                  if (response.data.success) {
+                    if (response.data.message) {
+                      this.$message({
+                        message: response.data.message,
+                        type: 'success'
+                      })
+                      let _self = this
+                      window.setTimeout(function () {
+                        window.location.href = '/user#/order/pay/' + _self.enidfilter(response.data.data.orderid)
+                      }, 1000)
+                    } else {
+                      window.location.href = '/user#/order/pay/' + this.enidfilter(response.data.data.orderid)
+                    }
+                  } else {
+                    if (response.data.data && response.data.data.unvailable === 1) {
+                      this.$message.error('产品信息已失效,请刷新界面')
+                    } else {
+                      this.$message.error(response.data.message)
+                    }
+                  }
+                }, err => {
+                  console.log(err)
+                  if (item.minBuyQty > item.reserve) {
+                    this.$message.error('商品' + item.code + '的库存已经不满足起订量')
+                  }
+                })
+            } else {
+              // this.$store.dispatch('user/addCar', {uuid: item.uuid, batchCode: item.batchCode, number: item.minBuyQty})
+              this.$http.post('trade/cart/add', {
+                uuid: item.comUuid,
+                batchCode: item.batchCode,
+                number: item.minBuyQty,
+                storeid: item.storeId,
+                storeUuid: item.storeUuid,
+                currencyName: item.currency,
+                minPackQty: item.minPackQty ? item.minPackQty : item.minBuyQty
+              })
+                .then(response => {
+                  if (response.data.success) {
+                    if (response.data.message) {
+                      this.$message({
+                        message: '添加购物车成功,但商品信息有更新',
+                        type: 'success'
+                      })
+                    } else {
+                      this.$message({
+                        message: '添加购物车成功',
+                        type: 'success'
+                      })
+                    }
+                  } else {
+                    this.$message.error(response.data.message)
+                  }
+                })
+            }
+          }
+        }
+      },
+      enidfilter: function (str) {
+        if (str) {
+          let encryptStr = '' // 最终返回的加密后的字符串
+          // 产生三位随机数
+          let num = ''
+          for (let i = 0; i < 3; i++) {
+            num += Math.floor(Math.random() * 10)
+          }
+          encryptStr += num // 产生3位随机数
+
+          // 16位加密
+          let tempspit = ''
+          let strspit = str.toString().toLowerCase()
+          if (strspit.match(/^[-+]?\d*$/) === null) { // 非整数字符,对每一个字符都转换成16进制,然后拼接
+            /**
+             * Unicode汉字、英文字母、数字的unicode范围
+             *汉字:[0x4e00,0x9fa5](或十进制[19968,40869])
+             *数字:[0x30,0x39](或十进制[48, 57])
+             *小写字母:[0x61,0x7a](或十进制[97, 122])
+             *大写字母:[0x41,0x5a](或十进制[65, 90]
+             * 'a'的Unicode编码:'&#97;',charCodeAt()的值是97
+             * '码'的Unicode编码:'\u7801', new String('码').charCodeAt()的值是30721,30721的16进制表示是7801
+             */
+            let s = strspit.split('')
+            for (let i = 0; i < s.length; i++) {
+              s[i] = s[i].charCodeAt() // 先转换成Unicode编码
+              s[i] = s[i].toString(16)
+              // 因为在服务器是每两位当做一个字符进行解析的,所以这里每个字符的Unicode编码范围必须在0——255之间。数字和大小写满足该要求,特殊字符则不一定,如果后续有特殊字符的要求,需要重写编码器和解码器
+              if (s[i].length === 1) {
+                s[i] = '0' + s[i]
+              }
+              tempspit = tempspit + s[i]
+            }
+            tempspit = tempspit + '{' + 1 // 1代表字符
+          } else { // 数字直接转换成16进制
+            strspit = parseInt(strspit)
+              .toString(16)
+            tempspit = strspit + '{' + 0 // 0代表纯数字
+          }
+
+          let temp = tempspit.split('{') // 对要加密的字符转换成16进制
+          let numLength = temp[0].length // 转换后的字符长度
+          numLength = numLength.toString(16) // 字符长度换算成16进制
+          if (numLength.length === 1) { // 如果是1,补一个0
+            numLength = '0' + numLength
+          } else if (numLength.length > 3) { // 转换后的16进制字符长度如果大于2位数,则返回,不支持
+            return ''
+          }
+          encryptStr += numLength
+          if (temp[1] === '0') {
+            encryptStr += 0
+          } else if (temp[1] === '1') {
+            encryptStr += 1
+          }
+          encryptStr += temp[0]
+          if (encryptStr.length < 20) { // 如果小于20位,补上随机数
+            // 产生三位随机数
+            let numtwo = ''
+            for (let i = 0; i < 20 - encryptStr.length; i++) {
+              numtwo += Math.floor(Math.random() * 10)
+            }
+            let ran = numtwo // 产生3位随机数
+            encryptStr += ran
+          }
+          return encryptStr
+        }
+      }
+    }
+  }
+</script>
+<style lang="scss" scoped>
+  #recommend-fragment-self {
+    min-width: 1190px;
+    background: #ece9ec;
+    margin: 0 auto;
+    margin:-18px 0px -40px 0px;
+    .recommend-product {
+      width: 1190px;
+      height: 356px;
+      margin: 0 auto;
+      ul {
+        width: 100%;
+        height: 356px;
+        /*overflow: hidden;*/
+        li {
+          position: relative;
+          float: left;
+          &:first-child {
+            width: 220px;
+            height: 356px;
+            background: #fff;
+            padding-top: 20px;
+            border-radius: 5px;
+            .information-list {
+              font-size: 12px;
+              color: #333;
+              div:first-child {
+                width: 72px;
+                text-align: right;
+                line-height: 20px;
+              }
+              div:last-child {
+                width: 158px;
+                line-height: 20px;
+                padding: 0px 10px 0px 6px;
+              }
+            }
+            .information-list > div {
+              display: table-cell;
+            }
+            .introduce {
+              width: 250px;
+              height: 188px;
+              font-size: 12px;
+              line-height: 15px;
+              color: #333;
+              h4 {
+                background: url("/images/store/home/detail1.png") no-repeat 6% 10%;
+                font-size: 14px;
+                padding: 0px 0px 5px 30px;
+                margin:10px 0px;
+              }
+              p {
+                margin: -15px 0px 0px 15px;
+                text-indent: 2em;
+                overflow-y: auto;
+                overflow-x: hidden;
+                width: 200px;
+                line-height: 19px;
+                max-height: 153px;
+              }
+              .empty-introduce{
+                text-align: center;
+                line-height: 153px;
+                color: #666;
+              }
+            }
+          }
+        }
+      }
+    }
+    .shadow {
+      width: 1190px;
+      margin: 0 auto;
+      img {
+        position: relative;
+        top: -10px;
+      }
+    }
+  }
+
+</style>

+ 288 - 0
components/store/home/QualificationCertificate.vue

@@ -0,0 +1,288 @@
+<template>
+  <div class="brand" style="padding-top: 25px; margin-bottom: -20px;">
+    <div class="brand-content-list">
+      <ul class="list-unstyled list-inline">
+        <li class="store-box"  v-if="storeInfo.qualifications || storeInfo.qualifications.length !== 0" v-for="(store, index) in storeInfo.qualifications.slice(0,5)">
+          <div><img :src="store.resourceUrl.indexOf('.pdf')>0?'/images/store/common/pdf.png':store.resourceUrl"/></div>
+          <a @click="showImg(store.resourceUrl)"><div class="Open"><i class="fa fa-search"></i>&nbsp;&nbsp;查看</div></a>
+        </li>
+        <li class="active-empty" v-if="!storeInfo.qualifications || storeInfo.qualifications.length == 0">
+          <div class="text-center">
+            <div class="col-xs-offset-3 col-xs-2">
+              <img src="/images/brandList/empty-cart.jpg">
+            </div>
+            <div class="col-xs-4 txt-info">
+              <p class="grey f16"> 暂无资质证明</p>
+               <i class="iconfont" v-if="emptyShow === false">&#xe610;</i>&nbsp;<a href="/" v-if="emptyShow === false">返回首页</a>
+               <img v-if="emptyShow === true" src="/images/brandList/upload.png">&nbsp;<a v-if="emptyShow === true" href="/vendor#/store/maintain">马上去上传</a>
+            </div>
+          </div>
+        </li>
+      </ul>
+    </div>
+    <div class="shadow"><img src="/images/store/common/shadow.png"></div>
+    <!--查看大图 begin-->
+    <div id="image-box" v-if="isShow">
+      <div class="x-floating-wrap"></div>
+      <div class="x-floating">
+        <div id="item-content">
+          <div class="x-close-wrap" @click="isShow = false"><a href="javascript:void(0);">&times;</a></div>
+          <div class="img"><img :src="qualifications.url"/></div>
+        </div>
+      </div>
+    </div>
+    <!--查看大图 end-->
+  </div>
+</template>
+<script>
+  export default {
+    name: 'qualification-certificate',
+    data () {
+      return {
+        qualifications: {
+          url: '',
+          type: ''
+        },
+        type: 0,
+        isShow: false
+      }
+    },
+    computed: {
+      storeInfo () {
+        return this.$store.state.shop.storeInfo.store.data
+      },
+      user() {
+        return this.$store.state.option.user
+      },
+      storeStatus () {
+        return this.$store.state.option.storeStatus.data
+      },
+      emptyShow () {
+        let loggedStatus = false
+        if (this.user.logged && this.user.data.enterprise.uu) {
+          if (this.storeStatus.uuid === this.storeInfo.uuid) {
+            loggedStatus = true
+          } else {
+            loggedStatus = false
+          }
+        } else {
+          loggedStatus = false
+        }
+        return loggedStatus
+      }
+    },
+    methods: {
+      showImg (imgUrl) {
+        if (imgUrl.indexOf('.pdf') === -1) {
+          this.qualifications.url = imgUrl
+          this.isShow = true
+        } else {
+          window.open(imgUrl)
+        }
+      }
+    },
+    filters: {
+      introduceFilter: function (title) {
+        if (title === '') {
+          return title
+        }
+        let len = 0
+        let index = 0
+        for (let i = 0; i < title.length; i++) {
+          if (index === 0 && title.charAt(i).charCodeAt(0) > 255) {
+            len = len + 2
+          } else {
+            len++
+          }
+          if (len > 240) {
+            index = i
+            break
+          }
+        }
+        if (index > 0) {
+          return title.substring(0, index) + '...'
+        } else {
+          return title
+        }
+      }
+    }
+  }
+</script>
+<style  lang="scss" scoped>
+  /*查看大图*/
+  #image-box .x-floating-wrap,.image-box .x-floating-wrap {
+    position: fixed;
+    z-index: 99998;
+    background: #000;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    opacity: 0.5;
+  }
+  #image-box,.image-box{
+    display:table; overflow:hidden; margin-left:50px; _position:relative;  width: 1200px;height: 700px;
+    position: fixed;
+    top: 50%;
+    margin-top: -350px;
+    left: 50%;
+    margin-left: -600px;
+    z-index: 2000;
+  }
+  #image-box .x-floating,.image-box .x-floating {
+    vertical-align:middle !important;
+    display:table-cell;
+    text-align:center;
+    _position:absolute;
+    _top:50%; _left:50%;
+    top: inherit !important;
+    left: inherit !important;
+  }
+  #image-box .x-floating img ,.image-box .x-floating img {
+    margin: auto auto;
+    max-width: 970px !important;
+    max-height: 600px !important;
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+  }
+  #image-box .x-floating-wrap,.image-box .x-floating-wrap{
+    z-index: 1000000 !important;
+  }
+  #item-content{
+    color:#fff; display:inline-block; _position:relative; _top:-50%; _left:-50%;
+    position: relative;
+    z-index: 10000000;
+  }
+  #item-content div.x-close-wrap{
+    position: absolute;
+    right: -15px;
+    line-height: 30px;
+    top: -13px;
+    color: #fff;
+    width: 35px;
+    height: 35px;
+    background: rgba(0, 0, 0, 0.5);
+    border-radius: 100%;
+    opacity: 1;
+    margin: 0;
+    z-index: 100000;
+    min-height: initial;
+    text-align: center;
+  }
+  #item-content div.x-close-wrap a{
+    position: relative;
+    left: 0;
+    bottom: 0;
+    font-size: 34px;
+    color: #fff;
+  }
+  #item-content div.x-close-wrap a:hover{
+    color: #fff !important;
+  }
+  #item-content div.x-close-wrap:hover{
+    cursor: pointer;
+    opacity: .9;
+  }
+  #item-content div.x-close-wrap img{
+    width: 30px !important;
+    height: 30px !important;
+  }
+  #item-content .img{
+    position: relative;
+    z-index: 10;
+  }
+  /*查看大图结束*/
+  .brand-content-list{
+    width: 1190px;
+    background: #fff;
+    margin: 0 auto;
+    margin-top: -50px;
+    padding-left: 18px;
+    .list-inline {
+      width: 100%;
+      height: 264px;
+      margin: 0 auto;
+      .store-box {
+        width: 158px;
+        height: 200px;
+        text-align: center;
+        vertical-align: middle;
+        margin: 32px 0px 0px 40px;
+        position: relative;
+        &:hover{
+          div:last-child {
+            display: block;
+          }
+        }
+        &:first-child {
+          margin-left:112px;
+        }
+        div:first-child {
+          img {
+            margin-left: -3px;
+            width: 156px;
+            height: 200px;
+            border: 1px solid #edf0f4;
+          }
+        }
+        div:last-child {
+          width: 176px;
+          height: 218px;
+          line-height: 218px;
+          background: #6b6b6b;
+          opacity: 0.5;
+          position: absolute;
+          top: -9px;
+          left: -9px;
+          display: none;
+          color: #fff;
+          span{
+            color: #fff;
+            &:first-child{
+              margin-top: 30px;
+            }
+          }
+        }
+      }
+      .active-empty{
+        width: 100%;
+        .text-center{
+          text-align: center;
+          margin-top: 30px;
+        }
+        .text-center  .col-xs-2  img{
+          margin: 65px 0 85px 205px;
+          vertical-align: middle;
+        }
+        .text-center .txt-info{
+          font-size: 14px;
+          margin: 60px 0px 0px -50px;
+        }
+        .text-center  .col-xs-4  p{
+          color: #999;
+          margin: 13px 0px 10px -6px;
+        }
+        .text-center  .txt-info i{
+          color: #5078cb;
+        }
+        .text-center  .txt-info a{
+          font-size: 14px;
+          color: #5078cb;
+        }
+        .text-center  .col-xs-5 img{
+          margin-left: -235px;
+        }
+      }
+    }
+  }
+  .shadow{
+    width: 1190px;
+    margin: 0 auto;
+    img{
+      position: relative;
+      top: -10px;
+    }
+  }
+</style>

+ 446 - 0
components/store/home/RecommendList.vue

@@ -0,0 +1,446 @@
+<template>
+  <div class="recommend-fragment">
+     <ul class="recommend-list">
+        <li v-for="commodity in commodities" class="big">
+          <a :href="commodity.batchCode ? '/store/productDetail/'+ commodity.batchCode : '#'" class="href">
+            <div class="img">
+              <img :src="commodity.comImg.startsWith('static')?'/'+commodity.comImg:commodity.comImg"/>
+            </div>
+            <div class="content">
+              <p>{{commodity.comCode | comCodeFilter}}</p>
+             <!-- <p class="color666" v-text="commodity.brandNameCn">PANFAEFQ</p>-->
+              <p class="price" v-if="commodity.minPriceRMB">¥ {{commodity.minPriceRMB | currency}}</p>
+             <!-- <p class="price" v-if="!commodity.minPriceRMB">$ {{commodity.minPriceUSD || 0}}</p>-->
+            </div>
+          </a>
+          <div class="enter-store">
+            <a @click="buyNow(false, commodity)">加入购物车</a>
+            <a @click="buyNow(true, commodity)">立即购买</a>
+          </div>
+        </li>
+        <li v-if="!commodities || commodities.length === 0" class="empty-show">
+         <div class="empty">
+           <div class="empty-img">
+             <img src="/images/brandList/empty-cart.jpg">
+           </div>
+           <div class="empty-info">
+             <p class="grey f16"> 暂无展示产品</p>
+             <i class="iconfont" v-if="emptyShow === false">&#xe610;</i>&nbsp;<a v-if="emptyShow === false" href="/">返回首页</a>
+             <img v-if="emptyShow === true" src="/images/brandList/upload.png">&nbsp;<a v-if="emptyShow === true" href="/vendor#/store/maintain">马上去上传</a>
+           </div>
+         </div>
+       </li>
+      </ul>
+  </div>
+</template>
+<script>
+  import Buy from '~components/common/buyOrCar/buyComponent.vue'
+  import NuxtLink from '../../../.nuxt/components/nuxt-link'
+  export default {
+    name: 'recommend-product',
+    components: {
+      NuxtLink,
+      Buy
+    },
+    computed: {
+      commodities () {
+        return this.$store.state.shop.recommend.products.data
+      },
+      storeInfo () {
+        return this.$store.state.shop.storeInfo.store.data
+      },
+      isConsignment () {
+        return this.storeInfo.type === 'CONSIGNMENT'
+      },
+      user() {
+        return this.$store.state.option.user
+      },
+      storeStatus () {
+        return this.$store.state.option.storeStatus.data
+      },
+      emptyShow () {
+        let loggedStatus = false
+        if (this.user.logged && this.user.data.enterprise.uu) {
+          if (this.storeStatus.uuid === this.storeInfo.uuid) {
+            loggedStatus = true
+          } else {
+            loggedStatus = false
+          }
+        } else {
+          loggedStatus = false
+        }
+        return loggedStatus
+      }
+    },
+    filters: {
+      comCodeFilter: function (title) {
+        if (title === '') {
+          return title
+        }
+        let len = 0
+        let index = 0
+        for (let i = 0; i < title.length; i++) {
+          if (index === 0 && title.charAt(i).charCodeAt(0) > 255) {
+            len = len + 2
+          } else {
+            len++
+          }
+          if (len > 18) {
+            index = i
+            break
+          }
+        }
+        if (index > 0) {
+          return title.substring(0, index) + '...'
+        } else {
+          return title
+        }
+      },
+      currency: function (num) {
+        if (typeof num === 'number') {
+          if (num <= 0.000001) {
+            num = 0.000001
+          } else {
+            if (num.toString().indexOf('.') === -1) {
+              num += '.00'
+            } else {
+              let inputStr = num.toString()
+              let arr = inputStr.split('.')
+              let floatNum = arr[1]
+              if (floatNum.length > 6) {
+                num = inputStr.substring(0, arr[0].length + 7)
+                if (Number(floatNum.charAt(6)) > 4) {
+                  num = (Number(num) * 1000000 + 1) / 1000000
+                }
+              } else if (floatNum.length === 1) {
+                num = num + '0'
+              }
+            }
+          }
+        }
+        return num
+      }
+    },
+    methods: {
+      buyNow: function (isBuy, item) {
+        if (!this.$store.state.option.user.logged) {
+          this.$http.get('/login/page', {params: {returnUrl: window.location.href}}).then(response => {
+            if (response.data) {
+              window.location.href = response.data.content + '&baseUrl=' + encodeURIComponent(window.location.protocol + '//' + window.location.host + response.data.baseUrl)
+            }
+          })
+        } else {
+          if (item) {
+            if (isBuy) {
+              this.$http.post('/trade/order/buyNow', [{
+                uuid: item.comUuid,
+                batchCode: item.batchCode,
+                number: item.minBuyQty,
+                storeid: item.storeId,
+                storeUuid: item.storeUuid,
+                currencyName: item.currency,
+                minPackQty: item.minPackQty ? item.minPackQty : item.minBuyQty
+              }])
+                .then(response => {
+                  if (response.data.success) {
+                    if (response.data.message) {
+                      this.$message({
+                        message: response.data.message,
+                        type: 'success'
+                      })
+                      window.setTimeout(function () {
+                        window.location.href = '/user#/order/pay/' + this.baseUtils.enidfilter(response.data.data.orderid)
+                      }, 1000)
+                    } else {
+                      window.location.href = '/user#/order/pay/' + this.baseUtils.enidfilter(response.data.data.orderid)
+                    }
+                  } else {
+                    if (response.data.data && response.data.data.unvailable === 1) {
+                      this.$message.error('产品信息已失效,请刷新界面')
+                    } else {
+                      this.$message.error(response.data.message)
+                    }
+                  }
+                }, err => {
+                  console.log(err)
+                  if (item.minBuyQty > item.reserve) {
+                    this.$message.error('商品' + item.code + '的库存已经不满足最小起订量')
+                  }
+                })
+            } else {
+              // this.$store.dispatch('user/addCar', {uuid: item.uuid, batchCode: item.batchCode, number: item.minBuyQty})
+              this.$http.post('/trade/cart/add', {
+                uuid: item.comUuid,
+                batchCode: item.batchCode,
+                number: item.minBuyQty,
+                storeid: item.storeId,
+                storeUuid: item.storeUuid,
+                currencyName: item.currency,
+                minPackQty: item.minPackQty ? item.minPackQty : item.minBuyQty
+              })
+                .then(response => {
+                  if (response.data.success) {
+                    if (response.data.message) {
+                      this.$message({
+                        message: '添加购物车成功,但商品信息有更新',
+                        type: 'success'
+                      })
+                    } else {
+                      this.$message({
+                        message: '添加购物车成功',
+                        type: 'success'
+                      })
+                    }
+                  } else {
+                    if (response.data.code === 2) {
+                      this.$message.error(response.data.message + ',请刷新页面')
+                    } else {
+                      this.$message.error(response.data.message)
+                    }
+                  }
+                })
+            }
+          }
+        }
+      },
+      enidfilter: function (str) {
+        if (str) {
+          let encryptStr = '' // 最终返回的加密后的字符串
+          // 产生三位随机数
+          let num = ''
+          for (let i = 0; i < 3; i++) {
+            num += Math.floor(Math.random() * 10)
+          }
+          encryptStr += num // 产生3位随机数
+
+          // 16位加密
+          let tempspit = ''
+          let strspit = str.toString().toLowerCase()
+          if (strspit.match(/^[-+]?\d*$/) === null) { // 非整数字符,对每一个字符都转换成16进制,然后拼接
+            /**
+             * Unicode汉字、英文字母、数字的unicode范围
+             *汉字:[0x4e00,0x9fa5](或十进制[19968,40869])
+             *数字:[0x30,0x39](或十进制[48, 57])
+             *小写字母:[0x61,0x7a](或十进制[97, 122])
+             *大写字母:[0x41,0x5a](或十进制[65, 90]
+             * 'a'的Unicode编码:'&#97;',charCodeAt()的值是97
+             * '码'的Unicode编码:'\u7801', new String('码').charCodeAt()的值是30721,30721的16进制表示是7801
+             */
+            let s = strspit.split('')
+            for (let i = 0; i < s.length; i++) {
+              s[i] = s[i].charCodeAt() // 先转换成Unicode编码
+              s[i] = s[i].toString(16)
+              // 因为在服务器是每两位当做一个字符进行解析的,所以这里每个字符的Unicode编码范围必须在0——255之间。数字和大小写满足该要求,特殊字符则不一定,如果后续有特殊字符的要求,需要重写编码器和解码器
+              if (s[i].length === 1) {
+                s[i] = '0' + s[i]
+              }
+              tempspit = tempspit + s[i]
+            }
+            tempspit = tempspit + '{' + 1 // 1代表字符
+          } else { // 数字直接转换成16进制
+            strspit = parseInt(strspit)
+              .toString(16)
+            tempspit = strspit + '{' + 0 // 0代表纯数字
+          }
+
+          let temp = tempspit.split('{') // 对要加密的字符转换成16进制
+          let numLength = temp[0].length // 转换后的字符长度
+          numLength = numLength.toString(16) // 字符长度换算成16进制
+          if (numLength.length === 1) { // 如果是1,补一个0
+            numLength = '0' + numLength
+          } else if (numLength.length > 3) { // 转换后的16进制字符长度如果大于2位数,则返回,不支持
+            return ''
+          }
+          encryptStr += numLength
+          if (temp[1] === '0') {
+            encryptStr += 0
+          } else if (temp[1] === '1') {
+            encryptStr += 1
+          }
+          encryptStr += temp[0]
+          if (encryptStr.length < 20) { // 如果小于20位,补上随机数
+            // 产生三位随机数
+            let numtwo = ''
+            for (let i = 0; i < 20 - encryptStr.length; i++) {
+              numtwo += Math.floor(Math.random() * 10)
+            }
+            let ran = numtwo // 产生3位随机数
+            encryptStr += ran
+          }
+          return encryptStr
+        }
+      }
+    }
+  }
+</script>
+<style lang="scss" scoped>
+  .recommend-fragment {
+    width: 100%;
+  }
+  .recommend-fragment ul{
+    width: 100%;
+    height: 356px;
+    background: #fff;
+   /* display: inline-block;*/
+    -webkit-padding-start: 0;
+    border-radius: 5px;
+    padding-left: 2px;
+  }
+  .recommend-fragment ul li
+    .img{
+      height: 90px;
+      text-align: center;
+      line-height: 90px;
+      img{
+        max-width: 80px;
+        max-height: 80px;
+      }
+  }
+  .recommend-fragment ul li .content{
+    width: 100%;
+    margin: 0 auto;
+    font-size: 12px;
+    p{
+      width: 100%;
+      text-align: center;
+      display: inline-block;
+      line-height: 22px;
+      overflow: hidden;
+      text-overflow: ellipsis;
+      white-space: nowrap;
+      margin-bottom: 0;
+      padding-left: 10px;
+      color: #666;
+      &.price{
+        color: #ff002e;
+      }
+    }
+  }
+ .recommend-fragment ul li .enter-store {
+    position: absolute;
+    top: 178px;
+    width: 100%;
+    height: 30px;
+    line-height: 30px;
+    text-align: left;
+  }
+  .recommend-fragment ul li.big .enter-store a {
+    width: 74px;
+    height: 24px;
+    display: inline-block;
+    line-height: 24px;
+    text-align: center;
+    font-size: 13px;
+    margin-left: 14px;
+    border-radius: 3px;
+    &:first-child {
+      background-color: #ff9000;
+      border: 1px solid #ff9000;
+      color: #fff;
+    }
+    &:last-child {
+      background-color: #be0606;
+      border: 1px solid #be0606;
+      color: #fff;
+    }
+  }
+  .recommend-fragment ul li.big {
+    float: left;
+    width: 190px;
+    height: 174px;
+    position: relative;
+    overflow: hidden;
+    margin: 2px 3px 0px 0px;
+    &:nth-child(5n){
+      margin: 2px 0px 0px 0px;
+    }
+    &:hover{
+      box-shadow: 2px 0px 1px #d9d9d9, -2px 0px 1px #d9d9d9, 0px 2px 1px #d9d9d9, 0px -2px 1px #d9d9d9;
+      .enter-store {
+        top: 140px;
+        left: 0px;
+        transition: all .5s;
+      }
+      .img, .content{
+        transform:translate(0px,-10px);
+        -ms-transform:translate(0px,-10px); /* IE 9 */
+        -webkit-transform:translate(0px,-10px); /* Safari and Chrome */
+      }
+    }
+  }
+  /*.recommend-fragment ul li.small .enter-store a {
+    width: 74px;
+    height: 24px;
+    display: inline-block;
+    line-height: 22px;
+    text-align: center;
+    font-size: 12px;
+    margin-left: 11px;
+    border-radius: 3px;
+    &:first-child {
+      background-color: #fff;
+      border: solid 1px #3b7cf4;
+      color: #3c7df5;
+    }
+    &:last-child {
+      background-color: #ffa422;
+      border: 1px solid #ffa422;
+      color: #fff;
+    }
+  }
+  .recommend-fragment ul li.small {
+    float: left;
+    width: 180px;
+    height: 174px;
+    position: relative;
+    overflow: hidden;
+    margin: 2px 8px 0px 0px;
+    &:nth-child(5n){
+      margin: 2px 0px 0px 0px;
+    }
+    &:hover, &:focus, &:active &:visited{
+      box-shadow: 2px 0px 1px #d9d9d9, -2px 0px 1px #d9d9d9, 0px 2px 1px #d9d9d9, 0px -2px 1px #d9d9d9;
+      .enter-store {
+        top: 140px;
+        left: 0px;
+        transition: all .5s;
+      }
+      .img, .content{
+        transform:translate(0px,-10px);
+        -ms-transform:translate(0px,-10px); !* IE 9 *!
+        -webkit-transform:translate(0px,-10px); !* Safari and Chrome *!
+      }
+    }
+  }*/
+  .recommend-fragment ul li.empty-show {
+    width: 100%;
+    height: 356px;
+    padding-top: 150px;
+    &:hover{
+      box-shadow: 0px 0px 0px transparent;
+    }
+    .empty{
+      margin: 0 auto;
+      width: 181px;
+      .empty-img{
+        float: left;
+      }
+      .empty-info{
+        float: left;
+        margin: 5px 0px 0px 20px;
+        .grey{
+          color: #999;
+          font-size: 14px;
+        }
+        i{
+          color: #5078cb;
+        }
+        a{
+          font-size: 14px;
+          color: #5078cb;
+        }
+
+      }
+    }
+  }
+</style>

+ 452 - 0
components/store/home/StoreBanner.vue

@@ -0,0 +1,452 @@
+<template>
+  <div class="container" id="title-fragment">
+    <div class="container">
+      <div class="row" style="margin-bottom: 20px;">
+        <!-- 商标展示 -->
+        <div class="logo two-word" v-if="storeInfo.type == 'ORIGINAL_FACTORY'">原厂</div>
+        <div class="logo two-word" v-else-if="storeInfo.type == 'CONSIGNMENT'">寄售</div>
+        <div class="logo" v-else-if="storeInfo.type == 'AGENCY'">代理商</div>
+        <div class="logo" v-else-if="storeInfo.type == 'DISTRIBUTION'">经销商</div>
+        <div class="shop-logo">
+          <img class="logo-img" :src="storeInfo.logoUrl || '/images/store/common/default.png'" />
+         <!-- <p id="shop-title" v-if="storeInfo.storeShortName" v-text="storeInfo.storeShortName">店铺名称</p>-->
+          <p class="shop-name" v-if="storeInfo.storeShortName">{{storeInfo.storeShortName | nameFilter}}</p>
+          <p class="shop-name" v-else></p>
+          <div class="enter-store">
+            <a v-if="isFocus == 'false' || typeof isFocus == 'object'" @click="focus(storeInfo.id, storeInfo.storeName)">关注店铺</a>
+            <a v-if="isFocus == 'true'" class="focus">已关注</a>
+            <a @click="goLink()">联系卖家</a>
+          </div>
+          <div class="share">
+            <span @click="setShowShare(!showShare, $event)">手机版链接&nbsp;<img src="/images/store/home/qrccode-small.png">&nbsp;&nbsp;<img :class="{'active': showCate}" src="/images/store/home/arrow-down.png" alt=""></span>
+            <div v-show="showShare">
+              <i class="icon-guanbi1 iconfont" @click="setShowShare(false, $event)"></i>
+              <h1>分享链接</h1>
+              <p>随时随地使用手机查看店铺现货</p>
+              <canvas id="qrccode-canvas"></canvas>
+              <!--<input v-show="showShare" :value="url" readonly>-->
+              <span v-if="showShare" id="copyLink"  :data-clipboard-text="url">复制链接</span>
+            </div>
+          </div>
+        </div>
+        <!-- 店名展示 -->
+        <div class="shop-banner">
+          <img :src="storeInfo.bannerUrl || '/images/store/default/shop_banner.png'">
+         <!-- <div id="shop-title" v-if="storeInfo.storeShortName" v-text="storeInfo.storeShortName">店铺名称</div>-->
+        </div>
+      </div>
+      <el-dialog
+        :visible.sync="dialogVisible"
+        size="tiny"
+      >
+        <h3 class="header-text">关注成功!</h3>
+        <div class="focus modal-body">
+          <button type="button" @click="dialogVisible = false" class="btn" style="margin-left:25px;">关&nbsp;&nbsp;闭</button>
+          <button type="button" @click="dialogVisible = false" class="focus-btn btn btn btn-info" style="margin-left:35px;">
+            <a href="/user#/storeFocus" target="_blank">查看我的店铺关注</a>
+          </button>
+        </div>
+      </el-dialog>
+      <link-saler-box
+        :tel="tel"
+        v-if="showLinkBox"
+        @cancelAction="showLinkBox = false">
+      </link-saler-box>
+    </div>
+  </div>
+</template>
+<script>
+import Clipboard from 'clipboard'
+import LinkSalerBox from '~components/common/LinkSalerBox.vue'
+let QRCode = require('qrcode')
+
+export default {
+  name: 'store-banner',
+  data () {
+    return {
+      dialogVisible: false,
+      showShare: false,
+      clipboard: {},
+      showLinkBox: false,
+      showCate: false,
+      tel: ''
+    }
+  },
+  mounted () {
+    let _this = this
+    _this.url = window.location.href
+    _this.clipboard = new Clipboard('#copyLink')
+    _this.clipboard.on('success', e => {
+      _this.clipboard.destroy()
+      _this.$message.success('已复制到剪切板')
+    })
+    _this.clipboard.on('error', e => {
+      _this.$message.error('浏览器不支持自动复制,请手动复制')
+      _this.clipboard.destroy()
+    })
+    document.addEventListener('click', function () {
+      _this.showShare = false
+      _this.showCate = false
+    })
+  },
+  components: {
+    LinkSalerBox
+  },
+  methods: {
+    loadQRcode: function () {
+      let canvas = document.getElementById('qrccode-canvas')
+      QRCode.toCanvas(canvas, this.url, (error) => {
+        console.log(error || 'QRcode success')
+      })
+    },
+    setShowShare: function (flag, event) {
+      event.stopPropagation()
+      this.loadQRcode()
+      this.showShare = flag
+      this.showCate = flag
+    },
+    focus (id, name) {
+      if (!this.user.logged) {
+        this.$http.get('/login/page', {params: {returnUrl: window.location.href}}).then(response => {
+          if (response.data) {
+            window.location.href = response.data.content + '&baseUrl=' + encodeURIComponent(window.location.protocol + '//' + window.location.host + response.data.baseUrl)
+          }
+        })
+      } else {
+        this.dialogVisible = true
+        this.$store.dispatch('shop/StoreFocus', {storeName: name, storeid: id})
+        this.isFocus = true
+      }
+    },
+    goLink: function () {
+      this.baseUtils.goLinkUser(this, this.storeInfo.enUU)
+    }
+//    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
+//          }
+//        })
+//    }
+  },
+  filters: {
+    nameFilter: function (title) {
+      if (title === '') {
+        return title
+      }
+      let len = 0
+      let index = 0
+      for (let i = 0; i < title.length; i++) {
+        if (index === 0 && title.charAt(i).charCodeAt(0) > 255) {
+          len = len + 2
+        } else {
+          len++
+        }
+        if (len > 24) {
+          index = i
+          break
+        }
+      }
+      if (index > 0) {
+        return title.substring(0, index) + '...'
+      } else {
+        return title
+      }
+    },
+    date: function (input) {
+      const d = new Date(input)
+      const year = d.getFullYear()
+      const monthTemp = d.getMonth() + 1
+      const month = monthTemp < 10 ? '0' + monthTemp : '' + monthTemp
+      const hour = d.getHours() < 10 ? '0' + d.getHours() : '' + d.getHours() + ' '
+      const minutes = d.getMinutes() < 10 ? '0' + d.getMinutes() : '' + d.getMinutes() + ' '
+      const day = d.getDate() < 10 ? '0' + d.getDate() : '' + d.getDate() + ' '
+      return year + '-' + month + '-' + day + ' ' + hour + ':' + minutes
+    }
+  },
+  computed: {
+    storeInfo () {
+      return this.$store.state.shop.storeInfo.store.data
+    },
+    isConsignment () {
+      return this.storeInfo.type === 'CONSIGNMENT'
+    },
+    tab () {
+      return this.$store.state.chat.tab.tab.data
+    },
+    user () {
+      return this.$store.state.option.user
+    },
+    isFocus () {
+      return this.$store.state.shop.storeInfo.focusList.data
+    },
+    url: {
+      get: function () {
+        return window.location.protocol + '//' + window.location.host + '/mobile/share/storeShare/' + this.storeInfo.uuid
+      },
+      set: function () {
+      }
+    }
+  }
+}
+</script>
+<style lang="scss">
+  .header-text {
+    text-align: center;
+    font-size: 20px;
+    color: #008B00;
+    margin-top: 0;
+  }
+  .el-dialog__wrapper .el-dialog--tiny {
+    width: 320px !important;
+  }
+  .el-dialog__body {
+    padding: 14px !important;
+  }
+  .focus button.focus-btn a{
+    color: #fff;
+    width: 100%;
+    height: 100%;
+    display: inline-block;
+  }
+  .focus button.focus-btn{
+    width: 138px;
+    height: 36px;
+    line-height: 36px;
+    padding: 0;
+  }
+  #title-fragment {
+		padding: 0;
+	}
+	#title-fragment .container {
+		width: 1190px;
+		padding-left: 0px;
+		padding-right: 0px;
+	}
+	#title-fragment .container >.row {
+		margin-left: 0px;
+		margin-right: 0px;
+    position: relative;
+    background: #fff;
+	}
+  .logo{
+    width: 28px;
+    padding-right: 3px;
+    height: 60px;
+    text-align: center;
+    line-height: 15px;
+    position: absolute;
+    top: 13px;
+    left: 0px;
+    color: #fff;
+    margin-top: -20px;
+    background: url('/images/store/home/logo-type.png') no-repeat;
+    z-index: 100;
+    padding-top: 3px;
+  }
+  .two-word{
+    padding-top: 10px;
+  }
+	#title-fragment .shop-logo {
+		width: 220px;
+		height: 220px;
+		border: 1px solid #e8e8e8;
+		float: left;
+		text-align: center;
+		line-height: 210px;
+    position: relative;
+    .shop-name{
+      height: 40px;
+      line-height: 40px;
+      margin-top: -105px;
+      width: 100%;
+    }
+    .enter-store {
+      width: 100%;
+      height: 30px;
+      line-height: 30px;
+      text-align: left;
+      margin-top: -10px;
+      padding-left: 20px;
+      a {
+        width: 70px;
+        height: 24px;
+        display: inline-block;
+        line-height: 22px;
+        text-align: center;
+        font-size: 13px;
+        margin-left: 12px;
+        border-radius: 3px;
+        &:first-child {
+          background: #bd0505;
+          border: 1px solid #bd0505;
+          color: #fff;
+        }
+        &.focus{
+          background-color: #c1c1c1;
+          border: 1px solid #c1c1c1;
+        }
+        &:last-child {
+          background: #3c7cf7;
+          border: 1px solid #3c7cf7;
+          color: #fff;
+        }
+      }
+    }
+    .share {
+      display: inline-block;
+      position: relative;
+      > span {
+        position: relative;
+        top: -81px;
+        color: #4290f7;
+        cursor: pointer;
+        .active {
+          transform:rotate(180deg);
+          -ms-transform:rotate(180deg); /* Internet Explorer */
+          -moz-transform:rotate(180deg); /* Firefox */
+          -webkit-transform:rotate(180deg); /* Safari 和 Chrome */
+          -o-transform:rotate(180deg); /* Opera */
+        }
+      }
+      > div {
+        position: absolute;
+        top: 38px;
+        left: -47px;
+        width: 211px;
+        height: 321px;
+        background: #fff;
+        box-shadow: 1px 1px 4px 0 #ccbebe;
+        z-index: 1300000;
+        text-align: center;
+        h1, p{
+          height: 30px;
+          width: 100%;
+        }
+        h1{
+          margin-top: -80px;
+        }
+        p{
+          margin-top: -10px;
+        }
+        canvas{
+          margin-top: 75px;
+        }
+        /*input {
+          display: inline-block;
+          width: 140px;
+          overflow: hidden;
+          height: 35px;
+          vertical-align: middle;
+        }*/
+        span {
+           display: inline-block;
+           color: #fff;
+           background: #4290f7;
+           height: 36px;
+           line-height: 36px;
+           width: 70px;
+           font-style: normal;
+           vertical-align: middle;
+           cursor: pointer;
+           margin-top: -380px;
+         }
+        i {
+          position: absolute;
+          right: 10px;
+          top: -89px;
+          cursor: pointer;
+          font-size: 14px;
+          font-weight: bold;
+        }
+      }
+    }
+	}
+	#title-fragment .shop-logo .logo-img {
+		width: 173px;
+		height: 86px;
+    margin-top: -102px;
+	}
+
+	#title-fragment .shop-banner {
+		float: left;
+		position: relative;
+		width: 970px;
+		height: 220px;
+		border: 1px solid #e8e8e8;
+		border-left: none;
+		overflow: hidden;
+	}
+
+	#title-fragment .shop-banner img {
+		width: 970px;
+		height: 220px;
+	}
+
+	#title-fragment .shop-banner #shop-title {
+		position: absolute;
+		top: 50px;
+		left: 60px;
+		font-size: 30px;
+		color: rgb(255,255,255);
+	}
+	.container{
+		width: 1190px;
+		padding: 0;
+	}
+</style>

+ 5 - 2
components/store/index.js

@@ -3,7 +3,10 @@ import StoreTitle from './common/StoreTitle.vue'
 import BaseInfo from './BaseInfo.vue'
 import ComponentInfo from './ComponentInfo.vue'
 import CommodityInfo from './CommodityInfo.vue'
-import CommodityList from './CommodityList.vue'
+import CommodityList from './home/CommodityList.vue'
 import RecommendProduct from './RecommendProduct.vue'
+import Certificate from './home/Certificate.vue'
+import EnterpriseInfo from './home/EnterpriseInfo.vue'
+import StoreBanner from './home/StoreBanner.vue'
 
-export { StoreHeader, StoreTitle, BaseInfo, ComponentInfo, CommodityInfo, CommodityList, RecommendProduct }
+export {StoreHeader, StoreTitle, BaseInfo, ComponentInfo, CommodityInfo, CommodityList, RecommendProduct, Certificate, EnterpriseInfo, StoreBanner}

+ 3 - 1
nuxt.config.js

@@ -188,6 +188,8 @@ module.exports = {
     '/wx/**': baseUrl,
     '/messages**': messageUrl,
     '/messages/**': messageUrl,
-    '/cmsApi**': cmsUrl
+    '/cmsApi**': cmsUrl,
+    '/mEmail/**': baseUrl,
+    '/mPhone/**': baseUrl
   }
 }

+ 3 - 3
pages/index.vue

@@ -10,7 +10,7 @@
         <kind-category @loadchild="loadProductKinds"></kind-category>
         <display-card></display-card>
       </carousel>
-      <advert></advert>
+      <!--<advert></advert>-->
       <floor-list></floor-list>
       <img class="banner-img" src="/images/all/banner-home2.jpg" style="margin: 44px auto 24px;" alt="">
       <news></news>
@@ -19,7 +19,7 @@
   </div>
 </template>
 <script>
-  import { KindCategory, displayCard, Carousel, Advert, FloorList, Partner, News } from '~components/home'
+  import { KindCategory, displayCard, Carousel, FloorList, Partner, News } from '~components/home'
 //  import { Christmas, NewYear } from '~components/default'
   import { Home } from '~components/mobile'
   export default {
@@ -65,7 +65,7 @@
       KindCategory,
       displayCard,
       Carousel,
-      Advert,
+      // Advert,
       FloorList,
       Partner,
       News,

+ 5 - 5
pages/mobile/center/vendor/index.vue

@@ -43,18 +43,18 @@
           </nuxt-link>
         </ul>
       </div>
-      <div class="block-wrap collect-block">
-        <div class="content-line" @click="goStore">
+      <!--<div class="block-wrap collect-block">
+       <div class="content-line" @click="goStore">
           <img src="/images/mobile/center/vendor/shop.png" alt="">
           <span>我的店铺</span>
           <i class="iconfont icon-xiangyou"></i>
         </div>
-       <!-- <nuxt-link tag="div" to="/mobile/center/vendor/message"  class="content-line" v-if="user.data.enterprise.uu">
+        <nuxt-link tag="div" to="/mobile/center/vendor/message"  class="content-line" v-if="user.data.enterprise.uu">
           <img src="/images/mobile/center/user/message.png" alt="">
           <span>消息<span class="text">({{messageCount.count || 0}})</span></span>
           <i class="iconfont icon-xiangyou"></i>
-        </nuxt-link>-->
-      </div>
+        </nuxt-link>
+      </div>-->
     </div>
     <remind-box :title="remindText" :timeoutCount="timeoutCount"></remind-box>
   </div>

+ 6 - 0
pages/mobile/user/info/personal.vue

@@ -7,6 +7,12 @@
     layout: 'mobile',
     components: {
       Info
+    },
+    mounted () {
+      this.$nextTick(() => {
+        this.$store.dispatch('user/updateUserEmail', { params: {returnUrl: window.location.href} })
+        this.$store.dispatch('user/updateUserMobile', { params: {returnUrl: window.location.href} })
+      })
     }
   }
 </script>

+ 74 - 5
pages/mobile/user/storeinfo.vue

@@ -13,6 +13,22 @@
           <div class="scroll">
             <div class="si-wrap">
               <ul class="infoul" :class="{'no-edit': !isAdmin}">
+                <li class="clearfix" :class="{border:  storeState !== 'look'}">
+                  <div class="name pull-left" :class="{update: storeState !== 'look'}">店铺LOGO:</div>
+                  <div class="file_logo pull-left">
+                    <div class="file_img">
+                      <img :src="imageUploadUrl ? imageUploadUrl : storeInfo.logoUrl ? storeInfo.logoUrl : '/images/logo/default.png'">
+                    </div>
+                    <div class="file_input" v-if="storeState !== 'look'">
+                      <input type="file"
+                             class="file-input"
+                             name="name"
+                             accept="image/jpeg,image/jpg,image/gif,image/bmp,image/png"
+                             @change="uploadImg"/>
+                      <span>仅支持JPG、PNG、GIF格式,大小不超过500kb,建议使用220*220的图片</span>
+                    </div>
+                  </div>
+                </li>
                 <li class="clearfix" :class="{border:  storeState !== 'look'}">
                   <div class="name pull-left" :class="{update: storeState !== 'look'}">店铺名称:</div>
                   <div class="text pull-left" v-if="storeState === 'look'">
@@ -145,13 +161,14 @@
   export default {
     layout: 'mobileNoHeader',
     middleware: 'authenticated',
-    fetch ({ store, route }) {
+    fetch ({ store }) {
       return Promise.all([
         store.dispatch('loadStoreStatus', { op: 'check' })
       ])
     },
     data() {
       return {
+        imageUploadUrl: '',
         storeState: 'look',
         storeInfo: {},
         splitText: '', // 省略号文本
@@ -188,6 +205,27 @@
 //      }
     },
     methods: {
+      uploadImg (e) {
+        let file = e.target.files[0]
+        if (file && file.size >= 500 * 1025) {
+          this.collectResult = '选择图片过大,请重新选择!'
+          this.timeoutCount++
+          return
+        }
+        if (file) {
+          let param = new FormData()
+          param.append('image', file, file.name)
+          let config = {
+            headers: {'Content-Type': 'multipart/form-data'}
+          }
+          this.$http.post('/api/images', param, config)
+            .then(response => {
+              if (response.data) {
+                this.imageUploadUrl = response.data[0].path
+              }
+            })
+        }
+      },
       setRemindText (str) {
         this.collectResult = str
         this.timeoutCount++
@@ -315,7 +353,8 @@
           enterprise: this.storeInfo.enterprise,
           storeName: this.storeInfo.storeName,
           storeShortName: this.storeInfo.storeShortName,
-          storeApplication: this.storeInfo.storeApplication
+          storeApplication: this.storeInfo.storeApplication,
+          logoUrl: this.imageUploadUrl
         }
         this.$http.put(`/store-service/stores/${this.storeInfo.uuid}?kind=BASIC_INFO`, kay).then(res => {
           this.collectResult = '保存成功'
@@ -449,6 +488,36 @@
     color: #666;
     font-size: 0.28rem;
     padding: 0 .24rem;
+    .file_logo{
+      position:relative;
+      width:4.4rem;
+      .file_img{
+        width:1rem;
+        display:inline-block;
+        img{
+          width:100%;
+          height: 1rem;
+        }
+      }
+      .file_input{
+        position:absolute;
+        top:0;
+        left:0;
+        display:inline-block;
+        vertical-align: top;
+        width:4.4rem;
+        input[type=file] {
+          opacity: 0;
+          width: 1rem;
+          height: 1rem;
+          float: left;
+          margin-right:.15rem;
+        }
+        span{
+          font-size: .14rem;
+        }
+      }
+    }
     .upload {
       img {
         transform: rotate(180deg);
@@ -458,7 +527,7 @@
       border-bottom: .01rem solid #d9d9d9;
       min-height: 1.16rem;
       line-height: normal;
-      padding: .4rem .28rem;
+      padding: .4rem .2rem;
       &.border {
         border-bottom: .01rem solid #d9d9d9;
       }
@@ -468,14 +537,14 @@
       }
     }
     .name {
-      width: 1.6rem;
+      width: 1.8rem;
       text-align: right;
       color: #226ce7;
     }
     &.no-edit {
       color: #999;
       .name {
-        color: #999;
+        color: #226ce7;
       }
     }
     .text {

+ 0 - 22
pages/product/brand/brandList/_initial.vue

@@ -1,30 +1,15 @@
 <template>
   <div id="brand-center">
-    <!--<new-search :background="bgLink"></new-search>-->
     <recommend-brand></recommend-brand>
     <brand-index></brand-index>
-    <!--<type-index :title="title"></type-index>-->
   </div>
 </template>
 
 <script>
-//  import { BrandList, Recommends } from '~components/product'
-  import { NewSearch } from '~components/home'
   import { RecommendBrand, BrandIndex } from '~components/brandCenter'
   export default {
     name: 'brandCenterIndex',
     layout: 'default',
-    data () {
-      return {
-        background: '/images/brandCenter/search-bg.png',
-        title: '型号索引:'
-      }
-    },
-    computed: {
-      bgLink () {
-        return this.$store.state.product.banner.brandBanner.data.data[0].pictureLink
-      }
-    },
     fetch ({store, route}) {
       return Promise.all([
         store.dispatch('loadFloors'),
@@ -36,19 +21,12 @@
       ])
     },
     components: {
-//      BrandList,
-//      Recommends
-      NewSearch,
       RecommendBrand,
       BrandIndex
     }
   }
 </script>
 <style lang="scss">
-  /*.router-link-exact-active{*/
-    /*color: #5078CB;*/
-    /*font-weight: bold;*/
-  /*}*/
   #brand-center {
     .search-box {
       background-size: auto!important;

+ 71 - 2
pages/store/_uuid/index.vue

@@ -1,6 +1,6 @@
-<template>
+<!--<template>
   <div class="container">
-    <div v-if="storeInfoStore.id">
+    <div v-if="!storeInfoStore.id">
       <recommend-product/>
       <commodity-list :kinds="kinds"/>
     </div>
@@ -55,6 +55,70 @@ export default {
   }
 }
 </script>
+<style>
+  #nav_fragment .el-dialog__wrapper .el-dialog&#45;&#45;tiny{
+    width: 320px !important;
+  }
+  #nav_fragment .el-dialog__wrapper .el-dialog__body{
+    padding: 14px !important;
+  }
+</style>-->
+<template>
+  <div>
+      <div class="store-banner">
+        <store-banner></store-banner>
+      </div>
+      <enterprise-info></enterprise-info>
+      <certificate></certificate>
+      <commodity-list :kinds="kinds"/>
+  </div>
+</template>
+<script>
+  import axios from '~plugins/axios'
+  import { CommodityList, Certificate, EnterpriseInfo, StoreBanner } from '~components/store'
+  export default {
+    layout: 'main',
+    data () {
+      return {
+        uuid: this.$route.params.uuid
+      }
+    },
+    computed: {
+      storeInfo () {
+        return this.$store.state.shop.storeInfo.store.data
+      },
+      isConsignment () {
+        return this.storeInfo.type === 'CONSIGNMENT'
+      }
+    },
+    fetch ({ store, params, redirect }) {
+      if (!params.uuid) {
+        return redirect('/error')
+      }
+      return Promise.all([
+        store.dispatch('shop/findStoreInfoFromUuid', params),
+        store.dispatch('shop/findRecommendProducts', params),
+        store.dispatch('shop/pageCommoditiesOfStore', params.uuid, { page: 1, count: 6 }),
+        store.dispatch('loadStoreStatus', { op: 'check' })
+
+      ])
+    },
+    async asyncData ({ params }) {
+//  asyncData ({ params }) {
+      let { data } = await axios.get('/api/commodity/components/kinds', { params: { StoreUuid: params.uuid } })
+//    axios.get('/api/commodity/components/kinds', { params: { StoreUuid: params.uuid } })
+//      .then(response => {
+      return { kinds: data }
+//      })
+    },
+    components: {
+      Certificate,
+      CommodityList,
+      EnterpriseInfo,
+      StoreBanner
+    }
+  }
+</script>
 <style>
   #nav_fragment .el-dialog__wrapper .el-dialog--tiny{
     width: 320px !important;
@@ -62,4 +126,9 @@ export default {
   #nav_fragment .el-dialog__wrapper .el-dialog__body{
     padding: 14px !important;
   }
+  .store-banner{
+    min-width: 1190px;
+    background: #ece9ec;
+    padding-top: 20px;
+  }
 </style>

BIN
static/images/brandCenter/brand-index-title.png


BIN
static/images/brandCenter/brand-index-title1.png


BIN
static/images/brandCenter/features.png


BIN
static/images/brandCenter/recommend-bg.png


BIN
static/images/brandCenter/recommend-bg1.png


BIN
static/images/logo/default.png


BIN
static/images/store/common/shadow.png


BIN
static/images/store/home/arrow-down.png


BIN
static/images/store/home/detail1.png


BIN
static/images/store/home/logo-qualification.jpg


BIN
static/images/store/home/logo-type.png


BIN
static/images/store/home/qrccode-small.png


+ 20 - 0
store/user.js

@@ -50,5 +50,25 @@ export const actions = {
       }, err => {
         commit('car/GET_CAR_FAILURE', err)
       })
+  },
+  // 获取修改邮箱地址
+  updateUserEmail ({ commit }, params = {}) {
+    commit('updateUser/REQUEST_USER_EMAIL')
+    return axios.get(`/mEmail/page`, params)
+      .then(response => {
+        commit('updateUser/GET_USER_EMAIL_SUCCESS', response.data)
+      }, err => {
+        commit('updateUser/GET_USER_EMAIL_FAILURE', err)
+      })
+  },
+  // 获取修改手机号地址
+  updateUserMobile ({ commit }, params = {}) {
+    commit('updateUser/REQUEST_USER_MOBILE')
+    return axios.get(`/mPhone/page`, params)
+      .then(response => {
+        commit('updateUser/GET_USER_MOBILE_SUCCESS', response.data)
+      }, err => {
+        commit('updateUser/GET_USER_MOBILE_FAILURE', err)
+      })
   }
 }

+ 33 - 0
store/user/updateUser.js

@@ -0,0 +1,33 @@
+export const state = () => ({
+  email: {
+    fetching: false,
+    data: []
+  },
+  mobile: {
+    fetching: false,
+    data: []
+  }
+})
+
+export const mutations = {
+  REQUEST_USER_EMAIL (state) {
+    state.email.fetching = true
+  },
+  GET_USER_EMAIL_FAILURE (state) {
+    state.email.fetching = false
+  },
+  GET_USER_EMAIL_SUCCESS (state, result) {
+    state.email.fetching = false
+    state.email.data = result
+  },
+  REQUEST_USER_MOBILE (state) {
+    state.mobile.fetching = true
+  },
+  GET_USER_MOBILE_FAILURE (state) {
+    state.mobile.fetching = false
+  },
+  GET_USER_MOBILE_SUCCESS (state, result) {
+    state.mobile.fetching = false
+    state.mobile.data = result
+  }
+}