返回 AiToEarn
README.md
根目录 / project / aitoearn-web / src / utils / README.md
1 # Utils 全局工具目录
2
3 `src/utils` 是项目唯一的全局工具目录。这里只放跨页面、跨业务复用的纯工具函数、稳定基础设施封装和低业务耦合的工具能力;单页面、单布局、单 store 或单 hook 使用的逻辑必须下沉到对应局部目录。
4
5 ## 准入标准
6
7 - 功能被多个页面、布局、组件域或 API 模块复用,才能放入 `src/utils`。
8 - 单一调用方、单一 store、单一 hook 的工具必须放在调用方目录下,例如 `src/store/user/utils/`。
9 - Agent、请求、存储、UI、社交账号等有明确模块归属的工具必须归入对应一级子目录,不要散落在根目录。
10 - 禁止重新新增 `src/lib` 作为工具目录;历史 `lib` 能力应迁移到 `src/utils`、`src/api`、`src/app/i18n` 或局部目录。
11 - 新增、迁移、删除任意 utils 文件时,必须同步更新本文件和目标子目录 README。
12
13 ## 一级目录
14
15 | 目录 | 作用 | 覆盖范围 |
16 | ---------- | --------------------------- | --------------------------------------------- |
17 | `agent/` | Agent 业务共享工具 | Agent 素材类型判断、筛选和素材转换 |
18 | `region/` | 区域与域名工具 | 国内/国际域名切换、区域限制确认跳转 |
19 | `request/` | 客户端请求基础设施 | `request`、默认 `http`、请求参数类型 |
20 | `social/` | 社交账号工具 | 社交账号粉丝统计、同步提示判断 |
21 | `storage/` | 浏览器存储与 zustand 持久化 | localStorage、IndexedDB、`createPersistStore` |
22 | `ui/` | 命令式 UI 工具 | `confirm`、`toast`、`notification` |
23
24 每个一级子目录必须维护自己的 `README.md`,记录文件清单、导出方法和新增规则。
25
26 ## 根目录文件
27
28 | 文件 | 说明 |
29 | -------------- | ---------------------------------------------------------------------------------- |
30 | `common.ts` | UUID、sleep、文件名解析、话题提取等跨业务基础工具。 |
31 | `metadata.ts` | `getMetadata`,页面 SEO Metadata 生成。 |
32 | `title.ts` | `getPageTitle`,页面标题生成。 |
33 | `className.ts` | `cn`,合并 `clsx` 与 `tailwind-merge`,供 UI className 组合使用。 |
34 | `format.ts` | 数字、日期、秒数、文件大小、推荐分、相对时间和简写数值格式化。 |
35 | `oss.ts` | OSS/R2 URL、代理 URL、缩略图处理。 |
36 | `currency.ts` | 应用币种、货币符号与金额格式化。 |
37 | `auth.ts` | 登录跳转与鉴权相关通用跳转工具。 |
38 | `browser.ts` | 跨页面浏览器/WebView 判断;设备上报识别已下沉到 `src/store/user/utils/device.ts`。 |
39 | `media.ts` | 媒体类型识别、上传 accept、媒体元信息读取。 |
40 | `download.ts` | 带进度回调的下载工具。 |
41 | `appLaunch.ts` | App 唤起与降级跳转。 |
42
43 ## README 维护规则
44
45 - 新增根目录工具:更新本文件“根目录文件”。
46 - 新增子目录工具:更新本文件“一级目录”,并同步更新对应 `src/utils/<dir>/README.md`。
47 - 迁移工具:同时更新迁出目录、迁入目录 README,并删除旧路径说明。
48 - 删除工具:删除文件后必须从 README 文件清单移除,并用 `rg` 确认无旧路径引用。
49 - API、i18n、store、hook 私有能力不写入 `src/utils` README,应写入各自目录文档。
50
51 ## 常用导入
52
53 ```ts
54 import { cn } from '@/utils/className'
55 import { formatDate, formatRelativeTime } from '@/utils/format'
56 import { getMetadata } from '@/utils/metadata'
57 import { confirm } from '@/utils/ui/confirm'
58 import { toast } from '@/utils/ui/toast'
59 import http, { request } from '@/utils/request'
60 ```
61
61 lines MARKDOWN