From 42d4de46ba50c5f313064303f4a4adc7b4d78a5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=8F=E7=8A=80=E9=BA=9F?= Date: Sat, 22 Aug 2026 15:25:29 +0800 Subject: [PATCH] =?UTF-8?q?feat(tools):=20=E6=B7=BB=E5=8A=A0=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E5=88=86=E7=B1=BB=E6=9C=BA=E5=88=B6=E5=B9=B6=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=A4=9A=E4=B8=AA=E7=94=9F=E6=B4=BB=E5=8A=A9=E6=89=8B?= =?UTF-8?q?=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 实现工具分类功能,支持按工作/生活等维度分组展示 - 新增BMI计算器,支持按中国成人标准分级与健康体重范围 - 新增房贷计算器,支持等额本息与等额本金两种还款方式对比 - 新增账单拆分工具,支持多人AA制自动生成转账方案 - 新增随机决定工具,支持选项抽签与随机数生成 - 新增番茄钟功能,支持专注与休息倒计时及轮数记录 - 更新首页与侧边栏按分类分组渲染工具列表 - 优化工具注册表支持category字段配置分类归属 --- agents.md | 14 +- src/layout/SideNav.vue | 33 ++- src/router/tools.ts | 200 ++++++++++--- src/views/HomeView.vue | 76 +++-- src/views/bill-split/BillSplitView.vue | 276 +++++++++++++++++ src/views/bmi/BmiView.vue | 163 ++++++++++ src/views/mortgage/MortgageView.vue | 257 ++++++++++++++++ src/views/pomodoro/PomodoroView.vue | 226 ++++++++++++++ .../random-decision/RandomDecisionView.vue | 279 ++++++++++++++++++ 9 files changed, 1439 insertions(+), 85 deletions(-) create mode 100644 src/views/bill-split/BillSplitView.vue create mode 100644 src/views/bmi/BmiView.vue create mode 100644 src/views/mortgage/MortgageView.vue create mode 100644 src/views/pomodoro/PomodoroView.vue create mode 100644 src/views/random-decision/RandomDecisionView.vue diff --git a/agents.md b/agents.md index 132c220..b36fb02 100644 --- a/agents.md +++ b/agents.md @@ -47,17 +47,20 @@ export interface ToolItem { name: string // 工具名(菜单/卡片/页面标题) desc: string // 一句话描述 icon: Component // TDesign 图标组件 + category?: string // 分类 key(对应 toolCategories),缺省归入第一个分类 component: () => Promise // 懒加载组件 } ``` +**分类机制**:`toolCategories` 数组定义分类(目前 `work` 工作效率、`life` 生活助手),`groupedTools()` 按分类分组返回工具,侧边导航(`SideNav.vue`)与首页分区(`HomeView.vue`)均消费该函数。**新增分类零改动**:在 `toolCategories` 追加一条 `{ key/label/desc }`,再把对应工具的 `category` 指向新 key 即可。 + **新增一个工具的完整步骤:** 1. 新建 `src/views//View.vue`,参考现有页面结构(标题 → 表单卡片 → 错误提示 → 结果卡片 → 历史面板)。 -2. 在 `tools.ts` 的 `tools` 数组末尾追加一条配置,`component` 使用 `() => import('@/views//View.vue')`。 +2. 在 `tools.ts` 的 `tools` 数组对应分类分区末尾追加一条配置,`component` 使用 `() => import('@/views//View.vue')`,并填写 `category`。 3. 完成——菜单、首页卡片、路由、文档标题自动生效。可运行 `pnpm type-check` 验证。 -**注意:** `path` 必须与页面内 `useHistory('xxx')` 的 key 一致(历史记录约定),并避免与现有 27 个 path 重复。 +**注意:** `path` 必须与页面内 `useHistory('xxx')` 的 key 一致(历史记录约定),并避免与现有工具的 path 重复。 ### 3.2 历史记录约定 @@ -115,6 +118,11 @@ export interface ToolItem { | 日期计算 | `views/date-calc` | 原生 Date(本地时间构造) | 三个 tab:差值/推算/年龄生肖。`parseDate` 用 `new Date(y, m-1, d)` + 回读校验防时区偏移与 2 月 30 类非法日期;月/年推算先归 1 号再 setMonth/setFullYear,溢出钳制到目标月最后一天;生肖 `((year-4)%12+12)%12` 正模 | | 密码生成 | `views/password-gen` | `crypto.getRandomValues` + 拒绝采样 | 每种选中字符集至少出现一次 + Fisher-Yates 洗牌;t-slider 数值用外部 `` 显示(label 不能传函数);强度 = 长度×log2(池大小) 分四档 | | HTTP 状态码 | `views/http-status` | 内置静态数据(56 条,1xx-5xx) | 搜索(code/短语/中文)+ 分类筛选;历史存搜索词 | +| BMI 计算器 | `views/bmi` | 纯 TS 计算 | 中国成人标准四级分类(<18.5/24/28);健康体重范围按 18.5~23.9 反推;历史存 `身高|体重` | +| 房贷计算器 | `views/mortgage` | 纯 TS 金融公式 | 等额本息/等额本金一次算出并对比;等额本息 `M = P·r·(1+r)^n / ((1+r)^n − 1)`,等额本金总利息等差求和 `(n+1)·P·r/2`;利率为 0 需特判;历史存 JSON 快照 | +| 账单拆分 | `views/bill-split` | 纯 TS 贪心结算 | 每人已付 → 人均 → 净差额;欠款方升序/收款方降序配对生成转账方案;最多 20 人;历史存 `[[名字,金额],...]` | +| 随机决定 | `views/random-decision` | `crypto.getRandomValues` 拒绝采样 | 选项抽签 + 随机数两个 tab;`secureRandInt` 拒绝采样避免取模偏斜;不重复模式小范围洗牌/大范围 Set;历史存 JSON 快照 | +| 番茄钟 | `views/pomodoro` | 原生定时器 + Web Audio | 基于目标时间戳计时(`endTime` + 250ms tick,后台节流不漂移);阶段结束自动切换并计轮;提示音用 AudioContext 880Hz 振荡器;`onBeforeUnmount` 清理定时器;历史存 `focus=25 | rest=5` | ## 5. OCR 特殊说明(重要) @@ -177,4 +185,4 @@ pnpm preview # 预览 dist - **PWA / 离线**:可接入 `vite-plugin-pwa`,配合第 5 节 OCR 离线方案实现完全离线工具站。 - **国际化**:文案目前硬编码中文,若需 i18n 建议 vue-i18n,工具注册表的 `name/desc` 改为 key。 - **体积优化**:TDesign 目前全量注册(约 1.4MB gzip 373KB),若追求极致可改按需引入(unplugin-vue-components + TDesignResolver)。 -- **更多工具**:图片格式互转(canvas)、Markdown 预览(markdown-it)、SQL 格式化(sql-formatter)、CSS 渐变生成器、番茄钟、BMI/贷款计算器等均可按现有模式快速复制。 +- **更多工具**:图片格式互转(canvas)、Markdown 预览(markdown-it)、SQL 格式化(sql-formatter)、CSS 渐变生成器、农历/节假日查询等均可按现有模式快速复制;新增分类见 3.1 节。 diff --git a/src/layout/SideNav.vue b/src/layout/SideNav.vue index cb5b317..166ee24 100644 --- a/src/layout/SideNav.vue +++ b/src/layout/SideNav.vue @@ -5,33 +5,38 @@ 首页 - + diff --git a/src/views/bmi/BmiView.vue b/src/views/bmi/BmiView.vue new file mode 100644 index 0000000..7684d95 --- /dev/null +++ b/src/views/bmi/BmiView.vue @@ -0,0 +1,163 @@ + + + + + + diff --git a/src/views/mortgage/MortgageView.vue b/src/views/mortgage/MortgageView.vue new file mode 100644 index 0000000..88febdb --- /dev/null +++ b/src/views/mortgage/MortgageView.vue @@ -0,0 +1,257 @@ + + + + + + diff --git a/src/views/pomodoro/PomodoroView.vue b/src/views/pomodoro/PomodoroView.vue new file mode 100644 index 0000000..3b1390b --- /dev/null +++ b/src/views/pomodoro/PomodoroView.vue @@ -0,0 +1,226 @@ + + + + + + diff --git a/src/views/random-decision/RandomDecisionView.vue b/src/views/random-decision/RandomDecisionView.vue new file mode 100644 index 0000000..24116c6 --- /dev/null +++ b/src/views/random-decision/RandomDecisionView.vue @@ -0,0 +1,279 @@ + + + + + +