|
|
@@ -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>
|