Phase 1: 共用类型定义 - apps/server/src/common/import-result.types.ts — ImportRowError + ImportResult<T> - apps/admin/src/types/import.ts — 前端对应类型 + ImportDisplayConfig Phase 2: 后端增强 - students.service.ts — batchImport/matchImport 改为 ImportResult 格式 · 每行跳过时收集 ImportRowError(code + reason) · reason 支持 markdown 标记(**字段名** / `值`) - archive.service.ts — batchImportArchive 统一用 ImportResult 格式 · 各 Sheet 错误使用标准 error code - archive.controller.ts — 日志使用新的 success 字段 Phase 3: 前端基础 - 安装 react-markdown - ImportResultModal 组件(共用导入结果弹窗) · Statistic 成功统计 + Table 错误明细 · 原因列支持 react-markdown 渲染(粗体字段名、等宽代码值) · 错误类型用 Tag 颜色区分 - api/index.ts — 403 错误从 console.warn 改为 message.warning 用户可见 Phase 4: 前端集成 - Students/index.tsx — 替换硬编码导入结果弹窗 · 删除'后端只返回统计汇总'注释和跳过原因 hardcode · 新格式自动使用 ImportResultModal,旧格式兼容 - StudentProfileContent/index.tsx — 替换内联导入 Modal 为 ImportResultModal
43 lines
1.1 KiB
JSON
43 lines
1.1 KiB
JSON
{
|
|
"name": "@gongxue/admin",
|
|
"version": "0.0.0",
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "tsc -b && vite build",
|
|
"test": "vitest run",
|
|
"lint": "oxlint --config ../../oxlint.config.ts",
|
|
"typecheck": "tsc -b --noEmit",
|
|
"format": "oxfmt",
|
|
"preview": "vite preview"
|
|
},
|
|
"dependencies": {
|
|
"@ant-design/icons": "^6.1.1",
|
|
"antd": "^6.3.6",
|
|
"axios": "^1.15.1",
|
|
"dayjs": "^1.11.20",
|
|
"echarts": "^6.0.0",
|
|
"echarts-for-react": "^3.0.6",
|
|
"react": "^19.2.5",
|
|
"react-dom": "^19.2.5",
|
|
"react-markdown": "^10.1.0",
|
|
"react-router-dom": "^7.14.1",
|
|
"tslib": "^2.8.1"
|
|
},
|
|
"devDependencies": {
|
|
"@gongxue/typescript-config": "*",
|
|
"@types/node": "^24.12.2",
|
|
"@types/react": "^19.2.14",
|
|
"@types/react-dom": "^19.2.3",
|
|
"@vitejs/plugin-react": "^6.0.1",
|
|
"@vitest/browser": "^4.1.10",
|
|
"@vitest/browser-playwright": "^4.1.10",
|
|
"@vitest/coverage-v8": "^4.1.10",
|
|
"playwright": "^1.61.1",
|
|
"typescript": "~6.0.2",
|
|
"vite": "^8.0.9",
|
|
"vitest": "^4.1.10"
|
|
}
|
|
}
|