Răsfoiți Sursa

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

baijunde 2 ani în urmă
părinte
comite
4974015711

+ 16 - 0
package-lock.json

@@ -13760,6 +13760,22 @@
         }
       }
     },
+   
+    "vue-draggable-resizable-gorkys": {
+      "version": "2.4.8",
+      "resolved": "https://registry.npmjs.org/vue-draggable-resizable-gorkys/-/vue-draggable-resizable-gorkys-2.4.8.tgz",
+      "integrity": "sha512-DjhelFtRN1cy/AVpYbxlhmTTC5KwLvU490nUZzKp05kMddhzu5TBrBEeYo/9rhmdsrSkxjQguyRvF6IYumw9yw==",
+      "requires": {
+        "core-js": "^2.6.11"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "2.6.12",
+          "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
+          "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
+        }
+      }
+    },
     "vue-hot-reload-api": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.0.tgz",

+ 1 - 0
package.json

@@ -41,6 +41,7 @@
     "vue-clipboard2": "^0.3.3",
     "vue-dialog-drag": "^0.1.29",
     "vue-directive-window": "^0.8.0",
+    "vue-draggable-resizable-gorkys": "^2.4.8",
     "vue-i18n": "^8.22.3",
     "vue-multiselect": "^2.1.6",
     "vue-qr": "^4.0.9",

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

@@ -693,4 +693,25 @@ export const findDxUserList = () => {
     url: '/user/findDxUserList',
     method: 'get',
   })
+}
+// 热力图操作记录
+export const sysMenuRecordAdd = (type,menuType,) => {
+  return axios({
+    url: `/sysMenuRecord/add?type=${type}&menuType=${menuType}`,
+    method: 'get',
+  })
+}
+export const sysMenuRecordGetClickMenu = (data) => {
+  return axios({
+    url: '/sysMenuRecord/getClickMenu',
+    method: 'post',
+    data
+  })
+}
+export const getUserDeptTree = (data) => {
+  return axios({
+    url: '/sys/ipAddr/getUserDeptTree',
+    method: 'post',
+    data
+  })
 }

+ 8 - 0
src/main.js

@@ -13,6 +13,11 @@ import {dateFormat} from '@/utils/dataformat.js'
 import btnPermission from '@/utils/btnPermission'
 import dialogDrag from '@/utils/dialogDrag'
 import VueClipboard from 'vue-clipboard2'
+ 
+
+import vdr from 'vue-draggable-resizable-gorkys';
+import 'vue-draggable-resizable-gorkys/dist/VueDraggableResizable.css';
+ 
 
 import 'element-ui/lib/theme-chalk/index.css'
 // import 'element-ui/lib/'
@@ -74,6 +79,9 @@ Vue.use(router)
 Vue.use(dateFormat)//日期组件格式化
 Vue.use(btnPermission)
 Vue.use(dialogDrag)
+// Vue.use(VueDraggableResizable)
+
+Vue.component('vdr', vdr);
 Vue.prototype.global = global
 
 new Vue({

+ 8 - 1
src/views/Core/KtCommonTable.vue

@@ -734,6 +734,11 @@ export default {
       type: Boolean,
       default: false,
     },
+    showDefaultPage: {
+      // 是否默认调用一次查询
+      type: Boolean,
+      default: true,
+    }
   },
   data() {
     return {
@@ -1081,7 +1086,9 @@ export default {
 
   mounted() {
     const that = this;
-    that.refreshPageRequest(1);
+    if(this.showDefaultPage){
+      that.refreshPageRequest(1);
+    }
     setTimeout(() => {
       let tableTop = that.$refs.commonTable.offsetTop;
       let bottomTop = that.$refs.bottomFixed.offsetTop;

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

@@ -179,7 +179,8 @@ export default {
     this.queryForm.userId = Cookies.get("user");
     this.CompanyList();
     this.getDicType("productsType"); //车船税类型
-
+    this.$api.user.sysMenuRecordAdd(2,3).then((res) => {
+      });
   },
   // 方法函数
   methods: {

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

@@ -341,6 +341,8 @@ export default {
     this.bankAddform.userId=user.id;
     this.bankAddform.userName=user.name;
     this.banklist();
+    this.$api.user.sysMenuRecordAdd(2,3).then((res) => {
+      });
   },
   // 方法函数
   methods: {

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

@@ -329,7 +329,8 @@ export default {
     this.getDicType("incomeAndExpensesType"); //收支类型
     this.getDicType("moneyAttrType"); //交易类型
     this.getDicType("businessSegmentsSZType"); // 收支业务板块
-
+    this.$api.user.sysMenuRecordAdd(2,3).then((res) => {
+      });
   },
   // 方法函数
   methods: {

+ 2 - 0
src/views/Letter/Wallet/FundsWallet.vue

@@ -261,6 +261,8 @@ export default {
   // 生命周期函数
   created() {
     this.allamount();
+    this.$api.user.sysMenuRecordAdd(2,3).then((res) => {
+      });
   },
   // 方法函数
   methods: {

+ 2 - 0
src/views/Letter/Wallet/PromotionFeeDetails.vue

@@ -127,6 +127,8 @@ export default {
   // 生命周期函数
   created() {
     this.queryForm.userId = Cookies.get("user");
+    this.$api.user.sysMenuRecordAdd(2,3).then((res) => {
+      });
   },
   // 方法函数
   methods: {

+ 600 - 0
src/views/PeopleManage/Agent/SetupManager.vue

@@ -0,0 +1,600 @@
+<template>
+    <div class="setupManager">
+        <el-main ref="elMain" style="padding: 0px">
+            <Split :gutterSize="2" style="height: calc(100vh - 120px)">
+                <SplitArea :size="leftSplitWidth" :minSize="240">
+                    <div class="container_left">
+                        <div class="search">
+                            <el-input v-model="filterText" size="small" placeholder="请输入姓名" suffix-icon="el-icon-search"></el-input>
+                        </div>
+                        <el-tree
+                            ref="tree"
+                            :data="treeData"
+                            :highlight-current="true"
+                            :current-node-key="currentKey"
+                            :filter-node-method="filterNode"
+                            @node-click="handleNodeClick"
+                            >
+                            <div class="custom-tree-node" slot-scope="{ node, data }">
+                                <span>{{ data.name }}</span>
+                                <span class="totalNum">{{ data.totalNum }}</span>
+                            </div>
+                            
+                        </el-tree>
+                    </div>
+                </SplitArea>
+                <SplitArea :size="rightSplitWidth">
+                    <div class="container_right">
+                        <el-row >
+                            <el-form ref="queryFormRef" :inline="false" :model="queryFrom" label-position="left" label-width="60px">                      
+                                <el-col :span="6">
+                                    <el-form-item label="工号">
+                                        <el-input size="small" clearable placeholder="请输入工号" v-model="queryFrom.userId"></el-input>
+                                    </el-form-item>
+                                </el-col>
+                                <el-col :span="6">
+                                    <el-form-item label="姓名">
+                                        <el-input size="small" clearable placeholder="请输入姓名" v-model="queryFrom.name"></el-input>
+                                    </el-form-item>
+                                </el-col>
+                                <el-col :span="6">
+                                    <el-form-item label="手机号">
+                                        <el-input size="small" clearable placeholder="请输入手机号" v-model="queryFrom.mobile"></el-input>
+                                    </el-form-item>
+                                </el-col>
+                                <!-- <el-col :span="6">
+                                    <el-form-item label="状态">
+                                        <el-select  size="small"  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="6">
+                                    <el-form-item label>
+                                        <el-button  size="small"
+                                                    type="primary"
+                                                    @click="queryStaffInfo">查询
+                                        </el-button>
+                                        <el-button  size="small"
+                                                    type="default"
+                                                    @click="reset">重置
+                                        </el-button>
+                                    </el-form-item>
+                                </el-col>
+                            </el-form>
+                        </el-row>
+                        <el-row style="margin-bottom: 20px">
+                            <el-button  size="small"
+                                        type="primary"
+                                        @click="BatchSettingsDialog">批量设置
+                            </el-button>
+                            <el-button  size="small"
+                                        type="primary"
+                                        :disabled="selection.length == 0"
+                                        @click="BatchCancellation">批量取消
+                            </el-button>
+                        </el-row>
+                        <kt-common-table    ref="ktcommontable"
+                                            :tableHeights="650"
+                                            :data="pageResult"
+                                            :columns="columns"
+                                            :showBatchDelete="false"
+                                            :select="true"
+                                            :showOperation="false"
+                                            :showDefaultPage="false"
+                                            @findPage="queryList"
+                                            @selectionChange="selectionChange">
+                        </kt-common-table>
+                    </div>
+                    
+                </SplitArea>
+            </Split>
+        </el-main>
+        <el-dialog  :title="settingDialog.title"  :visible.sync="settingDialog.visible"  
+                    :close-on-press-escape="false"  :modal="true"
+                    :show-close="false" 
+                    custom-class="settingDialog"
+                    v-dialogDrag
+                    top="1vh">
+            <el-row >
+                <el-form ref="queryFormRef" :inline="false" :model="settingDialog.queryFrom" label-position="left" label-width="60px">                      
+                    <el-col :span="6">
+                        <el-form-item label="工号">
+                            <el-input size="small" clearable placeholder="请输入工号" v-model="settingDialog.queryFrom.userId"></el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                        <el-form-item label="姓名">
+                            <el-input size="small" clearable placeholder="请输入姓名" v-model="settingDialog.queryFrom.name"></el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                        <el-form-item label="手机号">
+                            <el-input size="small" clearable placeholder="请输入手机号" v-model="settingDialog.queryFrom.mobile"></el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                        <el-form-item label>
+                            <el-button  size="small"
+                                        type="primary"
+                                        @click="queryDialogList()">查询
+                            </el-button>
+                            <el-button  size="small"
+                                        type="default"
+                                        @click="resetDialog">重置
+                            </el-button>
+                        </el-form-item>
+                    </el-col>
+                </el-form>
+            </el-row>
+            <kt-common-table    ref="ktcommontable"
+                                :tableHeights="437"
+                                :data="settingDialog.pageResult"
+                                :columns="columns"
+                                :showBatchDelete="false"
+                                :select="true"
+                                :showOperation="false"
+                                @findPage="queryDialogList"
+                                @selectionChange="selectionDialogChange">
+            </kt-common-table>
+            <div class="footerHandle" style="text-align: right">
+                <el-button
+                size="small"
+                style="border: 1px solid #D42426;
+                color: #D42426;"
+                class="closeBtn"
+                @click="closeDialog"
+                >取消</el-button
+                >
+                <el-button size="small" type="primary" :disabled="selectionDialog.leng == 0" @click="BatchSettings"
+                >确定</el-button
+                >
+            </div>
+        </el-dialog>
+    </div>
+</template>
+
+<script>
+import mixa from "../mixin";
+import KtCommonTable from "@/views/Core/KtCommonTable.vue"; //表格组件
+const mixin = new mixa({
+    treeTypeNum: null
+});
+export default {
+    name: 'setupManager',
+    components: {
+        KtCommonTable,
+    },
+    mixins: [mixin],
+    watch: {
+      filterText(val) {
+        this.$refs.tree.filter(val);
+      }
+    },
+    data(){
+        return {
+            treeData: [],   //左侧树数据
+            currentKey: '', //选中的左侧节点
+            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: "leaderName", label: "管理人", type: "text", minWidth: 100 },
+                // {   prop: "status", label: "状态", minWidth: 120, sortable: false, isStatus: true },
+            ],
+            queryFrom: {    //查询参数
+                userId: "",
+                name: "",
+                mobile: "",
+                status: "",
+                roleId: "20",
+                agentFlag: "2"
+            },
+            pageData: {
+                pageNum: 1,
+                pageSize: 20,
+                totalSize: 0,
+            },
+            selection: [],
+            selectionDialog: [],
+            filterText: '',
+            leaderName: '',
+            settingDialog: {
+                title: '设置管理人',
+                visible: false,
+                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: "leaderName", label: "管理人", type: "text", minWidth: 100 },
+                    // {   prop: "status", label: "状态", minWidth: 120, sortable: false, isStatus: true },
+                ],
+                pageData: {
+                    pageNum: 1,
+                    pageSize: 20,
+                    totalSize: 0,
+                },
+                queryFrom: {    //查询参数
+                    userId: "",
+                    name: "",
+                    mobile: "",
+                    status: "",
+                    roleId: "20",
+                    agentFlag: "2"
+                },
+                pageResult: {}, //表格数据
+            }
+        }
+    },
+    created(){
+        // this.$nextTick(() =>{
+            this.searchLeaderFun();
+        // })
+    },
+    methods: {
+        filterNode(value, data) {
+            if (!value) return true;
+            return data.name.indexOf(value) !== -1;
+        },
+        queryStaffInfo(){   //按搜索条件搜索右侧列表
+            this.pageData = {
+                pageNum: 1,
+                pageSize: 20,
+                totalSize: 0,
+            }
+            this.queryList();
+        },
+        reset(){    //重置搜索条件
+            this.queryFrom = {    //查询参数
+                userId: "",
+                name: "",
+                mobile: "",
+                status: "",
+                roleId: "20",
+                agentFlag: "2"
+            },
+            this.pageData = {
+                pageNum: 1,
+                pageSize: 20,
+                totalSize: 0,
+            }
+            this.queryList();
+        },
+        resetDialog(){  //重置弹窗搜索
+            this.settingDialog.queryFrom = {    //查询参数
+                userId: "",
+                name: "",
+                mobile: "",
+                status: "",
+                roleId: "20",
+                agentFlag: "2"
+            },
+            this.settingDialog.pageData = {
+                pageNum: 1,
+                pageSize: 20,
+                totalSize: 0,
+            }
+            this.queryDialogList();
+        },
+        searchLeaderFun(){  //查询左侧树
+            this.$api.user.getManageList({
+                roleId: "20",
+                agentFlag: "2"
+            }).then((res) => {
+                this.treeData = res.data;
+                if(this.treeData.length){
+                    this.currentKey = this.treeData[0].id;
+                    this.leaderName = this.treeData[0].name;
+                    this.queryList();
+                }
+            }).catch(e =>{
+            });
+        },
+        handleNodeClick(node){  //点击左侧树节点,查询右侧列表
+            this.currentKey = node.id;
+            this.pageData = {
+                pageNum: 1,
+                pageSize: 20,
+                totalSize: 0,
+            }
+            this.queryList();
+        },
+        queryList(data){    //查询右侧人员列表
+            // 获取分页数据
+            if (data && data.pageRequest) {
+                this.pageData.pageNum = data.pageRequest.pageNum;
+                this.pageData.pageSize = data.pageRequest.pageSize;
+            }
+            this.queryFrom.leaderId = this.currentKey;
+            this.$api.user.getManagePersonnel({
+                ...this.pageData, dto: {...this.queryFrom}
+            })
+                .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.$nextTick(() => {
+                    //     let arr = [];
+                    //     res.data.records.forEach(item =>{
+                    //         if(item.selectedNot){
+                    //             arr.push(item);
+                    //         }
+                    //     })
+                    //     this.$refs.ktcommontable.setDefaultSelections(arr);
+                    // });
+                    this.pageData.pageNum = res.data.current;
+                    this.pageData.pageSize = res.data.size;
+                    this.pageData.totalSize = res.data.total;
+                });
+        },
+        selectionChange(data){  //批量取消表格勾选事件
+            this.selection = data.selections;
+        },
+        selectionDialogChange(data){    //批量设置表格勾选事件
+            this.selectionDialog = data.selections;
+        },
+        BatchSettingsDialog(){  //打开批量设置弹窗
+            this.queryDialogList();
+            this.settingDialog.visible = true;
+        },
+        closeDialog(){  //关闭设置管理人弹窗
+            this.settingDialog.visible = false;
+        },
+        async queryDialogList(data){
+            // 获取分页数据
+            if (data && data.pageRequest) {
+                this.settingDialog.pageData.pageNum = data.pageRequest.pageNum;
+                this.settingDialog.pageData.pageSize = data.pageRequest.pageSize;
+            }else{
+                this.settingDialog.pageData = {
+                    pageNum: 1,
+                    pageSize: 20,
+                    totalSize: 0,
+                }
+            }
+            this.settingDialog.queryFrom.notSelected = 0;
+            await this.$api.user.getManagePersonnel({
+                ...this.settingDialog.pageData, dto: {...this.settingDialog.queryFrom}
+            })
+                .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.settingDialog.pageResult = {     //表格组件参数
+                        content: res.data.records,
+                        pageNum: res.data.current,
+                        pageSize: res.data.size,
+                        totalPages: res.data.pages,
+                        totalSize: res.data.total,
+                    };
+                    // this.$nextTick(() => {
+                    //     let arr = [];
+                    //     res.data.records.forEach(item =>{
+                    //         if(item.selectedNot){
+                    //             arr.push(item);
+                    //         }
+                    //     })
+                    //     this.$refs.ktcommontable.setDefaultSelections(arr);
+                    // });
+                    this.settingDialog.pageData.pageNum = res.data.current;
+                    this.settingDialog.pageData.pageSize = res.data.size;
+                    this.settingDialog.pageData.totalSize = res.data.total;
+                });
+        },
+        BatchSettings(){    //批量设置
+            let arr = [];
+            this.selectionDialog.forEach(item =>{
+                arr.push(item.userId);
+            })
+            let data = {
+                leaderId: this.currentKey,
+                leaderName: this.leaderName,
+                userIds: arr
+            }
+            this.$api.user.setManage(data).then(res =>{
+                if(res.code == 200){
+                    this.$message({
+                        message: "设置成功",
+                        type: "success",
+                    });
+                    this.reset();
+                    this.searchLeaderFun();
+                    this.settingDialog.visible = false;
+                }else{
+                    this.$message.error(res.msg);
+                }
+            }).catch(e =>{
+                console.log(e);
+            })
+            // console.log(this.selection);
+        },
+        BatchCancellation(){    //批量取消
+            let arr = [];
+            this.selection.forEach(item =>{
+                arr.push(item.userId);
+            })
+            let data = {
+                leaderId: this.currentKey,
+                leaderName: this.leaderName,
+                userIds: arr
+            }
+            console.log(data);
+            this.$api.user.cancleManage(data).then(res =>{
+                if(res.code == 200){
+                    this.$message({
+                        message: "设置成功",
+                        type: "success",
+                    });
+                    this.reset();
+                    this.searchLeaderFun();
+                    this.selectionDialog.visible = false;
+                }else{
+                    this.$message.error(res.msg);
+                }
+            }).catch(e =>{
+                console.log(e);
+            })
+        },
+
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.setupManager{
+    width: 100%;
+    height: 100%;
+    position: relative;
+    .container_left{
+        height: 100%;
+        // border-top: 1px solid #DCDFE6;
+        padding-right: 10px;
+        .search{
+            padding-bottom: 15px;
+        }
+        .el-tree{
+            height: calc(100% - 55px);
+            overflow: auto;
+            .el-tree-node__content{
+                width: 100%;
+                .custom-tree-node{
+                    width: 100%;
+                    display: flex;
+                    justify-content: space-between;
+                    padding-right: 20px;
+                    .totalNum{
+                        color: #999;
+                    }
+                }
+            }
+        }
+    }
+    .container_right{
+        padding: 20px;
+        .el-form-item{
+            display: flex;
+        }
+        >>>.el-form-item__content{
+            margin: 0 !important;
+            width: calc(100% - 70px);
+            .el-input,.el-select{
+                width: 100%;
+            }
+        }
+    }
+    .el-button{
+        // width: 90px;
+        // height: 36px;
+        // font-size: 16px;
+        // font-weight: 300 !important;
+    }
+    .el-button--default{
+        &:hover{
+            background: transparent;
+            border: 1px solid #D42426;
+        }
+        &:focus{
+            background: transparent;
+            border: 1px solid #D42426;
+        }
+    }
+    .el-dialog__wrapper{
+        width: 100%;
+        height: 100%;
+        position: absolute;
+    }
+    >>>.settingDialog{
+        width: calc(85%);
+        // height: 100%;
+        // position: absolute;
+        // right: 0;
+        // bottom: 0;
+        // margin: 0;
+        .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;
+            padding-bottom: 0;
+            height: 600px;
+            .bottomFixed{
+                position: absolute;
+                bottom: -50px;
+            }
+            .el-col-6{
+                padding-right: 10px;
+            }
+            .footerHandle{
+                position: absolute;
+                bottom: 20px;
+                right: 20px;
+                .el-button{
+                    width: 90px;
+                    height: 36px;
+                    font-size: 16px;
+                    margin-left: 24px;
+                    font-weight: 310;
+                }
+            }
+        }
+    }
+}
+</style>

+ 8 - 3
src/views/PeopleManage/MobileZoomDiv.vue

@@ -1,10 +1,15 @@
 <template>
     <div class="resizable-draggable" :style="{ transform: `scale(${scale})`, left: `${x}px`, top: `${y}px` }"
-        @mousedown="startDrag" @wheel="zoom">
-        <slot></slot>
+        @mousedown="startDrag" >
+        
+        <slot ></slot>
     </div>
+
+    <!-- <div v-maxWindow class="resizable-draggable">
+        <slot ></slot>
+
+    </div> -->
 </template>  
-  
 <script>
 export default {
     name: 'ResizableDraggable',

+ 169 - 79
src/views/PeopleManage/PcLoginRecord.vue

@@ -46,48 +46,101 @@
         </el-switch> -->
         </div>
       </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">
+       <!-- <MobileZoomDiv> -->
+        <div v-if="personnelVisible">
+        <vdr title="人员详情" @visiblefun="personnelVisible = false" :width="700" :height="340">
+          <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="80">
+            <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="操作" width="140">
+              <template slot-scope="scope">
+                <el-button style="color:#3865E9 " @click.native.prevent="historicRecords(scope.row)" type="text"
+                  size="small">
+                  历史记录
+                </el-button>
+                <el-button style="color:#3865E9 " @click.native.prevent="operatelRecords(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 @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 @current-change="handlePersonnelChange" :current-page="personnelPageNum" :page-size="5"
+              layout="total, prev, pager, next" :total="personnelTotalSize">
             </el-pagination>
           </div>
+        </vdr>
+      </div>
+      <!-- </MobileZoomDiv> -->
+      <!-- <MobileZoomDivTR> -->
+      <div v-if="infoWindowVisible">
+        <vdr title="历史记录" @visiblefun="infoWindowVisible = false" :width="550" :height="525">
+          <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>
-      </MobileZoomDivTR>
+        </vdr>
+      </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;" 
+            <span
+              style="color: #3865E9 ; cursor: pointer; font-size: 14px;position: absolute;line-height: 40px;right: 30px;"
               @click="isCollapse = !isCollapse; if (isCollapse) infoWindowVisible = false">
-              {{ isCollapse ? '收起' : '展开' }} 
+              {{ isCollapse ? '收起' : '展开' }}
             </span>
           </p>
           <div v-show="activeName == 1">
@@ -147,60 +200,54 @@
         </div>
 
       </MobileZoomDivR>
+     
+      <div v-if="operatelVisible">
+        <vdr title="操作记录" @visiblefun="operatelVisible = false">
+          <div style="margin-bottom: 10px;">
+            <span style="color: #262626;font-weight: 700;font-size: 14px;">时间筛选 </span>
+            <el-date-picker v-model="operateDate" type="datetimerange" size="small" @change="operateDateFun"
+              :default-time="['00:00:01', '23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" range-separator="至"
+              start-placeholder="开始日期" end-placeholder="结束日期">
+            </el-date-picker>
+          </div>
+          <el-table :data="tableoperateData" border style="width: 98%; max-height: 45vh;
+              overflow-y: auto; " :cell-style="{ padding: '3px 8px' }" :header-cell-style="{
+                background: '#F2F7FC',
+                fontWeight: '700',
+                color: '#606266',
 
-      <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 prop="userName" label="姓名">
             </el-table-column>
-            <el-table-column prop="operationTime" label="登录时间">
+            <el-table-column prop="carNumber" label="车险录单">
             </el-table-column>
-            <el-table-column prop="source" label="分类">
-              <template slot-scope="scope">
-                {{ scope.row.source == '1' ? '渠道' : '代理' }}
-              </template>
+            <el-table-column prop="orderNumber" label="订单查询">
             </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 prop="walletNumber" label="钱包">
             </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">
+          <!-- <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>
-      </MobileZoomDiv>
+          </div> -->
+        </vdr>
+      </div>
 
+      <!-- <div >
+        <vdr title="机构树" @visiblefun="personnelVisible = false" :width="700" :height="340">
+          <el-tree
+              :data="ztreeNodes"
+              :props="{ children: 'children', label: 'name' }"
+              node-key="id"
+              :default-expanded-keys="['9']"
+              @node-click="onZTreeClick"
+            ></el-tree>
+        </vdr>
+      </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>
@@ -215,6 +262,8 @@ import yongchengData from '../../assets/js/yongchengData';
 import MobileZoomDiv from './MobileZoomDiv.vue'
 import MobileZoomDivR from './MobileZoomDivR.vue'
 import MobileZoomDivTR from './MobileZoomDivTR.vue'
+import vdr from './vdr.vue'
+
 import AMapLoader from "@amap/amap-jsapi-loader";
 window._AMapSecurityConfig = {
   securityJsCode: 'd62687dd438cfadd859bbab66d8e41a2',		//安全密钥
@@ -223,6 +272,7 @@ var myChart;
 export default {
   data() {
     return {
+      ztreeNodes:[],
       pageNum: 1, //当前页面
       pageSize: 5, //每页显示条数
       totalSum: 0, //全部的数据条数
@@ -279,10 +329,12 @@ export default {
       status: null,
       positionType: null,
       historyData: [],
-
+      operatelVisible: false,
+      tableoperateData: [],
+      operateDate: [],
     };
   },
-  components: { MobileZoomDiv, MobileZoomDivR, MobileZoomDivTR },
+  components: { MobileZoomDiv, MobileZoomDivR, MobileZoomDivTR, vdr },
   mounted() {
     myChart = echarts.init(document.getElementById('echarts_box'))
     this.initMap();
@@ -296,18 +348,51 @@ export default {
     window.personnelclick = () => {
       this.personnelVisible = true;
     };
+    // this.$api.user
+    //     .getUserDeptTree()
+    //     .then(res => {
+    //       if (res.code == 200) {
+    //         this.ztreeNodes = [res.data];
+    //       }
+    //     });
   },
   destroyed() {
     // 销毁地图,并清空地图容器.该方法执行后,地图对象被注销,内存释放,地图容器被清空。
     this.map.destroy();
   },
   methods: {
+    onZTreeClick: function (evt, treeId, treeNode) {
+    ;
+    },
+    operateDateFun(val) {
+      this.operateDate = val
+      this.sysMenuRecordGetClick({ beginTime: val[0], endTime: val[1] });
+    },
+    sysMenuRecordGetClick(data) {
+      this.$api.user
+        .sysMenuRecordGetClickMenu({
+          userId: this.rowId,
+          type: 2,
+          ...data
+        })
+        .then(res => {
+          if (res.code == 200) {
+            this.tableoperateData = [res.data];
+          }
+        });
+    },
     historicRecords(row) {
       this.rowId = row.userId
       this.isCollapse = false
       this.infoWindowVisible = true
       this.detail()
     },
+    operatelRecords(row) {
+      this.rowId = row.userId
+      this.operatelVisible = true
+      this.sysMenuRecordGetClick()
+    },
+
     handHistory(tab, event) {
       if (tab.name == '2') {
         this.queryAnalysis();
@@ -321,6 +406,7 @@ export default {
       this.historyData = val
       this.queryAnalysis({ startTime: val[0], endTime: val[1] });
     },
+
     queryAnalysis(param) {
       this.$api.user.ipAddrGetPcAddress({ source: this.source, ...param }).then((res) => {
         if (res.code == 200) {
@@ -943,22 +1029,22 @@ export default {
   }
 }
 
-.info-window {
-  position: absolute;
-  top: 60px;
-  left: 20px;
-  z-index: 100;
-  background-color: white;
-  padding: 10px;
-  width: 30vw;
-  box-shadow: 0px 5px 10px #ddd;
-}
+// .info-window {
+//   position: absolute;
+//   top: 60px;
+//   left: 20px;
+//   z-index: 100;
+//   background-color: white;
+//   padding: 10px;
+//   width: 32vw;
+//   box-shadow: 0px 5px 10px #ddd;
+// }
 
 .infohis-window {
   position: absolute;
   top: 0;
   right: 0;
-  z-index: 100;
+  z-index: 999;
   background-color: white;
   padding: 10px;
   width: 500px;
@@ -1127,5 +1213,9 @@ export default {
     text-align: center;
   }
 
+  .my-class .handle {
+    // background: none;
+    // border: 1px solid transparent;
+  }
 }
 </style>

+ 598 - 0
src/views/PeopleManage/Player/SetChannelManager.vue

@@ -0,0 +1,598 @@
+<template>
+    <div class="setupManager">
+        <el-main ref="elMain" style="padding: 0px">
+            <Split :gutterSize="2" style="height: calc(100vh - 120px)">
+                <SplitArea :size="leftSplitWidth" :minSize="240">
+                    <div class="container_left">
+                        <div class="search">
+                            <el-input v-model="filterText" size="small" placeholder="请输入姓名" suffix-icon="el-icon-search"></el-input>
+                        </div>
+                        <el-tree
+                            ref="tree"
+                            :data="treeData"
+                            :props="{children: 'children', label: 'name'}"
+                            :highlight-current="true"
+                            :current-node-key="currentKey"
+                            :filter-node-method="filterNode"
+                            @node-click="handleNodeClick"
+                            >
+                            <div class="custom-tree-node" slot-scope="{ node, data }">
+                                <span>{{ data.name }}</span>
+                                <span class="totalNum">{{ data.totalNum }}</span>
+                            </div>
+                        </el-tree>
+                    </div>
+                </SplitArea>
+                <SplitArea :size="rightSplitWidth">
+                    <div class="container_right">
+                        <el-row >
+                            <el-form ref="queryFormRef" :inline="false" :model="queryFrom" label-position="left" label-width="60px">                      
+                                <el-col :span="6">
+                                    <el-form-item label="工号">
+                                        <el-input size="small" clearable placeholder="请输入工号" v-model="queryFrom.userId"></el-input>
+                                    </el-form-item>
+                                </el-col>
+                                <el-col :span="6">
+                                    <el-form-item label="姓名">
+                                        <el-input size="small" clearable placeholder="请输入姓名" v-model="queryFrom.name"></el-input>
+                                    </el-form-item>
+                                </el-col>
+                                <el-col :span="6">
+                                    <el-form-item label="手机号">
+                                        <el-input size="small" clearable placeholder="请输入手机号" v-model="queryFrom.mobile"></el-input>
+                                    </el-form-item>
+                                </el-col>
+                                <!-- <el-col :span="6">
+                                    <el-form-item label="状态">
+                                        <el-select  size="small"  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="6">
+                                    <el-form-item label>
+                                        <el-button  size="small"
+                                                    type="primary"
+                                                    @click="queryStaffInfo">查询
+                                        </el-button>
+                                        <el-button  size="small"
+                                                    type="default"
+                                                    @click="reset">重置
+                                        </el-button>
+                                    </el-form-item>
+                                </el-col>
+                            </el-form>
+                        </el-row>
+                        <el-row style="margin-bottom: 20px">
+                            <el-button  size="small"
+                                        type="primary"
+                                        @click="BatchSettingsDialog">批量设置
+                            </el-button>
+                            <el-button  size="small"
+                                        type="primary"
+                                        :disabled="selection.length == 0"
+                                        @click="BatchCancellation">批量取消
+                            </el-button>
+                        </el-row>
+                        <kt-common-table    ref="ktcommontable"
+                                            :tableHeights="650"
+                                            :data="pageResult"
+                                            :columns="columns"
+                                            :showBatchDelete="false"
+                                            :select="true"
+                                            :showOperation="false"
+                                            :showDefaultPage="false"
+                                            @findPage="queryList"
+                                            @selectionChange="selectionChange">
+                        </kt-common-table>
+                    </div>
+                    
+                </SplitArea>
+            </Split>
+        </el-main>
+        <el-dialog  :title="settingDialog.title"  :visible.sync="settingDialog.visible"  
+                    :close-on-press-escape="false"  :modal="true"
+                    :show-close="false" 
+                    custom-class="settingDialog"
+                    v-dialogDrag
+                    top="1vh">
+            <el-row >
+                <el-form ref="queryFormRef" :inline="false" :model="settingDialog.queryFrom" label-position="left" label-width="60px">                      
+                    <el-col :span="6">
+                        <el-form-item label="工号">
+                            <el-input size="small" clearable placeholder="请输入工号" v-model="settingDialog.queryFrom.userId"></el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                        <el-form-item label="姓名">
+                            <el-input size="small" clearable placeholder="请输入姓名" v-model="settingDialog.queryFrom.name"></el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                        <el-form-item label="手机号">
+                            <el-input size="small" clearable placeholder="请输入手机号" v-model="settingDialog.queryFrom.mobile"></el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                        <el-form-item label>
+                            <el-button  size="small"
+                                        type="primary"
+                                        @click="queryDialogList">查询
+                            </el-button>
+                            <el-button  size="small"
+                                        type="default"
+                                        @click="resetDialog">重置
+                            </el-button>
+                        </el-form-item>
+                    </el-col>
+                </el-form>
+            </el-row>
+            <kt-common-table    ref="ktcommontable"
+                                :tableHeights="437"
+                                :data="settingDialog.pageResult"
+                                :columns="columns"
+                                :showBatchDelete="false"
+                                :select="true"
+                                :showOperation="false"
+                                @findPage="queryDialogList"
+                                @selectionChange="selectionDialogChange">
+            </kt-common-table>
+            <div class="footerHandle" style="text-align: right">
+                <el-button
+                size="small"
+                style="border: 1px solid #D42426;
+                color: #D42426;"
+                class="closeBtn"
+                @click="closeDialog"
+                >取消</el-button
+                >
+                <el-button size="small" type="primary" :disabled="selectionDialog.length == 0" @click="BatchSettings"
+                >确定</el-button
+                >
+            </div>
+        </el-dialog>
+    </div>
+</template>
+
+<script>
+import mixa from "../mixin";
+import KtCommonTable from "@/views/Core/KtCommonTable.vue"; //表格组件
+const mixin = new mixa({
+    treeTypeNum: null
+});
+export default {
+    name: 'setupManager',
+    components: {
+        KtCommonTable,
+    },
+    mixins: [mixin],
+    watch: {
+      filterText(val) {
+        this.$refs.tree.filter(val);
+      }
+    },
+    data(){
+        return {
+            treeData: [],   //左侧树数据
+            currentKey: '', //选中的左侧节点
+            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: "leaderName", label: "管理人", type: "text", minWidth: 100 },
+                // {   prop: "status", label: "状态", minWidth: 120, sortable: false, isStatus: true },
+            ],
+            queryFrom: {    //查询参数
+                userId: "",
+                name: "",
+                mobile: "",
+                status: "",
+                roleId: "21",
+                agentFlag: "1"
+            },
+            pageData: {
+                pageNum: 1,
+                pageSize: 20,
+                totalSize: 0,
+            },
+            selection: [],
+            selectionDialog: [],
+            filterText: '',
+            leaderName: '',
+            settingDialog: {
+                title: '设置管理人',
+                visible: false,
+                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: "leaderName", label: "管理人", type: "text", minWidth: 100 },
+                    // {   prop: "status", label: "状态", minWidth: 120, sortable: false, isStatus: true },
+                ],
+                pageData: {
+                    pageNum: 1,
+                    pageSize: 20,
+                    totalSize: 0,
+                },
+                queryFrom: {    //查询参数
+                    userId: "",
+                    name: "",
+                    mobile: "",
+                    status: "",
+                    roleId: "21",
+                    agentFlag: "1"
+                },
+                pageResult: {}, //表格数据
+            }
+        }
+    },
+    created(){
+        this.$nextTick(() =>{
+            this.searchLeaderFun();
+        })
+    },
+    methods: {
+        filterNode(value, data) {
+            if (!value) return true;
+            return data.name.indexOf(value) !== -1;
+        },
+        queryStaffInfo(){   //按搜索条件搜索右侧列表
+            this.pageData = {
+                pageNum: 1,
+                pageSize: 20,
+                totalSize: 0,
+            }
+            this.queryList(this.currentKey);
+        },
+        reset(){    //重置搜索条件
+            this.queryFrom = {    //查询参数
+                userId: "",
+                name: "",
+                mobile: "",
+                status: "",
+                roleId: "21",
+                agentFlag: "1"
+            },
+            this.pageData = {
+                pageNum: 1,
+                pageSize: 20,
+                totalSize: 0,
+            }
+            this.queryList(this.currentKey);
+        },
+        resetDialog(){  //重置弹窗搜索
+            this.settingDialog.queryFrom = {    //查询参数
+                userId: "",
+                name: "",
+                mobile: "",
+                status: "",
+                roleId: "21",
+                agentFlag: "1"
+            },
+            this.settingDialog.pageData = {
+                pageNum: 1,
+                pageSize: 20,
+                totalSize: 0,
+            }
+            this.queryDialogList();
+        },
+        searchLeaderFun(){  //查询左侧树
+            this.$api.user.getManageList({
+                roleId: "21",
+                agentFlag: "1"
+            }).then((res) => {
+                this.treeData = res.data;
+                if(this.treeData.length){
+                    this.currentKey = this.treeData[0].id;
+                    this.leaderName = this.treeData[0].name;
+                    this.queryList(this.currentKey);
+                }
+            }).catch(e =>{
+            });
+        },
+        handleNodeClick(node){  //点击左侧树节点,查询右侧列表
+            this.currentKey = node.id;
+            this.pageData = {
+                pageNum: 1,
+                pageSize: 20,
+                totalSize: 0,
+            }
+            this.queryList();
+        },
+        queryList(data){    //查询右侧人员列表
+            // 获取分页数据
+            if (data && data.pageRequest) {
+                this.pageData.pageNum = data.pageRequest.pageNum;
+                this.pageData.pageSize = data.pageRequest.pageSize;
+            }
+            this.queryFrom.leaderId = this.currentKey;
+            this.$api.user.getManagePersonnel({
+                ...this.pageData, dto: {...this.queryFrom}
+            })
+                .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.$nextTick(() => {
+                    //     let arr = [];
+                    //     res.data.records.forEach(item =>{
+                    //         if(item.selectedNot){
+                    //             arr.push(item);
+                    //         }
+                    //     })
+                    //     this.$refs.ktcommontable.setDefaultSelections(arr);
+                    // });
+                    this.pageData.pageNum = res.data.current;
+                    this.pageData.pageSize = res.data.size;
+                    this.pageData.totalSize = res.data.total;
+                });
+        },
+        selectionChange(data){  //批量取消表格勾选事件
+            this.selection = data.selections;
+        },
+        selectionDialogChange(data){    //批量设置表格勾选事件
+            this.selectionDialog = data.selections;
+        },
+        BatchSettingsDialog(){  //打开批量设置弹窗
+            this.queryDialogList();
+            this.settingDialog.visible = true;
+        },
+        closeDialog(){  //关闭设置管理人弹窗
+            this.settingDialog.visible = false;
+        },
+        async queryDialogList(data){
+            // 获取分页数据
+            if (data && data.pageRequest) {
+                this.settingDialog.pageData.pageNum = data.pageRequest.pageNum;
+                this.settingDialog.pageData.pageSize = data.pageRequest.pageSize;
+            }else{
+                this.settingDialog.pageData = {
+                    pageNum: 1,
+                    pageSize: 20,
+                    totalSize: 0,
+                }
+            }
+            this.settingDialog.queryFrom.notSelected = 0;
+            await this.$api.user.getManagePersonnel({
+                ...this.settingDialog.pageData, dto: {...this.settingDialog.queryFrom}
+            })
+                .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.settingDialog.pageResult = {     //表格组件参数
+                        content: res.data.records,
+                        pageNum: res.data.current,
+                        pageSize: res.data.size,
+                        totalPages: res.data.pages,
+                        totalSize: res.data.total,
+                    };
+                    // this.$nextTick(() => {
+                    //     let arr = [];
+                    //     res.data.records.forEach(item =>{
+                    //         if(item.selectedNot){
+                    //             arr.push(item);
+                    //         }
+                    //     })
+                    //     this.$refs.ktcommontable.setDefaultSelections(arr);
+                    // });
+                    this.settingDialog.pageData.pageNum = res.data.current;
+                    this.settingDialog.pageData.pageSize = res.data.size;
+                    this.settingDialog.pageData.totalSize = res.data.total;
+                });
+        },
+        BatchSettings(){    //批量设置
+            let arr = [];
+            this.selectionDialog.forEach(item =>{
+                arr.push(item.userId);
+            })
+            let data = {
+                leaderId: this.currentKey,
+                leaderName: this.leaderName,
+                userIds: arr
+            }
+            this.$api.user.setManage(data).then(res =>{
+                if(res.code == 200){
+                    this.$message({
+                        message: "设置成功",
+                        type: "success",
+                    });
+                    this.reset();
+                    this.settingDialog.visible = false;
+                }else{
+                    this.$message.error(res.msg);
+                }
+            }).catch(e =>{
+                console.log(e);
+            })
+            // console.log(this.selection);
+        },
+        BatchCancellation(){    //批量取消
+            let arr = [];
+            this.selection.forEach(item =>{
+                arr.push(item.userId);
+            })
+            let data = {
+                leaderId: this.currentKey,
+                leaderName: this.leaderName,
+                userIds: arr
+            }
+            console.log(data);
+            this.$api.user.cancleManage(data).then(res =>{
+                if(res.code == 200){
+                    this.$message({
+                        message: "设置成功",
+                        type: "success",
+                    });
+                    this.reset();
+                    this.selectionDialog.visible = false;
+                }else{
+                    this.$message.error(res.msg);
+                }
+            }).catch(e =>{
+                console.log(e);
+            })
+        },
+
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.setupManager{
+    width: 100%;
+    height: 100%;
+    position: relative;
+    .container_left{
+        height: 100%;
+        // border-top: 1px solid #DCDFE6;
+        padding-right: 10px;
+        .search{
+            padding-bottom: 15px;
+        }
+        .el-tree{
+            height: calc(100% - 55px);
+            overflow: auto;
+            .el-tree-node__content{
+                width: 100%;
+                .custom-tree-node{
+                    width: 100%;
+                    display: flex;
+                    justify-content: space-between;
+                    padding-right: 20px;
+                    .totalNum{
+                        color: #999;
+                    }
+                }
+            }
+        }
+    }
+    .container_right{
+        padding: 20px;
+        .el-form-item{
+            display: flex;
+        }
+        >>>.el-form-item__content{
+            margin: 0 !important;
+            width: calc(100% - 70px);
+            .el-input,.el-select{
+                width: 100%;
+            }
+        }
+    }
+    .el-button{
+        // width: 90px;
+        // height: 36px;
+        // font-size: 16px;
+        // font-weight: 300 !important;
+    }
+    .el-button--default{
+        &:hover{
+            background: transparent;
+            border: 1px solid #D42426;
+        }
+        &:focus{
+            background: transparent;
+            border: 1px solid #D42426;
+        }
+    }
+    .el-dialog__wrapper{
+        width: 100%;
+        height: 100%;
+        position: absolute;
+    }
+    >>>.settingDialog{
+        width: calc(85%);
+        // height: 100%;
+        // position: absolute;
+        // right: 0;
+        // bottom: 0;
+        // margin: 0;
+        .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;
+            padding-bottom: 0;
+            height: 600px;
+            .bottomFixed{
+                position: absolute;
+                bottom: -50px;
+            }
+            .el-col-6{
+                padding-right: 10px;
+            }
+            .footerHandle{
+                position: absolute;
+                bottom: 20px;
+                right: 20px;
+                .el-button{
+                    width: 90px;
+                    height: 36px;
+                    font-size: 16px;
+                    margin-left: 24px;
+                    font-weight: 310;
+                }
+            }
+        }
+    }
+}
+</style>

+ 249 - 174
src/views/PeopleManage/UserMap.vue

@@ -46,68 +46,15 @@
         </el-switch> -->
       </div>
     </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="createTime" 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>
-  </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',
-          }">
+     <!-- <MobileZoomDiv> -->
+      <!-- 人员详情 -->
+      <div v-if="personnelVisible">
+      <vdr title="人员详情" @visiblefun="personnelVisible = false" :width="700" :height="340">
+        <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" />
@@ -116,93 +63,183 @@
               <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 prop="userName" label="姓名">
+          </el-table-column>
+          <el-table-column prop="id" label="工号">
+          </el-table-column>
+          <el-table-column prop="leaderName" label="管理人">
           </el-table-column>
-          <el-table-column prop="number" align="center" label="人数">
+          <el-table-column prop="address" label="地址">
+          </el-table-column>
+          <el-table-column prop="createTime" 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="操作" width="140">
+            <template slot-scope="scope">
+              <el-button style="color:#3865E9 " @click.native.prevent="historicRecords(scope.row)" type="text"
+                size="small">
+                历史记录
+              </el-button>
+              <el-button style="color:#3865E9 " @click.native.prevent="operatelRecords(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>
-      <div v-show="activeName == 2">
-        <div style="margin-bottom: 10px;">
-          <span style="color: #262626;font-weight: 700;font-size: 14px;">时间筛选 </span>
-          <!-- <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> -->
-          <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>
+        <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 class="flex j-s">
-          <div class="info-title"><i></i>历史在线人数统计</div>
-          <div class="info-online"><i></i>使用人数:{{ onlineHisData }}</div>
+      </vdr>
+    </div>
+    <!-- </MobileZoomDiv> -->
+    <!-- <MobileZoomDivTR> -->
+    <div v-if="infoWindowVisible">
+      <vdr title="历史记录" @visiblefun="infoWindowVisible = false" :width="550" :height="525">
+        <!-- <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="100">
+          </el-table-column>
+          <el-table-column prop="address" label="地址">
+          </el-table-column>
+          <el-table-column prop="createTime" 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 id="echarts_box" v-show="isCollapse" style="width: 460px;height:300px;"></div>
-        <!-- <div v-if="isCollapse &&onlineHisData==0" class="empty" style="text-align: center;">
+      </vdr>
+    </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>
+        <div v-show="activeName == 2">
+          <div style="margin-bottom: 10px;">
+            <span style="color: #262626;font-weight: 700;font-size: 14px;">时间筛选 </span>
+            <!-- <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> -->
+            <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>
+          </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 v-if="isCollapse &&onlineHisData==0" class="empty" style="text-align: center;">
             <img src="../../assets/暂无数据.png" />
             <div class="txt">暂无数据哦</div>
           </div> -->
+        </div>
       </div>
-    </div>
-  </MobileZoomDivR>
+    </MobileZoomDivR>
 
-<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="姓名">
-        </el-table-column>
-        <el-table-column prop="id" label="工号">
-        </el-table-column>
-        <el-table-column prop="leaderName" label="管理人">
-        </el-table-column>
-        <el-table-column prop="address" label="地址">
-        </el-table-column>
-        <el-table-column prop="createTime" 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 v-if="operatelVisible">
+      <vdr title="操作记录" @visiblefun="operatelVisible = false">
+        <div style="margin-bottom: 10px;">
+          <span style="color: #262626;font-weight: 700;font-size: 14px;">时间筛选 </span>
+          <el-date-picker v-model="operateDate" type="datetimerange" size="small" @change="operateDateFun"
+            :default-time="['00:00:01', '23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" range-separator="至"
+            start-placeholder="开始日期" end-placeholder="结束日期">
+          </el-date-picker>
         </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>
-  </MobileZoomDiv>
+        <el-table :data="tableoperateData" 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="工号">
+          </el-table-column>
+          <el-table-column prop="userName" label="姓名">
+          </el-table-column>
+          <el-table-column prop="carNumber" label="车险录单">
+          </el-table-column>
+          <el-table-column prop="memberNumber" label="会员分享">
+          </el-table-column>
+          <el-table-column prop="managementNumber" label="会员管理">
+          </el-table-column>
+          <el-table-column prop="walletNumber" label="钱包">
+          </el-table-column>
+          <el-table-column prop="posterNumber" label="海报管理">
+          </el-table-column>
+        </el-table>
+      </vdr>
+    </div>
   </div>
 </template>
 
@@ -212,6 +249,7 @@ import yongchengData from '../../assets/js/yongchengData';
 import MobileZoomDiv from './MobileZoomDiv.vue'
 import MobileZoomDivR from './MobileZoomDivR.vue'
 import MobileZoomDivTR from './MobileZoomDivTR.vue'
+import vdr from './vdr.vue'
 import AMapLoader from "@amap/amap-jsapi-loader";
 window._AMapSecurityConfig = {
   securityJsCode: 'd62687dd438cfadd859bbab66d8e41a2',		//安全密钥
@@ -273,11 +311,17 @@ export default {
       lineLx: null,
       status: null,
       positionType: null,
-      historyData: []
-
+      historyData: [],
+      operatelVisible: false,
+      tableoperateData: [],
+      operateDate: [],
+      operateWidth: 600,
+      operateHight: 285,
+      operateX: 0,
+      operateY: 0,
     };
   },
-  components: { MobileZoomDiv, MobileZoomDivR,MobileZoomDivTR },
+  components: { MobileZoomDiv, MobileZoomDivR, MobileZoomDivTR, vdr },
   mounted() {
     myChart = echarts.init(document.getElementById('echarts_box'))
     this.initMap();
@@ -295,18 +339,46 @@ export default {
     this.map.destroy();
   },
   methods: {
+    operatelRecords(row) {
+      this.rowId = this.positionType == 1 ? row.id : row.userId
+      this.operatelVisible = true
+      this.sysMenuRecordGetClick()
+    },
+    operateWidthFun() {
+      this.operateWidth = window.innerWidth - 240
+      this.operateHight = window.innerHeight - 120
+      this.operateX = 0
+      this.operateY = 0
+    },
+    operateDateFun(val) {
+      this.operateDate = val
+      this.sysMenuRecordGetClick({ beginTime: val[0], endTime: val[1] });
+    },
+    sysMenuRecordGetClick(data) {
+      this.$api.user
+        .sysMenuRecordGetClickMenu({
+          userId: this.rowId,
+          type: 1,
+          ...data
+        })
+        .then(res => {
+          if (res.code == 200) {
+            this.tableoperateData = [res.data];
+          }
+        });
+    },
     historicRecords(row) {
-      this.rowId = this.positionType==1? row.id:row.userId
-      this.isCollapse=false
-      this.infoWindowVisible=true
+      this.rowId = this.positionType == 1 ? row.id : row.userId
+      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();
       }
     },
@@ -316,7 +388,7 @@ export default {
       this.queryAnalysis({ startTime: val[0], endTime: val[1] });
     },
     queryAnalysis(param) {
-      this.$api.user.getGeographyPosition({source:this.source ,...param}).then((res) => {
+      this.$api.user.getGeographyPosition({ source: this.source, ...param }).then((res) => {
         if (res.code == 200) {
           this.onlineHisData = res.data.onlineNum
           this.formatAnalysisDate(res.data.list)
@@ -331,23 +403,23 @@ export default {
             mapStyle: "amap://styles/normal" //地图样式,彩色
           });
           _this.map.on("complete", () => {
-            if (res.data.positionRecordList.length > 0){
+            if (res.data.positionRecordList.length > 0) {
               this.positionType = res.data.positionRecordList[0].type
-            _this.positionData = res.data.positionRecordList.map(item => ({
-              userName: item.userName,
-                  id: item.userId,
-                  address: item.address,
-                  onlineImg: item.status ? "Frame-1(2).png" : "Frame(2).png",
-                  // status: item.status ? "在线" : "离线",
-                  status: item.status ? "#1CE247" : "#B2B2B2",
-                  createTime: item.createTime,
-                  deptName: item.deptName,
-                  source: item.source,
-                  leaderName: item.leaderName?item.leaderName:'无',
-                  positionArr: [item.longitude, item.latitude]
-            }));
-            _this.mapPoint();
-          }
+              _this.positionData = res.data.positionRecordList.map(item => ({
+                userName: item.userName,
+                id: item.userId,
+                address: item.address,
+                onlineImg: item.status ? "Frame-1(2).png" : "Frame(2).png",
+                // status: item.status ? "在线" : "离线",
+                status: item.status ? "#1CE247" : "#B2B2B2",
+                createTime: item.createTime,
+                deptName: item.deptName,
+                source: item.source,
+                leaderName: item.leaderName ? item.leaderName : '无',
+                positionArr: [item.longitude, item.latitude]
+              }));
+              _this.mapPoint();
+            }
 
           });
         }
@@ -422,7 +494,8 @@ export default {
         endTime: this.historyData.length > 0 && this.positionType == 2 ? this.historyData[1] : '',
       }
       this.$api.user
-        .queryGeographyInfo({ lng: this.position[0], lat: this.position[1], pageSize: 5, 
+        .queryGeographyInfo({
+          lng: this.position[0], lat: this.position[1], pageSize: 5,
           pageNum: this.personnelPageNum, ...data
         })
         .then(res => {
@@ -524,11 +597,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) {
@@ -537,11 +610,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) {
@@ -550,11 +623,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) {
@@ -639,7 +712,7 @@ export default {
                   createTime: item.createTime,
                   deptName: item.deptName,
                   source: item.source,
-                  leaderName: item.leaderName?item.leaderName:'无',
+                  leaderName: item.leaderName ? item.leaderName : '无',
                   positionArr: [item.longitude, item.latitude]
                 }));
                 _this.mapPoint();
@@ -767,7 +840,8 @@ export default {
         endTime: this.historyData.length > 0 && this.positionType == 2 ? this.historyData[1] : '',
       }
       let api = this.positionType == 1 ? 'queryGeographyInfo' : 'queryGeographyRecord'
-      this.$api.user[api]({ lng: e.target._position[0], lat: e.target._position[1], pageSize: 5, 
+      this.$api.user[api]({
+        lng: e.target._position[0], lat: e.target._position[1], pageSize: 5,
         pageNum: this.personnelPageNum, ...data
       })
         .then(res => {
@@ -885,7 +959,7 @@ export default {
   z-index: 100;
   background-color: white;
   padding: 10px;
-  width: 32vw;
+  width: 35vw;
   box-shadow: 0px 5px 10px #ddd;
 }
 
@@ -913,7 +987,7 @@ export default {
   width: 460px;
   box-shadow: 0px 5px 10px #ddd;
   box-sizing: border-box;
-    width: 500px;
+  width: 500px;
 }
 
 .bottomFixed {
@@ -1043,5 +1117,6 @@ export default {
       margin-right: 10px;
     }
   }
- 
-}</style>
+
+}
+</style>

+ 66 - 0
src/views/PeopleManage/vdr.vue

@@ -0,0 +1,66 @@
+<template>
+    <vdr :w="operateWidth" :h="operateHight" :x="operateX" :y="operateY" style="z-index:999" class-name="my-class"
+        class="infohis-window">
+        <div class="close flex j-s" style="padding:15px 0" v-if="title">
+            <span>{{ title }}</span>
+            <div>
+                <span style="color: #c3c3c3;font-size:18px;cursor: pointer" @click="visiblefun"> ×</span>
+                <span v-if="isOperate==false" style="color: #c3c3c3;font-size:18px;cursor: pointer"
+                    @click="operateWidthFun()" class="el-icon-rank"> </span>
+                <span v-else style="color: #c3c3c3;font-size:18px;cursor: pointer"
+                    @click="isOperate=false;operateWidth=width;operateHight=height " class="el-icon-top-left"> </span>
+            </div>
+        </div>
+        <slot></slot>
+    </vdr>
+</template>  
+<script>
+export default {
+    name: 'ResizableDraggable',
+    props: {
+        title: {
+            type: String,
+            default: ''
+        },
+        width: {
+            type: Number,
+            default: 0
+        },
+        height: {
+            type: Number,
+            default: 0
+        },
+    },
+    data() {
+        return {
+            operateWidth: this.width ||600,
+            operateHight: this.height || 290,
+            operateX: 0,
+            operateY: 0,
+            isOperate:false
+        };
+    },
+ 
+    methods: {
+        visiblefun() {
+            this.$emit("visiblefun")
+        },
+        operateWidthFun() {
+            this.isOperate=true
+            this.operateWidth = window.innerWidth - 240
+            this.operateHight = window.innerHeight - 120
+            this.operateX = 0
+            this.operateY = 0
+        },
+    }
+};
+</script>  
+    
+<style scoped>
+.close {
+    color: #333;
+    font-size: 16px;
+    font-weight: bold;
+}
+</style>
+  

+ 55 - 9
src/views/Task/daikeComponents/KtLetter1.vue

@@ -5667,6 +5667,10 @@ export default {
     if (this.isLetter == "2") {
       this.apiInterfaceName = "ordergenerateOrder";
     }
+    if(this.isLetter == "1"){
+      this.$api.user.sysMenuRecordAdd(2,1).then((res) => {
+      });
+    }
     // this.commpanyList(); //获取保险公司
     this.getDicType("taxRelifFlag"); //车船税类型
     this.getDicType("taxpayerIdentifier"); //纳税人证件类型
@@ -5939,7 +5943,6 @@ export default {
               }
             });
           } else {
-            console.log(3333333333333)
             document.getElementById("toubaor").scrollIntoView();
             _this.$message({ message: "请检查投保人信息", type: "warning" });
           }
@@ -6218,7 +6221,6 @@ export default {
     showTypeDialog(item, index) {
       item.programme99.kinds.map(item=>{
         const itemamtList=item.amtList.map(val=>{return val.label})
-        console.log(itemamtList)
         if(!itemamtList.includes('不投保')){
           item.checked=true;
           item.Required=true;
@@ -6302,8 +6304,13 @@ export default {
             });
             // _this.systartDate = ele.startDate;
             // _this.syendDate = ele.endDate;
-            _this.systartDate = this.transformTime1();
-            _this.syendDate = this.oneYearPast1(this.systartDate);
+            if (new Date(ele.startDate).getTime() > new Date().getTime()) {
+              _this.systartDate = ele.startDate;
+              _this.syendDate = ele.endDate;
+            } else {
+              _this.systartDate = this.transformTime1();
+              _this.syendDate = this.oneYearPast1(this.systartDate);
+            }
             _this.insureList.map((eleA) => {
               paramsEdit.king.map((eleB) => {
                 if (eleA.kindCode == eleB.kindCode) {
@@ -7183,8 +7190,6 @@ export default {
     },
     // 回显
     async obtainProtocol(data) {
-      console.log(data)
-      console.log(this.isLetter)
       let res = {};
       if (this.isLetter == "1") {
       this.getCompanyList(data)
@@ -7735,7 +7740,6 @@ export default {
     //勾选保险公司
     initchange(e, code, name, index) {
       if (e) {
-        console.log(e, code, name, index)
         console.log(this.totalCompanyList[index], 'this.totalCompanyList[index]')
         this.totalCompanyList[index].checked = e;
         this.getCompanyProgramme(e, code, name, index)
@@ -9098,6 +9102,10 @@ export default {
           }
           this.totalCompanyList[num].quoteCode = 200;
           this.totalCompanyList[num].result = res.data;
+          this.jqstartDate = res.data.startDateJq
+          this.jqendDate = res.data.endDateJq
+          this.systartDate = res.data.startDateSy
+          this.syendDate = res.data.endDateSy
           this.QuotationHistory();
         } else {
           this.totalCompanyList[num].quoteCode = "3";
@@ -9226,6 +9234,10 @@ export default {
           }
           this.totalCompanyList[num].quoteCode = 200;
           this.totalCompanyList[num].result = res.data;
+          this.jqstartDate = res.data.startDateJq
+          this.jqendDate = res.data.endDateJq
+          this.systartDate = res.data.startDateSy
+          this.syendDate = res.data.endDateSy
           this.QuotationHistory();
         }
       });
@@ -9327,6 +9339,10 @@ export default {
           }
           this.totalCompanyList[num].quoteCode = 200;
           this.totalCompanyList[num].result = res.data;
+          this.jqstartDate = res.data.startDateJq
+          this.jqendDate = res.data.endDateJq
+          this.systartDate = res.data.startDateSy
+          this.syendDate = res.data.endDateSy
           this.QuotationHistory();
         } else {
           this.totalCompanyList[num].quoteCode = "3";
@@ -9412,6 +9428,10 @@ export default {
           }
           this.totalCompanyList[num].quoteCode = 200;
           this.totalCompanyList[num].result = res.data;
+          this.jqstartDate = res.data.startDateJq
+          this.jqendDate = res.data.endDateJq
+          this.systartDate = res.data.startDateSy
+          this.syendDate = res.data.endDateSy
           this.QuotationHistory();
         } else {
           this.totalCompanyList[num].quoteCode = "3";
@@ -9483,6 +9503,10 @@ export default {
         } else if (!!res.data) {
           this.totalCompanyList[num].quoteCode = 200;
           this.totalCompanyList[num].result = res.data;
+          this.jqstartDate = res.data.startDateJq
+          this.jqendDate = res.data.endDateJq
+          this.systartDate = res.data.startDateSy
+          this.syendDate = res.data.endDateSy
           this.QuotationHistory();
         } else {
           this.totalCompanyList[num].quoteCode = "3";
@@ -9558,6 +9582,10 @@ export default {
           }
           this.totalCompanyList[num].quoteCode = 200;
           this.totalCompanyList[num].result = res.data;
+          this.jqstartDate = res.data.startDateJq
+          this.jqendDate = res.data.endDateJq
+          this.systartDate = res.data.startDateSy
+          this.syendDate = res.data.endDateSy
           this.QuotationHistory();
         } else {
           this.totalCompanyList[num].quoteCode = "3";
@@ -9644,6 +9672,10 @@ export default {
           }
           this.totalCompanyList[num].quoteCode = 200;
           this.totalCompanyList[num].result = res.data;
+          this.jqstartDate = res.data.startDateJq
+          this.jqendDate = res.data.endDateJq
+          this.systartDate = res.data.startDateSy
+          this.syendDate = res.data.endDateSy
           this.QuotationHistory();
         } else if (res.code == "101") {
           this.totalCompanyList[num].quoteCode = "101";
@@ -9761,6 +9793,10 @@ export default {
           }
           this.totalCompanyList[num].quoteCode = 200;
           this.totalCompanyList[num].result = res.data;
+          this.jqstartDate = res.data.startDateJq
+          this.jqendDate = res.data.endDateJq
+          this.systartDate = res.data.startDateSy
+          this.syendDate = res.data.endDateSy
           this.QuotationHistory();
         } else if (res.code == "101") {
           this.totalCompanyList[num].quoteCode = "101";
@@ -9870,6 +9906,10 @@ export default {
           }
           this.totalCompanyList[num].quoteCode = 200;
           this.totalCompanyList[num].result = res.data;
+          this.jqstartDate = res.data.startDateJq
+          this.jqendDate = res.data.endDateJq
+          this.systartDate = res.data.startDateSy
+          this.syendDate = res.data.endDateSy
           this.QuotationHistory();
         } else if (res.code == "101") {
           this.totalCompanyList[num].quoteCode = "101";
@@ -9952,7 +9992,10 @@ export default {
               if (namesimple == "中国人寿" && res.data.companyId) {
                 this.lastCompanyId = res.data.companyId;
               }
-              console.log(res.data, 'res.data111111111111111111111111111')
+              this.jqstartDate = res.data.startDateJq
+              this.jqendDate = res.data.endDateJq
+              this.systartDate = res.data.startDateSy
+              this.syendDate = res.data.endDateSy
               this.QuotationHistory();
             } else {
               this.totalCompanyList[num].quoteCode = "3";
@@ -9987,7 +10030,10 @@ export default {
               }
               this.totalCompanyList[num].quoteCode = 200;
               this.totalCompanyList[num].result = res.data;
-
+              this.jqstartDate = res.data.startDateJq
+              this.jqendDate = res.data.endDateJq
+              this.systartDate = res.data.startDateSy
+              this.syendDate = res.data.endDateSy
               this.QuotationHistory();
             } else {
               this.totalCompanyList[num].quoteCode = "3";

+ 2 - 0
src/views/Task/daikeComponents/KtOrder.vue

@@ -973,6 +973,8 @@ export default {
     });
     // this.findPage();
     if (this.isLetterOrder) {
+      this.$api.user.sysMenuRecordAdd(2,2).then((res) => {
+      });
       this.pageRequest.deptId = JSON.parse(
         localStorage.getItem("user_data")
       ).deptId;