无人机管理后台前端(已迁走)
shuishen
2025-05-19 2dfc8dc4bcd3d3cd4aed1b6054e073e140eba9c8
src/views/system/user.vue
@@ -11,122 +11,47 @@
    </el-col>
    <el-col :span="19">
      <basic-container>
        <avue-crud
          :option="option"
          v-model:search="search"
          :table-loading="loading"
          :data="data"
          ref="crud"
          v-model="form"
          :permission="permissionList"
          @row-del="rowDel"
          @row-update="rowUpdate"
          @row-save="rowSave"
          :before-open="beforeOpen"
          v-model:page="page"
          @search-change="searchChange"
          @search-reset="searchReset"
          @selection-change="selectionChange"
          @current-change="currentChange"
          @size-change="sizeChange"
          @refresh-change="refreshChange"
          @on-load="onLoad"
        >
        <avue-crud :option="option" v-model:search="search" :table-loading="loading" :data="data" ref="crud"
          v-model="form" :permission="permissionList" @row-del="rowDel" @row-update="rowUpdate" @row-save="rowSave"
          :before-open="beforeOpen" v-model:page="page" @search-change="searchChange" @search-reset="searchReset"
          @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
          @refresh-change="refreshChange" @on-load="onLoad">
          <template #menu-left>
            <el-button
              v-if="permission.user_add && !auditMode"
              type="primary"
              icon="el-icon-plus"
              @click="$refs.crud.rowAdd()"
              >新 增
            <el-button v-if="permission.user_add && !auditMode" type="primary" icon="el-icon-plus"
              @click="$refs.crud.rowAdd()">新 增
            </el-button>
            <el-button
              type="danger"
              plain
              icon="el-icon-delete"
              v-if="permission.user_delete && !auditMode"
              @click="handleDelete"
              >删 除
            <el-button type="danger" plain icon="el-icon-delete" v-if="permission.user_delete && !auditMode"
              @click="handleDelete">删 除
            </el-button>
            <el-button
              type="primary"
              plain
              icon="el-icon-operation"
              v-if="userInfo.role_name.includes('admin') && !auditMode"
              @click="handleAudit"
              >审 核
            <el-button type="primary" plain icon="el-icon-operation"
              v-if="userInfo.role_name.includes('admin') && !auditMode" @click="handleAudit">审 核
            </el-button>
            <el-button
              type="success"
              plain
              icon="el-icon-check"
              v-if="userInfo.role_name.includes('admin') && auditMode"
              @click="handleAuditPass"
              >通 过
            <el-button type="success" plain icon="el-icon-check" v-if="userInfo.role_name.includes('admin') && auditMode"
              @click="handleAuditPass">通 过
            </el-button>
            <el-button
              type="danger"
              plain
              icon="el-icon-close"
              v-if="userInfo.role_name.includes('admin') && auditMode"
              @click="handleAuditRefuse"
              >拒 绝
            <el-button type="danger" plain icon="el-icon-close" v-if="userInfo.role_name.includes('admin') && auditMode"
              @click="handleAuditRefuse">拒 绝
            </el-button>
            <el-button
              type="primary"
              plain
              icon="el-icon-refresh-left"
              v-if="userInfo.role_name.includes('admin') && auditMode"
              @click="handleAuditBack"
              >返 回
            <el-button type="primary" plain icon="el-icon-refresh-left"
              v-if="userInfo.role_name.includes('admin') && auditMode" @click="handleAuditBack">返 回
            </el-button>
            <el-button
              type="info"
              plain
              v-if="permission.user_role && !auditMode"
              icon="el-icon-user"
              @click="handleGrant"
              >角色配置
            <el-button type="info" plain v-if="permission.user_role && !auditMode" icon="el-icon-user"
              @click="handleGrant">角色配置
            </el-button>
            <el-button
              type="info"
              plain
              v-if="permission.user_reset && !auditMode"
              icon="el-icon-refresh"
              @click="handleReset"
              >密码重置
            <el-button type="info" plain v-if="permission.user_reset && !auditMode" icon="el-icon-refresh"
              @click="handleReset">密码重置
            </el-button>
            <el-button
              type="info"
              plain
              v-if="userInfo.role_name.includes('admin') && !auditMode"
              icon="el-icon-setting"
              @click="handlePlatform"
              >平台配置
            <el-button type="info" plain v-if="userInfo.role_name.includes('admin') && !auditMode" icon="el-icon-setting"
              @click="handlePlatform">平台配置
            </el-button>
            <el-button
              type="info"
              plain
              v-if="userInfo.role_name.includes('admin') && !auditMode"
              icon="el-icon-coordinate"
              @click="handleLock"
              >账号解封
            <el-button type="info" plain v-if="userInfo.role_name.includes('admin') && !auditMode"
              icon="el-icon-coordinate" @click="handleLock">账号解封
            </el-button>
            <el-button
              type="success"
              plain
              v-if="userInfo.role_name.includes('admin') && !auditMode"
              icon="el-icon-upload"
              @click="handleImport"
              >导入
            <el-button type="success" plain v-if="userInfo.role_name.includes('admin') && !auditMode"
              icon="el-icon-upload" @click="handleImport">导入
            </el-button>
            <el-button
              type="warning"
              plain
              v-if="userInfo.role_name.includes('admin') && !auditMode"
              icon="el-icon-download"
              @click="handleExport"
              >导出
            <el-button type="warning" plain v-if="userInfo.role_name.includes('admin') && !auditMode"
              icon="el-icon-download" @click="handleExport">导出
            </el-button>
          </template>
          <template #tenantName="{ row }">
@@ -143,16 +68,8 @@
          </template>
        </avue-crud>
        <el-dialog title="用户角色配置" append-to-body v-model="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 :data="roleGrantList" show-checkbox check-strictly default-expand-all node-key="id" ref="treeRole"
            :default-checked-keys="roleTreeObj" :props="props">
          </el-tree>
          <template #footer>
            <span class="dialog-footer">
@@ -171,24 +88,12 @@
          </avue-form>
        </el-dialog>
        <el-dialog title="用户平台配置" append-to-body v-model="platformBox">
          <avue-crud
            :option="platformOption"
            :table-loading="platformLoading"
            :data="platformData"
            ref="platformCrud"
            v-model="platformForm"
            :before-open="platformBeforeOpen"
            v-model:page="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"
          >
          <avue-crud :option="platformOption" :table-loading="platformLoading" :data="platformData" ref="platformCrud"
            v-model="platformForm" :before-open="platformBeforeOpen" v-model:page="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 #tenantName="{ row }">
              <el-tag>{{ row.tenantName }}</el-tag>
            </template>
@@ -286,7 +191,12 @@
        lazy: true,
        treeLoad: function (node, resolve) {
          const parentId = node.level === 0 ? 0 : node.data.id;
          getDeptLazyTree(parentId).then(res => {
          console.log(node,666)
          const param = {
            parentId:parentId,
            level:node.level
          }
          getDeptLazyTree(param).then(res => {
            resolve(
              res.data.data.map(item => {
                return {
@@ -327,12 +237,12 @@
            search: true,
            display: false,
          },
          {
            label: '所属租户',
            prop: 'tenantName',
            slot: true,
            display: false,
          },
          // {
          //   label: '所属租户',
          //   prop: 'tenantName',
          //   slot: true,
          //   display: false,
          // },
          {
            label: '用户姓名',
            prop: 'realName',
@@ -351,33 +261,33 @@
            slot: true,
            display: false,
          },
          {
            label: '用户平台',
            prop: 'userTypeName',
            slot: true,
            display: false,
          },
          {
            label: '用户平台',
            type: 'select',
            dicUrl: '/blade-system/dict/dictionary?code=user_type',
            props: {
              label: 'dictValue',
              value: 'dictKey',
            },
            dataType: 'number',
            search: true,
            hide: true,
            display: false,
            prop: 'userType',
            rules: [
              {
                required: true,
                message: '请选择用户平台',
                trigger: 'blur',
              },
            ],
          },
          // {
          //   label: '用户平台',
          //   prop: 'userTypeName',
          //   slot: true,
          //   display: false,
          // },
          // {
          //   label: '用户平台',
          //   type: 'select',
          //   dicUrl: '/blade-system/dict/dictionary?code=user_type',
          //   props: {
          //     label: 'dictValue',
          //     value: 'dictKey',
          //   },
          //   dataType: 'number',
          //   search: true,
          //   hide: true,
          //   display: false,
          //   prop: 'userType',
          //   rules: [
          //     {
          //       required: true,
          //       message: '请选择用户平台',
          //       trigger: 'blur',
          //     },
          //   ],
          // },
        ],
        group: [
          {
@@ -385,28 +295,28 @@
            prop: 'baseInfo',
            icon: 'el-icon-user-solid',
            column: [
              {
                label: '所属租户',
                prop: 'tenantId',
                type: 'tree',
                dicUrl: '/blade-system/tenant/select',
                props: {
                  label: 'tenantName',
                  value: 'tenantId',
                },
                hide: !website.tenantMode,
                addDisplay: website.tenantMode,
                editDisplay: website.tenantMode,
                viewDisplay: website.tenantMode,
                rules: [
                  {
                    required: true,
                    message: '请输入所属租户',
                    trigger: 'click',
                  },
                ],
                span: 24,
              },
              // {
              //   label: '所属租户',
              //   prop: 'tenantId',
              //   type: 'tree',
              //   dicUrl: '/blade-system/tenant/select',
              //   props: {
              //     label: 'tenantName',
              //     value: 'tenantId',
              //   },
              //   hide: !website.tenantMode,
              //   addDisplay: website.tenantMode,
              //   editDisplay: website.tenantMode,
              //   viewDisplay: website.tenantMode,
              //   rules: [
              //     {
              //       required: true,
              //       message: '请输入所属租户',
              //       trigger: 'click',
              //     },
              //   ],
              //   span: 24,
              // },
              {
                label: '登录账号',
                prop: 'account',
@@ -418,25 +328,25 @@
                  },
                ],
              },
              {
                label: '用户平台',
                type: 'select',
                dicUrl: '/blade-system/dict/dictionary?code=user_type',
                props: {
                  label: 'dictValue',
                  value: 'dictKey',
                },
                dataType: 'number',
                slot: true,
                prop: 'userType',
                rules: [
                  {
                    required: true,
                    message: '请选择用户平台',
                    trigger: 'blur',
                  },
                ],
              },
              // {
              //   label: '用户平台',
              //   type: 'select',
              //   dicUrl: '/blade-system/dict/dictionary?code=user_type',
              //   props: {
              //     label: 'dictValue',
              //     value: 'dictKey',
              //   },
              //   dataType: 'number',
              //   slot: true,
              //   prop: 'userType',
              //   rules: [
              //     {
              //       required: true,
              //       message: '请选择用户平台',
              //       trigger: 'blur',
              //     },
              //   ],
              // },
              {
                label: '密码',
                prop: 'password',
@@ -452,6 +362,13 @@
                editDisplay: false,
                viewDisplay: false,
                rules: [{ required: true, validator: validatePass2, trigger: 'blur' }],
              },
              {
                label: '到期时间',
                prop: 'expireTime',
                type: 'datetime',
                format: 'YYYY-MM-DD HH:mm:ss',
                valueFormat: 'YYYY-MM-DD HH:mm:ss',
              },
            ],
          },
@@ -569,8 +486,12 @@
                type: 'tree',
                multiple: true,
                dicData: [],
                // props: {
                //   label: 'title',
                // },
                props: {
                  label: 'title',
                  label: 'name',
                  value: 'id',
                },
                checkStrictly: true,
                slot: true,
@@ -582,24 +503,24 @@
                  },
                ],
              },
              {
                label: '所属岗位',
                prop: 'postId',
                type: 'tree',
                multiple: true,
                dicData: [],
                props: {
                  label: 'postName',
                  value: 'id',
                },
                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',
              //     },
              //   ],
              // },
            ],
          },
        ],
@@ -776,6 +697,7 @@
    if (!website.tenantMode) {
      this.initData(website.tenantId);
    }
    this.initData(this.form.tenantId);
  },
  methods: {
    nodeClick(data) {
@@ -784,6 +706,7 @@
      this.onLoad(this.page);
    },
    initData(tenantId) {
      tenantId = '000000';
      getRoleTree(tenantId).then(res => {
        const column = this.findObject(this.option.group, 'roleId');
        column.dicData = res.data.data;
@@ -792,10 +715,10 @@
        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;
      });
      // 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(',');
@@ -1034,8 +957,7 @@
      }).then(() => {
        NProgress.start();
        exportBlob(
          `/blade-system/user/export-user?${
            this.website.tokenHeader
          `/blade-system/user/export-user?${this.website.tokenHeader
          }=${getToken()}&account=${account}&realName=${realName}`
        ).then(res => {
          downloadXls(res.data, `用户数据表${this.$dayjs().format('YYYY-MM-DD')}.xlsx`);