3973abea8b
- 自建轻量 axios client(src/api/client.ts):Bearer 注入、401 清会话跳登录
(login 请求除外)、409 精确匹配"必须先修改初始密码"跳强制改密(区别于并发
冲突 409)、429/网络错误统一 ElMessage、ApiError 标准化、showErrorMessage
可opt-out——模板 utils/http 的 {code,msg,data} 信封与后端裸 HTTP 语义不符故弃用
- Pinia auth store(src/store/modules/auth.ts):token/role/tenant_slug/
must_change 落地并持久化(all-kefu-auth key),login/logout/changePassword/
会话过期/强制改密跳转(动态 import 断循环)
- 路由守卫:token 事实源判定、must_change 全站门(除改密页)、UserInfo 由登录
快照派生(后端无用户信息端点);user store 残留自愈
- 登录页实装(去除角色调试开关)、强制改密页实装;用户菜单/锁屏对接真实 logout
- 域 API 骨架:tenants/config/conversations/stats/settings(类型+端点常量)
- mask 哨兵助手:__SET__ ↔ 已设置 表单语义
- vitest 25 例(client 11/store 8/mask 6);登录页拖拽验证 reset 空引用修复
Co-Authored-By: Claude Code <noreply@anthropic.com>
33 lines
1.3 KiB
TypeScript
33 lines
1.3 KiB
TypeScript
/**
|
|
* Vitest 配置(Phase 3 Task 3 引入)
|
|
*
|
|
* 仅覆盖单元测试(src 下各 __tests__ 目录中的 *.test.ts)——与
|
|
* vite.config.ts 分离,避免测试环境加载 devtools/compression 等构建插件。
|
|
* 路径别名与 vite.config.ts / tsconfig.json 保持一致(@ @views @utils @stores 等)。
|
|
*
|
|
* CI 语义:`pnpm test` = `vitest run`(一次性跑完退出,非 watch)。
|
|
*/
|
|
import { defineConfig } from 'vitest/config'
|
|
import { fileURLToPath } from 'url'
|
|
|
|
export default defineConfig({
|
|
resolve: {
|
|
alias: {
|
|
'@': fileURLToPath(new URL('./src', import.meta.url)),
|
|
'@views': fileURLToPath(new URL('./src/views', import.meta.url)),
|
|
'@imgs': fileURLToPath(new URL('./src/assets/images', import.meta.url)),
|
|
'@icons': fileURLToPath(new URL('./src/assets/icons', import.meta.url)),
|
|
'@utils': fileURLToPath(new URL('./src/utils', import.meta.url)),
|
|
'@stores': fileURLToPath(new URL('./src/store', import.meta.url)),
|
|
'@plugins': fileURLToPath(new URL('./src/plugins', import.meta.url)),
|
|
'@styles': fileURLToPath(new URL('./src/assets/styles', import.meta.url))
|
|
}
|
|
},
|
|
test: {
|
|
environment: 'happy-dom',
|
|
include: ['src/**/__tests__/**/*.test.ts'],
|
|
// 测试文件显式 import { describe, it, expect, vi } from 'vitest',不开 globals
|
|
globals: false
|
|
}
|
|
})
|