Просмотр исходного кода

feature(*): 1、招标信息新增产品线、状态字段,部分字段的名称调整
2、在招投处可以创建项目及创建经销商
3、合同中增加产品线的查询方式,项目中增加所在省的查询方式

lk 2 лет назад
Родитель
Сommit
7278460577

+ 7 - 2
src/components/select/SelectCustomerBid.vue

@@ -114,15 +114,20 @@
             prop: 'productName',
           },
           {
-            label: '发布招标日期',
+            label: '发布日期',
             width: '150px',
             prop: 'publishedTime',
           },
           {
-            label: '项目预算',
+            label: '预算',
             width: 'auto',
             prop: 'budget',
           },
+          {
+            label: '产品线',
+            width: '150px',
+            prop: 'ProductLine',
+          },
           {
             label: '招标信息标题',
             width: '200px',

+ 8 - 0
src/views/contract/index.vue

@@ -35,6 +35,11 @@
               <el-option v-for="(v, k) in approStatusOption" :key="k" :label="v" :value="k" />
             </el-select>
           </el-form-item>
+          <el-form-item prop="productLine">
+            <el-select v-model="queryForm.productLine" clearable placeholder="产品线" style="width: 100%">
+              <el-option v-for="item in lines" :key="item.key" :label="item.value" :value="item.key" />
+            </el-select>
+          </el-form-item>
           <el-form-item prop="inchargeName">
             <el-input
               v-model="queryForm.inchargeName"
@@ -248,6 +253,7 @@
           custName: '', // 客户名称  ()
           nboName: '', //项目名称
           approStatus: '', //审批状态
+          productLine: '', // 产品线
           inchargeName: '', // 负责人(销售工程师)
           custProvinceId: 0,
           custProvince: null,
@@ -261,6 +267,7 @@
         levelOptions: [], //客户级别
         contractOptions: {}, //合同类型
         productLineOptions: {}, //产品线
+        lines: [],
         // 自定义列表
         showColumns: [],
         columns: [
@@ -394,6 +401,7 @@
             productLine.data.values.filter((i) => {
               this.productLineOptions[i.key] = i.value
             })
+            this.lines = productLine.data.values
             this.provinceOptions = province.data.list || []
           })
           .catch((err) => console.log(err))

+ 128 - 94
src/views/customer/components/Bid.vue

@@ -1,101 +1,120 @@
 <template>
-  <!-- 新增招标记录弹窗 -->
-  <el-dialog append-to-body :title="title" :visible.sync="visible" @close="contactClose">
-    <el-form ref="form" :model="form" :rules="rules">
-      <el-row :gutter="20">
-        <el-col :span="12">
-          <el-form-item label="招标产品名称" prop="productName">
-            <el-input v-model="form.productName" placeholder="请输入招标产品名称" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="发布招标日期" prop="publishedTime">
-            <el-date-picker
-              v-model="form.publishedTime"
-              format="yyyy-MM-dd HH:mm"
-              placeholder="请选择发布招标日期"
-              style="width: 100%"
-              type="datetime"
-              value-format="yyyy-MM-dd HH:mm" />
-          </el-form-item>
-        </el-col>
-      </el-row>
-      <el-row :gutter="20">
-        <el-col :span="12">
-          <el-form-item label="预算" prop="budget">
-            <el-input v-model.number="form.budget" clearable placeholder="请输入预算" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="招标信息标题" prop="title">
-            <el-input v-model="form.title" placeholder="请输入招标信息标题" />
-          </el-form-item>
-        </el-col>
-      </el-row>
-      <el-row :gutter="20">
-        <el-col :span="12">
-          <el-form-item label="信息分类" prop="infoType">
-            <el-select v-model="form.infoType" placeholder="请选择信息分类" style="width: 100%">
-              <el-option v-for="item in bidInfoTypeOptions" :key="item.value" :label="item.value" :value="item.key" />
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="中标单位" prop="bidder">
-            <el-input v-model="form.bidder" placeholder="请输入中标单位" />
-          </el-form-item>
-        </el-col>
-      </el-row>
-      <el-row :gutter="20">
-        <el-col :span="12">
-          <el-form-item label="创建时间" prop="biddingTime">
-            <el-date-picker
-              v-model="form.biddingTime"
-              format="yyyy-MM-dd HH:mm"
-              placeholder="请选择创建时间"
-              style="width: 100%"
-              type="datetime"
-              value-format="yyyy-MM-dd HH:mm" />
-          </el-form-item>
-          <!-- <el-input v-model="form.bidder" placeholder="请输入中标单位" /> -->
-        </el-col>
-      </el-row>
-
-      <el-form-item label="备注" prop="remark">
-        <el-input
-          v-model="form.remark"
-          maxlength="500"
-          placeholder="请输入备注"
-          resize="none"
-          :rows="5"
-          show-word-limit
-          type="textarea" />
-      </el-form-item>
-    </el-form>
-    <span slot="footer">
-      <el-button v-show="form.id" type="primary" @click="bidEdit">保存</el-button>
-      <el-button v-show="!form.id" type="primary" @click="bidSave">保存</el-button>
-      <el-button @click="visible = false">取消</el-button>
-    </span>
-  </el-dialog>
+  <div>
+    <!-- 新增招标记录弹窗 -->
+    <el-dialog append-to-body :title="title" :visible.sync="visible" @close="close">
+      <el-form ref="form" :model="form" :rules="rules">
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="招标产品名称" prop="productName">
+              <el-input v-model="form.productName" placeholder="请输入招标产品名称" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="关联客户" prop="cuctName">
+              <el-input
+                v-model="form.cuctName"
+                :disabled="form.id != 0"
+                readonly
+                suffix-icon="el-icon-search"
+                @focus="handleSelectCustomer" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="发布日期" prop="publishedTime">
+              <el-date-picker
+                v-model="form.publishedTime"
+                format="yyyy-MM-dd HH:mm"
+                placeholder="请选择发布日期"
+                style="width: 100%"
+                type="datetime"
+                value-format="yyyy-MM-dd HH:mm" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="预算" prop="budget">
+              <el-input v-model.number="form.budget" clearable placeholder="请输入预算" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="招标信息标题" prop="title">
+              <el-input v-model="form.title" placeholder="请输入招标信息标题" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="信息分类" prop="infoType">
+              <el-select v-model="form.infoType" placeholder="请选择信息分类" style="width: 100%">
+                <el-option v-for="item in bidInfoTypeOptions" :key="item.value" :label="item.value" :value="item.key" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="中标单位" prop="bidder">
+              <el-input v-model="form.bidder" placeholder="请输入中标单位" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="产品线" prop="productLine">
+              <el-select v-model="form.productLine" placeholder="请选择" style="width: 100%">
+                <el-option v-for="item in productLineOptions" :key="item.key" :label="item.value" :value="item.key" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="创建时间" prop="biddingTime">
+              <el-date-picker
+                v-model="form.biddingTime"
+                format="yyyy-MM-dd HH:mm"
+                placeholder="请选择创建时间"
+                style="width: 100%"
+                type="datetime"
+                value-format="yyyy-MM-dd HH:mm" />
+            </el-form-item>
+            <!-- <el-input v-model="form.bidder" placeholder="请输入中标单位" /> -->
+          </el-col>
+        </el-row>
+        <el-form-item label="备注" prop="remark">
+          <el-input
+            v-model="form.remark"
+            maxlength="500"
+            placeholder="请输入备注"
+            resize="none"
+            :rows="5"
+            show-word-limit
+            type="textarea" />
+        </el-form-item>
+      </el-form>
+      <span slot="footer">
+        <el-button v-show="form.id" type="primary" @click="bidEdit">保存</el-button>
+        <el-button v-show="!form.id" type="primary" @click="bidSave">保存</el-button>
+        <el-button @click="visible = false">取消</el-button>
+      </span>
+    </el-dialog>
+    <!-- 选择客户弹窗 -->
+    <select-customer ref="selectCustomer" @save="selectCustomer" />
+  </div>
 </template>
 
 <script>
   import to from 'await-to-js'
   import bidApi from '@/api/customer/bid'
+  import SelectCustomer from '@/components/select/SelectCustomer'
 
   export default {
+    components: { SelectCustomer },
     data() {
       return {
         title: '新增招标记录',
         visible: false,
         bidInfoTypeOptions: [],
+        productLineOptions: [],
         form: {
           id: 0,
           custId: '', // 关联客户
+          cuctName: '', // 客户名称
           productName: '', // 招标产品名称
-          publishedTime: '', // 发布招标日期
-          budget: 0, // 项目预算
+          publishedTime: '', // 发布日期
+          budget: 0, // 预算
+          productLine: '', // 产品线
           title: '', // 招标信息标题
           infoType: '', // 信息分类
           bidder: '', // 中标单位
@@ -103,14 +122,15 @@
           remark: '', // 备注
         },
         rules: {
-          custId: [{ required: true, trigger: 'blur', message: '请输入关联客户' }],
-          productName: [{ required: true, trigger: 'blur', message: '请输入招标产品名称' }],
-          publishedTime: [{ required: true, trigger: 'blur', message: '请输入发布招标日期' }],
-          budget: [{ required: true, trigger: 'blur', message: '请输入项目预算' }],
-          title: [{ required: true, trigger: 'blur', message: '请输入招标信息标题' }],
-          infoType: [{ required: true, trigger: 'blur', message: '请输入信息分类' }],
-          bidder: [{ trigger: 'blur', message: '请输入中标单位' }],
-          biddingTime: [{ required: true, trigger: 'blur', message: '请输入创建日期' }],
+          cuctName: [{ required: true, trigger: ['blur', 'change'], message: '请选择关联客户' }],
+          productName: [{ required: true, trigger: ['blur', 'change'], message: '请输入招标产品名称' }],
+          publishedTime: [{ required: true, trigger: ['blur', 'change'], message: '请输入发布招标日期' }],
+          budget: [{ required: true, trigger: ['blur', 'change'], message: '请输入预算' }],
+          productLine: [{ required: true, trigger: ['blur', 'change'], message: '请选择产品线' }],
+          title: [{ required: true, trigger: ['blur', 'change'], message: '请输入招标信息标题' }],
+          infoType: [{ required: true, trigger: ['blur', 'change'], message: '请输入信息分类' }],
+          bidder: [{ trigger: ['blur', 'change'], message: '请输入中标单位' }],
+          biddingTime: [{ required: true, trigger: ['blur', 'change'], message: '请输入创建日期' }],
         },
       }
     },
@@ -120,6 +140,9 @@
         this.getDicts('bid_info_type').then((response) => {
           this.bidInfoTypeOptions = response.data.values || []
         })
+        this.getDicts('sys_product_line').then((response) => {
+          this.productLineOptions = response.data.values || []
+        })
 
         if (!id) {
           this.title = '新建招标信息'
@@ -128,9 +151,18 @@
         this.title = '编辑招标信息'
         const [err, res] = await to(bidApi.get({ id: id }))
         if (err) return
-        console.log(res)
         this.form = res.data
       },
+      // 选中客户
+      selectCustomer(val) {
+        this.form.custId = val[0].id
+        this.form.cuctName = val.map((item) => item.custName).join()
+      },
+      // 选择客户
+      handleSelectCustomer() {
+        this.$refs.selectCustomer.open()
+      },
+      // 保存
       async bidSave() {
         this.$refs.form.validate(async (valid) => {
           if (valid) {
@@ -165,19 +197,21 @@
           }
         })
       },
-      contactClose() {
+      close() {
         this.form = {
           id: 0,
           custId: '', // 关联客户
+          cuctName: '', // 客户名称
           productName: '', // 招标产品名称
-          publishedTime: '', // 发布招标日期
-          budget: 0, // 项目预算
+          publishedTime: '', // 发布日期
+          budget: 0, // 预算
+          productLine: '', // 产品线
           title: '', // 招标信息标题
           infoType: '', // 信息分类
           bidder: '', // 中标单位
           remark: '', // 备注
         }
-        this.$refs.form.clearValidate()
+        this.$refs['form'].resetFields()
       },
     },
   }

+ 27 - 6
src/views/customer/detail.vue

@@ -232,7 +232,7 @@
                 prop="distributorName"
                 show-overflow-tooltip
                 width="200px" />
-              <el-table-column align="center" label="项目预算" prop="nboBudget" width="120px" />
+              <el-table-column align="center" label="预算" prop="nboBudget" width="120px" />
               <el-table-column align="center" label="项目备案时间" prop="filingTime" width="160px" />
               <!--              <el-table-column align="center" label="项目来源" prop="nboSource" width="160px" />-->
               <!--              <el-table-column align="center" label="销售模式" prop="salesModel" width="160px" />-->
@@ -304,8 +304,18 @@
             <el-table border :data="bidlist" height="calc(100% - 42px)">
               <el-table-column align="center" label="客户名称" prop="cuctName" width="120px" />
               <el-table-column align="center" label="招标产品名称" prop="productName" width="120px" />
-              <el-table-column align="center" label="发布招标日期" prop="publishedTime" width="160px" />
-              <el-table-column align="center" label="项目预算" prop="budget" width="120px" />
+              <el-table-column align="center" label="发布日期" prop="publishedTime" width="160px" />
+              <el-table-column align="center" label="状态" prop="status" width="120px">
+                <template slot-scope="scope">
+                  {{ selectDictLabel(bidStatus, scope.row.status) }}
+                </template>
+              </el-table-column>
+              <el-table-column align="center" label="预算" prop="budget" width="120px" />
+              <el-table-column align="center" label="产品线" prop="ProductLine" width="120px">
+                <template slot-scope="scope">
+                  {{ selectDictLabel(productLineOptions, scope.row.productLine) }}
+                </template>
+              </el-table-column>
               <el-table-column align="center" label="招标信息标题" prop="title" width="120px" />
               <el-table-column align="center" label="信息分类" prop="infoType" width="120px">
                 <template #default="{ row }">
@@ -408,6 +418,7 @@
     <Businessedit ref="businessedit" :cust-info="custInfo" @fetch-data="getBusiness" />
     <!-- 领取客户 -->
     <Pick ref="pick" />
+    <!-- 招标信息 -->
     <Bid ref="bid" @bidSave="bidSave" />
     <InvoiceHeader ref="invoiceHeader" @save="invoiceHeaderSave" />
     <!-- 添加跟进记录 -->
@@ -493,6 +504,8 @@
         levelOptions: [],
         industryOptions: [],
         contractTypeOptions: [],
+        productLineOptions: [],
+        bidStatus: [],
       }
     },
     computed: {
@@ -510,11 +523,19 @@
     },
     methods: {
       getOptions() {
-        Promise.all([this.getDicts('cust_level'), this.getDicts('cust_idy'), this.getDicts('contract_type')])
-          .then(([level, industry, contractType]) => {
+        Promise.all([
+          this.getDicts('cust_level'),
+          this.getDicts('cust_idy'),
+          this.getDicts('contract_type'),
+          this.getDicts('sys_product_line'),
+          this.getDicts('bid_status'),
+        ])
+          .then(([level, industry, contractType, productLine, status]) => {
             this.levelOptions = level.data.values || []
             this.industryOptions = industry.data.values || []
             this.contractTypeOptions = contractType.data.values || []
+            this.productLineOptions = productLine.data.values || []
+            this.bidStatus = status.data.values || []
           })
           .catch((err) => console.log(err))
       },
@@ -648,7 +669,7 @@
           })
           .catch((err) => console.log(err))
       },
-      // 删除联系人
+      // 删除招标信息
       bidDel(row) {
         this.$confirm('确认删除?', '提示', {
           confirmButtonText: '确定',

+ 24 - 7
src/views/customer/inviteTenders/details.vue

@@ -8,26 +8,36 @@
 -->
 <template>
   <div class="detail">
-    <div class="side-layout">
-      <div class="info">
+    <div>
+      <div>
         <div class="title">
           <p>招标</p>
           <h3>
             {{ detail.title }}
-            <el-button @click="handleFollow">添加跟进</el-button>
+            <div>
+              <el-button @click="handleFollow">添加跟进</el-button>
+            </div>
           </h3>
         </div>
         <header>
-          <el-descriptions :colon="false" :column="7" direction="vertical">
+          <el-descriptions :colon="false" :column="5" direction="vertical">
             <el-descriptions-item content-class-name="my-content" label="招标产品名称" label-class-name="my-label">
               {{ detail.productName }}
             </el-descriptions-item>
-            <el-descriptions-item content-class-name="my-content" label="发布招标日期" label-class-name="my-label">
+            <el-descriptions-item content-class-name="my-content" label="发布日期" label-class-name="my-label">
               {{ parseTime(detail.publishedTime, '{y}-{m}-{d}') }}
             </el-descriptions-item>
-            <el-descriptions-item content-class-name="my-content" label="项目预算" label-class-name="my-label">
+            <el-descriptions-item content-class-name="my-content" label="状态" label-class-name="my-label">
+              {{ selectDictLabel(bidStatus, detail.status) }}
+            </el-descriptions-item>
+            <el-descriptions-item content-class-name="my-content" label="预算" label-class-name="my-label">
               {{ detail.budget }}
             </el-descriptions-item>
+            <el-descriptions-item content-class-name="my-content" label="产品线" label-class-name="my-label">
+              {{ selectDictLabel(productLineOptions, detail.productLine) }}
+            </el-descriptions-item>
+          </el-descriptions>
+          <el-descriptions :colon="false" :column="4" direction="vertical">
             <el-descriptions-item content-class-name="my-content" label="客户名称" label-class-name="my-label">
               {{ detail.cuctName }}
             </el-descriptions-item>
@@ -138,6 +148,8 @@
         activeName: 'follow',
         followList: [],
         bidInfoTypeOptions: {},
+        productLineOptions: [],
+        bidStatus: [],
       }
     },
     mounted() {
@@ -156,7 +168,6 @@
           custId: this.detail.custId,
           custName: this.detail.cuctName,
         }
-        console.log(this.followup)
         this.$refs['follow-add'].showEdit(this.followup)
       },
       // 发表评论
@@ -174,6 +185,12 @@
             this.bidInfoTypeOptions[i.key] = i.value
           })
         })
+        this.getDicts('sys_product_line').then((response) => {
+          this.productLineOptions = response.data.values || []
+        })
+        this.getDicts('bid_status').then((response) => {
+          this.bidStatus = response.data.values || []
+        })
       },
       async init() {
         const [err, res] = await to(bidApi.get({ id: parseInt(this.id) }))

+ 100 - 9
src/views/customer/inviteTenders/index.vue

@@ -53,12 +53,20 @@
               </el-form-item>
             </el-form>
           </vab-query-form-top-panel>
-        </vab-query-form>
-        <el-row :span="24">
-          <el-col>
+          <vab-query-form-left-panel :span="12">
+            <el-button icon="el-icon-plus" type="primary" @click="addBid">新建招标记录</el-button>
+            <el-button
+              v-permissions="['base:distributor:add']"
+              icon="el-icon-plus"
+              type="primary"
+              @click="addDistributor">
+              新建经销商
+            </el-button>
+          </vab-query-form-left-panel>
+          <vab-query-form-right-panel :span="12">
             <table-tool :columns="columns" :show-columns.sync="showColumns" table-type="collectionTable" />
-          </el-col>
-        </el-row>
+          </vab-query-form-right-panel>
+        </vab-query-form>
         <el-table
           :key="tableKey"
           ref="table"
@@ -83,9 +91,24 @@
               <span v-else-if="item.prop === 'infoType'">
                 {{ bidInfoTypeOptions[row.infoType] }}
               </span>
+              <span v-else-if="item.prop === 'productLine'">
+                {{ selectDictLabel(productLineOptions, row.productLine) }}
+              </span>
+              <span v-else-if="item.prop === 'status'">
+                {{ selectDictLabel(bidStatus, row.status) }}
+              </span>
               <span v-else>{{ row[item.prop] }}</span>
             </template>
           </el-table-column>
+          <el-table-column align="center" fixed="right" label="操作" width="150px">
+            <template slot-scope="scope">
+              <el-button type="text" @click="bidEdit(scope.row)">编辑</el-button>
+              <el-button type="text" @click="bidDel(scope.row)">删除</el-button>
+              <el-button v-permissions="['proj:business:add']" type="text" @click="addProjBusiness(scope.row)">
+                新增项目
+              </el-button>
+            </template>
+          </el-table-column>
           <template #empty>
             <el-image class="vab-data-empty" :src="require('@/assets/empty_images/data_empty.png')" />
           </template>
@@ -100,6 +123,12 @@
           @size-change="handleSizeChange" />
       </div>
     </div>
+    <!-- 招标信息 -->
+    <Bid ref="bid" @bidSave="fetchData" />
+    <!-- 项目 -->
+    <addBusiness ref="addBusiness" />
+    <!-- 经销商 -->
+    <addDistributor ref="addDistributor" />
   </div>
 </template>
 
@@ -108,10 +137,14 @@
   import regionApi from '@/api/base/region'
   import regionAuthApi from '@/api/base/regionAuth'
   import TableTool from '@/components/table/TableTool'
+  import to from 'await-to-js'
+  import Bid from '../components/Bid'
+  import addBusiness from '@/views/proj/business/components/BusinessAdd'
+  import addDistributor from '@/views/base/distributor/components/DistrEdit'
 
   export default {
     name: 'Distributor',
-    components: { TableTool },
+    components: { TableTool, Bid, addBusiness, addDistributor },
     data() {
       return {
         tableKey: 0,
@@ -143,17 +176,29 @@
             sortable: false,
           },
           {
-            label: '发布招标日期',
+            label: '发布日期',
             width: '160px',
             prop: 'publishedTime',
             sortable: false,
           },
           {
-            label: '项目预算',
+            label: '状态',
+            width: '150px',
+            prop: 'status',
+            sortable: false,
+          },
+          {
+            label: '预算',
             width: '100px',
             prop: 'budget',
             sortable: false,
           },
+          {
+            label: '产品线',
+            width: '150px',
+            prop: 'productLine',
+            sortable: false,
+          },
           {
             label: '客户名称',
             width: 'auto',
@@ -186,7 +231,6 @@
             disableCheck: false,
           },
         ],
-
         regionOptions: [],
         userSalesProvince: undefined,
         defaultProps: {
@@ -196,6 +240,8 @@
         },
         treeDefaultExpandAll: true,
         bidInfoTypeOptions: {},
+        productLineOptions: [],
+        bidStatus: [],
       }
     },
     watch: {
@@ -214,6 +260,45 @@
       this.getUserSalesProvince()
     },
     methods: {
+      // 新建经销商
+      addDistributor() {
+        this.$refs['addDistributor'].showEdit()
+      },
+      // 新增项目
+      addProjBusiness(row) {
+        let bid = JSON.parse(JSON.stringify(row))
+        this.$refs['addBusiness'].showEdit({}, bid)
+      },
+      // 新增
+      addBid() {
+        this.$refs.bid.init()
+      },
+      // 编辑
+      bidEdit(row) {
+        this.$refs.bid.init(row.id)
+      },
+      // 删除招标信息
+      bidDel(row) {
+        this.$confirm('确认删除?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning',
+        })
+          .then(async () => {
+            const [err, res] = await to(bidApi.delete({ id: [row.id] }))
+            if (err) return
+            if (res.code == 200) {
+              this.$message({
+                type: 'success',
+                message: '删除成功!',
+              })
+              this.fetchData()
+            }
+          })
+          .catch((err) => {
+            console.error(err)
+          })
+      },
       getOptions() {
         this.getDicts('bid_info_type').then((response) => {
           this.bidInfoTypeOptions = {}
@@ -221,6 +306,12 @@
             this.bidInfoTypeOptions[i.key] = i.value
           })
         })
+        this.getDicts('sys_product_line').then((response) => {
+          this.productLineOptions = response.data.values || []
+        })
+        this.getDicts('bid_status').then((response) => {
+          this.bidStatus = response.data.values || []
+        })
       },
       async getRegionTree() {
         const { data: data } = await regionApi.getRegionTree({})

+ 22 - 8
src/views/proj/business/components/BusinessAdd.vue

@@ -12,7 +12,7 @@
           <el-form-item label="关联客户" prop="custName">
             <el-input
               v-model="form.custName"
-              :disabled="Boolean(custInfo.custName)"
+              :disabled="Boolean(custInfo.custName) || !canSelectBid"
               readonly
               suffix-icon="el-icon-search"
               @focus="handleSelectCustomer" />
@@ -88,15 +88,20 @@
           </el-form-item>
         </el-col>
         <el-col :span="8">
-          <el-form-item label="是否来自招投标" prop="isBid">
-            <el-switch v-model="isBid" active-text="是" inactive-text="否" style="width: 100%" />
+          <el-form-item label="是否来自历史招标信息" prop="isBid">
+            <el-switch
+              v-model="isBid"
+              active-text="是"
+              :disabled="!canSelectBid"
+              inactive-text="否"
+              style="width: 100%" />
           </el-form-item>
         </el-col>
         <el-col :span="8">
           <el-form-item label="招标信息" prop="bidInfo">
             <el-input
               v-model="form.bidInfo"
-              :disabled="!isBid"
+              :disabled="!isBid || !canSelectBid"
               readonly
               suffix-icon="el-icon-search"
               @focus="handleSelectCustomerBid" />
@@ -274,6 +279,7 @@
         else callback()
       }
       return {
+        canSelectBid: true,
         activeSteps: 1,
         loading: false,
         form: {
@@ -373,7 +379,6 @@
         })
       },
       nextStep() {
-        console.log(typeof this.form.nboBudget)
         if (this.activeSteps === 1) {
           this.$refs['form'].validate(async (valid) => {
             if (valid) {
@@ -481,7 +486,6 @@
         this.productData = this.removeDuplicateObj(this.productData)
       },
       selectCustomerBid(val) {
-        console.log(val)
         if (val && val.length > 0) {
           this.form.bidId = val[0].id
           this.form.bidInfo = val[0].title
@@ -511,10 +515,18 @@
           this.productData = data
         }
       },
-      showEdit(row) {
+      showEdit(row, bid) {
         this.activeSteps = 1
         this.productData = []
-        if (!row) {
+        if (bid) {
+          this.canSelectBid = false
+          this.isBid = true
+          this.selectCustomer([{ id: bid.custId, custName: bid.cuctName }])
+          this.selectCustomerBid([bid])
+        } else {
+          this.canSelectBid = true
+        }
+        if (!row.id) {
           this.title = '添加'
           if (this.roleKeys.includes('SalesEngineer') || this.roleKeys.includes('ProductLineManager')) {
             this.form.saleId = this.userId
@@ -550,6 +562,7 @@
             if (this.form.id) {
               const [err, res] = await to(businessApi.doEdit(this.form))
               if (err) {
+                this.loading = false
                 this.$baseMessage(res.msg, 'error')
               } else {
                 this.$baseMessage(res.msg, 'success')
@@ -557,6 +570,7 @@
             } else {
               const [err, res] = await to(businessApi.doAdd(this.form))
               if (err) {
+                this.loading = false
                 this.$baseMessage(res.msg, 'error')
               } else {
                 this.$baseMessage(res.msg, 'success')

+ 1 - 1
src/views/proj/business/components/BusinessEdit.vue

@@ -88,7 +88,7 @@
           </el-form-item>
         </el-col>
         <el-col :span="8">
-          <el-form-item label="是否来自招标" prop="isBid">
+          <el-form-item label="是否来自历史招标信息" prop="isBid">
             <el-switch v-model="isBid" active-text="是" inactive-text="否" style="width: 100%" />
           </el-form-item>
         </el-col>

+ 14 - 3
src/views/proj/business/index.vue

@@ -55,6 +55,11 @@
               size="small"
               @keyup.enter.native="queryData" />
           </el-form-item>
+          <el-form-item prop="custProvince">
+            <el-select v-model="queryForm.custProvince" clearable placeholder="所在省" value-key="id">
+              <el-option v-for="item in provinceOptions" :key="item.id" :label="item.distName" :value="item" />
+            </el-select>
+          </el-form-item>
           <el-form-item prop="filingTime">
             <el-date-picker
               v-model="queryForm.filingTime"
@@ -66,7 +71,7 @@
           <el-form-item>
             <el-button icon="el-icon-search" type="primary" @click="queryData">查询</el-button>
             <el-button icon="el-icon-refresh" type="primary" @click="resetQuery">重置</el-button>
-            <el-button v-permissions="['proj:business:add']" icon="el-icon-plus" type="primary" @click="handleEdit">
+            <el-button v-permissions="['proj:business:add']" icon="el-icon-plus" type="primary" @click="handleEdit({})">
               新增项目
             </el-button>
             <el-button
@@ -207,6 +212,7 @@
   import Transfer from './components/Transfer'
   import FollowAdd from './components/FollowAdd'
   import TableTool from '@/components/table/TableTool'
+  import customerApi from '@/api/customer'
 
   export default {
     name: 'Business',
@@ -226,6 +232,7 @@
           productLine: undefined,
           nboSource: undefined,
           distributorName: undefined,
+          custProvince: null,
           filingTime: undefined,
           beginTime: undefined,
           endTime: undefined,
@@ -429,6 +436,7 @@
         approStatusOptions: [],
         followup: {},
         finallyColumns: [],
+        provinceOptions: [],
       }
     },
     watch: {
@@ -483,8 +491,9 @@
           // this.getDicts('proj_nbo_phase'),
           // this.getDicts('proj_nbo_status'),
           // this.getDicts('proj_appro_status'),
+          customerApi.getProvinceDetail(),
         ])
-          .then(([nboType, nboSource, salesModel, productLine, yesOrNo]) => {
+          .then(([nboType, nboSource, salesModel, productLine, yesOrNo, province]) => {
             this.nboTypeOptions = nboType.data.values || []
             this.nboSourceOptions = nboSource.data.values || []
             this.salesModelOptions = salesModel.data.values || []
@@ -493,6 +502,7 @@
             // this.nboPhaseOptions = nboPhase.data.values || []
             // this.nboStatusOptions = nboStatus.data.values || []
             // this.approStatusOptions = approStatus.data.values || []
+            this.provinceOptions = province.data.list || []
           })
           .catch((err) => console.log(err))
       },
@@ -543,7 +553,7 @@
         if (row.id) {
           this.$refs['add'].showEdit(row)
         } else {
-          this.$refs['add'].showEdit()
+          this.$refs['add'].showEdit(row)
         }
       },
       handleDelete(row) {
@@ -596,6 +606,7 @@
           this.queryForm.endTime = undefined
         }
         this.listLoading = true
+        this.queryForm.provinceId = this.queryForm.custProvince.id
         const { data } = await businessApi.getList(this.queryForm)
         const { list, total } = data
         this.list = list

+ 1 - 2
src/views/work/order/index.vue

@@ -23,7 +23,7 @@
             <el-select
               v-model="queryForm.productLine"
               clearable
-              placeholder="请选择产品线"
+              placeholder="产品线"
               style="width: 100%"
               @change="changeProductLine">
               <el-option v-for="item in productLineOptions" :key="item.key" :label="item.value" :value="item.key" />
@@ -223,7 +223,6 @@
           .then(([workOrderStatus, productLine]) => {
             this.orderStatusOptions = workOrderStatus.data.values || []
             this.productLineOptions = productLine.data.values || []
-            console.log(' this.productLineOptions is', this.productLineOptions)
           })
           .catch((err) => console.log(err))
       },