Просмотр исходного кода

fix: 修复账号管理添加交付管理员逻辑

qindao 1 год назад
Родитель
Сommit
af7393792e

+ 9 - 2
src/layout/components/Header/SwitchTenant.vue

@@ -2,8 +2,15 @@
 <template>
   <div class="switchTenantLable-wrapper" v-if="options.length > 0">
     <div class="switchTenantLable">选择租户</div>
-    <el-tree-select v-model="currentTenant" :data="options" check-strictly placeholder="请选择租户"
-      @update:modelValue="handleChange" />
+    <el-tree-select
+      v-model="currentTenant"
+      :data="options"
+      check-strictly
+      show-all-levels
+      default-expand-all
+      placeholder="请选择租户"
+      @update:modelValue="handleChange"
+    />
   </div>
 </template>
 <script lang="ts" setup>

+ 2 - 8
src/layout/components/Header/index.vue

@@ -382,16 +382,10 @@
           message: '成功退出登录',
         });
         // 移除标签页
-        localStorage.removeItem(TABS_ROUTES);
+        localStorage.clear();
+        sessionStorage.clear();
         asyncRouteStore.setDynamicAddedRoute(false);
-        // router.replace({
-        //   name: BASE_LOGIN_NAME,
-        //   query: {
-        //     redirect: route.fullPath,
-        //   },
-        // });
         const logoutUrl = getLogoutUrl();
-        console.log('logoutUrl', logoutUrl);
         window.location.href = logoutUrl;
       });
     });

+ 8 - 7
src/views/auth/dept/CreateDrawer.vue

@@ -1,5 +1,5 @@
 <template>
-  <el-drawer v-model="isDrawer" :size="width" :title="title" @close="handleReset">
+  <el-drawer v-model="isDrawer" :size="width" :title="title" @close="handleReset" >
     <el-form
       :model="formParams"
       :rules="rules"
@@ -37,8 +37,9 @@
 </template>
 
 <script lang="ts" setup>
-  import { ref, computed, watch } from 'vue';
+  import { ref, computed, watch, reactive } from 'vue';
   import { ElMessage } from 'element-plus';
+  import type { FormInstance, FormRules } from 'element-plus'
   import type { editDeptProps } from '@/types/dept/type';
   import { updateDepartments, saveDept } from '@/api/auth/dept';
   import { replaceParams } from '@/utils/helper/treeHelper';
@@ -56,13 +57,13 @@
     title: '添加部门',
     width: 450,
   });
-  const rules = {
+  const rules = reactive<FormRules>({
     deptName: {
       required: true,
       message: '部门名称不能为空',
       trigger: 'blur',
     },
-  };
+  });
   const defaultValueRef = () => ({
     id: null,
     parentId: null,
@@ -72,7 +73,7 @@
   });
 
   const message = ElMessage;
-  const formRef: any = ref(null);
+  const formRef = ref<FormInstance>();
   const isDrawer = ref(false);
   const subLoading = ref(false);
 
@@ -97,7 +98,7 @@
   }
 
   function formSubmit() {
-    formRef.value.validate((valid) => {
+    formRef.value?.validate((valid) => {
       if (!valid) {
         return message.error('请填写完整信息');
       }
@@ -124,7 +125,7 @@
   }
 
   function handleReset() {
-    formRef.value.resetFields();
+    formRef.value?.resetFields();
     formParams.value = Object.assign(formParams.value, defaultValueRef());
   }
 

+ 1 - 1
src/views/system/user/CreateAdminDrawer.vue

@@ -161,7 +161,7 @@
         formParams.value.isDisabled
           ? (params.isDisabled = DisabledEnum.NO)
           : (params.isDisabled = DisabledEnum.YES);
-        if (isSysTenant) {
+        if (!isSysTenant) {
           addTenantAdmin(params).then((res) => {
             message.success('添加管理员账户成功');
             emit('change');

+ 83 - 66
src/views/system/user/user.vue

@@ -1,30 +1,25 @@
 <template>
   <div class="user-page">
-    <SearchForm
-      ref="searchFormRef"
-      :departmentList="departmentList"
-      :roleData="roleData"
-      @get-table-data="onSearchCommit"
-      @reset-form="onResetForm"
-    />
+    <SearchForm ref="searchFormRef" :departmentList="departmentList" :roleData="roleData"
+      @get-table-data="onSearchCommit" @reset-form="onResetForm" />
     <el-card>
       <template #header>
         <el-space align="center">
-          <el-button type="primary" @click="openAddSingleDrawer">
+          <el-button @click="openAddAdminDrawer" v-if="!isSysTenant && isCanAddTenant">
             <template #icon>
               <el-icon>
                 <Plus />
               </el-icon>
             </template>
-            添加用户
+            添加租户管理员
           </el-button>
-          <el-button @click="openAddAdminDrawer" v-if="!isSysTenant">
+          <el-button type="primary" @click="openAddSingleDrawer">
             <template #icon>
               <el-icon>
                 <Plus />
               </el-icon>
             </template>
-            添加租户管理员
+            添加用户
           </el-button>
           <el-button color="#1890FF" @click="openAddMultipleDrawer" style="margin-left: 18px" plain>
             <template #icon>
@@ -40,33 +35,49 @@
       <el-table height="calc(100vh - 340px)" :data="userList">
         <el-table-column label="工号" prop="staffNo">
           <template #default="scope">
-            <div style="display: flex; align-items: center">
+            <div>
               <span style="margin-left: 10px">{{ scope.row.staffNo }}</span>
             </div>
           </template>
         </el-table-column>
-        <el-table-column label="登录账号" prop="username" />
+        <el-table-column label="登录账号" prop="username" >
+          <template #default="scope">
+            <div >
+            {{ scope.row.username }}
+             <el-tooltip
+              class="box-item"
+              effect="dark"
+              content="该账号为租户管理员账号,自动拥有全部相机的查看权限,其他账号无耻功能"
+              placement="top-start"
+              v-if="scope.row.roleType === RoleTypeEnum.TENANT_ADMIN"
+            >
+              <el-icon color="#409efc">
+                <WarningFilled />
+              </el-icon>
+            </el-tooltip>
+            </div>
+          </template>
+        </el-table-column>
         <el-table-column label="姓名" prop="realname" />
         <el-table-column label="手机" prop="mobile" />
         <el-table-column label="状态" prop="isDisabled">
           <template #default="scope">
-            <div style="display: flex; align-items: center">
+            <div >
               <el-tag :type="!scope.row.isDisabled ? 'success' : 'danger'">
-                {{ !scope.row.isDisabled ? '正常' : '锁定' }}</el-tag
-              >
+                {{ !scope.row.isDisabled ? '正常' : '锁定' }}</el-tag>
             </div>
           </template>
         </el-table-column>
         <el-table-column label="角色" prop="roleList">
           <template #default="scope">
-            <div style="display: flex; align-items: center">
+            <div>
               {{ tranformRoleList(scope.row.roleList) }}
             </div>
           </template>
         </el-table-column>
         <el-table-column label="组织" prop="deptList">
           <template #default="scope">
-            <div style="display: flex; align-items: center">
+            <div >
               {{ tranformDeptList(scope.row.deptList) }}
             </div>
           </template>
@@ -76,64 +87,42 @@
         <el-table-column label="操作" width="200">
           <template #default="scope">
             <el-space v-if="scope.row.roleType !== RoleTypeEnum.SUPER_ADMIN">
-              <el-button type="primary" :icon="Edit" text @click="handleEdit(scope.row)" />
-              <el-button type="primary" :icon="Delete" text @click="handleDelete(scope.row.id)" />
-              <el-button
-                type="primary"
-                v-if="visibleRestPassBtn(scope.row.roleType)"
-                text
-                @click="handleResetCode(scope.row)"
-                >重置密码</el-button
-              >
+              <div class="el-space el-space--horizontal">
+                <div class="el-space__item"  @click="handleEdit(scope.row)" >
+                  <div><img :src="editIcon" class="el-tooltip__trigger" ></div>
+                </div>
+                <div class="el-space__item" @click="handleDelete(scope.row)">
+                  <div><img :src="deleteIcon" class="el-tooltip__trigger"></div>
+                </div>
+                <div class="el-space__item" v-if="visibleRestPassBtn(scope.row.roleType)" @click="handleResetCode(scope.row)">
+                  <div class="tooltip__password">重置密码</div>
+                </div>
+              </div>
             </el-space>
           </template>
         </el-table-column>
       </el-table>
 
       <section class="mt-4 flex justify-end">
-        <el-pagination
-          background
-          layout="total, sizes, prev, pager, next"
-          :page-sizes="[10, 30, 50]"
-          :total="total"
-          v-model:page-size="params.pageSize"
-          v-model:current-page="params.pageNumber"
-          @change="loadPageData"
-        />
+        <el-pagination background layout="total, sizes, prev, pager, next" :page-sizes="[10, 30, 50]" :total="total"
+          v-model:page-size="params.pageSize" v-model:current-page="params.pageNumber" @change="loadPageData" />
       </section>
     </el-card>
-    <CreateDrawer
-      ref="createDrawerRef"
-      :title="drawerTitle"
-      @change="reloadTable"
-      :departmentList="departmentList"
-      :roleData="roleData"
-      :width="450"
-    />
+    <CreateDrawer ref="createDrawerRef" :title="drawerTitle" @change="reloadTable" :departmentList="departmentList"
+      :roleData="roleData" :width="450" />
     <ResetCodeDrawer ref="ResetCodeDrawerRef" :title="drawerTitle" @change="reloadTable" />
-    <CreateAdminDrawer
-      ref="createAdminDrawerRef"
-      :title="createAdminTitle"
-      @change="reloadTable"
-      :editType="createAdminType"
-      :roleData="roleData"
-      :width="450"
-    />
-    <AddUser
-      v-if="showAddPopover"
-      :colseAddUser="setShowAddPopoverFalse"
-      v-model="showAddPopover"
-      class="add-popover"
-      @change="reloadTable"
-    />
+    <CreateAdminDrawer ref="createAdminDrawerRef" :title="createAdminTitle" @change="reloadTable"
+      :editType="createAdminType" :roleData="roleData" :width="450" />
+    <AddUser v-if="showAddPopover" :colseAddUser="setShowAddPopoverFalse" v-model="showAddPopover" class="add-popover"
+      @change="reloadTable" />
   </div>
 </template>
 
 <script lang="ts" setup>
   import { reactive, ref, onMounted } from 'vue';
+  import { storeToRefs } from 'pinia';
   import { ElMessage, ElMessageBox } from 'element-plus';
-  import { Plus, DocumentAdd, Edit, Delete } from '@element-plus/icons-vue';
-  import { isEmpty } from 'lodash-es';
+  import { Plus, DocumentAdd, Edit, Delete, WarningFilled } from '@element-plus/icons-vue';
   import { EditType, OptionsProps, SearchParamsProps } from './types';
   import { RoleTypeEnum } from '@/types/role/constants';
   import useSceneInfos from '@/hooks/useSceneInfos';
@@ -142,6 +131,7 @@
   import { getUserList, UserLisItem, deleteUser } from '@/api/system/user-operate';
   import { ResultEnum } from '@/enums/httpEnum';
   import { useTargetTenantIdSetting } from '@/utils/useTargetTenantIdSetting';
+  import { useUserStore } from '@/store/modules/user';
   import type { RoleListItem } from '@/api/system/user-operate';
   import type { DeptTreeItem } from '@/api/system/user-query';
   import SearchForm from './component/SearchForm.vue';
@@ -149,7 +139,11 @@
   import CreateDrawer from './CreateDrawer.vue';
   import ResetCodeDrawer from './ResetCodeDrawer.vue';
   import CreateAdminDrawer from './CreateAdminDrawer.vue';
+  import editIcon from '@/assets/images/reportmessage/edit.png';
+  import deleteIcon from '@/assets/images/reportmessage/delete.png';
 
+  const userStore = useUserStore();
+  const { getUserInfo } = storeToRefs(userStore);
   const sceneInfos = useSceneInfos();
   const { calculateTreeData } = sceneInfos;
   const userList = ref<UserLisItem[]>([]);
@@ -163,14 +157,19 @@
   const departmentList = ref<OptionsProps[]>([]);
   const createAdminType = ref(EditType.create);
   const { isSysTenant } = useTargetTenantIdSetting();
-
+  
   function reloadTable() {
     loadPageData();
   }
 
+  // 当前用户类型
+  const currrentRoleType = getUserInfo.value.roleType;
+  // 是否拥有添加租户管理人员权限,条件:1.系统用户,2.选择租户切换到租户选项
+  const isCanAddTenant = currrentRoleType === RoleTypeEnum.SUPER_ADMIN || RoleTypeEnum.USER;
   const openAddSingleDrawer = () => {
     drawerTitle.value = '添加用户';
     if (isSysTenant) {
+      createAdminTitle.value = '添加用户';
       createAdminType.value = EditType.create;
       createAdminDrawerRef.value?.openDrawer();
     } else {
@@ -271,10 +270,10 @@
   const loadPageData = () => {
     const searchFormData = searchFormRef.value?.getSearchFromData();
     if (searchFormData) {
-      const { queryType, queryTypeContent } = searchFormData;
-      Object.entries(searchFormData).forEach(([key, value]) => {
-        if (!isEmpty(value)) {
-          if (['deptId, roleId'].includes(key)) {
+      const { queryType, queryTypeContent} = searchFormData;
+      Object.entries(searchFormData).forEach(([key, value]) => { 
+        if (value) {
+          if (['deptId', 'roleId'].includes(key)) {
             params.queryParam[key] = value;
           }
           params.queryParam[queryType] = queryTypeContent;
@@ -344,4 +343,22 @@
     margin-left: -297px;
     z-index: 99;
   }
+
+  .el-space--horizontal {
+    align-items: center; 
+    gap: 0px 20px;
+  }
+
+  .el-tooltip__trigger {
+    width: 16px;
+  }
+
+  .tooltip__password {
+    color: var(--el-color-primary);
+  }
+  .box-item{
+    position: absolute;
+    top: 0;
+    right: 0;
+  }
 </style>