# 中后台前端页面设计规范 > 基于 itfx-front 项目现有技术栈与实现,整理的一套通用、可直接落地的前端设计规范。 > 后续开发须遵循本规范,确保视觉与交互一致性。 --- ## 一、技术栈约定 | 类别 | 技术选型 | 版本/说明 | |------|----------|-----------| | 框架 | Vue 3 | 使用 Composition API、` ``` ### 11.3 必备 Key - `common.search`、`common.reset`、`common.add`、`common.delete`、`common.editSuccess`、`common.addSuccess`、`common.saveSuccess` - `common.selectPlaceholder`、`common.actions`、`common.viewDetail` --- ## 十二、API 与请求规范 ### 12.1 分页接口 **请求:** ```ts { pageIndex: number; pageSize: number; // 其它搜索参数 } ``` **响应:** ```ts { totalCount: number; items: T[]; // 或 data.list } ``` ### 12.2 错误处理 - 使用统一的 axios 拦截器(如 `rbac-error-handler`) - 401 自动跳转登录;其它错误统一提示 --- ## 十三、样式约定 ### 13.1 作用域 - 组件内使用 `scoped` - 覆盖第三方样式时使用 `:deep()` 或全局类 ### 13.2 容器类 - 页面根容器:`xxx-container` / `xxx-page`(如 `role-page`、`track-order-container`),**列表类页面**推荐 `padding: 16px 16px 24px`,详见 **§2.5 页面壳、白卡片与列表区尺寸** - 白卡片:`*-page-card`、`*-section` 等,与 `.list-wrap` 的 padding **勿重复叠加** - 列表区:`.list-wrap`,**四边 16px**(相对分区后的内容边缘) - 表格工具栏:`table-toolbar`、`toolbar-left`、`toolbar-right`,工具栏 **`padding: 16px 16px 0`** 与列表对齐 - Handsontable/列表分页工具栏:`.list-toolbar`(当页面没有标准 `table-toolbar` 时),与 `table-toolbar` 保持一致,使用 **`padding: 16px 16px 0`** 且 `margin-bottom: 16px`;`PaginationPro` 必须与 `toolbar-left` 同一行展示(放在 `.toolbar-right` 内,禁止分页另起行),同时 `.list-wrap` 在联用场景建议 `padding-top: 0`(例如 `padding: 0 16px 16px`),实现分页距上/右 16px、距列表 16px ### 13.3 按钮间距 - 相邻 `arco-btn` 之间:`margin-left: 8px`(全局已统一) - 使用 `a-space :size="8"` 包裹一组按钮 --- ## 十四、检查清单(新页面开发) - [ ] 使用 `xxx-container` / `xxx-page` 或等效布局结构;列表页见 **§2.5**:灰底 **`padding: 16px 16px 24px`**、`flex: 1; min-height: 0` - [ ] 白卡片与 **`.list-wrap`** 内边距勿重复叠加(推荐白卡片 `padding: 0` + 分区 padding) - [ ] **`.list-wrap`**:`padding: 16px`、`flex: 1; min-height: 0`;需测高时 `ref` 挂在本层 - [ ] 工具栏使用 `table-toolbar`、`toolbar-left`、`toolbar-right`,工具栏 **`padding: 16px 16px 0`** - [ ] 按钮、输入框符合全局样式(高度、圆角);未使用 `type="outline"` 描边按钮 - [ ] 使用主题色变量,不硬编码 `#1d7281` - [ ] 弹窗 / 抽屉使用 ModalPro / DrawerPro + useModal - [ ] 表单使用 FormPro 或统一 label/span - [ ] 表格优先 TablePro / CustomList / HandsontablePro - [ ] **HandsontablePro** 列定义使用 **`key` + `label`**,勿用 `data` + `title`(**§7.5**) - [ ] 分页组件置于**列表上方工具栏右侧**(列表右上角),**§7.3**;分页 10/30/50/100,默认 50 - [ ] 操作按钮按权限使用 `hasPermission` - [ ] 路由 meta 配置 `permission` - [ ] **新增前端页面路径**若落在 `/order/`、`/channel/`、`/system/` 等与 Admin API 同源前缀下,须在 **`nginx-default.conf` / `nginx-docker.conf`** 增加 `^~` 的 `try_files /index.html =200` 规则(**§十五**),避免刷新/直链 404 - [ ] 文案通过 i18n,不写死中文 - [ ] 命名符合本规范(文件、路由、变量、i18n key) --- ## 十五、部署与 nginx(SPA 路由) 生产环境 nginx 将 `/order/`、`/channel/`、`/system/` 等前缀**同时**用于 Admin API 反代。浏览器刷新或直接打开前端 URL(如 `/order/batchJobs`)时,若未单独配置 SPA 回退,请求会被转发到后端 API 并返回 **404**。 **约定:** 1. 官网静态页占用 **`/`** 与 **`/9610.html`**(`dist/site/index.html`);客户登录为 **`/login`**,管理端为 **`/admin`**。勿再把 `/login` 重定向到 `/`。 2. 每新增一个**前端页面路由**,若其 path 与 API 前缀冲突,必须在 `nginx-default.conf` 与 `nginx-docker.conf` 中、**API 正则代理块之前**增加更高优先级的 `^~` 规则,例如: ```nginx # 订单前端路由(^~ 须比下方 /order/ API 正则代理更优先) location ^~ /order/batchJobs { try_files /index.html =200; } ``` 3. 修改后执行 `nginx -t && nginx -s reload`(或重建前端 Docker 镜像使 `nginx-docker.conf` 生效)。 4. 本地 Vite 开发不受此限制;**仅在部署环境**需遵守本节前缀规则。`pnpm dev` 时 `/` 会跳到 `/login`,官网页请直接打开 `IDE官网/`。 当前订单模块已配置的前端路径示例:`/order/priceCheck`、`/order/placeOrder`、`/order/myOrders`、`/order/batchJobs`。 --- ## 附录:常用代码片段 ### 页面头部 + 权限按钮 ```vue