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

对接报价限制次数的配置接口

wuguojie 1 год назад
Родитель
Сommit
45a91dda08

+ 9 - 2
src/http/api.js

@@ -57,11 +57,15 @@ import * as bindUser from './moudules/bindUser.js'
 //读取pdf设置
 import * as readPdf from './moudules/readPdf.js'
 
-//协议组 
+//协议组
 import * as agreement from "./moudules/agreement.js"
 import * as contract from "./moudules/contract.js"
 //客户车辆相关信息
 import * as custInfo from './moudules/custInfo.js'
+
+//报价
+import * as quote from './moudules/quote'
+
 // 默认全部导出
 export default {
     login,
@@ -107,5 +111,8 @@ export default {
     readPdf,
     agreement,
     contract,
-    custInfo
+    custInfo,
+
+    quote
+
 }

+ 25 - 0
src/http/moudules/quote.js

@@ -0,0 +1,25 @@
+import axios from '../axios'
+
+export const getCompany  = () => {
+  return axios({
+    url: '/esmInsCompany/liveCompanyList',
+    method: 'get'
+  })
+}
+
+export const getAgentUser = (data) => {
+  return axios({
+    url: '/user/queryPage',
+    method: 'post',
+    data
+  })
+}
+
+export const setQuoteInfo = (data) => {
+  return axios({
+    url: '/quoteConfig/setQuoteInfo',
+    method: 'post',
+    data
+  })
+}
+

+ 224 - 70
src/views/PeopleManage/Agent/QuoteCountManagement.vue

@@ -2,7 +2,7 @@
   <div class="QuoteCountManagement">
     <el-row style="height: 100%">
       <el-col :span="4" style="height: 100%; overflow-y: auto; background: rgba(244, 246, 248, 1);">
-        <div class="menu-item" :class="{'active': menuIndex === index}" v-for="(item, index) in leftTree" :key="item.id" @click="handleSelect(item, index)">{{ item.label }}</div>
+        <div class="menu-item" :class="{'active': menuIndex === index}" v-for="(item, index) in leftTree" :key="item.id" @click="handleSelect(item, index)">{{ item.namesimple }}</div>
       </el-col>
       <el-col :span="20">
         <el-row :gutter="20" align="middle" style="display: flex; align-items: center; width: 100%; overflow: hidden; margin: 0">
@@ -14,28 +14,28 @@
           </el-col>
         </el-row>
         <el-divider></el-divider>
-        <el-form :model="quoteForm" ref="QuoteForm" :rules="quoteRules" :disabled="quoteFormDisabled" style="padding-left: 30px;" label-width="100px">
+        <el-form :model="quoteForm" ref="QuoteFormRef" :rules="quoteRules" :disabled="quoteFormDisabled" style="padding-left: 30px;" label-width="120px">
           <el-form-item prop="count" label="报价次数限制">
-            <el-switch v-model="quoteForm.count"></el-switch>
+            <el-switch v-model="quoteForm.isEnabled"></el-switch>
             <p class="tips">开启后,代理人的报价次数将受到限制,超出设置的报价次数后将停止代理人的报价功能</p>
           </el-form-item>
           <el-form-item prop="agentLimit" label="代理人限制">
             <div>
-              <el-radio-group v-model="quoteForm.agentLimit">
-                <el-radio :label="3">限制全部代理人</el-radio>
-                <el-radio :label="6">限制部分代理人</el-radio>
+              <el-radio-group v-model="quoteForm.authorize">
+                <el-radio :label="0">限制全部代理人</el-radio>
+                <el-radio :label="1">限制部分代理人</el-radio>
               </el-radio-group>
-              <kt-button v-if="quoteForm.agentLimit === 6" type="text" label="选择代理人" icon="el-icon-plus" style="color: #2D4D89; margin-left: 30px" @click="selectAgent" />
+              <kt-button v-if="quoteForm.authorize" type="text" label="选择代理人" icon="el-icon-plus" style="color: #2D4D89; margin-left: 30px" @click="selectAgent" />
             </div>
             <el-table
-              :data="agentData"
+              :data="selectedList"
             >
-              <el-table-column prop="code" label="部门编码"></el-table-column>
+              <el-table-column prop="deptId" label="部门编码"></el-table-column>
               <el-table-column prop="organization" label="机构名称"></el-table-column>
-              <el-table-column prop="department" label="部门名称"></el-table-column>
-              <el-table-column prop="number" label="工号"></el-table-column>
+              <el-table-column prop="deptName" label="部门名称"></el-table-column>
+              <el-table-column prop="id" label="工号"></el-table-column>
               <el-table-column prop="name" label="姓名"></el-table-column>
-              <el-table-column prop="phone" label="联系电话"></el-table-column>
+              <el-table-column prop="mobile" label="联系电话"></el-table-column>
               <el-table-column label="操作">
                 <template slot-scope="scope">
                   <kt-button :disabled="quoteFormDisabled" type="text" label="删除" style="color: #2D4D89;" />
@@ -48,7 +48,7 @@
               <div>
                 <el-checkbox :label="1">
                   <div style="display: flex; align-items: center">
-                    单日报价,出单比不满<el-input size="small" v-model="quoteForm.limit1" style="width: 100px; margin: 0 20px;">
+                    单日报价,出单比不满<el-input size="small" v-model="quoteForm.orderRatio" style="width: 100px; margin: 0 20px;">
                     <template slot="append">%</template>
                   </el-input>后,锁定代理人报价次数
                   </div>
@@ -58,7 +58,7 @@
                 <el-checkbox :label="2">
                   <div>单日最大报价次数</div>
                   <div style="display: flex; align-items: center">
-                    单日代理人报价满<el-input size="small" v-model="quoteForm.limit2" style="width: 100px; margin: 0 20px;">
+                    单日代理人报价满<el-input size="small" v-model="quoteForm.dayMaxQuoteNum" style="width: 100px; margin: 0 20px;">
                     <template slot="append">次</template>
                   </el-input>后,锁定代理人报价次数
                   </div>
@@ -68,7 +68,7 @@
                 <el-checkbox :label="3">
                   <div>单日单车限制</div>
                   <div style="display: flex; align-items: center">
-                    单日代理人单车最多报价<el-input size="small" v-model="quoteForm.limit3" style="width: 100px; margin: 0 20px;">
+                    单日代理人单车最多报价<el-input size="small" v-model="quoteForm.carMaxQuoteNum" style="width: 100px; margin: 0 20px;">
                     <template slot="append">次</template>
                   </el-input>后,锁定代理人报价次数
                   </div>
@@ -99,21 +99,24 @@
     >
       <el-form ref="CountDetailForm" v-model="countDetailForm" :inline="true" label-width="130px">
         <el-form-item style="width: 30%;" label="代理人">
-          <el-input size="small" v-model="countDetailForm.orderNumber" placeholder="请输入订单号"></el-input>
+          <el-input size="small" v-model="countDetailForm.orderNumber" placeholder="请输入工号、姓名查找" @change="() => {
+            pageNum = 1
+          }"></el-input>
         </el-form-item>
         <el-form-item style="width: 30%;" label="所属机构">
-          <el-select style="width: 100%" size="small" filterable v-model="countDetailForm.organization">
-            <el-option label="机构1" value="1"></el-option>
-            <el-option label="机构2" value="2"></el-option>
-          </el-select>
+          <el-cascader size="small" v-model="countDetailForm.organization" :options="areaOptions" style="width: 100%;"
+                       :props="{ label: 'name', value: 'id', children: 'children', checkStrictly: true, expandTrigger: 'hover' }" clearable
+                       ref="area" @change="() => {
+            pageNum = 1
+          }"></el-cascader>
         </el-form-item>
         <el-form-item style="width: 30%;">
-          <el-button type="primary" size="small" style="margin-left: 150px;">查询</el-button>
-          <el-button size="small">重置</el-button>
+          <el-button type="primary" size="small" @click="initAgentUser" style="margin-left: 150px;">查询</el-button>
+          <el-button size="small" @click="reset">重置</el-button>
         </el-form-item>
       </el-form>
       <div>
-        <el-select class="select-box" size="small" v-model="checkType" placeholder="全选" style="width: 130px; border: none;">
+        <el-select class="select-box" size="small" v-model="checkType" placeholder="全选" style="width: 130px; border: none;" @change="selectTypeChange">
           <el-option label="选中所有数据" value="all"></el-option>
           <el-option label="选中本页数据" value="cur"></el-option>
         </el-select>
@@ -122,28 +125,42 @@
       </div>
       <el-table
         :data="agentDataList"
+        ref="multipleTable"
         row-key="id"
-        style="width: 100%">
+        :reserve-selection="true"
+        style="width: 100%"
+        @selection-change="handleSelectChange"
+      >
         <el-table-column type="selection"></el-table-column>
+        <el-table-column prop="deptId" label="部门编码"></el-table-column>
         <el-table-column prop="organization" label="机构名称"></el-table-column>
-        <el-table-column prop="department" label="部门名称"></el-table-column>
-        <el-table-column prop="number" label="工号"></el-table-column>
+        <el-table-column prop="deptName" label="部门名称"></el-table-column>
+        <el-table-column prop="id" label="工号"></el-table-column>
         <el-table-column prop="name" label="姓名"></el-table-column>
-        <el-table-column prop="phone" label="联系电话"></el-table-column>
+        <el-table-column prop="mobile" label="联系电话"></el-table-column>
       </el-table>
       <div class="pagination-box">
         <el-pagination
+          @current-change="handlePageNumChange"
           background
+          :page-size="5"
+          :current-page="pageNum"
           layout="prev, pager, next"
           :total="total">
         </el-pagination>
       </div>
+      <template slot="footer">
+        <kt-button label="取消" size="small" type="text" @click="agentTableShow = false" />
+        <kt-button label="确认" size="small" type="primary" @click="agentTableShow = false" />
+      </template>
     </el-dialog>
   </div>
 </template>
 
 <script>
 import KtButton from "../../Core/KtButton.vue";
+import {getAgentUser, setQuoteInfo} from "../../../http/moudules/quote";
+import {findTree} from "../../../http/moudules/insCompany";
 
 export default {
   components: {
@@ -151,30 +168,21 @@ export default {
   },
   data() {
     return {
-      leftTree: [
-        {
-          id: 0,
-          label: '保险1'
-        },{
-          id: 1,
-          label: '保险2'
-        },{
-          id: 2,
-          label: '保险3'
-        },{
-          id: 3,
-          label: '保险4'
-        },
-      ],
-      menuIndex: 0,
-      syncShow: false,
+      leftTree: [], // 保险公司list
+      menuIndex: 0, // 保险公司item下标
+      syncShow: false, // 同步设置弹框
       quoteForm: {
-        count: false,
-        agentLimit: '',
+        isEnabled: false,
+        authorize: '',
         quoteLimit: []
-      },
+      }, // 报价form
       quoteRules: {
-        agentLimit: [
+        isEnabled: [
+          {
+            required: true, message: '', trigger: 'change'
+          }
+        ],
+        authorize: [
           {
             required: true, message: '请选择代理人限制', trigger: 'change'
           }
@@ -184,54 +192,200 @@ export default {
             type: 'array',required: true, message: '请选择报价限制', triangle: 'change'
           }
         ]
-      },
-      agentData: [{
-        code: '',
-        organization: '',
-        department: '',
-        number: '',
-        name: '',
-        phone: ''
-      }],
+      }, // 报价form规则
       isCheckedAll: false,
       checkType: '',
       agentTableShow: false,
-      agentDataList: [{
-        id: '1',
-        code: '1',
-        organization: '1',
-        department: '1',
-        number: '1',
-        name: '1',
-        phone: '1'
-      }],
-      selectedList: [],
-      selectedLength: 0,
-      total: 100,
+      agentDataList: [],
+      selectList: [], // 勾选的数据(格式为每页勾选的为一个数组并作为数组元素保存)
+      selectedList: [], // 勾选的数据(格式为平铺后)
+      pageList: [1], // 记录点击了的页码
+      selectedLength: 0, // 选择(包括全选后)的数据数量
+      total: 0,
       countDetailForm: {},
-      quoteFormDisabled: true
+      quoteFormDisabled: true,
+      pageNum: 1,
+      areaOptions: [], // 机构树
     }
   },
   methods: {
+    // 获取保险公司
+    initCompany() {
+      this.$api.quote.getCompany().then(res => {
+        if(res.code == 200) {
+          this.leftTree = res.data
+        } else {
+          this.$message.error(res.msg)
+        }
+      })
+    },
+    // 获取机构
+    initOrganization() {
+      this.$api.dept.findTree().then(res => {
+        this.areaOptions = res.data
+      })
+    },
+    // 获取代理人
+    initAgentUser() {
+      let that = this
+      that.$api.quote.getAgentUser({
+        pageNum: this.pageNum,
+        pageSize: 5,
+        columnFilters: {
+          name: {
+            value: that.countDetailForm.orderNumber?that.countDetailForm.orderNumber: ''
+          },
+          deptId: {
+            value: that.countDetailForm.organization?that.countDetailForm.organization: ''
+          }
+        }
+      }).then(res => {
+        if(res.code == 200) {
+          that.agentDataList = res.data.content
+          that.total = res.data.totalSize
+          that.$nextTick(() => {
+            if(that.checkType === 'all') {
+              that.selectedLength = res.data.totalSize
+              if(that.agentDataList.length>0) {
+                that.agentDataList.forEach(item => {
+                  that.$refs.multipleTable.toggleRowSelection(item)
+                })
+              }
+            } else {
+              let list = [...that.selectedList]
+              if(list&&list.length>0) {
+                list.forEach(item => {
+                  let arrayItem = that.agentDataList.find(sub => sub.id === item.id)
+                  if(arrayItem) {
+                    that.$refs.multipleTable.toggleRowSelection(arrayItem)
+                  }
+                })
+              }
+            }
+          })
+        }
+      })
+    },
+    // 代理人搜索条件重置
+    reset() {
+      this.countDetailForm = {}
+      this.pageNum = 1
+    },
+    // 代理人分页页数变化函数
+    handlePageNumChange(page) {
+      this.pageNum = page
+      this.initAgentUser()
+    },
+    // 代理选择
+    handleSelectChange(rows) {
+      if(this.checkType === 'all') {
+        this.selectedLength = this.total
+        return;
+      }
+      if(rows.length>0) {
+        let list = [...this.selectedList]
+        if(this.selectedList.length>0){
+          list.forEach((item, index) => {
+            this.agentDataList.forEach(sub => {
+              if(sub.id === item.id) {
+                list.splice(index,1)
+              }
+            })
+          })
+          this.selectedList = this.uniqueItems([...list, ...rows])
+          this.selectedLength = this.selectedList.length
+        } else {
+          this.selectedList = [...rows]
+          this.selectedLength = this.selectedList.length
+        }
+      }
+    },
+    // 数组去重
+    uniqueItems(arr) {
+      const unique = [];
+      arr.forEach(item => {
+        const exists = unique.some(el => el.id === item.id);
+        if (!exists) {
+          unique.push(item);
+        }
+      });
+      return unique;
+    },
+    // 保险公司切换
     handleSelect(item, index) {
       this.menuIndex = index
       this.quoteFormDisabled = true
     },
+    // 同步到其他
     handleSync() {
       this.syncShow = true
     },
+    // 编辑
     handleEdit() {
       this.quoteFormDisabled = false
     },
+    // 保存
     handleSave() {
       this.quoteFormDisabled = true
+      this.$refs["QuoteFormRef"].validate((valid) => {
+        if(valid) {
+          this.$api.quote.setQuoteInfo({
+            companyId: this.leftTree[this.menuIndex].id,
+            isEnabled: this.quoteForm.isEnabled?1:0,
+            id: null,
+            authorize: this.quoteForm.authorize,
+            proxyList: this.selectedList,
+            orderRatio: this.quoteForm.orderRatio,
+            dayMaxQuoteNum: this.quoteForm.dayMaxQuoteNum,
+            carMaxQuoteNum: this.quoteForm.carMaxQuoteNum
+          }).then(res => {
+            console.log('保存', res)
+          })
+        } else {
+          this.$message.error('请填写或选择必要数据!')
+        }
+      })
     },
+    // 同步到其他确定
     handleSubmit() {
 
     },
+    // 选择代理人
     selectAgent() {
       this.agentTableShow = true
+      this.countDetailForm = {}
+      this.initAgentUser()
+      this.initOrganization()
+    },
+    // 全选类型切换
+    selectTypeChange() {
+      if(this.agentDataList.length>0) {
+        this.agentDataList.forEach(item => {
+          this.$refs.multipleTable.toggleRowSelection(item)
+        })
+      }
+      if(this.checkType === 'all') {
+        this.selectedLength = this.total
+      }
+      if(this.checkType === 'cur') {
+        this.selectedLength = 0
+        let list = [...this.selectedList, ...this.agentDataList]
+        this.selectedList = this.uniqueItems(list)
+        this.selectedLength = this.selectedList.length
+      }
+    },
+    // 监听浏览器刷新
+    handleBeforeUnload(event) {
+      event.preventDefault();
+      event.returnValue = '';
     }
+  },
+  mounted() {
+    this.initCompany();
+    // window.addEventListener('beforeunload', this.handleBeforeUnload);
+  },
+  beforeDestroy() {
+    // window.removeEventListener('beforeunload', this.handleBeforeUnload)
   }
 }
 </script>

+ 24 - 5
src/views/PeopleManage/Agent/QuoteManagement.vue

@@ -1,14 +1,16 @@
 <template>
   <div class="quoteManagement">
     <el-form ref="QuoteForm" :model="quoteForm" :inline="true" label-width="130px">
-      <el-form-item style="width: 20%" label="代理人信息">
+      <el-form-item style="width: 20%" label="代理人信息" prop="people">
         <el-input v-model="quoteForm.people" size="small" placeholder="请输入姓名和手机号查找"></el-input>
       </el-form-item>
-      <el-form-item style="width: 20%" label="工号">
+      <el-form-item style="width: 20%" label="工号" prop="number">
         <el-input v-model="quoteForm.number" size="small" placeholder="请输入工号查找"></el-input>
       </el-form-item>
-      <el-form-item style="width: 20%" label="保险公司">
-        <el-select v-model="quoteForm.company" filterable size="small"></el-select>
+      <el-form-item style="width: 20%" label="保险公司" prop="company">
+        <el-select v-model="quoteForm.company" filterable size="small">
+          <el-option v-for="(item, index) in quoteCompany" :key="item.id" :label="item.namesimple" :value="item.id"></el-option>
+        </el-select>
       </el-form-item>
       <el-form-item style="width: 20%">
         <el-button size="small">重置</el-button>
@@ -121,16 +123,33 @@ export default {
       dialogVisible: false,
       addForm: {
 
-      }
+      },
+
+      quoteCompany:[], // 保险公司list
+
     }
   },
+  created() {
+    this.initCompany();
+  },
   methods: {
+    // 获取保险公司
+    initCompany() {
+      this.$api.quote.getCompany().then(res => {
+        if(res.code == 200) {
+          this.quoteCompany = res.data
+        }
+      })
+    },
     addCount(index, row) {
       this.dialogVisible = true
     },
     handleSizeChange() {
 
     }
+  },
+  mounted() {
+
   }
 }
 </script>