优化文档管理与导航体验
1、为文档增加编辑接口和前端编辑抽屉,文档列表与详情页统一按创建、更新、删除权限展示操作。 2、将文档版本上传和分发改为抽屉交互,并在详情页补充版本删除权限检查。 3、增强全局面包屑上下文和详情页标题同步,避免详情页重复或缺失导航信息。 4、按项目权限过滤快捷入口、首页费用指标和 eTMF 新建入口,并补充对应前端测试。
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
import { readFileSync } from "node:fs";
|
||||
import { resolve } from "node:path";
|
||||
import { describe, expect, it } from "vitest";
|
||||
|
||||
const readLayout = () => readFileSync(resolve(__dirname, "./Layout.vue"), "utf8");
|
||||
|
||||
describe("Layout breadcrumbs", () => {
|
||||
it("shows the file version module before document detail titles", () => {
|
||||
const source = readLayout();
|
||||
|
||||
expect(source).toContain('"/documents": { label: TEXT.menu.fileVersionManagement');
|
||||
expect(source).toContain("study.viewContext?.pageTitle");
|
||||
expect(source).toContain("items.push({ label: study.viewContext.pageTitle, path: route.path })");
|
||||
});
|
||||
|
||||
it("uses context page titles instead of generic route detail titles", () => {
|
||||
const source = readLayout();
|
||||
|
||||
expect(source).toContain("const hasContextPageTitle = Boolean(study.viewContext?.pageTitle)");
|
||||
expect(source).toContain("if (!hasContextPageTitle && title");
|
||||
});
|
||||
|
||||
it("keeps project management as the parent for admin project detail breadcrumbs", () => {
|
||||
const source = readLayout();
|
||||
|
||||
expect(source).toContain('if (route.path.startsWith("/admin/projects/"))');
|
||||
expect(source).toContain("label: TEXT.menu.projectManagement");
|
||||
expect(source).toContain('path: "/admin/projects"');
|
||||
});
|
||||
|
||||
it("uses stable breadcrumb keys when context titles change", () => {
|
||||
const source = readLayout();
|
||||
|
||||
expect(source).toContain(':key="breadcrumbKey(item, index)"');
|
||||
expect(source).not.toContain(':key="index"');
|
||||
expect(source).toContain("const breadcrumbKey = (item: any, index: number)");
|
||||
});
|
||||
|
||||
it("guards route component rendering while router resolves async views", () => {
|
||||
const source = readLayout();
|
||||
|
||||
expect(source).toContain('<component v-if="Component" :is="Component" />');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user