焰境·万载——新一代文旅网站制作展示
江西万载数字文旅平台 · 北京高校在读生发起 · AI 技术赋能县域文旅数字化转型项目简介焰境·万载是围绕江西省万载县打造的数字文旅平台以中国花炮之乡的千年烟花文化为核心融合非遗传承、美食特产、旅游导览以 AI 动漫角色花傩为数字灵魂。GitHub仓库地址https://github.com/nathanpenny520/WhizzZest功能说明 数字烟花Canvas 粒子引擎12 类型配方编排、保存、分享、排行榜 AI 花傩RAG 增强智能导游六状态动画全屏对话对话历史管理AI 指令驱动页面跳转/地图飞行️ 高德地图POI 标记、驾车路线、商户标记、AI 指令联动 像素世界Minecraft 1.8.8 Plants vs. Zombies浏览器即点即玩IndexedDB 存档 中英双语vue-i18nURL 路径前缀切换 PWA离线缓存、桌面安装、自动更新提示 SEO三层 SEO 体系静态 meta 运行时注入 预渲染 安全CSP、HTTPS、API Key 代理、RBAC 角色守卫技术栈层级技术说明前端框架Vue 3.5 TypeScript 5.9Composition API构建工具Vite 7开发/构建CSSTailwind CSS 3.4实用优先状态管理Pinia 3全局状态国际化vue-i18n 11中英双语地图高德地图 JS API 2.0POI 路线烟花引擎Canvas 2D Web Worker粒子模拟后端框架NestJS 11模块化架构数据库PostgreSQL 16 Prisma ORM主数据存储缓存Redis 7 ioredis高频查询/限流认证Passport JWT渐进式鉴权包管理pnpm workspaceMonorepo测试Vitest Supertest单元 集成CI/CDGitHub Actions自动构建部署到生产服务器共享类型wanzai/contracts契约层项目结构wanzai/ ├── packages/ │ ├── contracts/ ← 共享 TypeScript 类型定义 │ │ └── src/ │ │ ├── common.ts ← ApiResponseT、ErrorCode │ │ ├── user.ts ← IUser、UserRole │ │ ├── ai.ts ← IAIResponse、IAIAction │ │ ├── firework.ts ← IFireworkRecipe │ │ ├── merchant.ts ← IMerchant、ICoupon │ │ └── index.ts │ │ │ ├── frontend/ ← Vue 3 SPA │ │ ├── src/ │ │ │ ├── pages/ ← 17 个页面含商户后台、管理员页等 │ │ │ ├── components/ ← 通用组件 AIChat/ 花傩角色 │ │ │ ├── composables/ ← useAIChat、useHuaNuo 等 │ │ │ ├── api/ ← axios 封装client.ts │ │ │ ├── stores/ ← Pinia auth store │ │ │ ├── types/ ← 前端类型 │ │ │ ├── locales/ ← i18n 文本1773 行 │ │ │ ├── assets/ ← 图片/音频视频通过 B 站播放器嵌入 │ │ │ └── router/ ← 34 条双语路由 role-based 守卫 │ │ ├── public/ ← favicon、robots.txt、sitemap.xml、CNAME、games/ │ │ ├── vite.config.ts │ │ └── tailwind.config.js │ │ │ └── backend/ ← NestJS 后端 │ ├── src/ │ │ ├── modules/ │ │ │ ├── ai/ ← AI 对话 RAG LLM 调用 │ │ │ ├── auth/ ← JWT 认证 万能验证码 │ │ │ ├── user/ ← 用户 CRUD │ │ │ ├── firework/ ← 烟花配方 │ │ │ ├── knowledge/ ← 知识库管理从 DB 读取 System Prompt │ │ │ ├── merchant/ ← 商户入驻 ADMIN 审核 │ │ │ └── coupon/ ← 优惠券 Redis 库存 核销 │ │ ├── prisma/ ← PrismaService │ │ ├── redis/ ← RedisServiceioredis 封装 │ │ ├── common/ ← 守卫、装饰器 │ │ └── main.ts │ └── prisma/ │ ├── schema.prisma ← 6 个数据模型 │ ├── seed.ts ← 68 条知识库 3 个演示商户 │ └── migrations/ ← 4 个数据库迁移 │ ├── scripts/ ← 预渲染等构建脚本 ├── .github/workflows/ ← CI类型检查Lint测试 自动部署 ├── pnpm-workspace.yaml ← pnpm 工作空间 ├── eslint.config.js ← ESLint 9 flat config ├── .prettierrc ← Prettier 配置 ├── CLAUDE.md ← Claude Code 项目文档 └── package.json ← 根 workspace快速开始环境要求Node.js 18.0pnpm 8.0PostgreSQL 16本地开发需安装并运行Redis 7需要运行1. 安装依赖npm install -g pnpm pnpm install2. 配置环境变量前端(packages/frontend/.env参考.env.example)VITE_AMAP_KEY你的高德地图Key VITE_AMAP_SECURITY_CODE你的高德地图安全密钥后端(packages/backend/.env参考.env.example)DATABASE_URLpostgresql://postgres:postgreslocalhost:5432/wanzai JWT_SECRET随机字符串建议 openssl rand -hex 32 REDIS_URLredis://localhost:6379 API_KEY你的LLM_API密钥 BASE_URLhttps://llmapi.paratera.com MODEL_NAMEMiniMax-M2.5 PORT30023. 初始化数据库# 启动 PostgreSQL brew services start postgresql16 # 创建数据库 createdb wanzai # 运行迁移 cd packages/backend pnpm prisma migrate dev # 导入种子数据68 条知识库 演示商户 pnpm prisma:seed4. 启动开发环境# 终端 1NestJS 后端端口 3002 pnpm dev:backend # 终端 2Vite 前端端口 5173 pnpm dev访问http://localhost:5173。5. 类型检查与测试pnpm typecheck # 全量类型检查 pnpm test # 运行测试 pnpm lint # ESLint6. 构建pnpm build # 构建前端 → packages/frontend/dist/ pnpm build:backend # 构建后端 → packages/backend/dist/API 接口所有接口前缀https://whizzzest-yanjingwanzai.top/api/v1/。模块端点方法鉴权说明AI/ai/chatPOST公开花傩 AI 对话RAG 增强知识库/knowledgeGET/POSTADMIN知识条目管理知识库/knowledge/:idPUT/DELETEADMIN知识条目更新认证/auth/loginPOST公开手机号注册/登录万能码000000认证/auth/refreshPOST公开刷新 Token用户/users/meGET/PUT登录当前用户资料用户/users/:idGET登录用户信息烟花/fireworksPOST登录保存配方烟花/fireworks/mineGET登录我的配方烟花/fireworks/:slugGET公开获取分享配方烟花/fireworks/popularGET公开热门排行榜烟花/fireworks/:idDELETE登录删除配方部署架构Nginx (端口 80/443) ├── 前端静态文件 /usr/share/nginx/html/dist/ ├── /api/ → localhost:8080 (NestJSpm2 管理) └── 后端依赖 PostgreSQL :5432 Redis :6379自动部署push 到main分支后GitHub Actions 自动执行.github/workflows/deploy.yml构建前端 后端rsync 前端 dist →/usr/share/nginx/html/dist/rsync 后端 dist prisma →/usr/share/nginx/wanzai-backend/npm install --prod→prisma generate→prisma migrate deploypm2 reload wanzai-backend健康检查详细配置和服务器运维指南见更新配置网站服务器.md。手动部署# 构建 pnpm build pnpm build:backend # 上传到服务器 scp -r packages/frontend/dist/* rootserver:/usr/share/nginx/html/dist/ scp -r packages/backend/dist/* rootserver:/usr/share/nginx/wanzai-backend/dist/ # 重启服务 ssh rootserver pm2 reload wanzai-backend开发规范提交规范遵循 Conventional Commitsfeat(firework): 新增烟花配方分享链接生成 fix(auth): 修复 Refresh Token 未清除的问题 refactor(map): 高德地图逻辑迁移至 useAmap composable docs: 更新 README 开发指南 chore: 升级依赖版本命名规范类别规范示例Vue 组件PascalCaseAIChatWidget.vueComposableuseXxxuseHuaNuo.tsTS 接口IXxxIFireworkRecipeNestJS 模块XxxModuleCouponModuleAPI 路由复数 REST/api/v1/fireworks/:idRedis Key冒号分隔coupon:stock:{id}代码风格TypeScript strict 模式Vue 3 Composition APIscript setup langtsPrettierprintWidth 100singleQuoteno semicolonsESLint 9 flat config提交前自动 lint国际化中文zh-CN默认英文en切换导航栏语言按钮 / URL 路径/en前缀PWA浏览器访问网站地址栏右侧点击安装图标支持离线访问、桌面图标、全屏体验新版本发布时顶部弹出更新提示条许可证本项目仅供学习和展示用途。详见 LICENSE。一朝相逢便是万载