# 💡 Summary # 🧩 Cues # 🪞Notes ## 项目介绍 我已浏览了仓库结构。下面用 Ant Design Pro + Umi Max 的视角,帮你快速理解每个目录的职责与常见开发流。 概览 - 这是一个基于 Umi Max 的后台运营系统(解忧杂货铺),采用“页面路由 + 领域服务 + 组件复用”的典型前端工程化结构。 ```Java - 路由集中配置在 `config/routes.ts:1`, - src:业务源码(见下节) - 页面放在 src/pages, - 接口在 src/services, - 公共组件在 src/components。 - config:Umi 配置与路由、代理等 - config/config.ts:1 项目主配置(主题、国际化、request、构建策略等) - config/routes.ts:1 路由映射,直连 src/pages 下的页面组件 - config/proxy.ts:1 按环境代理后端 API - public:静态资源与启动占位脚本,如 public/scripts/loading.js:1 - mock:本地开发的 API Mock,配合 Umi dev 使用 - dist:构建产物(构建后生成) - tests:Jest 相关测试与初始化,如 tests/setupTests.jsx:1 - types:全局/共享 TS 类型定义与缓存,如 types/index.d.ts:1 - 工程与规范 - 代码风格与格式化:biome.json:1、.editorconfig:1 - 提交规范与钩子:.commitlintrc.js:1、.husky、.lintstagedrc:1 - 部署:.vercel/project.json:1 - 脚本与依赖:package.json:1 ``` 顶层目录 src 目录 - src/pages:页面路由对应的页面与子模块 - 示例:src/pages/Welcome.tsx:1、src/pages/User/Login/index.tsx:1 - 业务模块:如 route-management、poi-management、notes、evals、system-observation、crawl-task 等 - src/services:按领域划分的 API 请求与类型 - 例:src/services/route-management/index.ts:1 聚合导出;各子模块拆分 dashboard.ts、list.ts、label.ts、public-route.ts 等 - src/components:可复用 UI 组件(Header、Footer、卡片等) - src/hooks:自定义 Hook(如 useUrlQueryParams) - src/utils:工具函数(如剪贴板、通用工具) - src/locales:国际化文案(此项目主要为 zh-CN) - 根级运行与权限 - src/app.tsx:1 Umi 运行时配置(布局、初始状态等) - src/access.ts:1 权限控制(如 canAdmin) - src/global.less:1、src/global.tsx:1 全局样式与全局逻辑 - PWA 相关:src/manifest.json:1、src/service-worker.js:1 路由与页面 - 路由集中定义于 config/routes.ts:1,每个 component 指向 src/pages 下的某个页面目录/文件。 - 多级菜单 → routes 嵌套路由,如内容模块、用户管理、评测模块等。 本地 Mock - mock 下与业务相关的文件(如 route-audit.ts、public-route.ts)提供了本地开发时的接口数据,减少后端依赖。 运行与构建 - 开发启动:npm run start:dev(推荐使用 dev 环境) - 生产预览:npm run preview - 构建产物:npm run build(输出到 dist) - 代码检查:npm run lint,测试:npm test 建议的开发流程 - 新增页面:在 src/pages/<模块>/<子模块> 创建页面组件,并在 config/routes.ts:1 注册路由。 - 调用接口:在 src/services/<领域> 下新增 api.ts/types.ts 或补充到现有模块;页面中用 @umijs/max 的 request 或 hooks 调用。 - 复用组件:抽取到 src/components,按需在页面引用。 - 文案与样式:文案放 src/locales/zh-CN,样式放页面同目录的 index.less 或全局样式中。 需要我按某个业务模块(如 route-management 或 evals)更细地画一张“页面—服务—路由”的关系图吗? ## 模块移动 > 必做 - 调整路由层级:把根级的抓取管理路由块移入“内容模块”下 - 在 config/routes.ts:1,于 path: '/content-module' 的 routes 中新增: - name: 'crawl-management' - path: '/content-module/crawl-management' - 子路由: - path: '/content-module/crawl-management' → redirect: '/content-module/crawl-management/list' - name: 'list',path: '/content-module/crawl-management/list',component: './crawl-task/list' - 删除原根级的抓取管理块(config/routes.ts:226 起),避免重复菜单(见“可选”保留兼容跳转)。 - 文案键确认:你给的键已存在于 src/locales/zh-CN/menu.ts:1 - 'menu.content-module.crawl-management': '抓取管理' - 'menu.content-module.crawl-management.list': '抓取任务' 代码引用更新 - 替换旧直链地址为新嵌套路由地址: - src/pages/Notes/list/index.tsx:600 将 ${origin}/crawl-task/list?... 改为 ${origin}/content-module/crawl-management/list?... - src/pages/crawl-task/list/index.tsx:712 面包屑 href: '/crawl-task' 改为 '/content-module/crawl-management' 可选(兼容与清理) - 兼容跳转:在根级保留一个隐藏菜单的重定向,避免旧书签失效 - config/routes.ts:1 添加 { path: '/crawl-task', redirect: '/content-module/crawl-management', hideInMenu: true } - 保持组件位置不变:页面仍用 component: './crawl-task/list',无需移动目录。 验证 - 重新启动或刷新开发服务后,确认“抓取管理/抓取任务”已出现在“内容模块”下,并能正常跳转。