From b8dfc98b089e47fdb3e269941bbd2de3f7fb7de1 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Mon, 13 Sep 2021 17:14:57 +0800
Subject: [PATCH] Merge branch 'master' of http://s16s652780.51mypc.cn:49896/r/zhba_enterprises

---
 src/views/trainExam/index.vue                        |   30 
 src/page/index/top/top-menu.vue                      |  108 
 src/views/exam/examPayment.vue                       |  394 +++++
 src/views/resource/uploadPolicyRelease.vue           |    3 
 src/api/trainingRegistration/trainingRegistration.js |   26 
 src/views/trainApply/index.vue                       |  136 +
 src/api/examapi/performance.js                       |   37 
 src/views/trainingRegistration/index.vue             |  228 ++
 src/api/system/dept.js                               |   16 
 src/views/dispatch/dispatchChildoperable.vue         |   21 
 src/views/resource/uploadNotice.vue                  |    3 
 public/papersTrain.html                              |  222 +++
 src/store/getters.js                                 |    1 
 src/views/zc/zc.vue                                  |  295 +++
 src/views/securityUnitChild/data.js                  |  678 +++++---
 public/img/securityCertificate/QQ截图.png              |    0 
 src/views/licenseApproval/branchOffice.vue           |   23 
 src/lang/zh.js                                       |  209 +-
 src/views/securityGuard/securityGuardDetail.vue      |   21 
 src/store/modules/user.js                            |   60 
 public/img/securityCertificate/bj2.jpeg              |    0 
 src/page/index/tags.vue                              |  357 ++--
 src/views/trainExam/singleperformance.vue            |   23 
 src/views/securityUnitChild/businessLicense.vue      |   27 
 src/views/companyApply/index.vue                     |    1 
 src/views/licenseApproval/securityGuard.vue          |   23 
 src/views/licenseApproval/crossRegion.vue            |   22 
 src/views/securityUnitChild/licence.vue              |   27 
 src/config/website.js                                |   76 +
 src/page/login/index.vue                             |   47 
 src/views/applyexam/index.vue                        |  200 ++
 src/router/views/index.js                            |   29 
 src/views/securityGuard/securityGuard.vue            |   54 
 src/views/trainExam/performance.vue                  |   51 
 src/views/system/user.vue                            |    1 
 src/views/applydetailed/index.vue                    |    1 
 src/api/exam/examPayment.js                          |   52 
 public/img/securityCertificate/bj.jpeg               |    0 
 src/views/securityUnitChild/index.vue                |   81 
 src/page/login/codelogin.vue                         |  331 +++
 src/api/system/user.js                               |    3 
 src/views/trainingRegistration/data.js               |   84 
 src/views/securityUnitChild/social.vue               |   10 
 src/api/zc/zc.js                                     |   57 
 src/views/traincompany/index.vue                     |  112 
 src/views/securityGuard/securityCertificate.vue      |  161 ++
 src/views/applyexam/papers.vue                       |   13 
 src/views/securityEquipment/equipments.vue           |   38 
 src/api/examapi/applyexam.js                         |    9 
 src/views/licenseApproval/securityTraining.vue       |    4 
 public/img/securityCertificate/123.png               |    0 
 src/views/resource/uploadNotification.vue            |    3 
 src/views/securityAnalysis/index.vue                 |    6 
 53 files changed, 3,455 insertions(+), 959 deletions(-)

diff --git a/public/img/securityCertificate/123.png b/public/img/securityCertificate/123.png
new file mode 100644
index 0000000..d793536
--- /dev/null
+++ b/public/img/securityCertificate/123.png
Binary files differ
diff --git "a/public/img/securityCertificate/QQ\346\210\252\345\233\276.png" "b/public/img/securityCertificate/QQ\346\210\252\345\233\276.png"
new file mode 100644
index 0000000..6435ead
--- /dev/null
+++ "b/public/img/securityCertificate/QQ\346\210\252\345\233\276.png"
Binary files differ
diff --git a/public/img/securityCertificate/bj.jpeg b/public/img/securityCertificate/bj.jpeg
new file mode 100644
index 0000000..0433980
--- /dev/null
+++ b/public/img/securityCertificate/bj.jpeg
Binary files differ
diff --git a/public/img/securityCertificate/bj2.jpeg b/public/img/securityCertificate/bj2.jpeg
new file mode 100644
index 0000000..112497f
--- /dev/null
+++ b/public/img/securityCertificate/bj2.jpeg
Binary files differ
diff --git a/public/papersTrain.html b/public/papersTrain.html
new file mode 100644
index 0000000..7b2095c
--- /dev/null
+++ b/public/papersTrain.html
@@ -0,0 +1,222 @@
+<!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;
+        }
+        /* .print-header {
+            width: 100%;
+            text-align: center;
+        } */
+        
+        .print {
+            position: relative;
+            left: 47%;
+            margin-top: 30px;
+            width: 7%;
+            height: 30px;
+            border: 0px;
+            border-radius: 6px;
+            color: #fff;
+            background-color: #1D5CE4;
+            letter-spacing: 4px;
+        }
+        
+        .user-info-table {
+            margin-top: 30px;
+            width: 90%;
+            height: 60%;
+            border: 1px solid #000;
+            background-color: #fff;
+        }
+        
+        .user-info-tr {
+            height: 50px;
+        }
+        
+        .avatar {
+            width: 140px;
+            height: 190px;
+        }
+        
+        .title {
+            margin-top: 20px;
+        }
+        
+        .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>
+
+        <!--startprint-->
+        <div id="table">
+            <!-- <span class="title">准考证信息</span>
+            <table class="user-info-table" border="1px" align="center" cellspacing="0" cellpadding="10">
+                <tr class="user-info-tr">
+                    <td width="150px">姓名</td>
+                    <td width="150px"></td>
+                    <td width="150px">身份证号</td>
+                    <td width="150px"></td>
+                    <td rowspan="4" align="center" width="150px" v-if="data.avatar == ''">
+                        照片
+                    </td>
+                </tr>
+
+                <tr class="user-info-tr">
+                    <td>准考证号</td>
+                    <td></td>
+                    <td width="150px">性别</td>
+                    <td width="150px" v-if="data.sex == 1">男</td>
+                </tr>
+
+                <tr class="user-info-tr">
+                    <td>考点名称</td>
+                    <td colspan="3"></td>
+                </tr>
+
+                <tr class="user-info-tr">
+                    <td>考点地址</td>
+                    <td colspan="3"></td>
+                </tr>
+
+                <tr class="user-info-tr" style="height:5px">
+                    <td colspan="5"></td>
+                </tr>
+
+                <tr class="user-info-tr">
+                    <td>考试名称</td>
+                    <td>考试类型</td>
+                    <td>考试时间</td>
+                    <td>考场号</td>
+                    <td>座位号</td>
+                </tr>
+
+                <tr class="user-info-tr">
+                    <td>{{data.examName}}</td>
+                    <td></td>
+                    <td></td>
+                    <td></td>
+                    <td></td>
+                </tr>
+
+            </table>-->
+        </div>
+        <!--endprint-->
+
+
+        <div class="print-header">
+            <button onclick="preview(1)" class="print">打印</button>
+        </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")).id;
+        var examType = JSON.parse(getData("data")).examType;
+        // console.log(JSON.parse(getData("data")), 111);
+
+        axios.get('http://223.82.109.183:2080/api/apply/getApplyInfo?id=' + id + "&applyExamType=" + examType).then(function(res) {
+            // axios.get('http://localhost:81/apply/getApplyInfo?id=' + id + "&applyExamType=" + examType).then(function(res) {
+            var data = res.data.data;
+            var str = `<span class="title">${data.examName}</span>
+                    <span class="title">准考证信息</span>
+                    <table class="user-info-table" border="1px" align="center" cellspacing="0" cellpadding="10">
+                        <tr class="user-info-tr">
+                            <td width="150px">姓名</td>
+                            <td width="150px">${data.realName}</td>
+                            <td width="150px">身份证号</td>
+                            <td width="150px">${data.idCardNo}</td>
+                            <td rowspan="4" align="center" width="150px"">
+                                <img class="my-picture" src="${data.myPicture}" />
+                            </td>
+                        </tr>
+
+                        <tr class="user-info-tr">
+                            <td>准考证号</td>
+                            <td>${data.candidateNo}</td>
+                            <td width="150px">性别</td>
+                            <td width="150px">${data.sex==1?"男":(data.sex==2?"女":"")}</td>
+                        </tr>
+
+                        <tr class="user-info-tr">
+                            <td>考点名称</td>
+                            <td colspan="3">${data.company}</td>
+                        </tr>
+
+                        <tr class="user-info-tr">
+                            <td>考点地址</td>
+                            <td colspan="3">${data.address}</td>
+                        </tr>
+
+                        <tr class="user-info-tr" style="height:5px">
+                            <td colspan="5"></td>
+                        </tr>
+
+                        <tr class="user-info-tr">
+                            <td colspan="2">考试名称</td>
+                            <td width="120px">考试类型</td>
+                            <td width="180px" colspan="2">考试时间</td>
+                        </tr>
+
+                        <tr class="user-info-tr">
+                            <td colspan="2">${data.examName}</td>
+                            <td width="120px">培训考试</td>
+                            <td width="180px" colspan="2">${data.stringTime}</td>
+                        </tr>
+
+                    </table>`
+
+            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>
\ No newline at end of file
diff --git a/src/api/exam/examPayment.js b/src/api/exam/examPayment.js
new file mode 100644
index 0000000..3c41947
--- /dev/null
+++ b/src/api/exam/examPayment.js
@@ -0,0 +1,52 @@
+import request from '@/router/axios';
+
+
+export const getExamPaymentList = (current, size, params) => {
+    return request({
+        url: '/api/examPayment/page',
+        method: 'get',
+        params: {
+            ...params,
+            current,
+            size
+        }
+    })
+}
+
+
+export const remove = (ids) => {
+    return request({
+        url: '/api/examPayment/remove',
+        method: 'post',
+        params: {
+            ids,
+        }
+    })
+}
+
+export const add = (row) => {
+    return request({
+        url: '/api/examPayment/submit',
+        method: 'post',
+        data: row
+    })
+}
+
+export const update = (row) => {
+    return request({
+        url: '/api/examPayment/submit',
+        method: 'post',
+        data: row
+    })
+}
+
+
+export const getExamPayment = (id) => {
+    return request({
+        url: '/api/examPayment/detail',
+        method: 'get',
+        params: {
+            id,
+        }
+    })
+}
\ No newline at end of file
diff --git a/src/api/examapi/applyexam.js b/src/api/examapi/applyexam.js
index 7f6700f..5530ebd 100644
--- a/src/api/examapi/applyexam.js
+++ b/src/api/examapi/applyexam.js
@@ -60,16 +60,11 @@
     })
 }
 
-export const addExam = (ids, examTime, startTime, endTime) => {
+export const addExam = (params) => {
     return request({
         url: '/api/apply/batchExam',
         method: 'post',
-        params: {
-            ids,
-            examTime,
-            startTime,
-            endTime
-        }
+        data: params
     })
 }
 
diff --git a/src/api/examapi/performance.js b/src/api/examapi/performance.js
index ba130f1..36582a6 100644
--- a/src/api/examapi/performance.js
+++ b/src/api/examapi/performance.js
@@ -1,21 +1,30 @@
 import request from '@/router/axios';
 
 export const getList = (current, size, params) => {
-  return request({
-    url: '/api/examScore/page',
-    method: 'get',
-    params: {
-      ...params,
-      current,
-      size
-    }
-  })
+    return request({
+        url: '/api/examScore/page',
+        method: 'get',
+        params: {
+            ...params,
+            current,
+            size
+        }
+    })
 }
 
 export const update = (row) => {
-  return request({
-    url: '/api/examScore/updateExamScore',
-    method: 'post',
-    data: row
-  })
+    return request({
+        url: '/api/examScore/updateExamScore',
+        method: 'post',
+        data: row
+    })
 }
+
+
+export const updateAbsent = (row) => {
+    return request({
+        url: '/api/examScore/updateAbsent',
+        method: 'post',
+        data: row
+    })
+}
\ No newline at end of file
diff --git a/src/api/system/dept.js b/src/api/system/dept.js
index d6d3f47..2b8b1bf 100644
--- a/src/api/system/dept.js
+++ b/src/api/system/dept.js
@@ -88,4 +88,18 @@
             parentId
         }
     })
-}
\ No newline at end of file
+}
+
+export const ss = () => {
+  return request({
+    url: '/api/blade-system/dept/selectInfo',
+    method: 'get',
+  })
+}
+
+export const rs = () => {
+  return request({
+    url: '/api/blade-system/role/selectRole',
+    method: 'get',
+  })
+}
diff --git a/src/api/system/user.js b/src/api/system/user.js
index 097f4ed..0c21d46 100644
--- a/src/api/system/user.js
+++ b/src/api/system/user.js
@@ -14,12 +14,13 @@
 }
 
 
-export const getListByDeptId = (deptId) => {
+export const getListByDeptId = (deptId, status) => {
     return request({
         url: '/api/blade-user/page-security-units',
         method: 'get',
         params: {
             deptId,
+            status
         }
     })
 }
diff --git a/src/api/trainingRegistration/trainingRegistration.js b/src/api/trainingRegistration/trainingRegistration.js
index 9b93056..5bb75da 100644
--- a/src/api/trainingRegistration/trainingRegistration.js
+++ b/src/api/trainingRegistration/trainingRegistration.js
@@ -38,6 +38,23 @@
     })
 }
 
+
+export const cancelTrainAudit = (row) => {
+    return request({
+        url: '/api/trainingRegistration/cancelTrainAudit',
+        method: 'post',
+        data: row
+    })
+}
+
+export const auditSucess = (row) => {
+    return request({
+        url: '/api/trainingRegistration/auditSucess',
+        method: 'post',
+        data: row
+    })
+}
+
 export const update = (row) => {
     return request({
         url: '/api/trainingRegistration/update',
@@ -57,15 +74,10 @@
 }
 
 
-export const addExam = (ids, examTime, startTime, endTime) => {
+export const addExam = (params) => {
     return request({
         url: '/api/trainingRegistration/batchExam',
         method: 'post',
-        params: {
-            ids,
-            examTime,
-            startTime,
-            endTime
-        }
+        data: params
     })
 }
\ No newline at end of file
diff --git a/src/api/zc/zc.js b/src/api/zc/zc.js
new file mode 100644
index 0000000..9201feb
--- /dev/null
+++ b/src/api/zc/zc.js
@@ -0,0 +1,57 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/zc/page',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getDetail = (id) => {
+  return request({
+    url: '/api/zc/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}
+
+export const remove = (ids) => {
+  return request({
+    url: '/api/zc/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/zc/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const update = (row) => {
+  return request({
+    url: '/api/zc/update',
+    method: 'post',
+    data: row
+  })
+}
+
+export const inster = (row) => {
+  return request({
+    url: '/api/zc/inster',
+    method: 'post',
+    data: row
+  })
+}
diff --git a/src/config/website.js b/src/config/website.js
index cd9256c..c4e0314 100644
--- a/src/config/website.js
+++ b/src/config/website.js
@@ -54,7 +54,7 @@
                     value: '/securityUnit/localCompany',
                     imgs: 'url(/img/gldw.jpg)'
                 }, {
-                    label: '统计分析',
+                    label: '智能分析',
                     value: '/securityAnalysis/index',
                     imgs: 'url(/img/glgz.jpg)'
                 },]
@@ -82,6 +82,80 @@
                     value: '/expression/index',
                     imgs: 'url(/img/tongji.jpg)'
                 },]
+        },
+        {
+            userName: '未持证保安',
+            list: [
+                {
+                    label: '保安员信息',
+                    value: '/securityMan/index',
+                    imgs: 'url(/img/yijianbaoj.jpg)'
+                }, {
+                    label: '派遣记录',
+                    value: '/dispatchChildoperableSee/index',
+                    imgs: 'url(/img/fangyi.jpg)'
+                }, {
+                    label: '从业记录',
+                    value: '/job/index',
+                    imgs: 'url(/img/anjian.jpg)'
+                }, {
+                    label: '工作汇报',
+                    value: '/workreport/workreport',
+                    imgs: 'url(/img/tiwen.jpg)'
+                }, {
+                    label: '表现记录',
+                    value: '/expression/index',
+                    imgs: 'url(/img/tongji.jpg)'
+                },]
+        },
+        {
+            userName: '保安公司管理员',
+            list: [
+                {
+                    label: '智能分析',
+                    value: '/securityAnalysis/index',
+                    imgs: 'url(/img/glgz.jpg)'
+                }, {
+                    label: '保安员管理',
+                    value: '/securityGuard/index',
+                    imgs: 'url(/img/glba.jpg)'
+                }, {
+                    label: '单位信息',
+                    value: '/securityUnitChild/index',
+                    imgs: 'url(/img/gldw.jpg)'
+                }, {
+                    label: '派遣记录',
+                    value: '/dispatch/dispatchChildoperable',
+                    imgs: 'url(/img/glgj.jpg)'
+                }, {
+                    label: '通知公告',
+                    value: '/desk/index',
+                    imgs: 'url(/img/gltz.jpg)'
+                },]
+        }, {
+            userName: '公安管理员',
+            list: [
+                {
+                    label: '智能分析',
+                    value: '/securityAnalysis/index',
+                    imgs: 'url(/img/glgz.jpg)'
+                }, {
+                    label: '保安员管理',
+                    value: '/securityGuard/index',
+                    imgs: 'url(/img/glba.jpg)'
+                }, {
+                    label: '公司管理',
+                    value: '/securityUnit/index',
+                    imgs: 'url(/img/gldw.jpg)'
+                }, {
+                    label: '通知公告',
+                    value: '/desk/index',
+                    imgs: 'url(/img/gltz.jpg)'
+                }, {
+                    label: '工作汇报',
+                    value: '/workreport/workreply',
+                    imgs: 'url(/img/glgj.jpg)'
+                }]
         }
     ],
 
diff --git a/src/lang/zh.js b/src/lang/zh.js
index 0e17b06..2e4e965 100644
--- a/src/lang/zh.js
+++ b/src/lang/zh.js
@@ -1,108 +1,113 @@
 export default {
-    tip: '提示',
-    title: '保安服务企业管理',
-    logoutTip: '退出系统, 是否继续?',
-    submitText: '确定',
-    cancelText: '取消',
-    search: '请输入搜索内容',
-    menuTip: '没有发现菜单',
-    wel: {
-        info: '早安,Smallwei,Avuex一款超乎你想象的框架!',
-        dept: '我是avue团队下的一个部门-哈皮部门-哈皮职位',
-        team: '团队内排名',
-        project: '项目访问',
-        count: '项目数',
-        data: {
-            subtitle: '实时',
-            column1: '分类统计',
-            column2: '附件统计',
-            column3: '文章统计',
-            key1: '分',
-            key2: '附',
-            key3: '评',
-            text1: '当前分类总记录数',
-            text2: '当前上传的附件数',
-            text3: '评论次数'
-        },
-        data2: {
-            column1: '今日注册',
-            column2: '今日登录',
-            column3: '今日订阅',
-            column4: '今日评论'
-        },
-        data3: {
-            column1: '转化率(日同比 28%)',
-            column2: '签到率(日同比 11%)',
-            column3: '签到率(日同比 11%)'
-        },
-        data4: {
-            column1: '错误日志',
-            column2: '数据展示',
-            column3: '权限管理',
-            column4: '用户管理'
-        },
-        table: {
-            rw: '工作任务',
-            nr: '工作内容',
-            sj: '工作时间'
-        }
+  tip: '提示',
+  title: '保安服务企业管理',
+  logoutTip: '退出系统, 是否继续?',
+  submitText: '确定',
+  cancelText: '取消',
+  search: '请输入搜索内容',
+  menuTip: '没有发现菜单',
+  wel: {
+    info: '早安,Smallwei,Avuex一款超乎你想象的框架!',
+    dept: '我是avue团队下的一个部门-哈皮部门-哈皮职位',
+    team: '团队内排名',
+    project: '项目访问',
+    count: '项目数',
+    data: {
+      subtitle: '实时',
+      column1: '分类统计',
+      column2: '附件统计',
+      column3: '文章统计',
+      key1: '分',
+      key2: '附',
+      key3: '评',
+      text1: '当前分类总记录数',
+      text2: '当前上传的附件数',
+      text3: '评论次数'
     },
-    route: {
-        info: '个人信息',
-        website: 'bladex官网',
-        avuexwebsite: 'avuex官网',
-        dashboard: '首页',
-        more: '更多',
-        tags: '标签',
-        store: '本地存储',
-        api: '全局函数',
-        logs: '日志监控',
-        table: '表格',
-        form: '表单',
-        top: '返回顶部',
-        data: '数据展示',
-        permission: '权限',
-        error: '异常页面',
-        test: '测试页面'
+    data2: {
+      column1: '今日注册',
+      column2: '今日登录',
+      column3: '今日订阅',
+      column4: '今日评论'
     },
-    login: {
-        title: '登录 ',
-        info: '保安服务企业管理',
-        tenantId: '请输入保安单位ID',
-        username: '请输入账号',
-        password: '请输入密码',
-        wechat: '微信',
-        qq: 'QQ',
-        github: 'github',
-        gitee: '码云',
-        phone: '请输入手机号',
-        code: '请输入验证码',
-        submit: '登录',
-        userLogin: '账号密码登录',
-        phoneLogin: '手机号登录',
-        thirdLogin: '第三方系统登录',
-        msgText: '发送验证码',
-        msgSuccess: '秒后重发',
+    data3: {
+      column1: '转化率(日同比 28%)',
+      column2: '签到率(日同比 11%)',
+      column3: '签到率(日同比 11%)'
     },
-    navbar: {
-        logOut: '退出登录',
-        userinfo: '个人信息',
-        dashboard: '首页',
-        lock: '锁屏',
-        bug: '没有错误日志',
-        bugs: '条错误日志',
-        screenfullF: '退出全屏',
-        screenfull: '全屏',
-        language: '中英文',
-        notice: '消息通知',
-        theme: '主题',
-        color: '换色'
+    data4: {
+      column1: '错误日志',
+      column2: '数据展示',
+      column3: '权限管理',
+      column4: '用户管理'
     },
-    tagsView: {
-        search: '搜索',
-        menu: '更多',
-        clearCache: '清除缓存',
-        closeOthers: '关闭其它',
-        closeAll: '关闭所有'
+    table: {
+      rw: '工作任务',
+      nr: '工作内容',
+      sj: '工作时间'
     }
-}
\ No newline at end of file
+  },
+  route: {
+    info: '个人信息',
+    website: 'bladex官网',
+    avuexwebsite: 'avuex官网',
+    dashboard: '首页',
+    more: '更多',
+    tags: '标签',
+    store: '本地存储',
+    api: '全局函数',
+    logs: '日志监控',
+    table: '表格',
+    form: '表单',
+    top: '返回顶部',
+    data: '数据展示',
+    permission: '权限',
+    error: '异常页面',
+    test: '测试页面'
+  },
+  login: {
+    title: '登录 ',
+    info: '保安服务企业管理',
+    tenantId: '请输入保安单位ID',
+    username: '请输入账号',
+    password: '请输入密码',
+    password2: '请再次输入密码',
+    name: '请输入姓名',
+    wechat: '微信',
+    cardid: '请输入身份证号',
+    qq: 'QQ',
+    zc: '注册',
+    gb: '关闭',
+    github: 'github',
+    gitee: '码云',
+    phone: '请输入手机号',
+    code: '请输入验证码',
+    submit: '登录',
+    userLogin: '账号密码登录',
+    phoneLogin: '账号注册',
+    thirdLogin: '第三方系统登录',
+    msgText: '发送验证码',
+    msgSuccess: '秒后重发',
+  },
+  navbar: {
+    logOut: '退出登录',
+    userinfo: '个人信息',
+    dashboard: '首页',
+    lock: '锁屏',
+    bug: '没有错误日志',
+    bugs: '条错误日志',
+    screenfullF: '退出全屏',
+    screenfull: '全屏',
+    language: '中英文',
+    notice: '消息通知',
+    theme: '主题',
+    color: '换色'
+  },
+  tagsView: {
+    search: '搜索',
+    menu: '更多',
+    clearCache: '清除缓存',
+    closeOthers: '关闭其它',
+    closeAll: '关闭所有'
+  }
+}
diff --git a/src/page/index/tags.vue b/src/page/index/tags.vue
index ab14485..86b13a5 100644
--- a/src/page/index/tags.vue
+++ b/src/page/index/tags.vue
@@ -1,186 +1,231 @@
 <template>
-  <div class="avue-tags"
-       v-if="showTag">
+  <div class="avue-tags" v-if="showTag">
     <!-- tag盒子 -->
-    <div v-if="contextmenuFlag"
-         class="avue-tags__contentmenu"
-         :style="{left:contentmenuX+'px',top:contentmenuY+'px'}">
-      <div class="item"
-           @click="clearCacheTags">{{$t('tagsView.clearCache')}}
+    <div
+      v-if="contextmenuFlag"
+      class="avue-tags__contentmenu"
+      :style="{ left: contentmenuX + 'px', top: contentmenuY + 'px' }"
+    >
+      <div class="item" @click="clearCacheTags">
+        {{ $t("tagsView.clearCache") }}
       </div>
-      <div class="item"
-           @click="closeOthersTags">{{$t('tagsView.closeOthers')}}
+      <div class="item" @click="closeOthersTags">
+        {{ $t("tagsView.closeOthers") }}
       </div>
-      <div class="item"
-           @click="closeAllTags">{{$t('tagsView.closeAll')}}
+      <div class="item" @click="closeAllTags">
+        {{ $t("tagsView.closeAll") }}
       </div>
     </div>
-    <div class="avue-tags__box"
-         :class="{'avue-tags__box--close':!website.isFirstPage}">
-      <el-tabs v-model="active"
-               type="card"
-               @contextmenu.native="handleContextmenu"
-               :closable="tagLen!==1"
-               @tab-click="openTag"
-               @edit="menuTag">
-        <el-tab-pane :key="item.value"
-                     v-for="item in tagList"
-                     :label="generateTitle(item)"
-                     :name="item.value">
+    <div
+      class="avue-tags__box"
+      :class="{ 'avue-tags__box--close': !website.isFirstPage }"
+    >
+      <el-tabs
+        v-model="active"
+        type="card"
+        @contextmenu.native="handleContextmenu"
+        :closable="tagLen !== 1"
+        @tab-click="openTag"
+        @edit="menuTag"
+      >
+        <el-tab-pane
+          :key="item.value"
+          v-for="item in tagList"
+          :label="generateTitle(item)"
+          :name="item.value"
+        >
         </el-tab-pane>
-
       </el-tabs>
       <el-dropdown class="avue-tags__menu">
-        <el-button type="primary"
-                   size="mini">
-          {{$t('tagsView.menu')}}
+        <el-button type="primary" size="mini">
+          {{ $t("tagsView.menu") }}
           <i class="el-icon-arrow-down el-icon--right"></i>
         </el-button>
         <el-dropdown-menu slot="dropdown">
-          <el-dropdown-item @click.native="$parent.isSearch=true">{{$t('tagsView.search')}}</el-dropdown-item>
-          <el-dropdown-item @click.native="closeOthersTags">{{$t('tagsView.closeOthers')}}</el-dropdown-item>
-          <el-dropdown-item @click.native="closeAllTags">{{$t('tagsView.closeAll')}}</el-dropdown-item>
-          <el-dropdown-item @click.native="clearCacheTags">{{$t('tagsView.clearCache')}}</el-dropdown-item>
+          <el-dropdown-item @click.native="$parent.isSearch = true">{{
+            $t("tagsView.search")
+          }}</el-dropdown-item>
+          <el-dropdown-item @click.native="closeOthersTags">{{
+            $t("tagsView.closeOthers")
+          }}</el-dropdown-item>
+          <el-dropdown-item @click.native="closeAllTags">{{
+            $t("tagsView.closeAll")
+          }}</el-dropdown-item>
+          <el-dropdown-item @click.native="clearCacheTags">{{
+            $t("tagsView.clearCache")
+          }}</el-dropdown-item>
         </el-dropdown-menu>
       </el-dropdown>
     </div>
-
   </div>
 </template>
 <script>
-  import {mapGetters, mapState} from "vuex";
-  import {clearCache} from "@/api/user";
+import { mapGetters, mapState } from "vuex";
+import { clearCache } from "@/api/user";
+import { getTopMenu, getRoutes } from "@/api/system/menu";
 
-  export default {
-    name: "tags",
-    data() {
-      return {
-        active: "",
-        contentmenuX: "",
-        contentmenuY: "",
-        contextmenuFlag: false
-      };
-    },
-    created() {
-    },
-    mounted() {
+export default {
+  name: "tags",
+  data() {
+    return {
+      active: "",
+      contentmenuX: "",
+      contentmenuY: "",
+      contextmenuFlag: false,
+    };
+  },
+  created() {},
+  mounted() {
+    this.setActive();
+    this.tagList.forEach((item, index) => {
+      if (item.label == "首页" && this.userInfo.role_name == "培训公司管理员") {
+        this.tagList.splice(index, 1);
+        this.$store.commit("set_hideHome", true);
+        // getRoutes().then((res) => {
+        //   const data = res.data.data;
+        //   var child = {},
+        //     findchild = (data) => {
+        //       if (data.children != undefined) {
+        //         findchild(data.children[0]);
+        //       } else {
+        //         child = data;
+        //       }
+        //     };
+        //   findchild(data[0]);
+        //   this.$router.push({ path: child.path });
+        // });
+        var d = this.$router.options.routes,
+          path = "";
+        for (var k in d) {
+          if (d[k].peixun == true) {
+            // console.log(d[k]);
+            path = d[k].path;
+          }
+        }
+        this.$router.push({ path: path });
+      } else {
+        this.$store.commit("set_hideHome", false);
+      }
+    });
+  },
+  watch: {
+    tag() {
       this.setActive();
     },
-    watch: {
-      tag() {
-        this.setActive();
-      },
-      contextmenuFlag() {
-        window.addEventListener("mousedown", this.watchContextmenu);
+    contextmenuFlag() {
+      window.addEventListener("mousedown", this.watchContextmenu);
+    },
+  },
+  computed: {
+    ...mapGetters(["tagWel", "tagList", "tag", "website", "userInfo", "menu"]),
+    ...mapState({
+      showTag: (state) => state.common.showTag,
+    }),
+    tagLen() {
+      return this.tagList.length || 0;
+    },
+  },
+  methods: {
+    generateTitle(item) {
+      return this.$router.$avueRouter.generateTitle(
+        item.label,
+        (item.meta || {}).i18n
+      );
+    },
+    watchContextmenu(event) {
+      if (!this.$el.contains(event.target) || event.button !== 0) {
+        this.contextmenuFlag = false;
+      }
+      window.removeEventListener("mousedown", this.watchContextmenu);
+    },
+    handleContextmenu(event) {
+      let target = event.target;
+      // 解决 https://github.com/d2-projects/d2-admin/issues/54
+      let flag = false;
+      if (target.className.indexOf("el-tabs__item") > -1) flag = true;
+      else if (target.parentNode.className.indexOf("el-tabs__item") > -1) {
+        target = target.parentNode;
+        flag = true;
+      }
+      if (flag) {
+        event.preventDefault();
+        event.stopPropagation();
+        this.contentmenuX = event.clientX;
+        this.contentmenuY = event.clientY;
+        this.tagName = target.getAttribute("aria-controls").slice(5);
+        this.contextmenuFlag = true;
       }
     },
-    computed: {
-      ...mapGetters(["tagWel", "tagList", "tag", "website"]),
-      ...mapState({
-        showTag: state => state.common.showTag
-      }),
-      tagLen() {
-        return this.tagList.length || 0;
+    //激活当前选项
+    setActive() {
+      this.active = this.tag.value;
+    },
+    menuTag(value, action) {
+      if (action === "remove") {
+        let { tag, key } = this.findTag(value);
+        this.$store.commit("DEL_TAG", tag);
+        if (tag.value === this.tag.value) {
+          tag = this.tagList[key === 0 ? key : key - 1]; //如果关闭本标签让前推一个
+          this.openTag(tag);
+        }
       }
     },
-    methods: {
-      generateTitle(item) {
-        return this.$router.$avueRouter.generateTitle(
-          item.label,
-          (item.meta || {}).i18n
-        );
-      },
-      watchContextmenu(event) {
-        if (!this.$el.contains(event.target) || event.button !== 0) {
-          this.contextmenuFlag = false;
-        }
-        window.removeEventListener("mousedown", this.watchContextmenu);
-      },
-      handleContextmenu(event) {
-        let target = event.target;
-        // 解决 https://github.com/d2-projects/d2-admin/issues/54
-        let flag = false;
-        if (target.className.indexOf("el-tabs__item") > -1) flag = true;
-        else if (target.parentNode.className.indexOf("el-tabs__item") > -1) {
-          target = target.parentNode;
-          flag = true;
-        }
-        if (flag) {
-          event.preventDefault();
-          event.stopPropagation();
-          this.contentmenuX = event.clientX;
-          this.contentmenuY = event.clientY;
-          this.tagName = target.getAttribute("aria-controls").slice(5);
-          this.contextmenuFlag = true;
-        }
-      },
-      //激活当前选项
-      setActive() {
-        this.active = this.tag.value;
-      },
-      menuTag(value, action) {
-        if (action === "remove") {
-          let {tag, key} = this.findTag(value);
-          this.$store.commit("DEL_TAG", tag);
-          if (tag.value === this.tag.value) {
-            tag = this.tagList[key === 0 ? key : key - 1]; //如果关闭本标签让前推一个
-            this.openTag(tag);
-          }
-        }
-      },
-      openTag(item) {
-        let tag;
-        if (item.name) {
-          tag = this.findTag(item.name).tag;
-        } else {
-          tag = item;
-        }
-        this.$router.push({
-          path: this.$router.$avueRouter.getPath({
+    openTag(item) {
+      let tag;
+      if (item.name) {
+        tag = this.findTag(item.name).tag;
+      } else {
+        tag = item;
+      }
+      this.$router.push({
+        path: this.$router.$avueRouter.getPath(
+          {
             name: tag.label,
-            src: tag.value
-          }, tag.meta),
-          query: tag.query
+            src: tag.value,
+          },
+          tag.meta
+        ),
+        query: tag.query,
+      });
+    },
+    closeOthersTags() {
+      this.contextmenuFlag = false;
+      this.$store.commit("DEL_TAG_OTHER");
+    },
+    findTag(value) {
+      let tag, key;
+      this.tagList.map((item, index) => {
+        if (item.value === value) {
+          tag = item;
+          key = index;
+        }
+      });
+      return { tag: tag, key: key };
+    },
+    closeAllTags() {
+      this.contextmenuFlag = false;
+      this.$store.commit("DEL_ALL_TAG");
+      this.$router.push({
+        path: this.$router.$avueRouter.getPath({
+          src: this.tagWel.value,
+        }),
+        query: this.tagWel.query,
+      });
+    },
+    clearCacheTags() {
+      this.$confirm("是否需要清除缓存?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      }).then(() => {
+        clearCache().then(() => {
+          this.contextmenuFlag = false;
+          this.$message.success("清除完毕");
         });
-      },
-      closeOthersTags() {
-        this.contextmenuFlag = false;
-        this.$store.commit("DEL_TAG_OTHER");
-      },
-      findTag(value) {
-        let tag, key;
-        this.tagList.map((item, index) => {
-          if (item.value === value) {
-            tag = item;
-            key = index;
-          }
-        });
-        return {tag: tag, key: key};
-      },
-      closeAllTags() {
-        this.contextmenuFlag = false;
-        this.$store.commit("DEL_ALL_TAG");
-        this.$router.push({
-          path: this.$router.$avueRouter.getPath({
-            src: this.tagWel.value
-          }),
-          query: this.tagWel.query
-        });
-      },
-      clearCacheTags() {
-        this.$confirm("是否需要清除缓存?", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(() => {
-          clearCache().then(() => {
-            this.contextmenuFlag = false;
-            this.$message.success('清除完毕');
-          })
-        });
-      }
-    }
-  };
+      });
+    },
+  },
+};
 </script>
 
 
diff --git a/src/page/index/top/top-menu.vue b/src/page/index/top/top-menu.vue
index 3add0bf..09a2c22 100644
--- a/src/page/index/top/top-menu.vue
+++ b/src/page/index/top/top-menu.vue
@@ -1,19 +1,26 @@
 <template>
   <div class="top-menu">
-    <el-menu :default-active="activeIndex"
-             mode="horizontal"
-             text-color="#333">
-      <el-menu-item index="0" @click.native="openHome(itemHome)" key="0">
+    <el-menu :default-active="activeIndex" mode="horizontal" text-color="#333">
+      <el-menu-item
+        index="0"
+        @click.native="openHome(itemHome)"
+        key="0"
+        v-if="!hideHome"
+      >
         <template slot="title">
           <i :class="itemHome.source"></i>
-          <span>{{generateTitle(itemHome)}}</span>
+          <span>{{ generateTitle(itemHome) }}</span>
         </template>
       </el-menu-item>
-      <template v-for="(item,index) in items">
-        <el-menu-item :index="item.id+''" @click.native="openMenu(item)" :key="index">
+      <template v-for="(item, index) in items">
+        <el-menu-item
+          :index="item.id + ''"
+          @click.native="openMenu(item)"
+          :key="index"
+        >
           <template slot="title">
-            <i :class="item.source" style="padding-right: 5px;"></i>
-            <span>{{generateTitle(item)}}</span>
+            <i :class="item.source" style="padding-right: 5px"></i>
+            <span>{{ generateTitle(item) }}</span>
           </template>
         </el-menu-item>
       </template>
@@ -22,48 +29,51 @@
 </template>
 
 <script>
-  import {mapGetters} from "vuex";
+import { mapGetters } from "vuex";
 
-  export default {
-    name: "top-menu",
-    data() {
-      return {
-        itemHome: {
-          name: '首页',
-          source: 'el-icon-menu',
-        },
-        activeIndex: "0",
-        items: [],
-      };
+export default {
+  name: "top-menu",
+  data() {
+    return {
+      itemHome: {
+        name: "首页",
+        source: "el-icon-menu",
+      },
+      activeIndex: "0",
+      items: [],
+    };
+  },
+  inject: ["index"],
+  created() {
+    this.getMenu();
+  },
+  computed: {
+    ...mapGetters(["tagCurrent", "menu", "hideHome"]),
+  },
+  methods: {
+    openHome(itemHome) {
+      this.index.openMenu(itemHome);
+      this.$router.push({
+        path: this.$router.$avueRouter.getPath(
+          { name: itemHome.name, src: "" },
+          {}
+        ),
+      });
     },
-    inject: ["index"],
-    created() {
-      this.getMenu();
+    openMenu(item) {
+      this.index.openMenu(item);
     },
-    computed: {
-      ...mapGetters(["tagCurrent", "menu"])
+    getMenu() {
+      this.$store.dispatch("GetTopMenu").then((res) => {
+        this.items = res;
+      });
     },
-    methods: {
-      openHome(itemHome) {
-        this.index.openMenu(itemHome);
-        this.$router.push({
-          path: this.$router.$avueRouter.getPath({name: itemHome.name, src: ''}, {})
-        });
-      },
-      openMenu(item) {
-        this.index.openMenu(item)
-      },
-      getMenu() {
-        this.$store.dispatch("GetTopMenu").then(res => {
-          this.items = res;
-        });
-      },
-      generateTitle(item) {
-        return this.$router.$avueRouter.generateTitle(
-          item.name,
-          (item.meta || {}).i18n
-        );
-      },
-    }
-  };
+    generateTitle(item) {
+      return this.$router.$avueRouter.generateTitle(
+        item.name,
+        (item.meta || {}).i18n
+      );
+    },
+  },
+};
 </script>
diff --git a/src/page/login/codelogin.vue b/src/page/login/codelogin.vue
index 79022c3..d359b6d 100644
--- a/src/page/login/codelogin.vue
+++ b/src/page/login/codelogin.vue
@@ -1,61 +1,126 @@
 <template>
-  <el-form class="login-form"
-           status-icon
-           :rules="loginRules"
-           ref="loginForm"
-           :model="loginForm"
-           label-width="0">
-    <el-form-item prop="phone">
-      <el-input size="small"
-                @keyup.enter.native="handleLogin"
-                v-model="loginForm.phone"
-                auto-complete="off"
-                :placeholder="$t('login.phone')">
-        <i slot="prefix"
-           class="icon-shouji"/>
+  <el-form
+    class="login-form"
+    status-icon
+    :rules="loginRules"
+    ref="loginForm"
+    :model="loginForm"
+    label-width="0"
+  >
+    <el-form-item prop="username">
+      <el-input
+        size="small"
+        @keyup.enter.native="handleLogin"
+        v-model="loginForm.username"
+        auto-complete="off"
+        :placeholder="$t('login.username')"
+      >
+        <i slot="prefix" class="icon-yonghu" />
       </el-input>
     </el-form-item>
-    <el-form-item prop="code">
-      <el-input size="small"
-                @keyup.enter.native="handleLogin"
-                v-model="loginForm.code"
-                auto-complete="off"
-                :placeholder="$t('login.code')">
-        <i slot="prefix"
-           class="icon-yanzhengma"
-           style="margin-top:6px;"/>
-        <template slot="append">
-          <span @click="handleSend"
-                class="msg-text"
-                :class="[{display:msgKey}]">{{msgText}}</span>
-        </template>
+    <el-form-item prop="password">
+      <el-input
+        size="small"
+        @keyup.enter.native="handleLogin"
+        v-model="loginForm.password"
+        auto-complete="off"
+        show-password
+        :placeholder="$t('login.password')"
+      >
+        <i slot="prefix" class="icon-mima" />
       </el-input>
     </el-form-item>
-    <el-form-item>
-      <el-button size="small"
-                 type="primary"
-                 @click.native.prevent="handleLogin"
-                 class="login-submit">{{$t('login.submit')}}</el-button>
+    <el-form-item prop="password2">
+      <el-input
+        size="small"
+        @keyup.enter.native="handleLogin"
+        v-model="loginForm.password2"
+        auto-complete="off"
+        show-password
+        :placeholder="$t('login.password2')"
+      >
+        <i slot="prefix" class="icon-mima" />
+      </el-input>
+    </el-form-item>
+    <el-form-item prop="sname">
+      <el-input
+        size="small"
+        @keyup.enter.native="handleLogin"
+        v-model="loginForm.sname"
+        auto-complete="off"
+        :placeholder="$t('login.name')"
+      >
+        <i slot="prefix" class="icon-yonghu" />
+      </el-input>
+    </el-form-item>
+    <el-form-item prop="cardid">
+      <el-input
+        size="small"
+        v-model="loginForm.cardid"
+        auto-complete="off"
+        :placeholder="$t('login.cardid')"
+      >
+        <i slot="prefix" class="icon-shouji" />
+      </el-input>
+    </el-form-item>
+    <avue-input-tree
+      style="width: 580px !important"
+      :defaultExpandAll="loginForm.defaultFlag"
+      v-model="loginForm.deptid"
+      placeholder="请选择部门"
+      type="tree"
+      :dic="dic"
+    ></avue-input-tree>
+    <el-form-item class="z-login-submit-prv">
+      <el-button
+        size="small"
+        type="primary"
+        @click.native.prevent="handleLogin"
+        class="z-login-submit"
+        >{{ $t("login.zc") }}
+      </el-button>
+      <el-button size="small" @click.native.prevent="gbs" class="z-login-submit"
+        >{{ $t("login.gb") }}
+      </el-button>
     </el-form-item>
   </el-form>
 </template>
 
 <script>
 import { isvalidatemobile } from "@/util/validate";
+import { inster } from "@/api/zc/zc";
+import { ss, rs } from "@/api/system/dept";
 import { mapGetters } from "vuex";
+
 export default {
   name: "codelogin",
   data() {
-    const validatePhone = (rule, value, callback) => {
-      if (isvalidatemobile(value)[0]) {
-        callback(new Error(isvalidatemobile(value)[1]));
+    const validatePass = (rule, value, callback) => {
+      if (value === "") {
+        callback(new Error("请输入密码"));
       } else {
         callback();
       }
     };
-    const validateCode = (rule, value, callback) => {
-      if (value.length !== 4) {
-        callback(new Error("请输入4位数的验证码"));
+    const validatePass2 = (rule, value, callback) => {
+      if (value === "") {
+        callback(new Error("请再次输入密码"));
+      } else if (value !== this.loginForm.password) {
+        callback(new Error("两次输入密码不一致!"));
+      } else {
+        callback();
+      }
+    };
+    const validateIdNo = (rule, value, callback) => {
+      let id18 =
+        /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
+      let id15 =
+        /^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$/;
+      if (
+        !id18.test(this.loginForm.cardid) &&
+        !id15.test(this.loginForm.cardid)
+      ) {
+        callback(new Error("请输入正确的身份证号格式"));
       } else {
         callback();
       }
@@ -63,34 +128,154 @@
     return {
       msgText: "",
       msgTime: "",
+      dic: [],
+      dicr: [],
       msgKey: false,
       loginForm: {
-        phone: "",
-        code: ""
+        cardid: "",
+        username: "",
+        sname: "",
+        password: "",
+        deptid: "",
+        roleid: "",
+        password2: "",
       },
+      value: "",
+      options: [],
       loginRules: {
-        phone: [{ required: true, trigger: "blur", validator: validatePhone }],
-        code: [{ required: true, trigger: "blur", validator: validateCode }]
-      }
+        cardid: [{ required: true, trigger: "blur", validator: validateIdNo }],
+        password: [
+          { required: true, validator: validatePass, trigger: "blur" },
+        ],
+        password2: [
+          { required: true, validator: validatePass2, trigger: "blur" },
+        ],
+        username: [
+          { required: true, message: "请输入用户名", trigger: "blur" },
+        ],
+      },
+      passwordType: "password",
+      passwordTypes: "password2",
     };
   },
   created() {
     this.msgText = this.config.MSGINIT;
     this.msgTime = this.config.MSGTIME;
+    // defaultFlag
   },
-  mounted() {},
+  mounted() {
+    var that = this;
+    ss().then((res) => {
+      console.log(that.ergodicData(res.data.data), 898989);
+      that.dic = that.ergodicData(res.data.data);
+    });
+  },
   computed: {
     ...mapGetters(["tagWel"]),
     config() {
       return {
         MSGINIT: this.$t("login.msgText"),
         MSGSCUCCESS: this.$t("login.msgSuccess"),
-        MSGTIME: 60
+        MSGTIME: 60,
       };
-    }
+    },
   },
   props: [],
   methods: {
+    ergodicData(val) {
+      var arr = [];
+
+      val.forEach((item, index) => {
+        arr.push({
+          label: item.title,
+          value: item.value,
+          id: item.id,
+          parent_id: item.parent_id,
+        });
+
+        if (item.hasChildren == true) {
+          var arrOne = [];
+
+          if (item.children && item.children.length > 0) {
+            item.children.forEach((childItem, childIndex) => {
+              arrOne.push({
+                label: childItem.title,
+                value: childItem.value,
+                id: childItem.id,
+                parent_id: childItem.parent_id,
+              });
+
+              if (childItem.hasChildren == true) {
+                var arrTwo = [];
+
+                if (childItem.children && childItem.children.length > 0) {
+                  childItem.children.forEach((findItem, findIndex) => {
+                    arrTwo.push({
+                      label: findItem.title,
+                      value: findItem.value,
+                      id: findItem.id,
+                      parent_id: findItem.parent_id,
+                    });
+                  });
+                }
+
+                arrOne[childIndex].children = arrTwo;
+              }
+            });
+          }
+
+          arr[index].children = arrOne;
+        }
+      });
+
+      return arr;
+    },
+
+    clearValidate(formName) {
+      this.$refs[formName].clearValidate();
+    },
+    async allmedia() {
+      ss().then((res) => {
+        console.log(res, 1323);
+        res.data.data.forEach((element) => {
+          this.options.push({
+            deptname: element.dept_name,
+            deptid: element.deptid,
+          });
+        });
+      });
+    },
+    refreshCode(row) {
+      inster(row).then((res) => {
+        this.loginForm.cardid = "";
+        this.loginForm.username = "";
+        this.loginForm.sname = "";
+        this.loginForm.password = "";
+        this.loginForm.password2 = "";
+        this.loginForm.deptid = "";
+        this.loginForm.defaultFlag = false;
+        this.$notify({
+          title: "注册成功,待审核",
+          type: "warning",
+        });
+      });
+      var z = document.querySelector(".z");
+      z.style.display = "none";
+      this.clearValidate("loginForm");
+      this.clearValidate("loginForm");
+    },
+    gb() {
+      this.loginForm.cardid = "";
+      this.loginForm.username = "";
+      this.loginForm.sname = "";
+      this.loginForm.password = "";
+      this.loginForm.password2 = "";
+      this.loginForm.deptid = "";
+      this.loginForm.defaultFlag = false;
+      var zs = document.querySelector(".z");
+      zs.style.display = "none";
+      this.clearValidate("loginForm");
+    },
     handleSend() {
       if (this.msgKey) return;
       this.msgText = this.msgTime + this.config.MSGSCUCCESS;
@@ -106,16 +291,29 @@
         }
       }, 1000);
     },
+    showPassword() {
+      this.passwordType === ""
+        ? (this.passwordType = "password")
+        : (this.passwordType = "");
+    },
+    showPasswords() {
+      this.passwordType === ""
+        ? (this.passwordType = "password2")
+        : (this.passwordType = "");
+    },
     handleLogin() {
-      this.$refs.loginForm.validate(valid => {
+      this.$refs.loginForm.validate((valid) => {
         if (valid) {
-          this.$store.dispatch("LoginByPhone", this.loginForm).then(() => {
-            this.$router.push({ path: this.tagWel.value });
-          });
+          this.refreshCode(this.loginForm);
+          this.message("dahsiofhiusa");
+          return Promise.reject(new Error("注册成功,待审核"));
         }
       });
-    }
-  }
+    },
+    gbs() {
+      this.gb();
+    },
+  },
 };
 </script>
 
@@ -127,7 +325,34 @@
   text-align: center;
   cursor: pointer;
 }
+
 .msg-text.display {
   color: #ccc;
 }
+
+.z-login-submit-prv {
+  margin-top: 25px;
+  padding: 0 10%;
+  box-sizing: border-box;
+}
+
+.z-login-submit-prv > div {
+  width: 80%;
+  display: flex;
+}
+
+.z-login-submit {
+  flex: 1;
+  height: 45px;
+  border: 1px solid #409eff;
+  background: none;
+  font-size: 18px;
+  letter-spacing: 2px;
+  font-weight: 300;
+  color: #409eff;
+  cursor: pointer;
+  font-family: "neo";
+  -webkit-transition: 0.25s;
+  transition: 0.25s;
+}
 </style>
diff --git a/src/page/login/index.vue b/src/page/login/index.vue
index a1aa03f..9c90ce4 100644
--- a/src/page/login/index.vue
+++ b/src/page/login/index.vue
@@ -15,19 +15,23 @@
         <div class="login-main">
           <h4 class="login-title">
             {{ $t('login.title') }}
-<!--            <top-lang></top-lang>-->
+            <!--            <top-lang></top-lang>-->
           </h4>
-          <userLogin v-if="activeName==='user'"></userLogin>
-          <codeLogin v-else-if="activeName==='code'"></codeLogin>
-          <thirdLogin v-else-if="activeName==='third'"></thirdLogin>
+          <h4 class="login-title-child">IoT security cloud service platform</h4>
+          <userLogin></userLogin>
+          <!-- <codeLogin v-else-if="activeName==='code'"></codeLogin>-->
+          <!--    <thirdLogin v-else-if="activeName==='third'"></thirdLogin>-->
           <div class="login-menu">
-            <a href="#" @click.stop="activeName='user'">{{ $t('login.userLogin') }}</a>
-            <!--<a href="#" @click.stop="activeName='code'">{{ $t('login.phoneLogin') }}</a>-->
-<!--            <a href="#" @click.stop="activeName='third'">{{ $t('login.thirdLogin') }}</a>-->
+            <!--    <a href="#" @click.stop="activeName='user'">{{ $t('login.userLogin') }}</a>-->
+            <a href="#" @click.stop="zShow">{{ $t('login.phoneLogin') }}</a>
+            <!--   <a href="#" @click.stop="activeName='third'">{{ $t('login.thirdLogin') }}</a>-->
           </div>
         </div>
 
       </div>
+    </div>
+    <div class="z" v-show="activeName == 'code'">
+      <codeLogin></codeLogin>
     </div>
   </div>
 </template>
@@ -109,11 +113,40 @@
             loading.close();
           });
         }
+      },
+      zShow() {
+        document.querySelector('.z').style.display = 'block';
       }
     }
   };
 </script>
 
 <style lang="scss">
+.z {
+  position: fixed;
+  margin: auto;
+  padding: 10px;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 80px;
+  width: 600px;
+  height: 500px;
+  background-color: #fff;
+  box-sizing: border-box;
+  box-shadow: 6px 6px 5px #909090;
+}
+
+.company-jx {
+  position: fixed;
+  margin: auto;
+  top: auto;
+  left: 0px;
+  right: 0px;
+  bottom: 120px;
+  text-align: center;
+  color: #fff;
+  font-size: 15px;
+}
   @import "@/styles/login.scss";
 </style>
diff --git a/src/router/views/index.js b/src/router/views/index.js
index aea0396..d9cfe2e 100644
--- a/src/router/views/index.js
+++ b/src/router/views/index.js
@@ -687,20 +687,21 @@
 //             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: '/trainingRegistration',
+    component: Layout,
+    peixun: true,
+    redirect: '/trainingRegistration/index',
+    children: [{
+        path: 'index',
+        name: '培训报名列表',
+        meta: {
+            i18n: 'dict'
+        },
+        component: () =>
+            import( /* webpackChunkName: "views" */ '@/views/trainingRegistration/index')
+    }]
+},
 // {
 //     path: '/trainExam',
 //     component: Layout,
diff --git a/src/store/getters.js b/src/store/getters.js
index e6fcd6f..2afabf9 100644
--- a/src/store/getters.js
+++ b/src/store/getters.js
@@ -19,6 +19,7 @@
   roles: state => state.user.roles,
   permission: state => state.user.permission,
   menu: state => state.user.menu,
+  hideHome: state => state.user.hideHome,
   menuId: state => state.user.menuId,
   menuAll: state => state.user.menuAll,
   logsList: state => state.logs.logsList,
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
index f8fe52e..545d41a 100644
--- a/src/store/modules/user.js
+++ b/src/store/modules/user.js
@@ -1,11 +1,11 @@
-import {setToken, setRefreshToken, removeToken, removeRefreshToken} from '@/util/auth'
-import {Message} from 'element-ui'
-import {setStore, getStore} from '@/util/store'
-import {isURL, validatenull} from '@/util/validate'
-import {deepClone} from '@/util/util'
+import { setToken, setRefreshToken, removeToken, removeRefreshToken } from '@/util/auth'
+import { Message } from 'element-ui'
+import { setStore, getStore } from '@/util/store'
+import { isURL, validatenull } from '@/util/validate'
+import { deepClone } from '@/util/util'
 import website from '@/config/website'
-import {loginByUsername, loginBySocial, getUserInfo, logout, refreshToken, getButtons} from '@/api/user'
-import {getTopMenu, getRoutes} from '@/api/system/menu'
+import { loginByUsername, loginBySocial, getUserInfo, logout, refreshToken, getButtons } from '@/api/user'
+import { getTopMenu, getRoutes } from '@/api/system/menu'
 import md5 from 'js-md5'
 
 
@@ -34,19 +34,20 @@
 
 const user = {
   state: {
-    tenantId: getStore({name: 'tenantId'}) || '',
-    userInfo: getStore({name: 'userInfo'}) || [],
-    permission: getStore({name: 'permission'}) || {},
+    tenantId: getStore({ name: 'tenantId' }) || '',
+    userInfo: getStore({ name: 'userInfo' }) || [],
+    permission: getStore({ name: 'permission' }) || {},
     roles: [],
     menuId: {},
-    menu: getStore({name: 'menu'}) || [],
-    menuAll: getStore({name: 'menuAll'}) || [],
-    token: getStore({name: 'token'}) || '',
-    refreshToken: getStore({name: 'refreshToken'}) || '',
+    menu: getStore({ name: 'menu' }) || [],
+    menuAll: getStore({ name: 'menuAll' }) || [],
+    token: getStore({ name: 'token' }) || '',
+    refreshToken: getStore({ name: 'refreshToken' }) || '',
+    hideHome: false,
   },
   actions: {
     //根据用户名登录
-    LoginByUsername({commit}, userInfo) {
+    LoginByUsername({ commit }, userInfo) {
       return new Promise((resolve, reject) => {
         loginByUsername(userInfo.tenantId, userInfo.username, md5(userInfo.password), userInfo.type, userInfo.key, userInfo.code).then(res => {
           const data = res.data;
@@ -70,7 +71,7 @@
       })
     },
     //根据手机号登录
-    LoginByPhone({commit}, userInfo) {
+    LoginByPhone({ commit }, userInfo) {
       return new Promise((resolve) => {
         loginByUsername(userInfo.phone, userInfo.code).then(res => {
           const data = res.data.data;
@@ -82,7 +83,7 @@
       })
     },
     //根据第三方信息登录
-    LoginBySocial({commit}, userInfo) {
+    LoginBySocial({ commit }, userInfo) {
       return new Promise((resolve) => {
         loginBySocial(userInfo.tenantId, userInfo.source, userInfo.code, userInfo.state).then(res => {
           const data = res.data;
@@ -103,7 +104,7 @@
       })
     },
     //获取用户信息
-    GetUserInfo({commit}) {
+    GetUserInfo({ commit }) {
       return new Promise((resolve, reject) => {
         getUserInfo().then((res) => {
           const data = res.data.data;
@@ -115,7 +116,7 @@
       })
     },
     //刷新token
-    refreshToken({state, commit}) {
+    refreshToken({ state, commit }) {
       window.console.log('handle refresh token')
       return new Promise((resolve, reject) => {
         refreshToken(state.refreshToken, state.tenantId).then(res => {
@@ -129,7 +130,7 @@
       })
     },
     // 登出
-    LogOut({commit}) {
+    LogOut({ commit }) {
       return new Promise((resolve, reject) => {
         logout().then(() => {
           commit('SET_TOKEN', '');
@@ -148,7 +149,7 @@
       })
     },
     //注销session
-    FedLogOut({commit}) {
+    FedLogOut({ commit }) {
       return new Promise(resolve => {
         commit('SET_TOKEN', '');
         commit('SET_MENU_ALL_NULL', []);
@@ -172,7 +173,7 @@
       })
     },
     //获取系统菜单
-    GetMenu({commit, dispatch}, topMenuId) {
+    GetMenu({ commit, dispatch }, topMenuId) {
       return new Promise(resolve => {
         getRoutes(topMenuId).then((res) => {
           const data = res.data.data
@@ -188,7 +189,7 @@
       })
     },
     //获取系统按钮
-    GetButtons({commit}) {
+    GetButtons({ commit }) {
       return new Promise((resolve) => {
         getButtons().then(res => {
           const data = res.data.data;
@@ -199,10 +200,13 @@
     },
   },
   mutations: {
+    set_hideHome: (state, val) => {
+      state.hideHome = val;
+    },
     SET_TOKEN: (state, token) => {
       setToken(token);
       state.token = token;
-      setStore({name: 'token', content: state.token})
+      setStore({ name: 'token', content: state.token })
     },
     SET_MENU_ID(state, menuId) {
       state.menuId = menuId;
@@ -228,18 +232,18 @@
     SET_REFRESH_TOKEN: (state, refreshToken) => {
       setRefreshToken(refreshToken)
       state.refreshToken = refreshToken;
-      setStore({name: 'refreshToken', content: state.refreshToken})
+      setStore({ name: 'refreshToken', content: state.refreshToken })
     },
     SET_TENANT_ID: (state, tenantId) => {
       state.tenantId = tenantId;
-      setStore({name: 'tenantId', content: state.tenantId})
+      setStore({ name: 'tenantId', content: state.tenantId })
     },
     SET_USER_INFO: (state, userInfo) => {
       if (validatenull(userInfo.avatar)) {
         userInfo.avatar = "/img/bg/img-logo.png";
       }
       state.userInfo = userInfo;
-      setStore({name: 'userInfo', content: state.userInfo})
+      setStore({ name: 'userInfo', content: state.userInfo })
     },
     SET_ROLES: (state, roles) => {
       state.roles = roles;
@@ -266,7 +270,7 @@
       result.forEach(ele => {
         state.permission[ele] = true;
       });
-      setStore({name: 'permission', content: state.permission})
+      setStore({ name: 'permission', content: state.permission })
     }
   }
 
diff --git a/src/views/applydetailed/index.vue b/src/views/applydetailed/index.vue
index cd1dffb..e813954 100644
--- a/src/views/applydetailed/index.vue
+++ b/src/views/applydetailed/index.vue
@@ -538,6 +538,7 @@
     questionBankOnLoad(page, params = {}) {
       // debugger;
       params["examId"] = this.$route.query.id;
+      // params["applyStatus"] = 2;
       this.questionBankLoading = false;
       getApplyList(
         page.currentPage,
diff --git a/src/views/applyexam/index.vue b/src/views/applyexam/index.vue
index fb6545d..bf9a8f8 100644
--- a/src/views/applyexam/index.vue
+++ b/src/views/applyexam/index.vue
@@ -180,6 +180,7 @@
 } from "@/api/examapi/applyexam";
 import { mapState } from "vuex";
 import { mapGetters } from "vuex";
+import { getRoleDetail } from "@/api/system/role";
 var DIC = {
   applyStatus: [
     {
@@ -299,13 +300,79 @@
         dialogClickModal: false,
         column: [
           {
+            label: "考试人数",
+            prop: "number",
+            type: 'number',
+            span: 12,
+            precision:0,
+            step:50,
+            mock:{
+              type:'number',
+              max:1000,
+              min:0,
+              precision:0
+            },
+            rules: [
+              {
+                required: true,
+                message: "请输入考试人数",
+                trigger: "blur",
+              },
+            ],
+            minRows: 0,
+            maxRows: 1000,
+            value:50,
+          },
+          {
+            label: "序号开始",
+            prop: "serialStart",
+            span: 6,
+            value:1,
+            mock:{
+              type:'number',
+              max:1000,
+              min:1,
+              precision:0
+            },
+            minRows: 1,
+            maxRows: 1000,
+            type:"number",
+            rules: [
+              {
+                required: true,
+                message: "请输入序号",
+                trigger: "blur",
+              },
+            ],
+          },
+          {
+            label: "序号结束",
+            prop: "serialEnd",
+            span: 6,
+            value:50,
+            mock:{
+              type:'number',
+              max:1000,
+              min:1,
+              precision:0
+            },
+            minRows: 1,
+            maxRows: 1000,
+            type:"number",
+            rules: [
+              {
+                required: true,
+                message: "请输入序号",
+                trigger: "blur",
+              },
+            ],
+          },
+          {
             label: "考试时间",
             prop: "startTime",
             type: "datetime",
             format: "yyyy-MM-dd HH:mm",
             valueFormat: "yyyy-MM-dd HH:mm",
-            startPlaceholder: "考试开始时间",
-            endPlaceholder: "考试结束时间",
             // 表单新增时是否禁止
             addDisabled: false,
             // 表单新增时是否可见
@@ -325,7 +392,34 @@
                 trigger: "blur",
               },
             ],
-            span: 24,
+            span: 12,
+          },
+          {
+            label: "截止时间",
+            prop: "endTime",
+            type: "datetime",
+            format: "yyyy-MM-dd HH:mm",
+            valueFormat: "yyyy-MM-dd HH:mm",
+            // 表单新增时是否禁止
+            addDisabled: false,
+            // 表单新增时是否可见
+            addDisplay: true,
+            // 表单新增时是否为查看模式
+            addDetail: false,
+            // 表单编辑时是否禁止
+            editDisabled: false,
+            // 表单编辑时是否可见
+            editDisplay: true,
+            // 表单编辑时是否为查看模式
+            editDetail: false,
+            rules: [
+              {
+                required: true,
+                message: "请选择考试时间",
+                trigger: "blur",
+              },
+            ],
+            span: 12,
           },
         ],
       },
@@ -334,7 +428,7 @@
         delBtn: false,
         editBtn: false,
         addBtn: false,
-        selection: true,
+        selection: false,
         menu: true,
         // 导出按钮
         // excelBtn: true,
@@ -706,6 +800,34 @@
           //   overHidden: true,
           //   width: 150,
           // },
+          //   {
+          //     label: "报名状态",
+          //     search: true,
+          //     type: "select",
+          //     searchSpan: 4,
+          //     prop: "applyStatus",
+          //     searchValue: 2,
+          //     dicData: [{
+          //             label: '全部',
+          //             value: 0,
+          //         },
+          //         {
+          //             label: '已报名',
+          //             value: 2,
+          //         },
+          //         {
+          //             label: '已取消',
+          //             value: 4,
+          //         }
+          //     ],
+          //     props: {
+          //         label: "label",
+          //         value: "value"
+          //     },
+          //     editDisplay: false,
+          //     addDisplay: false,
+          //     width: 100,
+          // },
         ],
       },
       questionBankSearch: {},
@@ -751,6 +873,8 @@
     if (this.userInfo.role_name.indexOf("ksxtadmin") != -1) {
       this.examPersission = true;
     }
+
+    this.questionBankSearch['applyStatus'] = 2;
   },
   mounted() {},
   computed: {
@@ -785,19 +909,36 @@
       });
     },
     questionBankOnLoad(page, params = {}) {
+      params = this.questionBankSearch;
       this.questionBankLoading = false;
-      params["applyStatus"] = 1;
-      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();
-      });
+      this.loading = true;
+      //判断角色,如果是保安公司管理员或保安,只能查看当前公司的报名信息
+      var that = this;
+      //获取当前登录人员的角色信息
+      var roleIds = this.userInfo.role_id.split(",");
+      roleIds.forEach((roleId) => {
+        getRoleDetail(roleId).then((res) => {
+            var roleAlias = res.data.data.roleAlias;
+            if (
+              roleAlias == "保安公司管理员" ||
+              roleAlias == "保安"
+            ) {
+              //如果是保安公司管理员
+              params["deptId"] = that.userInfo.dept_id;
+            }
+            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 = [];
@@ -868,11 +1009,28 @@
     //生成考试
     submitExamApply(row, done, loading) {
       var that = this;
-      var startTime = row.startTime + ":00";
-      // var endTime = row.examTime[1];
-      // var examTime = JSON.stringify(row.examTime);
-      // console.log(this.ids,111);
-      addExam(this.ids, null, startTime, null).then(
+      row.startTime = row.startTime + ":00";
+      row.endTime = row.endTime + ":00";
+      if(row.number!=((row.serialEnd-row.serialStart)+1)){
+          this.$message({
+            type: "error",
+            message: "考试人数与序号不匹配!",
+          });
+         done();
+         return;
+      }
+
+      var s = new Date(row.startTime);
+      var e = new Date(row.endTime);
+      if(s>e){
+        this.$message({
+            type: "error",
+            message: "截止时间不能早于考试考试开始时间!",
+          });
+         done();
+         return;
+      }
+      addExam(Object.assign(row, this.questionBankSearch)).then(
         () => {
           this.questionBankOnLoad(this.questionBankPage);
           this.$message({
diff --git a/src/views/applyexam/papers.vue b/src/views/applyexam/papers.vue
index 7c54248..b87c038 100644
--- a/src/views/applyexam/papers.vue
+++ b/src/views/applyexam/papers.vue
@@ -8,13 +8,18 @@
 export default {
   data() {
     return {
-      url: "/papers.html",
+      url: "/papers.html"
     };
   },
   created(){
-      var d = this.$route.query;
-      this.url += "?data=" + JSON.stringify(d);
-    //   console.log(d);
+      var data = this.$route.query;
+
+      if(data.examType==1){
+          this.url += "?data=" + JSON.stringify(data);
+      }
+      if(data.examType==2){
+          this.url = "/papersTrain.html?data=" + JSON.stringify(data);
+      }
   },
   mounted() {
     var flag = false,
diff --git a/src/views/companyApply/index.vue b/src/views/companyApply/index.vue
index 03360a1..6627bc6 100644
--- a/src/views/companyApply/index.vue
+++ b/src/views/companyApply/index.vue
@@ -56,6 +56,7 @@
                 size="small"
                 icon="el-icon-folder-checked"
                 v-if="row.isApply != 1 && permission.company_add"
+                :disabled="row.examinationType=='1'"
                 @click="questionBankRowSave(row)"
                 >报名
               </el-button>
diff --git a/src/views/dispatch/dispatchChildoperable.vue b/src/views/dispatch/dispatchChildoperable.vue
index 72bad92..5082b01 100644
--- a/src/views/dispatch/dispatchChildoperable.vue
+++ b/src/views/dispatch/dispatchChildoperable.vue
@@ -138,7 +138,7 @@
               value: "id",
             },
             // dicUrl: `/api/blade-user/page-security-units?dispatch=1&deptId={{key}}`,
-            dicUrl: `/api/blade-user/page-security-units?deptId={{key}}`,
+            dicUrl: `/api/blade-user/page-security-units?status=1&deptId={{key}}`,
             dicData: [],
             rules: [
               {
@@ -434,19 +434,10 @@
       this.onLoad1(this.page1, this.query1);
     },
 
-    // beforeOpen(done, type) {
-    //   var that = this;
-    //   if (["add", "edit", "view"].includes(type)) {
-    //     if (this.userInfo.role_name == "保安公司管理员") {
-    //       getListByDeptId(that.userInfo.dept_id).then((res) => {
-    //         const userColumn = that.findObject(this.option1.column, "userIds");
-    //         userColumn.dicData = res.data.data;
-    //       });
-    //     }
-    //   }
-    //   this.initFlag = true;
-    //   done();
-    // },
+    beforeOpen(done, type) {
+      this.initFlag = true;
+      done();
+    },
 
     getStartTime() {
       if (
@@ -534,7 +525,7 @@
           );
           dispatcherUnitIdColumn.dicData = res.data.data;
         });
-        getListByDeptId(that.userInfo.dept_id).then((res) => {
+        getListByDeptId(that.userInfo.dept_id,1).then((res) => {
           const userIdsColumn = that.findObject(this.option1.column, "userIds");
           userIdsColumn.dicData = res.data.data;
         });
diff --git a/src/views/exam/examPayment.vue b/src/views/exam/examPayment.vue
new file mode 100644
index 0000000..6ea508b
--- /dev/null
+++ b/src/views/exam/examPayment.vue
@@ -0,0 +1,394 @@
+/*
+ * @Author: Morpheus
+ * @Date: 2021-07-05 16:31:54
+ * @Last Modified by: Morpheus
+ * @Last Modified time: 2021-07-18 19:44:47
+ * menu-name 考试缴费管理
+ */
+<template>
+  <el-row class="morpheus-box">
+    <el-col :span="24" class="recruitmentManagement">
+      <el-card>
+        <div class="exam-card-body">
+          <avue-crud
+            v-model="obj"
+            class="company-box"
+            :option="questionBankOption"
+            :permission="permissionList"
+            :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-del="rowDel"
+            @row-update="questionBankRowUpdate"
+          >
+            <template slot-scope="{ row }" slot="sex">
+              <el-tag v-if="row.sex == 1">男</el-tag>
+              <el-tag v-if="row.sex == 2">女</el-tag>
+            </template>
+
+            <!-- 自定义按钮 -->
+            <template slot="menuLeft">
+              <!-- <el-button type="danger"
+                                       size="mini"
+                                       icon="el-icon-delete"
+                                       plain
+                                       @click="handleDelete">新增
+                            </el-button> -->
+              <!-- <el-button type="danger"
+                                       size="mini"
+                                       icon="el-icon-delete"
+                                       plain
+                                       @click="handleDelete">删除
+                            </el-button> -->
+              <el-button
+                type="success"
+                size="small"
+                plain
+                icon="el-icon-upload2"
+                v-if="permission.performance_import"
+                @click="handleImport"
+                >缴费凭证批量上传
+              </el-button>
+            </template>
+
+            <template slot-scope="{ row }" slot="menu">
+              <el-button
+                style="display:none"
+                type="text"
+                size="mini"
+                icon="el-icon-collection"
+                class="start-kaoshi"
+                v-if="permission.performance_print"
+                :disabled="row.qualified==1"
+                @click="securityPrint(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"
+            >
+            </avue-form>
+          </el-dialog>
+        </div>
+      </el-card>
+    </el-col>
+  </el-row>
+</template>
+
+<script>
+import { getExamPaymentList, update,remove } from "@/api/exam/examPayment";
+import { mapGetters } from "vuex";
+import { getRoleDetail } from "@/api/system/role";
+
+export default {
+  data() {
+    return {
+      obj: {
+        name: "张三",
+      },
+      excelBox: false,
+      questionBankOption: {
+        // 操作栏多余按钮去除
+        delBtn: true,
+        editBtn: false,
+        addBtn: false,
+        selection: false,
+        viewBtn: true,
+        // title: '成绩',
+        align: "center",
+        height: "auto",
+        calcHeight: 80,
+        tip: false,
+        searchShow: true,
+        searchMenuSpan: 4,
+        index: true,
+        indexLabel: "序号",
+        dialogClickModal: false,
+        // 操作栏宽度
+        menu: true,
+        menuWidth: 186,
+        labelWidth: 120,
+
+        column: [
+              // {
+              //     label: "缴费类型",
+              //     prop: "type",
+              //     dicData:[
+              //       {
+              //         label:"公司缴费",
+              //         value: 1
+              //       },
+              //       {
+              //         label:"个人缴费",
+              //         value: 2
+              //       }
+              //     ],
+              //     searchSpan: 4,
+              //     search: true,
+              //     type: "select",
+              // },
+              {
+                  label: "缴费人",
+                  prop: "realName",
+                  search:true,
+                  searchSpan:4,
+              },
+              {
+                  label: "身份证号",
+                  prop: "idCardNo",
+                  search:true,
+                  searchSpan:4,
+              },
+              {
+                  label: "性别",
+                  prop: "sex",
+                  slot:true,
+                  dicData: [
+                    {
+                      label:"男",
+                      value:1
+                    },
+                    {
+                      label:"女",
+                      value:2
+                    }
+                  ],
+              },
+              {
+                  label: "联系方式",
+                  prop: "phone",
+              },
+              {
+                  label: "所在单位",
+                  prop: "deptName",
+                  search:true,
+                  searchSpan:6,
+              },
+              // {
+              //     label: "缴费状态",
+              //     prop: "paymentStatus",
+              //     searchSpan: 4,
+              //     search: true,
+              //     dicData: [
+              //       {
+              //         label:"已缴费",
+              //         value:1
+              //       },
+              //       {
+              //         label:"未缴费",
+              //         value:2
+              //       },
+              //       {
+              //         label:"部分缴费",
+              //         value:3
+              //       },
+              //     ],
+              //     type: "select",
+              // },
+              {
+                  label: "缴费凭证",
+                  prop: "certificateUrl",
+                  overHidden: true,
+                  type: "upload",
+                  listType: "picture-img",
+              },
+              {
+                  label: "缴费时间",
+                  prop: "paymentTime",
+                  type: "date",
+                  format: "yyyy-MM-dd",
+                  valueFormat: "yyyy-MM-dd",
+                  labelWidth: 120,
+                  searchSpan: 4,
+                  // search: true,
+                  overHidden: true,
+                  rules: [
+                      {
+                          required: true,
+                          message: "请输入时间",
+                          trigger: "click",
+                      },
+                  ],
+              },
+          ],
+      },
+      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",
+            },
+            tip: "请上传 zip 压缩文件",
+            action: "/api/blade-resource/oss/endpoint/put-file-exam-payment-zip",
+          }
+        ],
+      },
+    };
+  },
+  computed:{
+    ...mapGetters(["userInfo", "permission"]),
+    permissionList() {
+      return {
+        addBtn: this.vaildData(null, false),
+        viewBtn: this.vaildData(this.permission.notice_view, false),
+        delBtn: this.vaildData(this.permission.notice_delete, false),
+        editBtn: this.vaildData(this.permission.performance__edit, false),
+        excelBtn: this.vaildData(this.permission.performance_export, false),
+      };
+    },
+  },
+  created() {},
+  mounted() {},
+  methods: {
+    questionBankOnLoad(page, params = {}) {
+      //判断角色,如果是保安公司管理员或保安,只能查看当前公司的考试成绩
+      var that = this;
+      //获取当前登录人员的角色信息
+      var roleIds = this.userInfo.role_id.split(",");
+      roleIds.forEach((roleId) => {
+        getRoleDetail(roleId).then((res) => {
+            var roleAlias = res.data.data.roleAlias;
+            if (
+              roleAlias == "保安公司管理员" ||
+              roleAlias == "保安" ||
+              roleAlias == "未持证保安"
+            ) {
+              //如果是保安公司管理员
+              params["deptId"] = that.userInfo.dept_id;
+            }
+            that.questionBankLoading = false;
+            params["examType"] = 1;
+            getExamPaymentList(
+              page.currentPage,
+              page.pageSize,
+              Object.assign(params, this.query)
+            ).then((res) => {
+              const data = res.data.data;
+              that.questionBankPage.total = data.total;
+              that.questionBankData = data.records;
+              that.questionBankLoading = false;
+              that.questionBankSelectionClear();
+            });
+        })
+      });
+      
+    },
+
+     rowDel(row) {
+      this.$confirm("确定删除当前缴费数据?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          return remove(row.id);
+        })
+        .then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!",
+          });
+        });
+    },
+    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;
+    },
+
+    questionBankRowUpdate(row, index, done, loading) {
+      // debugger;
+      update({
+        theoryGrade: row.theoryGrade,
+        learnGrade: row.learnGrade,
+        examId: row.examId,
+        id: row.id,
+      }).then(
+        () => {
+          this.questionBankOnLoad(this.questionBankPage);
+          this.$message({
+            type: "success",
+            message: "操作成功!",
+          });
+          done();
+        },
+        (error) => {
+          window.console.log(error);
+          loading();
+        }
+      );
+    },
+    handleImport() {
+      this.excelBox = true;
+    },
+    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>
+</style>
diff --git a/src/views/licenseApproval/branchOffice.vue b/src/views/licenseApproval/branchOffice.vue
index 4c89b6c..5dafefe 100644
--- a/src/views/licenseApproval/branchOffice.vue
+++ b/src/views/licenseApproval/branchOffice.vue
@@ -2,7 +2,7 @@
  * @Author: liu
  * @Date: 2021-08-26 17:00:55 
  * @Last Modified by: liu
- * @Last Modified time: 2021-08-27 19:26:20
+ * @Last Modified time: 2021-09-06 08:52:18
  */
 
 
@@ -91,13 +91,13 @@
         ref="licence"
       >
         <div class="licence" id="licence" v-if="dialogVisible">
-          <div class="licence-head">备案证</div>
+          <div class="licence-head">备案回执</div>
           <div class="head-tid">
-            洪公保服务
+            编号
             <span class="fontStyle">{{
               licenceData.row.organizationcode
             }}</span>
-            号
+            <!-- 号 -->
           </div>
           <div class="licence-main">
             <div
@@ -109,9 +109,9 @@
               <span class="l-m-r-once">{{ item }}</span>
             </div>
           </div>
-          <div class="licence-bottom">发证机关(南昌市公安局)</div>
+          <div class="licence-bottom">(公安机关印章)</div>
           <div class="l-bottom">
-            发证日期
+            <!-- 发证日期 -->
             <span class="l-b-t">{{
               licenceData.row.permitime.slice(0, 4)
             }}</span
@@ -636,14 +636,17 @@
 
     viewLicense(row) {
       //查看许可证
+      console.log(row, 34);
       this.licenceData.row = row;
       this.licenceData.chiden = {};
       this.licenceData.chiden["名称"] = row.enterprisename;
-      this.licenceData.chiden["住所"] = row.address;
+      this.licenceData.chiden["地址"] = row.address;
+      this.licenceData.chiden["服务区域"] = row.industry;
       this.licenceData.chiden["法定代表人"] = row.representative;
-      this.licenceData.chiden["服务范围"] = row.industry;
-      this.licenceData.chiden["注册资本"] = row.registeredcapital;
-      this.licenceData.chiden["批准文号"] = row.registrationnumber;
+      this.licenceData.chiden["备案时间"] = row.officetime;
+      this.licenceData.chiden["备案内容"] = "设立分公司备案";
+      // this.licenceData.chiden["注册资本"] = row.registeredcapital;
+      // this.licenceData.chiden["批准文号"] = row.registrationnumber;
 
       console.log(this.licenceData);
       this.dialogVisible = true;
diff --git a/src/views/licenseApproval/crossRegion.vue b/src/views/licenseApproval/crossRegion.vue
index 4ef9aaf..e6cfb4b 100644
--- a/src/views/licenseApproval/crossRegion.vue
+++ b/src/views/licenseApproval/crossRegion.vue
@@ -2,7 +2,7 @@
  * @Author:liu
  * @Date: 2021-08-26 16:59:35 
  * @Last Modified by: liu
- * @Last Modified time: 2021-08-27 19:36:17
+ * @Last Modified time: 2021-09-06 09:19:32
  */
 
 
@@ -90,13 +90,13 @@
         ref="licence"
       >
         <div class="licence" id="licence" v-if="dialogVisible">
-          <div class="licence-head">备案证</div>
+          <div class="licence-head">备案回执</div>
           <div class="head-tid">
-            洪公保服务
+            编号
             <span class="fontStyle">{{
               licenceData.row.organizationcode
             }}</span>
-            号
+            <!-- 号 -->
           </div>
           <div class="licence-main">
             <div
@@ -108,9 +108,9 @@
               <span class="l-m-r-once">{{ item }}</span>
             </div>
           </div>
-          <div class="licence-bottom">发证机关(南昌市公安局)</div>
+          <div class="licence-bottom">(公安机关印章)</div>
           <div class="l-bottom">
-            发证日期
+            <!-- 发证日期 -->
             <span class="l-b-t">{{
               licenceData.row.permitime.slice(0, 4)
             }}</span
@@ -628,11 +628,13 @@
       this.licenceData.row = row;
       this.licenceData.chiden = {};
       this.licenceData.chiden["名称"] = row.enterprisename;
-      this.licenceData.chiden["住所"] = row.address;
+      this.licenceData.chiden["地址"] = row.address;
+      this.licenceData.chiden["服务区域"] = row.industry;
       this.licenceData.chiden["法定代表人"] = row.representative;
-      this.licenceData.chiden["服务范围"] = row.industry;
-      this.licenceData.chiden["注册资本"] = row.registeredcapital;
-      this.licenceData.chiden["批准文号"] = row.registrationnumber;
+      this.licenceData.chiden["备案时间"] = row.officetime;
+      this.licenceData.chiden["备案内容"] = "跨区域经营备案";
+      // this.licenceData.chiden["注册资本"] = row.registeredcapital;
+      // this.licenceData.chiden["批准文号"] = row.registrationnumber;
 
       console.log(this.licenceData);
       this.dialogVisible = true;
diff --git a/src/views/licenseApproval/securityGuard.vue b/src/views/licenseApproval/securityGuard.vue
index 3919185..9910a0c 100644
--- a/src/views/licenseApproval/securityGuard.vue
+++ b/src/views/licenseApproval/securityGuard.vue
@@ -2,7 +2,7 @@
  * @Author: liu
  * @Date: 2021-08-26 16:57:58 
  * @Last Modified by: liu
- * @Last Modified time: 2021-08-27 19:35:04
+ * @Last Modified time: 2021-09-06 09:10:46
  */
 
 
@@ -98,13 +98,13 @@
         ref="licence"
       >
         <div class="licence" id="licence" v-if="dialogVisible">
-          <div class="licence-head">备案证</div>
+          <div class="licence-head">备案回执</div>
           <div class="head-tid">
-            洪公保服务
+            编号
             <span class="fontStyle">{{
               licenceData.row.organizationcode
             }}</span>
-            号
+            <!-- 号 -->
           </div>
           <div class="licence-main">
             <div
@@ -116,9 +116,9 @@
               <span class="l-m-r-once">{{ item }}</span>
             </div>
           </div>
-          <div class="licence-bottom">发证机关(南昌市公安局)</div>
+          <div class="licence-bottom">(公安机关印章)</div>
           <div class="l-bottom">
-            发证日期
+            <!-- 发证日期 -->
             <span class="l-b-t">{{
               licenceData.row.permitime.slice(0, 4)
             }}</span
@@ -687,14 +687,17 @@
     },
     viewLicense(row) {
       //查看许可证
+      console.log(row, 34);
       this.licenceData.row = row;
       this.licenceData.chiden = {};
       this.licenceData.chiden["名称"] = row.enterprisename;
-      this.licenceData.chiden["住所"] = row.address;
+      this.licenceData.chiden["地址"] = row.address;
+      this.licenceData.chiden["服务区域"] = row.industry;
       this.licenceData.chiden["法定代表人"] = row.representative;
-      this.licenceData.chiden["服务范围"] = row.industry;
-      this.licenceData.chiden["注册资本"] = row.registeredcapital;
-      this.licenceData.chiden["批准文号"] = row.registrationnumber;
+      this.licenceData.chiden["备案时间"] = row.officetime;
+      this.licenceData.chiden["备案内容"] = "自招保安单位备案";
+      // this.licenceData.chiden["注册资本"] = row.registeredcapital;
+      // this.licenceData.chiden["批准文号"] = row.registrationnumber;
 
       console.log(this.licenceData);
       this.dialogVisible = true;
diff --git a/src/views/licenseApproval/securityTraining.vue b/src/views/licenseApproval/securityTraining.vue
index cc4d6c1..a2e3827 100644
--- a/src/views/licenseApproval/securityTraining.vue
+++ b/src/views/licenseApproval/securityTraining.vue
@@ -2,7 +2,7 @@
  * @Author: liu
  * @Date: 2021-08-26 16:55:25 
  * @Last Modified by: liu
- * @Last Modified time: 2021-08-27 11:45:56
+ * @Last Modified time: 2021-09-06 09:27:21
  */
 
 
@@ -142,7 +142,7 @@
         ref="licence"
       >
         <div class="licence" id="licence" v-if="dialogVisible">
-          <div class="licence-head">保安服务许可证</div>
+          <div class="licence-head">保安培训许可证</div>
           <div class="head-tid">
             洪公保服务
             <span class="fontStyle">{{
diff --git a/src/views/resource/uploadNotice.vue b/src/views/resource/uploadNotice.vue
index ba64a2a..84d884e 100644
--- a/src/views/resource/uploadNotice.vue
+++ b/src/views/resource/uploadNotice.vue
@@ -23,7 +23,6 @@
           type="primary"
           size="small"
           plain
-          v-if="permission.attach_upload"
           icon="el-icon-upload2"
           @click="handleUpload"
           >上 传
@@ -33,7 +32,6 @@
           size="small"
           icon="el-icon-delete"
           plain
-          v-if="permission.attach_delete"
           @click="handleDelete"
           >删 除
         </el-button>
@@ -43,7 +41,6 @@
           type="text"
           icon="el-icon-download"
           size="small"
-          v-if="permission.attach_download"
           @click="handleDownload(scope.row)"
           >下载
         </el-button>
diff --git a/src/views/resource/uploadNotification.vue b/src/views/resource/uploadNotification.vue
index 80036ba..a0b3460 100644
--- a/src/views/resource/uploadNotification.vue
+++ b/src/views/resource/uploadNotification.vue
@@ -23,7 +23,6 @@
           type="primary"
           size="small"
           plain
-          v-if="permission.attach_upload"
           icon="el-icon-upload2"
           @click="handleUpload"
           >上 传
@@ -33,7 +32,6 @@
           size="small"
           icon="el-icon-delete"
           plain
-          v-if="permission.attach_delete"
           @click="handleDelete"
           >删 除
         </el-button>
@@ -43,7 +41,6 @@
           type="text"
           icon="el-icon-download"
           size="small"
-          v-if="permission.attach_download"
           @click="handleDownload(scope.row)"
           >下载
         </el-button>
diff --git a/src/views/resource/uploadPolicyRelease.vue b/src/views/resource/uploadPolicyRelease.vue
index 9f99ab2..ad976c2 100644
--- a/src/views/resource/uploadPolicyRelease.vue
+++ b/src/views/resource/uploadPolicyRelease.vue
@@ -23,7 +23,6 @@
           type="primary"
           size="small"
           plain
-          v-if="permission.attach_upload"
           icon="el-icon-upload2"
           @click="handleUpload"
           >上 传
@@ -33,7 +32,6 @@
           size="small"
           icon="el-icon-delete"
           plain
-          v-if="permission.attach_delete"
           @click="handleDelete"
           >删 除
         </el-button>
@@ -43,7 +41,6 @@
           type="text"
           icon="el-icon-download"
           size="small"
-          v-if="permission.attach_download"
           @click="handleDownload(scope.row)"
           >下载
         </el-button>
diff --git a/src/views/securityAnalysis/index.vue b/src/views/securityAnalysis/index.vue
index 7806a6a..ad71495 100644
--- a/src/views/securityAnalysis/index.vue
+++ b/src/views/securityAnalysis/index.vue
@@ -214,7 +214,7 @@
         })
         .catch((res) => {
           var b = that.changedata([], "cz", "wcz", "持证", "未持证");
-          that.setEC1(b);
+          that.setEC2(b);
         });
     },
     setEC2(data) {
@@ -488,7 +488,7 @@
         })
         .catch((res) => {
           var b = that.changedata([], "pnum", "wpnum", "已派遣", "未派遣");
-          that.setEC1(b);
+          that.setEC5(b);
         });
     },
     setEC5(d) {
@@ -556,7 +556,7 @@
             "已缴纳社保",
             "未缴纳社保"
           );
-          that.setEC1(b);
+          that.setEC6(b);
         });
     },
     setEC6(d) {
diff --git a/src/views/securityEquipment/equipments.vue b/src/views/securityEquipment/equipments.vue
index 1452fe0..1d7800b 100644
--- a/src/views/securityEquipment/equipments.vue
+++ b/src/views/securityEquipment/equipments.vue
@@ -114,7 +114,7 @@
         align: "center",
         selection: true,
         column: column,
-        labelWidth:110,
+        labelWidth: 110,
       },
     };
   },
@@ -263,17 +263,33 @@
       // console.log(params.deptId);
       if (this.fromDeptId != undefined) {
         params["deptId"] = this.fromDeptId;
-        this.option.column[4].search = false;
-        this.option.column[6].search = false;
-        this.option.column[6].hide = true;
-        this.option.column[6].addDisplay = false;
-        this.option.column[6].editDisplay = false;
+        for (let k in this.option.column) {
+          if (this.option.column[k].prop == "deptId") {
+            this.option.column[k].search = false;
+            this.option.column[k].hide = true;
+            this.option.column[k].addDisplay = false;
+            this.option.column[k].editDisplay = false;
+          }
+        }
+        // this.option.column[4].  = false;
+        // this.option.column[6].search = false;
+        // this.option.column[6].hide = true;
+        // this.option.column[6].addDisplay = false;
+        // this.option.column[6].editDisplay = false;
       } else {
-        this.option.column[4].search = true;
-          this.option.column[6].search = true;
-        this.option.column[6].hide = false;
-        this.option.column[6].addDisplay = true;
-        this.option.column[6].editDisplay = true;
+        for (let k in this.option.column) {
+          if (this.option.column[k].prop == "deptId") {
+            this.option.column[k].search = true;
+            this.option.column[k].hide = false;
+            this.option.column[k].addDisplay = true;
+            this.option.column[k].editDisplay = true;
+          }
+        }
+        // this.option.column[4].search = true;
+        //   this.option.column[6].search = true;
+        // this.option.column[6].hide = false;
+        // this.option.column[6].addDisplay = true;
+        // this.option.column[6].editDisplay = true;
       }
       getdata(
         page.currentPage,
diff --git a/src/views/securityGuard/securityCertificate.vue b/src/views/securityGuard/securityCertificate.vue
new file mode 100644
index 0000000..5d24cc0
--- /dev/null
+++ b/src/views/securityGuard/securityCertificate.vue
@@ -0,0 +1,161 @@
+<template>
+  <div class="securityCertificate">
+    <div class="security_main">
+      <div class="security_m_left">
+        <div class="security_m_l_up">
+          <span class="security_m_l_u_fixed">{{ data.realName }}</span>
+          经国家保安员考试审查合格。特颁此证。
+        </div>
+        <div class="security_m_l_center">
+          发证公安机关&nbsp;(印章)<br />
+          发证日期 &nbsp;{{ data.paperTime.slice(0, 10) }}
+        </div>
+        <div class="security_m_l_down">
+          证件编号 &nbsp;{{ data.securitynumber }}
+        </div>
+      </div>
+      <div class="security_m_right">
+        <div class="security_m_r_img">
+          <div v-if="!data.avatar">暂无照片</div>
+          <img :src="data.avatar" alt="" v-else />
+        </div>
+        <div class="security_m_r_once">
+          <span class="security_m_r_o_left">姓名</span>
+          <span class="security_m_r_o_right">{{ data.realName }}</span>
+        </div>
+        <div class="security_m_r_once">
+          <span class="security_m_r_o_left">出生年月</span>
+          <span class="security_m_r_o_right">{{ data.birthday }}</span>
+        </div>
+        <div class="security_m_r_once security_m_r_odizhi">
+          <span class="security_m_r_o_left security_m_r_o_l_ups">地址</span>
+          <span class="security_m_r_o_right security_m_r_o_l_r">
+            {{ data.address }}
+          </span>
+        </div>
+        <div class="security_m_r_once">
+          <div class="security_m_r_o_left">公民身份证号码</div>
+          <div class="security_m_r_o_right">{{ data.cardid }}</div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  props: ["data"],
+};
+</script>
+
+<style lang="scss" scoped>
+//保安证  本子
+.securityCertificate {
+  width: 100%;
+  height: 90%;
+  background-color: #fff;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+.security_main {
+  width: 800px;
+  height: 560px;
+  //   border: 1px solid rgba($color: #a5a5a5, $alpha: 0.5);
+  display: flex;
+  align-items: center;
+  justify-content: space-around;
+  background-image: url(/img/securityCertificate/123.png);
+  background-size: 100% 100%;
+  background-repeat: no-repeat;
+}
+.security_m_left,
+.security_m_right {
+  width: 380px;
+  height: 540px;
+  //   background-color: rgb(226, 226, 226);
+  padding: 70px 40px;
+  box-sizing: border-box;
+  position: relative;
+  //   background-image: url(/img/securityCertificate/bj2.jpeg);
+  //   background-size: 100% 100%;
+  //   background-repeat: no-repeat;
+}
+.security_m_left {
+  padding-left: 70px;
+  padding-right: 10px;
+}
+.security_m_l_up {
+  font-size: 22px;
+  width: 100%;
+  margin-bottom: 150px;
+  text-indent: 12rem;
+  letter-spacing: 0.5rem;
+  line-height: 2.5rem;
+  // height: ;
+}
+.security_m_l_u_fixed {
+  position: absolute;
+  width: auto;
+  left: -80px;
+}
+.security_m_l_center {
+  font-size: 18px;
+  margin-bottom: 20px;
+  line-height: 40px;
+}
+.security_m_l_down {
+  font-size: 22px;
+}
+.security_m_r_img {
+  width: 100%;
+  height: 210px;
+  display: flex;
+  //   align-items: center;
+  justify-content: center;
+}
+.security_m_r_img img {
+  width: 125px;
+  height: 160px;
+}
+.security_m_r_once {
+  position: relative;
+  widows: 100%;
+  font-size: 20px;
+  margin-bottom: 10px;
+  height: auto;
+}
+.security_m_r_o_left {
+  width: 100px;
+  height: auto;
+  display: inline-block;
+  text-align: justify;
+  text-align-last: justify;
+  margin-right: 10px;
+  //   display: flex;
+  //   justify-content: space-around;
+}
+.security_m_r_o_right {
+  width: 190px;
+  height: auto;
+  display: inline-block;
+}
+.security_m_r_o_l_ups {
+  position: absolute;
+  //   bottom: 1.7rem;
+  //   height: 3rem;
+}
+.security_m_r_o_l_r {
+  position: relative;
+  left: 110px;
+}
+.security_m_r_odizhi {
+  height: 60px;
+  overflow: hidden;
+}
+// .security_m_r_o_left:after {
+//   display: inline-block;
+//   content: "";
+//   padding-left: 100%;
+// }
+</style>
\ No newline at end of file
diff --git a/src/views/securityGuard/securityGuard.vue b/src/views/securityGuard/securityGuard.vue
index d1609ba..e6f6f0f 100644
--- a/src/views/securityGuard/securityGuard.vue
+++ b/src/views/securityGuard/securityGuard.vue
@@ -49,6 +49,15 @@
               >批量导入
             </el-button>
             <el-button
+              type="success"
+              size="small"
+              plain
+              icon="el-icon-upload2"
+              v-if="permission.securityGuard_import"
+              @click="handleImport2"
+              >个人照片批量上传
+            </el-button>
+            <el-button
               type="danger"
               style="display: none"
               size="small"
@@ -250,6 +259,19 @@
             </template>
           </avue-form>
         </el-dialog>
+        <el-dialog
+          title="个人照片批量上传"
+          append-to-body
+          :visible.sync="excelBox2"
+          width="555px"
+        >
+          <avue-form
+            :option="excelOption2"
+            v-model="excelForm2"
+            :upload-after="uploadAfter2"
+          >
+          </avue-form>
+        </el-dialog>
       </basic-container>
     </el-col>
   </el-row>
@@ -300,6 +322,7 @@
     return {
       securityid: "",
       excelBox1: false,
+      excelBox2: false,
       isSecurity: true,
       excelForm1: {},
       excelOption1: {
@@ -325,6 +348,26 @@
             formslot: true,
             span: 24,
           },
+        ],
+      },
+      excelForm2: {},
+      excelOption2: {
+        submitBtn: false,
+        emptyBtn: false,
+        column: [
+          {
+            label: "文件上传",
+            prop: "file",
+            type: "upload",
+            drag: true,
+            loadText: "文件上传中,请稍等",
+            span: 24,
+            propsHttp: {
+              res: "data",
+            },
+            tip: "请上传 zip 压缩文件",
+            action: "/api/blade-resource/oss/endpoint/put-file-zip",
+          }
         ],
       },
 
@@ -861,12 +904,21 @@
     uploadAfter1(res, done, loading, column) {
       window.console.log(column);
       this.excelBox1 = false;
-      // this.refreshChange();
+      this.refreshChange();
       done();
     },
     handleTemplate1() {
       window.open(`/api/blade-user/export-template-security`);
     },
+    handleImport2() {
+      this.excelBox2 = true;
+    },
+    uploadAfter2(res, done, loading, column) {
+      window.console.log(column);
+      this.excelBox2 = false;
+      this.refreshChange();
+      done();
+    },
 
     //行点击事件
     rowClick(row) {
diff --git a/src/views/securityGuard/securityGuardDetail.vue b/src/views/securityGuard/securityGuardDetail.vue
index b388b1a..f4141d8 100644
--- a/src/views/securityGuard/securityGuardDetail.vue
+++ b/src/views/securityGuard/securityGuardDetail.vue
@@ -37,8 +37,8 @@
           <div class="baz-m-body" ref="baoanzheng">
             <div class="bmb-heard">保安员证</div>
             <div class="img">
-              <div v-if="!obj0.myPicture">暂无照片</div>
-              <img :src="obj0.myPicture" alt="" v-else />
+              <div v-if="!obj0.avatar">暂无照片</div>
+              <img :src="obj0.avatar" alt="" v-else />
             </div>
             <div class="imgs">
               <div v-if="erweima == ''">暂无二维码</div>
@@ -81,6 +81,9 @@
         </div>
       </div>
     </span>
+    <span v-else-if="typeTABS.prop === 'tab5'">
+      <securityCertificate :data="obj0"></securityCertificate>
+    </span>
   </div>
 </template> 
 
@@ -95,7 +98,7 @@
   updateExperience,
   getExperienceDetail,
   experienceRemove,
-  getExperienceList
+  getExperienceList,
 } from "@/api/experience/experience";
 
 import {
@@ -108,8 +111,12 @@
 } from "@/api/performance/performance";
 
 // import vueQr from "vue-qr";
+import securityCertificate from "./securityCertificate.vue";
 
 export default {
+  components: {
+    securityCertificate: securityCertificate,
+  },
   data() {
     return {
       typeTABS: {}, //标签页
@@ -135,6 +142,11 @@
             // icon: "el-icon-info",
             label: "保安员证",
             prop: "tab4",
+          },
+          {
+            // icon: "el-icon-info",
+            label: "保安员证书",
+            prop: "tab5",
           },
         ],
       },
@@ -261,7 +273,7 @@
       };
       //获取用户从业信息
       console.log(this.id, "cid");
-      getExperienceList(this.current, this.size,param).then((res1) => {
+      getExperienceList(this.current, this.size, param).then((res1) => {
         const data = res1.data.data;
         this.page1.total = data.total;
         this.data1 = data.records;
@@ -282,7 +294,6 @@
         this.loading2 = false;
       });
     },
-    
 
     rowSave2(form, done, loading) {
       form.securityid = this.id;
diff --git a/src/views/securityUnitChild/businessLicense.vue b/src/views/securityUnitChild/businessLicense.vue
index 8637e5a..4c79944 100644
--- a/src/views/securityUnitChild/businessLicense.vue
+++ b/src/views/securityUnitChild/businessLicense.vue
@@ -2,7 +2,12 @@
   <div class="businessLicense">
     <el-container>
       <el-main>
-        <avue-form :option="option" v-model="form" :upload-after="uploadAfter">
+        <avue-form
+          :option="option"
+          v-model="form"
+          :upload-after="uploadAfter"
+          :upload-delete="uploadDelete"
+        >
         </avue-form
       ></el-main>
     </el-container>
@@ -57,6 +62,24 @@
         this.form.imgUrl = this.row.businessLicense;
       }
     },
+    uploadDelete(column, file) {
+      this.row.businessLicense = "";
+      return update(this.row)
+        .then(() => {
+          this.$message({
+            type: "success",
+            message: "删除成功!",
+          });
+          // done();
+        })
+        .catch((error) => {
+          this.$message({
+            type: "warning",
+            message: "删除照片失败,再重试!",
+          });
+          // done();
+        });
+    },
     uploadAfter(res, done, loading, column) {
       // this.row.businessLicense = "";
       this.row.businessLicense = res.url;
@@ -64,7 +87,7 @@
         () => {
           this.$message({
             type: "success",
-            message: "操作成功!",
+            message: "添加成功!",
           });
           done();
         },
diff --git a/src/views/securityUnitChild/data.js b/src/views/securityUnitChild/data.js
index 3c8388c..1c2f116 100644
--- a/src/views/securityUnitChild/data.js
+++ b/src/views/securityUnitChild/data.js
@@ -8,118 +8,289 @@
 var w = 160,
     s = 12;
 export var column = [{
-        label: "",
-        labelWidth: 20,
-        type: 'title',
-        prop: "title",
-        span: 24,
-        styles: {
-            fontSize: '24px'
-        }
+    label: "",
+    labelWidth: 20,
+    type: 'title',
+    prop: "title",
+    span: 24,
+    styles: {
+        fontSize: '24px'
+    }
+},
+{
+    label: "企业名称",
+    prop: "enterprisename",
+    span: 11,
+    labelWidth: 130,
+    disabled: true,
+},
+// {
+//     label: "统一社会信用代码",
+//     prop: "creditcode",
+//     span: 11,
+//     labelWidth: 130,
+//     disabled: true,
+// },
+{
+    label: "法定代表人",
+    prop: "representative",
+    span: 11,
+    labelWidth: 130,
+    disabled: true,
+}, {
+    label: "法定代表人电话",
+    prop: "representativecell",
+    span: 11,
+    labelWidth: 130,
+    disabled: true,
+},
+{
+    label: "联系人",
+    prop: "contacts",
+    span: 11,
+    labelWidth: 130,
+    disabled: true,
+}, {
+    label: "联系电话",
+    prop: "contactscell",
+    span: 11,
+    labelWidth: 130,
+    disabled: true,
+},
+// {
+//     label: "注册时间",
+//     prop: "establishtime",
+//     span: 11,
+//     labelWidth: 130,
+//     disabled: true,
+// },
+// {
+//     label: "注册资本",
+//     prop: "registeredcapital",
+//     span: 11,
+//     labelWidth: 130,
+//     disabled: true,
+// },
+// {
+//     label: "实缴资本",
+//     prop: "capital",
+//     span: 11,
+//     labelWidth: 130,
+//     disabled: true,
+// },
+// {
+//     label: "组织机构代码",
+//     prop: "organizationcode",
+//     span: 11,
+//     labelWidth: 130,
+//     disabled: true,
+// },
+// {
+//     label: "工商注册号",
+//     prop: "registrationnumber",
+//     span: 11,
+//     labelWidth: 130,
+//     disabled: true,
+// },
+// {
+//     label: "纳税人识别号",
+//     prop: "identificationnumber",
+//     span: 11,
+//     labelWidth: 130,
+//     disabled: true,
+// },
+{
+    label: "企业类型",
+    prop: "stats",
+    type: "tree",
+    dicUrl: "/api/blade-system/dict-biz/dictionary?code=stats",
+    props: {
+        label: "dictValue",
+        value: "dictKey"
     },
-    {
-        label: "企业名称",
-        prop: "enterprisename",
-        span: 11,
-        labelWidth: 130,
-        disabled: true,
+    span: 11,
+    labelWidth: 130,
+    disabled: true,
+},
+{
+    label: "注册地址",
+    prop: "address",
+    span: 11,
+    labelWidth: 130,
+    disabled: true,
+    // search: true,
+},
+// {
+//     label: "所属辖区",
+//     prop: "region",
+//     span: 11,
+//     labelWidth: 130,
+//     width: 110,
+//     overHidden: true,
+//     disabled: true,
+// },
+{
+    label: "所属辖区",
+    prop: "region",
+    // multiple: true,
+    type: "tree",
+    dicUrl: "/api/jurisdiction/lazy-tree",
+    props: {
+        label: "title",
+        value: "id",
     },
-    {
-        label: "统一社会信用代码",
-        prop: "creditcode",
-        span: 11,
-        labelWidth: 130,
-        disabled: true,
-    },
-    {
-        label: "法定代表人",
-        prop: "representative",
-        span: 11,
-        labelWidth: 130,
-        disabled: true,
-    }, {
-        label: "法定代表人电话",
-        prop: "representativecell",
-        span: 11,
-        labelWidth: 130,
-        disabled: true,
-    },
-    {
-        label: "联系人",
-        prop: "contacts",
-        span: 11,
-        labelWidth: 130,
-        disabled: true,
-    }, {
-        label: "联系电话",
-        prop: "contactscell",
-        span: 11,
-        labelWidth: 130,
-        disabled: true,
-    },
-    {
-        label: "注册时间",
-        prop: "establishtime",
-        span: 11,
-        labelWidth: 130,
-        disabled: true,
-    },
-    {
-        label: "注册资本",
-        prop: "registeredcapital",
-        span: 11,
-        labelWidth: 130,
-        disabled: true,
-    },
-    {
-        label: "实缴资本",
-        prop: "capital",
-        span: 11,
-        labelWidth: 130,
-        disabled: true,
-    },
-    {
-        label: "组织机构代码",
-        prop: "organizationcode",
-        span: 11,
-        labelWidth: 130,
-        disabled: true,
-    },
-    {
-        label: "工商注册号",
-        prop: "registrationnumber",
-        span: 11,
-        labelWidth: 130,
-        disabled: true,
-    },
-    {
-        label: "纳税人识别号",
-        prop: "identificationnumber",
-        span: 11,
-        labelWidth: 130,
-        disabled: true,
-    },
-    {
-        label: "企业类型",
-        prop: "stats",
-        type: "tree",
-        dicUrl: "/api/blade-system/dict-biz/dictionary?code=stats",
-        props: {
-            label: "dictValue",
-            value: "dictKey"
-        },
-        span: 11,
-        labelWidth: 130,
-        disabled: true,
-    },
-    {
-        label: "注册地址",
-        prop: "address",
-        span: 11,
-        labelWidth: 130,
-        disabled: true,
-        // search: true,
-    },
+    span: 11,
+    labelWidth: 130,
+    width: 110,
+    overHidden: true,
+    disabled: true,
+    rules: [{
+        required: false,
+        message: "请选择所属辖区",
+        trigger: "click",
+    },],
+},
+{
+    label: "所属行业",
+    prop: "industry",
+    span: 11,
+    labelWidth: 130,
+    disabled: true,
+},
+{
+    label: "登记机关",
+    prop: "registration",
+    // span: 11,
+    labelWidth: 130,
+    disabled: true,
+    span: 11,
+},
+{
+    label: "经营范围",
+    prop: "business",
+    span: 24,
+    labelWidth: 130,
+    width: 110,
+    // overHidden: true,
+    type: 'textarea',
+    showWordLimit: true,
+    disabled: true,
+}
+]
+export var column11 = [{
+    label: "",
+    labelWidth: 20,
+    type: 'title',
+    prop: "title",
+    span: 24,
+    styles: {
+        fontSize: '24px'
+    }
+},
+// {
+//     label: "企业名称",
+//     prop: "enterprisename",
+//     span: 11,
+//     labelWidth: 130,
+//     disabled: true,
+// },
+{
+    label: "统一社会信用代码",
+    prop: "creditcode",
+    span: 11,
+    labelWidth: 130,
+    disabled: true,
+},
+// {
+//     label: "法定代表人",
+//     prop: "representative",
+//     span: 11,
+//     labelWidth: 130,
+//     disabled: true,
+// },
+// {
+//     label: "法定代表人电话",
+//     prop: "representativecell",
+//     span: 11,
+//     labelWidth: 130,
+//     disabled: true,
+// },
+// {
+//     label: "联系人",
+//     prop: "contacts",
+//     span: 11,
+//     labelWidth: 130,
+//     disabled: true,
+// }, {
+//     label: "联系电话",
+//     prop: "contactscell",
+//     span: 11,
+//     labelWidth: 130,
+//     disabled: true,
+// },
+{
+    label: "注册时间",
+    prop: "establishtime",
+    span: 11,
+    labelWidth: 130,
+    disabled: true,
+},
+{
+    label: "注册资本",
+    prop: "registeredcapital",
+    span: 11,
+    labelWidth: 130,
+    disabled: true,
+},
+// {
+//     label: "实缴资本",
+//     prop: "capital",
+//     span: 11,
+//     labelWidth: 130,
+//     disabled: true,
+// },
+{
+    label: "组织机构代码",
+    prop: "organizationcode",
+    span: 11,
+    labelWidth: 130,
+    disabled: true,
+},
+{
+    label: "工商注册号",
+    prop: "registrationnumber",
+    span: 11,
+    labelWidth: 130,
+    disabled: true,
+},
+{
+    label: "纳税人识别号",
+    prop: "identificationnumber",
+    span: 11,
+    labelWidth: 130,
+    disabled: true,
+},
+    // {
+    //     label: "企业类型",
+    //     prop: "stats",
+    //     type: "tree",
+    //     dicUrl: "/api/blade-system/dict-biz/dictionary?code=stats",
+    //     props: {
+    //         label: "dictValue",
+    //         value: "dictKey"
+    //     },
+    //     span: 11,
+    //     labelWidth: 130,
+    //     disabled: true,
+    // },
+    // {
+    //     label: "注册地址",
+    //     prop: "address",
+    //     span: 11,
+    //     labelWidth: 130,
+    //     disabled: true,
+    //     // search: true,
+    // },
     // {
     //     label: "所属辖区",
     //     prop: "region",
@@ -129,154 +300,153 @@
     //     overHidden: true,
     //     disabled: true,
     // },
-    {
-        label: "所属辖区",
-        prop: "region",
-        // multiple: true,
-        type: "tree",
-        dicUrl: "/api/jurisdiction/lazy-tree",
-        props: {
-            label: "title",
-            value: "id",
-        },
-        span: 11,
-        labelWidth: 130,
-        width: 110,
-        overHidden: true,
-        disabled: true,
-        rules: [{
-            required: false,
-            message: "请选择所属辖区",
-            trigger: "click",
-        }, ],
-    },
-    {
-        label: "所属行业",
-        prop: "industry",
-        span: 11,
-        labelWidth: 130,
-        disabled: true,
-    },
-    {
-        label: "登记机关",
-        prop: "registration",
-        // span: 11,
-        labelWidth: 130,
-        disabled: true,
-        span: 11,
-    },
-    {
-        label: "经营范围",
-        prop: "business",
-        span: 24,
-        labelWidth: 130,
-        width: 110,
-        // overHidden: true,
-        type: 'textarea',
-        showWordLimit: true,
-        disabled: true,
-    }
-]
-
-export var column1 = [{
-        label: "id",
-        prop: "id",
-        hide: true,
-        addDisplay: false,
-        editDisplay: false,
-
-    }, {
-        label: "股东",
-        prop: "shareholder",
-        searchLabelWidth: 55,
-        search: true,
-        labelWidth: w,
-        span: s,
-    }, {
-        label: "持股比例(%)",
-        prop: "shareholdingratio",
-        labelWidth: w,
-        span: s,
-    },
-    //  {
-    //     label: "最终受益股份",
-    //     prop: "beneficial",
+    // {
+    //     label: "所属辖区",
+    //     prop: "region",
+    //     // multiple: true,
+    //     type: "tree",
+    //     dicUrl: "/api/jurisdiction/lazy-tree",
+    //     props: {
+    //         label: "title",
+    //         value: "id",
+    //     },
+    //     span: 11,
+    //     labelWidth: 130,
+    //     width: 110,
+    //     overHidden: true,
+    //     disabled: true,
+    //     rules: [{
+    //         required: false,
+    //         message: "请选择所属辖区",
+    //         trigger: "click",
+    //     }, ],
     // },
-    {
-        label: "出资金额(万元)",
-        prop: "capital",
-        labelWidth: w,
-        span: s,
-    }, {
-        label: "出资时间",
-        prop: "capitaltime",
-        type: "date",
-        format: "yyyy-MM-dd hh:mm:ss",
-        valueFormat: "timestamp",
-        labelWidth: w,
-        span: s,
-    }, {
-        label: "身份证",
-        prop: "cardid",
-        labelWidth: w,
-        span: s,
-        search: true
-    }, {
-        label: "联系电话",
-        prop: "cell",
-        labelWidth: w,
-        span: s,
-    }, {
-        label: "统一社会信用代码",
-        prop: "creditcode",
-        hide: true,
-        addDisplay: false,
-        editDisplay: false,
-        labelWidth: w,
-        span: s,
-    },
+    // {
+    //     label: "所属行业",
+    //     prop: "industry",
+    //     span: 11,
+    //     labelWidth: 130,
+    //     disabled: true,
+    // },
+    // {
+    //     label: "登记机关",
+    //     prop: "registration",
+    //     // span: 11,
+    //     labelWidth: 130,
+    //     disabled: true,
+    //     span: 11,
+    // },
+    // {
+    //     label: "经营范围",
+    //     prop: "business",
+    //     span: 24,
+    //     labelWidth: 130,
+    //     width: 110,
+    //     // overHidden: true,
+    //     type: 'textarea',
+    //     showWordLimit: true,
+    //     disabled: true,
+    // }
+]
+export var column1 = [{
+    label: "id",
+    prop: "id",
+    hide: true,
+    addDisplay: false,
+    editDisplay: false,
+
+}, {
+    label: "股东",
+    prop: "shareholder",
+    searchLabelWidth: 55,
+    search: true,
+    labelWidth: w,
+    span: s,
+}, {
+    label: "持股比例(%)",
+    prop: "shareholdingratio",
+    labelWidth: w,
+    span: s,
+},
+//  {
+//     label: "最终受益股份",
+//     prop: "beneficial",
+// },
+{
+    label: "出资金额(万元)",
+    prop: "capital",
+    labelWidth: w,
+    span: s,
+}, {
+    label: "出资时间",
+    prop: "capitaltime",
+    type: "date",
+    format: "yyyy-MM-dd hh:mm:ss",
+    valueFormat: "timestamp",
+    labelWidth: w,
+    span: s,
+}, {
+    label: "身份证",
+    prop: "cardid",
+    labelWidth: w,
+    span: s,
+    search: true
+}, {
+    label: "联系电话",
+    prop: "cell",
+    labelWidth: w,
+    span: s,
+}, {
+    label: "统一社会信用代码",
+    prop: "creditcode",
+    hide: true,
+    addDisplay: false,
+    editDisplay: false,
+    labelWidth: w,
+    span: s,
+},
 ]
 
 export var column2 = [{
-        label: "统一社会信用代码",
-        prop: "creditcode",
-        hide: true,
-        addDisplay: false,
-        editDisplay: false,
-        labelWidth: w,
-        span: s,
-    }, {
-        label: "id",
-        prop: "id",
-        hide: true,
-        addDisplay: false,
-        editDisplay: false,
-        labelWidth: w,
-        span: s,
-    }, {
-        label: "姓名",
-        prop: "name",
-        search: true,
-        labelWidth: w,
-        searchLabelWidth: 55,
-        span: s,
-    }, {
-        label: "职务",
-        prop: "post",
-        search: true,
-        labelWidth: w,
-        span: s,
-    }, {
-        label: "身份证",
-        prop: "cardid",
-        labelWidth: w,
-        span: s,
-    }, {
-        label: "联系电话",
-        prop: "cell",
-        labelWidth: w,
-        span: s,
-    }
+    label: "统一社会信用代码",
+    prop: "creditcode",
+    hide: true,
+    addDisplay: false,
+    editDisplay: false,
+    labelWidth: w,
+    span: s,
+}, {
+    label: "id",
+    prop: "id",
+    hide: true,
+    addDisplay: false,
+    editDisplay: false,
+    labelWidth: w,
+    span: s,
+}, {
+    label: "姓名",
+    prop: "name",
+    search: true,
+    labelWidth: w,
+    searchLabelWidth: 55,
+    span: s,
+}, {
+    label: "职务",
+    prop: "post",
+    search: true,
+    labelWidth: w,
+    span: s,
+}, {
+    label: "身份证",
+    prop: "cardid",
+    labelWidth: w,
+    span: s,
+}, {
+    label: "联系电话",
+    prop: "cell",
+    labelWidth: w,
+    span: s,
+}
     //     , {
     //         label: "持股比例(%)",
     //         prop: "shareholdingratio",
diff --git a/src/views/securityUnitChild/index.vue b/src/views/securityUnitChild/index.vue
index 3f8c7dd..58e1696 100644
--- a/src/views/securityUnitChild/index.vue
+++ b/src/views/securityUnitChild/index.vue
@@ -42,6 +42,47 @@
         </avue-form>
       </basic-container>
     </span>
+    <span v-if="typeTABS.prop === 'tab11'" class="tab">
+      <!-- <avue-crud
+        :option="option"
+        :data="data"
+        :page.sync="page"
+        ref="crudrec"
+        @on-load="onLoad"
+        :table-loading="loading"
+        @row-save="rowSave"
+        @search-change="searchChange"
+        @search-reset="searchReset"
+        @row-update="rowUpdate"
+        @row-del="rowDel"
+        @selection-change="selectionChange"
+        @refresh-change="refreshChange"
+      >
+        <template slot="menuLeft">
+          <el-button
+            type="danger"
+            size="small"
+            plain
+            icon="el-icon-delete"
+            @click="handleDelete"
+            >删 除
+          </el-button>
+        </template>
+      </avue-crud>-->
+      <!-- 表单组件 -->
+      <basic-container>
+        <avue-form
+          ref="form"
+          v-model="obj0"
+          :option="option01"
+          @submit="submit0"
+        >
+          <!-- <template slot-scope="scope" slot="menuForm">
+          <el-button @click="tip">自定义按钮</el-button>
+        </template> -->
+        </avue-form>
+      </basic-container>
+    </span>
     <span v-else-if="typeTABS.prop === 'tab2'" class="tab">
       <!-- <span v-if="typeTABS.prop === 'tab2'"> -->
       <basic-container>
@@ -183,7 +224,7 @@
 </template> 
 
 <script>
-import { column, column1, column2 } from "./data";
+import { column11, column, column1, column2 } from "./data";
 import {
   getOncedata,
   // getdata,
@@ -262,7 +303,7 @@
               res: "data",
             },
             tip: "请上传 .xls,.xlsx 标准格式文件",
-            action: "/api/car/import-examSubject",
+            action: "/api/shareholder/import-share",
           },
           {
             label: "模板下载",
@@ -290,7 +331,7 @@
               res: "data",
             },
             tip: "请上传 .xls,.xlsx 标准格式文件",
-            action: "/api/examSubjectChoices/import-examSubject",
+            action: "/api/member/import-member",
           },
           {
             label: "模板下载",
@@ -308,6 +349,11 @@
             // icon: "el-icon-info",
             label: "保安单位基本信息",
             prop: "tab1",
+          },
+          {
+            // icon: "el-icon-info",
+            label: "工商信息",
+            prop: "tab11",
           },
           {
             // icon: "el-icon-info",
@@ -364,6 +410,14 @@
         submitText: "保存",
         gutter: 30,
         column: column,
+      },
+
+      option01: {
+        emptyBtn: false,
+        submitBtn: false,
+        submitText: "保存",
+        gutter: 30,
+        column: column11,
       },
 
       loading1: true, //派遣记录
@@ -445,7 +499,7 @@
       update(row).then(
         () => {
           // this.onLoad(this.page);
-          this.onloads();
+          // this.onloads();
           this.$message({
             type: "success",
             message: "操作成功!",
@@ -467,11 +521,11 @@
     uploadAfter(res, done, loading, column) {
       window.console.log(column);
       this.excelBox = false;
-      this.refreshChange();
+      this.refreshChange1();
       done();
     },
     handleTemplate() {
-      window.open(`/api/car/export-template`);
+      window.open(`/api/shareholder/export-template`);
     },
 
     handleImport1() {
@@ -481,11 +535,11 @@
     uploadAfter1(res, done, loading, column) {
       window.console.log(column);
       this.excelBox1 = false;
-      // this.refreshChange();
+      this.refreshChange2();
       done();
     },
     handleTemplate1() {
-      window.open(`/api/examSubjectChoices/export-template`);
+      window.open(`/api/member/export-template`);
     },
 
     handleChangeTABS(column) {
@@ -874,19 +928,30 @@
         getRoleDetail(roleId).then((res) => {
           var roleAlias = res.data.data.roleAlias;
           var d = that.option0.column;
+          var e = that.option01.column;
           // console.log(roleAlias);
           if (roleAlias == "保安公司管理员") {
             that.option0.submitBtn = true;
+            that.option01.submitBtn = true;
             for (var k in d) {
               // if (d[k].label != "企业类型") {
               d[k].disabled = false;
               // }
             }
+            for (var n in e) {
+              // if (d[k].label != "企业类型") {
+              e[n].disabled = false;
+              // }
+            }
           } else {
             that.option0.submitBtn = false;
+            that.option01.submitBtn = false;
             for (var k in d) {
               d[k].disabled = true;
             }
+            for (var n in e) {
+              e[n].disabled = true;
+            }
           }
           getdatas(roleAlias);
         });
diff --git a/src/views/securityUnitChild/licence.vue b/src/views/securityUnitChild/licence.vue
index 7fc6d85..efa47c1 100644
--- a/src/views/securityUnitChild/licence.vue
+++ b/src/views/securityUnitChild/licence.vue
@@ -2,7 +2,12 @@
   <div class="License">
     <el-container>
       <el-main>
-        <avue-form :option="option" v-model="form" :upload-after="uploadAfter">
+        <avue-form
+          :option="option"
+          v-model="form"
+          :upload-after="uploadAfter"
+          :upload-delete="uploadDelete"
+        >
         </avue-form
       ></el-main>
     </el-container>
@@ -57,13 +62,31 @@
         this.form.imgUrl = this.row.licence;
       }
     },
+    uploadDelete(column, file) {
+      this.row.licence = "";
+      return update(this.row)
+        .then(() => {
+          this.$message({
+            type: "success",
+            message: "删除成功!",
+          });
+          // done();
+        })
+        .catch((error) => {
+          this.$message({
+            type: "warning",
+            message: "删除照片失败,再重试!",
+          });
+          // done();
+        });
+    },
     uploadAfter(res, done, loading, column) {
       this.row.licence = res.url;
       update(this.row).then(
         () => {
           this.$message({
             type: "success",
-            message: "操作成功!",
+            message: "添加成功!",
           });
           done();
         },
diff --git a/src/views/securityUnitChild/social.vue b/src/views/securityUnitChild/social.vue
index 6448fab..d13c4a8 100644
--- a/src/views/securityUnitChild/social.vue
+++ b/src/views/securityUnitChild/social.vue
@@ -76,9 +76,12 @@
   props: ["deptid"],
   data() {
     var deptid = this.deptid;
-
+    if (this.deptid == undefined) {
+      // deptid = this.userInfo
+      // console.log(this.$store.getters.userInfo.dept_id);
+      deptid = this.$store.getters.userInfo.dept_id;
+    }
     return {
-      do: 0,
       form: { cardid: "" },
 
       query: {},
@@ -398,8 +401,7 @@
   },
   methods: {
     changes(val) {
-      this.do++;
-      if (this.do >= 2) {
+      if (val.value != "") {
         getuseList(val.value).then((res) => {
           // console.log(res);
           var d = res.data.data;
diff --git a/src/views/system/user.vue b/src/views/system/user.vue
index 1a726da..a94be80 100644
--- a/src/views/system/user.vue
+++ b/src/views/system/user.vue
@@ -985,6 +985,7 @@
     },
     onLoad(page, params = {}) {
       this.loading = true;
+      params['status'] = 1;
       getList(
         page.currentPage,
         page.pageSize,
diff --git a/src/views/trainApply/index.vue b/src/views/trainApply/index.vue
index 231f28f..a201ecf 100644
--- a/src/views/trainApply/index.vue
+++ b/src/views/trainApply/index.vue
@@ -62,9 +62,25 @@
                             :type="type"
                             size="small"
                             icon="el-icon-receiving"
-                            :disabled="row.candidateNo==''"
+                            :disabled="row.candidateNo=='' || row.cancel==2"
                             @click="handlePrint(row)"
                             >准考证打印
+                            </el-button>
+                            <el-button
+                            :type="type"
+                            size="small"
+                            icon="el-icon-refresh-left"
+                            :disabled="row.cancel==2"
+                            @click="revoke(row)"
+                            >取消报名
+                            </el-button>
+                            <el-button
+                            :type="type"
+                            size="small"
+                            icon="el-icon-circle-check"
+                            :disabled="row.auditStatus==1"
+                            @click="auditSucess(row)"
+                            >审核通过
                             </el-button>
                         </template>
 
@@ -98,7 +114,7 @@
 
 <script>
 
-import {getdata,adddata,remove} from "@/api/trainingRegistration/trainingRegistration";
+import {getdata,adddata,  cancelTrainAudit,auditSucess,remove} from "@/api/trainingRegistration/trainingRegistration";
 
 import { mapState } from 'vuex'
 
@@ -258,6 +274,24 @@
                         width: 220
                     },
                     {
+                        label: "报名状态",
+                        prop: "cancel",
+                        type:"select",
+                        search:true,
+                        hide:true,
+                        searchSpan:4,
+                        searchValue:1,
+                        dicData:[
+                            {
+                                label: '已报名',
+                                value: 1
+                            }, {
+                                label: '已取消',
+                                value: 2
+                            }
+                        ]
+                    },
+                    {
                         label: "准考证号",
                         prop: "candidateNo",
                         slot: true,
@@ -373,7 +407,7 @@
                                             ? "0" + new Date().getSeconds()
                                             : new Date().getSeconds())),
 
-                        width: 160
+                        width: 150
                     },
                     {
                         label: "考试时间",
@@ -394,7 +428,44 @@
                         editDisplay: true,
                         // 表单编辑时是否为查看模式
                         editDetail: false,
-                        width: 160
+                        width: 150
+                    },
+                    {
+                        label: "审核状态",
+                        search: true,
+                        searchLabelWidth: 110,
+                        type: "select",
+                        searchSpan: 4,
+                        prop: "auditStatus",
+                        searchValue: 4,
+                        dicData: [{
+                                label: '全部',
+                                value: 0,
+                            },
+                            {
+                                label: '审核通过',
+                                value: 1,
+                            },
+                            {
+                                label: '审核不通过',
+                                value: 2,
+                            },
+                            {
+                                label: '已提交审核',
+                                value: 3,
+                            },
+                            {
+                                label: '未提交审核',
+                                value: 4,
+                            }
+                        ],
+                        props: {
+                            label: "label",
+                            value: "value"
+                        },
+                        editDisplay: false,
+                        addDisplay: false,
+                        width: 100,
                     },
                     // {
                     //     label: "报名状态",
@@ -494,11 +565,8 @@
         this.questionBankOption.column[0].dicUrl = "/api/blade-system/dept/lazy-tree-user?parentId=" + this.userInfo.dept_id
 
       }
-
-
-       
-
-
+      this.questionBankSearch['cancel'] = 1;
+      this.questionBankSearch['auditStatus'] = 0;
     },
     mounted() {
         var flag = false,
@@ -540,7 +608,7 @@
             });
         },
         questionBankOnLoad (page, params = {}) {
-            // debugger;
+            params = this.questionBankSearch;
             params['examId'] = this.$route.query.id;
             this.questionBankLoading = false;
             getdata(page.currentPage, page.pageSize, Object.assign(params, this.questionBankQuery)).then(res => {
@@ -574,6 +642,54 @@
         questionBankSizeChange (pageSize) {
             this.questionBankPage.pageSize = pageSize;
         },
+        //取消报名
+        revoke(row, done, loading) {
+            this.$confirm("确定取消报名?", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning",
+            }).then(() => {
+                row.cancel = 2;
+                cancelTrainAudit(row).then(
+                () => {
+                    this.onLoad(this.page);
+                    this.$message({
+                    type: "success",
+                    message: "取消报名成功!",
+                    });
+                    done();
+                },
+                (error) => {
+                    window.console.log(error);
+                    loading();
+                }
+                );
+            });
+        },
+        //审核通过
+        auditSucess(row, done, loading) {
+            this.$confirm("确定审核通过?", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning",
+            }).then(() => {
+                row.cancel = 1;
+                auditSucess(row).then(
+                () => {
+                    this.onLoad(this.page);
+                    this.$message({
+                    type: "success",
+                    message: "操作成功!",
+                    });
+                    done();
+                },
+                (error) => {
+                    window.console.log(error);
+                    loading();
+                }
+                );
+            });
+        },
 
         // 新增
         questionBankRowSave (row, done, loading) {
diff --git a/src/views/trainExam/index.vue b/src/views/trainExam/index.vue
index cfd1e6a..412cc67 100644
--- a/src/views/trainExam/index.vue
+++ b/src/views/trainExam/index.vue
@@ -72,6 +72,7 @@
                 size="mini"
                 icon="el-icon-collection"
                 class="start-kaoshi"
+                v-if="permission.trainExam_trainPapers"
                 @click="startExam(row)"
                 >报名清册
               </el-button>
@@ -79,8 +80,17 @@
                 type="text"
                 size="mini"
                 icon="el-icon-folder-checked"
+                v-if="permission.trainExam_check"
                 @click="handleAudit(row)"
                 >审核
+              </el-button>
+              <el-button
+                type="text"
+                size="mini"
+                icon="el-icon-folder-checked"
+                v-if="permission.trainExam_index_examScoreViews"
+                @click="examScoreViews(row)"
+                >成绩查看
               </el-button>
             </template>
           </avue-crud>
@@ -115,6 +125,7 @@
   updateAudit,
 } from "@/api/examapi/examination";
 import { auditColumn } from "./data";
+import { mapGetters } from "vuex";
 export default {
   data() {
     var validatePass = (rule, value, callback) => {
@@ -441,7 +452,6 @@
       questionBankSelectionList: [],
     };
   },
-  created() {},
   mounted() {},
   computed: {
     ids() {
@@ -450,6 +460,15 @@
         ids.push(ele.id);
       });
       return ids.join(",");
+    },
+    ...mapGetters(["userInfo", "permission"]),
+    permissionList() {
+      return {
+        addBtn: this.vaildData(null, false),
+        viewBtn: this.vaildData(null, false),
+        delBtn: this.vaildData(null, false),
+        editBtn: this.vaildData(null, false),
+      };
     },
   },
   watch: {},
@@ -527,6 +546,15 @@
         });
       }
     },
+    examScoreViews(row){
+      //模拟考试
+      if (row.examType == 2) {
+        this.$router.push({
+          path: `/trainExam/singleperformance`,
+          query: row,
+        });
+      }
+    },
     // 新增
     questionBankRowSave(row, done, loading) {
       row.startTime = row.startTime + ":00";
diff --git a/src/views/trainExam/performance.vue b/src/views/trainExam/performance.vue
index 95027d0..dc7adac 100644
--- a/src/views/trainExam/performance.vue
+++ b/src/views/trainExam/performance.vue
@@ -38,7 +38,7 @@
               {{ row.allGrade == -1 ? "" : row.allGrade }}
             </template>
             <template slot-scope="{ row }" slot="qualified">
-              {{ row.qualified == -1 ? "" : row.qualified==0?"合格":row.qualified==1?"不合格":'' }}
+              {{ row.qualified == -1 ? "" : row.qualified==0?"合格":row.qualified==1?"不合格":row.qualified==3?"缺考,成绩无效":'' }}
             </template>
 
             <!-- 自定义按钮 -->
@@ -64,6 +64,16 @@
                 @click="handleImport"
                 >实操成绩导入
               </el-button>
+            </template>
+
+            <template slot-scope="{ type, size, row }" slot="menu">
+                <el-button
+                  icon="el-icon-s-flag"
+                  @click="absent(row)"
+                  :size="size"
+                  :type="type"
+                  >缺考标记</el-button
+                >
             </template>
           </avue-crud>
 
@@ -92,7 +102,7 @@
 </template>
 
 <script>
-import { getList, update } from "@/api/examapi/performance";
+import { getList, update,updateAbsent } from "@/api/examapi/performance";
 import { mapGetters } from "vuex";
 import { getRoleDetail } from "@/api/system/role";
 export default {
@@ -394,6 +404,10 @@
                 label: "暂未录实操成绩",
                 value: 2,
               },
+              {
+                label: "缺考,成绩无效",
+                value: 3,
+              },
             ],
             // 表单新增时是否禁止
             addDisabled: false,
@@ -506,11 +520,16 @@
             var roleAlias = res.data.data.roleAlias;
             if (
               roleAlias == "保安公司管理员" ||
-              roleAlias == "保安" ||
-              roleAlias == "未持证保安"
+              roleAlias == "保安"
             ) {
               //如果是保安公司管理员
               params["deptId"] = that.userInfo.dept_id;
+            }
+            if (
+              roleAlias == "培训公司管理员"
+            ) {
+              //如果是培训公司管理员
+              params["trainUnitId"] = that.userInfo.dept_id;
             }
             that.questionBankLoading = false;
             params["examType"] = 2;
@@ -529,6 +548,30 @@
       });
       
     },
+    //缺考标记
+    absent(row, done, loading) {
+      this.$confirm("确定缺考标记?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      }).then(() => {
+        row.qualified = 3;
+        updateAbsent(row).then(
+          () => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!",
+            });
+            done();
+          },
+          (error) => {
+            window.console.log(error);
+            loading();
+          }
+        );
+      });
+    },
     questionBankSelectionClear() {
       this.questionBankSelectionList = [];
       this.$refs.questionBankCrud.toggleSelection();
diff --git a/src/views/trainExam/singleperformance.vue b/src/views/trainExam/singleperformance.vue
index adb0a7d..ad770e3 100644
--- a/src/views/trainExam/singleperformance.vue
+++ b/src/views/trainExam/singleperformance.vue
@@ -38,7 +38,7 @@
               {{ row.learnGrade == -1 ? "" : row.allGrade }}
             </template>
             <template slot-scope="{ row }" slot="qualified">
-              {{ row.learnGrade == -1 ? "" : row.qualified == 0?"合格":row.qualified==1?"不合格":'' }}
+              {{ row.qualified == -1 ? "" : row.qualified==0?"合格":row.qualified==1?"不合格":row.qualified==3?"缺考,成绩无效":'' }}
             </template>
 
             <template slot-scope="{ row }" slot="menu">
@@ -139,7 +139,7 @@
             label: "考试名称",
             prop: "examName",
             search: true,
-            searchSpan: 4,
+            searchSpan: 5,
             slot: true,
             viewDisplay:false,
             // 表单新增时是否禁止
@@ -273,7 +273,7 @@
             type: "select",
             slot: true,
             search: true,
-            searchSpan: 4,
+            searchSpan: 3,
             dicData: [
               {
                 label: "发布成绩",
@@ -369,7 +369,7 @@
             type: "select",
             slot: true,
             search: true,
-            searchSpan: 4,
+            searchSpan: 3,
             dicData: [
               {
                 label: "合格",
@@ -418,7 +418,10 @@
       questionBankSelectionList: [],
     };
   },
-  created() {},
+  created() {
+    // console.log(this.$route.query,111);
+    this.questionBankSearch['examName'] = this.$route.query.examName;
+  },
   mounted() {},
   computed:{
     ...mapGetters(["userInfo", "permission"]),
@@ -447,17 +450,23 @@
       var that = this;
       //获取当前登录人员的角色信息
       var roleIds = this.userInfo.role_id.split(",");
+      params = this.questionBankSearch;
       roleIds.forEach((roleId) => {
         getRoleDetail(roleId).then((res) => {
             var roleAlias = res.data.data.roleAlias;
             if (
               roleAlias == "保安公司管理员" ||
-              roleAlias == "保安" ||
-              roleAlias == "未持证保安"
+              roleAlias == "保安"
             ) {
               //如果是保安公司管理员
               params["deptId"] = that.userInfo.dept_id;
             }
+            if (
+              roleAlias == "培训公司管理员"
+            ) {
+              //如果是培训公司管理员
+              params["trainUnitId"] = that.userInfo.dept_id;
+            }
             that.questionBankLoading = false;
             params["examType"] = 2;
             getList(
diff --git a/src/views/traincompany/index.vue b/src/views/traincompany/index.vue
index 86882d7..9c6095c 100644
--- a/src/views/traincompany/index.vue
+++ b/src/views/traincompany/index.vue
@@ -35,6 +35,7 @@
           size="small"
           icon="el-icon-edit"
           v-if="permission.traincompany_addTrain"
+          :disabled="auditStatus"
           @click="handleTrainApply(row)"
           >报名
           </el-button>
@@ -71,12 +72,13 @@
 import {adddata,batchTrain} from "@/api/trainingRegistration/trainingRegistration";
 import { mapGetters } from "vuex";
 import { mapState } from 'vuex';
-
+import {getUser} from "@/api/system/user";
 export default {
 
   data() {
     return {
       form: {},
+      auditStatus:false,
       formTrainApply: {},
       query: {},
       deptId:null,
@@ -116,7 +118,7 @@
             display: false,
           },
           {
-            label: "法定代表人",
+            label: "校长",
             prop: "representative",
             display: false,
             search: true,
@@ -125,37 +127,18 @@
             width: 120,
           },
           {
-            label: "注册时间",
-            prop: "establishtime",
-            type: "date",
-            format: "yyyy-MM-dd",
-            valueFormat: "yyyy-MM-dd",
-            mock: {
-              type: "datetime",
-              format: "yyyy-MM-dd",
-            },
-            display: false,
-            width: 180,
+            label: "负责人",
+            prop: "contacts",
+            display: false
           },
           {
-            label: "注册资金",
-            prop: "registeredcapital",
+            label: "联系方式",
+            prop: "contactscell",
             display: false,
             width: 130,
           },
           {
-            label: "实缴资金",
-            prop: "capital",
-            display: false,
-            width: 130,
-          },
-          {
-            label: "公司类型",
-            prop: "enterprises",
-            display: false,
-          },
-          {
-            label: "注册地址",
+            label: "联系地址",
             prop: "address",
             display: false,
             width: 280,
@@ -271,10 +254,23 @@
   },
   created() {
       this.optionTrainApply.column[1].dicUrl =
-        "/api/blade-user/security-apply-tree?deptId=" +
+        "/api/blade-user/security-apply-tree?examType=2&deptId=" +
         this.userInfo.dept_id;
+
+      this.getUserDetail();
   },
   methods: {
+    //获取用户信息
+    getUserDetail(){
+      var that = this;
+      getUser(this.userInfo.Id).then((res)=>{
+          var status = res.data.data.examinationType;
+          if(status=='1'){
+            that.auditStatus = true;
+          }
+          console.log(that.auditStatus,3333);
+      })
+    },
     //保安公司批量报名
     handleTrainApplyBatch(row){
       this.dialogDisable = true;
@@ -318,34 +314,40 @@
     },
     //未持证保安人员报名
     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:"报名成功",
-              });
+      this.$confirm("是否确定报名?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      }).then(() => {
+        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();
           }
-          done();
-        },
-        (error) => {
-          window.console.log(error);
-          loading();
-        }
-      );
+        );
+      })
     },
     //关闭窗口清除数据
     closeDialog(){
diff --git a/src/views/trainingRegistration/data.js b/src/views/trainingRegistration/data.js
index f08ae3d..c05d907 100644
--- a/src/views/trainingRegistration/data.js
+++ b/src/views/trainingRegistration/data.js
@@ -35,6 +35,7 @@
         }],
         searchSpan: 4,
         searchLabelWidth: 110,
+        width: 200,
     }, {
         label: "姓名",
         prop: "userId",
@@ -126,29 +127,82 @@
             message: "请输入单位名称",
             trigger: "blur"
         }],
+
     },
     {
         label: "考试名称",
-        prop: "trainExamName"
+        prop: "trainExamName",
+        width: 220,
     },
     {
         label: "考试证件",
         prop: "applyCard"
     },
-    // {
-    //     label: "报名状态",
-    //     prop: "cancel",
-    //     // search: true,
-    //     dicData: DIC1,
-    //     props: {
-    //         label: "label",
-    //         value: "value"
-    //     },
-    //     editDisplay: false,
-    //     addDisplay: false,
-    //     searchSpan: 4,
-    //     width: 100,
-    // },
+    {
+        label: "审核状态",
+        search: true,
+        searchLabelWidth: 110,
+        type: "select",
+        searchSpan: 4,
+        prop: "auditStatus",
+        searchValue: 4,
+        dicData: [{
+                label: '全部',
+                value: 0,
+            },
+            {
+                label: '审核通过',
+                value: 1,
+            },
+            {
+                label: '审核不通过',
+                value: 2,
+            },
+            {
+                label: '已提交审核',
+                value: 3,
+            },
+            {
+                label: '未提交审核',
+                value: 4,
+            }
+        ],
+        props: {
+            label: "label",
+            value: "value"
+        },
+        editDisplay: false,
+        addDisplay: false,
+        width: 100,
+    },
+    {
+        label: "报名状态",
+        search: true,
+        type: "select",
+        searchSpan: 4,
+        prop: "cancel",
+        searchValue: 1,
+        dicData: [{
+                label: '全部',
+                value: 0,
+            },
+            {
+                label: '已报名',
+                value: 1,
+            },
+            {
+                label: '已取消',
+                value: 2,
+            }
+        ],
+        props: {
+            label: "label",
+            value: "value"
+        },
+        editDisplay: false,
+        addDisplay: false,
+        width: 100,
+    },
     //  {
     //     label: "确认截止时间",
     //     prop: "remainingTime",
diff --git a/src/views/trainingRegistration/index.vue b/src/views/trainingRegistration/index.vue
index 8005c94..372c962 100644
--- a/src/views/trainingRegistration/index.vue
+++ b/src/views/trainingRegistration/index.vue
@@ -5,6 +5,7 @@
       :table-loading="loading"
       :data="data"
       :page.sync="page"
+      :search.sync="search"
       ref="crud"
       @row-del="rowDel"
       v-model="form"
@@ -57,6 +58,7 @@
           :size="size"
           :type="type"
           v-if="permission.trainingRegistration_cancel"
+          :disabled="row.cancel==2"
           >取消报名</el-button
         >
         <el-button
@@ -64,7 +66,7 @@
           size="small"
           icon="el-icon-receiving"
           v-if="permission.trainingRegistration_print"
-          :disabled="row.candidateNo == ''"
+          :disabled="row.candidateNo == '' || row.cancel==2"
           @click="handlePrint(row)"
           >准考证打印
         </el-button>
@@ -127,12 +129,14 @@
   addExam,
 } from "@/api/trainingRegistration/trainingRegistration";
 import { mapGetters } from "vuex";
+import { getRoleDetail } from "@/api/system/role";
 export default {
   data() {
     return {
       loading: true,
       excelBox: false,
       dialogExamFormVisible: false,
+      search:{},
       optionExamApply: {
         height: "auto",
         filterBtn: true,
@@ -145,27 +149,79 @@
         index: true,
         stripe: true,
         viewBtn: true,
-        selection: true,
+        selection: false,
         excelBtn: false,
         menuWidth: 380,
         dialogClickModal: false,
         column: [
-          // {
-          //   label: "考试人数",
-          //   prop: "number",
-          //   type: 'number',
-          //   span: 6,
-          //   precision:2,
-          //   mock:{
-          //     type:'number',
-          //     max:500,
-          //     min:50,
-          //     precision:50
-          //   },
-          //   minRows: 0,
-          //   maxRows: 3,
-          //   row:true,
-          // },
+          {
+            label: "考试人数",
+            prop: "number",
+            type: 'number',
+            span: 12,
+            precision:0,
+            step:50,
+            mock:{
+              type:'number',
+              max:1000,
+              min:0,
+              precision:0
+            },
+            rules: [
+              {
+                required: true,
+                message: "请输入考试人数",
+                trigger: "blur",
+              },
+            ],
+            minRows: 0,
+            maxRows: 1000,
+            value:50,
+          },
+          {
+            label: "序号开始",
+            prop: "serialStart",
+            span: 6,
+            value:1,
+            mock:{
+              type:'number',
+              max:1000,
+              min:1,
+              precision:0
+            },
+            minRows: 1,
+            maxRows: 1000,
+            type:"number",
+            rules: [
+              {
+                required: true,
+                message: "请输入序号",
+                trigger: "blur",
+              },
+            ],
+          },
+          {
+            label: "序号结束",
+            prop: "serialEnd",
+            span: 6,
+            value:50,
+            mock:{
+              type:'number',
+              max:1000,
+              min:1,
+              precision:0
+            },
+            minRows: 1,
+            maxRows: 1000,
+            type:"number",
+            rules: [
+              {
+                required: true,
+                message: "请输入序号",
+                trigger: "blur",
+              },
+            ],
+          },
           {
             label: "考试时间",
             prop: "startTime",
@@ -191,7 +247,34 @@
                 trigger: "blur",
               },
             ],
-            span: 24,
+            span: 12,
+          },
+          {
+            label: "截止时间",
+            prop: "endTime",
+            type: "datetime",
+            format: "yyyy-MM-dd HH:mm",
+            valueFormat: "yyyy-MM-dd HH:mm",
+            // 表单新增时是否禁止
+            addDisabled: false,
+            // 表单新增时是否可见
+            addDisplay: true,
+            // 表单新增时是否为查看模式
+            addDetail: false,
+            // 表单编辑时是否禁止
+            editDisabled: false,
+            // 表单编辑时是否可见
+            editDisplay: true,
+            // 表单编辑时是否为查看模式
+            editDetail: false,
+            rules: [
+              {
+                required: true,
+                message: "请选择考试时间",
+                trigger: "blur",
+              },
+            ],
+            span: 12,
           },
         ],
       },
@@ -239,7 +322,7 @@
         labelWidth: "120",
         menuWidth: 200,
         align: "center",
-        selection: true,
+        selection: false,
         column: column,
         delBtn: false,
         editBtn: false,
@@ -264,6 +347,11 @@
         editBtn: this.vaildData(this.permission.notice_edit, false),
       };
     },
+   
+  },
+  created(){
+    this.search['cancel'] = 1;
+    this.search['auditStatus'] = 4;
   },
   methods: {
     //准考证查看
@@ -276,15 +364,12 @@
       });
     },
     sizeChange(val) {
-      this.page1.currentPage = 1;
-      this.page1.pageSize = val;
+      this.page.pageSize = val;
       this.getData();
-      //   this.$message.success("行数" + val);
     },
     currentChange(val) {
-      this.page1.currentPage = val;
+      this.page.currentPage = val;
       this.getData();
-      //   this.$message.success("页码" + val);
     },
     rowSave(form, done, loading) {
       var that = this;
@@ -326,8 +411,6 @@
       this.onLoad(this.page);
     },
     rowUpdate(row, index, done, loading) {
-      // console.log(row);
-
       update(row).then(
         () => {
           this.onLoad(this.page);
@@ -437,18 +520,41 @@
     },
     onLoad(page, params = {}) {
       this.loading = true;
-      getdata(
-        page.currentPage,
-        page.pageSize,
-        Object.assign(params, this.query)
-      ).then((res) => {
-        // console.log(res);
-        const data = res.data.data;
-        this.page.total = data.total;
-        this.data = data.records;
-        console.log(this.data);
-        this.loading = false;
-      });
+      //判断角色,如果是保安公司管理员或保安,只能查看当前公司的考试成绩
+      var that = this;
+      //获取当前登录人员的角色信息
+      var roleIds = this.userInfo.role_id.split(",");
+      params = this.search;
+      roleIds.forEach((roleId) => {
+        getRoleDetail(roleId).then((res) => {
+            var roleAlias = res.data.data.roleAlias;
+            if (
+              roleAlias == "保安公司管理员" ||
+              roleAlias == "保安"
+            ) {
+              //如果是保安公司管理员
+              params["deptId"] = that.userInfo.dept_id;
+            }
+            if (
+              roleAlias == "培训公司管理员"
+            ) {
+              //如果是培训公司管理员
+              params["trainingUnitId"] = that.userInfo.dept_id;
+            }
+            getdata(
+              page.currentPage,
+              page.pageSize,
+              Object.assign(params, this.query)
+            ).then((res) => {
+              // console.log(res);
+              const data = res.data.data;
+              this.page.total = data.total;
+              this.data = data.records;
+              console.log(this.data);
+              this.loading = false;
+            });
+        })
+      })
     },
     handleImport() {
       this.excelBox = true;
@@ -474,19 +580,37 @@
     //生成考试
     submitExamApply(row, done, loading) {
       var that = this;
-      var startTime = row.startTime + ":00";
-      // var endTime = row.examTime[1];
-      // var examTime = JSON.stringify(row.examTime);
-      // console.log(this.ids,111);
-      addExam(this.ids, null, startTime, null).then(
+      row.startTime = row.startTime + ":00";
+      row.endTime = row.endTime + ":00";
+      if(row.number!=((row.serialEnd-row.serialStart)+1)){
+          this.$message({
+            type: "error",
+            message: "考试人数与序号不匹配!",
+          });
+         done();
+         return;
+      }
+
+      var s = new Date(row.startTime);
+      var e = new Date(row.endTime);
+      if(s>e){
+        this.$message({
+            type: "error",
+            message: "截止时间不能早于考试考试开始时间!",
+          });
+         done();
+         return;
+      }
+      
+      addExam(Object.assign(row, this.search)).then(
         () => {
           this.onLoad(this.page);
-          this.$message({
-            type: "success",
-            message: "操作成功!",
-          });
           that.$refs.formExamApply.resetFields();
           that.dialogExamFormVisible = false;
+          this.$message({
+            type: "success",
+            message: "操作成功",
+          });
           done();
         },
         (error) => {
@@ -499,14 +623,6 @@
     closeDialog() {
       this.$refs.formExamApply.resetFields();
     },
-  },
-  mounted() {
-    // this.Ourdata = data;
-    // this.getData();
-    // this.onLoad(this.page);
-    // var dept_id = JSON.parse(
-    //   window.localStorage.getItem("saber-userInfo")
-    // ).content.dept_id;
   },
 };
 </script>
diff --git a/src/views/zc/zc.vue b/src/views/zc/zc.vue
new file mode 100644
index 0000000..1ff5804
--- /dev/null
+++ b/src/views/zc/zc.vue
@@ -0,0 +1,295 @@
+<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.zc_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+      </template>
+    <template slot-scope="{row}" slot="type">
+        <el-tag>{{row.type==='0'?'未审核':row.type==='1'?'审核通过':'审核未通过'}}</el-tag>
+      </template>
+
+      <template slot-scope="{row}"
+                slot="roleName">
+        <el-tag>{{row.roleName}}</el-tag>
+      </template>
+      <template slot-scope="scope" slot="menu">
+        <el-button icon="el-icon-check" size="small"  @click.stop="handleEdit(scope.row,scope.index)">审核</el-button>
+      </template>
+    </avue-crud>
+
+
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove} from "@/api/zc/zc";
+  import {getRoleTree} from "@/api/system/role";
+  import {mapGetters} from "vuex";
+
+  export default {
+    data() {
+      return {
+        form: {},
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        selectionList: [],
+        option: {
+          height:'auto',
+          calcHeight: 54,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 4,
+          border: true,
+          index: true,
+          viewBtn: true,
+          selection: true,
+          headerAlign: 'center',
+          align: 'center',
+          dialogClickModal: false,
+          column: [
+            {
+              label: "账号",
+              searchSpan:4,
+              display: false,
+              search: true,
+              disabled:true,
+              prop: "username",
+            },
+            {
+              label: "密码",
+              hide: true,
+              editDisplay: false,
+              viewDisplay: false,
+              prop: "password",
+            },
+            {
+              label: "姓名",
+              display: false,
+              search: true,
+              searchSpan:4,
+              disabled:true,
+              prop: "sname",
+            },
+            {
+              label: "身份证号",
+              disabled:true,
+              search: true,
+              display: false,
+              prop: "cardid",
+            },
+            {
+              label: "部门",
+              editDisplay: false,
+              prop: "deptName",
+            },
+            {
+              label: "角色",
+              prop: "parentId",
+              hide: true,
+              dicData: [],
+              type: "tree",
+              props: {
+                label: "title"
+              },
+            },
+            {
+              label: "审核状态",
+              prop: "type",
+              search: true,
+              slot: true,
+              searchSpan:4,
+              type: "select",
+              dicData: [
+                {
+                  label: "未审核",
+                  value: "0"
+                },
+                {
+                  label: "审核通过",
+                  value: "1"
+                },
+                {
+                  label: "审核不通过",
+                  value: "2"
+                }
+
+              ],
+            }
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+         addBtn: this.vaildData(this.permission.zc_add, false),
+          viewBtn: this.vaildData(this.permission.zc_view, true),
+          delBtn: this.vaildData(this.permission.zc_delete, false),
+          editBtn: this.vaildData(this.permission.zc_edit, false)
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      initData(){
+        getRoleTree().then(res => {
+          const column = this.findObject(this.option.column, "parentId");
+          column.dicData = res.data.data;
+        });
+      },
+      handleEdit (row, index) {
+        this.initData();
+        this.$refs.crud.rowEdit(row, index);
+      },
+      rowSave(row, done, loading) {
+        add(row).then(() => {
+          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>

--
Gitblit v1.9.3