a5d86a92c2
feat: 升级项目 Logo、完善 toast 提示及优化工程化配置 ### Features - **logo**: 替换全套项目图标,更新 wxt.config.ts 浏览器扩展图标配置。 ### Bug Fixes - **ui/toast**: 引入 <Toaster> 组件修复 toast 无法显示问题,并调整位置为正下方。 - **i18n**: 统一将 t() 函数中的 `.` 和 `:` 转换为 `_`,修复国际化文案读取失败问题。 - **context-menu**: 限制 srcUrl 检查仅在二维码图片菜单项生效,避免误判。 - **hooks**: 修复 pre-push 钩子,仅对变更文件进行 eslint 检查,并支持无 upstream 时的回退对比。 - **components**: 修复 CopyButton 动画与组件导入方式,并补齐无障碍属性与测试。 - **async**: 延迟生成二维码以正确渲染 loading 状态,并适配相关异步测试。 ### Refactor & Cleans - **clean**: 清理未使用的组件(ToolCard)、Hook(useDebounce)及多个未使用的工具函数导出。 - **structure**: 统一移动测试文件至 __tests__ 目录,移除不必要的类型导出。 ### Documentation - **docs**: 在 AGENTS.md 中明确规范 Git Commit 必须使用中文描述。
34 lines
828 B
TypeScript
34 lines
828 B
TypeScript
import QrScanner from 'qr-scanner';
|
|
|
|
interface QrCodeParseResult {
|
|
success: boolean;
|
|
data?: string;
|
|
error?: string;
|
|
}
|
|
|
|
/**
|
|
* 从文件中解析二维码
|
|
* 使用 qr-scanner 替代 jsqr 以减小体积并提高性能
|
|
*/
|
|
export async function parseQrCodeFromFile(file: File): Promise<QrCodeParseResult> {
|
|
try {
|
|
const result = await QrScanner.scanImage(file, {
|
|
returnDetailedScanResult: true,
|
|
});
|
|
|
|
if (result && result.data) {
|
|
return { success: true, data: result.data };
|
|
} else {
|
|
return { success: false, error: '未检测到二维码' };
|
|
}
|
|
} catch (err) {
|
|
const errorMsg =
|
|
err === 'No QR code found'
|
|
? '未检测到二维码'
|
|
: err instanceof Error
|
|
? err.message
|
|
: String(err);
|
|
return { success: false, error: errorMsg };
|
|
}
|
|
}
|