All checks were successful
Build and Deploy (tool.xpcool.com) / build-and-deploy (push) Successful in 1m6s
视觉体系(核心是「令牌 → 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
50 lines
1.3 KiB
JSON
50 lines
1.3 KiB
JSON
{
|
||
"name": "tool.xpcool.com",
|
||
"version": "1.0.0",
|
||
"private": true,
|
||
"type": "module",
|
||
"description": "纯前端在线工具站:Vite + Vue3 + Pinia + TypeScript + UnoCSS + TDesign,所有数据在浏览器本地处理",
|
||
"packageManager": "pnpm@10.12.0",
|
||
"scripts": {
|
||
"dev": "vite",
|
||
"build": "vue-tsc --noEmit -p tsconfig.json && vite build",
|
||
"preview": "vite preview",
|
||
"type-check": "vue-tsc --noEmit -p tsconfig.json"
|
||
},
|
||
"dependencies": {
|
||
"@types/js-yaml": "^4.0.9",
|
||
"browser-image-compression": "^2.0.2",
|
||
"cron-parser": "^4.9.0",
|
||
"cropperjs": "^1.6.2",
|
||
"js-yaml": "^5.3.0",
|
||
"jsqr": "^1.4.0",
|
||
"jszip": "^3.10.1",
|
||
"opencc-js": "^1.4.1",
|
||
"pinia": "^3.0.1",
|
||
"pinyin-pro": "^3.29.3",
|
||
"qrcode": "^1.5.4",
|
||
"spark-md5": "^3.0.2",
|
||
"tdesign-icons-vue-next": "^0.3.4",
|
||
"tdesign-vue-next": "^1.10.6",
|
||
"tesseract.js": "^5.1.1",
|
||
"tesseract.js-core": "^5.1.0",
|
||
"vue": "^3.5.13",
|
||
"vue-i18n": "^11.4.10",
|
||
"vue-router": "^4.5.0"
|
||
},
|
||
"devDependencies": {
|
||
"@types/node": "^22.10.5",
|
||
"@types/qrcode": "^1.5.5",
|
||
"@types/spark-md5": "^3.0.5",
|
||
"@vitejs/plugin-vue": "^5.2.1",
|
||
"sass": "^1.83.0",
|
||
"typescript": "~5.7.2",
|
||
"unocss": "^0.65.4",
|
||
"vite": "^6.0.7",
|
||
"vue-tsc": "^2.2.0"
|
||
},
|
||
"engines": {
|
||
"node": ">=18.0.0"
|
||
}
|
||
}
|