Преглед изворни кода

Merge branch 'dev' of http://www.baoxianzhanggui.com:8090/sxzgd/vue-insagent-pc into dev

baijunde пре 2 година
родитељ
комит
9155e16f47
67 измењених фајлова са 5576 додато и 923 уклоњено
  1. 2 2
      config/test.env.js
  2. 12 0
      src/assets/image/people/state.svg
  3. BIN
      src/assets/image/task/Inthequotation.png
  4. BIN
      src/assets/image/task/Pendingpayment.png
  5. BIN
      src/assets/image/task/Pendingunderwriting.png
  6. BIN
      src/assets/image/task/Underwrited.png
  7. BIN
      src/assets/image/task/Underwritingreturn.png
  8. BIN
      src/assets/image/task/active_Inthequotation.png
  9. BIN
      src/assets/image/task/active_Pendingpayment.png
  10. BIN
      src/assets/image/task/active_Pendingunderwriting.png
  11. BIN
      src/assets/image/task/active_Underwrited.png
  12. BIN
      src/assets/image/task/active_Underwritingreturn.png
  13. BIN
      src/assets/image/task/active_all.png
  14. BIN
      src/assets/image/task/active_quotation.png
  15. BIN
      src/assets/image/task/all.png
  16. BIN
      src/assets/image/task/hover_Inthequotation.png
  17. BIN
      src/assets/image/task/hover_Pendingpayment.png
  18. BIN
      src/assets/image/task/hover_Pendingunderwriting.png
  19. BIN
      src/assets/image/task/hover_Underwrited.png
  20. BIN
      src/assets/image/task/hover_Underwritingreturn.png
  21. BIN
      src/assets/image/task/hover_all.png
  22. BIN
      src/assets/image/task/hover_quotation.png
  23. BIN
      src/assets/image/task/quotation.png
  24. 496 0
      src/components/PersonnelHistory/index.vue
  25. 4 0
      src/components/TemplateTable/index.vue
  26. 3 3
      src/components/UserDetail/index.vue
  27. 22 0
      src/http/moudules/insCompany.js
  28. 19 0
      src/http/moudules/user.js
  29. 11 11
      src/views/AgreementManage/CarInsurance/SourceManagement.vue
  30. 1 1
      src/views/AgreementManage/InsuranceCompany/CargoTruck/BusinessOperation/Fuel/OptionalsolutionConfig.vue
  31. 1 1
      src/views/AgreementManage/InsuranceCompany/CargoTruck/BusinessOperation/NewEnergy/OptionalsolutionConfig.vue
  32. 1 1
      src/views/AgreementManage/InsuranceCompany/CargoTruck/NonBusiness/Fuel/OptionalsolutionConfig.vue
  33. 1 1
      src/views/AgreementManage/InsuranceCompany/CargoTruck/NonBusiness/NewEnergy/OptionalsolutionConfig.vue
  34. 1 1
      src/views/AgreementManage/InsuranceCompany/PassengerBus/BusinessOperation/Fuel/OptionalsolutionConfig.vue
  35. 1 1
      src/views/AgreementManage/InsuranceCompany/PassengerBus/BusinessOperation/NewEnergy/OptionalsolutionConfig.vue
  36. 1 1
      src/views/AgreementManage/InsuranceCompany/PassengerBus/NonBusiness/Fuel/OptionalsolutionConfig.vue
  37. 1 1
      src/views/AgreementManage/InsuranceCompany/PassengerBus/NonBusiness/NewEnergy/OptionalsolutionConfig.vue
  38. 447 237
      src/views/Core/components/quotationDialog.vue
  39. 431 228
      src/views/Core/components/quotationDialogPro.vue
  40. 4 2
      src/views/FinancialManagement/CarInsurance/CompanySettlement/CarInsurance/DocumentaryFeesDetail.vue
  41. 4 2
      src/views/FinancialManagement/CarInsurance/CompanySettlement/CarInsurance/HandlingFees.vue
  42. 4 2
      src/views/FinancialManagement/CarInsurance/CompanySettlement/NoCarInsurance/DocumentaryFeesDetail.vue
  43. 4 2
      src/views/FinancialManagement/CarInsurance/CompanySettlement/NoCarInsurance/HandlingFees.vue
  44. 4 2
      src/views/FinancialManagement/CarInsurance/PlatformSettlement/NonVehicleBalance.vue
  45. 44 0
      src/views/FinancialManagement/CarInsurance/Verifytasks/Verifyintasks.vue
  46. 47 49
      src/views/Login.vue
  47. 18 1
      src/views/PeopleManage/Agent/AgentManage.vue
  48. 4 2
      src/views/PeopleManage/Institutional.vue
  49. 150 29
      src/views/PeopleManage/InstitutionalExtraction.vue
  50. 10 10
      src/views/PeopleManage/InstitutionalPremium.vue
  51. 104 0
      src/views/PeopleManage/MobileZoomDiv.vue
  52. 88 0
      src/views/PeopleManage/MobileZoomDivR.vue
  53. 88 0
      src/views/PeopleManage/MobileZoomDivTR.vue
  54. 211 28
      src/views/PeopleManage/PartnerExtraction.vue
  55. 248 219
      src/views/PeopleManage/PcLoginRecord.vue
  56. 20 1
      src/views/PeopleManage/Player/PlayerManage.vue
  57. 18 1
      src/views/PeopleManage/Player/PlayerManageteam.vue
  58. 35 0
      src/views/PeopleManage/Sales/SalesExamine.vue
  59. 1107 0
      src/views/PeopleManage/Sales/SalesExamineGroup.vue
  60. 59 2
      src/views/PeopleManage/Sales/SalesManage.vue
  61. 1482 0
      src/views/PeopleManage/Sales/SalesManageGroup.vue
  62. 21 1
      src/views/PeopleManage/Staff/StaffManage.vue
  63. 19 2
      src/views/PeopleManage/TeamLeader/TeamLeaderManage.vue
  64. 12 0
      src/views/PeopleManage/UserMap.vue
  65. 119 2
      src/views/Task/DaikeLetter.vue
  66. 191 73
      src/views/Task/daikeComponents/KtLetter1.vue
  67. 6 4
      src/views/Task/daikeComponents/KtOrder.vue

+ 2 - 2
config/test.env.js

@@ -6,8 +6,8 @@ module.exports = merge(prodEnv, {
   NODE_ENV: '"testing"',
   ENV_CONFIG: '"test"',
   // BASE_URL: '"http://proxy.517game.site:6100"',//测试服务器
-  // BASE_URL: '"https://test.baoxianzhanggui.com/web-api"',//测试服务器
-  BASE_URL: '"https://pre.baoxianzhanggui.com/test/"',
+  BASE_URL: '"https://test.baoxianzhanggui.com/web-api"',//测试服务器
+  // BASE_URL: '"https://pre.baoxianzhanggui.com/test/"',
   APP_BASE_URL: '"https://test.baoxianzhanggui.com/web-api"',    // app打包上传地址
   CONSOLE_BASE_URL: '"https://test.baoxianzhanggui.com/console-api"', //控制台测试服务器
   SOCKET_Url: '"wss://test.baoxianzhanggui.com/web-api/"',

+ 12 - 0
src/assets/image/people/state.svg

@@ -0,0 +1,12 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="Group 1000006926">
+<circle id="Ellipse 1009" cx="8" cy="8" r="8" fill="#D42426" fill-opacity="0.2"/>
+<circle id="Ellipse 1008" cx="8" cy="8" r="5" fill="url(#paint0_linear_144_8637)"/>
+</g>
+<defs>
+<linearGradient id="paint0_linear_144_8637" x1="10.5" y1="12" x2="5.5" y2="4" gradientUnits="userSpaceOnUse">
+<stop stop-color="#D42426"/>
+<stop offset="1" stop-color="#FD2B2D"/>
+</linearGradient>
+</defs>
+</svg>

BIN
src/assets/image/task/Inthequotation.png


BIN
src/assets/image/task/Pendingpayment.png


BIN
src/assets/image/task/Pendingunderwriting.png


BIN
src/assets/image/task/Underwrited.png


BIN
src/assets/image/task/Underwritingreturn.png


BIN
src/assets/image/task/active_Inthequotation.png


BIN
src/assets/image/task/active_Pendingpayment.png


BIN
src/assets/image/task/active_Pendingunderwriting.png


BIN
src/assets/image/task/active_Underwrited.png


BIN
src/assets/image/task/active_Underwritingreturn.png


BIN
src/assets/image/task/active_all.png


BIN
src/assets/image/task/active_quotation.png


BIN
src/assets/image/task/all.png


BIN
src/assets/image/task/hover_Inthequotation.png


BIN
src/assets/image/task/hover_Pendingpayment.png


BIN
src/assets/image/task/hover_Pendingunderwriting.png


BIN
src/assets/image/task/hover_Underwrited.png


BIN
src/assets/image/task/hover_Underwritingreturn.png


BIN
src/assets/image/task/hover_all.png


BIN
src/assets/image/task/hover_quotation.png


BIN
src/assets/image/task/quotation.png


+ 496 - 0
src/components/PersonnelHistory/index.vue

@@ -0,0 +1,496 @@
+<template>
+    <el-dialog  :title="dialogInfo.title" 
+                :visible.sync="dialogInfo.visible" 
+                :show-close="false"
+                top="5vh"
+                width="35%"
+                v-dialogDrag
+                class="personnel_history">
+        <div class="container">
+            <div class="item" v-for="(item,index) of dialogInfo.data" :key="index">
+                <div class="heade">
+                    <div class="title_state">{{ item.status }}</div>
+                    <div class="date">{{ item.createTime }}</div>
+                </div>
+                <div class="card_content">
+                    <div class="row">
+                        <label class="label">提交人</label>
+                        <div class="content">{{ item.createBy }}</div>
+                    </div>
+                    <div class="row">
+                        <label class="label" :title="'修改内容'">修改内容</label>
+                        <div class="content">
+                            <div class="edit_item" v-for="(row, index) in item.list" :key="index">
+                                <div class="oldValue">
+                                    <div class="oldState">修改前</div>
+                                    <div class="key" :title="translate(row.propertyName)">{{ translate(row.propertyName) }}</div>
+                                    <div class="value"  v-if="row.propertyName == 'isSpeciality'">{{ row.oldValue == 1 ? '是' : row.oldValue == 2 ? '否' : '' }}</div>
+                                    <div class="value" v-else-if="row.propertyName == 'realName'">{{ row.oldValue == 'true' ? '是' : row.oldValue == 'false' ? '否' : '' }}</div>
+                                    <div class="value" v-else-if="row.propertyName == 'bankAuthentication'">{{ row.oldValue == 'true' ? '是' : row.oldValue == 'false' ? '否' : '' }}</div>
+                                    <div class="value" v-else-if="row.propertyName == 'sex'">{{ translateSex(row.oldValue) }}</div>
+                                    <div class="value"  v-else>{{ row.oldValue == 'null' ? '--' : row.oldValue }}</div>
+                                    <div class="oldLine"></div>
+                                </div>
+                                <div class="newValue">
+                                    <div class="newState">修改后</div>
+                                    <div class="key" :title="translate(row.propertyName)">{{ translate(row.propertyName) }}</div>
+                                    <div class="value"  v-if="row.propertyName == 'isSpeciality'">{{ row.newValue == 1 ? '是' : row.newValue == 2 ? '否' : '' }}</div>
+                                    <div class="value" v-else-if="row.propertyName == 'realName'">{{ row.newValue == 'true' ? '是' : row.newValue == 'false' ? '否' : '' }}</div>
+                                    <div class="value" v-else-if="row.propertyName == 'bankAuthentication'">{{ row.newValue == 'true' ? '是' : row.newValue == 'false' ? '否' : '' }}</div>
+                                    <div class="value" v-else-if="row.propertyName == 'sex'">{{ translateSex(row.newValue) }}</div>
+                                    <div class="value" v-else :title="row.newValue">{{ row.newValue == 'null' ? '--' : row.newValue }}</div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <div class="step-line"></div>
+            </div>
+        </div>
+        <div class="handler">
+            <el-button size="small" type="primary"  class="closeBtn" @click="close">取消</el-button>            
+        </div>
+    </el-dialog>
+</template>
+
+<script>
+import mixa from "@/views/PeopleManage/mixin";
+const mixin = new mixa({
+  treeTypeNum: null,
+});
+export default {
+    props:{
+        isBusiness: Boolean,
+        default: false
+    },
+    mixins: [mixin],
+    data(){
+        return{
+            dialogInfo: {
+                title: '人员轨迹',
+                visible: false,
+                data: []
+            },
+            translations: {
+                pdeptId: '机构名称',
+                deptId: '机构名称',
+                positionId: '岗位',
+                id: '工号',
+                name: '姓名',
+                mobile: '手机号',
+                entryTime:  '入司时间',
+                status: '状态',
+                roleId: '角色',
+                leaderId: '管理人',
+                leaderName: '管理人工号',
+                agentQualificationCode: '代理人资格证号',
+                referrerId: '推荐人',
+                referrerName: '推荐人工号',
+                identity: '身份证号',
+                sex: '性别',
+                birthday: '出生日期',
+                nations: '民族',
+                koseki: '户籍',
+                maritalStatus: '婚姻状况',
+                politicsStatus: '政治面貌',
+                health: '健康状况',
+                liveAddress: '居住地址',
+                address: '详细地址',
+                postalCode: '邮政编码',
+                education: '学历',
+                school: '毕业院校',
+                graduationTime: '毕业时间',
+                formerEmployer: '原工作单位',
+                password: '密码',
+                emergencyContactName: '紧急联系人姓名',
+                emergencyContactTel: '紧急联系人电话',
+                isSpeciality: '是否计算机专业',
+                salary: '工资',
+                salaryLevel: '工资等级',
+                performance: '绩效方案',
+                accountno: '开户账号',
+                bankName: '开户行',
+                // referrerId: '推荐人',
+                // referrerName: '推荐人工号',
+                status: '状态',
+                // entryTime: '入司时间',
+                logoutTime: '离职时间',
+                weChat: '微信绑定',
+                alipay: '支付宝绑定',
+                realName: '是否实名认证',
+                bankAuthentication: '银行卡是否认证',
+                approvalOpinion: '备注'
+            },
+            regionalTree: []
+        }
+    },
+    created(){
+        this.selectTree();
+    },
+    mounted(){},
+    methods: {
+        // 查询人员修改历史
+        async getHistory(userId){  
+            const data = await this.$api.user.queryHistory({userId})
+            if(data.code == 200){
+                if(data.data.length){
+                    data.data.forEach(item => {
+                        item.list = item.user.concat(item.userInfo);
+                        item.list.forEach(val =>{
+                            if(val.propertyName == 'liveAddress'){
+                                if(val.newValue){
+                                    val.newValue = this.getVal(val.newValue.split(','), this.regionalTree, []);
+                                }
+                                if(val.oldValue){
+                                    val.oldValue = this.getVal(val.oldValue.split(','), this.regionalTree, []);
+                                }
+                            }
+                        })
+                    });
+                    this.dialogInfo.data = data.data;
+                    this.dialogInfo.visible =  true;
+                }else{
+                    this.$message.warning('暂无修改记录');
+                }
+            }else{
+                this.$message({
+                    message: `${data.msg}`,
+                    type: "error",
+                });
+            }
+        },
+        //字段翻译
+        translate(key) {
+            if(this.translations[key] == 'referrerId' && this.isBusiness){
+                return '业务员';
+            }else{
+                return this.translations[key] || 'No translation found';
+            }
+        },
+        //性别翻译
+        translateSex(value){
+            let label = '--';
+            if(value != 'null'){
+                this.sexoptions.forEach((val) => {
+                    if(value == val.value){
+                        label = val.label;
+                    }
+                });
+            }else{
+                
+            }
+            return label;
+        },
+        //查询树结构
+        selectTree(){
+            this.$api.dept.queryTree().then((response) =>{
+                this.regionalTree = this.recursion(response.data);
+            }).catch((error) =>{
+            })
+        },
+        //递归
+        recursion(data){
+            if(data.length){
+                data.forEach(item => {
+                if(item.child.length){
+                    this.recursion(item.child);
+                }else{
+                    delete item.child
+                }
+                });
+                return data;
+            }
+        },
+        //翻译省市区
+        getVal(data, options, arr) {
+            options.forEach((e) => {
+                data.forEach((i) => {
+                if (i == e.areaCode) {
+                    arr.push(e.areaCname);
+                    return;
+                } else {
+                    if (e.child) {
+                    this.getVal([i], e.child, arr);
+                    } else {
+                    return;
+                    }
+                }
+                });
+            });
+            return arr.join('/');
+        },
+        //关闭弹窗
+        close(){
+            this.dialogInfo.visible = false;
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.personnel_history{
+    >>>.el-dialog{
+        min-width: 550px;
+        max-width: 800px;
+        max-height: 650px;
+        .el-dialog__header{
+            height: 50px;
+            line-height: 50px;
+            padding: 0;
+            margin: 0 24px;
+            text-align: center;
+            border-bottom: 1px solid #eee;
+            .el-dialog__title{
+                font-size: 18px;
+                color: #333;
+                font-weight: 500;
+            }
+        }
+        .el-dialog__body{
+            padding: 24px;
+            padding-bottom: 0px;
+            .container{
+                max-height: calc(650px - 64px - 48px - 50px);
+                overflow: auto;
+                .item{
+                    padding-left: 28px;
+                    margin-bottom: 24px;
+                    position: relative;
+                    .heade{
+                        position: relative;
+                        display: flex;
+                        height: 22px;
+                        line-height: 22px;
+                        .title_state{
+                            font-size: 16px;
+                            color: #333;
+                            font-weight: 600;
+                        }
+                        .date{
+                            margin-left: 14px;
+                            font-size: 10px;
+                            color: #999;
+                            font-weight: 300;
+                            letter-spacing: 0.5px;
+                        }
+                    }
+                    .card_content{
+                        height: 178px;
+                        margin-top: 7px;
+                        margin-right: 10px;
+                        padding: 16px;
+                        padding-right: 6px;
+                        background: #FFFFFF;
+                        box-shadow: 0px 0px 10px 0px rgba(0,0,0,0.1);
+                        border-radius: 6px 6px 6px 6px;
+                        .row{
+                            display: flex;
+                            height: 22px;
+                            line-height: 22px;
+                            font-size: 14px;
+                            font-weight: 400;
+                            color: #666;
+                            margin-bottom: 8px;
+                            .label{
+                                width: 60px;
+                                margin-right: 18px;
+                                white-space: nowrap; /* 确保文本在一行内显示 */
+                                overflow: hidden; /* 超出容器部分隐藏 */
+                                text-overflow: ellipsis; /* 超出部分显示打点 */
+                            }
+                            .content{
+                                width: calc(100% - 82px);
+                                font-weight: 400;
+                                font-size: 14px;
+                                color: #333;
+                                min-height: 140px;
+                                overflow-y: auto;
+                                .edit_item{
+                                    margin-bottom: 12px;
+                                    padding-left: 5px;
+                                    .oldValue{
+                                        margin-bottom: 8px;
+                                        margin-left: 15px;
+                                        position: relative;
+                                        display: flex;
+                                        align-items: center;
+                                        .oldState{
+                                            min-width: 36px;
+                                            color: #F63B3D;
+                                            font-size: 12px;
+                                            padding: 0 3px;
+                                            border-radius: 2px 2px 2px 2px;
+                                            border: 1px solid #F63B3D;
+                                            margin-right: 14px;
+                                        }
+                                        
+                                    }
+                                    .key{
+                                            max-width: 160px;
+                                            // min-width: 60px;
+                                            font-size: 14px;
+                                            margin-right: 5px;
+                                            white-space: nowrap; /* 确保文本在一行内显示 */
+                                            overflow: hidden; /* 超出容器部分隐藏 */
+                                            text-overflow: ellipsis; /* 超出部分显示打点 */
+                                        }
+                                    .newValue{
+                                        position: relative;
+                                        margin-left: 15px;
+                                        display: flex;
+                                        .newState{
+                                            min-width: 36px;
+                                            color: #1DD07A;
+                                            font-size: 12px;
+                                            padding: 0 3px;
+                                            border-radius: 2px 2px 2px 2px;
+                                            border: 1px solid #1DD07A;
+                                            margin-right: 14px;
+                                        }
+                                    }
+                                    .value{
+                                        max-width: 400px;
+                                        min-width: calc(100% - 36px - 160px);
+                                        display: inline-block;
+                                        white-space: nowrap; /* 确保文本在一行内显示 */
+                                        overflow: hidden; /* 超出容器部分隐藏 */
+                                        text-overflow: ellipsis; /* 超出部分显示打点 */
+                                    }
+                                    .oldValue::before{
+                                        content: ''; /* 生成伪元素的内容,但这里不需要实际文本,所以为空 */  
+                                        display: inline-block; /* 使伪元素以行内块级元素显示 */  
+                                        width: 6px; /* 小圆点的宽度 */  
+                                        height: 6px; /* 小圆点的高度 */  
+                                        background-color: #F63B3D; /* 小圆点的颜色 */  
+                                        border-radius: 50%; /* 将方形变成圆形 */  
+                                        vertical-align: middle; /* 垂直居中,如果需要的话 */  
+                                        position: absolute;
+                                        left: -16px;
+                                        top: 50%;
+                                        transform: translateY(-50%);
+                                        z-index: 2;
+                                    }
+                                    .newValue::before{
+                                        content: ''; /* 生成伪元素的内容,但这里不需要实际文本,所以为空 */  
+                                        display: inline-block; /* 使伪元素以行内块级元素显示 */  
+                                        width: 6px; /* 小圆点的宽度 */  
+                                        height: 6px; /* 小圆点的高度 */  
+                                        background-color: #1DD07A; /* 小圆点的颜色 */  
+                                        border-radius: 50%; /* 将方形变成圆形 */  
+                                        vertical-align: middle; /* 垂直居中,如果需要的话 */  
+                                        position: absolute;
+                                        left: -16px;
+                                        top: 50%;
+                                        transform: translateY(-50%);
+                                        z-index: 2;
+                                    }
+                                    .oldLine{
+                                        position: absolute;
+                                        top: 10px; /* 根据圆点的尺寸调整 */
+                                        left: -14px; /* 将竖线居中对齐 */
+                                        bottom: -20px; /* 调整竖线的长度 */
+                                        width: 1px;
+                                        background: linear-gradient(to bottom, rgba(246, 59, 61, 1), rgba(29, 208, 122, 1));
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+                .heade::before {  
+                    content: ''; /* 生成伪元素的内容,但这里不需要实际文本,所以为空 */  
+                    display: inline-block; /* 使伪元素以行内块级元素显示 */  
+                    width: 10px; /* 小圆点的宽度 */  
+                    height: 10px; /* 小圆点的高度 */  
+                    background: #fff;
+                    border: 1px solid #E5E5E5; /* 小圆点的颜色 */  
+                    border-radius: 50%; /* 将方形变成圆形 */  
+                    vertical-align: middle; /* 垂直居中,如果需要的话 */  
+                    position: absolute;
+                    left: -25px;
+                    top: 50%;
+                    transform: translateY(-50%);
+                    z-index: 2;
+                    box-sizing: border-box;
+                }
+                .item:first-child .heade{
+                    .title_state{
+                        font-size: 16px;
+                        color: #D42426;
+                        font-weight: 600;
+                    }
+                    .date{
+                        margin-left: 14px;
+                        font-size: 10px;
+                        color: #D42426;
+                        font-weight: 300;
+                    }
+                    &::before{
+                        content: ''; /* 生成伪元素的内容,但这里不需要实际文本,所以为空 */  
+                        display: inline-block; /* 使伪元素以行内块级元素显示 */  
+                        width: 16px; /* 小圆点的宽度 */  
+                        height: 16px; /* 小圆点的高度 */  
+                        background: url('~@/assets/image/people/state.svg') no-repeat;
+                        background-size: 100% 100%;
+                        vertical-align: middle; /* 垂直居中,如果需要的话 */  
+                        position: absolute;
+                        left: -28px;
+                        top: 50%;
+                        transform: translateY(-50%);
+                        z-index: 2;
+                    }
+                }
+                .step-line {
+                    position: absolute;
+                    top: 10px; /* 根据圆点的尺寸调整 */
+                    left: 8px; /* 将竖线居中对齐 */
+                    bottom: -40px; /* 调整竖线的长度 */
+                    width: 1px;
+                    background-color: #e5e5e5;
+                }
+                .item:last-child .step-line{
+                    display: none;
+                }
+            }
+            .handler{
+                height: 64px;
+                line-height: 64px;
+                border-top: 1px solid #eee;
+                text-align: right;
+                .el-button{
+                    width: 90px;
+                    height: 36px;
+                    font-size: 16px;
+                    color: #D42426;
+                    border-radius: 2px 2px 2px 2px;
+                    border: 1px solid #D42426;
+                    font-weight: 300 !important;
+                    background: #fff;
+                    &:hover{
+                        background: #fff;
+                    }
+                }
+            }
+        }
+        .el-cascader{
+            min-width: 175px;
+            height: 22px;
+            line-height: 22px;
+            cursor: auto;
+            .el-input__suffix{
+                display: none;
+            }
+            .el-input__inner{
+                padding: 0;
+                border: 0;
+                height: 16px;
+                color: #333;
+                font-size: 14px;
+                font-weight: 400;
+                cursor: auto;
+                background: transparent;
+            }
+        }
+    }
+}
+</style>

+ 4 - 0
src/components/TemplateTable/index.vue

@@ -217,6 +217,7 @@
       element-loading-spinner="el-icon-loading"
       @selection-change="handleSelectionChange"
       @select-all="selectAll"
+      @row-click="rowClick"
       :row-style="{ height: '55px' }"
       :cell-style="{ padding: '0px' }"
       @current-change="handleCurrentTableChange"
@@ -562,6 +563,9 @@ export default {
     selectAll(currentRow) {
       this.$emit("selectAll", currentRow, this.$refs.table);
     },
+    rowClick(currentRow) {
+      this.$emit("rowClick", currentRow, this.$refs.table);
+    },
     handleSizeChange(value) {
       this.pagination.pageSize = value;
       this.pagination.pageNum = 1;

+ 3 - 3
src/components/UserDetail/index.vue

@@ -142,7 +142,7 @@
       </el-row>
       <el-row>
         <el-col :span="8">
-          <el-form-item label="居住地址" prop="address">
+          <el-form-item label="居住地址">
             <!-- <el-select
               
               v-model="formDataDetail.address"
@@ -312,8 +312,8 @@
               placeholder="请选择"
               v-model="formDataDetail.isSpeciality"
             >
-              <el-option label="是" :value="1"></el-option>
-              <el-option label="否" :value="2"></el-option>
+              <el-option label="是" value="1"></el-option>
+              <el-option label="否" value="2"></el-option>
             </el-select>
             <!-- <el-input
               :disabled="isDisabled"

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

@@ -825,6 +825,28 @@ export const queryExtractFeeAll = (data) => {
     data
   })
 }
+export const queryAgencyUser = (params) => {
+  return axios({
+    url: '/agency/queryAgencyUser',
+    method: "get",
+    params
+  })
+}
+export const queryAgencyUserInsAreaPage = (data) => {
+  return axios({
+    url: '/agency/queryAgencyUserInsAreaPage',
+    method: "post",
+    data
+  })
+}
+export const queryAgencyLeaderById = (data) => {
+  return axios({
+    url: '/sysPartner/queryAgencyLeaderById',
+    method: "post",
+    data
+  })
+}
+
 // 合伙人、工作室管理机构树
 export const getSysDeptTree = () => {
   return axios({

+ 19 - 0
src/http/moudules/user.js

@@ -1,3 +1,4 @@
+import { param } from 'jquery'
 import axios from '../axios'
 
 /*
@@ -170,6 +171,15 @@ export const deleteFlag = (data) => {
   })
 }
 
+// 查询修改历史  人员管理通用
+export const queryHistory = (params) => {
+  return axios({
+    url: '/user/getUserModificationRecords',
+    method: 'get',
+    params
+  })
+}
+
 
 
 // 查找用户的菜单权限标识集合
@@ -643,3 +653,12 @@ export const queryGeographyRecord = (data) => {
     data
   })
 }
+
+
+// 电销管理人
+export const findDxUserList = () => {
+  return axios({
+    url: '/user/findDxUserList',
+    method: 'get',
+  })
+}

+ 11 - 11
src/views/AgreementManage/CarInsurance/SourceManagement.vue

@@ -163,11 +163,11 @@
           <el-form-item label="保险公司编码">
             <el-input disabled style="width:215px" v-model="configurationForm.companyId" placeholder="输入保险公司编码"></el-input>
           </el-form-item>
-      
+
           <el-form-item label="保险公司名称">
             <el-input disabled style="width:215px" v-model="configurationForm.companyName" placeholder="输入保险公司名称"></el-input>
           </el-form-item>
-       
+
           <el-form-item label="pc是否启用">
               <el-switch
               v-model="configurationForm.pcStart"
@@ -177,7 +177,7 @@
             >
             </el-switch>
           </el-form-item>
-        
+
           <el-form-item label="app是否启用">
             <el-switch
               v-model="configurationForm.appStart"
@@ -187,10 +187,10 @@
             >
             </el-switch>
           </el-form-item>
-       
+
           <el-form-item label="险种">
             <el-select v-model="configurationForm.productsCode" clearable multiple  placeholder="选择险种" size="small" >
-              <el-option v-for="item in insuranceRepertoire" :key="item.dictValue" :label="item.dictTag" 
+              <el-option v-for="item in insuranceRepertoire" :key="item.dictValue" :label="item.dictTag"
                 :value="item.dictValue"></el-option>
             </el-select>
           </el-form-item>
@@ -596,7 +596,7 @@ export default {
       this.$api.insCompany
         .dispatchQueryPage(this.dispatchRequest)
         .then((res) => {
-         
+
           this.dispatchResult = res.data;
         });
     },
@@ -637,13 +637,13 @@ export default {
       this.tableConfig.loading = true;
       this.$api.dept.insureCompany({ ...this.pageData,...data }).then((res) => {
         this.tableConfig.loading = false;
-        res.data.content.forEach(val=>{
+        res.data.records.forEach(val=>{
           val.productsCode= val.productsCode?val.productsCode.split(","):''
         })
-        this.pageResult = res.data.content;
-        this.pageData.pageNum = res.data.pageNum;
-        this.pageData.pageSize = res.data.pageSize;
-        this.pageData.totalSize = res.data.totalSize;
+        this.pageResult = res.data.records;
+        this.pageData.pageNum = res.data.current;
+        this.pageData.pageSize = res.data.size;
+        this.pageData.totalSize = res.data.total;
       });
     },
     //协议调度提交

+ 1 - 1
src/views/AgreementManage/InsuranceCompany/CargoTruck/BusinessOperation/Fuel/OptionalsolutionConfig.vue

@@ -33,7 +33,7 @@
               </el-col>
               <el-col :span="20">
                 <el-form-item label="投保指引">
-                  <el-input type="textarea" v-model="CustomPlanData.description" placeholder="输入投保指引" maxlength="200"
+                  <el-input type="textarea" v-model="CustomPlanData.description" placeholder="输入投保指引"
                     show-word-limit></el-input>
                 </el-form-item>
               </el-col>

+ 1 - 1
src/views/AgreementManage/InsuranceCompany/CargoTruck/BusinessOperation/NewEnergy/OptionalsolutionConfig.vue

@@ -33,7 +33,7 @@
               </el-col>
               <el-col :span="20">
                 <el-form-item label="投保指引">
-                  <el-input type="textarea" v-model="CustomPlanData.description" placeholder="输入投保指引" maxlength="200"
+                  <el-input type="textarea" v-model="CustomPlanData.description" placeholder="输入投保指引"
                     show-word-limit></el-input>
                 </el-form-item>
               </el-col>

+ 1 - 1
src/views/AgreementManage/InsuranceCompany/CargoTruck/NonBusiness/Fuel/OptionalsolutionConfig.vue

@@ -33,7 +33,7 @@
               </el-col>
               <el-col :span="20">
                 <el-form-item label="投保指引">
-                  <el-input type="textarea" v-model="CustomPlanData.description" placeholder="输入投保指引" maxlength="200"
+                  <el-input type="textarea" v-model="CustomPlanData.description" placeholder="输入投保指引"
                     show-word-limit></el-input>
                 </el-form-item>
               </el-col>

+ 1 - 1
src/views/AgreementManage/InsuranceCompany/CargoTruck/NonBusiness/NewEnergy/OptionalsolutionConfig.vue

@@ -33,7 +33,7 @@
               </el-col>
               <el-col :span="20">
                 <el-form-item label="投保指引">
-                  <el-input type="textarea" v-model="CustomPlanData.description" placeholder="输入投保指引" maxlength="200"
+                  <el-input type="textarea" v-model="CustomPlanData.description" placeholder="输入投保指引"
                     show-word-limit></el-input>
                 </el-form-item>
               </el-col>

+ 1 - 1
src/views/AgreementManage/InsuranceCompany/PassengerBus/BusinessOperation/Fuel/OptionalsolutionConfig.vue

@@ -33,7 +33,7 @@
               </el-col>
               <el-col :span="20">
                 <el-form-item label="投保指引">
-                  <el-input type="textarea" v-model="CustomPlanData.description" placeholder="输入投保指引" maxlength="200"
+                  <el-input type="textarea" v-model="CustomPlanData.description" placeholder="输入投保指引"
                     show-word-limit></el-input>
                 </el-form-item>
               </el-col>

+ 1 - 1
src/views/AgreementManage/InsuranceCompany/PassengerBus/BusinessOperation/NewEnergy/OptionalsolutionConfig.vue

@@ -33,7 +33,7 @@
               </el-col>
               <el-col :span="20">
                 <el-form-item label="投保指引">
-                  <el-input type="textarea" v-model="CustomPlanData.description" placeholder="输入投保指引" maxlength="200"
+                  <el-input type="textarea" v-model="CustomPlanData.description" placeholder="输入投保指引"
                     show-word-limit></el-input>
                 </el-form-item>
               </el-col>

+ 1 - 1
src/views/AgreementManage/InsuranceCompany/PassengerBus/NonBusiness/Fuel/OptionalsolutionConfig.vue

@@ -33,7 +33,7 @@
               </el-col>
               <el-col :span="20">
                 <el-form-item label="投保指引">
-                  <el-input type="textarea" v-model="CustomPlanData.description" placeholder="输入投保指引" maxlength="200"
+                  <el-input type="textarea" v-model="CustomPlanData.description" placeholder="输入投保指引"
                     show-word-limit></el-input>
                 </el-form-item>
               </el-col>

+ 1 - 1
src/views/AgreementManage/InsuranceCompany/PassengerBus/NonBusiness/NewEnergy/OptionalsolutionConfig.vue

@@ -33,7 +33,7 @@
               </el-col>
               <el-col :span="20">
                 <el-form-item label="投保指引">
-                  <el-input type="textarea" v-model="CustomPlanData.description" placeholder="输入投保指引" maxlength="200"
+                  <el-input type="textarea" v-model="CustomPlanData.description" placeholder="输入投保指引"
                     show-word-limit></el-input>
                 </el-form-item>
               </el-col>

+ 447 - 237
src/views/Core/components/quotationDialog.vue

@@ -1,47 +1,121 @@
 <template>
-    <el-dialog :visible.sync="dialogVisible" width="1080px" class="quotation_style">
-        <div id="pdfContentsDiv" style="padding: 25px;height: auto;" v-watermark='userId'>
-            <div slot="title" class="dialog-title quotation-title">
-                <img :src="queryOrders.logoImg" class="align" alt
-                    style="width: 28px; height: 28px;vertical-align: middle" />
-                <span>{{ queryOrders.inscompany }}-报价单</span>
-            </div>
-            <div class="vehicle">
-                <li>
-                    <span>订单号:</span>{{ queryOrders.orderno }}
-                </li>
-                <li>
-                    <span>发动机号:</span>{{ queryOrders.carinfo.engineNo }}
-                </li>
-                <li>
-                    <span>车主姓名:</span>{{ queryOrders.ownerinfo.name }}
-                </li>
-                <li>
-                    <span>车牌号:</span>{{ queryOrders.carinfo.licenseNo }}
-                </li>
-                <li>
-                    <span>车架号:</span>{{ queryOrders.carinfo.vinNo }}
-                </li>
-                <li>
-                    <span>投保人姓名:</span>{{ queryOrders.applyinfo.name }}
-                </li>
-                <li>
-                    <span>车型:</span>{{ queryOrders.carinfo.modelcname }}
-                </li>
-                <li>
-                    <span>座位数:</span>{{ queryOrders.carinfo.seatCount }}
-                </li>
-                <li>
-                    <span>被保人姓名:</span>{{ queryOrders.insureinfo.name }}
-                </li>
-                <li style="width: 100%;">
-                    <span>车辆交强险保险期间:</span>{{ queryOrders.jqstartdate }} 至 {{ queryOrders.jqenddate }}
-                </li>
-                <li style="width: 100%;" v-if="queryOrders.systartdate && queryOrders.syenddate">
-                    <span>车辆商业险保险期间:</span>{{ queryOrders.systartdate }} 至 {{ queryOrders.syenddate }}
-                </li>
-            </div>
-            <!-- <el-descriptions :column="5" border direction="vertical">
+  <el-dialog :visible.sync="dialogVisible" width="1080px" class="quotation_style">
+    <div id="pdfContentsDiv" style="padding: 25px;height: auto;" v-watermark='userId'>
+      <div slot="title" class="dialog-title quotation-title flex a-c j-s">
+        <div>
+          <img :src="queryOrders.logoImg" class="align" alt style="width: 28px; height: 28px;vertical-align: middle" />
+          <span>{{ queryOrders.inscompany }}-报价单</span>
+        </div>
+        <span style="margin-right: 30px;">{{ queryOrders.orderno }}</span>
+      </div>
+      <div class="tableInfo">
+        <div class="header">车辆信息</div>
+        <el-descriptions :column="3" border>
+          <el-descriptions-item label="车牌号">{{
+            queryOrders.carinfo.licenseNo }}</el-descriptions-item>
+          <el-descriptions-item label="车架号">{{ queryOrders.carinfo.vinNo }}</el-descriptions-item>
+          <el-descriptions-item label="发动机号">{{ queryOrders.carinfo.engineNo }}</el-descriptions-item>
+          <el-descriptions-item label="座位数">
+            {{ queryOrders.carinfo.seatCount }}
+          </el-descriptions-item>
+          <el-descriptions-item label="车型" :span="2">{{ queryOrders.carinfo.modelcname }}</el-descriptions-item>
+          <el-descriptions-item label="注册日期" :span="1.5">{{ queryOrders.carinfo.registerDate }}</el-descriptions-item>
+          <el-descriptions-item label="发证日期" :span="1.5">{{ queryOrders.carinfo.issueDate }}</el-descriptions-item>
+        </el-descriptions>
+      </div>
+      <div class="tableInfo">
+        <div class="header">投被保人信息</div>
+        <el-descriptions :column="3" border>
+          <el-descriptions-item label="车主姓名">{{
+            queryOrders.ownerinfo.name }}</el-descriptions-item>
+          <el-descriptions-item label="投保人姓名">{{ queryOrders.applyinfo.name }}</el-descriptions-item>
+          <el-descriptions-item label="被保人姓名">{{ queryOrders.insureinfo.name }}</el-descriptions-item>
+          <el-descriptions-item label="车主身份证号">
+            {{ queryOrders.ownerinfo.identifyNumber}}
+          </el-descriptions-item>
+          <el-descriptions-item label="投保人身份证号">{{ queryOrders.applyinfo.identifyNumber }}</el-descriptions-item>
+          <el-descriptions-item label="被保人身份证号">{{ queryOrders.insureinfo.identifyNumber }}</el-descriptions-item>
+        </el-descriptions>
+      </div>
+      <div class="tableInfo">
+        <div class="header">投保信息</div>
+        <el-descriptions :column="2" border>
+          <el-descriptions-item v-if="queryOrders.jqstartdate && queryOrders.jqenddate" label="交强险起保日期">{{
+            queryOrders.jqstartdate }}</el-descriptions-item>
+          <el-descriptions-item v-if="queryOrders.jqstartdate && queryOrders.jqenddate" label="交强险终保日期">{{
+            queryOrders.jqenddate }}</el-descriptions-item>
+          <el-descriptions-item v-if="queryOrders.systartdate && queryOrders.syenddate" label="商业险起保日期">{{
+            queryOrders.systartdate }}</el-descriptions-item>
+          <el-descriptions-item v-if="queryOrders.systartdate && queryOrders.syenddate" label="商业险终保日期">
+            {{ queryOrders.syenddate }}
+          </el-descriptions-item>
+        </el-descriptions>
+      </div>
+
+      <!-- <div class="tableInfo">
+        <div class="header flex a-c j-start">
+          <span>车辆信息</span>
+        </div>
+        <div class="content flex a-c  f-wrap">
+          <div class="flex a-c">
+            <div class="textBlock flex j-c a-c">车牌号</div>
+            <div class="dataBlock flex j-c a-c"></div>
+          </div>
+          <div class="flex a-c">
+            <div class="textBlock flex j-c a-c">车架号</div>
+            <div class="dataBlock flex j-c a-c">{{ queryOrders.carinfo.vinNo }}</div>
+          </div>
+          <div class="flex a-c">
+            <div class="textBlock flex j-c a-c">发动机号</div>
+            <div class="dataBlock flex j-c a-c">{{ queryOrders.carinfo.engineNo }}</div>
+          </div>
+          <div class="flex a-c">
+            <div class="textBlock flex j-c a-c" >座位数</div>
+            <div class="dataBlock flex j-c a-c">{{ queryOrders.carinfo.seatCount }}</div>
+          </div>
+          <div class="flex a-c">
+            <div class="textBlock flex j-c a-c">车型</div>
+            <div class="dataBlock flex j-c a-c">{{ queryOrders.carinfo.modelcname }}</div>
+          </div>
+        </div>
+      </div> -->
+
+      <!-- <div class="vehicle">
+        <li>
+          <span>订单号:</span>
+        </li>
+        <li>
+          <span>发动机号:</span>{{ queryOrders.carinfo.engineNo }}
+        </li>
+        <li>
+          <span>车主姓名:</span>{{ queryOrders.ownerinfo.name }}
+        </li>
+        <li>
+          <span>车牌号:</span>{{ queryOrders.carinfo.licenseNo }}
+        </li>
+        <li>
+          <span>车架号:</span>{{ queryOrders.carinfo.vinNo }}
+        </li>
+        <li>
+          <span>投保人姓名:</span>{{ queryOrders.applyinfo.name }}
+        </li>
+        <li>
+          <span>车型:</span>{{ queryOrders.carinfo.modelcname }}
+        </li>
+        <li>
+          <span>座位数:</span>{{ queryOrders.carinfo.seatCount }}
+        </li>
+        <li>
+          <span>被保人姓名:</span>{{ queryOrders.insureinfo.name }}
+        </li>
+        <li style="width: 100%;">
+          <span>车辆交强险保险期间:</span>{{ queryOrders.jqstartdate }} 至 {{ queryOrders.jqenddate }}
+        </li>
+        <li style="width: 100%;" v-if="queryOrders.systartdate && queryOrders.syenddate">
+          <span>车辆商业险保险期间:</span>{{ queryOrders.systartdate }} 至 {{ queryOrders.syenddate }}
+        </li>
+      </div> -->
+      <!-- <el-descriptions :column="5" border direction="vertical">
                 <el-descriptions-item label="交强险">{{ queryOrders.jqpremium ? '¥' + queryOrders.jqpremium : '-'
                 }}</el-descriptions-item>
                 <el-descriptions-item label="车船税">{{ queryOrders.taxamount ? '¥' + queryOrders.taxamount : '-'
@@ -54,57 +128,99 @@
                     <span style="color:#D42426">¥{{ queryOrders.sumpremium }}</span>
                 </el-descriptions-item>
             </el-descriptions> -->
-            <el-table :data="allProducts" stripe border :span-method="objectSpanMethod"
-                :header-cell-style="{ background: '#D42426 ', fontWeight: '500', color: '#fff' }" style="width: 100%">
-                <el-table-column width="100" prop="label" align="center" label="产品类型">
-                </el-table-column>
-                <el-table-column width="450" prop="name" align="center" label="险别/名称">
-                </el-table-column>
-                <el-table-column align="center" prop="amount" label="保额">
-                    <template slot-scope="scope">
-                        <div v-if="['D4', 'SY_FJ_YBW2'].includes(scope.row.kindCode)">
-                            <span>{{ scope.row.unitAmount }}</span>/<span>{{ queryOrders.carinfo.seatCount - 1 }}座</span>
-                        </div>
-                        <div v-else-if="['MJ1', 'MJ2', 'MJ3', 'MJ4'].includes(
-                            scope.row.kindCode
-                        )
-                            ">
-                            <span>{{ scope.row.deductibleRate }}</span>
-                        </div>
-                        <div v-else-if="['TY1', 'TY2', 'TY3', 'TY4'].includes(
-                            scope.row.kindCode
-                        )
-                            ">
-                            <span>{{ scope.row.serviceTimes }}/次</span>
-                        </div>
-                        <div v-else>
-                            <span>{{ scope.row.amount }}</span>
-                        </div>
-                    </template>
-                </el-table-column>
-                <el-table-column align="center" prop="coveragePremium" label="保费(元)">
-                    <template slot-scope="scope">
-                        {{ scope.row.label=='商业险'?scope.row.coveragePremium:scope.row.label=='驾意险'?scope.row.premium!=0?scope.row.premium:'-':'-' }}
-                    </template>
-                </el-table-column>
-                <el-table-column align="center" prop="totalPremium" label="总计(元)">
-                    <template slot-scope="scope">
-                        <span style="color:#D42426;font-weight: bold;">{{ scope.row.totalPremium }}</span>
-                    </template>
-                </el-table-column>
-            </el-table>
-            <div class="payable_amount">
-                <h3>
-                  <span v-if="queryOrders.jqpremium">交强险:{{  queryOrders.jqpremium + '元' }}</span>
-                    <span v-if="queryOrders.sypremium">车辆商业险:{{  queryOrders.sypremium +  '元' }}</span>
-                    <span v-if="queryOrders.jypremium">驾意险:{{  queryOrders.jypremium +  '元' }}</span>
-                    <span v-if="queryOrders.taxamount">车船税:{{  queryOrders.taxamount +  '元' }}</span>
-                </h3>
-                <h2>
-                    <span v-if="queryOrders.sumpremium">应缴金额:<b style="color:#D42426;font-size:26px">{{  queryOrders.sumpremium }}</b> <span style="color:#D42426;font-size:20px">元</span></span>
-                </h2>
+      <el-table :data="allProducts" stripe border :span-method="objectSpanMethod"
+        :header-cell-style="{ background: '#D42426 ', fontWeight: '500', color: '#fff' }" style="width: 100%">
+        <el-table-column width="100" prop="label" align="center" label="产品类型">
+        </el-table-column>
+        <el-table-column width="450" prop="name" align="center" label="险别/名称">
+        </el-table-column>
+        <el-table-column align="center" prop="amount" label="保额">
+          <template slot-scope="scope">
+            <div v-if="['D4', 'SY_FJ_YBW2'].includes(scope.row.kindCode)">
+              <span>{{ scope.row.unitAmount }}</span>/<span>{{ queryOrders.carinfo.seatCount - 1 }}座</span>
+            </div>
+            <div v-else-if="['MJ1', 'MJ2', 'MJ3', 'MJ4'].includes(
+              scope.row.kindCode
+            )
+              ">
+              <span>{{ scope.row.deductibleRate }}</span>
             </div>
-            <!-- <el-table v-if="queryOrders.jqInsuranceType && queryOrders.jqInsuranceType.length > 0"
+            <div v-else-if="['TY1', 'TY2', 'TY3', 'TY4'].includes(
+              scope.row.kindCode
+            )
+              ">
+              <span>{{ scope.row.serviceTimes }}/次</span>
+            </div>
+            <div v-else>
+              <span>{{ scope.row.amount }}</span>
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="coveragePremium" label="保费(元)">
+          <template slot-scope="scope">
+            {{
+              scope.row.label == '商业险' ? scope.row.coveragePremium : '-'
+            }}
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="totalPremium" label="总计(元)">
+          <template slot-scope="scope">
+            <span style="color:#D42426;font-weight: bold;font-size: 16px;">{{ scope.row.totalPremium }}</span>
+          </template>
+        </el-table-column>
+      </el-table>
+      <el-table v-if="jyProducts.length>0" :data="jyProducts" stripe border :span-method="objectSpanMethod1"
+        :header-cell-style="{ background: '#D42426 ', fontWeight: '500', color: '#fff' }" style="width: 100%;margin-top:20px;">
+        <el-table-column width="100" prop="label" align="center" label="驾意险名称">
+        </el-table-column>
+        <el-table-column width="450" prop="name" align="center" label="保险责任">
+        </el-table-column>
+        <el-table-column align="center" prop="amount" label="保额"></el-table-column>
+        <el-table-column align="center" prop="premium" label="保费(元)">
+          <template slot-scope="scope">
+            {{
+              scope.row.premium && scope.row.premium != 0 ? scope.row.premium : '-'
+            }}
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="each" label="每份">
+        </el-table-column>
+        <el-table-column align="center" prop="totalPremium" label="总计(元)">
+          <template slot-scope="scope">
+            <span style="color:#D42426;font-weight: bold;font-size: 16px;">{{ queryOrders.jypremium /
+            (queryOrders.jyQuantity ? queryOrders.jyQuantity : 1)
+          }}/每份</span>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="tableInfo" style="margin-top:20px;" v-if="queryOrders.jyName">
+        <el-descriptions direction="vertical" :column="5" border>
+          <el-descriptions-item label="驾意险名称" label-class-name="my-label">{{ queryOrders.jyName }}</el-descriptions-item>
+          <el-descriptions-item label="座位数" label-class-name="my-label">{{ queryOrders.carinfo.seatCount
+          }}座</el-descriptions-item>
+          <el-descriptions-item label="份数" label-class-name="my-label">{{ queryOrders.jyQuantity ? queryOrders.jyQuantity : 1
+          }}份</el-descriptions-item>
+          <el-descriptions-item label="每份" label-class-name="my-label">{{ queryOrders.jypremium /
+            (queryOrders.jyQuantity ? queryOrders.jyQuantity : 1)
+          }}/每份
+          </el-descriptions-item>
+          <el-descriptions-item label="合计(元)" label-class-name="my-label" content-class-name="my-content">合计:{{
+            queryOrders.jypremium }}</el-descriptions-item>
+        </el-descriptions>
+      </div>
+      <div class="payable_amount">
+        <h3>
+          <span v-if="queryOrders.jqpremium">交强险:{{ queryOrders.jqpremium + '元' }}</span>
+          <span v-if="queryOrders.sypremium">车辆商业险:{{ queryOrders.sypremium + '元' }}</span>
+          <span v-if="queryOrders.jypremium">驾意险:{{ queryOrders.jypremium + '元' }}</span>
+          <span v-if="queryOrders.taxamount">车船税:{{ queryOrders.taxamount + '元' }}</span>
+        </h3>
+        <h2>
+          <span v-if="queryOrders.sumpremium">应缴金额:<b style="color:#D42426;font-size:26px">{{ queryOrders.sumpremium
+          }}</b> <span style="color:#D42426;font-size:20px">元</span></span>
+        </h2>
+      </div>
+      <!-- <el-table v-if="queryOrders.jqInsuranceType && queryOrders.jqInsuranceType.length > 0"
                 :data="queryOrders.jqInsuranceType" stripe border
                 :header-cell-style="{ background: '#F7F7F9 ', fontWeight: '500', color: '#333333' }" style="width: 100%">
                 <el-table-column prop="name" align="center" label="交强险名称">
@@ -173,185 +289,279 @@
                     </template>
                 </el-table-column>
             </el-table> -->
-            <div style="margin: 10px 0;">报价时间:{{ queryOrders.createtime }}</div>
-            <div>注:本报价单仅供参考,最终以出单价格为准。</div>
-        </div>
-        <span slot="footer" class="dialog-footer">
-            <el-button type="primary" size="small" @click="copybjd()">截图</el-button>
-            <el-button size="small" type="primary" plain @click="dialogVisible = false;allProducts=[]">关闭</el-button>
-        </span>
-    </el-dialog>
+      <div style="margin: 10px 0;">报价时间:{{ queryOrders.createtime }}</div>
+      <div>注:本报价单仅供参考,最终以出单价格为准。</div>
+    </div>
+    <span slot="footer" class="dialog-footer">
+      <el-button type="primary" size="small" @click="copybjd()">截图</el-button>
+      <el-button size="small" type="primary" plain @click="dialogVisible = false; allProducts = []">关闭</el-button>
+    </span>
+  </el-dialog>
 </template>
 <script>
 import html2Canvas from "html2canvas";
 import Cookies from "js-cookie";
 
 export default {
-    name: "quotationDialog",
-    props: {
-        queryOrders: {
-            type: Object,
-            default: {}
-        }
-    },
-    data() {
-        return {
-            dialogVisible: false,
-            logoImg: '',
-            userId: Cookies.get("user"),
-            allProducts: []
-        }
-    },
+  name: "quotationDialog",
+  props: {
+    queryOrders: {
+      type: Object,
+      default: {}
+    }
+  },
+  data() {
+    return {
+      dialogVisible: false,
+      logoImg: '',
+      userId: Cookies.get("user"),
+      allProducts: [],
+      jyProducts: [],
+    }
+  },
 
-    created() {
+  created() {
 
+  },
+  methods: {
+    setBackupVisible: function (backupVisible) {
+      this.dialogVisible = backupVisible
+      this.queryOrders.ownerinfo.identifyNumber=this.queryOrders.ownerinfo.identifyNumber.slice(0,4)+'******'+this.queryOrders.ownerinfo.identifyNumber.slice(14,18);
+      this.queryOrders.applyinfo.identifyNumber=this.queryOrders.applyinfo.identifyNumber.slice(0,4)+'******'+this.queryOrders.applyinfo.identifyNumber.slice(14,18);
+      this.queryOrders.insureinfo.identifyNumber=this.queryOrders.insureinfo.identifyNumber.slice(0,4)+'******'+this.queryOrders.insureinfo.identifyNumber.slice(14,18);
+      let data = JSON.parse(JSON.stringify(this.queryOrders))
+      data.jqInsuranceType.forEach(e => { e.label = '交强险'; e.totalPremium = data.jqpremium });
+      if ((data.kindinfo && data.kindinfo.length > 0) || (data.accidentInfo && data.accidentInfo.length > 0)) {
+        data.kindinfo && data.kindinfo.length > 0 ? data.kindinfo.forEach(el => { el.label = '商业险', el.name = el.kindName; el.totalPremium = data.sypremium }) : data.kindinfo
+        data.accidentInfo && data.accidentInfo.length > 0 ? data.accidentInfo.forEach(e => { e.label = '驾意险'; e.totalPremium = data.jypremium; e.each = "每份" }) : data.accidentInfo
+        this.allProducts = data.jqInsuranceType.concat(data.kindinfo && data.kindinfo.length > 0 ? data.kindinfo : [])
+        this.jyProducts = data.accidentInfo && data.accidentInfo.length > 0 ? data.accidentInfo : [];
+      }
+      else {
+        this.allProducts = data.jqInsuranceType
+      }
     },
-    methods: {
-        setBackupVisible: function (backupVisible) {
-            this.dialogVisible = backupVisible
-            let data = JSON.parse(JSON.stringify(this.queryOrders))
-            data.jqInsuranceType.forEach(e => {e.label = '交强险';e.totalPremium=data.jqpremium});
-            if((data.kindinfo && data.kindinfo.length > 0)  || (data.accidentInfo && data.accidentInfo.length > 0)){
-                data.kindinfo && data.kindinfo.length > 0 ? data.kindinfo.forEach(el => {el.label = '商业险', el.name = el.kindName;el.totalPremium=data.sypremium}) : data.kindinfo
-                data.accidentInfo && data.accidentInfo.length > 0 ? data.accidentInfo.forEach(e => {e.label = '驾意险';e.totalPremium=data.jypremium}) : data.accidentInfo
-                this.allProducts =data.jqInsuranceType.concat(data.kindinfo && data.kindinfo.length > 0?data.kindinfo:[],data.accidentInfo && data.accidentInfo.length > 0? data.accidentInfo:[])
-
+    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
+      if (columnIndex === 0) { // 假设我们要合并第三列(类型列)
+        const rows = this.allProducts;
+        let prevRow = rows[rowIndex - 1];
+        if (prevRow && row.label === prevRow.label) {
+          return [1, 0]; // 上一行与当前行相同,合并当前单元格
+        } else {
+          let rowspan = 1;
+          for (let i = rowIndex + 1; i < rows.length; i++) {
+            if (rows[i].label === row.label) {
+              rowspan++;
+            } else {
+              break;
             }
-            else{
-                this.allProducts=data.jqInsuranceType
+          }
+          return [rowspan, 1]; // 返回行合并数目和列合并数目
+        }
+      }
+      if (columnIndex === 4) { // 假设我们要合并第三列(类型列)
+        const rows = this.allProducts;
+        let prevRow = rows[rowIndex - 1];
+        if (prevRow && row.totalPremium === prevRow.totalPremium) {
+          return [1, 0]; // 上一行与当前行相同,合并当前单元格
+        } else {
+          let rowspan = 1;
+          for (let i = rowIndex + 1; i < rows.length; i++) {
+            if (rows[i].totalPremium === row.totalPremium) {
+              rowspan++;
+            } else {
+              break;
             }
-        },
-        objectSpanMethod({ row, column, rowIndex, columnIndex }) {
-            if (columnIndex === 0) { // 假设我们要合并第三列(类型列)
-                const rows = this.allProducts;
-                let prevRow = rows[rowIndex - 1];
-                if (prevRow && row.label === prevRow.label) {
-                    return [1, 0]; // 上一行与当前行相同,合并当前单元格
-                } else {
-                    let rowspan = 1;
-                    for (let i = rowIndex + 1; i < rows.length; i++) {
-                        if (rows[i].label === row.label) {
-                            rowspan++;
-                        } else {
-                        break;
-                        }
-                    }
-                return [rowspan, 1]; // 返回行合并数目和列合并数目
-                }
+          }
+          return [rowspan, 1]; // 返回行合并数目和列合并数目
+        }
+      }
+    },
+    objectSpanMethod1({ row, column, rowIndex, columnIndex }) {
+      if (columnIndex === 0) { // 假设我们要合并第三列(类型列)
+        const rows = this.jyProducts;
+        let prevRow = rows[rowIndex - 1];
+        if (prevRow && row.label === prevRow.label) {
+          return [1, 0]; // 上一行与当前行相同,合并当前单元格
+        } else {
+          let rowspan = 1;
+          for (let i = rowIndex + 1; i < rows.length; i++) {
+            if (rows[i].label === row.label) {
+              rowspan++;
+            } else {
+              break;
             }
-            if (columnIndex === 4) { // 假设我们要合并第三列(类型列)
-                const rows = this.allProducts;
-                let prevRow = rows[rowIndex - 1];
-                if (prevRow && row.totalPremium === prevRow.totalPremium) {
-                    return [1, 0]; // 上一行与当前行相同,合并当前单元格
-                } else {
-                    let rowspan = 1;
-                    for (let i = rowIndex + 1; i < rows.length; i++) {
-                        if (rows[i].totalPremium === row.totalPremium) {
-                            rowspan++;
-                        } else {
-                        break;
-                        }
-                    }
-                return [rowspan, 1]; // 返回行合并数目和列合并数目
-                }
+          }
+          return [rowspan, 1]; // 返回行合并数目和列合并数目
+        }
+      }
+      if (columnIndex === 4) { // 假设我们要合并第三列(类型列)
+        const rows = this.jyProducts;
+        let prevRow = rows[rowIndex - 1];
+        if (prevRow && row.each === prevRow.each) {
+          return [1, 0]; // 上一行与当前行相同,合并当前单元格
+        } else {
+          let rowspan = 1;
+          for (let i = rowIndex + 1; i < rows.length; i++) {
+            if (rows[i].each === row.each) {
+              rowspan++;
+            } else {
+              break;
             }
-        },
-
-        // 截图粘贴
-        copybjd() {
-            html2Canvas(document.getElementById("pdfContentsDiv"), {
-                allowTaint: true,
-                taintTest: false,
-                // useCORS: true
-            }).then(function (canvas) {
-                let base64Data = "";
-                base64Data = canvas.toDataURL("image/png", 1);
-                const date = new Date();
-                const saveInfo = {
-                    download: date.getTime() + `.png`,
-                    href: base64Data,
-                };
-                const element = document.createElement("a");
-                element.style.display = "none";
-                for (const key in saveInfo) {
-                    element.setAttribute(key, saveInfo[key]);
-                }
-                document.body.appendChild(element);
-                element.click();
-                setTimeout(() => {
-                    document.body.removeChild(element);
-                }, 300);
-            });
-        },
-    }
+          }
+          return [rowspan, 1]; // 返回行合并数目和列合并数目
+        }
+      }
+      if (columnIndex === 5) { // 假设我们要合并第三列(类型列)
+        const rows = this.jyProducts;
+        let prevRow = rows[rowIndex - 1];
+        if (prevRow && row.totalPremium === prevRow.totalPremium) {
+          return [1, 0]; // 上一行与当前行相同,合并当前单元格
+        } else {
+          let rowspan = 1;
+          for (let i = rowIndex + 1; i < rows.length; i++) {
+            if (rows[i].totalPremium === row.totalPremium) {
+              rowspan++;
+            } else {
+              break;
+            }
+          }
+          return [rowspan, 1]; // 返回行合并数目和列合并数目
+        }
+      }
+    },
+    // 截图粘贴
+    copybjd() {
+      html2Canvas(document.getElementById("pdfContentsDiv"), {
+        allowTaint: true,
+        taintTest: false,
+        // useCORS: true
+      }).then(function (canvas) {
+        let base64Data = "";
+        base64Data = canvas.toDataURL("image/png", 1);
+        const date = new Date();
+        const saveInfo = {
+          download: date.getTime() + `.png`,
+          href: base64Data,
+        };
+        const element = document.createElement("a");
+        element.style.display = "none";
+        for (const key in saveInfo) {
+          element.setAttribute(key, saveInfo[key]);
+        }
+        document.body.appendChild(element);
+        element.click();
+        setTimeout(() => {
+          document.body.removeChild(element);
+        }, 300);
+      });
+    },
+  }
 }
 </script>
+
 <style scoped lang="scss">
+.tableInfo {
+  margin-bottom: 20px;
+
+  .header {
+    background: rgba(212,36,38,0.06);
+    color: #000;
+    font-size: 16px;
+    font-weight: bold;
+    padding: 18px 20px;
+    box-sizing: border-box;
+    border: 1px solid #000;
+    border-bottom: none;
+  }
+}
+
 .vehicle {
-    li {
-        width: 33%;
-        padding-top: 13px;
-        display: inline-block;
-    }
+  li {
+    width: 33%;
+    padding-top: 13px;
+    display: inline-block;
+  }
 
-    span {
-        color: #868B98;
-    }
+  span {
+    color: #868B98;
+  }
 
-    margin: 10px 0 20px 0
+  margin: 10px 0 20px 0
 }
 
 .dialog-footer {
-    button {
-        width: 96px;
-        text-align: center;
-    }
+  button {
+    width: 96px;
+    text-align: center;
+  }
 }
 
 .quotation-title {
-    color: var(--themeColor);
-    font-weight: bold;
-    font-size: 16px;
+  color: var(--themeColor);
+  font-weight: bold;
+  font-size: 16px;
 }
-.payable_amount{
-    margin-top: 15px;
-    text-align: right;
-    padding: 5px 10px 0 0;
-    background: rgba(212,36,38,0.06);
-    border-bottom: 4px  #D42426 solid;
-    h3>span{
-        margin-left: 50px;
-    }
+
+.payable_amount {
+  margin-top: 15px;
+  text-align: right;
+  padding: 5px 10px 0 0;
+  background: rgba(212, 36, 38, 0.06);
+  border-bottom: 4px #D42426 solid;
+
+  h3>span {
+    margin-left: 50px;
+  }
 }
+
 /deep/ {
-    .el-dialog__header {
-        padding: 0;
+  .el-table td.el-table__cell,
+  .el-table th.el-table__cell.is-leaf {
+    border-bottom: 1px solid #000;
+  }
 
-    }
+  .el-table--border .el-table__cell,
+  .el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed {
+    border-right: 1px solid #000;
+  }
 
-    .el-dialog__body {
-        padding: 0;
-        border-bottom: 1px solid #EEF1F6
-    }
+  .el-table--border,
+  .el-table--group {
+    border: 1px solid #000;
+  }
 
-    .el-descriptions__body {
-        padding: 0
-    }
+  .el-dialog__header {
+    padding: 0;
 
-    .el-descriptions__body .el-descriptions__table .el-descriptions-item__cell {
-        text-align: center;
-    }
+  }
 
-    .el-descriptions-item__content {
-        color: #333333;
-        font-weight: bold;
-    }
+  .el-dialog__body {
+    padding: 0;
+    border-bottom: 1px solid #EEF1F6
+  }
+
+  .el-descriptions-item__label.is-bordered-label {
+    color: #000;
+    font-weight: bold;
+  }
 
-    .el-descriptions-item__label.is-bordered-label {
-        background: var(--themeColor);
-        color: #fff;
+  .el-descriptions .is-bordered .el-descriptions-item__cell {
+    text-align: center;
+    border: 1px solid #000;
+  }
+
+  .el-descriptions-row {
+    .my-label {
+      background: #FFD6D7;
+      color: #000;
+      font-weight: bold;
     }
 
+    .my-content {
+      color: #D42426;
+      font-weight: bold;
+    }
+  }
 }
 </style>

+ 431 - 228
src/views/Core/components/quotationDialogPro.vue

@@ -1,25 +1,65 @@
 <template>
-     <el-dialog
-      :visible.sync="dialogVisible"
-      width="1080px"
-      class="quotation_style"
-    >
-        <div id="pdfContentsDiv" style="padding: 25px;">
-            <div slot="title" class="dialog-title quotation-title">
-                <img
-                :src="queryOrders.logoImg"
-                class="align"
-                alt
-                style="width: 28px; height: 28px;vertical-align: middle;"
-            />
-                <span style="color:#000">{{queryOrders.inscompany}}-报价单</span>
-            </div>
-            <div style="border: 1px solid #000000;margin:10px 0">
-                <div  class="quotation_title">
-                    <div style="font-weight: 500;font-size: 24px;margin-bottom:5px">{{queryOrders.inscompany}}报价单</div>
-                    <div>报价时间:{{ queryOrders.createtime }}</div>
-                </div>
-            <div class="vehicle">
+  <el-dialog :visible.sync="dialogVisible" width="1080px" class="quotation_style">
+    <div id="pdfContentsDiv" style="padding: 25px;">
+      <div slot="title" class="dialog-title quotation-title">
+        <img :src="queryOrders.logoImg" class="align" alt style="width: 28px; height: 28px;vertical-align: middle;" />
+        <span style="color:#000">{{ queryOrders.inscompany }}-报价单</span>
+      </div>
+      <div style="border: 1px solid #000000;margin:10px 0">
+        <div class="quotation_title">
+          <div style="font-weight: 500;font-size: 24px;margin-bottom:5px">{{ queryOrders.inscompany }}报价单</div>
+          <div class="flex j-s a-c" style="padding:0 20px">
+            <div>订单号:{{ queryOrders.orderno }}</div>
+            <div>报价时间:{{ queryOrders.createtime }}</div>
+          </div>
+        </div>
+        <div style="margin:16px 0">
+          <div class="tableInfo flex ">
+            <div class="header flex a-c j-c">车辆信息</div>
+            <el-descriptions :column="3" border style="width: calc(100% - 100px);">
+              <el-descriptions-item label="车牌号">{{
+                queryOrders.carinfo.licenseNo }}</el-descriptions-item>
+              <el-descriptions-item label="车架号">{{ queryOrders.carinfo.vinNo }}</el-descriptions-item>
+              <el-descriptions-item label="发动机号">{{ queryOrders.carinfo.engineNo }}</el-descriptions-item>
+              <el-descriptions-item label="座位数">
+                {{ queryOrders.carinfo.seatCount }}
+              </el-descriptions-item>
+              <el-descriptions-item label="车型" :span="2">{{ queryOrders.carinfo.modelcname }}</el-descriptions-item>
+              <el-descriptions-item label="注册日期" :span="1.5">{{ queryOrders.carinfo.registerDate }}</el-descriptions-item>
+              <el-descriptions-item label="发证日期" :span="1.5">{{ queryOrders.carinfo.issueDate }}</el-descriptions-item>
+            </el-descriptions>
+          </div>
+          <div class="tableInfo flex ">
+            <div class="header flex a-c j-c">投被保人信息</div>
+            <el-descriptions :column="3" border style="width: calc(100% - 100px);">
+              <el-descriptions-item label="车主姓名">{{
+                queryOrders.ownerinfo.name }}</el-descriptions-item>
+              <el-descriptions-item label="投保人姓名">{{ queryOrders.applyinfo.name }}</el-descriptions-item>
+              <el-descriptions-item label="被保人姓名">{{ queryOrders.insureinfo.name }}</el-descriptions-item>
+              <el-descriptions-item label="车主身份证号">
+                {{ queryOrders.ownerinfo.identifyNumber }}
+              </el-descriptions-item>
+              <el-descriptions-item label="投保人身份证号">{{ queryOrders.applyinfo.identifyNumber }}</el-descriptions-item>
+              <el-descriptions-item label="被保人身份证号">{{ queryOrders.insureinfo.identifyNumber }}</el-descriptions-item>
+            </el-descriptions>
+          </div>
+          <div class="tableInfo flex ">
+            <div class="header flex a-c j-c">投保信息</div>
+            <el-descriptions :column="2" border style="width: calc(100% - 100px);">
+              <el-descriptions-item v-if="queryOrders.jqstartdate && queryOrders.jqenddate" label="交强险起保日期">{{
+                queryOrders.jqstartdate }}</el-descriptions-item>
+              <el-descriptions-item v-if="queryOrders.jqstartdate && queryOrders.jqenddate" label="交强险终保日期">{{
+                queryOrders.jqenddate }}</el-descriptions-item>
+              <el-descriptions-item v-if="queryOrders.systartdate && queryOrders.syenddate" label="商业险起保日期">{{
+                queryOrders.systartdate }}</el-descriptions-item>
+              <el-descriptions-item v-if="queryOrders.systartdate && queryOrders.syenddate" label="商业险终保日期">
+                {{ queryOrders.syenddate }}
+              </el-descriptions-item>
+            </el-descriptions>
+          </div>
+        </div>
+
+        <!-- <div class="vehicle">
                 <li>
                     <span>订单号:</span>{{ queryOrders.orderno }}
                 </li>
@@ -47,15 +87,15 @@
                 <li>
                     <span>座位数:</span>{{ queryOrders.carinfo.seatCount }}
                 </li>
-               
+
                 <li style="width: 100%;">
                     <span>车辆交强险保险期间:</span>{{ queryOrders.jqstartdate }} 至 {{ queryOrders.jqenddate }}
                 </li>
                 <li style="width: 100%;" v-if="queryOrders.systartdate &&queryOrders.syenddate">
                     <span>车辆商业险保险期间:</span>{{ queryOrders.systartdate }} 至 {{ queryOrders.syenddate }}
                 </li>
-            </div>
-            <!-- <div class="quotation-style tax-arrears" v-if="queryOrders.kindinfo && queryOrders.kindinfo.length>0">
+            </div> -->
+        <!-- <div class="quotation-style tax-arrears" v-if="queryOrders.kindinfo && queryOrders.kindinfo.length>0">
                 <b>商业险险别</b>
                 <b>保额(元)</b>
                 <b style=" border-right:0">保费(元)</b>
@@ -85,138 +125,238 @@
                 <div v-if="queryOrders.jypremium">驾意险:<span>¥{{ queryOrders.jypremium }}</span></div>
                 <div style="font-weight: bold;">应缴金额:<span>¥{{ queryOrders.sumpremium }}</span></div>
             </div> -->
-            <el-table :data="allProducts" stripe border :span-method="objectSpanMethod"
-                :header-cell-style="{ background: 'rgba(45,77,137,0.1) ', fontWeight: 'bold', color: '#333333' }" style="width: 100%">
-                <el-table-column width="100" prop="label" align="center" label="产品类型">
-                </el-table-column>
-                <el-table-column width="450" prop="name" align="center" label="险别/名称">
-                </el-table-column>
-                <el-table-column align="center" prop="amount" label="保额">
-                    <template slot-scope="scope">
-                        <div v-if="['D4', 'SY_FJ_YBW2'].includes(scope.row.kindCode)">
-                            <span>{{ scope.row.unitAmount }}</span>/<span>{{ queryOrders.carinfo.seatCount - 1 }}座</span>
-                        </div>
-                        <div v-else-if="['MJ1', 'MJ2', 'MJ3', 'MJ4'].includes(
-                            scope.row.kindCode
-                        )
-                            ">
-                            <span>{{ scope.row.deductibleRate }}</span>
-                        </div>
-                        <div v-else-if="['TY1', 'TY2', 'TY3', 'TY4'].includes(
-                            scope.row.kindCode
-                        )
-                            ">
-                            <span>{{ scope.row.serviceTimes }}/次</span>
-                        </div>
-                        <div v-else>
-                            <span>{{ scope.row.amount }}</span>
-                        </div>
-                    </template>
-                </el-table-column>
-                <el-table-column align="center" prop="coveragePremium" label="保费(元)">
-                    <template slot-scope="scope">
-                        {{ scope.row.label=='商业险'?scope.row.coveragePremium:scope.row.label=='驾意险'?scope.row.premium:'-' }}
-                    </template>
-                </el-table-column>
-                <el-table-column align="center" prop="totalPremium" label="总计(元)">
-                    <template slot-scope="scope">
-                        <span style="color:#2D4D89 ;font-weight: bold;">{{ scope.row.totalPremium }}</span>
-                    </template>
-                </el-table-column>
-            </el-table>
-            <div class="payable_amount">
-                <h3>
-                    <span v-if="queryOrders.sypremium">车辆商业险:{{ '¥'+ queryOrders.sypremium  }}</span>
-                    <span v-if="queryOrders.jqpremium">交强险:{{ '¥'+  queryOrders.jqpremium }}</span>
-                    <span v-if="queryOrders.taxamount">车船税:{{ '¥'+  queryOrders.taxamount  }}</span>
-                    <span v-if="queryOrders.jypremium">驾意险:{{'¥'+   queryOrders.jypremium }}</span>
-                </h3>
-                <h2>
-                    <span v-if="queryOrders.sumpremium">应缴金额:<span style="color:#2D4D89;font-size:20px">¥</span><b style="color:#2D4D89 ;font-size:26px">{{  queryOrders.sumpremium }}</b> </span>
-                </h2>
-            </div>
+        <el-table :data="allProducts" stripe border :span-method="objectSpanMethod"
+          :header-cell-style="{ background: 'rgba(45,77,137,0.1) ', fontWeight: 'bold', color: '#333333' }"
+          style="width: 100%">
+          <el-table-column width="100" prop="label" align="center" label="产品类型">
+          </el-table-column>
+          <el-table-column width="450" prop="name" align="center" label="险别/名称">
+          </el-table-column>
+          <el-table-column align="center" prop="amount" label="保额">
+            <template slot-scope="scope">
+              <div v-if="['D4', 'SY_FJ_YBW2'].includes(scope.row.kindCode)">
+                <span>{{ scope.row.unitAmount }}</span>/<span>{{ queryOrders.carinfo.seatCount - 1 }}座</span>
+              </div>
+              <div v-else-if="['MJ1', 'MJ2', 'MJ3', 'MJ4'].includes(
+                scope.row.kindCode
+              )
+                ">
+                <span>{{ scope.row.deductibleRate }}</span>
+              </div>
+              <div v-else-if="['TY1', 'TY2', 'TY3', 'TY4'].includes(
+                scope.row.kindCode
+              )
+                ">
+                <span>{{ scope.row.serviceTimes }}/次</span>
+              </div>
+              <div v-else>
+                <span>{{ scope.row.amount }}</span>
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="coveragePremium" label="保费(元)">
+            <template slot-scope="scope">
+              {{ scope.row.label == '商业险' ? scope.row.coveragePremium : '-'
+              }}
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="totalPremium" label="总计(元)">
+            <template slot-scope="scope">
+              <span style="color:#2D4D89 ;font-weight: bold;font-size: 16px;">{{ scope.row.totalPremium }}</span>
+            </template>
+          </el-table-column>
+        </el-table>
+        <el-table :data="jyProducts" v-if="jyProducts.length>0" stripe border :span-method="objectSpanMethod1"
+        :header-cell-style="{ background: 'rgba(45,77,137,0.1) ', fontWeight: 'bold', color: '#333333' }" style="width: 100%">
+        <el-table-column width="100" prop="label" align="center" label="驾意险名称">
+        </el-table-column>
+        <el-table-column width="450" prop="name" align="center" label="保险责任">
+        </el-table-column>
+        <el-table-column align="center" prop="amount" label="保额"></el-table-column>
+        <el-table-column align="center" prop="premium" label="保费(元)">
+          <template slot-scope="scope">
+            {{
+              scope.row.premium && scope.row.premium != 0 ? scope.row.premium : '-'
+            }}
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="each" label="每份">
+        </el-table-column>
+        <el-table-column align="center" prop="totalPremium" label="总计(元)">
+          <template slot-scope="scope">
+            <span style="color:#2D4D89;font-weight: bold;font-size: 16px;">{{ queryOrders.jypremium /
+            (queryOrders.jyQuantity ? queryOrders.jyQuantity : 1)
+          }}/每份</span>
+          </template>
+        </el-table-column>
+      </el-table>
+        <div class="tableInfo" v-if="queryOrders.jyName">
+          <el-descriptions direction="vertical" :column="5" border>
+            <el-descriptions-item label="驾意险名称" label-class-name="my-label">{{ queryOrders.jyName
+            }}</el-descriptions-item>
+            <el-descriptions-item label="座位数" label-class-name="my-label">{{ queryOrders.carinfo.seatCount
+            }}座</el-descriptions-item>
+            <el-descriptions-item label="份数" label-class-name="my-label">{{ queryOrders.jyQuantity ? queryOrders.jyQuantity : 1
+            }}份</el-descriptions-item>
+            <el-descriptions-item label="每份" label-class-name="my-label">{{ queryOrders.jypremium /
+              (queryOrders.jyQuantity ? queryOrders.jyQuantity : 1)
+            }}/每份
+            </el-descriptions-item>
+            <el-descriptions-item label="合计(元)" label-class-name="my-label" content-class-name="my-content">合计:{{
+              queryOrders.jypremium }}</el-descriptions-item>
+          </el-descriptions>
+        </div>
+        <div class="payable_amount">
+          <h3>
+            <span v-if="queryOrders.sypremium">车辆商业险:{{ '¥' + queryOrders.sypremium }}</span>
+            <span v-if="queryOrders.jqpremium">交强险:{{ '¥' + queryOrders.jqpremium }}</span>
+            <span v-if="queryOrders.taxamount">车船税:{{ '¥' + queryOrders.taxamount }}</span>
+            <span v-if="queryOrders.jypremium">驾意险:{{ '¥' + queryOrders.jypremium }}</span>
+          </h3>
+          <h2>
+            <span v-if="queryOrders.sumpremium">应缴金额:<span style="color:#2D4D89;font-size:20px">¥</span><b
+                style="color:#2D4D89 ;font-size:26px">{{ queryOrders.sumpremium }}</b> </span>
+          </h2>
         </div>
-        <div >注:本报价单仅供参考,最终以出单价格为准。</div>
+      </div>
+      <div>注:本报价单仅供参考,最终以出单价格为准。</div>
 
     </div>
     <span slot="footer" class="dialog-footer">
-        <el-button type="primary" class="blue_color" size="small" @click="copybjd()">截图</el-button>
-        <el-button size="small" class="blueplain_color"  @click="dialogVisible = false">关闭</el-button>
+      <el-button type="primary" class="blue_color" size="small" @click="copybjd()">截图</el-button>
+      <el-button size="small" class="blueplain_color" @click="dialogVisible = false">关闭</el-button>
     </span>
-    </el-dialog>
+  </el-dialog>
 </template>
 <script>
 import html2Canvas from "html2canvas";
 
 export default {
   name: "quotationDialog",
-    props:{
-        queryOrders:{
-            type:Object,
-            default:{}
-        }
+  props: {
+    queryOrders: {
+      type: Object,
+      default: {}
+    }
+  },
+  data() {
+    return {
+      dialogVisible: false,
+      logoImg: '',
+      allProducts: [],
+      jyProducts: [],
+    }
+  },
+  created() {
+  },
+  methods: {
+    setBackupVisible: function (backupVisible) {
+      this.dialogVisible = backupVisible
+      this.queryOrders.ownerinfo.identifyNumber=this.queryOrders.ownerinfo.identifyNumber.slice(0,4)+'******'+this.queryOrders.ownerinfo.identifyNumber.slice(14,18);
+      this.queryOrders.applyinfo.identifyNumber=this.queryOrders.applyinfo.identifyNumber.slice(0,4)+'******'+this.queryOrders.applyinfo.identifyNumber.slice(14,18);
+      this.queryOrders.insureinfo.identifyNumber=this.queryOrders.insureinfo.identifyNumber.slice(0,4)+'******'+this.queryOrders.insureinfo.identifyNumber.slice(14,18);
+      let data = JSON.parse(JSON.stringify(this.queryOrders))
+      data.jqInsuranceType.forEach(e => { e.label = '交强险'; e.totalPremium = data.jqpremium });
+      if ((data.kindinfo && data.kindinfo.length > 0) || (data.accidentInfo && data.accidentInfo.length > 0)) {
+        data.kindinfo && data.kindinfo.length > 0 ? data.kindinfo.forEach(el => { el.label = '商业险', el.name = el.kindName; el.totalPremium = data.sypremium }) : data.kindinfo
+        data.accidentInfo && data.accidentInfo.length > 0 ? data.accidentInfo.forEach(e => { e.label = '驾意险'; e.totalPremium = data.jypremium; e.each = "每份" }) : data.accidentInfo
+        this.allProducts = data.jqInsuranceType.concat(data.kindinfo && data.kindinfo.length > 0 ? data.kindinfo : [])
+        this.jyProducts = data.accidentInfo && data.accidentInfo.length > 0 ? data.accidentInfo : [];
+      }
+      else {
+        this.allProducts = data.jqInsuranceType
+      }
     },
-    data(){
-        return{
-            dialogVisible:false,
-            logoImg:'',
-            allProducts:[]
+    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
+      if (columnIndex === 0) { // 假设我们要合并第三列(类型列)
+        const rows = this.allProducts;
+        let prevRow = rows[rowIndex - 1];
+        if (prevRow && row.label === prevRow.label) {
+          return [1, 0]; // 上一行与当前行相同,合并当前单元格
+        } else {
+          let rowspan = 1;
+          for (let i = rowIndex + 1; i < rows.length; i++) {
+            if (rows[i].label === row.label) {
+              rowspan++;
+            } else {
+              break;
+            }
+          }
+          return [rowspan, 1]; // 返回行合并数目和列合并数目
         }
-    },
-    created(){
-    },
-    methods:{
-        setBackupVisible: function (backupVisible) {
-            this.dialogVisible = backupVisible
-            let data = JSON.parse(JSON.stringify(this.queryOrders))
-            data.jqInsuranceType.forEach(e => {e.label = '交强险';e.totalPremium=data.jqpremium});
-            if((data.kindinfo && data.kindinfo.length > 0)  || (data.accidentInfo && data.accidentInfo.length > 0)){
-                data.kindinfo && data.kindinfo.length > 0 ? data.kindinfo.forEach(el => {el.label = '商业险', el.name = el.kindName;el.totalPremium=data.sypremium}) : data.kindinfo
-                data.accidentInfo && data.accidentInfo.length > 0 ? data.accidentInfo.forEach(e => {e.label = '驾意险';e.totalPremium=data.jypremium}) : data.accidentInfo
-                this.allProducts =data.jqInsuranceType.concat(data.kindinfo && data.kindinfo.length > 0?data.kindinfo:[],data.accidentInfo && data.accidentInfo.length > 0? data.accidentInfo:[])
-
+      }
+      if (columnIndex === 4) { // 假设我们要合并第三列(类型列)
+        const rows = this.allProducts;
+        let prevRow = rows[rowIndex - 1];
+        if (prevRow && row.totalPremium === prevRow.totalPremium) {
+          return [1, 0]; // 上一行与当前行相同,合并当前单元格
+        } else {
+          let rowspan = 1;
+          for (let i = rowIndex + 1; i < rows.length; i++) {
+            if (rows[i].totalPremium === row.totalPremium) {
+              rowspan++;
+            } else {
+              break;
             }
-            else{
-                this.allProducts=data.jqInsuranceType
+          }
+          return [rowspan, 1]; // 返回行合并数目和列合并数目
+        }
+      }
+    },
+    objectSpanMethod1({ row, column, rowIndex, columnIndex }) {
+      if (columnIndex === 0) { // 假设我们要合并第三列(类型列)
+        const rows = this.jyProducts;
+        let prevRow = rows[rowIndex - 1];
+        if (prevRow && row.label === prevRow.label) {
+          return [1, 0]; // 上一行与当前行相同,合并当前单元格
+        } else {
+          let rowspan = 1;
+          for (let i = rowIndex + 1; i < rows.length; i++) {
+            if (rows[i].label === row.label) {
+              rowspan++;
+            } else {
+              break;
             }
-        },
-        objectSpanMethod({ row, column, rowIndex, columnIndex }) {
-            if (columnIndex === 0) { // 假设我们要合并第三列(类型列)
-                const rows = this.allProducts;
-                let prevRow = rows[rowIndex - 1];
-                if (prevRow && row.label === prevRow.label) {
-                    return [1, 0]; // 上一行与当前行相同,合并当前单元格
-                } else {
-                    let rowspan = 1;
-                    for (let i = rowIndex + 1; i < rows.length; i++) {
-                        if (rows[i].label === row.label) {
-                            rowspan++;
-                        } else {
-                        break;
-                        }
-                    }
-                return [rowspan, 1]; // 返回行合并数目和列合并数目
-                }
+          }
+          return [rowspan, 1]; // 返回行合并数目和列合并数目
+        }
+      }
+      if (columnIndex === 4) { // 假设我们要合并第三列(类型列)
+        const rows = this.jyProducts;
+        let prevRow = rows[rowIndex - 1];
+        if (prevRow && row.each === prevRow.each) {
+          return [1, 0]; // 上一行与当前行相同,合并当前单元格
+        } else {
+          let rowspan = 1;
+          for (let i = rowIndex + 1; i < rows.length; i++) {
+            if (rows[i].each === row.each) {
+              rowspan++;
+            } else {
+              break;
             }
-            if (columnIndex === 4) { // 假设我们要合并第三列(类型列)
-                const rows = this.allProducts;
-                let prevRow = rows[rowIndex - 1];
-                if (prevRow && row.totalPremium === prevRow.totalPremium) {
-                    return [1, 0]; // 上一行与当前行相同,合并当前单元格
-                } else {
-                    let rowspan = 1;
-                    for (let i = rowIndex + 1; i < rows.length; i++) {
-                        if (rows[i].totalPremium === row.totalPremium) {
-                            rowspan++;
-                        } else {
-                        break;
-                        }
-                    }
-                return [rowspan, 1]; // 返回行合并数目和列合并数目
-                }
+          }
+          return [rowspan, 1]; // 返回行合并数目和列合并数目
+        }
+      }
+      if (columnIndex === 5) { // 假设我们要合并第三列(类型列)
+        const rows = this.jyProducts;
+        let prevRow = rows[rowIndex - 1];
+        if (prevRow && row.totalPremium === prevRow.totalPremium) {
+          return [1, 0]; // 上一行与当前行相同,合并当前单元格
+        } else {
+          let rowspan = 1;
+          for (let i = rowIndex + 1; i < rows.length; i++) {
+            if (rows[i].totalPremium === row.totalPremium) {
+              rowspan++;
+            } else {
+              break;
             }
-        },
-        // 截图粘贴
+          }
+          return [rowspan, 1]; // 返回行合并数目和列合并数目
+        }
+      }
+    },
+    // 截图粘贴
     copybjd() {
       html2Canvas(document.getElementById("pdfContentsDiv"), {
         allowTaint: true,
@@ -242,116 +382,179 @@ export default {
         }, 300);
       });
     },
-    }
+  }
 }
 </script>
 <style scoped lang="scss">
-.vehicle{
-    li{
-        width: 49%;
-        padding-top: 13px;
-        display: inline-block;
-    }
-    span{
-       color: #868B98 ;
-    }
-    margin: 10px 0 20px 5px
-}
-.dialog-footer{
-    button{
-        width: 96px;
-        text-align: center;
-    }
-}
-.quotation-title{
-    color: var(--themeColor);
-    font-weight: bold;
+.tableInfo {
+  .header {
+    width: 100px;
+    background: #EAEDF3;
+    color: #000;
+    padding: 0 18px;
+    box-sizing: border-box;
+    text-align: center;
     font-size: 16px;
+    font-weight: bold;
+    border: 1px solid #000;
+    border-left: none;
+    border-right: none;
+  }
 }
-.quotation_title{
+
+.vehicle {
+  li {
+    width: 49%;
+    padding-top: 13px;
+    display: inline-block;
+  }
+
+  span {
+    color: #868B98;
+  }
+
+  margin: 10px 0 20px 5px
+}
+
+.dialog-footer {
+  button {
+    width: 96px;
     text-align: center;
-    padding: 10px 0;
-    border-bottom: 1px solid #000000;
+  }
 }
-.tax-arrears{
-    b,span{
-        width: 33.3%;
-    }
+
+.quotation-title {
+  color: var(--themeColor);
+  font-weight: bold;
+  font-size: 16px;
 }
-.quotation-style{
-    font-size: 0;
-    b{
-        font-size: 14px;
-        border-top: 1px solid #000 ;
-    }
-    b,span{
-        display: inline-block;
-        box-sizing: border-box;
-        width: 33.3%;
-        text-align: center;
-        line-height: 40px;
-        border-bottom: 1px solid #000 ;
-        border-right: 1px solid #000 ;
-        font-size: 14px;
-    }
-    span:last-child{
-        border-right:0;
-        // border-bottom: 1px solid #000 ;
-    }
+
+.quotation_title {
+  text-align: center;
+  padding: 10px 0;
+  color: #000;
+  border-bottom: 1px solid #000000;
+}
+
+.tax-arrears {
+
+  b,
+  span {
+    width: 33.3%;
+  }
 }
-.blue_color{
+
+.quotation-style {
+  font-size: 0;
+
+  b {
+    font-size: 14px;
+    border-top: 1px solid #000;
+  }
+
+  b,
+  span {
+    display: inline-block;
+    box-sizing: border-box;
+    width: 33.3%;
+    text-align: center;
+    line-height: 40px;
+    border-bottom: 1px solid #000;
+    border-right: 1px solid #000;
+    font-size: 14px;
+  }
+
+  span:last-child {
+    border-right: 0;
+    // border-bottom: 1px solid #000 ;
+  }
+}
+
+.blue_color {
   color: #fff;
   background: #2D4D89;
   border: 1px solid #2D4D89;
 }
-.blueplain_color{
+
+.blueplain_color {
   color: #2D4D89;
   background: #EAEDF1;
   border: 1px solid #EAEDF1;
 }
-.money_style{
-    text-align: right ;
-    div{
-        line-height: 30px;
-    }
-    span{
-        display: inline-block;
-        width: 100px;
-        text-align: left;
-    }
+
+.money_style {
+  text-align: right;
+
+  div {
+    line-height: 30px;
+  }
+
+  span {
+    display: inline-block;
+    width: 100px;
+    text-align: left;
+  }
 }
-.payable_amount{
-    margin-top: 15px;
-    text-align: right;
-    padding-right: 10px;
-    // padding: 5px 10px 0 0;
-    h3>span{
-        margin-left: 50px;
-    }
+
+.payable_amount {
+  margin-top: 15px;
+  text-align: right;
+  padding-right: 10px;
+
+  // padding: 5px 10px 0 0;
+  h3>span {
+    margin-left: 50px;
+  }
 }
+
 /deep/ {
-    .el-dialog__header{
-        padding: 0 ;
+  .el-table td.el-table__cell,
+  .el-table th.el-table__cell.is-leaf {
+    border-bottom: 1px solid #000;
+  }
 
+  .el-table--border .el-table__cell,
+  .el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed {
+    border-right: 1px solid #000;
+  }
+
+  .el-table--border,
+  .el-table--group {
+    border-top: 1px solid #000;
+  }
+
+  .el-dialog__header {
+    padding: 0;
+
+  }
+
+  .el-dialog__body {
+    padding: 0;
+    border-bottom: 1px solid #EEF1F6
+  }
+
+  .el-descriptions-item__label.is-bordered-label {
+    color: #000;
+    font-weight: bold;
+  }
+
+  .el-descriptions .is-bordered .el-descriptions-item__cell {
+    text-align: center;
+    border: 1px solid #000;
+  }
+
+  .el-descriptions-row {
+    .my-label {
+      background: #EAEDF3;
+      color: #000;
+      font-weight: bold;
     }
-    .el-dialog__body{
-        padding: 0;
-        border-bottom: 1px solid #EEF1F6
-    }
-     .el-descriptions__body{
-        padding:0
-     }
-    .el-descriptions__body .el-descriptions__table .el-descriptions-item__cell{
-        text-align: center;
-    }
-    .el-descriptions-item__content{
-        color: #333333 ;
-        font-weight: bold;
-    }
-    .el-descriptions-item__label.is-bordered-label{
-        background: var(--themeColor);
-        color: #fff;
+
+    .my-content {
+      color: #2D4D89;
+      font-weight: bold;
+      font-size: 18px;
     }
+  }
 
-}
-</style>
+}</style>

+ 4 - 2
src/views/FinancialManagement/CarInsurance/CompanySettlement/CarInsurance/DocumentaryFeesDetail.vue

@@ -434,7 +434,7 @@
         >
       </span>
     </el-dialog>
-    <el-dialog :visible.sync="importVisible" width="25%">
+    <el-dialog :visible.sync="importVisible" title="批量导入" width="25%">
       <el-upload
         style="margin-bottom: 10px"
         action="#"
@@ -1060,6 +1060,7 @@ export default {
           this.excelFileList = fileList;
           this.progressPercent = 100;
           this.findPage();
+          this.importVisible = false;
         } else {
           this.excelFileList = [];
           this.progressPercent = 0;
@@ -1071,6 +1072,7 @@ export default {
     //增加类型批量导入
     addTypeImport() {
       this.importVisible = true;
+      this.excelFileList = [];
     },
     templateDownload() {
       let a = document.createElement("a");
@@ -1564,7 +1566,7 @@ export default {
 
 <style scoped>
 .upload-demo {
-  display: inline-block;
+  /* display: inline-block; */
 }
 .avatar {
   border: 1px dashed #d9d9d9;

+ 4 - 2
src/views/FinancialManagement/CarInsurance/CompanySettlement/CarInsurance/HandlingFees.vue

@@ -467,7 +467,7 @@
       >
       </el-progress>
     </el-dialog>
-    <el-dialog :visible.sync="importVisible" width="25%">
+    <el-dialog :visible.sync="importVisible" title="批量导入" width="25%">
       <el-upload
         style="margin-bottom: 10px"
         action="#"
@@ -1119,6 +1119,7 @@ export default {
           this.excelFileList = fileList;
           this.progressPercent = 100;
           this.findPage();
+          this.importVisible = false;
         } else {
           this.excelFileList = [];
           this.progressPercent = 0;
@@ -1130,6 +1131,7 @@ export default {
     //增加类型批量导入
     addTypeImport() {
       this.importVisible = true;
+      this.excelFileList = [];
     },
     agrmentlist() {
       this.$api.task.findPtlAgreementListNew({ type: "2" }).then((res) => {
@@ -1616,7 +1618,7 @@ export default {
 
 <style scoped>
 .upload-demo {
-  display: inline-block;
+  /* display: inline-block; */
 }
 .customStyle {
   margin-bottom: 20px;

+ 4 - 2
src/views/FinancialManagement/CarInsurance/CompanySettlement/NoCarInsurance/DocumentaryFeesDetail.vue

@@ -398,7 +398,7 @@
         >
       </span>
     </el-dialog>
-    <el-dialog :visible.sync="importVisible" width="25%">
+    <el-dialog :visible.sync="importVisible" title="批量导入" width="25%">
       <el-upload
         style="margin-bottom: 10px"
         action="#"
@@ -966,6 +966,7 @@ export default {
           this.excelFileList = fileList;
           this.progressPercent = 100;
           this.findPage();
+          this.importVisible = false;
         } else {
           this.excelFileList = [];
           this.progressPercent = 0;
@@ -977,6 +978,7 @@ export default {
     //增加类型批量导入
     addTypeImport() {
       this.importVisible = true;
+      this.excelFileList = [];
     },
     templateDownload() {
       let a = document.createElement("a");
@@ -1447,7 +1449,7 @@ export default {
 
 <style scoped>
 .upload-demo {
-  display: inline-block;
+  /* display: inline-block; */
 }
 .avatar {
   border: 1px dashed #d9d9d9;

+ 4 - 2
src/views/FinancialManagement/CarInsurance/CompanySettlement/NoCarInsurance/HandlingFees.vue

@@ -441,7 +441,7 @@
         >
       </span>
     </el-dialog>
-    <el-dialog :visible.sync="importVisible" width="25%">
+    <el-dialog :visible.sync="importVisible" title="批量导入" width="25%">
       <el-upload
         style="margin-bottom: 10px"
         action="#"
@@ -1026,6 +1026,7 @@ export default {
           this.excelFileList = fileList;
           this.progressPercent = 100;
           this.findPage();
+          this.importVisible = false;
         } else {
           this.excelFileList = [];
           this.progressPercent = 0;
@@ -1037,6 +1038,7 @@ export default {
     //增加类型批量导入
     addTypeImport() {
       this.importVisible = true;
+      this.excelFileList = [];
     },
     // 编辑
     editBtn(row) {
@@ -1486,7 +1488,7 @@ export default {
 
 <style scoped>
 .upload-demo {
-  display: inline-block;
+  /* display: inline-block; */
 }
 .customStyle {
   margin-bottom: 20px;

+ 4 - 2
src/views/FinancialManagement/CarInsurance/PlatformSettlement/NonVehicleBalance.vue

@@ -881,7 +881,7 @@
         </el-table-column>
       </el-table>
     </el-dialog>
-    <el-dialog :visible.sync="importVisible" width="25%">
+    <el-dialog :visible.sync="importVisible" title="批量导入" width="25%">
       <el-upload
         style="margin-bottom: 10px"
         action="#"
@@ -1542,6 +1542,7 @@ export default {
           this.excelFileList = fileList;
           this.progressPercent = 100;
           this.findPage();
+          this.importVisible = false;
         } else {
           this.excelFileList = [];
           this.progressPercent = 0;
@@ -1553,6 +1554,7 @@ export default {
     //增加类型批量导入
     addTypeImport() {
       this.importVisible = true;
+      this.excelFileList = [];
     },
     //重置表单查询信息
     handleResetForm() {
@@ -2042,7 +2044,7 @@ export default {
   display: none;
 }
 .upload-demo {
-  display: inline-block;
+  // display: inline-block;
 }
 .inputType {
   width: 180px;

+ 44 - 0
src/views/FinancialManagement/CarInsurance/Verifytasks/Verifyintasks.vue

@@ -137,6 +137,27 @@
           >
         </template>
       </el-table-column>
+      <el-table-column
+        prop="checkType"
+        label="审核方式"
+        align="center"
+        width="100"
+      >
+        <template slot-scope="scope">
+          <el-tag
+            v-if="scope.row.checkType == '2'"
+            type="success"
+            size="small"
+            >自动审核</el-tag
+          >
+          <el-tag
+            v-if="scope.row.checkType == '1'"
+            type="warning"
+            size="small"
+            >人工审核</el-tag
+          >
+        </template>
+      </el-table-column>
       <el-table-column
         prop="auditUser"
         label="审核人"
@@ -483,6 +504,29 @@ export default {
           type: 'input',
           Retained: true,
         },
+        {
+          name: 'checkType',
+          label: '审核方式',
+          type: "select",
+          optionsIabel: "label",
+          optionsValue: "value",
+          options: [
+            {
+              label: "人工审核",
+              value: "1",
+            },
+            {
+              label: "自动审核",
+              value: "2",
+            },
+          ],
+        },
+        {
+          name: 'checkUser',
+          label: '审核人',
+          type: 'input',
+          Retained: true,
+        },
       ],
       orderInfo: {
         //选中的订单

+ 47 - 49
src/views/Login.vue

@@ -159,18 +159,18 @@ import { login } from "@/api/user";
 import CryptoJS from "crypto-js";
 // import { getSysList } from "../http/moudules/sys";
 
-import { sendWebsocket,closeWebsocket  } from '@/utils/websocket.js'
+import { sendWebsocket, closeWebsocket } from "@/utils/websocket.js";
 import {
   getUserIP,
   getUserLocation,
-  getAddressLocation
+  getAddressLocation,
 } from "@/utils/ipAndAddress.js";
 export default {
   name: "Login",
   inject: ["reload"],
   components: {
     ThemePicker,
-    LangSelector
+    LangSelector,
   },
   data() {
     return {
@@ -182,12 +182,12 @@ export default {
         account: "",
         password: "",
         captcha: "",
-        src: ""
+        src: "",
       },
       fieldRules: {
         account: [{ required: true, message: "请输入账号", trigger: "blur" }],
         password: [{ required: true, message: "请输入密码", trigger: "blur" }],
-        captcha: [{ required: true, message: "请输入验证码", trigger: "blur" }]
+        captcha: [{ required: true, message: "请输入验证码", trigger: "blur" }],
       },
       checked: true,
       toggleQrCode: false,
@@ -197,7 +197,7 @@ export default {
       optionList: [],
       sysId: null,
       systemType: "1", //系统类型
-      addressInfo: {} //当前登录信息
+      addressInfo: {}, //当前登录信息
     };
   },
   created() {
@@ -213,7 +213,7 @@ export default {
   },
   methods: {
     getSysList() {
-      this.$api.sys.sysDictList().then(res => {
+      this.$api.sys.sysDictList().then((res) => {
         if (res.code === 200) {
           this.optionList = [...res.data];
           this.sysId = res.data && res.data.length > 0 && res.data[0].id;
@@ -222,7 +222,7 @@ export default {
     },
     enterEvent() {
       if (this.$route.name === "登录") {
-        document.onkeydown = e => {
+        document.onkeydown = (e) => {
           const url = e.target.baseURI.match(/login/);
           if (e.keyCode == 13 && url.includes("login")) {
             this.login();
@@ -231,7 +231,6 @@ export default {
       }
     },
     login(formName) {
-      
       // let token = CryptoJS.AES.encrypt(
       //   "2856c49f-7b34-4e83-b3c8-2c37dba7cb3b",
       //   "token"
@@ -239,7 +238,7 @@ export default {
       // console.log(token);
       // window.location.href =
       //   "http://localhost:8080/#/form/agreement?token=" + token;
-      this.$refs[formName].validate(valid => {
+      this.$refs[formName].validate((valid) => {
         if (valid) {
           this.loading = true;
           let userInfo = {
@@ -247,7 +246,7 @@ export default {
             password: this.loginForm.password,
             captcha: this.loginForm.captcha.toLowerCase(),
             captchaId: this.loginForm.captchaId,
-            sysId: this.sysId
+            sysId: this.sysId,
             // systemType: this.systemType
           };
 
@@ -275,12 +274,12 @@ export default {
 
           this.$api.login
             .login2(userInfo)
-            .then(res => {
+            .then((res) => {
               if (res.code != 200) {
                 this.$message({
                   message: res.msg,
                   type: "error",
-                  duration: 2000
+                  duration: 2000,
                 });
                 if (res.code == 500 && res.msg == "验证码不正确") {
                   this.refreshCaptcha();
@@ -290,7 +289,7 @@ export default {
                   //是否保存密码
                   Cookies.set("accountInfo", {
                     account: this.loginForm.account,
-                    password: this.loginForm.password
+                    password: this.loginForm.password,
                   });
                 } else {
                   Cookies.remove("accountInfo");
@@ -302,36 +301,35 @@ export default {
                   ).toString();
 
                   window.location.href =
-                    process.env.CONSOLE_BASE_URL +
-                    "/#/agreement/index?token=" +
-                    token;
+                    process.env.CONSOLE_BASE_URL + "/#/index?token=" + token;
                   // alert(res.data);
                 } else {
                   this.getUser();
                   Cookies.set("token", res.data); // 放置token到Cookie
                   // this.submitLocation();
                   this.getDictItems();
-                  setTimeout(()=>{
-                    let userId=sessionStorage.getItem("user")
-                    let data={
-                    ...this.addressInfo,
-                    userId,
-                    systemType:this.systemType
-                  }
-                  sendWebsocket(`${process.env.SOCKET_Url}/pcWebsocket/${userId}`,data)
-                  // sendWebsocket(`/pcWebsocket/${userId}`,data)
-                  },1000)
-                  
-
+                  setTimeout(() => {
+                    let userId = sessionStorage.getItem("user");
+                    let data = {
+                      ...this.addressInfo,
+                      userId,
+                      systemType: this.systemType,
+                    };
+                    sendWebsocket(
+                      `${process.env.SOCKET_Url}/pcWebsocket/${userId}`,
+                      data
+                    );
+                    // sendWebsocket(`/pcWebsocket/${userId}`,data)
+                  }, 1000);
                 }
               }
               this.loading = false;
             })
-            .catch(res => {
+            .catch((res) => {
               this.$message({
                 message: res.message,
                 type: "error",
-                duration: 2000
+                duration: 2000,
               });
             });
         } else {
@@ -343,13 +341,13 @@ export default {
     submitLocation() {
       let location = {
         systemType: this.systemType,
-        ...this.addressInfo
+        ...this.addressInfo,
       };
-      this.$api.login.uploadLocationInfo(location).then(res => {
+      this.$api.login.uploadLocationInfo(location).then((res) => {
         if (res.code !== 200) {
           this.$message({
             message: res.msg,
-            type: "error"
+            type: "error",
           });
         }
       });
@@ -358,11 +356,11 @@ export default {
     getDictItems() {
       //--数据字典--
       // 性别
-      this.$api.dict.findByLableName("sex").then(response => {
+      this.$api.dict.findByLableName("sex").then((response) => {
         localStorage.setItem("sexOptions", JSON.stringify(response.data)); // 保存用户到本地会话
       });
       // 状态
-      this.$api.dict.findByLableName("user_status").then(response => {
+      this.$api.dict.findByLableName("user_status").then((response) => {
         localStorage.setItem(
           "user_statusoptions",
           JSON.stringify(response.data)
@@ -371,7 +369,7 @@ export default {
     },
     // 用户信息
     getUser() {
-      this.$api.user.getLoginUser().then(response => {
+      this.$api.user.getLoginUser().then((response) => {
         if (response.code == 200) {
           //头像地址拼接
           if (
@@ -394,7 +392,7 @@ export default {
           this.$message.error(response.msg);
         }
       });
-      this.$api.role.findAll().then(res => {
+      this.$api.role.findAll().then((res) => {
         localStorage.setItem("find_all", JSON.stringify(res.data));
       });
     },
@@ -412,7 +410,7 @@ export default {
       this.$refs.loginForm.resetFields();
     },
     // 切换主题
-    onThemeChange: function(themeColor) {
+    onThemeChange: function (themeColor) {
       this.$store.commit("setThemeColor", themeColor);
     },
     switchLogin() {
@@ -429,14 +427,14 @@ export default {
       let url = process.env.BASE_URL + "/scanQrCode?uuid=" + uuid;
       this.$nextTick(() => {
         this.creatQrCode(url);
-        this.$api.login.getQRCode(uuid).then(res => {
+        this.$api.login.getQRCode(uuid).then((res) => {
           this.uuid = res.data.uuid;
           this.startPolling();
         });
       });
     },
     checkScanStatus() {
-      this.$api.login.QrCodeStatusQuery(this.uuid).then(res => {
+      this.$api.login.QrCodeStatusQuery(this.uuid).then((res) => {
         if (res.data.statusCode == 20000) {
           this.tipVisibility = true;
           this.loadingCode = true;
@@ -477,10 +475,10 @@ export default {
           height: 200,
           colorDark: "#000000",
           colorLight: "#ffffff",
-          correctLevel: QRCode.CorrectLevel.H
+          correctLevel: QRCode.CorrectLevel.H,
         });
       }
-    }
+    },
   },
 
   beforeDestroy() {
@@ -490,22 +488,22 @@ export default {
   mounted() {
     this.refreshCaptcha();
     /**获取当前登录的ip地址 */
-    getUserIP(ip => {
-      getAddressLocation(ip, info => {
-        console.log(info,22222222222);
+    getUserIP((ip) => {
+      getAddressLocation(ip, (info) => {
+        console.log(info, 22222222222);
         this.addressInfo = info;
       });
     });
   },
   computed: {
     ...mapState({
-      themeColor: state => state.app.themeColor
-    })
+      themeColor: (state) => state.app.themeColor,
+    }),
   },
   //销毁函数
   destroyed() {
     document.onkeydown = null;
-  }
+  },
 };
 </script>
 

+ 18 - 1
src/views/PeopleManage/Agent/AgentManage.vue

@@ -178,6 +178,7 @@
                     style="width: 100%"
                     v-model="formDataDetail.entryTime"
                     type="date"
+                    value-format="yyyy-MM-dd"
                     placeholder="选择日期"
                     popper-class="select-prop"
                   >
@@ -406,6 +407,7 @@
         <el-button @click="closeDialogOut">取消</el-button>
       </span>
     </el-dialog>
+    <personnelHistory ref="personnelHistory" ></personnelHistory>
   </div>
 </template>
 
@@ -416,6 +418,7 @@ import templateTable from "../../../components/TemplateTable/index.vue";
 import peopleImage from "@/components/PeopleImage/index.vue";
 import { validateSfz } from "../../../utils/validate.js";
 import userDetail from "@/components/UserDetail/index.vue"; // 详情信息
+import personnelHistory from "@/components/PersonnelHistory/index.vue"; //人员修改历史
 import mixa from "../mixin";
 const mixin = new mixa({
   treeTypeNum: 2, //树分类过滤参数
@@ -427,6 +430,7 @@ export default {
     templateTable,
     peopleImage,
     userDetail,
+    personnelHistory
   },
   mixins: [mixin],
   data() {
@@ -541,7 +545,7 @@ export default {
         loading: true,
         isPaginationShow: true,
         isShowIndex: true,
-        operationWidth: "230",
+        operationWidth: "330",
         optBtns: [
           {
             type: "primary",
@@ -552,6 +556,14 @@ export default {
               return this.handleTableEdit(row);
             },
           },
+          {
+            type: "primary",
+            label: "人员轨迹",
+            perm: "sys:agent:edit",
+            click: (row, index) => {
+              return this.checkHistory(row);
+            },
+          },
           {
             type: "primary",
             label: "离司",
@@ -1110,6 +1122,11 @@ export default {
         }
       });
     },
+    //查看人员修改记录
+    async checkHistory(row){
+      let userId = row.userId;
+      this.$refs.personnelHistory.getHistory(userId);
+    }
   },
 };
 </script>

+ 4 - 2
src/views/PeopleManage/Institutional.vue

@@ -345,8 +345,10 @@ export default {
     suggestChange(e) {
       this.formData.suggestId = ''
       if (e) {
-        this.formData.suggestId = this.sysPartnerOption.find(val => val.userId == e).userId
+        this.formData.suggestId = this.sysPartnerOption.find(val => val.userName == e).userId
       }
+      console.log(e,222222222);
+
     },
     userChange(val) {
       if (val) {
@@ -454,7 +456,7 @@ export default {
       this.$refs.formData.validate((valid) => {
         if (valid) {
           this.$confirm("确认提交吗?", "提示", {}).then(() => {
-            if (this.dialogTitle == "新增") {
+            if (this.dialogTitle == "新增工作室信息") {
               this.$api.insCompany
                 .agencyAdd(this.formData)
                 .then((res) => {

+ 150 - 29
src/views/PeopleManage/InstitutionalExtraction.vue

@@ -1,19 +1,26 @@
 <template>
   <div>
-    <div>
-      
-          <templateTable
-            :formList="formList"
-            :searchData.sync="queryFrom"
-            :tableConfig="tableConfig"
-            :data="pageResult"
-            @getList="findPage"
-            @handleSearchList="handleSearchList"
-            :pagination="pageData"
-          >
+    <templateTable :formList="formList" :searchData.sync="queryFrom" :tableConfig="tableConfig" :data="pageResult"
+      @getList="findPage" @handleSearchList="handleSearchList" :pagination="pageData">
+    </templateTable>
+    <el-dialog title="详情" :visible.sync="dialogVisible" width="70%">
+      <el-row>
+        <el-col :span="5">
+          <templateTable :tableConfig="personneltableConfig" :data="pageResultpersonnel" @getList="findPagepersonnel"
+            @rowClick="rowClick">
           </templateTable>
-    </div>
-    
+        </el-col>
+        <el-col :span="18" :offset="1">
+          <templateTable :tableConfig="depttableConfig" :data="pageResultdept" @getList="findPagedept"
+            :pagination="pageDatadept">
+          </templateTable>
+        </el-col>
+      </el-row>
+
+      <div slot="footer" class="dialog-footer">
+        <el-button size="small" @click="dialogVisible = false">关 闭</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
@@ -25,8 +32,9 @@ export default {
   },
   data() {
     return {
+      dialogVisible: false,
       formList: [
-      {
+        {
           label: "工号",
           prop: "userId",
           type: "input",
@@ -48,40 +56,155 @@ export default {
           },
           { prop: "deptId", label: "机构编码", type: "text" },
           { prop: "deptName", label: "机构名称", type: "text" },
-          { prop: "proportional", label: "抽成比例", type: "text" },
           { prop: "sumpremium", label: "总保费", type: "text" },
+          { prop: "proportional", label: "抽成比例", type: "text" },
           { prop: "extractFee", label: "抽成总金额", type: "text" },
           { prop: "historyFee", label: "已提现金额", type: "text" },
           { prop: "cashFee", label: "可提现金额", type: "text" },
           { prop: "startTime", label: "核算开始时间", type: "text" },
         ],
+        optBtns: [
+          {
+            type: "primary",
+            label: "详情",
+            click: (row, index) => {
+              return this.detail(row);
+            },
+          },
+        ],
+        loading: true,
+        isPaginationShow: true,
+        isShowIndex: true,
+      },
+      personneltableConfig: {
+        columns: [
+          // 数据列
+          { prop: "name", label: "姓名", type: "text" },
+        ],
+        tableHeight:480,
+        loading: true,
+        isPaginationShow: false,
+        isShowIndex: true,
+      },
+      depttableConfig: {
+        columns: [
+          // 数据列
+          { prop: "userId", label: "员工编号", type: "text" },
+          { prop: "userName", label: "员工姓名", type: "text" },
+          { prop: "companyId", label: "子订单编号", type: "text" },
+          { prop: "orderstatus", label: "订单状态", type: "statMap",options:[
+            {
+              label:'报价中',
+              value:'0'
+            },
+            {
+              label:'待核保',
+              value:'1'
+            },
+            {
+              label:'已核保待缴费',
+              value:'2'
+            },
+            {
+              label:'已承保',
+              value:'3'
+            },
+            {
+              label:'核保退回',
+              value:'4'
+            },
+          ]},
+          { prop: "licenseno", label: "车牌号", type: "text" },
+          { prop: "sypremium", label: "商业险", type: "text" },
+          { prop: "jqpremium", label: "交强险", type: "text" },
+          { prop: "jypremium", label: "驾意险", type: "text" },
+          { prop: "sumpremium", label: "总保费", type: "text" },
+
+          { prop: "createtime", label: "创建时间 ", type: "text" },
+        ],
+        tableHeight:450,
         loading: true,
         isPaginationShow: true,
         isShowIndex: true,
       },
-      rules:{
+      pageResultpersonnel: [],
+      pageResultdept: [],
+      rules: {
         proportional: [
-            { required: true, message: '请输入抽成比例', trigger: 'blur' },
-          ],
-          userName: [
-            { required: true, message: '请选择名称', trigger: 'change' }
-          ],
-         
+          { required: true, message: '请输入抽成比例', trigger: 'blur' },
+        ],
+        userName: [
+          { required: true, message: '请选择名称', trigger: 'change' }
+        ],
+
       },
       pageData: {
         pageNum: 1,
         pageSize: 10,
         totalSize: 0,
       },
-     
+      pageDatadept: {
+        pageNum: 1,
+        pageSize: 10,
+        totalSize: 0,
+      },
       queryFrom: {},
       pageResult: [],
+      rowDept: '',
+      userId: '',
+      startTime:''
     };
   },
   created() {
     this.findPage();
   },
   methods: {
+    detail(row) {
+      this.dialogVisible = true
+      this.rowDept = row.deptId
+      this.startTime = row.startTime
+      this.findPagepersonnel({ deptId: row.deptId })
+      this.findPagedept()
+    },
+    rowClick(val) {
+      this.userId =''
+      this.userId = val.id
+      this.pageDatadept=   {
+        pageNum: 1,
+        pageSize: 10,
+        totalSize: 0,
+      },
+      this.findPagedept()
+    },
+    findPagepersonnel(data) {
+      this.personneltableConfig.loading = true;
+      this.$api.insCompany
+        .queryAgencyUser({
+          ...data,
+        })
+        .then((res) => {
+          this.personneltableConfig.loading = false;
+          this.pageResultpersonnel = res.data;
+        });
+    },
+    findPagedept(data) {
+      this.depttableConfig.loading = true;
+      this.$api.insCompany
+        .queryAgencyUserInsAreaPage({
+          userId: this.userId,
+          deptId: this.rowDept,
+          startTime:this.startTime,
+          ...data,
+          ...this.pageDatadept
+        })
+        .then((res) => {
+          this.depttableConfig.loading = false;
+          this.pageResultdept = res.data.records;
+          this.pageDatadept.pageNum = res.data.current;
+          this.pageDatadept.pageSize = res.data.size;
+          this.pageDatadept.totalSize = res.data.total;
+        });
+    },
     // 查询Start
     queryStaffInfo() {
       this.findPage();
@@ -103,17 +226,15 @@ export default {
           this.pageData.totalSize = res.data.totalSize;
         });
     },
-   
+
     handleSearchList(data) {
       this.findPage(data);
     },
-   
+
     // 下一步
-    
+
   },
 };
 </script>
 
-<style scoped>
-
-</style>
+<style scoped></style>

+ 10 - 10
src/views/PeopleManage/InstitutionalPremium.vue

@@ -38,7 +38,7 @@
         <el-button size="small" type="primary" @click="onDrivingupload('1')">审核通过</el-button>
       </span>
     </el-dialog>
-    <el-dialog title="操作记录" :visible.sync="operationdialogVisible" width="50%" :before-close="handleCloseopera">
+    <el-dialog title="审核记录" :visible.sync="operationdialogVisible" width="50%" :before-close="handleCloseopera">
       <div>
         <el-table :data="operationtableData" border style="width: 100%">
           <el-table-column prop="userId" label="工号">
@@ -62,9 +62,9 @@
       </el-table-column> -->
           <el-table-column prop="cashFee" label="提现金额">
           </el-table-column>
-          <el-table-column prop="createBy" label="操作人">
+          <el-table-column prop="createBy" label="审核人">
           </el-table-column>
-          <el-table-column prop="createTime" label="操作时间">
+          <el-table-column prop="createTime" label="审核时间">
           </el-table-column>
           <el-table-column prop="status" :formatter="formatter" label="状态">
           </el-table-column>
@@ -125,8 +125,8 @@ export default {
       tableConfig: {
         columns: [
           // 数据列
+          { prop: "number", label: "提现编码", type: "text" },
           { prop: "userId", label: "工号", type: "text" },
-          { prop: "number", label: "单号", type: "text" },
           {
             prop: "userName",
             label: "名称",
@@ -135,8 +135,11 @@ export default {
           { prop: "deptId", label: "机构编码", type: "text" },
 
           { prop: "deptName", label: "机构名称", type: "text" },
-          { name: "picture", label: "转账图片", type: "slot" },
+          { prop: "sumpremium", label: "总保费", type: "text" },
           { prop: "proportional", label: "抽成比例", type: "text" },
+          { prop: "extractFee", label: "抽成总金额", type: "text" },
+          { prop: "historyFee", label: "提现金额", type: "text" },
+          { prop: "cashFee", label: "申请金额", type: "text" },
           {
             prop: "status", label: "审核状态", type: "statMap", options: [
               {
@@ -152,10 +155,7 @@ export default {
             ]
           },
           { prop: "remark", label: "审批意见", type: "text" },
-          { prop: "sumpremium", label: "总保费", type: "text" },
-          { prop: "extractFee", label: "抽成总金额", type: "text" },
-          { prop: "historyFee", label: "提现金额", type: "text" },
-          { prop: "cashFee", label: "申请金额", type: "text" },
+          { name: "picture", label: "转账图片", type: "slot" },
           { prop: "startTime", label: "核算开始时间", type: "text" },
         ],
         loading: true,
@@ -203,7 +203,7 @@ export default {
           },
           {
             type: "primary",
-            label: "操作记录",
+            label: "审核记录",
             type: 'text',
             click: (row, index) => {
               return this.operation(row);

+ 104 - 0
src/views/PeopleManage/MobileZoomDiv.vue

@@ -0,0 +1,104 @@
+<template>
+    <div class="resizable-draggable" :style="{ transform: `scale(${scale})`, left: `${x}px`, top: `${y}px` }"
+        @mousedown="startDrag" @wheel="zoom">
+        <slot></slot>
+    </div>
+</template>  
+  
+<script>
+export default {
+    name: 'ResizableDraggable',
+    data() {
+        return {
+            dragging: false,
+            resizing: false,
+            startX: 0,
+            startY: 0,
+            scale: 1,
+            x: 0,
+            y: 0
+        };
+    },
+    methods: {
+        zoom(event) {
+                event.preventDefault();
+                const delta = event.deltaY < 0 ? 1.1 : 0.9;
+                this.scale *= delta;
+                },
+
+        startDrag(event) {
+            this.dragging = true;
+            this.startX = event.clientX - this.x;
+            this.startY = event.clientY - this.y;
+            document.addEventListener('mousemove', this.drag);
+            document.addEventListener('mouseup', this.stopDrag);
+        },
+        drag(event) {
+            if (!this.dragging) return;
+            this.x = event.clientX - this.startX;
+            this.y = event.clientY - this.startY;
+        // 左边界
+        // if (this.x  <= 0) {
+        //     this.x  = 0;
+        // }
+        // // 上边界
+        // if (this.y <= 0) {
+        //     this.y = 0;
+        // }
+        //下边界  容器高度 - 拖动元素高度
+        // if (this.y >= dragContainerHeight - dragHeight) {
+        //     this.y = dragContainerHeight - dragHeight;
+        // }
+        // //右边界   容器宽度 - 拖动元素宽度
+        // if (moveX >= dragContainerWidth - dragWidth) {
+        //   moveX = dragContainerWidth - dragWidth;
+        // }
+        },
+        stopDrag() {
+            if (!this.dragging) return;
+            this.dragging = false;
+            document.removeEventListener('mousemove', this.drag);
+            document.removeEventListener('mouseup', this.stopDrag);
+        },
+        startResize(type) {
+            this.resizing = true;
+            const num = type === 'narrow' ? -0.2 : 0.2;
+            this.scale += num;
+            this.scale = Math.max(1, Math.min(this.scale, 2)); // 限制缩放范围
+        },
+        reset() {
+            this.dragging = false;
+            this.resizing = false;
+            this.startX = 0;
+            this.startY = 0;
+            this.scale = 1;
+            this.x = 0;
+            this.y = 0;
+        }
+        // startResize(event) {
+        //   this.resizing = true;
+        //   const rect = this.$el.getBoundingClientRect();
+        //   const scaleFactor = event.clientX - rect.left > rect.width / 2 ? 1.1 : 0.9;
+        //   this.scale *= scaleFactor;
+        //   this.scale = Math.max(0.1, Math.min(this.scale, 2)); // 限制缩放范围
+        //   event.preventDefault();
+        // }
+    }
+};
+</script>  
+    
+<style scoped>
+.resizable-draggable {
+    /* width: 100%;
+    height: 100%; */
+    width: 500px;
+    height: auto;
+    position: absolute;
+    transition: transform 0.2s ease-in-out;
+    cursor: move;
+    /* 其他样式 */
+}
+
+
+</style>
+  

+ 88 - 0
src/views/PeopleManage/MobileZoomDivR.vue

@@ -0,0 +1,88 @@
+<template>
+    <div class="resizable-draggable" :style="{ transform: `scale(${scale})`, right: `${x}px`, bottom: `${y}px` }"
+        @mousedown="startDrag" @wheel="zoom">
+        <slot></slot>
+    </div>
+</template>  
+  
+<script>
+export default {
+    name: 'ResizableDraggable',
+    data() {
+        return {
+            dragging: false,
+            resizing: false,
+            startX: 0,
+            startY: 0,
+            scale: 1,
+            x: 0,
+            y: 0
+        };
+    },
+    methods: {
+        zoom(event) {
+            event.preventDefault();
+            const delta = event.deltaY < 0 ? 1.1 : 0.9;
+            this.scale *= delta;
+        },
+
+        startDrag(event) {
+            this.dragging = true;
+            this.startX = event.clientX + this.x;
+            this.startY = event.clientY + this.y;
+            document.addEventListener('mousemove', this.drag);
+            document.addEventListener('mouseup', this.stopDrag);
+        },
+        drag(event) {
+            if (!this.dragging) return;
+            this.x = this.startX - event.clientX;
+            this.y = this.startY - event.clientY;
+
+        },
+        stopDrag() {
+            if (!this.dragging) return;
+            this.dragging = false;
+            document.removeEventListener('mousemove', this.drag);
+            document.removeEventListener('mouseup', this.stopDrag);
+
+        },
+        startResize(type) {
+            this.resizing = true;
+            const num = type === 'narrow' ? -0.2 : 0.2;
+            this.scale += num;
+            this.scale = Math.max(1, Math.min(this.scale, 2)); // 限制缩放范围
+        },
+        reset() {
+            this.dragging = false;
+            this.resizing = false;
+            this.startX = 0;
+            this.startY = 0;
+            this.scale = 1;
+            this.x = 0;
+            this.y = 0;
+        }
+        // startResize(event) {
+        //   this.resizing = true;
+        //   const rect = this.$el.getBoundingClientRect();
+        //   const scaleFactor = event.clientX - rect.left > rect.width / 2 ? 1.1 : 0.9;
+        //   this.scale *= scaleFactor;
+        //   this.scale = Math.max(0.1, Math.min(this.scale, 2)); // 限制缩放范围
+        //   event.preventDefault();
+        // }
+    }
+};
+</script>  
+    
+<style scoped>
+.resizable-draggable {
+    /* width: 100%;
+    height: 100%; */
+    width: 500px;
+    height: auto;
+    position: absolute;
+    transition: transform 0.2s ease-in-out;
+    cursor: move;
+    /* 其他样式 */
+}
+</style>
+  

+ 88 - 0
src/views/PeopleManage/MobileZoomDivTR.vue

@@ -0,0 +1,88 @@
+<template>
+    <div class="resizable-draggable" :style="{ transform: `scale(${scale})`, right: `${x}px`, top: `${y}px` }"
+        @mousedown="startDrag" @wheel="zoom">
+        <slot></slot>
+    </div>
+</template>  
+  
+<script>
+export default {
+    name: 'ResizableDraggable',
+    data() {
+        return {
+            dragging: false,
+            resizing: false,
+            startX: 0,
+            startY: 0,
+            scale: 1,
+            x: 0,
+            y: 0
+        };
+    },
+    methods: {
+        zoom(event) {
+                event.preventDefault();
+                const delta = event.deltaY < 0 ? 1.1 : 0.9;
+                this.scale *= delta;
+                },
+
+        startDrag(event) {
+            this.dragging = true;
+            this.startX = event.clientX +this.x;
+            this.startY = event.clientY - this.y;
+            document.addEventListener('mousemove', this.drag);
+            document.addEventListener('mouseup', this.stopDrag);
+        },
+        drag(event) {
+            if (!this.dragging) return;
+            this.x = this.startX-event.clientX ;
+            this.y = event.clientY - this.startY;
+        },
+        stopDrag() {
+            if (!this.dragging) return;
+            this.dragging = false;
+            document.removeEventListener('mousemove', this.drag);
+            document.removeEventListener('mouseup', this.stopDrag);
+        },
+        startResize(type) {
+            this.resizing = true;
+            const num = type === 'narrow' ? -0.2 : 0.2;
+            this.scale += num;
+            this.scale = Math.max(1, Math.min(this.scale, 2)); // 限制缩放范围
+        },
+        reset() {
+            this.dragging = false;
+            this.resizing = false;
+            this.startX = 0;
+            this.startY = 0;
+            this.scale = 1;
+            this.x = 0;
+            this.y = 0;
+        }
+        // startResize(event) {
+        //   this.resizing = true;
+        //   const rect = this.$el.getBoundingClientRect();
+        //   const scaleFactor = event.clientX - rect.left > rect.width / 2 ? 1.1 : 0.9;
+        //   this.scale *= scaleFactor;
+        //   this.scale = Math.max(0.1, Math.min(this.scale, 2)); // 限制缩放范围
+        //   event.preventDefault();
+        // }
+    }
+};
+</script>  
+    
+<style scoped>
+.resizable-draggable {
+    /* width: 100%;
+    height: 100%; */
+    width: 500px;
+    height: auto;
+    position: absolute;
+    transition: transform 0.2s ease-in-out;
+    cursor: move;
+    /* 其他样式 */
+}
+
+
+</style>
+  

+ 211 - 28
src/views/PeopleManage/PartnerExtraction.vue

@@ -1,19 +1,34 @@
 <template>
   <div>
-    <div>
-      
-          <templateTable
-            :formList="formList"
-            :searchData.sync="queryFrom"
-            :tableConfig="tableConfig"
-            :data="pageResult"
-            @getList="findPage"
-            @handleSearchList="handleSearchList"
-            :pagination="pageData"
+    <templateTable :formList="formList" :searchData.sync="queryFrom" :tableConfig="tableConfig" :data="pageResult"
+      @getList="findPage" @handleSearchList="handleSearchList" :pagination="pageData">
+    </templateTable>
+    <el-dialog title="详情" :visible.sync="dialogVisibledetail" width="40%">
+        <templateTable :tableConfig="detailtableConfig" :data="pageResultdetail" @getList="findPagedetail"
+        :pagination="pageDetailData"
           >
+        </templateTable>
+      <div slot="footer" class="dialog-footer">
+        <el-button size="small" @click="dialogVisibledetail = false">关 闭</el-button>
+      </div>
+    </el-dialog>
+    <el-dialog title="详情" :visible.sync="dialogVisible" width="70%">
+      <el-row>
+        <el-col :span="5">
+          <templateTable :tableConfig="personneltableConfig" :data="pageResultpersonnel" @getList="findPagepersonnel"
+            @rowClick="rowClick">
           </templateTable>
-    </div>
-    
+        </el-col>
+        <el-col :span="18" :offset="1">
+          <templateTable :tableConfig="depttableConfig" :data="pageResultdept" @getList="findPagedept"
+            :pagination="pageDatadept">
+          </templateTable>
+        </el-col>
+      </el-row>
+      <div slot="footer" class="dialog-footer">
+        <el-button size="small" @click="dialogVisible = false">关 闭</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
@@ -25,6 +40,8 @@ export default {
   },
   data() {
     return {
+      pageResultdetail:[],
+
       formList: [
         {
           label: "工号",
@@ -46,40 +63,208 @@ export default {
             label: "名称",
             type: "text",
           },
-          { prop: "proportional", label: "抽成比例", type: "text" },
           { prop: "sumpremium", label: "总保费", type: "text" },
+          { prop: "proportional", label: "抽成比例", type: "text" },
           { prop: "extractFee", label: "抽成总金额", type: "text" },
           { prop: "historyFee", label: "已提现金额", type: "text" },
           { prop: "cashFee", label: "可提现金额", type: "text" },
-          { prop: "startTime", label: "核算开始时间", type: "text" },
+          // { prop: "startTime", label: "核算开始时间", type: "text" },
+        ],
+        optBtns: [
+          {
+            type: "primary",
+            label: "详情",
+            click: (row, index) => {
+              return this.detail(row);
+            },
+          },
         ],
         loading: true,
         isPaginationShow: true,
         isShowIndex: true,
       },
-      rules:{
-        proportional: [
-            { required: true, message: '请输入抽成比例', trigger: 'blur' },
-          ],
-          userName: [
-            { required: true, message: '请选择名称', trigger: 'change' }
-          ],
+      detailtableConfig: {
+        columns: [
+          // 数据列
+          // { prop: "userId", label: "工号", type: "text" },
+          // {
+          //   prop: "userName",
+          //   label: "名称",
+          //   type: "text",
+          // },
          
+          { prop: "deptId", label: "机构编码", type: "text" },
+          { prop: "deptName", label: "机构名称", type: "text" },
+           { prop: "sumpremium", label: "总保费", type: "text" },
+          // { prop: "proportional", label: "抽成比例", type: "text" },
+          // { prop: "extractFee", label: "总保费抽成费用", type: "text" },
+          { prop: "startTime", label: "核算开始时间", type: "text",width:170 },
+        ],
+        optBtns: [
+          {
+            type: "primary",
+            label: "查看",
+            click: (row, index) => {
+              return this.rowDetail(row);
+            },
+          },
+        ],
+        loading: true,
+        isPaginationShow: true,
+        isShowIndex: true,
+      },
+      rules: {
+        proportional: [
+          { required: true, message: '请输入抽成比例', trigger: 'blur' },
+        ],
+        userName: [
+          { required: true, message: '请选择名称', trigger: 'change' }
+        ],
+
       },
       pageData: {
         pageNum: 1,
         pageSize: 10,
         totalSize: 0,
       },
-     
+      pageDetailData: {
+        pageNum: 1,
+        pageSize: 10,
+        totalSize: 0,
+      },
       queryFrom: {},
       pageResult: [],
+      dialogVisible: false,
+      personneltableConfig: {
+        columns: [
+          // 数据列
+          { prop: "name", label: "姓名", type: "text" },
+        ],
+        tableHeight: 480,
+        loading: true,
+        isPaginationShow: false,
+        isShowIndex: true,
+      },
+      depttableConfig: {
+        columns: [
+          // 数据列
+          { prop: "userId", label: "员工编号", type: "text" },
+          { prop: "userName", label: "员工姓名", type: "text" },
+          { prop: "companyId", label: "子订单编号", type: "text" },
+          { prop: "orderstatus", label: "订单状态", type: "statMap",options:[
+            {
+              label:'报价中',
+              value:'0'
+            },
+            {
+              label:'待核保',
+              value:'1'
+            },
+            {
+              label:'已核保待缴费',
+              value:'2'
+            },
+            {
+              label:'已承保',
+              value:'3'
+            },
+            {
+              label:'核保退回',
+              value:'4'
+            },
+          ]},
+          { prop: "licenseno", label: "车牌号", type: "text" },
+          { prop: "sypremium", label: "商业险", type: "text" },
+          { prop: "jqpremium", label: "交强险", type: "text" },
+          { prop: "jypremium", label: "驾意险", type: "text" },
+          { prop: "sumpremium", label: "总保费", type: "text" },
+          { prop: "createtime", label: "创建时间 ", type: "text" },
+        ],
+        tableHeight: 450,
+        loading: true,
+        isPaginationShow: true,
+        isShowIndex: true,
+      },
+      pageResultpersonnel: [],
+      pageResultdept: [],
+      pageDatadept: {
+        pageNum: 1,
+        pageSize: 10,
+        totalSize: 0,
+      },
+      rowDept: '',
+      userId: '',
+      startTime: '',
+      dialogVisibledetail:false
     };
   },
   created() {
     this.findPage();
   },
   methods: {
+    detail(row) {
+      this.dialogVisibledetail = true
+      this.rowUserId=row.userId
+      this.findPagedetail()
+    },
+    rowDetail(row) {
+      this.dialogVisible = true
+      this.rowDept = row.deptId
+      this.startTime = row.startTime
+      this.findPagepersonnel({ deptId: row.deptId })
+      this.findPagedept()
+    },
+    rowClick(val) {
+      this.userId =''
+      this.userId = val.id
+      this.pageDatadept=   {
+        pageNum: 1,
+        pageSize: 10,
+        totalSize: 0,
+      },
+      this.findPagedept()
+    },
+    findPagedetail(data) {
+      this.detailtableConfig.loading = true;
+      this.$api.insCompany
+        .queryAgencyLeaderById({userId:this.rowUserId,...this.pageDetailData})
+        .then((res) => {
+          this.detailtableConfig.loading = false;
+          this.pageResultdetail = res.data.content;
+          this.pageDetailData.pageNum = res.data.pageNum;
+          this.pageDetailData.pageSize = res.data.pageSize;
+          this.pageDetailData.totalSize = res.data.totalSize;
+        });
+    },
+    findPagepersonnel(data) {
+      this.personneltableConfig.loading = true;
+      this.$api.insCompany
+        .queryAgencyUser({
+          ...data,
+        })
+        .then((res) => {
+          this.personneltableConfig.loading = false;
+          this.pageResultpersonnel = res.data;
+        });
+    },
+    findPagedept(data) {
+      this.depttableConfig.loading = true;
+      this.$api.insCompany
+        .queryAgencyUserInsAreaPage({
+          userId: this.userId,
+          deptId: this.rowDept,
+          startTime: this.startTime,
+          ...data,
+          ...this.pageDatadept
+        })
+        .then((res) => {
+          this.depttableConfig.loading = false;
+          this.pageResultdept = res.data.records;
+          this.pageDatadept.pageNum = res.data.current;
+          this.pageDatadept.pageSize = res.data.size;
+          this.pageDatadept.totalSize = res.data.total;
+        });
+    },
     // 查询Start
     queryStaffInfo() {
       this.findPage();
@@ -101,17 +286,15 @@ export default {
           this.pageData.totalSize = res.data.totalSize;
         });
     },
-   
+
     handleSearchList(data) {
       this.findPage(data);
     },
-   
+
     // 下一步
-    
+
   },
 };
 </script>
 
-<style scoped>
-
-</style>
+<style scoped></style>

+ 248 - 219
src/views/PeopleManage/PcLoginRecord.vue

@@ -3,199 +3,208 @@
     <div id="containerMap" style="width: 100%; height: 87vh;position: relative" v-loading="loading"
       element-loading-text="数据量较大,正在为您加载......" element-loading-spinner="el-icon-loading"
       element-loading-background="rgba(0, 0, 0, 0.8)"></div>
-    <div class="province-window">
-      <el-select size="small" v-model="provinceName" clearable placeholder="请选择省" @change="provinceChange"
-        @clear="provinceClear">
-        <el-option v-for="(option, index) in provinceOption" :key="index" :label="option.name"
-          :value="option.code"></el-option>
-      </el-select>
-      <el-select size="small" v-model="cityName" clearable placeholder="请选择市" @change="cityChange" @clear="cityClear">
-        <el-option v-for="(option, index) in cityOption" :key="index" :label="option.name"
-          :value="option.code"></el-option>
-      </el-select>
-      <el-select size="small" v-model="districtName" clearable placeholder="请选择区" @change="districtChange"
-        @clear="districtClear">
-        <el-option v-for="(option, index) in districtOption" :key="index" :label="option.name"
-          :value="option.code"></el-option>
-      </el-select>
-      <el-button size="small" type="primary" @click="onSearch">搜索</el-button>
-      <!-- <el-button size="small" type="primary" @click="onCircular">圆形定位</el-button> -->
-      <!-- <el-button size="small" type="primary" @click="map.remove(circle)">删除定位</el-button> -->
-    </div>
-    <div class="source-window">
-      <div>
-        <span>全部</span>
-        <el-switch v-model="sourceqb" @change="sourceqbChange">
-        </el-switch>
+    <div class="dragContainerEl">
+      <div class="province-window">
+        <el-select size="small" v-model="provinceName" clearable placeholder="请选择省" @change="provinceChange"
+          @clear="provinceClear">
+          <el-option v-for="(option, index) in provinceOption" :key="index" :label="option.name"
+            :value="option.code"></el-option>
+        </el-select>
+        <el-select size="small" v-model="cityName" clearable placeholder="请选择市" @change="cityChange" @clear="cityClear">
+          <el-option v-for="(option, index) in cityOption" :key="index" :label="option.name"
+            :value="option.code"></el-option>
+        </el-select>
+        <el-select size="small" v-model="districtName" clearable placeholder="请选择区" @change="districtChange"
+          @clear="districtClear">
+          <el-option v-for="(option, index) in districtOption" :key="index" :label="option.name"
+            :value="option.code"></el-option>
+        </el-select>
+        <el-button size="small" type="primary" @click="onSearch">搜索</el-button>
+        <!-- <el-button size="small" type="primary" @click="onCircular">圆形定位</el-button> -->
+        <!-- <el-button size="small" type="primary" @click="map.remove(circle)">删除定位</el-button> -->
       </div>
-      <div>
-        <span>代理</span>
-        <el-switch v-model="sourcedl" @change="sourcedlChange">
-        </el-switch>
-        <!-- <span style="margin-left: 15px;">在线</span>
+      <div class="source-window">
+        <div>
+          <span>全部</span>
+          <el-switch v-model="sourceqb" @change="sourceqbChange">
+          </el-switch>
+        </div>
+        <div>
+          <span>代理</span>
+          <el-switch v-model="sourcedl" @change="sourcedlChange">
+          </el-switch>
+          <!-- <span style="margin-left: 15px;">在线</span>
         <el-switch v-model="lineZx" @change="onLineChange">
         </el-switch> -->
-      </div>
-      <div>
-        <span>渠道</span>
-        <el-switch v-model="sourceqd" @change="sourceqdChange">
-        </el-switch>
-        <!-- <span style="margin-left: 15px;">离线</span>
+        </div>
+        <div>
+          <span>渠道</span>
+          <el-switch v-model="sourceqd" @change="sourceqdChange">
+          </el-switch>
+          <!-- <span style="margin-left: 15px;">离线</span>
         <el-switch v-model="lineLx" @change="offlineChange">
         </el-switch> -->
-      </div>
-    </div>
-    <div v-if="infoWindowVisible" class="infohis-window">
-      <p class="close flex j-s">
-        <span>历史记录</span>
-        <span style="color: #c3c3c3;font-size:18px" @click="infoWindowVisible = false"> ×</span>
-      </p>
-      <el-table :data="tableData" border style="width: 98%; max-height: 45vh;
-    overflow-y: auto; " 
-    :cell-style="{padding: '3px 8px'}"
-    :header-cell-style="{
-        background: '#F2F7FC',
-        fontWeight: '700',
-        color: '#606266',
-        
-      }">
-        <el-table-column prop="userId" label="工号" width="150">
-        </el-table-column>
-        <el-table-column prop="userName" label="姓名" width="80">
-        </el-table-column>
-        <el-table-column prop="address" label="地址">
-        </el-table-column>
-        <el-table-column prop="operationTime" label="登录时间">
-        </el-table-column>
-      </el-table>
-      <div class="bottomFixed">
-        <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="pageNum"
-          :page-sizes="[5, 10, 20, 30, 50, 100]" :page-size="pageSize" layout="total, sizes, prev, pager, next"
-          :total="totalSum">
-        </el-pagination>
-      </div>
-    </div>
-    <div class="personnel-window ">
-      <p class="close flex j-s ">
-        <!-- <span>人员分布</span> -->
-        <el-tabs style="position: relative;width: 100%;" v-model="activeName" @tab-click="handHistory">
-          <el-tab-pane label="人员分布" name="1"></el-tab-pane>
-          <el-tab-pane label="历史在线人数" name="2"></el-tab-pane>
-        </el-tabs>
-        <span style="color: #3865E9 ; cursor: pointer; font-size: 14px;position: absolute;line-height: 40px;
-    right: 30px;" @click="isCollapse = !isCollapse;if(isCollapse)infoWindowVisible=false">{{
-      isCollapse ? '收起' : '展开' }} </span>
-      </p>
-      <div v-show="activeName == 1">
-        <div class="flex j-s">
-          <div class="info-title"><i></i>人员数量概览</div>
-          <div class="info-online"><i></i>在线人数:{{ onlineData }}</div>
         </div>
-        <div style="padding: 10px 0;" class="flex j-s">
-          <div v-for="(item, index) in overviewOption" :key="index"
-            :class="currentIndex === index ? 'overview after-img' : 'overview '" @click="checkPrice(index)">
-            <span>{{ item.active }}</span>
-            <span>{{ item.name }}</span>
+      </div>
+      <MobileZoomDivTR>
+        <div v-if="infoWindowVisible" class="infohis-window">
+          <p class="close flex j-s">
+            <span>历史记录</span>
+            <span style="color: #c3c3c3;font-size:18px" @click="infoWindowVisible = false"> ×</span>
+          </p>
+          <el-table :data="tableData" border style="width: 98%; max-height: 45vh;
+    overflow-y: auto; " :cell-style="{ padding: '3px 8px' }" :header-cell-style="{
+      background: '#F2F7FC',
+      fontWeight: '700',
+      color: '#606266',
+
+    }">
+            <el-table-column prop="userId" label="工号" width="150">
+            </el-table-column>
+            <el-table-column prop="userName" label="姓名" width="80">
+            </el-table-column>
+            <el-table-column prop="address" label="地址">
+            </el-table-column>
+            <el-table-column prop="operationTime" label="登录时间">
+            </el-table-column>
+          </el-table>
+          <div class="bottomFixed">
+            <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="pageNum"
+              :page-sizes="[5, 10, 20, 30, 50, 100]" :page-size="pageSize" layout="total, sizes, prev, pager, next"
+              :total="totalSum">
+            </el-pagination>
           </div>
         </div>
-        <div v-show="isCollapse" class="info-title"><i></i>区域人员概览</div>
-        <el-table v-show="isCollapse" :data="overviewData" border
-          style="width: 100%; max-height: 50vh; overflow: auto;margin:15px 0" :header-cell-style="{
-            background: '#F7F7F9',
-            fontWeight: '700',
-            color: '#000',
-          }">
-          <el-table-column type="index" align="center" width="50" label="序号">
-            <template slot-scope="scope">
-              <img v-if="scope.$index == 0" src="../../assets/序号1.png" />
-              <img v-else-if="scope.$index == 1" src="../../assets/序号2.png" />
-              <img v-else-if="scope.$index == 2" src="../../assets/序号3.png" />
-              <span v-else style="text-decoration-line: underline;">{{ scope.$index + 1 }}</span>
-            </template>
-          </el-table-column>
-          <el-table-column prop="districtName" align="center" label="区域">
-          </el-table-column>
-          <el-table-column prop="number" align="center" label="人数">
-          </el-table-column>
-          <div slot="empty" class="empty">
-            <img src="../../assets/暂无数据.png" />
-            <div class="txt">暂无数据哦</div>
+      </MobileZoomDivTR>
+      <MobileZoomDivR>
+        <div class="personnel-window ">
+          <p class="close flex j-s ">
+            <!-- <span>人员分布</span> -->
+            <el-tabs style="position: relative;width: 100%;" v-model="activeName" @tab-click="handHistory">
+              <el-tab-pane label="人员分布" name="1"></el-tab-pane>
+              <el-tab-pane label="历史在线人数" name="2"></el-tab-pane>
+            </el-tabs>
+            <span 
+              style="color: #3865E9 ; cursor: pointer; font-size: 14px;position: absolute;line-height: 40px;right: 30px;" 
+              @click="isCollapse = !isCollapse; if (isCollapse) infoWindowVisible = false">
+              {{ isCollapse ? '收起' : '展开' }} 
+            </span>
+          </p>
+          <div v-show="activeName == 1">
+            <div class="flex j-s">
+              <div class="info-title"><i></i>人员数量概览</div>
+              <div class="info-online"><i></i>在线人数:{{ onlineData }}</div>
+            </div>
+            <div style="padding: 10px 0;" class="flex j-s">
+              <div v-for="(item, index) in overviewOption" :key="index"
+                :class="currentIndex === index ? 'overview after-img' : 'overview '" @click="checkPrice(index)">
+                <span>{{ item.active }}</span>
+                <span>{{ item.name }}</span>
+              </div>
+            </div>
+            <div v-show="isCollapse" class="info-title"><i></i>区域人员概览</div>
+            <el-table v-show="isCollapse" :data="overviewData" border
+              style="width: 100%; max-height: 50vh; overflow: auto;margin:15px 0" :header-cell-style="{
+                background: '#F7F7F9',
+                fontWeight: '700',
+                color: '#000',
+              }">
+              <el-table-column type="index" align="center" width="50" label="序号">
+                <template slot-scope="scope">
+                  <img v-if="scope.$index == 0" src="../../assets/序号1.png" />
+                  <img v-else-if="scope.$index == 1" src="../../assets/序号2.png" />
+                  <img v-else-if="scope.$index == 2" src="../../assets/序号3.png" />
+                  <span v-else style="text-decoration-line: underline;">{{ scope.$index + 1 }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column prop="districtName" align="center" label="区域">
+              </el-table-column>
+              <el-table-column prop="number" align="center" label="人数">
+              </el-table-column>
+              <div slot="empty" class="empty">
+                <img src="../../assets/暂无数据.png" />
+                <div class="txt">暂无数据哦</div>
+              </div>
+            </el-table>
           </div>
-        </el-table>
-      </div>
-      <div v-show="activeName == 2">
-        <div style="margin-bottom: 10px;">
-          <span style="color: #262626;font-weight: 700;font-size: 14px;">时间筛选 </span>
-          <el-date-picker v-model="historyDate" type="daterange" size="small" @change="historyDateFun"
-            value-format="yyyy-MM-dd" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
-          </el-date-picker>
-          <!-- <el-date-picker size="small" @change="historyDateFun"  v-model="historyDate" type="date" placeholder="选择日期" format="yyyy 年 MM 月 dd 日"
+          <div v-show="activeName == 2">
+            <div style="margin-bottom: 10px;">
+              <span style="color: #262626;font-weight: 700;font-size: 14px;">时间筛选 </span>
+              <el-date-picker v-model="historyDate" type="daterange" size="small" @change="historyDateFun"
+                value-format="yyyy-MM-dd" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
+              </el-date-picker>
+              <!-- <el-date-picker size="small" @change="historyDateFun"  v-model="historyDate" type="date" placeholder="选择日期" format="yyyy 年 MM 月 dd 日"
             value-format="yyyy-MM-dd"> 
           </el-date-picker>-->
-        </div>
-        <div class="flex j-s">
-          <div class="info-title"><i></i>历史在线人数统计</div>
-          <div class="info-online"><i></i>使用人数:{{ onlineHisData }}</div>
-        </div>
-        <div id="echarts_box" v-show="isCollapse" style="width: 460px;height:300px;"></div>
+            </div>
+            <div class="flex j-s">
+              <div class="info-title"><i></i>历史在线人数统计</div>
+              <div class="info-online"><i></i>使用人数:{{ onlineHisData }}</div>
+            </div>
+            <div id="echarts_box" v-show="isCollapse" style="width: 460px;height:300px;"></div>
 
-      </div>
+          </div>
+        </div>
 
+      </MobileZoomDivR>
 
-    </div>
-    <div v-if="personnelVisible" class="info-window">
-      <p class="close flex j-s">
-        <span>人员详情</span>
-        <span style="color: #c3c3c3;font-size:18px;cursor: pointer" @click="personnelVisible = false"> ×</span>
-      </p>
-      <el-table :data="personnelData" border style="width: 100%; " :header-cell-style="{
-        background: '#F7F7F9',
-        fontWeight: '700',
-        color: '#606266',
-      }">
-        <el-table-column type="index" align="center" width="50" label="序号">
-          <template slot-scope="scope">
-            <img v-if="scope.$index == 0" src="../../assets/序号1.png" />
-            <img v-else-if="scope.$index == 1" src="../../assets/序号2.png" />
-            <img v-else-if="scope.$index == 2" src="../../assets/序号3.png" />
-            <span v-else style="text-decoration-line: underline;">{{ scope.$index + 1 }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column prop="userName" label="姓名" width="100">
-        </el-table-column>
-        <el-table-column prop="userId" label="工号">
-        </el-table-column>
-        <el-table-column prop="address" label="地址">
-        </el-table-column>
-        <el-table-column prop="operationTime" label="登录时间">
-        </el-table-column>
-        <el-table-column prop="source" label="分类">
-          <template slot-scope="scope">
-            {{ scope.row.source == '1' ? '渠道' : '代理' }}
-          </template>
-        </el-table-column>
-        <el-table-column label="操作">
-          <template slot-scope="scope">
-            <el-button style="color:#3865E9 " @click.native.prevent="historicRecords(scope.row)" type="text" size="small">
-              历史记录
-            </el-button>
-          </template>
-        </el-table-column>
-        <div slot="empty" class="empty">
-          <img src="../../assets/暂无数据.png" />
-          <div class="txt">暂无数据哦</div>
+      <MobileZoomDiv>
+        <div v-if="personnelVisible" class="info-window">
+          <p class="close flex j-s">
+            <span>人员详情</span>
+            <span style="color: #c3c3c3;font-size:18px;cursor: pointer" @click="personnelVisible = false"> ×</span>
+          </p>
+          <el-table :data="personnelData" border style="width: 100%; " :header-cell-style="{
+            background: '#F7F7F9',
+            fontWeight: '700',
+            color: '#606266',
+          }">
+            <el-table-column type="index" align="center" width="50" label="序号">
+              <template slot-scope="scope">
+                <img v-if="scope.$index == 0" src="../../assets/序号1.png" />
+                <img v-else-if="scope.$index == 1" src="../../assets/序号2.png" />
+                <img v-else-if="scope.$index == 2" src="../../assets/序号3.png" />
+                <span v-else style="text-decoration-line: underline;">{{ scope.$index + 1 }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column prop="userName" label="姓名" width="100">
+            </el-table-column>
+            <el-table-column prop="userId" label="工号">
+            </el-table-column>
+            <el-table-column prop="address" label="地址">
+            </el-table-column>
+            <el-table-column prop="operationTime" label="登录时间">
+            </el-table-column>
+            <el-table-column prop="source" label="分类">
+              <template slot-scope="scope">
+                {{ scope.row.source == '1' ? '渠道' : '代理' }}
+              </template>
+            </el-table-column>
+            <el-table-column label="操作">
+              <template slot-scope="scope">
+                <el-button style="color:#3865E9 " @click.native.prevent="historicRecords(scope.row)" type="text"
+                  size="small">
+                  历史记录
+                </el-button>
+              </template>
+            </el-table-column>
+            <div slot="empty" class="empty">
+              <img src="../../assets/暂无数据.png" />
+              <div class="txt">暂无数据哦</div>
+            </div>
+          </el-table>
+          <div class="bottomFixed">
+            <el-pagination @current-change="handlePersonnelChange" :current-page="personnelPageNum" :page-size="5"
+              layout="total, prev, pager, next" :total="personnelTotalSize">
+            </el-pagination>
+          </div>
         </div>
-      </el-table>
-      <div class="bottomFixed">
-        <el-pagination @current-change="handlePersonnelChange" :current-page="personnelPageNum" :page-size="5"
-          layout="total, prev, pager, next" :total="personnelTotalSize">
-        </el-pagination>
-      </div>
-    </div>
-    <div class="info-window input-card" v-if="circle">
-      <el-button size="small" round @click="circleEditor.open()" style="margin-bottom: 5px">开始编辑</el-button>
-      <el-button size="small" round @click="circleEditor.close()" style="margin-left:0">结束编辑</el-button>
+      </MobileZoomDiv>
 
+      <div class="info-window input-card" v-if="circle">
+        <el-button size="small" round @click="circleEditor.open()" style="margin-bottom: 5px">开始编辑</el-button>
+        <el-button size="small" round @click="circleEditor.close()" style="margin-left:0">结束编辑</el-button>
+      </div>
     </div>
   </div>
 </template>
@@ -203,6 +212,9 @@
 <script>
 import echarts from 'echarts';
 import yongchengData from '../../assets/js/yongchengData';
+import MobileZoomDiv from './MobileZoomDiv.vue'
+import MobileZoomDivR from './MobileZoomDivR.vue'
+import MobileZoomDivTR from './MobileZoomDivTR.vue'
 import AMapLoader from "@amap/amap-jsapi-loader";
 window._AMapSecurityConfig = {
   securityJsCode: 'd62687dd438cfadd859bbab66d8e41a2',		//安全密钥
@@ -266,17 +278,20 @@ export default {
       lineLx: null,
       status: null,
       positionType: null,
-      historyData: []
+      historyData: [],
+
     };
   },
+  components: { MobileZoomDiv, MobileZoomDivR, MobileZoomDivTR },
   mounted() {
     myChart = echarts.init(document.getElementById('echarts_box'))
     this.initMap();
   },
   created() {
+    // 区域人员概览数据
     this.queryRegion()
+    // 人员数量概览
     this.queryPcNum()
-
     //标注文字上的点击事件
     window.personnelclick = () => {
       this.personnelVisible = true;
@@ -289,16 +304,16 @@ export default {
   methods: {
     historicRecords(row) {
       this.rowId = row.userId
-      this.isCollapse=false
-      this.infoWindowVisible=true
+      this.isCollapse = false
+      this.infoWindowVisible = true
       this.detail()
     },
     handHistory(tab, event) {
       if (tab.name == '2') {
         this.queryAnalysis();
       }
-      else{
-        this.positionType=1
+      else {
+        this.positionType = 1
         this.initMap();
       }
     },
@@ -307,7 +322,7 @@ export default {
       this.queryAnalysis({ startTime: val[0], endTime: val[1] });
     },
     queryAnalysis(param) {
-      this.$api.user.ipAddrGetPcAddress({source:this.source ,...param}).then((res) => {
+      this.$api.user.ipAddrGetPcAddress({ source: this.source, ...param }).then((res) => {
         if (res.code == 200) {
           this.onlineHisData = res.data.onlineNum
           this.formatAnalysisDate(res.data.list)
@@ -324,25 +339,24 @@ export default {
           _this.map.on("complete", () => {
             //处理后台返回要用到的数据
             // _this.positionData = res.data.data
-            if (res.data.pcAddressList.length > 0){
-
+            if (res.data.pcAddressList.length > 0) {
               _this.positionType = res.data.pcAddressList[0].type
-            _this.positionData = res.data.pcAddressList.map(item => ({
-              userName: item.userName,
-              id: item.id,
-              userId: item.userId,
-              address: item.address,
-              leaderName: item.leaderName ? item.leaderName : '无',
-              // onlineImg: item.status ? "Frame-1(2).png" : "Frame(2).png",
-              onlineImg: "Frame-1(2).png",
-              operationTime: item.operationTime,
-              source: item.source,
-              status: item.status ? "#1CE247" : "#B2B2B2",
-              // status: item.status ? "在线" : "离线",
-              positionArr: [item.longitude, item.latitude]
-            }));
-            _this.mapPoint();
-          }
+              _this.positionData = res.data.pcAddressList.map(item => ({
+                userName: item.userName,
+                id: item.id,
+                userId: item.userId,
+                address: item.address,
+                leaderName: item.leaderName ? item.leaderName : '无',
+                // onlineImg: item.status ? "Frame-1(2).png" : "Frame(2).png",
+                onlineImg: "Frame-1(2).png",
+                operationTime: item.operationTime,
+                source: item.source,
+                status: item.status ? "#1CE247" : "#B2B2B2",
+                // status: item.status ? "在线" : "离线",
+                positionArr: [item.longitude, item.latitude]
+              }));
+              _this.mapPoint();
+            }
           });
           // if (location.href.indexOf("&guide=1") !== -1) {
           //   _this.map.setStatus({ scrollWheel: fal0e });
@@ -360,7 +374,6 @@ export default {
       const valueList = data.map(function (item) {
         return item.countNum;
       });
-
       let option = {
         visualMap: {
           show: false,
@@ -369,7 +382,6 @@ export default {
           min: 0,
           max: 400
         },
-
         tooltip: {
           trigger: 'axis'
         },
@@ -400,7 +412,7 @@ export default {
               y: 0,
               x2: 0,
               y2: 1,
-              colorStops: [
+              colorStops: [//折线图线条颜色
                 { offset: 0, color: '#3865E9' },
                 { offset: 1, color: '#A6D2F3' },
               ],
@@ -409,7 +421,6 @@ export default {
         }],
       }
       myChart.setOption(option)
-
     },
     morelFun() {
       let data = {
@@ -629,11 +640,11 @@ export default {
         this.sourceqd = null
       }
       this.source = null
-      if(this.positionType==1){
+      if (this.positionType == 1) {
         this.initMap();
       }
-      else{
-      this.queryAnalysis({ startTime: this.historyData[0], endTime: this.historyData[1] });
+      else {
+        this.queryAnalysis({ startTime: this.historyData[0], endTime: this.historyData[1] });
       }
     },
     sourcedlChange(val) {
@@ -642,11 +653,11 @@ export default {
         this.sourceqd = null
       }
       this.source = 2
-      if(this.positionType==1){
+      if (this.positionType == 1) {
         this.initMap();
       }
-      else{
-      this.queryAnalysis({ startTime: this.historyData[0], endTime: this.historyData[1] });
+      else {
+        this.queryAnalysis({ startTime: this.historyData[0], endTime: this.historyData[1] });
       }
     },
     sourceqdChange(val) {
@@ -655,11 +666,11 @@ export default {
         this.sourcedl = null
       }
       this.source = 1
-      if(this.positionType==1){
+      if (this.positionType == 1) {
         this.initMap();
       }
-      else{
-      this.queryAnalysis({ startTime: this.historyData[0], endTime: this.historyData[1] });
+      else {
+        this.queryAnalysis({ startTime: this.historyData[0], endTime: this.historyData[1] });
       }
     },
     onLineChange(val) {
@@ -958,15 +969,17 @@ export default {
 }
 
 .personnel-window {
-  position: fixed;
-  bottom: 10px;
-  right: 5px;
+  position: absolute;
+  // bottom: 10px;
+  // right: 5px;
+  bottom: 0;
+  right: 0;
   z-index: 100;
   background-color: white;
   padding: 10px;
   box-shadow: 0px 5px 10px #ddd;
   box-sizing: border-box;
-    width: 500px;
+  width: 500px;
 }
 
 .bottomFixed {
@@ -1098,5 +1111,21 @@ export default {
     }
   }
 
+  .dragContainerEl {
+    // position: absolute;
+    // top: 0;
+    width: 100%;
+    height: 100%;
+  }
+
+  .drag {
+    position: absolute;
+    width: 50px;
+    height: 50px;
+    border: 5px solid yellowgreen;
+    background-color: red;
+    text-align: center;
+  }
+
 }
 </style>

+ 20 - 1
src/views/PeopleManage/Player/PlayerManage.vue

@@ -182,6 +182,7 @@
                     style="width: 100%"
                     v-model="formDataDetail.entryTime"
                     type="date"
+                    value-format="yyyy-MM-dd"
                     placeholder="选择日期"
                     popper-class="select-prop"
                   >
@@ -423,6 +424,7 @@
         <el-button @click="closeDialogOut">取消</el-button>
       </span>
     </el-dialog>
+    <personnelHistory ref="personnelHistory" :isBusiness="true" ></personnelHistory>
   </div>
 </template>
 
@@ -431,6 +433,7 @@ import KtButton from "@/views/Core/KtButton"; // 按钮权限组件
 import tree from "@/components/ztree.vue"; // 机构树组件
 import templateTable from "../../../components/TemplateTable/index.vue";
 import peopleImage from "@/components/PeopleImage/index.vue";
+import personnelHistory from "@/components/PersonnelHistory/index.vue"; //人员修改历史
 import { validateSfz } from "../../../utils/validate.js";
 import mixa from "../mixin";
 const mixin = new mixa({
@@ -442,6 +445,7 @@ export default {
     tree,
     templateTable,
     peopleImage,
+    personnelHistory
   },
   mixins: [mixin],
   data() {
@@ -544,7 +548,7 @@ export default {
         loading: true,
         isPaginationShow: true,
         isShowIndex: true,
-        operationWidth: "220",
+        operationWidth: "330",
         optBtns: [
           {
             type: "primary",
@@ -555,6 +559,14 @@ export default {
               return this.handleTableEdit(row);
             },
           },
+          {
+            type: "primary",
+            label: "人员轨迹",
+            perm: "sys:agent:edit",
+            click: (row, index) => {
+              return this.checkHistory(row);
+            },
+          },
           {
             type: "primary",
             label: "离司",
@@ -977,6 +989,7 @@ export default {
               this.$api.user
                 .saveUserInfo({
                   sysUser: this.formData,
+                  sysUserInfo: this.formDataDetail,
                   esmUserImageVo: this.imagesIdList,
                 })
                 .then((res) => {
@@ -1000,6 +1013,7 @@ export default {
               this.$api.user
                 .updateUserInfo(this.formData.id, {
                   sysUser: this.formData,
+                  sysUserInfo: this.formDataDetail,
                   esmUserImageVo: this.imagesIdList,
                 })
                 .then((res) => {
@@ -1028,6 +1042,11 @@ export default {
     },
     switchPassword(){
       this.showPassWord = !this.showPassWord;
+    },
+    //查看人员修改记录
+    async checkHistory(row){
+      let userId = row.userId;
+      this.$refs.personnelHistory.getHistory(userId);
     }
   },
 };

+ 18 - 1
src/views/PeopleManage/Player/PlayerManageteam.vue

@@ -176,6 +176,7 @@
                     style="width: 100%"
                     v-model="formDataDetail.entryTime"
                     type="date"
+                    value-format="yyyy-MM-dd"
                     placeholder="选择日期"
                     popper-class="select-prop"
                   >
@@ -376,6 +377,7 @@
         <el-button @click="closeDialogOut">取消</el-button>
       </span>
     </el-dialog>
+    <personnelHistory ref="personnelHistory" ></personnelHistory>
   </div>
 </template>
 
@@ -385,6 +387,7 @@ import tree from "@/components/ztree.vue"; // 机构树组件
 import templateTable from "../../../components/TemplateTable/index.vue";
 import peopleImage from "@/components/PeopleImage/index.vue";
 import userDetail from "@/components/UserDetail/index.vue"; // 详情信息
+import personnelHistory from "@/components/PersonnelHistory/index.vue"; //人员修改历史
 import { validateSfz } from "../../../utils/validate.js";
 import mixa from "../mixin";
 const mixin = new mixa({
@@ -397,6 +400,7 @@ export default {
     templateTable,
     peopleImage,
     userDetail,
+    personnelHistory
   },
   mixins: [mixin],
   data() {
@@ -504,7 +508,7 @@ export default {
         loading: true,
         isPaginationShow: true,
         isShowIndex: true,
-        operationWidth: "220",
+        operationWidth: "330",
         optBtns: [
           {
             type: "primary",
@@ -515,6 +519,14 @@ export default {
               return this.handleTableEdit(row);
             },
           },
+          {
+            type: "primary",
+            label: "人员轨迹",
+            perm: "sys:agent:edit",
+            click: (row, index) => {
+              return this.checkHistory(row);
+            },
+          },
           {
             type: "primary",
             label: "离司",
@@ -1041,6 +1053,11 @@ export default {
 
       }, 500);
     },
+    //查看人员修改记录
+    async checkHistory(row){
+      let userId = row.userId;
+      this.$refs.personnelHistory.getHistory(userId);
+    }
   },
 };
 </script>

+ 35 - 0
src/views/PeopleManage/Sales/SalesExamine.vue

@@ -327,6 +327,36 @@
                 </el-form-item>
               </el-col>
             </el-row>
+            <el-row>
+              <el-col :span="8">
+                <el-form-item label="电销管理人" prop="managerName">
+                  <el-select
+                    style="width: 100%"
+                    clearable
+                    filterable
+                    v-model="formData.managerId"
+                    placeholder="请选择"
+                    popper-class="select-prop"
+                  >
+                    <el-option
+                      v-for="val in managerOptions"
+                      :label="val.name"
+                      :value="val.id"
+                      :key="val.id"
+                    ></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="电销管理工号" prop="leaderName">
+                  <el-input v-model="formData.managerId" disabled
+                            style="width: 100%"
+                  ></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+              </el-col>
+            </el-row>
           </el-form>
           <div class="footerHandle" style="text-align: right">
             <el-button
@@ -473,6 +503,7 @@ export default {
   mixins: [mixin],
   data() {
     return {
+      managerOptions:[], //电销管理集合
       showRemark: false, // 驳回弹窗
       activeName: "1",
       pageData: {
@@ -597,6 +628,10 @@ export default {
             }
           });
         });
+        //添加电销负责人
+        this.$api.user.findDxUserList().then((res) => {
+          this.managerOptions = res.data;
+        }); 
     },
     // 新增或修改的弹出框Start
     getDictItems(typeName) {

+ 1107 - 0
src/views/PeopleManage/Sales/SalesExamineGroup.vue

@@ -0,0 +1,1107 @@
+<template>
+  <div>
+    <el-main ref="elMain" style="padding: 0px">
+      <Split :gutterSize="2" style="height: calc(100vh - 120px)">
+        <!-- 左侧树Start -->
+        <SplitArea :size="leftSplitWidth" :minSize="240">
+          <div>
+            <!-- 左侧树形结构 -->
+            <!-- <el-tree
+              :data="ztreeNodes"
+              :props="{ children: 'children', label: 'name' }"
+              node-key="id"
+              :default-expanded-keys="['9']"
+              @node-click="onZTreeClick"
+            ></el-tree> -->
+            <el-tree
+              :data="ztreeNodes"
+              :props="{ children: 'children', label: 'name' }"
+              node-key="id"
+              :default-expanded-keys="['9']"
+              @node-click="onZTreeClick"
+            ></el-tree>
+          </div>
+        </SplitArea>
+        <!-- 左侧树End -->
+
+        <!-- 右侧列表页面Start -->
+        <SplitArea :size="rightSplitWidth">
+          <!-- 筛选区域Start -->
+          <el-row class="queryFrom">
+            <el-form ref="queryFormRef" :model="queryFrom" label-width="80px">
+              <el-row>
+                <el-col :span="5">
+                  <el-form-item label="工号">
+                    <el-input
+                      clearable
+                      size="small"
+                      placeholder="工号"
+                      v-model="queryFrom.userId"
+                    ></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5">
+                  <el-form-item label="姓名">
+                    <el-input
+                      clearable
+                      size="small"
+                      placeholder="姓名"
+                      v-model="queryFrom.name"
+                    ></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5">
+                  <el-form-item label="手机号">
+                    <el-input
+                      clearable
+                      size="small"
+                      placeholder="手机号"
+                      v-model="queryFrom.mobile"
+                    ></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5">
+                  <el-form-item label="状态">
+                    <el-select
+                      size="small"
+                      style="width: 200px"
+                      clearable
+                      v-model="queryFrom.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="queryFrom.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>
+                </el-col>
+                <el-col :span="4">
+                  <el-form-item label>
+                    <el-button
+                      size="small"
+                      type="primary"
+                      @click="queryStaffInfo"
+                      >查询</el-button
+                    >
+                  </el-form-item>
+                </el-col>
+              </el-row>
+            </el-form>
+          </el-row>
+
+          <kt-common-table
+            permsButton1="sys:agent:examine"
+            :data="pageResult"
+            :columns="columns"
+            :showBatchDelete="false"
+            @findPage="findPage"
+            :button7Name="'审核'"
+            :button7Status="'离司待审核'"
+            @handleButton7="handleTableEdit"
+            :button8Name="'审核'"
+            :button8Status="'入司待审核'"
+            @handleButton8="handleTableEdit"
+            @handleButton3="handleTableEdit1"
+            :button3Name="'详情'"
+            :button10Name="'审核'"
+            :button10Status="'修改待审核'"
+            @handleButton10="handleTableEdit"
+          ></kt-common-table>
+          <!--
+            @handleButton1="handleTableEdit"
+            :button1Name="'审核'"
+           -->
+        </SplitArea>
+        <!-- 右侧列表页面End -->
+      </Split>
+    </el-main>
+
+    <el-dialog
+      :title="dialogTitle"
+      width="60%"
+      top="5vh"
+      :visible.sync="dialogVisible"
+      :close-on-click-modal="false"
+      :before-close="handleDialogBefore"
+      :show-close="false"
+      @close="closeDialog"
+      v-dialogDrag
+      class="people-style"
+    >
+      <el-tabs v-model="activeName" class="tab-style">
+        <el-tab-pane label="基本信息" name="1">
+          <el-form
+            :model="formData"
+            disabled
+            ref="formData"
+            :inline="true"
+            @keyup.enter.native="nextStep()"
+            label-width="110px"
+            size="small"
+            label-position="top"
+            class="personnelInformation"
+          >
+          <el-row>
+              <el-col :span="8">
+                <el-form-item label="机构名称">
+                  <el-cascader
+                    style="width: 100%"
+                    :options="ztreeNodes"
+                    v-model="formData.pdeptId"
+                    clearable
+                    disabled
+                    :show-all-levels="false"
+                    :props="{
+                      value: 'id',
+                      label: 'name',
+                      checkStrictly: true,
+                    }"
+                    @change="handleChange"
+                  >
+                  </el-cascader>
+                </el-form-item
+              ></el-col>
+              <el-col :span="8">
+                <el-form-item label="机构部门" prop="deptId">
+                  <el-cascader
+                    style="width: 100%"
+                    :options="ztreeNodes"
+                    v-model="formData.deptId"
+                    clearable
+                    disabled
+                    :show-all-levels="false"
+                    :props="{
+                      value: 'id',
+                      label: 'name',
+                      checkStrictly: true,
+                    }"
+                    @change="handleChange"
+                  >
+                  </el-cascader> </el-form-item
+              ></el-col>
+              <el-col :span="8">
+                <el-form-item label="岗位" prop="positionId">
+                  <el-select
+                    style="width: 100%"
+                    v-model="formData.positionId"
+                    placeholder="请选择"
+                    popper-class="select-prop"
+                  >
+                    <el-option
+                      v-for="val in postOption"
+                      :label="val.postName"
+                      :value="val.postId"
+                      :key="val.postId"
+                    ></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+          </el-row>
+          <el-row>
+              <el-col :span="8">
+                <el-form-item label="工号" prop="id">
+                  <el-input v-model="formData.id" disabled
+                  style="width: 100%"
+                  ></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="姓名" prop="name">
+                  <el-input v-model="formData.name"
+                  style="width: 100%"
+                  ></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="手机号" prop="mobile">
+                  <el-input v-model="formData.mobile"
+                  style="width: 100%"
+                  ></el-input>
+                </el-form-item>
+              </el-col>
+          </el-row>
+          <el-row>
+              <el-col :span="8">
+                <el-form-item label="入司时间">
+                  <el-date-picker
+                    style="width: 100%"
+                    v-model="formDataDetail.entryTime"
+                    type="date"
+                    placeholder="选择日期"
+                    popper-class="select-prop"
+                  >
+                  </el-date-picker>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="状态" prop="status">
+                  <el-select
+                    disabled
+                    style="width: 100%"
+                    v-model="formData.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="8">
+                <el-form-item label="角色" prop="roleId">
+                  <el-select
+                    style="width: 100%"
+                    v-model="formData.roleId"
+                    placeholder="请选择"
+                    disabled
+                  >
+                    <el-option
+                      v-for="val in roles"
+                      :label="val.name"
+                      :value="val.id + ''"
+                      :key="val.id"
+                    ></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+          </el-row>
+          <el-row>
+              <el-col :span="8">
+                <el-form-item label="管理人" prop="leaderId">
+                  <el-select
+                    style="width: 100%"
+                    clearable
+                    filterable
+                    v-model="formData.leaderId"
+                    placeholder="请选择"
+                    popper-class="select-prop"
+                  >
+                    <el-option
+                      v-for="val in leaderOptions"
+                      :label="val.name"
+                      :value="val.id"
+                      :key="val.id"
+                    ></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="管理人工号" prop="leaderName">
+                  <el-input v-model="formData.leaderId" disabled
+                  style="width: 100%"
+                  ></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="代理人资格证号" prop="agentQualificationCode">
+                  <el-input
+                    style="width: 100%"
+                    v-model="formDataDetail.agentQualificationCode"
+                  ></el-input>
+                </el-form-item>
+              </el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="8">
+                <el-form-item label="电销管理人" prop="managerName">
+                  <el-select
+                    style="width: 100%"
+                    clearable
+                    filterable
+                    v-model="formData.managerId"
+                    placeholder="请选择"
+                    popper-class="select-prop"
+                  >
+                    <el-option
+                      v-for="val in managerOptions"
+                      :label="val.name"
+                      :value="val.id"
+                      :key="val.id"
+                    ></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="电销管理工号" prop="leaderName">
+                  <el-input v-model="formData.managerId" disabled
+                            style="width: 100%"
+                  ></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+              </el-col>
+            </el-row>
+          </el-form>
+          <div class="footerHandle" style="text-align: right">
+            <el-button
+              size="small"
+              type="primary"
+              style="
+                border: 1px solid #D42426;
+                color: #D42426;
+              "
+              class="closeBtn"
+              @click="closeDialog"
+              >取消</el-button
+            >
+            <el-button size="small" type="primary" @click="nextStep('2')"
+              >下一步</el-button
+            >
+          </div>
+        </el-tab-pane>
+        <el-tab-pane label="详细信息" name="2">
+          <userDetail
+            :formData="formData"
+            :formDataDetail="formDataDetail"
+            ref="formDataDetails"
+            isDisabled
+            :showThirdParty="true"
+          ></userDetail>
+          <div class="footerHandle" style="text-align: right">
+            <el-button
+              size="small"
+              type="primary"
+              style="
+                border: 1px solid #D42426;
+                color: #D42426;
+              "
+              class="closeBtn"
+              @click="closeDialog"
+              >取消</el-button
+            >
+            <!-- <el-button size="small" type="primary" @click="nextStep('1')"
+              >上一步</el-button
+            > -->
+            <el-button size="small" type="primary" @click="nextStep('3')"
+              >下一步</el-button
+            >
+          </div>
+        </el-tab-pane>
+        <el-tab-pane label="影像资料" name="3">
+          <el-form
+            :model="formDataDetail"
+            ref="formDataDetail"
+            :inline="true"
+            label-width="130px"
+            size="small"
+            class="peopleImage"
+          >
+            <peopleImage
+              :dataForm="dataForm"
+              :carfrontImg="true"
+              :dialogVisible="dialogVisible"
+              isDisabled
+            ></peopleImage>
+          </el-form>
+          <div class="footerHandle" style="text-align: right">
+            <el-button
+              size="small"
+              type="primary"
+              style="
+                border: 1px solid #D42426;
+                color: #D42426;
+              "
+              class="closeBtn"
+              @click="closeDialog"
+              >取消</el-button
+            >
+            <!-- <el-button size="small" type="primary" @click="nextStep('2')"
+              >上一步</el-button
+            > -->
+            <el-button
+              v-show="dialogTitle == '审核电销负责人'"
+              size="mini"
+              type="primary"
+              style="background-color: #0ec216; border: 1px solid #0ec216"
+              @click="submitForm(1)"
+              >审核通过</el-button
+            >
+            <el-button
+              v-show="dialogTitle == '审核电销负责人'"
+              size="mini"
+              type="danger"
+              style="background-color: #de504c; border: 1px solid #de504c"
+              @click="submitForm(2)"
+              >审核驳回</el-button
+            >
+          </div>
+        </el-tab-pane>
+      </el-tabs>
+    </el-dialog>
+
+    <!-- 驳回理由 -->
+    <el-dialog
+      title="驳回"
+      width="40%"
+      :visible.sync="showRemark"
+      @close="closeDialogOut"
+    >
+      <el-form>
+        <el-form-item label="备注" prop="remark">
+          <el-input
+            style="width: 30vw"
+            v-model="formDataDetail.remark"
+            type="textarea"
+            :autosize="{ minRows: 4, maxRows: 6 }"
+            placeholder="请输入内容"
+            prop="remark"
+            maxlength="200"
+            show-word-limit
+          ></el-input>
+        </el-form-item>
+      </el-form>
+      <span slot="footer">
+        <el-button type="primary" @click="handleSubOut">确定</el-button>
+        <el-button @click="closeDialogOut">取消</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import tree from "@/components/ztree.vue"; // 机构树组件
+import KtCommonTable from "@/views/Core/KtCommonTable.vue"; //表格组件
+import peopleImage from "@/components/PeopleImage/index.vue"; //影像组件
+import userDetail from "@/components/UserDetail/index.vue"; // 详情信息
+import mixa from "../mixin";
+const mixin = new mixa({
+  treeTypeNum: 3, //树分类过滤参数
+});
+export default {
+  components: {
+    tree,
+    KtCommonTable,
+    peopleImage,
+    userDetail,
+  },
+  mixins: [mixin],
+  data() {
+    return {
+      managerOptions:[], //电销管理集合
+      showRemark: false, // 驳回弹窗
+      activeName: "1",
+      pageData: {
+        pageNum: 1,
+        pageSize: 20,
+        deptId: JSON.parse(localStorage.getItem("user_data")).deptId,
+        userId: "",
+        realName: "",
+        mobile: "",
+      },
+      formData: {},
+      formDataRules: {
+        remark: [
+          { required: true, message: "请填写驳回原因", trigger: "blur" },
+        ],
+      },
+      formDataDetail: {},
+      filterObject: {},
+      peopleid: "",
+      peopledeptid: "",
+      recommenderList: [],
+      teamleadername: "",
+      teamleaderid: "",
+      // 右侧列表查询数据Start
+      queryFrom: {},
+      pageResult: {},
+      columns: [
+        // 数据列
+        { prop: "deptId", label: "部门编码", minWidth: 80, sortable: false },
+        {
+          prop: "pdeptName",
+          label: "机构名称",
+          minWidth: 120,
+          sortable: false,
+        },
+
+        { prop: "deptName", label: "部门名称", minWidth: 80, sortable: false },
+
+        { prop: "userId", label: "工号", minWidth: 80, sortable: false },
+        { prop: "name", label: "姓名", minWidth: 120, sortable: false },
+        {
+          prop: "sex",
+          label: "性别",
+          minWidth: 80,
+          sortable: false,
+          isSex: true
+        },
+        { prop: "mobile", label: "联系电话", minWidth: 100, sortable: false },
+        {
+          prop: "roleId",
+          label: "角色",
+          minWidth: 80,
+          sortable: false,
+        },
+        {
+          prop: "submitTime",
+          label: "提交时间",
+          type: "text",
+          minWidth: 100,
+        },
+        {
+          prop: "approveTime",
+          label: "审核时间",
+          type: "text",
+          minWidth: 100,
+        },
+        {
+          prop: "approveBy",
+          label: "审核人",
+          type: "text",
+          minWidth: 100,
+        },
+        {
+          prop: "status",
+          label: "状态",
+          minWidth: 120,
+          sortable: false,
+          isStatus: true
+        },
+      ],
+      dialogTitle: "",
+      dialogVisible: false, // 新增编辑界面是否显示
+      departmentList: [], // 选中公司的所有部门的集合
+      deptInfo: {}, //选中机构的基本信息
+      option: [], //机构列表
+      //影像资料
+      dataForm: {
+        SFZ_01: "",
+        SFZ_02: "",
+        Z6Z_00: "",
+        LD_00: "",
+        YP_00: "",
+        DX_00: "",
+      },
+      //影像上传列表
+      imagesIdList: [],
+      searchLeaderOptions: [],
+      leaderOptions: [],
+    };
+  },
+  created() {
+    console.log(this.roles)
+    this.findPage();
+    this.getDictItems("user_status");
+    this.searchLeaderFun();
+  },
+  methods: {
+    searchLeaderFun() {
+      this.$api.user.findHxUserList().then((res) => {
+        this.leaderOptions = res.data;
+      });
+      this.$api.user
+        .findBackListByDeptId({ deptId: this.deptId })
+        .then((res) => {
+          res.data.forEach((e) => {
+            e.value = e.id;
+            e.label = e.name;
+          });
+          this.searchLeaderOptions = [...res.data];
+        });
+        //添加电销负责人
+        this.$api.user.findDxUserList().then((res) => {
+          this.managerOptions = res.data;
+        }); 
+    },
+    // 新增或修改的弹出框Start
+    getDictItems(typeName) {
+      //--数据字典--
+      this.$api.dict
+        .findByLableName(typeName)
+        .then((response) => {
+          this[typeName + "options"] = response.data; // 把获取到的数据赋给this.data
+        })
+        .catch((error) => {
+          this[typeName + "options"] = [];
+        });
+    },
+    handleSubOut() {
+      if (!this.formDataDetail.remark) {
+        this.$message.error("请在详细信息填写驳回原因");
+        return;
+      }
+      this.$refs.formDataDetail.validate((valid) => {
+        if (valid) {
+          this.$api.user
+            .getApprovalNotPass({
+              userId: this.formData.id,
+              reason: this.formDataDetail.remark,
+            })
+            .then((result) => {
+              if (result.code == 200 && result.data) {
+                this.$message({
+                  message: "审核已驳回",
+                  type: "success",
+                });
+                this.findPage();
+                this.closeDialogOut();
+                this.dialogVisible = false;
+              }
+            });
+        }
+      });
+    },
+    closeDialogOut() {
+      this.showRemark = false;
+    },
+    handleDialogBefore(done) {
+      // 退出对话框之前确认提示
+      var that = this;
+      this.$confirm("确认关闭?")
+        .then((_) => {
+          done();
+        })
+        .catch((_) => {});
+    },
+    // 查询Start
+    queryStaffInfo() {
+      this.pageData.realName = this.queryFrom.name;
+      this.pageData.mobile = this.queryFrom.mobile;
+      this.pageData.userId = this.queryFrom.userId;
+      this.pageData.status = this.queryFrom.status;
+      this.isQueryStaff = true
+      this.findPage();
+    },
+    onZTreeClick: function (evt, treeId, treeNode) {
+      // 点击事件
+      this.currentTreeNode = evt;
+      this.pageData.deptId = this.currentTreeNode.id;
+      this.pageData.pageNum = 1;
+      this.findPage();
+      this.formData.deptId = [];
+      this.platform(treeId);
+      this.searchLeaderFun();
+    },
+    platform(array) {
+      if (!array.parent) {
+        return;
+      }
+      this.formData.deptId.unshift(array.data.id);
+      this.platform(array.parent);
+    },
+
+    // 右侧列表的方法Start
+    findPage(data) {
+      // 获取分页数据
+      if (data && data.pageRequest) {
+        this.pageData.pageNum = data.pageRequest.pageNum;
+        this.pageData.pageSize = data.pageRequest.pageSize;
+      }
+      if (this.isQueryStaff) {
+        this.pageData.pageNum = 1
+      }
+      this.isQueryStaff = false
+      let dto = {
+        deptId: this.pageData.deptId,
+        mobile: this.pageData.mobile,
+        name: this.pageData.realName,
+        userId: this.pageData.userId,
+        status: this.pageData.status,
+        leaderName: this.queryFrom.leaderId,
+        agentFlag: "3",
+        roleId: "72",
+      };
+      this.$api.user
+        .findUserList({
+          dto,
+          pageNum: this.pageData.pageNum,
+          pageSize: this.pageData.pageSize,
+        })
+        .then((res) => {
+          res.data.records.forEach((val) => {
+            if (val.sex && val.sex !== "" && val.sex !== null) {
+              val.sex = this.sexoptions.find(
+                (ele) => ele.value == val.sex
+              ).label;
+            }
+            if (val.status && val.status !== "" && val.status !== null) {
+              val.status = this.user_statusoptions.find(
+                (ele) => ele.value == val.status
+              ).label;
+            }
+            val.roleId = val.roleName;
+          });
+          let datas = {
+            content: res.data.records,
+            pageNum: res.data.current,
+            pageSize: res.data.size,
+            totalPages: res.data.pages,
+            totalSize: res.data.total,
+          };
+          this.pageResult = datas;
+        });
+    },
+    closeDialog() {
+      this.$refs["formData"].resetFields();
+      for (let key in this.formData) {
+        this.formData[key] = "";
+      }
+      this.dialogVisible = false;
+      this.activeName = '1'
+    },
+    // 下一步
+    nextStep(num) {
+      this.$refs.formData.validate((valid) => {
+        if (valid) {
+          this.activeName = num;
+        }
+      });
+    },
+    handleTableEdit1(params) {
+      this.dataForm = {
+        SFZ_01: "",
+        SFZ_02: "",
+        Z6Z_00: "",
+        LD_00: "",
+        YP_00: "",
+        DX_00: "",
+        LZ_01: "",
+      };
+      this.$api.user.getUserDatail(params.row.userId).then((res) => {
+        if (res.code == 200) {
+          this.formData = res.data.sysUser;
+          res.data.sysUser.status += "";
+          if (res.data.esmUserImageVo.length > 0) {
+            res.data.esmUserImageVo.forEach((item) => {
+              item.path = process.env.BASE_URL + item.path;
+              this.dataForm[item.type] = item.path;
+            });
+          }
+          this.formDataDetail = res.data.sysUserInfo
+            ? res.data.sysUserInfo
+            : {};
+        }
+      });
+      this.dialogTitle = "详情";
+      this.dialogVisible = true;
+    },
+    handleTableEdit(params) {
+      this.dataForm = {
+        SFZ_01: "",
+        SFZ_02: "",
+        Z6Z_00: "",
+        LD_00: "",
+        YP_00: "",
+        DX_00: "",
+      };
+      this.$api.user.getUserDatail(params.row.userId).then((res) => {
+        if (res.code == 200) {
+          res.data.sysUser.status += "";
+          this.formData = res.data.sysUser;
+          if (res.data.esmUserImageVo.length > 0) {
+            res.data.esmUserImageVo.forEach((item) => {
+              item.path = process.env.BASE_URL + item.path;
+              this.dataForm[item.type] = item.path;
+            });
+          }
+          this.formDataDetail = res.data.sysUserInfo
+            ? res.data.sysUserInfo
+            : {};
+        }
+        this.dialogTitle = "审核电销负责人";
+        this.dialogVisible = true;
+      });
+    },
+    //联级选择器触发事件
+    handleChange(val) {
+      if (val.length !== 0) {
+        this.formData.deptId = val.at(-1);
+      }
+    },
+    submitForm(type) {
+      if (type == 1) {
+        this.$api.user.getApprovalPass(this.formData.id).then((result) => {
+          if (result.code == 200 && result.data) {
+            this.$message({
+              message: "审核已通过",
+              type: "success",
+            });
+            this.findPage();
+            this.dialogVisible = false;
+          }
+        });
+      } else {
+        this.showRemark = true;
+        return;
+        if (!this.formDataDetail.remark) {
+          this.$message.error("请在详细信息填写驳回原因");
+          return;
+        }
+        this.$refs.formDataDetail.validate((valid) => {
+          if (valid) {
+            this.$api.user
+              .getApprovalNotPass({
+                userId: this.formData.id,
+                reason: this.formDataDetail.remark,
+              })
+              .then((result) => {
+                if (result.code == 200 && result.data) {
+                  this.$message({
+                    message: "审核已驳回",
+                    type: "success",
+                  });
+                  this.findPage();
+                  this.dialogVisible = false;
+                }
+              });
+          }
+        });
+      }
+    },
+  },
+};
+</script>
+
+<style scoped>
+.el-divider--horizontal {
+  margin: 4px 0;
+}
+
+/* 顶部查询条件样式Start */
+.queryFrom .el-row {
+  margin: 10px 0px;
+}
+
+.queryFrom .el-form-item {
+  margin-bottom: 0px;
+}
+
+.queryFrom .queryButton .el-form-item__content {
+  margin-left: 0px !important;
+}
+</style>
+
+<style lang="scss" scoped>
+
+>>> .el-tabs__item:hover {
+  // color: #2d4d89;
+}
+>>> .el-tabs__item.is-active {
+  color: #fff;
+  // background: #2d4d89;
+  transition: all ease 0.5s;
+}
+>>> .el-tabs__active-bar {
+  // background-color: #2d4d89;
+}
+>>> .el-tabs__item.is-top:nth-child(2) {
+  padding-left: 20px !important;
+}
+>>> .el-tabs--top .el-tabs__item.is-top:last-child {
+  padding-right: 20px !important;
+}
+
+.el-tabs {
+  >>> .el-input__inner:focus,
+  >>> .el-select .el-input.is-focus .el-input__inner {
+    border-color: #D42426;
+  }
+  .el-button--primary,
+  .el-button--primary:focus {
+    background-color: #D42426;
+    border-color: #D42426;
+  }
+}
+.select-prop {
+  .el-select-dropdown__item.selected,
+  .el-date-table td.available:hover {
+    color: #D42426;
+  }
+  .el-date-table td.current:not(.disabled) span {
+    background-color: #D42426;
+  }
+}
+</style>
+<style lang="scss" scoped>
+.people-style {
+  // max-height: 500px;
+  .footerHandle{
+    // border-radius: 6px;
+    border-top: 1px solid #f2f2f2;
+    margin-top: 0 !important;
+    .el-button{
+      width: 90px;
+      height: 36px;
+      font-size: 16px;
+      margin-left: 24px;
+      font-weight: 310;
+    }
+    .el-button--danger:focus, .el-button--danger:hover{
+      color: #fff;
+    }
+  }
+  .peopleImage{
+    padding: 0 !important;
+    margin: 0 0 0 6px !important;
+  }
+  .closeBtn{
+    background: #fff !important;
+  }
+  .el-col{
+    width: calc(33.3333% - 20px);
+    margin-right: 20px;
+  }
+  .personnelInformation{
+    padding: 0 !important;
+    margin: 0 0 0 20px !important;
+    max-height: 470px;
+    .el-form-item{
+      width: 100%;
+      margin-bottom: 20px;
+      margin-right: 0px;
+      >>>.el-form-item__label{
+        font-size: 14px;
+        line-height: 16px;
+        color: #262626;
+        padding-bottom: 10px;
+      }
+      >>>.el-input__inner{
+      padding-left: 10px !important;
+      font-size: 14px;
+      font-weight: 500;
+      color: #333;
+      font-family: PingFang SC, PingFang SC;
+      border: 1px solid #eee;
+      &::placeholder{
+        color: #999999;
+        font-weight: 300;
+      }
+    }
+    >>>.el-textarea__inner{
+      padding: 10px;
+      border: 1px solid #eeeeee;
+      font-weight: 500;
+      font-size: 14px;
+      color: #333;
+      font-family: PingFang SC, PingFang SC;
+      &::placeholder{
+        color: #999999;
+        font-weight: 300;
+      }
+    }
+    >>>.el-input.is-disabled{
+      .el-input__inner{
+        background: #fff;
+      }
+    }
+    >>>.el-form-item__error{
+      padding-top: 0;
+      margin-top: 8px;
+      font-size: 12px;
+      color: #D42426;
+      position: relative;
+    }
+    }
+  }
+  /deep/ .el-date-editor{
+    position: relative;
+      .el-input__prefix{
+        // color: #D42426;
+        // position: absolute;
+        // right: 5px;
+        // left: auto;
+        // display: none;
+        background-image: url('~@/assets/image/people/rili.svg'); /* 替换为你的新图标路径 */
+        background-size: cover; /* 覆盖整个元素 */
+        background-repeat: no-repeat; /* 不重复背景图片 */
+        height: 15px; /* 根据实际情况调整高度 */
+        width: 17px; /* 根据实际情况调整宽度 */
+        position: absolute;
+        right: 10px;
+        top: 9px;
+        left: auto;
+        .el-icon-date::before{
+          content: '';
+        }
+      }
+      .el-input__suffix{
+        position: absolute;
+        right: 25px;
+      }
+  }
+  /deep/ .el-dialog {
+    border-radius: 6px;
+    .el-dialog__header{
+      height: 50px;
+      line-height: 50px;
+      padding: 0;
+      text-align: center;
+      border-top-left-radius: 6px;
+      border-top-right-radius: 6px;
+      .el-dialog__title{
+        color: #333;
+        font-weight: 500;
+      }
+    }
+    .el-dialog__body{
+      background: #fff;
+      border-radius: 6px;
+    }
+  }
+  /deep/ .el-tabs{
+    .el-tabs__header{
+      padding: 20px 0;
+      margin-bottom: 0;
+      .el-tabs__nav{
+        background: #f7f7f7;
+        padding: 0 4px;
+        height: 44px;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+      }
+      .el-tabs__item{
+        width: 120px;
+        height: 36px;
+        line-height: 36px;
+        text-align: center;
+        font-size: 16px;
+        background: #f7f7f7;
+        color: #333;
+        font-weight: 310;
+      }
+      .el-tabs__item.is-active{
+        background: #D42426;
+        color: #fff;
+        border-radius: 2px;
+      }
+      .el-tabs__active-bar{
+        display: none;
+      }
+      .el-tabs__nav{
+        left: 50%;
+        transform: translateX(-50%) !important;
+      }
+    }
+    .el-tabs__content{
+      border-radius: 6px;
+    }
+  }
+}
+</style>

+ 59 - 2
src/views/PeopleManage/Sales/SalesManage.vue

@@ -120,6 +120,7 @@
           <kt-common-table
             permsEdit="sys:team:edit"
             :data="pageResult"
+            :operationWidth="250"
             :columns="columns"
             editButtonName="编辑"
             :showBatchDelete="false"
@@ -131,6 +132,7 @@
             :button9Name="'离司恢复'"
             :button9Status="'离司'"
             @handleButton9="handleRest"
+            :buttonDropdown="dropdownOption"
           >
           </kt-common-table>
         </SplitArea>
@@ -254,6 +256,7 @@
                     style="width: 100%"
                     v-model="formDataDetail.entryTime"
                     type="date"
+                    value-format="yyyy-MM-dd"
                     placeholder="选择日期"
                     popper-class="select-prop"
                   >
@@ -332,6 +335,36 @@
                 </el-form-item>
               </el-col>
             </el-row>
+            <el-row>
+              <el-col :span="8">
+                <el-form-item label="电销管理人" prop="managerName">
+                  <el-select
+                    style="width: 100%"
+                    clearable
+                    filterable
+                    v-model="formData.managerId"
+                    placeholder="请选择"
+                    popper-class="select-prop"
+                  >
+                    <el-option
+                      v-for="val in managerOptions"
+                      :label="val.name"
+                      :value="val.id"
+                      :key="val.id"
+                    ></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="电销管理工号" prop="managerId">
+                  <el-input v-model="formData.managerId" disabled
+                            style="width: 100%"
+                  ></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+              </el-col>
+            </el-row>
           </el-form>
           <div class="footerHandle" style="text-align: right">
             <el-button
@@ -474,6 +507,7 @@
         <el-button @click="closeDialogOut">取消</el-button>
       </span>
     </el-dialog>
+    <personnelHistory ref="personnelHistory" ></personnelHistory>
   </div>
 </template>
 
@@ -484,6 +518,7 @@ import KtCommonTable from "@/views/Core/KtCommonTable.vue"; //表格组件
 import peopleImage from "@/components/PeopleImage/index.vue"; //影像组件
 import {validateSfz} from "../../../utils/validate.js";
 import userDetail from "@/components/UserDetail/index.vue"; // 详情信息
+import personnelHistory from "@/components/PersonnelHistory/index.vue"; //人员修改历史
 import mixa from "../mixin";
 
 const mixin = new mixa({
@@ -496,10 +531,12 @@ export default {
     KtCommonTable,
     userDetail,
     peopleImage,
+    personnelHistory
   },
   mixins: [mixin],
   data() {
     return {
+      managerOptions:[], //电销管理集合
       logoutTime: "", // 离司 离职时间
       logoutImg: "", // 离司 图片
       logoutImgId: "",
@@ -534,6 +571,7 @@ export default {
         name: [{required: true, message: "请填写名称", trigger: "blur"}],
         // password: [{ required: true, message: "请填写密码", trigger: "blur" }],
         status: [{required: true, message: "请选择状态", trigger: "change"}],
+        managerId: [{required: true, message: "请选择电销管理人", trigger: "change"}],
         // roleId: [{ required: true, message: "请填写角色", trigger: "blur" }],
         // identity: [
         //   { required: true, message: "请填写身份证号" },
@@ -630,7 +668,13 @@ export default {
       },
       //影像上传列表
       imagesIdList: [],
-      pdeptId: null
+      pdeptId: null,
+      dropdownOption:[
+        {
+          label:'人员轨迹',
+          click:(row)=>this.checkHistory(row)
+        }
+      ],
     };
   },
   created() {
@@ -740,6 +784,10 @@ export default {
         .then((res) => {
           this.searchLeaderOptions = res.data;
         });
+        //添加电销负责人
+        this.$api.user.findDxUserList().then((res) => {
+        this.managerOptions = res.data;
+      }); 
     },
     managementSourceFormatter(row) {
       switch (row.managementSource) {
@@ -1082,6 +1130,11 @@ export default {
                   (val) => val.id == this.formData.leaderId
                 ).name;
               }
+              if (this.formData.managerId) {
+                this.formData.managerName = this.managerOptions.find(
+                  (val) => val.id == this.formData.managerId
+                ).name;
+              }
               if (this.dialogTitle == "新增电销负责人") {
                 this.$api.user
                   .saveUserInfo({
@@ -1138,7 +1191,11 @@ export default {
         });
       }, 200);
     },
-
+    //查看人员修改记录
+    async checkHistory(row){
+      let userId = row.userId;
+      this.$refs.personnelHistory.getHistory(userId);
+    }
   },
 };
 </script>

+ 1482 - 0
src/views/PeopleManage/Sales/SalesManageGroup.vue

@@ -0,0 +1,1482 @@
+<template>
+  <div>
+    <el-main ref="elMain" style="padding: 0px">
+      <Split :gutterSize="2" style="height: calc(100vh - 120px)">
+        <!-- 左侧树Start -->
+        <SplitArea :size="leftSplitWidth" :minSize="240">
+          <div>
+            <div>
+              <kt-button
+                style="background-color: #ffc000; border: #ffc000"
+                icon="fa fa-plus"
+                label="添加人员"
+                type="primary"
+                perms="sys:team:add"
+                @click="handleAddButton"
+              />
+            </div>
+            <el-divider></el-divider>
+            <!-- 左侧树形结构 -->
+            <el-tree
+              :data="ztreeNodes"
+              :props="{ children: 'children', label: 'name' }"
+              node-key="id"
+              :default-expanded-keys="['9']"
+              @node-click="onZTreeClick"
+            ></el-tree>
+          </div>
+        </SplitArea>
+        <!-- 左侧树End -->
+
+        <!-- 右侧列表页面Start -->
+        <SplitArea :size="rightSplitWidth">
+          <!-- 筛选区域Start -->
+          <el-row class="queryFrom">
+            <el-form ref="queryFormRef" :model="pageData" label-width="80px">
+              <el-row>
+                <el-col :span="5">
+                  <el-form-item label="工号">
+                    <el-input
+                      clearable
+                      size="small"
+                      placeholder="工号"
+                      v-model="pageData.userId"
+                    ></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5">
+                  <el-form-item label="姓名">
+                    <el-input
+                      clearable
+                      size="small"
+                      placeholder="姓名"
+                      v-model="pageData.name"
+                    ></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5">
+                  <el-form-item label="手机号">
+                    <el-input
+                      clearable
+                      size="small"
+                      placeholder="手机号"
+                      v-model="pageData.mobile"
+                    ></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5">
+                  <el-form-item label="状态">
+                    <el-select
+                      style="width: 200px"
+                      size="small"
+                      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-option>
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="4">
+                  <el-form-item label="">
+                    <el-button
+                      size="small"
+                      type="primary"
+                      @click="queryStaffInfo"
+                    >查询
+                    </el-button
+                    >
+                  </el-form-item>
+                </el-col>
+              </el-row>
+            </el-form>
+          </el-row>
+
+          <kt-common-table
+            permsEdit="sys:team:edit"
+            :data="pageResult"
+            :operationWidth="250"
+            :columns="columns"
+            editButtonName="编辑"
+            :showBatchDelete="false"
+            @findPage="findPage"
+            @handleEdit="handleTableEdit"
+            :button7Name="'离司'"
+            :button7Status="'在职'"
+            @handleButton7="handleButton7"
+            :button9Name="'离司恢复'"
+            :button9Status="'离司'"
+            @handleButton9="handleRest"
+            :buttonDropdown="dropdownOption"
+          >
+          </kt-common-table>
+        </SplitArea>
+        <!-- 右侧列表页面End -->
+      </Split>
+    </el-main>
+
+    <!-- 新增修改界面 -->
+
+    <el-dialog
+      :title="dialogTitle"
+      width="60%"
+      top="5vh"
+      :visible.sync="dialogVisible"
+      :close-on-click-modal="false"
+      :before-close="handleDialogBefore"
+      :show-close="false"
+      @close="closeDialog"
+      v-dialogDrag
+      class="people-style"
+    >
+      <el-tabs v-model="activeName" :before-leave="beforeTabLeave" class="tab-style">
+        <el-tab-pane label="基本信息" name="1">
+          <el-form
+            :model="formData"
+            :rules="formDataRules"
+            ref="formData"
+            :inline="true"
+            @keyup.enter.native="nextStep()"
+            label-width="110px"
+            size="small"
+            label-position="top"
+            class="personnelInformation"
+          >
+            <el-row>
+              <el-col :span="8">
+                <el-form-item label="机构名称">
+                  <el-cascader
+                    style="width: 100%"
+                    :options="ztreeNodes"
+                    v-model="formData.pdeptId"
+                    clearable
+                    disabled
+                    :show-all-levels="false"
+                    :props="{
+                      value: 'id',
+                      label: 'name',
+                      checkStrictly: true,
+                    }"
+                    @change="handleChange"
+                  >
+                  </el-cascader>
+                </el-form-item
+                >
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="机构部门" prop="deptId">
+                  <el-cascader
+                    style="width: 100%"
+                    :options="ztreeNodes"
+                    v-model="formData.deptId"
+                    clearable
+                    disabled
+                    :show-all-levels="false"
+                    :props="{
+                      value: 'id',
+                      label: 'name',
+                      checkStrictly: true,
+                    }"
+                    @change="handleChange"
+                  >
+                  </el-cascader>
+                </el-form-item
+                >
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="岗位" prop="positionId">
+                  <el-select
+                    style="width: 100%"
+                    v-model="formData.positionId"
+                    placeholder="请选择"
+                    popper-class="select-prop"
+                  >
+                    <el-option
+                      v-for="val in postOption"
+                      :label="val.postName"
+                      :value="val.postId"
+                      :key="val.postId"
+                    ></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="8">
+                <el-form-item label="工号" prop="id">
+                  <el-input v-model="formData.id" disabled
+                            style="width: 100%"
+                  ></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="姓名" prop="name">
+                  <el-input v-model="formData.name"
+                            style="width: 100%"
+                  ></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="手机号" prop="mobile">
+                  <el-input v-model="formData.mobile"
+                            style="width: 100%"
+                  ></el-input>
+                </el-form-item>
+              </el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="8">
+                <el-form-item label="入司时间">
+                  <el-date-picker
+                    style="width: 100%"
+                    v-model="formDataDetail.entryTime"
+                    type="date"
+                    value-format="yyyy-MM-dd"
+                    placeholder="选择日期"
+                    popper-class="select-prop"
+                  >
+                  </el-date-picker>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="状态" prop="status">
+                  <el-select
+                    disabled
+                    style="width: 100%"
+                    @change="statusChange"
+                    v-model="formData.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="8">
+                <el-form-item label="角色" prop="roleId">
+                  <el-select
+                    style="width: 100%"
+                    v-model="formData.roleId"
+                    placeholder="请选择"
+                    disabled
+                  >
+                    <el-option
+                      v-for="val in roles"
+                      :label="val.name"
+                      :value="val.id + ''"
+                      :key="val.id"
+                    ></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="8">
+                <el-form-item label="管理人" prop="leaderId">
+                  <el-select
+                    style="width: 100%"
+                    clearable
+                    filterable
+                    v-model="formData.leaderId"
+                    placeholder="请选择"
+                    popper-class="select-prop"
+                  >
+                    <el-option
+                      v-for="val in leaderOptions"
+                      :label="val.name"
+                      :value="val.id"
+                      :key="val.id"
+                    ></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="管理人工号" prop="leaderName">
+                  <el-input v-model="formData.leaderId" disabled
+                            style="width: 100%"
+                  ></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="代理人资格证号" prop="agentQualificationCode">
+                  <el-input
+                    style="width: 100%"
+                    v-model="formDataDetail.agentQualificationCode"
+                  ></el-input>
+                </el-form-item>
+              </el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="8">
+                <el-form-item label="电销管理人" prop="managerName">
+                  <el-select
+                    style="width: 100%"
+                    clearable
+                    filterable
+                    v-model="formData.managerId"
+                    placeholder="请选择"
+                    popper-class="select-prop"
+                  >
+                    <el-option
+                      v-for="val in managerOptions"
+                      :label="val.name"
+                      :value="val.id"
+                      :key="val.id"
+                    ></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="电销管理工号" prop="managerId">
+                  <el-input v-model="formData.managerId" disabled
+                            style="width: 100%"
+                  ></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+              </el-col>
+            </el-row>
+          </el-form>
+          <div class="footerHandle" style="text-align: right">
+            <el-button
+              size="small"
+              type="primary"
+              style="
+                border: 1px solid #D42426;
+                color: #D42426;
+              "
+              class="closeBtn"
+              @click="closeDialog"
+              >取消</el-button
+            >
+            <el-button size="small" type="primary" @click="nextStep"
+            >下一步
+            </el-button
+            >
+          </div>
+        </el-tab-pane>
+        <el-tab-pane label="详细信息" name="2">
+          <userDetail
+            :formData="formData"
+            :formDataDetail="formDataDetail"
+            ref="formDataDetails"
+            @statusChange="statusChange"
+            @valids="valids"
+            :showThirdParty="true"
+          ></userDetail>
+          <div class="footerHandle" style="text-align: right">
+            <el-button
+              size="small"
+              type="primary"
+              style="
+                border: 1px solid #D42426;
+                color: #D42426;
+              "
+              class="closeBtn"
+              @click="closeDialog"
+              >取消</el-button
+            >
+            <!-- <el-button size="small" type="primary" @click="activeName = '1'"
+            >上一步
+            </el-button
+            > -->
+            <el-button size="small" type="primary" @click="activeName = '3'"
+            >下一步
+            </el-button
+            >
+          </div>
+          <!-- <div style="text-align: right">
+            <el-button
+              size="small"
+              type="primary"
+              style="background-color: #EAEDF1; border: 1px solid #EAEDF1; color: #2D4D89;"
+              @click="closeDialog"
+              >取消</el-button
+            >
+            <el-button size="small" type="primary" @click="activeName = '1'"
+              >上一步</el-button
+            >
+            <el-button size="small" type="primary" @click="submitForm"
+              >提交</el-button
+            >
+          </div> -->
+        </el-tab-pane>
+        <el-tab-pane label="影像资料" name="3">
+          <el-form
+            :model="formDataDetail"
+            ref="formDataDetail"
+            :inline="true"
+            label-width="130px"
+            size="small"
+            class="peopleImage"
+          >
+            <peopleImage
+              :dataForm="dataForm"
+              :imagesIdList="imagesIdList"
+              :dialogVisible="dialogVisible"
+            ></peopleImage>
+          </el-form>
+          <div class="footerHandle" style="text-align: right">
+            <el-button
+              size="small"
+              type="primary"
+              style="
+                border: 1px solid #D42426;
+                color: #D42426;
+              "
+              class="closeBtn"
+              @click="closeDialog"
+              >取消</el-button
+            >
+            <!-- <el-button size="small" type="primary" @click="activeName = '2'"
+            >上一步
+            </el-button
+            > -->
+            <el-button size="small" type="primary" @click="submitForm"
+            >提交
+            </el-button
+            >
+          </div>
+        </el-tab-pane>
+      </el-tabs>
+    </el-dialog>
+
+    <el-dialog
+      title="离司"
+      width="40%"
+      :visible.sync="showOut"
+      @close="closeDialogOut"
+    >
+      <div>
+        <el-form>
+          <el-form-item label="离职时间" prop="logoutTime">
+            <el-date-picker
+              value-format="yyyy-MM-dd"
+              style="width: 200px"
+              v-model="logoutTime"
+              type="date"
+              placeholder="选择日期"
+            ></el-date-picker>
+          </el-form-item>
+          <el-form-item label="离职表:" style="width: 50%">
+            <el-upload
+              class="avatar-uploader"
+              action=""
+              name="LZ_01"
+              :show-file-list="false"
+              :http-request="httpRequest"
+              :before-upload="beforeAvatarUpload"
+            >
+              <img v-if="logoutImg" :src="logoutImg" class="avatar"/>
+              <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+            </el-upload>
+          </el-form-item>
+        </el-form>
+      </div>
+      <span slot="footer">
+        <el-button type="primary" @click="handleSubOut">确定</el-button>
+        <el-button @click="closeDialogOut">取消</el-button>
+      </span>
+    </el-dialog>
+    <personnelHistory ref="personnelHistory" ></personnelHistory>
+  </div>
+</template>
+
+<script>
+import KtButton from "@/views/Core/KtButton"; // 按钮权限组件
+import tree from "@/components/ztree.vue"; // 机构树组件
+import KtCommonTable from "@/views/Core/KtCommonTable.vue"; //表格组件
+import peopleImage from "@/components/PeopleImage/index.vue"; //影像组件
+import {validateSfz} from "../../../utils/validate.js";
+import userDetail from "@/components/UserDetail/index.vue"; // 详情信息
+import personnelHistory from "@/components/PersonnelHistory/index.vue"; //人员修改历史
+import mixa from "../mixin";
+
+const mixin = new mixa({
+  treeTypeNum: 3, //树分类过滤参数
+});
+export default {
+  components: {
+    KtButton,
+    tree,
+    KtCommonTable,
+    userDetail,
+    peopleImage,
+    personnelHistory
+  },
+  mixins: [mixin],
+  data() {
+    return {
+      managerOptions:[], //电销管理集合
+      logoutTime: "", // 离司 离职时间
+      logoutImg: "", // 离司 图片
+      logoutImgId: "",
+      lineId: "",
+      leaderOptions: [],
+      searchLeaderOptions: {},
+      activeName: "1",
+      isShow: true,
+      pageData: {
+        pageNum: 1,
+        pageSize: 20,
+        deptId: JSON.parse(localStorage.getItem("user_data")).deptId,
+        userId: "",
+        realName: "",
+        mobile: "",
+      },
+      formData: {
+        roleId: "72",
+      },
+      formDataRules: {
+        deptId: [{required: true, message: "请选择机构", trigger: "change"}],
+        mobile: [
+          {required: true, message: "请输入手机号", trigger: "blur"},
+          {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}$/,
+            message: "请输入正确的手机号",
+            trigger: "blur",
+          },
+        ],
+        name: [{required: true, message: "请填写名称", trigger: "blur"}],
+        // password: [{ required: true, message: "请填写密码", trigger: "blur" }],
+        status: [{required: true, message: "请选择状态", trigger: "change"}],
+        managerId: [{required: true, message: "请选择电销管理人", trigger: "change"}],
+        // roleId: [{ required: true, message: "请填写角色", trigger: "blur" }],
+        // identity: [
+        //   { required: true, message: "请填写身份证号" },
+        //   { validator: validateSfz },
+        // ],
+      },
+      formDataDetail: {},
+      formDataRulesDetail: {},
+      filterObject: {},
+      peopleid: "",
+      peopledeptid: "",
+      recommenderList: [],
+      teamleadername: "",
+      teamleaderid: "",
+      // 右侧列表查询数据Start
+      queryFrom: {},
+      pageResult: {},
+      columns: [
+        // 数据列
+        {prop: "deptId", label: "部门编码", minWidth: 80, sortable: false},
+        {
+          prop: "pdeptName",
+          label: "机构名称",
+          minWidth: 120,
+          sortable: false,
+        },
+
+        {prop: "deptName", label: "部门名称", minWidth: 80, sortable: false},
+
+        {prop: "userId", label: "工号", minWidth: 80, sortable: false},
+        {prop: "name", label: "姓名", minWidth: 120, sortable: false},
+        {
+          prop: "sex",
+          label: "性别",
+          minWidth: 80,
+          sortable: false,
+          isSex: true
+        },
+        {prop: "mobile", label: "联系电话", minWidth: 100, sortable: false},
+        {
+          prop: "roleId",
+          label: "角色",
+          minWidth: 80,
+          sortable: false,
+        },
+        {
+          prop: "managementSource",
+          label: "来源",
+          minWidth: 80,
+          formatter: this.managementSourceFormatter,
+        },
+        {
+          prop: "submitTime",
+          label: "提交时间",
+          type: "text",
+          minWidth: 100,
+        },
+        {
+          prop: "approveTime",
+          label: "审核时间",
+          type: "text",
+          minWidth: 100,
+        },
+        {
+          prop: "approveBy",
+          label: "审核人",
+          type: "text",
+          minWidth: 100,
+        },
+        {
+          prop: "status",
+          label: "状态",
+          minWidth: 120,
+          sortable: false,
+          isStatus: true
+        },
+      ],
+      dialogTitle: "",
+      dialogVisible: false, // 新增编辑界面是否显示
+      departmentList: [], // 选中公司的所有部门的集合
+      deptInfo: {}, //选中机构的基本信息
+      option: [], //机构列表
+      dialogPassword: false, //密码是否明文
+      showOut: false,
+      //影像资料
+      dataForm: {
+        SFZ_01: "",
+        SFZ_02: "",
+        Z6Z_00: "",
+        LD_00: "",
+        YP_00: "",
+        DX_00: "",
+        LZ_01: "",
+      },
+      //影像上传列表
+      imagesIdList: [],
+      pdeptId: null,
+      dropdownOption:[
+        {
+          label:'人员轨迹',
+          click:(row)=>this.checkHistory(row)
+        }
+      ],
+    };
+  },
+  created() {
+    this.searchLeaderFun();
+    this.getDictItems("user_status");
+
+  },
+  methods: {
+    // 离司恢复
+    handleRest(data) {
+      this.$confirm('是否恢复', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.$api.user.separationReinstatement(data.row.userId).then((res) => {
+          if (res.code == 200) {
+            this.$message({
+              type: 'success',
+              message: res.msg
+            });
+            this.findPage();
+          }
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '已取消'
+        });
+      });
+    },
+    //上传影像
+    httpRequest(options) {
+      let file = options.file;
+      let filename = options.filename;
+      let reader = new FileReader();
+      if (file) {
+        reader.readAsDataURL(file);
+      }
+      reader.onload = () => {
+        let base64Str = reader.result;
+        this.logoutImg = base64Str;
+      };
+      const params = new FormData(); // 声明formData数据类型
+      params.append("multipartFile", file);
+      params.append("type", "personnel");
+      this.$api.letter.uploadFile(params).then((res) => {
+        if (res.code == "200") {
+          this.logoutImgId = res.data.id;
+        }
+      });
+    },
+    // 上传图片的方法Start
+    beforeAvatarUpload(file) {
+      const isJPG = file.type === "image/jpeg" || file.type === "image/png";
+      const isLt2M = file.size / 1024 / 1024 < 2;
+      if (!isJPG) {
+        this.$message.error("上传图片只能是 JPG 或者 PNG 格式!");
+      }
+      if (!isLt2M) {
+        this.$message.error("上传图片大小不能超过 2MB!");
+      }
+      return isJPG && isLt2M;
+    },
+    handleSubOut() {
+      if (this.logoutTime == "") {
+        this.$message.error("请选择时间");
+        return;
+      }
+      if (this.logoutImgId == "") {
+        this.$message.error("请上传离职表");
+        return;
+      }
+      let subData = {
+        esmUserImageVo: [
+          {
+            imageId: this.logoutImgId,
+            type: "LZ_01",
+          },
+        ],
+        sysUser: {id: this.lineId, logoutTime: this.logoutTime},
+        sysUserInfo: {},
+      };
+      this.$api.user.departApply(subData).then((res) => {
+        if (res.code == 200) {
+          this.$message.success(res.msg);
+          this.findPage();
+          this.closeDialogOut();
+        } else {
+          this.$message.error(res.msg);
+        }
+      });
+    },
+    closeDialogOut() {
+      this.showOut = false;
+    },
+    handleButton7(data) {
+      this.lineId = data.row.userId;
+      this.showOut = true;
+    },
+    searchLeaderFun() {
+      this.$api.user.findHxUserList().then((res) => {
+        this.leaderOptions = res.data;
+      });
+      this.$api.user
+        .findBackListByDeptId({deptId: this.deptId})
+        .then((res) => {
+          this.searchLeaderOptions = res.data;
+        });
+        //添加电销负责人
+        this.$api.user.findDxUserList().then((res) => {
+        this.managerOptions = res.data;
+      }); 
+    },
+    managementSourceFormatter(row) {
+      switch (row.managementSource) {
+        case "1":
+          return "渠道";
+        case "2":
+          return "个代"
+        case "3":
+          return "电销"
+      }
+    },
+    //状态改变时
+    statusChange(e) {
+      if (e == 0) {
+        this.$set(this.formDataRules, "logoutTime", [
+          {required: true, message: "请选择日期", trigger: "change"},
+        ]);
+      } else {
+        this.formDataRules.logoutTime = undefined;
+      }
+    },
+    // 查询Start
+    queryStaffInfo() {
+      this.pageData.pageNum = 1
+      this.findPage();
+    },
+    sexFormatter(row) {
+      // return this.sexoptions[row.sex]
+      // return row.sex+'1'
+      // console.log(val,1)
+    },
+    onZTreeClick: function (evt, treeId, treeNode) {
+      // 点击事件
+      this.currentTreeNode = evt;
+      this.deptId = this.currentTreeNode.id;
+      this.pdeptId = this.currentTreeNode.parentId;
+      this.pageData.pageNum = 1;
+      this.findPage();
+      this.searchLeaderFun();
+      // this.formData.deptId = [];
+      // this.platform(treeId);
+    },
+    //联级选择器触发事件
+    handleChange(val) {
+      if (val && val.length !== 0) {
+        this.formData.leaderId = "";
+        this.formData.deptId = val.at(-1);
+        // console.log( this.formData.deptId,val,222222222);
+        this.$api.user
+          .findListByDeptId({deptId: this.formData.deptId})
+          .then((res) => {
+            this.leaderOptions = res.data;
+          });
+      }
+    },
+    isShowFun() {
+      this.isShow = !this.isShow;
+    },
+    identityChange(iden) {
+      let sex = null;
+      let birth = null;
+      let myDate = new Date();
+      let month = myDate.getMonth() + 1;
+      let day = myDate.getDate();
+      sex = iden.substring(16, 17);
+      birth =
+        iden.substring(6, 10) +
+        "-" +
+        iden.substring(10, 12) +
+        "-" +
+        iden.substring(12, 14);
+      let age = 0;
+      if (
+        iden.substring(10, 12) < month ||
+        (iden.substring(10, 12) == month && iden.substring(12, 14) <= day)
+      )
+        age++;
+      if (sex % 2 === 0) sex = "女";
+      else sex = "男";
+      this.formDataDetail.birthday = birth;
+      this.formDataDetail.sex = this.sexoptions.find(
+        (val) => sex == val.label
+      ).value;
+    },
+    // 右侧列表的方法Start
+    findPage(data) {
+      // 获取分页数据
+      if (data && data.pageRequest) {
+        this.pageData.pageNum = data.pageRequest.pageNum;
+        this.pageData.pageSize = data.pageRequest.pageSize;
+      }
+      let dto = {
+        deptId: this.deptId,
+        mobile: this.pageData.mobile,
+        name: this.pageData.name,
+        userId: this.pageData.userId,
+        status: this.pageData.status,
+        leaderName: this.pageData.leaderId,
+        roleId: "72",
+        agentFlag: "3",
+      };
+      this.$api.user
+        .findUserList({
+          dto,
+          pageNum: this.pageData.pageNum,
+          pageSize: this.pageData.pageSize,
+        })
+        .then((res) => {
+          res.data.records.forEach((val) => {
+            if (val.sex && val.sex !== "" && val.sex !== null) {
+              val.sex = this.sexoptions.find(
+                (ele) => ele.value == val.sex
+              ).label;
+            }
+            if (val.status && val.status !== "" && val.status !== null) {
+              val.status = this.user_statusoptions.find(
+                (ele) => ele.value == val.status
+              ).label;
+            }
+            val.roleId = val.roleName;
+          });
+          this.pageResult = {
+            content: res.data.records,
+            pageNum: res.data.current,
+            pageSize: res.data.size,
+            totalPages: res.data.pages,
+            totalSize: res.data.total,
+          };
+          this.pageData.pageNum = res.data.current;
+          this.pageData.pageSize = res.data.size;
+          this.pageData.totalSize = res.data.total;
+        });
+    },
+    beforeTabLeave() {
+      // let p = new Promise((resolve, reject) => {
+      //   this.$refs.formData.validate(async (valid) => {
+      //     valid ? resolve() : reject();
+      //     if (valid !== resolve()) {
+      //       // this.$message.error("请完善基本信息!");
+      //     }
+      //   });
+      // });
+      // return p;
+    },
+    // 下一步
+    nextStep() {
+      this.$refs.formData.validate((valid) => {
+        if (valid) {
+          this.activeName = "2";
+          // this.formData.deptIdCom= this.formData.deptId
+          // this.formData.deptId =  this.formData.deptId.at(-1);
+          // if (this.formData.referrerId) {
+          //   this.formData.referrerName = this.recommenderOptions.find(val => this.formData.referrerId == val.id).name
+          // }
+          // this.$api.user.saveOrUpdate(this.formData).then((res) => {
+          //   if (res.code == 200) {
+          //   this.activeName='2'
+          //   this.basicInformation=res.data
+          //   } else {
+          //     this.$message({
+          //       message: `操作失败,请重新添加,(${res.msg})`,
+          //       type: "error",
+          //     });
+          //   }
+          // });
+        }
+      });
+    },
+    async handleTableEdit(params) {
+      this.dataForm = {
+        SFZ_01: "",
+        SFZ_02: "",
+        Z6Z_00: "",
+        LD_00: "",
+        YP_00: "",
+        DX_00: "",
+        LZ_01: "",
+      };
+      this.imagesIdList = [];
+
+      this.activeName = "1";
+      let res = await this.$api.user.getUserDatail(params.row.userId);
+      if (res.code == 200) {
+        // this.$api.user
+        //   // .findListByDeptId({ deptId: res.data.sysUser.deptId, id: params.row.userId })
+        //   .findBackUserList1({ agentFlag: 0 })
+        //   .then((res) => {
+        //     this.leaderOptions = res.data;
+        //   });
+        res.data.sysUser.status += "";
+        this.formData = res.data.sysUser;
+        if (this.formData.status == 0) {
+          this.$set(this.formDataRules, "logoutTime", [
+            {required: true, message: "请选择日期", trigger: "change"},
+          ]);
+        } else {
+          this.formDataRules.logoutTime = undefined;
+        }
+        if (res.data.esmUserImageVo.length > 0) {
+          this.imagesIdList = res.data.esmUserImageVo.map((item) => {
+            item.path = process.env.BASE_URL + item.path;
+            this.dataForm[item.type] = item.path;
+            return {
+              imageId: item.imageId,
+              type: item.type,
+            };
+          });
+        }
+        this.formDataDetail = res.data.sysUserInfo ? res.data.sysUserInfo : {};
+        this.dialogTitle = "编辑电销负责人";
+        this.dialogVisible = true;
+        this.dialogPassword = false;
+        this.formData.referrerId = "";
+        this.formData.referrerName = "";
+      } else {
+        this.$message.error(res.msg);
+      }
+    },
+    // 删除单个人员
+    handleTableDeleteFlag(data) {
+      this.$confirm("确认删除?")
+        .then(() => {
+          this.$api.user.getDeleteBatch([data.row.userId]).then((res) => {
+            if (res.code == 200) {
+              this.$message({
+                message: "删除成功",
+                type: "success",
+              });
+              this.findPage();
+            }
+          });
+        })
+        .catch(() => {
+        });
+    },
+    //添加人员
+    handleAddButton() {
+      if (this.currentTreeNode == null) {
+        this.$message.info("请选择所属公司或部门");
+        return;
+      }
+      if (
+        this.currentTreeNode.comlevel != null ||
+        this.currentTreeNode.managementSource != 3
+      ) {
+        //团队代理人managementSource为2  渠道为1  后线为空
+        this.$message.info("请选择第六级机构");
+        return;
+      }
+
+      // let deptId=''
+      // if(this.formData.deptId){
+      //    deptId = this.formData.deptId.at(-1);
+      // }
+      this.formData = {
+        roleId: "72",
+        status: "2",
+        deptId: this.deptId,
+        pdeptId: this.pdeptId
+      };
+      this.formDataDetail = {};
+      this.activeName = "1";
+      this.dialogTitle = "新增电销负责人";
+      this.dialogVisible = true;
+      this.dialogPassword = true;
+      // this.$api.user.findListByDeptId({ deptId: this.deptId }).then((res) => {
+      //   this.leaderOptions = res.data.map((val) => {
+      //     return {
+      //       userId: val.id,
+      //       name: val.name,
+      //     };
+      //   });
+      // });
+    },
+    // 新增或修改的弹出框Start
+    getDictItems(typeName) {
+      //--数据字典--
+      this.$api.dict
+        .findByLableName(typeName)
+        .then((response) => {
+          this[typeName + "options"] = response.data; // 把获取到的数据赋给this.data
+        })
+        .catch((error) => {
+          this[typeName + "options"] = [];
+        });
+    },
+    handleDialogBefore(done) {
+      // 退出对话框之前确认提示
+      var that = this;
+      this.$confirm("确认关闭?")
+        .then((_) => {
+          done();
+        })
+        .catch((_) => {
+        });
+    },
+    closeDialog() {
+      // 清空数据
+      this.deptInfo = {};
+      // this.$refs["formData"].resetFields();
+      // for (let key in this.formData) {
+      //   this.formData[key] = "";
+      // }
+      // this.formData={
+      //   roleId:'21',
+      //   id:'',
+      //   mobile:'',
+      //   email:'',
+      //   name:'',
+      //   password:'',
+      //   sex:'',
+      //   status:''
+      // }
+      this.dialogVisible = false;
+    },
+    valids(data) {
+      this.detailValid = data
+    },
+    // 提交
+    submitForm() {
+      this.$refs.formDataDetails.submit()
+      setTimeout(() => {
+        this.$refs.formData.validate((valid) => {
+          if (valid && this.detailValid) {
+            this.$confirm("确认提交吗?", "提示", {}).then(() => {
+              // if(!this.basicInformation.id && this.dialogTitle =="新增代理人"){
+              //   this.$message({
+              //     message: '请先填写基本信息!!!',
+              //     type: 'warning'
+              //   });
+              //   return false
+              // }
+              if (this.formData.positionId) {
+                this.formData.positionName = this.postOption.find(
+                  (val) => val.postId == this.formData.positionId
+                ).postName;
+              }
+              if (this.formData.leaderId) {
+                this.formData.leaderName = this.leaderOptions.find(
+                  (val) => val.id == this.formData.leaderId
+                ).name;
+              }
+              if (this.formData.managerId) {
+                this.formData.managerName = this.managerOptions.find(
+                  (val) => val.id == this.formData.managerId
+                ).name;
+              }
+              if (this.dialogTitle == "新增电销负责人") {
+                this.$api.user
+                  .saveUserInfo({
+                    esmUserImageVo: this.imagesIdList,
+                    sysUser: this.formData,
+                    sysUserInfo: this.formDataDetail,
+                  })
+                  .then((res) => {
+                    if (res.code == 200) {
+                      this.$message({
+                        message: "保存成功",
+                        type: "success",
+                      });
+                      this.dialogVisible = false;
+                      this.$refs["formData"].resetFields();
+                      this.$refs["formDataDetail"].resetFields();
+                      this.findPage();
+                    } else {
+                      this.$message({
+                        message: `保存失败,请重新添加,(${res.msg})`,
+                        type: "error",
+                      });
+                    }
+                  });
+              } else {
+                this.$api.user
+                  .updateUserInfo(this.formData.id, {
+                    esmUserImageVo: this.imagesIdList,
+                    sysUser: this.formData,
+                    sysUserInfo: this.formDataDetail,
+                  })
+                  .then((res) => {
+                    if (res.code == 200) {
+                      this.$message({
+                        message: "编辑成功",
+                        type: "success",
+                      });
+                      this.dialogVisible = false;
+                      this.$refs["formData"].resetFields();
+                      this.$refs["formDataDetail"].resetFields();
+                      this.findPage();
+                    } else {
+                      this.$message({
+                        message: `编辑失败,请重新添加,(${res.msg})`,
+                        type: "error",
+                      });
+                    }
+                  });
+              }
+            });
+          } else {
+            this.$message.error('请填写全部信息')
+          }
+        });
+      }, 200);
+    },
+    //查看人员修改记录
+    async checkHistory(row){
+      let userId = row.userId;
+      this.$refs.personnelHistory.getHistory(userId);
+    }
+  },
+};
+</script>
+
+<style scoped>
+.el-divider--horizontal {
+  margin: 4px 0;
+}
+
+/* 顶部查询条件样式Start */
+.queryFrom .el-row {
+  margin: 10px 0px;
+}
+
+.queryFrom .el-form-item {
+  margin-bottom: 0px;
+}
+
+.queryFrom .queryButton .el-form-item__content {
+  margin-left: 0px !important;
+}
+
+.disc {
+  -webkit-text-security: disc;
+  position: relative;
+}
+
+.none {
+  -webkit-text-security: none;
+  position: relative;
+}
+
+.icon {
+  color: #ccc;
+  position: absolute;
+  right: 0;
+  top: 10px;
+  text-align: center;
+}
+
+.avatar-uploader .el-upload {
+  border: 1px dashed #d9d9d9;
+  border-radius: 6px;
+  cursor: pointer;
+  position: relative;
+  overflow: hidden;
+}
+
+.avatar-uploader .el-upload:hover {
+  border-color: #409eff;
+}
+
+.avatar-uploader-icon {
+  font-size: 28px;
+  color: #8c939d;
+  width: 100px;
+  height: 100px;
+  line-height: 100px;
+  text-align: center;
+  border: 1px dashed #d9d9d9;
+}
+
+.avatar {
+  border: 1px dashed #d9d9d9;
+  padding: 5px;
+  border-radius: 6px;
+  width: 100px;
+  height: 100px;
+  display: block;
+}
+</style>
+
+<style lang="scss" scoped>
+>>> .el-tabs__item:hover {
+  // color: #2d4d89;
+}
+
+>>> .el-tabs__item.is-active {
+  color: #fff;
+  // background: #2d4d89;
+  transition: all ease 0.5s;
+}
+
+>>> .el-tabs__active-bar {
+  // background-color: #2d4d89;
+}
+
+>>> .el-tabs__item.is-top:nth-child(2) {
+  padding-left: 20px !important;
+}
+
+>>> .el-tabs--top .el-tabs__item.is-top:last-child {
+  padding-right: 20px !important;
+}
+
+.el-tabs {
+  >>> .el-input__inner:focus,
+  >>> .el-select .el-input.is-focus .el-input__inner {
+    border-color: #D42426;
+  }
+
+  .el-button--primary,
+  .el-button--primary:focus {
+    background-color: #D42426;
+    border-color: #D42426;
+  }
+}
+
+.select-prop {
+  .el-select-dropdown__item.selected,
+  .el-date-table td.available:hover {
+    color: #D42426;
+  }
+
+  .el-date-table td.current:not(.disabled) span {
+    background-color: #D42426;
+  }
+}
+</style>
+
+<style lang="scss" scoped>
+.people-style {
+  // max-height: 500px;
+  .footerHandle{
+    // border-radius: 6px;
+    border-top: 1px solid #f2f2f2;
+    margin-top: 0 !important;
+    .el-button{
+      width: 90px;
+      height: 36px;
+      font-size: 16px;
+      margin-left: 24px;
+      font-weight: 310;
+    }
+  }
+  .peopleImage{
+    padding: 0 !important;
+    margin: 0 0 0 6px !important;
+  }
+  .closeBtn{
+    background: #fff !important;
+  }
+  .el-col{
+    width: calc(33.3333% - 20px);
+    margin-right: 20px;
+  }
+  .personnelInformation{
+    padding: 0 !important;
+    margin: 0 0 0 20px !important;
+    max-height: 470px;
+    .el-form-item{
+      width: 100%;
+      margin-bottom: 20px;
+      margin-right: 0px;
+      >>>.el-form-item__label{
+        font-size: 14px;
+        line-height: 16px;
+        color: #262626;
+        padding-bottom: 10px;
+      }
+      >>>.el-input__inner{
+      padding-left: 10px !important;
+      font-size: 14px;
+      font-weight: 500;
+      color: #333;
+      font-family: PingFang SC, PingFang SC;
+      border: 1px solid #eee;
+      &::placeholder{
+        color: #999999;
+        font-weight: 300;
+      }
+    }
+    >>>.el-textarea__inner{
+      padding: 10px;
+      border: 1px solid #eeeeee;
+      font-weight: 500;
+      font-size: 14px;
+      color: #333;
+      font-family: PingFang SC, PingFang SC;
+      &::placeholder{
+        color: #999999;
+        font-weight: 300;
+      }
+    }
+    >>>.el-input.is-disabled{
+      .el-input__inner{
+        background: #fff;
+      }
+    }
+    >>>.el-form-item__error{
+      padding-top: 0;
+      margin-top: 8px;
+      font-size: 12px;
+      color: #D42426;
+      position: relative;
+    }
+    }
+  }
+  /deep/ .el-date-editor{
+    position: relative;
+      .el-input__prefix{
+        // color: #D42426;
+        // position: absolute;
+        // right: 5px;
+        // left: auto;
+        // display: none;
+        background-image: url('~@/assets/image/people/rili.svg'); /* 替换为你的新图标路径 */
+        background-size: cover; /* 覆盖整个元素 */
+        background-repeat: no-repeat; /* 不重复背景图片 */
+        height: 15px; /* 根据实际情况调整高度 */
+        width: 17px; /* 根据实际情况调整宽度 */
+        position: absolute;
+        right: 10px;
+        top: 9px;
+        left: auto;
+        .el-icon-date::before{
+          content: '';
+        }
+      }
+      .el-input__suffix{
+        position: absolute;
+        right: 25px;
+      }
+  }
+  /deep/ .el-dialog {
+    border-radius: 6px;
+    .el-dialog__header{
+      height: 50px;
+      line-height: 50px;
+      padding: 0;
+      text-align: center;
+      border-top-left-radius: 6px;
+      border-top-right-radius: 6px;
+      .el-dialog__title{
+        color: #333;
+        font-weight: 500;
+      }
+    }
+    .el-dialog__body{
+      background: #fff;
+      border-radius: 6px;
+    }
+  }
+  /deep/ .el-tabs{
+    .el-tabs__header{
+      padding: 20px 0;
+      margin-bottom: 0;
+      .el-tabs__nav{
+        background: #f7f7f7;
+        padding: 0 4px;
+        height: 44px;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+      }
+      .el-tabs__item{
+        width: 120px;
+        height: 36px;
+        line-height: 36px;
+        text-align: center;
+        font-size: 16px;
+        background: #f7f7f7;
+        color: #333;
+        font-weight: 310;
+      }
+      .el-tabs__item.is-active{
+        background: #D42426;
+        color: #fff;
+        border-radius: 2px;
+      }
+      .el-tabs__active-bar{
+        display: none;
+      }
+      .el-tabs__nav{
+        left: 50%;
+        transform: translateX(-50%) !important;
+      }
+    }
+    .el-tabs__content{
+      border-radius: 6px;
+    }
+  }
+}
+</style>

+ 21 - 1
src/views/PeopleManage/Staff/StaffManage.vue

@@ -123,6 +123,7 @@
           <kt-common-table
             ref="ktcommonTable"
             permsEdit="sys:backline:edit"
+            :operationWidth="250"
             :data="pageResult"
             :columns="columns"
             editButtonName="编辑"
@@ -135,6 +136,7 @@
             :button9Name="'离司恢复'"
             :button9Status="'离司'"
             @handleButton9="handleRest"
+            :buttonDropdown="dropdownOption"
           >
           </kt-common-table>
         </SplitArea>
@@ -263,6 +265,7 @@
                     style="width: 100%"
                     v-model="formDataDetail.entryTime"
                     type="date"
+                    value-format="yyyy-MM-dd"
                     placeholder="选择日期"
                     popper-class="select-prop"
                   >
@@ -468,6 +471,9 @@
         <el-button @click="closeDialogOut">取消</el-button>
       </span>
     </el-dialog>
+    
+    <personnelHistory ref="personnelHistory" ></personnelHistory>
+    
   </div>
 </template>
 
@@ -478,6 +484,7 @@ import KtCommonTable from "@/views/Core/KtCommonTable.vue"; //表格组件
 import { validateSfz } from "../../../utils/validate.js";
 import peopleImage from "@/components/PeopleImage/index.vue"; //影像组件
 import userDetail from "@/components/UserDetail/index.vue"; // 详情信息
+import personnelHistory from "@/components/PersonnelHistory/index.vue"; //人员修改历史
 import mixa from "../mixin";
 const mixin = new mixa({
   treeTypeNum: null,
@@ -489,6 +496,7 @@ export default {
     KtCommonTable,
     peopleImage,
     userDetail,
+    personnelHistory
   },
   mixins: [mixin],
   data() {
@@ -635,7 +643,13 @@ export default {
       searchLeaderOptions: {},
       user_statusoptions: [],
       showOut: false,
-      pdeptId: null
+      pdeptId: null,
+      dropdownOption:[
+        {
+          label:'人员轨迹',
+          click:(row)=>this.checkHistory(row)
+        }
+      ],
     };
   },
   created() {
@@ -1122,6 +1136,12 @@ export default {
         });
       }, 200);
     },
+
+    //查看人员修改记录
+    async checkHistory(row){
+      let userId = row.userId;
+      this.$refs.personnelHistory.getHistory(userId);
+    }
   },
 };
 </script>

+ 19 - 2
src/views/PeopleManage/TeamLeader/TeamLeaderManage.vue

@@ -123,6 +123,7 @@
           <kt-common-table
             permsEdit="sys:team:edit"
             :data="pageResult"
+            :operationWidth="250"
             :columns="columns"
             editButtonName="编辑"
             :showBatchDelete="false"
@@ -134,6 +135,7 @@
             :button9Name="'离司恢复'"
             :button9Status="'离司'"
             @handleButton9="handleRest"
+            :buttonDropdown="dropdownOption"
           >
           </kt-common-table>
         </SplitArea>
@@ -253,6 +255,7 @@
                     style="width: 100%"
                     v-model="formDataDetail.entryTime"
                     type="date"
+                    value-format="yyyy-MM-dd"
                     placeholder="选择日期"
                     popper-class="select-prop"
                   >
@@ -468,6 +471,8 @@
         <el-button @click="closeDialogOut">取消</el-button>
       </span>
     </el-dialog>
+
+    <personnelHistory ref="personnelHistory" ></personnelHistory>
   </div>
 </template>
 
@@ -478,6 +483,7 @@ import KtCommonTable from "@/views/Core/KtCommonTable.vue"; //表格组件
 import peopleImage from "@/components/PeopleImage/index.vue"; //影像组件
 import { validateSfz } from "../../../utils/validate.js";
 import userDetail from "@/components/UserDetail/index.vue"; // 详情信息
+import personnelHistory from "@/components/PersonnelHistory/index.vue"; //人员修改历史
 import mixa from "../mixin";
 const mixin = new mixa({
   treeTypeNum: 2, //树分类过滤参数
@@ -489,6 +495,7 @@ export default {
     KtCommonTable,
     userDetail,
     peopleImage,
+    personnelHistory
   },
   mixins: [mixin],
   data() {
@@ -623,7 +630,13 @@ export default {
       },
       //影像上传列表
       imagesIdList: [],
-      pdeptId: null
+      pdeptId: null,
+      dropdownOption:[
+        {
+          label:'人员轨迹',
+          click:(row)=>this.checkHistory(row)
+        }
+      ],
     };
   },
   created() {
@@ -1123,7 +1136,11 @@ export default {
         });
       }, 200);
     },
-
+    //查看人员修改记录
+    async checkHistory(row){
+      let userId = row.userId;
+      this.$refs.personnelHistory.getHistory(userId);
+    }
   },
 };
 </script>

+ 12 - 0
src/views/PeopleManage/UserMap.vue

@@ -46,6 +46,7 @@
         </el-switch> -->
       </div>
     </div>
+    <MobileZoomDivTR>
     <div v-if="infoWindowVisible" class="infohis-window">
       <p class="close flex j-s">
         <span>历史记录</span>
@@ -75,6 +76,8 @@
         </el-pagination>
       </div>
     </div>
+  </MobileZoomDivTR>
+      <MobileZoomDivR>
     <div class="personnel-window ">
       <p class="close flex j-s ">
         <!-- <span>人员分布</span> -->
@@ -144,6 +147,9 @@
           </div> -->
       </div>
     </div>
+  </MobileZoomDivR>
+
+<MobileZoomDiv>
     <div v-if="personnelVisible" class="info-window">
       <p class="close flex j-s">
         <span>人员详情</span>
@@ -195,12 +201,17 @@
         </el-pagination>
       </div>
     </div>
+  </MobileZoomDiv>
+
   </div>
 </template>
 
 <script>
 import echarts from 'echarts';
 import yongchengData from '../../assets/js/yongchengData';
+import MobileZoomDiv from './MobileZoomDiv.vue'
+import MobileZoomDivR from './MobileZoomDivR.vue'
+import MobileZoomDivTR from './MobileZoomDivTR.vue'
 import AMapLoader from "@amap/amap-jsapi-loader";
 window._AMapSecurityConfig = {
   securityJsCode: 'd62687dd438cfadd859bbab66d8e41a2',		//安全密钥
@@ -266,6 +277,7 @@ export default {
 
     };
   },
+  components: { MobileZoomDiv, MobileZoomDivR,MobileZoomDivTR },
   mounted() {
     myChart = echarts.init(document.getElementById('echarts_box'))
     this.initMap();

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

@@ -66,16 +66,31 @@
     <div class="quotation-page">
       <el-tabs v-model="activeName"  tab-position="left" @tab-click="handleClick">
         <el-tab-pane label="报价" name="999" >
+          <span slot="label" title="报价">
+            <img class="active" v-if="activeName == '999'" src="@/assets/image/task/active_quotation.png" alt="">
+            <img class="img" v-else src="@/assets/image/task/quotation.png" alt="">
+            <img class="hover" src="@/assets/image/task/hover_quotation.png" alt="">
+          </span>
           <div class="quotation-content">
-            <Ktletter ref="Ktletter" :isdisabled="isdisabled"  isLetter="2"></Ktletter>
+            <Ktletter ref="Ktletter" :isdisabled="isdisabled" isLetter="2"></Ktletter>
           </div>
         </el-tab-pane>
         <el-tab-pane label="全部订单" name="888" :disabled="isdisabled">
+          <span slot="label" title="全部订单">
+            <img class="active" v-if="activeName == '888'" src="@/assets/image/task/active_all.png" alt="">
+            <img class="img" v-else src="@/assets/image/task/all.png" alt="">
+            <img class="hover" src="@/assets/image/task/hover_all.png" alt="">
+          </span>
           <div class="quotation-content">
             <KtOrder ref="KtOrder" @orderEdit="orderEdit"  :isLetterOrder="false"></KtOrder>
           </div>
         </el-tab-pane>
         <el-tab-pane v-for="(val) in orderOption"  :key='val.value' :label="val.lable" :name="val.value" :disabled="isdisabled">
+          <span slot="label" :title="val.lable">
+            <img class="active" v-if="activeName == val.value" :src="val.active" alt="">
+            <img class="img" v-else :src="val.url" alt="">
+            <img class="hover" :src="val.hover" alt="">
+          </span>
           <div class="quotation-content">
             <KtOrder :ref="'refName' + val.value"  @orderEdit="orderEdit" :isLetterOrder="false"></KtOrder>
           </div>
@@ -150,18 +165,33 @@ export default {
         {
           lable:'报价中',
           value:'0',
+          url: require('@/assets/image/task/Inthequotation.png'),
+          active:  require('@/assets/image/task/active_Inthequotation.png'),
+          hover:  require('@/assets/image/task/hover_Inthequotation.png')
         },{
           lable:'待核保',
           value:'1',
+          url: require('@/assets/image/task/Pendingunderwriting.png'),
+          active:  require('@/assets/image/task/active_Pendingunderwriting.png'),
+          hover:  require('@/assets/image/task/hover_Pendingunderwriting.png')
         },{
           lable:'已核保待缴费',
           value:'2',
+          url: require('@/assets/image/task/Pendingpayment.png'),
+          active:  require('@/assets/image/task/active_Pendingpayment.png'),
+          hover:  require('@/assets/image/task/hover_Pendingpayment.png')
         },{
           lable:'已承保',
           value:'3',
+          url: require('@/assets/image/task/Underwrited.png'),
+          active:  require('@/assets/image/task/active_Underwrited.png'),
+          hover:  require('@/assets/image/task/hover_Underwrited.png')
         },{
           lable:'核保退回',
           value:'4',
+          url: require('@/assets/image/task/Underwritingreturn.png'),
+          active:  require('@/assets/image/task/active_Underwritingreturn.png'),
+          hover:  require('@/assets/image/task/hover_Underwritingreturn.png')
         },
       ],
       message:'',
@@ -225,7 +255,7 @@ export default {
     orderEdit(data){
       this.activeName=data.activeName
       this.$refs.Ktletter.editingWay(data)
-      this.$refs.Ktletter.obtainProtocol(data)
+      // this.$refs.Ktletter.obtainProtocol(data)
     }
   }
 }
@@ -240,4 +270,91 @@ export default {
   overflow-y: auto;
   height: 80vh;
 }
+/deep/.el-tabs{
+  position: relative;
+  .el-tabs__header {
+    position: absolute;
+    z-index: 99;
+    left: 50%;
+    transform: translateX(-50%);
+    bottom: 20px;
+    height: 60px !important;
+    margin: 0;
+    padding: 0 20px;
+    display: flex;
+    align-items: center;
+    background: #F4F4F4;
+    box-shadow: 2px 2px 10px 0px rgba(0,0,0,0.25);
+    border-radius: 8px 8px 8px 8px;
+    text-align: center;
+    .el-tabs__nav-wrap{
+      height: auto;
+      &::after{
+        display: none;
+      }
+      .el-tabs__nav-scroll{
+        height: auto;
+        .el-tabs__nav{
+          display: flex;
+          .el-tabs__item{
+            padding: 0;
+            display: flex;
+            align-items: center;
+            span{
+              display: inline-block;
+              width: 30px;
+              height: 30px;
+              line-height: 30px;
+              &:hover{
+                .img{
+                  display: none;
+                }
+                // .active{
+                //   display: none;
+                // }
+                .hover{
+                  display: block;
+                }
+              }
+              img{
+              width: 30px;
+              height: 30px;
+            }
+            }
+            
+            .hover{
+              display: none;
+            }
+            
+          }
+          .el-tabs__item:not(:first-child)::after{
+            content: '|';
+            color: #9F9F9F;
+            padding: 0 24px;
+          }
+          .el-tabs__item:last-child::after{
+            content: '';
+            color: #9F9F9F;
+            padding: 0;
+          }
+          .el-tabs__item.is-active{
+            span{
+              background: #ee4230;
+              padding: 3px;
+              border-radius: 8px;
+            }
+          }
+          .el-tabs__active-bar{
+            display: none;
+            &::before{
+              content: '|';
+              color: #9F9F9F;
+            }
+          }
+        }
+        
+      }
+    }
+  }
+}
 </style>

+ 191 - 73
src/views/Task/daikeComponents/KtLetter1.vue

@@ -766,7 +766,7 @@
         </div>
          -->
         <div class="coll">
-          <div v-loading.fullscreen.lock="loading" class="hovers" :class="reslistitem.checked ? 'border-red' : 'border-blue'" v-for="(reslistitem, reslistindex) in totalCompanyList"
+          <div v-loading="showLoading" class="hovers" :class="reslistitem.checked ? 'border-red' : 'border-blue'" v-for="(reslistitem, reslistindex) in totalCompanyList"
             :key="reslistindex">
             <el-row v-show="reslistitem.checked || reslistindex == 0" class="companyhead" style="margin-bottom: 20px;">
               <el-col :span="1">
@@ -1046,7 +1046,7 @@
                           <div class="w-60">份数</div>
                           <div class="w-60">保费</div>
                         </div>
-                        <div class="table-list-content" v-for="(driving, drivingIndex) in reslistitem.programme.drivingList" :key="drivingIndex">
+                        <div class="table-list-content" v-for="(driving, drivingIndex) in reslistitem.programme.drivingList" :key="drivingIndex" @click="showDetailJiaYi(reslistitem, reslistindex, 'jiayi')">
                           <div class="flex-1">
                             <img src="@/icon/icon-chengse.png">
                             <span>
@@ -1129,7 +1129,7 @@
                             <div class="table-list-line" style="border-right: none; padding-left: 0;" v-show="reslistitem.programme.description != '单交'">
                               <span style="margin-left: 0; font-size: 10px;">商业险</span>
                             </div>
-                            <div class="table-list-line table-list-line-last" style="border-right: none; padding-left: 0;" v-show="reslistitem.result.noExportFee">
+                            <div class="table-list-line table-list-line-last" style="border-right: none; padding-left: 0;" v-show="reslistitem.result.jyPremium">
                               <span style="margin-left: 0; font-size: 10px;">驾意险</span>
                             </div>
                           </div>
@@ -1140,7 +1140,7 @@
                             <div class="table-list-line" style="border-right: none;" v-show="reslistitem.programme.description != '单交'">
                               <span style="margin-left: 0;">{{ reslistitem.result.syExportFee ? reslistitem.result.syExportRadio : '无' }}</span>
                             </div>
-                            <div class="table-list-line table-list-line-last" style="border-right: none;"  v-show="reslistitem.result.noExportFee">
+                            <div class="table-list-line table-list-line-last" style="border-right: none;"  v-show="reslistitem.result.jyPremium">
                               <span style="margin-left: 0;">{{ reslistitem.result.noExportRadio }}</span>
                             </div>
                           </div>
@@ -1151,7 +1151,7 @@
                             <div class="table-list-line"  v-show="reslistitem.programme.description != '单交'">
                               <span style="margin-left: 0;">{{ reslistitem.result.syExportFee ? reslistitem.result.syExportFee : '无' }}</span>
                             </div>
-                            <div class="table-list-line table-list-line-last" v-show="reslistitem.result.noExportFee">
+                            <div class="table-list-line table-list-line-last" v-show="reslistitem.result.jyPremium">
                               <span style="margin-left: 0;">{{ reslistitem.result.noExportFee ? reslistitem.result.noExportFee : '无' }}</span>
                             </div>
                           </div>
@@ -1176,7 +1176,7 @@
                             <div class="table-list-line" style="border-right: none; padding-left: 0;" v-show="reslistitem.programme.description != '单交'">
                               <span style="margin-left: 0; font-size: 10px;">商业险</span>
                             </div>
-                            <div class="table-list-line table-list-line-last" style="border-right: none; padding-left: 0;" v-show="reslistitem.result.noExportFee">
+                            <div class="table-list-line table-list-line-last" style="border-right: none; padding-left: 0;" v-show="reslistitem.result.jyPremium">
                               <span style="margin-left: 0; font-size: 10px;">驾意险</span>
                             </div>
                           </div>
@@ -2397,6 +2397,7 @@
             </template>
           </el-table-column>
           <el-table-column prop="licenseno" label="车牌号" align="center"></el-table-column>
+          <el-table-column prop="product" label="险种" align="center"></el-table-column>
           <el-table-column prop="createtime" label="报价时间" align="center"></el-table-column>
           <el-table-column prop="jqpremium" label="交强险" align="center"></el-table-column>
           <el-table-column prop="sypremium" label="商业险" align="center"></el-table-column>
@@ -3609,13 +3610,24 @@
                   <el-row style="margin-bottom: 20px;">
                     <el-col :span="10">
                       {{ item.typeName }}
-                      <el-select v-if="item.detail" v-model="item.selectList" clearable multiple @change="handleChangeSelect(index)" size="small" placeholder="请选择">
+                      <el-select v-if="item.detail" style="width: 300px;" v-model="item.selectList" clearable multiple @change="handleChangeSelect(index)" size="small" placeholder="请选择">
                         <el-option v-for="(i, ind) in item.detail" :key="ind" :label="i.alias" :value="i.alias">
                         </el-option>
                       </el-select>
                     </el-col>
                   </el-row>
-                  <el-table v-if="item.tableData" :data="item.tableData" border style="width: 100%; margin-top: 20px;" stripe
+                  <div v-for="(dataItem, dataIndex) in item.tableData" :key="dataIndex">
+                    <el-col :span="6">
+                      份数
+                      <el-input v-model="dataItem.quantity" style="width: 120px;" size="small">
+                        <template slot="prepend"><i class="el-icon-minus" @click="numberChange(listIndex, index, 'minus',dataItem.minQuantity, dataIndex)"></i></template>
+                        <template slot="append"><i class="el-icon-plus" @click="numberChange(listIndex, index, 'plus',dataItem.minQuantity, dataIndex)"></i></template>
+                      </el-input>
+                      份
+                    </el-col>
+                    <el-col v-if="item.tableData" :span="4" class="flex a-c">保费:{{ Number(dataItem.sumPremium) * dataItem.quantity }}元</el-col>
+                  </div>
+                  <el-table v-if="item.tableData && item.tableData.length" :data="item.tableData" border style="width: 100%; margin-top: 20px;" stripe
                     header-cell-class-name="table-header">
                     <el-table-column prop="name" label="保险责任" align="center">
                       <template slot-scope="scope">
@@ -3730,7 +3742,7 @@
     </el-dialog>
 
     <!-- 驾意险 -->
-    <el-dialog title="调整险种" :visible.sync="addYiwaiDialogVisible" width="60%" top="5vh"
+    <el-dialog title="驾意险" :visible.sync="addYiwaiDialogVisible" width="60%" top="5vh"
     :before-close="handleCloseAddYiwai" class="addyiwai">
       <div class="typedialog-style">
         <el-card>
@@ -3868,17 +3880,17 @@
       </span>
     </el-dialog>
 
-    <!-- 驾意险详情 -->
-    <el-dialog title="已选险种" :visible.sync="showDetailJiaYiVisible" width="60%" top="5vh"
+    <!-- 详情 -->
+    <el-dialog :title="detailJiaYiTitle" :visible.sync="showDetailJiaYiVisible" width="60%" top="5vh"
     :before-close="handleCloseShowDetailJiaYi">
-      <div class="typedialog-style addyiwai typedialog-style1" v-if="productId != '034001' && productId != '034002'">
+      <div class="typedialog-style addyiwai typedialog-style1" v-if="productId != '034001' && productId != '034002' && detailJiaYiTitle == '查看详情'">
         <div class="typedialog-title"><i class="el-icon-circle-check" style="color: #D42426; font-size: 20px; margin-right: 10px;"></i>交通事故强制责任险:</div>
         <el-table :data="typeJqTable" border style="width: 100%" stripe header-cell-class-name="table-header">
           <el-table-column prop="date" label="保障范围" align="center"></el-table-column>
           <el-table-column prop="date1" label="保额(元)" align="center"></el-table-column>
         </el-table>
       </div>
-      <div class="typedialog-style typedialog-style2" v-if="productId != '0330'">
+      <div class="typedialog-style typedialog-style2" v-if="productId != '0330' && detailJiaYiTitle == '查看详情'">
         <div class="typedialog-title"><i class="el-icon-circle-check" style="color: #D42426; font-size: 20px; margin-right: 10px;"></i>商业险详情:</div>
         <div class="a-c back">
           <el-row style="background: #F7F7F9;">
@@ -3922,8 +3934,8 @@
           <el-table-column prop="premium" label="保费(元)" align="center"></el-table-column>
         </el-table>
         <div v-if="showDetailtable && !showDetailtable.length">暂无</div>
-        <div class="typedialog-title">已选份数:</div>
-        <div class="jiayi-style">
+        <div class="typedialog-title" v-if="detailJiaYiTitle == '查看详情'">已选份数:</div>
+        <div class="jiayi-style" v-if="detailJiaYiTitle == '查看详情'">
           <el-row v-for="(item, index) in typeDialogData.drivingList" :key="index">
             <el-col :span="10">
               <div class="jiayi-style-title">产品名称</div>
@@ -3955,6 +3967,28 @@
       </span>
     </el-dialog>
 
+    <!-- 驾意险详情 -->
+    <el-dialog :title="detailJiaYiTitle" :visible.sync="showDetailJiaYiVisible1" width="60%" top="5vh" v-dialogDrag
+    :before-close="handleCloseShowDetailJiaYi">
+      <div class="typedialog-style typedialog-style3" v-if="showDetailtable && showDetailtable.length">
+        <div class="typedialog-title" style="display: flex; justify-content: space-between;">
+          <div><i class="el-icon-circle-check" style="color: #D42426; font-size: 20px; margin-right: 10px;"></i>驾意险详情:</div>
+          <div class="typedialog-title">( 驾驶人意外单份保额 )如下</div>
+        </div>
+        <el-table v-for="(item, index) in showDetailtable" :key="index" :data="item" border style="width: 100%" stripe
+          header-cell-class-name="table-header">
+          <el-table-column prop="name" label="保险责任名称" align="center"></el-table-column>
+          <el-table-column prop="amount" label="保额(元)" align="center"></el-table-column>
+          <el-table-column prop="premium" label="保费(元)" align="center"></el-table-column>
+        </el-table>
+        <div v-if="showDetailtable && !showDetailtable.length">暂无</div>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <!-- <el-button size="small" @click="handleCloseShowDetailJiaYi">取 消</el-button> -->
+        <el-button size="small" type="primary" @click="handleCloseShowDetailJiaYi">确 定</el-button>
+      </span>
+    </el-dialog>
+
     <!-- 选择特约 showTeYueVisible -->
     <el-dialog title="选择特约" :visible.sync="showTeYueVisible" width="40%" top="5vh"
     :before-close="handleCloseTeYue" class="teYuedialog-style">
@@ -3984,6 +4018,10 @@
         <el-button size="small" type="primary" @click="showTeYueVisible = false">确 定</el-button>
       </span>
     </el-dialog>
+
+    <floatingBar />
+
+
   </div>
 </template>
 <script>
@@ -3991,6 +4029,7 @@ let _self;
 import QRCode from "qrcodejs2";
 import Cookies from "js-cookie";
 import CommonUtil from "@/utils/comutil.js";
+import floatingBar from '@/components/customerService/floatingBar.vue'; 
 import {
   getAgeByIdCard,
   searchkey,
@@ -4062,6 +4101,7 @@ export default {
       // 驾意险详情
       jiayiDialogData: {},
       showDetailJiaYiVisible: false,
+      showDetailJiaYiVisible1: false,
       showDetailtable: [],
       // 添加驾意险
       checkList: [],
@@ -5508,6 +5548,9 @@ export default {
       imageList4: [],
       imageList5: [],
       imageList6: [],
+      showLoading: false,
+      detailJiaYiTitle: '查看详情',
+      oldData: {},    // 旧获取公司参数
     };
   },
   watch: {
@@ -5608,6 +5651,7 @@ export default {
     quotationDialogPro,
     imageDialog,
     Ktletter1Popover,
+    floatingBar,
     "el-image-viewer": () =>
       import("element-ui/packages/image/src/image-viewer"),
   },
@@ -5659,15 +5703,22 @@ export default {
     // this.paramsEdit = this.$route.query.data; //接收参数
     // this.obtainProtocol(this.$route.query.data);
     this.getProductId()   // 获取险别
-    this.editingWay(this.$route.query.data)
+    // this.editingWay(this.$route.query.data)
+    if (this.$route.query.data) {
+      this.editingWay(this.$route.query.data)
+    }
   },
   mounted() {
     this.getCompanyList(this.$route.query.data)
     this.onScroll();
     if (this.$route.query.data) {
-      this.jqstartDate = this.$route.query.data.jqstartdate;
-      this.jqendDate = this.$route.query.data.jqenddate;
-
+      if(this.isDateBeforeToday(this.$route.query.data.jqstartdate)){
+        this.jqstartDate = this.transformTime1();
+        this.jqendDate = this.oneYearPast1(this.jqstartDate);
+      }else{
+          this.jqstartDate = this.$route.query.data.jqstartdate;
+          this.jqendDate = this.$route.query.data.jqenddate;
+      }
       if (this.$route.query.data.jqstartdate.split(" ")[1] == "00:00:00") {
         this.immediatelyValue = false;
       } else {
@@ -5770,18 +5821,26 @@ export default {
                 // this.policyHolderInfo = {}
               }
 
-              console.log('校验成功,获取列表')
               let res = {};
               // res = await this.$api.letter.getAllAgreement();
               // this.$api.letter.getAllAgreement().then((res) => {
-              this.$api.letter.ruleFilterCompany({
+              // oldData
+              let param = {
                 productId: this.productId,
                 carInfo: this.carInfo,
                 ownerInfo: this.ownerInfo,
                 applyInfo: this.policyHolderInfo,
                 insureInfo: this.insuredPersonInfo,
-                userId:this.isLetter==2? this.userId:"",
-              }).then((res) => {
+                userId:this.isLetter==2? this.userId:""
+              }
+              if (JSON.stringify(param) === this.oldData) {
+                return
+              } else {
+                this.oldData = JSON.stringify(param) 
+              }
+              console.log('校验成功,获取列表')
+              this.showLoading = true
+              this.$api.letter.ruleFilterCompany(param).then((res) => {
                 if (res.code == 200) {
                   res.data.map((ele) => {
                     ele["result"] = {};
@@ -5795,7 +5854,7 @@ export default {
                     ele.coefficient = "";
                     ele.underwritingDescription =
                       ele.agreement[0].underwritingDescription;
-                    if (ele.isTaxSource && ele.isTaxSource == "1") {
+                    if (ele.isTaxSource && ele.isTaxSource == "1" && ele.agreement) {
                       ele.agreement.forEach((val) => {
                         if (val.isTaxSource && val.isTaxSource == "1") {
                           ele.agreementId = val.id;
@@ -5806,8 +5865,11 @@ export default {
                   });
 
                   if (data) {
-                    this.productId =  data.productid
+                    this.productId = this.productId || data.productid
                     res.data.forEach((val, index) => {
+                      if(!data.insAreaCompanyEditingDtos) {
+                        return
+                      }
                       data.insAreaCompanyEditingDtos.forEach((ele) => {
                         if (val.namesimple == ele.inscompany) {
                           if (ele.inscompany == "中国人寿" && ele.companyId) {
@@ -5850,7 +5912,7 @@ export default {
                 });
                 }
                 this.totalCompanyList = res.data;
-
+                this.showLoading = false
               })
             } else {
               document.getElementById("CheZhu").scrollIntoView();
@@ -5965,6 +6027,7 @@ export default {
     // 驾意险详情
     handleCloseShowDetailJiaYi() {
       this.showDetailJiaYiVisible = false
+      this.showDetailJiaYiVisible1 = false
       this.showDetailtable = []
       this.typeDialogData = {}
     },
@@ -5984,17 +6047,30 @@ export default {
       })
       this.totalCompanyList[this.typeDialogIndex].zxProgramme.drivingList = arr;
       this.totalCompanyList[this.typeDialogIndex].programme.drivingList = arr
+      console.log(arr, 'arr')
       this.handleCloseAddYiwai()
     },
     // 驾意输入框按钮
-    numberChange(listIndex, index, type,minquantity) {
-      if (type == 'plus') {
-        if (this.jiayiDialogData.drivingTypeList[listIndex].children[index].tableData.quantity < 10) {
-          this.jiayiDialogData.drivingTypeList[listIndex].children[index].tableData.quantity += 1
+    numberChange(listIndex, index, type,minquantity, dataIndex) {
+      if (dataIndex >= 0) {
+        if (type == 'plus') {
+          if (this.jiayiDialogData.drivingTypeList[listIndex].children[index].tableData[dataIndex].quantity < 10) {
+            this.jiayiDialogData.drivingTypeList[listIndex].children[index].tableData[dataIndex].quantity += 1
+          }
+        } else {
+          if (this.jiayiDialogData.drivingTypeList[listIndex].children[index].tableData[dataIndex].quantity > minquantity) {
+            this.jiayiDialogData.drivingTypeList[listIndex].children[index].tableData[dataIndex].quantity -= 1
+          }
         }
       } else {
-        if (this.jiayiDialogData.drivingTypeList[listIndex].children[index].tableData.quantity > minquantity) {
-          this.jiayiDialogData.drivingTypeList[listIndex].children[index].tableData.quantity -= 1
+        if (type == 'plus') {
+          if (this.jiayiDialogData.drivingTypeList[listIndex].children[index].tableData.quantity < 10) {
+            this.jiayiDialogData.drivingTypeList[listIndex].children[index].tableData.quantity += 1
+          }
+        } else {
+          if (this.jiayiDialogData.drivingTypeList[listIndex].children[index].tableData.quantity > minquantity) {
+            this.jiayiDialogData.drivingTypeList[listIndex].children[index].tableData.quantity -= 1
+          }
         }
       }
       this.$forceUpdate()
@@ -6010,12 +6086,11 @@ export default {
     },
     // 选中驾意
     handleChangeSelect(index) {
-      console.log(index)
       if (this.totalCompanyList[this.typeDialogIndex].cnName == 'zijin') {
         this.checkList[index].tableData = []
         this.checkList[index].detail.forEach((val) => {
           this.checkList[index].selectList.forEach((value) => {
-            if (val.projectName == value) {
+            if (val.alias == value) {
               this.checkList[index].tableData.push(val)
               this.$forceUpdate()
             }
@@ -6058,9 +6133,8 @@ export default {
           })
         })
       }
-
     },
-    showDetailJiaYi(item, index) {
+    showDetailJiaYi(item, index, type) {
       this.showDetailtable = []
       item.programme.drivingList.forEach((val) => {
         this.$api.letter.getDrivingSon({
@@ -6072,7 +6146,13 @@ export default {
           }
         })
       })
-      this.showDetailJiaYiVisible = true
+      if (type) {
+        this.detailJiaYiTitle = '驾意险详情'
+        this.showDetailJiaYiVisible1 = true
+      } else {
+        this.detailJiaYiTitle = '查看详情'
+        this.showDetailJiaYiVisible = true
+      }
       this.typeDialogData = item.programme
       this.typeDialogData.shangyeList = [...item.programme.kinds.main,
         ...item.programme.kinds.additional,
@@ -6170,7 +6250,6 @@ export default {
         _this.bbczcarShow = insureinfo.owner;
         _this.kindList = paramsEdit.king;
         _this.bbtbcarShow = insureinfo.insuranceHolder;
-        _this.obtainProtocol(paramsEdit);
         _this.ownerInfo.age = getAgeByIdCard(_this.ownerInfo.identifyNumber);
         _this.policyHolderInfo.age = getAgeByIdCard(
           _this.policyHolderInfo.identifyNumber
@@ -6253,6 +6332,8 @@ export default {
         // this.commpanyList()
         //--显示影像按钮--
         _this.imageUploadShow = true;
+        this.$forceUpdate()
+        _this.obtainProtocol(paramsEdit);
       } else {
         this.jqstartDate = this.transformTime1();
         this.jqendDate = this.oneYearPast1(this.jqstartDate);
@@ -7090,8 +7171,9 @@ export default {
       // res = await this.$api.letter.getAllAgreement();
       }
       if (this.isLetter == "2") {
-        this.getCompanyList(data)
-
+        setTimeout(() => {
+          this.getCompanyList(data)
+        }, 500);
       }
     },
     //获取保险公司列表
@@ -10330,7 +10412,7 @@ export default {
         }
       });
     },
-  
+
     hbsubmitdialog(data, index) {
       this.typeDialogIndex = index     // 当前的公司index
       if (this.imageList1.length == 0 && this.imageList2.length == 0) {
@@ -10609,7 +10691,7 @@ export default {
                           companyId: this.companyId,
                           engageList: this.zijinengageList,
                         })
-                        
+
                         .then((res) => {
                           if (res.code == "200") {
                             loading.close();
@@ -11081,6 +11163,16 @@ export default {
       var datastr = strYear + "-" + strMonth + "-" + strDay + " " + "00:00:00";
       return datastr;
     },
+    isDateBeforeToday(date) {
+				const inputDate = new Date(date); // 将输入的日期转换为 Date 对象
+				const today = new Date(); // 获取当前日期
+				// 比较日期是否小于当前日期
+				if (inputDate < today) {
+					return true; // 输入日期小于当前日期
+				} else {
+					return false; // 输入日期大于等于当前日期
+				}
+			},
     //时间转换
     transformTime(date) {
       var d = new Date(date);
@@ -11737,6 +11829,10 @@ export default {
       });
     },
     CarOCRdiscern() {
+      if (!this.CarFrontFile || !this.CarBackFile) {
+        this.$message.warning('请上传行驶证主页和副页')
+        return
+      }
       //car识别
       const loading = this.$loading({
         lock: true,
@@ -11814,6 +11910,15 @@ export default {
       if (this.timeformat(this.carform.issueDate) != "NaN-NaN-NaN") {
         this.carInfo.issueDate = this.carform.issueDate; //车牌号
       }
+
+      if (this.carform.registerDate.length < 10) {
+        this.$message.warning('检查注册日期')
+        return
+      }
+      if (this.carform.issueDate.length < 10) {
+        this.$message.warning('检查发证日期')
+        return
+      }
       this.uploadcardialogVisible = false;
     },
     handleRemove(e) {
@@ -11864,18 +11969,30 @@ export default {
       //OCR识别
       switch (this.userIndex) {
         case 2:
+          // if (!this.C02File || !this.D02File) {
+          //   this.$message.warning('请上传照片')
+          //   return
+          // }
           const params1 = new FormData(); // 声明formData数据类型
           params1.append("image1", this.C02File);
           params1.append("image2", this.D02File);
           this.userOCRjoggle(params1);
           break;
         case 3:
+          // if (!this.C03File || !this.D03File) {
+          //   this.$message.warning('请上传照片')
+          //   return
+          // }
           const params2 = new FormData(); // 声明formData数据类型
           params2.append("image1", this.C03File);
           params2.append("image2", this.D03File);
           this.userOCRjoggle(params2);
           break;
         case 4:
+          // if (!this.C04File || !this.D04File) {
+          //   this.$message.warning('请上传照片')
+          //   return
+          // }
           const params3 = new FormData(); // 声明formData数据类型
           params3.append("image1", this.C04File);
           params3.append("image2", this.D04File);
@@ -12148,7 +12265,7 @@ export default {
       this.syendDate = this.jqendDate;
     },
     add() {
-      this.obtainProtocol();
+      // this.obtainProtocol();
       if (this.isLetter == "1") {
         this.$router.push({ path: "/letter/letter" });
       }
@@ -12181,35 +12298,35 @@ export default {
         this.bbtbcarShow = true //被保人同投保人
         // this.$refs.imageDialog.emptyList()
         this.imageList1 = [];
-            this.imageList2 = [];
-            this.imageList3 = [];
-            this.imageList4 = [];
-            this.imageList5 = [];
-            this.imageList6 = [];
-            this.imgList1 = [];
-            this.imgList2 = [];
-            this.imgList3 = [];
-            this.imgList4 = [];
-            this.imgList5 = [];
-            this.imgList6 = [];
-            this.imgList7 = [];
-            this.imgList8 = [];
-            this.imgList9 = [];
-            this.imgList10 = [];
-            this.imgList11 = [];
-            this.imgList12 = [];
-            this.imgList13 = [];
-            this.imgList14 = [];
-            this.imgList15 = [];
-            this.imgList16 = [];
-            this.imgList17 = [];
-            this.imgList18 = [];
-            this.imgList19 = [];
-            this.imgList20 = [];
-            this.imgList21 = [];
-            this.imgList22 = [];
-            this.imgList23 = [];
-            this.imgList24 = [];
+        this.imageList2 = [];
+        this.imageList3 = [];
+        this.imageList4 = [];
+        this.imageList5 = [];
+        this.imageList6 = [];
+        this.imgList1 = [];
+        this.imgList2 = [];
+        this.imgList3 = [];
+        this.imgList4 = [];
+        this.imgList5 = [];
+        this.imgList6 = [];
+        this.imgList7 = [];
+        this.imgList8 = [];
+        this.imgList9 = [];
+        this.imgList10 = [];
+        this.imgList11 = [];
+        this.imgList12 = [];
+        this.imgList13 = [];
+        this.imgList14 = [];
+        this.imgList15 = [];
+        this.imgList16 = [];
+        this.imgList17 = [];
+        this.imgList18 = [];
+        this.imgList19 = [];
+        this.imgList20 = [];
+        this.imgList21 = [];
+        this.imgList22 = [];
+        this.imgList23 = [];
+        this.imgList24 = [];
       // 清空保险公司选中的意外险
       this.zijintemplateSelection = "";
       this.zhongantemplateSelection = "";
@@ -12226,7 +12343,7 @@ export default {
         allQuantity: "1",
         quantity: "1",
       };
-
+      this.productId = ''
       this.hengbangaccidentalDrivingVo = {};
       this.huanongaccidentalDrivingVo = {};
       this.taipingaccidentalDrivingVo = {};
@@ -13559,6 +13676,7 @@ export default {
 }
 .loader {
   /* Wave text loader made by: csozi | Website: english.csozi.hu*/
+  height: 30px;
   .text {
     margin: 0;
     line-height: 24px;

+ 6 - 4
src/views/Task/daikeComponents/KtOrder.vue

@@ -56,6 +56,7 @@
         <el-col :span="12">
           <el-form-item label="险种选择">
             <el-radio-group v-model="pageRequest.productid">
+              <el-radio label="">全部</el-radio>
               <el-radio v-for="val in productsTypeoptions" :key="val.dictValue" :label="val.dictValue">{{ val.dictTag
               }}</el-radio>
             </el-radio-group>
@@ -1313,10 +1314,10 @@ export default {
           this.$message({
             type: 'info',
             message: '已取消撤销二维码'
-          });          
+          });
         });
 
-      
+
     },
     bjdpreview(companyId, userId) {
       let params = {
@@ -1421,12 +1422,14 @@ export default {
     //二维码生成插件
     creatQrCode(text) {
       // 查找并删除旧的二维码DOM元素
+      this.$refs['qrcode'].innerHTML = ''
       let element = document.getElementById("qrcode");
       while (element.firstChild) {
         element.removeChild(element.firstChild);
       }
       // 创建新的QRCode实例
-      this.qrcode = new QRCode("qrcode", {
+      // this.qrcode = new QRCode("qrcode", {
+      this.qrcode = new QRCode(this.$refs['qrcode'], {
         text: text,
         width: this.qrcodeWidth,
         height: this.qrcodeHeight,
@@ -3538,7 +3541,6 @@ export default {
   border-bottom: none;
 }
 
-.Risk_title>div:nth-child(1) {}
 
 .Risk_title>div:nth-child(2) {
   border-left: none;