|
|
@@ -1,13 +1,17 @@
|
|
|
<template>
|
|
|
<div class="user-page">
|
|
|
- <UserQuery :departmentList="departmentList" />
|
|
|
+ <SearchForm ref="searchFormRef"
|
|
|
+ :departmentList="departmentList"
|
|
|
+ :roleData="roleData"
|
|
|
+ @get-table-data="onSearchCommit"
|
|
|
+ @reset-form="onResetForm"/>
|
|
|
<div class="user-list">
|
|
|
<BasicTable
|
|
|
:columns="columns"
|
|
|
:data-source="userList"
|
|
|
:row-key="(row) => row.userId"
|
|
|
ref="basicTableRef"
|
|
|
- :pagination="{ total: totalCount, pageSize: pageSize, hideOnSinglePage: false }"
|
|
|
+ :pagination="{ total: total, pageSize: params.pageSize, hideOnSinglePage: false }"
|
|
|
:actionColumn="actionColumn"
|
|
|
:tableSetting="{
|
|
|
size: false,
|
|
|
@@ -31,7 +35,7 @@
|
|
|
</template>
|
|
|
添加用户
|
|
|
</el-button>
|
|
|
- <el-button @click="openAddAdminDrawer" v-if="userStore?.info?.username === ROOT_USER">
|
|
|
+ <el-button @click="openAddAdminDrawer" v-if="isSysTenant">
|
|
|
<template #icon>
|
|
|
<el-icon>
|
|
|
<Plus />
|
|
|
@@ -61,14 +65,17 @@
|
|
|
:title="drawerTitle"
|
|
|
@change="reloadTable"
|
|
|
:departmentList="departmentList"
|
|
|
+ :roleData="roleData"
|
|
|
+ :width="450"
|
|
|
/>
|
|
|
<ResetCodeDrawer ref="ResetCodeDrawerRef" :title="drawerTitle" @change="reloadTable" />
|
|
|
<CreateAdminDrawer
|
|
|
- v-if="userStore?.info?.username === ROOT_USER"
|
|
|
- ref="createAdminDrawer"
|
|
|
+ ref="createAdminDrawerRef"
|
|
|
:title="createAdminTitle"
|
|
|
@change="reloadTable"
|
|
|
:editType="createAdminType"
|
|
|
+ :roleData="roleData"
|
|
|
+ :width="450"
|
|
|
/>
|
|
|
<AddUser
|
|
|
v-if="showAddPopover"
|
|
|
@@ -81,63 +88,64 @@
|
|
|
</template>
|
|
|
|
|
|
<script lang="ts" setup>
|
|
|
- import { h, reactive, ref, onMounted, onBeforeUnmount } from 'vue';
|
|
|
- import { BasicTable, BasicColumn } from '@/components/Table';
|
|
|
+ import { h, reactive, ref, computed, onMounted } from 'vue';
|
|
|
+ import { ElMessage, ElMessageBox } from 'element-plus';
|
|
|
+ import { storeToRefs } from 'pinia';
|
|
|
import { Plus, DocumentAdd } from '@element-plus/icons-vue';
|
|
|
- import { roleAllList } from '@/api/system/role';
|
|
|
+ import { isEmpty } from 'lodash-es';
|
|
|
import editIcon from '@/assets/images/table/table-edit.png';
|
|
|
import deleteIcon from '@/assets/images/table/table-delete.png';
|
|
|
import { useUserStore } from '@/store/modules/user';
|
|
|
+ import { BasicTable, BasicColumn } from '@/components/Table';
|
|
|
+ import { columns } from './columns';
|
|
|
+ // import useUser from './hooks/use-user';
|
|
|
+ import { EditType, OptionsProps, SearchParamsProps } from './types';
|
|
|
+ import { RoleTypeEnum } from '@/types/role/constants';
|
|
|
+ import useSceneInfos from '@/hooks/useSceneInfos';
|
|
|
+ import { getAllDepartments, DeptTreeItem } from '@/api/system/user-query';
|
|
|
+ import { getRoles } from '@/api/system/role';
|
|
|
+ import { getUserList, UserLisItem, deleteUser } from '@/api/system/user-operate';
|
|
|
+ import { ResultEnum } from '@/enums/httpEnum';
|
|
|
+ import { useTargetTenantIdSetting } from '@/utils/useTargetTenantIdSetting';
|
|
|
+ import SearchForm from './component/SearchForm.vue';
|
|
|
+ import AddUser from './component/AddUser.vue';
|
|
|
+ import ActionColomns from './component/ActionColomns.vue';
|
|
|
import CreateDrawer from './CreateDrawer.vue';
|
|
|
import ResetCodeDrawer from './ResetCodeDrawer.vue';
|
|
|
import CreateAdminDrawer from './CreateAdminDrawer.vue';
|
|
|
- import { columns } from './columns';
|
|
|
- import ActionColomns from './component/ActionColomns.vue';
|
|
|
- import AddUser from './component/AddUser.vue';
|
|
|
- // import { Search } from '@element-plus/icons-vue';
|
|
|
- import UserQuery from './component/UserQuery.vue';
|
|
|
- import useUser from './hooks/use-user';
|
|
|
- import { storeToRefs } from 'pinia';
|
|
|
- import { EditType } from './types';
|
|
|
- import { ROOT_USER } from './types';
|
|
|
- import { deptTreeList } from '@/api/auth/dept';
|
|
|
- import useSceneInfos from '@/hooks/useSceneInfos';
|
|
|
- import { ElMessage, ElMessageBox } from 'element-plus';
|
|
|
- // import { TreeProps,ElTreeItem } from 'element-plus/es/components/tree-v2/src/types';
|
|
|
-
|
|
|
+
|
|
|
const sceneInfos = useSceneInfos();
|
|
|
const { calculateTreeData } = sceneInfos;
|
|
|
-
|
|
|
- const useUserDetail = useUser();
|
|
|
- const { userList, page, pageSize, totalCount } = storeToRefs(useUserDetail);
|
|
|
- const { conditionSearch, userDel, getList, resetArgs } = useUserDetail;
|
|
|
-
|
|
|
+ // const useUserDetail = useUser();
|
|
|
+ // const { page, pageSize } = storeToRefs(useUserDetail);
|
|
|
const userStore = useUserStore();
|
|
|
-
|
|
|
- const basicTableRef = ref();
|
|
|
+ const userInfo: object = userStore.getUserInfo || {};
|
|
|
+ const isSuperAdmin = computed(() => userInfo['roleType'] === RoleTypeEnum.SUPER_ADMIN);
|
|
|
+ const username = computed(() => userInfo['username']);
|
|
|
+ const userList = ref<UserLisItem[]>([]);
|
|
|
+ const searchFormRef = ref<InstanceType<typeof SearchForm>>();
|
|
|
+ const basicTableRef = ref<InstanceType<typeof BasicTable>>();
|
|
|
+ const createDrawerRef = ref<InstanceType<typeof CreateDrawer>>();
|
|
|
+ const ResetCodeDrawerRef = ref<InstanceType<typeof ResetCodeDrawer>>();
|
|
|
+ const createAdminDrawerRef = ref<InstanceType<typeof CreateAdminDrawer>>();
|
|
|
const rowKeys = ref([]);
|
|
|
const rowKeysName = ref([]);
|
|
|
const tableData = ref();
|
|
|
- const createDrawerRef = ref();
|
|
|
- const ResetCodeDrawerRef = ref();
|
|
|
- const createAdminDrawer = ref();
|
|
|
const drawerTitle = ref('添加用户');
|
|
|
const createAdminTitle = ref('添加租户管理员');
|
|
|
- const roleData = ref([]);
|
|
|
- const departmentList = ref<any[]>([]);
|
|
|
-
|
|
|
+ const roleData = ref<OptionsProps[]>([]);
|
|
|
+ const departmentList = ref<OptionsProps[]>([]);
|
|
|
const createAdminType = ref(EditType.create);
|
|
|
+ const { isSysTenant } = useTargetTenantIdSetting();
|
|
|
|
|
|
const handlePageNumChange = (pageNum) => {
|
|
|
- console.log('pageNum', pageNum);
|
|
|
-
|
|
|
page.value = pageNum;
|
|
|
- conditionSearch();
|
|
|
+ loadPageData();
|
|
|
};
|
|
|
const handlePageSizeChange = (size) => {
|
|
|
page.value = 1;
|
|
|
pageSize.value = size;
|
|
|
- conditionSearch();
|
|
|
+ loadPageData();
|
|
|
};
|
|
|
|
|
|
const actionColumn: BasicColumn = reactive({
|
|
|
@@ -152,7 +160,7 @@
|
|
|
color: '#629bf9',
|
|
|
style: 'img',
|
|
|
size: 16,
|
|
|
- actionIcons: [
|
|
|
+ actionIcons: ( record.row.roleType !== RoleTypeEnum.SUPER_ADMIN ?[
|
|
|
{
|
|
|
label: '编辑',
|
|
|
icon: editIcon,
|
|
|
@@ -167,7 +175,12 @@
|
|
|
label: '重置密码',
|
|
|
onClick: handleResetCode.bind(null, record.row),
|
|
|
},
|
|
|
- ],
|
|
|
+ ] : [
|
|
|
+ {
|
|
|
+ label: '重置密码',
|
|
|
+ onClick: handleResetCode.bind(null, record.row),
|
|
|
+ },
|
|
|
+ ]),
|
|
|
});
|
|
|
},
|
|
|
});
|
|
|
@@ -185,25 +198,27 @@
|
|
|
}
|
|
|
|
|
|
function reloadTable() {
|
|
|
- conditionSearch();
|
|
|
+ loadPageData()
|
|
|
}
|
|
|
|
|
|
const openAddSingleDrawer = () => {
|
|
|
drawerTitle.value = '添加用户';
|
|
|
- const { openDrawer } = createDrawerRef.value;
|
|
|
- openDrawer();
|
|
|
+ if (!isSysTenant.value) {
|
|
|
+ createAdminDrawerRef.value?.openDrawer();
|
|
|
+ } else {
|
|
|
+ createDrawerRef.value?.openDrawer();
|
|
|
+ }
|
|
|
+
|
|
|
};
|
|
|
const openAddAdminDrawer = () => {
|
|
|
createAdminTitle.value = '添加租户管理员';
|
|
|
- const { openDrawer } = createAdminDrawer.value;
|
|
|
- openDrawer();
|
|
|
+ createAdminDrawerRef.value?.openDrawer();
|
|
|
+ createAdminType.value = EditType.create;
|
|
|
};
|
|
|
|
|
|
const showAddPopover = ref<boolean>(false);
|
|
|
-
|
|
|
const openAddMultipleDrawer = () => {
|
|
|
showAddPopover.value = true;
|
|
|
- console.log('showAddPopover', showAddPopover.value);
|
|
|
};
|
|
|
|
|
|
//传个方法到子组件,当上传成功后把showAddPopover的值改为false;
|
|
|
@@ -212,37 +227,36 @@
|
|
|
};
|
|
|
|
|
|
function handleEdit(record: Recordable) {
|
|
|
- console.log('点击了编辑', record);
|
|
|
drawerTitle.value = '编辑用户';
|
|
|
- const { openDrawer } = createDrawerRef.value;
|
|
|
- openDrawer(record.userId);
|
|
|
+ if (record.roleType === RoleTypeEnum.TENANT_ADMIN) {
|
|
|
+ createAdminDrawerRef.value?.openDrawer(record.id);
|
|
|
+ createAdminType.value = EditType.edit;
|
|
|
+ } else {
|
|
|
+ createDrawerRef.value?.openDrawer(record.id);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
function handleResetCode(record: Recordable) {
|
|
|
drawerTitle.value = '重置密码';
|
|
|
- const { openDrawer } = ResetCodeDrawerRef.value;
|
|
|
- openDrawer(record.username, record.userId);
|
|
|
+ ResetCodeDrawerRef.value?.openDrawer(record.username, record.id);
|
|
|
}
|
|
|
|
|
|
function handleDelete(record: Recordable) {
|
|
|
- const delDetail = {
|
|
|
- userId: record.userId,
|
|
|
- nickname: record.nickname,
|
|
|
- username: record.username,
|
|
|
- mobile: record.mobile,
|
|
|
- staffNo: record.staffNo,
|
|
|
- };
|
|
|
ElMessageBox.confirm('确认要删除该用户吗', {
|
|
|
confirmButtonText: '确认',
|
|
|
cancelButtonText: '取消',
|
|
|
type: 'warning',
|
|
|
})
|
|
|
.then(() => {
|
|
|
- userDel(delDetail);
|
|
|
- ElMessage({
|
|
|
- type: 'success',
|
|
|
- message: '删除成功',
|
|
|
- });
|
|
|
+ deleteUser({ userId: record.id }).then(res => {
|
|
|
+ if (res.code === ResultEnum.SUCCESS) {
|
|
|
+ ElMessage({
|
|
|
+ type: 'success',
|
|
|
+ message: '删除成功',
|
|
|
+ });
|
|
|
+ loadPageData()
|
|
|
+ }
|
|
|
+ })
|
|
|
})
|
|
|
.catch(() => {
|
|
|
ElMessage({
|
|
|
@@ -253,26 +267,78 @@
|
|
|
}
|
|
|
|
|
|
onMounted(async () => {
|
|
|
- getList();
|
|
|
- deptTreeList().then((res) => {
|
|
|
+ loadPageData()
|
|
|
+ getAllDepartments().then((res) => {
|
|
|
departmentList.value = calculateTreeData(
|
|
|
res,
|
|
|
{ level: 3, valueKey: 'deptId', labelKey: 'deptName' },
|
|
|
1,
|
|
|
);
|
|
|
});
|
|
|
- const res = await roleAllList();
|
|
|
- roleData.value = res.list.map((item: any) => {
|
|
|
+ const res = await getRoles() || [];
|
|
|
+ roleData.value = res.map((item: any) => {
|
|
|
return {
|
|
|
- value: item.roleId,
|
|
|
- label: item.roleName,
|
|
|
+ value: item.id,
|
|
|
+ label: item.roleName + 'test',
|
|
|
};
|
|
|
});
|
|
|
});
|
|
|
|
|
|
- onBeforeUnmount(() => {
|
|
|
- resetArgs();
|
|
|
- });
|
|
|
+ // 基本参数
|
|
|
+ const params = reactive<SearchParamsProps>({
|
|
|
+ pageNumber: 1,
|
|
|
+ pageSize: 10,
|
|
|
+ queryParam: {
|
|
|
+ username: username.value
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ // 获取页面数据
|
|
|
+ const total = ref(0);
|
|
|
+ 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)) {
|
|
|
+ params.queryParam[key] = value
|
|
|
+ }
|
|
|
+ params.queryParam[queryType] = queryTypeContent;
|
|
|
+ }
|
|
|
+ })
|
|
|
+ // 删除多余参数
|
|
|
+ delteExtraParams(queryType);
|
|
|
+ getUserList(params).then(res => {
|
|
|
+ userList.value = res.records;
|
|
|
+ userList.value.forEach(item =>{item.certify = "本地认证";})
|
|
|
+ total.value = res.totalPage;
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ const extraParams = ['realname', 'mobile', 'staffNo'];
|
|
|
+ const delteExtraParams = (type) => {
|
|
|
+ const needDeleteArr = extraParams.filter(item => item !== type);
|
|
|
+ needDeleteArr.forEach(item => {
|
|
|
+ delete params.queryParam[item];
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取列表数据
|
|
|
+ const onSearchCommit = () => {
|
|
|
+ loadPageData();
|
|
|
+ };
|
|
|
+
|
|
|
+ // 重置列表数据
|
|
|
+ const onResetForm = () => {
|
|
|
+ params.pageNumber = 1;
|
|
|
+ params.pageSize = 10
|
|
|
+ params.queryParam = {
|
|
|
+ username: username.value
|
|
|
+ }
|
|
|
+ loadPageData();
|
|
|
+ }
|
|
|
</script>
|
|
|
<style scoped>
|
|
|
.user-page {
|