feat(复习):回忆复习页面与入口

- 新增 ReviewRecall.vue 回忆复习页面(双栏布局)
  - 左栏:回忆大纲输入区、对比结果展示(着色树)
  - 右栏:标准导图(默认折叠)、编辑、重新生成
  - 遗漏项列表,可点击回看原文
  - 回忆历史记录查询
- api/standardMindMap.ts:标准导图与回忆对比 API
- router:新增 /review/recall/:taskNum 路由
- Review.vue 行操作中增加回忆复习按钮
- ReviewDetail.vue 思维导图区增加回忆复习入口
This commit is contained in:
2026-07-03 08:54:16 +08:00
parent dc7469ec3f
commit b24483b03b
11 changed files with 1205 additions and 260 deletions
+51
View File
@@ -0,0 +1,51 @@
import { describe, it, expect, vi, beforeEach } from 'vitest'
vi.mock('@/utils/request', () => ({
default: {
get: vi.fn(),
post: vi.fn(),
put: vi.fn(),
del: vi.fn(),
},
}))
import request from '@/utils/request'
import {
createTaskApplication,
deleteTaskApplication,
getTaskApplications,
updateTaskApplication,
} from '@/api/tasks'
const mockedRequest = vi.mocked(request)
describe('tasks API', () => {
beforeEach(() => {
vi.clearAllMocks()
})
it('task applications API calls expected endpoints', async () => {
mockedRequest.get.mockResolvedValue({ code: 200, data: [] })
mockedRequest.post.mockResolvedValue({ code: 200, data: { id: 1 } })
mockedRequest.put.mockResolvedValue({ code: 200, data: { id: 1 } })
mockedRequest.del.mockResolvedValue({ code: 200 })
await getTaskApplications('T001')
expect(mockedRequest.get).toHaveBeenCalledWith('/tasks/T001/applications')
await createTaskApplication('T001', { title: 'Demo', status: 'TODO' })
expect(mockedRequest.post).toHaveBeenCalledWith('/tasks/T001/applications', {
title: 'Demo',
status: 'TODO',
})
await updateTaskApplication(1, { title: 'Demo 2', status: 'DOING' })
expect(mockedRequest.put).toHaveBeenCalledWith('/tasks/applications/1', {
title: 'Demo 2',
status: 'DOING',
})
await deleteTaskApplication(1)
expect(mockedRequest.del).toHaveBeenCalledWith('/tasks/applications/1')
})
})