feat(admin): 添加用户管理相关文件
添加用户管理视图、API和状态管理文件
This commit is contained in:
@@ -0,0 +1,458 @@
|
||||
export const SELECTORS = {
|
||||
LOGIN: {
|
||||
USERNAME_INPUT: 'input[placeholder="请输入用户名"]',
|
||||
PASSWORD_INPUT: 'input[placeholder="请输入密码"]',
|
||||
LOGIN_BUTTON: 'button[type="submit"]',
|
||||
REMEMBER_ME_CHECKBOX: 'input[type="checkbox"]',
|
||||
FORGOT_PASSWORD_LINK: 'text=忘记密码',
|
||||
REGISTER_LINK: 'text=注册账号',
|
||||
ERROR_MESSAGE: '.ant-message-error',
|
||||
SUCCESS_MESSAGE: '.ant-message-success',
|
||||
LOGIN_FORM: '.login-form'
|
||||
},
|
||||
|
||||
HEADER: {
|
||||
USER_MENU: '.user-menu',
|
||||
LOGOUT_BUTTON: 'text=退出登录',
|
||||
USER_INFO: '.user-info',
|
||||
NOTIFICATION: '.notification',
|
||||
SETTINGS: '.settings'
|
||||
},
|
||||
|
||||
MENU: {
|
||||
SIDEBAR: '.sidebar',
|
||||
MENU_ITEM: '.menu-item',
|
||||
SUBMENU: '.submenu',
|
||||
ACTIVE_MENU: '.menu-item.active',
|
||||
MENU_TOGGLE: '.menu-toggle'
|
||||
},
|
||||
|
||||
DASHBOARD: {
|
||||
STATISTICS_CARD: '.statistics-card',
|
||||
CHART: '.chart',
|
||||
TABLE: '.dashboard-table',
|
||||
FILTER: '.filter',
|
||||
SEARCH: '.search'
|
||||
},
|
||||
|
||||
TABLE: {
|
||||
CONTAINER: '.table-container',
|
||||
HEADER: 'thead',
|
||||
BODY: 'tbody',
|
||||
ROW: 'tr',
|
||||
CELL: 'td',
|
||||
CHECKBOX: 'input[type="checkbox"]',
|
||||
PAGINATION: '.pagination',
|
||||
SEARCH: '.table-search input',
|
||||
EXPORT: '.export-button',
|
||||
SORT: 'th.sortable'
|
||||
},
|
||||
|
||||
FORM: {
|
||||
CONTAINER: '.form-container',
|
||||
INPUT: 'input[type="text"], input[type="email"], input[type="password"], input[type="number"]',
|
||||
SELECT: 'select',
|
||||
CHECKBOX: 'input[type="checkbox"]',
|
||||
RADIO: 'input[type="radio"]',
|
||||
TEXTAREA: 'textarea',
|
||||
DATE_PICKER: 'input[type="date"]',
|
||||
TIME_PICKER: 'input[type="time"]',
|
||||
FILE_INPUT: 'input[type="file"]',
|
||||
SUBMIT_BUTTON: 'button[type="submit"], .submit-button',
|
||||
CANCEL_BUTTON: 'button[type="button"], .cancel-button',
|
||||
RESET_BUTTON: '.reset-button',
|
||||
ERROR_MESSAGE: '.error-message',
|
||||
VALIDATION_MESSAGE: '.validation-message'
|
||||
},
|
||||
|
||||
MODAL: {
|
||||
CONTAINER: '.modal, .ant-modal',
|
||||
TITLE: '.modal-title, .ant-modal-title',
|
||||
CONTENT: '.modal-content, .ant-modal-body',
|
||||
FOOTER: '.modal-footer, .ant-modal-footer',
|
||||
CLOSE_BUTTON: '.close-button, .ant-modal-close',
|
||||
CONFIRM_BUTTON: '.confirm-button, .ant-btn-primary',
|
||||
CANCEL_BUTTON: '.cancel-button, .ant-btn-default'
|
||||
},
|
||||
|
||||
TOAST: {
|
||||
SUCCESS: '.ant-message-success',
|
||||
ERROR: '.ant-message-error',
|
||||
WARNING: '.ant-message-warning',
|
||||
INFO: '.ant-message-info',
|
||||
LOADING: '.ant-message-loading'
|
||||
},
|
||||
|
||||
LOADING: {
|
||||
SPINNER: '.ant-spin, .loading-spinner',
|
||||
OVERLAY: '.loading-overlay',
|
||||
PROGRESS_BAR: '.progress-bar'
|
||||
},
|
||||
|
||||
NAVIGATION: {
|
||||
BREADCRUMB: '.breadcrumb',
|
||||
TABS: '.tabs',
|
||||
TAB_ITEM: '.tab-item',
|
||||
ACTIVE_TAB: '.tab-item.active',
|
||||
BACK_BUTTON: '.back-button',
|
||||
FORWARD_BUTTON: '.forward-button'
|
||||
},
|
||||
|
||||
USER_MANAGEMENT: {
|
||||
USER_LIST: '.user-list',
|
||||
USER_CARD: '.user-card',
|
||||
USER_AVATAR: '.user-avatar',
|
||||
USER_NAME: '.user-name',
|
||||
USER_EMAIL: '.user-email',
|
||||
USER_STATUS: '.user-status',
|
||||
USER_ROLE: '.user-role',
|
||||
ADD_USER_BUTTON: '.add-user-button',
|
||||
EDIT_USER_BUTTON: '.edit-user-button',
|
||||
DELETE_USER_BUTTON: '.delete-user-button',
|
||||
USER_SEARCH: '.user-search'
|
||||
},
|
||||
|
||||
ROLE_MANAGEMENT: {
|
||||
ROLE_LIST: '.role-list',
|
||||
ROLE_NAME: '.role-name',
|
||||
ROLE_DESCRIPTION: '.role-description',
|
||||
ROLE_PERMISSIONS: '.role-permissions',
|
||||
ADD_ROLE_BUTTON: '.add-role-button',
|
||||
EDIT_ROLE_BUTTON: '.edit-role-button',
|
||||
DELETE_ROLE_BUTTON: '.delete-role-button',
|
||||
PERMISSION_CHECKBOX: '.permission-checkbox'
|
||||
},
|
||||
|
||||
PERMISSION_MANAGEMENT: {
|
||||
PERMISSION_LIST: '.permission-list',
|
||||
PERMISSION_NAME: '.permission-name',
|
||||
PERMISSION_CODE: '.permission-code',
|
||||
PERMISSION_TYPE: '.permission-type',
|
||||
PERMISSION_RESOURCE: '.permission-resource',
|
||||
ADD_PERMISSION_BUTTON: '.add-permission-button',
|
||||
EDIT_PERMISSION_BUTTON: '.edit-permission-button',
|
||||
DELETE_PERMISSION_BUTTON: '.delete-permission-button'
|
||||
},
|
||||
|
||||
SETTINGS: {
|
||||
SETTINGS_PAGE: '.settings-page',
|
||||
SETTINGS_SECTION: '.settings-section',
|
||||
SETTINGS_ITEM: '.settings-item',
|
||||
SAVE_BUTTON: '.save-button',
|
||||
RESET_BUTTON: '.reset-button'
|
||||
}
|
||||
} as const;
|
||||
|
||||
export const TIMEOUTS = {
|
||||
SHORT: 5000,
|
||||
MEDIUM: 10000,
|
||||
LONG: 30000,
|
||||
VERY_LONG: 60000,
|
||||
NETWORK_IDLE: 30000,
|
||||
ELEMENT_VISIBLE: 10000,
|
||||
ELEMENT_HIDDEN: 10000,
|
||||
NAVIGATION: 30000,
|
||||
PAGE_LOAD: 30000,
|
||||
API_REQUEST: 30000,
|
||||
ANIMATION: 1000
|
||||
} as const;
|
||||
|
||||
export const MESSAGES = {
|
||||
LOGIN: {
|
||||
SUCCESS: '登录成功',
|
||||
INVALID_CREDENTIALS: '用户名或密码错误',
|
||||
ACCOUNT_LOCKED: '账号已被锁定',
|
||||
ACCOUNT_DISABLED: '账号已被禁用',
|
||||
SESSION_EXPIRED: '会话已过期,请重新登录',
|
||||
NETWORK_ERROR: '网络错误,请稍后重试'
|
||||
},
|
||||
|
||||
LOGOUT: {
|
||||
SUCCESS: '退出登录成功',
|
||||
ERROR: '退出登录失败'
|
||||
},
|
||||
|
||||
VALIDATION: {
|
||||
REQUIRED: '此字段为必填项',
|
||||
INVALID_EMAIL: '邮箱格式不正确',
|
||||
INVALID_PHONE: '手机号格式不正确',
|
||||
INVALID_PASSWORD: '密码格式不正确',
|
||||
PASSWORD_MISMATCH: '两次输入的密码不一致',
|
||||
MIN_LENGTH: '输入长度不能少于 {min} 个字符',
|
||||
MAX_LENGTH: '输入长度不能超过 {max} 个字符',
|
||||
INVALID_NUMBER: '请输入有效的数字',
|
||||
INVALID_DATE: '日期格式不正确'
|
||||
},
|
||||
|
||||
OPERATION: {
|
||||
SUCCESS: '操作成功',
|
||||
FAILED: '操作失败',
|
||||
CONFIRM_DELETE: '确定要删除吗?',
|
||||
CONFIRM_SAVE: '确定要保存吗?',
|
||||
CONFIRM_CANCEL: '确定要取消吗?',
|
||||
UNSAVED_CHANGES: '您有未保存的更改,确定要离开吗?'
|
||||
},
|
||||
|
||||
NETWORK: {
|
||||
REQUEST_FAILED: '请求失败',
|
||||
TIMEOUT: '请求超时',
|
||||
SERVER_ERROR: '服务器错误',
|
||||
NETWORK_ERROR: '网络错误',
|
||||
UNAUTHORIZED: '未授权,请先登录',
|
||||
FORBIDDEN: '无权限访问',
|
||||
NOT_FOUND: '资源不存在'
|
||||
},
|
||||
|
||||
UPLOAD: {
|
||||
SUCCESS: '上传成功',
|
||||
FAILED: '上传失败',
|
||||
INVALID_FILE_TYPE: '文件类型不支持',
|
||||
FILE_TOO_LARGE: '文件大小超出限制',
|
||||
UPLOADING: '上传中...'
|
||||
},
|
||||
|
||||
DOWNLOAD: {
|
||||
SUCCESS: '下载成功',
|
||||
FAILED: '下载失败',
|
||||
PREPARING: '准备下载...'
|
||||
}
|
||||
} as const;
|
||||
|
||||
export const ROLES = {
|
||||
ADMIN: 'admin',
|
||||
USER: 'user',
|
||||
GUEST: 'guest',
|
||||
SUPER_ADMIN: 'super_admin',
|
||||
MODERATOR: 'moderator'
|
||||
} as const;
|
||||
|
||||
export const PERMISSIONS = {
|
||||
DASHBOARD: {
|
||||
VIEW: 'dashboard:view',
|
||||
EDIT: 'dashboard:edit',
|
||||
DELETE: 'dashboard:delete'
|
||||
},
|
||||
|
||||
USER: {
|
||||
VIEW: 'user:view',
|
||||
CREATE: 'user:create',
|
||||
EDIT: 'user:edit',
|
||||
DELETE: 'user:delete',
|
||||
EXPORT: 'user:export'
|
||||
},
|
||||
|
||||
ROLE: {
|
||||
VIEW: 'role:view',
|
||||
CREATE: 'role:create',
|
||||
EDIT: 'role:edit',
|
||||
DELETE: 'role:delete',
|
||||
ASSIGN_PERMISSIONS: 'role:assign_permissions'
|
||||
},
|
||||
|
||||
PERMISSION: {
|
||||
VIEW: 'permission:view',
|
||||
CREATE: 'permission:create',
|
||||
EDIT: 'permission:edit',
|
||||
DELETE: 'permission:delete'
|
||||
},
|
||||
|
||||
SETTINGS: {
|
||||
VIEW: 'settings:view',
|
||||
EDIT: 'settings:edit',
|
||||
SYSTEM: 'settings:system',
|
||||
PROFILE: 'settings:profile'
|
||||
}
|
||||
} as const;
|
||||
|
||||
export const STATUS = {
|
||||
ACTIVE: 'active',
|
||||
INACTIVE: 'inactive',
|
||||
PENDING: 'pending',
|
||||
LOCKED: 'locked',
|
||||
DELETED: 'deleted',
|
||||
SUSPENDED: 'suspended'
|
||||
} as const;
|
||||
|
||||
export const HTTP_STATUS = {
|
||||
OK: 200,
|
||||
CREATED: 201,
|
||||
NO_CONTENT: 204,
|
||||
BAD_REQUEST: 400,
|
||||
UNAUTHORIZED: 401,
|
||||
FORBIDDEN: 403,
|
||||
NOT_FOUND: 404,
|
||||
METHOD_NOT_ALLOWED: 405,
|
||||
CONFLICT: 409,
|
||||
UNPROCESSABLE_ENTITY: 422,
|
||||
INTERNAL_SERVER_ERROR: 500,
|
||||
NOT_IMPLEMENTED: 501,
|
||||
BAD_GATEWAY: 502,
|
||||
SERVICE_UNAVAILABLE: 503,
|
||||
GATEWAY_TIMEOUT: 504
|
||||
} as const;
|
||||
|
||||
export const TEST_DATA = {
|
||||
USERS: {
|
||||
ADMIN: {
|
||||
username: 'admin',
|
||||
password: 'Admin@123',
|
||||
email: 'admin@example.com',
|
||||
phone: '13800138000',
|
||||
realName: '管理员'
|
||||
},
|
||||
USER: {
|
||||
username: 'testuser',
|
||||
password: 'User@123',
|
||||
email: 'user@example.com',
|
||||
phone: '13900139000',
|
||||
realName: '测试用户'
|
||||
},
|
||||
INVALID: {
|
||||
username: 'invalid',
|
||||
password: 'invalid'
|
||||
}
|
||||
},
|
||||
|
||||
ROLES: {
|
||||
ADMIN: {
|
||||
name: '管理员',
|
||||
code: 'admin',
|
||||
description: '系统管理员角色'
|
||||
},
|
||||
USER: {
|
||||
name: '普通用户',
|
||||
code: 'user',
|
||||
description: '普通用户角色'
|
||||
}
|
||||
},
|
||||
|
||||
PERMISSIONS: [
|
||||
{
|
||||
name: '查看仪表盘',
|
||||
code: 'dashboard:view',
|
||||
type: 'menu',
|
||||
resource: '/dashboard'
|
||||
},
|
||||
{
|
||||
name: '查看用户',
|
||||
code: 'user:view',
|
||||
type: 'menu',
|
||||
resource: '/user'
|
||||
},
|
||||
{
|
||||
name: '创建用户',
|
||||
code: 'user:create',
|
||||
type: 'button',
|
||||
resource: '/user/create'
|
||||
},
|
||||
{
|
||||
name: '编辑用户',
|
||||
code: 'user:edit',
|
||||
type: 'button',
|
||||
resource: '/user/edit'
|
||||
},
|
||||
{
|
||||
name: '删除用户',
|
||||
code: 'user:delete',
|
||||
type: 'button',
|
||||
resource: '/user/delete'
|
||||
}
|
||||
]
|
||||
} as const;
|
||||
|
||||
export const API_ENDPOINTS = {
|
||||
AUTH: {
|
||||
LOGIN: '/sys/auth/login',
|
||||
LOGOUT: '/sys/auth/logout',
|
||||
REFRESH_TOKEN: '/sys/auth/refresh',
|
||||
GET_USER_INFO: '/sys/auth/userinfo'
|
||||
},
|
||||
|
||||
USER: {
|
||||
LIST: '/sys/user/list',
|
||||
DETAIL: '/sys/user/detail',
|
||||
CREATE: '/sys/user/create',
|
||||
UPDATE: '/sys/user/update',
|
||||
DELETE: '/sys/user/delete',
|
||||
EXPORT: '/sys/user/export'
|
||||
},
|
||||
|
||||
ROLE: {
|
||||
LIST: '/sys/role/list',
|
||||
DETAIL: '/sys/role/detail',
|
||||
CREATE: '/sys/role/create',
|
||||
UPDATE: '/sys/role/update',
|
||||
DELETE: '/sys/role/delete',
|
||||
ASSIGN_PERMISSIONS: '/sys/role/assign-permissions'
|
||||
},
|
||||
|
||||
PERMISSION: {
|
||||
LIST: '/sys/permission/list',
|
||||
DETAIL: '/sys/permission/detail',
|
||||
CREATE: '/sys/permission/create',
|
||||
UPDATE: '/sys/permission/update',
|
||||
DELETE: '/sys/permission/delete'
|
||||
},
|
||||
|
||||
MENU: {
|
||||
LIST: '/sys/menu/list',
|
||||
TREE: '/sys/menu/tree',
|
||||
CREATE: '/sys/menu/create',
|
||||
UPDATE: '/sys/menu/update',
|
||||
DELETE: '/sys/menu/delete'
|
||||
}
|
||||
} as const;
|
||||
|
||||
export const ENVIRONMENTS = {
|
||||
LOCAL: {
|
||||
name: 'local',
|
||||
baseURL: 'http://localhost:5173',
|
||||
mockEnabled: true,
|
||||
mockMode: 'full' as const
|
||||
},
|
||||
DEV: {
|
||||
name: 'dev',
|
||||
baseURL: 'https://dev.example.com',
|
||||
mockEnabled: false,
|
||||
mockMode: 'none' as const
|
||||
},
|
||||
TEST: {
|
||||
name: 'test',
|
||||
baseURL: 'https://test.example.com',
|
||||
mockEnabled: true,
|
||||
mockMode: 'partial' as const
|
||||
},
|
||||
PROD: {
|
||||
name: 'prod',
|
||||
baseURL: 'https://prod.example.com',
|
||||
mockEnabled: false,
|
||||
mockMode: 'none' as const
|
||||
}
|
||||
} as const;
|
||||
|
||||
export const SCREENSHOT_CONFIG = {
|
||||
DIR: 'test-results/screenshots',
|
||||
ON_FAILURE: true,
|
||||
ON_SUCCESS: false,
|
||||
FULL_PAGE: false,
|
||||
RETRY_COUNT: 3
|
||||
} as const;
|
||||
|
||||
export const REPORT_CONFIG = {
|
||||
DIR: 'test-results/reports',
|
||||
JSON: true,
|
||||
HTML: true,
|
||||
ALLURE: true,
|
||||
INCLUDE_SCREENSHOTS: true,
|
||||
INCLUDE_LOGS: true,
|
||||
INCLUDE_VIDEO: true
|
||||
} as const;
|
||||
|
||||
export const MOCK_CONFIG = {
|
||||
ENABLED: true,
|
||||
MODE: 'full' as const,
|
||||
DELAY: 0,
|
||||
LOG_CALLS: true,
|
||||
VALIDATE_RESPONSES: true,
|
||||
DATA_SOURCE: 'memory' as const
|
||||
} as const;
|
||||
Reference in New Issue
Block a user