liuyg
2021-09-24 c4e67a8942e514b65ab41bb19781d50576c15725
src/views/securityGuard/securityGuard.vue
@@ -1,242 +1,315 @@
<template>
  <div class="ours">
    <!-- <add-or-update v-if="addOrUpdateVisiable" ref="addOrUpdate"></add-or-update> -->
    <add-or-update ref="addOrUpdate"></add-or-update>
    <el-row>
      <el-col :span="0" style="display: none">
        <div class="box">
          <el-scrollbar>
            <basic-container>
              <avue-tree
                :option="treeOption"
                :data="treeData"
                @node-click="nodeClick"
              />
            </basic-container>
          </el-scrollbar>
        </div>
      </el-col>
      <el-col :span="24">
        <basic-container>
          <avue-crud
            :option="option"
            :search.sync="search"
            :table-loading="loading"
            :data="data"
            ref="crud"
            v-model="form"
            :permission="permissionList"
            @row-del="rowDel"
            @row-update="rowUpdate"
            @row-save="rowSave"
            @row-click="rowClick"
            :before-open="beforeOpen"
            :page.sync="page"
            @search-change="searchChange"
            @search-reset="searchReset"
            @selection-change="selectionChange"
            @current-change="currentChange"
            @size-change="sizeChange"
            @refresh-change="refreshChange"
            @on-load="onLoad"
  <el-row :class="{ securityGuard: isSecurity }">
    <el-col :span="0" style="display: none">
      <div class="box">
        <el-scrollbar>
          <basic-container>
            <avue-tree
              :option="treeOption"
              :data="treeData"
              @node-click="nodeClick"
            />
          </basic-container>
        </el-scrollbar>
      </div>
    </el-col>
    <el-col :span="24">
      <basic-container>
        <avue-crud
          :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"
          @search-change="searchChange"
          @search-reset="searchReset"
          @selection-change="selectionChange"
          @current-change="currentChange"
          @size-change="sizeChange"
          @refresh-change="refreshChange"
          @on-load="onLoad"
        >
          <!-- @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>
            <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"
              plain
              icon="el-icon-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>
            <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>
            <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>
          </template>
          <template slot-scope="{ type, size, row }" slot="menu">
            <el-button
              icon="el-icon-s-custom"
              :size="size"
              :type="type"
              @click.stop="rowClick(row)"
              >查看
            </el-button>
            <el-button
              icon="el-icon-edit"
              :size="size"
              :type="type"
              v-if="permission.securityGuard_delete && row.status != 2"
              @click.stop="rowDel(row)"
              >离职登记
            </el-button>
            <el-button
              icon="el-icon-edit"
              :size="size"
              :type="type"
              v-if="row.status == 2"
              @click.stop="rowDellook(row)"
              >离职查询
            </el-button>
            <el-button
              icon="el-icon-edit"
              :size="size"
              :type="type"
              v-if="permission.securityGuard_check"
              @click.stop="rowCheck(row)"
              >异常
            </el-button>
          </template>
          <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-scope="{ row }" slot="deptId">
            <el-tag
              class="rowClickSelf"
              title="点击查看所属公司情况"
              @click="rowClickSelf(row.deptId)"
              >{{ row.deptName }}</el-tag
            >
          </template>
          <template slot-scope="{ row }" slot="tenantName">
            <el-tag>{{ row.tenantName }}</el-tag>
          </template>
          <template slot-scope="{ row }" slot="roleName">
            <el-tag>{{ row.roleName }}</el-tag>
          </template>
          <template slot-scope="{ row }" slot="deptName">
            <el-tag>{{ row.deptName }}</el-tag>
          </template>
          <template slot-scope="{ row }" slot="userTypeName">
            <el-tag>{{ row.userTypeName }}</el-tag>
          </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"
          >
            <template slot="menuLeft">
              <el-button
                type="danger"
                style="display: none"
                size="small"
                plain
                icon="el-icon-delete"
                v-if="permission.user_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>
              <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>
              <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-tree>
          <span slot="footer" class="dialog-footer">
            <el-button @click="roleBox = false">取 消</el-button>
            <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"
          >
            <template slot="excelTemplate">
              <el-button type="primary" @click="handleTemplate">
                点击下载<i class="el-icon-download el-icon--right"></i>
              </el-button>
            </template>
            <template slot-scope="{ type, size, row }" slot="menu">
              <el-button
                icon="el-icon-edit"
                :size="size"
                :type="type"
                @click.stop="addOrUpdateHandle(row)"
                >修改
              </el-button>
              <el-button
                icon="el-icon-edit"
                :size="size"
                :type="type"
                @click.stop="rowDel(row)"
                >离职登记
              </el-button>
            </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"
          >
            <template slot-scope="{ row }" slot="tenantName">
              <el-tag>{{ row.tenantName }}</el-tag>
            </template>
            <template slot-scope="{ row }" slot="roleName">
              <el-tag>{{ row.roleName }}</el-tag>
            </template>
            <template slot-scope="{ row }" slot="deptName">
              <el-tag>{{ row.deptName }}</el-tag>
            </template>
            <template slot-scope="{ row }" slot="userTypeName">
              <el-tag>{{ row.userTypeName }}</el-tag>
            </template>
          </avue-crud>
          <el-dialog
            title="用户角色配置"
            append-to-body
            :visible.sync="roleBox"
            width="345px"
        </el-dialog>
        <el-dialog
          title="保安员导入"
          append-to-body
          :visible.sync="excelBox1"
          width="555px"
        >
          <avue-form
            :option="excelOption1"
            v-model="excelForm1"
            :upload-after="uploadAfter1"
          >
            <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">
              <el-button @click="roleBox = false">取 消</el-button>
              <el-button type="primary" @click="submitRole">确 定</el-button>
            </span>
          </el-dialog>
          <el-dialog
            title="用户数据导入"
            append-to-body
            :visible.sync="excelBox"
            width="555px"
            <template slot="excelTemplate">
              <el-button type="primary" @click="handleTemplate1">
                点击下载<i class="el-icon-download el-icon--right"></i>
              </el-button>
            </template>
          </avue-form>
        </el-dialog>
        <el-dialog
          title="个人照片批量上传"
          append-to-body
          :visible.sync="excelBox2"
          width="555px"
        >
          <avue-form
            :option="excelOption2"
            v-model="excelForm2"
            :upload-after="uploadAfter2"
          >
            <avue-form
              :option="excelOption"
              v-model="excelForm"
              :upload-after="uploadAfter"
            >
              <template slot="excelTemplate">
                <el-button type="primary" @click="handleTemplate">
                  点击下载<i class="el-icon-download el-icon--right"></i>
                </el-button>
              </template>
            </avue-form>
          </el-dialog>
          <el-dialog
            title="用户平台配置"
            append-to-body
            :visible.sync="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>
              <template slot-scope="{ row }" slot="userTypeName">
                <el-tag>{{ row.userTypeName }}</el-tag>
              </template>
            </avue-crud>
          </el-dialog>
        </basic-container>
      </el-col>
    </el-row>
  </div>
          </avue-form>
        </el-dialog>
      </basic-container>
    </el-col>
  </el-row>
</template>
<script>
import {
  getList,
  getUser,
  getUserPlatform,
  remove,
  update,
  updatePlatform,
  add,
  securitySave,
  grant,
  resetPassword,
  getUserPractitionersInfo,
  saveOrUpdateUserPractitionersInfo,
} from "@/api/system/user";
import { getDeptTree, getDeptLazyTree } from "@/api/system/dept";
import { getRoleTree } from "@/api/system/role";
import { getList } from "@/api/securityGuard/securityGuard";
import { getDeptLazyTree } from "@/api/system/dept";
import { getRoleTree, getRoleDetail } from "@/api/system/role";
import { getPostList } from "@/api/system/post";
import { mapGetters } from "vuex";
import website from "@/config/website";
import { getToken } from "@/util/auth";
import { securityFormPageColumn, securityBaseInfoColumns } from "./data";
import { securityFormPageColumn } from "./data";
import { mapState } from "vuex";
import addOrUpdate from "./securityGuardRegistration.vue";
export default {
  components: {
    addOrUpdate,
  },
  data() {
    const validatePass = (rule, value, callback) => {
      if (value === "") {
@@ -254,8 +327,82 @@
        callback();
      }
    };
    const validatePassNumber = (rule, value, callback) => {
      var test = /^[0-9]*$/gm;
      if (!test.test(value)) {
        callback(new Error("请输入数字"));
      } else {
        callback();
      }
    };
    const validatePassCardid = (rule, value, callback) => {
      var test = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/g;
      if (!test.test(value) && value.length < 17) {
        callback(new Error("请输入正确身份证号码"));
      } else {
        callback();
      }
    };
    const validatePassPhone = (rule, value, callback) => {
      var test = /^(13[0-9]|14[0-9]|15[0-9]|17[0-9]|18[0-9])\d{8}$/g;
      if (!test.test(value)) {
        callback(new Error("请输入正确手机号码"));
      } else {
        callback();
      }
    };
    return {
      floats: false,
      securityid: "",
      excelBox1: false,
      excelBox2: false,
      isSecurity: true,
      excelForm1: {},
      excelOption1: {
        submitBtn: false,
        emptyBtn: false,
        column: [
          {
            label: "文件上传",
            prop: "excelFile",
            type: "upload",
            drag: true,
            loadText: "文件上传中,请稍等",
            span: 24,
            propsHttp: {
              res: "data",
            },
            tip: "请上传 .xls,.xlsx 标准格式文件",
            action: "/api/blade-user/import-user",
          },
          {
            label: "模板下载",
            prop: "excelTemplate",
            formslot: true,
            span: 24,
          },
        ],
      },
      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",
          },
        ],
      },
      form: {},
      search: {},
      roleBox: false,
@@ -264,7 +411,6 @@
      initFlag: true,
      selectionList: [],
      query: {},
      addOrUpdateVisiable: false,
      loading: true,
      platformLoading: false,
      page: {
@@ -272,6 +418,8 @@
        currentPage: 1,
        total: 0,
      },
      roleId: "1412226235153731586",
      deptId: "1413470343230877697",
      platformPage: {
        pageSize: 10,
        currentPage: 1,
@@ -320,13 +468,20 @@
        calcHeight: 80,
        tip: false,
        searchShow: true,
        indexWidth: 55,
        searchMenuSpan: 6,
        border: false,
        stripe: true,
        border: true,
        delBtn: false,
        align: "center",
        index: true,
        delBtnText: "注销",
        menuWidth: 271,
        selection: true,
        viewBtn: true,
        defaultExpandAll: true,
        //dialogType: 'drawer',
        dialogClickModal: false,
        column: securityFormPageColumn,
@@ -338,30 +493,29 @@
            icon: "el-icon-user-solid",
            column: [
              {
                label: "所属保安单位",
                prop: "tenantId",
                label: "所属保安公司",
                prop: "deptId",
                type: "tree",
                dicUrl: "/api/blade-system/tenant/select",
                // dicUrl:
                // "/api/blade-system/dept/security_lazy-tree?parentId=1413470343230877697",
                // dicUrl: "/api/blade-system/dept/lazy-tree?parentId=0",
                props: {
                  label: "tenantName",
                  value: "tenantId",
                  label: "title",
                  value: "id",
                },
                hide: !website.tenantMode,
                addDisplay: website.tenantMode,
                editDisplay: website.tenantMode,
                viewDisplay: website.tenantMode,
                // disabled: true,
                rules: [
                  {
                    required: true,
                    message: "请输入所属保安单位",
                    trigger: "click",
                    message: "请选择保安公司",
                    trigger: "blur",
                  },
                ],
                span: 24,
              },
              {
                label: "登录账号",
                prop: "account",
                editDisabled: true,
                rules: [
                  {
                    required: true,
@@ -369,29 +523,12 @@
                    trigger: "blur",
                  },
                ],
              },
              {
                label: "用户平台",
                type: "select",
                dicUrl: "/api/blade-system/dict/dictionary?code=user_type",
                props: {
                  label: "dictValue",
                  value: "dictKey",
                },
                dataType: "number",
                slot: true,
                prop: "userType",
                rules: [
                  {
                    required: true,
                    message: "请选择用户平台",
                    trigger: "blur",
                  },
                ],
                // disabled: true,
              },
              {
                label: "密码",
                prop: "password",
                type: "password",
                hide: true,
                editDisplay: false,
                viewDisplay: false,
@@ -402,6 +539,7 @@
              {
                label: "确认密码",
                prop: "password2",
                type: "password",
                hide: true,
                editDisplay: false,
                viewDisplay: false,
@@ -413,29 +551,17 @@
          },
          {
            label: "详细信息",
            labelWidth: "110",
            prop: "detailInfo",
            labelWidth: "110",
            icon: "el-icon-s-order",
            column: [
              {
                label: "用户昵称",
                prop: "name",
                hide: true,
                rules: [
                  {
                    required: true,
                    message: "请输入用户昵称",
                    trigger: "blur",
                  },
                ],
              },
              {
                label: "用户姓名",
                label: "姓名",
                prop: "realName",
                rules: [
                  {
                    required: true,
                    message: "请输入用户姓名",
                    message: "请输入姓名",
                    trigger: "blur",
                  },
                  {
@@ -446,20 +572,186 @@
                ],
              },
              {
                label: "昵称",
                prop: "name",
              },
              {
                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: 10,
                // row: true,
                prop: "avatar",
              },
              {
                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: 10,
                // row: true,
                prop: "fingerprint",
              },
              {
                label: "是否持证",
                prop: "hold",
                dicUrl: "/api/blade-system/dict-biz/dictionary?code=equipage",
                props: {
                  label: "dictValue",
                  value: "dictKey",
                },
                type: "select",
                rules: [
                  {
                    required: true,
                    message: "请选择",
                    trigger: "blur",
                  },
                ],
              },
              {
                label: "保安员证编号",
                prop: "securitynumber",
                hide: true,
              },
              {
                label: "身份证号",
                prop: "cardid",
                hide: true,
                overHidden: true,
                rules: [
                  {
                    required: true,
                    message: "请输入身份证号",
                    trigger: "blur",
                  },
                  {
                    required: true,
                    validator: validatePassCardid,
                    trigger: "blur",
                  },
                ],
              },
              {
                label: "手机号码",
                prop: "phone",
                overHidden: true,
                rules: [
                  {
                    required: true,
                    message: "请输入手机号",
                    trigger: "blur",
                  },
                  {
                    required: true,
                    validator: validatePassPhone,
                    trigger: "blur",
                  },
                ],
              },
              {
                label: "电子邮箱",
                prop: "email",
                hide: true,
                overHidden: true,
              },
              {
                label: "用户性别",
                label: "籍贯",
                prop: "nativeplace",
              },
              {
                label: "民族",
                prop: "nation",
              },
              {
                label: "最高学历",
                prop: "education1",
                type: "select",
                dicUrl:
                  "/api/blade-system/dict-biz/dictionary?code=educationType",
                props: {
                  label: "dictValue",
                  value: "dictKey",
                },
                dataType: "number",
                slot: true,
              },
              {
                label: "政治面貌",
                prop: "politicaloutlook",
              },
              {
                label: "健康状态",
                prop: "healstats",
              },
              {
                label: "身高",
                prop: "height",
              },
              {
                label: "联系地址",
                prop: "address",
              },
              {
                label: "户口所在地",
                prop: "registered",
              },
              {
                label: "所属辖区",
                prop: "jurisdiction",
                // multiple: true,
                type: "tree",
                dicUrl: "/api/jurisdiction/lazy-tree",
                props: {
                  label: "title",
                  value: "id",
                },
                checkStrictly: true,
                slot: true,
                rules: [
                  {
                    required: false,
                    message: "请选择所属辖区",
                    trigger: "click",
                  },
                ],
              },
              {
                label: "入职时间",
                prop: "rtime",
                type: "date",
                format: "yyyy-MM-dd",
                valueFormat: "yyyy-MM-dd",
                rules: [
                  {
                    required: true,
                    message: "请输入入职时间",
                    trigger: "click",
                  },
                ],
              },
              {
                label: "性别",
                prop: "sex",
                type: "select",
                slot: true,
                dicData: [
                  {
                    label: "男",
@@ -469,95 +761,19 @@
                    label: "女",
                    value: 2,
                  },
                  {
                    label: "未知",
                    value: 3,
                  },
                ],
                hide: true,
              },
              {
                label: "用户生日",
                type: "date",
                prop: "birthday",
                format: "yyyy-MM-dd hh:mm:ss",
                valueFormat: "yyyy-MM-dd hh:mm:ss",
                hide: true,
              },
              {
                label: "账号状态",
                prop: "statusName",
                hide: true,
                display: false,
              },
            ],
          },
          {
            label: "职责信息",
            labelWidth: "110",
            prop: "dutyInfo",
            icon: "el-icon-s-custom",
            column: [
              {
                label: "用户编号",
                prop: "code",
              },
              {
                label: "所属角色",
                prop: "roleId",
                multiple: true,
                type: "tree",
                dicData: [],
                props: {
                  label: "title",
                },
                checkStrictly: true,
                slot: true,
                rules: [
                  {
                    required: true,
                    message: "请选择所属角色",
                    trigger: "click",
                  },
                  // {
                  //   label: "未知",
                  //   value: 3,
                  // },
                ],
              },
              {
                label: "所属部门",
                prop: "deptId",
                type: "tree",
                multiple: true,
                dicData: [],
                props: {
                  label: "title",
                },
                checkStrictly: true,
                slot: true,
                rules: [
                  {
                    required: true,
                    message: "请选择所属部门",
                    trigger: "click",
                  },
                ],
              },
              {
                label: "所属岗位",
                prop: "postId",
                type: "tree",
                multiple: true,
                dicData: [],
                props: {
                  label: "postName",
                  value: "id",
                },
                rules: [
                  {
                    required: true,
                    message: "请选择所属岗位",
                    trigger: "click",
                  },
                ],
              },
              // {
              //   label: "生日",
              //   type: "date",
              //   prop: "birthday",
              //   format: "yyyy-MM-dd",
              //   valueFormat: "yyyy-MM-dd",
              // },
            ],
          },
        ],
@@ -592,19 +808,19 @@
            display: false,
          },
          {
            label: "用户姓名",
            label: "姓名",
            prop: "realName",
            search: true,
            display: false,
          },
          {
            label: "用户平台",
            label: "平台",
            prop: "userTypeName",
            slot: true,
            display: false,
          },
          {
            label: "用户平台",
            label: "平台",
            type: "select",
            dicUrl: "/api/blade-system/dict/dictionary?code=user_type",
            props: {
@@ -619,13 +835,13 @@
            rules: [
              {
                required: true,
                message: "请选择用户平台",
                message: "请选择平台",
                trigger: "blur",
              },
            ],
          },
          {
            label: "用户拓展",
            label: "拓展",
            prop: "userExt",
            type: "textarea",
            minRows: 8,
@@ -654,32 +870,32 @@
            tip: "请上传 .xls,.xlsx 标准格式文件",
            action: "/api/blade-user/import-user",
          },
          {
            label: "数据覆盖",
            prop: "isCovered",
            type: "switch",
            align: "center",
            width: 80,
            dicData: [
              {
                label: "否",
                value: 0,
              },
              {
                label: "是",
                value: 1,
              },
            ],
            value: 0,
            slot: true,
            rules: [
              {
                required: true,
                message: "请选择是否覆盖",
                trigger: "blur",
              },
            ],
          },
          // {
          //   label: "数据覆盖",
          //   prop: "isCovered",
          //   type: "switch",
          //   align: "center",
          //   width: 80,
          //   dicData: [
          //     {
          //       label: "否",
          //       value: 0,
          //     },
          //     {
          //       label: "是",
          //       value: 1,
          //     },
          //   ],
          //   value: 0,
          //   slot: true,
          //   rules: [
          //     {
          //       required: true,
          //       message: "请选择是否覆盖",
          //       trigger: "blur",
          //     },
          //   ],
          // },
          {
            label: "模板下载",
            prop: "excelTemplate",
@@ -696,6 +912,9 @@
        this.initData(this.form.tenantId);
      }
    },
    "form.deptId"() {
      this.initData(this.form.tenantId);
    },
    "excelForm.isCovered"() {
      if (this.excelForm.isCovered !== "") {
        const column = this.findObject(this.excelOption.column, "excelFile");
@@ -707,10 +926,10 @@
    ...mapGetters(["userInfo", "permission"]),
    permissionList() {
      return {
        addBtn: this.vaildData(this.permission.user_add, false),
        addBtn: this.vaildData(this.permission.securityGuard_add, false),
        viewBtn: this.vaildData(null, false),
        delBtn: this.vaildData(null, false),
        editBtn: this.vaildData(null, false),
        delBtn: this.vaildData(this.permission.securityGuard_delete, false),
        editBtn: this.vaildData(this.permission.securityGuard_edit, false),
      };
    },
    platformPermissionList() {
@@ -728,48 +947,57 @@
      });
      return ids.join(",");
    },
    ...mapState({
      userInfo: (state) => state.user.userInfo,
    }),
  },
  beforeCreate() {},
  created() {},
  mounted() {
    // this.option.column[0].hide = true
    // 非保安单位模式默认加载管理组数据
    if (!website.tenantMode) {
      this.initData(website.tenantId);
    }
    console.log(this.search, 111);
    this.search["status"] = 1;
  },
  methods: {
    //行点击事件
      rowClick(row) {
        this.$router.push({
          path: "/securityGuard/securityGuardDetail",
          query: { row: row },
        });
      },
    //新增或修改
    addOrUpdateHandle(row) {
      this.$nextTick(() => {
          this.$refs.addOrUpdate.inits(row.id);
      });
    handleImport1() {
      this.excelBox1 = true;
    },
    closeOrUpdateHandle(row) {
      this.floats = row;
    uploadAfter1(res, done, loading, column) {
      window.console.log(column);
      this.excelBox1 = false;
      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();
    },
    //获取用户信息
    getUserDetail() {
      var that = this;
      //获取用户基本信息
      getUser(this.userId).then((res) => {
        this.form = res.data.data;
        var userInfo = res.data.data;
        //获取用户从业信息
        getUserPractitionersInfo(userInfo.cardid).then((res1) => {
          that.form.UserPractitionersInfo = res1.data.data;
        });
        if (this.form.hasOwnProperty("deptId")) {
          this.form.deptId = this.form.deptId.split(",");
        }
        if (this.form.hasOwnProperty("postId")) {
          this.form.postId = this.form.postId.split(",");
        }
    //行点击事件
    rowClick(row) {
      // console.log(row, 111);
      this.$router.push({
        path: "/securityGuardDetail",
        query: { row: JSON.stringify(row) },
      });
    },
    rowClickSelf(row) {
      console.log(row, "baoan");
      this.$router.push({
        path: "/securityUnitChild",
        query: { fromSecunityGuardId: row },
      });
    },
    nodeClick(data) {
@@ -778,18 +1006,18 @@
      this.onLoad(this.page);
    },
    initData(tenantId) {
      getRoleTree(tenantId).then((res) => {
        const column = this.findObject(this.option.group, "roleId");
        column.dicData = res.data.data;
      });
      getDeptTree(tenantId).then((res) => {
        const column = this.findObject(this.option.group, "deptId");
        column.dicData = res.data.data;
      });
      getPostList(tenantId).then((res) => {
        const column = this.findObject(this.option.group, "postId");
        column.dicData = res.data.data;
      });
      // getRoleTree(tenantId).then((res) => {
      //   const column = this.findObject(this.option.group, "roleId");
      //   column.dicData = res.data.data;
      // });
      // getDeptTree(tenantId).then((res) => {
      //   const column = this.findObject(this.option.group, "deptId");
      //   column.dicData = res.data.data;
      // });
      // getPostList(tenantId).then((res) => {
      //   const column = this.findObject(this.option.group, "postId");
      //   column.dicData = res.data.data;
      // });
    },
    submitRole() {
      const roleList = this.$refs.treeRole.getCheckedKeys().join(",");
@@ -803,10 +1031,47 @@
      });
    },
    rowSave(row, done, loading) {
      row.deptId = row.deptId.join(",");
      row.roleId = row.roleId.join(",");
      row.postId = row.postId.join(",");
      add(row).then(
      if (row.deptId) {
        row.deptId = row.deptId;
      }
      if (row.roleId) {
        row.roleId = row.roleId.join(",");
      }
      if (row.postId) {
        row.postId = row.postId.join(",");
      }
      const userMap = {
        user: {
          account: row.account,
          avatar: row.avatar,
          fingerprint: row.fingerprint,
          healstats: row.healstats,
          address: row.address,
          birthday: row.birthday,
          cardid: row.cardid,
          deptId: row.deptId,
          education: row.education1,
          email: row.email,
          height: row.height,
          hold: row.hold,
          jurisdiction: row.jurisdiction,
          myPicture: row.myPicture,
          name: row.name,
          nation: row.nation,
          nativeplace: row.nativeplace,
          password: row.password,
          password2: row.password2,
          phone: row.phone,
          politicaloutlook: row.politicaloutlook,
          realName: row.realName,
          registered: row.registered,
          rtime: row.rtime,
          securitynumber: row.securitynumber,
          sex: row.sex,
        },
      };
      securitySave(userMap).then(
        () => {
          this.initFlag = false;
          this.onLoad(this.page);
@@ -823,9 +1088,11 @@
      );
    },
    rowUpdate(row, index, done, loading) {
      row.deptId = row.deptId.join(",");
      row.deptId = row.deptId;
      row.roleId = row.roleId.join(",");
      row.postId = row.postId.join(",");
      //值替换,education 放在页面会卡死
      row.education = row.education1;
      update(row).then(
        () => {
          this.initFlag = false;
@@ -842,14 +1109,47 @@
        }
      );
    },
    rowDellook(row) {
      // console.log(row.reasonForLeav);
      this.$alert(
        row.reasonForLeav == "" ? "未填写" : row.reasonForLeav,
        "离职原因",
        {
          confirmButtonText: "确定",
          callback: (action) => {},
        }
      );
    },
    rowDel(row) {
      this.$confirm("确定将选择用户登记离职?", {
      this.$prompt("离职原因", "提示", {
        confirmButtonText: "确定离职",
        cancelButtonText: "取消",
        inputErrorMessage: "",
      })
        .then(({ value }) => {
          console.log(value);
          row.reasonForLeav = value;
          row.status = "2";
          // console.log(update);
          // return;
          update(row).then((res) => {
            this.$message({
              type: "success",
              message: "操作成功",
            });
          });
          this.refreshChange();
        })
        .catch(() => {});
    },
    rowCheck(row) {
      this.$confirm("确定审查异常标记?", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          row.status = "0";
          row.examinationType = "1";
          return update(row);
        })
        .then(() => {
@@ -883,7 +1183,7 @@
        this.$message.warning("请选择至少一条数据");
        return;
      }
      this.$confirm("确定将选择用户注销?", {
      this.$confirm("确定将选择保安注销?", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
@@ -948,7 +1248,7 @@
      done();
    },
    handleExport() {
      this.$confirm("是否导出用户数据?", "提示", {
      this.$confirm("是否导出保安数据?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
@@ -970,11 +1270,20 @@
      );
    },
    beforeOpen(done, type) {
      var that = this;
      if (["edit", "view"].includes(type)) {
        getUser(this.form.id).then((res) => {
          this.form = res.data.data;
          var d = {
            education1: res.data.data.education,
          };
          this.form = {
            ...this.form,
            ...d,
          };
          // this.from["education1"] = res.data.data.education;
          if (this.form.hasOwnProperty("deptId")) {
            this.form.deptId = this.form.deptId.split(",");
            this.form.deptId = this.form.deptId;
          }
          if (this.form.hasOwnProperty("roleId")) {
            this.form.roleId = this.form.roleId.split(",");
@@ -982,6 +1291,11 @@
          if (this.form.hasOwnProperty("postId")) {
            this.form.postId = this.form.postId.split(",");
          }
          var userInfo = res.data.data;
          //获取用户从业信息
          getUserPractitionersInfo(userInfo.id).then((res1) => {
            that.form.UserPractitionersInfo = res1.data.data;
          });
        });
      }
      this.initFlag = true;
@@ -990,6 +1304,14 @@
    currentChange(currentPage) {
      this.page.currentPage = currentPage;
    },
    //行样式调整
    rowStyle({ row, column, rowIndex }) {
      if (row.examinationType == "1") {
        return {
          color: "#ff2727",
        };
      }
    },
    sizeChange(pageSize) {
      this.page.pageSize = pageSize;
    },
@@ -997,18 +1319,74 @@
      this.onLoad(this.page, this.query);
    },
    onLoad(page, params = {}) {
      this.loading = true;
      getList(
        page.currentPage,
        page.pageSize,
        Object.assign(params, this.query),
        this.treeDeptId
      ).then((res) => {
        const data = res.data.data;
        this.page.total = data.total;
        this.data = data.records;
        this.loading = false;
        this.selectionClear();
      params = this.search;
      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 == "保安") {
            //去除保安公司查询
            const column = that.findObject(that.option.column, "deptId");
            column.search = false;
            const deptColumn = that.findObject(that.option.group, "deptId");
            deptColumn.dicUrl =
              "/api/blade-system/dept/security_lazy-tree?parentId=1413470343230877697";
            //禁止编辑
            deptColumn.disabled = true;
            deptColumn.value = that.userInfo.dept_id;
            that.isSecurity = false;
            //如果是保安公司管理员
            params["deptId"] = that.userInfo.dept_id;
          } else if (roleAlias == "公安管理员") {
            params["jurisdiction"] = that.userInfo.jurisdiction;
            var columnDept = that.findObject(that.option.column, "deptId");
            columnDept.dicUrl =
              "/api/blade-system/dept/security_lazy-tree?parentId=1413470343230877697&jurisdiction=" +
              that.userInfo.jurisdiction;
            var ColumnDeptUpdate = that.findObject(that.option.group, "deptId");
            ColumnDeptUpdate.dicUrl =
              "/api/blade-system/dept/security_lazy-tree?parentId=1413470343230877697&jurisdiction=" +
              that.userInfo.jurisdiction;
          } else {
            var columnDept1 = that.findObject(that.option.column, "deptId");
            columnDept1.dicUrl =
              "/api/blade-system/dept/security_lazy-tree?parentId=1413470343230877697";
            var ColumnDeptUpdate1 = that.findObject(
              that.option.group,
              "deptId"
            );
            ColumnDeptUpdate1.dicUrl =
              "/api/blade-system/dept/security_lazy-tree?parentId=1413470343230877697";
          }
          let values = {
            ...params,
          };
          values = {
            ...params,
            roleAlias: "111",
            ...that.query,
          };
          that.loading = true;
          getList(page.currentPage, page.pageSize, values).then((res) => {
            const data = res.data.data;
            that.page.total = data.total;
            var d = data.records;
            var date = new Date();
            var datayear = date.getFullYear();
            for (const key in d) {
              var year = d[key].cardid.slice(6, 10);
              d[key]["age"] = +datayear - +year;
              // d[key].securitynumber = "赣洪202100009";
            }
            that.data = data.records;
            that.loading = false;
            that.selectionClear();
          });
        });
      });
    },
    platformRowUpdate(row, index, done, loading) {
@@ -1079,12 +1457,8 @@
  },
};
</script>
<style>
.ours {
  width: 100%;
  height: 100%;
}
<style lang="scss" scoped>
.box {
  height: 800px;
}
@@ -1096,16 +1470,9 @@
.box .el-scrollbar__wrap {
  overflow: scroll;
}
.floats {
  position: absolute;
  width: 100%;
  height: 100%;
  overflow: scroll;
  top: 0;
  left: 0;
  background-color: rgba(0,0,0,0.5);
  z-index: 500 !important;
  display: flex;
  justify-content: center;
.rowClickSelf {
  &:hover {
    cursor: pointer;
  }
}
</style>
</style>