tool.xpcool.com/docs/CHANGELOG.md
夏犀麟 af233e1628
All checks were successful
Build and Deploy (tool.xpcool.com) / build-and-deploy (push) Successful in 1m6s
feat: 视觉重设计 + 中英日韩四语言 + 三态昼夜主题 + 服务端接口对接
视觉体系(核心是「令牌 → TDesign 桥接」)
- 新增 tokens.scss:--tk-* 设计令牌(青玉 Jade 单一强调色、冷调中性色阶、
  圆角/间距/字号/z-index/动效规范、按语言切换字体栈)
- 新增 tdesign-theme.scss:--tk-* → --td-* 桥接(含完整冷调灰阶 1-14)
  → 60+ 个未改动的存量工具页零成本继承新配色与圆角
- index.scss 重写:只过渡颜色、统一 focus-visible、reduced-motion 降级
- 新增 v-reveal 滚动进入指令

布局与交互
- MainLayout 重写:毛玻璃 sticky 顶栏 + 三区布局 + 页脚(含备案号)
- 新增 CommandPalette(⌘K/Ctrl+K)、LocaleSwitch(显示语言代码不用国旗)、
  ThemeSwitch(三态;图标显示生效 mode、菜单勾选用户偏好 preference)
- SideNav 重写:内联筛选、可折叠分组持久化、活动态指示条、需联网标记
- HomeView 重写:左对齐 Hero + 真实可用搜索 + 概览数字条 + 服务端工具专区

国际化与主题
- vue-i18n 11 + zh-CN/en-US/ja-JP/ko-KR 完整语言包(58 个工具名与描述全译)
- helpers 取词带中文兜底;index.html 防闪烁内联脚本与 store 三处同步
- 主题三态 light/dark/auto,preference 与 mode 分离

服务端对接(service.xpcool.com /api/service/open/tools/*)
- 新增 openTools.ts:接口元数据与调用函数共用同一份路径定义
- 改造/新建 6 页:ip-info、uuid、hash(服务端 MD5 两端口径对比)、
  timestamp(服务端时钟 + 时钟偏移)、random-string、api-status
- 均为「本机 / 服务端」双模式,默认本机、不自动打网络请求
- 后端未实现的 5 个接口用 BackendPending 如实标注,不伪装可用

修复
- 空分类渲染缺陷(health/study/travel 无工具却渲染空区块),分类 9 → 6
- UnoCSS panel 快捷类补内边距;IpInfoView 漏 onBeforeUnmount;
  SideNav 末尾 import;HomeView 错误导入 SUPPORTED_LOCALES

其他
- 新增 src/config.ts 集中站点常量,页脚展示备案号并链工信部核验
- docs/api-contract.md 按线上实际重写;PROJECT_STATE.md 全面更新
- 构建通过:vue-tsc --noEmit + vite build
2026-09-14 02:05:38 +08:00

154 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# CHANGELOG — 项目变更日志
> 记录每次请求/变更,**倒序排列(最新在上)**。
> 与 `docs/PROJECT_STATE.md` 配合使用:本文件回答「改了什么」,状态文档回答「现在是什么样」。
---
## 2026-09-14 第六批:视觉重设计 + 中英日韩四语言 + 昼夜主题 + 服务端接口对接
> 依据 `design-taste-frontend` 技能BRIEF INFERENCE / 单一强调色 / 形状一致性 / 反 AI-slop 清单)重建全站视觉体系,
> 并一次性补齐多语言、主题切换与 5 个已上线服务端接口的对接。构建通过(`vue-tsc --noEmit` + `vite build`33.88s)。
### 🎨 视觉体系重建(令牌 → TDesign 桥接60+ 页面自动生效)
- 新增 `src/assets/styles/tokens.scss`:全站唯一视觉真相源。冷调石板灰中性色阶 + **青玉 Jade 单一强调色**
(浅色 `#0c7c59` 对比 5.19:1 / 深色 `#3fc79b` 对比 8.85:1均过 WCAG AA统一圆角规范
xs4/sm6/md8/lg10/xl14/2xl20/pill999、8px 间距节奏、字号阶梯、z-index 分层规范、动效曲线与时长;
按语言切换的字体栈(`html[lang^='zh'|'ja'|'ko'|'en']`,注意必须前缀匹配,`lang` 写的是完整标签)。
- 新增 `src/assets/styles/tdesign-theme.scss`:把 `--tk-*` 映射到 `--td-*`,重定义品牌色阶、语义色阶、
**完整冷调灰阶**`--td-gray-color-1..14`,浅深共用)、圆角、阴影、滚动条。**收益60+ 未改动的工具页
零成本继承新配色与圆角**,这是本次能低风险铺开全站的关键。
- 重写 `index.scss`:每页只过渡颜色(不碰 transform/布局)、统一 `:focus-visible` 焦点环、
`.skip-to-content`、滚动条 `background-clip: content-box`、标题字重 650 + `letter-spacing:-0.02em`
`prefers-reduced-motion` 降级。
- 新增 `src/directives/reveal.ts``v-reveal` 滚动进入动效(全局单例 IntersectionObserver传数字做错峰
- `unocss.config.ts` shortcuts 全部改为令牌驱动,`panel` 补上内边距(此前 ApiStatus/RandomString/Hash 等
新建页出现内容贴边)——注意页面 scoped 样式(`.block[data-v-*]`)权重高于该快捷类。
### 🧭 布局外壳重构
- `MainLayout.vue` 完全重写:毛玻璃 sticky 顶栏(`backdrop-filter: blur(14px) saturate(180%)`+ 三区布局,
品牌区改用 TDesign `AppIcon` 而非手绘 SVG全站**唯一**一处渐变(青玉 → `#2fb98d`)。
- 新增 `CommandPalette.vue` 命令面板⌘K / Ctrl+K按 UA 显示对应提示Teleport 到 body、
扁平结果列表 + 分类标签、↑↓/Enter/Esc 键盘导航、鼠标 hover 同步高亮、打开时锁 body 滚动。
- `SideNav.vue` 重写:内联筛选框、可折叠分组(`tool-nav-collapsed` 持久化)、活动态青玉底纹 + 左侧 2px
指示条、`nav-dot` 标记需联网工具。
- 新增 `LocaleSwitch.vue`(显示 `ZH/EN/JA/KO` **而非国旗**,避免语言与国家绑定歧义)、
`ThemeSwitch.vue`(三态,图标显示实际生效的 `mode`、菜单勾选用户偏好 `preference`)。
### 🌏 多语言(中/英/日/韩)
- 引入 vue-i18n 11.4.10`legacy: false` + `globalInjection: true`),基线语言 zh-CN。
- 新增 `src/i18n/index.ts``SUPPORTED_LOCALES` / `normalizeLocale()` / `resolveInitialLocale()` /
`applyLocaleToDocument()` / `setAppLocale()`)、`src/i18n/helpers.ts``toolName/toolDesc/categoryLabel/tOr`
等**带中文兜底**的取词助手)、`src/stores/locale.ts`。
- 四份完整语言包 `src/i18n/locales/{zh-CN,en-US,ja-JP,ko-KR}.ts`app / nav / palette / theme / locale /
home / category / **tool58 个工具名与描述全译)** / page / pending / common。
- 新增 `src/components/common/BackendPending.vue`:用中性信息态(非 `t-alert` 错误色)如实说明
「前端已就绪、后端接口尚未上线」,**不伪装成可用**。
- `index.html` 重写防闪烁内联脚本(同步执行,解析主题 `auto` + 语言归一化),与 theme store、i18n index
**三处逻辑必须同步**`theme-mode` 属性 + 明暗两套 `theme-color` meta。
### 🔌 服务端接口对接service.xpcool.com `/api/service/open/tools/*`
- 新增 `src/api/openTools.ts`:接口元数据(`OPEN_TOOL_ENDPOINTS`,供「接口状态」页探测)与调用函数
共用同一份路径定义避免改路径忘了改探测列表。5 个接口实测线上 **全部 HTTP 200**
- `src/api/client.ts` 重写:`BASE_URL` 回落到 `https://service.xpcool.com`**不建 .env 也能用**
新增 AbortController 超时10s、`describeStatus()` 状态码中文翻译404 → 「接口尚未上线」)、
区分超时与网络不可达。
- 改造 6 个页面接入真实后端(均为「本机 / 服务端」双模式,**默认本机、不自动打网络请求**
- `ip-info`:服务端识别的来源 IP + 内网判定,另附本机环境(时区/语言/平台/屏幕/UA
**后端不返回归属地,界面如实说明,不做前端猜测。**
- `uuid`:本机 RFC 4122 v4 / 服务端 GoFrame guid服务端模式并发 n 次(接口一次只返一个)。
- `random-string`(新工具):本机 Web Crypto已注明取模偏置量级约 2^-26/ 服务端 `crypto/rand`
长度 1-128服务端模式数量上限压到 10。
- `api-status`(新工具):**串行**探测 5 个接口(并发会干扰延迟读数),
`performance.now()` 计时、500ms 封顶刻度条、状态点承载真实语义、窄屏表格转卡片。
- `hash`:新增「同时用服务端计算 MD5」开关默认关闭——算哈希是高频纯本地动作
不该每次点击都多一次网络往返),做**两端口径对比**,比对统一折小写。
- `timestamp`:新增服务端时钟卡片,偏移量基于 Unix 秒(**与时区无关**)并补偿半个往返耗时,
误差上界 `rtt/2`;偏差 > 2s 提示本机时钟可能不准。
- 未实现接口的工具页exchange-rate / express-query / phone-locate / network-test / speed-test
统一改用 `<BackendPending />`,去掉「后端未就绪就禁用按钮」的旧逻辑。
### 🧹 修复
- **空分类渲染缺陷**health / study / travel 三个分类无任何工具,却仍渲染出空区块与空标题。
现分类精简为 6 个work / dev / design / life / fun / online`groupedTools()` 过滤空分组。
- `SideNav.vue``<script setup>` 末尾 `import`ESM 提升但不规范)、`IpInfoView.vue` 漏 `onBeforeUnmount`
导入、`HomeView.vue` 从 `@/api/openTools` 错误导入 `SUPPORTED_LOCALES` —— 均已修正。
### 📄 备案号
- 新增 `src/config.ts` 集中管理站点级常量,页脚展示 `黔ICP备2026003933号` 并链接工信部核验入口
(备案号单列一行——它是监管信息,不与产品承诺混在同一组)。
- ⚠️ **该值必须与主站 `xpcool.com` 的 `src/config.ts` 的 `SITE.icp` 保持一致,换号时两处一起改。**
### 📚 文档
- `docs/api-contract.md` **按线上实际部署重写**:旧版是一份 `/api/tools/*` 的待实现清单,与实际不符。
现明确区分「已实现 5 个」(含请求/响应字段、错误语义、前端封装函数名)与「待实现 5 个」。
- `.env.example` 补充默认基址说明;`docs/PROJECT_STATE.md` 同步更新。
## 2026-08-24 第五批:删除 5 个工具60 → 55
### 🗑 删除工具(页面目录 + 注册条目 + 相关契约全部清除)
- `code-minify` 代码压缩美化dev
- `lucky-wheel` 抽奖转盘fun
- `slogan-generator` 文案生成器fun
- `weather` 天气预报online—— api-contract 第 1 节一并删除
- `stock-quote` 股票行情online—— api-contract 第 4 节一并删除
### 🧹 清理
- tools.ts 删除对应条目及无引用图标StarIcon / SmileIcon / EditIcon / CloudyDayIconChartIcon 因 word-count 仍使用而保留)
- api-contract.md 接口一览更新为 7 个exchange-rate / express-query / phone-locate / ip-info / network-test / speedtest-download / speedtest-upload
- 删除方式备忘:项目内 `rm` 触发沙箱 trash 保护genie-trash 失败),改用 `mv` 到系统临时目录(`$TMPDIR/tool-deleted-*`)实现移除
## 2026-08-24 第四批网络测速工具59 → 60
### 🆕 新增工具
- `speed-test` 网络测速online 分类,图标 RocketIcon
- 下载测速:流式读取计时(后端测速源 / 公网源 / 自定义 URL 三模式实时进度与峰值速度5/10/25/50MB
- 上传测速:生成随机数据上传,后端计时优先(`POST /api/tools/speedtest/upload`1/5/10MB
- 延迟测试5/10 次 RTT 采样,平均/最小/最大/抖动 + 等级
- 契约新增第 8 节:下载测速返回随机二进制流(带 Content-Length、上传测速返回 `{bytes, duration_ms, speed_mbps}`
- `src/api/client.ts` 导出 `BASE_URL`(测速工具直接拼流式地址)
## 2026-08-24 第三批:网络测试工具 + 上下文无缝切换机制
### 🆕 新增工具
- `network-test` 网络测试online 分类HTTP 站点检测(前端直连,测 DNS/TTFB/状态/大小)+ Ping / TCP 端口 / DNS 解析(后端模式),后端契约见 api-contract.md 第 7 节
### 🏗 机制
- 新增 `docs/PROJECT_STATE.md`:项目状态与交接文档(单点真相),新账号 AI 接手必读
- 新增 `docs/CHANGELOG.md`:本文件,每次变更必记录
- `AGENTS.md` 顶部新增「接手必读」指引,指向上述两份文档与 api-contract.md —— 实现跨 CodeBuddy 账号无缝接续
- 约定:任何后续变更必须同步更新 CHANGELOG.md / PROJECT_STATE.md / 工作日志
## 2026-08-24 第二批:分类重构 + 后端预留机制 + 编程工具全系40 → 58
### 🏗 分类
- 分类重构为 9 个:新增 `health 健康生活` / `study 学习办公` / `travel 旅行出行` / `online 在线服务(后端预留)`
### 🆕 后端预留6
- `src/api/client.ts` 统一 API 客户端VITE_API_BASE 配置,未配置降级提示,统一响应 `{code,message,data}`
- `docs/api-contract.md` 接口契约文档weather / exchange-rate / express-query / stock-quote / phone-locate / ip-info
- 6 个预留页面骨架UI 完整、字段按契约类型化),`.env.example` 提供配置模板
### 🆕 编程工具12
- code-minifyJS/CSS/HTML 压缩美化、regex-visual正则结构树、markdown-table、api-builderfetch/curl、gitignore-gen、code-to-imagecanvas 高亮卡片、color-namer148 色表、indent-convert、code-stats30+ 语言注释规则、hello-world33 语言、json-diff路径级、env-parse
### 🐛 修复
- Vue 模板 attribute 内 `\"` 导致编译错误 → 字符串常量移到 script
- json-diff `k in b` 类型收窄 → 断言为 Record
## 2026-08-24 第一批趣味分类与工具31 → 40
### 🏗 分类
- 新增 `dev 开发进阶` / `design 创意设计` / `fun 趣味娱乐`
### 🆕 工具9
- devsql-format手写分词 SQL 格式化、text-diffLCS 行级 diff、json-to-codeJSON → TS/Go/Python
- designgradient-generatorlinear/radial/conic + 12 预设、placeholder-imagePNG/SVG 占位图、ascii-art图片转字符画
- funmorse-code中文走 pinyin-pro + Web Audio 电报声、lucky-wheelcanvas 转盘动画、slogan-generator5 类文案库)
### 📄 文档
- 新增 `docs/tool-ideas.md` 工具创意库(现状 + 未来创意 + 进度台账)
### 🐛 修复
- `PaletteIcon` 不存在 → 改用 `ViewModuleIcon`(图标引用前需在 node_modules 确认存在)