2022-03-10 09:47:29 +08:00
|
|
|
|
<template>
|
|
|
|
|
<!--引用表格-->
|
|
|
|
|
<BasicTable @register="registerTable" :rowSelection="rowSelection">
|
|
|
|
|
<!--插槽:table标题-->
|
|
|
|
|
<template #tableTitle>
|
|
|
|
|
<a-button type="primary" preIcon="ant-design:plus-outlined" @click="selectAddUser">添加已有用户</a-button>
|
|
|
|
|
<a-button type="primary" preIcon="ant-design:plus-outlined" @click="createUser">新建用户</a-button>
|
|
|
|
|
<template v-if="selectedRowKeys.length > 0">
|
|
|
|
|
<a-dropdown>
|
|
|
|
|
<template #overlay>
|
|
|
|
|
<a-menu>
|
|
|
|
|
<a-menu-item key="1" @click="onUnlinkDepartUserBatch">
|
2022-06-10 10:44:44 +08:00
|
|
|
|
<icon icon="bx:bx-unlink" />
|
2022-03-10 09:47:29 +08:00
|
|
|
|
<span>取消关联</span>
|
|
|
|
|
</a-menu-item>
|
|
|
|
|
</a-menu>
|
|
|
|
|
</template>
|
|
|
|
|
<a-button>
|
|
|
|
|
<span>批量操作 </span>
|
2022-06-10 10:44:44 +08:00
|
|
|
|
<icon icon="akar-icons:chevron-down" />
|
2022-03-10 09:47:29 +08:00
|
|
|
|
</a-button>
|
|
|
|
|
</a-dropdown>
|
|
|
|
|
</template>
|
|
|
|
|
</template>
|
|
|
|
|
<!-- 插槽:行内操作按钮 -->
|
|
|
|
|
<template #action="{ record }">
|
2022-06-10 10:44:44 +08:00
|
|
|
|
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
|
2022-03-10 09:47:29 +08:00
|
|
|
|
</template>
|
|
|
|
|
</BasicTable>
|
2022-06-10 10:44:44 +08:00
|
|
|
|
<UserDrawer @register="registerDrawer" @success="onUserDrawerSuccess" />
|
|
|
|
|
<DepartRoleUserAuthDrawer @register="registerUserAuthDrawer" />
|
|
|
|
|
<UserSelectModal rowKey="id" @register="registerSelUserModal" @getSelectResult="onSelectUserOk" />
|
2022-03-10 09:47:29 +08:00
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script lang="ts" setup>
|
2022-06-10 10:44:44 +08:00
|
|
|
|
import { computed, inject, ref, unref, watch } from 'vue';
|
|
|
|
|
import { ActionItem, BasicTable, TableAction } from '/@/components/Table';
|
|
|
|
|
import { useModal } from '/@/components/Modal';
|
|
|
|
|
import { useDrawer } from '/@/components/Drawer';
|
|
|
|
|
import { useListPage } from '/@/hooks/system/useListPage';
|
|
|
|
|
|
|
|
|
|
import UserDrawer from '/@/views/system/user/UserDrawer.vue';
|
|
|
|
|
import UserSelectModal from '/@/components/Form/src/jeecg/components/modal/UserSelectModal.vue';
|
|
|
|
|
import DepartRoleUserAuthDrawer from './DepartRoleUserAuthDrawer.vue';
|
|
|
|
|
import { departUserList, linkDepartUserBatch, unlinkDepartUserBatch } from '../depart.user.api';
|
|
|
|
|
import { userInfoColumns, userInfoSearchFormSchema } from '../depart.user.data';
|
|
|
|
|
import { ColEx } from '/@/components/Form/src/types';
|
|
|
|
|
|
|
|
|
|
const prefixCls = inject('prefixCls');
|
|
|
|
|
const props = defineProps({
|
|
|
|
|
data: { require: true, type: Object },
|
|
|
|
|
});
|
|
|
|
|
// 当前选中的部门ID,可能会为空,代表未选择部门
|
|
|
|
|
const departId = computed(() => props.data?.id);
|
|
|
|
|
|
|
|
|
|
// 自适应列配置
|
|
|
|
|
const adaptiveColProps: Partial<ColEx> = {
|
|
|
|
|
xs: 24, // <576px
|
|
|
|
|
sm: 24, // ≥576px
|
|
|
|
|
md: 24, // ≥768px
|
|
|
|
|
lg: 12, // ≥992px
|
|
|
|
|
xl: 12, // ≥1200px
|
|
|
|
|
xxl: 8, // ≥1600px
|
|
|
|
|
};
|
|
|
|
|
// 列表页面公共参数、方法
|
|
|
|
|
const { tableContext, createMessage } = useListPage({
|
|
|
|
|
tableProps: {
|
|
|
|
|
api: departUserList,
|
|
|
|
|
columns: userInfoColumns,
|
|
|
|
|
canResize: false,
|
|
|
|
|
formConfig: {
|
|
|
|
|
schemas: userInfoSearchFormSchema,
|
|
|
|
|
baseColProps: adaptiveColProps,
|
|
|
|
|
labelAlign: 'left',
|
|
|
|
|
labelCol: {
|
|
|
|
|
xs: 24,
|
|
|
|
|
sm: 24,
|
|
|
|
|
md: 24,
|
|
|
|
|
lg: 9,
|
|
|
|
|
xl: 7,
|
|
|
|
|
xxl: 5,
|
|
|
|
|
},
|
|
|
|
|
wrapperCol: {},
|
|
|
|
|
// 操作按钮配置
|
|
|
|
|
actionColOptions: {
|
|
|
|
|
...adaptiveColProps,
|
|
|
|
|
style: { textAlign: 'left' },
|
|
|
|
|
},
|
2022-03-10 09:47:29 +08:00
|
|
|
|
},
|
2022-06-10 10:44:44 +08:00
|
|
|
|
// 请求之前对参数做处理
|
|
|
|
|
beforeFetch(params) {
|
|
|
|
|
params.depId = departId.value;
|
2022-03-10 09:47:29 +08:00
|
|
|
|
},
|
|
|
|
|
},
|
2022-06-10 10:44:44 +08:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 注册 ListTable
|
|
|
|
|
const [registerTable, { reload, setProps, setLoading, updateTableDataRecord }, { rowSelection, selectedRowKeys }] = tableContext;
|
|
|
|
|
|
|
|
|
|
watch(
|
|
|
|
|
() => props.data,
|
|
|
|
|
() => reload()
|
|
|
|
|
);
|
|
|
|
|
//注册drawer
|
|
|
|
|
const [registerDrawer, { openDrawer, setDrawerProps }] = useDrawer();
|
|
|
|
|
const [registerUserAuthDrawer, userAuthDrawer] = useDrawer();
|
|
|
|
|
// 注册用户选择 modal
|
|
|
|
|
const [registerSelUserModal, selUserModal] = useModal();
|
|
|
|
|
|
|
|
|
|
// 清空选择的行
|
|
|
|
|
function clearSelection() {
|
|
|
|
|
selectedRowKeys.value = [];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 查看部门角色
|
|
|
|
|
function showDepartRole(record) {
|
|
|
|
|
userAuthDrawer.openDrawer(true, { userId: record.id, departId });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 创建用户
|
|
|
|
|
function createUser() {
|
|
|
|
|
if (!departId.value) {
|
|
|
|
|
createMessage.warning('请先选择一个部门');
|
|
|
|
|
} else {
|
|
|
|
|
openDrawer(true, {
|
|
|
|
|
isUpdate: false,
|
|
|
|
|
departDisabled: true,
|
|
|
|
|
// 初始化负责部门
|
|
|
|
|
nextDepartOptions: { value: props.data?.key, label: props.data?.title },
|
|
|
|
|
record: {
|
|
|
|
|
activitiSync: 1,
|
|
|
|
|
userIdentity: 1,
|
|
|
|
|
selecteddeparts: departId.value,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 查看用户详情
|
|
|
|
|
function showUserDetail(record) {
|
2022-03-10 09:47:29 +08:00
|
|
|
|
openDrawer(true, {
|
2022-06-10 10:44:44 +08:00
|
|
|
|
record,
|
|
|
|
|
isUpdate: true,
|
2022-03-10 09:47:29 +08:00
|
|
|
|
departDisabled: true,
|
2022-06-10 10:44:44 +08:00
|
|
|
|
showFooter: false,
|
|
|
|
|
});
|
2022-03-10 09:47:29 +08:00
|
|
|
|
}
|
2022-06-10 10:44:44 +08:00
|
|
|
|
|
|
|
|
|
// 编辑用户信息
|
|
|
|
|
function editUserInfo(record) {
|
|
|
|
|
openDrawer(true, { isUpdate: true, record, departDisabled: true });
|
2022-03-10 09:47:29 +08:00
|
|
|
|
}
|
2022-06-10 10:44:44 +08:00
|
|
|
|
|
|
|
|
|
// 选择添加已有用户
|
|
|
|
|
function selectAddUser() {
|
|
|
|
|
selUserModal.openModal();
|
2022-03-10 09:47:29 +08:00
|
|
|
|
}
|
|
|
|
|
|
2022-06-10 10:44:44 +08:00
|
|
|
|
// 批量取消关联部门和用户之间的关系
|
|
|
|
|
async function unlinkDepartUser(idList, confirm) {
|
|
|
|
|
if (!departId.value) {
|
|
|
|
|
createMessage.warning('请先选择一个部门');
|
|
|
|
|
} else {
|
|
|
|
|
setLoading(true);
|
|
|
|
|
let userIds = unref(idList).join(',');
|
|
|
|
|
try {
|
|
|
|
|
await unlinkDepartUserBatch({ depId: departId.value, userIds }, confirm);
|
|
|
|
|
return reload();
|
|
|
|
|
} finally {
|
|
|
|
|
setLoading(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return Promise.reject();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 批量取消关联事件
|
|
|
|
|
async function onUnlinkDepartUserBatch() {
|
2022-03-10 09:47:29 +08:00
|
|
|
|
try {
|
2022-06-10 10:44:44 +08:00
|
|
|
|
await unlinkDepartUser(selectedRowKeys, true);
|
|
|
|
|
// 批量删除成功后清空选择
|
|
|
|
|
clearSelection();
|
|
|
|
|
} catch (e) {}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 选择用户成功
|
|
|
|
|
async function onSelectUserOk(options, userIdList) {
|
|
|
|
|
if (userIdList.length > 0) {
|
|
|
|
|
try {
|
|
|
|
|
setLoading(true);
|
|
|
|
|
await linkDepartUserBatch(departId.value, userIdList);
|
|
|
|
|
reload();
|
|
|
|
|
} finally {
|
|
|
|
|
setLoading(false);
|
|
|
|
|
}
|
2022-03-10 09:47:29 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2022-06-10 10:44:44 +08:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 用户抽屉表单成功回调
|
|
|
|
|
*/
|
|
|
|
|
function onUserDrawerSuccess({ isUpdate, values }) {
|
|
|
|
|
isUpdate ? updateTableDataRecord(values.id, values) : reload();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 操作栏
|
|
|
|
|
*/
|
|
|
|
|
function getTableAction(record): ActionItem[] {
|
|
|
|
|
return [{ label: '编辑', onClick: editUserInfo.bind(null, record) }];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 下拉操作栏
|
|
|
|
|
*/
|
|
|
|
|
function getDropDownAction(record): ActionItem[] {
|
|
|
|
|
return [
|
|
|
|
|
{ label: '部门角色', onClick: showDepartRole.bind(null, record) },
|
|
|
|
|
{ label: '用户详情', onClick: showUserDetail.bind(null, record) },
|
|
|
|
|
{
|
|
|
|
|
label: '取消关联',
|
|
|
|
|
color: 'error',
|
|
|
|
|
popConfirm: {
|
|
|
|
|
title: '确认取消关联吗?',
|
|
|
|
|
confirm: unlinkDepartUser.bind(null, [record.id], false),
|
|
|
|
|
},
|
2022-03-10 09:47:29 +08:00
|
|
|
|
},
|
2022-06-10 10:44:44 +08:00
|
|
|
|
];
|
|
|
|
|
}
|
2022-03-10 09:47:29 +08:00
|
|
|
|
</script>
|