From f7e7cfc78d108cd0d4706eae6bc0900e02a91d35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=BF=94?= Date: Sat, 4 Apr 2026 11:35:15 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=AF=B9=E8=AF=9D?= =?UTF-8?q?=E6=A1=86=E5=9C=A8=E9=94=99=E8=AF=AF=E6=97=B6=E4=B8=8D=E5=85=B3?= =?UTF-8?q?=E9=97=AD=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在UserManagement.vue的handleModalOk中添加错误时关闭对话框 - 在RoleManagement.vue的handleModalOk中添加错误时关闭对话框 - 确保即使API调用失败,对话框也会正确关闭 --- .../e2e/user-create-diagnostic-v2.spec.ts | 108 ++++++++++++++++++ .../src/views/system/RoleManagement.vue | 1 + .../src/views/system/UserManagement.vue | 1 + 3 files changed, 110 insertions(+) create mode 100644 novalon-manage-web/e2e/user-create-diagnostic-v2.spec.ts diff --git a/novalon-manage-web/e2e/user-create-diagnostic-v2.spec.ts b/novalon-manage-web/e2e/user-create-diagnostic-v2.spec.ts new file mode 100644 index 0000000..55309fa --- /dev/null +++ b/novalon-manage-web/e2e/user-create-diagnostic-v2.spec.ts @@ -0,0 +1,108 @@ +import { test, expect } from '@playwright/test'; +import { LoginPage } from './pages/LoginPage'; +import { UserManagementPage } from './pages/UserManagementPage'; + +test.describe('用户创建诊断测试', () => { + let loginPage: LoginPage; + let userManagementPage: UserManagementPage; + + test.beforeEach(async ({ page }) => { + loginPage = new LoginPage(page); + userManagementPage = new UserManagementPage(page); + }); + + test('诊断用户创建流程', async ({ page }) => { + console.log('=== 开始诊断用户创建流程 ==='); + + // 登录 + await loginPage.goto(); + await loginPage.login('admin', 'Test@123'); + console.log('1. 登录成功'); + + // 导航到用户管理页面 + await userManagementPage.goto(); + await userManagementPage.waitForTableReady(); + console.log('2. 导航到用户管理页面成功'); + + // 点击新增用户按钮 + await userManagementPage.clickCreateUser(); + console.log('3. 点击新增用户按钮成功'); + + // 生成唯一用户名 + const uuid = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15); + const username = `diag_${uuid}`; + const userData = { + username: username, + password: 'Test@123', + email: `${username}@test.com`, + phone: '13800138000', + nickname: `诊断用户${Date.now()}` + }; + + console.log('4. 准备创建用户:', userData); + + // 填写表单 + await userManagementPage.fillUserForm(userData); + console.log('5. 填写表单成功'); + + // 监听API响应 + const [response] = await Promise.all([ + page.waitForResponse(resp => + resp.url().includes('/api/users') && + resp.request().method() === 'POST', + { timeout: 15000 } + ).catch(err => { + console.log(' ❌ 等待API响应超时:', err.message); + return null; + }), + userManagementPage.submitForm() + ]); + + console.log('6. 提交表单'); + + if (response) { + console.log(' ✅ 捕获到API响应'); + console.log(' - 状态码:', response.status()); + console.log(' - URL:', response.url()); + + try { + const responseBody = await response.json(); + console.log(' - 响应体:', JSON.stringify(responseBody, null, 2)); + } catch (err) { + console.log(' - 无法解析响应体:', err.message); + } + } else { + console.log(' ⚠️ 没有捕获到API响应'); + } + + // 等待成功消息 + const success = await userManagementPage.waitForSuccessMessage(15000); + console.log('7. 等待成功消息:', success ? '✅ 成功' : '❌ 失败'); + + // 检查页面状态 + await page.screenshot({ path: `test-results/diagnostic-after-submit-${Date.now()}.png` }); + console.log('8. 截图已保存'); + + // 检查是否有错误消息 + const errorMessages = await page.locator('.el-message--error').allTextContents(); + if (errorMessages.length > 0) { + console.log(' ⚠️ 发现错误消息:', errorMessages); + } + + // 检查对话框是否关闭 + const dialogVisible = await page.locator('.el-dialog').isVisible(); + console.log('9. 对话框状态:', dialogVisible ? '仍然打开' : '已关闭'); + + // 搜索新创建的用户 + await userManagementPage.search(username); + await page.waitForTimeout(2000); + + const found = await userManagementPage.containsText(username); + console.log('10. 搜索新用户:', found ? '✅ 找到' : '❌ 未找到'); + + console.log('=== 诊断完成 ==='); + + expect(success).toBeTruthy(); + expect(found).toBeTruthy(); + }); +}); diff --git a/novalon-manage-web/src/views/system/RoleManagement.vue b/novalon-manage-web/src/views/system/RoleManagement.vue index 4b61376..e6f4a58 100644 --- a/novalon-manage-web/src/views/system/RoleManagement.vue +++ b/novalon-manage-web/src/views/system/RoleManagement.vue @@ -381,6 +381,7 @@ const handleModalOk = async () => { modalVisible.value = false fetchData() } catch (error) { + modalVisible.value = false if (error !== 'cancel') { handleApiError(error) } diff --git a/novalon-manage-web/src/views/system/UserManagement.vue b/novalon-manage-web/src/views/system/UserManagement.vue index 403045e..45b5a2b 100644 --- a/novalon-manage-web/src/views/system/UserManagement.vue +++ b/novalon-manage-web/src/views/system/UserManagement.vue @@ -398,6 +398,7 @@ const handleModalOk = async () => { modalVisible.value = false fetchData() } catch (error) { + modalVisible.value = false if (error !== 'cancel') { handleApiError(error) }