From b171e7cc0389d94843cdd3063ea2275c8d9338e3 Mon Sep 17 00:00:00 2001 From: sexygoat <1538832180@qq.com> Date: Thu, 9 Apr 2026 15:32:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../account-management/account/index.vue | 41 ++++++++++++++----- src/views/common/account-list.vue | 1 - .../package-management/package-list/index.vue | 13 ++---- 3 files changed, 34 insertions(+), 21 deletions(-) diff --git a/src/views/account-management/account/index.vue b/src/views/account-management/account/index.vue index eae8c9a..62615d9 100644 --- a/src/views/account-management/account/index.vue +++ b/src/views/account-management/account/index.vue @@ -125,6 +125,8 @@ clearable size="small" style="width: 180px" + @input="handleRoleSearch" + @clear="handleRoleSearch('')" />
@@ -555,9 +557,16 @@ }) // 加载所有角色列表 - const loadAllRoles = async () => { + const loadAllRoles = async (keyword: string = '') => { try { - const res = await RoleService.getRoles({ page: 1, pageSize: 100 }) + const params: any = { + page: 1, + pageSize: keyword ? 100 : 20 // 搜索时加载更多,默认20条 + } + if (keyword) { + params.role_name = keyword + } + const res = await RoleService.getRoles(params) if (res.code === 0) { allRoles.value = res.data.items || [] } @@ -607,12 +616,24 @@ roles = roles.filter((role) => role.role_type === 1) } - // 根据搜索关键词过滤 - if (!leftRoleFilter.value) return roles - const keyword = leftRoleFilter.value.toLowerCase() - return roles.filter((role) => role.role_name.toLowerCase().includes(keyword)) + return roles }) + // 搜索防抖定时器 + let roleSearchTimer: any = null + + // 远程搜索角色 + const handleRoleSearch = (keyword: string) => { + // 清除之前的定时器 + if (roleSearchTimer) { + clearTimeout(roleSearchTimer) + } + // 设置新的定时器,500ms 后执行搜索 + roleSearchTimer = setTimeout(async () => { + await loadAllRoles(keyword) + }, 500) + } + // 计算属性:过滤后的已分配角色 const filteredAssignedRoles = computed(() => { const assignedRolesList = allRoles.value.filter((role) => selectedRoles.value.includes(role.ID)) @@ -674,18 +695,16 @@ // 移除单个角色 const removeSingleRole = async (roleId: number) => { try { - // 从已分配列表中移除该角色 - const newRoles = selectedRoles.value.filter((id) => id !== roleId) - await AccountService.assignRolesToAccount(currentAccountId.value, newRoles) + await AccountService.removeRoleFromAccount(currentAccountId.value, roleId) - selectedRoles.value = newRoles + // 从本地已分配列表中移除该角色 + selectedRoles.value = selectedRoles.value.filter((id) => id !== roleId) ElMessage.success('角色移除成功') // 刷新列表以更新角色显示 await getAccountList() } catch (error) { console.error('移除角色失败:', error) - ElMessage.error('角色移除失败') } } diff --git a/src/views/common/account-list.vue b/src/views/common/account-list.vue index 6770542..b32be09 100644 --- a/src/views/common/account-list.vue +++ b/src/views/common/account-list.vue @@ -670,7 +670,6 @@ await getTableData() } catch (error) { console.error('移除角色失败:', error) - ElMessage.error('角色移除失败') } } diff --git a/src/views/package-management/package-list/index.vue b/src/views/package-management/package-list/index.vue index 08c0a91..391010e 100644 --- a/src/views/package-management/package-list/index.vue +++ b/src/views/package-management/package-list/index.vue @@ -152,12 +152,11 @@ - - + @@ -815,10 +814,6 @@ watch( () => form.data_reset_cycle, (cycle) => { - // 不是每月时清空套餐周期类型 - if (cycle !== 'monthly') { - form.calendar_type = undefined - } // 不是每日且calendar_type不是按天时,清空套餐天数 if (cycle !== 'daily' && form.calendar_type !== 'by_day') { form.duration_days = undefined @@ -1101,8 +1096,8 @@ if (form.data_reset_cycle) { data.data_reset_cycle = form.data_reset_cycle } - // 只有流量重置周期为 monthly 时,才传递 calendar_type - if (form.data_reset_cycle === 'monthly' && form.calendar_type) { + // calendar_type 是可选字段,有值就传递 + if (form.calendar_type) { data.calendar_type = form.calendar_type } // 当流量重置周期为每日,或套餐周期类型为按天时,传递套餐天数