shuishen
2021-08-12 195c2e87ab1d456b1cbfd28057836c42152ce7de
Merge branch 'master' of http://s16s652780.51mypc.cn:49896/r/zhba_enterprises
31 files modified
10 files added
5899 ■■■■ changed files
public/img/bazbj.png patch | view | raw | blame | history
public/img/security.png patch | view | raw | blame | history
public/papersApply.html 156 ●●●●● patch | view | raw | blame | history
public/securityPrint.html 271 ●●●●● patch | view | raw | blame | history
src/api/examapi/applyexam.js 35 ●●●●● patch | view | raw | blame | history
src/api/performance/performance.js 27 ●●●●● patch | view | raw | blame | history
src/api/securityGuard/securityGuard.js 21 ●●●●● patch | view | raw | blame | history
src/api/system/user.js 4 ●●●● patch | view | raw | blame | history
src/api/talk/talk.js 50 ●●●●● patch | view | raw | blame | history
src/api/trainingRegistration/trainingRegistration.js 11 ●●●●● patch | view | raw | blame | history
src/router/views/index.js 1686 ●●●● patch | view | raw | blame | history
src/views/applydetailed/index.vue 1263 ●●●● patch | view | raw | blame | history
src/views/applydetailed/papers.vue 40 ●●●●● patch | view | raw | blame | history
src/views/applyexam/index.vue 305 ●●●● patch | view | raw | blame | history
src/views/applyexam/papers.vue 2 ●●● patch | view | raw | blame | history
src/views/companyApply/index.vue 634 ●●●●● patch | view | raw | blame | history
src/views/desk/notice.vue 1 ●●●● patch | view | raw | blame | history
src/views/dispatch/dispatchChildoperable.vue 28 ●●●●● patch | view | raw | blame | history
src/views/dispatch/dispatchChildoperableSee.vue 31 ●●●● patch | view | raw | blame | history
src/views/exam/papers.vue 39 ●●●●● patch | view | raw | blame | history
src/views/exam/performance.vue 48 ●●●● patch | view | raw | blame | history
src/views/exam/singleperformance.vue 81 ●●●●● patch | view | raw | blame | history
src/views/people/expression.vue 39 ●●●●● patch | view | raw | blame | history
src/views/people/job.vue 8 ●●●● patch | view | raw | blame | history
src/views/resource/uploadNotice.vue 8 ●●●●● patch | view | raw | blame | history
src/views/securityApply/index.vue 144 ●●●●● patch | view | raw | blame | history
src/views/securityEquipment/car.js 18 ●●●● patch | view | raw | blame | history
src/views/securityEquipment/car.vue 77 ●●●●● patch | view | raw | blame | history
src/views/securityEquipment/equipments.js 8 ●●●● patch | view | raw | blame | history
src/views/securityEquipment/equipments.vue 77 ●●●●● patch | view | raw | blame | history
src/views/securityEquipment/gun.js 6 ●●●● patch | view | raw | blame | history
src/views/securityEquipment/gun.vue 8 ●●●● patch | view | raw | blame | history
src/views/securityGuard/securityGuard.vue 81 ●●●●● patch | view | raw | blame | history
src/views/securityGuard/securityGuardDetail.vue 22 ●●●● patch | view | raw | blame | history
src/views/securityUnit/data.js 12 ●●●● patch | view | raw | blame | history
src/views/securityUnit/index.vue 71 ●●●●● patch | view | raw | blame | history
src/views/securityUnitChild/data.js 4 ●●● patch | view | raw | blame | history
src/views/securityUnitChild/index.vue 246 ●●●● patch | view | raw | blame | history
src/views/talk/talk.vue 266 ●●●●● patch | view | raw | blame | history
src/views/traincompany/index.vue 63 ●●●● patch | view | raw | blame | history
vue.config.js 8 ●●●● patch | view | raw | blame | history
public/img/bazbj.png
public/img/security.png
public/papersApply.html
New file
@@ -0,0 +1,156 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        #table {
            color: #000;
            display: flex;
            align-items: center;
            justify-content: center;
            flex-direction: column;
        }
        .user-info-table {
            margin-top: 30px;
            width: 90%;
            height: 90%;
            border: 1px solid #000;
            background-color: #fff;
        }
        .user-info-tr {
            height: 50px;
            font-size: 14px;
        }
        .avatar {
            width: 140px;
            height: 190px;
        }
        .title {
            margin-top: 20px;
            font-size: 28px;
            font-weight: 500;
        }
        .avatar {
            width: 140px;
            height: 190px;
        }
        .my-picture {
            width: 150px;
            /* height: 200px; */
        }
    </style>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
</head>
<body>
    <div>
        <div>
            <button onclick="preview(1)">打印</button>
        </div>
        <!--startprint-->
        <div id="table">
            <!-- <span class="title">准考证信息</span>
            <table class="user-info-table" border="1px" align="center" cellspacing="0" cellpadding="10">
            </table>
        </div> -->
            <!--endprint-->
        </div>
        <script>
            var getData = function(name) {
                var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
                var r = window.location.search.substr(1).match(reg);
                if (r != null) return unescape(r[2]);
                return null;
            };
            var id = JSON.parse(getData("data")).examId;
            var name = JSON.parse(getData("data")).name;
            // console.log(JSON.parse(getData("data")), 111);
            axios.get('http://localhost:81/apply/getApplyDetailList?examId=' + id).then(function(res) {
                var data = res.data;
                var list = data.applyList;
                console.log(data, 123);
                var str = `<span class="title">${data.examName}</span>
                    <table class="user-info-table" border="1px" align="center" cellspacing="0" cellpadding="10">
                        <tr class="user-info-tr">
                            <td width="80px">姓名</td>
                            <td width="60px">性别</td>
                            <td width="120px">准考证号</td>
                            <td width="160px">身份证号</td>
                            <td width="300px">单位名称</td>
                            <td width="100px">报考证件</td>
                            <td width="200px">报名时间</td>
                        </tr>`
                for (var k in list) {
                    str += `
                            <tr class="user-info-tr">
                            <td>${list[k].realName}</td>
                            <td>${list[k].sex==1?"男":(data.sex==2?"女":"")}</td>
                            <td>${list[k].candidateNo}</td>
                            <td>${list[k].idCardNo}</td>
                            <td>${list[k].deptName}</td>
                            <td>${list[k].applyCard}</td>
                            <td>${list[k].applyTime}</td>
                        </tr>
                            `
                }
                // <tr class="user-info-tr">
                //     <td></td>
                //     <td></td>
                //     <td></td>
                //     <td></td>
                //     <td></td>
                //     <td></td>
                //     <td></td>
                // </tr>
                str += `      <tr class="user-info-tr">
                            <td>总人数</td>
                            <td colspan="6">${data.num}人</td>
                        </tr>
                    </table>
                </div>`
                var dom = $('#table');
                dom.empty();
                dom.append(str);
            })
            function preview(oper) {
                if (oper < 10) {
                    bdhtml = window.document.body.innerHTML;
                    // 打印开始的标志
                    sprnstr = "<!--startprint-->";
                    // 打印结束的标志
                    eprnstr = "<!--endprint-->";
                    // 从打印开始的位置截取到末尾
                    prnhtml = bdhtml.substr(bdhtml.indexOf(sprnstr));
                    // 从开始截取到打印结束的位置
                    prnhtml = prnhtml.substring(0, prnhtml.indexOf(eprnstr));
                    // 替换html
                    window.document.body.innerHTML = prnhtml;
                    // 打印
                    window.print();
                    window.document.body.innerHTML = bdhtml;
                } else {
                    window.print();
                }
            }
        </script>
</body>
</html>
public/securityPrint.html
New file
@@ -0,0 +1,271 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        .fo {
            width: 100%;
            height: 800px;
            position: absolute;
            /* display: flex; */
            align-items: center;
            justify-content: center;
            background-color: #666666;
        }
        .print {
            position: absolute;
            left: 20px;
            top: 10px;
        }
        #table {
            margin-left: 35%;
            color: #000;
            position: fixed;
            align-items: center;
            justify-content: center;
            flex-direction: column;
            width: 400px;
            height: 250px;
            border-radius: 7px;
            margin-top: -250px;
            background: url(./img/bazbj.png) no-repeat;
            background-size: 100% 100%;
        }
        #table1 {
            margin-left: 35%;
            color: #000;
            width: 400px;
            height: 250px;
            background-color: #fff;
            border-radius: 7px;
            margin-top: 200px;
        }
        .user-info-table {
            margin-top: 30px;
            width: 90%;
            height: 90%;
            border: 1px solid #000;
            background-color: #fff;
        }
        .table-top {
            width: 100%;
            height: 20%;
            margin-top: 20px;
            text-align: center;
            font-size: 32px;
            letter-spacing: 10px;
        }
        .table-center {
            font-size: 14px;
            width: 100%;
            height: 60%;
        }
        .table-center-right {
            width: 70px;
            height: 70px;
            line-height: 70px;
            margin-left: 290px;
            margin-top: -100px;
            border-radius: 100px;
            /* border: 1px solid; */
            text-align: center;
        }
        .table-center-right img {
            width: 70px;
            display: inline-block;
            vertical-align: middle;
        }
        .security-info {
            margin-left: 20px;
            margin-top: 18px;
        }
        .table-down {
            font-size: 14px;
            width: 100%;
            margin-top: -40px;
        }
        .paper-unit {
            margin-left: 20px;
            float: left;
        }
        .paper-date {
            margin-left: 215px;
        }
        .user-info-tr {
            height: 50px;
            font-size: 14px;
        }
        .avatar {
            width: 140px;
            height: 190px;
        }
        .title {
            margin-top: 20px;
            font-size: 28px;
            font-weight: 500;
        }
        .avatar {
            width: 140px;
            height: 190px;
        }
        .my-picture {
            width: 150px;
            /* height: 200px; */
        }
    </style>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
</head>
<body>
    <div class="fo">
        <div>
            <button onclick="preview(1)" class="print">打印</button>
        </div>
        <!--startprint-->
        <div id="print">
            <!-- <div id="table1"></div>
            <div id="table">
                <div class="table-top">
                    <span>保安员证</span>
                </div>
                <div class="table-center">
                    <div class="table-center-left">
                        <div class="security-info">
                            <span>姓名:</span>
                            <span>张易得</span>
                        </div>
                        <div class="security-info">
                            <span>性别:</span>
                            <span>男</span>
                        </div>
                        <div class="security-info">
                            <span>编号:</span>
                            <span>赣洪202100001</span>
                        </div>
                    </div>
                    <div class="table-center-right">
                        <img src="./img/security.png">
                    </div>
                </div>
                <div class="table-down">
                    <div class="paper-unit">
                        <span>发证机关:</span>
                        <span>南昌市公安局</span>
                    </div>
                    <div class="paper-date">
                        <span>发证日期:</span>
                        <span>2021年8月1日</span>
                    </div>
                </div>
            </div>
        </div> -->
            <!--endprint-->
        </div>
    </div>
    <script>
        var getData = function(name) {
            var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
            var r = window.location.search.substr(1).match(reg);
            if (r != null) return unescape(r[2]);
            return null;
        };
        var id = JSON.parse(getData("data")).userId;
        var name = JSON.parse(getData("data")).name;
        console.log(getData("data"), 123);
        var securityName = JSON.parse(getData("data")).securityName;
        // console.log(JSON.parse(getData("data")), 111);
        axios.get('http://localhost:81/apply/userDetail?id=' + id).then(function(res) {
            var data = res.data.data;
            var str = `<div id="table1"></div>
            <div id="table">
                <div class="table-top">
                    <span>保安员证</span>
                </div>
                <div class="table-center">
                    <div class="table-center-left">
                        <div class="security-info">
                            <span>姓名:</span>
                            <span>&nbsp;${data.realName}</span>
                        </div>
                        <div class="security-info">
                            <span>性别:</span>
                            <span>&nbsp;${data.sex==1?"男":(data.sex==2?"女":"")}</span>
                        </div>
                        <div class="security-info">
                            <span>编号:</span>
                            <span>&nbsp;${data.securitynumber}</span>
                        </div>
                    </div>
                    <div class="table-center-right">
                        <img src="${data.myPicture}">
                    </div>
                </div>
                <div class="table-down">
                    <div class="paper-unit">
                        <span>发证机关:</span>
                        <span>&nbsp;南昌市公安局</span>
                    </div>
                    <div class="paper-date">
                        <span>发证日期:</span>
                        <span>&nbsp;</span>
                    </div>
                </div>
            </div>
        </div>`
            var dom = $('#print');
            dom.empty();
            dom.append(str);
        })
        function preview(oper) {
            if (oper < 10) {
                bdhtml = window.document.body.innerHTML;
                // 打印开始的标志
                sprnstr = "<!--startprint-->";
                // 打印结束的标志
                eprnstr = "<!--endprint-->";
                // 从打印开始的位置截取到末尾
                prnhtml = bdhtml.substr(bdhtml.indexOf(sprnstr));
                // 从开始截取到打印结束的位置
                prnhtml = prnhtml.substring(0, prnhtml.indexOf(eprnstr));
                // 替换html
                window.document.body.innerHTML = prnhtml;
                // 打印
                window.print();
                window.document.body.innerHTML = bdhtml;
            } else {
                window.print();
            }
        }
    </script>
</body>
</html>
</html>
src/api/examapi/applyexam.js
@@ -15,7 +15,16 @@
export const addApply = (row) => {
    return request({
        url: '/api/apply/submit',
        url: '/api/apply/save',
        method: 'post',
        data: row
    })
}
export const cancelApply = (row) => {
    return request({
        url: '/api/apply/cancelApply',
        method: 'post',
        data: row
    })
@@ -41,6 +50,19 @@
    })
}
export const addExam = (ids, examTime, startTime, endTime) => {
    return request({
        url: '/api/apply/batchExam',
        method: 'post',
        params: {
            ids,
            examTime,
            startTime,
            endTime
        }
    })
}
@@ -52,4 +74,15 @@
            id,
        }
    })
}
export const getSecurityApplyInfo = (id, userId) => {
    return request({
        url: '/api/apply/getSecurityApplyDetail',
        method: 'get',
        params: {
            id,
            userId
        }
    })
}
src/api/performance/performance.js
@@ -11,16 +11,25 @@
        }
    })
}
// export const getPerformanceInfo = (securityid) => {
//     return request({
//         url: '/api/performance/page',
//         method: 'get',
//         params: {
//             securityid
//         }
//     })
// }
export const getPerformanceInfo = (id) => {
    return request({
        url: '/api/performance/detail',
        method: 'get',
        params: {
            id
        }
    })
}
// export const getPerformanceInfo = (securityid) => {
//     return request({
//         url: '/api/performance/detail',
//         method: 'get',
//         params: {
//             securityid
//         }
//     })
// }
export const add = (row) => {
    return request({
src/api/securityGuard/securityGuard.js
@@ -12,6 +12,18 @@
    })
}
export const getListApply = (current, size, params) => {
    return request({
        url: '/api/blade-user/page-security-apply',
        method: 'get',
        params: {
            ...params,
            current,
            size
        }
    })
}
export const remove = (ids) => {
    return request({
        url: '/api/blade-user/remove',
@@ -30,6 +42,15 @@
    })
}
export const addBatchApply = (row) => {
    return request({
        url: '/api/apply/batchApply',
        method: 'post',
        data: row
    })
}
export const update = (row) => {
    return request({
        url: '/api/blade-user/update',
src/api/system/user.js
@@ -80,12 +80,12 @@
    })
}
export const getUserPractitionersInfo = (cardid) => {
export const getUserPractitionersInfo = (securityid) => {
    return request({
        url: '/api/experience/selectExperienceInfo',
        method: 'get',
        params: {
            cardid,
            securityid,
        }
    })
}
src/api/talk/talk.js
New file
@@ -0,0 +1,50 @@
import request from '@/router/axios';
export const getList = (current, size, params) => {
  return request({
    url: '/api/blade-talk/talk/page',
    method: 'get',
    params: {
      ...params,
      current,
      size,
    }
  })
}
export const getDetail = (id) => {
  return request({
    url: '/api/blade-talk/talk/detail',
    method: 'get',
    params: {
      id
    }
  })
}
export const remove = (ids) => {
  return request({
    url: '/api/blade-talk/talk/remove',
    method: 'post',
    params: {
      ids,
    }
  })
}
export const add = (row) => {
  return request({
    url: '/api/blade-talk/talk/submit',
    method: 'post',
    data: row
  })
}
export const update = (row) => {
  return request({
    url: '/api/blade-talk/talk/submit',
    method: 'post',
    data: row
  })
}
src/api/trainingRegistration/trainingRegistration.js
@@ -14,7 +14,16 @@
export const adddata = (row) => {
    return request({
        url: '/api/trainingRegistration/submit',
        url: '/api/trainingRegistration/save',
        method: 'post',
        data: row
    })
}
export const cancelTrain = (row) => {
    return request({
        url: '/api/trainingRegistration/cancelTrain',
        method: 'post',
        data: row
    })
src/router/views/index.js
@@ -1,829 +1,873 @@
import Layout from '@/page/index/'
export default [{
    path: '/wel',
    component: Layout,
    redirect: '/wel/index',
    children: [{
        path: 'index',
        name: '首页',
        meta: {
            i18n: 'dashboard'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/wel/index')
        path: '/wel',
        component: Layout,
        redirect: '/wel/index',
        children: [{
            path: 'index',
            name: '首页',
            meta: {
                i18n: 'dashboard'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/wel/index')
        }, {
            path: 'dashboard',
            name: '控制台',
            meta: {
                i18n: 'dashboard',
                menu: false,
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/wel/dashboard')
        }]
    }, {
        path: 'dashboard',
        name: '控制台',
        meta: {
            i18n: 'dashboard',
            menu: false,
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/wel/dashboard')
    }]
}, {
    path: '/test',
    component: Layout,
    redirect: '/test/index',
    children: [{
        path: 'index',
        name: '测试页',
        meta: {
            i18n: 'test'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/util/test')
    }]
}, {
    path: '/dict-horizontal',
    component: Layout,
    redirect: '/dict-horizontal/index',
    children: [{
        path: 'index',
        name: '字典管理',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/util/demo/dict-horizontal')
    }]
}, {
    path: '/dict-vertical',
    component: Layout,
    redirect: '/dict-vertical/index',
    children: [{
        path: 'index',
        name: '字典管理',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/util/demo/dict-vertical')
    }]
}, {
    path: '/info',
    component: Layout,
    redirect: '/info/index',
    children: [{
        path: 'index',
        name: '个人信息',
        meta: {
            i18n: 'info'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/system/userinfo')
    }]
}, {
    path: '/work/process/leave',
    component: Layout,
    redirect: '/work/process/leave/form',
    children: [{
        path: 'form/:processDefinitionId',
        name: '请假流程',
        meta: {
            i18n: 'work'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/work/process/leave/form')
        path: '/test',
        component: Layout,
        redirect: '/test/index',
        children: [{
            path: 'index',
            name: '测试页',
            meta: {
                i18n: 'test'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/util/test')
        }]
    }, {
        path: 'handle/:taskId/:processInstanceId/:businessId',
        name: '处理请假流程',
        meta: {
            i18n: 'work'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/work/process/leave/handle')
        path: '/dict-horizontal',
        component: Layout,
        redirect: '/dict-horizontal/index',
        children: [{
            path: 'index',
            name: '字典管理',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/util/demo/dict-horizontal')
        }]
    }, {
        path: 'detail/:processInstanceId/:businessId',
        name: '请假流程详情',
        meta: {
            i18n: 'work'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/work/process/leave/detail')
    }]
}, {
    path: '/securityAnalysis',
    component: Layout,
    redirect: '/securityAnalysis/index',
    children: [{
        path: 'index',
        name: '保安单位情况智能分析',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/securityAnalysis/index')
    }]
}, {
    path: '/recruitmentManagement',
    component: Layout,
    redirect: '/recruitmentManagement/index',
    children: [{
        path: 'index',
        name: '招聘管理',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/recruitmentManagement/index')
    }]
}, {
    path: '/securityUnit',
    component: Layout,
    redirect: '/securityUnit/index',
    children: [{
        path: 'index',
        name: '保安单位信息',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/securityUnit/index')
    }]
}, {
    path: '/securityGuard',
    component: Layout,
    redirect: '/securityGuard/securityGuard',
    children: [{
        path: 'index',
        name: '保安员查询',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/securityGuard/securityGuard')
    }]
}, {
    path: '/securityGuardDetail',
    component: Layout,
    redirect: '/securityGuardDetail/index',
    children: [{
        path: 'index',
        name: '保安员详情',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/securityGuard/securityGuardDetail')
    }]
}, {
    path: '/resource',
    component: Layout,
    redirect: '/resource/attach',
    children: [{
        path: 'attach',
        name: '附件上传',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/resource/attach')
    }]
}, {
    path: '/securityUnitChild',
    component: Layout,
    redirect: '/securityUnitChild/index',
    children: [{
        path: 'index',
        name: '保安单位详情',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/securityUnitChild/index')
    }]
}, {
    path: '/securityGuard',
    component: Layout,
    redirect: '/securityGuard/securityGuard',
    children: [{
        path: 'index',
        name: '保安员管理',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/securityGuard/securityGuard')
    }]
},
// {
//     path: '/dispatch/dispatch',
//     component: Layout,
//     redirect: '/dispatch/dispatch',
//     children: [{
//         path: 'index',
//         name: '派遣服务管理',
//         meta: {
//             i18n: 'dict'
//         },
//         component: () =>
//             import( /* webpackChunkName: "views" */ '@/views/dispatch/dispatch')
//     }]
// },
{
    path: '/desk',
    component: Layout,
    redirect: '/desk/notice',
    children: [{
        path: 'index',
        name: '通知公告',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/desk/notice')
    }]
},
{
    path: '/workreport',
    component: Layout,
    redirect: '/workreport/workreport',
    children: [{
        path: 'workreport',
        name: '发起的汇报',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/workreport/workreport')
    }]
},
{
    path: '/workreport',
    component: Layout,
    redirect: '/workreport/workreply',
    children: [{
        path: 'workreply',
        name: '接收的汇报',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/workreport/workreply')
    }]
}, {
    path: '/resource',
    component: Layout,
    redirect: '/resource/attachCopy',
    children: [{
        path: 'attachCopy',
        name: '保安单位附件上传',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/resource/attachCopy')
    }]
},
// {
//     path: '/dispatch',
//     component: Layout,
//     redirect: '/dispatch/dispatch',
//     children: [{
//         path: 'dispatch',
//         name: '派遣单位管理',
//         meta: {
//             i18n: 'dispatch'
//         },
//         component: () =>
//             import( /* webpackChunkName: "views" */ '@/views/dispatch/dispatch')
//     }, {
//         path: 'dispatchChildoperable',
//         name: '派遣记录管理',
//         meta: {
//             i18n: 'dispatch'
//         },
//         component: () =>
//             import( /* webpackChunkName: "views" */ '@/views/dispatch/dispatchChildoperable')
//     }]
// },
// {
//     path: '/dispatchChild',
//     component: Layout,
//     redirect: '/dispatchChild/index',
//     children: [{
//         path: 'index',
//         name: '派遣服务记录',
//         meta: {
//             i18n: 'dict'
//         },
//         component: () =>
//             import( /* webpackChunkName: "views" */ '@/views/dispatchChild/index')
//     }]
// },
// {
//     path: '/equipments',
//     component: Layout,
//     redirect: '/equipments/index',
//     children: [{
//         path: 'index',
//         name: '保安公司装备管理',
//         meta: {
//             i18n: 'dict'
//         },
//         component: () =>
//             import( /* webpackChunkName: "views" */ '@/views/equipments/index')
//     }]
// }, {
//     path: '/car',
//     component: Layout,
//     redirect: '/car/index',
//     children: [{
//         path: 'index',
//         name: '保安公司车辆管理',
//         meta: {
//             i18n: 'dict'
//         },
//         component: () =>
//             import( /* webpackChunkName: "views" */ '@/views/car/index')
//     }]
// }, {
//     path: '/gun',
//     component: Layout,
//     redirect: '/gun/index',
//     children: [{
//         path: 'index',
//         name: '保安公司枪支管理',
//         meta: {
//             i18n: 'dict'
//         },
//         component: () =>
//             import( /* webpackChunkName: "views" */ '@/views/gun/index')
//     }]
// },
// {
//     path: '/securityEquipment',
//     component: Layout,
//     redirect: '/securityEquipment',
//     children: [{
//         path: 'equipments',
//         name: '装备管理',
//         meta: {
//             i18n: 'securityEquipment'
//         },
//         component: () =>
//             import( /* webpackChunkName: "views" */ '@/views/securityEquipment/equipments')
//     }, {
//         path: 'car',
//         name: '车辆管理',
//         meta: {
//             i18n: 'car'
//         },
//         component: () =>
//             import( /* webpackChunkName: "views" */ '@/views/securityEquipment/car')
//     }, {
//         path: 'gun',
//         name: '车辆管理',
//         meta: {
//             i18n: 'gun'
//         },
//         component: () =>
//             import( /* webpackChunkName: "views" */ '@/views/securityEquipment/gun')
//     }]
// },
{
    path: '/trainingRegistration',
    component: Layout,
    redirect: '/trainingRegistration/index',
    children: [{
        path: 'index',
        name: '保安培训报名管理',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/trainingRegistration/index')
    }]
}, {
    path: '/securityAnalysis',
    component: Layout,
    redirect: '/securityAnalysis/index',
    children: [{
        path: 'index',
        name: '保安单位情况智能分析',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/securityAnalysis/index')
    }]
}, {
    path: '/recruitmentManagement',
    component: Layout,
    redirect: '/recruitmentManagement/index',
    children: [{
        path: 'index',
        name: '招聘管理',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/recruitmentManagement/index')
    }]
}, {
    path: '/securityUnit',
    component: Layout,
    redirect: '/securityUnit/index',
    children: [{
        path: 'index',
        name: '保安单位信息',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/securityUnit/index')
    }]
}, {
    path: '/securityGuard',
    component: Layout,
    redirect: '/securityGuard/securityGuard',
    children: [{
        path: 'index',
        name: '保安员查询',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/securityGuard/securityGuard')
    }]
}, {
    path: '/securityGuardDetail',
    component: Layout,
    redirect: '/securityGuardDetail/index',
    children: [{
        path: 'index',
        name: '保安员详情',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/securityGuard/securityGuardDetail')
    }]
}, {
    path: '/resource',
    component: Layout,
    redirect: '/resource/attach',
    children: [{
        path: 'attach',
        name: '附件上传',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/resource/attach')
    }]
}, {
    path: '/securityUnitChild',
    component: Layout,
    redirect: '/securityUnitChild/index',
    children: [{
        path: 'index',
        name: '保安单位详情',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/securityUnitChild/index')
    }]
}, {
    path: '/securityGuard',
    component: Layout,
    redirect: '/securityGuard/securityGuard',
    children: [{
        path: 'index',
        name: '保安员管理',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/securityGuard/securityGuard')
    }]
},
// {
//     path: '/dispatch/dispatch',
//     component: Layout,
//     redirect: '/dispatch/dispatch',
//     children: [{
//         path: 'index',
//         name: '派遣服务管理',
//         meta: {
//             i18n: 'dict'
//         },
//         component: () =>
//             import( /* webpackChunkName: "views" */ '@/views/dispatch/dispatch')
//     }]
// },
{
    path: '/desk',
    component: Layout,
    redirect: '/desk/notice',
    children: [{
        path: 'index',
        name: '通知公告',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/desk/notice')
    }]
}, {
    path: '/dispatch',
    component: Layout,
    redirect: '/dispatch/dispatch',
    children: [{
        path: 'dispatch',
        name: '派遣单位管理',
        meta: {
            i18n: 'dispatch'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/dispatch/dispatch')
        path: '/dict-vertical',
        component: Layout,
        redirect: '/dict-vertical/index',
        children: [{
            path: 'index',
            name: '字典管理',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/util/demo/dict-vertical')
        }]
    }, {
        path: 'dispatchChildoperable',
        name: '派遣记录管理',
        meta: {
            i18n: 'dispatch'
        },
        path: '/info',
        component: Layout,
        redirect: '/info/index',
        children: [{
            path: 'index',
            name: '个人信息',
            meta: {
                i18n: 'info'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/system/userinfo')
        }]
    }, {
        path: '/work/process/leave',
        component: Layout,
        redirect: '/work/process/leave/form',
        children: [{
            path: 'form/:processDefinitionId',
            name: '请假流程',
            meta: {
                i18n: 'work'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/work/process/leave/form')
        }, {
            path: 'handle/:taskId/:processInstanceId/:businessId',
            name: '处理请假流程',
            meta: {
                i18n: 'work'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/work/process/leave/handle')
        }, {
            path: 'detail/:processInstanceId/:businessId',
            name: '请假流程详情',
            meta: {
                i18n: 'work'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/work/process/leave/detail')
        }]
    }, {
        path: '/securityAnalysis',
        component: Layout,
        redirect: '/securityAnalysis/index',
        children: [{
            path: 'index',
            name: '保安单位情况智能分析',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/securityAnalysis/index')
        }]
    }, {
        path: '/recruitmentManagement',
        component: Layout,
        redirect: '/recruitmentManagement/index',
        children: [{
            path: 'index',
            name: '招聘管理',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/recruitmentManagement/index')
        }]
    }, {
        path: '/securityUnit',
        component: Layout,
        redirect: '/securityUnit/index',
        children: [{
            path: 'index',
            name: '保安单位信息',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/securityUnit/index')
        }]
    }, {
        path: '/securityGuard',
        component: Layout,
        redirect: '/securityGuard/securityGuard',
        children: [{
            path: 'index',
            name: '保安员查询',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/securityGuard/securityGuard')
        }]
    }, {
        path: '/securityGuardDetail',
        component: Layout,
        redirect: '/securityGuardDetail/index',
        children: [{
            path: 'index',
            name: '保安员详情',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/securityGuard/securityGuardDetail')
        }]
    }, {
        path: '/resource',
        component: Layout,
        redirect: '/resource/attach',
        children: [{
            path: 'attach',
            name: '附件上传',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/resource/attach')
        }]
    }, {
        path: '/securityUnitChild',
        component: Layout,
        redirect: '/securityUnitChild/index',
        children: [{
            path: 'index',
            name: '保安单位详情',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/securityUnitChild/index')
        }]
    }, {
        path: '/securityGuard',
        component: Layout,
        redirect: '/securityGuard/securityGuard',
        children: [{
            path: 'index',
            name: '保安员管理',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/securityGuard/securityGuard')
        }]
    },
    // {
    //     path: '/dispatch/dispatch',
    //     component: Layout,
    //     redirect: '/dispatch/dispatch',
    //     children: [{
    //         path: 'index',
    //         name: '派遣服务管理',
    //         meta: {
    //             i18n: 'dict'
    //         },
    //         component: () =>
    //             import( /* webpackChunkName: "views" */ '@/views/dispatch/dispatch')
    //     }]
    // },
    {
        path: '/desk',
        component: Layout,
        redirect: '/desk/notice',
        children: [{
            path: 'index',
            name: '通知公告',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/desk/notice')
        }]
    },
    {
        path: '/talk',
        component: Layout,
        redirect: '/talk/talk',
        children: [{
            path: 'index',
            name: '心里咨询',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/talk/talk')
        }]
    },
    {
        path: '/workreport',
        component: Layout,
        redirect: '/workreport/workreport',
        children: [{
            path: 'workreport',
            name: '发起的汇报',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/workreport/workreport')
        }]
    },
    {
        path: '/workreport',
        component: Layout,
        redirect: '/workreport/workreply',
        children: [{
            path: 'workreply',
            name: '接收的汇报',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/workreport/workreply')
        }]
    }, {
        path: '/resource',
        component: Layout,
        redirect: '/resource/attachCopy',
        children: [{
            path: 'attachCopy',
            name: '保安单位附件上传',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/resource/attachCopy')
        }]
    },
    // {
    //     path: '/dispatch',
    //     component: Layout,
    //     redirect: '/dispatch/dispatch',
    //     children: [{
    //         path: 'dispatch',
    //         name: '派遣单位管理',
    //         meta: {
    //             i18n: 'dispatch'
    //         },
    //         component: () =>
    //             import( /* webpackChunkName: "views" */ '@/views/dispatch/dispatch')
    //     }, {
    //         path: 'dispatchChildoperable',
    //         name: '派遣记录管理',
    //         meta: {
    //             i18n: 'dispatch'
    //         },
    //         component: () =>
    //             import( /* webpackChunkName: "views" */ '@/views/dispatch/dispatchChildoperable')
    //     }]
    // },
    // {
    //     path: '/dispatchChild',
    //     component: Layout,
    //     redirect: '/dispatchChild/index',
    //     children: [{
    //         path: 'index',
    //         name: '派遣服务记录',
    //         meta: {
    //             i18n: 'dict'
    //         },
    //         component: () =>
    //             import( /* webpackChunkName: "views" */ '@/views/dispatchChild/index')
    //     }]
    // },
    // {
    //     path: '/equipments',
    //     component: Layout,
    //     redirect: '/equipments/index',
    //     children: [{
    //         path: 'index',
    //         name: '保安公司装备管理',
    //         meta: {
    //             i18n: 'dict'
    //         },
    //         component: () =>
    //             import( /* webpackChunkName: "views" */ '@/views/equipments/index')
    //     }]
    // }, {
    //     path: '/car',
    //     component: Layout,
    //     redirect: '/car/index',
    //     children: [{
    //         path: 'index',
    //         name: '保安公司车辆管理',
    //         meta: {
    //             i18n: 'dict'
    //         },
    //         component: () =>
    //             import( /* webpackChunkName: "views" */ '@/views/car/index')
    //     }]
    // }, {
    //     path: '/gun',
    //     component: Layout,
    //     redirect: '/gun/index',
    //     children: [{
    //         path: 'index',
    //         name: '保安公司枪支管理',
    //         meta: {
    //             i18n: 'dict'
    //         },
    //         component: () =>
    //             import( /* webpackChunkName: "views" */ '@/views/gun/index')
    //     }]
    // },
    // {
    //     path: '/securityEquipment',
    //     component: Layout,
    //     redirect: '/securityEquipment',
    //     children: [{
    //         path: 'equipments',
    //         name: '装备管理',
    //         meta: {
    //             i18n: 'securityEquipment'
    //         },
    //         component: () =>
    //             import( /* webpackChunkName: "views" */ '@/views/securityEquipment/equipments')
    //     }, {
    //         path: 'car',
    //         name: '车辆管理',
    //         meta: {
    //             i18n: 'car'
    //         },
    //         component: () =>
    //             import( /* webpackChunkName: "views" */ '@/views/securityEquipment/car')
    //     }, {
    //         path: 'gun',
    //         name: '车辆管理',
    //         meta: {
    //             i18n: 'gun'
    //         },
    //         component: () =>
    //             import( /* webpackChunkName: "views" */ '@/views/securityEquipment/gun')
    //     }]
    // },
    // {
    //     path: '/trainingRegistration',
    //     component: Layout,
    //     redirect: '/trainingRegistration/index',
    //     children: [{
    //         path: 'index',
    //         name: '保安培训报名管理',
    //         meta: {
    //             i18n: 'dict'
    //         },
    //         component: () =>
    //             import ( /* webpackChunkName: "views" */ '@/views/trainingRegistration/index')
    //     }]
    // },
    {
        path: '/securityAnalysis',
        component: Layout,
        redirect: '/securityAnalysis/index',
        children: [{
            path: 'index',
            name: '保安单位情况智能分析',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/securityAnalysis/index')
        }]
    }, {
        path: '/recruitmentManagement',
        component: Layout,
        redirect: '/recruitmentManagement/index',
        children: [{
            path: 'index',
            name: '招聘管理',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/recruitmentManagement/index')
        }]
    }, {
        path: '/securityUnit',
        component: Layout,
        redirect: '/securityUnit/index',
        children: [{
            path: 'index',
            name: '保安单位信息',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/securityUnit/index')
        }]
    }, {
        path: '/securityGuard',
        component: Layout,
        redirect: '/securityGuard/securityGuard',
        children: [{
            path: 'index',
            name: '保安员查询',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/securityGuard/securityGuard')
        }]
    }, {
        path: '/securityGuardDetail',
        component: Layout,
        redirect: '/securityGuardDetail/index',
        children: [{
            path: 'index',
            name: '保安员详情',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/securityGuard/securityGuardDetail')
        }]
    }, {
        path: '/resource',
        component: Layout,
        redirect: '/resource/attach',
        children: [{
            path: 'attach',
            name: '附件上传',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/resource/attach')
        }]
    }, {
        path: '/securityUnitChild',
        component: Layout,
        redirect: '/securityUnitChild/index',
        children: [{
            path: 'index',
            name: '保安单位详情',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/securityUnitChild/index')
        }]
    }, {
        path: '/securityGuard',
        component: Layout,
        redirect: '/securityGuard/securityGuard',
        children: [{
            path: 'index',
            name: '保安员管理',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/securityGuard/securityGuard')
        }]
    },
    // {
    //     path: '/dispatch/dispatch',
    //     component: Layout,
    //     redirect: '/dispatch/dispatch',
    //     children: [{
    //         path: 'index',
    //         name: '派遣服务管理',
    //         meta: {
    //             i18n: 'dict'
    //         },
    //         component: () =>
    //             import( /* webpackChunkName: "views" */ '@/views/dispatch/dispatch')
    //     }]
    // },
    {
        path: '/desk',
        component: Layout,
        redirect: '/desk/notice',
        children: [{
            path: 'index',
            name: '通知公告',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/desk/notice')
        }]
    }, {
        path: '/dispatch',
        component: Layout,
        redirect: '/dispatch/dispatch',
        children: [{
            path: 'dispatch',
            name: '派遣单位管理',
            meta: {
                i18n: 'dispatch'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/dispatch/dispatch')
        }, {
            path: 'dispatchChildoperable',
            name: '派遣记录管理',
            meta: {
                i18n: 'dispatch'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/dispatch/dispatchChildoperable')
        }]
    }, {
        path: '/dispatchChild',
        component: Layout,
        redirect: '/dispatchChild/index',
        children: [{
            path: 'index',
            name: '派遣服务记录',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/dispatchChild/index')
        }]
    }, {
        path: '/applyexam',
        redirect: '/applyexam/papers',
        component: Layout,
        children: [{
            path: 'papers',
            name: '准考证信息',
            meta: {
                i18n: 'index',
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/applyexam/papers')
        }]
    },
    // {
    //     path: '/equipments',
    //     component: Layout,
    //     redirect: '/equipments/index',
    //     children: [{
    //         path: 'index',
    //         name: '保安公司装备管理',
    //         meta: {
    //             i18n: 'dict'
    //         },
    //         component: () =>
    //             import( /* webpackChunkName: "views" */ '@/views/equipments/index')
    //     }]
    // }, {
    //     path: '/car',
    //     component: Layout,
    //     redirect: '/car/index',
    //     children: [{
    //         path: 'index',
    //         name: '保安公司车辆管理',
    //         meta: {
    //             i18n: 'dict'
    //         },
    //         component: () =>
    //             import( /* webpackChunkName: "views" */ '@/views/car/index')
    //     }]
    // }, {
    //     path: '/gun',
    //     component: Layout,
    //     redirect: '/gun/index',
    //     children: [{
    //         path: 'index',
    //         name: '保安公司枪支管理',
    //         meta: {
    //             i18n: 'dict'
    //         },
    //         component: () =>
    //             import( /* webpackChunkName: "views" */ '@/views/gun/index')
    //     }]
    // },
    // {
    //     path: '/securityEquipment',
    //     component: Layout,
    //     redirect: '/securityEquipment',
    //     children: [{
    //         path: 'equipments',
    //         name: '装备管理',
    //         meta: {
    //             i18n: 'securityEquipment'
    //         },
    //         component: () =>
    //             import( /* webpackChunkName: "views" */ '@/views/securityEquipment/equipments')
    //     }, {
    //         path: 'car',
    //         name: '车辆管理',
    //         meta: {
    //             i18n: 'car'
    //         },
    //         component: () =>
    //             import( /* webpackChunkName: "views" */ '@/views/securityEquipment/car')
    //     }, {
    //         path: 'gun',
    //         name: '车辆管理',
    //         meta: {
    //             i18n: 'gun'
    //         },
    //         component: () =>
    //             import( /* webpackChunkName: "views" */ '@/views/securityEquipment/gun')
    //     }]
    // },
    // {
    //     path: '/trainingRegistration',
    //     component: Layout,
    //     redirect: '/trainingRegistration/index',
    //     children: [{
    //         path: 'index',
    //         name: '保安培训报名',
    //         meta: {
    //             i18n: 'dict'
    //         },
    //         component: () =>
    //             import ( /* webpackChunkName: "views" */ '@/views/trainingRegistration/index')
    //     }]
    // },
    {
        path: '/trainExam',
        component: Layout,
        redirect: '/trainExam/index',
        children: [{
            path: 'index',
            name: '考试申请',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/trainExam/index')
        }]
    },
    // {
    //     path: '/applyexam',
    //     redirect: '/applyexam/index',
    //     component: Layout,
    //     children: [{
    //         path: 'index',
    //         name: '报名考试',
    //         meta: {
    //             i18n: 'index',
    //         },
    //         component: () =>
    //             import( /* webpackChunkName: "views" */ '@/views/applyexam/index')
    //     }]
    // },
    {
        path: '/applydetailed',
        redirect: '/applydetailed/index',
        component: Layout,
        children: [{
            path: 'index',
            name: '报名清册',
            meta: {
                i18n: 'index',
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/applydetailed/index')
        }]
    },
    {
        path: '/trainApply',
        redirect: '/trainApply/index',
        component: Layout,
        children: [{
            path: 'index',
            name: '报名清册',
            meta: {
                i18n: 'index',
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/trainApply/index')
        }]
    },
    {
        path: '/startexam',
        redirect: '/startexam/index',
        component: Layout,
        children: [{
            path: 'index',
            name: '开始考试',
            meta: {
                i18n: 'index',
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/startexam/index')
        }]
    },
    {
        path: '/titleDetails',
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/dispatch/dispatchChildoperable')
    }]
}, {
    path: '/dispatchChild',
    component: Layout,
    redirect: '/dispatchChild/index',
    children: [{
        path: 'index',
        name: '派遣服务记录',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/dispatchChild/index')
    }]
}, {
    path: '/applyexam',
    redirect: '/applyexam/papers',
    component: Layout,
    children: [{
        path: 'papers',
        name: '准考证信息',
        meta: {
            i18n: 'index',
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/applyexam/papers')
    }]
},
// {
//     path: '/equipments',
//     component: Layout,
//     redirect: '/equipments/index',
//     children: [{
//         path: 'index',
//         name: '保安公司装备管理',
//         meta: {
//             i18n: 'dict'
//         },
//         component: () =>
//             import( /* webpackChunkName: "views" */ '@/views/equipments/index')
//     }]
// }, {
//     path: '/car',
//     component: Layout,
//     redirect: '/car/index',
//     children: [{
//         path: 'index',
//         name: '保安公司车辆管理',
//         meta: {
//             i18n: 'dict'
//         },
//         component: () =>
//             import( /* webpackChunkName: "views" */ '@/views/car/index')
//     }]
// }, {
//     path: '/gun',
//     component: Layout,
//     redirect: '/gun/index',
//     children: [{
//         path: 'index',
//         name: '保安公司枪支管理',
//         meta: {
//             i18n: 'dict'
//         },
//         component: () =>
//             import( /* webpackChunkName: "views" */ '@/views/gun/index')
//     }]
// },
// {
//     path: '/securityEquipment',
//     component: Layout,
//     redirect: '/securityEquipment',
//     children: [{
//         path: 'equipments',
//         name: '装备管理',
//         meta: {
//             i18n: 'securityEquipment'
//         },
//         component: () =>
//             import( /* webpackChunkName: "views" */ '@/views/securityEquipment/equipments')
//     }, {
//         path: 'car',
//         name: '车辆管理',
//         meta: {
//             i18n: 'car'
//         },
//         component: () =>
//             import( /* webpackChunkName: "views" */ '@/views/securityEquipment/car')
//     }, {
//         path: 'gun',
//         name: '车辆管理',
//         meta: {
//             i18n: 'gun'
//         },
//         component: () =>
//             import( /* webpackChunkName: "views" */ '@/views/securityEquipment/gun')
//     }]
// },
{
    path: '/trainingRegistration',
    component: Layout,
    redirect: '/trainingRegistration/index',
    children: [{
        path: 'index',
        name: '保安培训报名',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/trainingRegistration/index')
    }]
},
{
    path: '/trainExam',
    component: Layout,
    redirect: '/trainExam/index',
    children: [{
        path: 'index',
        name: '考试申请',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/trainExam/index')
    }]
},
{
    path: '/applyexam',
    redirect: '/applyexam/index',
    component: Layout,
    children: [{
        path: 'index',
        name: '报名考试',
        meta: {
            i18n: 'index',
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/applyexam/index')
    }]
},
{
    path: '/applydetailed',
    redirect: '/applydetailed/index',
    component: Layout,
    children: [{
        path: 'index',
        name: '报名清册',
        meta: {
            i18n: 'index',
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/applydetailed/index')
    }]
},
{
    path: '/trainApply',
    redirect: '/trainApply/index',
    component: Layout,
    children: [{
        path: 'index',
        name: '报名清册',
        meta: {
            i18n: 'index',
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/trainApply/index')
    }]
},
{
    path: '/startexam',
    redirect: '/startexam/index',
    component: Layout,
    children: [{
        path: 'index',
        name: '开始考试',
        meta: {
            i18n: 'index',
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/startexam/index')
    }]
},
{
    path: '/titleDetails',
    component: () =>
        import( /* webpackChunkName: "views" */ '@/views/exam/topicDetails')
},
{
    path: '',
    component: Layout,
    children: [{
        path: '/exam/subjects/:id',
        component: () =>
            import('@/views/exam/examSubjects'),
        name: '题目管理',
        title: '题目管理',
        noCache: true
    }]
},
{
    path: '',
    component: Layout,
    children: [{
        path: '/startexam/:id',
        component: () =>
            import('@/views/startexam/index'),
        name: '开始考试',
        title: '开始考试',
        noCache: true
    }]
},
{
    path: '/traincompany',
    component: Layout,
    redirect: '/traincompany/index',
    children: [{
        path: 'index',
        name: '培训公司查询',
        meta: {
            i18n: 'dict'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/traincompany/index')
    }]
}, {
    path: '/dispatchChildoperableSee',
    component: Layout,
    redirect: '/dispatchChildoperableSee/index',
    children: [{
        path: 'index',
        name: '派遣记录',
        meta: {
            i18n: 'index'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/dispatch/dispatchChildoperableSee')
    }]
},
{
    path: '/expression',
    component: Layout,
    redirect: '/expression/index',
    children: [{
        path: 'index',
        name: '表现记录',
        meta: {
            i18n: 'index'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/people/expression')
    }]
}, {
    path: '/job',
    component: Layout,
    redirect: '/job/index',
    children: [{
        path: 'index',
        name: '从业记录',
        meta: {
            i18n: 'index'
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/people/job')
    }]
}, {
    path: '/resource',
    redirect: '/resource/uploadNotice',
    component: Layout,
    children: [{
        path: 'uploadNotice',
        name: '通知公告>附件上传',
        meta: {
            i18n: 'index',
        },
        component: () =>
            import( /* webpackChunkName: "views" */ '@/views/resource/uploadNotice')
    }]
}
]
            import ( /* webpackChunkName: "views" */ '@/views/exam/topicDetails')
    },
    {
        path: '',
        component: Layout,
        children: [{
            path: '/exam/subjects/:id',
            component: () =>
                import ('@/views/exam/examSubjects'),
            name: '题目管理',
            title: '题目管理',
            noCache: true
        }]
    },
    {
        path: '',
        component: Layout,
        children: [{
            path: '/startexam/:id',
            component: () =>
                import ('@/views/startexam/index'),
            name: '开始考试',
            title: '开始考试',
            noCache: true
        }]
    },
    // {
    //     path: '/traincompany',
    //     component: Layout,
    //     redirect: '/traincompany/index',
    //     children: [{
    //         path: 'index',
    //         name: '培训公司查询',
    //         meta: {
    //             i18n: 'dict'
    //         },
    //         component: () =>
    //             import ( /* webpackChunkName: "views" */ '@/views/traincompany/index')
    //     }]
    // },
    {
        path: '/dispatchChildoperableSee',
        component: Layout,
        redirect: '/dispatchChildoperableSee/index',
        children: [{
            path: 'index',
            name: '派遣记录',
            meta: {
                i18n: 'index'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/dispatch/dispatchChildoperableSee')
        }]
    },
    {
        path: '/expression',
        component: Layout,
        redirect: '/expression/index',
        children: [{
            path: 'index',
            name: '表现记录',
            meta: {
                i18n: 'index'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/people/expression')
        }]
    }, {
        path: '/job',
        component: Layout,
        redirect: '/job/index',
        children: [{
            path: 'index',
            name: '从业记录',
            meta: {
                i18n: 'index'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/people/job')
        }]
    }, {
        path: '/resource',
        redirect: '/resource/uploadNotice',
        component: Layout,
        children: [{
            path: 'uploadNotice',
            name: '通知公告>附件上传',
            meta: {
                i18n: 'index',
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/resource/uploadNotice')
        }]
    },
    {
        path: '/applydetailed',
        redirect: '/applydetailed/papers',
        component: Layout,
        children: [{
            path: 'papers',
            name: '报名清册信息',
            meta: {
                i18n: 'index',
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/applydetailed/papers')
        }]
    },
    {
        path: '/exam',
        redirect: '/exam/papers',
        component: Layout,
        children: [{
            path: 'papers',
            name: '保安证',
            meta: {
                i18n: 'index',
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/exam/papers')
        }]
    }
]
src/views/applydetailed/index.vue
@@ -6,655 +6,656 @@
 * menu-name 报名考试
 */
<template>
    <el-row class="morpheus-box-apply-exam-1">
        <el-col :span="24" class="hasButOne">
            <el-card>
                <div class="exam-card-body">
  <el-row class="morpheus-box-apply-exam-1">
    <el-col :span="24" class="hasButOne">
      <el-card>
        <div class="exam-card-body">
          <avue-crud
            v-model="obj"
            class="company-box"
            :option="questionBankOption"
            :search.sync="questionBankSearch"
            :table-loading="questionBankLoading"
            :data="questionBankData"
            ref="questionBankCrud"
            :page.sync="questionBankPage"
            @on-load="questionBankOnLoad"
            @selection-change="questionBankSelectionChange"
            @search-change="questionBankSearchChange"
            @search-reset="questionBankSearchReset"
            @current-change="questionBankCurrentChange"
            @size-change="questionBankSizeChange"
            @row-save="questionBankRowSave"
            @row-del="questionBankRowDel"
          >
            <!-- 自定义按钮 -->
            <template slot="menuLeft">
              <el-button
                type="warning"
                size="small"
                plain
                icon="el-icon-download"
                @click="handleExport"
                >清册生成
              </el-button>
              <el-button
                style="display:none"
                type="success"
                size="small"
                plain
                icon="el-icon-receiving"
                @click="handleImport"
                >清册打印
              </el-button>
            </template>
                    <avue-crud v-model="obj"
                               class="company-box"
                               :option="questionBankOption"
                               :search.sync="questionBankSearch"
                               :table-loading="questionBankLoading"
                               :data="questionBankData"
                               ref="questionBankCrud"
                               :page.sync="questionBankPage"
                               @on-load="questionBankOnLoad"
                               @selection-change="questionBankSelectionChange"
                               @search-change="questionBankSearchChange"
                               @search-reset="questionBankSearchReset"
                               @current-change="questionBankCurrentChange"
                               @size-change="questionBankSizeChange"
                               @row-save="questionBankRowSave"
                               @row-del="questionBankRowDel">
            <template slot-scope="{ type, row }" slot="menu">
              <el-button
                :type="type"
                size="small"
                icon="el-icon-receiving"
                :disabled="row.applyStatus == 4"
                @click="handlePrint(row)"
                >准考证打印
              </el-button>
            </template>
          </avue-crud>
                        <!-- 自定义按钮 -->
                        <template slot="menuLeft">
                            <el-button
                                type="warning"
                                size="small"
                                plain
                                icon="el-icon-download"
                                @click="handleExport"
                                >导出
                            </el-button>
                            <el-button
                                type="success"
                                size="small"
                                plain
                                icon="el-icon-upload2"
                                @click="handleImport"
                                >导入
                            </el-button>
                        </template>
                        <template slot-scope="{ type,row }" slot="menu">
                            <el-button
                            :type="type"
                            size="small"
                            icon="el-icon-receiving"
                            :disabled="row.applyStatus==4"
                            @click="handlePrint(row)"
                            >准考证打印
                            </el-button>
                        </template>
                    </avue-crud>
                    <el-dialog
                        title="清册数据导入"
                        append-to-body
                        :visible.sync="excelBox"
                        width="555px"
                        >
                        <avue-form
                            :option="excelOption"
                            v-model="excelForm"
                            :upload-after="uploadAfter"
                        >
                            <template slot="excelTemplate">
                            <el-button type="primary" @click="handleTemplate">
                                点击下载<i class="el-icon-download el-icon--right"></i>
                            </el-button>
                            </template>
                        </avue-form>
                    </el-dialog>
                </div>
            </el-card>
        </el-col>
    </el-row>
          <el-dialog
            title="清册数据导入"
            append-to-body
            :visible.sync="excelBox"
            width="555px"
          >
            <avue-form
              :option="excelOption"
              v-model="excelForm"
              :upload-after="uploadAfter"
            >
              <template slot="excelTemplate">
                <el-button type="primary" @click="handleTemplate">
                  点击下载<i class="el-icon-download el-icon--right"></i>
                </el-button>
              </template>
            </avue-form>
          </el-dialog>
        </div>
      </el-card>
    </el-col>
  </el-row>
</template>
<script>
import {
    getApplyList,
    addApply,
    remove
} from "@/api/examapi/applyexam";
import { mapState } from 'vuex'
import { getApplyList, addApply, remove } from "@/api/examapi/applyexam";
import { mapState } from "vuex";
var DIC = {
    applyStatus: [{
        label: '已报名',
        value: 2
    }, {
        label: '已取消',
        value: 4
    }]
}
  applyStatus: [
    {
      label: "已报名",
      value: 2,
    },
    {
      label: "已取消",
      value: 4,
    },
  ],
};
export default {
    data () {
  data() {
    return {
      obj: {
        name: "张三",
      },
      excelBox: false,
      questionBankOption: {
        // 操作栏多余按钮去除
        delBtn: false,
        editBtn: false,
        addBtn: false,
        selection: true,
        menu: true,
        // 导出按钮
        // excelBtn: true,
        viewBtn: false,
        return {
            obj: {
                name: '张三',
        // title: '题库',
        align: "center",
        height: "auto",
        calcHeight: 80,
        tip: false,
        searchShow: true,
        searchMenuSpan: 4,
        index: true,
        indexLabel: "序号",
        //dialogType: 'drawer',
        dialogClickModal: false,
        // 操作栏宽度
        menuWidth: 200,
        column: [
          {
            label: "保安姓名",
            prop: "userId",
            type: "tree",
            dicUrl: "",
            hide: true,
            slot: true,
            searchSpan: 4,
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
            addDisplay: true,
            // 表单新增时是否为查看模式
            addDetail: false,
            // 表单编辑时是否禁止
            editDisabled: true,
            viewDisabled: false,
            // 表单编辑时是否可见
            editDisplay: true,
            viewDisplay: false,
            // 表单编辑时是否为查看模式
            editDetail: false,
            props: {
              label: "title",
              value: "id",
            },
            excelBox: false,
            questionBankOption: {
                // 操作栏多余按钮去除
                delBtn: false,
                editBtn: false,
                addBtn: false,
                selection: true,
                menu: true,
                // 导出按钮
                // excelBtn: true,
                viewBtn: false,
                // title: '题库',
                align: 'center',
                height: 'auto',
                calcHeight: 80,
                tip: false,
                searchShow: true,
                searchMenuSpan: 4,
                index: true,
                indexLabel: '序号',
                //dialogType: 'drawer',
                dialogClickModal: false,
                // 操作栏宽度
                menuWidth: 200,
                column: [
                    {
                        label: "保安姓名",
                        prop: "userId",
                        type: 'tree',
                        dicUrl: '',
                        search: true,
                        hide:true,
                        slot: true,
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: true,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: true,
                        // 表单编辑时是否可见
                        editDisplay: true,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                        props: {
                            label: "title",
                            value: "id",
                        },
                        rules: [{
                            required: true,
                            message: "请选择保安姓名",
                            trigger: "blur"
                        }]
                    },
                    {
                        label: "保安姓名",
                        prop: "name",
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: false,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: false,
                        // 表单编辑时是否可见
                        editDisplay: false,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                        viewDisplay:true,
                        props: {
                            label: "title",
                            value: "id",
                        },
                        rules: [{
                            required: true,
                            message: "请选择保安姓名",
                            trigger: "blur"
                        }]
                    },
                    {
                        label: "考试名称",
                        prop: "examName",
                        type: 'tree',
                        dicUrl: '/api/exampaper/page-tree',
                        // search: true,
                        slot: true,
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: true,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: true,
                        // 表单编辑时是否可见
                        editDisplay: true,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                        props: {
                            label: "examName",
                            value: "id",
                        },
                        rules: [{
                            required: true,
                            message: "请选择试卷名称",
                            trigger: "blur"
                        }],
                        width: 220
                    },
                    {
                        label: "所属公司",
                        prop: "deptName",
                        search: true,
                        slot: true,
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: false,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: true,
                        // 表单编辑时是否可见
                        editDisplay: true,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                        rules: [{
                            required: true,
                            message: "请选择所属公司",
                            trigger: "blur"
                        }],
                        width: 220
                    },
                    {
                        label: "准考证号",
                        prop: "candidateNo",
                        slot: true,
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: false,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: false,
                        // 表单编辑时是否可见
                        editDisplay: true,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                        rules: [{
                            required: true,
                            message: "请选择准考证号",
                            trigger: "blur"
                        }],
                        width:100
                    },
                    {
                        label: "身份证号",
                        prop: "idCardNo",
                        slot: true,
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: false,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: false,
                        // 表单编辑时是否可见
                        editDisplay: true,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                        rules: [{
                            required: true,
                            message: "请选择准考证号",
                            trigger: "blur"
                        }],
                        width: 200
                    },
                    {
                        label: "报考证件",
                        prop: "applyCard",
                        slot: true,
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: false,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: false,
                        // 表单编辑时是否可见
                        editDisplay: true,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                        rules: [{
                            required: true,
                            message: "请选择准考证号",
                            trigger: "blur"
                        }],
                    },
                    // {
                    //     label: "试卷分数",
                    //     prop: "paperScore",
                    //     slot: true,
                    //     // 表单新增时是否禁止
                    //     addDisabled: false,
                    //     // 表单新增时是否可见
                    //     addDisplay: false,
                    //     // 表单新增时是否为查看模式
                    //     addDetail: false,
                    //     // 表单编辑时是否禁止
                    //     editDisabled: true,
                    //     // 表单编辑时是否可见
                    //     editDisplay: true,
                    //     // 表单编辑时是否为查看模式
                    //     editDetail: false
                    // },
                    {
                        label: "报名时间",
                        prop: "applyTime",
                        type: "datetime",
                        // span: 24,
                        format: 'yyyy-MM-dd HH:mm:ss',
                        valueFormat: 'yyyy-MM-dd HH:mm:ss',
                        // 表单新增时是否禁止
                        addDisabled: true,
                        // 表单新增时是否可见
                        addDisplay: true,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: true,
                        // 表单编辑时是否可见
                        editDisplay: true,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                        value: (new Date().getFullYear() + '-' + (new Date().getMonth() + 1 < 10
                            ? "0" + (new Date().getMonth() + 1)
                            : new Date().getMonth() + 1) + '-' + (new Date().getDate() < 10
                                ? "0" + new Date().getDate()
                                : new Date().getDate()) + ' ' + (new Date().getHours() < 10
                                    ? "0" + new Date().getHours()
                                    : new Date().getHours()) + ':' + (new Date().getMinutes() < 10
                                        ? "0" + new Date().getMinutes()
                                        : new Date().getMinutes()) + ':' + (new Date().getSeconds() < 10
                                            ? "0" + new Date().getSeconds()
                                            : new Date().getSeconds())),
                        width: 160
                    },
                    {
                        label: "考试时间",
                        prop: "examTime",
                        type: "datetime",
                        // span: 24,
                        format: 'yyyy-MM-dd HH:mm:ss',
                        valueFormat: 'yyyy-MM-dd HH:mm:ss',
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: false,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: false,
                        // 表单编辑时是否可见
                        editDisplay: true,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                        width: 160
                    },{
                        label: "报名状态",
                        prop: "applyStatus",
                        slot: true,
                        // 表单新增时是否禁止
                        addDisabled: false,
                        // 表单新增时是否可见
                        addDisplay: false,
                        // 表单新增时是否为查看模式
                        addDetail: false,
                        // 表单编辑时是否禁止
                        editDisabled: false,
                        // 表单编辑时是否可见
                        editDisplay: true,
                        // 表单编辑时是否为查看模式
                        editDetail: false,
                        dicData:DIC.applyStatus,
                        search:true,
                        type:"select"
                    },
                ]
            },
            questionBankSearch: {},
            questionBankLoading: true,
            questionBankData: [
            rules: [
              {
                required: true,
                message: "请选择保安姓名",
                trigger: "blur",
              },
            ],
            questionBankPage: {
                pageSize: 10,
                currentPage: 1,
                total: 16
            width: 80,
          },
          {
            label: "保安姓名",
            prop: "realName",
            searchSpan: 4,
            search: true,
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
            addDisplay: false,
            // 表单新增时是否为查看模式
            addDetail: false,
            // 表单编辑时是否禁止
            editDisabled: false,
            // 表单编辑时是否可见
            editDisplay: false,
            // 表单编辑时是否为查看模式
            editDetail: false,
            viewDisplay: true,
            props: {
              label: "title",
              value: "id",
            },
            questionBankQuery: {},
            questionBankSelectionList: [],
            excelForm: {},
            excelOption: {
                submitBtn: false,
                emptyBtn: false,
                column: [
                {
                    label: "模板上传",
                    prop: "excelFile",
                    type: "upload",
                    drag: true,
                    loadText: "模板上传中,请稍等",
                    span: 24,
                    propsHttp: {
                    res: "data",
                    },
                    tip: "请上传 .xls,.xlsx 标准格式文件",
                    action: "/api/apply/import-apply",
                },
                {
                    label: "模板下载",
                    prop: "excelTemplate",
                    formslot: true,
                    span: 24,
                },
                ],
            rules: [
              {
                required: true,
                message: "请选择保安姓名",
                trigger: "blur",
              },
            ],
          },
          {
            label: "考试名称",
            prop: "examName",
            type: "tree",
            dicUrl: "/api/exampaper/page-tree",
            // search: true,
            slot: true,
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
            addDisplay: true,
            // 表单新增时是否为查看模式
            addDetail: false,
            // 表单编辑时是否禁止
            editDisabled: true,
            // 表单编辑时是否可见
            editDisplay: true,
            // 表单编辑时是否为查看模式
            editDetail: false,
            props: {
              label: "examName",
              value: "id",
            },
        }
    },
            rules: [
              {
                required: true,
                message: "请选择试卷名称",
                trigger: "blur",
              },
            ],
            width: 220,
          },
          {
            label: "所属公司",
            prop: "deptName",
            search: true,
            slot: true,
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
            addDisplay: false,
            // 表单新增时是否为查看模式
            addDetail: false,
            // 表单编辑时是否禁止
            editDisabled: true,
            // 表单编辑时是否可见
            editDisplay: true,
            // 表单编辑时是否为查看模式
            editDetail: false,
            rules: [
              {
                required: true,
                message: "请选择所属公司",
                trigger: "blur",
              },
            ],
            width: 220,
          },
          {
            label: "准考证号",
            prop: "candidateNo",
            slot: true,
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
            addDisplay: false,
            // 表单新增时是否为查看模式
            addDetail: false,
            // 表单编辑时是否禁止
            editDisabled: false,
            // 表单编辑时是否可见
            editDisplay: true,
            // 表单编辑时是否为查看模式
            editDetail: false,
            rules: [
              {
                required: true,
                message: "请选择准考证号",
                trigger: "blur",
              },
            ],
            width: 100,
          },
          {
            label: "身份证号",
            prop: "idCardNo",
            slot: true,
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
            addDisplay: false,
            // 表单新增时是否为查看模式
            addDetail: false,
            // 表单编辑时是否禁止
            editDisabled: false,
            // 表单编辑时是否可见
            editDisplay: true,
            // 表单编辑时是否为查看模式
            editDetail: false,
            rules: [
              {
                required: true,
                message: "请选择准考证号",
                trigger: "blur",
              },
            ],
            width: 200,
          },
          {
            label: "报考证件",
            prop: "applyCard",
            slot: true,
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
            addDisplay: false,
            // 表单新增时是否为查看模式
            addDetail: false,
            // 表单编辑时是否禁止
            editDisabled: false,
            // 表单编辑时是否可见
            editDisplay: true,
            // 表单编辑时是否为查看模式
            editDetail: false,
            rules: [
              {
                required: true,
                message: "请选择准考证号",
                trigger: "blur",
              },
            ],
          },
          // {
          //     label: "试卷分数",
          //     prop: "paperScore",
          //     slot: true,
          //     // 表单新增时是否禁止
          //     addDisabled: false,
          //     // 表单新增时是否可见
          //     addDisplay: false,
          //     // 表单新增时是否为查看模式
          //     addDetail: false,
          //     // 表单编辑时是否禁止
          //     editDisabled: true,
          //     // 表单编辑时是否可见
          //     editDisplay: true,
          //     // 表单编辑时是否为查看模式
          //     editDetail: false
          // },
          {
            label: "报名时间",
            prop: "applyTime",
            type: "datetime",
            // span: 24,
            format: "yyyy-MM-dd HH:mm:ss",
            valueFormat: "yyyy-MM-dd HH:mm:ss",
            // 表单新增时是否禁止
            addDisabled: true,
            // 表单新增时是否可见
            addDisplay: true,
            // 表单新增时是否为查看模式
            addDetail: false,
            // 表单编辑时是否禁止
            editDisabled: true,
            // 表单编辑时是否可见
            editDisplay: true,
            // 表单编辑时是否为查看模式
            editDetail: false,
            value:
              new Date().getFullYear() +
              "-" +
              (new Date().getMonth() + 1 < 10
                ? "0" + (new Date().getMonth() + 1)
                : new Date().getMonth() + 1) +
              "-" +
              (new Date().getDate() < 10
                ? "0" + new Date().getDate()
                : new Date().getDate()) +
              " " +
              (new Date().getHours() < 10
                ? "0" + new Date().getHours()
                : new Date().getHours()) +
              ":" +
              (new Date().getMinutes() < 10
                ? "0" + new Date().getMinutes()
                : new Date().getMinutes()) +
              ":" +
              (new Date().getSeconds() < 10
                ? "0" + new Date().getSeconds()
                : new Date().getSeconds()),
    watch: {
        "form.examname": {
            // form是表单或者表格绑定的数据集,v-model='form'
            handler (val) {
                if (val) {
                    //地址截取,从县/区开始截取,并且取从县区第一个出现的位置开始
                    var address = val.formattedAddress.toString();
                    if (address.search("县") != -1) {
                        this.form.address = address.substring(
                            address.indexOf("县") + 1,
                            address.length
                        );
                    }
                    if (address.search("区") != -1) {
                        this.form.address = address.substring(
                            address.indexOf("区") + 1,
                            address.length
                        );
                    }
                }
            width: 160,
          },
          // {
          //     label: "考试时间",
          //     prop: "examTime",
          //     type: "datetime",
          //     // span: 24,
          //     format: 'yyyy-MM-dd HH:mm:ss',
          //     valueFormat: 'yyyy-MM-dd HH:mm:ss',
          //     // 表单新增时是否禁止
          //     addDisabled: false,
          //     // 表单新增时是否可见
          //     addDisplay: false,
          //     // 表单新增时是否为查看模式
          //     addDetail: false,
          //     // 表单编辑时是否禁止
          //     editDisabled: false,
          //     // 表单编辑时是否可见
          //     editDisplay: true,
          //     // 表单编辑时是否为查看模式
          //     editDetail: false,
          //     width: 160
          // },{
          //     label: "报名状态",
          //     prop: "applyStatus",
          //     slot: true,
          //     // 表单新增时是否禁止
          //     addDisabled: false,
          //     // 表单新增时是否可见
          //     addDisplay: false,
          //     // 表单新增时是否为查看模式
          //     addDetail: false,
          //     // 表单编辑时是否禁止
          //     editDisabled: false,
          //     // 表单编辑时是否可见
          //     editDisplay: true,
          //     // 表单编辑时是否为查看模式
          //     editDetail: false,
          //     dicData:DIC.applyStatus,
          //     search:true,
          //     type:"select"
          // },
        ],
      },
      questionBankSearch: {},
      questionBankLoading: true,
      questionBankData: [],
      questionBankPage: {
        pageSize: 10,
        currentPage: 1,
        total: 16,
      },
      questionBankQuery: {},
      questionBankSelectionList: [],
      excelForm: {},
      excelOption: {
        submitBtn: false,
        emptyBtn: false,
        column: [
          {
            label: "模板上传",
            prop: "excelFile",
            type: "upload",
            drag: true,
            loadText: "模板上传中,请稍等",
            span: 24,
            propsHttp: {
              res: "data",
            },
            immediate: true,
        },
    },
    created () {
            tip: "请上传 .xls,.xlsx 标准格式文件",
            action: "/api/apply/import-apply",
          },
          {
            label: "模板下载",
            prop: "excelTemplate",
            formslot: true,
            span: 24,
          },
        ],
      },
    };
  },
  created() {
    console.log(this.userInfo);
      console.log(this.userInfo)
      if (this.userInfo.role_name.indexOf('ksxtadmin') != -1) {
        this.questionBankOption.column[0].dicUrl = "/api/blade-system/dept/lazy-tree-user?parentId="
      } else {
        this.questionBankOption.column[0].dicUrl = "/api/blade-system/dept/lazy-tree-user?parentId=" + this.userInfo.dept_id
      }
    },
    mounted() {
        var flag = false,
        i = 0,
        ind = null;
        this.$store.state.tags.tagList.forEach((item, index) => {
        if (item.label == "报名清册") {
            if (flag == false) {
            ind = index;
            flag = true;
            }
            i++;
        }
        });
        if (i > 1) {
        this.$store.state.tags.tagList.splice(ind, 1);
        }
    },
    computed: {
        ...mapState({
            userInfo: state => state.user.userInfo
        }),
        ids () {
            let ids = [];
            this.questionBankSelectionList.forEach(ele => {
                ids.push(ele.id);
            });
            return ids.join(",");
        },
    },
    methods: {
        //准考证查看
        handlePrint(row) {
            var obj = row;
            obj["name"] = "准考证信息";
            this.$router.push({
                path: `/applyexam/papers`,
                query: obj,
            });
        },
        questionBankOnLoad (page, params = {}) {
            // debugger;
            params['examId'] = this.$route.query.id;
            this.questionBankLoading = false;
            getApplyList(page.currentPage, page.pageSize, Object.assign(params, this.questionBankQuery)).then(res => {
                const data = res.data.data;
                this.questionBankPage.total = data.total;
                this.questionBankData = data.records;
                this.questionBankLoading = false;
                this.questionBankSelectionClear();
            });
        },
        questionBankSelectionClear () {
            this.questionBankSelectionList = [];
            this.$refs.questionBankCrud.toggleSelection();
        },
        questionBankSelectionChange (list) {
            this.questionBankSelectionList = list;
        },
        questionBankSearchChange (params, done) {
            this.questionBankQuery = params;
            this.questionBankPage.currentPage = 1;
            this.questionBankOnLoad(this.questionBankPage, params);
            done();
        },
        questionBankSearchReset () {
            this.questionBankQuery = {};
            this.questionBankOnLoad(this.questionBankPage);
        },
        questionBankCurrentChange (currentPage) {
            this.questionBankPage.currentPage = currentPage;
        },
        questionBankSizeChange (pageSize) {
            this.questionBankPage.pageSize = pageSize;
        },
        // 新增
        questionBankRowSave (row, done, loading) {
            addApply({ userId: row.name, examId: row.examName, applyTime: row.applyTime }).then(() => {
                this.questionBankOnLoad(this.questionBankPage);
                this.$message({
                    type: "success",
                    message: "操作成功!"
                });
                done();
            }, error => {
                window.console.log(error);
                loading();
            });
        },
        questionBankRowDel (row) {
            this.$confirm("确定将选择数据删除?", {
                confirmButtonText: "确定",
                cancelButtonText: "取消",
                type: "warning"
            })
                .then(() => {
                    return remove(row.id);
                })
                .then(() => {
                    this.questionBankOnLoad(this.questionBankPage);
                    this.$message({
                        type: "success",
                        message: "操作成功!"
                    });
                });
        },
        questionBankHandleDelete () {
            if (this.questionBankSelectionList.length === 0) {
                this.$message.warning("请选择至少一条数据");
                return;
            }
            this.$confirm("确定将选择数据删除?", {
                confirmButtonText: "确定",
                cancelButtonText: "取消",
                type: "warning"
            })
                .then(() => {
                    return remove(this.ids);
                })
                .then(() => {
                    this.questionBankOnLoad(this.questionBankPage);
                    this.$message({
                        type: "success",
                        message: "操作成功!"
                    });
                    this.$refs.questionBankCrud.toggleSelection();
                });
        },
        //导出数据
        handleExport() {
            this.$confirm("是否导出清册数据?", "提示", {
                confirmButtonText: "确定",
                cancelButtonText: "取消",
                type: "warning",
            }).then(() => {
                window.open(`/api/apply/export-apply?examId=${this.$route.query.id}`);
            });
        },
        handleImport() {
            this.excelBox = true;
        },
        handleTemplate() {
            window.open(
                `/api/apply/export-template`
            );
        },
        uploadAfter(res, done, loading, column) {
            window.console.log(column);
            this.excelBox = false;
            this.refreshChange();
            done();
        },
        refreshChange() {
            this.questionBankOnLoad(this.page, this.query);
        },
    if (this.userInfo.role_name.indexOf("ksxtadmin") != -1) {
      this.questionBankOption.column[0].dicUrl =
        "/api/blade-system/dept/lazy-tree-user?parentId=";
    } else {
      this.questionBankOption.column[0].dicUrl =
        "/api/blade-system/dept/lazy-tree-user?parentId=" +
        this.userInfo.dept_id;
    }
}
  },
  mounted() {
    var flag = false,
      i = 0,
      ind = null;
    this.$store.state.tags.tagList.forEach((item, index) => {
      if (item.label == "报名清册") {
        if (flag == false) {
          ind = index;
          flag = true;
        }
        i++;
      }
    });
    if (i > 1) {
      this.$store.state.tags.tagList.splice(ind, 1);
    }
  },
  computed: {
    ...mapState({
      userInfo: (state) => state.user.userInfo,
    }),
    ids() {
      let ids = [];
      this.questionBankSelectionList.forEach((ele) => {
        ids.push(ele.id);
      });
      return ids.join(",");
    },
  },
  methods: {
    //准考证查看
    handlePrint(row) {
      var obj = row;
      obj["name"] = "准考证信息";
      this.$router.push({
        path: `/applyexam/papers`,
        query: obj,
      });
    },
    //清册生成
    handleExport() {
      var obj ={};
      obj["name"] = "报名清册信息";
      obj["examId"] = this.$route.query.id;
      this.$router.push({
        path: `/applydetailed/papers`,
        query: obj,
      });
    },
    questionBankOnLoad(page, params = {}) {
      // debugger;
      params["examId"] = this.$route.query.id;
      this.questionBankLoading = false;
      getApplyList(
        page.currentPage,
        page.pageSize,
        Object.assign(params, this.questionBankQuery)
      ).then((res) => {
        const data = res.data.data;
        this.questionBankPage.total = data.total;
        this.questionBankData = data.records;
        this.questionBankLoading = false;
        this.questionBankSelectionClear();
      });
    },
    questionBankSelectionClear() {
      this.questionBankSelectionList = [];
      this.$refs.questionBankCrud.toggleSelection();
    },
    questionBankSelectionChange(list) {
      this.questionBankSelectionList = list;
    },
    questionBankSearchChange(params, done) {
      this.questionBankQuery = params;
      this.questionBankPage.currentPage = 1;
      this.questionBankOnLoad(this.questionBankPage, params);
      done();
    },
    questionBankSearchReset() {
      this.questionBankQuery = {};
      this.questionBankOnLoad(this.questionBankPage);
    },
    questionBankCurrentChange(currentPage) {
      this.questionBankPage.currentPage = currentPage;
    },
    questionBankSizeChange(pageSize) {
      this.questionBankPage.pageSize = pageSize;
    },
    // 新增
    questionBankRowSave(row, done, loading) {
      addApply({
        userId: row.name,
        examId: row.examName,
        applyTime: row.applyTime,
      }).then(
        () => {
          this.questionBankOnLoad(this.questionBankPage);
          this.$message({
            type: "success",
            message: "操作成功!",
          });
          done();
        },
        (error) => {
          window.console.log(error);
          loading();
        }
      );
    },
    questionBankRowDel(row) {
      this.$confirm("确定将选择数据删除?", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          return remove(row.id);
        })
        .then(() => {
          this.questionBankOnLoad(this.questionBankPage);
          this.$message({
            type: "success",
            message: "操作成功!",
          });
        });
    },
    questionBankHandleDelete() {
      if (this.questionBankSelectionList.length === 0) {
        this.$message.warning("请选择至少一条数据");
        return;
      }
      this.$confirm("确定将选择数据删除?", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          return remove(this.ids);
        })
        .then(() => {
          this.questionBankOnLoad(this.questionBankPage);
          this.$message({
            type: "success",
            message: "操作成功!",
          });
          this.$refs.questionBankCrud.toggleSelection();
        });
    },
    handleImport() {
      this.excelBox = true;
    },
    handleTemplate() {
      window.open(`/api/apply/export-template`);
    },
    uploadAfter(res, done, loading, column) {
      window.console.log(column);
      this.excelBox = false;
      this.refreshChange();
      done();
    },
    refreshChange() {
      this.questionBankOnLoad(this.page, this.query);
    },
  },
};
</script>
<style lang="scss" scoped>
src/views/applydetailed/papers.vue
New file
@@ -0,0 +1,40 @@
<template>
  <!-- <iframe src="http://124.71.113.22/map/index.html?openid=PatrolManagement" style="width: 100%;height: 100%" frameborder="0"></iframe> -->
  <iframe :src="url" style="width: 100%; height: 100%" frameborder="0"></iframe>
</template>
<script>
//占位路由 巡逻管理
export default {
  data() {
    return {
      url: "/papersApply.html",
    };
  },
  created(){
      var d = this.$route.query;
      this.url += "?data=" + JSON.stringify(d);
      console.log(d,11);
  },
  mounted() {
    var flag = false,
      i = 0,
      ind = null;
    this.$store.state.tags.tagList.forEach((item, index) => {
      if (item.label == "准考证信息") {
        if (flag == false) {
          ind = index;
          flag = true;
        }
        i++;
      }
    });
    if (i > 1) {
      this.$store.state.tags.tagList.splice(ind, 1);
    }
  },
};
</script>
<style>
</style>
src/views/applyexam/index.vue
@@ -57,13 +57,34 @@
                                       @click="questionBankHandleDelete">删 除
                            </el-button>
                        </template> -->
            <!-- 自定义按钮 -->
            <template slot="menuLeft">
              <el-button
                type="primary"
                size="small"
                plain
                icon="el-icon-folder-checked"
                @click="handleBatchExam"
                >生成考试
              </el-button>
              <!-- v-if="examPersission" -->
              <el-button
                type="primary"
                size="small"
                plain
                icon="el-icon-folder-checked"
               @click="handleImport"
                >清册导入
              </el-button>
            </template>
            <template slot-scope="{ type, row }" slot="menu">
              <el-button
                :type="type"
                size="small"
                icon="el-icon-refresh-left"
                :disabled="row.applyStatus == 4"
                :disabled="row.isApply == 2"
                @click="handleCancel(row)"
                >取消报名
              </el-button>
@@ -101,6 +122,43 @@
              @reset-change="emptytChange"
              @submit="submit"
            ></avue-form>
          </el-dialog>
          <el-dialog
              title="清册数据导入"
              append-to-body
              :visible.sync="excelBox"
              width="555px"
              >
              <avue-form
                  :option="excelOption"
                  v-model="excelForm"
                  :upload-after="uploadAfter"
              >
                  <template slot="excelTemplate">
                  <el-button type="primary" @click="handleTemplate">
                      点击下载<i class="el-icon-download el-icon--right"></i>
                  </el-button>
                  </template>
              </avue-form>
          </el-dialog>
          <el-dialog
            title="考试生成"
            append-to-body
            :visible.sync="dialogExamFormVisible"
            width="1000px"
            @close='closeDialog'
          >
            <avue-form
              ref="formExamApply"
              v-model="examApply"
              :option="optionExamApply"
              @reset-change="emptytChange"
              @submit="submitExamApply"
            ></avue-form>
          </el-dialog>
        </div>
      </el-card>
@@ -112,8 +170,9 @@
import {
  getApplyList,
  addApply,
  updateApply,
  cancelApply,
  remove,
  addExam
} from "@/api/examapi/applyexam";
import { mapState } from "vuex";
@@ -134,7 +193,37 @@
  data() {
    return {
      dialogFormVisible: false,
      dialogExamFormVisible: false,
      examPersission:false,
      applyExport:false,
      excelBox:false,
      Audit: {},
      excelForm: {},
      excelOption: {
          submitBtn: false,
          emptyBtn: false,
          column: [
          {
              label: "模板上传",
              prop: "excelFile",
              type: "upload",
              drag: true,
              loadText: "模板上传中,请稍等",
              span: 24,
              propsHttp: {
              res: "data",
              },
              tip: "请上传 .xls,.xlsx 标准格式文件",
              action: "/api/apply/import-apply",
          },
          {
              label: "模板下载",
              prop: "excelTemplate",
              formslot: true,
              span: 24,
          },
          ],
      },
      optionAudit: {
        height: "auto",
        calcHeight: 30,
@@ -188,16 +277,64 @@
          },
        ],
      },
      optionExamApply: {
        height: "auto",
        filterBtn: true,
        calcHeight: 30,
        dialogWidth: 950,
        tip: false,
        searchShow: true,
        searchMenuSpan: 6,
        border: false,
        index: true,
        stripe: true,
        viewBtn: true,
        selection: true,
        excelBtn: false,
        menuWidth: 380,
        dialogClickModal: false,
        column: [
          {
            label: "考试时间",
            prop: "examTime",
            type: "daterange",
            format: "yyyy-MM-dd HH:mm:ss",
            valueFormat: "yyyy-MM-dd HH:mm:ss",
            startPlaceholder: "考试开始时间",
            endPlaceholder: "考试结束时间",
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
            addDisplay: true,
            // 表单新增时是否为查看模式
            addDetail: false,
            // 表单编辑时是否禁止
            editDisabled: false,
            // 表单编辑时是否可见
            editDisplay: true,
            // 表单编辑时是否为查看模式
            editDetail: false,
            rules: [
              {
                required: true,
                message: "请选择考试时间",
                trigger: "blur",
              },
            ],
            span: 24,
          },
        ],
      },
      questionBankOption: {
        // 操作栏多余按钮去除
        delBtn: false,
        editBtn: false,
        addBtn: true,
        addBtn: false,
        selection: true,
        menu: true,
        // 导出按钮
        // excelBtn: true,
        viewBtn: false,
        viewBtn: true,
        // title: '题库',
@@ -214,7 +351,7 @@
        //tree 默认展开
        defaultExpandAll: true,
        // 操作栏宽度
        menuWidth: 200,
        menuWidth: 300,
        column: [
          {
@@ -222,7 +359,6 @@
            prop: "userId",
            type: "tree",
            dicUrl: "",
            search: true,
            hide: true,
            slot: true,
            searchSpan: 4,
@@ -234,8 +370,10 @@
            addDetail: false,
            // 表单编辑时是否禁止
            editDisabled: true,
            viewDisabled: false,
            // 表单编辑时是否可见
            editDisplay: true,
            viewDisplay: false,
            // 表单编辑时是否为查看模式
            editDetail: false,
            props: {
@@ -253,7 +391,9 @@
          },
          {
            label: "保安姓名",
            prop: "name",
            prop: "realName",
            searchSpan: 4,
            search: true,
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
@@ -316,7 +456,7 @@
            prop: "deptName",
            search: true,
            slot: true,
            searchSpan: 4,
            searchSpan: 6,
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
@@ -473,48 +613,48 @@
            width: 150,
          },
          {
            label: "考试时间",
            prop: "examTime",
            type: "datetime",
            // span: 24,
            format: "yyyy-MM-dd HH:mm:ss",
            valueFormat: "yyyy-MM-dd HH:mm:ss",
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
            addDisplay: false,
            // 表单新增时是否为查看模式
            addDetail: false,
            // 表单编辑时是否禁止
            editDisabled: false,
            // 表单编辑时是否可见
            editDisplay: true,
            // 表单编辑时是否为查看模式
            editDetail: false,
            width: 150,
          },
          {
            label: "报名状态",
            prop: "applyStatus",
            slot: true,
            searchSpan: 4,
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
            addDisplay: false,
            // 表单新增时是否为查看模式
            addDetail: false,
            // 表单编辑时是否禁止
            editDisabled: false,
            // 表单编辑时是否可见
            editDisplay: true,
            // 表单编辑时是否为查看模式
            editDetail: false,
            dicData: DIC.applyStatus,
            search: true,
            type: "select",
          },
          // {
          //   label: "考试时间",
          //   prop: "examTime",
          //   type: "datetime",
          //   // span: 24,
          //   format: "yyyy-MM-dd HH:mm:ss",
          //   valueFormat: "yyyy-MM-dd HH:mm:ss",
          //   // 表单新增时是否禁止
          //   addDisabled: false,
          //   // 表单新增时是否可见
          //   addDisplay: false,
          //   // 表单新增时是否为查看模式
          //   addDetail: false,
          //   // 表单编辑时是否禁止
          //   editDisabled: false,
          //   // 表单编辑时是否可见
          //   editDisplay: true,
          //   // 表单编辑时是否为查看模式
          //   editDetail: false,
          //   width: 150,
          // },
          // {
          //   label: "报名状态",
          //   prop: "applyStatus",
          //   slot: true,
          //   searchSpan: 4,
          //   // 表单新增时是否禁止
          //   addDisabled: false,
          //   // 表单新增时是否可见
          //   addDisplay: false,
          //   // 表单新增时是否为查看模式
          //   addDetail: false,
          //   // 表单编辑时是否禁止
          //   editDisabled: false,
          //   // 表单编辑时是否可见
          //   editDisplay: true,
          //   // 表单编辑时是否为查看模式
          //   editDetail: false,
          //   dicData: DIC.applyStatus,
          //   search: true,
          //   type: "select",
          // },
          // {
          //     label: "审核状态",
          //     prop: "examinationType",
@@ -592,12 +732,7 @@
    console.log(this.userInfo);
    if (this.userInfo.role_name.indexOf("ksxtadmin") != -1) {
      this.questionBankOption.column[0].dicUrl =
        "/api/blade-system/dept/lazy-tree-user?parentId=";
    } else {
      this.questionBankOption.column[0].dicUrl =
        "/api/blade-system/dept/lazy-tree-user?parentId=" +
        this.userInfo.dept_id;
        this.examPersission = true;
    }
  },
  mounted() {},
@@ -696,6 +831,42 @@
      );
    },
    //生成考试弹窗
    handleBatchExam(){
      this.dialogExamFormVisible = true;
      if (this.questionBankSelectionList.length === 0) {
        this.ids = "";
      }
    },
    //生成考试
    submitExamApply(row, done, loading){
      var that = this;
      var startTime = row.examTime[0];
      var endTime = row.examTime[1];
      var examTime = JSON.stringify(row.examTime);
      console.log(this.ids,111);
      addExam(this.ids, examTime, startTime, endTime).then(
        () => {
          this.questionBankOnLoad(this.questionBankPage);
          this.$message({
            type: "success",
            message: "操作成功!",
          });
          that.$refs.formExamApply.resetFields();
          that.dialogExamFormVisible = false;
          done();
        },
        (error) => {
          window.console.log(error);
          loading();
        }
      );
    },
    //关闭窗口清除数据
    closeDialog(){
      this.$refs.formExamApply.resetFields();
    },
    questionBankRowDel(row) {
      this.$confirm("确定将选择数据删除?", {
        confirmButtonText: "确定",
@@ -723,7 +894,7 @@
      })
        .then(() => {
          row.applyStatus = 4;
          return updateApply(row);
          return cancelApply(row);
        })
        .then(() => {
          this.questionBankOnLoad(this.questionBankPage);
@@ -760,6 +931,26 @@
      this.dialogFormVisible = true;
      this.Audit = row;
    },
    handleImport() {
      this.excelBox = true;
    },
    handleTemplate() {
        window.open(
            `/api/apply/export-template`
        );
    },
    uploadAfter(res, done, loading, column) {
        window.console.log(column);
        this.excelBox = false;
        this.refreshChange();
        done();
    },
    refreshChange() {
        this.questionBankOnLoad(this.page, this.query);
    },
  },
};
</script>
src/views/applyexam/papers.vue
@@ -21,7 +21,7 @@
      i = 0,
      ind = null;
    this.$store.state.tags.tagList.forEach((item, index) => {
      if (item.label == "准考证信息") {
      if (item.label == "报名清册信息") {
        if (flag == false) {
          ind = index;
          flag = true;
src/views/companyApply/index.vue
New file
@@ -0,0 +1,634 @@
/*
 * @Author: Morpheus
 * @Date: 2021-07-05 16:31:54
 * @Last Modified by: Morpheus
 * @Last Modified time: 2021-07-19 19:39:45
 * menu-name 报名考试
 */
<template>
  <el-row class="morpheus-box-apply-exam">
    <el-col :span="24" class="hasButOne">
      <el-card>
        <div class="exam-card-body">
          <avue-crud
            v-model="obj"
            class="company-box"
            :option="questionBankOption"
            :search.sync="questionBankSearch"
            :table-loading="questionBankLoading"
            :data="questionBankData"
            ref="questionBankCrud"
            :page.sync="questionBankPage"
            @on-load="questionBankOnLoad"
            @selection-change="questionBankSelectionChange"
            @search-change="questionBankSearchChange"
            @search-reset="questionBankSearchReset"
            @current-change="questionBankCurrentChange"
            @size-change="questionBankSizeChange"
            @row-save="questionBankRowSave"
            @row-del="questionBankRowDel"
          >
            <!-- 自定义按钮 -->
            <template slot="menuLeft">
              <el-button
                type="primary"
                size="small"
                plain
                icon="el-icon-folder-checked"
                @click="handleBatchApply"
                >批量报名
              </el-button>
            </template>
            <template slot-scope="{ type, row }" slot="menu">
              <el-button
                :type="type"
                size="small"
                icon="el-icon-refresh-left"
                :disabled="row.isApply == 2 || row.isApply == -1"
                @click="handleCancel(row)"
                >取消报名
              </el-button>
              <el-button
                :type="type"
                size="small"
                icon="el-icon-folder-checked"
                @click="questionBankRowSave(row)"
                >报名
              </el-button>
              <el-button
                :type="type"
                style="display: none"
                size="small"
                icon="el-icon-receiving"
                :disabled="row.isApply == 2"
                @click="handlePrint(row)"
                >准考证打印
              </el-button>
            </template>
          </avue-crud>
          <el-dialog
            title="考试资格审核"
            :visible.sync="dialogFormVisible"
            modal-append-to-body="false"
            append-to-body="true"
            :close-on-click-model="true"
          >
            <avue-form
              ref="formAudit"
              v-model="Audit"
              :option="optionAudit"
              @reset-change="emptytChange"
              @submit="submit"
            ></avue-form>
          </el-dialog>
          <el-dialog
            title="报名"
            append-to-body
            :visible.sync="dialogBatchFormVisible"
            width="1000px"
            @close='closeDialog'
          >
            <avue-form
              ref="formBatchApply"
              v-model="BatchApply"
              :option="optionBatchApply"
              @reset-change="emptytChange"
              @submit="submitBatchApply"
            ></avue-form>
          </el-dialog>
        </div>
      </el-card>
    </el-col>
  </el-row>
</template>
<script>
import { addApply, updateApply, remove } from "@/api/examapi/applyexam";
import { getListApply,addBatchApply } from "@/api/securityGuard/securityGuard";
import { mapState } from "vuex";
var DIC = {
  applyStatus: [
    {
      label: "已报名",
      value: 1,
    },
    {
      label: "已取消",
      value: 2,
    },
  ],
};
export default {
  data() {
    return {
      dialogFormVisible: false,
      dialogBatchFormVisible: false,
      Audit: {},
      BatchApply: {},
      optionAudit: {
        height: "auto",
        calcHeight: 30,
        dialogWidth: 1000,
        tip: false,
        searchShow: true,
        searchMenuSpan: 6,
        border: false,
        index: true,
        stripe: true,
        viewBtn: false,
        addBtn: false,
        selection: true,
        excelBtn: false,
        menuWidth: 230,
        dialogClickModal: false,
        column: [
          {
            label: "审核状态",
            search: true,
            searchSpan: 5,
            span: 24,
            prop: "auditStatus",
            slot: true,
            editDisplay: false,
            addDisplay: false,
            type: "select",
            rules: [
              {
                required: true,
                message: "请选择审核类型",
                trigger: "blur",
              },
            ],
            dicData: [
              {
                label: "审核通过",
                value: 2,
              },
              {
                label: "不通过",
                value: 3,
              },
            ],
          },
          {
            label: "审核明细",
            span: 24,
            type: "textarea",
            prop: "auditDetail",
          },
        ],
      },
      optionBatchApply: {
        height: "auto",
        filterBtn: true,
        calcHeight: 30,
        dialogWidth: 950,
        tip: false,
        searchShow: true,
        searchMenuSpan: 6,
        border: false,
        index: true,
        stripe: true,
        viewBtn: true,
        selection: true,
        excelBtn: false,
        menuWidth: 320,
        dialogClickModal: false,
        column: [
          {
            label: "姓名",
            prop: "userId",
            type: "tree",
            hide: true,
            // dicUrl: "/api/blade-user/page-security-unit?deptId="+this.deptId,
            props: {
              label: "name",
              value: "id",
            },
            //不包含父节点值
            leafOnly:true,
            multiple: true,
            searchSpan: 5,
            rules: [
              {
                required: true,
                message: "请输入姓名",
                trigger: "blur",
              },
            ],
            span: 24,
          },
        ],
      },
      questionBankOption: {
        // 操作栏多余按钮去除
        delBtn: false,
        editBtn: false,
        addBtn: false,
        selection: true,
        menu: true,
        // 导出按钮
        // excelBtn: true,
        viewBtn: false,
        // title: '题库',
        align: "center",
        height: "auto",
        calcHeight: 80,
        tip: false,
        searchShow: true,
        searchMenuSpan: 4,
        index: true,
        indexLabel: "#",
        //dialogType: 'drawer',
        dialogClickModal: false,
        //tree 默认展开
        defaultExpandAll: true,
        // 操作栏宽度
        menuWidth: 200,
        column: [
          {
            label: "姓名",
            prop: "realName",
            search: true,
            searchSpan: 4,
            searchLabelWidth: 50,
            display: false,
          },
          {
            label: "性别",
            prop: "sex",
            type: "select",
            dicData: [
              {
                label: "男",
                value: 1,
              },
              {
                label: "女",
                value: 2,
              },
              {
                label: "未知",
                value: 3,
              },
              {
                label: " ",
                value: -1,
              },
            ],
            display: false,
          },
          {
            label: "籍贯",
            prop: "nativeplace",
            display: false,
          },
          {
            label: "联系电话",
            prop: "phone",
            display: false,
          },
          {
            label: "入职时间",
            prop: "rtime",
            display: false,
          },
          {
            label: "保安公司名称",
            searchLabelWidth: "110",
            // prop: "deptName",
            prop: "deptId",
            type: "tree",
            dicUrl:
              "/api/blade-system/dept/security_lazy-tree?parentId=1413470343230877697",
            props: {
              label: "title",
              value: "id",
            },
            slot: true,
            searchSpan: 4,
            display: false,
            search: false,
            width: 260,
          },
          {
            label: "是否持证",
            prop: "hold",
            slot: true,
            display: false,
            dicUrl: "/api/blade-system/dict-biz/dictionary?code=equipage",
            props: {
              label: "dictValue",
              value: "dictKey",
            },
            type: "select",
            rules: [
              {
                required: true,
                message: "请选择",
                trigger: "blur",
              },
            ],
          },
          {
            label: "在职状态",
            prop: "status",
            type: "select",
            dicUrl: "/api/blade-system/dict-biz/dictionary?code=workerState",
            props: {
              label: "dictValue",
              value: "dictKey",
            },
            dataType: "number",
            display: false,
            searchSpan: 4,
            search: true,
            rules: [
              {
                required: true,
                message: "请选择在职状态",
                trigger: "blur",
              },
            ],
          },
          {
            label: "是否报名",
            prop: "isApply",
            type: "select",
            dicData: [
              {
                label: "是",
                value: 1,
              },
              {
                label: "已取消",
                value: 2,
              },
              {
                label: "",
                value: -1,
              },
            ],
            dataType: "number",
            display: false,
            searchSpan: 4,
            search: true,
            rules: [
              {
                required: true,
                message: "请选择在职状态",
                trigger: "blur",
              },
            ],
          },
        ],
      },
      questionBankSearch: {},
      questionBankLoading: true,
      questionBankData: [],
      questionBankPage: {
        pageSize: 10,
        currentPage: 1,
        total: 16,
      },
      questionBankQuery: {},
      questionBankSelectionList: [],
    };
  },
  created() {
    console.log(this.userInfo);
    if (this.userInfo.role_name.indexOf("ksxtadmin") != -1) {
      this.questionBankOption.column[0].dicUrl =
        "/api/blade-system/dept/lazy-tree-user?parentId=";
    } else {
      this.questionBankOption.column[0].dicUrl =
        "/api/blade-system/dept/lazy-tree-user?parentId=" +
        this.userInfo.dept_id;
    }
    this.optionBatchApply.column[0].dicUrl =
        "/api/blade-user/security-apply-tree?deptId=" +
        this.userInfo.dept_id;
  },
  mounted() {
  },
  computed: {
    ...mapState({
      userInfo: (state) => state.user.userInfo,
    }),
    ids() {
      let ids = [];
      this.questionBankSelectionList.forEach((ele) => {
        ids.push(ele.id);
      });
      return ids.join(",");
    },
  },
  methods: {
    //准考证查看
    handlePrint(row) {
      var obj = row;
      obj["name"] = "准考证信息";
      this.$router.push({
        path: `/applyexam/papers`,
        query: obj,
      });
    },
    questionBankOnLoad(page, params = {}) {
      this.questionBankLoading = false;
      params["deptId"] = this.userInfo.dept_id;
      getListApply(
        page.currentPage,
        page.pageSize,
        Object.assign(params, this.questionBankQuery)
      ).then((res) => {
        const data = res.data.data;
        this.questionBankPage.total = data.total;
        this.questionBankData = data.records;
        this.questionBankLoading = false;
        this.questionBankSelectionClear();
      });
    },
    questionBankSelectionClear() {
      this.questionBankSelectionList = [];
      this.$refs.questionBankCrud.toggleSelection();
    },
    questionBankSelectionChange(list) {
      this.questionBankSelectionList = list;
    },
    questionBankSearchChange(params, done) {
      this.questionBankQuery = params;
      this.questionBankPage.currentPage = 1;
      this.questionBankOnLoad(this.questionBankPage, params);
      done();
    },
    questionBankSearchReset() {
      this.questionBankQuery = {};
      this.questionBankOnLoad(this.questionBankPage);
    },
    questionBankCurrentChange(currentPage) {
      this.questionBankPage.currentPage = currentPage;
    },
    questionBankSizeChange(pageSize) {
      this.questionBankPage.pageSize = pageSize;
    },
    // 新增
    questionBankRowSave(row, done, loading) {
      // debugger;
      addApply({
        userId: row.id,
      }).then(
        (res) => {
          this.questionBankOnLoad(this.questionBankPage);
          if (res.data.data == 201) {
            this.$message({
              type: "warning",
              message: "已报名,不能重复报名",
            });
          } else if (res.data.data == 201) {
            this.$message({
              type: "warning",
              message: "报名失败",
            });
          } else {
            this.$message({
              type: "success",
              message: "报名成功",
            });
          }
          done();
        },
        (error) => {
          window.console.log(error);
          loading();
        }
      );
    },
    questionBankRowDel(row) {
      this.$confirm("确定将选择数据删除?", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          return remove(row.id);
        })
        .then(() => {
          this.questionBankOnLoad(this.questionBankPage);
          this.$message({
            type: "success",
            message: "操作成功!",
          });
        });
    },
    //取消报名
    handleCancel(row) {
      this.$confirm("确定取消报名?", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          var apply = {
            applyStatus: 4,
            id: row.applyId,
          };
          return updateApply(apply);
        })
        .then(() => {
          this.questionBankOnLoad(this.questionBankPage);
          this.$message({
            type: "success",
            message: "操作成功!",
          });
        });
    },
    //批量报名
    handleBatchApply() {
      this.dialogBatchFormVisible = true;
    },
    //批量报名提交
    submitBatchApply(){
        addBatchApply({
          userIds: this.BatchApply.userId.join(","),
        }).then(
          (res) => {
            this.questionBankOnLoad(this.questionBankPage);
            if (res.data.data == 201) {
              this.$message({
                type: "warning",
                message: "已报名,不能重复报名",
              });
            } else if (res.data.data == 201) {
              this.$message({
                type: "warning",
                message: "报名失败",
              });
            } else {
              this.$message({
                type: "success",
                message: "报名成功",
              });
              this.$refs.formBatchApply.resetFields();
              this.dialogBatchFormVisible = false;
            }
          },
          (error) => {
            window.console.log(error);
          }
        );
    },
    //关闭窗口清除数据
    closeDialog(){
        this.$refs.formBatchApply.resetFields();
    },
    questionBankHandleDelete() {
      if (this.questionBankSelectionList.length === 0) {
        this.$message.warning("请选择至少一条数据");
        return;
      }
      this.$confirm("确定将选择数据删除?", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          return remove(this.ids);
        })
        .then(() => {
          this.questionBankOnLoad(this.questionBankPage);
          this.$message({
            type: "success",
            message: "操作成功!",
          });
          this.$refs.questionBankCrud.toggleSelection();
        });
    },
    handleAudit(row) {
      this.dialogFormVisible = true;
      this.Audit = row;
    },
  },
};
</script>
<style lang="scss" scoped>
</style>
src/views/desk/notice.vue
@@ -90,6 +90,7 @@
        excelBtn: false,
        addBtnText:"发布",
        addTitle:"发布",
        saveBtnText:'发布',
        menuWidth: 320,
        dialogClickModal: false,
        column: [
src/views/dispatch/dispatchChildoperable.vue
@@ -200,8 +200,8 @@
          {
            label: "派遣单位",
            prop: "dispatcherCompany",
            addDisplay: false,
            editDisplay: false,
            // addDisplay: false,
            // editDisplay: false,
          },
          // {
          //   label: "派遣单位",
@@ -229,13 +229,9 @@
          {
            label: "保安公司",
            prop: "deptId",
            labelWidth: 120,
            search: true,
            overHidden: true,
            type: "tree",
            searchSpan: 4,
            cascaderItem: ["name"],
            // cascaderItem: ["city", "area"],
            type: "select",
            cascaderItem: ["securityName"],
            props: {
              label: "title",
              value: "id",
@@ -250,19 +246,17 @@
            ],
          },
          {
            width: 120,
            label: "保安员",
            prop: "name",
            labelWidth: 120,
            type: "tree",
            prop: "securityName",
            type: "select",
            search: true,
            searchSpan: 4,
            cell: true,
            // cell: true,
            // hide: true,
            props: {
              label: "realName",
              value: "id",
            },
            dicUrl: `/api/blade-user/page-security-unit?deptId={{deptId}}`,
            dicUrl: `/api/blade-user/page-security-units?deptId={{key}}`,
            rules: [
              {
                required: true,
@@ -271,6 +265,7 @@
              },
            ],
          },
          // {
          //   width: 120,
          //   label: "保安人名称",
@@ -767,8 +762,9 @@
        const data = res.data.data;
        this.page1.total = data.total;
        this.data1 = data.records;
        console.log(this.data1, 1);
        console.log(this.data1, 1111111111111111111111111);
        this.loading1 = false;
        this.$nextTick(() => this.$refs.crudrec1.dicInit("cascader"));
      });
    },
    //派遣记录
src/views/dispatch/dispatchChildoperableSee.vue
@@ -743,21 +743,22 @@
      // console.log(page);
      console.log(this.userInfo, "userInfo");
      var values;
      const { releaseTimeRange } = this.query1;
      if (releaseTimeRange) {
        values = {
          ...params,
          beginTime: releaseTimeRange[0],
          overTime: releaseTimeRange[1],
          ...this.query,
        };
        values.releaseTimeRange = null;
      } else {
        values = {
          ...params,
          ...this.query,
        };
      }
      // const { releaseTimeRange } = this.query1;
      // if (releaseTimeRange) {
      values = {
        ...params,
        // beginTime: releaseTimeRange[0],
        // overTime: releaseTimeRange[1],
        userIds: this.userInfo.user_id,
        ...this.query,
      };
      // values.releaseTimeRange = null;
      // } else {
      //   values = {
      //     ...params,
      //     ...this.query,
      //   };
      // }
      //   values
src/views/exam/papers.vue
New file
@@ -0,0 +1,39 @@
<template>
  <!-- <iframe src="http://124.71.113.22/map/index.html?openid=PatrolManagement" style="width: 100%;height: 100%" frameborder="0"></iframe> -->
  <iframe :src="url" style="width: 100%; height: 100%" frameborder="0"></iframe>
</template>
<script>
export default {
  data() {
    return {
      url: "/securityPrint.html",
    };
  },
  created(){
      var d = this.$route.query;
      this.url += "?data=" + JSON.stringify(d);
      console.log(d,11);
  },
  mounted() {
    var flag = false,
      i = 0,
      ind = null;
    this.$store.state.tags.tagList.forEach((item, index) => {
      if (item.label == "保安证") {
        if (flag == false) {
          ind = index;
          flag = true;
        }
        i++;
      }
    });
    if (i > 1) {
      this.$store.state.tags.tagList.splice(ind, 1);
    }
  },
};
</script>
<style>
</style>
src/views/exam/performance.vue
@@ -275,30 +275,30 @@
              { validator: validatePass, required: true, trigger: "blur" },
            ],
          },
          // {
          //     label: "总成绩",
          //     prop: "allGrade",
          //     slot: true,
          //     hide:true,
          //     // 表单新增时是否禁止
          //     addDisabled: false,
          //     viewDisplay:false,
          //     // 表单新增时是否可见
          //     addDisplay: false,
          //     // 表单新增时是否为查看模式
          //     addDetail: false,
          //     // 表单编辑时是否禁止
          //     editDisabled: false,
          //     // 表单编辑时是否可见
          //     editDisplay: false,
          //     // 表单编辑时是否为查看模式
          //     editDetail: false,
          //     rules: [{
          //         required: true,
          //         message: "请输入考试名称",
          //         trigger: "blur"
          //     }]
          // },
          {
              label: "总成绩",
              prop: "allGrade",
              slot: true,
              hide:true,
              // 表单新增时是否禁止
              addDisabled: false,
              viewDisplay:false,
              // 表单新增时是否可见
              addDisplay: false,
              // 表单新增时是否为查看模式
              addDetail: false,
              // 表单编辑时是否禁止
              editDisabled: false,
              // 表单编辑时是否可见
              editDisplay: false,
              // 表单编辑时是否为查看模式
              editDetail: false,
              rules: [{
                  required: true,
                  message: "请输入考试名称",
                  trigger: "blur"
              }]
          },
          {
            label: "是否合格",
            prop: "qualified",
src/views/exam/singleperformance.vue
@@ -3,7 +3,7 @@
 * @Date: 2021-07-05 16:31:54
 * @Last Modified by: Morpheus
 * @Last Modified time: 2021-07-18 21:02:10
 * menu-name 成绩管理
 * menu-name 成绩查看
 */
<template>
  <el-row class="morpheus-box-score">
@@ -29,6 +29,18 @@
          >
            <template slot-scope="{ row }" slot="learnGrade">
              {{ row.learnGrade == -1 ? "暂未录入" : row.learnGrade }}
            </template>
            <template slot-scope="{ row }" slot="menu">
              <el-button
                type="text"
                size="mini"
                icon="el-icon-collection"
                class="start-kaoshi"
                :disabled="row.qualified==1"
                @click="securityPrint(row)"
                >保安证打印
              </el-button>
            </template>
            <!-- 自定义按钮 -->
@@ -87,13 +99,13 @@
      questionBankOption: {
        // 操作栏多余按钮去除
        delBtn: false,
        editBtn: true,
        editBtn: false,
        addBtn: false,
        selection: false,
        // 导出按钮
        excelBtn: true,
        excelBtnText: "成绩导出",
        viewBtn: true,
        viewBtn: false,
        // title: '成绩',
        align: "center",
@@ -107,17 +119,17 @@
        //dialogType: 'drawer',
        dialogClickModal: false,
        // 操作栏宽度
        menu: false,
        menu: true,
        menuWidth: 136,
        labelWidth: 120,
        column: [
          {
            label: "试卷名称",
            label: "考试名称",
            prop: "examName",
            search: true,
            searchSpan: 4,
            slot: true,
            viewDisplay:false,
            // 表单新增时是否禁止
            addDisabled: false,
            // 表单新增时是否可见
@@ -125,9 +137,9 @@
            // 表单新增时是否为查看模式
            addDetail: false,
            // 表单编辑时是否禁止
            editDisabled: true,
            editDisabled: false,
            // 表单编辑时是否可见
            editDisplay: true,
            editDisplay: false,
            // 表单编辑时是否为查看模式
            editDetail: false,
            rules: [
@@ -254,28 +266,28 @@
              { validator: validatePass, required: true, trigger: "blur" },
            ],
          },
          // {
          //     label: "总成绩",
          //     prop: "allGrade",
          //     slot: true,
          //     // 表单新增时是否禁止
          //     addDisabled: false,
          //     // 表单新增时是否可见
          //     addDisplay: true,
          //     // 表单新增时是否为查看模式
          //     addDetail: false,
          //     // 表单编辑时是否禁止
          //     editDisabled: true,
          //     // 表单编辑时是否可见
          //     editDisplay: true,
          //     // 表单编辑时是否为查看模式
          //     editDetail: false,
          //     rules: [{
          //         required: true,
          //         message: "请输入考试名称",
          //         trigger: "blur"
          //     }]
          // },
          {
              label: "总成绩",
              prop: "allGrade",
              slot: true,
              // 表单新增时是否禁止
              addDisabled: false,
              // 表单新增时是否可见
              addDisplay: true,
              // 表单新增时是否为查看模式
              addDetail: false,
              // 表单编辑时是否禁止
              editDisabled: true,
              // 表单编辑时是否可见
              editDisplay: true,
              // 表单编辑时是否为查看模式
              editDetail: false,
              rules: [{
                  required: true,
                  message: "请输入考试名称",
                  trigger: "blur"
              }]
          },
          {
            label: "是否合格",
            prop: "qualified",
@@ -334,6 +346,15 @@
  created() {},
  mounted() {},
  methods: {
    //保安证证查看
    securityPrint(row) {
      var obj = row;
      obj["name"] = "保安证";
      this.$router.push({
        path: `/exam/papers`,
        query: obj,
      });
    },
    questionBankOnLoad(page, params = {}) {
      this.questionBankLoading = false;
      getList(
src/views/people/expression.vue
@@ -79,8 +79,8 @@
  trackRecordColumn,
} from "./data";
import { getUserPractitionersInfo } from "@/api/system/user";
import { add, update, page, remove } from "@/api/performance/performance";
import { mapGetters } from "vuex";
import { add, update, page, remove } from "@/api/performance/performance";
export default {
  data() {
    let baseUrl = "https://cli.avuejs.com/api/area";
@@ -461,7 +461,7 @@
      return "";
    },
    //
    onLoad1(page, params = {}) {
    onLoad1(page1, params = {}) {
      this.loading1 = true;
      // params["cardid"] = this.cardid;
      // params["name"] = this.name;
@@ -486,20 +486,31 @@
      //   };
      // }
      var cardid = this.userInfo.user_id;
      console.log(this.userInfo, "111111111111");
      getPerformancePageInfo(cardid).then((res) => {
        //   // page.currentPage,
        //   // page.pageSize,
        //   // Object.assign(params, this.query)
        //   // values
        console.log(res);
        //   const data = res.data.data;
        //   this.page1.total = data.total;
        //   this.data1 = data.records;
        //   console.log(this.data1, 1);
        //   this.loading1 = false;
      // console.log(this.userInfo, "111111111111");
      // getPerformancePageInfo(cardid).then((res) => {
      //   //   // page.currentPage,
      //   //   // page.pageSize,
      //   //   // Object.assign(params, this.query)
      //   //   // values
      //   // const data = res.data.data;
      //   //   this.page1.total = data.total;
      //   // this.data1 = data;
      //   console.log(res, 1231131);
      //   //   console.log(this.data1, 1);
      //   //   this.loading1 = false;
      // });
      var param = {
        securityid: cardid,
      };
      page(this.current, this.size, param).then((res2) => {
        const data = res2.data.data;
        this.page1.total = data.total;
        this.data1 = data.records;
        console.log(this.data1, 1);
        this.loading1 = false;
      });
    },
    //派遣记录
    // saveLock(name, val) {
    //   localStorage.setItem(name, val);
src/views/people/job.vue
@@ -491,11 +491,11 @@
        //   // Object.assign(params, this.query)
        //   // values
        console.log(res);
        //   const data = res.data.data;
        const data = res.data.data;
        //   this.page1.total = data.total;
        //   this.data1 = data.records;
        //   console.log(this.data1, 1);
        //   this.loading1 = false;
        this.data1 = data;
        console.log(this.data1, 1);
        this.loading1 = false;
      });
    },
    //派遣记录
src/views/resource/uploadNotice.vue
@@ -97,6 +97,7 @@
        searchMenuSpan: 6,
        border: false,
        index: true,
        // align: center,
        stripe: true,
        viewBtn: true,
        selection: true,
@@ -148,6 +149,12 @@
                trigger: "blur",
              },
            ],
          },
          {
            label: "预览图",
            prop: "link",
            dataType: "string",
            type: "img",
          },
          {
            label: "附件拓展名",
@@ -333,6 +340,7 @@
        const data = res.data.data;
        this.page.total = data.total;
        this.data = data.records;
        console.log(this.data);
        this.loading = false;
        this.selectionClear();
      });
src/views/securityApply/index.vue
New file
@@ -0,0 +1,144 @@
<template>
    <div>
        <div class="security-apply">
            <div class = "security-title">
                <span>2021 保安证考试报名</span>
            </div>
            <div>
                <button class="security-btn" @click="applySubmit">报 名</button>
                <button class="security-btn" @click="cancelApply">取 消 报 名</button>
            </div>
            <div class = "apply-status">
                 <span>{{status}}</span>
            </div>
        </div>
    </div>
</template>
<script>
import { mapState } from 'vuex';
import {
  addApply,
  cancelApply,
  getSecurityApplyInfo
} from "@/api/examapi/applyexam";
export default {
  data() {
    return {
        status:null,
        id:null,
        form:{}
    };
  },
  computed: {
      ...mapState({
            userInfo: state => state.user.userInfo
        }),
  },
  mounted() {
    //查询保安人员报名信息
    this.getSecurityApplyInfo(null);
  },
  methods:{
    getSecurityApplyInfo(id){
        getSecurityApplyInfo(id,this.userInfo.user_id).then((res) => {
          this.form = res.data;
          if(res.data.id!=-1){
              this.id = res.data.id;
          }
          if(res.data.isApply==-1 || res.data.isApply==2){
            this.status = "尚未报名";
          }
          if(res.data.isApply==1){
            this.status = "已报名";
          }
        });
    },
    applySubmit(){
      addApply({
        userId: this.userInfo.user_id
      }).then(
        (res) => {
          if (res.data.data == 201) {
            this.$message({
              type: "warning",
              message: "已报名,不能重复报名",
            });
          } else if (res.data.data == 202) {
            this.$message({
              type: "warning",
              message: "报名失败",
            });
          } else {
            this.$message({
              type: "success",
              message: "报名成功",
            });
            this.getSecurityApplyInfo(null);
          }
        },
        (error) => {
          window.console.log(error);
        }
      );
    },
    cancelApply(){
      cancelApply({
        id:this.id,
        userId: this.userInfo.user_id
      }).then(
        (res) => {
          if (res.data.data == 201) {
            this.$message({
              type: "warning",
              message: "尚未报名",
            });
          } else {
            this.$message({
              type: "success",
              message: "取消报名成功",
            });
            this.getSecurityApplyInfo(null);
          }
        },
        (error) => {
          window.console.log(error);
        }
      );
    }
  }
};
</script>
<style lang="scss">
    .security-apply{
        width: 100%;
        height: 100%;
        margin-top: 250px;
        .security-title{
            width: 30%;
            font-size: 28px;
            margin-left: 35%;
            text-align: center;
            color: cadetblue;
        }
        .security-btn{
            width: 10%;
            margin-left: 45%;
            text-align: center;
            margin-top: 20px;
        }
        .apply-status{
            width: 10%;
            margin-left: 45%;
            text-align: center;
            margin-top: 20px;
        }
    }
</style>
src/views/securityEquipment/car.js
@@ -9,13 +9,13 @@
]
export var column = [
    {
        label: "id",
        prop: "id",
        hide: true,
        editDisplay: false,
        addDisplay: false
    },
    // {
    //     label: "id",
    //     prop: "id",
    //     hide: true,
    //     editDisplay: false,
    //     addDisplay: false
    // },
    {
        label: "车牌号码",
        prop: "carNumber",
@@ -64,7 +64,7 @@
    },
    {
        label: "保安公司",
        prop: "tenantName",
        prop: "deptId",
        rules: [{
            required: true,
            message: "请输入保安公司",
@@ -117,7 +117,7 @@
        // search: true,
        type: "date",
        format: "yyyy-MM-dd",
        valueFormat: "timestamp",
        valueFormat: "yyyy-MM-dd",
        searchSpan: 4,
        overHidden: true,
        rules: [{
src/views/securityEquipment/car.vue
@@ -18,6 +18,14 @@
      >
        <template slot="menuLeft">
          <el-button
            type="success"
            size="small"
            plain
            icon="el-icon-upload2"
            @click="handleImport"
            >批量导入
          </el-button>
          <el-button
            type="danger"
            size="small"
            plain
@@ -27,6 +35,24 @@
          </el-button>
        </template>
      </avue-crud>
      <el-dialog
        title="车辆导入"
        append-to-body
        :visible.sync="excelBox"
        width="555px"
      >
        <avue-form
          :option="excelOption"
          v-model="excelForm"
          :upload-after="uploadAfter"
        >
          <template slot="excelTemplate">
            <el-button type="primary" @click="handleTemplate">
              点击下载<i class="el-icon-download el-icon--right"></i>
            </el-button>
          </template>
        </avue-form>
      </el-dialog>
    </div>
  </basic-container>
</template>
@@ -38,6 +64,34 @@
export default {
  data() {
    return {
      excelBox: false,
      excelForm: {},
      excelOption: {
        submitBtn: false,
        emptyBtn: false,
        column: [
          {
            label: "文件上传",
            prop: "excelFile",
            type: "upload",
            drag: true,
            loadText: "文件上传中,请稍等",
            span: 24,
            propsHttp: {
              res: "data",
            },
            tip: "请上传 .xls,.xlsx 标准格式文件",
            action: "/api/car/import-examSubject",
          },
          {
            label: "模板下载",
            prop: "excelTemplate",
            formslot: true,
            span: 24,
          },
        ],
      },
      loading: true,
      selectionList: [],
      page: {
@@ -71,6 +125,18 @@
    },
  },
  methods: {
    handleImport() {
      this.excelBox = true;
    },
    uploadAfter(res, done, loading, column) {
      window.console.log(column);
      this.excelBox = false;
      this.refreshChange();
      done();
    },
    handleTemplate() {
      window.open(`/api/car/export-template`);
    },
    sizeChange(val) {
      this.page1.currentPage = 1;
      this.page1.pageSize = val;
@@ -88,8 +154,9 @@
      //   delete form.id;
      //   for (var k = 0; k < 13; k++) {
      // console.log
      form["deptId"] = form.tenantName;
      delete form.tenantName;
      // form["deptId"] = form.tenantName;
      // delete form.tenantName;
      // console.log(form);
      adddata(form).then(
        (res) => {
          this.onLoad(this.page);
@@ -117,9 +184,9 @@
      this.onLoad(this.page);
    },
    rowUpdate(row, index, done, loading) {
      console.log(row);
      row["deptId"] = row.tenantName;
      delete row.tenantName;
      // console.log(row);
      // row["deptId"] = row.tenantName;
      // delete row.tenantName;
      update(row).then(
        () => {
          this.onLoad(this.page);
src/views/securityEquipment/equipments.js
@@ -62,7 +62,7 @@
    },
    {
        label: "保安公司",
        prop: "tenantName",
        prop: "deptId",
        rules: [{
            required: true,
            message: "请输入组织机构",
@@ -112,11 +112,11 @@
    {
        label: "出厂日期",
        prop: "dateForProduction",
        // search: true,
        type: "date",
        format: "yyyy-MM-dd",
        valueFormat: "timestamp",
        format: 'yyyy-MM-dd',
        searchSpan: 4,
        // span:8,
        valueFormat: 'yyyy-MM-dd',
        overHidden: true,
        rules: [{
            required: true,
src/views/securityEquipment/equipments.vue
@@ -18,6 +18,14 @@
      >
        <template slot="menuLeft">
          <el-button
            type="success"
            size="small"
            plain
            icon="el-icon-upload2"
            @click="handleImport"
            >批量导入
          </el-button>
          <el-button
            type="danger"
            size="small"
            plain
@@ -27,6 +35,24 @@
          </el-button>
        </template>
      </avue-crud>
      <el-dialog
        title="题库导入"
        append-to-body
        :visible.sync="excelBox"
        width="555px"
      >
        <avue-form
          :option="excelOption"
          v-model="excelForm"
          :upload-after="uploadAfter"
        >
          <template slot="excelTemplate">
            <el-button type="primary" @click="handleTemplate">
              点击下载<i class="el-icon-download el-icon--right"></i>
            </el-button>
          </template>
        </avue-form>
      </el-dialog>
    </div>
  </basic-container>
</template>
@@ -38,6 +64,34 @@
export default {
  data() {
    return {
      excelBox: false,
      excelForm: {},
      excelOption: {
        submitBtn: false,
        emptyBtn: false,
        column: [
          {
            label: "文件上传",
            prop: "excelFile",
            type: "upload",
            drag: true,
            loadText: "文件上传中,请稍等",
            span: 24,
            propsHttp: {
              res: "data",
            },
            tip: "请上传 .xls,.xlsx 标准格式文件",
            action: "/api/examSubjectChoices/import-examSubject",
          },
          {
            label: "模板下载",
            prop: "excelTemplate",
            formslot: true,
            span: 24,
          },
        ],
      },
      loading: true,
      selectionList: [],
      page: {
@@ -71,6 +125,18 @@
    },
  },
  methods: {
    handleImport() {
      this.excelBox = true;
    },
    uploadAfter(res, done, loading, column) {
      window.console.log(column);
      this.excelBox = false;
      this.refreshChange();
      done();
    },
    handleTemplate() {
      window.open(`/api/examSubjectChoices/export-template`);
    },
    sizeChange(val) {
      this.page1.currentPage = 1;
      this.page1.pageSize = val;
@@ -87,8 +153,9 @@
      //   var form = this.data[0];
      //   delete form.id;
      //   for (var k = 0; k < 13; k++) {
      form["deptId"] = form.tenantName;
      delete form.tenantName;
      console.log(form, "12135");
      // form["deptId"] = form.tenantName;
      // delete form.tenantName;
      adddata(form).then(
        (res) => {
          this.onLoad(this.page);
@@ -116,9 +183,9 @@
      this.onLoad(this.page);
    },
    rowUpdate(row, index, done, loading) {
      // console.log(row);
      row["deptId"] = row.tenantName;
      delete row.tenantName;
      // row["deptId"] = row.tenantName;
      // delete row.tenantName;
      console.log(row.deptId);
      update(row).then(
        () => {
          this.onLoad(this.page);
src/views/securityEquipment/gun.js
@@ -70,7 +70,7 @@
    },
    {
        label: "保安公司",
        prop: "tenantName",
        prop: "deptId",
        labelWidth: 160,
        rules: [{
            required: true,
@@ -112,7 +112,7 @@
        // search: true,
        type: "date",
        format: "yyyy-MM-dd",
        valueFormat: "timestamp",
        valueFormat: "yyyy-MM-dd",
        // width: 110,
        // overHidden: true,
        // search: true,
@@ -129,7 +129,7 @@
        // search: true,
        type: "date",
        format: "yyyy-MM-dd",
        valueFormat: "timestamp",
        valueFormat: "yyyy-MM-dd",
        searchSpan: 4,
        overHidden: true,
        rules: [{
src/views/securityEquipment/gun.vue
@@ -87,8 +87,8 @@
      //   var form = this.data[0];
      //   delete form.id;
      //   for (var k = 0; k < 13; k++) {
      form["deptId"] = form.tenantName;
      delete form.tenantName;
      // form["deptId"] = form.tenantName;
      // delete form.tenantName;
      adddata(form).then(
        (res) => {
          this.onLoad(this.page);
@@ -117,8 +117,8 @@
    },
    rowUpdate(row, index, done, loading) {
      // console.log(row);
      row["deptId"] = row.tenantName;
      delete row.tenantName;
      // row["deptId"] = row.tenantName;
      // delete row.tenantName;
      update(row).then(
        () => {
          this.onLoad(this.page);
src/views/securityGuard/securityGuard.vue
@@ -39,6 +39,14 @@
        >
          <template slot="menuLeft">
            <el-button
              type="success"
              size="small"
              plain
              icon="el-icon-upload2"
              @click="handleImport1"
              >批量导入
            </el-button>
            <el-button
              type="danger"
              style="display: none"
              size="small"
@@ -208,6 +216,24 @@
            </template>
          </avue-crud>
        </el-dialog>
        <el-dialog
          title="保安员导入"
          append-to-body
          :visible.sync="excelBox1"
          width="555px"
        >
          <avue-form
            :option="excelOption1"
            v-model="excelForm1"
            :upload-after="uploadAfter1"
          >
            <template slot="excelTemplate">
              <el-button type="primary" @click="handleTemplate1">
                点击下载<i class="el-icon-download el-icon--right"></i>
              </el-button>
            </template>
          </avue-form>
        </el-dialog>
      </basic-container>
    </el-col>
  </el-row>
@@ -254,6 +280,34 @@
      }
    };
    return {
      excelBox1: false,
      excelForm1: {},
      excelOption1: {
        submitBtn: false,
        emptyBtn: false,
        column: [
          {
            label: "文件上传",
            prop: "excelFile",
            type: "upload",
            drag: true,
            loadText: "文件上传中,请稍等",
            span: 24,
            propsHttp: {
              res: "data",
            },
            tip: "请上传 .xls,.xlsx 标准格式文件",
            action: "/api/blade-user/import-user",
          },
          {
            label: "模板下载",
            prop: "excelTemplate",
            formslot: true,
            span: 24,
          },
        ],
      },
      form: {},
      search: {},
      roleBox: false,
@@ -871,6 +925,19 @@
    }
  },
  methods: {
    handleImport1() {
      this.excelBox1 = true;
    },
    uploadAfter1(res, done, loading, column) {
      window.console.log(column);
      this.excelBox1 = false;
      // this.refreshChange();
      done();
    },
    handleTemplate1() {
      window.open(`/api/examSubjectChoices/export-template`);
    },
    //行点击事件
    rowClick(row) {
      this.$router.push({
@@ -929,18 +996,18 @@
            entryTime: item.entryTime,
            name: row.realName,
            leaving: item.leaving,
            cardid: row.cardid,
            securityid: row.id,
            post: item.post,
            responsibilities: item.responsibilities,
          };
          userPractitionersList.push(info);
        });
      }
      var IdCardNo = row.cardid;
      var IdCardNo = row.id;
      add(row).then(
        () => {
          const experience = {
            cardid: IdCardNo,
            securityid: IdCardNo,
            userPractitionersInfo: userPractitionersList,
          };
          //新增从业信息
@@ -979,20 +1046,20 @@
            entryTime: item.entryTime,
            name: row.realName,
            leaving: item.leaving,
            cardid: row.cardid,
            securityid: row.id,
            post: item.post,
            responsibilities: item.responsibilities,
          };
          userPractitionersList.push(info);
        });
      }
      var IdCardNo = row.cardid;
      var IdCardNo = row.id;
      //值替换,education 放在页面会卡死
      row.education = row.education1;
      update(row).then(
        () => {
          const experience = {
            cardid: IdCardNo,
            securityid: IdCardNo,
            userPractitionersInfo: userPractitionersList,
          };
          //更新从业信息
@@ -1167,7 +1234,7 @@
          }
          var userInfo = res.data.data;
          //获取用户从业信息
          getUserPractitionersInfo(userInfo.cardid).then((res1) => {
          getUserPractitionersInfo(userInfo.id).then((res1) => {
            that.form.UserPractitionersInfo = res1.data.data;
          });
        });
src/views/securityGuard/securityGuardDetail.vue
@@ -37,7 +37,13 @@
  trackRecordColumn,
} from "./data";
import { getUserPractitionersInfo } from "@/api/system/user";
import { add, update, page, remove } from "@/api/performance/performance";
import {
  getPerformanceInfo,
  add,
  update,
  page,
  remove,
} from "@/api/performance/performance";
export default {
  data() {
    return {
@@ -154,16 +160,20 @@
    getPractitionersPageInfo() {
      var that = this;
      //获取用户从业信息
      console.log(this.cardid, "cid");
      getUserPractitionersInfo(this.cardid).then((res1) => {
      console.log(this.id, "cid");
      getUserPractitionersInfo(this.id).then((res1) => {
        that.data1 = res1.data.data;
      });
    },
    //查询当前保安员的现实表现记录信息
    getPerformancePageInfo() {
      //获取现实表现信息
      // getPerformanceInfo(this.id).then((res) => {
      //   that.data2 = res1.data.data;
      //   console.log(that.data2, 1);
      // });
      var param = {
        cardid: this.cardid,
        securityid: this.id,
      };
      page(this.current, this.size, param).then((res2) => {
        const data = res2.data.data;
@@ -174,7 +184,7 @@
      });
    },
    rowSave2(form, done, loading) {
      form.cardid = this.cardid;
      form.securityid = this.id;
      add(form).then(
        (res) => {
          this.getPerformancePageInfo(this.page2);
@@ -192,7 +202,7 @@
      // }
    },
    rowUpdate2(row, index, done, loading) {
      row.cardid = this.cardid;
      row.securityid = this.id;
      update(row).then(
        () => {
          this.getPerformancePageInfo(this.page2);
src/views/securityUnit/data.js
@@ -93,7 +93,7 @@
    // {
    //     label: "登记状态",
    //     prop: "regstsat",
    //     // addDisplay: true,
    //     // addDisplay: true,
    //     // editDisplay: true,
    //     // viewDisplay: true,
    //     // searchSpan: 4,
@@ -111,7 +111,7 @@
    //     // // }],
    // },
    {
        label: "成立日期",
        label: "注册时间",
        prop: "establishtime",
        labelWidth: 160,
        width: 130,
@@ -189,7 +189,7 @@
        // // rules: [{
        // //     required: false,
        // //     message: "请选择单位规模",
        // //     trigger: "blur"
        // //     trigger: "blur"
        // // }],
    },
    // {
@@ -391,7 +391,7 @@
    //     }]
    // },
    {
        label: "成立日期",
        label: "注册时间",
        prop: "establishtime",
        labelWidth: w,
        span: s,
@@ -400,7 +400,7 @@
        valueFormat: "timestamp",
        rules: [{
            required: true,
            message: "请输入成立日期",
            message: "请输入注册时间",
            trigger: "blur"
        }]
    },
@@ -598,7 +598,7 @@
    //     prop: "beneficial",
    //     labelWidth: w,
    //     span: s
    // },
    // },
    {
        label: "出资金额",
        prop: "capital2",
src/views/securityUnit/index.vue
@@ -35,6 +35,14 @@
            @click.stop="rowSave"
            >新增</el-button
          >
          <el-button
            type="success"
            size="small"
            plain
            icon="el-icon-upload2"
            @click="handleImport1"
            >批量导入
          </el-button>
        </template>
        <template slot="menuLeft">
          <el-button
@@ -100,8 +108,26 @@
        </div>
      </div>
    </div>
    <el-dialog
      title="保安单位导入"
      append-to-body
      :visible.sync="excelBox1"
      width="555px"
    >
      <avue-form
        :option="excelOption1"
        v-model="excelForm1"
        :upload-after="uploadAfter1"
      >
        <template slot="excelTemplate">
          <el-button type="primary" @click="handleTemplate1">
            点击下载<i class="el-icon-download el-icon--right"></i>
          </el-button>
        </template>
      </avue-form>
    </el-dialog>
  </basic-container>
</template>
</template>
<script>
import { column, column0, column1, column2 } from "./data";
@@ -120,6 +146,34 @@
    var w = 160,
      s = 12;
    return {
      excelBox1: false,
      excelForm1: {},
      excelOption1: {
        submitBtn: false,
        emptyBtn: false,
        column: [
          {
            label: "文件上传",
            prop: "excelFile",
            type: "upload",
            drag: true,
            loadText: "文件上传中,请稍等",
            span: 24,
            propsHttp: {
              res: "data",
            },
            tip: "请上传 .xls,.xlsx 标准格式文件",
            action: "/api/information/import-informaton",
          },
          {
            label: "模板下载",
            prop: "excelTemplate",
            formslot: true,
            span: 24,
          },
        ],
      },
      loading: true, //保安单位基本信息
      selectionList: [],
      page: {
@@ -266,6 +320,19 @@
    },
  },
  methods: {
    handleImport1() {
      this.excelBox1 = true;
    },
    uploadAfter1(res, done, loading, column) {
      window.console.log(column);
      this.excelBox1 = false;
      // this.refreshChange();
      done();
    },
    handleTemplate1() {
      window.open(`/api/examSubjectChoices/export-template`);
    },
    // handleChangeTABS(column) {
    //   this.typeTABS = column;
    //   // this.$message.success(JSON.stringify(column));
@@ -644,4 +711,4 @@
.el-collapse {
  border-top: 1px solid transparent !important;
}
</style>
</style>
src/views/securityUnitChild/data.js
@@ -42,7 +42,7 @@
        disabled: true,
    },
    {
        label: "成立日期",
        label: "注册时间",
        prop: "establishtime",
        span: 11,
        labelWidth: 130,
@@ -155,6 +155,7 @@
    }, {
        label: "股东",
        prop: "shareholder",
        searchLabelWidth: 55,
        search: true,
        labelWidth: w,
        span: s,
@@ -224,6 +225,7 @@
        prop: "name",
        search: true,
        labelWidth: w,
        searchLabelWidth: 55,
        span: s,
    }, {
        label: "职务",
src/views/securityUnitChild/index.vue
@@ -29,67 +29,127 @@
        </template>
      </avue-crud>-->
      <!-- 表单组件 -->
      <avue-form ref="form" v-model="obj0" :option="option0">
        <!-- <template slot-scope="scope" slot="menuForm">
      <basic-container>
        <avue-form ref="form" v-model="obj0" :option="option0">
          <!-- <template slot-scope="scope" slot="menuForm">
          <el-button @click="tip">自定义按钮</el-button>
        </template> -->
      </avue-form>
        </avue-form>
      </basic-container>
    </span>
    <span v-else-if="typeTABS.prop === 'tab2'">
      <!-- <span v-if="typeTABS.prop === 'tab2'"> -->
      <avue-crud
        :option="option1"
        :data="data1"
        :page.sync="page1"
        ref="crudrec1"
        :table-loading="loading1"
        @row-save="rowSave1"
        @search-change="searchChange1"
        @search-reset="searchReset1"
        @row-update="rowUpdate1"
        @row-del="rowDel1"
        @selection-change="selectionChange1"
        @refresh-change="refreshChange1"
      >
        <template slot="menuLeft">
          <el-button
            type="danger"
            size="small"
            plain
            icon="el-icon-delete"
            @click="handleDelete1"
            >删 除
          </el-button>
        </template>
      </avue-crud>
      <basic-container>
        <avue-crud
          :option="option1"
          :data="data1"
          :page.sync="page1"
          ref="crudrec1"
          :table-loading="loading1"
          @row-save="rowSave1"
          @search-change="searchChange1"
          @search-reset="searchReset1"
          @row-update="rowUpdate1"
          @row-del="rowDel1"
          @selection-change="selectionChange1"
          @refresh-change="refreshChange1"
        >
          <template slot="menuLeft">
            <el-button
              type="success"
              size="small"
              plain
              icon="el-icon-upload2"
              @click="handleImport"
              >批量导入
            </el-button>
            <el-button
              type="danger"
              size="small"
              plain
              icon="el-icon-delete"
              @click="handleDelete1"
              >删 除
            </el-button>
          </template>
        </avue-crud>
      </basic-container>
    </span>
    <span v-else-if="typeTABS.prop === 'tab3'">
      <avue-crud
        :option="option2"
        :data="data2"
        :page.sync="page2"
        ref="crudrec2"
        :table-loading="loading2"
        @row-save="rowSave2"
        @search-change="searchChange2"
        @search-reset="searchReset2"
        @row-update="rowUpdate2"
        @row-del="rowDel2"
        @selection-change="selectionChange2"
        @refresh-change="refreshChange2"
      <basic-container>
        <avue-crud
          :option="option2"
          :data="data2"
          :page.sync="page2"
          ref="crudrec2"
          :table-loading="loading2"
          @row-save="rowSave2"
          @search-change="searchChange2"
          @search-reset="searchReset2"
          @row-update="rowUpdate2"
          @row-del="rowDel2"
          @selection-change="selectionChange2"
          @refresh-change="refreshChange2"
        >
          <template slot="menuLeft">
            <el-button
              type="success"
              size="small"
              plain
              icon="el-icon-upload2"
              @click="handleImport1"
              >批量导入
            </el-button>
            <el-button
              type="danger"
              size="small"
              plain
              icon="el-icon-delete"
              @click="handleDelete2"
              >删 除
            </el-button>
          </template>
        </avue-crud>
      </basic-container>
    </span>
    <el-dialog
      title="出资人导入"
      append-to-body
      :visible.sync="excelBox"
      width="555px"
    >
      <avue-form
        :option="excelOption"
        v-model="excelForm"
        :upload-after="uploadAfter"
      >
        <template slot="menuLeft">
          <el-button
            type="danger"
            size="small"
            plain
            icon="el-icon-delete"
            @click="handleDelete2"
            >删 除
        <template slot="excelTemplate">
          <el-button type="primary" @click="handleTemplate">
            点击下载<i class="el-icon-download el-icon--right"></i>
          </el-button>
        </template>
      </avue-crud>
    </span>
      </avue-form>
    </el-dialog>
    <el-dialog
      title="管理人导入"
      append-to-body
      :visible.sync="excelBox1"
      width="555px"
    >
      <avue-form
        :option="excelOption1"
        v-model="excelForm1"
        :upload-after="uploadAfter1"
      >
        <template slot="excelTemplate">
          <el-button type="primary" @click="handleTemplate1">
            点击下载<i class="el-icon-download el-icon--right"></i>
          </el-button>
        </template>
      </avue-form>
    </el-dialog>
  </div>
</template> 
@@ -137,6 +197,62 @@
      ],
    };
    return {
      excelBox: false, //出资人
      excelForm: {},
      excelOption: {
        submitBtn: false,
        emptyBtn: false,
        column: [
          {
            label: "文件上传",
            prop: "excelFile",
            type: "upload",
            drag: true,
            loadText: "文件上传中,请稍等",
            span: 24,
            propsHttp: {
              res: "data",
            },
            tip: "请上传 .xls,.xlsx 标准格式文件",
            action: "/api/car/import-examSubject",
          },
          {
            label: "模板下载",
            prop: "excelTemplate",
            formslot: true,
            span: 24,
          },
        ],
      },
      excelBox1: false, //管理人
      excelForm1: {},
      excelOption1: {
        submitBtn: false,
        emptyBtn: false,
        column: [
          {
            label: "文件上传",
            prop: "excelFile",
            type: "upload",
            drag: true,
            loadText: "文件上传中,请稍等",
            span: 24,
            propsHttp: {
              res: "data",
            },
            tip: "请上传 .xls,.xlsx 标准格式文件",
            action: "/api/examSubjectChoices/import-examSubject",
          },
          {
            label: "模板下载",
            prop: "excelTemplate",
            formslot: true,
            span: 24,
          },
        ],
      },
      typeTABS: {}, //标签页
      optionTABS: {
        column: [
@@ -262,6 +378,34 @@
    },
  },
  methods: {
    handleImport() {
      //出资人
      this.excelBox = true;
    },
    uploadAfter(res, done, loading, column) {
      window.console.log(column);
      this.excelBox = false;
      this.refreshChange();
      done();
    },
    handleTemplate() {
      window.open(`/api/car/export-template`);
    },
    handleImport1() {
      //管理人
      this.excelBox1 = true;
    },
    uploadAfter1(res, done, loading, column) {
      window.console.log(column);
      this.excelBox1 = false;
      // this.refreshChange();
      done();
    },
    handleTemplate1() {
      window.open(`/api/examSubjectChoices/export-template`);
    },
    handleChangeTABS(column) {
      this.typeTABS = column;
      // this.$message.success(JSON.stringify(column));
src/views/talk/talk.vue
New file
@@ -0,0 +1,266 @@
<template>
  <basic-container>
    <avue-crud :option="option"
               :table-loading="loading"
               :data="data"
               :page.sync="page"
               :permission="permissionList"
               :before-open="beforeOpen"
               v-model="form"
               ref="crud"
               @row-update="rowUpdate"
               @row-save="rowSave"
               @row-del="rowDel"
               @search-change="searchChange"
               @search-reset="searchReset"
               @selection-change="selectionChange"
               @current-change="currentChange"
               @size-change="sizeChange"
               @refresh-change="refreshChange"
               @on-load="onLoad">
      <template slot="menuLeft">
        <el-button type="danger"
                   size="small"
                   icon="el-icon-delete"
                   plain
                   v-if="permission.talk_delete"
                   @click="handleDelete">删 除
        </el-button>
      </template>
    </avue-crud>
  </basic-container>
</template>
<script>
  import {getList, getDetail, add, update, remove} from "@/api/talk/talk";
  import {mapGetters} from "vuex";
  export default {
    data() {
      return {
        form: {},
        query: {},
        loading: true,
        page: {
          pageSize: 10,
          currentPage: 1,
          total: 0
        },
        selectionList: [],
        option: {
          height:'auto',
          calcHeight: 30,
          tip: false,
          searchShow: true,
          searchMenuSpan: 6,
          border: true,
          index: true,
          viewBtn: true,
          selection: true,
          dialogClickModal: false,
          column: [
            {
              label: "标题",
              prop: "title",
              search: true,
              rules: [{
                required: true,
                message: "请输入标题",
                trigger: "blur"
              }]
            },
            {
              label: "谈话对象",
              search: true,
              prop: "realName",
              type: "tree",
              props: {
                label: "realName",
                value: "id",
              },
              dicUrl: `/api/blade-user/selectInr?deptid=`+this.$store.getters.userInfo.dept_id,
              rules: [{
                required: true,
                message: "请输入谈话对象",
                trigger: "blur"
              }]
            },
            {
              label: "谈话内容",
              prop: "talkcontent",
              rules: [{
                required: true,
                message: "请输入谈话内容",
                trigger: "blur"
              }]
            },
            {
              label: "谈话时间",
              prop: "talktime",
              type: "date",
              format: "yyyy-MM-dd hh:mm:ss",
              valueFormat: "yyyy-MM-dd hh:mm:ss",
              rules: [{
                required: true,
                message: "请输入谈话时间",
                trigger: "blur"
              }]
            },
            {
              label: "结论",
              prop: "conclusion",
              rules: [{
                required: true,
                message: "请输入结论",
                trigger: "blur"
              }]
            },
            {
              label: "评价",
              prop: "evaluate",
              rules: [{
                required: true,
                message: "请输入评价",
                trigger: "blur"
              }]
            },
          ]
        },
        data: []
      };
    },
    computed: {
      ...mapGetters(["permission", "userInfo"]),
      permissionList() {
        return {
          addBtn: this.vaildData(this.permission.talk_add, false),
          viewBtn: this.vaildData(this.permission.talk_view, false),
          delBtn: this.vaildData(this.permission.talk_delete, false),
          editBtn: this.vaildData(this.permission.talk_edit, false)
        };
      },
      ids() {
        let ids = [];
        this.selectionList.forEach(ele => {
          ids.push(ele.id);
        });
        return ids.join(",");
      }
    },
    methods: {
      rowSave(row, done, loading) {
        add(row).then(() => {
          row.deptid=this.$store.getters.userInfo.dept_id
          this.onLoad(this.page);
          this.$message({
            type: "success",
            message: "操作成功!"
          });
          done();
        }, error => {
          loading();
          window.console.log(error);
        });
      },
      rowUpdate(row, index, done, loading) {
        update(row).then(() => {
          this.onLoad(this.page);
          this.$message({
            type: "success",
            message: "操作成功!"
          });
          done();
        }, error => {
          loading();
          console.log(error);
        });
      },
      rowDel(row) {
        this.$confirm("确定将选择数据删除?", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        })
          .then(() => {
            return remove(row.id);
          })
          .then(() => {
            this.onLoad(this.page);
            this.$message({
              type: "success",
              message: "操作成功!"
            });
          });
      },
      handleDelete() {
        if (this.selectionList.length === 0) {
          this.$message.warning("请选择至少一条数据");
          return;
        }
        this.$confirm("确定将选择数据删除?", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        })
          .then(() => {
            return remove(this.ids);
          })
          .then(() => {
            this.onLoad(this.page);
            this.$message({
              type: "success",
              message: "操作成功!"
            });
            this.$refs.crud.toggleSelection();
          });
      },
      beforeOpen(done, type) {
        if (["edit", "view"].includes(type)) {
          getDetail(this.form.id).then(res => {
            this.form = res.data.data;
          });
        }
        done();
      },
      searchReset() {
        this.query = {};
        this.onLoad(this.page);
      },
      searchChange(params, done) {
        this.query = params;
        this.page.currentPage = 1;
        this.onLoad(this.page, params);
        done();
      },
      selectionChange(list) {
        this.selectionList = list;
      },
      selectionClear() {
        this.selectionList = [];
        this.$refs.crud.toggleSelection();
      },
      currentChange(currentPage){
        this.page.currentPage = currentPage;
      },
      sizeChange(pageSize){
        this.page.pageSize = pageSize;
      },
      refreshChange() {
        this.onLoad(this.page, this.query);
      },
      onLoad(page, params = {}) {
        this.loading = true;
        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
          const data = res.data.data;
          this.page.total = data.total;
          this.data = data.records;
          this.loading = false;
          this.selectionClear();
        });
      }
    }
  };
</script>
<style>
</style>
src/views/traincompany/index.vue
@@ -30,14 +30,21 @@
    >
      <template slot-scope="{ type,row }" slot="menu">
                            <el-button
                            :type="type"
                            size="small"
                            icon="el-icon-edit"
                            @click="handleTrainApply(row)"
                            >报名
                            </el-button>
                        </template>
          <el-button
          :type="type"
          size="small"
          icon="el-icon-edit"
          @click="handleTrainApply(row)"
          >报名
          </el-button>
          <el-button
          :type="type"
          size="small"
          icon="el-icon-edit"
          @click="handleTrainApplyBatch(row)"
          >批量报名
          </el-button>
      </template>
    </avue-crud>
    <el-dialog
@@ -64,7 +71,7 @@
import { mapState } from 'vuex';
export default {
  data() {
    return {
      form: {},
@@ -115,7 +122,7 @@
            width: 120,
          },
          {
            label: "成立日期",
            label: "注册时间",
            prop: "establishtime",
            type: "date",
            format: "yyyy-MM-dd",
@@ -240,7 +247,7 @@
                  trigger: "blur"
              }],
          },
        ],
      },
      data: [],
@@ -268,13 +275,45 @@
    })
  },
  methods: {
    handleTrainApply(row){
    //保安公司批量报名
    handleTrainApplyBatch(row){
      this.dialogDisable = true;
      this.optionTrainApply.column.trainingUnitId = row.departmentid;
      this.formTrainApply = {
        trainingUnitId: row.departmentid
      }
    },
    //未持证保安人员报名
    handleTrainApply(row,done,loading){
      row['userId'] = this.userInfo.user_id;
      row['trainingUnitId'] = row.departmentid;
      adddata(row).then(
        (res) => {
          // this.onLoad(this.page);
          if(res.data.data==201){
              this.$message({
                type: "warning",
                message:"已报名,不能重复报名",
              });
          }else if(res.data.data==201){
              this.$message({
                type: "warning",
                message:"报名失败",
              });
          }else{
              this.$message({
                type: "success",
                message:"报名成功",
              });
          }
          done();
        },
        (error) => {
          window.console.log(error);
          loading();
        }
      );
    },
    //关闭窗口清除数据
    closeDialog(){
      this.$refs.formTrainApply.resetFields();
vue.config.js
@@ -1,6 +1,6 @@
module.exports = {
  //路径前缀
  publicPath: "/enterprises/",
  publicPath: "/",
  lintOnSave: true,
  productionSourceMap: false,
  chainWebpack: (config) => {
@@ -28,10 +28,10 @@
      '/api': {
        //本地服务接口地址
        // target: 'http://localhost',
        // target: 'http://192.168.0.114:81',//钟W
        target: 'http://192.168.0.109:81',//钟W
        // target: 'http://localhost:81',//原W
        target: 'http://192.168.0.108:81',//原W
        // target: 'http://192.168.0.104:80',//唐N
        // target: 'http://192.168.0.108:81',//原W
        // target: 'http://192.168.0.109:81',//唐N
        //远程演示服务地址,可用于直接启动项目
        // target: 'https://saber.bladex.vip/api',
        ws: true,