Files
photo-live/apps/admin/package.json
T
浅念 7385785504 feat(i18n): T15 full-stack language audit with coverage assertions
- viewer/admin 错误码→文案映射按契约 ErrorCodes 枚举全集登记(机器守护
  spec 遍历枚举断言无缺漏 + 映射键在 zh/en 词条均存在 + locale 键集
  递归相等);mobile 镜像补齐 DOWNLOAD_DISABLED(P4a 增补漏登)
- 漏译修复:viewer.photoRemoved en 侧缺失(审计测试捕获);
  DOWNLOAD_DISABLED 观众侧专属文案 + useDownload 专属提示接线;
  admin apiMsg 增 RATE_LIMITED/ALBUM_NOT_PUBLIC/DOWNLOAD_DISABLED/
  SYNC_AUTH_FAILED 四码词条
- 运行时抽查:admin 主旅程 en 版 e2e(登录→相册管理全英文 + 偏好
  持久);embed iframe lang=en 渲染与深链跟随 e2e(zh 侧既有用例覆盖)
- contracts 新增 ./errors 浏览器安全子路径(errors.ts 纯 TS);
  admin 增 @photo/contracts devDep(仅测试消费)

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-20 23:44:27 +08:00

72 lines
2.3 KiB
JSON

{
"name": "@photo/admin",
"version": "0.1.0",
"private": true,
"type": "module",
"description": "Staff admin (art-design-pro v3.0.2 template, trimmed): local session auth against /v1/auth/*; template source recorded in SOURCE.md",
"//": "Template art-design-pro v3.0.2 (https://github.com/Daymychen/art-design-pro, tag v3.0.2, commit d224dd4). Trim: demo views/routes, src/mock, apifox wiring, echarts/xlsx/xgplayer/wangeditor/highlight.js/file-saver/qrcode.vue/vue-img-cutter + stylelint/husky/commitizen toolchain.",
"engines": {
"node": ">=20.19.0"
},
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview",
"lint": "eslint .",
"typecheck": "vue-tsc --noEmit",
"test": "vitest run",
"test:e2e": "playwright test"
},
"dependencies": {
"@element-plus/icons-vue": "^2.3.2",
"@iconify/vue": "^5.0.0",
"@tailwindcss/vite": "^4.1.14",
"@vue/reactivity": "3.5.22",
"@vueuse/core": "13.9.0",
"axios": "1.12.2",
"crypto-js": "^4.2.0",
"element-plus": "2.11.4",
"mitt": "^3.0.1",
"nprogress": "^0.2.0",
"ohash": "^2.0.11",
"pinia": "^3.0.3",
"pinia-plugin-persistedstate": "^4.3.0",
"qrcode": "^1.5.4",
"tailwindcss": "^4.1.14",
"vue": "3.5.22",
"vue-draggable-plus": "^0.6.0",
"vue-i18n": "^9.14.0",
"vue-router": "^4.5.1"
},
"devDependencies": {
"@eslint/js": "^9.9.1",
"@photo/contracts": "workspace:*",
"@playwright/test": "^1.48.0",
"@types/node": "^24.0.5",
"@types/qrcode": "^1.5.6",
"@typescript-eslint/eslint-plugin": "^8.3.0",
"@typescript-eslint/parser": "^8.3.0",
"@vitejs/plugin-vue": "^6.0.1",
"@vue/compiler-sfc": "^3.0.5",
"eslint": "^9.9.1",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-prettier": "^5.2.1",
"eslint-plugin-vue": "^9.27.0",
"globals": "^15.9.0",
"prettier": "^3.5.3",
"sass": "^1.81.0",
"terser": "^5.36.0",
"typescript": "~5.6.3",
"typescript-eslint": "^8.9.0",
"unplugin-auto-import": "^20.2.0",
"unplugin-element-plus": "^0.10.0",
"unplugin-vue-components": "^29.1.0",
"vite": "^7.1.5",
"vite-plugin-compression": "^0.5.1",
"vite-plugin-vue-devtools": "^7.7.6",
"vitest": "^4.1.11",
"vue-demi": "^0.14.9",
"vue-tsc": "~2.1.6"
}
}