这是基于vue-vben-admin 模板适用于abp Vnext的前端管理项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

181 lines
6.7 KiB

<template>
<div class="content">
<BasicTable @register="registerTable">
<template #toolbar>
<a-button
v-if="hasPermission('AbpIdentity.Users.Create')"
type="primary"
@click="handleAddNew"
>{{ L('NewUser') }}</a-button
>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'userName'">
<span>{{ record.userName }}</span>
<Tag v-if="!lockEnable(record)" style="margin-left: 5px" color="orange">{{ L('Lockout') }}</Tag>
<Tag v-if="!record.isActive" style="margin-left: 5px" color="red">{{ L('UnActived') }}</Tag>
</template>
<template v-if="column.key === 'phoneNumber'">
<template v-if="record.phoneNumber">
<span style="margin-right: 5px">{{ record.phoneNumber }}</span>
<Tag v-if="record.phoneNumberConfirmed" color="green">{{ L('Confirmed') }}</Tag>
<Tag v-else color="orange">{{ L('UnConfirmed') }}</Tag>
</template>
</template>
<template v-if="column.key === 'email'">
<template v-if="record.email">
<span style="margin-right: 5px">{{ record.email }}</span>
<Tag v-if="record.emailConfirmed" color="green">{{ L('Confirmed') }}</Tag>
<Tag v-else color="orange">{{ L('UnConfirmed') }}</Tag>
</template>
</template>
<template v-else-if="column.key === 'action'">
<TableAction
:actions="[
{
auth: 'AbpIdentity.Users.Update',
label: L('Edit'),
icon: 'ant-design:edit-outlined',
onClick: handleEdit.bind(null, record),
},
{
auth: 'AbpIdentity.Users.Delete',
color: 'error',
label: L('Delete'),
icon: 'ant-design:delete-outlined',
onClick: handleDelete.bind(null, record),
},
]"
:dropDownActions="[
{
auth: 'AbpIdentity.Users.Update',
label: L('Lockout'),
ifShow: lockEnable(record),
onClick: showLockModal.bind(null, record.id),
},
{
auth: 'AbpIdentity.Users.Update',
label: L('UnLock'),
ifShow: record.lockoutEnabled && !lockEnable(record),
onClick: handleUnlock.bind(null, record),
},
{
auth: 'AbpIdentity.Users.ManagePermissions',
label: L('Permissions'),
onClick: showPermissionModal.bind(null, record.id, record.userName),
},
{
auth: 'AbpIdentity.Users.ManageClaims',
label: L('Claim'),
onClick: handleShowClaims.bind(null, record),
},
{
auth: 'AbpIdentity.Users.Update',
label: L('SetPassword'),
ifShow: !record.isExternal, // 外部扩展用户不允许修改密码
onClick: showPasswordModal.bind(null, record.id),
},
{
auth: 'Platform.Menu.ManageUsers',
label: L('Menu:Manage'),
onClick: handleSetMenu.bind(null, record),
},
]"
/>
</template>
</template>
</BasicTable>
<UserModal @register="registerModal" @change="reloadTable" />
<PermissionModal @register="registerPermissionModal" />
<PasswordModal @register="registerPasswordModal" />
<ClaimModal
@register="registerClaimModal"
:fetch-api="getUserClaims"
:create-api="createClaim"
:update-api="updateClaim"
:delete-api="deleteClaim"
/>
<LockModal @register="registerLockModal" @change="reloadTable" />
<MenuModal
@register="registerMenuModal"
:loading="loadMenuRef"
:get-menu-api="getListByUser"
@change="handleChangeMenu"
@change:startup="handleChangeStartupMenu"
/>
</div>
</template>
<script lang="ts" setup>
import { ref } from 'vue';
import { useLocalization } from '/@/hooks/abp/useLocalization';
import { usePermission } from '/@/hooks/web/usePermission';
import { Tag } from 'ant-design-vue';
import { useModal } from '/@/components/Modal';
import { PermissionModal } from '/@/components/Permission';
import { BasicTable, TableAction } from '/@/components/Table';
import { useUserTable } from '../hooks/useUserTable';
import { usePassword } from '../hooks/usePassword';
import { useLock } from '../hooks/useLock';
import { usePermission as usePermissionModal } from '../hooks/usePermission';
import { getListByUser, setUserMenu, setUserStartupMenu } from '/@/api/platform/menu';
import { getClaimList as getUserClaims, createClaim, updateClaim, deleteClaim } from '/@/api/identity/user';
import UserModal from './UserModal.vue';
import PasswordModal from './PasswordModal.vue';
import LockModal from './LockModal.vue';
import MenuModal from '../../components/MenuModal.vue';
import ClaimModal from '../../components/ClaimModal.vue';
const emits = defineEmits(['change']);
const { L } = useLocalization(['AbpIdentity', 'AppPlatform']);
const loadMenuRef = ref(false);
const nullFormElRef = ref(null);
const { hasPermission } = usePermission();
const [registerModal, { openModal }] = useModal();
const { lockEnable, registerTable, reloadTable, handleDelete } = useUserTable();
const { registerLockModal, showLockModal, handleUnLock } = useLock({ emit: emits });
const { registerPasswordModal, showPasswordModal } = usePassword(nullFormElRef);
const [registerClaimModal, { openModal: openClaimModal }] = useModal();
const [registerMenuModal, { openModal: openMenuModal, closeModal: closeMenuModal }] =
useModal();
const { registerModel: registerPermissionModal, showPermissionModal } = usePermissionModal();
function handleSetMenu(record) {
openMenuModal(true, { identity: record.id }, true);
}
function handleChangeMenu(userId, menuIds) {
loadMenuRef.value = true;
setUserMenu({
userId: userId,
menuIds: menuIds,
}) .then(() => {
closeMenuModal();
}) .finally(() => {
loadMenuRef.value = false;
});
}
function handleAddNew() {
openModal(true, {}, true);
}
function handleEdit(record) {
openModal(true, record, true);
}
function handleUnlock(record) {
handleUnLock(record.id).then(() => {
reloadTable();
});
}
function handleChangeStartupMenu(userId, meunId) {
setUserStartupMenu(userId, meunId);
}
function handleShowClaims(record) {
openClaimModal(true, { id: record.id });
}
</script>