Browse Source

处理定向询价功能

wangcz 7 years ago
parent
commit
a6fe1aa697

+ 18 - 13
components/mobile/applyPurchase/SeekList.vue

@@ -14,19 +14,19 @@
             </div>
             <div class="content">
               品牌:
-              <span>{{item.inbrand || '-'}}</span>
+              <span>{{item.inbrand || item.brand ||'-'}}</span>
             </div>
             <div class="content">
               物料名称:
-              <span>{{item.title || item.prodTitle || '-'}}</span>
+              <span>{{item.title || item.prodTitle || (item.product && item.product.title) || '-'}}</span>
             </div>
             <div class="content">
               型号:
-              <span>{{item.cmpCode || '-'}}</span>
+              <span>{{item.cmpCode || (item.product && item.product.code) || '-'}}</span>
             </div>
             <div class="content">
               规格:
-              <span>{{item.spec || '-'}}</span>
+              <span>{{item.spec || (item.product && item.product.spec) ||'-'}}</span>
             </div>
             <div class="content">
               采购数量(PCS):
@@ -34,7 +34,7 @@
             </div>
             <div class="content">
               截止日期:
-              <span class="date">{{item.endDate | date}}</span>
+              <span class="date">{{(item.endDate || item.inquiry.endDate) | date}}</span>
             </div>
             <!--<template v-if="item.quotation">
               <p class="remain-time" v-if="item.remainingTime > 0">剩余&nbsp;:
@@ -51,11 +51,11 @@
               <div class="content" v-if="userType === 'buyer'">
                 <span>{{item.quotation.vendName || '-'}}</span>
               </div>
-              <div class="content">
+              <div class="content" v-if="seekType !== 'enquiry'">
                 报价人:
                 <span>{{item.quotation.user ? item.quotation.user.userName : '-'}}</span>
               </div>
-              <div class="content">
+              <div class="content" v-if="seekType !== 'enquiry'">
                 电话:
                 <span>{{item.quotation.user ? item.quotation.user.userTel : '-'}}</span>
               </div>
@@ -80,16 +80,20 @@
               <button class="more-btn" @click="goSayPriceInfo(item.newId || item.quteId || item.id, item.agreed, index)">查看更多</button>
             </template>
             <template v-else>
-              <p class="remain-time" v-if="item.remainingTime > 0">剩余&nbsp;:
+              <p class="remain-time" v-if="seekType !== 'enquiry' && item.remainingTime > 0">剩余&nbsp;:
                 <span v-if="getDay(item.remainingTime) > 0" v-text="getDay(item.remainingTime)"></span>
                 <i v-if="getDay(item.remainingTime) > 0">&nbsp;天&nbsp;</i>
                 <span v-if="getDay(item.remainingTime) <= 0" v-text="getHours(item.remainingTime)"></span>
                 <i v-if="getDay(item.remainingTime) <= 0">&nbsp;小时</i>
               </p>
+              <p class="remain-time" v-else-if="(seekType === 'enquiry') && (item.status === 200)">我要报价</p>
+              <p class="remain-time" v-else-if="(seekType === 'enquiry') && (item.status === 201 && item.agreed == null && item.invalid !== 1)">已报价</p>
+              <p class="remain-time" v-else-if="(seekType === 'enquiry') && (item.status === 201 && item.invalid === 1)">已失效</p>
+              <p class="remain-time" v-else-if="(seekType === 'enquiry') && (item.status === 201 && item.agreed === 1 && item.invalid !== 1)">已采纳</p>
               <p class="remain-time" v-else><span>已截止</span></p>
               <!--<a v-if="!userType && item.quoted == 1">已报价</a>-->
-              <a v-if="isSelfSeek(item)" class="self-publish" @click="setRemindText('此为贵公司的求购')">我要报价</a>
-              <a v-if="canSayPrice(item)" @click="goSayPrice(item.itemId || item.id, index)">我要报价</a>
+              <a v-if="isSelfSeek(item) && seekType !== 'enquiry'" class="self-publish" @click="setRemindText('此为贵公司的求购')">我要报价</a>
+              <a v-if="canSayPrice(item) && seekType !== 'enquiry'" @click="goSayPrice(item.itemId || item.id, index)">我要报价</a>
               <!--<a v-if="item.newId" class="self-publish" @click="setRemindText('您已报价')">我要报价</a>-->
               <a v-if="canSeeInfo(item)" @click="goSayPriceInfo(item.newId || item.quteId || item.id, item.agreed, index)">查看报价</a>
             </template>
@@ -128,7 +132,7 @@ export default {
     SayPriceInfo,
     EmptyStatus
   },
-  props: ['userType', 'seekType', 'purchaseManList', 'isDataChange', 'isSearch', 'keyword'],
+  props: ['userType', 'seekType', 'activeType', 'purchaseManList', 'isDataChange', 'isSearch', 'keyword'],
   filters: {
     date: function(date) {
       if (date) {
@@ -183,6 +187,7 @@ export default {
     'purchaseManList': {
       handler (newVal) {
         this.purchaseManListData = JSON.parse(JSON.stringify(this.purchaseManList))
+        console.log(this.purchaseManListData)
       },
       immediate: true
     }
@@ -271,10 +276,10 @@ export default {
       return !this.userType && item.remainingTime > 0 && (!item.quoted || item.quoted !== 1) && (this.user.logged && ((item.inquiry && item.inquiry.enterprise && this.user.data.enterprise && (item.inquiry.enterprise.uu === this.user.data.enterprise.uu)) || (!this.user.data.enterprise.uu && item.userUU === this.user.data.userUU && !item.inquiry.enterprise)))
     },
     canSayPrice: function (item) {
-      return !item.newId && (!(this.userType === 'saler' && this.seekType && this.seekType !== 'wait') && (item.remainingTime > 0 && (!item.quoted || item.quoted !== 1) && !(this.user.logged && ((item.inquiry && item.inquiry.enterprise && this.user.data.enterprise && (item.inquiry.enterprise.uu === this.user.data.enterprise.uu)) || (!this.user.data.enterprise.uu && item.userUU === this.user.data.userUU)))))
+      return !item.newId && (!(this.userType === 'saler' && this.activeType && this.activeType !== 'todo') && (item.remainingTime > 0 && (!item.quoted || item.quoted !== 1) && !(this.user.logged && ((item.inquiry && item.inquiry.enterprise && this.user.data.enterprise && (item.inquiry.enterprise.uu === this.user.data.enterprise.uu)) || (!this.user.data.enterprise.uu && item.userUU === this.user.data.userUU)))))
     },
     canSeeInfo: function (item) {
-      return ((!this.userType || this.userType === 'buyer') && (this.seekType && this.seekType !== 'wait')) || (this.userType === 'saler' && this.seekType && this.seekType !== 'wait') || item.quoted === 1 || item.newId
+      return ((!this.userType || this.userType === 'buyer') && (this.activeType && this.activeType !== 'wait')) || (this.userType === 'saler' && this.activeType && this.activeType !== 'todo') || item.quoted === 1 || item.newId
     }
   }
 }

+ 66 - 17
components/mobile/center/Seek.vue

@@ -1,5 +1,6 @@
 <template>
-  <div class="seek">
+  <!--  -->
+  <!--<div class="seek">
     <div class="com-mobile-header mobile-center-header">
       <a @click="goLastPage"><i class="iconfont icon-fanhui"></i></a>
       <p>{{seekTitle}}</p>
@@ -25,6 +26,39 @@
       <seek-list :keyword="remindKeyword" :isSearch="isSearch" :userType="userType" :seekType="seekType" :purchaseManList="purchaseManListData"></seek-list>
       <pull-up :fixId="'mobileFixContent'" :searchMore="fetching" :allPage="allPage" :page="page" @pullUpAction="onPullUpAction"></pull-up>
     </div>
+  </div>-->
+  <div class="seek">
+    <div class="com-mobile-header mobile-center-header">
+      <a @click="goLastPage"><i class="iconfont icon-fanhui"></i></a>
+      <p>{{seekTitle}}</p>
+      <p class="en-name"><img :src="`/images/mobile/center/${user.data.enterprise.uu ? 'en' : 'self'}.png`" alt="">{{currentEnName}}</p>
+    </div>
+    <div class="mobile-fix-content mobile-centerfix-content" id="mobileFixContent">
+      <div class="seek-title com-switch-item" v-if="userType == 'saler' && seekType == 'enterprise'">
+        <span class="mobile-switch-btn" :class="{'active': activeType=='todo'}" @click="switchActiveType('todo')"><b>待报价</b></span>
+        <span class="mobile-switch-btn" :class="{'active': activeType=='done'}" @click="switchActiveType('done')"><b>已报价</b></span>
+      </div>
+      <div class="seek-title com-switch-item" v-if="userType == 'saler' && seekType == 'personage'">
+        <span class="mobile-switch-btn" :class="{'active': activeType=='todo'}" @click="switchActiveType('todo')"><b>待报价</b></span>
+        <span class="mobile-switch-btn" :class="{'active': activeType=='done'}" @click="switchActiveType('done')"><b>已报价</b></span>
+      </div>
+      <div class="seek-title com-switch-item" v-if="userType == 'saler' && seekType == 'enquiry'">
+        <span class="mobile-switch-btn fours" :class="{'active': activeType=='todo'}" @click="switchActiveType('todo')"><b>待报价</b></span>
+        <span class="mobile-switch-btn fours" :class="{'active': activeType=='done'}" @click="switchActiveType('done')"><b>已报价</b></span>
+        <span class="mobile-switch-btn fours" :class="{'active': activeType=='agreed'}" @click="switchActiveType('agreed')"><b>已采纳</b></span>
+        <span class="mobile-switch-btn fours" :class="{'active': activeType=='invalid'}" @click="switchActiveType('invalid')"><b>已失效</b></span>
+      </div>
+      <div class="product-switch-item" v-if="userType == 'buyer' && seekType !== 'done'">
+        <span :class="overdue==='attention'?'mobile-switch-btn active':'mobile-switch-btn'" @click="ChangeTab('attention')">未截止</span>
+        <span :class="overdue==='isattention'?'mobile-switch-btn active':'mobile-switch-btn'" @click="ChangeTab('isattention')">已截止</span>
+      </div>
+      <div class="search-content">
+        <input type="text" v-model="seekKeyword" :placeholder="userType == 'buyer' ? '品牌/型号' : '品牌/物料名称/型号/规格/公司'" @keyup.13="onSearch">
+        <span @click="onSearch"><i class="iconfont icon-sousuo"></i></span>
+      </div>
+      <seek-list :keyword="remindKeyword" :isSearch="isSearch" :userType="userType" :seekType="seekType" :activeType="activeType" :purchaseManList="purchaseManListData"></seek-list>
+      <pull-up :fixId="'mobileFixContent'" :searchMore="fetching" :allPage="allPage" :page="page" @pullUpAction="onPullUpAction"></pull-up>
+    </div>
   </div>
 </template>
 <script>
@@ -42,7 +76,7 @@
         isChange: false,
         isSearch: false,
         remindKeyword: '',
-        activeType: 'all',
+        activeType: 'todo',
         overdue: 'attention'
       }
     },
@@ -56,7 +90,7 @@
       'purchase.data': {
         handler: function (val) {
           let list = this.baseUtils.deepCopy(val.content || [])
-          if (this.seekType === 'done' && this.userType === 'saler') {
+          if (this.activeType === 'done' && this.userType === 'saler') {
             list.map(val => {
               val.quotation = {
                 replies: val.replies,
@@ -90,16 +124,16 @@
         return Math.floor(this.purchase.data.totalElements / this.purchase.data.size) + Math.floor(this.purchase.data.totalElements % this.purchase.data.size > 0 ? 1 : 0)
       },
       seekTitle () {
-        if (this.seekType === 'wait') {
-          if (this.userType === 'saler') {
-            return '商机管理'
-          } else {
-            return '待报价'
-          }
-        } else if (this.seekType === 'done') {
-          return '已报价'
+        let title = ''
+        switch (this.seekType) {
+          case 'todo': title = '待报价'; break
+          case 'done': title = '已报价'; break
+          case 'personage': title = '我的商机'; break
+          case 'enterprise': title = '公司商机'; break
+          case 'enquiry': title = '定向询价'; break
+          default: title = '已报价'
         }
-        return '已报价'
+        return title
       }
     },
     mounted () {
@@ -141,9 +175,9 @@
       },
       myActiveType: function () {
         if (this.$store.state.option.messageType) {
-          this.activeType = 'self'
+          this.activeType = 'done'
         } else {
-          this.activeType = 'all'
+          this.activeType = 'todo'
         }
       }
     }
@@ -192,9 +226,24 @@
      /* height: $seekTitleLine;
       line-height: $seekTitleLine;*/
       font-size: .28rem;
-      /*&.active {
-        border-bottom-width: .07rem;
-      }*/
+      &.active {
+        b{
+          border-bottom: .04rem solid #3f84f6;
+        }
+        border-bottom:none;
+      }
+      width:50%;
+      b{
+        display:inline-block;
+         font-weight: normal;
+        line-height: .64rem;
+       }
+      &:first-child{
+        margin:0;
+      }
+      &.fours{
+        width:25%;
+      }
     }
   }
 </style>

+ 8 - 4
components/store/home/StoreBanner.vue

@@ -22,9 +22,7 @@
         <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.storeName" :title="storeInfo.storeName">{{storeInfo.storeName | nameFilter}}</p>
-          <p class="shop-name" v-else></p>
+          <input type="text" readonly class="form-control shop-name" :value="storeInfo.storeName">
           <div class="enter-store">
             <a v-if="isFocus === 'false'" @click="focusStore(storeInfo, $event)">关注店铺</a>
             <a v-else class="focus" @click="focusStore(storeInfo, $event)">已关注</a>
@@ -395,10 +393,16 @@ export default {
     position: relative;
     background: #fff;
     .shop-name{
+      display:block;
       height: 40px;
       line-height: 40px;
+      margin: 0 auto;
       margin-top: -105px;
-      width: 100%;
+      text-align: center;
+      width: 95%;
+      border: none;
+      background: none;
+      box-shadow: none;
     }
     .enter-store {
       width: 100%;

+ 2 - 0
nuxt.config.js

@@ -209,6 +209,8 @@ module.exports = {
     '/adminToDo/**': baseUrl,
     // 账户中心获取申请绑定列表接口
     '/api/userspace/apply/**': ssoUrl,
+    // B2B服务接口 uasUrl
+    '/sale/inquiry/**': uasUrl,
     '/sale/orders/**': uasUrl,
     '/token**': uasUrl
   }

+ 10 - 6
pages/mobile/center/vendor/index.vue

@@ -29,13 +29,17 @@
       <div class="block-wrap seek-operation">
         <p><i></i>商机管理</p>
         <ul>
-          <nuxt-link to="/mobile/center/vendor/seek?seekType=wait" tag="li">
+          <nuxt-link to="/mobile/center/vendor/seek?seekType=enterprise" tag="li">
             <img src="/images/mobile/center/vendor/all.png" alt="">
             <p>公司商机</p>
           </nuxt-link>
-          <nuxt-link to="/mobile/center/vendor/seek?seekType=done" tag="li">
+          <nuxt-link to="/mobile/center/vendor/seek?seekType=personage" tag="li">
             <img src="/images/mobile/center/vendor/seek-done.png" alt="">
-            <p>已报价</p>
+            <p>我的商机</p>
+          </nuxt-link>
+          <nuxt-link to="/mobile/center/vendor/seek?seekType=enquiry" tag="li">
+            <img src="/images/mobile/center/vendor/seek-enquiry.png" alt="">
+            <p>定向询价</p>
           </nuxt-link>
           <nuxt-link to="/mobile/center/vendor/attentionBus" tag="li">
             <img src="/images/mobile/center/vendor/attention-bu.png" alt="">
@@ -46,7 +50,7 @@
       <div class="block-wrap seek-operation">
         <p><i></i>更多服务</p>
         <ul>
-          <nuxt-link tag="li" to="/mobile/order?type=saler">
+          <nuxt-link tag="li" to="/mobile/order/orderbtob">
             <img src="/images/mobile/center/user/order.jpg" alt="">
             <p>销售订单</p>
           </nuxt-link>
@@ -85,9 +89,9 @@
       }
     },
     fetch ({ store }) {
-       let user = store.state.option.user.data
+      // let user = store.state.option.user.data
       return Promise.all([
-        store.dispatch('loadStoreStatus', { op: 'check' }),
+        store.dispatch('loadStoreStatus', { op: 'check' })
         // store.dispatch('messageShow/loadMessageCount', {receiverUu: user.userUU, receiverEnuu: user.enterprise.uu, consumerApp: 'MALL', isRead: 0})
       ])
     },

+ 78 - 41
pages/mobile/center/vendor/seek.vue

@@ -6,35 +6,38 @@
   export default {
     layout: 'mobileNoHeader',
     middleware: 'authenticated',
-    data () {
-      return {
-        activeType: 'all'
-      }
-    },
     fetch ({ store, query }) {
       let user = store.state.option.user.data
-      let params = {
-        pageNumber: 1,
-        pageSize: 10
-      }
-      if (query.seekType === 'wait') {
+      let params = {}
+      if (query.seekType === 'enterprise') {
         params.enuu = user.enterprise.uu
         params.useruu = user.userUU
         params.enableOffer = 1
         return Promise.all([
-          store.dispatch('applyPurchase/loadVendorEnPushList', params)
+          store.dispatch(`applyPurchase/loadVendorEnPushList`, params)
+        ])
+      } else if (query.seekType === 'personage') {
+        params.enuu = user.enterprise.uu
+        params.useruu = user.userUU
+        params.enableOffer = 1
+        return Promise.all([
+          store.dispatch(`applyPurchase/loadVendorPushList`, params)
         ])
       } else {
-        params._state = 'done'
-        params.filter = {
-          vendUU: user.enterprise.uu,
-          fromDate: null,
-          endDate: null,
-          keyword: null
+        params.page = 1
+        params.count = 10
+        params._state = 'todo'
+        params.searchFilter = {
+          'fromDate': null,
+          'endDate': null
+        }
+        params.sorting = {
+          'inquiry.date': 'desc',
+          'inquiry.enterprise.enName': 'asc',
+          'inquiry.code': 'asc'
         }
-        params.overdue = 1
         return Promise.all([
-          store.dispatch('applyPurchase/loadVendorPurchaseManList', params)
+          store.dispatch(`applyPurchase/loadVendorEnquiryList`, params)
         ])
       }
     },
@@ -42,34 +45,68 @@
       Seek
     },
     methods: {
-      reloadData: function (page = 1, count = 10, keyword, seekType, activeType = 'all') {
+      reloadData: function (page = 1, count = 10, keyword, seekType, activeType = 'done') {
         let store = this.$store
         let user = store.state.option.user.data
-        let params = {
-          pageNumber: page,
-          pageSize: count
-        }
-        if (seekType === 'wait') {
-          params.enuu = user.enterprise.uu
-          params.useruu = user.userUU
-          params.keyword = keyword
-          params.enableOffer = 1
+        let params = {}
+        if (seekType === 'enquiry' && !keyword) {
+          params.page = page
+          params.count = count
+          params._state = activeType
+          params.searchFilter = {
+              'fromDate': null,
+              'endDate': null
+            }
+          params.sorting = {
+            'inquiry.date': 'desc',
+            'inquiry.enterprise.enName': 'asc',
+            'inquiry.code': 'asc'
+          }
           return Promise.all([
-            store.dispatch(`applyPurchase/${activeType === 'all' ? 'loadVendorEnPushList' : 'loadVendorPushList'}`, params)
+            store.dispatch(`applyPurchase/loadVendorEnquiryList`, params)
           ])
+        } else if (seekType === 'enquiry' && keyword) {
+            params.page = page
+            params.count = count
+            params._state = activeType
+            params.searchFilter = {
+              'keyword': keyword,
+              'fromDate': null,
+              'endDate': null
+            }
+            params.sorting = {
+              'inquiry.date': 'desc',
+              'inquiry.enterprise.enName': 'asc',
+              'inquiry.code': 'asc'
+            }
+            return Promise.all([
+              store.dispatch(`applyPurchase/loadVendorEnquirySearchList`, params)
+            ])
         } else {
-          params._state = 'done'
-          params.filter = {
-            userUU: activeType === 'self' ? user.userUU : null,
-            vendUU: user.enterprise.uu,
-            fromDate: null,
-            endDate: null,
-            keyword: keyword
+          params.pageNumber = page
+          params.pageSize = count
+          if (activeType !== 'done') {
+            params.enuu = user.enterprise.uu
+            params.useruu = user.userUU
+            params.keyword = keyword
+            params.enableOffer = 1
+            return Promise.all([
+              store.dispatch(`applyPurchase/${seekType === 'enterprise' ? 'loadVendorEnPushList' : 'loadVendorPushList'}`, params)
+            ])
+          } else {
+            params._state = 'done'
+            params.filter = {
+              userUU: seekType === 'personage' ? user.userUU : null,
+              vendUU: user.enterprise.uu,
+              fromDate: null,
+              endDate: null,
+              keyword: keyword
+            }
+            params.overdue = 1
+            return Promise.all([
+              store.dispatch('applyPurchase/loadVendorPurchaseManList', params)
+            ])
           }
-          params.overdue = 1
-          return Promise.all([
-            store.dispatch('applyPurchase/loadVendorPurchaseManList', params)
-          ])
         }
       }
     }

BIN
static/images/mobile/center/vendor/seek-enquiry.png


+ 29 - 0
store/applyPurchase.js

@@ -113,6 +113,7 @@ export const actions = {
         commit('purchaseManList/GET_PURCHASEMAN_FAILURE', err)
       })
   },
+  // 已报价数据接口
   loadVendorPurchaseManList ({ commit }, params = {}) {
     commit('purchaseManList/REQUEST_PURCHASEMAN')
     return axios.get('/inquiry/public/quotation/list', {params})
@@ -142,6 +143,34 @@ export const actions = {
           commit('purchaseManList/GET_PURCHASEMAN_FAILURE', err)
         })
     },
+  // B2b客户采购询价接口
+  loadVendorEnquiryList ({ commit }, params = {}) {
+    commit('purchaseManList/REQUEST_PURCHASEMAN')
+    return axios.get('/sale/inquiry/info/nosearch', {params})
+      .then(response => {
+        commit('purchaseManList/GET_PURCHASEMAN_SUCCESS', response.data)
+      }, err => {
+        commit('purchaseManList/GET_PURCHASEMAN_FAILURE', err)
+      })
+  },
+  // B2b客户采购询价搜索接口接口
+  loadVendorEnquirySearchList ({ commit }, params = {}) {
+    commit('purchaseManList/REQUEST_PURCHASEMAN')
+    return axios.get('/sale/inquiry/info/search', {params})
+      .then(response => {
+        let obj = {}
+        obj.first = response.data.first
+        obj.last = response.data.last
+        obj.number = response.data.page
+        obj.numberOfElements = response.data.totalPage
+        obj.size = response.data.size
+        obj.totalElements = response.data.totalElement
+        obj.content = JSON.parse(JSON.stringify(response.data.content))
+        commit('purchaseManList/GET_PURCHASEMAN_SUCCESS', obj)
+      }, err => {
+        commit('purchaseManList/GET_PURCHASEMAN_FAILURE', err)
+      })
+  },
   // 求购排行榜
   loadPurchaseApplyRank ({ commit }, params = {}) {
     commit('purchaseApplyRank/REQUEST_PURCHASERANK', params)