{"id":24647183,"url":"https://github.com/indulgeback/react-questionnaire","last_synced_at":"2025-05-12T23:09:35.663Z","repository":{"id":267593357,"uuid":"898921605","full_name":"indulgeback/react-questionnaire","owner":"indulgeback","description":"小木问卷 - 问卷调查 ｜ 在线投票  -  基于Nestjs与React的问卷生成系统","archived":false,"fork":false,"pushed_at":"2025-05-12T08:59:02.000Z","size":14974,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-12T23:09:26.594Z","etag":null,"topics":["docker","docker-compose","monorepo","nestjs","nextjs","react"],"latest_commit_sha":null,"homepage":"https://xmquestionnaire.cn","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/indulgeback.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-12-05T09:40:31.000Z","updated_at":"2025-05-12T08:59:02.000Z","dependencies_parsed_at":"2024-12-25T12:20:23.689Z","dependency_job_id":"f216f801-9576-4d02-962d-fd1d5a5b294f","html_url":"https://github.com/indulgeback/react-questionnaire","commit_stats":null,"previous_names":["indulgeback/react-questionnaire"],"tags_count":49,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/indulgeback%2Freact-questionnaire","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/indulgeback%2Freact-questionnaire/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/indulgeback%2Freact-questionnaire/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/indulgeback%2Freact-questionnaire/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/indulgeback","download_url":"https://codeload.github.com/indulgeback/react-questionnaire/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253837443,"owners_count":21971984,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","docker-compose","monorepo","nestjs","nextjs","react"],"created_at":"2025-01-25T15:16:29.699Z","updated_at":"2025-05-12T23:09:35.654Z","avatar_url":"https://github.com/indulgeback.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🌟 小木问卷 (React Questionnaire)\r\n\r\n\u003cdiv align=\"center\"\u003e\r\n  \u003cimg src=\"https://img.shields.io/badge/React-18-61DAFB?logo=react\u0026logoColor=white\" alt=\"React\" /\u003e\r\n  \u003cimg src=\"https://img.shields.io/badge/NestJS-10-E0234E?logo=nestjs\u0026logoColor=white\" alt=\"NestJS\" /\u003e\r\n  \u003cimg src=\"https://img.shields.io/badge/NextJS-13-000000?logo=next.js\u0026logoColor=white\" alt=\"NextJS\" /\u003e\r\n  \u003cimg src=\"https://img.shields.io/badge/TypeScript-4-3178C6?logo=typescript\u0026logoColor=white\" alt=\"TypeScript\" /\u003e\r\n  \u003cimg src=\"https://img.shields.io/badge/License-MIT-yellow.svg\" alt=\"License: MIT\" /\u003e\r\n  \u003cimg src=\"https://img.shields.io/badge/LottieReact-2.4-00A3E0?logo=lottie\u0026logoColor=white\" alt=\"Lottie\" /\u003e\r\n  \u003cimg src=\"https://img.shields.io/badge/Ant%20Design-5.16-0170FE?logo=antdesign\u0026logoColor=white\" alt=\"Ant Design\" /\u003e\r\n  \u003cimg src=\"https://img.shields.io/badge/HeroUI-2.2-4F46E5?logo=heroicons\u0026logoColor=white\" alt=\"HeroUI\" /\u003e\r\n  \u003cimg src=\"https://img.shields.io/badge/TailwindCSS-3.4-06B6D4?logo=tailwindcss\u0026logoColor=white\" alt=\"TailwindCSS\" /\u003e\r\n  \u003cimg src=\"https://img.shields.io/badge/pnpm-10-F69220?logo=pnpm\u0026logoColor=white\" alt=\"pnpm\" /\u003e\r\n  \u003cimg src=\"https://img.shields.io/badge/Vite-5.3-646CFF?logo=vite\u0026logoColor=white\" alt=\"Vite\" /\u003e\r\n\u003c/div\u003e\r\n\r\n---\r\n\r\n## 📝 介绍\r\n\r\n小木问卷 - 基于 NestJS 的问卷生成系统\r\n\r\n### 🛠️ 技术栈\r\n\r\n- **前端(PC 端前台)** ：React18\r\n- **前端(移动端前台)** ：NextJS\r\n- **后端** ：NestJS\r\n- **数据库** ：MySQL + MongoDB + Redis\r\n- **AI 模型** ：DeepSeek Chat\r\n- **动画库** ：GSAP + lottie web\r\n- **UI 库** ：Ant Design + HeroUI + TailwindCSS\r\n- **前端构建工具** ：Vite + SWC\r\n- **包管理器** ：pnpm\r\n- **版本管理** ：Lerna\r\n- **代码规范** ：ESLint + Prettier\r\n- **提交规范** ：Husky + Commitlint\r\n- **单元测试** ：Jest\r\n- **开源协议** ：MIT\r\n\r\n---\r\n\r\n## ✨ 功能特性\r\n\r\n- 🎯 **问卷编辑器** ：拖拽式问卷设计器，支持组件拖拽、配置和预览\r\n- 🤖 **智能推荐** ：基于DeepSeek Chat模型的智能问卷推荐\r\n- 🧩 **组件配置** ：丰富的问卷组件配置选项，包括：\r\n  - 📋 标题组件配置\r\n  - 📄 段落组件配置\r\n  - ✏️ 简答题组件配置\r\n  - 🔘 单选题组件配置\r\n  - ☑️ 多选题组件配置\r\n  - 📊 NPS评分题组件配置\r\n  - ⭐ 评分（星级）组件配置\r\n  - 📅 日期选择组件配置\r\n  - 📝 下拉选择组件配置\r\n- 👁️ **实时预览** ：编辑过程中实时预览问卷效果\r\n- 📱 **响应式设计** ：同时支持PC端和移动端\r\n- 📈 **数据分析** ：问卷结果统计和可视化分析\r\n\r\n---\r\n\r\n## 🏗️ 软件架构\r\n\r\n- 📂 目录树：查看 `/doc/structure-tree.txt`\r\n- 📚 API 接口文档地址：查看 `/doc/apifox接口文档.txt`\r\n- 🔍 架构图：查看 `/doc/小木问卷软件架构图.pdf`\r\n- 💾 ER 图：查看 `/doc/ER.dio`\r\n\r\n---\r\n\r\n## 🚀 安装教程\r\n\r\n```bash\r\n# 在根目录使用 pnpm 安装依赖\r\npnpm i\r\n```\r\n\r\n---\r\n\r\n## 📋 使用说明\r\n\r\n\u003e ⚠️ 注：mac 或 linux 用户使用 husky 脚本时，请赋予执行权限\r\n\r\n```bash\r\n# 为 .husky 文件夹下的所有脚本添加执行权限\r\nchmod +x .husky/*\r\n```\r\n\r\n### 项目脚本\r\n\r\n项目 node 脚本 `scripts` 如下：\r\n\r\n```json\r\n\"scripts\": {\r\n    \"dev:fe\": \"pnpm -F @questionnaire/fe dev\",                // 前端服务开发模式\r\n    \"dev:client\": \"pnpm -F @questionnaire/client dev\",        // 移动端前端服务开发模式\r\n    \"dev:be\": \"pnpm -F @questionnaire/be start:dev\",          // 后端服务开发模式\r\n    \"generate-tree\": \"npx treer -e ./doc/structure-tree.txt -i \\\"/node_modules|.git|dist|.next|logs/\\\"\",  // 生成目录树\r\n    \"prepare\": \"husky install\",                               // 预装 husky\r\n    \"version\": \"npx lerna version --conventional-commits --no-git-tag-version --force-publish=*\",  // 发布版本号\r\n    \"postversion\": \"node scripts/postVersion.js\",             // 发布版本号后，自动打 tag\r\n    \"lint\": \"pnpm -F @questionnaire/fe lint \u0026\u0026 pnpm -F @questionnaire/be lint\",  // eslint 校验\r\n    \"format\": \"pnpm -F @questionnaire/fe format \u0026\u0026 pnpm -F @questionnaire/be format\",  // prettier 格式化代码\r\n    \"stat\": \"cloc --include-lang=JavaScript,TypeScript,SCSS,CSS,Markdown --exclude-dir='node_modules,dist,build,.next' .\",  // 统计代码行数\r\n    \"build:docker-compose:dev\": \"docker-compose down \u0026\u0026 docker-compose up --build -d\",  // 构建docker-compose\r\n    \"build:docker-images-and-push-to-registry\": \"node scripts/buildAndPushImageWithLernaVersion.js\"  // 构建docker镜像并推送到镜像仓库\r\n}\r\n```\r\n\r\n---\r\n\r\n## 🐳 容器化部署\r\n\r\n如需在本地或云服务器上部署，请复制根目录下 `/docker/docker-compose.yml` 配置文件到服务器，并修改相关配置（如 MySQL 密码等），然后执行 `docker-compose up -d`。未暴露的环境变量可在前后端项目的配置文件中自行修改，并将镜像推送到自己的仓库，记得修改相关的镜像配置。\r\n\r\n---\r\n\r\n## 🤝 参与贡献\r\n\r\n- 本 gitee 仓库仅为 github 镜像仓库，暂不处理 issue 和 pr，如有需求，请在 github 提 issue 或 pr。\r\n- 📦 **GitHub**: [https://github.com/indulgeback/react-questionnaire](https://github.com/indulgeback/react-questionnaire)\r\n- 📦 **Gitee**: [https://gitee.com/IndulgeBack/react-questionnaire](https://gitee.com/IndulgeBack/react-questionnaire)\r\n- 🏠 **个人主页**: [https://indulgeback.netlify.app/](https://indulgeback.netlify.app/) or [https://indulgeback.github.io/](https://indulgeback.github.io/)\r\n- 📧 **邮箱**: liuwenyu1937@outlook.com\r\n- 📝 **掘金**: [https://juejin.cn/user/1410020421418286](https://juejin.cn/user/1410020421418286)\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Findulgeback%2Freact-questionnaire","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Findulgeback%2Freact-questionnaire","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Findulgeback%2Freact-questionnaire/lists"}