Browse Source

Merge remote-tracking branch 'origin/wuguojie' into dev

wuguojie 1 năm trước cách đây
mục cha
commit
160d8eb6ed

+ 16 - 0
src/http/moudules/letter.js

@@ -1520,3 +1520,19 @@ export const yangGuangautoWriteOff = (data) => {
   })
 }
 
+// 站内信
+export const getMessage = (data) => {
+  return axios({
+    url: '/sys/message/get',
+    method: 'post',
+    data
+  })
+}
+
+// 站内信更改为已读状态
+export const updateMessage = (data) => {
+  return axios({
+    url: `/sys/message/update?id=${data}`,
+    method: 'post'
+  })
+}

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

@@ -1,5 +1,6 @@
 import axios from '../axios'
 
+// 获取保险公司
 export const getCompany  = () => {
   return axios({
     url: '/esmInsCompany/liveCompanyList',
@@ -7,6 +8,7 @@ export const getCompany  = () => {
   })
 }
 
+// 获取代理人
 export const getAgentUser = (data) => {
   return axios({
     url: '/user/queryPage',
@@ -15,6 +17,7 @@ export const getAgentUser = (data) => {
   })
 }
 
+// 报价配置
 export const setQuoteInfo = (data) => {
   return axios({
     url: '/quoteConfig/setQuoteInfo',
@@ -23,3 +26,88 @@ export const setQuoteInfo = (data) => {
   })
 }
 
+// 报价明细
+export const getQuoteDetails = (data) => {
+  return axios({
+    url: '/quoteConfig/quoteDetails',
+    method: 'post',
+    data
+  })
+}
+
+// 动作
+export const getQuoteAction = () => {
+  return axios({
+    url: '/quoteConfig/getQuoteAction',
+    method: 'get'
+  })
+}
+
+// 结果
+export const getQuoteResult = () => {
+  return axios({
+    url: '/quoteConfig/getQuoteResult',
+    method: 'get'
+  })
+}
+
+// 获取报价配置详情
+export const getQuoteConfigInfo = (data) => {
+  return axios({
+    url: `/quoteConfig/getQuoteConfigInfo?companyId=${data}`,
+    method: 'get'
+  })
+}
+
+// 报价管理
+export const quoteUserDetails = (data) => {
+  return axios({
+    url: '/quoteConfig/quoteUserDetails',
+    method: 'post',
+    data
+  })
+}
+
+// 报价次数配置
+export const quoteRequestDetail = () => {
+  return axios({
+    url: '/quoteConfig/quoteRequestDetail',
+    method: 'post'
+  })
+}
+
+// 同步配置
+export const syncQuoteInfo = (data) => {
+  return axios({
+    url: '/quoteConfig/syncQuoteInfo',
+    method: 'post',
+    data
+  })
+}
+
+// 增加次数
+export const appendUserConfig = (data) => {
+  return axios({
+    url: '/quoteConfig/appendUserConfig',
+    method: 'post',
+    data
+  })
+}
+
+// 增次明细
+export const getAppendUserQuotePage = (data) => {
+  return axios({
+    url: '/quoteConfig/getAppendUserQuotePage',
+    method: 'post',
+    data
+  })
+}
+
+// 增次明细详情
+export const getAppendUserQuoteInfo = (data) => {
+  return axios({
+    url: '/quoteConfig/getAppendUserQuoteInfo',
+    method: 'post',
+    data
+  })
+}

+ 5 - 0
src/router/index.js

@@ -63,6 +63,11 @@ const router = new Router({
             icon: 'fa fa-home fa-lg',
             index: 3
           }
+        },
+        {
+          path: '/message',
+          name: '站内信',
+          component: () => import('@/views/message/index.vue')
         }
       ]
     },

+ 8 - 4
src/store/modules/user.js

@@ -4,7 +4,8 @@ export default {
     state: {
         perms: [],  // 用户权限标识集合
         token: getToken(),
-        roles:{}
+        roles:{},
+        myTimer: null,
     },
     getters: {
       // roles: state => state.roles
@@ -18,6 +19,9 @@ export default {
           },
         SET_USER: (state, roles) => {
           state.roles = roles
+        },
+        SET_TIMER: (state, myTimer) => {
+          state.myTimer = myTimer
         }
     },
     actions: {
@@ -59,7 +63,7 @@ export default {
               })
             })
           },
-      
-       
+
+
     }
-}
+}

+ 1 - 1
src/views/Core/MessagePanel.vue

@@ -1,5 +1,5 @@
 <template>
-  <el-dialog width="430px" :visible.sync="backupVisible" :modal="false">
+  <el-dialog width="100%" :visible.sync="backupVisible" :modal="false">
     <div slot="title" class="dialog-title">
       <span>消息通知</span>
     </div>

+ 7 - 3
src/views/Core/PersonalPanel.vue

@@ -199,9 +199,12 @@ export default {
     personalInformation(){
       this.backupVisible=true
     },
- //消息通知
-  notify() {
-      this.$refs.messagePanel.setBackupVisible(true)
+    //消息通知
+    notify() {
+      // this.$refs.messagePanel.setBackupVisible(true)
+      this.$router.push({
+        path: '/message'
+      })
     },
     //闪电增员
     recruiting() {
@@ -227,6 +230,7 @@ export default {
         type: "warning"
       })
         .then(() => {
+          this.$emit('handle-clear')
           localStorage.clear()
           closeWebsocket()
           sessionStorage.removeItem("user")

+ 32 - 4
src/views/HeadBar/HeadBar.vue

@@ -44,10 +44,12 @@
         <personal-panel :user="userData"></personal-panel>
         <img  slot="reference" :src="userData.headSculpture?userData.headSculpture:avatar" />
       </el-popover>
-      <div class="personalStyle">
-        <span >{{ userData.roleName }} - {{ userData.name }}</span>
-        <span style="color:rgba(51, 51, 51, 0.80) ">{{ userData.id }}</span>
-      </div>
+      <el-badge :is-dot="isDot">
+        <div class="personalStyle">
+          <span >{{ userData.roleName }} - {{ userData.name }}</span>
+          <span style="color:rgba(51, 51, 51, 0.80) ">{{ userData.id }}</span>
+        </div>
+      </el-badge>
     </span>
   </div>
 </template>
@@ -97,6 +99,7 @@ export default {
   },
   data() {
     return {
+      isDot: false,
       toolbarActive:false,
       sum: null,
       datawidth: 1920,
@@ -187,6 +190,11 @@ export default {
       this.screenWidth = document.body.clientWidth
     }
     this.sysName = "Zgdd Platform";
+
+    this.$store.commit('SET_TIMER', setInterval(() => {
+      this.getMessage()
+    }, 3000))
+
     // var user = sessionStorage.getItem("user")
 
 
@@ -219,6 +227,26 @@ export default {
     // }
   },
   methods: {
+    getMessage() {
+      let that = this
+      that.$api.letter.getMessage({
+        pageNum: 1,
+        pageSize: 10
+      }).then(res => {
+        if(res.code === 200) {
+          if(res.data.list&&res.data.list.length>0) {
+            let list = res.data.list.filter(item => item.state === '0')
+            if(list.length>0) {
+              that.isDot = true
+            } else {
+              that.isDot = false
+            }
+          } else {
+            that.isDot = false
+          }
+        }
+      })
+    },
     show(e){
       this.toolbarActive=true;
     },

+ 3 - 2
src/views/Login.vue

@@ -316,8 +316,8 @@ export default {
                     "token"
                   ).toString();
                   window.location.href =process.env.CONSOLE_KHGX_URL + "?token=" + token;
-    
-                } 
+
+                }
                 else {
                   this.getUser();
                   Cookies.set("token", res.data); // 放置token到Cookie
@@ -501,6 +501,7 @@ export default {
     this.stopPolling();
   },
   mounted() {
+    clearInterval(this.$store.state.user.myTimer)
     this.refreshCaptcha();
     /**获取当前登录的ip地址 */
     getUserIP((ip) => {

+ 104 - 47
src/views/PeopleManage/Agent/AddCountDetail.vue

@@ -1,52 +1,50 @@
 <template>
   <div class="quoteDetail">
     <el-form ref="QuoteDetailForm" v-model="quoteDetailForm" :inline="true" label-width="130px">
-      <el-form-item style="width: 30%;" label="代理人信息">
+<!--      <el-form-item style="width: 30%;" label="代理人信息">
         <el-input size="small" v-model="quoteDetailForm.orderNumber" placeholder="请输入订单号"></el-input>
-      </el-form-item>
+      </el-form-item>-->
       <el-form-item style="width: 30%;" label="保险公司">
-        <el-select style="width: 100%" size="small" v-model="quoteDetailForm.action">
-          <el-option label="动作1" value="1"></el-option>
-          <el-option label="动作2" value="2"></el-option>
+        <el-select style="width: 100%" size="small" filterable v-model="quoteDetailForm.companyId">
+          <el-option :label="item.namesimple" :value="item.id" v-for="(item, index) in leftTree" :key="item.id"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item style="width: 30%;" label="操作时间">
-        <el-date-picker size="small" v-model="quoteDetailForm.rangeDate" type="daterange" range-separator="至"
+        <el-date-picker size="small" v-model="quoteDetailForm.rangeDate" value-format="yyyy-MM-dd" type="daterange" range-separator="至"
           start-placeholder="开始日期" end-placeholder="结束日期">
         </el-date-picker>
       </el-form-item>
+      <el-form-item style="width: 30%;" label="用户信息">
+        <el-input size="small" v-model="quoteDetailForm.agent" placeholder="请输入工号、姓名查找"></el-input>
+      </el-form-item>
       <el-form-item style="width: 30%;" label="操作人信息">
-        <el-input size="small" v-model="quoteDetailForm.agentPeoeple" placeholder="请输入工号、姓名查找"></el-input>
+        <el-input size="small" v-model="quoteDetailForm.createBy" placeholder="请输入工号查找"></el-input>
       </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" style="margin-left: 150px;" @click="search()">查询</el-button>
+        <el-button size="small" @click="reset()">重置</el-button>
       </el-form-item>
     </el-form>
     <el-table :data="tableData">
-      <el-table-column prop="code" label="部门编码" width="150"></el-table-column>
-      <el-table-column prop="organization" label="机构名称" width="150"></el-table-column>
-      <el-table-column prop="department" label="部门名称" width="150"></el-table-column>
-      <el-table-column prop="number" label="工号" width="200">
-        <template slot-scope="scope">
-          <a>{{ scope.row.orderNumber }}</a>
-        </template>
-      </el-table-column>
+      <el-table-column prop="deptId" label="部门编码" width="150"></el-table-column>
+<!--      <el-table-column prop="organization" label="机构名称" width="150"></el-table-column>-->
+      <el-table-column prop="deptName" label="部门名称" width="150"></el-table-column>
+      <el-table-column prop="userId" label="工号" width="200"></el-table-column>
       <el-table-column prop="name" label="姓名" width="150"></el-table-column>
-      <el-table-column prop="phone" label="联系电话" width="150"></el-table-column>
+      <el-table-column prop="mobile" label="联系电话" width="150"></el-table-column>
       <el-table-column prop="company" label="保险公司" width="150"></el-table-column>
-      <el-table-column prop="count" label="增加次数" width="150"></el-table-column>
-      <el-table-column prop="time" label="操作时间" width="150"></el-table-column>
-      <el-table-column prop="people" label="操作人" width="150"></el-table-column>
+      <el-table-column prop="dayMaxQuoteNum" label="增加次数" width="150"></el-table-column>
+      <el-table-column prop="createTime" label="操作时间" width="150"></el-table-column>
+      <el-table-column prop="createBy" label="操作人" width="150"></el-table-column>
       <el-table-column label="操作" fixed="right" width="200">
         <template slot-scope="scope">
-          <kt-button label="详情" @click="dialogVisible = true" size="small" type="text" perms="agreement:input:update"
+          <kt-button label="详情" @click="handleDetail(scope.row)" size="small" type="text" perms="agreement:input:update"
             style="color: #D42426 !important " />
         </template>
       </el-table-column>
     </el-table>
     <div class="flex-box">
-      <el-pagination @size-change="handleSizeChange" :current-page="pageNum" :page-sizes="[10, 20, 30, 40]"
+      <el-pagination @size-change="handleSizeChange" @current-change="handlePageChange" :current-page="pageNum" :page-sizes="[10, 20, 30, 40]"
         :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total">
       </el-pagination>
     </div>
@@ -59,25 +57,24 @@
           <el-input v-model="addCountForm.company"></el-input>
         </el-form-item>
         <el-form-item label="今日已报价" style="width: 80%">
-          <el-input v-model="addCountForm.hadQuote"></el-input>
+          <el-input v-model="addCountForm.numCount"></el-input>
         </el-form-item>
         <el-form-item label="今日已承保" style="width: 80%">
-          <el-input v-model="addCountForm.had"></el-input>
+          <el-input v-model="addCountForm.dayCoverOrder"></el-input>
         </el-form-item>
         <el-form-item label="报价出单比" style="width: 80%">
-          <el-input v-model="addCountForm.assign"></el-input>
+          <el-input v-model="addCountForm.rate"></el-input>
           <span style="font-size: 12px; color: #999;">报价出单比=承保单数/报价单数*100%(四舍五入到小数点后两位)</span>
         </el-form-item>
         <el-form-item label="增加次数" style="width: 80%">
-          <el-input v-model="addCountForm.count"></el-input>
+          <el-input v-model="addCountForm.dayMaxQuoteNum"></el-input>
         </el-form-item>
         <el-form-item label="备注" style="width: 80%">
-          <el-input type="textarea" v-model="addCountForm.tips"></el-input>
+          <el-input type="textarea" v-model="addCountForm.remark"></el-input>
         </el-form-item>
       </el-form>
       <span slot="footer" class="dialog-footer">
-        <el-button @click="dialogVisible = false">取 消</el-button>
-        <el-button type="primary" @click="dialogVisible = false">确 定</el-button>
+        <el-button @click="dialogVisible = false">关 闭</el-button>
       </span>
     </el-dialog>
   </div>
@@ -85,35 +82,95 @@
 
 <script>
 import KtButton from "../../Core/KtButton.vue";
+import {getAppendUserQuoteInfo} from "../../../http/moudules/quote";
 
 export default {
   components: { KtButton },
   data() {
     return {
-      quoteDetailForm: {},
-      tableData: [{
-        code: 1,
-        organization: 1,
-        department: 1,
-        number: 1,
-        name: 1,
-        phone: 1,
-        company: 1,
-        count: 1,
-        time: 1,
-        people: 1
-      }],
+      quoteDetailForm: {}, // 查询条件
+      tableData: [], // 列表数据
       pageNum: 1,
       pageSize: 10,
       total: 0,
-      dialogVisible: false,
-      addCountForm: {}
+      dialogVisible: false, // 详情弹框
+      addCountForm: {}, // 详情form数据
+      leftTree: [] // 保险公司
     }
   },
   methods: {
-    handleSizeChange() {
-
+    // 查询
+    search() {
+      this.pageNum = 1
+      this.initData()
+    },
+    // 获取列表数据
+    initData() {
+      this.$api.quote.getAppendUserQuotePage({
+        companyId: this.quoteDetailForm.companyId,
+        agent: this.quoteDetailForm.agent,
+        createBy: this.quoteDetailForm.createBy,
+        startTime: this.quoteDetailForm.rangeDate&&this.quoteDetailForm.rangeDate.length>0?this.quoteDetailForm.rangeDate[0]:'',
+        endTime: this.quoteDetailForm.rangeDate&&this.quoteDetailForm.rangeDate.length>1?this.quoteDetailForm.rangeDate[1]:'',
+        pageNum: this.pageNum,
+        pageSize: this.pageSize
+      }).then(res => {
+        if(res.code === 200) {
+          this.tableData = res.data.records
+          this.total = res.data.total
+        } else {
+          this.$message.error(res.msg)
+        }
+      })
+    },
+    // 重置
+    reset() {
+      this.pageNum = 1
+      this.quoteDetailForm = {}
+      this.initData();
+    },
+    // 获取保险公司
+    initCompany() {
+      this.$api.quote.getCompany().then(res => {
+        if(res.code == 200) {
+          this.leftTree = res.data
+        } else {
+          this.$message.error(res.msg)
+        }
+      })
+    },
+    // 分页(每页条数变化)
+    handleSizeChange(size) {
+      this.pageSize = size
+      this.initData();
+    },
+    // 分页(页码改变)
+    handlePageChange(page) {
+      this.pageNum = page
+      this.initData();
+    },
+    // 点击详情
+    handleDetail(row) {
+      this.$api.quote.getAppendUserQuoteInfo({
+        id: row.id,
+        companyId: row.companyId,
+        agentId: row.userId
+      }).then(res => {
+        if(res.code === 200) {
+          this.dialogVisible = true
+          console.log(123, res.data)
+          let obj = {...res.data}
+          obj.agent = `${obj.name}-${obj.userId}`
+          this.addCountForm = {...obj}
+        } else {
+          this.$message.warning(res.msg)
+        }
+      })
     }
+  },
+  mounted() {
+    this.initCompany();
+    this.initData();
   }
 }
 </script>

+ 188 - 55
src/views/PeopleManage/Agent/QuoteCountManagement.vue

@@ -8,67 +8,78 @@
         <el-row :gutter="20" align="middle" style="display: flex; align-items: center; width: 100%; overflow: hidden; margin: 0">
           <el-col :span="18" style="padding-left: 20px">报价限制</el-col>
           <el-col :span="6">
-            <el-button type="primary" @click="handleSync" :disabled="!quoteForm.isEnabled">同步配置到其他保司</el-button>
-            <el-button type="primary" @click="handleEdit" :disabled="!quoteForm.isEnabled" v-if="!quoteForm.isEnabled">编辑</el-button>
+            <el-button type="primary" @click="handleSync" :disabled="!isEdit">同步配置到其他保司</el-button>
+            <el-button type="primary" @click="handleEdit" v-if="!isEdit">编辑</el-button>
             <el-button type="primary" @click="handleSave" v-else>保存</el-button>
           </el-col>
         </el-row>
         <el-divider></el-divider>
         <el-form :model="quoteForm" ref="QuoteFormRef" :rules="quoteRules" style="padding-left: 30px;" label-width="120px">
-          <el-form-item prop="count" label="报价次数限制">
-            <el-switch v-model="quoteForm.isEnabled"></el-switch>
+          <el-form-item prop="isEnabled" label="报价次数限制">
+            <el-switch v-model="quoteForm.isEnabled" :disabled="!isEdit"></el-switch>
             <p class="tips">开启后,代理人的报价次数将受到限制,超出设置的报价次数后将停止代理人的报价功能</p>
           </el-form-item>
-          <el-form-item prop="agentLimit" label="代理人限制">
+          <el-form-item prop="authorize" label="代理人限制">
             <div>
-              <el-radio-group v-model="quoteForm.authorize" :disabled="!quoteForm.isEnabled">
+              <el-radio-group v-model="quoteForm.authorize" :disabled="!isEdit">
                 <el-radio :label="0">限制全部代理人</el-radio>
                 <el-radio :label="1">限制部分代理人</el-radio>
               </el-radio-group>
-              <kt-button v-if="quoteForm.authorize" type="text" label="选择代理人" icon="el-icon-plus" style="color: #2D4D89; margin-left: 30px" @click="selectAgent" />
+              <kt-button v-if="quoteForm.authorize" type="text" label="选择代理人" :disabled="!isEdit" icon="el-icon-plus" style="color: #2D4D89; margin-left: 30px" @click="selectAgent" />
             </div>
             <el-table
-              :data="selectedList"
+              :data="selectList"
             >
               <el-table-column prop="deptId" label="部门编码"></el-table-column>
-              <el-table-column prop="organization" label="机构名称"></el-table-column>
+<!--              <el-table-column prop="organization" 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="mobile" label="联系电话"></el-table-column>
               <el-table-column label="操作">
                 <template slot-scope="scope">
-                  <kt-button :disabled="!quoteForm.isEnabled" type="text" label="删除" style="color: #2D4D89;" />
+                  <el-popconfirm
+                    confirm-button-text='确定'
+                    cancel-button-text='取消'
+                    icon="el-icon-info"
+                    icon-color="red"
+                    :ref="`popconfirm-${scope.row.id}`"
+                    title="确定删除吗?"
+                    @confirm="handleDelete(scope.row)"
+                  >
+                    <kt-button slot="reference" :disabled="!isEdit" type="text" label="删除" style="color: #2D4D89;" />
+                  </el-popconfirm>
                 </template>
               </el-table-column>
             </el-table>
           </el-form-item>
           <el-form-item prop="quoteLimit" label="报价限制">
-            <el-checkbox-group v-model="quoteForm.quoteLimit" :disabled="!quoteForm.isEnabled">
+            <el-checkbox-group v-model="quoteForm.quoteLimit" @change="checkChange">
               <div>
-                <el-checkbox :label="1">
+                <el-checkbox label="1" :disabled="!isEdit">
                   <div style="display: flex; align-items: center">
-                    单日报价,出单比不满<el-input size="small" v-model="quoteForm.orderRatio" :disabled="!quoteForm.isEnabled" style="width: 100px; margin: 0 20px;">
+                    单日报价,出单比不满<el-input size="small" maxlength="2" v-model="quoteForm.orderRatio" :disabled="!isEdit" style="width: 150px; margin: 0 20px;">
                     <template slot="append">%</template>
                   </el-input>后,锁定代理人报价次数
                   </div>
                 </el-checkbox>
               </div>
+              <p style="font-size: 12px; color: #999; margin: 0">报价出单比=承保单数/报价单数*100% (四舍五入到小数点后两位)</p>
               <div>
-                <el-checkbox :label="2">
+                <el-checkbox label="2" :disabled="!isEdit">
                   <div>单日最大报价次数</div>
                   <div style="display: flex; align-items: center">
-                    单日代理人报价满<el-input size="small" v-model="quoteForm.dayMaxQuoteNum" :disabled="!quoteForm.isEnabled" style="width: 100px; margin: 0 20px;">
+                    单日代理人报价满<el-input size="small" maxlength="4" v-model="quoteForm.dayMaxQuoteNum" :disabled="!isEdit" style="width: 150px; margin: 0 20px;">
                     <template slot="append">次</template>
                   </el-input>后,锁定代理人报价次数
                   </div>
                 </el-checkbox>
               </div>
               <div>
-                <el-checkbox :label="3">
+                <el-checkbox label="3" :disabled="!isEdit">
                   <div>单日单车限制</div>
                   <div style="display: flex; align-items: center">
-                    单日代理人单车最多报价<el-input size="small" :disabled="!quoteForm.isEnabled" v-model="quoteForm.carMaxQuoteNum" style="width: 100px; margin: 0 20px;">
+                    单日代理人单车最多报价<el-input size="small" maxlength="4" :disabled="!isEdit" v-model="quoteForm.carMaxQuoteNum" style="width: 150px; margin: 0 20px;">
                     <template slot="append">次</template>
                   </el-input>后,锁定代理人报价次数
                   </div>
@@ -129,11 +140,12 @@
         row-key="id"
         :reserve-selection="true"
         style="width: 100%"
-        @selection-change="handleSelectChange"
+        @select-all="handleSelectAll"
+        @select="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="organization" 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>
@@ -150,8 +162,8 @@
         </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" />
+        <kt-button label="取消" size="small" type="text" @click="handleCancel" />
+        <kt-button label="确认" size="small" type="primary" @click="handleOk" />
       </template>
     </el-dialog>
   </div>
@@ -159,7 +171,7 @@
 
 <script>
 import KtButton from "../../Core/KtButton.vue";
-import {getAgentUser, setQuoteInfo} from "../../../http/moudules/quote";
+import {getAgentUser, getQuoteConfigInfo, setQuoteInfo, syncQuoteInfo} from "../../../http/moudules/quote";
 import {findTree} from "../../../http/moudules/insCompany";
 
 export default {
@@ -172,6 +184,7 @@ export default {
       menuIndex: 0, // 保险公司item下标
       syncShow: false, // 同步设置弹框
       quoteForm: {
+        id: '',
         isEnabled: false,
         authorize: '',
         quoteLimit: []
@@ -189,15 +202,16 @@ export default {
         ],
         quoteLimit: [
           {
-            type: 'array',required: true, message: '请选择报价限制', triangle: 'change'
+            type: 'array',required: true, message: '请选择报价限制', trigger: 'change'
           }
         ]
       }, // 报价form规则
-      isCheckedAll: false,
-      checkType: '',
-      agentTableShow: false,
+      isEdit: false, // 是否可编辑
+      checkType: '', // 全选类型
+      agentTableShow: false, // 控制选择代理人弹框
       agentDataList: [],
-      selectList: [], // 勾选的数据(格式为每页勾选的为一个数组并作为数组元素保存)
+      myList: [], // 记录每个保险公司接口返回的已经选好的代理人
+      selectList: [], // 勾选的数据
       selectedList: [], // 勾选的数据(格式为平铺后)
       pageList: [1], // 记录点击了的页码
       selectedLength: 0, // 选择(包括全选后)的数据数量
@@ -208,11 +222,23 @@ export default {
     }
   },
   methods: {
+    checkChange() {
+      if(!this.quoteForm.quoteLimit.includes('1')) {
+        this.$set(this.quoteForm, 'orderRatio', '')
+      }
+      if(!this.quoteForm.quoteLimit.includes('2')) {
+        this.$set(this.quoteForm, 'dayMaxQuoteNum', '')
+      }
+      if(!this.quoteForm.quoteLimit.includes('3')) {
+        this.$set(this.quoteForm, 'carMaxQuoteNum', '')
+      }
+    },
     // 获取保险公司
     initCompany() {
       this.$api.quote.getCompany().then(res => {
         if(res.code == 200) {
           this.leftTree = res.data
+          this.initQuoteDetails(res.data[0].id)
         } else {
           this.$message.error(res.msg)
         }
@@ -235,7 +261,7 @@ export default {
             value: that.countDetailForm.orderNumber?that.countDetailForm.orderNumber: ''
           },
           deptId: {
-            value: that.countDetailForm.organization?that.countDetailForm.organization: ''
+            value: that.countDetailForm.organization?that.countDetailForm.organization[that.countDetailForm.organization.length-1]: ''
           }
         }
       }).then(res => {
@@ -247,7 +273,7 @@ export default {
               that.selectedLength = res.data.totalSize
               if(that.agentDataList.length>0) {
                 that.agentDataList.forEach(item => {
-                  that.$refs.multipleTable.toggleRowSelection(item)
+                  that.$refs.multipleTable.toggleRowSelection(item, true)
                 })
               }
             } else {
@@ -256,7 +282,7 @@ export default {
                 list.forEach(item => {
                   let arrayItem = that.agentDataList.find(sub => sub.id === item.id)
                   if(arrayItem) {
-                    that.$refs.multipleTable.toggleRowSelection(arrayItem)
+                    that.$refs.multipleTable.toggleRowSelection(arrayItem, true)
                   }
                 })
               }
@@ -269,34 +295,72 @@ export default {
     reset() {
       this.countDetailForm = {}
       this.pageNum = 1
+      this.initAgentUser()
     },
     // 代理人分页页数变化函数
     handlePageNumChange(page) {
       this.pageNum = page
+      if(this.checkType === 'cur') {
+        this.checkType = ''
+      }
       this.initAgentUser()
     },
+    // 选择代理人确认
+    handleOk() {
+      if(this.checkType === 'all') {
+        this.quoteForm.authorize = 0
+        this.selectList = []
+      } else {
+        this.selectList = [...this.selectedList]
+      }
+      this.agentTableShow = false
+    },
+    // 选择代理人取消
+    handleCancel() {
+      // this.selectList = [...this.myList]
+      this.selectedList = [...this.selectList]
+      this.selectedLength = this.selectedList.length
+      this.agentTableShow = false
+    },
     // 代理选择
     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
+      let list = [...this.selectedList]
+      if(list.length>0){
+        if(rows.length>0) {
+          let arr = list.filter(item1 => !this.agentDataList.some(item2 => item1.id === item2.id))
+          this.selectedList = this.uniqueItems([...arr, ...rows])
         } else {
+          this.selectedList = this.uniqueItems([...list])
+        }
+        this.selectedLength = this.selectedList.length
+      } else {
+        if(rows.length>0) {
           this.selectedList = [...rows]
+        } else {
+          this.selectedList = []
+        }
+        this.selectedLength = this.selectedList.length
+      }
+    },
+    // 手动点击全选
+    handleSelectAll(rows) {
+      let list = [...this.selectedList]
+      if(rows.length===0) {
+        if(list.length>0){
+          let arr = list.filter(item1 => !this.agentDataList.some(item2 => item1.id === item2.id))
+          this.selectedList = this.uniqueItems([...arr])
           this.selectedLength = this.selectedList.length
+        } else {
+          this.selectedList = [...rows]
         }
+      } else {
+        let arr = [...rows], brr = [...list], crr = brr.concat(arr)
+        this.selectedList = this.uniqueItems([...crr])
+        this.selectedLength = this.selectedList.length
       }
     },
     // 数组去重
@@ -313,7 +377,43 @@ export default {
     // 保险公司切换
     handleSelect(item, index) {
       this.menuIndex = index
-      this.quoteForm = {}
+      this.quoteForm = {
+        id: '',
+        isEnabled: false,
+        authorize: '',
+        quoteLimit: []
+      }
+      this.isEdit = false
+      this.initQuoteDetails(item.id)
+    },
+    // 获取详情
+    initQuoteDetails(id) {
+      this.selectList = []
+      this.selectedList = []
+      this.myList = []
+      this.$api.quote.getQuoteConfigInfo(id).then(res => {
+        if(res.code === 200) {
+          this.quoteForm = {...res.data}
+          this.quoteForm.isEnabled = res.data.isEnabled?true:false
+          let list = []
+          if(res.data.orderRatio){
+            list.push('1')
+          }
+          if(res.data.dayMaxQuoteNum){
+            list.push('2')
+          }
+          if(res.data.carMaxQuoteNum){
+            list.push('3')
+          }
+          this.$set(this.quoteForm, 'quoteLimit', list)
+          this.selectedList = [...res.data.proxyList]
+          this.selectedLength = res.data.proxyList.length
+          this.selectList = [...res.data.proxyList]
+          this.myList = [...res.data.proxyList]
+        } else {
+          this.$message.error(res.msg)
+        }
+      })
     },
     // 同步到其他
     handleSync() {
@@ -321,7 +421,7 @@ export default {
     },
     // 编辑
     handleEdit() {
-
+      this.isEdit = true
     },
     // 保存
     handleSave() {
@@ -330,16 +430,16 @@ export default {
           this.$api.quote.setQuoteInfo({
             companyId: this.leftTree[this.menuIndex].id,
             isEnabled: this.quoteForm.isEnabled?1:0,
-            id: null,
+            id: this.quoteForm.id,
             authorize: this.quoteForm.authorize,
             proxyList: this.selectedList,
             orderRatio: this.quoteForm.orderRatio,
             dayMaxQuoteNum: this.quoteForm.dayMaxQuoteNum,
             carMaxQuoteNum: this.quoteForm.carMaxQuoteNum
           }).then(res => {
-            console.log('保存', res)
             if(res.code == 200) {
               this.$message.success(res.msg)
+              this.initQuoteDetails(this.leftTree[this.menuIndex].id)
               this.quoteForm = {}
             } else {
               this.$message.error(res.msg)
@@ -348,16 +448,36 @@ export default {
         } else {
           this.$message.error('请填写或选择必要数据!')
         }
+        this.isEdit = false
       })
     },
     // 同步到其他确定
     handleSubmit() {
-
+      this.$api.quote.syncQuoteInfo({
+        companyId: this.leftTree[this.menuIndex].id,
+        isEnabled: this.quoteForm.isEnabled?1:0,
+        id: this.quoteForm.id,
+        authorize: this.quoteForm.authorize,
+        proxyList: this.selectedList,
+        orderRatio: this.quoteForm.orderRatio,
+        dayMaxQuoteNum: this.quoteForm.dayMaxQuoteNum,
+        carMaxQuoteNum: this.quoteForm.carMaxQuoteNum
+      }).then(res => {
+        if(res.code === 200) {
+          this.$message.success(res.msg)
+        } else {
+          this.$message.error(res.msg)
+        }
+        this.syncShow = false
+      })
     },
     // 选择代理人
     selectAgent() {
       this.agentTableShow = true
       this.countDetailForm = {}
+      this.pageNum = 1
+      this.checkType = ''
+      this.selectedLength = 0
       this.initAgentUser()
       this.initOrganization()
     },
@@ -365,31 +485,44 @@ export default {
     selectTypeChange() {
       if(this.agentDataList.length>0) {
         this.agentDataList.forEach(item => {
-          this.$refs.multipleTable.toggleRowSelection(item)
+          this.$refs.multipleTable.toggleRowSelection(item, true)
         })
       }
       if(this.checkType === 'all') {
         this.selectedLength = this.total
+        this.selectedList = []
       }
       if(this.checkType === 'cur') {
-        this.selectedLength = 0
-        let list = [...this.selectedList, ...this.agentDataList]
-        this.selectedList = this.uniqueItems(list)
+        let list = [...this.selectedList], arr = [...this.agentDataList]
+        this.selectedList = this.uniqueItems(list.concat(arr))
         this.selectedLength = this.selectedList.length
       }
     },
     // 监听浏览器刷新
     handleBeforeUnload(event) {
-      event.preventDefault();
-      event.returnValue = '';
+      if(this.isEdit) {
+        event.preventDefault();
+        event.returnValue = '';
+      }
+    },
+    // 删除选择的代理人
+    handleDelete(row) {
+      let list = []
+      list = this.selectList.filter((item) => {
+        return item.id != row.id
+      })
+      this.selectList = [...list]
+      this.selectedList = [...list]
+      this.selectedLength = this.selectedList.length
+      this.myList = [...list]
     }
   },
   mounted() {
     this.initCompany();
-    // window.addEventListener('beforeunload', this.handleBeforeUnload);
+    window.addEventListener('beforeunload', this.handleBeforeUnload);
   },
   beforeDestroy() {
-    // window.removeEventListener('beforeunload', this.handleBeforeUnload)
+    window.removeEventListener('beforeunload', this.handleBeforeUnload)
   }
 }
 </script>

+ 143 - 26
src/views/PeopleManage/Agent/QuoteDetail.vue

@@ -5,6 +5,7 @@
         <el-date-picker
           size="small"
           v-model="quoteDetailForm.rangeDate"
+          value-format="yyyy-MM-dd"
           type="daterange"
           range-separator="至"
           start-placeholder="开始日期"
@@ -12,53 +13,56 @@
         </el-date-picker>
       </el-form-item>
       <el-form-item style="width: 30%;" label="订单号">
-        <el-input size="small" v-model="quoteDetailForm.orderNumber" placeholder="请输入订单号"></el-input>
+        <el-input size="small" v-model="quoteDetailForm.subOrderNo" placeholder="请输入订单号"></el-input>
       </el-form-item>
       <el-form-item style="width: 30%;" label="动作">
         <el-select style="width: 100%" size="small" v-model="quoteDetailForm.action">
-          <el-option label="动作1" value="1"></el-option>
-          <el-option label="动作2" value="2"></el-option>
+          <el-option :label="item.desc" :value="item.code" v-for="(item, index) in actionList" :key="item.code"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item style="width: 30%;" label="代理人">
-        <el-input size="small" v-model="quoteDetailForm.agentPeoeple" placeholder="请输入工号、姓名查找"></el-input>
+        <el-input size="small" v-model="quoteDetailForm.agent" placeholder="请输入工号、姓名查找"></el-input>
       </el-form-item>
       <el-form-item style="width: 30%;" label="车牌号">
-        <el-input size="small" v-model="quoteDetailForm.carNumber" placeholder="请输入车牌号"></el-input>
+        <el-input size="small" v-model="quoteDetailForm.licenseNo" placeholder="请输入车牌号"></el-input>
       </el-form-item>
       <el-form-item style="width: 30%;" label="结果">
-        <el-select style="width: 100%" size="small" v-model="quoteDetailForm.action">
-          <el-option label="结果1" value="1"></el-option>
-          <el-option label="结果2" value="2"></el-option>
+        <el-select style="width: 100%" size="small" v-model="quoteDetailForm.result">
+          <el-option :label="item.desc" :value="item.code" v-for="(item, index) in resultList" :key="item.code"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item style="width: 30%;" label="操作人">
-        <el-input size="small" v-model="quoteDetailForm.person" placeholder="请输入操作人"></el-input>
+        <el-input size="small" v-model="quoteDetailForm.operator" placeholder="请输入操作人"></el-input>
       </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" style="margin-left: 150px;" @click="search()">查询</el-button>
+        <el-button size="small" @click="reset">重置</el-button>
       </el-form-item>
     </el-form>
     <el-table
       :data="tableData"
     >
-      <el-table-column prop="" label="报价时间"></el-table-column>
-      <el-table-column prop="" label="动作"></el-table-column>
-      <el-table-column prop="" label="保险公司"></el-table-column>
-      <el-table-column prop="" label="订单号">
+      <el-table-column prop="createTime" label="报价时间"></el-table-column>
+      <el-table-column prop="action" label="动作"></el-table-column>
+      <el-table-column prop="companyId" label="保险公司">
         <template slot-scope="scope">
-          <a>{{ scope.row.orderNumber }}</a>
+          {{ leftTree.find(item => item.id === scope.row.companyId)?leftTree.find(item => item.id === scope.row.companyId).namesimple:'' }}
         </template>
       </el-table-column>
-      <el-table-column prop="" label="车牌号"></el-table-column>
-      <el-table-column prop="" label="工号"></el-table-column>
-      <el-table-column prop="" label="姓名"></el-table-column>
-      <el-table-column prop="" label="联系电话"></el-table-column>
-      <el-table-column prop="" label="结果"></el-table-column>
+      <el-table-column prop="subOrderNo" label="订单号">
+        <template slot-scope="scope">
+          <a class="link" @click="getQuoteDetail(scope.row)">{{ scope.row.subOrderNo }}</a>
+        </template>
+      </el-table-column>
+      <el-table-column prop="licenseNo" label="车牌号"></el-table-column>
+      <el-table-column prop="userId" label="工号"></el-table-column>
+      <el-table-column prop="name" label="姓名"></el-table-column>
+      <el-table-column prop="mobile" label="联系电话"></el-table-column>
+      <el-table-column prop="result" label="结果"></el-table-column>
     </el-table>
     <div class="flex-box">
       <el-pagination
+        @current-change="handlePageChange"
         @size-change="handleSizeChange"
         :current-page="pageNum"
         :page-sizes="[10, 20, 30, 40]"
@@ -67,24 +71,133 @@
         :total="total">
       </el-pagination>
     </div>
+    <detailsDialog
+      ref="detailsDialog"
+      :orderInfo.sync="orderInfo"
+      :Feepermissions="false"
+    ></detailsDialog>
   </div>
 </template>
 
 <script>
+import detailsDialog from "@/views/Core/components/detailsDialog.vue";
+
 export default {
+  components: {
+    detailsDialog
+  },
   data() {
     return {
-      quoteDetailForm: {},
-      tableData: [],
+      quoteDetailForm: {}, // 查询条件
+      tableData: [], // 列表数据
       pageNum: 1,
       pageSize: 10,
-      total: 0
+      total: 0,
+      orderInfo: {
+        carinfo: {},
+        applyinfo: {},
+        insureinfo: {},
+        kindinfo: [],
+        riskinfo: [],
+        ownerinfo: {},
+        orderCommissionVo: {},
+        extendInfo: {},
+      }, //选中的订单
+      actionList: [], // 动过list
+      resultList: [], // 结果list
+      leftTree: [] // 保险公司
     }
   },
   methods: {
-    handleSizeChange() {
-
+    // 查询
+    search() {
+      this.pageNum = 1
+      this.initData()
+    },
+    // 结果数据转换展示
+    filterResult(value,row) {
+      return row.result === value
+    },
+    // 获取保险公司
+    initCompany() {
+      this.$api.quote.getCompany().then(res => {
+        if(res.code == 200) {
+          this.leftTree = res.data
+        } else {
+          this.$message.error(res.msg)
+        }
+      })
+    },
+    // 分页(每页条数变化)
+    handleSizeChange(size) {
+      this.pageSize = size
+      this.initData();
+    },
+    // 分页(页码改变)
+    handlePageChange(page) {
+      this.pageNum = page
+      this.initData();
+    },
+    // 获取列表数据
+    initData() {
+      this.$api.quote.getQuoteDetails({
+        startTime: this.quoteDetailForm.rangeDate&&this.quoteDetailForm.rangeDate[0]?this.quoteDetailForm.rangeDate[0]:'',
+        endTime: this.quoteDetailForm.rangeDate&&this.quoteDetailForm.rangeDate[1]?this.quoteDetailForm.rangeDate[1]:'',
+        subOrderNo: this.quoteDetailForm.subOrderNo?this.quoteDetailForm.subOrderNo:'',
+        action: this.quoteDetailForm.action?this.quoteDetailForm.action: this.quoteDetailForm.action==0?0:'',
+        licenseNo: this.quoteDetailForm.licenseNo?this.quoteDetailForm.licenseNo:'',
+        result: this.quoteDetailForm.result?this.quoteDetailForm.result: this.quoteDetailForm.result==0?0:'',
+        agent: this.quoteDetailForm.agent?this.quoteDetailForm.agent:'',
+        operator: this.quoteDetailForm.operator?this.quoteDetailForm.operator:'',
+        pageNum: this.pageNum,
+        pageSize: this.pageSize
+      }).then(res => {
+        if(res.code === 200) {
+          this.tableData = res.data.records
+          this.total = res.data.total
+        } else {
+          this.$message.error(res.msg)
+        }
+      })
+    },
+    // 重置
+    reset() {
+      this.quoteDetailForm = {}
+      this.pageNum = 1
+      this.pageSize = 10
+      this.initData();
+    },
+    // 获取详情
+    getQuoteDetail(row) {
+      this.$api.letter.getByCompanyId({
+        companyId: row.subOrderNo
+      }).then(res => {
+        this.orderInfo = {...res.data}
+        this.$refs.detailsDialog.setBackupVisible(true);
+      })
+    },
+    // 动作
+    initAction() {
+      this.$api.quote.getQuoteAction().then(res => {
+        if(res.code === 200) {
+          this.actionList = res.data
+        }
+      })
+    },
+    // 结果
+    initResult() {
+      this.$api.quote.getQuoteResult().then(res => {
+        if(res.code === 200) {
+          this.resultList = res.data
+        }
+      })
     }
+  },
+  mounted() {
+    this.initData();
+    this.initAction();
+    this.initResult();
+    this.initCompany();
   }
 }
 </script>
@@ -96,6 +209,10 @@ export default {
   justify-content: flex-end;
   margin: 10px 0;
 }
+.link{
+  color: rgb(64, 158, 255);
+  cursor: pointer;
+}
 /deep/ {
   .el-form-item__content {
     width: calc(100% - 150px);

+ 103 - 49
src/views/PeopleManage/Agent/QuoteManagement.vue

@@ -2,35 +2,35 @@
   <div class="quoteManagement">
     <el-form ref="QuoteForm" :model="quoteForm" :inline="true" label-width="130px">
       <el-form-item style="width: 20%" label="代理人信息" prop="people">
-        <el-input v-model="quoteForm.people" size="small" placeholder="请输入姓名和手机号查找"></el-input>
+        <el-input v-model="quoteForm.agent" size="small" placeholder="请输入姓名和手机号查找"></el-input>
       </el-form-item>
       <el-form-item style="width: 20%" label="工号" prop="number">
-        <el-input v-model="quoteForm.number" size="small" placeholder="请输入工号查找"></el-input>
+        <el-input v-model="quoteForm.agentId" size="small" placeholder="请输入工号查找"></el-input>
       </el-form-item>
       <el-form-item style="width: 20%" label="保险公司" prop="company">
-        <el-select v-model="quoteForm.company" filterable size="small">
+        <el-select v-model="quoteForm.companyId" 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>
-        <el-button type="primary" size="small">查询</el-button>
+        <el-button size="small" @click="reset()">重置</el-button>
+        <el-button type="primary" size="small" @click="search()">查询</el-button>
       </el-form-item>
     </el-form>
     <el-table
       :data="quoteData"
     >
-      <el-table-column prop="" label="部门编码" width="150"></el-table-column>
-      <el-table-column prop="" label="机构名称" width="150"></el-table-column>
-      <el-table-column prop="" label="部门名称" width="150"></el-table-column>
-      <el-table-column prop="" label="工号" width="150"></el-table-column>
-      <el-table-column prop="" label="姓名" width="150"></el-table-column>
-      <el-table-column prop="" label="联系电话" width="150"></el-table-column>
-      <el-table-column prop="" label="保险公司" width="150"></el-table-column>
-      <el-table-column prop="" label="今日报价(次)" width="150"></el-table-column>
-      <el-table-column prop="" label="今日报价(单)" width="150"></el-table-column>
-      <el-table-column prop="" label="今日承保(单)" width="150"></el-table-column>
-      <el-table-column width="150">
+      <el-table-column prop="deptId" label="部门编码" width="150"></el-table-column>
+<!--      <el-table-column prop="" label="机构名称" width="150"></el-table-column>-->
+      <el-table-column prop="deptName" label="部门名称" width="150"></el-table-column>
+      <el-table-column prop="userId" label="工号" width="150"></el-table-column>
+      <el-table-column prop="name" label="姓名" width="150"></el-table-column>
+      <el-table-column prop="mobile" label="联系电话" width="150"></el-table-column>
+      <el-table-column prop="company" label="保险公司" width="150"></el-table-column>
+      <el-table-column prop="numCount" label="今日报价(次)" width="150"></el-table-column>
+      <el-table-column prop="dayAllOrder" label="今日报价(单)" width="150"></el-table-column>
+      <el-table-column prop="dayCoverOrder" label="今日承保(单)" width="150"></el-table-column>
+      <el-table-column prop="rate" width="150">
         <template slot="header" slot-scope="scope">
           <div>
             <span>报价出单比</span>
@@ -47,9 +47,9 @@
             </el-popover>
           </div>
         </template>
-      </el-table-column>
-      <el-table-column prop="" label="累计报价(次)" width="150"></el-table-column>
-      <el-table-column prop="" label="累计承保(单)" width="150"></el-table-column>
+      </el-table-column> <!--报价出单比-->
+      <el-table-column prop="wholeAllOrder" label="累计报价(次)" width="150"></el-table-column>
+      <el-table-column prop="wholeCoverOrder" label="累计承保(单)" width="150"></el-table-column>
       <el-table-column label="操作" width="200" fixed="right">
         <template slot-scope="scope">
           <kt-button label="增加次数" size="small" type="text" perms="agreement:input:delete"
@@ -59,6 +59,7 @@
     </el-table>
     <div class="flex-box">
       <el-pagination
+        @current-change="handlePageChange"
         @size-change="handleSizeChange"
         :current-page="pageNum"
         :page-sizes="[10, 20, 30, 40]"
@@ -79,25 +80,25 @@
           <el-input v-model="addForm.company" disabled></el-input>
         </el-form-item>
         <el-form-item label="今日已报价" style="width: 80%">
-          <el-input v-model="addForm.hadQuote" disabled></el-input>
+          <el-input v-model="addForm.dayAllOrder" disabled></el-input>
         </el-form-item>
         <el-form-item label="今日已承保" style="width: 80%">
-          <el-input v-model="addForm.had" disabled></el-input>
+          <el-input v-model="addForm.dayCoverOrder" disabled></el-input>
         </el-form-item>
         <el-form-item label="报价出单比" style="width: 80%">
-          <el-input v-model="addForm.assign" disabled></el-input>
+          <el-input v-model="addForm.rate" disabled></el-input>
           <span style="font-size: 12px; color: #999;">报价出单比=承保单数/报价单数*100%(四舍五入到小数点后两位)</span>
         </el-form-item>
         <el-form-item label="增加次数" style="width: 80%">
-          <el-input v-model="addForm.count"></el-input>
+          <el-input v-model="addForm.quoteNumber"></el-input>
         </el-form-item>
         <el-form-item label="备注" style="width: 80%">
-          <el-input type="textarea" v-model="addForm.tips"></el-input>
+          <el-input type="textarea" v-model="addForm.remark"></el-input>
         </el-form-item>
       </el-form>
       <span slot="footer" class="dialog-footer">
         <el-button @click="dialogVisible = false">取 消</el-button>
-        <el-button type="primary" @click="dialogVisible = false">确 定</el-button>
+        <el-button type="primary" @click="addCountSubmit">确 定</el-button>
       </span>
     </el-dialog>
   </div>
@@ -105,6 +106,7 @@
 
 <script>
 import KtButton from "@/views/Core/KtButton";
+import {appendUserConfig, quoteUserDetails} from "../../../http/moudules/quote";
 export default {
   components: {
     KtButton
@@ -113,17 +115,18 @@ export default {
     return {
       quoteForm: {
         people: '',
-        number: '',
-        company: ''
-      },
-      quoteData: [{}],
+        agentId: '',
+        companyId: '',
+      }, // 查询条件form
+      quoteData: [], // 列表数据
       pageNum: 1,
       pageSize: 10,
       total: 0,
-      dialogVisible: false,
+      dialogVisible: false, // 增加次数弹框
       addForm: {
-
-      },
+        quoteNumber: 0,
+        remark: ''
+      }, // 增加次数form
 
       quoteCompany:[], // 保险公司list
 
@@ -131,8 +134,14 @@ export default {
   },
   created() {
     this.initCompany();
+    this.initData();
   },
   methods: {
+    // 查询
+    search() {
+      this.pageNum = 1
+      this.initData()
+    },
     // 获取保险公司
     initCompany() {
       this.$api.quote.getCompany().then(res => {
@@ -141,19 +150,74 @@ export default {
         }
       })
     },
+    // 列表
+    initData() {
+      this.$api.quote.quoteUserDetails({
+        pageNum: this.pageNum,
+        pageSize: this.pageSize,
+        ...this.quoteForm
+      }).then(res => {
+        if(res.code === 200) {
+          this.quoteData = res.data.records
+          this.total = res.data.total
+        } else {
+          this.$message.error(res.msg)
+        }
+      })
+    },
+    // 重置
+    reset() {
+      this.quoteForm = {}
+      this.pageNum = 1
+      this.initData()
+    },
+    // 点击增加次数
     addCount(index, row) {
       this.dialogVisible = true
+      row.agent = `${row.name}-${row.userId}`
+      this.addForm = {...row}
+    },
+    // 分页(每页条数变化)
+    handleSizeChange(size) {
+      this.pageSize = size
+      this.initData();
+    },
+    // 分页(页码改变)
+    handlePageChange(page) {
+      this.pageNum = page
+      this.initData();
+    },
+    // 增加次数保存
+    addCountSubmit() {
+      this.$api.quote.appendUserConfig({
+        userId: this.addForm.userId,
+        companyId: this.addForm.companyId,
+        quoteNumber: this.addForm.quoteNumber,
+        remark: this.addForm.remark
+      }).then(res => {
+        if(res.code === 200) {
+          this.$message.success(res.msg)
+        } else {
+          this.$message.error(res.msg)
+        }
+        this.dialogVisible = false
+      })
     },
-    handleSizeChange() {
-
-    }
   },
-  mounted() {
-
-  }
 }
 </script>
-
+<style>
+.popover-box.el-popover {
+  background: rgba(0, 0, 0, .5) !important;
+  color: #fff !important;
+}
+.popover-box .popper__arrow {
+  border-top-color: rgba(0, 0, 0, .4) !important;
+}
+.popover-box .popper__arrow::after {
+  border-top-color: rgba(0, 0, 0, 0) !important;
+}
+</style>
 <style lang="scss" scoped>
 /deep/ {
   .el-form-item__content {
@@ -166,14 +230,4 @@ export default {
   justify-content: flex-end;
 }
 
-.popover-box{
-  background: rgba(0,0,0,.5) !important;
-  color: #fff !important;
-}
-.popper__arrow{
-  border-top-color: rgba(0,0,0,.4) !important;
-}
-.popper__arrow::after{
-  border-top-color: rgba(0,0,0,0) !important;
-}
 </style>

+ 2 - 1
src/views/Task/DaikeLetter.vue

@@ -288,7 +288,8 @@ export default {
                 item.areaNewCode = item.liveAddress.split(',')
               }
             })
-            console.log(123123123, this.salespersonData)
+          } else {
+            this.$refs.Ktletter.userId = this.salespersonForm.userId
           }
           loading.close();
           this.dialogVisible = true;

+ 1 - 4
src/views/Task/daikeComponents/KtLetter1.vue

@@ -8938,7 +8938,6 @@ export default {
       });
     },
     quote1() {
-      console.log('最后的信息')
       let starttime = new Date(this.carInfo.registerDate);
       let endtime = new Date(this.carInfo.issueDate);
       if (endtime < starttime) {
@@ -9336,9 +9335,6 @@ export default {
         vehicleAndVesselTax: this.vehicleAndVesselTaxForm,
         productId: this.productId
       };
-      console.log('车主信息', this.ownerInfo)
-      console.log('投保人信息', this.policyHolderInfo)
-      console.log('被投保人信息', this.insuredPersonInfo)
       this.$api.letter[this.apiInterfaceName](param).then((res) => {
         if (res.code == "200") {
           //上传图片
@@ -10028,6 +10024,7 @@ export default {
           };
 
           return this.$api.letter[this.apiInterfaceName](param).then((res) => {
+
             this.yangguang(num, id);
           });
         } else if (res.code == "200") {

+ 204 - 0
src/views/message/index.vue

@@ -0,0 +1,204 @@
+<template>
+  <el-row class="message">
+    <el-col :span="4" class="colLeft">
+      <div class="menu">
+        <div class="menuItem" :class="{'active':menuIndex === index}" @click="handleClick(item,index)" v-for="(item, index) in menuList" :key="item+index">
+          <el-badge :value="item.value" :max="99">{{ item.text }}</el-badge>
+        </div>
+      </div>
+    </el-col>
+    <el-col :span="20" class="colRight">
+      <div class="message-list">
+        <el-row style="cursor: pointer" :gutter="20" class="message-item" v-for="(item, index) in menuList[menuIndex].list" :key="index">
+          <el-col :span="3" style="text-align: right; color: #cccccc">
+            <p @click="handleItemClick(item, index)">{{ item.time }}</p>
+            <p></p>
+            <p @click="handleItemClick(item, index)">{{item.day}}</p>
+          </el-col>
+          <el-col :span="21">
+            <p class="title" @click="handleItemClick(item, index)">{{ item.title }}</p>
+            <p class="content" @click="handleItemClick(item, index)" :class="{'custom': item.state !== '0'}" v-html="item.content"></p>
+          </el-col>
+        </el-row>
+        <div v-if="menuList[menuIndex].list.length===0" style="height: 100%;display: flex; align-items: center; justify-content: center">
+          <el-empty description="暂无数据"></el-empty>
+        </div>
+      </div>
+      <div class="flex-box">
+        <el-pagination
+          @current-change="handlePageChange"
+          @size-change="handleSizeChange"
+          :current-page="pageNum"
+          :page-sizes="[10, 20, 30, 40]"
+          :page-size="pageSize"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="total">
+        </el-pagination>
+      </div>
+    </el-col>
+  </el-row>
+</template>
+
+<script>
+import {updateMessage} from "../../http/moudules/letter";
+
+export default {
+  data() {
+    return {
+      menuList: [
+        {
+          text: '增员信息',
+          value: 0,
+          type: 1,
+          list: [],
+        },
+        {
+          text: '待我审批',
+          value: 0,
+          type: 2,
+          list: [],
+        },
+        {
+          text: '审批结果',
+          value: 0,
+          type: 3,
+          list: [],
+        },
+      ],
+      menuIndex: 0,
+      pageNum: 1,
+      pageSize: 10,
+      total: 0,
+      msgType: 1
+    }
+  },
+  methods:{
+    initData(type) {
+      this.$api.letter.getMessage({
+        msgType: type?type:null,
+        pageNum: this.pageNum,
+        pageSize: this.pageSize
+      }).then(res => {
+        if(res.code === 200) {
+          this.total = res.data.total
+          this.menuList.forEach(item => {
+            if(item.type === type) {
+              item.value = res.data.list.filter(item => item.state === '0').length
+              item.list = res.data.list.map(item => {
+                return {
+                  time: item.sendTime?item.sendTime.split(' ')[1]:'',
+                  day: item.sendTime?item.sendTime.split(' ')[0]:'',
+                  highList: item.highLight?item.highLight.split(';'):[],
+                  ...item
+                }
+              })
+            }
+          })
+          this.menuList.forEach(item => {
+            item.list.forEach(sub => {
+              if(sub.highList.length>0) {
+                sub.highList.forEach(str => {
+                  sub.content = `<span>${sub.content.substring(0,sub.content.indexOf(str))}<a style="color: ${sub.state === '0'?'#00C2FF':'#cccccc'}">${sub.content.substring(sub.content.indexOf(str),sub.content.indexOf(str)+str.length)}</a>${sub.content.substring(sub.content.indexOf(str)+str.length, sub.content.length-1)}</span>`
+                })
+              }
+            })
+          })
+        }
+      })
+    },
+    handleClick(item, index) {
+      this.menuIndex = index
+      this.msgType = item.type
+      this.initData(this.msgType)
+    },
+    handlePageChange(page) {
+      this.pageNum = page
+      this.initData(this.msgType)
+    },
+    handleSizeChange(size) {
+      this.pageSize = size
+      this.initData(this.msgType)
+    },
+    handleItemClick(item, index) {
+      console.log(123, item)
+      if(item.state === '0') {
+        this.$api.letter.updateMessage(item.id).then(res => {
+          if(res.code === 200) {
+            this.$message.success(res.msg)
+            this.initData(this.msgType)
+          } else {
+            this.$message.warning(res.msg)
+          }
+        })
+      }
+      if(item.jump === '1') {
+        this.$router.push({
+          path: item.jumpUrl
+        })
+      }
+    }
+  },
+  mounted() {
+    this.initData(1);
+    this.initData(2);
+    this.initData(3);
+    this.initData();
+  }
+}
+</script>
+
+<style scoped lang="scss">
+  .message{
+    width: 100%;
+    height: 100%;
+    overflow: hidden;
+    .colLeft, .colRight{
+      height: 100%;
+      overflow: hidden;
+    }
+    .colLeft{
+      border-right: 1px solid #cccccc;
+      .menu{
+        height: 100%;
+        width: 100%;
+        overflow-y: auto;
+        .menuItem{
+          cursor: pointer;
+          padding: 10px 20px;
+          width: calc(100% - 40px);
+          text-overflow: ellipsis;
+          overflow: hidden;
+          word-break: break-all;
+          white-space: nowrap;
+        }
+        .active{
+          background: #F0F0F0;
+        }
+      }
+    }
+    .message-list{
+      margin: 10px 40px;
+      width: calc(100% - 80px);
+      height: calc(100% - 60px);
+      overflow-y: auto;
+      .message-item{
+        border-bottom: 1px solid #cccccc;
+        width: 100%;
+        .title, .content{
+          width: 100%;
+          text-overflow: ellipsis;
+          overflow: hidden;
+          word-break: break-all;
+          white-space: nowrap;
+        }
+        .custom{
+          color: #ccc;
+        }
+      }
+    }
+    .flex-box{
+      display: flex;
+      justify-content: flex-end;
+    }
+  }
+</style>