Преглед на файлове

处理买家中心增加公共询价和定向询价

wangcz преди 7 години
родител
ревизия
9dee2421e1

+ 1 - 1
components/mobile/MobileHeader.vue

@@ -253,7 +253,7 @@
         } else if (this.startWith(val, '/mobile/center/vendor/invoice')) {
           this.showSearchIcon = false
           title = '开票管理'
-        } else if (this.startWith(val, '/mobile/center/vendor/sample')) {
+        } else if (this.startWith(val, '/mobile/center/vendor/tender')) {
           this.showSearchIcon = false
           title = '打样管理'
         } else if (this.startWith(val, '/mobile/center/vendor/approval')) {

+ 51 - 44
components/mobile/applyPurchase/SeekList.vue

@@ -2,84 +2,77 @@
   <div>
     <ul class="seek-list">
       <li v-for="(item, index) in purchaseManListData" class="clearfix">
-        <p v-if="!(userType === 'buyer') && !(userType !== 'buyer' && item.quotations)">
-          <span v-if="item.inquiry && (item.inquiry.enName || (item.inquiry.enterprise && item.inquiry.enterprise.enName))">{{[item.inquiry.enName || item.inquiry.enterprise.enName, user.logged] | enterpriseFilter}}</span>
+        <p v-if="!(seekType === 'seekPurchase') && !(seekType !== 'seekPurchase' && item.quotations)">
+          <span v-if="seekType === 'purchaseinquiry' && item.enterprise && item.enterprise.enName">{{[item.enName || item.enterprise.enName, user.logged] | enterpriseFilter}}</span>
+          <span v-else-if="seekType !== 'purchaseinquiry' && item.inquiry && (item.inquiry.enName || (item.inquiry.enterprise && item.inquiry.enterprise.enName))">{{[item.inquiry.enName || item.inquiry.enterprise.enName, user.logged] | enterpriseFilter}}</span>
           <span v-else>{{[item.userName, user.logged] | userNameFilter}}</span>
         </p>
         <div class="clearfix" :class="{'no-quot': !item.quotations}">
           <div class="fl">
-            <div class="content" v-if="item.quotations && userType !== 'buyer'">
-              <span v-if="item.inquiry && (item.inquiry.enName || (item.inquiry.enterprise && item.inquiry.enterprise.enName))">{{[item.inquiry.enName || item.inquiry.enterprise.enName, user.logged] | enterpriseFilter}}</span>
+            <div class="content" v-if="item.quotations && seekType !== 'seekPurchase'">
+              <span v-if="seekType === 'purchaseinquiry' && item.enterprise && item.enterprise.enName">{{[item.enName || item.enterprise.enName, user.logged] | enterpriseFilter}}</span>
+              <span v-else-if="seekType !== 'purchaseinquiry' && item.inquiry && (item.inquiry.enName || (item.inquiry.enterprise && item.inquiry.enterprise.enName))">{{[item.inquiry.enName || item.inquiry.enterprise.enName, user.logged] | enterpriseFilter}}</span>
               <span v-else>{{[item.userName, user.logged] | userNameFilter}}</span>
             </div>
-            <template v-if="seekType !== 'enquiry'">
+            <template v-if="seekType === 'enquiry' || seekType === 'purchaseinquiry'">
               <div class="content" >
-                品牌
-                <span>{{item.inbrand ||'-'}}</span>
+                单号
+                <span>{{item.inquiry.code || '-'}}</span>
               </div>
               <div class="content">
-                物料名称
-                <span>{{item.title || item.prodTitle || '-'}}</span>
+                物料编号
+                <span>{{item.product.code || '-'}}</span>
               </div>
               <div class="content">
-                型号
-                <span>{{item.cmpCode || '-'}}</span>
+                物料名称
+                <span>{{item.product.title || '-'}}</span>
               </div>
               <div class="content">
-                规格:
-                <span>{{item.spec || '-'}}</span>
+                物料规格:
+                <span>{{item.product.spec ||'-'}}</span>
               </div>
               <div class="content">
-                采购数量(PCS)
-                <span>{{item.needQty || '-'}}</span>
+                询价时间
+                <span>{{item.inquiry.date | date}}</span>
               </div>
             </template>
-            <template v-if="seekType === 'enquiry'">
+            <template v-else>
               <div class="content" >
-                单号
-                <span>{{item.inquiry.code || '-'}}</span>
+                品牌
+                <span>{{item.inbrand ||'-'}}</span>
               </div>
               <div class="content">
-                物料编号
-                <span>{{item.product.code || '-'}}</span>
+                物料名称
+                <span>{{item.title || item.prodTitle || '-'}}</span>
               </div>
               <div class="content">
-                物料名称
-                <span>{{item.product.title || '-'}}</span>
+                型号
+                <span>{{item.cmpCode || '-'}}</span>
               </div>
               <div class="content">
-                物料规格:
-                <span>{{item.product.spec ||'-'}}</span>
+                规格:
+                <span>{{item.spec || '-'}}</span>
               </div>
               <div class="content">
-                询价时间
-                <span>{{item.inquiry.date | date}}</span>
+                采购数量(PCS)
+                <span>{{item.needQty || '-'}}</span>
               </div>
             </template>
             <div class="content">
               截止日期:
               <span class="date">{{(item.endDate || item.inquiry.endDate) | date}}</span>
             </div>
-            <!--<template v-if="item.quotations">
-              <p class="remain-time" v-if="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><span>已截止</span></p>
-            </template>-->
           </div>
-          <div class="fr" :class="{'no-btn': !isSelfSeek(item) && !canSayPrice(item) && !canSeeInfo(item), 'is-qutation': item.quotations, 'is-simple': userType !== 'buyer' && item.quotations}">
+          <div class="fr" :class="{'no-btn': !isSelfSeek(item) && !canSayPrice(item) && !canSeeInfo(item), 'is-qutation': item.quotations, 'is-simple': seekType !== 'seekPurchase' && item.quotations}">
             <template v-if="item.quotations">
-              <div class="content" v-if="userType === 'buyer'">
+              <div class="content" v-if="seekType !== 'enquiry' && seekType !== 'purchaseinquiry'">
                 <span>{{item.quotations.vendName || '-'}}</span>
               </div>
-              <div class="content" v-if="seekType !== 'enquiry'">
+              <div class="content" v-if="seekType !== 'enquiry' && seekType !== 'purchaseinquiry'">
                 报价人:
                 <span>{{item.quotations.user ? item.quotations.user.userName : '-'}}</span>
               </div>
-              <div class="content" v-if="seekType !== 'enquiry'">
+              <div class="content" v-if="seekType !== 'enquiry' && seekType !== 'purchaseinquiry'">
                 电话:
                 <span>{{item.quotations.user ? item.quotations.user.userTel : '-'}}</span>
               </div>
@@ -112,12 +105,26 @@
                   <span v-if="getDay(item.inquiry.endDate - new Date()) <= 0" v-text="getHours(item.inquiry.endDate - new Date())"></span>
                   <i v-if="getDay(item.inquiry.endDate - new Date()) <= 0">&nbsp;小时</i>
                 </p>
-                <p class="remain-time" v-if="(seekType === 'enquiry') && (item.status === 201 && item.invalid === 0 && item.overdue === 0 && !item.agreed)"><span>已报价</span></p>
-                <p class="remain-time" v-if="(seekType === 'enquiry') && (item.invalid === 1 || item.status === 314 || (item.inquiry.check || item.inquiry.check === 1) || item.overdue === 1)"><span>已失效</span></p>
-                <p class="remain-time" v-if="(seekType === 'enquiry') && (item.agreed === 1 && item.status === 201 && item.invalid === 0 && item.overdue === 0)"><span>已采纳</span></p>
+                <p class="remain-time" v-if="item.status === 201 && item.invalid === 0 && item.overdue === 0 && !item.agreed"><span>已报价</span></p>
+                <p class="remain-time" v-if="item.agreed === 1 && item.status === 201 && item.invalid === 0 && item.overdue === 0"><span>已采纳</span></p>
+                <p class="remain-time" v-if="item.invalid === 1 || item.status === 314 || (item.inquiry.check || item.inquiry.check === 1) || item.overdue === 1"><span>已失效</span></p>
                 <a style="margin-top:-1rem;" v-if="(seekType === 'enquiry') && (item.status===200 && item.invalid!==1 && item.overdue !== 1 && (!item.inquiry.check || item.inquiry.check === 0))" @click="goBtobDetails(item.id)">我要报价</a>
                 <a v-else @click="goBtobDetails(item.id)">查看更多</a>
               </div>
+              <div v-else-if="seekType === 'purchaseinquiry'">
+                <p class="remain-time" v-if="activeType === 'todo' && item.inquiry.endDate - new Date() > 0">剩余&nbsp;:
+                  <span v-if="getDay(item.inquiry.endDate - new Date()) > 0" v-text="getDay(item.inquiry.endDate - new Date())"></span>
+                  <i v-if="getDay(item.inquiry.endDate - new Date()) > 0">&nbsp;天&nbsp;</i>
+                  <span v-if="getDay(item.inquiry.endDate - new Date()) <= 0" v-text="getHours(item.inquiry.endDate - new Date())"></span>
+                  <i v-if="getDay(item.inquiry.endDate - new Date()) <= 0">&nbsp;小时</i>
+                </p>
+                <p class="remain-time" v-if="activeType === 'todo'"><span>待报价</span></p>
+                <p class="remain-time" v-if="activeType === 'done'"><span>已报价</span></p>
+                <p class="remain-time" v-if="activeType === 'agreed'"><span>已采纳</span></p>
+                <p class="remain-time" v-if="activeType === 'end'"><span>已失效</span></p>
+                <!--<a style="margin-top:-1rem;" v-if="(seekType === 'enquiry') && (item.status===200 && item.invalid!==1 && item.overdue !== 1 && (!item.inquiry.check || item.inquiry.check === 0))" @click="goBtobDetails(item.id)">我要报价</a>-->
+                <a @click="goBtobDetails(item.id)">查看更多</a>
+              </div>
               <div v-else>
                 <p class="remain-time" v-if="item.remainingTime > 0">剩余&nbsp;:
                   <span v-if="getDay(item.remainingTime) > 0" v-text="getDay(item.remainingTime)"></span>
@@ -137,7 +144,7 @@
         </div>
       </li>
     </ul>
-    <empty-status v-if="!purchaseManListData || purchaseManListData.length == 0 && !isDataChange" :type="isSearch ? 'search' : 'collect'" :text="isSearch ? `抱歉,暂无与“${keyword}”匹配的求购信息` : '抱歉,暂无求购信息'" :showLink="true"></empty-status>
+    <empty-status v-if="!purchaseManListData || purchaseManListData.length === 0 && !isDataChange" :type="isSearch ? 'search' : 'collect'" :text="isSearch ? `抱歉,暂无与“${keyword}”匹配的求购信息` : '抱歉,暂无求购信息'" :showLink="true"></empty-status>
     <login-box :url="url" @onLoginBoxClose="showLoginBox = false" v-if="showLoginBox"></login-box>
     <say-price :showSayPriceBox="showSayPriceBox" @cancelSayPriceAction="onSayPriceCancel"></say-price>
     <say-price-info v-if="showSayPriceInfoBox" :agreed="agreed" @cancelSayPriceInfoAction="onSayPriceInfoCancel" :userType="userType"></say-price-info>
@@ -230,7 +237,7 @@ export default {
   },
   methods: {
     goBtobDetails (type) {
-      this.$router.push(`/mobile/center/vendor/seek_btob_details?id=${type}&active=${this.activeType}`)
+      this.$router.push(`/mobile/center/${this.seekType === 'enquiry' ? 'vendor' : 'user'}/seek_btob_details?id=${type}&active=${this.activeType}`)
     },
     getDay: function(timeStamp) {
       return Math.floor(timeStamp / (1000 * 60 * 60 * 24))

+ 27 - 56
components/mobile/center/Seek.vue

@@ -1,32 +1,4 @@
 <template>
-  <!--  -->
-  <!--<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 == 'wait'">
-        <span class="mobile-switch-btn" :class="{'active': activeType=='all'}" @click="switchActiveType('all')">公司商机</span>
-        <span class="mobile-switch-btn" :class="{'active': activeType=='self'}" @click="switchActiveType('self')">我的商机</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="seek-title com-switch-item" v-if="userType == 'saler' && seekType == 'done'">
-        <span class="mobile-switch-btn" :class="{'active': activeType=='all'}" @click="switchActiveType('all')">公司报价</span>
-        <span class="mobile-switch-btn" :class="{'active': activeType=='self'}" @click="switchActiveType('self')">我的报价</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" :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>
@@ -34,26 +6,32 @@
       <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 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 == '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 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="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 class="seek-title com-switch-item" v-if="userType === 'buyer' && seekType === 'seekPurchase'">
+        <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="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 class="seek-title com-switch-item" v-if="userType === 'buyer' && seekType === 'purchaseinquiry'">
+        <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==='end'}" @click="switchActiveType('end')"><b>已失效</b></span>
       </div>
       <div class="search-content">
-        <input type="text" v-model="seekKeyword" :placeholder="userType == 'buyer' ? '品牌/型号' : '品牌/物料名称/型号/规格/公司'" @keyup.13="onSearch">
+        <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>
@@ -76,8 +54,7 @@
         isChange: false,
         isSearch: false,
         remindKeyword: '',
-        activeType: 'todo',
-        overdue: 'attention'
+        activeType: 'todo'
       }
     },
     props: ['userType'],
@@ -90,8 +67,7 @@
       'purchase.data': {
         handler: function (val) {
           let list = this.baseUtils.deepCopy(val.content || [])
-          if (this.activeType === 'done' && this.userType === 'saler') {
-            console.log(this.activeType, this.userType)
+          if (this.activeType === 'done' && this.seekType !== 'seekPurchase') {
             list.map(val => {
               val.quotations = {
                 replies: val.replies,
@@ -132,6 +108,8 @@
           case 'personage': title = '我的商机'; break
           case 'enterprise': title = '公司商机'; break
           case 'enquiry': title = '定向询价'; break
+          case 'seekPurchase': title = '公共询价'; break
+          case 'purchaseinquiry': title = '定向询价'; break
           default: title = '已报价'
         }
         return title
@@ -144,13 +122,6 @@
       })
     },
     methods: {
-      ChangeTab(a) {
-        this.overdue = a
-        this.page = 1
-        this.remindKeyword = this.seekKeyword = ''
-        this.isChange = true
-        this.reloadData()
-      },
       onSearch: function () {
         this.isSearch = true
         this.remindKeyword = this.seekKeyword
@@ -159,8 +130,8 @@
         this.reloadData()
       },
       reloadData: function () {
-        let overdue = this.overdue === 'attention' ? '0' : '1'
-        this.$emit('reloadAction', this.page, this.count, this.seekKeyword, this.seekType, this.activeType, overdue)
+        // let overdue = this.overdue === 'attention' ? '0' : '1'
+        this.$emit('reloadAction', this.page, this.count, this.seekKeyword, this.seekType, this.activeType)
       },
       onPullUpAction: function () {
         this.page++

+ 2 - 1
nuxt.config.js

@@ -1,7 +1,7 @@
 const path = require('path')
 const isProdMode = Object.is(process.env.NODE_ENV, 'production')
 // b2c后台
-const baseUrl = process.env.BASE_URL || (isProdMode ? 'http://api.usoftchina.com/' : 'http://192.168.253.121:9090/platform-b2c/')
+const baseUrl = process.env.BASE_URL || (isProdMode ? 'http://api.usoftchina.com/' : 'http://10.1.51.101:8090/')
 // 公共询价
 const commonUrl = process.env.COMMON_URL || (isProdMode ? 'https://api-inquiry.usoftchina.com/' : 'http://218.17.158.219:24000/')
 // 公共物料
@@ -220,6 +220,7 @@ module.exports = {
     '/api/userspace/apply/**': ssoUrl,
     // B2B服务接口 uasUrl
     '/sale/inquiry/**': uasUrl,
+    '/purc/inquiry/**': uasUrl,
     '/sale/orders/**': uasUrl,
     '/sale/apBill/**': uasUrl,
     '/sale/apCheck/**': uasUrl,

+ 14 - 6
pages/mobile/center/user/index.vue

@@ -16,13 +16,13 @@
             <img src="/images/mobile/center/user/pub.png" alt="">
             <p>发布求购</p>
           </nuxt-link>
-          <nuxt-link to="/mobile/center/user/seek?seekType=wait" tag="li">
-            <img src="/images/mobile/center/user/wait.png" alt="">
-            <p>待报价</p>
+          <nuxt-link to="/mobile/center/user/seek?seekType=seekPurchase" tag="li">
+            <img src="/images/mobile/center/vendor/seek-done.png" alt="">
+            <p>公共询价</p>
           </nuxt-link>
-          <nuxt-link to="/mobile/center/user/seek?seekType=done" tag="li">
-            <img src="/images/mobile/center/user/done.png" alt="">
-            <p>已报价</p>
+          <nuxt-link to="/mobile/center/user/seek?seekType=purchaseinquiry" tag="li">
+            <img src="/images/mobile/center/vendor/seek-enquiry.png" alt="">
+            <p>定向询价</p>
           </nuxt-link>
         </ul>
       </div>
@@ -58,6 +58,14 @@
             <img src="/images/mobile/center/vendor/material-person.png" alt="">
             <p>入库</p>
           </nuxt-link>
+          <nuxt-link tag="li" to="/mobile/center/user/outOfStorage?providerType=person">
+            <img src="/images/mobile/center/user/purc.png" alt="">
+            <p>供应商资料</p>
+          </nuxt-link>
+          <nuxt-link tag="li" to="/mobile/center/user/outOfStorage?providerType=person">
+            <img src="/images/mobile/center/user/tender.png" alt="">
+            <p>采购招标</p>
+          </nuxt-link>
           <nuxt-link tag="li" to="/mobile/center/user/collect/message" class="content-line" v-if="user.data.enterprise.uu">
             <img src="/images/mobile/center/user/message.png" alt="">
             <p>消息中心<span class="text" v-if="messageCount.count > 0">{{messageCount.count && messageCount.count >= 99 ? 99 : messageCount.count || 0}}</span></p>

+ 91 - 24
pages/mobile/center/user/seek.vue

@@ -10,29 +10,62 @@
       let user = store.state.option.user.data
       let params = {
         pageNumber: 1,
-        pageSize: 10
+        pageSize: 10,
+        overdue: 0
       }
       if (user.enterprise.uu) {
         params.enUU = user.enterprise.uu
       } else {
         params.userUU = user.userUU
       }
-      if (query.seekType === 'wait') {
+      if (query.seekType === 'seekPurchase') {
         params.state = 'todo'
-        params.overdue = 0
         return Promise.all([
           store.dispatch('applyPurchase/loadBuyerUnSayPricePurchaseManList', params)
         ])
-      } else {
-        params._state = 'done'
-        return Promise.all([
-          store.dispatch('applyPurchase/loadBuyerPurchaseManList', params)
-        ])
       }
     },
     components: {
       Seek
     },
+    created () {
+      if (this.$route.query && this.$route.query.seekType === 'purchaseinquiry') {
+        let params = {}
+        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'
+        }
+        this.$http.get('/purc/inquiry/info/search', {params})
+          .then(response => {
+            let obj = {}
+            if (response.data) {
+              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))
+            }
+            this.$store.commit('applyPurchase/purchaseManList/GET_PURCHASEMAN_SUCCESS', obj)
+          }, err => {
+            this.$store.commit('applyPurchase/purchaseManList/GET_PURCHASEMAN_FAILURE', err)
+          })
+      }
+    },
+    destroyed() {
+      this.$nextTick(() => {
+        this.$store.commit('applyPurchase/purchaseManList/GET_PURCHASEMAN_SUCCESS')
+      })
+    },
     computed: {
       seekType () {
         return this.$route.query.seekType
@@ -40,23 +73,57 @@
     },
     methods: {
       reloadData: function (page = 1, count = 10, keyword, ...otherParamas) {
-        let params = {
-          pageNumber: page,
-          pageSize: count,
-          keyword: keyword,
-          overdue: otherParamas[2] || null
-        }
-        if (this.user.data.enterprise.uu) {
-          params.enUU = this.user.data.enterprise.uu
-        } else {
-          params.userUU = this.user.data.userUU
-        }
-        if (this.seekType === 'done') {
-          params._state = 'done'
-          this.$store.dispatch('applyPurchase/loadBuyerPurchaseManList', params)
+        console.log(...otherParamas)
+        if (otherParamas[0] === 'seekPurchase') {
+          let params = {
+            pageNumber: page,
+            pageSize: count,
+            keyword: keyword
+          }
+          if (this.user.data.enterprise.uu) {
+            params.enUU = this.user.data.enterprise.uu
+          } else {
+            params.userUU = this.user.data.userUU
+          }
+          if (otherParamas[1] === 'done') {
+            params._state = 'done'
+            this.$store.dispatch('applyPurchase/loadBuyerPurchaseManList', params)
+          } else {
+            params.state = 'todo'
+            params.overdue = 0
+            this.$store.dispatch('applyPurchase/loadBuyerUnSayPricePurchaseManList', params)
+          }
         } else {
-          params.state = 'todo'
-          this.$store.dispatch('applyPurchase/loadBuyerUnSayPricePurchaseManList', params)
+          let params = {}
+          params.page = page
+          params.count = count
+          params._state = otherParamas[1]
+          params.searchFilter = {
+            'keyword': keyword,
+            'fromDate': null,
+            'endDate': null
+          }
+          params.sorting = {
+            'inquiry.date': 'desc',
+            'inquiry.enterprise.enName': 'asc',
+            'inquiry.code': 'asc'
+          }
+          this.$http.get('/purc/inquiry/info/search', {params})
+            .then(response => {
+              let obj = {}
+              if (response.data) {
+                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))
+              }
+              this.$store.commit('applyPurchase/purchaseManList/GET_PURCHASEMAN_SUCCESS', obj)
+            }, err => {
+              this.$store.commit('applyPurchase/purchaseManList/GET_PURCHASEMAN_FAILURE', err)
+            })
         }
       }
     }

+ 412 - 0
pages/mobile/center/user/seek_btob_details.vue

@@ -0,0 +1,412 @@
+<template>
+  <div class="orderbtob_details_wrapper">
+    <div class="mobile-header">
+      <a @click="goLastPage"><i class="iconfont icon-fanhui"></i></a>
+      <p v-if="active === 'done'">已报价</p>
+      <p v-if="active === 'end'">已失效</p>
+      <p v-if="active === 'agreed'">已采纳</p>
+      <p v-if="active === 'todo'">我要报价</p>
+    </div>
+    <div class="orderbtob_details_content">
+      <div class="orderbtob_details_top">
+        <div class="item">
+          <span class="name">客户:</span>
+          {{listInfo.inquiry.enterprise && listInfo.inquiry.enterprise.enName}}
+        </div>
+        <div class="item clearfix">
+          <span class="name fl">收货地址:</span>
+          <span class="fl" style="width: 5.2rem">{{listInfo.inquiry.ship}}</span>
+        </div>
+        <div class="item clearfix">
+          <span class="name fl">联系电话:</span>
+          <span class="fl" style="width: 5.2rem">{{listInfo.inquiry.enterprise && listInfo.inquiry.enterprise.enTel}}</span>
+        </div>
+        <div class="item">
+          <span class="name">单据:</span>
+          {{listInfo.inquiry.code}}
+        </div>
+        <div class="item clearfix">
+          <span class="name fl">物料:</span>
+          <span class="fl" style="width: 5.2rem">
+            <p>{{listInfo.product.code}}</p>
+            <p style="margin:5px 0">{{listInfo.product.title}}</p>
+            <p>{{listInfo.product.spec}}</p>
+          </span>
+        </div>
+        <div class="item">
+          <span class="name">币别:</span>
+          {{listInfo.currency}}
+        </div>
+        <div class="item">
+          <span class="name">税率:</span>
+          {{listInfo.taxrate + '%' || '无'}}
+        </div>
+        <div class="item">
+          <span class="name">询价类型:</span>
+          {{listInfo.inquiry.inquirytype || '无'}}
+        </div>
+        <!--<div class="item">-->
+          <!--<span class="name">金额:</span>-->
+          <!--{{listInfo.sum}}-->
+        <!--</div>-->
+      </div>
+      <div class="orderbtob_details_middle">
+        <div class="list">
+          <template v-if="active === 'todo'">
+            <div class="item clearfix">
+              <span class="name">交货周期:</span>
+              <input type="number" class="dateinput" v-model="listInfo.leadtime" >天
+            </div>
+            <div class="item clearfix">
+              <span class="name">最小起订:</span>
+              <input type="number" class="dateinput" v-model="listInfo.minOrderQty" >PCS
+            </div>
+            <div class="item clearfix">
+              <span class="name">最小包装:</span>
+              <input type="number" class="dateinput" v-model="listInfo.minPackQty">PCS
+            </div>
+          </template>
+          <template v-else>
+            <div class="item clearfix">
+              <span class="name">交货周期:</span>
+              <span>{{listInfo.leadtime || '-'}}天</span>
+            </div>
+            <div class="item clearfix">
+              <span class="name">最小起订:</span>
+              <span>{{listInfo.minOrderQty || '-'}}PCS</span>
+            </div>
+            <div class="item clearfix">
+              <span class="name">最小包装:</span>
+              <span>{{listInfo.minPackQty || '-'}}PCS</span>
+            </div>
+          </template>
+          <div class="item clearfix" style="position: relative">
+            <span class="fl name">分段报价:</span>
+            <ul class="fl table">
+              <li class="li_title clearfix">
+                <div class="fl fisrt">段数</div>
+                <div class="fl">分段数量</div>
+                <div class="fl" >分段单价</div>
+              </li>
+              <li class="li_content clearfix" v-for="(item, index) in listInfo.replies">
+                <div class="fl fisrt">{{index + 1}}</div>
+                <div class="fl" v-if="index === 0">
+                  <input type="number" value="0" disabled readonly />
+                </div>
+                <div class="fl" v-if="index !== 0">
+                  <input type="number" v-model="item.lapQty" />
+                </div>
+                <div class="fl" >
+                  <input type="number" v-model="item.price" :readonly="active !== 'todo'"/>
+                </div>
+              </li>
+              <div class="posixicon"  v-if="active === 'todo'">
+                <i class="iconfont icon-add" @click="addItem()"></i>
+                <i class="iconfont icon-minus" @click="deleteItem()"></i>
+              </div>
+            </ul>
+            <div style="clear:both"></div>
+            <!--<div class="replayBtn" @click="Replay(item)" v-if="active === 'todo'">-->
+              <!--报价-->
+            <!--</div>-->
+          </div>
+        </div>
+      </div>
+    </div>
+    <remind-box :title="collectResult" :timeoutCount="timeoutCount"></remind-box>
+  </div>
+</template>
+
+<script>
+  import { RemindBox } from '~components/mobile/common'
+  export default {
+    name: 'user_seek_btob_details',
+    layout: 'mobileActivity',
+    middleware: 'authenticated',
+    data() {
+      return {
+        active: this.$route.query.active,
+        listInfo: {
+          inquiry: { },
+          replies: [{
+            lapQty: 0,
+            price: ''
+          }],
+          product: {}
+        },
+        token: '',
+        collectResult: '',
+        timeoutCount: 0
+      }
+    },
+    created() {
+      this.getInitInfo()
+      this._getToken()
+    },
+    methods: {
+      addItem() {
+        this.listInfo.replies.push({
+          lapQty: '',
+          price: ''
+        })
+      },
+      deleteItem() {
+        if (this.listInfo.replies.length === 1) {
+          return
+        }
+        this.listInfo.replies.splice(this.listInfo.replies.length - 1, 1)
+      },
+      Replay() {
+        if (this.listInfo.leadtime === '') {
+          this._iniFo('交货周期不能为空')
+          return
+        } else if (this.listInfo.minOrderQty === '') {
+          this._iniFo('最小起订量不能为空')
+          return
+        } else if (this.listInfo.minPackQty === '') {
+          this._iniFo('最小包装不能为空')
+          return
+        }
+        let replies = []
+        // 判断分段数是否合法
+        let valid = true
+        let validLapQty = 0
+        let _listInfo = this.listInfo
+        this.listInfo.replies.forEach(function (r, i) {
+          if ((i > 0 ? r.lapQty : 1) || r.price) {
+            replies.push(r)
+          }
+          // 直接比较是字符串比较,需要先转换再比较  2017年9月7日 15:05:51
+          if (i > 0 && parseInt(r.lapQty) <= parseInt(_listInfo.replies[i - 1].lapQty) || r.lapQty == null) {
+            valid = false
+            validLapQty = r.lapQty
+          }
+        })
+        if (!valid) {
+          if (validLapQty) {
+            this._iniFo('分段' + validLapQty + '小于等于了上一分段数,不能保存!')
+          } else {
+            this._iniFo('分段数量不合法,不能保存!')
+          }
+          return
+        }
+        this.listInfo.replies = replies
+        this.$http.post(`/sale/inquiry/items/${this.$route.query.id}/reply?token=${this.token}`, this.listInfo).then(res => {
+          this._iniFo('报价成功')
+          // this.getInitInfo()
+          let _this = this
+          setTimeout(function () {
+            // _this.$router.push(`/mobile/center/vendor/seek_btob_details?id=${this.$route.query.id}&active=done`)
+            _this.$router.go(-1)
+          }, 500)
+        })
+      },
+      _iniFo(str) {
+        this.collectResult = str
+        this.timeoutCount++
+      },
+      getInitInfo() {
+        this.$http.get(`/sale/inquiry/${this.$route.query.id}/info/mobile`).then(res => {
+          if (!res.data.replies[0].price || res.data.replies[0].price === '') {
+            res.data.replies[0].price = ''
+          }
+          this.listInfo = res.data
+        })
+      },
+      _getToken() {
+        this.$http.get('/token?userType=sale').then(res => {
+          this.token = res.data.token
+        })
+      }
+    },
+    components: {
+      RemindBox
+    },
+    filters: {
+      time: function(time) {
+        if (typeof time === 'number') {
+          if (!time) {
+            return '无'
+          } else {
+            let d = new Date(time)
+            let year = d.getFullYear()
+            let month = d.getMonth() + 1 < 10 ? '0' + (d.getMonth() + 1) : '' + (d.getMonth() + 1)
+            let day = d.getDate() < 10 ? '0' + d.getDate() : '' + d.getDate()
+            return year + '-' + month + '-' + day
+          }
+        }
+      }
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  .orderbtob_details_wrapper {
+    background: #f5f5f5;
+    position: absolute;
+    height: 100%;
+    width: 100%;
+    overflow-y: scroll;
+    .mobile-header{
+      position: fixed;
+      top: 0;
+      z-index: 10;
+      width:100%;
+      height:.88rem;
+      line-height: .88rem;
+      /*border-bottom:.01rem solid #ccc;*/
+      background: #3e82f5;
+      padding:0 .2rem 0 .1rem;
+      color:#fff;
+    }
+    .mobile-header p{
+      overflow: hidden;
+      text-overflow: ellipsis;
+      white-space: nowrap;
+      font-size:.36rem;
+      text-align: center;
+      margin: 0;
+      width: 6rem;
+      padding-left: 1rem;
+    }
+    .mobile-header a{
+      font-size:.28rem;
+      color:#fff;
+      position: absolute;
+    }
+    .mobile-header a i{
+      font-size: .48rem;
+      margin-right: -.1rem;
+    }
+    .orderbtob_details_content {
+      margin-top: 0.9rem;
+      padding: 0.2rem;
+      .orderbtob_details_top {
+        background: #3f84f6;
+        border-radius: 0.07rem;
+        border: solid 0.01rem #e3e5e8;
+        padding: 0.24rem 0.2rem 0.14rem;
+        .item {
+          color: #fff;
+          font-size: 0.28rem;
+          margin-bottom: 0.1rem;
+        }
+      }
+      .orderbtob_details_middle {
+        margin-top: 0.2rem;
+        .list {
+          border: solid 1px #e3e5e8;
+          border-radius: 0.07rem;
+          overflow: hidden;
+          color: #333;
+          font-size: 0.28rem;
+          padding: 0.24rem 0.2rem;
+          margin-bottom: 0.2rem;
+          background: #fff;
+          .item {
+            margin-bottom: 0.1rem;
+            line-height: 0.5rem;
+          }
+          .ovrflow {
+            width: 5.2rem;
+            line-height: 0.5rem
+          }
+          .name {
+            color: #666;
+            width: 1.6rem;
+            display: inline-block;
+          }
+          .dateinput {
+            width: 3.49rem;
+            height: .5rem;
+            line-height: .5rem;
+            border: 1px solid #aeaeae;
+            font-size: .26rem;
+            vertical-align: middle;
+            background: #fff;
+            border-radius: 0;
+            margin-right: 0.05rem;
+          }
+        }
+        .replayBtn {
+          width: 6.59rem;
+          height: 0.77rem;
+          background-color: #3f84f6;
+          border-radius: 0.08rem;
+          font-size: 0.28rem;
+          line-height: 0.77rem;
+          color: #ffffff;
+          overflow: hidden;
+          text-align: center;
+          margin-top: 0.2rem
+        }
+        .table {
+          width: 4.52rem;
+          background-color: #f3f3f3;
+          color: #333333;
+          font-size: 0.28rem;
+          .li_title {
+            border: 1px solid #c5c5c5;
+            div {
+              width: 1.87rem;
+              text-align: center;
+              border-right: 1px solid #c5c5c5;
+              &:last-child {
+                border-right: 0
+              }
+            }
+            .fisrt {
+              width: 0.74rem;
+            }
+          }
+          .li_content {
+            border: 1px solid #c5c5c5;
+            background: #fff;
+            border-top: 0px;
+            div {
+              width: 1.87rem;
+              text-align: center;
+              border-right: 1px solid #c5c5c5;
+              &:last-child {
+                border-right: 0
+              }
+              input {
+                text-align: center;
+                width: 100%;
+                height: 0.49rem;
+                border: 0;
+              }
+            }
+            .fisrt {
+              width: 0.74rem;
+            }
+          }
+        }
+      }
+      .bottom {
+        font-size: 0.2rem;
+        color: #999;
+        border-top: 1px solid #aeaeae;
+        padding-top: 0.1rem;
+      }
+      .noborder{
+        border: 0
+      }
+    }
+    .icon-add {
+      color: #00d300;
+      font-size: 0.4rem
+    }
+    .icon-minus {
+      color: #cacaca;
+      font-size: 0.4rem;
+      display: block;
+    }
+    .posixicon {
+      position: absolute;
+      right: 0.3rem;
+      width: 0.4rem;
+      top: 0;
+    }
+  }
+</style>

+ 547 - 0
pages/mobile/center/user/tender/index.vue

@@ -0,0 +1,547 @@
+<template>
+  <div class="order-wrapper">
+    <div class="order-nav">
+      <div :class="activeType === 'all' ? 'active': ''" @click="ChangeList('all')"><span>全部</span></div>
+      <div :class="activeType === 'done' ? 'active': ''" @click="ChangeList('done')"><span>已送样</span></div>
+      <div :class="activeType === 'todo' ? 'active' : ''" @click="ChangeList('todo')"><span>待送样</span></div>
+      <div :class="activeType === 'invalid' ? 'active' : ''" @click="ChangeList('invalid')"><span>已作废</span></div>
+    </div>
+    <div class="search-content search-content2">
+      <input type="text" placeholder="单据编号/客户名称/物料名称" v-model="filterParams.keyword" @keyup.13="searchOrderlist">
+      <span @click="searchOrderlist">
+          <i class="iconfont icon-sousuo"></i>
+      </span>
+    </div>
+    <div class="filters-wrap">
+      <base-filter
+        v-for="filterOption in filterOptions"
+        :key="filterOption.selectOption"
+        :selectItems="filterOption.selectItems"
+        :defaultVal="filterOption.defaultVal"
+        :selectOption="filterOption.selectOption"
+        @selectAction="onSelectAction"
+        @valueAction="onValueAction"
+        :title="filterOption.title">
+      </base-filter>
+    </div>
+    <ul class="order-list-wrap" id="b2border-wrapper" v-show="orderList.length > 0">
+      <li v-for="item in orderList" @click="lookItem(item)">
+        <div class="list-title">
+          <span v-if="!isUnread(item.id)" style="color:#15B262;margin-right:.5rem;">已读</span>
+          <span v-if="isUnread(item.id)" style="color:#DE4545;margin-right:.5rem;">未读</span>
+          <span>{{item.date | time}}</span>
+          <span class="leave-active" v-if="item.status === 400 && !(item.qty > (item.sendQty || 0))">已送样</span>
+          <span class="leave-active" v-if="item.status === 400 && item.qty > (item.sendQty || 0)">部分送样</span>
+          <span class="over-active" v-if="item.status === 315">已作废</span>
+        </div>
+        <div class="list-content">
+          <div class="item">
+            {{item.proofing.enterprise.enName}}
+          </div>
+          <div class="item">
+            <span>流水号:</span>
+            <label v-html="item.proofing.code" style="color: #3F84F6;font-weight: 500"></label>
+          </div>
+        </div>
+        <div class="list-content">
+          <div class="item">
+            <span>物料编码:</span>
+            <label v-html="item.proofing.product.code || '-'" style="color: #333;font-weight: 500"></label>
+          </div>
+          <div class="item">
+            <span>物料名称:</span>
+            <label v-html="item.proofing.product.title || '-'" style="color: #333;font-weight: 500"></label>
+          </div>
+          <div class="item">
+            <span>物料规格:</span>
+            <label v-html="item.proofing.product.spec || '-'" style="color: #333;font-weight: 500"></label>
+          </div>
+          <div class="item">
+            <span>环保要求:</span>
+            <label v-html="item.proofing.envrequiry" style="color: #333;font-weight: 500"></label>
+          </div>
+          <div class="item">
+            <span>数量:</span>
+            <label v-html="item.qty" style="color: #333;font-weight: 500"></label>
+            <label v-html="item.proofing.product.unit" style="color: #333;font-weight: 500"></label>
+          </div>
+          <div class="item">
+            <span>是否收费:</span>
+            <!--<label v-html="item.code" style="color: #333;font-weight: 500"></label>-->
+          </div>
+          <div class="item">
+            <span>单价:</span>
+            <label v-html="item.proofing.isCharge === '是' ? '是' : '否'" style="color: #333;font-weight: 500"></label>
+          </div>
+          <div class="item">
+            <span>需求日期:</span>
+            <label style="color: #333;font-weight: 500">{{item.proofing.delivery | timeDay}}</label>
+            <a v-if="item.status === 400" style="margin-left:1rem;color:#15B262;" @click="dropClick(item, $event)">送样信息<i class="fa fa-fw fa-angle-down"></i></a>
+          </div>
+          <template  v-if="item.isDrop">
+            <div v-for="(send, key) in item.sends" style="padding: .2rem;">
+              <div class="item">
+                <span>序号:</span>
+                <label style="color: #333;font-weight: 500">{{key + 1}}</label>
+              </div>
+              <div class="item">
+                <span>送样时间:</span>
+                <label style="color: #333;font-weight: 500">{{send.date | time}}</label>
+              </div>
+              <div class="item">
+                <span>送样人:</span>
+                <label style="color: #333;font-weight: 500">{{send.recorder}}</label>
+              </div>
+              <div class="item">
+                <span>送样单号:</span>
+                <label style="color: #333;font-weight: 500">{{send.code}}</label>
+              </div>
+              <div class="item">
+                <span>送样数量:</span>
+                <label style="color: #333;font-weight: 500">{{send.sendQty}}</label>
+              </div>
+              <div class="item">
+                <span>采购单价:</span>
+                <label style="color: #333;font-weight: 500">{{send.puprice | toFixedNum}}</label>
+              </div>
+              <div class="item">
+                <span>最小包装量:</span>
+                <label style="color: #333;font-weight: 500">{{send.minQty}}</label>
+              </div>
+              <div class="item">
+                <span>最小订购量:</span>
+                <label style="color: #333;font-weight: 500">{{send.minBuyQty}}</label>
+              </div>
+            </div>
+          </template>
+        </div>
+        <!--<div class="list-bottom">-->
+          <!--<span><i class="fa fa-paper-plane fa-lg fa-fw"></i>送样</span>-->
+        <!--</div>-->
+      </li>
+    </ul>
+    <div v-if="orderList.length === 0" class="com-none-state">
+      <img src="/images/mobile/@2x/search-empty.png">
+      <p>抱歉,暂无订单消息</p>
+      <nuxt-link to="/">返回首页</nuxt-link>
+    </div>
+    <pull-up :fixId="'b2border-wrapper'"
+             :allPage="allPage"
+             :page="page"
+             :FixedEl="true"
+             @pullUpAction="getMoreSearch"></pull-up>
+    <modal-wrapper :showModal="showModal" :title="'客户打样申请详情'" @closeAction="showModal = false">
+      <div class="btob_invoice_modal">
+        <div class="btob_invoice_modal_title">
+          <span>单据信息</span>
+          <span class="block" v-if="modalObj.status === 401">待送样</span>
+          <span class="block" v-if="modalObj.status === 400 && !(modalObj.qty > (modalObj.sendQty || 0))">已送样</span>
+          <span class="block" v-if="modalObj.status === 400 && modalObj.qty > (modalObj.sendQty || 0)">部分送样</span>
+          <span class="block" v-if="modalObj.status === 315">已作废</span>
+        </div>
+        <div class="btob_invoice_modal_content">
+          <div><span>单据编号:</span>{{modalObj.proofing && modalObj.proofing.code}}</div>
+          <div><span>日期:</span>{{modalObj.proofing && modalObj.proofing.date | time}}</div>
+          <div><span>客户:</span>{{modalObj.proofing && modalObj.proofing.enterprise.enName}}</div>
+          <div><span>需求数:</span>{{modalObj.qty}}</div>
+          <div><span>交货日期:</span>{{modalObj.proofing && modalObj.proofing.delivery | time}}</div>
+          <div><span>送样申请人:</span>{{modalObj.proofing && modalObj.proofing.user.userName}}</div>
+          <div><span>备注:</span>{{modalObj.proofing && modalObj.proofing.remark || '无'}}</div>
+        </div>
+        <div class="btob_invoice_modal_title">
+          <span>物料信息</span>
+        </div>
+        <div class="btob_invoice_modal_content">
+          <div><span>物料名称:</span>{{modalObj.proofing && modalObj.proofing.product.title}}</div>
+          <div><span>物料型号:</span>{{modalObj.proofing && modalObj.proofing.product.code}}</div>
+          <div><span>物料规格:</span>{{modalObj.proofing && modalObj.proofing.product.spec}}</div>
+          <div><span>环保要求:</span>{{modalObj.proofing && modalObj.proofing.envrequiry || '无'}}</div>
+        </div>
+        <div class="btob_invoice_modal_title" v-if="modalObj.status !== 401 && modalObj.sends && modalObj.sends.length > 0">
+          <span>明细清单</span>
+        </div>
+        <div class="btob_invoice_modal_content btob_invoice_modal_content2" v-if="modalObj.status !== 401" v-for="(item, index) in modalObj.sends">
+          <div><span>序号:</span>{{index + 1}}</div>
+          <div><span>单号:</span>{{item.code}}</div>
+          <div><span>送样时间:</span>{{item.date | time}}</div>
+          <div v-if="!isUser"><span>采购单价:</span>{{item.puprice | toFixedNum}} {{item.currency}}</div>
+          <div><span>送样数量:</span>{{item.sendQty || '-'}}</div>
+          <div><span>交货周期:</span>{{item.delivery || '-'}}</div>
+          <div><span>送样人:</span>{{item.recorder || '-'}}</div>
+          <div v-if="item.minQty"><span>最小包装量:</span>{{item.minQty}}</div>
+          <div v-if="item.minBuyQty"><span>最小订购量:</span>{{item.minBuyQty}}</div>
+          <div v-if="item.vendSpec"><span>生产厂型号:</span>{{item.vendSpec}}</div>
+          <div v-if="item.brand"><span>品牌:</span>{{item.brand}}</div>
+          <div v-if="item.weight"><span>单重:</span>{{item.weight}}</div>
+          <div v-if="item.material"><span>材料:</span>{{item.material}}</div>
+          <div v-if="item.materialQuality"><span>材质:</span>{{item.materialQuality}}</div>
+          <div v-if="item.minBuyQty"><span>产地:</span>{{item.minBuyQty}}</div>
+          <div v-if="item.addressMark"><span>产地标识:</span>{{item.addressMark}}</div>
+          <div v-if="item.ratio"><span>口水料比例:</span>{{item.ratio}}</div>
+          <!--<div v-if="item.attachs.length > 0"><span>附件:</span>{{item.attachs}}</div>-->
+        </div>
+      </div>
+    </modal-wrapper>
+  </div>
+</template>
+
+<script>
+  import { RemindBox, PullUp } from '~components/mobile/common'
+  import { ModalWrapper, BaseFilter } from '~components/mobile/base'
+  export default {
+    name: 'sample',
+    layout: 'mobile',
+    middleware: 'authenticated',
+    data() {
+      return {
+        filterOptions: [
+          {
+            title: '交易时间',
+            selectOption: 'date',
+            selectItems: [{
+              key: '30天',
+              val: 1
+            }, {
+              key: '90天',
+              val: 2
+            }, {
+              key: '180天',
+              val: 3
+            }, {
+              key: '自定义',
+              val: 4
+            }],
+            defaultVal: 1
+          }
+        ],
+        filterParams: {
+          keyword: ''
+        },
+        unreadCode: '',
+        activeType: 'all',
+        page: 1,
+        orderList: [],
+        allPage: 0,
+        modalObj: {},
+        showModal: false,
+        isUser: false
+      }
+    },
+    created() {
+      this.getResource()
+      this.getUnreadIds()
+      this.getHasUser()
+    },
+    methods: {
+      lookItem(bill) {
+        this.showModal = true
+        if (this.isUnread(bill.id)) {
+          let lists = []
+          lists[0] = bill.id
+          let _then = this
+          this.$http.post(`/sale/sample/setRead`, lists)
+            .then(() => {
+              _then.getHasUser()
+            })
+        }
+        this.$http.get(`/sale/sample/${bill.id}/send`)
+          .then(res => {
+            this.modalObj = bill
+            this.modalObj.sends = res.data
+          })
+      },
+      isUnread (id) {
+        for (let i in this.unreadCode) {
+          if (id === this.unreadCode[i]) {
+            return true
+          }
+        }
+      },
+      setSelect (type, val, isReload) {
+        if (type === 'date') {
+          if (val) {
+            this.filterParams.fromDate = val.fromDate
+            this.filterParams.toDate = val.toDate
+          } else {
+            this.filterParams.fromDate = null
+            this.filterParams.toDate = null
+          }
+        } else {
+          this.filterParams[type] = val
+        }
+        isReload && this.filterRecord()
+      },
+      initFilterParams () {
+        this.filterParams = {
+          keyword: '',
+          fromDate: '',
+          toDate: ''
+        }
+      },
+      filterRecord () {
+        this.page = 1
+        this.getResource(true)
+      },
+      onSelectAction (selectObj) {
+        this.setSelect(selectObj.key, selectObj.value, true)
+      },
+      onValueAction (selectObj) {
+        this.setSelect(selectObj.key, selectObj.value, false)
+      },
+      getHasUser () {
+        this.$http.get('/account/role/isUser').then(res => {
+          this.isUser = res.data.isUser
+        })
+      },
+      dropClick (item, event) {
+        event.stopPropagation()
+        this.$http.get(`/sale/sample/${item.id}/send`)
+          .then(res => {
+            this.orderList.forEach(value => {
+              if (item.id === value.id) {
+                value.isDrop = !value.isDrop
+                item.sends = res.data
+              }
+            })
+          })
+        console.log(item)
+      },
+      getUnreadIds () {
+        this.$http.get('/sale/tender/getUnreadIds')
+          .then(res => {
+            this.unreadCode = res.data.content
+          })
+      },
+      getResource(Reset) {
+        this.$http.get('/sale/tender/info/search', {params: {
+            _state: this.activeType !== 'all' ? this.activeType : null,
+            count: 10,
+            page: this.page,
+            searchFilter: this.filterParams,
+            sorting: {'proofingDate': 'desc'}
+          }}).then(res => {
+          if (Reset) {
+            this.orderList = []
+          }
+          res.data.content.forEach(value => {
+            value.isDrop = false
+          })
+          this.orderList.push(...res.data.content)
+          this.allPage = Math.floor(res.data.totalElement / 10)
+        })
+      },
+      ChangeList(_tp) {
+        this.activeType = _tp
+        this.getResource(true)
+      },
+      getMoreSearch() {
+        this.page++
+        this.getResource()
+      },
+      searchOrderlist() {
+        this.page = 1
+        this.getResource(true)
+      }
+    },
+    components: {
+      RemindBox, PullUp, ModalWrapper, BaseFilter
+    },
+    filters: {
+      timeDay: function(time) {
+        if (typeof time === 'number') {
+          if (!time) {
+            return '无'
+          } else {
+            let d = new Date(time)
+            let year = d.getFullYear()
+            let month = d.getMonth() + 1
+            let day = d.getDate() < 10 ? '0' + d.getDate() : '' + d.getDate()
+            return year + '-' + month + '-' + day
+          }
+        }
+      },
+      toFixedNum: function (num) {
+        return num ? parseFloat(num).toFixed(2) : '-'
+      }
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  @mixin overFlowHidden {
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+  }
+  @mixin lineHeight($value) {
+    height: $value;
+    line-height: $value;
+  }
+
+  .order-wrapper {
+    background: #f1f3f6;
+    margin: 1.26rem 0 0.98rem 0;
+    height: calc(100vh - 1.26rem - 0.98rem);
+    /*padding-bottom: 0.96rem;*/
+    .filters-wrap{
+      background: #fff;
+      margin: 0 auto .13rem;
+      width: 7.1rem;
+      overflow: hidden;
+      padding: .1rem;
+    }
+    .order-tab {
+      background: #3f84f6;
+      padding-bottom: 0.2rem;
+      .order-tab-wrapper {
+        border: solid 1px #ffffff;
+        width: 7.06rem;
+        margin: 0 auto;
+        border-radius: 0.04rem;
+        line-height: 0.72rem;
+        height: 0.72rem;
+        overflow: hidden;
+        div {
+          color: #ffffff;
+          font-size: 0.28rem;
+          text-align: center;
+          width: 50%;
+          &.active {
+            background-color: #ffffff;
+            color: #3f84f6;
+          }
+        }
+      }
+    }
+    .order-nav {
+      background: #fff;
+      div {
+        height: 0.82rem;
+        line-height: 0.82rem;
+        display: inline-block;
+        width: 25%;
+        text-align: center;
+        font-size: .28rem;
+        color: #666;
+        &.active span{
+          color: #3f84f6;
+          border-bottom: 0.04rem solid #3f84f6;
+          padding-bottom: 0.2rem;
+        }
+      }
+    }
+    .search-content2 {
+      text-align: center;
+      padding: .25rem 0 0 0;
+      margin-top: 0 !important;
+      margin-bottom:.25rem;
+      input {
+        width: 7.1rem;
+        border: 1px solid #376ff3;
+      }
+      span {
+        /*height: .46rem;*/
+        /*line-height: .46rem;*/
+      }
+    }
+    .order-list-wrap {
+      height: calc(90vh - 1.26rem - 0.96rem - 0.84rem - 1rem - 0.92rem);
+      overflow-y: scroll;
+      margin-top: 0.2rem;
+      li {
+        background: #fff;
+        width: 7.1rem;
+        margin: 0 auto 0.2rem;
+        border-radius: 0.04rem;
+        border: 1px solid #e4e4e4;
+        padding: 0 0.24rem;
+        .list-title {
+          @include lineHeight(0.91rem);
+          @include overFlowHidden();
+          font-size: 0.28rem;
+          color: #3a3a3a;
+          .over-active{
+            @include lineHeight(.4rem);
+            padding:.05rem;
+            margin:0 .5rem;
+            background: #989A9C;
+            color:#fff;
+            border-radius:.05rem;
+          }
+          .leave-active{
+            @include lineHeight(.4rem);
+            padding:.05rem;
+            margin:0 .5rem;
+            background: #15B262;
+            color:#fff;
+            border-radius:.05rem;
+          }
+        }
+        .list-bottom{
+          @include lineHeight(1rem);
+          text-align: center;
+          font-size: 0.26rem;
+          color: #333;
+        }
+        .list-content {
+          padding-top: 0.23rem;
+          border-top: 1px solid #d3d3d3;
+          .item {
+            font-size: 0.28rem;
+            color: #333;
+            @include overFlowHidden();
+            margin-bottom: 0.15rem;
+            span {
+              color: #666;
+            }
+            &.pric {
+              color: #e6353d;
+            }
+          }
+        }
+      }
+    }
+    .com-none-state{
+      background: #f1f3f6
+    }
+    .btob_invoice_modal {
+      padding: 0 0.24rem;
+      .btob_invoice_modal_title {
+        line-height: 0.72rem;
+        border-top:1px solid #D3D3D3;
+        border-bottom:1px solid #D3D3D3;
+        span {
+          font-size: 0.28rem;
+          color: #3F84F6;
+          border-left: 0.06rem solid #3F84F6;
+          padding-left: 0.15rem;
+          height: 0.18rem;
+          &.block{
+            float:right;
+            border:none;
+          }
+        }
+        &:nth-child(1) {
+          border-top: 0;
+        }
+      }
+      .btob_invoice_modal_content {
+        @include overFlowHidden();
+        padding-top: 0.15rem;
+        font-size: 0.28rem;
+        color: #151515;
+        line-height: 0.5rem;
+        padding-bottom: 0.15rem;
+        span {
+          color: #666666;
+        }
+        &.btob_invoice_modal_content2 {
+          border-bottom:1px solid #D3D3D3;
+          &:nth-last-of-type(1) {
+            border-bottom: 0px
+          }
+        }
+      }
+    }
+  }
+</style>

+ 1 - 1
pages/mobile/center/vendor/approval/index.vue

@@ -202,7 +202,7 @@
         }
         this.filterParams.page = this.page
         this.filterParams.keyword = this.keyword
-        this.$http.get('/sale/sample/approval/info/search', {params: this.filterParams})
+        this.$http.get('/sale/tender/approval/info/search', {params: this.filterParams})
           .then(res => {
             if (Reset) {
               this.orderList = []

+ 1 - 1
pages/mobile/center/vendor/btobapCheck.vue

@@ -231,7 +231,7 @@
         // if (!this.isUnread(id)) { } else {
         //   let sourceId = []
         //   sourceId.push(id)
-        //   this.$http.post('/sale/sample/setRead', sourceId).then(res => {
+        //   this.$http.post('/sale/tender/setRead', sourceId).then(res => {
         //     this.getUnread()
         //   })
         // }

+ 1 - 1
pages/mobile/center/vendor/customer/index.vue

@@ -41,7 +41,7 @@
     </div>
     <div class="mobile-modal" v-if="modalObj.showModal" @click="closeModal()">
       <div class="mobile-modal-box mobile-modal-wrapper" @click="stopPropagation($event)">
-        <div class="mobile-modal-header">客户分配<i @click="closeModal()" class="icon-guanbi iconfont"></i></div>
+        <div class="mobile-modal-header">{{modalObj.type === 'add' ? '客户分配' : '权限转移'}}<i @click="closeModal()" class="icon-guanbi iconfont"></i></div>
         <div ref="mobileModalBox" class="mobile-scroll-wrap">
           <div>
             <div class="customer-modal-wrapper">

+ 2 - 2
pages/mobile/center/vendor/sample/index.vue

@@ -315,13 +315,13 @@
         console.log(item)
       },
       getUnreadIds () {
-        this.$http.get('/sale/sample/getUnreadIds')
+        this.$http.get('/sale/tender/getUnreadIds')
           .then(res => {
             this.unreadCode = res.data.content
           })
       },
       getResource(Reset) {
-        this.$http.get('/sale/sample/info/search', {params: {
+        this.$http.get('/sale/tender/info/search', {params: {
             _state: this.activeType !== 'all' ? this.activeType : null,
             count: 10,
             page: this.page,

BIN
static/images/mobile/center/user/purc.png


BIN
static/images/mobile/center/user/tender.png