2.6 KiB
2.6 KiB
| name | description |
|---|---|
| utils-toolkit | Duooomi 应用工具函数集使用指南。当需要页面导航、本地存储、CDN URL 处理、文件上传/转换、WebView 打开、权限请求、样式合并、邮箱/手机号验证时触发。导入路径 `@/utils`。包含:push/replace/goBack 导航、storage 存储、videoUrlCache、uploadFile、mp4ToWebpUrl、cn() 样式合并、CDN 工具、相机权限、aniStorage 动画缓存。 |
Utils 工具函数集
import { push, replace, goBack, storage, videoUrlCache, uploadFile, openUrl, screenWidth, screenHeight, isValidEmail, isValidPhone } from '@/utils'
import { cn } from '@/utils/cn'
import { extractCdnKey, isFromCdn, buildCdnUrl } from '@/utils/getCDNKey'
import { ensureCameraPermission } from '@/utils/permissions'
import { aniStorage } from '@/utils/aniStorage'
导航
push('/profile', { id: '123' }) // router.push
replace('/auth') // router.replace
goBack() // router.back
存储 (storage)
基于 AsyncStorage,按 APP_VERSION 隔离的带缓存单例。
await storage.set('key', value)
const val = await storage.get<T>('key')
await storage.clear()
视频缓存 (videoUrlCache)
const cached = await videoUrlCache.get(originalUrl, width)
await videoUrlCache.set(originalUrl, finalUrl, width)
文件上传/转换
const url = await uploadFile({ uri, mimeType: 'image/jpeg', fileName: 'photo.jpg' })
const webpUrl = await mp4ToWebpUrl({ videoUrl, width: 256, height: 256, quality: 70 })
const aniUrl = await uploadAndConvertToAniUrl({ url, width: 360, height: 360, fps: '24' })
WebView
await openUrl('https://example.com', '标题') // 系统浏览器
await openUrl('https://example.com', '标题', true) // 内嵌WebView
CDN 工具
CDN: https://cdn.roasmax.cn/
extractCdnKey('https://cdn.roasmax.cn/material/xxx.mp4') // 'material/xxx.mp4'
isFromCdn(url) // boolean
buildCdnUrl('material/xxx.mp4') // 完整URL
样式合并 (cn)
<Block className={cn('flex-1 bg-black', isActive && 'bg-primary', className)} />
权限
const granted = await ensureCameraPermission() // 检查->请求->引导设置
ANI 缓存 (aniStorage)
await aniStorage.set(url, arrayBuffer)
const data = await aniStorage.get(url)
await aniStorage.has(url) / .delete(url) / .clear()
验证
isValidEmail('test@example.com') // true
isValidPhone('13800138000') // true
屏幕尺寸
screenWidth / screenHeight