- Vite + React + TypeScript 项目初始化 - Tailwind CSS v4 + shadcn/ui 配置(button, card, input, label) - React Router v7 路由:登录页、数据看板、题库/分类/用户/设置占位页 - AdminLayout 布局:侧边栏导航 + 顶栏 - ky v2 HTTP 客户端,自动附加 Bearer token - Zustand auth store + localStorage 持久化 - 认证保护:未登录自动重定向到 /login - 数据看板骨架(4 统计卡片 + 图表占位) - 类型定义:question, user, category, api
46 lines
1.1 KiB
JSON
46 lines
1.1 KiB
JSON
{
|
|
"name": "duoqi-admin-init",
|
|
"private": true,
|
|
"version": "0.0.0",
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "tsc -b && vite build",
|
|
"lint": "eslint .",
|
|
"preview": "vite preview"
|
|
},
|
|
"dependencies": {
|
|
"@hookform/resolvers": "^5.2.2",
|
|
"@tanstack/react-table": "^8.21.3",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"ky": "^2.0.0",
|
|
"lucide-react": "^1.7.0",
|
|
"radix-ui": "^1.4.3",
|
|
"react": "^19.2.4",
|
|
"react-dom": "^19.2.4",
|
|
"react-hook-form": "^7.72.1",
|
|
"react-router": "^7.14.0",
|
|
"recharts": "^3.8.1",
|
|
"tailwind-merge": "^3.5.0",
|
|
"zod": "^4.3.6",
|
|
"zustand": "^5.0.12"
|
|
},
|
|
"devDependencies": {
|
|
"@eslint/js": "^9.39.4",
|
|
"@tailwindcss/vite": "^4.2.2",
|
|
"@types/node": "^24.12.2",
|
|
"@types/react": "^19.2.14",
|
|
"@types/react-dom": "^19.2.3",
|
|
"@vitejs/plugin-react": "^6.0.1",
|
|
"eslint": "^9.39.4",
|
|
"eslint-plugin-react-hooks": "^7.0.1",
|
|
"eslint-plugin-react-refresh": "^0.5.2",
|
|
"globals": "^17.4.0",
|
|
"tailwindcss": "^4.2.2",
|
|
"typescript": "~6.0.2",
|
|
"typescript-eslint": "^8.58.0",
|
|
"vite": "^8.0.4"
|
|
}
|
|
}
|