refactor(system): 更新系统管理模块组件引用

- 更新用户管理页面中的组件引用从Nova到Coi
- 更新角色管理页面中的组件引用从Nova到Coi
- 更新相关事件处理和方法调用
- 确保功能保持不变
This commit is contained in:
Leo 2025-07-07 15:53:05 +08:00
parent d71fd44a8a
commit b944e3751f
2 changed files with 69 additions and 69 deletions

View File

@ -146,7 +146,7 @@
/> />
<!-- 空状态 --> <!-- 空状态 -->
<NovaEmpty <CoiEmpty
v-else v-else
:type="getEmptyType()" :type="getEmptyType()"
:title="getEmptyTitle()" :title="getEmptyTitle()"
@ -161,7 +161,7 @@
type="primary" type="primary"
size="medium" size="medium"
round round
class="nova-empty__action-btn" class="coi-empty__action-btn"
@click="handleEmptyAction" @click="handleEmptyAction"
> >
<template #icon> <template #icon>
@ -173,7 +173,7 @@
{{ getEmptyActionText() }} {{ getEmptyActionText() }}
</NButton> </NButton>
</template> </template>
</NovaEmpty> </CoiEmpty>
</div> </div>
<!-- 分页器 --> <!-- 分页器 -->
@ -195,15 +195,15 @@
</div> </div>
<!-- 角色表单弹框 --> <!-- 角色表单弹框 -->
<NovaDialog <CoiDialog
ref="roleDialogRef" ref="roleDialogRef"
:title="modalTitle" :title="modalTitle"
:width="700" :width="700"
height="auto" height="auto"
confirm-text="确定" confirm-text="确定"
cancel-text="取消" cancel-text="取消"
@nova-confirm="handleSubmit" @coi-confirm="handleSubmit"
@nova-cancel="handleCancel" @coi-cancel="handleCancel"
> >
<template #content> <template #content>
<div class="px-3 py-2"> <div class="px-3 py-2">
@ -275,18 +275,18 @@
</n-form> </n-form>
</div> </div>
</template> </template>
</NovaDialog> </CoiDialog>
<!-- 菜单权限分配弹框 --> <!-- 菜单权限分配弹框 -->
<NovaDialog <CoiDialog
ref="menuDialogRef" ref="menuDialogRef"
title="分配菜单权限" title="分配菜单权限"
:width="500" :width="500"
height="auto" height="auto"
confirm-text="确定" confirm-text="确定"
cancel-text="取消" cancel-text="取消"
@nova-confirm="handleConfirmAssignMenu" @coi-confirm="handleConfirmAssignMenu"
@nova-cancel="handleCancelAssignMenu" @coi-cancel="handleCancelAssignMenu"
> >
<template #content> <template #content>
<div class="p-3"> <div class="p-3">
@ -362,7 +362,7 @@
</div> </div>
</div> </div>
</template> </template>
</NovaDialog> </CoiDialog>
</div> </div>
</template> </template>
@ -373,8 +373,8 @@ import { NButton, NIcon, NPopconfirm, NSpace, NSwitch, NTag, NTooltip, NTree } f
import IconParkOutlineEditOne from '~icons/icon-park-outline/edit-one' import IconParkOutlineEditOne from '~icons/icon-park-outline/edit-one'
import IconParkOutlineDelete from '~icons/icon-park-outline/delete' import IconParkOutlineDelete from '~icons/icon-park-outline/delete'
import IconParkOutlineShield from '~icons/icon-park-outline/shield' import IconParkOutlineShield from '~icons/icon-park-outline/shield'
import NovaDialog from '@/components/common/NovaDialog.vue' import CoiDialog from '@/components/common/CoiDialog.vue'
import NovaEmpty from '@/components/common/NovaEmpty.vue' import CoiEmpty from '@/components/common/CoiEmpty.vue'
import { import {
addRole, addRole,
batchDeleteRoles, batchDeleteRoles,
@ -809,7 +809,7 @@ async function handleAdd() {
} }
} }
roleDialogRef.value?.novaOpen() roleDialogRef.value?.coiOpen()
} }
// //
@ -825,7 +825,7 @@ function handleEdit(role: RoleVo) {
remark: role.remark || '', remark: role.remark || '',
sorted: role.sorted || 1, sorted: role.sorted || 1,
} }
roleDialogRef.value?.novaOpen() roleDialogRef.value?.coiOpen()
} }
// //
@ -947,7 +947,7 @@ async function handleAssignMenu(role: RoleVo) {
checkedKeys.value = roleMenuResponse.data.map(id => String(id)) checkedKeys.value = roleMenuResponse.data.map(id => String(id))
} }
menuDialogRef.value?.novaOpen() menuDialogRef.value?.coiOpen()
} }
else { else {
coiMsgError('获取菜单数据失败') coiMsgError('获取菜单数据失败')
@ -1019,7 +1019,7 @@ async function handleConfirmAssignMenu() {
if (response.isSuccess) { if (response.isSuccess) {
coiMsgSuccess('菜单权限分配成功') coiMsgSuccess('菜单权限分配成功')
menuDialogRef.value?.novaClose() menuDialogRef.value?.coiClose()
} }
else { else {
coiMsgError(response.message || '菜单权限分配失败') coiMsgError(response.message || '菜单权限分配失败')
@ -1035,7 +1035,7 @@ async function handleConfirmAssignMenu() {
// //
function handleCancelAssignMenu() { function handleCancelAssignMenu() {
menuDialogRef.value?.novaClose() menuDialogRef.value?.coiClose()
currentAssignRole.value = null currentAssignRole.value = null
menuData.value = [] menuData.value = []
expandedKeys.value = [] expandedKeys.value = []
@ -1140,7 +1140,7 @@ async function handleSubmit() {
if (isSuccess) { if (isSuccess) {
coiMsgSuccess(isEdit.value ? '角色信息更新成功' : '角色创建成功') coiMsgSuccess(isEdit.value ? '角色信息更新成功' : '角色创建成功')
roleDialogRef.value?.novaClose() roleDialogRef.value?.coiClose()
await getRoleList() await getRoleList()
} }
else { else {
@ -1154,7 +1154,7 @@ async function handleSubmit() {
// //
function handleCancel() { function handleCancel() {
roleDialogRef.value?.novaClose() roleDialogRef.value?.coiClose()
} }
// //
@ -1412,8 +1412,8 @@ onMounted(() => {
} }
} }
/* NovaEmpty按钮样式 */ /* CoiEmpty按钮样式 */
.nova-empty__action-btn { .coi-empty__action-btn {
position: relative; position: relative;
overflow: hidden; overflow: hidden;
transition: all 0.3s ease; transition: all 0.3s ease;
@ -1422,7 +1422,7 @@ onMounted(() => {
border: none; border: none;
} }
.nova-empty__action-btn::before { .coi-empty__action-btn::before {
content: ''; content: '';
position: absolute; position: absolute;
top: 0; top: 0;
@ -1433,12 +1433,12 @@ onMounted(() => {
transition: left 0.6s ease; transition: left 0.6s ease;
} }
.nova-empty__action-btn:hover { .coi-empty__action-btn:hover {
transform: translateY(-2px); transform: translateY(-2px);
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15); box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
} }
.nova-empty__action-btn:hover::before { .coi-empty__action-btn:hover::before {
left: 100%; left: 100%;
} }

View File

@ -220,7 +220,7 @@
/> />
<!-- 空状态 --> <!-- 空状态 -->
<NovaEmpty <CoiEmpty
v-else v-else
:type="getEmptyType()" :type="getEmptyType()"
:title="getEmptyTitle()" :title="getEmptyTitle()"
@ -235,7 +235,7 @@
type="primary" type="primary"
size="medium" size="medium"
round round
class="nova-empty__action-btn" class="coi-empty__action-btn"
@click="handleEmptyAction" @click="handleEmptyAction"
> >
<template #icon> <template #icon>
@ -247,7 +247,7 @@
{{ getEmptyActionText() }} {{ getEmptyActionText() }}
</NButton> </NButton>
</template> </template>
</NovaEmpty> </CoiEmpty>
</div> </div>
<!-- 分页器 --> <!-- 分页器 -->
@ -269,15 +269,15 @@
</div> </div>
<!-- 用户表单弹框 --> <!-- 用户表单弹框 -->
<NovaDialog <CoiDialog
ref="userDialogRef" ref="userDialogRef"
:title="modalTitle" :title="modalTitle"
:width="800" :width="800"
height="auto" height="auto"
confirm-text="确定" confirm-text="确定"
cancel-text="取消" cancel-text="取消"
@nova-confirm="handleSubmit" @coi-confirm="handleSubmit"
@nova-cancel="handleCancel" @coi-cancel="handleCancel"
> >
<template #content> <template #content>
<div class="px-3 py-2"> <div class="px-3 py-2">
@ -407,18 +407,18 @@
</n-form> </n-form>
</div> </div>
</template> </template>
</NovaDialog> </CoiDialog>
<!-- 角色分配弹框 --> <!-- 角色分配弹框 -->
<NovaDialog <CoiDialog
ref="roleDialogRef" ref="roleDialogRef"
:title="roleModalTitle" :title="roleModalTitle"
:width="600" :width="600"
height="auto" height="auto"
confirm-text="确定" confirm-text="确定"
cancel-text="取消" cancel-text="取消"
@nova-confirm="handleConfirmAssignRole" @coi-confirm="handleConfirmAssignRole"
@nova-cancel="handleCancelAssignRole" @coi-cancel="handleCancelAssignRole"
> >
<template #content> <template #content>
<div class="p-3 space-y-4"> <div class="p-3 space-y-4">
@ -467,18 +467,18 @@
</div> </div>
</div> </div>
</template> </template>
</NovaDialog> </CoiDialog>
<!-- 重置密码弹框 --> <!-- 重置密码弹框 -->
<NovaDialog <CoiDialog
ref="resetPwdDialogRef" ref="resetPwdDialogRef"
title="重置用户密码" title="重置用户密码"
:width="500" :width="500"
height="auto" height="auto"
confirm-text="确认重置" confirm-text="确认重置"
cancel-text="取消" cancel-text="取消"
@nova-confirm="handleConfirmResetPassword" @coi-confirm="handleConfirmResetPassword"
@nova-cancel="handleCancelResetPassword" @coi-cancel="handleCancelResetPassword"
> >
<template #content> <template #content>
<div class="p-3 space-y-4"> <div class="p-3 space-y-4">
@ -544,16 +544,16 @@
</div> </div>
</div> </div>
</template> </template>
</NovaDialog> </CoiDialog>
<!-- 头像查看弹框 --> <!-- 头像查看弹框 -->
<NovaDialog <CoiDialog
ref="avatarDialogRef" ref="avatarDialogRef"
:width="600" :width="600"
height="auto" height="auto"
cancel-text="关闭" cancel-text="关闭"
:show-confirm="false" :show-confirm="false"
@nova-cancel="handleCloseAvatar" @coi-cancel="handleCloseAvatar"
> >
<template #header> <template #header>
<div class="flex items-center gap-3"> <div class="flex items-center gap-3">
@ -595,18 +595,18 @@
</div> </div>
</div> </div>
</template> </template>
</NovaDialog> </CoiDialog>
<!-- 导入用户弹框 --> <!-- 导入用户弹框 -->
<NovaDialog <CoiDialog
ref="importDialogRef" ref="importDialogRef"
title="导入用户数据" title="导入用户数据"
:width="600" :width="600"
height="auto" height="auto"
confirm-text="开始导入" confirm-text="开始导入"
cancel-text="取消" cancel-text="取消"
@nova-confirm="handleConfirmImport" @coi-confirm="handleConfirmImport"
@nova-cancel="handleCancelImport" @coi-cancel="handleCancelImport"
> >
<template #content> <template #content>
<div class="p-3 space-y-6"> <div class="p-3 space-y-6">
@ -698,7 +698,7 @@
</div> </div>
</div> </div>
</template> </template>
</NovaDialog> </CoiDialog>
</div> </div>
</template> </template>
@ -710,8 +710,8 @@ import IconParkOutlineEditOne from '~icons/icon-park-outline/edit-one'
import IconParkOutlineDelete from '~icons/icon-park-outline/delete' import IconParkOutlineDelete from '~icons/icon-park-outline/delete'
import IconParkOutlineRefresh from '~icons/icon-park-outline/refresh' import IconParkOutlineRefresh from '~icons/icon-park-outline/refresh'
import IconParkOutlineUserPositioning from '~icons/icon-park-outline/user-positioning' import IconParkOutlineUserPositioning from '~icons/icon-park-outline/user-positioning'
import NovaDialog from '@/components/common/NovaDialog.vue' import CoiDialog from '@/components/common/CoiDialog.vue'
import NovaEmpty from '@/components/common/NovaEmpty.vue' import CoiEmpty from '@/components/common/CoiEmpty.vue'
import { import {
addUser, addUser,
batchDeleteUsers, batchDeleteUsers,
@ -1246,7 +1246,7 @@ function handleAdd() {
remark: '', remark: '',
roleIds: [], roleIds: [],
} }
userDialogRef.value?.novaOpen() userDialogRef.value?.coiOpen()
} }
// //
@ -1309,7 +1309,7 @@ async function handleEdit(user: UserVo) {
} }
} }
userDialogRef.value?.novaOpen() userDialogRef.value?.coiOpen()
} }
// //
@ -1395,7 +1395,7 @@ function handleResetPassword(user: UserVo) {
newPassword: '', newPassword: '',
confirmPassword: '', confirmPassword: '',
} }
resetPwdDialogRef.value?.novaOpen() resetPwdDialogRef.value?.coiOpen()
} }
// //
@ -1419,7 +1419,7 @@ async function handleConfirmResetPassword() {
const { isSuccess } = await resetUserPassword(currentResetUser.value.userId, resetPwdForm.value.newPassword) const { isSuccess } = await resetUserPassword(currentResetUser.value.userId, resetPwdForm.value.newPassword)
if (isSuccess) { if (isSuccess) {
coiMsgSuccess(`用户「${currentResetUser.value.userName}」密码重置成功`) coiMsgSuccess(`用户「${currentResetUser.value.userName}」密码重置成功`)
resetPwdDialogRef.value?.novaClose() resetPwdDialogRef.value?.coiClose()
} }
else { else {
coiMsgError('重置密码失败,请稍后重试') coiMsgError('重置密码失败,请稍后重试')
@ -1433,7 +1433,7 @@ async function handleConfirmResetPassword() {
// //
function handleCancelResetPassword() { function handleCancelResetPassword() {
resetPwdDialogRef.value?.novaClose() resetPwdDialogRef.value?.coiClose()
resetPwdForm.value = { resetPwdForm.value = {
newPassword: '', newPassword: '',
confirmPassword: '', confirmPassword: '',
@ -1479,12 +1479,12 @@ function handleViewAvatar(user: UserVo) {
currentAvatar.value = blobUrl currentAvatar.value = blobUrl
createdBlobUrls.value.push(blobUrl) createdBlobUrls.value.push(blobUrl)
} }
avatarDialogRef.value?.novaOpen() avatarDialogRef.value?.coiOpen()
} }
// //
function handleCloseAvatar() { function handleCloseAvatar() {
avatarDialogRef.value?.novaClose() avatarDialogRef.value?.coiClose()
// URL // URL
if (currentAvatar.value.startsWith('blob:')) { if (currentAvatar.value.startsWith('blob:')) {
URL.revokeObjectURL(currentAvatar.value) URL.revokeObjectURL(currentAvatar.value)
@ -1626,7 +1626,7 @@ function handleImport() {
selectedFile.value = null selectedFile.value = null
updateSupport.value = false updateSupport.value = false
uploadProgress.value = 0 uploadProgress.value = 0
importDialogRef.value?.novaOpen() importDialogRef.value?.coiOpen()
} }
// //
@ -1691,7 +1691,7 @@ async function handleConfirmImport() {
) )
// //
importDialogRef.value?.novaClose() importDialogRef.value?.coiClose()
await getUserList() await getUserList()
} }
else { else {
@ -1716,7 +1716,7 @@ async function handleConfirmImport() {
// //
function handleCancelImport() { function handleCancelImport() {
importDialogRef.value?.novaClose() importDialogRef.value?.coiClose()
selectedFile.value = null selectedFile.value = null
updateSupport.value = false updateSupport.value = false
uploadProgress.value = 0 uploadProgress.value = 0
@ -1754,7 +1754,7 @@ async function handleAssignRole(user: UserVo) {
// 使ID // 使ID
selectedRoleIds.value = userRoleIds selectedRoleIds.value = userRoleIds
roleDialogRef.value?.novaOpen() roleDialogRef.value?.coiOpen()
} }
else { else {
coiMsgInfo('当前系统没有可分配的角色') coiMsgInfo('当前系统没有可分配的角色')
@ -1792,7 +1792,7 @@ async function handleConfirmAssignRole() {
if (response.isSuccess) { if (response.isSuccess) {
coiMsgSuccess('角色分配成功') coiMsgSuccess('角色分配成功')
roleDialogRef.value?.novaClose() roleDialogRef.value?.coiClose()
// //
if (currentAssignUser.value) { if (currentAssignUser.value) {
@ -1816,7 +1816,7 @@ async function handleConfirmAssignRole() {
// //
function handleCancelAssignRole() { function handleCancelAssignRole() {
roleDialogRef.value?.novaClose() roleDialogRef.value?.coiClose()
currentAssignUser.value = null currentAssignUser.value = null
selectedRoleIds.value = [] selectedRoleIds.value = []
availableRoles.value = [] availableRoles.value = []
@ -1859,7 +1859,7 @@ async function handleSubmit() {
if (isSuccess) { if (isSuccess) {
coiMsgSuccess(isEdit.value ? '用户信息更新成功' : '用户创建成功') coiMsgSuccess(isEdit.value ? '用户信息更新成功' : '用户创建成功')
userDialogRef.value?.novaClose() userDialogRef.value?.coiClose()
await getUserList() await getUserList()
} }
else { else {
@ -1874,7 +1874,7 @@ async function handleSubmit() {
// //
function handleCancel() { function handleCancel() {
userDialogRef.value?.novaClose() userDialogRef.value?.coiClose()
} }
// //
@ -2077,8 +2077,8 @@ onBeforeUnmount(() => {
border-color: #40a9ff; border-color: #40a9ff;
} }
/* NovaEmpty按钮样式 */ /* CoiEmpty按钮样式 */
.nova-empty__action-btn { .coi-empty__action-btn {
position: relative; position: relative;
overflow: hidden; overflow: hidden;
transition: all 0.3s ease; transition: all 0.3s ease;
@ -2087,7 +2087,7 @@ onBeforeUnmount(() => {
border: none; border: none;
} }
.nova-empty__action-btn::before { .coi-empty__action-btn::before {
content: ''; content: '';
position: absolute; position: absolute;
top: 0; top: 0;
@ -2098,12 +2098,12 @@ onBeforeUnmount(() => {
transition: left 0.6s ease; transition: left 0.6s ease;
} }
.nova-empty__action-btn:hover { .coi-empty__action-btn:hover {
transform: translateY(-2px); transform: translateY(-2px);
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15); box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
} }
.nova-empty__action-btn:hover::before { .coi-empty__action-btn:hover::before {
left: 100%; left: 100%;
} }