Browse Source

Merge branch 'dev' into lihongxiao

lihongxiao 1 năm trước cách đây
mục cha
commit
fbff9886a3
32 tập tin đã thay đổi với 2333 bổ sung691 xóa
  1. BIN
      src/assets/customerService/weChatAgent.png
  2. 18 0
      src/components/Form/retrievalForm.vue
  3. 23 17
      src/components/customerService/floatingBar.vue
  4. 9 2
      src/http/api.js
  5. 16 0
      src/http/moudules/insCompany.js
  6. 25 0
      src/http/moudules/quote.js
  7. 14 0
      src/http/moudules/service/aiSupport.js
  8. 81 0
      src/http/moudules/sys.js
  9. 8 0
      src/http/moudules/task.js
  10. 2 2
      src/http/moudules/user.js
  11. 143 57
      src/views/AgreementManage/CarInsurance/AgreementProductFee.vue
  12. 28 2
      src/views/Core/KtCommonTable.vue
  13. 9 0
      src/views/Core/components/detailsDialogPro.vue
  14. 119 2
      src/views/FinancialManagement/ContractManagement/ContractManagement.vue
  15. 2 1
      src/views/Letter/Wallet/BankCard.vue
  16. 134 0
      src/views/PeopleManage/Agent/AddCountDetail.vue
  17. 275 65
      src/views/PeopleManage/Agent/QuoteCountManagement.vue
  18. 104 0
      src/views/PeopleManage/Agent/QuoteDetail.vue
  19. 91 48
      src/views/PeopleManage/Agent/QuoteManagement.vue
  20. 1 1
      src/views/PeopleManage/Sales/SalesExamine.vue
  21. 1 1
      src/views/PeopleManage/Sales/SalesExamineGroup.vue
  22. 1 1
      src/views/PeopleManage/Sales/SalesManage.vue
  23. 1 1
      src/views/PeopleManage/Sales/SalesManageGroup.vue
  24. 420 0
      src/views/Sys/DataPermissions.vue
  25. 126 405
      src/views/Sys/Deptall.vue
  26. 1 0
      src/views/Sys/Dict.vue
  27. 61 41
      src/views/Sys/PublicizeImg.vue
  28. 539 0
      src/views/Sys/RulePermissions.vue
  29. 47 26
      src/views/Task/TaskPoolChannel/TaskPoolChannel3.vue
  30. 4 3
      src/views/Task/daikeComponents/KhgxKtLetter.vue
  31. 2 2
      src/views/Task/daikeComponents/KtLetter.vue
  32. 28 14
      src/views/Task/daikeComponents/KtLetter1.vue

BIN
src/assets/customerService/weChatAgent.png


+ 18 - 0
src/components/Form/retrievalForm.vue

@@ -94,6 +94,9 @@
         />
       </el-col>
       <el-col :span="2" style="text-align: right">
+        <el-button v-if="isExport" size="small" type="primary" @click="exportFileSubmit"
+          >导出</el-button
+        >
         <el-button size="small" type="primary" @click="handleSubmit"
           >查询</el-button
         >
@@ -116,6 +119,10 @@ export default {
     dateType :{
       type: String,
       default: "0",
+    },
+    isExport:{
+      type:Boolean,
+      default:false,
     }
   },
   data() {
@@ -209,6 +216,17 @@ export default {
       this.isCollapsed = !this.isCollapsed; // 切换折叠状态
       this.$emit("toggleCollapse", this.isCollapsed);
     },
+    //导出
+    exportFileSubmit(){
+      this.$refs.form.validate((valid) => {
+        if (valid) {
+          this.$emit("exportSubmit", this.formData);
+        } else {
+          // 表单验证失败,做相应处理
+        }
+      });
+    },
+    //查询
     handleSubmit() {
       this.$refs.form.validate((valid) => {
         if (valid) {

+ 23 - 17
src/components/customerService/floatingBar.vue

@@ -7,8 +7,8 @@
         <img src="../../assets/customerService/customerService.png" alt="">
         <span>客服</span>
       </div>
-      <div class="aiSupport flex f-c a-c " @click="wechatService" v-if="display&&supportStaffUrl !== null">
-        <!-- <img src="../../assets/customerService/customerService.png" alt=""> -->
+      <div class="humanAgent flex f-c a-c " @click="wechatService" v-if="display">
+        <img src="../../assets/customerService/weChatAgent.png" alt="" style="width: 30px;height: 30px;">
         <span>微信</span>
         <span>客服</span>
       </div>
@@ -17,7 +17,7 @@
           <img :src="wechatPictureUrl" alt="" style="width: 130px;height:130px;">
           <span style="font-size: 14px;color: #333;margin-top: 5px;">微信扫码咨询</span>
         </div>
-        <div class="humanAgent flex f-c j-c a-c" slot="reference" >
+        <div class="humanAgent flex f-c j-c a-c" slot="reference">
           <img src="../../assets/customerService/Frame.png" alt="">
           <span>掌柜</span>
           <span>客服</span>
@@ -43,9 +43,9 @@ export default {
       qrcode: null,
       qrcodeWidth: "130",
       qrcodeHeight: "130",
-      wechatPictureUrl:"",
-      display:"",
-      supportStaffUrl:''
+      wechatPictureUrl: "",
+      display: "",
+      supportStaffUrl: null,
     }
   },
   // 生命周期函数
@@ -54,23 +54,27 @@ export default {
   },
   // 方法函数
   methods: {
-
+    //获取微信客服跳转链接
+    wechatService() {
+      this.$api.aiSupport.getWechatCustomer().then((res) => {
+        if (res.code == '200') {
+          this.supportStaffUrl = res.msg;
+          window.open(this.supportStaffUrl, '_blank');
+        }
+      });
+    },
     aiSupportClick() {
       this.$refs.modalDialog.setBackupVisible(true);
     },
     wechat() {
       this.$api.aiSupport.wechatpicture().then((res) => {
+        console.log(res)
         if (res.code == '200') {
-          this.display=res.data.display;
-          this.wechatPictureUrl=process.env.APP_BASE_URL+ res.data.wechatPictureUrl;
-          this.supportStaffUrl = res.data.supportStaffUrl
-          console.log(this.supportStaffUrl.length);
+          this.display = res.data.display;
+          this.wechatPictureUrl = process.env.APP_BASE_URL + res.data.wechatPictureUrl;
         }
       });
     },
-    wechatService(){
-      window.open(this.supportStaffUrl, '_blank');
-    },
     //二维码生成插件
     creatQrCode(text) {
       // 查找并删除旧的二维码DOM元素
@@ -101,6 +105,7 @@ export default {
     padding: 5px;
   }
 }
+
 #qrCode {
   display: inline-block;
   margin: 0 auto;
@@ -115,17 +120,18 @@ export default {
   background-color: #fff;
   padding: 6px;
 }
+
 .floatingBar {
   width: auto;
   position: fixed;
-  bottom: 7%;
+  bottom: 5%;
   right: 0;
   z-index: 99;
   background: #FFFFFF;
   box-shadow: 6px 6px 12px 0px rgba(0, 70, 128, 0.08);
   border-radius: 4px 0px 0px 4px;
   border: 1px solid #F1F3F6;
-  padding: 8px 6px;
+  padding: 6px;
   box-sizing: border-box;
 
   .aiSupport {
@@ -157,7 +163,7 @@ export default {
     background: #fff;
     border-radius: 4px 4px 4px 4px;
     padding: 4px 2px;
-    margin-top: 10px;
+
     span {
       color: #202D45;
       font-size: 12px;

+ 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
+
 }

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

@@ -348,6 +348,7 @@ export const getPtlInsAttributionTemplate = (data) => {
 
 
 /** 协议产品费用 */
+
 //查询
 export const productCostQuery = (data) => {
   return axios({
@@ -432,6 +433,21 @@ export const productContbatchCopy = (data) => {
     data
   })
 }
+//费用禁用
+export const productdisable = (id) => {
+  return axios({
+    url: '/plt/new/agreement/costs/disable/'+id,
+    method: "post",
+  })
+}
+//费用批量禁用
+export const productbatchDisable = (data) => {
+  return axios({
+    url: '/plt/new/agreement/costs/batchDisable',
+    method: "post",
+    data
+  })
+}
 /** 协议产品费用 */
 /** 费用审核 */
 

+ 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
+  })
+}
+

+ 14 - 0
src/http/moudules/service/aiSupport.js

@@ -16,3 +16,17 @@ export const wechatpicture= () => {
 
   })
 }
+// 获取客服列表
+export const customerList= () => {
+  return axios({
+      url: "/wechat/customer/list",
+      method: "post",
+  })
+}
+//获取跳转链接
+export const getWechatCustomer= () => {
+  return axios({
+      url: "/sys/qy/wechat/find/wechatCustomer",
+      method: "post",
+  })
+}

+ 81 - 0
src/http/moudules/sys.js

@@ -418,3 +418,84 @@ export const queryStaticPage = (data) => {
         data
     })
 }
+//数据权限新增及编辑
+export const dataPermissionsUpdate = (data) => {
+    return axios({
+        url: '/dataPermissions/saveAndUpdate',
+        method: 'post',
+        data
+    })
+}
+
+//数据权限详情列表
+export const getDataPermissions = (data) => {
+    return axios({
+        url: '/dataPermissions/queryPage',
+        method: 'post',
+        data
+    })
+}
+
+//数据权限回显
+export const getDataPermissionsItem = (id) => {
+    return axios({
+        url:`/dataPermissions/${id}`,
+        method: 'get',
+      
+    })
+}
+
+
+//获取角色关联菜单列表
+export const getInsRoleMenuPermissions = (data) => {
+    return axios({
+        url:`/insRolePermissions/getInsRoleMenuPermissions`,
+        method: 'post',
+        data
+      
+    })
+}
+//设置角色关联菜单
+export const saveAndUpdateRuleMenu = (data) => {
+    return axios({
+        url:`/insRolePermissions/saveAndUpdateRuleMenu`,
+        method: 'post',
+        data
+      
+    })
+}
+
+//获取菜单关联数据-无分页
+export const getMenuRelaPerqueryList = (data) => {
+    return axios({
+        url:`/dataPermissions/queryList`,
+        method: 'post',
+        data
+      
+    })
+}
+//获取角色关联菜单 关联的规则数据
+export const getInsRolePermissionsDtoList = (data) => {
+    return axios({
+        url:`/insRolePermissions/getInsRolePermissionsDtoList`,
+        method: 'post',
+        data
+      
+    })
+}
+//保存角色关联菜单 关联的规则数据
+export const roleMenuPerSaveAndUpdate = (data) => {
+    return axios({
+        url:`/insRolePermissions/saveAndUpdate`,
+        method: 'post',
+        data
+      
+    })
+}
+
+
+
+
+
+
+

+ 8 - 0
src/http/moudules/task.js

@@ -1004,6 +1004,14 @@ export const queryPageHospitalityByChannel = (data) => {
     data
   })
 }
+//任务池(渠道)列表导出接口
+export const exportHospitalityByChannel = (data) => {
+  return axios({
+    url: "/insurance/order/exportHospitalityByChannel ",
+    method: "post",
+    data
+  })
+}
 // 任务池(代理人)列表接口
 export const queryPageHospitalityLinkagent = (data) => {
   return axios({

+ 2 - 2
src/http/moudules/user.js

@@ -688,9 +688,9 @@ export const queryGeographyRecord = (data) => {
 
 
 // 电销管理人
-export const findDxUserList = () => {
+export const findDxUserList = (type) => {
   return axios({
-    url: '/user/findDxUserList',
+    url: '/user/findDxUserList?type='+type,
     method: 'get',
   })
 }

+ 143 - 57
src/views/AgreementManage/CarInsurance/AgreementProductFee.vue

@@ -44,6 +44,14 @@
             </el-select>
           </el-form-item>
         </el-col>
+        <el-col :span="6">
+          <el-form-item label="费用状态">
+            <el-select style="width: 100%;" v-model="productpageRequest.validStatus" clearable>
+              <el-option label="启用" value="1"></el-option>
+              <el-option label="禁用" value="0"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
         <el-col :span="6">
           <el-form-item label="创建日期">
             <el-date-picker style="width: 100%;" v-model="createDate" type="daterange" value-format="yyyy-MM-dd"
@@ -53,8 +61,8 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="费用描述">
-            <el-select style="width: 100%;"  v-model="productpageRequest.costsDescription" multiple filterable allow-create default-first-option
-              placeholder="关键字搜索 例:新能源、非车险、评分等">
+            <el-select style="width: 100%;" v-model="productpageRequest.costsDescription" multiple filterable allow-create
+              default-first-option placeholder="关键字搜索 例:新能源、非车险、评分等">
             </el-select>
           </el-form-item>
         </el-col>
@@ -86,16 +94,16 @@
     </div>
     <kt-common-table :tableHeights="580" :SerialShow="false" :operationWidth="250" :showOperation="true"
       :showBatchDelete="true" :showBatchSettled="false" :showBatchPrint="false" :customToolseletted="true"
-      :data="productPageResult" :columns="productColumns" @findPage="productCostFindPage" button2Name="编辑"
-      button2Type="text" button3Type="text" button5Type="text" :button2style="{ color: '#2D4D89' }"
-      :button3style="{ color: '#D42426' }" :button5style="{ color: '#2D4D89' }" permsButton2="agreement:input:productCost"
-      @handleButton2="productUpdate" deleteName="批量修改费用" @handleDelete="batchUpdate" @customTool="batchDelete"
-      @customTool1="customTool1" customToolName1="批量修改起止时间"
-      customToolName="批量删除" button3Name="删除"  permsButton3="agreement:input:productCost" @handleButton3="productDelete"
+      :disableInBulk="false" :data="productPageResult" :columns="productColumns" @findPage="productCostFindPage"
+      button2Name="编辑" button2Type="text" button3Type="text" button5Type="text" button4Type="text"
+      :button2style="{ color: '#2D4D89' }" :button3style="{ color: '#D42426' }" :button5style="{ color: '#2D4D89' }"
+      permsButton2="agreement:input:productCost" @handleButton2="productUpdate" deleteName="批量修改费用"
+      @handleDelete="batchUpdate" @customTool="batchDelete" @customTool1="customTool1" customToolName1="批量修改起止时间"
+      customToolName="批量删除" button3Name="删除" permsButton3="agreement:input:productCost" @handleButton3="productDelete"
       button5Name="轨迹" @handleButton5="trajectory" button3Icon="">
     </kt-common-table>
-    <el-dialog  :append-to-body="true" :title="productCostAddDialogTitle" :visible.sync="productCostAddVehicleFactorVisible" width="80%" top="6vh"
-      @close="productcloseDialog">
+    <el-dialog :append-to-body="true" :title="productCostAddDialogTitle"
+      :visible.sync="productCostAddVehicleFactorVisible" width="80%" top="6vh" @close="productcloseDialog">
       <el-tabs v-model="activeName" type="card">
         <el-tab-pane :label="tabtitle + '费用'" name="feiyong" class="tab-panestyle">
           <div class="tab-panecent">
@@ -335,7 +343,7 @@
           @click="productCostAddSubmit('productCostForm')">确 定</el-button>
       </span>
     </el-dialog>
-    <el-dialog  :append-to-body="true" :visible.sync="ddgjdialogVisible" width="25%" title="订单轨迹">
+    <el-dialog :append-to-body="true" :visible.sync="ddgjdialogVisible" width="25%" title="订单轨迹">
       <div class="tab-panestyle">
         <div style="height: 400px; overflow-y: auto;padding: 6px;">
           <el-steps direction="vertical" :active="trajectoryTable.length - 1">
@@ -351,7 +359,8 @@
         </div>
       </div>
     </el-dialog>
-    <el-dialog  :append-to-body="true" title="产品历史记录" :visible.sync="productHistoryRecordDialogVisible" width="70%" :fullscreen="true">
+    <el-dialog :append-to-body="true" title="产品历史记录" :visible.sync="productHistoryRecordDialogVisible" width="70%"
+      :fullscreen="true">
       <div class="p-2">
         <el-row class="queryFrom">
           <el-form ref="queryFormRef" :model="productHistoryRecordForm" label-width="80px">
@@ -393,9 +402,10 @@
       </div>
 
     </el-dialog>
-    <el-dialog  :append-to-body="true" title="批量操作" :visible.sync="batchdialogVisible" width="50%">
+    <el-dialog :append-to-body="true" title="批量操作" :visible.sync="batchdialogVisible" width="50%">
       <div class="tab-panestyle">
-        <el-form :inline="true" :model="batchUpdateForm" id="bulkOperation" class="demo-form-inline  tab-panecent" style="padding: 20px;">
+        <el-form :inline="true" :model="batchUpdateForm" id="bulkOperation" class="demo-form-inline  tab-panecent"
+          style="padding: 20px;">
           <!-- <el-row>
             <el-col :span="8">
               <el-form-item label="费用起期:">
@@ -412,7 +422,7 @@
               </el-form-item>
             </el-col>
           </el-row> -->
-          <el-row >
+          <el-row>
             <div class="title">交强险费用</div>
             <el-col :span="8">
               <el-form-item label="总费用比例" prop="jqCostsProportion">
@@ -552,14 +562,15 @@
           @click="batchCostsubmit">确 定</el-button>
       </span>
     </el-dialog>
-    <el-dialog  :append-to-body="true" title="费用复制窗口" :visible.sync="productCostCopyDialogVisible" :close-on-click-modal="false"
-      :fullscreen="true">
+    <el-dialog :append-to-body="true" title="费用复制窗口" :visible.sync="productCostCopyDialogVisible"
+      :close-on-click-modal="false" :fullscreen="true">
       <div class="p-2">
         <el-form :inline="true" :model="productcopyItemPageRequest" class="demo-form-inline" size="small"
           label-width="80px">
           <el-form-item label="选择协议">
             <el-select v-model="productcopyItemPageRequest.agreementId" placeholder="请选择协议">
-              <el-option v-for="(item, index) in protocolpageResult" :key="index" :label="`${item.agreementName}-${item.businessDescription}-${item.jobDescription}`"
+              <el-option v-for="(item, index) in protocolpageResult" :key="index"
+                :label="`${item.agreementName}-${item.businessDescription}-${item.jobDescription}`"
                 :value="item.id"></el-option>
             </el-select>
           </el-form-item>
@@ -582,8 +593,8 @@
             </el-date-picker>
           </el-form-item>
           <el-form-item label="费用描述">
-            <el-select style="width: 300px;"  v-model="productcopyItemPageRequest.costsDescription" multiple filterable allow-create default-first-option
-              placeholder="费用描述">
+            <el-select style="width: 300px;" v-model="productcopyItemPageRequest.costsDescription" multiple filterable
+              allow-create default-first-option placeholder="费用描述">
             </el-select>
           </el-form-item>
           <el-form-item>
@@ -597,7 +608,8 @@
         </kt-common-table>
       </div>
     </el-dialog>
-    <el-dialog  :append-to-body="true" title="产品费用历史记录详情" :visible.sync="productHistoryDetailsDialogVisible" width="80%" top="6vh">
+    <el-dialog :append-to-body="true" title="产品费用历史记录详情" :visible.sync="productHistoryDetailsDialogVisible" width="80%"
+      top="6vh">
       <div class="tab-panestyle">
         <Product-Cost-Form v-if="productHistoryDetailsDialogVisible" :form="dynamicFormArray" :operator="operatorlist"
           over-size="small" @cancelForm="productHistoryDetailsDialogVisible = false" :disabled="true"></Product-Cost-Form>
@@ -605,21 +617,22 @@
     </el-dialog>
 
 
-    <el-dialog  :append-to-body="true" title="批量修改起止时间" :visible.sync="showUpdate1" width="30%" top="6vh">
+    <el-dialog :append-to-body="true" title="批量修改起止时间" :visible.sync="showUpdate1" width="30%" top="6vh">
       <div class="tab-panestyle">
-        <el-form :inline="true" :model="batchUpdateForm1" id="bulkOperation" class="demo-form-inline  tab-panecent" style="padding: 20px;">
+        <el-form :inline="true" :model="batchUpdateForm1" id="bulkOperation" class="demo-form-inline  tab-panecent"
+          style="padding: 20px;">
           <el-row>
             <el-col :span="12">
               <el-form-item label="费用起期:">
-                <el-date-picker size="small"  v-model="batchUpdateForm1.costsStartDate" type="datetime"
+                <el-date-picker size="small" v-model="batchUpdateForm1.costsStartDate" type="datetime"
                   placeholder="选择开始日期" value-format="yyyy-MM-dd HH:mm:ss">
                 </el-date-picker>
               </el-form-item>
             </el-col>
             <el-col :span="12">
               <el-form-item label="费用止期:">
-                <el-date-picker size="small"  v-model="batchUpdateForm1.costsEndDate" type="datetime"
-                  placeholder="选择结束日期" value-format="yyyy-MM-dd HH:mm:ss" @change="checkStartDate1">
+                <el-date-picker size="small" v-model="batchUpdateForm1.costsEndDate" type="datetime" placeholder="选择结束日期"
+                  value-format="yyyy-MM-dd HH:mm:ss" @change="checkStartDate1">
                 </el-date-picker>
               </el-form-item>
             </el-col>
@@ -645,9 +658,9 @@ export default {
     KtCommonTable,
     ProductCostForm
   },
-  props:{
-    messageInfo:{
-      default:{}
+  props: {
+    messageInfo: {
+      default: {}
     }
   },
   data() {
@@ -982,6 +995,7 @@ export default {
         { prop: "desc", label: "费用因子描述", minWidth: 520 },
         { prop: "priorityLevel", label: "方案优先级", minWidth: 100 },
         { prop: "isAudit", label: "审核状态", minWidth: 120, formatter: this.auditTypeFormation },
+        { prop: "validStatus", label: "费用状态", minWidth: 200, formatter: this.validStatusFormation },
         {
           prop: "jqCarCostsProportion",
           label: "费用比例(交强)",
@@ -1175,6 +1189,7 @@ export default {
         pageNum: 1,
         pageSize: 20,
         agreementId: "",
+        validStatus: "",
       },
       productPageResult: [],
       insuranceCompanyId: "",
@@ -1232,7 +1247,7 @@ export default {
       showUpdate1: false,
       batchUpdateForm1: {},
       carClassList: [],
-      batchUpdatelist:[],
+      batchUpdatelist: [],
       lineData: {},
     }
   },
@@ -1261,10 +1276,10 @@ export default {
       if (res.code == 200) {
         this.protocolpageResult = res.data;
         this.protocolpageResult.forEach(item => {
-          item.agreementName == null ? item.agreementName='' : item.agreementName,
-          item.businessDescription ==  null ?  item.businessDescription='' : item.businessDescription,
-          item.jobDescription == null ? item.jobDescription=''  : item.jobDescription
-         });
+          item.agreementName == null ? item.agreementName = '' : item.agreementName,
+            item.businessDescription == null ? item.businessDescription = '' : item.businessDescription,
+            item.jobDescription == null ? item.jobDescription = '' : item.jobDescription
+        });
         console.log(this.protocolpageResult);
       } else {
         this.$message.error(res.msg);
@@ -1273,6 +1288,7 @@ export default {
   },
   // 方法函数
   methods: {
+
     disabledDate1(time) {
       let datetime = this.productcopyItemPageRequest.costStartDate;
       const disabledTime = new Date(datetime).getTime() - 8.64e7;
@@ -1693,30 +1709,63 @@ export default {
       // costsDateBatch
       this.showUpdate1 = true
     },
+    //批量禁用
+    batchdisableInBulkClick(data) {
+      this.$confirm('禁用后今日内可支付的订单将失效, 是否继续?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'danger'
+      }).then(() => {
+        this.$api.insCompany.productbatchDisable({ costsIdList: data }).then((res) => {
+          if (res.code == '200') {
+            this.$message({
+              type: 'success',
+              message: res.msg,
+            });
+            this.productCostFindPage();
+
+          } else {
+            this.$message({
+              type: 'error',
+              message: res.msg,
+            });
+          }
+        });
+      }).catch(() => {
+
+      });
+
+    },
     //产品批量编辑
     batchUpdate(data) {
-      let listName=[];
-      data.map(val=>{
-        let name=this.productPageResult.content.find(ele=>ele.id==val).productName;
+      let listName = [];
+      data.map(val => {
+        let name = this.productPageResult.content.find(ele => ele.id == val).productName;
         listName.push(name)
         return val;
       })
-      this.batchUpdatelist=listName;
+      this.batchUpdatelist = listName;
       console.log(this.batchUpdatelist)
       let contains1 = listName.every(item => ['单交'].includes(item));
-      let contains2 = listName.every(item => ['单商','单三'].includes(item));
-      let contains3 = listName.every(item => ['交商','交三'].includes(item));
-      if(contains1 || contains2 || contains3){
-      this.batchUpdateForm = {
-        ids: data,
-      };
-      this.batchdialogVisible = true;
-      }else{
+      let contains2 = listName.every(item => ['单商', '单三'].includes(item));
+      let contains3 = listName.every(item => ['交商', '交三'].includes(item));
+      if (contains1 || contains2 || contains3) {
+        this.batchUpdateForm = {
+          ids: data,
+        };
+        this.batchdialogVisible = true;
+      } else {
         return this.$message.error('险种选择错误,无法批量修改');
       }
     },
     //产品编辑
     productUpdate({ row, column }) {
+      if (row.validStatus === 1) {
+        return this.$message({
+          type: 'warning',
+          message: "请先禁用后再编辑费用",
+        });
+      }
       this.$api.insCompany.productcostFactorQuery(row.id).then((res) => {
         if (res.code == '200') {
           let obj = Object.assign({}, res.data);
@@ -1877,6 +1926,35 @@ export default {
       let expense = this.expenseAuditlist.find(val => val.value == expenseAudit).label;
       return <el-tag type="success">{expense}</el-tag>;
     },
+    validStatusFormation(row, column) {
+      let _this = this;
+      return <el-switch value={row.validStatus} active-value={1}
+        inactive-value={0} onChange={validStatuschange} ></el-switch>;
+      function validStatuschange(value) {
+        _this.$confirm('禁用后今日内可支付的订单将失效, 是否继续?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'danger'
+        }).then(() => {
+          _this.$api.insCompany.productdisable(row.id).then((res) => {
+            if (res.code == '200') {
+              _this.$message({
+                type: 'success',
+                message: res.msg,
+              });
+              _this.productCostFindPage();
+            } else {
+              _this.$message({
+                type: 'error',
+                message: res.msg,
+              });
+            }
+          });
+        }).catch(() => {
+        });
+      }
+    },
+
     operatorTypeFormatter(row, column) {
       let operatorType = row.operatorType;
       switch (operatorType) {
@@ -1918,7 +1996,7 @@ export default {
       }
       return contains
     },
-    batchUpdateincludes(){
+    batchUpdateincludes() {
       let a = ['单交'];
       let contains = this.batchUpdatelist.every(item => a.includes(item));
       return contains
@@ -2228,40 +2306,48 @@ export default {
   background: #f2f7fc;
   border-color: #fff;
 }
+
 // 批量操作弹窗样式
-#bulkOperation{
-  .title{
+#bulkOperation {
+  .title {
     color: #333;
     font-size: 16px;
     font-weight: 500;
     padding-bottom: 20px;
   }
-  .el-form-item{
+
+  .el-form-item {
     margin-bottom: 20px;
-    >>>.el-form-item__content{
+
+    >>>.el-form-item__content {
       width: 100%;
       line-height: normal;
-      .el-date-editor.el-input, .el-date-editor.el-input__inner{
+
+      .el-date-editor.el-input,
+      .el-date-editor.el-input__inner {
         width: 100%;
       }
     }
-    >>>.el-form-item__label{
+
+    >>>.el-form-item__label {
       height: 22px;
       line-height: 22px;
       margin-bottom: 10px;
     }
-    >>>.el-input-number{
+
+    >>>.el-input-number {
       width: 100%;
-      .el-input__inner{
+
+      .el-input__inner {
         color: #333;
         text-align: left;
-        &:focus{
+
+        &:focus {
           color: #333;
         }
       }
     }
   }
 }
-
 </style>
 

+ 28 - 2
src/views/Core/KtCommonTable.vue

@@ -166,6 +166,7 @@
           showBatchSettled ||
           showBatchPrint ||
           customToolseletted ||
+          disableInBulk ||
           select
         "
       ></el-table-column>
@@ -464,6 +465,16 @@
         style="float: left"
         v-if="customToolseletted"
       />
+      <kt-button
+        :label="disableInBulkName"
+        :perms="disableInBulkperms"
+        :size="size"
+        type="danger"
+        @click="disableInBulkClick()"
+        :disabled="selections.length === 0"
+        style="float: left"
+        v-if="disableInBulk"
+      />
       <kt-button
         :label="settledName"
         :perms="permsSettled"
@@ -554,7 +565,17 @@ export default {
       type: Boolean,
       default: false,
     },
-
+    disableInBulkName: {
+      type: String,
+    },
+    disableInBulkperms: {
+      type: String,
+    },
+    disableInBulk:{
+        // 批量禁用
+        type: Boolean,
+      default: false,
+    },
     settledName: {
       //批量按钮name
       type: String,
@@ -1204,7 +1225,12 @@ export default {
       this.selections.map((item) => idlist.push(item.id));
       this.$emit("customTool1", idlist);
     },
-
+    //批量导出
+    disableInBulkClick(){
+      let idlist = [];
+      this.selections.map((item) => idlist.push(item.id));
+      this.$emit("disableInBulkClick", idlist);
+    },
     // 删除操作
     delete: function (ids) {
       var _keyName = "id";

+ 9 - 0
src/views/Core/components/detailsDialogPro.vue

@@ -678,6 +678,15 @@
                   >
                     {{ kindinfoitem.deductibleRate }}
                   </span>
+                  <span
+                    v-else-if="
+                      ['TY1', 'TY2', 'TY3', 'TY4'].includes(
+                        kindinfoitem.kindCode
+                      )
+                    "
+                  >
+                    {{ kindinfoitem.serviceTimes }}次
+                  </span>
                   <span v-else>{{ kindinfoitem.amount }}</span>
                   <span>{{
                     kindinfoitem.coveragePremium

+ 119 - 2
src/views/FinancialManagement/ContractManagement/ContractManagement.vue

@@ -443,6 +443,7 @@
                   :label="item.accountName"
                 ></el-option>
               </el-select>
+              <el-button size="small" type="primary" @click="addAmount('1')">添加</el-button>
             </el-form-item>
           </el-col>
           <el-col :span="12">
@@ -477,6 +478,8 @@
                   :label="item.accountName"
                 ></el-option>
               </el-select>
+              <el-button size="small" type="primary" @click="addAmount('2')">添加</el-button>
+
             </el-form-item>
           </el-col>
           <el-col :span="12">
@@ -505,6 +508,7 @@
               "
             >
               <!-- <treeSelect :options="esmInsCompanyList" @getValue="getValue" /> -->
+              <!-- @select="handleSelect" -->
               <treeselect
                 style="width: 600px"
                 v-model="form.supplierIdList"
@@ -512,7 +516,7 @@
                 :options="esmInsCompanyList"
                 :normalizer="normalizer"
                 :multiple="true"
-                @select="handleSelect"
+               
                 :children-as-objects="true"
                 flat
               ></treeselect>
@@ -932,7 +936,7 @@
                     :options="esmInsCompanyList"
                     :normalizer="normalizer"
                     :multiple="true"
-                    @select="handleSelect"
+                    
                     :children-as-objects="true"
                     :disabled="true"
                   ></treeselect>
@@ -1104,6 +1108,19 @@
         >
       </span>
     </el-dialog>
+    <expense-component
+      ref="expenseComponent"
+      :type="1"
+      :formData="accountFormData "
+      :formDataId="''"
+      :title="'新增账户信息'"
+      :dialogFormVisible="dialogFormVisible"
+      :nature_businessData="nature_businessData"
+      @resetForm="resetFormItem"
+      @submitForm="submitForm"
+      
+    ></expense-component>
+    <!-- @setDateInterval="setDateInterval" -->
   </div>
 </template>
 
@@ -1115,15 +1132,20 @@ import "@vue-office/docx/lib/index.css";
 import KtButton from "@/views/Core/KtButton";
 
 import VueDocPreview from "vue-doc-preview";
+import ExpenseComponent from "../ExpenseManagement/ExpenseComponent.vue"; //新增账户信息弹框
+
 export default {
   components: {
     VueOfficeDocx,
     VueOfficePdf,
     KtButton,
     VueDocPreview,
+    ExpenseComponent
   },
   data() {
     return {
+      dialogFormVisible: false, //弹出框状态
+
       fileDialog: false,
       showFileList: [],
       formInline: {
@@ -1135,6 +1157,19 @@ export default {
         internalCompanyId: "",
         supplierIdList: [],
       },
+      //账户信息form
+      accountFormData: {
+        outerFlag: "0", //账户类别
+        accountName: "", //户名
+        businessQuality: "", //营业性质
+        establishTime: "", //成立日期
+        invoicingAmount: 0, //开票额度
+        juridicalPerson: "", //法人
+        owned: "", //所属地
+        biller: "", //开票员
+        tentativeEstimates: "", //暂估值
+        simpleName: "", //账户简称
+      },
       messageDialog: false,
       tableDialog: false,
       multipleSelection: [],
@@ -1255,6 +1290,9 @@ export default {
       contractStatus: "",
       shoulDisabled: true,
       isMessage: false,
+      nature_businessData: [], //营业性质数据字典
+      accountType:"",//1为甲方  2为乙方
+
     };
   },
   watch: {
@@ -1283,9 +1321,84 @@ export default {
     this.getEsmInsCompany();
     this.getContractType();
     this.getList();
+    this.business("nature_business"); //营业性质字典
     this.resetForm = { ...this.form };
   },
   methods: {
+    //数据字典
+    business(typeName) {
+      this.$api.dict.findByLableName(typeName).then((res) => {
+        this[typeName + "Data"] = res.data;
+      
+      });
+    },
+    //新增事件
+    addAmount(type) {
+      this.accountType=type
+      this.dialogFormVisible = true;
+      // this.resetFormItem();
+      this.accountFormData= {
+        outerFlag: "0", //账户类别
+        accountName: "", //户名
+        businessQuality: "", //营业性质
+        establishTime: "", //成立日期
+        invoicingAmount: 0, //开票额度
+        juridicalPerson: "", //法人
+        owned: "", //所属地
+        biller: "", //开票员
+        tentativeEstimates: "", //暂估值
+        simpleName: "", //账户简称
+      }
+    },
+     //提交
+     async submitForm() {
+      
+        //新增修改账户信息
+        let params = JSON.parse(JSON.stringify(this.accountFormData));
+       
+          //新增
+           this.$api.expense.insertAccount(params).then((res) => {
+            if (res.code == 200) {
+              this.$message({
+                message: "添加成功",
+                type: "success",
+              });
+              console.log(res.data)
+             
+              if(res.data.accountName==this.accountFormData.accountName){
+                if(this.accountType==1){
+                  this.form.externalCompaniesId=res.data.accountId
+                  this.getInvAccountList();
+
+                  this.resetFormItem();
+
+                }else{
+                  this.form.internalCompanyId=res.data.accountId
+                  this.getInvAccountList();
+
+                  this.resetFormItem();
+                }
+              }
+              //  this.getInvAccountList();
+              // this.getEsmInsCompany();
+             
+              // this.dialogFormVisible = false;
+            } else {
+              this.$message({
+                message: `添加失败, ${res.msg}`,
+                type: "error",
+              });
+            }
+          });
+        
+      
+    },
+     //弹框取消重置
+     resetFormItem() {
+      this.dialogFormVisible = false;
+    
+      this.$refs.expenseComponent.cleanForm();
+    },
     downLoadFile(row) {
       let name = row.fileName;
       fetch(`${process.env.BASE_URL}${row.url}`)
@@ -1653,6 +1766,7 @@ export default {
         if (res.code === 200) {
           this.esmInsCompanyList = [...res.data];
         }
+        
       });
     },
     //甲方/乙方选择
@@ -1705,10 +1819,13 @@ export default {
         if (res.code === 200) {
           this.accountList = [...res.data];
           const obj = {};
+         
           res.data.forEach((v, i) => {
             obj[v.accountId] = v.outerFlag;
+            
           });
           this.accountObj = { ...obj };
+          this.resetFormItem();
         }
       });
     },

+ 2 - 1
src/views/Letter/Wallet/BankCard.vue

@@ -112,6 +112,7 @@
   </div>
 </template>
 <!-- 行为区域 -->
+
 <script>
 import Cookies from "js-cookie";
 export default {
@@ -150,7 +151,7 @@ export default {
           { min: 11, max: 11, message: "请输入11位手机号码", trigger: "blur" },
           {
             pattern:
-              /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/,
+              /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[589])\d{8}$/,
             message: "请输入正确的手机号",
             trigger: "blur",
           },

+ 134 - 0
src/views/PeopleManage/Agent/AddCountDetail.vue

@@ -0,0 +1,134 @@
+<template>
+  <div class="quoteDetail">
+    <el-form ref="QuoteDetailForm" v-model="quoteDetailForm" :inline="true" label-width="130px">
+      <el-form-item style="width: 30%;" label="代理人信息">
+        <el-input size="small" v-model="quoteDetailForm.orderNumber" 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>
+      </el-form-item>
+      <el-form-item style="width: 30%;" label="操作时间">
+        <el-date-picker size="small" v-model="quoteDetailForm.rangeDate" 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.agentPeoeple" 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-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="name" label="姓名" width="150"></el-table-column>
+      <el-table-column prop="phone" 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 label="操作" fixed="right" width="200">
+        <template slot-scope="scope">
+          <kt-button label="详情" @click="dialogVisible = true" 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]"
+        :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total">
+      </el-pagination>
+    </div>
+    <el-dialog title="增加次数" :visible.sync="dialogVisible" width="40%">
+      <el-form style="width: 100%" ref="addCountForm" :model="addCountForm" disabled :inline="true" label-width="130px">
+        <el-form-item label="代理人" style="width: 80%">
+          <el-input style="width: 100%" v-model="addCountForm.agent"></el-input>
+        </el-form-item>
+        <el-form-item label="保险公司" style="width: 80%">
+          <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-form-item>
+        <el-form-item label="今日已承保" style="width: 80%">
+          <el-input v-model="addCountForm.had"></el-input>
+        </el-form-item>
+        <el-form-item label="报价出单比" style="width: 80%">
+          <el-input v-model="addCountForm.assign"></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-form-item>
+        <el-form-item label="备注" style="width: 80%">
+          <el-input type="textarea" v-model="addCountForm.tips"></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>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import KtButton from "../../Core/KtButton.vue";
+
+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
+      }],
+      pageNum: 1,
+      pageSize: 10,
+      total: 0,
+      dialogVisible: false,
+      addCountForm: {}
+    }
+  },
+  methods: {
+    handleSizeChange() {
+
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.flex-box {
+  display: flex;
+  align-items: center;
+  justify-content: flex-end;
+  margin: 10px 0;
+}
+
+/deep/ {
+  .el-form-item__content {
+    width: calc(100% - 150px);
+  }
+}
+</style>

+ 275 - 65
src/views/PeopleManage/Agent/QuoteCountManagement.vue

@@ -2,52 +2,53 @@
   <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">
           <el-col :span="18" style="padding-left: 20px">报价限制</el-col>
           <el-col :span="6">
-            <el-button type="primary" @click="handleSync">同步配置到其他保司</el-button>
-            <el-button type="primary" @click="handleEdit">编辑</el-button>
+            <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="handleSave" v-else>保存</el-button>
           </el-col>
         </el-row>
         <el-divider></el-divider>
-        <el-form :model="quoteForm" ref="QuoteForm" :rules="quoteRules" style="padding-left: 30px;" label-width="100px">
+        <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.count"></el-switch>
-            <p class="tips">开启后,代理人的报价次数将到限制,超出设置的报价次数后将停止代理人的报价功能</p>
+            <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" :disabled="!quoteForm.isEnabled">
+                <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 type="text" label="删除" style="color: #2D4D89;" />
+                  <kt-button :disabled="!quoteForm.isEnabled" type="text" label="删除" style="color: #2D4D89;" />
                 </template>
               </el-table-column>
             </el-table>
           </el-form-item>
           <el-form-item prop="quoteLimit" label="报价限制">
-            <el-checkbox-group v-model="quoteForm.quoteLimit">
+            <el-checkbox-group v-model="quoteForm.quoteLimit" :disabled="!quoteForm.isEnabled">
               <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" :disabled="!quoteForm.isEnabled" style="width: 100px; margin: 0 20px;">
                     <template slot="append">%</template>
                   </el-input>后,锁定代理人报价次数
                   </div>
@@ -57,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" :disabled="!quoteForm.isEnabled" style="width: 100px; margin: 0 20px;">
                     <template slot="append">次</template>
                   </el-input>后,锁定代理人报价次数
                   </div>
@@ -67,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" :disabled="!quoteForm.isEnabled" v-model="quoteForm.carMaxQuoteNum" style="width: 100px; margin: 0 20px;">
                     <template slot="append">次</template>
                   </el-input>后,锁定代理人报价次数
                   </div>
@@ -92,26 +93,74 @@
       </template>
     </el-dialog>
     <el-dialog
+      title="选择代理人"
       :visible.sync="agentTableShow"
       width="80%"
     >
+      <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="请输入工号、姓名查找" @change="() => {
+            pageNum = 1
+          }"></el-input>
+        </el-form-item>
+        <el-form-item style="width: 30%;" label="所属机构">
+          <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" @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;" @change="selectTypeChange">
+          <el-option label="选中所有数据" value="all"></el-option>
+          <el-option label="选中本页数据" value="cur"></el-option>
+        </el-select>
+        <el-divider direction="vertical"></el-divider>
+        <span>已经选择了{{ selectedLength }}条</span>
+      </div>
       <el-table
         :data="agentDataList"
+        ref="multipleTable"
         row-key="id"
-        style="width: 100%">
-        <el-table-column prop="code" label="部门编码"></el-table-column>
+        :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: {
@@ -119,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'
           }
@@ -152,48 +192,209 @@ 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: '',
-        organization: '',
-        department: '',
-        number: '',
-        name: '',
-        phone: ''
-      }]
+      agentDataList: [],
+      selectList: [], // 勾选的数据(格式为每页勾选的为一个数组并作为数组元素保存)
+      selectedList: [], // 勾选的数据(格式为平铺后)
+      pageList: [1], // 记录点击了的页码
+      selectedLength: 0, // 选择(包括全选后)的数据数量
+      total: 0,
+      countDetailForm: {},
+      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.quoteForm = {}
     },
+    // 同步到其他
     handleSync() {
       this.syncShow = true
     },
+    // 编辑
     handleEdit() {
 
     },
+    // 保存
+    handleSave() {
+      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)
+            if(res.code == 200) {
+              this.$message.success(res.msg)
+              this.quoteForm = {}
+            } else {
+              this.$message.error(res.msg)
+            }
+          })
+        } 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>
 
-<style lang="scss">
+<style scoped>
 .QuoteCountManagement{
   width: 100%;
   height: 100%;
@@ -214,10 +415,19 @@ export default {
   color: #1890FF;
   font-weight: 700;
 }
+.pagination-box{
+  display: flex;
+  align-items: center;
+  justify-content: flex-end;
+  margin-top: 10px;
+}
 /deep/.el-divider--horizontal{
   margin: 12px 0;
 }
 /deep/.el-input__inner{
   padding-left: 34px !important;
 }
+/deep/.select-box .el-input__inner{
+  border: none !important;
+}
 </style>

+ 104 - 0
src/views/PeopleManage/Agent/QuoteDetail.vue

@@ -0,0 +1,104 @@
+<template>
+  <div class="quoteDetail">
+    <el-form ref="QuoteDetailForm" v-model="quoteDetailForm" :inline="true" label-width="130px">
+      <el-form-item style="width: 30%;" label="报价时间">
+        <el-date-picker
+          size="small"
+          v-model="quoteDetailForm.rangeDate"
+          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.orderNumber" 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>
+      </el-form-item>
+      <el-form-item style="width: 30%;" label="代理人">
+        <el-input size="small" v-model="quoteDetailForm.agentPeoeple" 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-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>
+      </el-form-item>
+      <el-form-item style="width: 30%;" label="操作人">
+        <el-input size="small" v-model="quoteDetailForm.person" 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-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="订单号">
+        <template slot-scope="scope">
+          <a>{{ scope.row.orderNumber }}</a>
+        </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>
+    <div class="flex-box">
+      <el-pagination
+        @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>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      quoteDetailForm: {},
+      tableData: [],
+      pageNum: 1,
+      pageSize: 10,
+      total: 0
+    }
+  },
+  methods: {
+    handleSizeChange() {
+
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.flex-box{
+  display: flex;
+  align-items: center;
+  justify-content: flex-end;
+  margin: 10px 0;
+}
+/deep/ {
+  .el-form-item__content {
+    width: calc(100% - 150px);
+  }
+}
+</style>

+ 91 - 48
src/views/PeopleManage/Agent/QuoteManagement.vue

@@ -1,43 +1,56 @@
 <template>
   <div class="quoteManagement">
-    <el-row :gutter="20">
-      <el-form ref="QuoteForm" :model="quoteForm" :inline="true" label-width="130px">
-        <el-col :span="6">
-          <el-form-item label="代理人信息">
-            <el-input v-model="quoteForm.people" size="small" placeholder="请输入姓名和手机号查找"></el-input>
-          </el-form-item>
-        </el-col>
-        <el-col :span="6">
-          <el-form-item label="工号">
-            <el-input v-model="quoteForm.number" size="small" placeholder="请输入工号查找"></el-input>
-          </el-form-item>
-        </el-col>
-        <el-col :span="6">
-          <el-form-item label="保险公司">
-            <el-select v-model="quoteForm.company" size="small"></el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="6">
-          <el-button size="small">重置</el-button>
-          <el-button type="primary" size="small">查询</el-button>
-        </el-col>
-      </el-form>
-    </el-row>
+    <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-form-item>
+      <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="保险公司" 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>
+        <el-button type="primary" size="small">查询</el-button>
+      </el-form-item>
+    </el-form>
     <el-table
       :data="quoteData"
     >
-      <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="" 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="" label="累计承保(单)"></el-table-column>
-      <el-table-column label="操作">
+      <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">
+        <template slot="header" slot-scope="scope">
+          <div>
+            <span>报价出单比</span>
+            <el-popover
+              popper-class="popover-box"
+              placement="top-end"
+              title=""
+              width="250"
+              trigger="hover"
+              content="报价出单比=承保单数/报价单数*100%
+(四舍五入到小数点后两位)"
+            >
+              <i slot="reference" class="el-icon-question"></i>
+            </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 label="操作" width="200" fixed="right">
         <template slot-scope="scope">
           <kt-button label="增加次数" size="small" type="text" perms="agreement:input:delete"
                      @click="addCount(scope.$index, scope.row)" style="color: #D42426 !important " />
@@ -57,27 +70,28 @@
     <el-dialog
       title="增加次数"
       :visible.sync="dialogVisible"
-      width="30%">
+      width="40%">
       <el-form style="width: 100%" ref="AddForm" :model="addForm" :inline="true" label-width="130px">
-        <el-form-item label="代理人" style="width: 100%">
+        <el-form-item label="代理人" style="width: 80%">
           <el-input style="width: 100%" v-model="addForm.agent" disabled></el-input>
         </el-form-item>
-        <el-form-item label="保险公司">
+        <el-form-item label="保险公司" style="width: 80%">
           <el-input v-model="addForm.company" disabled></el-input>
         </el-form-item>
-        <el-form-item label="今日已报价">
+        <el-form-item label="今日已报价" style="width: 80%">
           <el-input v-model="addForm.hadQuote" disabled></el-input>
         </el-form-item>
-        <el-form-item label="今日已承保">
+        <el-form-item label="今日已承保" style="width: 80%">
           <el-input v-model="addForm.had" disabled></el-input>
         </el-form-item>
-        <el-form-item label="报价出单比">
+        <el-form-item label="报价出单比" style="width: 80%">
           <el-input v-model="addForm.assign" disabled></el-input>
+          <span style="font-size: 12px; color: #999;">报价出单比=承保单数/报价单数*100%(四舍五入到小数点后两位)</span>
         </el-form-item>
-        <el-form-item label="增加次数">
+        <el-form-item label="增加次数" style="width: 80%">
           <el-input v-model="addForm.count"></el-input>
         </el-form-item>
-        <el-form-item label="备注">
+        <el-form-item label="备注" style="width: 80%">
           <el-input type="textarea" v-model="addForm.tips"></el-input>
         </el-form-item>
       </el-form>
@@ -92,7 +106,6 @@
 <script>
 import KtButton from "@/views/Core/KtButton";
 export default {
-  name: "index.vue",
   components: {
     KtButton
   },
@@ -110,27 +123,57 @@ 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>
 
-<style scoped lang="scss">
+<style lang="scss" scoped>
+/deep/ {
+  .el-form-item__content {
+    width: calc(100% - 130px);
+  }
+}
 .flex-box{
   display: flex;
   align-items: center;
   justify-content: flex-end;
 }
-.el-form-item__content{
-  width: 100%;
+
+.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>

+ 1 - 1
src/views/PeopleManage/Sales/SalesExamine.vue

@@ -630,7 +630,7 @@ export default {
           });
         });
         //添加电销负责人
-        this.$api.user.findDxUserList().then((res) => {
+        this.$api.user.findDxUserList("2").then((res) => {
           this.managerOptions = res.data;
         }); 
     },

+ 1 - 1
src/views/PeopleManage/Sales/SalesExamineGroup.vue

@@ -626,7 +626,7 @@ export default {
           this.searchLeaderOptions = [...res.data];
         });
         //添加电销负责人
-        this.$api.user.findDxUserList().then((res) => {
+        this.$api.user.findDxUserList("1").then((res) => {
           this.managerOptions = res.data;
         }); 
     },

+ 1 - 1
src/views/PeopleManage/Sales/SalesManage.vue

@@ -826,7 +826,7 @@ export default {
           this.searchLeaderOptions = res.data;
         });
       //添加电销负责人
-      this.$api.user.findDxUserList().then((res) => {
+      this.$api.user.findDxUserList("2").then((res) => {
         this.managerOptions = res.data;
       });
     },

+ 1 - 1
src/views/PeopleManage/Sales/SalesManageGroup.vue

@@ -804,7 +804,7 @@ export default {
           this.searchLeaderOptions = res.data;
         });
         //添加电销负责人
-        this.$api.user.findDxUserList().then((res) => {
+        this.$api.user.findDxUserList("1").then((res) => {
         this.managerOptions = res.data;
       }); 
     },

+ 420 - 0
src/views/Sys/DataPermissions.vue

@@ -0,0 +1,420 @@
+<template>
+  <div class="page-container">
+	<!--工具栏-->
+	<div class="toolbar" style="float:left;padding-top:10px;padding-left:15px;">
+		<el-form :inline="true" :model="filters" :size="size">
+			<el-form-item>
+				<el-input v-model="filters.name" placeholder="名称"></el-input>
+			</el-form-item>
+			<el-form-item>
+				<kt-button style="background-color: #5DADFF ;border:#5DADFF;" icon="fa fa-search" :label="$t('action.search')" perms="sys:menu:view" type="primary" @click="findTreeData(null)"/>
+			</el-form-item>
+			<!-- <el-form-item>
+				<kt-button style="background-color: #52C578;border:#52C578;" icon="fa fa-plus" :label="$t('action.add')" perms="sys:menu:add" type="primary" @click="handleAdd"/>
+			</el-form-item> -->
+		</el-form>
+	</div>
+	<!--表格树内容栏-->
+    <el-table :data="tableTreeDdata" stripe size="mini" style="width: 100%;"
+      rowKey="id" v-loading="loading" element-loading-text="$t('action.loading')">
+      <el-table-column
+        prop="id" header-align="center" align="center" width="100" label="ID">
+      </el-table-column>
+      <table-tree-column
+        prop="name" header-align="center" treeKey="id" width="220" label="名称">
+      </table-tree-column>
+      <el-table-column header-align="center" align="center" label="图标">
+        <template slot-scope="scope">
+          <!-- <i :class="scope.row.icon || ''"></i> -->
+          <!-- <svg class="icon" aria-hidden="true">
+        <use xlink:href="#icon-chexianjiesuan-yixuanzhong"></use>
+    </svg> -->
+    <svg aria-hidden="true"  style="    width: 15px;height: 15px;" >
+      <use :href="`#${scope.row.icon}`"></use>
+  </svg>
+        </template>
+      </el-table-column>
+      <el-table-column prop="type" header-align="center" align="center" label="类型">
+        <template slot-scope="scope">
+          <el-tag v-if="scope.row.type === 0" size="small">目录</el-tag>
+          <el-tag v-else-if="scope.row.type === 1" size="small" type="success">菜单</el-tag>
+          <el-tag v-else-if="scope.row.type === 2" size="small" type="info">按钮</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="parentName" header-align="center" align="center" width="120" label="上级菜单">
+      </el-table-column>
+      <el-table-column
+        prop="url" header-align="center" align="center" width="150"
+        :show-overflow-tooltip="true" label="菜单URL">
+      </el-table-column>
+      <el-table-column
+        prop="perms" header-align="center" align="center" width="150"
+        :show-overflow-tooltip="true" label="授权标识">
+      </el-table-column>
+      <el-table-column
+        prop="orderNum" header-align="center" align="center" label="排序">
+      </el-table-column>
+      <el-table-column
+        fixed="right" header-align="center" align="center" width="185" :label="$t('action.operation')">
+        <template slot-scope="scope">
+          <kt-button 
+          v-if="scope.row.type === 1"
+            label="数据权限" 
+            sperms="sys:dataPermissions:save" 
+            @click="handPermissions(scope.row)"
+            type="primary"
+          />
+          <kt-button 
+          v-if="scope.row.type === 1"
+            label="详情" 
+            sperms="sys:dataPermissions:view" 
+            @click="watchPermissions(scope.row)"
+            type="primary"
+          />
+          <!-- <kt-button icon="fa fa-trash" :label="$t('action.delete')" perms="sys:menu:delete" type="danger" @click="handleDelete(scope.row)"/> -->
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <el-dialog title="数据权限设置" :visible.sync="dialogFormVisible">
+      <el-form :model="form" label-width="150px" :rules="rules" ref="ruleForm">
+        <el-form-item label="规则名称" prop="ruleName">
+          <el-input v-model="form.ruleName" size="small" ></el-input>
+        </el-form-item>
+        <el-form-item label="规则字段"  prop="ruleField">
+          <el-input v-model="form.ruleField" size="small" ></el-input>
+        </el-form-item>
+        <el-form-item label="条件规则" prop="ruleCondition">
+          <el-select v-model="form.ruleCondition" placeholder="请选择条件规则" size="small" @change="ruleChange">
+            <el-option v-for="item in conditionalRule" :key="item.value" :label="item.label" :value="item.value"
+            ></el-option>
+            <!-- <el-option label="区域二" value="beijing"></el-option> -->
+          </el-select>
+        </el-form-item>
+        <el-form-item label="规则值" prop="ruleValue" v-if="form.ruleCondition!='9'">
+          <el-input v-model="form.ruleValue" size="small"></el-input>
+        </el-form-item>
+        <el-form-item label="接口地址" prop="interfaceUrl">
+          <el-input v-model="form.interfaceUrl" size="small"></el-input>
+        </el-form-item>
+        <!-- <el-form-item label="接口地址" >
+          <el-input v-model="form.interfaceUrl" size="small"></el-input>
+        </el-form-item> -->
+        <el-form-item label="自定义SQL" v-if="form.ruleCondition=='9'">
+          <el-input v-model="form.customSql" size="small"></el-input>
+        </el-form-item>
+        
+        <el-form-item label="状态" prop="status">
+        
+            <el-radio-group v-model="form.status"  size="mini">
+              <el-radio-button label="有效" :value="1"></el-radio-button>
+              <el-radio-button label="无效" :value="0"></el-radio-button>
+            </el-radio-group>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="cancel">取 消</el-button>
+        <el-button type="primary" @click="submit" :disabled="btnDisabled">确 定</el-button>
+      </div>
+    </el-dialog>
+    <el-dialog title="权限详情" :visible.sync="messageDialog">
+      <el-table :data="messageList">
+        <el-table-column property="ruleName" label="规则名称" ></el-table-column>
+        <el-table-column property="ruleField" label="规则字段" ></el-table-column>
+        <el-table-column property="ruleCondition" label="条件规则">
+          <template slot-scope="scope">
+              {{conditionalRule.find((v,i)=>{
+               
+                return v.value==scope.row.ruleCondition 
+                 
+              }).label }}
+          </template>
+        </el-table-column>
+        <el-table-column property="ruleValue" label="规则值"></el-table-column>
+        <el-table-column property="status" label="状态">
+          <template slot-scope="scope">
+              {{ scope.row.status=='1' ? '有效':'无效' }}
+          </template>
+        </el-table-column>
+        <el-table-column property="createTime" label="创建日期"></el-table-column>
+        <el-table-column property="operation" label="操作">
+          <template slot-scope="scope">
+            <kt-button 
+              label="编辑" 
+              sperms="sys:dataPermissions:update" 
+              @click="updatePermission(scope.row)"
+              type="primary"
+            />
+          </template>
+        </el-table-column>
+      </el-table>
+      <el-pagination
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        :current-page="pageInfo.pageNum"
+        :page-sizes="[10, 20, 30, 40]"
+        :page-size="pageInfo.pageSize"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="pageInfo.total">
+      </el-pagination>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import KtButton from "@/views/Core/KtButton";
+import TableTreeColumn from "@/views/Core/TableTreeColumn";
+import PopupTreeInput from "@/components/PopupTreeInput";
+import FaIconTooltip from "@/components/FaIconTooltip";
+export default {
+  components: {
+    PopupTreeInput,
+    KtButton,
+    TableTreeColumn,
+    FaIconTooltip
+  },
+  data() {
+    return {
+      size: "small",
+      loading: false,
+      filters: {
+        name: ""
+      },
+      tableTreeDdata: [],
+      dialogVisible: false,
+      menuTypeList: ["目录", "菜单", "按钮"],
+      dataForm: {
+        id: 0,
+        type: 1,
+        name: "",
+        parentId: 0,
+        parentName: "",
+        url: "",
+        perms: "",
+        orderNum: 0,
+        icon: "",
+        iconList: []
+      },
+      dataRule: {
+        name: [{ required: true, message: "菜单名称不能为空", trigger: "blur" }]
+      },
+      popupTreeData: [],
+      popupTreeProps: {
+        label: "name",
+        children: "children"
+      },
+      dialogFormVisible:false,
+      form:{
+       
+        interfaceUrl: "",//接口地址
+        menuId: "",//菜单id
+        ruleCondition: "",//条件规则
+        ruleField: "",//规则字段
+        ruleName: "",//规则名称
+        ruleValue: "",//规则值
+        status: "",//状态
+      },
+      rules: {
+        ruleName: [
+            {required: true,message: '请输入规则名称', trigger: 'blur' }
+          ],
+          ruleField: [
+            {required: true, message: '请选择规则字段', trigger: 'blur' }
+          ],
+          ruleCondition: [
+            {  required: true, message: '请选择条件规则', trigger: 'change' }
+          ],
+          ruleValue: [
+             {required: true, message: '请输入规则值', trigger: 'blur' }
+          ],
+          interfaceUrl: [
+            {required: true, message: '请输入接口地址', trigger: 'blur' }
+          ],
+          status: [
+            { required: true, message: '请选择状态', trigger: 'change' }
+          ],
+          
+      },
+      conditionalRule:[],
+      btnDisabled:false,
+      messageDialog:false,
+      messageList:[],
+      pageInfo:{
+        pageNum:1,
+        pageSize:10,
+        total:0
+      }
+    };
+  },
+  mounted() {
+    this.findTreeData();
+    this.getRulesMenu()
+  },
+  methods: {
+    //条件规则更改
+    ruleChange(val){
+      // console.log(val)
+      if(val==9){
+        this.form.ruleValue=''
+      }else{
+        this.form.customSql=''
+      }
+    },  
+    //获取字典
+    getRulesMenu(){
+      this.$api.dict.findByLableName('permission_operator').then(res=>{
+        if(res.code===200){
+          this.conditionalRule=[...res.data]
+        }
+      })
+    },
+    cancel() {
+      this.form = {};
+      this.dialogFormVisible = false;
+      this.$nextTick(() => {
+        this.$refs.ruleForm.clearValidate();
+      });
+    },
+    //新增
+    submit() {
+      this.$refs["ruleForm"].validate((valid) => {
+        if (valid) {
+          this.btnDisabled = true;
+          
+            this.$api.sys
+              .dataPermissionsUpdate({
+                ...this.form,
+                status:this.form.status=="有效" ? 1:0
+              })
+              .then((res) => {
+                if (res.code === 200) {
+                  this.$message.success(res.msg);
+                  this.dialogFormVisible = false;
+                  this.btnDisabled = false;
+                  this.$nextTick(() => {
+                    this.$refs.ruleForm.clearValidate();
+                  });
+                  this.findTreeData();
+                  if(this.messageDialog){
+                    this.getMessageList()
+                  }
+                } else {
+                  this.$message.error(res.msg);
+                  this.btnDisabled = false;
+                }
+              });
+          
+        }
+      });
+    },
+    // 获取数据
+    findTreeData: function() {
+      this.loading = true;
+      this.$api.menu.findMenuTree().then(res => {
+        this.tableTreeDdata = res.data;
+        this.popupTreeData = this.getParentMenuTree(res.data);
+        this.loading = false;
+      });
+    },
+    // 获取上级菜单树
+    getParentMenuTree: function(tableTreeDdata) {
+      let parent = {
+        parentId: 0,
+        name: "顶级菜单",
+        children: tableTreeDdata
+      };
+      return [parent];
+    },
+   
+    
+    // 删除
+    handleDelete(row) {
+      this.$confirm("确认删除选中记录吗?", "提示", {
+        type: "warning"
+      }).then(() => {
+        let params = this.getDeleteIds([], row);
+        this.$api.menu.batchDelete(params).then(res => {
+          this.findTreeData();
+          this.$message({ message: "删除成功", type: "success" });
+        });
+      });
+    },
+    // 获取删除的包含子菜单的id列表
+    getDeleteIds(ids, row) {
+      ids.push({ id: row.id });
+      if (row.children != null) {
+        for (let i = 0, len = row.children.length; i < len; i++) {
+          this.getDeleteIds(ids, row.children[i]);
+        }
+      }
+      return ids;
+    },
+   
+    // 图标选中
+    iconActiveHandle(iconName) {
+      this.dataForm.icon = iconName;
+    },
+    //给菜单设置数据权限
+    handPermissions(data){
+    
+      this.dialogFormVisible=true
+      this.form.menuId=data.id
+    },
+    //修改菜单的数据权限-单项
+    updatePermission(data){
+      
+      this.$api.sys.getDataPermissionsItem(data.id).then(res=>{
+        // console.log(res)
+        if(res.code===200){
+          this.form={...res.data}
+          // console.log(res.data.status)
+          this.form.status=res.data.status=='0' ? '无效':'有效'
+          console.log(this.form)
+
+          this.dialogFormVisible=true
+        }
+      })
+    },
+    //查看菜单的数据权限列表
+    watchPermissions(data){
+      // console.log(data)
+      this.form.menuId=data.id
+      this.messageDialog=true
+      this.getMessageList()
+
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.pageInfo.pageSize=val
+
+      this.getMessageList()
+    },
+    handleCurrentChange(val) {
+      this.pageInfo.pageNum=val
+
+      // console.log(`当前页: ${val}`);
+      this.getMessageList()
+
+    },
+    getMessageList(){
+      this.$api.sys.getDataPermissions({
+        menuId:this.form.menuId,
+        ...this.pageInfo
+
+      }).then(res=>{
+       
+        if(res.code===200){
+          this.messageList=[...res.data.records]
+          this.pageInfo.total=res.data.total
+        }
+      })
+    },
+    
+  },
+  
+};
+</script>
+
+<style scoped>
+</style>

+ 126 - 405
src/views/Sys/Deptall.vue

@@ -5,220 +5,90 @@
       <el-main ref="elMain" style="padding: 0px">
         <!-- 新增展开折叠 -->
         <div style="margin-bottom: 20px; margin-top: 15px" class="flex a-start">
-          <el-button
-            size="small"
-            type="primary"
-            plain
-            icon="el-icon-plus"
-            :label="$t('action.addCompany')"
-            @click="handleAddCompany"
-            >新增子公司</el-button
-          >
-          <el-button
-            size="small"
-            type="warning"
-            plain
-            icon="el-icon-plus"
-            :label="$t('action.addDept')"
-            @click="handleAddDept"
-            >新增部门</el-button
-          >
-          <el-button
-            size="small"
-            type="info"
-            plain
-            icon="el-icon-sort"
-            @click="fold()"
-            >展开折叠</el-button
-          >
-          <el-form
-            :inline="true"
-            class="demo-form-inline"
-            size="small"
-            style="margin-left: 30px"
-          >
+          <el-button size="small" type="primary" plain icon="el-icon-plus" :label="$t('action.addCompany')"
+            @click="handleAddCompany">新增子公司</el-button>
+          <el-button size="small" type="warning" plain icon="el-icon-plus" :label="$t('action.addDept')"
+            @click="handleAddDept">新增部门</el-button>
+          <el-button size="small" type="info" plain icon="el-icon-sort" @click="fold()">展开折叠</el-button>
+          <el-form :inline="true" class="demo-form-inline" size="small" style="margin-left: 30px">
             <el-form-item label="机构编码:">
-              <el-input
-                clearable
-                v-model="peopledeptid"
-                placeholder="请输入机构编码"
-              ></el-input>
+              <el-input clearable v-model="peopledeptid" placeholder="请输入机构编码"></el-input>
             </el-form-item>
             <el-form-item label="业务来源:">
-              <el-select
-                v-model="managementSource"
-                placeholder="选择业务来源"
-                clearable
-              >
-                <el-option
-                  v-for="val in business_sourceoptions"
-                  :key="val.value"
-                  :label="val.label"
-                  :value="val.value"
-                ></el-option>
+              <el-select v-model="managementSource" placeholder="选择业务来源" clearable>
+                <el-option v-for="val in business_sourceoptions" :key="val.value" :label="val.label"
+                  :value="val.value"></el-option>
               </el-select>
             </el-form-item>
             <el-form-item>
-              <el-button
-                type="primary"
-                size="small"
-                @click="managementSourceQuery"
-                >查询</el-button
-              >
+              <el-button type="primary" size="small" @click="managementSourceQuery">查询</el-button>
             </el-form-item>
           </el-form>
         </div>
         <!-- 表格渲染 -->
-        <el-table
-          permsEdit="sys:dept:edit"
-          height="720"
-          permsDelete="sys:dept:delete"
-          row-key="id"
-          :expand-row-keys="['9']"
-          v-loading="loading"
-          border
-          :data="ztreeNodes"
-          :tree-props="{ children: 'children', hasChildren: 'hasChilkdren' }"
-          :header-cell-style="{
+        <el-table permsEdit="sys:dept:edit" height="720" permsDelete="sys:dept:delete" row-key="id"
+           v-loading="loading" border :data="ztreeNodes" default-expand-all
+          :tree-props="{ children: 'children', hasChildren: 'hasChildren' }" :header-cell-style="{
             background: '#F2F7FC',
             fontWeight: '900',
             color: '#606266',
-          }"
-          size="small"
-          ref="expandTable"
-          highlight-current-row
-          @row-click="rowClick"
-        >
+          }" size="small" ref="expandTable" highlight-current-row @row-click="rowClick">
           <el-table-column prop="name" label="部门管理" width="300">
           </el-table-column>
-          <el-table-column
-            prop="deptCount"
-            label="部门数量"
-            width="80"
-            align="center"
-          >
+          <el-table-column prop="deptCount" label="部门数量" width="80" align="center">
           </el-table-column>
-          <el-table-column prop="id" label="ID" width="150" align="center">
+          <!-- <el-table-column prop="id" label="ID" width="150" align="center">
+          </el-table-column> -->
+          <el-table-column prop="comlevel" label="机构级别" :formatter="comlevelFormatter" align="center"
+            width="150"></el-table-column>
+          <el-table-column prop="comattribute" label="机构性质" :formatter="comattributeFormatter" align="center" width="150">
           </el-table-column>
-          <el-table-column
-            prop="comlevel"
-            label="机构级别"
-            :formatter="comlevelFormatter"
-            align="center"
-            width="150"
-          ></el-table-column>
-          <el-table-column
-            prop="comattribute"
-            label="机构性质"
-            :formatter="comattributeFormatter"
-            align="center"
-            width="150"
-          >
+          <el-table-column prop="comtype" label="机构类型" :formatter="comtypeFormatter" align="center" width="150">
           </el-table-column>
-          <el-table-column
-            prop="comtype"
-            label="机构类型"
-            :formatter="comtypeFormatter"
-            align="center"
-            width="150"
-          >
-          </el-table-column>
-          <el-table-column
-            prop="managementSource"
-            label="业务来源"
-            align="center"
-            width="150"
-          >
+          <!-- <el-table-column prop="managementSource" label="业务来源" align="center" width="150">
             <template slot-scope="scope">
-              <span v-for="(item, index) in business_sourceoptions" :key="index" v-show="item.value == scope.row.managementSource">{{ item.label }}</span>
+              <span v-for="(item, index) in business_sourceoptions" :key="index"
+                v-show="item.value == scope.row.managementSource">{{ item.label }}</span>
             </template>
-          </el-table-column>
+          </el-table-column> -->
           <el-table-column prop="address" label="机构地址" align="center">
           </el-table-column>
           <el-table-column prop="leadername" label="负责人" align="center">
           </el-table-column>
-          <el-table-column
-            label="操作"
-            fixed="right"
-            align="center"
-            width="150"
-          >
+          <el-table-column label="操作" fixed="right" align="center" width="150">
             <template slot-scope="scope">
-              <KtButton
-                :perms="'sys:institution:edit'"
-                :size="'medium'"
-                :type="'text'"
-                :label="'编辑'"
-                @click.native.stop="handleEdit(scope.row)"
-                @findPage="findSubDeptPage"
-              ></KtButton>
-              <KtButton
-                :perms="'sys:institution:delete'"
-                v-show="scope.row.parentId != '0'"
-                :size="'medium'"
-                :type="'text'"
-                :label="'删除'"
-                @click.native.stop="deleteMechanism(scope.row)"
-              ></KtButton>
-              <KtButton
-                :size="'medium'"
-                :type="'text'"
-                :label="'设置机构负责人'"
-                @click.native.stop="setLeadUserId(scope.row)"
-              ></KtButton>
+              <KtButton :perms="'sys:institution:edit'" :size="'medium'" :type="'text'" :label="'编辑'"
+                @click.native.stop="handleEdit(scope.row)" @findPage="findSubDeptPage"></KtButton>
+              <KtButton :perms="'sys:institution:delete'" v-show="scope.row.parentId != '0'" :size="'medium'"
+                :type="'text'" :label="'删除'" @click.native.stop="deleteMechanism(scope.row)"></KtButton>
+              <KtButton :size="'medium'" :type="'text'" :label="'设置机构负责人'" @click.native.stop="setLeadUserId(scope.row)">
+              </KtButton>
             </template>
           </el-table-column>
         </el-table>
       </el-main>
     </el-container>
     <!-- 新增修改机构界面 -->
-    <el-dialog
-      :title="dialogTitle"
-      width="1000px"
-      :visible.sync="dialogVisible"
-      :close-on-click-modal="false"
-      v-dialogDrag
-      @close="closeDialog"
-    >
-      <el-form
-        :model="dataForm"
-        :rules="dataRule"
-        ref="dataForm"
-        @keyup.enter.native="submitForm()"
-        label-width="100px"
-        size="small"
-        style="text-align: left"
-      >
+    <el-dialog :title="dialogTitle" width="1000px" :visible.sync="dialogVisible" :close-on-click-modal="false"
+      v-dialogDrag @close="closeDialog">
+      <el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="submitForm()" label-width="100px"
+        size="small" style="text-align: left">
         <el-row>
           <el-col :span="8">
             <el-form-item label="机构编码" prop="id">
-              <el-input
-                style="width: 100%"
-                v-model="dataForm.id"
-                placeholder="机构编码"
-                :disabled="operType != 'ADDC'"
-              ></el-input>
+              <el-input style="width: 100%" v-model="dataForm.id" placeholder="机构编码"
+                :disabled="operType != 'ADDC'"></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="机构名称" prop="name">
-              <el-input
-                style="width: 100%"
-                v-model="dataForm.name"
-                placeholder="机构名称"
-              ></el-input>
+              <el-input style="width: 100%" v-model="dataForm.name" placeholder="机构名称"></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="上级机构" prop="parentName">
-              <span
-                style="width: 100%"
-                v-if="
-                  currentTreeNode && currentTreeNode.id == dataForm.parentId
-                "
-                class="span-disabled"
-                >{{ currentTreeNode.name }}</span
-              >
+              <span style="width: 100%" v-if="currentTreeNode && currentTreeNode.id == dataForm.parentId
+                " class="span-disabled">{{ currentTreeNode.name }}</span>
               <!-- <span v-if="currentTreeNode && (currentTreeNode.id == dataForm.parentId)" class="span-disabled" >{{currentTreeNode.name}}-{{currentTreeNode.id}}</span> -->
               <span style="width: 100%" v-else class="span-disabled">{{
                 dataForm.parentId
@@ -230,61 +100,28 @@
           <el-col :span="24">
             <el-col :span="8">
               <el-form-item label="省公司" prop="province">
-                <el-select
-                  :disabled="!disabledAddress.province"
-                  @change="selectProvince"
-                  value-key="areaCname"
-                  style="width: 100%"
-                  v-model="selectAddress.province"
-                  placeholder="请选择省"
-                  size="small"
-                >
-                  <el-option
-                    v-for="item in provinces"
-                    :value="item"
-                    :key="item.areaCode"
-                    :label="item.areaCname"
-                  ></el-option>
+                <el-select :disabled="!disabledAddress.province" @change="selectProvince" value-key="areaCname"
+                  style="width: 100%" v-model="selectAddress.province" placeholder="请选择省" size="small">
+                  <el-option v-for="item in provinces" :value="item" :key="item.areaCode"
+                    :label="item.areaCname"></el-option>
                 </el-select>
               </el-form-item>
             </el-col>
             <el-col :span="8">
               <el-form-item label="支公司" prop="city">
-                <el-select
-                  :disabled="!disabledAddress.city"
-                  @change="selectCity"
-                  value-key="areaCname"
-                  style="width: 100%"
-                  v-model="selectAddress.city"
-                  placeholder="请选择市"
-                  size="small"
-                >
-                  <el-option
-                    v-for="(item, index) in cities"
-                    :key="index"
-                    :value="item"
-                    :label="item.areaCname"
-                  ></el-option>
+                <el-select :disabled="!disabledAddress.city" @change="selectCity" value-key="areaCname"
+                  style="width: 100%" v-model="selectAddress.city" placeholder="请选择市" size="small">
+                  <el-option v-for="(item, index) in cities" :key="index" :value="item"
+                    :label="item.areaCname"></el-option>
                 </el-select>
               </el-form-item>
             </el-col>
             <el-col :span="8">
               <el-form-item label="营销服务部" prop="area">
-                <el-select
-                  :disabled="!disabledAddress.area"
-                  @change="selectArea"
-                  value-key="areaCname"
-                  style="width: 100%"
-                  v-model="selectAddress.area"
-                  placeholder="请选择区"
-                  size="small"
-                >
-                  <el-option
-                    v-for="(item, index) in areas"
-                    :key="index"
-                    :value="item"
-                    :label="item.areaCname"
-                  ></el-option>
+                <el-select :disabled="!disabledAddress.area" @change="selectArea" value-key="areaCname"
+                  style="width: 100%" v-model="selectAddress.area" placeholder="请选择区" size="small">
+                  <el-option v-for="(item, index) in areas" :key="index" :value="item"
+                    :label="item.areaCname"></el-option>
                 </el-select>
               </el-form-item>
             </el-col>
@@ -299,29 +136,17 @@
         <el-row v-if="dataForm.comlevel == '5'">
           <el-col :span="8">
             <el-form-item label="门店" prop="house">
-              <el-input
-                style="width: 100%"
-                placeholder="门店"
-                v-model="dataForm.house"
-              ></el-input>
+              <el-input style="width: 100%" placeholder="门店" v-model="dataForm.house"></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="业务来源" prop="managementSource">
-              <el-select
-                :disabled="operType == 'EDIT'"
-                style="width: 100%"
-                v-model="dataForm.managementSource"
-              >
+              <el-select :disabled="operType == 'EDIT'" style="width: 100%" v-model="dataForm.managementSource">
                 <!-- <el-option label="渠道" value="1"></el-option>
                 <el-option label="个代" value="2"></el-option>
                 <el-option label="服务" value="3"></el-option> -->
-                <el-option
-                  v-for="val in business_sourceoptions"
-                  :key="val.value"
-                  :label="val.label"
-                  :value="val.value"
-                ></el-option>
+                <el-option v-for="val in business_sourceoptions" :key="val.value" :label="val.label"
+                  :value="val.value"></el-option>
               </el-select>
             </el-form-item>
           </el-col>
@@ -330,51 +155,26 @@
         <el-row>
           <el-col :span="8">
             <el-form-item label="机构类型" prop="comtype">
-              <el-select
-                style="width: 100%"
-                v-model="dataForm.comtype"
-                placeholder="请选择"
-              >
-                <el-option
-                  v-for="item in comtypeoptions"
-                  :key="item.label"
-                  :label="item.label"
-                  :value="item.value"
-                ></el-option>
+              <el-select style="width: 100%" v-model="dataForm.comtype" placeholder="请选择">
+                <el-option v-for="item in comtypeoptions" :key="item.label" :label="item.label"
+                  :value="item.value"></el-option>
               </el-select>
             </el-form-item>
           </el-col>
 
           <el-col :span="8">
             <el-form-item label="机构级别" prop="comlevel">
-              <el-select
-                style="width: 100%"
-                disabled
-                v-model="dataForm.comlevel"
-                placeholder="请选择"
-              >
-                <el-option
-                  v-for="item in comleveloptions"
-                  :key="item.label"
-                  :label="item.label"
-                  :value="item.value"
-                ></el-option>
+              <el-select style="width: 100%" disabled v-model="dataForm.comlevel" placeholder="请选择">
+                <el-option v-for="item in comleveloptions" :key="item.label" :label="item.label"
+                  :value="item.value"></el-option>
               </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="机构性质" prop="comattribute">
-              <el-select
-                style="width: 100%"
-                v-model="dataForm.comattribute"
-                placeholder="请选择"
-              >
-                <el-option
-                  v-for="item in comattributeoptions"
-                  :key="item.label"
-                  :label="item.label"
-                  :value="item.value"
-                ></el-option>
+              <el-select style="width: 100%" v-model="dataForm.comattribute" placeholder="请选择">
+                <el-option v-for="item in comattributeoptions" :key="item.label" :label="item.label"
+                  :value="item.value"></el-option>
               </el-select>
             </el-form-item>
           </el-col>
@@ -382,20 +182,13 @@
         <el-row>
           <el-col :span="16">
             <el-form-item label="机构地址" prop="address">
-              <el-input
-                v-model="dataForm.address"
-                placeholder="机构地址"
-              ></el-input>
+              <el-input v-model="dataForm.address" placeholder="机构地址"></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="排序" prop="orderNum">
-              <el-input-number
-                v-model="dataForm.orderNum"
-                placeholder="排序"
-                controls-position="right"
-                :min="0"
-              ></el-input-number>
+              <el-input-number v-model="dataForm.orderNum" placeholder="排序" controls-position="right"
+                :min="0"></el-input-number>
             </el-form-item>
           </el-col>
         </el-row>
@@ -481,47 +274,23 @@
         <el-row> </el-row>
       </el-form>
       <span slot="footer" class="dialog-footer">
-        <el-button
-          size="small"
-          type="primary"
-          style="background-color: #ffc000; border: 1px solid #ffc000"
-          @click="dialogVisible = false"
-          >取消</el-button
-        >
+        <el-button size="small" type="primary" style="background-color: #ffc000; border: 1px solid #ffc000"
+          @click="dialogVisible = false">取消</el-button>
         <el-button size="small" type="primary" @click="submitForm()">{{
           $t("action.comfirm")
         }}</el-button>
       </span>
     </el-dialog>
     <!-- 新增修改界面 -->
-    <el-dialog
-      :title="dialogTitle"
-      width="1000px"
-      :visible.sync="deptDialogVisible"
-      :close-on-click-modal="false"
-      v-dialogDrag
-      @close="closeDeptDialog"
-    >
-      <el-form
-        :model="deptDataForm"
-        :rules="deptDataRule"
-        ref="deptDataForm"
-        @keyup.enter.native="deptSubmitForm()"
-        label-width="100px"
-        size="small"
-        style="text-align: left"
-      >
+    <el-dialog :title="dialogTitle" width="1000px" :visible.sync="deptDialogVisible" :close-on-click-modal="false"
+      v-dialogDrag @close="closeDeptDialog">
+      <el-form :model="deptDataForm" :rules="deptDataRule" ref="deptDataForm" @keyup.enter.native="deptSubmitForm()"
+        label-width="100px" size="small" style="text-align: left">
         <el-row>
           <el-col :span="8">
             <el-form-item label="所属机构" prop="id">
-              <span
-                style="width: 100%; overflow: hidden"
-                v-if="
-                  currentTreeNode && currentTreeNode.id == deptDataForm.parentId
-                "
-                class="span-disabled"
-                >{{ currentTreeNode.name }}-{{ currentTreeNode.id }}</span
-              >
+              <span style="width: 100%; overflow: hidden" v-if="currentTreeNode && currentTreeNode.id == deptDataForm.parentId
+                " class="span-disabled">{{ currentTreeNode.name }}-{{ currentTreeNode.id }}</span>
               <span style="width: 100%" v-else class="span-disabled">{{
                 deptDataForm.id
               }}</span>
@@ -529,42 +298,26 @@
           </el-col>
           <el-col :span="8">
             <el-form-item label="部门编号" prop="id">
-              <el-input
-                style="width: 100%"
-                v-model="deptDataForm.id"
-                placeholder="部门编号"
-                disabled
-              ></el-input>
+              <el-input style="width: 100%" v-model="deptDataForm.id" placeholder="部门编号" disabled></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="部门名称" prop="name">
-              <el-input
-                style="width: 100%"
-                v-model="deptDataForm.name"
-                placeholder="部门名称"
-              ></el-input>
+              <el-input style="width: 100%" v-model="deptDataForm.name" placeholder="部门名称"></el-input>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="16">
             <el-form-item label="机构地址" prop="address">
-              <el-input
-                v-model="deptDataForm.address"
-                placeholder="机构地址"
-              ></el-input>
+              <el-input v-model="deptDataForm.address" placeholder="机构地址"></el-input>
             </el-form-item>
           </el-col>
 
           <el-col :span="8">
             <el-form-item label="排序" prop="orderNum">
-              <el-input-number
-                v-model="deptDataForm.orderNum"
-                placeholder="排序"
-                controls-position="right"
-                :min="0"
-              ></el-input-number>
+              <el-input-number v-model="deptDataForm.orderNum" placeholder="排序" controls-position="right"
+                :min="0"></el-input-number>
             </el-form-item>
           </el-col>
         </el-row>
@@ -578,43 +331,21 @@
         }}</el-button>
       </span>
     </el-dialog>
-     <!-- 设置部门负责人 -->
-    <el-dialog
-      title="设置部门负责人"
-      width="500px"
-      :visible.sync="deptDialogLeadVisible"
-      :close-on-click-modal="false"
-      v-dialogDrag
-      @close="closeLeadDialog"
-    >
-    <el-form
-        :model="leadDataForm"
-        :rules="leadDataRule"
-        ref="leadDataForm"
-        label-width="100px"
-        size="small"
-        style="text-align: left"
-      >
-      <el-row>
-        <el-col :span="8">
-        <el-form-item label="机构负责人" prop="address">
-          <el-select
-            style="width: 200px;"
-            filterable
-            v-model="leadDataForm.leadId"
-            placeholder="请选择"
-          >
-            <el-option
-              v-for="item in userList"
-              :key="item.id"
-              :label="item.name"
-              :value="item.id"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-       </el-col>
-      </el-row>
-    </el-form>
+    <!-- 设置部门负责人 -->
+    <el-dialog title="设置部门负责人" width="500px" :visible.sync="deptDialogLeadVisible" :close-on-click-modal="false"
+      v-dialogDrag @close="closeLeadDialog">
+      <el-form :model="leadDataForm" :rules="leadDataRule" ref="leadDataForm" label-width="100px" size="small"
+        style="text-align: left">
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="机构负责人" prop="address">
+              <el-select style="width: 200px;" filterable v-model="leadDataForm.leadId" placeholder="请选择">
+                <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
       <span slot="footer" class="dialog-footer">
         <el-button size="small" @click="closeLeadDialog">取消
         </el-button>
@@ -661,10 +392,11 @@ export default {
   },
   data() {
     return {
-      deptDialogLeadVisible:false,
-      leadDataForm:{
-        leadId:"",
-        deptId:""
+      expandrowkeys: '',
+      deptDialogLeadVisible: false,
+      leadDataForm: {
+        leadId: "",
+        deptId: ""
       },
       userList: [],
       loading: false,
@@ -741,7 +473,7 @@ export default {
         managementSource: 1, //来源
         orderNum: 0,
       },
-      leadDataRule:{
+      leadDataRule: {
         leadId: [
           {
             required: true,
@@ -883,34 +615,33 @@ export default {
   methods: {
     //关闭部门弹框
     closeLeadDialog() {
-      this.leadDataForm={
-        leadId:"",
-        deptId:""
+      this.leadDataForm = {
+        leadId: "",
+        deptId: ""
       },
-      this.deptDialogLeadVisible = false;
+        this.deptDialogLeadVisible = false;
     },
     //提交
-    leadSubmitForm(){
+    leadSubmitForm() {
       this.$api.dept.saveLeadId(this.leadDataForm).then((res) => {
         if (res.code == 200) {
-              this.findTreeData();
-              this.closeLeadDialog();
-              this.$message({
-                type: "success",
-                message: "设置成功!",
-              });
-            } else {
-              this.$message({
-                type: "error",
-                message: "设置失败!",
-              });
-            }
+          this.findTreeData();
+          this.closeLeadDialog();
+          this.$message({
+            type: "success",
+            message: "设置成功!",
+          });
+        } else {
+          this.$message({
+            type: "error",
+            message: "设置失败!",
+          });
+        }
       });
     },
     // 设置机构负责人
     setLeadUserId(data) {
-      console.log(data.id)
-      this.leadDataForm.deptId =data.id;
+      this.leadDataForm.deptId = data.id;
       //查询该机构下的后线人员
       this.$api.dept.getLeadListDeptId(data.id).then((res) => {
         this.userList = res.data;
@@ -920,11 +651,13 @@ export default {
     //点击每一行的事件
     rowClick(row, treeNode) {
       //点每行展开折叠
+      if(row.expanded===undefined){
+        row.expanded=false;
+      }
       row.expanded = !row.expanded;
       this.$refs.expandTable.toggleRowExpansion(row, row.expanded);
       //新增子公司、部门
       this.currentTreeNode = row;
-      // this.currentTreeNode = treeNode;
       this.filters.id = this.currentTreeNode.id;
       this.findSubDeptPage();
     },
@@ -1130,20 +863,12 @@ export default {
       });
     },
     managementSourceQuery() {
-      this.loading = true;
       this.$api.dept
         .findDeptTree(this.peopledeptid, this.managementSource)
         .then((res) => {
           this.ztreeNodes = res.data;
-          this.loading = false;
         });
     },
-    handleCreated(ztreeObj) {
-      this.ztreeObj = ztreeObj;
-      // onCreated 中操作ztreeObj对象展开第一个节点
-      ztreeObj.expandNode(ztreeObj.getNodes()[0], true);
-      this.currentTreeNode = ztreeObj.getNodes()[0];
-    },
     // 右边表格Start
     findSubDeptPage: function (data) {
       // 获取分页数据
@@ -1532,11 +1257,7 @@ export default {
 };
 </script>
 
-<style scoped>
-body {
-  scrollbar-gutter: stable both-edges;
-}
-
+<style lang="scss" scoped>
 .bh-medium-font-size {
   font-size: 30px !important;
 }

+ 1 - 0
src/views/Sys/Dict.vue

@@ -296,6 +296,7 @@ export default {
     },
     // 显示新增界面
     handleAdd: function () {
+      console.log(this.currentTreeNode)
       if (!this.currentTreeNode || !this.currentTreeNode.itemname) {
         alert("请选择字典类型。");
         return;

+ 61 - 41
src/views/Sys/PublicizeImg.vue

@@ -7,7 +7,7 @@
           <div>
             <!-- 左侧树形结构 -->
             <el-tree :data="ztreeNodes" :props="{ children: 'children', label: 'name' }" node-key="id"
-                     :default-expanded-keys="['9']" @node-click="onZTreeClick"></el-tree>
+              :default-expanded-keys="['9']" @node-click="onZTreeClick"></el-tree>
           </div>
         </SplitArea>
         <!-- 左侧树End -->
@@ -35,19 +35,17 @@
                 </el-col>
                 <el-col :span="5">
                   <el-form-item label="状态">
-                    <el-select style="width:200px" clearable v-model="pageData.status"
-                               placeholder="请选择">
-                      <el-option v-for="val in user_statusoptions" :label="val.label"
-                                 :value="val.value" :key="val.id"></el-option>
+                    <el-select style="width:200px" clearable v-model="pageData.status" placeholder="请选择">
+                      <el-option v-for="val in user_statusoptions" :label="val.label" :value="val.value"
+                        :key="val.id"></el-option>
                     </el-select>
                   </el-form-item>
                 </el-col>
                 <el-col :span="5">
                   <el-form-item label="领导人">
-                    <el-select size="small" style="width:215px" clearable filterable
-                               v-model="pageData.leaderId" placeholder="请选择">
-                      <el-option v-for="item in searchLeaderOptions" :key="item.id" :label="item.name"
-                                 :value="item.name">
+                    <el-select size="small" style="width:215px" clearable filterable v-model="pageData.leaderId"
+                      placeholder="请选择">
+                      <el-option v-for="item in searchLeaderOptions" :key="item.id" :label="item.name" :value="item.name">
                       </el-option>
                     </el-select>
                   </el-form-item>
@@ -61,7 +59,7 @@
             </el-form>
           </el-row>
           <kt-common-table permsEdit="sys:backline:edit" :data="pageResult" :columns="columns" editButtonName="配置图片"
-                           :showBatchDelete="false" @findPage="findPage" @handleEdit="handleTableEdit">
+            :showBatchDelete="false" @findPage="findPage" @handleEdit="handleTableEdit">
           </kt-common-table>
 
         </SplitArea>
@@ -70,27 +68,22 @@
     </el-main>
 
     <!-- 新增修改界面 -->
-    <el-dialog width="20%" :visible.sync="dialogVisible" :close-on-click-modal="false"
-               @close="closeDialog" v-dialogDrag>
-      <div>
-        上传图片:
-        <el-upload
-          action="#"
-          style="display:inline-block"
-          list-type="picture-card"
-          :auto-upload="false"
-          accept=".png, .jpg, .jpeg"
-          :show-file-list="false"
-          :on-change="drivingupload">
-          <img v-if="qrCodeImage" :src="qrCodeImage" class="avatar">
-          <i v-else class="el-icon-plus avatar-uploader-icon"></i>
-        </el-upload>
-      </div>
-      <div>
-        上传客服:
-        <el-input v-model="supportStaffUrl" placeholder="请输入客服链接"></el-input>
-
-      </div>
+    <el-dialog width="30%" :visible.sync="dialogVisible" :close-on-click-modal="false" @close="closeDialog" v-dialogDrag>
+      <el-form ref="customerInfo" :model="customerInfo" label-width="80px">
+        <el-form-item label="上传图片">
+          <el-upload action="#" style="display:inline-block" list-type="picture-card" :auto-upload="false"
+            accept=".png, .jpg, .jpeg" :show-file-list="false" :on-change="drivingupload">
+            <img v-if="qrCodeImage" :src="qrCodeImage" class="avatar">
+            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+          </el-upload>
+        </el-form-item>
+        <el-form-item label="客服列表">
+          <el-select v-model="customerInfo.openKfId" placeholder="请选择活动区域" @change="customerChange">
+            <el-option v-for="(item, index) in customerList" :key="index" :label="item.name"
+              :value="item.open_kfid"></el-option>
+          </el-select>
+        </el-form-item>
+      </el-form>
       <!-- <a href="https://work.weixin.qq.com/kfid/kfcf52bd389cde8a421">https://work.weixin.qq.com/kfid/kfcf52bd389cde8a421</a> -->
       <span slot="footer" class="dialog-footer">
         <el-button size="small" @click="dialogVisible = false">取 消</el-button>
@@ -142,7 +135,7 @@ export default {
       searchLeaderOptions: {},
       columns: [
         // 数据列
-        {prop: "deptId", label: "部门编码", minWidth: 80, sortable: false},
+        { prop: "deptId", label: "部门编码", minWidth: 80, sortable: false },
         {
           prop: "pdeptName",
           label: "机构名称",
@@ -150,17 +143,17 @@ export default {
           sortable: false,
         },
 
-        {prop: "deptName", label: "部门名称", minWidth: 80, sortable: false},
+        { prop: "deptName", label: "部门名称", minWidth: 80, sortable: false },
 
-        {prop: "userId", label: "工号", minWidth: 80, sortable: false},
-        {prop: "name", label: "姓名", minWidth: 120, sortable: false},
+        { prop: "userId", label: "工号", minWidth: 80, sortable: false },
+        { prop: "name", label: "姓名", minWidth: 120, sortable: false },
         {
           prop: "sex",
           label: "性别",
           minWidth: 50,
           sortable: false,
         },
-        {prop: "mobile", label: "联系电话", minWidth: 100, sortable: false},
+        { prop: "mobile", label: "联系电话", minWidth: 100, sortable: false },
         {
           prop: "roleId",
           label: "角色",
@@ -179,13 +172,41 @@ export default {
           sortable: false,
         },
       ],
-      supportStaffUrl:''
+      supportStaffUrl: '',
+      customerList: [],
+      customerInfo: {
+        openKfName:"",
+        openKfId:"",
+      },
     };
   },
   created() {
-    this.searchLeaderFun()
+    this.searchLeaderFun();
+    this.getCustomerServiceList();
   },
   methods: {
+    //获取客服列表
+    getCustomerServiceList() {
+      this.$api.aiSupport.customerList().then((res) => {
+        if (res.code == '200') {
+          this.customerList = res.data;
+          this.$message({
+            type: 'success',
+            message: res.msg,
+          });
+        } else {
+          this.$message({
+            type: 'error',
+            message: res.msg,
+          });
+        }
+      });
+    },
+    //
+    customerChange(val) {
+      let info = this.customerList.find(ele => ele.open_kfid == val);
+      this.customerInfo.openKfName = info.name;
+    },
     drivingupload(file, fileList) {
       let fileRaw = file.raw;
       this.qrCodeImage = window.URL.createObjectURL(fileRaw);
@@ -202,7 +223,7 @@ export default {
     },
     searchLeaderFun() {
       this.$api.user
-        .findBackListByDeptId({deptId: this.deptId})
+        .findBackListByDeptId({ deptId: this.deptId })
         .then((res) => {
           this.searchLeaderOptions = res.data;
         });
@@ -304,15 +325,14 @@ export default {
       let data = {
         wechatpicture: this.CarFrontFile.id,
         wechatPictureUrl: this.CarFrontFile.url,
-        supportStaffUrl:this.supportStaffUrl,
         userId: this.formData.userId,
         userName: this.formData.name,
+        ...this.customerInfo,
       }
       this.$api.role
         .pictureSave(data)
         .then((res) => {
           if (res.code == "200") {
-            this.supportStaffUrl = ''
             this.$message({
               message: res.msg || '操作成功',
               type: 'success'

+ 539 - 0
src/views/Sys/RulePermissions.vue

@@ -0,0 +1,539 @@
+<template>
+    <div class="page-container">
+      <!--工具栏-->
+      <div
+        class="toolbar"
+        style="float: left; padding-top: 10px; padding-left: 50px"
+      >
+        <el-form :inline="true" :model="filters" :size="size">
+          <el-form-item>
+            <el-input v-model="filters.name" placeholder="角色名"></el-input>
+          </el-form-item>
+          <el-form-item>
+            <kt-button
+              icon="fa fa-search"
+              :label="$t('action.search')"
+              perms="sys:role:view"
+              type="primary"
+              @click="findPage(null)"
+            />
+          </el-form-item>
+          
+        </el-form>
+      </div>
+      <div class="conent-box" >
+        <!--表格内容栏-->
+        <el-table
+            :data="pageResult.content"
+            border
+            style="width: 100%; "
+            height="600"
+        >
+            <el-table-column
+                v-for="column in columns"
+                header-align="center"
+                align="center"
+                :prop="column.prop"
+                :label="column.label"
+                :width="column.width"
+                :min-width="column.minWidth"
+                :fixed="column.fixed"
+                :key="column.prop"
+                :type="column.type"
+                :formatter="column.formatter"
+                :sortable="column.sortable == null ? true : column.sortable"
+            >
+            </el-table-column>
+            <el-table-column
+                :label="$t('action.operation')"
+                width="185"
+                fixed="right"
+                
+                header-align="center"
+                align="center"
+            >
+                <template slot-scope="scope">
+                <kt-button
+                    
+                    label="菜单配置"
+                    :perms="''"
+                    :size="size"
+                    @click="handleEdit( scope.row)"
+                />
+                <!-- <kt-button
+                    icon="fa fa-trash"
+                    :label="$t('action.delete')"
+                    :perms="permsDelete"
+                    :size="size"
+                    type="danger"
+                    @click="handleDelete(scope.$index, scope.row)"
+                /> -->
+                </template>
+            </el-table-column>
+        </el-table>
+       
+       
+      </div>
+      <el-pagination
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="pageRequest.pageNum"
+            :page-sizes="[10, 20, 30, 40]"
+            :page-size="pageRequest.pageSize"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="pageRequest.total">
+        </el-pagination>
+     
+      <!-- </el-col> -->
+      <!--新增编辑界面-->
+      <el-dialog
+        v-dialogDrag
+        :title="'菜单配置'"
+        width="40%"
+        :visible.sync="dialogVisible"
+        :close-on-click-modal="false"
+      >
+        <el-tree
+          :data="menuData"
+          size="mini"
+          show-checkbox
+          node-key="id"
+          :props="defaultProps"
+          ref="menuTree"
+          :default-checked-keys="checkedKeys"
+        
+          v-loading="menuLoading"
+          element-loading-text="拼命加载中"
+          @check="handleMenuCheckChange"
+          @node-click="treeClick"
+        >
+        </el-tree>
+        <div slot="footer" class="dialog-footer">
+          <el-button :size="size" @click.native="dialogVisible = false">{{
+            $t("action.cancel")
+          }}</el-button>
+          <el-button
+            :size="size"
+            type="primary"
+            @click.native="submitForm"
+            :loading="editLoading"
+            >{{ $t("action.submit") }}</el-button
+          >
+        </div>
+      </el-dialog>
+      <el-drawer
+        title="数据规则/按钮权限配置"
+        :visible.sync="drawer"
+        :direction="'rtl'"
+        :before-close="handleClose">
+        <el-tree
+            :data="messageList"
+            size="mini"
+            show-checkbox
+            node-key="id"
+            :props="ruleProps"
+            ref="perMisseionTree"
+            :default-checked-keys="perCheckedKeys"
+            
+            
+            element-loading-text="拼命加载中"
+            @check="handlePerCheckChange"
+            >
+            </el-tree>
+            <el-button style="margin-left: 20px;" type="primary" @click="submitPer">保存</el-button>
+            <!-- v-loading="menuLoading" -->
+        </el-drawer>
+    </div>
+  </template>
+  
+  <script>
+  import KtTable from "@/views/Core/KtTable";
+  import KtButton from "@/views/Core/KtButton";
+  import TableTreeColumn from "@/views/Core/TableTreeColumn";
+  import { format } from "@/utils/datetime";
+
+
+  export default {
+    components: {
+      KtTable,
+      KtButton,
+      TableTreeColumn,
+    },
+    data() {
+      return {
+        messageList:[],
+        drawer:false,
+        size: "small",
+        filters: {
+          name: "",
+        },
+        columns: [
+          { prop: "id", label: "ID", minWidth: 50 },
+          { prop: "name", label: "角色名", minWidth: 120 },
+          { prop: "remark", label: "备注", minWidth: 120 },
+          { prop: "createBy", label: "创建人", minWidth: 120 },
+          {
+            prop: "createTime",
+            label: "创建时间",
+            minWidth: 120,
+            formatter: this.dateFormat,
+          },
+          // {prop:"lastUpdateBy", label:"更新人", minWidth:100},
+          // {prop:"lastUpdateTime", label:"更新时间", minWidth:120, formatter:this.dateFormat}
+        ],
+        pageRequest: { pageNum: 1, pageSize: 10,total:0 },
+        pageResult: {},
+  
+        operation: false, // true:新增, false:编辑
+        dialogVisible: false, // 新增编辑界面是否显示
+        editLoading: false,
+        dataFormRules: {
+          name: [{ required: true, message: "请输入角色名", trigger: "blur" }],
+        },
+        // 新增编辑界面数据
+        dataForm: {
+          id: 0,
+          name: "",
+          remark: "",
+        },
+        selectRole: {},
+        menuData: [],
+        menuSelections: [],
+        menuLoading: false,
+        authLoading: false,
+        checkAll: false,
+        currentRoleMenus: [],
+        defaultProps: {
+          children: "children",
+          label: "name",
+        },
+        ruleProps:{
+            children: "children",
+            label: "ruleName",
+        },
+        leveData: [],
+        checkedKeys:[],
+        roleId:"",
+        clickMenuId:"",
+        perCheckedKeys:[]
+      };
+    },
+    created() {
+      this.findPage({});
+    },
+    methods: {
+        handleSizeChange(val) {
+            // console.log(`每页 ${val} 条`);
+            this.pageRequest.pageSize=val
+            this.findPage({});
+        },
+        handleCurrentChange(val) {
+            // console.log(`当前页: ${val}`);
+            this.pageRequest.pageNum=val
+            this.findPage({});
+
+        },
+      getLeveData() {},
+      // 获取分页数据
+      findPage: function (data) {
+        // if (data !== null) {
+        //   this.pageRequest = data.pageRequest;
+        // }
+        this.pageRequest.columnFilters = {
+          name: { name: "name", value: this.filters.name },
+        };
+        this.$api.role
+          .findPage(this.pageRequest)
+          .then((res) => { 
+            this.pageResult = res.data;
+            this.pageRequest.total=res.data.totalSize
+            this.findTreeData();
+          })
+          .then(data != null ? data.callback : "");
+      },
+     
+    
+      // 显示编辑界面
+      handleEdit: function (params) {
+        this.checkedKeys=[]
+        this.dialogVisible = true;
+        this.operation = false;
+        // console.log(params)
+        this.roleId=params.id
+        // this.dataForm = Object.assign({}, params.row);
+        this.$api.sys.getInsRoleMenuPermissions({
+            roleId:params.id
+        }).then(res=>{
+            // console.log(res)
+            if(res.code===200){
+             
+                if(res.data.length>0){
+                    this.checkedKeys=res.data.map((v)=>{
+                        return v.menuId
+                    })
+                }else{
+                    this.$refs.menuTree.setCheckedKeys([],false);
+                }
+            }
+        })
+      },
+      // 保存角色关联菜单
+      submitForm: function () {
+        
+        this.$api.sys.saveAndUpdateRuleMenu({
+            menuIdList:this.checkedKeys,
+            roleId:this.roleId
+        }).then((res) => {
+            this.editLoading = false;
+            if (res.code == 200) {
+                this.$message({ message: "操作成功", type: "success" });
+                this.dialogVisible = false;
+                this.checkedKeys=[]
+            } else {
+                this.$message({
+                    message: "操作失败, " + res.msg,
+                    type: "error",
+                });
+            }
+            // this.findPage(null);
+        });
+          
+          
+      },
+    // 保存角色-菜单-关联权限规则
+    submitPer(){
+        this.$api.sys.roleMenuPerSaveAndUpdate({
+            permissionsIdList:this.perCheckedKeys,
+            roleId:this.roleId,
+            menuId:this.clickMenuId
+        }).then((res) => {
+            this.editLoading = false;
+            if (res.code == 200) {
+                this.$message({ message: "操作成功", type: "success" });
+                this.drawer = false;
+                this.perCheckedKeys=[]
+            } else {
+                this.$message({
+                    message: "操作失败, " + res.msg,
+                    type: "error",
+                });
+            }
+            // this.findPage(null);
+        });
+        
+    },
+      // 获取数据
+      findTreeData: function () {
+        this.menuLoading = true;
+        this.$api.menu.findMenuTree().then((res) => {
+          this.menuData = res.data;
+          this.menuLoading = false;
+        });
+      },
+      // 角色选择改变监听
+      async handleRoleSelectChange(val) {
+        if (val == null || val.val == null) {
+          return;
+        }
+        this.selectRole = val.val;
+        if (val.val.id == 1 && val.val.name == "admin") {
+          let allMenus = [];
+          this.checkAllMenu(this.menuData, allMenus);
+          this.$refs.menuTree.setCheckedNodes(allMenus);
+          return;
+        }
+        let res = await this.$api.role.findRoleMenus({ roleId: val.val.id });
+        if (res.code == 200) {
+          this.$nextTick(() => {
+            const arr = [];
+            res.data.forEach((item) => {
+              if (
+                !this.$refs.menuTree.getNode(item.id).childNodes ||
+                !this.$refs.menuTree.getNode(item.id).childNodes.length
+              ) {
+                arr.push(item);
+              }
+            });
+            this.$refs.menuTree.setCheckedNodes(arr);
+          });
+        }
+      },
+      //树节点选择监听
+      handleMenuCheckChange(data, check, subCheck) {
+       this.checkedKeys=[...check.checkedKeys]
+      },
+      //规则树几点选中
+      handlePerCheckChange(data, check, subCheck) {
+       this.perCheckedKeys=[...check.checkedKeys]
+      },
+      //树节点点击
+     async treeClick(node){
+        // console.log(node)
+        this.clickMenuId=node.id
+        this.drawer=true
+        await this.getMessageList()
+        await this.getInsRolePermissionsDtoList()
+      },
+      handleClose(done) {
+        this.$confirm('确认关闭?')
+          .then(_ => {
+            done();
+          })
+          .catch(_ => {});
+      },
+      //获取菜单下的规则列表
+        async getMessageList(){
+            this.$api.sys.getMenuRelaPerqueryList({
+                menuId:this.clickMenuId,
+                status:1
+            }).then(res=>{
+                if(res.code===200){
+                    
+                    this.messageList=[...res.data]
+                }
+            })
+        },
+        //获取角色关联菜单 关联的规则数据
+        async getInsRolePermissionsDtoList(){
+            this.$api.sys.getInsRolePermissionsDtoList({
+                menuId:this.clickMenuId,
+                roleId:this.roleId
+            }).then(res=>{
+                if(res.code===200){
+                   
+                   console.log(res.data)
+                    if(res.data.length>0){
+                        this.perCheckedKeys=res.data.map((v)=>{
+                            return v.permissionsId
+                        })
+                    }else{
+                        this.$refs.perMisseionTree.setCheckedKeys([],false);
+                    }
+                    // this.messageList=[...res.data]
+                }
+            })
+        },
+      // 重置选择
+      resetSelection() {
+        this.checkAll = false;
+        this.$refs.menuTree.setCheckedNodes([]);
+      },
+      // 全选操作
+      handleCheckAll() {
+        if (this.checkAll) {
+          let allMenus = [];
+          this.checkAllMenu(this.menuData, allMenus);
+          this.$refs.menuTree.setCheckedNodes(allMenus);
+        } else {
+          this.$refs.menuTree.setCheckedNodes([]);
+        }
+      },
+      // 递归全选
+      checkAllMenu(menuData, allMenus) {
+        menuData.forEach((menu) => {
+          allMenus.push(menu);
+          if (menu.children) {
+            this.checkAllMenu(menu.children, allMenus);
+          }
+        });
+      },
+      // 角色菜单授权提交
+      submitAuthForm() {
+        let roleId = this.selectRole.id;
+        if ("admin" == this.selectRole.name) {
+          this.$message({
+            message: "超级管理员拥有所有菜单权限,不允许修改!",
+            type: "error",
+          });
+          return;
+        }
+        this.authLoading = true;
+        let checkedNodes = this.$refs.menuTree.getCheckedNodes(false, true);
+        let roleMenus = [];
+        for (let i = 0, len = checkedNodes.length; i < len; i++) {
+          let roleMenu = { roleId: roleId, menuId: checkedNodes[i].id };
+          roleMenus.push(roleMenu);
+        }
+        this.$api.role.saveRoleMenus(roleMenus).then((res) => {
+          if (res.code == 200) {
+            this.$message({ message: "操作成功", type: "success" });
+          } else {
+            this.$message({ message: "操作失败, " + res.msg, type: "error" });
+          }
+          this.authLoading = false;
+        });
+      },
+    //   renderContent(h, { node, data, store }) {
+    //     return (
+    //       <div class="column-container">
+    //         <div style="text-algin:center;margin-right:80px;">{data.name}</div>
+            
+           
+    //       </div>
+    //     );
+    //   },
+      // 时间格式化
+      dateFormat: function (row, column, cellValue, index) {
+        return format(row[column.property]);
+      },
+    },
+    mounted() {},
+  };
+  </script>
+  <style scoped lang="less">
+  .menu-container {
+    margin-top: 10px;
+  }
+  .menu-header {
+    padding-left: 8px;
+    padding-bottom: 5px;
+    text-align: left;
+    font-size: 16px;
+    color: rgb(20, 89, 121);
+  }
+  .conent-box{
+    width: 100%;
+    display: flex;
+    /* justify-content: space-around */
+    >div{
+        width: 100%;
+    }
+  }
+  /deep/ .el-table {
+    max-height: 500px !important;
+  }
+  .el-tree {
+   // width: 800px;
+    height: 500px;
+    overflow-x: auto;
+  }
+  /deep/ .el-tree > .el-tree-node {
+   // display: inline-block !important;
+  }
+  .btn-box {
+    padding-right: 100px;
+  }
+  /*定义滚动条高宽及背景
+   高宽分别对应横竖滚动条的尺寸*/
+  ::-webkit-scrollbar {
+    width: 8px;
+    height: 8px;
+    background-color: rgba(0, 0, 0, 0.2);
+  }
+  
+  /*定义滚动条轨道
+   内阴影+圆角*/
+  ::-webkit-scrollbar-track {
+    -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
+    border-radius: 10px;
+    background-color: #f5f5f5;
+  }
+  /*定义滑块
+       内阴影+圆角*/
+  ::-webkit-scrollbar-thumb {
+    border-radius: 10px;
+    -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
+    background-color: #b3b3b3;
+  }
+  </style>
+  

+ 47 - 26
src/views/Task/TaskPoolChannel/TaskPoolChannel3.vue

@@ -1,17 +1,16 @@
 <template>
   <div>
-    <retrievalForm :fields="retrievalFields" @submit="handleFormSubmit" @toggleCollapse="toggleCollapse" :dateType="3"
-      @areaSelectChange="areaSelectChange"></retrievalForm>
-    <kt-common-table :data="pageResult" ref="commonTable" :columns="columns1" element-loading-text="加载中..." v-loading="loading"
-      :showBatchDelete="false" @findPage="findPage"
-      button3Name="转发" button3Type="text" @handleButton3="transmit" :stripe="false"
-      button2Name="报价轨迹" button2Type="text" @handleButton2="trajectory"
-      button6Name="批单" button6Type="text" @handleButton6="batchOrder"
-      button5Name="详情" button5Type="text" @handleButton5="detailFun"
-      button4Name="转发记录" button4Type="text" @handleButton4="forwardingRecords" :operationWidth="300"></kt-common-table>
+    <retrievalForm :fields="retrievalFields" @submit="handleFormSubmit" @exportSubmit="exportSubmit" :isExport="true"
+      @toggleCollapse="toggleCollapse" :dateType="3" @areaSelectChange="areaSelectChange"></retrievalForm>
+    <kt-common-table :data="pageResult" ref="commonTable" :columns="columns1" element-loading-text="加载中..."
+      v-loading="loading" :showBatchDelete="false" @findPage="findPage" button3Name="转发" button3Type="text"
+      @handleButton3="transmit" :stripe="false" button2Name="报价轨迹" button2Type="text" @handleButton2="trajectory"
+      button6Name="批单" button6Type="text" @handleButton6="batchOrder" button5Name="详情" button5Type="text"
+      @handleButton5="detailFun" button4Name="转发记录" button4Type="text" @handleButton4="forwardingRecords"
+      :operationWidth="300"></kt-common-table>
     <el-dialog title="转发" :visible.sync="dialogVisible" width="30%">
       转发人:
-      <el-select v-model="transmitValue" filterable clearable  placeholder="请选择">
+      <el-select v-model="transmitValue" filterable clearable placeholder="请选择">
         <el-option v-for="item in options" :key="item.userId" :label="item.name" :value="item.userId"></el-option>
       </el-select>
       <span slot="footer" class="dialog-footer">
@@ -19,7 +18,8 @@
         <el-button type="primary" size="small" @click="transmitSumit">确 定</el-button>
       </span>
     </el-dialog>
-    <detailsDialog ref="detailsDialog"  :isTaskPool="true" :orderInfo="queryOrders" :isAuditing="isAuditing" :feeOrderNewVoList="feeOrderNewVoList"></detailsDialog>
+    <detailsDialog ref="detailsDialog" :isTaskPool="true" :orderInfo="queryOrders" :isAuditing="isAuditing"
+      :feeOrderNewVoList="feeOrderNewVoList"></detailsDialog>
     <el-dialog :visible.sync="ddgjdialogVisible" width="500px">
       <div slot="title" class=" dialog-title">
         <span>订单轨迹</span>
@@ -33,7 +33,7 @@
                 <div>车牌号:{{ item.licenseNo }}</div>
                 <div>被保人:{{ item.insuredname }}</div>
                 <div>
-                  <span >操作人:{{ item.operator }}</span>
+                  <span>操作人:{{ item.operator }}</span>
                   <span style="margin-left: 10px">操作人工号:{{ item.audituser }}</span>
                 </div>
                 <span v-if="item.operatorTime">
@@ -45,17 +45,16 @@
         </el-steps>
       </div>
     </el-dialog>
-    <el-dialog :visible.sync="forwardingRecordsdialogVisible"  title="转发记录" width="70%">
-      <el-table :data="gridData"  height="400" border  v-loading="loading" highlight-current-row stripe
-        :header-cell-style="{
-          background: '#F2F7FC',
-          fontWeight: '700',
-          color: '#606266',
-        }">
+    <el-dialog :visible.sync="forwardingRecordsdialogVisible" title="转发记录" width="70%">
+      <el-table :data="gridData" height="400" border v-loading="loading" highlight-current-row stripe :header-cell-style="{
+        background: '#F2F7FC',
+        fontWeight: '700',
+        color: '#606266',
+      }">
         <el-table-column property="subOrderId" align="center" label="订单号" width="200"></el-table-column>
         <el-table-column property="oldOperatorId" align="center" label="转发人" width="200"></el-table-column>
         <el-table-column property="newOperatorId" align="center" label="接收人"></el-table-column>
-        <el-table-column property="remark"  align="center" label="转发信息"></el-table-column>
+        <el-table-column property="remark" align="center" label="转发信息"></el-table-column>
         <el-table-column property="createTime" align="center" label="转发时间"></el-table-column>
       </el-table>
     </el-dialog>
@@ -105,7 +104,7 @@ export default {
         { prop: "jypremium", label: "驾意险保费", minWidth: 160 },
         // { prop: "isExternal", label: "外部订单", formatter: this.isExternalFormatter},
         { prop: "insuredname", label: "投保人姓名", minWidth: 120 },
-        {prop: "underwritingStatus", label: "核保通过方式", minWidth: 180, formatter: this.underwritingMethodFormatter },
+        { prop: "underwritingStatus", label: "核保通过方式", minWidth: 180, formatter: this.underwritingMethodFormatter },
         { prop: "userid", label: "业务员工号", minWidth: 180 },
         { prop: "createtime", label: "报价时间", minWidth: 160 },
       ],
@@ -127,6 +126,12 @@ export default {
     getStatusText(code) {
       return this.optionsStatus.find(val => val.dictValue == code).dictTag;;
     },
+    //导出
+    exportSubmit(data) {
+      let obj = Object.assign(this.pageRequest, data)
+      this.pageRequest = obj;
+      this.exportRecords();
+    },
     handleFormSubmit(data) {
       let obj = Object.assign(this.pageRequest, data)
       this.pageRequest = obj;
@@ -154,13 +159,31 @@ export default {
           if (res.code == 200) {
             this.loading = false;
             this.pageResult = res.data;
-            this.$refs.commonTable.taskPool=true
+            this.$refs.commonTable.taskPool = true
           } else {
             this.loading = false;
             this.$message.error(res.msg);
           }
         });
     },
+    //导出
+    exportRecords() {
+      this.$api.task.exportHospitalityByChannel(this.pageRequest).then((res) => {
+        if (res.code == '200') {
+          let url = process.env.BASE_URL + res.data; // 3.创建一个临时的url指向blob对象
+          let a = document.createElement("a");
+          a.href = url;
+          a.download = "导出文件.xlsx";
+          a.click();
+          window.URL.revokeObjectURL(url);
+        } else {
+          this.$message({
+            type: 'error',
+            message: res.msg,
+          });
+        }
+      });
+    },
     trajectory(row) {
       this.$api.letter.queryBySuborderDetails(row.row.subOrderId).then((res) => {
         if (res.code == 200 && res.data.length > 0) {
@@ -237,7 +260,7 @@ export default {
         this.queryFrom.endDate = e[1];
       }
     },
-    batchOrder(row){
+    batchOrder(row) {
 
     },
     // detailFun(row) {
@@ -282,7 +305,6 @@ export default {
 </script>
 
 <style scoped lang="scss">
-
 /deep/ {
 
   .el-step__description.is-finish,
@@ -290,6 +312,7 @@ export default {
     color: #333;
     border: none;
   }
+
   .el-step__title,
   .el-step__icon-inner {
     color: var(--themeColor)
@@ -316,6 +339,4 @@ export default {
     box-shadow: 0px 2px 2px 0px rgba(0, 0, 0, 0.1);
   }
 }
-
-
 </style>

+ 4 - 3
src/views/Task/daikeComponents/KhgxKtLetter.vue

@@ -13511,11 +13511,11 @@ export default {
 }
 
 .position-left {
-  width: calc(100% - 220px);
+  width:100%;
 }
 
 .position-collapse-left {
-  width: calc(100% - 80px);
+  width: 100%;
 }
 
 .footer {
@@ -14403,7 +14403,8 @@ export default {
 
     .baofeijisuan {
       position: absolute;
-      right: 8.333%;
+      right: 0;
+      width: 100%;
       top: 0;
       background: linear-gradient( 270deg, #0052FF 0%, #6899FF 100%);
       border-radius: 4px;

+ 2 - 2
src/views/Task/daikeComponents/KtLetter.vue

@@ -5352,9 +5352,9 @@ export default {
     //身份证失去焦点
     identifyblur(info) {
       this[info].age =typeof getAgeByIdCard(this[info].identifyNumber)=='number' ?getAgeByIdCard(this[info].identifyNumber):'';
-     
+
       this[info].gender = getGenderByIdCard(this[info].identifyNumber);
-   
+
     },
     //车主信息选择性别
     genderChange(e) {

+ 28 - 14
src/views/Task/daikeComponents/KtLetter1.vue

@@ -216,19 +216,19 @@
           </el-col>
           <el-col :xs="colSpan.xs" :sm="colSpan.sm" :md="colSpan.md" :lg="colSpan.lg" :xl="colSpan.xl">
             <el-form-item label="注册日期" prop="registerDate" class="red-btn">
-              <el-date-picker v-model="carInfo.registerDate" :picker-options="pickerOptions" @blur="getCompanyList"
+              <el-date-picker v-dateFormat v-model="carInfo.registerDate" :picker-options="pickerOptions" @blur="getCompanyList"
                 value-format="yyyy-MM-dd" type="date" placeholder="选择注册日期" placement="bottom-start"></el-date-picker>
             </el-form-item>
           </el-col>
           <el-col :xs="colSpan.xs" :sm="colSpan.sm" :md="colSpan.md" :lg="colSpan.lg" :xl="colSpan.xl">
             <el-form-item label="发证日期" prop="issueDate" class="red-btn" @blur="getCompanyList">
-              <el-date-picker v-model="carInfo.issueDate" :picker-options="issueDateOptions" type="date"
+              <el-date-picker v-dateFormat v-model="carInfo.issueDate" :picker-options="issueDateOptions" type="date"
                 placeholder="选择发证日期" value-format="yyyy-MM-dd" placement="bottom-start"></el-date-picker>
             </el-form-item>
           </el-col>
           <el-col :xs="colSpan.xs" :sm="colSpan.sm" :md="colSpan.md" :lg="colSpan.lg" :xl="colSpan.xl" v-if="transferDateShow">
             <el-form-item label="转移登记日期" prop="transferDate">
-              <el-date-picker v-model="carInfo.transferDate" :picker-options="pickerOptions" type="date" @blur="getCompanyList"
+              <el-date-picker v-dateFormat v-model="carInfo.transferDate" :picker-options="pickerOptions" type="date" @blur="getCompanyList"
                 placeholder="选择日期" value-format="yyyy-MM-dd" placement="bottom-start"></el-date-picker>
             </el-form-item>
           </el-col>
@@ -326,14 +326,14 @@
           </el-col>
           <el-col :xs="colSpan.xs" :sm="colSpan.sm" :md="colSpan.md" :lg="colSpan.lg" :xl="colSpan.xl">
             <el-form-item label="有效期起期" prop="identifyValidDate">
-              <el-date-picker v-model="ownerInfo.identifyValidDate" value-format="yyyy-MM-dd" @blur="getCompanyList"
+              <el-date-picker v-dateFormat v-model="ownerInfo.identifyValidDate" value-format="yyyy-MM-dd" @blur="getCompanyList"
                 :picker-options="pickerOptions" type="date" placeholder="选择注册日期"
                 placement="bottom-start"></el-date-picker>
             </el-form-item>
           </el-col>
           <el-col :xs="colSpan.xs" :sm="colSpan.sm" :md="colSpan.md" :lg="colSpan.lg" :xl="colSpan.xl">
             <el-form-item label="有效期止期" prop="identifyValidEndDate" class="red-btn">
-              <el-date-picker v-model="ownerInfo.identifyValidEndDate" type="date" value-format="yyyy-MM-dd" @blur="getCompanyList"
+              <el-date-picker v-dateFormat  v-model="ownerInfo.identifyValidEndDate" type="date" value-format="yyyy-MM-dd" @blur="getCompanyList"
                 placeholder="选择有效期" placement="bottom-start" style="width: calc(100% - 40px)"></el-date-picker>
               <div class="insure-long-term" @click="insureLongterm('ownerInfo')">
                 长期
@@ -441,14 +441,14 @@
             </el-form-item>
           </el-col>
           <el-col :xs="colSpan.xs" :sm="colSpan.sm" :md="colSpan.md" :lg="colSpan.lg" :xl="colSpan.xl">
-            <el-form-item label="有效期起期" prop="identifyValidDate">
-              <el-date-picker v-model="policyHolderInfo.identifyValidDate" value-format="yyyy-MM-dd" @blur="getCompanyList"
+            <el-form-item  label="有效期起期" prop="identifyValidDate">
+              <el-date-picker v-dateFormat v-model="policyHolderInfo.identifyValidDate" value-format="yyyy-MM-dd" @blur="getCompanyList"
                 :picker-options="pickerOptions" type="date" placeholder="选择有效期" placement="bottom-start"></el-date-picker>
             </el-form-item>
           </el-col>
           <el-col :xs="colSpan.xs" :sm="colSpan.sm" :md="colSpan.md" :lg="colSpan.lg" :xl="colSpan.xl">
-            <el-form-item label="有效期止期" prop="identifyValidEndDate">
-              <el-date-picker v-model="policyHolderInfo.identifyValidEndDate" type="date" @blur="getCompanyList"
+            <el-form-item  label="有效期止期" prop="identifyValidEndDate">
+              <el-date-picker v-dateFormat v-model="policyHolderInfo.identifyValidEndDate" type="date" @blur="getCompanyList"
                 value-format="yyyy-MM-dd" placeholder="选择有效期" placement="bottom-start"
                 style="width: calc(100% - 40px)"></el-date-picker>
               <div class="insure-long-term" @click="insureLongterm('policyHolderInfo')">
@@ -571,13 +571,13 @@
           </el-col>
           <el-col :xs="colSpan.xs" :sm="colSpan.sm" :md="colSpan.md" :lg="colSpan.lg" :xl="colSpan.xl">
             <el-form-item label="有效期起期" prop="identifyValidDate">
-              <el-date-picker v-model="insuredPersonInfo.identifyValidDate" value-format="yyyy-MM-dd" @blur="getCompanyList"
+              <el-date-picker v-dateFormat v-model="insuredPersonInfo.identifyValidDate" value-format="yyyy-MM-dd" @blur="getCompanyList"
                 :picker-options="pickerOptions" type="date" placeholder="选择有效期" placement="bottom-start"></el-date-picker>
             </el-form-item>
           </el-col>
           <el-col :xs="colSpan.xs" :sm="colSpan.sm" :md="colSpan.md" :lg="colSpan.lg" :xl="colSpan.xl">
             <el-form-item label="有效期止期" prop="identifyValidEndDate">
-              <el-date-picker v-model="insuredPersonInfo.identifyValidEndDate" type="date" @blur="getCompanyList"
+              <el-date-picker v-dateFormat v-model="insuredPersonInfo.identifyValidEndDate" type="date" @blur="getCompanyList"
                 value-format="yyyy-MM-dd" placeholder="选择有效期" placement="bottom-start"
                 style="width: calc(100% - 40px)"></el-date-picker>
               <div class="insure-long-term" @click="insureLongterm('insuredPersonInfo')">
@@ -4219,6 +4219,15 @@ export default {
         callback(new Error("请输入正确的车牌号"));
       }
     };
+    var validateRight = (rule, value, callback) => {
+      if(!value) {
+        callback(new Error("请选择能源种类"))
+      } else if(this.carInfo.licenseNo.length === 8 && value === '0'){
+        callback(new Error('能源类型错误,请重新选择!'))
+      } else {
+        callback()
+      }
+    };
     return {
       validateCarCodeShow: false,
       vehicleInspectionUrl: '',
@@ -4730,7 +4739,7 @@ export default {
           { required: true, message: "请选择纳税类型", trigger: "blur" },
         ],
         energyType: [
-          { required: true, message: "请选择能源种类", trigger: "blur" },
+          { required: true, validator: validateRight, trigger: "blur" },
         ],
         cimodelclass: [
           { required: true, message: "请选择车辆种类", trigger: "blur" },
@@ -6976,7 +6985,7 @@ export default {
     },
     disabledDate(time) {
       let datetime = this.carInfo.registerDate;
-      return time.getTime() < new Date(datetime).getTime();
+      return time.getTime() < new Date(datetime).getTime()-8.64e7;
     },
 
     onScroll() {
@@ -7972,9 +7981,10 @@ export default {
       this.totalCompanyList[this.typeDialogIndex].programme.teyue = []
       select.map((val) => {
         this.zijinengageList.push({
+
           clauseCode: val.clauseCode,
           clauseName: val.clauseName,
-          clauses: val.replaceContent,
+          clauses: val.clauseContent,
           riskCode: val.riskCode,
         });
         this.totalCompanyList[this.typeDialogIndex].zxProgramme.teyue = this.zijinengageList
@@ -8904,6 +8914,10 @@ export default {
         this.$message({ message: "发证日期早于初登日期", type: "error" });
         return;
       }
+      if(this.carInfo.licenseNo.length === 8&& this.carInfo.energyType === '0') {
+        this.$message.error('能源类型错误,请重新选择!')
+        return;
+      }
       this.policyHolderInfovalidate();
 
       var _this = this;