保安服务企业管理项目备份
guoshilong
2023-12-20 7becb16bb38cb3284c7f4e3dc2c486dd55812c8a
src/views/securityGuard/securityGuard.vue
@@ -14,220 +14,109 @@
      </div>
    </el-col> -->
    <el-col :span="24">
      <basic-container
        :class="[
          screenSize == 1366 ? 'smallSize' : 'normalSize',
          $store.state.control.windowWidth >= 1024 ? 'tooRowSearch1' : ''
        ]"
      >
      <basic-container :class="[
        screenSize == 1366 ? 'smallSize' : 'normalSize',
        $store.state.control.windowWidth >= 1024 ? 'tooRowSearch1' : ''
      ]">
        <!-- :key="option.height" -->
        <avue-crud
          class="tablesss"
          :option="option"
          :search.sync="search"
          :table-loading="loading"
          :data="data"
          ref="crud"
          v-model="form"
          :permission="permissionList"
          @row-del="rowDel"
          :row-style="rowStyle"
          @row-save="rowSave"
          @row-update="rowUpdate"
          :before-open="beforeOpen"
          :page.sync="page"
          @sort-change="sortChange"
          @search-change="searchChange"
          @search-reset="searchReset"
          @selection-change="selectionChange"
          @current-change="currentChange"
          @size-change="sizeChange"
          @refresh-change="refreshChange"
          @on-load="onLoad"
          :upload-before="uploadBefore"
          :defaults.sync="defaults"
          :before-close="beforeClose"
        >
        <avue-crud class="tablesss" :option="option" :search.sync="search" :table-loading="loading" :data="data"
          ref="crud" v-model="form" :permission="permissionList" @row-del="rowDel" :row-style="rowStyle"
          @row-save="rowSave" @row-update="rowUpdate" :before-open="beforeOpen" :page.sync="page"
          @sort-change="sortChange" @search-change="searchChange" @search-reset="searchReset"
          @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
          @refresh-change="refreshChange" @on-load="onLoad" :upload-before="uploadBefore" :defaults.sync="defaults"
          :before-close="beforeClose">
          <!-- @row-update="rowUpdate" -->
          <template slot="menuLeft">
            <el-button
              type="success"
              size="small"
              plain
              icon="el-icon-upload2"
              v-if="permission.securityGuard_import"
              @click="handleImport1"
              >保安员批量导入
            <el-button type="primary" size="small" plain icon="el-icon-s-check"
                       @click="handleBatchAudit">批量审批
            </el-button>
            <el-button
              type="success"
              size="small"
              plain
              icon="el-icon-upload2"
              v-if="permission.securityGuard_import"
              @click="handleImport2"
              >个人照片批量上传
            <el-button type="success" size="small" plain icon="el-icon-upload2" v-if="permission.securityGuard_import"
              @click="handleImport1">保安员批量导入
            </el-button>
            <el-button
              type="primary"
              style="display: none;"
              size="small"
              plain
              v-if="permission.securityGuard_security_apply"
              icon="el-icon-s-promotion"
              @click="handleSecurityApply"
              >上岗证制证申请
            <el-button type="success" size="small" plain icon="el-icon-upload2" v-if="permission.securityGuard_import"
              @click="handleImport2">个人照片批量上传
            </el-button>
            <el-button
              type="primary"
              style="display: none;"
              size="small"
              plain
              v-if="permission.securityGuard_security_paper_apply"
              icon="el-icon-collection-tag"
              @click="handleSecurityPaperApply"
              >证书制证申请
            <el-button type="success" size="small" plain icon="el-icon-upload2" v-if="permission.securityGuard_import"
              @click="handleImportHealth">健康状况图片(健康证)批量上传
            </el-button>
            <el-button
              type="warning"
              size="small"
              plain
              icon="el-icon-download"
              v-if="permission.export_security_info"
              @click="handleExportSecurityInfo"
              >保安信息导出
            <el-button type="success" size="small" plain icon="el-icon-upload2" v-if="permission.securityGuard_import"
              @click="handleImportNoCriminal">无犯罪记录图片批量上传
            </el-button>
<!--            <el-button type="primary" size="small" plain-->
<!--              v-if="permission.securityGuard_security_apply" icon="el-icon-s-promotion"-->
<!--              @click="handleSecurityApply">上岗证制证申请-->
<!--            </el-button>-->
            <el-button type="primary"  size="small" plain
              v-if="permission.securityGuard_security_paper_apply" icon="el-icon-collection-tag"
              @click="handleSecurityPaperApply">证书制证申请
            </el-button>
            <el-button type="warning" size="small" plain icon="el-icon-download" v-if="permission.export_security_info"
              @click="handleExportSecurityInfo">保安信息导出
            </el-button>
            <el-button
              type="danger"
              size="small"
              plain
              icon="el-icon-delete"
              v-if="permission.securityGuard_delete"
              @click="handleDelete"
              >注 销
            <el-button type="danger" size="small" plain icon="el-icon-delete" v-if="permission.securityGuard_delete"
              @click="handleDelete">注 销
            </el-button>
            <el-button
              type="info"
              style="display: none"
              size="small"
              plain
              v-if="permission.user_role"
              icon="el-icon-user"
              @click="handleGrant"
              >角色配置
            <el-button type="info" style="display: none" size="small" plain v-if="permission.user_role"
              icon="el-icon-user" @click="handleGrant">角色配置
            </el-button>
            <el-button
              type="info"
              style="display: none"
              size="small"
              plain
              v-if="permission.user_reset"
              icon="el-icon-refresh"
              @click="handleReset"
              >密码重置
            <el-button type="info" style="display: none" size="small" plain v-if="permission.user_reset"
              icon="el-icon-refresh" @click="handleReset">密码重置
            </el-button>
            <el-button
              type="info"
              style="display: none"
              size="small"
              plain
              v-if="userInfo.role_name.includes('admin')"
              icon="el-icon-setting"
              @click="handlePlatform"
              >平台配置
            <el-button type="info" style="display: none" size="small" plain v-if="userInfo.role_name.includes('admin')"
              icon="el-icon-setting" @click="handlePlatform">平台配置
            </el-button>
            <el-button
              type="success"
              style="display: none"
              size="small"
              plain
              v-if="userInfo.role_name.includes('admin')"
              icon="el-icon-upload2"
              @click="handleImport"
              >导入
            <el-button type="success" style="display: none" size="small" plain v-if="userInfo.role_name.includes('admin')"
              icon="el-icon-upload2" @click="handleImport">导入
            </el-button>
            <el-button
              type="warning"
              style="display: none"
              size="small"
              plain
              v-if="userInfo.role_name.includes('admin')"
              icon="el-icon-download"
              @click="handleExport"
              >导出
            <el-button type="warning" style="display: none" size="small" plain v-if="userInfo.role_name.includes('admin')"
              icon="el-icon-download" @click="handleExport">导出
            </el-button>
          </template>
          <template slot-scope="{ type, size, row }" slot="menu">
            <el-tooltip
              placement="bottom"
              effect="light"
              transition="el-collapse-transition"
              popper-class="caozuolanpopper"
            >
            <el-tooltip placement="bottom" effect="light" transition="el-collapse-transition"
              popper-class="caozuolanpopper">
              <div slot="content">
                <el-button
                  icon="el-icon-view"
                  :size="size"
                  :type="type"
                  v-if="permission.securityGuard_view"
                  @click.stop="rowClick(row)"
                  >查看
                <el-button icon="el-icon-view" :size="size" :type="type" v-if="permission.securityGuard_view"
                  @click.stop="rowClick(row)">查看
                </el-button>
                <br v-if="permission.securityGuard_view" />
                <el-button
                  icon="el-icon-scissors"
                  :size="size"
                  :type="type"
                  v-if="permission.securityGuard_delete && row.status != 2"
                  @click="$refs.crud.rowEdit(row, index)"
                  >编辑
                <el-button icon="el-icon-scissors" :size="size" :type="type"
                  v-if="permission.securityGuard_delete && row.status != 2" @click="$refs.crud.rowEdit(row, index)">编辑
                </el-button>
                <br v-if="permission.securityGuard_delete && row.status != 2" />
                <el-button
                  icon="el-icon-close"
                  :size="size"
                  :type="type"
                  v-if="permission.securityGuard_delete && row.status != 2"
                  @click="$refs.crud.rowDel(row, index)"
                  >注销
                <el-button icon="el-icon-s-check" :size="size" :type="type"
                           v-if="permission.securityGuard_delete && row.status != 2" @click="handleAudit(row)">审批
                </el-button>
                <br v-if="permission.securityGuard_delete && row.status != 2" />
                <el-button
                  icon="el-icon-circle-close"
                  :size="size"
                  :type="type"
                  v-if="permission.securityGuard_delete && row.status != 2"
                  @click.stop="rowStatus(row)"
                  >离职
                <el-button icon="el-icon-close" :size="size" :type="type"
                  v-if="permission.securityGuard_delete && row.status != 2" @click="$refs.crud.rowDel(row, index)">注销
                </el-button>
                <br v-if="permission.securityGuard_delete && row.status != 2" />
                <el-button
                  icon="el-icon-search"
                  :size="size"
                  :type="type"
                  v-if="row.status == 2"
                  @click.stop="rowDellook(row)"
                  >离职查询
                <el-button icon="el-icon-circle-close" :size="size" :type="type"
                  v-if="permission.securityGuard_delete && row.status != 2" @click.stop="rowStatus(row)">离职
                </el-button>
                <br v-if="permission.securityGuard_delete && row.status != 2" />
                <el-button icon="el-icon-search" :size="size" :type="type" v-if="row.status == 2"
                  @click.stop="rowDellook(row)">离职查询
                </el-button>
                <br v-if="row.status == 2" />
                <el-button
                  icon="el-icon-user"
                  :size="size"
                  :type="type"
                  v-if="permission.securityGuard_check"
                  @click.stop="rowCheck(row)"
                  >异常
                <el-button icon="el-icon-user" :size="size" :type="type" v-if="permission.securityGuard_check"
                  @click.stop="rowCheck(row)">异常
                </el-button>
                <br v-if="permission.securityGuard_check" />
                <el-button
                  icon="el-icon-money"
                  :size="size"
                  :type="type"
                  v-if="permission.securityGuard_check_apply"
                  @click.stop="rowCheckApply(row)"
                  >证件核实申请
                <el-button icon="el-icon-money" :size="size" :type="type" v-if="permission.securityGuard_check_apply"
                  @click.stop="rowCheckApply(row)">证件核实申请
                </el-button>
                <!-- <br />
                <el-button
@@ -240,8 +129,7 @@
                  >纸质证书制作
                </el-button> -->
              </div>
              <el-button icon="el-icon-s-operation" :size="size" :type="type"
                >操作
              <el-button icon="el-icon-s-operation" :size="size" :type="type">操作
              </el-button>
            </el-tooltip>
@@ -292,11 +180,7 @@
            <el-tag v-if="row.sex == 2">女</el-tag>
          </template>
          <template slot-scope="{ row }" slot="deptId">
            <el-tag
              class="rowClickSelf"
              title="点击查看所属公司情况"
              @click="rowClickSelf(row.deptId)"
              >{{ row.deptName }}
            <el-tag class="rowClickSelf" title="点击查看所属公司情况" @click="rowClickSelf(row.deptId)">{{ row.deptName }}
            </el-tag>
          </template>
          <template slot-scope="{ row }" slot="unitName">
@@ -333,34 +217,14 @@
                zhiwenTitle
              }}</el-button>
              <el-button type="primary" @click="openccc">openccc</el-button>-->
              <iframe
                id="zhiwen"
                ref="zhiwen"
                src="/zhiwenDemo/CID.html"
                frameborder="0"
                width="100%"
                height="100%"
                name="zhiwen"
              ></iframe>
              <iframe id="zhiwen" ref="zhiwen" src="/zhiwenDemo/CID.html" frameborder="0" width="100%" height="100%"
                name="zhiwen"></iframe>
            </div>
          </template>
        </avue-crud>
        <el-dialog
          title="用户角色配置"
          append-to-body
          :visible.sync="roleBox"
          width="345px"
        >
          <el-tree
            :data="roleGrantList"
            show-checkbox
            check-strictly
            default-expand-all
            node-key="id"
            ref="treeRole"
            :default-checked-keys="roleTreeObj"
            :props="props"
          >
        <el-dialog title="用户角色配置" append-to-body :visible.sync="roleBox" width="345px">
          <el-tree :data="roleGrantList" show-checkbox check-strictly default-expand-all node-key="id" ref="treeRole"
            :default-checked-keys="roleTreeObj" :props="props">
          </el-tree>
          <span slot="footer" class="dialog-footer">
@@ -368,17 +232,8 @@
            <el-button type="primary" @click="submitRole">确 定</el-button>
          </span>
        </el-dialog>
        <el-dialog
          title="用户数据导入"
          append-to-body
          :visible.sync="excelBox"
          width="555px"
        >
          <avue-form
            :option="excelOption"
            v-model="excelForm"
            :upload-after="uploadAfter"
          >
        <el-dialog title="用户数据导入" append-to-body :visible.sync="excelBox" width="555px">
          <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter">
            <template slot="excelTemplate">
              <el-button type="primary" @click="handleTemplate">
                点击下载<i class="el-icon-download el-icon--right"></i>
@@ -386,29 +241,13 @@
            </template>
          </avue-form>
        </el-dialog>
        <el-dialog
          title="用户平台配置"
          append-to-body
          :visible.sync="platformBox"
        >
          <avue-crud
            :option="platformOption"
            :table-loading="platformLoading"
            :data="platformData"
            ref="platformCrud"
            v-model="platformForm"
            :before-open="platformBeforeOpen"
            :page.sync="platformPage"
            :permission="platformPermissionList"
            @row-update="platformRowUpdate"
            @search-change="platformSearchChange"
            @search-reset="platformSearchReset"
            @selection-change="platformSelectionChange"
            @current-change="platformCurrentChange"
            @size-change="platformSizeChange"
            @refresh-change="platformRefreshChange"
            @on-load="platformOnLoad"
          >
        <el-dialog title="用户平台配置" append-to-body :visible.sync="platformBox">
          <avue-crud :option="platformOption" :table-loading="platformLoading" :data="platformData" ref="platformCrud"
            v-model="platformForm" :before-open="platformBeforeOpen" :page.sync="platformPage"
            :permission="platformPermissionList" @row-update="platformRowUpdate" @search-change="platformSearchChange"
            @search-reset="platformSearchReset" @selection-change="platformSelectionChange"
            @current-change="platformCurrentChange" @size-change="platformSizeChange"
            @refresh-change="platformRefreshChange" @on-load="platformOnLoad">
            <template slot-scope="{ row }" slot="tenantName">
              <el-tag>{{ row.tenantName }}</el-tag>
            </template>
@@ -417,17 +256,8 @@
            </template>
          </avue-crud>
        </el-dialog>
        <el-dialog
          title="保安员导入"
          append-to-body
          :visible.sync="excelBox1"
          width="555px"
        >
          <avue-form
            :option="excelOption1"
            v-model="excelForm1"
            :upload-after="uploadAfter1"
          >
        <el-dialog title="保安员导入" append-to-body :visible.sync="excelBox1" width="555px">
          <avue-form :option="excelOption1" v-model="excelForm1" :upload-after="uploadAfter1">
            <template slot="excelTemplate">
              <el-button type="primary" @click="handleTemplate1">
                点击下载<i class="el-icon-download el-icon--right"></i>
@@ -435,38 +265,24 @@
            </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"
          >
        <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>
        <el-dialog
          title="证件核实申请"
          :visible.sync="securityCheckApplyvisible"
          width="width"
          :modal="true"
          :modal-append-to-body="true"
          :append-to-body="true"
          :close-on-click-modal="false"
          :close-on-press-escape="false"
          :before-close="dialogBeforeClose"
        >
        <el-dialog title="健康状况图片(健康证)批量上传" append-to-body :visible.sync="excelBoxHealth" width="555px">
          <avue-form :option="excelOptionHealth" v-model="excelFormHealth" :upload-after="uploadAfterHealth">
          </avue-form>
        </el-dialog>
        <el-dialog title="无犯罪记录图片批量上传" append-to-body :visible.sync="excelBoxNoCriminal" width="555px">
          <avue-form :option="excelOptionNoCriminal" v-model="excelFormNoCriminal" :upload-after="uploadAfterNoCriminal">
          </avue-form>
        </el-dialog>
        <el-dialog title="证件核实申请" :visible.sync="securityCheckApplyvisible" width="width" :modal="true"
          :modal-append-to-body="true" :append-to-body="true" :close-on-click-modal="false" :close-on-press-escape="false"
          :before-close="dialogBeforeClose">
          <div>
            <avue-form
              ref="formSecurityCheckApply"
              :option="optionSecurityCheckApply"
              v-model="formSecurityCheckApply"
              @reset-change="emptytChange"
              @submit="submitSecurityCheckApply"
            >
            <avue-form ref="formSecurityCheckApply" :option="optionSecurityCheckApply" v-model="formSecurityCheckApply"
              @reset-change="emptytChange" @submit="submitSecurityCheckApply">
            </avue-form>
          </div>
        </el-dialog>
@@ -492,12 +308,12 @@
              <div class="security_m_r_o_rightbirthday widt">
                {{
                  certificateObj.cardid
                    ? certificateObj.cardid.slice(6, 10) +
                      "." +
                      certificateObj.cardid.slice(10, 12) +
                      "." +
                      certificateObj.cardid.slice(12, 14)
                    : ""
                  ? certificateObj.cardid.slice(6, 10) +
                  "." +
                  certificateObj.cardid.slice(10, 12) +
                  "." +
                  certificateObj.cardid.slice(12, 14)
                  : ""
                }}
              </div>
              <div class="security_m_r_o_rightaddress security_m_r_o_l_r widt">
@@ -511,24 +327,15 @@
        </div>
      </basic-container>
    </el-col>
    <div
      :class="[
        'downSFZ',
        $store.state.control.windowWidth >= 1024
          ? 'downSFZqudong'
          : 'downSFZqudongS'
      ]"
    >
      <el-checkbox v-model="radio" :disabled="SFZloding"
        >使用身份证设备</el-checkbox
      >
      <el-button
        type="text"
        v-show="haveSEL == 'noDrive' || haveSEL == 'noEquipment'"
        @click="SFZopens"
        :loading="SFZloding"
        >{{ sfzButTitle }}</el-button
      >
    <div :class="[
      'downSFZ',
      $store.state.control.windowWidth >= 1024
        ? 'downSFZqudong'
        : 'downSFZqudongS'
    ]">
      <el-checkbox v-model="radio" :disabled="SFZloding">使用身份证设备</el-checkbox>
      <el-button type="text" v-show="haveSEL == 'noDrive' || haveSEL == 'noEquipment'" @click="SFZopens"
        :loading="SFZloding">{{ sfzButTitle }}</el-button>
      <!-- <div style="font-size: 14px">连接身份证设备失败</div> -->
      <!-- v-show="haveSEL == 'noDrive'" -->
      <!-- href="http://61.131.136.25:2081/zhba/upload/20211201/64d8b76f3aecae93e18d015bbca89aba.rar" -->
@@ -552,7 +359,7 @@
  getUserPractitionersInfo,
  updatePaperTime,
  getzhiwen, //指纹
  checkAccountByUser
  checkAccountByUser, batchAudit
} from "@/api/system/user";
import { securityApply } from "@/api/accreditationRecords/accreditationRecords";
import { add } from "@/api/securityapplyRecord/securityapplyRecord";
@@ -710,44 +517,6 @@
      } else {
        callback(new Error("身份证错误"));
      }
      // console.log(oldy, oldm, oldd, year - oldy, mouth, day);
      // var test =
      //   /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/;
      // if (!test.test(value)) {
      //   callback(new Error("请输入正确身份证号码"));
      // } else {
      //   // //加入校验18岁到60岁的
      //   // oldy = +value.slice(6, 10);
      //   // oldm = +value.slice(10, 12);
      //   // oldd = +value.slice(12, 14);
      //   // ok =
      //   //   year - oldy < 18 || year - oldy > 60
      //   //     ? false
      //   //     : year - oldy == 18
      //   //     ? mouth < oldm
      //   //       ? false
      //   //       : mouth > oldm
      //   //       ? true
      //   //       : day < oldd
      //   //       ? false
      //   //       : true
      //   //     : year - oldy == 60
      //   //     ? mouth < oldm
      //   //       ? true
      //   //       : mouth > oldm
      //   //       ? false
      //   //       : day <= oldd
      //   //       ? false
      //   //       : true
      //   //     : true;
      //   // if (ok) {
      //   callback();
      //   // } else {
      //   //   // callback(new Error("根据国家要求,需在18岁至60岁"));
      //   //   callback(new Error("年龄不符"));
      // }
      // }
    };
    const validatePassPhone = (rule, value, callback) => {
      var test = /^(13[0-9]|14[0-9]|15[0-9]|17[0-9]|18[0-9]|19[0-9])\d{8}$/g;
@@ -757,13 +526,9 @@
        callback();
      }
    };
    // let table = document.getElementsByClassName("tablesss");
    // let heard = table[0].getElementsByClassName("avue-crud__search");
    // let usNum =
    //   this.windowWidth <= 1376 && this.windowHeight <= 778 ? 170 : 332;
    // // that.option.height = +h - (+heard[0].clientHeight + 332);
    // let optionHeight = +this.windowHeight - (+heard[0].clientHeight + +usNum);
    return {
      excelBoxHealth: false,
      excelBoxNoCriminal: false,
      startTimecc: null,
      sort: "",
      type: 2,
@@ -845,6 +610,58 @@
            propsHttp: {
              res: "data"
            },
            data: {
              type: 1
            },
            tip: "请上传 zip 压缩文件,照片文件名以身份证号码命名",
            action: "/api/blade-resource/oss/endpoint/put-file-zip"
          }
        ]
      },
      // 健康状态凭证上传
      excelFormHHealth: {},
      excelOptionHealth: {
        submitBtn: false,
        emptyBtn: false,
        column: [
          {
            label: "文件上传",
            prop: "file",
            type: "upload",
            drag: true,
            loadText: "文件上传中,请稍等",
            span: 24,
            propsHttp: {
              res: "data"
            },
            data: {
              type: 2
            },
            tip: "请上传 zip 压缩文件,照片文件名以身份证号码命名",
            action: "/api/blade-resource/oss/endpoint/put-file-zip"
          }
        ]
      },
      // 无犯罪记录图片
      excelFormNoCriminal: {},
      excelOptionNoCriminal: {
        submitBtn: false,
        emptyBtn: false,
        column: [
          {
            label: "文件上传",
            prop: "file",
            type: "upload",
            drag: true,
            loadText: "文件上传中,请稍等",
            span: 24,
            propsHttp: {
              res: "data"
            },
            //额外的参数
            data: {
              type: 3
            },
            tip: "请上传 zip 压缩文件,照片文件名以身份证号码命名",
            action: "/api/blade-resource/oss/endpoint/put-file-zip"
          }
@@ -890,7 +707,7 @@
      treeOption: {
        nodeKey: "id",
        lazy: true,
        treeLoad: function(node, resolve) {
        treeLoad: function (node, resolve) {
          const parentId = node.level === 0 ? 0 : node.data.id;
          getDeptLazyTree(parentId).then(res => {
            resolve(
@@ -1042,14 +859,11 @@
                label: "企业名称",
                prop: "deptId",
                type: "tree",
                // dicUrl:
                // "/api/blade-system/dept/security_lazy-tree?parentId=1413470343230877697",
                // dicUrl: "/api/blade-system/dept/lazy-tree?parentId=0",
                props: {
                  label: "title",
                  value: "id"
                },
                // disabled: true,
                labelWidth: 120,
                rules: [
                  {
                    required: true,
@@ -1062,6 +876,7 @@
                label: "姓名",
                prop: "realName",
                disabled: false,
                labelWidth: 120,
                rules: [
                  {
                    required: true,
@@ -1075,41 +890,6 @@
                  }
                ]
              }
              // {
              //   label: "登录账号",
              //   prop: "account",
              //   editDisabled: true,
              //   rules: [
              //     {
              //       required: true,
              //       message: "请输入登录账号",
              //       trigger: "blur",
              //     },
              //   ],
              //   // disabled: true,
              // },
              // {
              //   label: "密码",
              //   prop: "password",
              //   type: "password",
              //   hide: true,
              //   editDisplay: false,
              //   viewDisplay: false,
              //   rules: [
              //     { required: true, validator: validatePass, trigger: "blur" },
              //   ],
              // },
              // {
              //   label: "确认密码",
              //   prop: "password2",
              //   type: "password",
              //   hide: true,
              //   editDisplay: false,
              //   viewDisplay: false,
              //   rules: [
              //     { required: true, validator: validatePass2, trigger: "blur" },
              //   ],
              // },
            ]
          },
          {
@@ -1123,6 +903,7 @@
                prop: "cardid",
                hide: true,
                overHidden: true,
                labelWidth: 120,
                rules: [
                  {
                    required: true,
@@ -1140,6 +921,7 @@
                label: "手机号码",
                prop: "phone",
                overHidden: true,
                labelWidth: 120,
                rules: [
                  {
                    required: true,
@@ -1153,14 +935,11 @@
                  }
                ]
              },
              // {
              //   label: "昵称",
              //   prop: "name",
              // },
              {
                label: "个人照片",
                type: "upload",
                listType: "picture-img",
                labelWidth: 120,
                propsHttp: {
                  res: "data",
                  url: "url"
@@ -1194,24 +973,6 @@
                // row: true,
                prop: "fingerprint"
              },
              //   {
              //     label: "指纹信息",
              //     type: "upload",
              //     listType: "picture-img",
              //     propsHttp: {
              //       res: "data",
              //       url: "url",
              //     },
              //     canvasOption: {
              //       text: " ",
              //       ratio: 0.1,
              //     },
              //     action: "/api/blade-resource/oss/endpoint/put-files",
              //     tip: "只能上传jpg/png指纹信息,且不超过500kb",
              //     span: 12,
              //     // row: true,
              //     prop: "fingerprint",
              //   },
              {
                label: "是否持证",
                prop: "hold",
@@ -1251,24 +1012,6 @@
                  }
                ]
              },
              // {
              //   label: "保安证书照片",
              //   prop: "email",
              //   type: "upload",
              //   listType: "picture-img",
              //   display: true,
              //   propsHttp: {
              //     res: "data",
              //     url: "url"
              //   },
              //   canvasOption: {
              //     text: " ",
              //     ratio: 1.0
              //   },
              //   action: "/api/blade-resource/oss/endpoint/put-files",
              //   tip: "上传jpg,png格式图片,大小不超过2M",
              //   span: 12
              // },
              {
                label: "民族",
                prop: "nation"
@@ -1291,28 +1034,20 @@
                prop: "politicaloutlook"
              },
              // {
              //   label: "健康状态",
              //   prop: "healstats"
              //   label: "联系地址",
              //   prop: "address"
              // },
              // {
              //   label: "身高",
              //   prop: "height"
              //   label: "身份证住址",
              //   prop: "registered",
              //   rules: [
              //     {
              //       required: true,
              //       message: "请输入身份证住址",
              //       trigger: "click"
              //     }
              //   ]
              // },
              {
                label: "联系地址",
                prop: "address"
              },
              {
                label: "身份证住址",
                prop: "registered",
                rules: [
                  {
                    required: true,
                    message: "请输入身份证住址",
                    trigger: "click"
                  }
                ]
              },
              {
                label: "所属辖区",
                prop: "jurisdiction",
@@ -1358,10 +1093,6 @@
                    label: "女",
                    value: 2
                  }
                  // {
                  //   label: "未知",
                  //   value: 3,
                  // },
                ],
                rules: [
                  {
@@ -1370,14 +1101,134 @@
                    trigger: "blur"
                  }
                ]
              }
              // {
              //   label: "生日",
              //   type: "date",
              //   prop: "birthday",
              //   format: "yyyy-MM-dd",
              //   valueFormat: "yyyy-MM-dd",
              // },
              },
              {
                label: "婚姻状态",
                prop: "marriageStatus",
                type: "select",
                dicUrl:
                  "/api/blade-system/dict-biz/dictionary?code=marriageStatusType",
                props: {
                  label: "dictValue",
                  value: "dictKey"
                },
                dataType: "number",
                hide: true,
              },
              {
                label: "居住地址",
                prop: "dwellAddress",
                hide: true,
                rules: [
                  {
                    required: true,
                    message: "请输入居住地址",
                    trigger: "blur"
                  }
                ]
              },
              {
                label: "户籍地址",
                prop: "permanentResidenceAddress",
                hide: true,
                rules: [
                  {
                    required: true,
                    message: "请输入户籍地址",
                    trigger: "blur"
                  }
                ]
              },
              {
                label: "报考等级",
                prop: "signLevel",
                type: "select",
                dicUrl:
                  "/api/blade-system/dict-biz/dictionary?code=signLevelType",
                props: {
                  label: "dictValue",
                  value: "dictKey"
                },
                dataType: "number",
                hide: true,
              },
              {
                label: "家庭主要成员及联系方式",
                prop: "memberOfFamily",
                type: "textarea",
                span: 24,
                hide: true,
              },
              {
                label: "教育经历",
                prop: "educationExperience",
                type: "textarea",
                span: 24,
                hide: true,
              },
              {
                label: "工作经历",
                prop: "workExperience",
                type: "textarea",
                span: 24,
                hide: true,
              },
              {
                label: "受理公安机关",
                prop: "acceptancePoliceUnit",
                hide: true,
              },
              {
                label: "受理人",
                prop: "acceptancePerson",
                hide: true,
              },
              {
                label: "受理时间",
                prop: "acceptanceTime",
                type: "date",
                format: "yyyy-MM-dd",
                valueFormat: "yyyy-MM-dd",
                span: 12,
                row: true,
                hide: true,
              },
              {
                label: "健康状况图片(健康证)",
                prop: "healthCertificateUrl",
                type: "upload",
                listType: "picture-img",
                propsHttp: {
                  res: "data",
                  url: "url"
                },
                canvasOption: {
                  text: " ",
                  ratio: 1.0
                },
                action: "/api/blade-resource/oss/endpoint/put-files",
                span: 12,
                hide: true,
                labelWidth: 120,
              },
              {
                label: "无犯罪记录图片",
                prop: "noCriminalRecordProveUrl",
                type: "upload",
                listType: "picture-img",
                propsHttp: {
                  res: "data",
                  url: "url"
                },
                canvasOption: {
                  text: " ",
                  ratio: 1.0
                },
                action: "/api/blade-resource/oss/endpoint/put-files",
                span: 12,
                hide: true,
                labelWidth: 120,
              },
            ]
          }
        ]
@@ -1546,7 +1397,6 @@
          "securitynumber"
        );
        // var emailcolumn = this.findObject(this.option.group, "email");
        console.log(val, 1234);
        if (val == 1) {
          securitynumbercolumn.display = true;
          securitynumbercolumn.rules = [
@@ -1579,7 +1429,7 @@
        function sets(state, dom, fingerprint, myPicture) {
          isoks = state;
          dom.onload = function() {
          dom.onload = function () {
            // var winzhiwen = document.getElementById("zhiwen").contentWindow;
            var winzhiwen = dom.contentWindow;
            winzhiwen.setZhiwenData({
@@ -1656,7 +1506,9 @@
        addBtn: this.vaildData(this.permission.securityGuard_add, false),
        viewBtn: this.vaildData(null, false),
        delBtn: this.vaildData(null, false),
        editBtn: this.vaildData(this.permission.securityGuard_edit, false)
        editBtn: this.vaildData(this.permission.securityGuard_edit, false),
        securityGuard_security_apply:this.vaildData(this.permission.securityGuard_security_apply,true),
        securityGuard_security_paper_apply:this.vaildData(this.permission.securityGuard_security_paper_apply,true)
      };
    },
    platformPermissionList() {
@@ -1678,7 +1530,7 @@
      userInfo: state => state.user.userInfo
    })
  },
  beforeCreate() {},
  beforeCreate() { },
  created() {
    var that = this;
    if (this.userInfo.role_name == "办证管理员") {
@@ -1756,7 +1608,6 @@
      this.search["userType"] = 7;
    }
    this.deptIds = this.userInfo.dept_id;
    // this.beginzhiwen();
    // this.olondSFZ(); //检查身份证设备是否存在
  },
@@ -1810,7 +1661,7 @@
        fn: this.Client.CID_Init,
        CID5000: this.Client.CIDDeviceType.CID5000
      };
      this.Client.OnCID_Alg_Begin = function(code, msg) {
      this.Client.OnCID_Alg_Begin = function (code, msg) {
        //初始化机器返数据
        if (code == 1) {
          console.log("初始化成功");
@@ -1823,7 +1674,7 @@
          console.log("算法初始化发生错误   错误码:" + code);
        }
      };
      this.Client.OnCID_Close = function(code, msg) {
      this.Client.OnCID_Close = function (code, msg) {
        //关闭机器返数据
        if (code == 1) {
          console.log("关闭设备成功");
@@ -1839,7 +1690,7 @@
          console.log("关闭设备发生错误   错误码:" + code);
        }
      };
      this.Client.OnCID_BeginCapture = function(code, msg) {
      this.Client.OnCID_BeginCapture = function (code, msg) {
        //开始使用预览图片模式函数
        // console.log(code, "图片模式开始");
        if (code == 1) {
@@ -1848,7 +1699,7 @@
          console.log("开始采集发生错误   错误码:" + code);
        }
      };
      this.Client.OnCID_GetBmpData = function(code, msg, imagedata, feadata) {
      this.Client.OnCID_GetBmpData = function (code, msg, imagedata, feadata) {
        //使用预览图片模式 采集 BMP格式
        // console.log(msg, "图片模式采集");
        if (code == 1) {
@@ -1876,7 +1727,7 @@
      //     console.log("格式转换失败," + code + " " + msg);
      //   }
      // };
      this.Client.OnBmpToRaw = function(code, msg, imagedata) {
      this.Client.OnBmpToRaw = function (code, msg, imagedata) {
        //使用预览图片模式  BMP格式转换成RAW
        // console.log(code, msg, "BMP格式转换成RAW");
        if (code == 0) {
@@ -1889,7 +1740,7 @@
          alert("格式转换失败," + code + " " + msg);
        }
      };
      this.Client.OnCID_EndCapture = function(code, msg) {
      this.Client.OnCID_EndCapture = function (code, msg) {
        //使用预览图片模式  停止采集
        if (code == 1) {
          if (that.begin_cap) {
@@ -1900,7 +1751,7 @@
          console.log("停止采集发生错误   错误码:" + code);
        }
      };
      this.Client.OnCID_Alg_GetQualityScore = function(code, msg, score) {
      this.Client.OnCID_Alg_GetQualityScore = function (code, msg, score) {
        //停止获取
        console.log(
          "code:" + code + ";",
@@ -1930,7 +1781,7 @@
          console.log("获取质量分数发生错误   错误码:" + code);
        }
      };
      this.Client.OnCID_Alg_FeatureExtract = function(code, msg, featuredata) {
      this.Client.OnCID_Alg_FeatureExtract = function (code, msg, featuredata) {
        //获取特征
        if (code == 1) {
          that.zhiwenChart = featuredata;
@@ -1974,23 +1825,22 @@
      done();
    },
    handleTemplate1() {
      if (
        this.userInfo.account == "晋城市保安服务总公司" ||
        this.userInfo.account == "押运分公司"
      ) {
        window.open(
          `/api/blade-user/export-template-securityYy?${
            this.website.tokenHeader
          }=${getToken()}`
        );
        return;
      }
      // if (
      //   this.userInfo.account == "晋城市保安服务总公司" ||
      //   this.userInfo.account == "押运分公司"
      // ) {
      //   window.open(
      //     `/api/blade-user/export-template-securityYy?${this.website.tokenHeader
      //     }=${getToken()}`
      //   );
      //   return;
      // }
      window.open(
        `/api/blade-user/export-template-security?${
          this.website.tokenHeader
        `/api/blade-user/export-template-security?${this.website.tokenHeader
        }=${getToken()}`
      );
    },
    // 头像批量上传
    handleImport2() {
      this.excelBox2 = true;
    },
@@ -2000,7 +1850,26 @@
      this.refreshChange();
      done();
    },
    // 健康状况图片(健康证)
    handleImportHealth() {
      this.excelBoxHealth = true;
    },
    uploadAfterHealth(res, done, loading, column) {
      window.console.log(column);
      this.excelBoxHealth = false;
      this.refreshChange();
      done();
    },
    // 无犯罪记录图片
    handleImportNoCriminal() {
      this.excelBoxNoCriminal = true;
    },
    uploadAfterNoCriminal(res, done, loading, column) {
      window.console.log(column);
      this.excelBoxNoCriminal = false;
      this.refreshChange();
      done();
    },
    //行点击事件
    rowClick(row) {
      this.$router.push({
@@ -2276,23 +2145,14 @@
        //序列号url形式,用&拼接
        data = Qs.stringify(data);
        window.open(
          `/api/blade-user/export-security-info?${
            this.website.tokenHeader
          `/api/blade-user/export-security-info?${this.website.tokenHeader
          }=${getToken()}&` + data
        );
      });
    },
    rowSave(row, done, loading) {
      // var dom = document.getElementById("zhiwenOur");
      // window.frames["iframe的name值"].document.getElementById("iframe中控件的ID").click();
      var winzhiwen = document.getElementById("zhiwen").contentWindow;
      let zhiwen = winzhiwen.outZhiwenData();
      // console.log(zhiwen);
      // for (let k in zhiwen) {
      //   console.log(k);
      //   console.log(zhiwen[k]);
      // }
      // return;
      if (row.deptId) {
        row.deptId = row.deptId;
      }
@@ -2314,7 +2174,6 @@
          avatar: row.avatar,
          // fingerprint: row.fingerprint,
          healstats: row.healstats,
          address: row.address,
          birthday: row.birthday,
          cardid: row.cardid,
          deptId: row.deptId,
@@ -2332,11 +2191,24 @@
          phone: row.phone,
          politicaloutlook: row.politicaloutlook,
          realName: row.realName,
          registered: row.registered,
          rtime: row.rtime,
          securitynumber: row.securitynumber,
          sex: row.sex,
          guncode: row.guncode
          guncode: row.guncode,
        },
        userDetail: {
          marriageStatus: row.marriageStatus,
          signLevel: row.signLevel,
          permanentResidenceAddress: row.permanentResidenceAddress,
          dwellAddress: row.dwellAddress,
          memberOfFamily: row.memberOfFamily,
          educationExperience: row.educationExperience,
          workExperience: row.workExperience,
          healthCertificateUrl: row.healthCertificateUrl,
          noCriminalRecordProveUrl: row.noCriminalRecordProveUrl,
          acceptancePoliceUnit: row.acceptancePoliceUnit,
          acceptancePerson: row.acceptancePerson,
          acceptanceTime: row.acceptanceTime,
          unitName: row.unitName,
        }
      };
@@ -2385,10 +2257,8 @@
    rowUpdate(row, index, done, loading) {
      row.deptId = row.deptId;
      row.roleId = row.roleId.join(",");
      row.postId = row.postId.join(",");
      // row.postId = row.postId.join(",");
      //值替换,education 放在页面会卡死
      row.education = row.education1;
      var winzhiwen = document.getElementById("zhiwen").contentWindow;
      let zhiwen = winzhiwen.outZhiwenData();
      // console.log(zhiwen);
@@ -2401,7 +2271,55 @@
      if (row.cell != "2") {
        row["cell"] = this.nowCell;
      }
      update(row).then(
      const userMap = {
        user: {
          id: row.id,
          //是否是身份证自动识别进入
          cell: row.cell,
          //指纹↓
          fingerprint: row.fingerprint, //图
          myPicture: row.myPicture, //特征
          //指纹↑
          account: row.account,
          avatar: row.avatar,
          healstats: row.healstats,
          birthday: row.birthday,
          cardid: row.cardid,
          deptId: row.deptId,
          education: row.education1,
          email: row.email,
          height: row.height,
          hold: row.hold,
          jurisdiction: row.jurisdiction,
          name: row.name,
          nation: row.nation,
          nativeplace: row.nativeplace,
          phone: row.phone,
          politicaloutlook: row.politicaloutlook,
          realName: row.realName,
          securitynumber: row.securitynumber,
          sex: row.sex,
          guncode: row.guncode
        },
        userDetail: {
          id: row.userDetailId,
          userId: row.id,
          marriageStatus: row.marriageStatus,
          signLevel: row.signLevel,
          permanentResidenceAddress: row.permanentResidenceAddress,
          dwellAddress: row.dwellAddress,
          memberOfFamily: row.memberOfFamily,
          educationExperience: row.educationExperience,
          workExperience: row.workExperience,
          healthCertificateUrl: row.healthCertificateUrl,
          noCriminalRecordProveUrl: row.noCriminalRecordProveUrl,
          acceptancePoliceUnit: row.acceptancePoliceUnit,
          acceptancePerson: row.acceptancePerson,
          acceptanceTime: row.acceptanceTime,
          unitName: row.unitName,
        }
      };
      update(userMap).then(
        res => {
          this.initFlag = false;
          this.onLoad(this.page);
@@ -2442,7 +2360,7 @@
        "离职原因",
        {
          confirmButtonText: "确定",
          callback: action => {}
          callback: action => { }
        }
      );
    },
@@ -2464,7 +2382,7 @@
          });
          this.refreshChange();
        })
        .catch(() => {});
        .catch(() => { });
    },
    rowDel(row) {
      this.$confirm("确定注销当前用户?", {
@@ -2527,6 +2445,83 @@
      this.sortName = "";
      // this.$refs.crud.toggleSelection();
    },
    handleBatchAudit(){
      if (this.selectionList.length === 0) {
        this.$message.warning("请选择至少一条数据");
        return;
      }
      this.$confirm("请选择审批结果", {
        distinguishCancelAndClose: true,
        confirmButtonText: "审批通过",
        cancelButtonText: "不通过",
        type: "warning"
      })
        .then(() => {
          //审核通过
          batchAudit(this.ids,1)
          .then(() => {
            this.onLoad(this.page);
            this.$message({
              type: "success",
              message: "操作成功!"
            });
            this.$refs.crud.toggleSelection();
          });
        }).catch(action => {
          console.log(action)
          if (action == 'cancel'){
            //审核不通过
            batchAudit(this.ids,2)
              .then(() => {
                this.onLoad(this.page);
                this.$message({
                  type: "success",
                  message: "操作成功!"
                });
                this.$refs.crud.toggleSelection();
              });
          }
      })
    },
    handleAudit(row){
      this.$confirm("请选择审批结果", {
        distinguishCancelAndClose: true,
        confirmButtonText: "审批通过",
        cancelButtonText: "不通过",
        type: "warning"
      })
        .then(() => {
          //审核通过
          batchAudit(row.id,1)
            .then(() => {
              this.onLoad(this.page);
              this.$message({
                type: "success",
                message: "操作成功!"
              });
              this.$refs.crud.toggleSelection();
            });
        }).catch(action => {
        console.log(action)
        if (action == 'cancel'){
          //审核不通过
          batchAudit(row.id,2)
            .then(() => {
              this.onLoad(this.page);
              this.$message({
                type: "success",
                message: "操作成功!"
              });
              this.$refs.crud.toggleSelection();
            });
        }
      })
    },
    handleDelete() {
      if (this.selectionList.length === 0) {
        this.$message.warning("请选择至少一条数据");
@@ -2603,18 +2598,15 @@
        type: "warning"
      }).then(() => {
        window.open(
          `/api/blade-user/export-user?${
            this.website.tokenHeader
          }=${getToken()}&account=${this.search.account}&realName=${
            this.search.realName
          `/api/blade-user/export-user?${this.website.tokenHeader
          }=${getToken()}&account=${this.search.account}&realName=${this.search.realName
          }`
        );
      });
    },
    handleTemplate() {
      window.open(
        `/api/blade-user/export-template?${
          this.website.tokenHeader
        `/api/blade-user/export-template?${this.website.tokenHeader
        }=${getToken()}`
      );
    },
@@ -2689,9 +2681,9 @@
        }
      });
    },
    setIntervals: function() {
    setIntervals: function () {
      let that = this;
      this.intTime = setInterval(function() {
      this.intTime = setInterval(function () {
        if (!that.haveCardid) {
          //定时读卡
          // console.log(that.haveCardid);
@@ -2789,6 +2781,22 @@
            ...this.form,
            ...d
          };
          if (this.form.userDetail) {
            this.form.userDetailId = this.form.userDetail.id;
            this.form.marriageStatus = this.form.userDetail.marriageStatus;
            this.form.signLevel = this.form.userDetail.signLevel;
            this.form.permanentResidenceAddress = this.form.userDetail.permanentResidenceAddress;
            this.form.dwellAddress = this.form.userDetail.dwellAddress;
            this.form.memberOfFamily = this.form.userDetail.memberOfFamily;
            this.form.educationExperience = this.form.userDetail.educationExperience;
            this.form.workExperience = this.form.userDetail.workExperience;
            this.form.healthCertificateUrl = this.form.userDetail.healthCertificateUrl;
            this.form.noCriminalRecordProveUrl = this.form.userDetail.noCriminalRecordProveUrl;
            this.form.acceptancePoliceUnit = this.form.userDetail.acceptancePoliceUnit;
            this.form.acceptancePerson = this.form.userDetail.acceptancePerson;
            this.form.acceptanceTime = this.form.userDetail.acceptanceTime;
            this.form.unitName = this.form.userDetail.unitName;
          }
          // this.from["education1"] = res.data.data.education;
          if (this.form.hasOwnProperty("deptId")) {
            this.form.deptId = this.form.deptId;
@@ -2796,9 +2804,9 @@
          if (this.form.hasOwnProperty("roleId")) {
            this.form.roleId = this.form.roleId.split(",");
          }
          if (this.form.hasOwnProperty("postId")) {
            this.form.postId = this.form.postId.split(",");
          }
          // if (this.form.hasOwnProperty("postId")) {
          //   this.form.postId = this.form.postId.split(",");
          // }
          var userInfo = res.data.data;
          //获取用户从业信息
          getUserPractitionersInfo(userInfo.id).then(res1 => {
@@ -2961,6 +2969,9 @@
            //   // d[key].securitynumber = "赣洪202100009";
            // }
            that.data = data.records;
            console.log(this.data,"++++++++++")
            that.loading = false;
            that.selectionClear();
            that.$store.commit("setWindowSizeHeightAdd");
@@ -3110,6 +3121,7 @@
// 标题
$upTop: 45px;
$downTop: 265px; //整体高度
//经国家保安员考试审查合格。<br />特颁此证。
.security_main-title {
  position: absolute;
@@ -3139,6 +3151,7 @@
$rightWidth: 77px;
$lineHigeht: 30px;
//姓名
.security_m_r_a {
  position: absolute;
@@ -3208,6 +3221,7 @@
//发证时间
$timeTop: 315px; //整体高度
//年
.security_m_l_titlepaperTimenian {
  position: absolute;
@@ -3242,6 +3256,7 @@
//内容
// 姓名
$centerLeft: 458px;
.security_m_r_o_right {
  position: absolute;
  top: $downTop + $lineHigeht * 0+18px;
@@ -3313,20 +3328,25 @@
  right: 239px;
  top: 93px;
  font-size: 14px;
  a {
    text-decoration: underline;
    &:hover {
      color: rgb(36, 143, 231);
    }
  }
}
.downSFZqudongS {
  position: absolute;
  right: 30px;
  top: 10px;
  font-size: 14px;
  a {
    text-decoration: underline;
    &:hover {
      color: rgb(36, 143, 231);
    }