fix:Transition 白屏——组件多根节点 + Vite 模块请求拦截
- Welcome.vue:回忆卡片 el-dialog 和根 section 共存导致多根节点,<Transition>
无法动画。包裹一层 <div>
- Study.vue:同上(权重配置对话框)
- MindMapViewer.vue:事件名 selectNode→selectNewNode(类型错误)
- e2e/study.spec.ts + navigation.spec.ts:地址栏 Vite 在模块 URL 后追加
?t=... 时间戳,.endsWith('.ts') 匹配失效,改用 url.includes('/src/')
This commit is contained in:
@@ -37,7 +37,7 @@ test.describe('Header navigation', () => {
|
|||||||
|
|
||||||
test('back button shows on sub-pages and navigates to /welcome', async ({ page }) => {
|
test('back button shows on sub-pages and navigates to /welcome', async ({ page }) => {
|
||||||
await page.route('**/api/tasks**', (route) => {
|
await page.route('**/api/tasks**', (route) => {
|
||||||
if (route.request().url().endsWith('.ts')) return route.continue();
|
if (route.request().url().includes('/src/')) return route.continue();
|
||||||
route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify(mockTasks) });
|
route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify(mockTasks) });
|
||||||
});
|
});
|
||||||
await page.route('**/api/review/feed**', (route) =>
|
await page.route('**/api/review/feed**', (route) =>
|
||||||
|
|||||||
+6
-3
@@ -38,7 +38,8 @@ test.describe('Study page', () => {
|
|||||||
await page.route('**/api/tasks**', (route) => {
|
await page.route('**/api/tasks**', (route) => {
|
||||||
const url = route.request().url();
|
const url = route.request().url();
|
||||||
// 排除 Vite 模块加载请求(.ts 文件),只拦截真正的 API 请求
|
// 排除 Vite 模块加载请求(.ts 文件),只拦截真正的 API 请求
|
||||||
if (url.endsWith('.ts')) return route.continue();
|
// Vite 模块请求都走 /src/ 路径,跳过它们只拦截真正的 API 请求
|
||||||
|
if (url.includes('/src/')) return route.continue();
|
||||||
if (url.includes('/tasks') && !url.includes('/tasks/')) {
|
if (url.includes('/tasks') && !url.includes('/tasks/')) {
|
||||||
return route.fulfill({
|
return route.fulfill({
|
||||||
status: 200,
|
status: 200,
|
||||||
@@ -87,7 +88,8 @@ test.describe('Study page', () => {
|
|||||||
test('delete task removes it from the list', async ({ page }) => {
|
test('delete task removes it from the list', async ({ page }) => {
|
||||||
await page.route('**/api/tasks/1', (route) => {
|
await page.route('**/api/tasks/1', (route) => {
|
||||||
const url = route.request().url();
|
const url = route.request().url();
|
||||||
if (url.endsWith('.ts')) return route.continue();
|
// Vite 模块请求都走 /src/ 路径,跳过它们只拦截真正的 API 请求
|
||||||
|
if (url.includes('/src/')) return route.continue();
|
||||||
route.fulfill({
|
route.fulfill({
|
||||||
status: 200,
|
status: 200,
|
||||||
contentType: 'application/json',
|
contentType: 'application/json',
|
||||||
@@ -102,7 +104,8 @@ test.describe('Study page', () => {
|
|||||||
test('shows empty state when no tasks', async ({ page }) => {
|
test('shows empty state when no tasks', async ({ page }) => {
|
||||||
await page.route('**/api/tasks**', (route) => {
|
await page.route('**/api/tasks**', (route) => {
|
||||||
const url = route.request().url();
|
const url = route.request().url();
|
||||||
if (url.endsWith('.ts')) return route.continue();
|
// Vite 模块请求都走 /src/ 路径,跳过它们只拦截真正的 API 请求
|
||||||
|
if (url.includes('/src/')) return route.continue();
|
||||||
route.fulfill({
|
route.fulfill({
|
||||||
status: 200,
|
status: 200,
|
||||||
contentType: 'application/json',
|
contentType: 'application/json',
|
||||||
|
|||||||
+1
-1
@@ -13,7 +13,7 @@
|
|||||||
"type-check": "vue-tsc --build --force",
|
"type-check": "vue-tsc --build --force",
|
||||||
"test": "vitest run",
|
"test": "vitest run",
|
||||||
"test:watch": "vitest",
|
"test:watch": "vitest",
|
||||||
"test:e2e": "playwright test",
|
"test:e2e": "npx playwright test",
|
||||||
"test:e2e:ui": "playwright test --ui"
|
"test:e2e:ui": "playwright test --ui"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@@ -119,9 +119,9 @@ const render = () => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
instance.bus.addListener("selectNode", (node: any) => {
|
instance.bus.addListener("selectNewNode", (node: any) => {
|
||||||
if (node?.sourceType && node?.sourceId != null) {
|
if (node?.sourceType && node?.sourceId != null) {
|
||||||
emit("node-click", { sourceType: node.sourceType, sourceId: node.sourceId });
|
emit("node-click", { sourceType: String(node.sourceType), sourceId: Number(node.sourceId) });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -255,6 +255,7 @@ onMounted(() => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
<div>
|
||||||
<section class="study-page">
|
<section class="study-page">
|
||||||
<div class="layout-grid">
|
<div class="layout-grid">
|
||||||
<aside class="surface-card task-list">
|
<aside class="surface-card task-list">
|
||||||
@@ -405,6 +406,7 @@ onMounted(() => {
|
|||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@ onMounted(() => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
<div>
|
||||||
<section class="welcome-page">
|
<section class="welcome-page">
|
||||||
<div class="review-scroll-section surface-card">
|
<div class="review-scroll-section surface-card">
|
||||||
<div class="review-scroll-header">
|
<div class="review-scroll-header">
|
||||||
@@ -199,6 +200,7 @@ onMounted(() => {
|
|||||||
<el-button @click="recallCard.visible = false">关闭</el-button>
|
<el-button @click="recallCard.visible = false">关闭</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|||||||
Reference in New Issue
Block a user