- A1 业务层统一 async:gencode 表内省改 run_sync 异步(不再阻塞事件循环)、 check_db 改 async_engine、dict_util 启动预热异步载入;psycopg 降为 APScheduler SQLAlchemyJobStore 专用同步孤岛(注释标注) - A2 测试真 PG 化:conftest 弃 SQLite + mock Redis,改连真实 PG16(dpb_test)+ Redis(number_gen advisory lock 路径真被测);新增 docker/test-compose.yaml 测试依赖栈(postgres:16:5433 + redis:7:6380);run_ci 前置探测 + 容器兜底, pytest -m pg 10 套正式 tc 全过(真实 PG16 + Redis) - B1 Redis 启动不强依赖:redis_connect 失败降级启动,缓存类回源 DB、存储类 (会话/AI 配置/调度)经 require_redis 守卫返回 503;真机 3 阶段降级测试 PASS=11 FAIL=0(独立 Redis 6390 + 后端 8091,不动共享 dev 服务) - C 扶正 DPB:后端横幅/日志(dpb.log)/README/pyproject/ai_factory agent 名、 前端 package.json/署名注释/链接文案/deploy.sh/docker 注释全部去 fastapiadmin; grep backend/app + frontend/web/src 零残留 - 验证:全量回归 pass=72 fail=0
209 lines
6.2 KiB
JSON
209 lines
6.2 KiB
JSON
{
|
||
"name": "dpb-web",
|
||
"description": "DPB 桃育种系统前端(Vue3 + Vite + TypeScript + Element-Plus)",
|
||
"version": "3.0.0",
|
||
"private": true,
|
||
"type": "module",
|
||
"scripts": {
|
||
"i": "pnpm install",
|
||
"dev": "vite --mode development",
|
||
"dev:force": "vite --force --mode development",
|
||
"prod": "vite --mode production",
|
||
"build": "vue-tsc --noEmit && vite build",
|
||
"build:prod": "pnpm vite build --mode production",
|
||
"build:dev": "pnpm vite build --mode development",
|
||
"serve:prod": "pnpm vite preview --mode production",
|
||
"serve:dev": "pnpm vite preview --mode development",
|
||
"clean": "pnpx rimraf node_modules",
|
||
"ts:check": "pnpm vue-tsc --noEmit --skipLibCheck",
|
||
"npm:check": "pnpx npm-check-updates -u",
|
||
"clean:cache": "pnpx rimraf node_modules/.cache node_modules/.vite",
|
||
"prepare": "husky",
|
||
"icon": "esno ./scripts/icon.ts",
|
||
"preview": "vite preview",
|
||
"type-check": "vue-tsc --noEmit",
|
||
"test": "vitest run",
|
||
"test:watch": "vitest",
|
||
"lint": "pnpm run lint:eslint && pnpm run lint:prettier && pnpm run lint:stylelint",
|
||
"lint:eslint": "eslint --cache \"src/**/*.{vue,ts,js}\" --fix",
|
||
"lint:prettier": "prettier --write \"**/*.{js,cjs,ts,json,tsx,css,less,scss,vue,html,md}\"",
|
||
"lint:stylelint": "stylelint \"**/*.{css,scss,vue}\" --cache --fix",
|
||
"lint:lint-staged": "lint-staged -c ./.husky/lintstagedrc.cjs",
|
||
"commit": "git-cz",
|
||
"clean:dev": "tsx scripts/clean-dev.ts"
|
||
},
|
||
"config": {
|
||
"commitizen": {
|
||
"path": "node_modules/cz-git"
|
||
}
|
||
},
|
||
"lint-staged": {
|
||
"*.{js,ts,mjs,mts,tsx}": [
|
||
"eslint --fix",
|
||
"prettier --write"
|
||
],
|
||
"*.{cjs,json,jsonc}": [
|
||
"prettier --write"
|
||
],
|
||
"*.vue": [
|
||
"eslint --fix",
|
||
"stylelint --fix --allow-empty-input",
|
||
"prettier --write"
|
||
],
|
||
"*.{html,htm}": [
|
||
"prettier --write"
|
||
],
|
||
"*.{scss,css,less}": [
|
||
"stylelint --fix --allow-empty-input",
|
||
"prettier --write"
|
||
],
|
||
"*.{md,mdx}": [
|
||
"prettier --write"
|
||
],
|
||
"*.{yaml,yml}": [
|
||
"prettier --write"
|
||
]
|
||
},
|
||
"dependencies": {
|
||
"@element-plus/icons-vue": "^2.3.2",
|
||
"@iconify-json/ep": "^1.2.3",
|
||
"@iconify-json/line-md": "^1.2.16",
|
||
"@iconify-json/ri": "^1.2.10",
|
||
"@iconify-json/svg-spinners": "^1.2.4",
|
||
"@iconify/vue": "^5.0.1",
|
||
"@tailwindcss/vite": "^4.3.0",
|
||
"@vue-flow/background": "^1.3.2",
|
||
"@vue-flow/controls": "^1.1.3",
|
||
"@vue-flow/core": "^1.48.1",
|
||
"@vue-flow/minimap": "^1.5.4",
|
||
"@vueuse/core": "^14.3.0",
|
||
"@wangeditor-next/editor": "^5.7.0",
|
||
"@wangeditor-next/editor-for-vue": "^5.1.14",
|
||
"axios": "^1.16.1",
|
||
"codemirror": "^5.65.21",
|
||
"codemirror-editor-vue3": "^2.8.0",
|
||
"cron-parser": "^5.6.2",
|
||
"crypto-js": "^4.2.0",
|
||
"dagre": "^0.8.5",
|
||
"dayjs": "^1.11.20",
|
||
"dompurify": "^3.4.3",
|
||
"echarts": "^6.0.0",
|
||
"element-plus": "~2.14.3",
|
||
"exceljs": "^4.4.0",
|
||
"file-saver": "^2.0.5",
|
||
"highlight.js": "^11.11.1",
|
||
"markdown-it": "^14.1.0",
|
||
"mitt": "^3.0.1",
|
||
"nprogress": "^0.2.0",
|
||
"ohash": "^2.0.11",
|
||
"pinia": "^3.0.4",
|
||
"pinia-plugin-persistedstate": "^4.7.1",
|
||
"qrcode.vue": "^3.9.0",
|
||
"qs": "^6.15.0",
|
||
"tailwindcss": "^4.3.0",
|
||
"vue": "^3.5.34",
|
||
"vue-draggable-plus": "^0.6.0",
|
||
"vue-i18n": "^11.1.10",
|
||
"vue-img-cutter": "^3.1.1",
|
||
"vue-json-pretty": "^2.5.0",
|
||
"vue-router": "^5.0.7",
|
||
"vue-web-terminal": "^3.4.1",
|
||
"vue3-cron-plus": "^0.1.9",
|
||
"xgplayer": "^3.0.20",
|
||
"xlsx": "^0.18.5"
|
||
},
|
||
"devDependencies": {
|
||
"@commitlint/cli": "^21.0.1",
|
||
"@commitlint/config-conventional": "^21.0.1",
|
||
"@eslint/js": "^10.0.0",
|
||
"@iconify/utils": "^2.3.0",
|
||
"@types/codemirror": "^5.60.17",
|
||
"@types/dagre": "^0.7.54",
|
||
"@types/file-saver": "^2.0.7",
|
||
"@types/markdown-it": "^14.1.2",
|
||
"@types/node": "^24.0.5",
|
||
"@types/nprogress": "^0.2.3",
|
||
"@types/qs": "^6.14.0",
|
||
"@typescript-eslint/eslint-plugin": "^8.59.3",
|
||
"@typescript-eslint/parser": "^8.59.3",
|
||
"@vitejs/plugin-vue": "^6.0.6",
|
||
"@vue/compiler-sfc": "^3.5.22",
|
||
"@vue/test-utils": "^2.4.10",
|
||
"autoprefixer": "^10.4.21",
|
||
"commitizen": "^4.3.1",
|
||
"cz-git": "^1.13.1",
|
||
"eslint": "^10.3.0",
|
||
"eslint-config-prettier": "^10.1.8",
|
||
"eslint-plugin-prettier": "^5.5.3",
|
||
"eslint-plugin-vue": "^10.4.0",
|
||
"fs-extra": "^11.2.0",
|
||
"globals": "^15.15.0",
|
||
"husky": "^9.1.7",
|
||
"jsdom": "^29.1.1",
|
||
"lint-staged": "^15.5.2",
|
||
"picocolors": "^1.1.1",
|
||
"postcss": "^8.5.6",
|
||
"postcss-html": "^1.8.0",
|
||
"postcss-scss": "^4.0.9",
|
||
"prettier": "^3.6.2",
|
||
"rollup-plugin-visualizer": "^5.12.0",
|
||
"sass": "^1.89.2",
|
||
"stylelint": "^17.0.0",
|
||
"stylelint-config-html": "^1.1.0",
|
||
"stylelint-config-recess-order": "^7.7.0",
|
||
"stylelint-config-recommended": "^18.0.0",
|
||
"stylelint-config-recommended-scss": "^17.0.1",
|
||
"stylelint-config-recommended-vue": "^1.6.1",
|
||
"stylelint-config-standard": "^40.0.0",
|
||
"stylelint-order": "^8.0.0",
|
||
"stylelint-prettier": "^5.0.3",
|
||
"terser": "^5.43.1",
|
||
"tsx": "^4.20.3",
|
||
"typescript": "^6.0.3",
|
||
"typescript-eslint": "^8.59.3",
|
||
"unplugin-auto-import": "^20.3.0",
|
||
"unplugin-element-plus": "^0.10.0",
|
||
"unplugin-icons": "^23.0.1",
|
||
"unplugin-vue-components": "^29.1.0",
|
||
"vite": "^7.1.5",
|
||
"vite-plugin-compression": "^0.5.1",
|
||
"vite-plugin-vue-devtools": "^8.1.2",
|
||
"vitest": "^4.1.7",
|
||
"vue-demi": "^0.14.9",
|
||
"vue-eslint-parser": "^10.4.0",
|
||
"vue-tsc": "^3.2.9"
|
||
},
|
||
"pnpm": {
|
||
"overrides": {
|
||
"glob": "13.0.6",
|
||
"rimraf": "6.1.3",
|
||
"uuid": "14.0.0",
|
||
"fstream": "1.0.12",
|
||
"lodash.isequal": "4.5.0"
|
||
}
|
||
},
|
||
"packageManager": "pnpm@9.15.3",
|
||
"engines": {
|
||
"node": ">=20.19.0",
|
||
"npm": ">=10.0.0",
|
||
"pnpm": ">=8.8.0"
|
||
},
|
||
"repository": {
|
||
"type": "git",
|
||
"url": "http://123.207.9.209:3000/gonsun/dpb.git"
|
||
},
|
||
"bugs": {
|
||
"url": "http://123.207.9.209:3000/gonsun/dpb/issues"
|
||
},
|
||
"author": "DPB 桃育种系统团队",
|
||
"license": "MIT",
|
||
"homepage": "http://123.207.9.209:3000/gonsun/dpb",
|
||
"browserslist": [
|
||
"Chrome >= 84",
|
||
"Firefox >= 83",
|
||
"Safari >= 14.1",
|
||
"Edge >= 84",
|
||
"not dead"
|
||
]
|
||
}
|