# FLNXI素材库 - 项目说明 ## 📋 项目概述 这是一个现代化的3D素材分享平台,用户可以上传和下载3D素材文件。项目严格遵循苹果官方UI设计规范,提供优雅的用户体验。 ## 🎯 核心功能 ### 用户功能 - ✅ **用户认证**: 注册、登录、JWT会话管理 - ✅ **素材上传**: - 上传预览图(250x175px固定尺寸显示) - 输入商品型号、场景名称、作者花名 - 上传压缩包文件 - ✅ **素材浏览**: 网格布局展示所有素材 - ✅ **素材下载**: 一键下载压缩包 ### 管理员功能 - ✅ **系统设置入口**: 顶部导航栏可见 - ✅ **素材管理**: 查看、编辑、删除素材 - ✅ **用户管理**: 查看、删除用户 ## 🏗️ 技术架构 ### 前端技术栈 - **框架**: Next.js 14 (App Router) - **UI库**: React 18 + TypeScript - **样式**: TailwindCSS (苹果设计规范) - **认证**: NextAuth.js - **日期处理**: date-fns ### 后端技术栈 - **运行时**: Node.js - **API**: Next.js API Routes - **数据库**: PostgreSQL - **ORM**: Prisma - **文件上传**: Formidable ### 存储方案 - **预览图**: MinIO S3 云存储 - Endpoint: https://s3.1080p.hk - Bucket: jsxiangche - Path: 由壹点AI/ - **压缩包**: 服务器本地存储 (./uploads目录) ## 📁 项目结构 ``` gongxiangp2/ ├── app/ # Next.js App Router │ ├── api/ # API路由 │ │ ├── auth/ # 认证API │ │ │ ├── [...nextauth]/route.ts # NextAuth配置 │ │ │ └── register/route.ts # 注册API │ │ ├── materials/ # 素材API │ │ │ ├── route.ts # 获取/删除素材 │ │ │ ├── upload/route.ts # 上传素材 │ │ │ └── download/route.ts # 下载素材 │ │ └── admin/ # 管理员API │ │ └── users/route.ts # 用户管理 │ ├── login/ # 登录页面 │ │ └── page.tsx │ ├── register/ # 注册页面 │ │ └── page.tsx │ ├── admin/ # 管理员页面 │ │ └── page.tsx │ ├── page.tsx # 首页 │ ├── layout.tsx # 根布局 │ ├── providers.tsx # Context Providers │ └── globals.css # 全局样式 ├── components/ # React组件 │ ├── Header.tsx # 头部导航 │ └── UploadModal.tsx # 上传模态框 ├── lib/ # 工具库 │ ├── prisma.ts # Prisma客户端 │ ├── auth.ts # NextAuth配置 │ └── s3.ts # S3存储服务 ├── prisma/ # Prisma配置 │ └── schema.prisma # 数据库模式 ├── types/ # TypeScript类型定义 │ └── next-auth.d.ts # NextAuth类型扩展 ├── uploads/ # 本地上传文件 ├── .env.local # 环境变量(已配置) ├── package.json # 项目依赖 ├── tsconfig.json # TypeScript配置 ├── tailwind.config.ts # TailwindCSS配置 ├── next.config.js # Next.js配置 ├── middleware.ts # Next.js中间件(路由保护) ├── install.sh # 一键安装脚本 ├── start.sh # 启动脚本 ├── README.md # 项目说明 ├── SETUP.md # 部署指南 └── PROJECT_INFO.md # 项目信息(本文件) ``` ## 🗄️ 数据库设计 ### User 表(用户) ```prisma model User { id String @id @default(uuid()) email String @unique username String @unique password String // bcrypt加密 role Role @default(USER) // USER | ADMIN createdAt DateTime @default(now()) updatedAt DateTime @updatedAt materials Material[] } ``` ### Material 表(素材) ```prisma model Material { id String @id @default(uuid()) previewUrl String // S3 URL productModel String // 商品型号 sceneName String // 场景名称 authorName String // 作者花名 zipFileName String // 压缩包文件名 zipFilePath String // 本地路径 createdAt DateTime @default(now()) updatedAt DateTime @updatedAt userId String user User @relation(...) } ``` ## 🎨 UI设计规范(苹果风格) ### 设计原则 - **简洁**: 清晰的布局,充足的留白 - **一致性**: 统一的圆角、阴影、间距 - **响应式**: 适配各种屏幕尺寸 - **流畅动画**: 所有交互都有平滑过渡 ### 设计元素 - **圆角**: 12px (border-radius: 12px) - **阴影**: - 小阴影: 0 4px 12px rgba(0,0,0,0.08) - 大阴影: 0 8px 24px rgba(0,0,0,0.12) - **主色调**: 蓝色系 (#0ea5e9) - **字体**: Inter (Google Fonts) - **过渡**: 200ms ease ### 组件样式 - `.btn-apple`: 苹果风格按钮基础类 - `.btn-primary`: 主要操作按钮 - `.btn-secondary`: 次要操作按钮 - `.input-apple`: 苹果风格输入框 - `.card-apple`: 苹果风格卡片 ## 🔐 安全特性 1. **密码加密**: bcryptjs (10 rounds) 2. **JWT认证**: NextAuth.js会话管理 3. **路由保护**: Next.js middleware 4. **CSRF保护**: NextAuth内置 5. **SQL注入防护**: Prisma ORM参数化查询 6. **XSS防护**: React自动转义 ## 🚀 快速开始 ### 方式1: 使用安装脚本(推荐) ```bash ./install.sh ./start.sh ``` ### 方式2: 手动安装 ```bash # 1. 安装依赖 npm install # 2. 生成Prisma Client npm run prisma:generate # 3. 推送数据库模式 npm run prisma:push # 4. 启动开发服务器 npm run dev ``` ### 创建管理员账号 1. 访问 http://localhost:3000/register 注册账号 2. 运行 `npm run prisma:studio` 3. 在Prisma Studio中将用户的role改为ADMIN ## 📝 环境变量说明 | 变量名 | 说明 | 示例 | |--------|------|------| | DATABASE_URL | PostgreSQL连接字符串 | postgresql://... | | NEXTAUTH_SECRET | NextAuth密钥 | 随机字符串 | | NEXTAUTH_URL | 网站URL | http://localhost:3000 | | S3_ENDPOINT | S3服务端点 | https://s3.1080p.hk | | S3_BUCKET | S3存储桶 | jsxiangche | | S3_ACCESS_KEY_ID | S3访问密钥 | AEvT... | | S3_SECRET_ACCESS_KEY | S3密钥 | u8nz... | | S3_PUBLIC_DOMAIN | S3公共域名 | https://s3.1080p.hk/... | | S3_FILE_PATH | S3文件路径前缀 | 由壹点AI/ | | UPLOAD_DIR | 本地上传目录 | ./uploads | ## 🔧 常用命令 ```bash # 开发 npm run dev # 启动开发服务器 npm run build # 构建生产版本 npm start # 启动生产服务器 # 数据库 npm run prisma:generate # 生成Prisma Client npm run prisma:push # 推送数据库模式 npm run prisma:studio # 打开Prisma Studio # 代码质量 npm run lint # ESLint检查 ``` ## 📊 性能优化 1. **图片优化**: Next.js Image组件自动优化 2. **代码分割**: Next.js自动代码分割 3. **缓存策略**: - 静态资源: 长期缓存 - API响应: 无缓存(实时数据) 4. **懒加载**: 组件按需加载 ## 🐛 常见问题 ### Q: 数据库连接失败 A: 检查DATABASE_URL是否正确,确保PostgreSQL服务运行中 ### Q: S3上传失败 A: 检查S3配置,确保MinIO服务可访问 ### Q: 图片显示404 A: 检查next.config.js中的images配置,确保域名在remotePatterns中 ### Q: 上传大文件失败 A: 已在next.config.js中配置100MB限制,可根据需要调整 ## 📈 未来扩展 可能的功能扩展: - [ ] 素材分类和标签 - [ ] 搜索和筛选功能 - [ ] 用户收藏功能 - [ ] 评论和评分系统 - [ ] 统计和分析面板 - [ ] 批量上传功能 - [ ] 在线预览3D模型 ## 📞 技术支持 如有技术问题,请检查: 1. Node.js版本 >= 18 2. 环境变量配置正确 3. 数据库连接正常 4. S3服务可访问 ## 📄 许可证 MIT License