From 21c7375b7b38ebf2c8a2ca8fbf6fe9fb4f28250f Mon Sep 17 00:00:00 2001
From: Administrator <admin>
Date: Wed, 12 Jan 2022 10:59:40 +0800
Subject: [PATCH] 新增公司注册机公司注册审核

---
 src/page/login/index.vue                  |   10 
 src/api/registerUnit/registerUnit.js      |   76 +++
 src/views/securityUnit/localCompany.vue   |    2 
 src/api/jurisdiction/jurisdiction.js      |   21 +
 src/views/securityGuard/securityGuard.vue |   12 
 src/api/resource/oss.js                   |   84 ++--
 src/page/login/codelogin.vue              |  522 ++++++++++++++++++++----
 src/views/registerUnit/registerUnit.vue   |  494 +++++++++++++++++++++++
 8 files changed, 1,074 insertions(+), 147 deletions(-)

diff --git a/src/api/jurisdiction/jurisdiction.js b/src/api/jurisdiction/jurisdiction.js
new file mode 100644
index 0000000..48504c9
--- /dev/null
+++ b/src/api/jurisdiction/jurisdiction.js
@@ -0,0 +1,21 @@
+import request from '@/router/axios';
+
+// export const getList = (current, size, params) => {
+//     return request({
+//         url: '/api/accreditationRecords/page',
+//         method: 'get',
+//         params: {
+//             current,
+//             size,
+//             ...params
+//         }
+//     })
+// }
+
+export const getJurisdictionTree = () => {
+    return request({
+        url: '/api/jurisdiction/lazy-trees',
+        method: 'get',
+        params: {}
+    })
+}
\ No newline at end of file
diff --git a/src/api/registerUnit/registerUnit.js b/src/api/registerUnit/registerUnit.js
new file mode 100644
index 0000000..c2863dd
--- /dev/null
+++ b/src/api/registerUnit/registerUnit.js
@@ -0,0 +1,76 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+    return request({
+        url: '/api/registerUnit/page',
+        method: 'get',
+        params: {
+            current,
+            size,
+            ...params
+        }
+    })
+}
+
+export const getDetail = (id) => {
+    return request({
+        url: '/api/registerUnit/detail',
+        method: 'get',
+        params: {
+            id
+        }
+    })
+}
+
+
+export const remove = (ids) => {
+    return request({
+        url: '/api/registerUnit/remove',
+        method: 'post',
+        params: {
+            ids,
+        }
+    })
+}
+
+export const submit = (row) => {
+    return request({
+        url: '/api/registerUnit/submit',
+        method: 'post',
+        data: row
+    })
+}
+
+export const add = (row) => {
+    return request({
+        url: '/api/registerUnit/save',
+        method: 'post',
+        data: row
+    })
+}
+
+export const update = (row) => {
+    return request({
+        url: '/api/registerUnit/update',
+        method: 'post',
+        data: row
+    })
+}
+
+
+export const audit = (row) => {
+    return request({
+        url: '/api/registerUnit/audit',
+        method: 'post',
+        data: row
+    })
+}
+
+
+export const batchAudit = (row) => {
+    return request({
+        url: '/api/registerUnit/batchAudit',
+        method: 'post',
+        data: row
+    })
+}
\ No newline at end of file
diff --git a/src/api/resource/oss.js b/src/api/resource/oss.js
index 0b8acfa..664bc9a 100644
--- a/src/api/resource/oss.js
+++ b/src/api/resource/oss.js
@@ -1,59 +1,59 @@
 import request from '@/router/axios';
 
 export const getList = (current, size, params) => {
-  return request({
-    url: '/api/blade-resource/oss/list',
-    method: 'get',
-    params: {
-      ...params,
-      current,
-      size,
-    }
-  })
+    return request({
+        url: '/api/blade-resource/oss/list',
+        method: 'get',
+        params: {
+            ...params,
+            current,
+            size,
+        }
+    })
 }
 
 export const getDetail = (id) => {
-  return request({
-    url: '/api/blade-resource/oss/detail',
-    method: 'get',
-    params: {
-      id
-    }
-  })
+    return request({
+        url: '/api/blade-resource/oss/detail',
+        method: 'get',
+        params: {
+            id
+        }
+    })
 }
 
 export const remove = (ids) => {
-  return request({
-    url: '/api/blade-resource/oss/remove',
-    method: 'post',
-    params: {
-      ids,
-    }
-  })
+    return request({
+        url: '/api/blade-resource/oss/remove',
+        method: 'post',
+        params: {
+            ids,
+        }
+    })
 }
 
 export const add = (row) => {
-  return request({
-    url: '/api/blade-resource/oss/submit',
-    method: 'post',
-    data: row
-  })
+    return request({
+        url: '/api/blade-resource/oss/submit',
+        method: 'post',
+        data: row
+    })
 }
 
 export const update = (row) => {
-  return request({
-    url: '/api/blade-resource/oss/submit',
-    method: 'post',
-    data: row
-  })
+    return request({
+        url: '/api/blade-resource/oss/submit',
+        method: 'post',
+        data: row
+    })
 }
 
-export const enable = (id) => {
-  return request({
-    url: '/api/blade-resource/oss/enable',
-    method: 'post',
-    params: {
-      id
-    }
-  })
-}
+
+export const putFile = (data) => {
+    return request({
+        url: '/api/blade-resource/oss/endpoint/put-files',
+        method: 'post',
+        data: data,
+        headers: { 'Content-Type': 'multipart/form-data' }
+    })
+}
\ No newline at end of file
diff --git a/src/page/login/codelogin.vue b/src/page/login/codelogin.vue
index 4db4c1d..0aaef8f 100644
--- a/src/page/login/codelogin.vue
+++ b/src/page/login/codelogin.vue
@@ -1,95 +1,265 @@
 <template>
-  <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')"
+  <div>
+    <avue-tabs :option="option" @change="handleChange"></avue-tabs>
+    <span v-if="type.prop === 'tab1'">
+      <el-form
+        class="login-form"
+        status-icon
+        :rules="loginRules"
+        ref="loginForm"
+        :model="loginForm"
+        label-width="0"
       >
-        <i slot="prefix" class="icon-yonghu" />
-      </el-input>
-    </el-form-item>
-    <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')"
+        <el-form-item prop="username">
+          <el-input
+            size="small"
+            @keyup.enter.native="handleLogin"
+            v-model="loginForm.username"
+            auto-complete="off"
+            :placeholder="$t('login.username')"
+            clearable="true"
+          >
+            <i slot="prefix" class="icon-yonghu" />
+          </el-input>
+        </el-form-item>
+        <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')"
+            clearable="true"
+          >
+            <i slot="prefix" class="icon-mima" />
+          </el-input>
+        </el-form-item>
+        <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')"
+            clearable="true"
+          >
+            <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')"
+            clearable="true"
+          >
+            <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')"
+            clearable="true"
+          >
+            <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>
+    </span>
+    <!-- 企业注册 -->
+    <span v-else-if="type.prop === 'tab2'">
+      <el-form
+        class="login-form"
+        status-icon
+        :rules="unitRules"
+        ref="unitForm"
+        :model="unitForm"
+        label-width="0"
       >
-        <i slot="prefix" class="icon-mima" />
-      </el-input>
-    </el-form-item>
-    <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>
+        <el-form-item prop="deptName">
+          <el-input
+            size="small"
+            @keyup.enter.native="handleUnitRegister"
+            v-model="unitForm.deptName"
+            auto-complete="off"
+            placeholder="企业名称"
+            clearable="true"
+          >
+            <i slot="prefix" class="el-icon-house" />
+          </el-input>
+        </el-form-item>
+        <div style="margin-top: -1.5rem">
+          <i
+            slot="prefix"
+            style="position: relative; top: 1.9rem; left: 0.5rem"
+            class="el-icon-position"
+          />
+          <div style="position: relative">
+            <el-form-item prop="jurisdiction">
+              <avue-input-tree
+                :props="props"
+                :parent="false"
+                :defaultExpandedKeys="defaultExpandedKeys"
+                v-model="unitForm.jurisdiction"
+                style="width: 35rem !important; padding-left: 0.9rem !important"
+                placeholder="请选择辖区"
+                type="tree"
+                :dic="jurisdictionDic"
+              >
+              </avue-input-tree>
+            </el-form-item>
+          </div>
+        </div>
+        <div style="margin-top: -1.5rem">
+          <i
+            slot="prefix"
+            style="position: relative; top: 1.9rem; left: 0.5rem"
+            class="el-icon-wallet"
+          />
+          <div style="position: relative">
+            <el-form-item prop="stats">
+              <avue-select
+                default-expand-all
+                :props="statsProps"
+                v-model="unitForm.stats"
+                style="width: 35rem !important; padding-left: 0.9rem !important"
+                placeholder="请选择企业属性"
+                type="tree"
+                :dic="statsDic"
+              >
+              </avue-select>
+            </el-form-item>
+          </div>
+        </div>
+        <el-form-item prop="linkman">
+          <el-input
+            size="small"
+            @keyup.enter.native="handleUnitRegister"
+            v-model="unitForm.linkman"
+            auto-complete="off"
+            placeholder="联系人"
+            clearable="true"
+          >
+            <i slot="prefix" class="el-icon-user" />
+          </el-input>
+        </el-form-item>
+        <el-form-item prop="phone">
+          <el-input
+            size="small"
+            v-model="unitForm.phone"
+            auto-complete="off"
+            placeholder="联系人电话"
+            clearable="true"
+          >
+            <i slot="prefix" class="icon-shouji" />
+          </el-input>
+        </el-form-item>
+        <el-form-item prop="address">
+          <el-input
+            size="small"
+            v-model="unitForm.address"
+            auto-complete="off"
+            placeholder="企业注册地址"
+            clearable="true"
+          >
+            <i slot="prefix" class="el-icon-map-location" />
+          </el-input>
+        </el-form-item>
+        <el-form-item prop="unit">
+          <el-input
+            size="small"
+            v-model="unitForm.unit"
+            auto-complete="off"
+            placeholder="登记机关"
+            clearable="true"
+          >
+            <i slot="prefix" class="el-icon-office-building" />
+          </el-input>
+        </el-form-item>
+        <div style="margin-top: -1.5rem">
+          <i
+            slot="prefix"
+            style="position: relative; top: 1.9rem; left: 0.5rem"
+            class="el-icon-picture-outline"
+          />
+          <div style="position: relative; left: 3rem; top: 1rem">
+            <el-form-item prop="businessLicense">
+              <i slot="prefix" class="el-icon-picture-outline" />
+              <el-upload
+                class="avatar-uploader"
+                action=""
+                :show-file-list="false"
+                :on-success="handleAvatarSuccess"
+                :before-upload="beforeAvatarUpload"
+                :http-request="httpRequest"
+                placeholder="营业执照"
+              >
+                <img v-if="imageUrl" :src="imageUrl" class="avatar" />
+                <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+                <div class="el-upload__tip" slot="tip">
+                  请上传营业执照,只能上传jpg/png文件,且不超过2MB
+                </div>
+              </el-upload>
+            </el-form-item>
+          </div>
+        </div>
+        <el-form-item class="z-login-submit-prv">
+          <el-button
+            size="small"
+            type="primary"
+            @click.native.prevent="handleUnitRegister"
+            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>
+    </span>
+  </div>
 </template>
 
 <script>
-import { isvalidatemobile } from "@/util/validate";
 import { inster } from "@/api/zc/zc";
-import { ss, rs } from "@/api/system/dept";
+import { add } from "@/api/registerUnit/registerUnit";
+import { ss } from "@/api/system/dept";
+import { getDictionary } from "@/api/system/dictbiz";
+import { getJurisdictionTree } from "@/api/jurisdiction/jurisdiction";
+import { putFile } from "@/api/resource/oss";
 import { mapGetters } from "vuex";
 
 export default {
@@ -126,11 +296,52 @@
       }
     };
     return {
+      defaultExpandedKeys: [],
+      imageUrl: "",
+      props: {
+        label: "title",
+      },
+      // statsProps: {
+      //   label: "dictValue",
+      //   value: "dictKey",
+      // },
       msgText: "",
       msgTime: "",
       dic: [],
+      jurisdictionDic: [],
+      statsDic: [
+        {
+          label:"本市保安公司",
+          value:"2"
+        },
+        {
+          label:"自招保安单位",
+          value:"0"
+        },
+        {
+          label:"跨区域保安公司",
+          value:"4"
+        },
+        {
+          label:"保安培训学校",
+          value:"1"
+        }
+      ],
       dicr: [],
       msgKey: false,
+      type: {},
+      option: {
+        column: [
+          {
+            label: "个人注册",
+            prop: "tab1",
+          },
+          {
+            label: "企业注册",
+            prop: "tab2",
+          },
+        ],
+      },
       loginForm: {
         cardid: "",
         username: "",
@@ -139,6 +350,16 @@
         deptid: "",
         roleid: "",
         password2: "",
+      },
+      unitForm: {
+        deptName: "",
+        stats: "",
+        jurisdiction: "",
+        linkman: "",
+        phone: "",
+        address: "",
+        unit: "",
+        businessLicense: "",
       },
       value: "",
       options: [],
@@ -154,14 +375,33 @@
           { required: true, message: "请输入用户名", trigger: "blur" },
         ],
       },
+      unitRules: {
+        deptName: [
+          { required: true, message: "请输入企业名称", trigger: "blur" },
+        ],
+        linkman: [{ required: true, message: "请输入联系人", trigger: "blur" }],
+        phone: [{ required: true, message: "请输入联系电话", trigger: "blur" }],
+        address: [
+          { required: true, message: "请输入企业注册地址", trigger: "blur" },
+        ],
+        unit: [{ required: true, message: "请输入登记机关", trigger: "blur" }],
+        jurisdiction: [
+          { required: true, message: "请选择辖区", trigger: "blur" },
+        ],
+        stats: [
+          { required: true, message: "请选择企业属性", trigger: "blur" },
+        ],
+      },
       passwordType: "password",
       passwordTypes: "password2",
     };
   },
   created() {
+    this.type = this.option.column[0];
     this.msgText = this.config.MSGINIT;
     this.msgTime = this.config.MSGTIME;
-    // defaultFlag
+    this.getJurisdictionTree();
+    // this.getDictionary();
   },
   mounted() {
     var that = this;
@@ -179,11 +419,71 @@
       };
     },
   },
-  props: [],
   methods: {
+    //图片上传
+    beforeAvatarUpload(file) {
+      var isJPG = true;
+      const picType = file.type;
+      const isLt2M = file.size / 1024 / 1024 < 2;
+
+      if (
+        picType != "image/jpeg" &&
+        picType != "image/jpg" &&
+        picType != "image/png"
+      ) {
+        isJPG = true;
+        this.$message.error("必须时图片格式!");
+      }
+      if (!isLt2M) {
+        this.$message.error("头像图片不能大于 2MB!");
+      }
+      return picType && isLt2M;
+    },
+    //自定义上传
+    httpRequest(opt) {
+      var that = this;
+      const file = opt.file;
+      // 根据后台需求数据格式
+      const form = new FormData();
+      // 文件对象
+      form.append("file", file);
+      putFile(form).then((res) => {
+        that.imageUrl = res.data.data.url;
+      });
+    },
+    //注册 tag 切换
+    handleChange(column) {
+      this.type = column;
+      var height = "500px";
+      if (column.prop == "tab2") {
+        height = "800px";
+      }
+      this.$emit("height", height);
+    },
+    //获取辖区数据
+    getJurisdictionTree() {
+      var that = this;
+      getJurisdictionTree().then((res) => {
+        that.jurisdictionDic = res.data.data;
+        that.defaultExpandedKeys = [];
+        res.data.data.forEach((item) => {
+          that.defaultExpandedKeys.push(item.id);
+        });
+      });
+    },
+    //获取企业属性数据
+    getDictionary() {
+      var that = this;
+      var data = {
+        code: "stats",
+      };
+      getDictionary(data).then((res) => {
+        // console.log(res.data.data, 111111);
+        that.statsDic = res.data.data;
+      });
+    },
     ergodicData(val) {
       var arr = [];
-
       val.forEach((item, index) => {
         arr.push({
           label: item.title,
@@ -260,7 +560,6 @@
       var z = document.querySelector(".z");
       z.style.display = "none";
       this.clearValidate("loginForm");
-      this.clearValidate("loginForm");
     },
     gb() {
       this.loginForm.cardid = "";
@@ -299,12 +598,31 @@
         ? (this.passwordType = "password2")
         : (this.passwordType = "");
     },
+    //个人注册提交
     handleLogin() {
       this.$refs.loginForm.validate((valid) => {
         if (valid) {
           this.refreshCode(this.loginForm);
-          // this.message("dahsiofhiusa");
           return Promise.reject(new Error("注册成功,待审核"));
+        }
+      });
+    },
+    //公司注册提交
+    handleUnitRegister() {
+      var that = this;
+      this.$refs.unitForm.validate((valid) => {
+        if (valid) {
+          this.unitForm.businessLicense = this.imageUrl;
+          //提交
+          add(this.unitForm).then((res) => {
+            //恢复表单默认值
+            that.$refs["unitForm"].resetFields();
+            that.imageUrl = "";
+            this.$message({
+              type: "success",
+              message: "注冊成功,待审核!",
+            });
+          });
         }
       });
     },
@@ -353,4 +671,28 @@
   -webkit-transition: 0.25s;
   transition: 0.25s;
 }
+
+.avatar-uploader .el-upload {
+  border: 1px dashed #d9d9d9;
+  border-radius: 6px;
+  cursor: pointer;
+  position: relative;
+  overflow: hidden;
+}
+.avatar-uploader .el-upload:hover {
+  border-color: #409eff;
+}
+.avatar-uploader-icon {
+  font-size: 28px;
+  color: #8c939d;
+  width: 178px;
+  height: 178px;
+  line-height: 178px;
+  text-align: center;
+}
+.avatar {
+  width: 178px;
+  height: 178px;
+  display: block;
+}
 </style>
diff --git a/src/page/login/index.vue b/src/page/login/index.vue
index c4c7838..6a93457 100644
--- a/src/page/login/index.vue
+++ b/src/page/login/index.vue
@@ -33,8 +33,8 @@
         </div>
       </div>
     </div>
-    <div class="z" v-show="activeName == 'code'">
-      <codeLogin></codeLogin>
+    <div class="z" v-show="activeName == 'code'" :style="{height:height}">
+      <codeLogin v-on:height='setHeight'></codeLogin>
     </div>
   </div>
 </template>
@@ -70,6 +70,7 @@
         state: "",
         link: "",
       },
+      height:"500px"
     };
   },
   watch: {
@@ -90,6 +91,11 @@
   },
   props: [],
   methods: {
+    //获取高度
+    setHeight(height){
+      // console.log(height,8888);
+      this.height = height;
+    },
     getTime() {
       setInterval(() => {
         this.time = dateFormat(new Date());
diff --git a/src/views/registerUnit/registerUnit.vue b/src/views/registerUnit/registerUnit.vue
new file mode 100644
index 0000000..1262e52
--- /dev/null
+++ b/src/views/registerUnit/registerUnit.vue
@@ -0,0 +1,494 @@
+<template>
+  <basic-container
+    :class="[$store.state.control.windowWidth >= 1024 ? 'oneRowSearch' : '']"
+  >
+    <avue-crud
+      :option="option"
+      :table-loading="loading"
+      :data="data"
+      :page.sync="page"
+      :search.sync="search"
+      :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="auditStatus">
+        <el-tag>{{
+          row.auditStatus === "1"
+            ? "待审核"
+            : row.auditStatus === "2"
+            ? "审核通过"
+            : "审核不通过"
+        }}</el-tag>
+      </template>
+
+      <template slot-scope="{ row }" slot="roleName">
+        <el-tag>{{ row.roleName }}</el-tag>
+      </template>
+      <template slot-scope="{ row,size,type }" slot="menu">
+        <el-button
+          icon="el-icon-check"
+          :type="type"
+          :size="size"
+          @click.stop="handleAudit(row)"
+          >审核</el-button
+        >
+      </template>
+    </avue-crud>
+    <el-dialog
+      title="审核"
+      :visible.sync="dialogFormVisible"
+      modal-append-to-body="false"
+      append-to-body="true"
+      :close-on-click-model="true"
+    >
+      <avue-form
+        ref="formAudit"
+        v-model="Audit"
+        :option="optionAudit"
+        @reset-change="emptytChange"
+        @submit="submit"
+      ></avue-form>
+    </el-dialog>
+  </basic-container>
+</template>
+
+<script>
+import { getList, getDetail, add, update, remove,audit } from "@/api/registerUnit/registerUnit";
+import { getRoleTree } from "@/api/system/role";
+import { mapGetters } from "vuex";
+
+export default {
+  data() {
+    return {
+      form: {},
+      query: {},
+      search: {},
+      loading: true,
+      page: {
+        pageSize: 10,
+        currentPage: 1,
+        total: 0,
+        ...this.$store.state.control.changePageSize,
+      },
+      selectionList: [],
+      Audit: {},
+      dialogFormVisible: false,
+      optionAudit: {
+        height: "auto",
+        calcHeight: 30,
+        dialogWidth: 1000,
+        tip: false,
+        searchShow: true,
+        searchMenuSpan: 6,
+        border: true,
+        index: true,
+        stripe: true,
+        viewBtn: false,
+        addBtn: false,
+        editBtn: false,
+        selection: true,
+        excelBtn: false,
+        dialogClickModal: false,
+        column: [
+          {
+            label: "审核状态",
+            search: true,
+            searchSpan: 5,
+            span: 24,
+            prop: "auditStatus",
+            slot: true,
+            editDisplay: false,
+            addDisplay: false,
+            type: "select",
+            rules: [
+              {
+                required: true,
+                message: "请选择审核类型",
+                trigger: "blur",
+              },
+            ],
+            dicData: [
+              {
+                label: "待审核",
+                value: "1",
+              },
+              {
+                label: "审核通过",
+                value: "2",
+              },
+              {
+                label: "审核不通过",
+                value: "3",
+              },
+            ],
+          },
+          {
+            label: "审核明细",
+            span: 24,
+            type: "textarea",
+            prop: "auditDetail",
+          },
+        ],
+      },
+      option: {
+        height: "auto",
+        calcHeight: 54,
+        tip: false,
+        searchShow: true,
+        searchMenuSpan: 4,
+        border: true,
+        index: true,
+        viewBtn: false,
+        // selection: true,
+        headerAlign: "center",
+        menuWidth:150,
+        align: "center",
+        dialogClickModal: false,
+        ...this.$store.state.control.clearOtherBut,
+        column: [
+          {
+            label: "注册企业名称",
+            searchSpan: 5,
+            display: false,
+            searchLabelWidth: 110,
+            search: true,
+            disabled: true,
+            prop: "deptName",
+            minWidth:100,
+            overHidden:true,
+          },
+          {
+            label: "联系人",
+            display: false,
+            width:80,
+            search: true,
+            searchSpan: 4,
+            disabled: true,
+            prop: "linkman",
+          },
+          {
+            label: "联系电话",
+            width:100,
+            disabled: true,
+            display: false,
+            prop: "phone",
+          },
+          {
+            label: "企业属性",
+            prop: "stats",
+            type:"select",
+            width:100,
+            dicData:[
+              {
+                label:"本市保安公司",
+                value:"2"
+              },
+              {
+                label:"自招保安单位",
+                value:"0"
+              },
+              {
+                label:"跨区域保安公司",
+                value:"4"
+              },
+              {
+                label:"保安培训学校",
+                value:"1"
+              }
+            ]
+          },
+          {
+            label: "所属辖区",
+            prop: "jurisdictionName",
+            width:100,
+          },
+          {
+            label: "企业注册地址",
+            prop: "address",
+          },
+          {
+            label: "登记机关",
+            prop: "unit",
+          },
+          {
+            label: "申请时间",
+            prop: "createTime",
+            searchLabelWidth: 90,
+            width: 140,
+            addDisplay: false,
+            editDisplay: false,
+          },
+          {
+            label: "营业执照",
+            prop: "businessLicense",
+            type: "upload",
+            width:100,
+            listType: "picture-img",
+            addDisplay: false,
+            editDisplay: false,
+          },
+          {
+            label: "审核状态",
+            prop: "auditStatus",
+            search: true,
+            slot: true,
+            searchSpan: 4,
+            width:100,
+            type: "select",
+            dicData: [
+              {
+                label: "全部",
+                value: "4",
+              },
+              {
+                label: "待审核",
+                value: "1",
+              },
+              {
+                label: "审核通过",
+                value: "2",
+              },
+              {
+                label: "审核不通过",
+                value: "3",
+              },
+            ],
+          },
+          {
+            label: "审核明细",
+            span: 24,
+            type: "textarea",
+            prop: "auditDetail",
+            width:100,
+            overHidden:true,
+          },
+        ],
+      },
+      data: [],
+    };
+  },
+  computed: {
+    ...mapGetters(["userInfo", "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(",");
+    },
+  },
+  created(){
+    if(this.userInfo.role_name=="公安管理员"){
+      this.search['auditStatus'] = "1";
+    }
+  },
+  methods: {
+    //审核
+    submit(row, done, loading) {
+      const data = {
+        id: row.id,
+        auditStatus: row.auditStatus,
+        auditDetail: row.auditDetail,
+        auditUser: this.userInfo.Id,
+      };
+
+      audit(data).then(
+        () => {
+          this.dialogFormVisible = false;
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!",
+          });
+          done();
+        },
+        (error) => {
+          window.console.log(error);
+          // loading();
+          done();
+        }
+      );
+    },
+    initData(d) {
+      getRoleTree().then((res) => {
+        const column = this.findObject(this.option.column, "parentId");
+        var k = res.data.data;
+        var b = [];
+        if (d == "保安公司管理员") {
+          console.log(k);
+          for (var n in k) {
+            if (k[n].title == "保安" || k[n].title == "保安公司管理员") {
+              b.push(k[n]);
+            }
+          }
+          column.dicData = b;
+        } else {
+          column.dicData = k;
+        }
+      });
+    },
+    //审核
+    handleAudit(row) {
+      this.dialogFormVisible = true;
+      this.Audit = row;
+    },
+    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 = {}) {
+      params = this.search;
+      this.loading = true;
+      if(this.userInfo.role_name=="公安管理员"){
+        params['jurisdiction'] = this.userInfo.jurisdiction;
+      }
+      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>
diff --git a/src/views/securityGuard/securityGuard.vue b/src/views/securityGuard/securityGuard.vue
index 79415c3..5254e69 100644
--- a/src/views/securityGuard/securityGuard.vue
+++ b/src/views/securityGuard/securityGuard.vue
@@ -1059,14 +1059,6 @@
                   },
                 ],
               },
-              // {
-              //   label: "发证日期",
-              //   prop: "paperTime",
-              //   hide: true,
-              //   type: "date",
-              //   format: "yyyy-MM-dd",
-              //   valueFormat: "yyyy-MM-dd",
-              // },
               {
                 label: "保安证书照片",
                 prop: "email",
@@ -1085,10 +1077,6 @@
                 tip: "上传jpg,png格式图片,大小不超过2M",
                 span: 12,
               },
-              // {
-              //     label: "籍贯",
-              //     prop: "nativeplace",
-              // },
               {
                 label: "民族",
                 prop: "nation",
diff --git a/src/views/securityUnit/localCompany.vue b/src/views/securityUnit/localCompany.vue
index 25a8d97..86bfc63 100644
--- a/src/views/securityUnit/localCompany.vue
+++ b/src/views/securityUnit/localCompany.vue
@@ -204,7 +204,7 @@
             parent: false,
             labelWidth: 145,
             type: "tree",
-            dicUrl: "/api//jurisdiction/lazy-trees",
+            dicUrl: "/api/jurisdiction/lazy-trees",
             props: {
               label: "title",
               value: "id",

--
Gitblit v1.9.3