新增前端页面
步骤
- 页面文件放
src/pages/<域>/<功能>/index.tsx,列表页优先使用PageContainer+ProTable,不要自己拼表格分页逻辑。 - 在对应域的
config/routes/<域>Routes.ts增加路由项,component使用./<域>/<功能>;新业务域才需要新建路由文件并在config/routes.ts展开。 - 需要按菜单权限过滤时设置
access: 'normalRouteFilter';菜单可见性依赖后台「菜单管理」中的资源记录,path必须与路由一致。 - 接口调用只通过
src/services/asone-server/<域>/<controller>.ts,页面里不直接写request。 - 交互文案统一走
t('key'),同时在src/locales/zh-CN与src/locales/en-US补齐,跑pnpm i18n-check确认无缺失。 - 按钮级权限用
useAccess/usePageAccess+src/constants/permissions.ts的权限码,与后端hasAuthority字符串保持一致。
公共代码去向
| 内容 | 目录 |
|---|---|
| 跨页面复用组件 | src/components |
| 自定义 Hook | src/hooks |
| 权限码、表头搜索等常量 | src/constants |
| 全局状态(导出任务、审批待办、菜单收藏 / 最近访问) | src/models |
| 主题与设计变量 | src/theme |
| 工具函数 | src/utils |
| 类型定义 | src/types |
必须用的 antd 6 / React 19 写法
| 过期写法 | 应写 |
|---|---|
visible / onVisibleChange | open / onOpenChange |
destroyOnClose | destroyOnHidden |
bodyStyle / headStyle / dropdownStyle / dropdownClassName | styles.body / styles.header / styles.popup.root、classNames |
dropdownRender | popupRender |
bordered(Card / Table / Input) | variant(outlined / borderless / filled) |
Tabs.TabPane、Menu.Item、Dropdown 的 overlay | items、menu 数据驱动写法 |
ReactDOM.render、findDOMNode、字符串 ref、函数组件 defaultProps | createRoot / hydrateRoot、ref 回调或 useRef;React 19 中 ref 直接作为 props,不再需要 forwardRef |
moment | dayjs(项目已统一) |
TypeScript 不会因为 JSDoc @deprecated 报错,写组件属性前先核对当前版本文档,别照抄旧博客或旧项目示例。
本地验证
cd asone-front
pnpm install
pnpm dev # http://localhost:8000,/api/** 代理到 http://localhost:8001
# 提交前全链路检查:Biome lint + tsc + i18n 缺失 + 工程脚本测试
pnpm lint
页面自查:窄屏与宽屏布局不错位、中英文切换文案完整、无权限账号访问受限路由落到 403、菜单可见性与后台资源一致。
