diff --git a/README.md b/README.md index 6f18850..02a64be 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,8 @@ - 左侧固定导航 + 中间内容区;PC Web 与移动端 H5 响应式适配(移动端为抽屉导航) - 暗黑 / 浅色主题切换,选择持久化,刷新不丢失 - 每个工具独立路由、独立本地历史记录(localStorage) -- 通用组件:复制按钮、下载按钮、错误提示、历史记录面板 +- 所有文件上传支持点击选择 + 拖拽上传,图片自动缩略图回显;图片压缩支持批量、按质量/限制大小、等比缩放与 ZIP 批量下载 +- 通用组件:拖拽上传、复制按钮、下载按钮、错误提示、历史记录面板 - 全部能力由浏览器原生 API、WebAssembly 与 npm 前端库实现,无任何 mock 后端接口、无 CDN 脚本引入 ## 技术栈 @@ -23,7 +24,7 @@ | 样式 | UnoCSS 原子类 + SCSS(使用 TDesign 设计令牌变量) | | 路由 | Vue Router 4(History 模式) | -工具依赖:`qrcode`、`jsqr`、`cropperjs`、`browser-image-compression`、`tesseract.js`、`cron-parser`、`spark-md5`(全部通过 npm 安装)。 +工具依赖:`qrcode`、`jsqr`、`cropperjs`、`browser-image-compression`、`tesseract.js`、`cron-parser`、`spark-md5`、`jszip`(全部通过 npm 安装)。 ## 快速开始 @@ -87,7 +88,7 @@ pnpm preview │ ├── useHistory.ts # 本地历史记录 │ ├── useClipboard.ts # 剪贴板复制 │ └── useDownload.ts # 本地文件下载 - ├── components/common/ # CopyButton / DownloadButton / ErrorAlert / HistoryPanel + ├── components/common/ # UploadDrop / CopyButton / DownloadButton / ErrorAlert / HistoryPanel ├── layout/ # MainLayout(响应式布局)+ SideNav(侧边导航) ├── utils/index.ts # 通用工具函数 └── views/ # 首页 + 14 个工具页面(每个工具一个目录) diff --git a/agents.md b/agents.md index 22c208f..20f0ba8 100644 --- a/agents.md +++ b/agents.md @@ -80,6 +80,7 @@ export interface ToolItem { | `DownloadButton` | 下载文件 | `filename`、`getBlob: () => Blob \| null` | | `ErrorAlert` | 错误提示 | `message`(为空不渲染),`@close` | | `HistoryPanel` | 历史面板 | `items`、`@select`、`@remove`、`@clear` | +| `UploadDrop` | 拖拽上传(全站唯一上传组件) | `files`(v-model)、`accept`、`multiple`、`max`、`tip` | 新建工具页必须复用这些组件,保持全站交互一致。 @@ -87,7 +88,7 @@ export interface ToolItem { | 工具 | 目录 | 核心依赖 / 实现 | 备注 | | --- | --- | --- | --- | -| 图片压缩 | `views/image-compress` | `browser-image-compression` | `alwaysKeepResolution: true` + `initialQuality` 实现纯质量压缩;WebP 编码部分 Safari 不支持,已做 try/catch 降级提示 | +| 图片压缩 | `views/image-compress` | `browser-image-compression` + `jszip` | 支持批量(最多 20 张);「按质量 / 限制大小」双模式(大小模式传 `maxSizeMB` + 迭代);`maxWidthOrHeight` 等比缩放;输出格式可选保持原格式/JPG/PNG/WebP;转 JPG 时透明图先垫白底(canvas 重绘)避免变黑;批量下载用 jszip 打包;WebP 编码部分 Safari 不支持,已做 try/catch 逐张降级提示 | | 图片裁剪 | `views/image-cropper` | `cropperjs`(含 `cropperjs/dist/cropper.css`) | 实例在 `onBeforeUnmount` 必须 `destroy()`;换图时先 destroy 再重建 | | 二维码 | `views/qrcode` | `qrcode`(生成)+ `jsqr`(解析) | 解析需先把图片绘制到 canvas 取 `ImageData` | | JSON 格式化 | `views/json-format` | 原生 `JSON.parse/stringify` | 缩进支持 2/4 空格/Tab | @@ -120,7 +121,7 @@ import TesseractCore from 'tesseract.js-core/tesseract-core.wasm.js?url' - Vue 3 组合式 API ` + + diff --git a/src/views/base64/Base64View.vue b/src/views/base64/Base64View.vue index 2ea78bf..08ce323 100644 --- a/src/views/base64/Base64View.vue +++ b/src/views/base64/Base64View.vue @@ -33,16 +33,7 @@ - + @@ -88,8 +79,8 @@ diff --git a/src/views/image-cropper/ImageCropperView.vue b/src/views/image-cropper/ImageCropperView.vue index 1fb2117..7af8df9 100644 --- a/src/views/image-cropper/ImageCropperView.vue +++ b/src/views/image-cropper/ImageCropperView.vue @@ -4,16 +4,7 @@

上传图片,选择裁剪比例,拖动选框调整区域,裁剪结果本地生成并下载。

- + @@ -51,10 +42,10 @@