From 1f5f8cc32b1e7bb01d72ddd7f708e72d17cb7a6a Mon Sep 17 00:00:00 2001 From: ylweng Date: Thu, 21 Aug 2025 02:41:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=B7=E5=80=BC=E8=A7=82=E3=80=81=E5=8F=91?= =?UTF-8?q?=E5=B1=95=E5=8E=86=E7=A8=8B=E5=92=8C=E5=9B=A2=E9=98=9F=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=20-=20=E6=96=B0=E5=A2=9E=20merchant/apply.html=20?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=EF=BC=8C=E6=8F=90=E4=BE=9B=E5=95=86=E5=AE=B6?= =?UTF-8?q?=E5=85=A5=E9=A9=BB=E7=94=B3=E8=AF=B7=E8=A1=A8=E5=8D=95=20-=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20.idea=20=E7=9B=AE=E5=BD=95=E4=B8=8B?= =?UTF-8?q?=E7=9A=84=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=EF=BC=8C=E7=94=A8?= =?UTF-8?q?=E4=BA=8E=E9=A1=B9=E7=9B=AE=E7=AE=A1=E7=90=86=E5=92=8C=E5=BC=80?= =?UTF-8?q?=E5=8F=91=E7=8E=AF=E5=A2=83=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.gitignore | 10 + .idea/UniappTool.xml | 10 + .idea/jiebanke.iml | 9 + .idea/modules.xml | 8 + .idea/vcs.xml | 7 + docs/architecture.md | 475 +++++++++++++++++++ docs/detailed_design.md | 827 ++++++++++++++++++++++++++++++++ docs/development_plan.md | 333 +++++++++++++ docs/requirements.md | 589 +++++++++++++++++++++++ up_website.sh | 20 + website/about.html | 283 +++++++++++ website/case.html | 285 +++++++++++ website/contact.html | 247 ++++++++++ website/css/style.css | 893 +++++++++++++++++++++++++++++++++++ website/favicon.ico | Bin 0 -> 9662 bytes website/images/logo.png | Bin 0 -> 4317 bytes website/index.html | 264 +++++++++++ website/merchant/apply.html | 302 ++++++++++++ website/merchant/index.html | 293 ++++++++++++ website/merchant/policy.html | 257 ++++++++++ 20 files changed, 5112 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/UniappTool.xml create mode 100644 .idea/jiebanke.iml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 docs/architecture.md create mode 100644 docs/detailed_design.md create mode 100644 docs/development_plan.md create mode 100644 docs/requirements.md create mode 100644 up_website.sh create mode 100644 website/about.html create mode 100644 website/case.html create mode 100644 website/contact.html create mode 100644 website/css/style.css create mode 100644 website/favicon.ico create mode 100644 website/images/logo.png create mode 100644 website/index.html create mode 100644 website/merchant/apply.html create mode 100644 website/merchant/index.html create mode 100644 website/merchant/policy.html diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..7d05e99 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# 依赖于环境的 Maven 主目录路径 +/mavenHomeManager.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/UniappTool.xml b/.idea/UniappTool.xml new file mode 100644 index 0000000..f7328e8 --- /dev/null +++ b/.idea/UniappTool.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/.idea/jiebanke.iml b/.idea/jiebanke.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/jiebanke.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..5c9f500 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..8306744 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/docs/architecture.md b/docs/architecture.md new file mode 100644 index 0000000..c723daa --- /dev/null +++ b/docs/architecture.md @@ -0,0 +1,475 @@ +# 结伴客系统架构文档 + +## 1. 架构图 + +``` ++------------------+ +------------+ +------------------+ +| 微信小程序 | | | | | +| (uni-app) | --> | API网关 | --> | 后端服务 | ++------------------+ | | | (Node.js+Express)| + +------------+ | | + +------------------+ + | + +-------+-------+ + | | + +-------v-----+ +-----v-------+ + | MySQL数据库 | | Redis缓存 | + +-------------+ +-------------+ + | + +-------v-------+ + | RabbitMQ消息队列 | + +-----------------+ + ++------------------+ +| 后台管理系统 | +| (Vue.js 3) | ++------------------+ + ++------------------+ +| 官网系统 | +| (HTML5+Bootstrap) | ++------------------+ +``` + +## 2. 项目结构 + +``` +结伴客项目 (根目录) +├── mini-program // 微信小程序 (uni-app) +│ ├── pages +│ │ ├── user // 用户相关页面 +│ │ │ ├── login // 登录页面 +│ │ │ ├── register // 注册页面 +│ │ │ ├── profile // 个人主页 +│ │ │ └── settings // 设置页面 +│ │ ├── merchant // 商家相关页面 +│ │ │ ├── register // 商家注册 +│ │ │ ├── profile // 商家主页 +│ │ │ └── dashboard // 商家控制台 +│ │ ├── travel // 旅行结伴页面 +│ │ │ ├── plan // 旅行计划 +│ │ │ ├── search // 搜索结伴 +│ │ │ └── activities // 其他活动 +│ │ ├── animal // 动物认领页面 +│ │ │ ├── list // 动物列表 +│ │ │ ├── detail // 动物详情 +│ │ │ └── claim // 认领流程 +│ │ ├── social // 社交互动页面 +│ │ │ ├── messages // 消息聊天 +│ │ │ └── feed // 动态分享 +│ │ ├── flower // 送花服务页面 +│ │ │ ├── products // 鲜花产品 +│ │ │ └── orders // 订单管理 +│ │ └── promotion // 推广奖励页面 +│ │ ├── invite // 邀请推广 +│ │ └── rewards // 奖励中心 +│ ├── components // 可复用组件 +│ │ ├── common // 通用组件 +│ │ ├── user // 用户相关组件 +│ │ ├── travel // 旅行相关组件 +│ │ ├── animal // 动物相关组件 +│ │ ├── social // 社交相关组件 +│ │ ├── merchant // 商家相关组件 +│ │ └── flower // 鲜花相关组件 +│ ├── utils // 工具函数 +│ │ ├── request // 网络请求封装 +│ │ ├── auth // 认证相关工具 +│ │ ├── storage // 存储相关工具 +│ │ └── helpers // 辅助函数 +│ ├── static // 静态资源 +│ │ ├── images // 图片资源 +│ │ └── styles // 样式文件 +│ └── store // 状态管理 +│ ├── modules // 模块化状态 +│ │ ├── user // 用户状态 +│ │ ├── travel // 旅行状态 +│ │ ├── animal // 动物状态 +│ │ ├── social // 社交状态 +│ │ ├── merchant // 商家状态 +│ │ ├── flower // 鲜花状态 +│ │ └── promotion // 推广状态 +│ └── index.js // 状态管理入口 +├── admin-system // 后台管理系统 (Vue.js 3 + TypeScript + Ant Design Vue + Pinia) +│ ├── public // 静态资源 +│ ├── src +│ │ ├── api // API接口 +│ │ │ ├── user // 用户相关接口 +│ │ │ ├── merchant // 商家相关接口 +│ │ │ ├── travel // 旅行相关接口 +│ │ │ ├── animal // 动物相关接口 +│ │ │ ├── order // 订单相关接口 +│ │ │ ├── promotion // 推广相关接口 +│ │ │ └── system // 系统管理接口 +│ │ ├── assets // 静态资源 +│ │ ├── components // 公共组件 +│ │ │ ├── layout // 布局组件 +│ │ │ ├── common // 通用组件 +│ │ │ ├── user // 用户相关组件 +│ │ │ ├── merchant // 商家相关组件 +│ │ │ ├── travel // 旅行相关组件 +│ │ │ ├── animal // 动物相关组件 +│ │ │ ├── order // 订单相关组件 +│ │ │ ├── promotion // 推广相关组件 +│ │ │ └── dashboard // 仪表板组件 +│ │ ├── composables // 组合式函数 +│ │ ├── directives // 自定义指令 +│ │ ├── layouts // 页面布局 +│ │ │ ├── default.vue // 默认布局 +│ │ │ ├── auth.vue // 认证布局 +│ │ │ └── empty.vue // 空白布局 +│ │ ├── locales // 国际化资源 +│ │ │ ├── zh-CN.json // 中文语言包 +│ │ │ └── en-US.json // 英文语言包 +│ │ ├── pages // 页面视图 +│ │ │ ├── dashboard // 仪表板页面 +│ │ │ ├── user // 用户管理页面 +│ │ │ ├── merchant // 商家管理页面 +│ │ │ ├── travel // 旅行管理页面 +│ │ │ ├── animal // 动物管理页面 +│ │ │ ├── order // 订单管理页面 +│ │ │ ├── promotion // 推广管理页面 +│ │ │ ├── system // 系统管理页面 +│ │ │ ├── login.vue // 登录页面 +│ │ │ └── register.vue // 注册页面 +│ │ ├── plugins // 插件 +│ │ ├── router // 路由配置 +│ │ │ ├── modules // 模块路由 +│ │ │ │ ├── user.ts // 用户路由 +│ │ │ │ ├── merchant.ts // 商家路由 +│ │ │ │ ├── travel.ts // 旅行路由 +│ │ │ │ ├── animal.ts // 动物路由 +│ │ │ │ ├── order.ts // 订单路由 +│ │ │ │ ├── promotion.ts // 推广路由 +│ │ │ │ └── system.ts // 系统路由 +│ │ │ └── index.ts // 路由入口 +│ │ ├── stores // 状态管理 +│ │ │ ├── modules // 模块状态 +│ │ │ │ ├── user.ts // 用户状态 +│ │ │ │ ├── merchant.ts // 商家状态 +│ │ │ │ ├── travel.ts // 旅行状态 +│ │ │ │ ├── animal.ts // 动物状态 +│ │ │ │ ├── order.ts // 订单状态 +│ │ │ │ ├── promotion.ts // 推广状态 +│ │ │ │ └── system.ts // 系统状态 +│ │ │ └── index.ts // 状态管理入口 +│ │ ├── styles // 样式文件 +│ │ ├── types // TypeScript类型定义 +│ │ ├── utils // 工具函数 +│ │ │ ├── request.ts // 请求封装 +│ │ │ ├── auth.ts // 认证工具 +│ │ │ ├── storage.ts // 存储工具 +│ │ │ ├── format.ts // 格式化工具 +│ │ │ └── validate.ts // 验证工具 +│ │ └── App.vue // 根组件 +│ │ └── main.ts // 入口文件 +│ ├── tests // 测试目录 +│ ├── .env // 环境配置 +│ ├── .env.development // 开发环境配置 +│ ├── .env.production // 生产环境配置 +│ ├── index.html // HTML模板 +│ ├── tsconfig.json // TypeScript配置 +│ ├── vite.config.ts // 构建配置 +│ └── package.json // 依赖配置 +├── website // 官网系统 (HTML5 + Bootstrap) +│ ├── index.html // 首页 +│ ├── about.html // 关于我们 +│ ├── contact.html // 联系我们 +│ ├── merchant // 商家合作页面 +│ │ ├── index.html // 商家合作首页 +│ │ ├── policy.html // 合作政策 +│ │ └── apply.html // 入驻申请 +│ ├── case.html // 案例展示 +│ ├── css // 样式文件 +│ │ ├── bootstrap.min.css // Bootstrap样式 +│ │ └── custom.css // 自定义样式 +│ ├── js // JavaScript文件 +│ │ ├── bootstrap.min.js // Bootstrap脚本 +│ │ └── custom.js // 自定义脚本 +│ ├── images // 图片资源 +│ └── vendor // 第三方库 +├── backend // 后端接口服务 (Node.js + Express) +│ ├── src +│ │ ├── controllers // 控制器层 +│ │ │ ├── user // 用户控制器 +│ │ │ ├── merchant // 商家控制器 +│ │ │ ├── travel // 旅行控制器 +│ │ │ ├── animal // 动物控制器 +│ │ │ ├── social // 社交控制器 +│ │ │ ├── flower // 鲜花控制器 +│ │ │ ├── promotion // 推广控制器 +│ │ │ └── auth // 认证控制器 +│ │ ├── services // 业务逻辑层 +│ │ │ ├── user // 用户服务 +│ │ │ ├── merchant // 商家服务 +│ │ │ ├── travel // 旅行服务 +│ │ │ ├── animal // 动物服务 +│ │ │ ├── social // 社交服务 +│ │ │ ├── flower // 鲜花服务 +│ │ │ ├── promotion // 推广服务 +│ │ │ └── auth // 认证服务 +│ │ ├── models // 数据模型层 +│ │ │ ├── user.js // 用户模型 +│ │ │ ├── merchant.js // 商家模型 +│ │ │ ├── travelPlan.js // 旅行计划模型 +│ │ │ ├── animal.js // 动物模型 +│ │ │ ├── claim.js // 认领模型 +│ │ │ ├── message.js // 消息模型 +│ │ │ ├── activity.js // 活动模型 +│ │ │ ├── product.js // 商品模型 +│ │ │ ├── order.js // 订单模型 +│ │ │ ├── review.js // 评价模型 +│ │ │ └── reward.js // 奖励模型 +│ │ ├── routes // 路由定义 +│ │ │ ├── api // API路由 +│ │ │ │ ├── v1 // v1版本API +│ │ │ │ │ ├── user.js // 用户相关API +│ │ │ │ │ ├── merchant.js // 商家相关API +│ │ │ │ │ ├── travel.js // 旅行相关API +│ │ │ │ │ ├── animal.js // 动物相关API +│ │ │ │ │ ├── social.js // 社交相关API +│ │ │ │ │ ├── flower.js // 鲜花相关API +│ │ │ │ │ └── promotion.js // 推广相关API +│ │ │ │ └── index.js // API路由入口 +│ │ │ └── web // Web路由(管理后台) +│ │ ├── middleware // 中间件 +│ │ │ ├── auth // 认证中间件 +│ │ │ ├── validation // 验证中间件 +│ │ │ ├── rateLimit // 限流中间件 +│ │ │ └── error // 错误处理中间件 +│ │ ├── utils // 工具函数 +│ │ │ ├── database // 数据库工具 +│ │ │ ├── logger // 日志工具 +│ │ │ ├── helpers // 辅助函数 +│ │ │ └── constants // 常量定义 +│ │ ├── config // 配置文件 +│ │ │ ├── database.js // 数据库配置 +│ │ │ ├── redis.js // Redis配置 +│ │ │ ├── rabbitmq.js // RabbitMQ配置 +│ │ │ └── app.js // 应用配置 +│ │ └── app.js // 应用入口 +│ ├── tests // 测试目录 +│ │ ├── unit // 单元测试 +│ │ └── integration // 集成测试 +│ ├── docs // 文档目录 +│ └── package.json // 依赖配置 +└── docs // 项目文档 + ├── requirements.md // 需求文档 + ├── architecture.md // 架构文档 + ├── detailed_design.md // 详细设计文档 + └── development_plan.md // 开发计划文档 +``` + + +## 2. 技术栈选型 + +### 2.1 后端技术栈 +- 编程语言:Node.js (TypeScript) +- 框架:Express.js +- API规范:RESTful API +- 容器化:Docker +- 容器编排:Kubernetes +- API网关:Kong +- 监控:Prometheus + Grafana +- 日志:ELK Stack (Elasticsearch, Logstash, Kibana) + +### 2.2 前端技术栈 +- 小程序框架:uni-app +- 开发语言:JavaScript/TypeScript +- UI框架:WeUI +- 状态管理:Redux +- 构建工具:Webpack +- 包管理:npm/yarn + +### 2.3 官网技术栈 +- 核心技术:HTML5 + Bootstrap +- 开发语言:JavaScript +- 构建工具:Webpack +- 包管理:npm/yarn + +### 2.3 数据库选型 +- 主数据库:MySQL 8.0 + +### 2.4 缓存选型 +- 分布式缓存:Redis Cluster +- 本地缓存:Node.js内置缓存 + +### 2.5 消息队列选型 +- 消息中间件:RabbitMQ +- 实时消息推送:WebSocket + +### 2.6 选型理由与对比分析 + +#### 后端技术栈选型理由 + +**Node.js (TypeScript) + Express.js** +- **优势**: + - 高性能:Node.js基于事件驱动和非阻塞I/O模型,适合高并发场景 + - 生态丰富:npm生态系统庞大,可快速集成各种第三方库 + - 全栈统一:前后端均可使用JavaScript/TypeScript,降低开发成本 + - 轻量级:Express.js是一个轻量级的Web框架,灵活性高 +- **劣势**: + - CPU密集型任务处理能力较弱 + - 回调地狱问题(TypeScript可有效缓解) + +#### 前端技术栈选型理由 + +**uni-app** +- **优势**: + - 一套代码多端运行:可同时发布到iOS、Android、H5、以及各种小程序平台 + - 开发生态:基于Vue.js,学习成本低,社区活跃 + - 性能优化:接近原生应用的性能体验 +- **劣势**: + - 平台限制:某些平台特定功能需要特殊处理 + - 复杂度:多端兼容可能带来额外的复杂性 + +#### 官网技术栈选型理由 + +**HTML5 + Bootstrap** +- **优势**: + - 简单易用:技术门槛低,开发效率高 + - 兼容性好:Bootstrap提供了良好的浏览器兼容性 + - 响应式设计:Bootstrap内置响应式布局,适配各种设备 + - 社区活跃:Bootstrap拥有庞大的社区和丰富的组件 +- **劣势**: + - 定制性相对较弱:需要额外工作来实现独特的设计效果 + - 文件体积:Bootstrap框架本身会增加页面加载体积 + +#### 数据库选型理由 + +**MySQL 8.0** +- **优势**: + - 成熟稳定:关系型数据库,事务支持完善 + - 生态丰富:社区活跃,文档齐全 + - 性能优化:MySQL 8.0在性能方面有显著提升 +- **劣势**: + - 水平扩展性相对较弱 + - 复杂查询性能可能不如专门的分析型数据库 + +#### 缓存选型理由 + +**Redis Cluster** +- **优势**: + - 高性能:内存数据库,读写速度极快 + - 分布式支持:Redis Cluster提供高可用和水平扩展能力 + - 丰富数据结构:支持字符串、哈希、列表、集合等多种数据结构 +- **劣势**: + - 内存成本:数据存储在内存中,成本较高 + - 持久化性能:持久化操作可能影响性能 + +#### 消息队列选型理由 + +**RabbitMQ** +- **优势**: + - 成熟稳定:经过多年发展,稳定性好 + - 协议支持:支持多种消息协议 + - 灵活路由:支持多种消息路由模式 +- **劣势**: + - 吞吐量:相比Kafka等大数据消息队列,吞吐量较低 + - Erlang语言:维护和调优需要掌握Erlang语言 + +**WebSocket** +- **优势**: + - 实时性:全双工通信,实时性好 + - 节省资源:相比轮询,节省网络资源 +- **劣势**: + - 连接管理:需要处理连接断开重连等问题 + - 浏览器兼容性:老旧浏览器支持不好 + +## 3. 部署视图 + +``` +外网: + ├── uni-app前端用户 --- HTTPS --> API网关 + ├── 官网用户 --- HTTPS --> Nginx反向代理 --> 官网系统 + └── 第三方支付平台 <-- 支付回调 --- 后端服务 + +腾讯云服务器: + ├── Nginx反向代理 --> 官网系统 + │ ├── 静态资源服务 + │ └── SSR渲染服务 (Nuxt.js) + ├── API网关 --> 后端服务 + ├── 后端服务 --> MySQL数据库 + ├── 后端服务 --> Redis缓存 + ├── 后端服务 --> RabbitMQ消息队列 + └── 后端服务 --监控--> Prometheus监控 --> Grafana + |--> ELK Stack +``` + +### 3.1 部署环境 +- 云服务提供商:腾讯云 +- 服务器配置:4台4核8GB服务器组成Kubernetes集群 +- 负载均衡:腾讯云负载均衡CLB +- SSL证书:腾讯云SSL证书服务 +- 域名解析:腾讯云DNS解析 +- 对象存储:腾讯云COS(用于存储图片、视频等静态资源) +- CDN加速:腾讯云CDN(用于加速静态资源访问) +- 反向代理:Nginx +- 静态资源服务器:Nginx + +### 3.2 部署流程 +1. 代码提交到Git仓库触发CI/CD流水线 +2. 通过Docker构建服务镜像并推送到镜像仓库 +3. Kubernetes从镜像仓库拉取镜像并部署服务 +4. 配置健康检查和自动扩缩容策略 +5. 配置监控和日志收集系统 +6. 配置域名解析和SSL证书 +7. 配置Nginx反向代理和静态资源服务器 + +### 3.3 备份与灾备 +- 数据库每日自动备份到COS +- 关键服务配置文件版本化管理 +- 多可用区部署实现高可用 + +## 4. 风险分析与应对策略 + +### 4.1 技术风险 + +#### 系统性能瓶颈 +- **风险描述**:随着用户量增长,系统可能面临性能瓶颈,特别是在高并发场景下。 +- **应对策略**: + - 使用Redis缓存热点数据,减少数据库访问压力 + - 对数据库进行读写分离和分库分表 + - 使用CDN加速静态资源访问 + - 实施自动扩缩容策略,根据负载动态调整服务实例数量 + +#### 数据安全风险 +- **风险描述**:系统涉及用户个人信息、支付信息等敏感数据,存在数据泄露风险。 +- **应对策略**: + - 对敏感数据进行加密存储(AES/RSA算法) + - 实施严格的访问控制和身份认证机制 + - 定期进行安全审计和渗透测试 + - 遵循GDPR等数据保护法规要求 + +### 4.2 业务风险 + +#### 用户增长压力 +- **风险描述**:产品上线后可能面临用户快速增长的压力,对系统稳定性提出挑战。 +- **应对策略**: + - 提前进行压力测试,评估系统承载能力 + - 设计可水平扩展的架构,支持快速扩容 + - 制定限流和降级策略,保证核心功能稳定运行 + +#### 商家服务质量风险 +- **风险描述**:商家用户提供的服务质量和用户体验直接影响平台声誉。 +- **应对策略**: + - 建立商家资质审核机制 + - 实施用户评价体系,公开服务评价 + - 建立投诉处理机制,及时处理用户反馈 + - 对低质量商家实施警告、限流或清退措施 + +### 4.3 运维风险 + +#### 系统监控不足 +- **风险描述**:缺乏有效的监控可能导致问题发现不及时,影响用户体验。 +- **应对策略**: + - 建立全方位监控体系,包括基础设施、应用性能、业务指标等 + - 设置合理的告警阈值和通知机制 + - 定期审查和优化监控策略 + +#### 故障恢复能力 +- **风险描述**:系统故障可能导致服务中断,影响业务连续性。 +- **应对策略**: + - 制定详细的应急预案和故障恢复流程 + - 定期进行故障演练,验证恢复能力 + - 实施多可用区部署,提高容灾能力 + - 建立数据库备份和恢复机制 \ No newline at end of file diff --git a/docs/detailed_design.md b/docs/detailed_design.md new file mode 100644 index 0000000..e9cd964 --- /dev/null +++ b/docs/detailed_design.md @@ -0,0 +1,827 @@ +# 结伴客系统详细设计文档 + +## 1. 数据库设计 + +### 1.1 ER图 + +```mermaid +erDiagram + USERS ||--o{ TRAVEL_PLANS : creates + USERS ||--o{ ANIMAL_CLAIMS : claims + USERS ||--o{ MESSAGES : sends + USERS ||--o{ ORDERS : places + USERS ||--o{ REVIEWS : writes + + MERCHANTS ||--o{ PRODUCTS : sells + MERCHANTS ||--o{ ORDERS : processes + MERCHANTS ||--o{ ACTIVITIES : organizes + MERCHANTS ||--o{ ANIMALS : manages + + TRAVEL_PLANS ||--o{ TRAVEL_MATCHES : matches + + ANIMALS ||--o{ ANIMAL_CLAIMS : claimed + ANIMALS ||--o{ ANIMAL_UPDATES : updates + + PRODUCTS ||--o{ ORDER_ITEMS : contains + + ORDERS ||--o{ ORDER_ITEMS : contains + ORDERS ||--o{ PAYMENTS : has + + ACTIVITIES ||--o{ ACTIVITY_REGISTRATIONS : registers + + USERS { + int id PK + string openid + string nickname + string avatar + string gender + date birthday + string phone + string email + datetime created_at + datetime updated_at + } + + MERCHANTS { + int id PK + int user_id FK + string merchant_type + string business_name + string business_license + string contact_person + string contact_phone + string address + string description + string status + datetime created_at + datetime updated_at + } + + TRAVEL_PLANS { + int id PK + int user_id FK + string destination + date start_date + date end_date + decimal budget + string interests + string visibility + datetime created_at + datetime updated_at + } + + TRAVEL_MATCHES { + int id PK + int plan_id FK + int matched_plan_id FK + decimal match_score + datetime created_at + } + + ANIMALS { + int id PK + int merchant_id FK + string name + string species + string breed + date birth_date + string personality + string farm_location + decimal price + string status + datetime created_at + datetime updated_at + } + + ANIMAL_CLAIMS { + int id PK + int user_id FK + int animal_id FK + decimal price_paid + string agreement_url + string status + datetime claimed_at + datetime ended_at + } + + ANIMAL_UPDATES { + int id PK + int animal_id FK + string update_type + string content + string media_url + datetime created_at + } + + PRODUCTS { + int id PK + int merchant_id FK + string name + string description + decimal price + string image_url + string category + string status + datetime created_at + datetime updated_at + } + + ORDERS { + int id PK + int user_id FK + int merchant_id FK + string order_number + decimal total_amount + string status + string delivery_address + datetime ordered_at + datetime completed_at + } + + ORDER_ITEMS { + int id PK + int order_id FK + int product_id FK + int quantity + decimal unit_price + } + + PAYMENTS { + int id PK + int order_id FK + string payment_method + string transaction_id + decimal amount + string status + datetime paid_at + } + + MESSAGES { + int id PK + int sender_id FK + int receiver_id FK + string content + string status + datetime sent_at + } + + REVIEWS { + int id PK + int user_id FK + int merchant_id FK + int order_id FK + int rating + string comment + datetime created_at + } + + ACTIVITIES { + int id PK + int merchant_id FK + string title + string description + string activity_type + datetime start_time + datetime end_time + string location + decimal fee + int max_participants + string status + datetime created_at + datetime updated_at + } + + ACTIVITY_REGISTRATIONS { + int id PK + int activity_id FK + int user_id FK + string status + datetime registered_at + } +``` + +### 1.2 核心表结构设计 + +#### 用户表 (users) +| 字段名 | 类型 | 约束 | 描述 | +|--------|------|------|------| +| id | INT | PRIMARY KEY, AUTO_INCREMENT | 用户ID | +| openid | VARCHAR(64) | UNIQUE, NOT NULL | 微信openid | +| nickname | VARCHAR(50) | NOT NULL | 用户昵称 | +| avatar | VARCHAR(255) | | 用户头像URL | +| gender | ENUM('male', 'female', 'other') | | 性别 | +| birthday | DATE | | 生日 | +| phone | VARCHAR(20) | UNIQUE | 手机号码 | +| email | VARCHAR(100) | UNIQUE | 邮箱地址 | +| created_at | DATETIME | NOT NULL | 创建时间 | +| updated_at | DATETIME | NOT NULL | 更新时间 | + +#### 商家表 (merchants) +| 字段名 | 类型 | 约束 | 描述 | +|--------|------|------|------| +| id | INT | PRIMARY KEY, AUTO_INCREMENT | 商家ID | +| user_id | INT | FOREIGN KEY, NOT NULL | 关联的用户ID | +| merchant_type | ENUM('flower_shop', 'activity_organizer', 'farm_owner') | NOT NULL | 商家类型 | +| business_name | VARCHAR(100) | NOT NULL | 商家名称 | +| business_license | VARCHAR(255) | | 营业执照图片URL | +| contact_person | VARCHAR(50) | NOT NULL | 联系人 | +| contact_phone | VARCHAR(20) | NOT NULL | 联系电话 | +| address | VARCHAR(255) | | 地址 | +| description | TEXT | | 商家介绍 | +| status | ENUM('pending', 'approved', 'rejected', 'suspended') | NOT NULL | 商家状态 | +| created_at | DATETIME | NOT NULL | 创建时间 | +| updated_at | DATETIME | NOT NULL | 更新时间 | + +#### 旅行计划表 (travel_plans) +| 字段名 | 类型 | 约束 | 描述 | +|--------|------|------|------| +| id | INT | PRIMARY KEY, AUTO_INCREMENT | 计划ID | +| user_id | INT | FOREIGN KEY, NOT NULL | 用户ID | +| destination | VARCHAR(100) | NOT NULL | 目的地 | +| start_date | DATE | NOT NULL | 开始日期 | +| end_date | DATE | NOT NULL | 结束日期 | +| budget | DECIMAL(10,2) | NOT NULL | 预算 | +| interests | TEXT | | 兴趣偏好 | +| visibility | ENUM('public', 'friends', 'private') | NOT NULL | 可见范围 | +| created_at | DATETIME | NOT NULL | 创建时间 | +| updated_at | DATETIME | NOT NULL | 更新时间 | + +#### 动物表 (animals) +| 字段名 | 类型 | 约束 | 描述 | +|--------|------|------|------| +| id | INT | PRIMARY KEY, AUTO_INCREMENT | 动物ID | +| merchant_id | INT | FOREIGN KEY, NOT NULL | 关联的农场商家ID | +| name | VARCHAR(50) | NOT NULL | 动物名称 | +| species | VARCHAR(50) | NOT NULL | 动物种类 | +| breed | VARCHAR(50) | | 品种 | +| birth_date | DATE | | 出生日期 | +| personality | TEXT | | 性格特点 | +| farm_location | VARCHAR(255) | | 农场位置 | +| price | DECIMAL(10,2) | NOT NULL | 认领价格 | +| status | ENUM('available', 'claimed', 'unavailable') | NOT NULL | 状态 | +| created_at | DATETIME | NOT NULL | 创建时间 | +| updated_at | DATETIME | NOT NULL | 更新时间 | + +#### 动物认领表 (animal_claims) +| 字段名 | 类型 | 约束 | 描述 | +|--------|------|------|------| +| id | INT | PRIMARY KEY, AUTO_INCREMENT | 认领ID | +| user_id | INT | FOREIGN KEY, NOT NULL | 用户ID | +| animal_id | INT | FOREIGN KEY, NOT NULL | 动物ID | +| price_paid | DECIMAL(10,2) | NOT NULL | 支付金额 | +| agreement_url | VARCHAR(255) | | 电子协议URL | +| status | ENUM('active', 'ended', 'cancelled') | NOT NULL | 认领状态 | +| claimed_at | DATETIME | NOT NULL | 认领时间 | +| ended_at | DATETIME | | 结束时间 | + +## 2. API设计 + +### 2.1 用户服务API + +#### 用户登录 +- **URL**: `POST /api/v1/users/login` +- **请求参数**: + ```json + { + "code": "微信登录凭证" + } + ``` +- **响应**: + ```json + { + "code": 0, + "message": "success", + "data": { + "token": "用户token", + "user": { + "id": 1, + "openid": "openid", + "nickname": "用户昵称", + "avatar": "头像URL" + } + } + } + ``` + +#### 获取用户信息 +- **URL**: `GET /api/v1/users/profile` +- **请求头**: `Authorization: Bearer {token}` +- **响应**: + ```json + { + "code": 0, + "message": "success", + "data": { + "id": 1, + "openid": "openid", + "nickname": "用户昵称", + "avatar": "头像URL", + "gender": "male", + "birthday": "1990-01-01", + "phone": "13800138000", + "email": "user@example.com" + } + } + ``` + +#### 更新用户信息 +- **URL**: `PUT /api/v1/users/profile` +- **请求头**: `Authorization: Bearer {token}` +- **请求参数**: + ```json + { + "nickname": "新昵称", + "gender": "female", + "birthday": "1995-01-01", + "phone": "13900139000", + "email": "new@example.com" + } + ``` +- **响应**: + ```json + { + "code": 0, + "message": "success", + "data": {} + } + ``` + +### 2.2 旅行服务API + +#### 创建旅行计划 +- **URL**: `POST /api/v1/travels/plans` +- **请求头**: `Authorization: Bearer {token}` +- **请求参数**: + ```json + { + "destination": "目的地", + "start_date": "2023-10-01", + "end_date": "2023-10-07", + "budget": 5000.00, + "interests": "徒步,摄影", + "visibility": "public" + } + ``` +- **响应**: + ```json + { + "code": 0, + "message": "success", + "data": { + "id": 1, + "user_id": 1, + "destination": "目的地", + "start_date": "2023-10-01", + "end_date": "2023-10-07", + "budget": 5000.00, + "interests": "徒步,摄影", + "visibility": "public", + "created_at": "2023-09-01T12:00:00Z" + } + } + ``` + +#### 获取旅行计划列表 +- **URL**: `GET /api/v1/travels/plans` +- **请求头**: `Authorization: Bearer {token}` +- **查询参数**: `page=1&size=10&visibility=public` +- **响应**: + ```json + { + "code": 0, + "message": "success", + "data": { + "list": [ + { + "id": 1, + "user_id": 1, + "destination": "目的地", + "start_date": "2023-10-01", + "end_date": "2023-10-07", + "budget": 5000.00, + "interests": "徒步,摄影", + "visibility": "public", + "created_at": "2023-09-01T12:00:00Z" + } + ], + "pagination": { + "page": 1, + "size": 10, + "total": 1 + } + } + } + ``` + +#### 匹配旅行伙伴 +- **URL**: `GET /api/v1/travels/matches` +- **请求头**: `Authorization: Bearer {token}` +- **查询参数**: `plan_id=1&page=1&size=10` +- **响应**: + ```json + { + "code": 0, + "message": "success", + "data": { + "list": [ + { + "id": 2, + "user_id": 2, + "destination": "目的地", + "start_date": "2023-10-02", + "end_date": "2023-10-08", + "budget": 4500.00, + "interests": "徒步,美食", + "match_score": 0.85 + } + ], + "pagination": { + "page": 1, + "size": 10, + "total": 1 + } + } + } + ``` + +### 2.3 动物认领服务API + +#### 获取可认领动物列表 +- **URL**: `GET /api/v1/animals` +- **请求头**: `Authorization: Bearer {token}` +- **查询参数**: `page=1&size=10&species=羊驼` +- **响应**: + ```json + { + "code": 0, + "message": "success", + "data": { + "list": [ + { + "id": 1, + "merchant_id": 1, + "name": "小羊驼", + "species": "羊驼", + "breed": "苏利羊驼", + "birth_date": "2020-01-01", + "personality": "温顺可爱", + "farm_location": "XX农场", + "price": 1000.00, + "status": "available" + } + ], + "pagination": { + "page": 1, + "size": 10, + "total": 1 + } + } + } + ``` + +#### 认领动物 +- **URL**: `POST /api/v1/animals/{id}/claim` +- **请求头**: `Authorization: Bearer {token}` +- **请求参数**: + ```json + { + "price_paid": 1000.00 + } + ``` +- **响应**: + ```json + { + "code": 0, + "message": "success", + "data": { + "id": 1, + "user_id": 1, + "animal_id": 1, + "price_paid": 1000.00, + "agreement_url": "https://example.com/agreement.pdf", + "status": "active", + "claimed_at": "2023-09-01T12:00:00Z" + } + } + ``` + +#### 获取认领记录 +- **URL**: `GET /api/v1/animals/claims` +- **请求头**: `Authorization: Bearer {token}` +- **查询参数**: `page=1&size=10&status=active` +- **响应**: + ```json + { + "code": 0, + "message": "success", + "data": { + "list": [ + { + "id": 1, + "user_id": 1, + "animal_id": 1, + "animal_name": "小羊驼", + "price_paid": 1000.00, + "status": "active", + "claimed_at": "2023-09-01T12:00:00Z" + } + ], + "pagination": { + "page": 1, + "size": 10, + "total": 1 + } + } + } + ``` + +### 2.4 商家服务API + +#### 商家注册 +- **URL**: `POST /api/v1/merchants/register` +- **请求头**: `Authorization: Bearer {token}` +- **请求参数**: + ```json + { + "merchant_type": "farm_owner", + "business_name": "XX农场", + "business_license": "https://example.com/license.jpg", + "contact_person": "张三", + "contact_phone": "13800138000", + "address": "北京市朝阳区XX路XX号", + "description": "专业养殖羊驼的农场" + } + ``` +- **响应**: + ```json + { + "code": 0, + "message": "success", + "data": { + "id": 1, + "user_id": 1, + "merchant_type": "farm_owner", + "business_name": "XX农场", + "business_license": "https://example.com/license.jpg", + "contact_person": "张三", + "contact_phone": "13800138000", + "address": "北京市朝阳区XX路XX号", + "description": "专业养殖羊驼的农场", + "status": "pending", + "created_at": "2023-09-01T12:00:00Z" + } + } + ``` + +#### 发布商品/服务 +- **URL**: `POST /api/v1/merchants/products` +- **请求头**: `Authorization: Bearer {token}` +- **请求参数**: + ```json + { + "name": "羊驼认领体验", + "description": "提供一个月的羊驼认领体验服务", + "price": 1000.00, + "image_url": "https://example.com/product.jpg", + "category": "animal_claim", + "status": "available" + } + ``` +- **响应**: + ```json + { + "code": 0, + "message": "success", + "data": { + "id": 1, + "merchant_id": 1, + "name": "羊驼认领体验", + "description": "提供一个月的羊驼认领体验服务", + "price": 1000.00, + "image_url": "https://example.com/product.jpg", + "category": "animal_claim", + "status": "available", + "created_at": "2023-09-01T12:00:00Z" + } + } + ``` + +#### 获取商家订单 +- **URL**: `GET /api/v1/merchants/orders` +- **请求头**: `Authorization: Bearer {token}` +- **查询参数**: `page=1&size=10&status=paid` +- **响应**: + ```json + { + "code": 0, + "message": "success", + "data": { + "list": [ + { + "id": 1, + "user_id": 2, + "order_number": "ORD202309010001", + "total_amount": 1000.00, + "status": "paid", + "ordered_at": "2023-09-01T12:00:00Z" + } + ], + "pagination": { + "page": 1, + "size": 10, + "total": 1 + } + } + } + ``` + +### 2.5 官网系统API + +#### 提交商家入驻申请 +- **URL**: `POST /api/v1/website/merchant/apply` +- **请求参数**: + ```json + { + "business_name": "XX农场", + "contact_person": "张三", + "contact_phone": "13800138000", + "email": "zhangsan@example.com", + "description": "专业养殖羊驼的农场" + } + ``` +- **响应**: + ```json + { + "code": 0, + "message": "success", + "data": { + "id": 1, + "business_name": "XX农场", + "contact_person": "张三", + "contact_phone": "13800138000", + "email": "zhangsan@example.com", + "description": "专业养殖羊驼的农场", + "status": "pending", + "created_at": "2023-09-01T12:00:00Z" + } + } + ``` + +#### 获取成功案例列表 +- **URL**: `GET /api/v1/website/cases` +- **查询参数**: `page=1&size=10` +- **响应**: + ```json + { + "code": 0, + "message": "success", + "data": { + "list": [ + { + "id": 1, + "title": "XX农场成功入驻案例", + "description": "XX农场通过平台实现了数字化转型", + "image_url": "https://example.com/case1.jpg", + "created_at": "2023-09-01T12:00:00Z" + } + ], + "pagination": { + "page": 1, + "size": 10, + "total": 1 + } + } + } + ``` + "image_url": "https://example.com/product.jpg", + "category": "animal_claim", + "status": "available", + "created_at": "2023-09-01T12:00:00Z" + } + } + ``` + +#### 获取商家订单 +- **URL**: `GET /api/v1/merchants/orders` +- **请求头**: `Authorization: Bearer {token}` +- **查询参数**: `page=1&size=10&status=paid` +- **响应**: + ```json + { + "code": 0, + "message": "success", + "data": { + "list": [ + { + "id": 1, + "user_id": 2, + "order_number": "ORD202309010001", + "total_amount": 1000.00, + "status": "paid", + "ordered_at": "2023-09-01T12:00:00Z" + } + ], + "pagination": { + "page": 1, + "size": 10, + "total": 1 + } + } + } + ``` + +## 3. 核心业务逻辑设计 + +### 3.1 旅行结伴流程 + +```mermaid +sequenceDiagram + participant U as 用户 + participant TP as 旅行计划服务 + participant TM as 旅行匹配服务 + participant N as 通知服务 + + U->>TP: 创建旅行计划 + TP->>TP: 保存计划 + TP-->>U: 返回计划详情 + + U->>TM: 请求匹配旅行伙伴 + TM->>TM: 根据条件匹配 + TM-->>U: 返回匹配结果 + + U->>U: 选择合适的伙伴 + U->>N: 发送结伴邀请 + N->>N: 发送通知给被邀请用户 + + Note over U,N: 被邀请用户接受邀请后, + Note over U,N: 系统创建结伴关系 +``` + +### 3.2 动物认领流程 + +```mermaid +sequenceDiagram + participant U as 用户 + participant A as 动物服务 + participant M as 商家服务 + participant P as 支付服务 + participant N as 通知服务 + + U->>A: 浏览可认领动物 + A-->>U: 返回动物列表 + + U->>A: 选择动物并认领 + A->>P: 创建支付订单 + P-->>U: 返回支付信息 + + U->>P: 完成支付 + P->>P: 验证支付结果 + P->>A: 通知支付成功 + + A->>A: 更新动物状态为已认领 + A->>M: 通知商家有新认领 + A->>N: 发送认领成功通知给用户 + + M->>M: 更新商家统计信息 + N->>N: 发送通知 +``` + +### 3.3 商家服务流程 + +```mermaid +sequenceDiagram + participant U as 用户 + participant M as 商家服务 + participant P as 商品服务 + participant O as 订单服务 + participant Pay as 支付服务 + participant N as 通知服务 + + U->>M: 申请成为商家 + M->>M: 审核商家资质 + M-->>U: 返回审核结果 + + alt 审核通过 + U->>P: 发布商品/服务 + P->>P: 保存商品信息 + P-->>U: 返回商品详情 + end + + U->>P: 浏览商品 + P-->>U: 返回商品列表 + + U->>O: 下单购买 + O->>Pay: 创建支付订单 + Pay-->>U: 返回支付信息 + + U->>Pay: 完成支付 + Pay->>Pay: 验证支付结果 + Pay->>O: 通知支付成功 + + O->>O: 更新订单状态 + O->>M: 通知商家有新订单 + O->>N: 发送购买成功通知给用户 + + M->>M: 处理订单 + N->>N: 发送通知 +``` \ No newline at end of file diff --git a/docs/development_plan.md b/docs/development_plan.md new file mode 100644 index 0000000..ad5385e --- /dev/null +++ b/docs/development_plan.md @@ -0,0 +1,333 @@ +# 开发计划 + +## 1. 任务分解 (WBS) + +### 1.1 后端开发任务 + +#### 1.1.1 基础服务搭建 +- 用户认证服务 (JWT Token管理) +- API网关配置 +- 微服务间通信机制 (gRPC/消息队列) +- 统一配置中心 +- 日志收集与监控系统 + +#### 1.1.2 核心业务服务开发 +- 用户管理服务 (用户注册、登录、信息管理) +- 旅行计划服务 (创建、查询、更新旅行计划) +- 旅行匹配服务 (基于兴趣和时间的匹配算法) +- 动物认领服务 (动物信息管理、认领流程) +- 社交互动服务 (消息发送、通知推送) + +#### 1.1.3 商家服务开发 +- 商家认证与管理服务 +- 商品/服务管理服务 +- 订单处理服务 +- 评价与反馈服务 + +#### 1.1.4 支付与安全服务 +- 支付服务集成 (微信支付) +- 数据加密与安全传输 +- API访问控制与权限管理 + +### 1.2 前端开发任务 + +#### 1.2.1 基础框架搭建 +- 微信小程序基础框架搭建 +- UI组件库集成 +- 状态管理配置 (Redux/Vuex类似) +- 网络请求封装 + +#### 1.2.2 用户端功能开发 +- 用户登录/注册页面 +- 个人中心页面 +- 旅行计划创建与浏览页面 +- 旅行伙伴匹配页面 +- 动物认领浏览与认领页面 +- 消息通知页面 + +#### 1.2.3 商家端功能开发 +- 商家注册与认证页面 +- 商家中心首页 +- 商品/服务管理页面 +- 订单管理页面 +- 评价管理页面 + +### 1.3 数据库开发任务 + +#### 1.3.1 数据库设计与创建 +- 核心表结构创建 (用户、商家、旅行计划等) +- 索引优化 +- 数据库分表分库设计 + +#### 1.3.2 数据库初始化 +- 初始化数据脚本编写 +- 数据迁移脚本 + +### 1.4 运维部署任务 + +#### 1.4.1 基础设施搭建 +- Kubernetes集群搭建 +- Redis集群部署 +- RabbitMQ部署 +- 数据库主从复制配置 + +#### 1.4.2 CI/CD流程配置 +- Jenkins/GitLab CI配置 +- 自动化测试集成 +- 自动化部署脚本 + +#### 1.4.3 监控与日志 +- Prometheus监控配置 +- Grafana仪表板配置 +- ELK日志收集系统配置 + +### 1.5 官网系统开发任务 + +#### 1.5.1 官网基础框架搭建 +- Nuxt.js 3框架搭建 +- TypeScript配置 +- Tailwind CSS集成 +- Pinia状态管理配置 +- API客户端封装 + +#### 1.5.2 官网页面开发 +- 官网首页开发 +- 商家合作页面开发 +- 成功案例页面开发 +- 关于我们页面开发 +- 联系我们页面开发 + +#### 1.5.3 官网功能开发 +- 商家入驻申请功能 +- 成功案例展示功能 +- 表单验证与提交功能 +- 响应式布局适配 + +#### 1.5.4 官网SEO优化 +- 页面SEO元信息配置 +- 站点地图生成 +- 搜索引擎优化配置 + +## 2. 工时估算 + +### 2.1 后端开发工时 + +#### 2.1.1 基础服务搭建 (15人日) +- 用户认证服务: 3人日 +- API网关配置: 2人日 +- 微服务间通信机制: 4人日 +- 统一配置中心: 3人日 +- 日志收集与监控系统: 3人日 + +#### 2.1.2 核心业务服务开发 (25人日) +- 用户管理服务: 4人日 +- 旅行计划服务: 5人日 +- 旅行匹配服务: 6人日 +- 动物认领服务: 5人日 +- 社交互动服务: 5人日 + +#### 2.1.3 商家服务开发 (20人日) +- 商家认证与管理服务: 5人日 +- 商品/服务管理服务: 5人日 +- 订单处理服务: 5人日 +- 评价与反馈服务: 5人日 + +#### 2.1.4 支付与安全服务 (10人日) +- 支付服务集成: 5人日 +- 数据加密与安全传输: 3人日 +- API访问控制与权限管理: 2人日 + +**后端开发总工时: 70人日** + +### 2.2 前端开发工时 + +#### 2.2.1 基础框架搭建 (10人日) +- 微信小程序基础框架搭建: 4人日 +- UI组件库集成: 2人日 +- 状态管理配置: 2人日 +- 网络请求封装: 2人日 + +#### 2.2.2 用户端功能开发 (25人日) +- 用户登录/注册页面: 3人日 +- 个人中心页面: 4人日 +- 旅行计划创建与浏览页面: 5人日 +- 旅行伙伴匹配页面: 6人日 +- 动物认领浏览与认领页面: 4人日 +- 消息通知页面: 3人日 + +#### 2.2.3 商家端功能开发 (20人日) +- 商家注册与认证页面: 4人日 +- 商家中心首页: 4人日 +- 商品/服务管理页面: 5人日 +- 订单管理页面: 4人日 +- 评价管理页面: 3人日 + +**前端开发总工时: 55人日** + +### 2.3 数据库开发工时 + +#### 2.3.1 数据库设计与创建 (8人日) +- 核心表结构创建: 5人日 +- 索引优化: 2人日 +- 数据库分表分库设计: 1人日 + +#### 2.3.2 数据库初始化 (2人日) +- 初始化数据脚本编写: 1人日 +- 数据迁移脚本: 1人日 + +**数据库开发总工时: 10人日** + +### 2.4 运维部署工时 + +#### 2.4.1 基础设施搭建 (15人日) +- Kubernetes集群搭建: 5人日 +- Redis集群部署: 3人日 +- RabbitMQ部署: 3人日 +- 数据库主从复制配置: 4人日 + +#### 2.4.2 CI/CD流程配置 (8人日) +- Jenkins/GitLab CI配置: 3人日 +- 自动化测试集成: 3人日 +- 自动化部署脚本: 2人日 + +#### 2.4.3 监控与日志 (4人日) +- Prometheus监控配置: 2人日 +- Grafana仪表板配置: 1人日 +- ELK日志收集系统配置: 1人日 + +**运维部署总工时: 27人日** + +### 2.5 官网系统开发工时 + +#### 2.5.1 官网基础框架搭建 (8人日) +- Nuxt.js 3框架搭建: 3人日 +- TypeScript配置: 1人日 +- Tailwind CSS集成: 2人日 +- Pinia状态管理配置: 1人日 +- API客户端封装: 1人日 + +#### 2.5.2 官网页面开发 (12人日) +- 官网首页开发: 3人日 +- 商家合作页面开发: 3人日 +- 成功案例页面开发: 2人日 +- 关于我们页面开发: 2人日 +- 联系我们页面开发: 2人日 + +#### 2.5.3 官网功能开发 (8人日) +- 商家入驻申请功能: 3人日 +- 成功案例展示功能: 2人日 +- 表单验证与提交功能: 2人日 +- 响应式布局适配: 1人日 + +#### 2.5.4 官网SEO优化 (3人日) +- 页面SEO元信息配置: 1人日 +- 站点地图生成: 1人日 +- 搜索引擎优化配置: 1人日 + +**官网系统开发总工时: 31人日** + +## 3. 开发里程碑 + +### 3.1 第一阶段:基础框架搭建 (预计4周) +- **时间**: 第1-4周 +- **目标**: 完成技术架构搭建和基础服务开发 +- **交付物**: + - 微服务架构搭建完成 + - API网关配置完成 + - 用户认证服务上线 + - 数据库环境搭建完成 + - 基础前端框架搭建完成 +- **关键任务**: + - 后端基础设施搭建 (15人日) + - 数据库设计与创建 (8人日) + - 前端基础框架搭建 (10人日) + - 运维环境搭建 (15人日) + +### 3.2 第二阶段:核心功能开发 (预计6周) +- **时间**: 第5-10周 +- **目标**: 完成用户端核心功能开发 +- **交付物**: + - 用户管理功能上线 + - 旅行计划功能上线 + - 旅行匹配功能上线 + - 动物认领功能上线 + - 社交互动功能上线 +- **关键任务**: + - 后端核心业务服务开发 (25人日) + - 前端用户端功能开发 (25人日) + - 支付服务集成 (5人日) + +### 3.3 第三阶段:商家功能开发 (预计5周) +- **时间**: 第11-15周 +- **目标**: 完成商家端功能开发 +- **交付物**: + - 商家认证功能上线 + - 商品/服务管理功能上线 + - 订单处理功能上线 + - 评价反馈功能上线 +- **关键任务**: + - 后端商家服务开发 (20人日) + - 前端商家端功能开发 (20人日) + - 安全服务完善 (5人日) + +### 3.4 第四阶段:官网系统开发 (预计4周) +- **时间**: 第16-19周 +- **目标**: 完成官网系统开发和部署 +- **交付物**: + - 官网系统上线 + - 商家入驻申请功能上线 + - 成功案例展示功能上线 +- **关键任务**: + - 官网基础框架搭建 (8人日) + - 官网页面开发 (12人日) + - 官网功能开发 (8人日) + - 官网SEO优化 (3人日) + +### 3.5 第五阶段:测试与优化 (预计3周) +- **时间**: 第20-22周 +- **目标**: 完成系统测试和性能优化 +- **交付物**: + - 系统测试报告 + - 性能优化报告 + - 安全审计报告 + - 上线部署包 +- **关键任务**: + - 功能测试 (10人日) + - 性能测试与优化 (8人日) + - 安全测试 (5人日) + - 用户验收测试 (5人日) + - 部署上线 (5人日) + +## 4. 资源分配建议 + +### 4.1 人员配置 +- **后端开发工程师**: 3人 +- **前端开发工程师**: 3人 (新增1名官网前端开发工程师) +- **数据库工程师**: 1人 +- **运维工程师**: 1人 +- **测试工程师**: 2人 +- **产品经理**: 1人 +- **UI/UX设计师**: 1人 (负责官网UI/UX设计) + +### 4.2 技术资源 +- **开发环境**: macOS/Linux开发机 x 8 +- **测试环境**: 腾讯云服务器 (2核4GB) x 3 +- **生产环境**: 腾讯云服务器 (4核8GB) x 4 +- **开发工具**: VS Code, IntelliJ IDEA, Docker, Kubernetes +- **项目管理**: Jira + Confluence + +### 4.3 时间安排建议 +- **总开发周期**: 22周 (约5.5个月) +- **并行开发**: 后端与前端可并行开发 +- **迭代周期**: 每2周一个迭代,每周进行代码评审 +- **里程碑评审**: 每个阶段结束后进行里程碑评审 + +### 4.4 风险控制 +- **技术风险**: 微服务架构复杂度高,需提前进行技术预研 +- **人员风险**: 关键岗位需有备份人员 +- **进度风险**: 预留2周缓冲时间应对不可预见问题 +- **质量风险**: 引入自动化测试,保证代码质量 +- **官网系统风险**: + - SEO优化效果不达预期 + - 浏览器兼容性问题 + - 响应式布局在不同设备上显示异常 \ No newline at end of file diff --git a/docs/requirements.md b/docs/requirements.md new file mode 100644 index 0000000..2952e1a --- /dev/null +++ b/docs/requirements.md @@ -0,0 +1,589 @@ +# 结伴客小程序需求文档 + +## 1. 产品概述 + +### 1.1 产品名称 +结伴客 + +### 1.2 产品定位 +结伴客是一款专注于结伴旅行活动的小程序,与其他交友平台不同的是,它包含了目的地牛、羊、猪、鸡等动物的认领功能,为用户提供独特的旅行体验。 + +### 1.3 目标用户 +#### 普通用户 +- 热爱旅行的年轻人 +- 希望通过旅行结识新朋友的用户 +- 对农场生活和动物互动感兴趣的用户 + +#### 商家用户 +- 花店老板:提供鲜花产品和服务 +- 活动组织者:组织各类结伴活动 +- 农场老板:提供动物认领和农场体验服务 + +### 1.4 核心价值 +- 为用户提供安全、便捷的结伴旅行服务 +- 通过动物认领功能,增加旅行的趣味性和独特性 +- 促进用户之间的社交互动,建立旅行伙伴关系 + +## 2. 功能需求 + +### 2.1 用户管理 +#### 普通用户 +- 用户注册/登录 +- 个人信息完善(头像、昵称、性别、年龄、兴趣爱好等) +- 个人主页展示 + +#### 商家用户 +- 商家注册/登录(需要资质审核) +- 商家信息完善(店铺名称、营业执照、联系方式、服务介绍等) +- 商家主页展示(包含服务项目、评价等) + +### 2.2 旅行结伴 +- 发布旅行计划(目的地、时间、天数、预算、兴趣偏好等) +- 浏览和搜索其他用户的旅行计划 +- 根据条件匹配相似行程的用户 +- 发起结伴邀请 +- 接受/拒绝结伴邀请 +- 发起和参与其他结伴活动(看电影、拼饭、桌游等) +- 基于定位查看周围或某个区域的目的地信息 + +### 2.3 动物认领 +- 浏览可认领的动物(牛、羊、猪、鸡等) +- 查看动物详情(品种、年龄、性格特点、所在农场等) +- 认领动物(支付认领费用、签订电子协议) +- 查看认领的动物状态(生长记录、健康状况等) +- 与认领的动物互动(视频监控、喂养记录等) + +### 2.4 社交互动 +- 用户之间发送消息 +- 评论和点赞功能 +- 分享旅行经历和动物认领体验 + +### 2.5 安全保障 +- 用户评价体系 +- 紧急联系功能 +- 举报和投诉机制 + +### 2.6 用户推广奖励机制 +- 用户可以通过分享小程序获得推广链接 +- 新用户通过推广链接注册可获得奖励 +- 推广者根据推广效果获得相应奖励 +- 用户分享活动可获得奖励 +- 用户分享认养可获得奖励 +- 邀请多人认养一个动物可获得奖励 +- 推广数据统计和奖励发放机制 +- 推广奖励提现功能 + +### 2.7 送花服务 +#### 普通用户功能 +- 浏览合作花店的鲜花产品 +- 在线选择并订购鲜花 +- 选择送花对象(结伴伙伴或特定用户) +- 跟踪送花订单状态 + +#### 商家用户(花店老板)功能 +- 管理鲜花产品(添加、编辑、删除商品信息) +- 管理订单(查看、处理、更新订单状态) +- 设置配送范围和时间 +- 查看销售数据和收益统计 + +### 2.8 官网功能 +#### 普通用户功能 +- 浏览官网首页,了解平台介绍和核心功能 +- 查看成功案例和用户评价 +- 浏览动物认领和旅行结伴相关资讯 +- 通过官网直接跳转至小程序 + +#### 商家用户功能 +- 通过官网了解平台商业模式和收益机制 +- 查看商家合作政策和入驻流程 +- 在线提交商家入驻申请 +- 查看商家成功案例和收益数据 + +## 3. 用户故事 + +### 3.1 旅行结伴功能 + +#### 故事1:发布旅行计划 +**As a** 旅行爱好者 +**I want to** 发布我的旅行计划 +**So that** 其他用户可以看到我的行程并申请结伴 + +**验收标准:** +- 用户可以填写目的地、时间、天数、预算等信息 +- 用户可以设置行程的可见范围 +- 发布成功后,其他用户可以搜索到该行程 + +### 3.8 官网功能 + +#### 故事22:浏览官网了解平台信息 +**As a** 潜在用户 +**I want to** 通过官网了解平台信息 +**So that** 我可以更好地了解平台功能并决定是否使用 + +**验收标准:** +- 用户可以访问官网首页 +- 用户可以浏览平台介绍和核心功能 +- 用户可以查看成功案例和用户评价 +- 用户可以通过官网直接跳转至小程序 + +#### 故事23:商家通过官网了解合作政策 +**As a** 潜在商家 +**I want to** 通过官网了解商家合作政策 +**So that** 我可以了解入驻条件和收益机制 + +**验收标准:** +- 商家可以访问官网商家合作页面 +- 商家可以查看合作政策和入驻流程 +- 商家可以在线提交入驻申请 +- 商家可以查看成功案例和收益数据 + +#### 故事2:寻找结伴伙伴 +**As a** 旅行者 +**I want to** 根据条件搜索和匹配相似行程的用户 +**So that** 我能找到合适的结伴伙伴 + +**验收标准:** +- 用户可以根据目的地、时间等条件筛选行程 +- 系统能推荐匹配度高的行程 +- 用户可以查看其他用户的详细信息和评价 + +#### 故事3:发起结伴邀请 +**As a** 旅行者 +**I want to** 向匹配的用户发起结伴邀请 +**So that** 我可以与他们一起旅行 + +**验收标准:** +- 用户可以向其他用户发送结伴邀请 +- 被邀请用户可以接受或拒绝邀请 +- 双方接受邀请后建立结伴关系 + +#### 故事4:基于定位查看目的地信息 +**As a** 旅行者 +**I want to** 基于我的位置查看周围的目的地信息 +**So that** 我可以发现附近有趣的旅行地点 + +**验收标准:** +- 用户可以授权小程序获取当前位置 +- 系统根据用户位置显示附近的目的地信息 +- 用户可以查看目的地的详细信息(距离、评分、特色等) +- 用户可以根据距离、评分等条件筛选目的地 +- 用户可以将感兴趣的目的地添加到旅行计划中 + +#### 故事12:发起其他结伴活动 +**As a** 用户 +**I want to** 发起看电影、拼饭、桌游等结伴活动 +**So that** 我可以与志趣相投的伙伴一起享受休闲时光 + +**验收标准:** +- 用户可以选择活动类型(看电影、拼饭、桌游等) +- 用户可以设置活动时间、地点、人数要求等信息 +- 其他用户可以浏览和申请参加活动 +- 发起者可以接受或拒绝参与申请 + +### 3.2 动物认领功能 + +#### 故事4:浏览可认领动物 +**As a** 对农场生活感兴趣的用户 +**I want to** 浏览可认领的动物 +**So that** 我可以选择自己喜欢的动物进行认领 + +**验收标准:** +- 用户可以查看所有可认领的动物列表 +- 每个动物都有详细的介绍(品种、年龄、性格特点等) +- 用户可以根据动物类型进行筛选 + +#### 故事5:认领动物 +**As a** 用户 +**I want to** 认领我喜欢的动物 +**So that** 我可以体验农场生活并与动物互动 + +**验收标准:** +- 用户可以选择动物并支付认领费用 +- 系统生成电子协议供用户签署 +- 认领成功后,用户可以在个人中心查看认领的动物 + +#### 故事6:与认领动物互动 +**As a** 动物认领者 +**I want to** 通过视频监控和喂养记录与认领的动物互动 +**So that** 我可以随时了解动物的状态并参与其成长过程 + +**验收标准:** +- 用户可以实时查看动物的视频监控 +- 用户可以记录喂养情况 +- 系统会推送动物的生长记录和健康状况 + +### 3.3 社交互动功能 + +#### 故事7:发送消息 +**As a** 用户 +**I want to** 与其他用户发送消息 +**So that** 我可以与他们沟通旅行细节 + +**验收标准:** +- 用户可以向其他用户发送文本消息 +- 用户可以查看聊天记录 +- 支持消息提醒功能 + +#### 故事8:分享旅行经历 +**As a** 旅行者 +**I want to** 分享我的旅行经历和动物认领体验 +**So that** 其他用户可以了解我的旅行故事 + +**验收标准:** +- 用户可以发布图文动态 +- 其他用户可以点赞和评论 +- 动态会显示在用户的个人主页 + +### 3.4 送花服务功能 + +#### 故事9:浏览并订购鲜花 +**As a** 用户 +**I want to** 浏览合作花店的鲜花产品并在线订购 +**So that** 我可以向结伴伙伴或特定用户表达心意 + +**验收标准:** +- 用户可以浏览合作花店的鲜花产品 +- 用户可以选择鲜花并添加到购物车 +- 用户可以完成在线支付 +- 系统将订单信息同步至实体花店 + +#### 故事10:选择送花对象 +**As a** 用户 +**I want to** 选择送花对象 +**So that** 我可以将鲜花送给特定的人 + +**验收标准:** +- 用户可以从结伴伙伴列表中选择送花对象 +- 用户可以通过搜索选择其他用户作为送花对象 +- 系统会显示送花对象的基本信息 + +#### 故事11:跟踪送花订单 +**As a** 用户 +**I want to** 跟踪送花订单状态 +**So that** 我可以了解鲜花送达情况 + +**验收标准:** +- 用户可以在个人中心查看送花订单列表 +- 用户可以查看每个订单的当前状态(已下单、已接单、配送中、已完成) +- 系统会在订单状态更新时推送通知 + +#### 故事18:管理鲜花产品 +**As a** 花店老板 +**I want to** 管理我的鲜花产品 +**So that** 我可以向用户提供最新的产品信息 + +**验收标准:** +- 商家可以添加新的鲜花产品(图片、名称、价格、描述等) +- 商家可以编辑现有产品信息 +- 商家可以删除下架的产品 +- 用户可以浏览到更新后的产品信息 + +#### 故事19:管理订单 +**As a** 花店老板 +**I want to** 管理用户的送花订单 +**So that** 我可以及时处理订单并提供配送服务 + +**验收标准:** +- 商家可以在商家中心查看所有订单 +- 商家可以更新订单状态(已接单、配送中、已完成) +- 系统会向用户推送订单状态更新通知 +- 商家可以查看订单统计信息 + +### 3.5 用户推广奖励机制 + +#### 故事12:获取推广链接 +**As a** 用户 +**I want to** 获取专属推广链接 +**So that** 我可以分享给朋友并获得奖励 + +**验收标准:** +- 用户可以在个人中心找到推广功能入口 +- 系统为每个用户生成唯一的推广链接 +- 用户可以通过多种方式分享推广链接(微信、朋友圈等) + +#### 故事13:查看推广数据和奖励 +**As a** 用户 +**I want to** 查看我的推广数据和奖励情况 +**So that** 我可以了解推广效果和收益 + +**验收标准:** +- 用户可以在个人中心查看推广数据(推广人数、成功注册数等) +- 用户可以查看累计获得的奖励金额 +- 用户可以查看奖励发放记录 + +#### 故事14:提现推广奖励 +**As a** 用户 +**I want to** 提现我的推广奖励 +**So that** 我可以将奖励转换为实际收益 + +**验收标准:** +- 用户可以在个人中心申请提现 +- 用户需要绑定提现账户(微信钱包等) +- 系统处理提现申请并在规定时间内到账 + +### 3.6 活动分享奖励 + +#### 故事15:分享活动获得奖励 +**As a** 用户 +**I want to** 分享我参与的活动 +**So that** 我可以获得奖励并邀请更多人参与 + +**验收标准:** +- 用户可以分享自己参与的结伴活动 +- 系统记录分享行为并给予相应奖励 +- 被邀请用户通过分享链接参与活动时,分享者可获得额外奖励 + +### 3.7 认养分享奖励 + +#### 故事16:分享认养获得奖励 +**As a** 用户 +**I want to** 分享我的动物认养 +**So that** 我可以获得奖励并让更多人了解认养 + +**验收标准:** +- 用户可以分享自己认养的动物信息 +- 系统记录分享行为并给予相应奖励 +- 其他用户通过分享链接认养动物时,分享者可获得额外奖励 + +### 3.8 多人认养奖励 + +#### 故事17:邀请多人认养一个动物 +**As a** 用户 +**I want to** 邀请朋友一起认养一个动物 +**So that** 我可以与朋友共同体验认养乐趣并获得奖励 + +**验收标准:** +- 用户可以邀请朋友共同认养一个动物 +- 系统支持多人认养同一个动物 +- 成功邀请朋友认养后,邀请者可获得奖励 + +### 3.9 活动组织者功能 + +#### 故事20:发布和管理结伴活动 +**As a** 活动组织者 +**I want to** 发布和管理结伴活动 +**So that** 我可以为用户提供丰富的活动选择 + +**验收标准:** +- 活动组织者可以发布新的结伴活动(类型、时间、地点、费用等) +- 活动组织者可以编辑已发布的活动信息 +- 活动组织者可以查看活动报名情况 +- 活动组织者可以取消活动并通知报名用户 + +### 3.10 农场老板功能 + +#### 故事21:管理动物认领信息 +**As a** 农场老板 +**I want to** 管理农场动物认领信息 +**So that** 我可以为用户提供准确的认领服务 + +**验收标准:** +- 农场老板可以添加新的可认领动物 +- 农场老板可以更新动物状态信息(生长记录、健康状况等) +- 农场老板可以查看认领情况和认领者信息 +- 农场老板可以设置认领费用和条件 + +## 4. 非功能性需求 + +### 4.1 性能需求 +- 页面加载时间不超过3秒 +- 支持同时在线用户数1000人 +- 商家服务页面加载时间不超过2秒 + +### 4.2 安全需求 +- 用户数据加密存储 +- 敏感操作需要二次确认 +- 防止SQL注入和XSS攻击 +- 商家资质信息加密存储 +- 商家与用户交易记录加密存储 +- 商家服务评价数据防篡改 + +### 4.3 兼容性需求 +- 支持微信小程序平台 +- 兼容不同屏幕尺寸的移动设备 + +## 5. 优先级建议 + +### 5.1 功能优先级(MoSCoW模型) + +**Must Have(必须有):** +- 用户注册/登录 +- 发布和浏览旅行计划 +- 基本的结伴匹配功能 +- 动物认领核心功能 + +**Should Have(应该有):** +- 用户评价体系 +- 消息发送功能 +- 动物状态查看 +- 其他结伴活动功能 +- 用户推广奖励机制 +- 活动分享奖励功能 +- 认养分享奖励功能 +- 多人认养奖励功能 +- 商家用户管理功能 +- 花店商家功能 +- 活动组织者功能 +- 农场老板功能 +- 官网功能 + +**Could Have(可以有):** +- 视频监控功能 +- 个性化推荐算法 +- 社区动态分享 +- 送花服务基础功能 +- 基于定位查看目的地信息功能 + +**Won't Have(不会有):** +- 虚拟现实农场体验 +- AI智能行程规划 +- 虚拟送花效果预览 + +## 6. 原型构思 + +### 6.1 主要界面 + +#### 首页 +- 顶部搜索栏(搜索目的地、用户、动物) +- 轮播图展示热门旅行路线和动物认领活动 +- 两个主要功能入口:"找搭子"和"认领动物" +- 推荐的旅行计划列表 + +#### 旅行计划页面 +- 发布旅行计划按钮 +- 筛选条件(目的地、时间、预算等) +- 旅行计划卡片列表(显示基本信息和匹配度) + +#### 结伴活动页面 +- 发布结伴活动按钮 +- 活动类型筛选(看电影、拼饭、桌游等) +- 活动卡片列表(显示活动类型、时间、地点、参与人数等信息) + +#### 动物认领页面 +- 动物分类筛选 +- 动物卡片列表(显示动物图片、基本信息) +- 认领排行榜(最受欢迎的动物) + +#### 个人中心 +- 用户头像和基本信息 +- 我的旅行计划 +- 我认领的动物 +- 我的送花记录 +- 我的推广奖励 +- 我的活动分享 +- 我的认养分享 +- 多人认养邀请 +- 消息通知 +- 设置选项 + +#### 送花服务页面 +- 鲜花产品展示(图片、价格、花语介绍) +- 分类筛选(节日、用途、价格区间等) +- 购物车功能 +- 订单确认页面(选择送花对象、填写祝福语、选择配送时间) + +#### 推广奖励页面 +- 推广链接展示和复制功能 +- 二维码推广海报生成 +- 推广数据统计图表(推广人数、注册人数、收益等) +- 奖励明细列表 +- 提现功能入口 + +#### 定位功能页面 +- 基于用户当前位置显示附近的目的地 +- 地图视图展示目的地位置 +- 目的地列表视图(包含距离、评分等信息) +- 筛选功能(按距离、评分、特色等条件筛选) +- 搜索功能(搜索特定区域或目的地) + +#### 活动分享页面 +- 用户参与的活动列表 +- 活动分享按钮和分享统计 +- 分享奖励记录 + +#### 认养分享页面 +- 用户认养的动物列表 +- 动物分享按钮和分享统计 +- 分享奖励记录 + +#### 多人认养邀请页面 +- 可邀请的动物列表 +- 邀请好友功能 +- 邀请记录和奖励明细 + +#### 商家中心首页 +- 商家信息展示 +- 服务概览(订单数、收益、评价等) +- 快捷操作入口(发布产品、查看订单等) + +#### 官网首页 +- 平台介绍和核心功能展示 +- 成功案例和用户评价展示 +- 动物认领和旅行结伴相关资讯 +- 小程序跳转入口 + +#### 商家合作页面 +- 平台商业模式和收益机制介绍 +- 商家合作政策和入驻流程 +- 在线入驻申请表单 +- 商家成功案例和收益数据展示 + +#### 商品管理页面 +- 商品列表展示 +- 添加/编辑商品功能 +- 商品状态管理(上架/下架) + +#### 订单管理页面 +- 订单列表展示 +- 订单状态更新功能 +- 订单详情查看 + +#### 活动管理页面 +- 活动列表展示 +- 发布/编辑活动功能 +- 活动报名情况查看 + +#### 动物管理页面 +- 可认领动物列表 +- 添加/编辑动物信息功能 +- 动物状态更新功能 + +### 6.2 核心流程 + +#### 结伴流程: +1. 用户发布旅行计划 +2. 系统匹配相似行程 +3. 用户发起结伴邀请 +4. 被邀请用户接受邀请 +5. 双方建立结伴关系,开始沟通 + +#### 认领流程: +1. 用户浏览可认领动物 +2. 选择心仪动物 +3. 支付认领费用 +4. 签署电子协议 +5. 开始与动物互动 + +#### 商家服务流程: +1. 商家注册并完善信息 +2. 商家发布服务/产品 +3. 用户浏览并选择服务/产品 +4. 用户下单并支付 +5. 商家处理订单 +6. 服务完成,用户评价 + +## 7. 验收标准 + +### 7.1 功能验收 +- 所有用户故事的验收标准均已满足 +- 功能测试通过率达到95%以上 +- 用户界面符合设计要求 + +### 7.2 性能验收 +- 页面加载时间符合要求 +- 系统稳定性测试通过 +- 压力测试达到预期指标 + +### 7.3 安全验收 +- 安全测试通过 +- 用户隐私保护符合法规要求 \ No newline at end of file diff --git a/up_website.sh b/up_website.sh new file mode 100644 index 0000000..3129ab5 --- /dev/null +++ b/up_website.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# 配置参数 +LOCAL_DIR="/Users/ainongkeji/code/vue/jiebanke/website" +REMOTE_USER="root" +REMOTE_HOST="119.45.104.14" +REMOTE_DIR="/data/php/jiebanke/www" +PASSWORD="Aiotjkl$741515" + +# 检查本地目录是否存在 +if [ ! -d "$LOCAL_DIR" ]; then + echo "错误:本地目录 $LOCAL_DIR 不存在!" + exit 1 +fi + +# 使用 rsync 上传文件 +echo "开始上传文件到远程服务器..." +rsync -avz --progress --delete "$LOCAL_DIR/" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/" + +echo "上传完成!" diff --git a/website/about.html b/website/about.html new file mode 100644 index 0000000..dfe27b3 --- /dev/null +++ b/website/about.html @@ -0,0 +1,283 @@ + + + + + + 关于我们 - 结伴客 + + + + + + + + + + +
+
+

关于我们

+

人生本就是一段孤独的旅程,所有的相遇都不是必然,但我们相信,每一次结伴都值得珍惜
让我们一起创造美好的回忆

+
+
+ + +
+
+
+

公司介绍

+
+
+ +
+
+

结伴客平台成立于2015年,专注于为用户提供独特的旅行结伴和动物认领服务。我们相信,旅行不仅是看风景,更是与人分享、与自然互动的过程。

+

通过我们的平台,用户可以找到志同道合的旅行伙伴,一起探索世界的美好;也可以认领可爱的动物,体验农场生活,感受生命的温暖。我们致力于打造一个温暖、有趣、有意义的社交旅行平台。

+
+
+
+ + +
+
+
+

核心价值观

+
+
+ +
+
+
+
+ +
+

真诚

+

我们坚持以真诚的态度对待每一位用户和合作伙伴,建立信任关系。

+
+
+ +
+
+
+ +
+

创新

+

我们不断探索新的服务模式,为用户带来独特的体验。

+
+
+ +
+
+
+ +
+

共享

+

我们倡导分享精神,让用户在平台上共享快乐和经验。

+
+
+
+
+ + +
+
+
+

发展历程

+
+
+ +
+
+
+
+ +
+
2015年 - 平台成立
+

结伴客平台正式成立,专注于旅行结伴服务。

+
+ +
+
+ +
+
2017年 - 服务升级
+

推出动物认领服务,为用户提供更多元化的体验。

+
+ +
+
+ +
+
2019年 - 用户突破
+

注册用户突破10万,合作商家达到500家。

+
+ +
+
+ +
+
2021年 - 服务拓展
+

新增送花服务,丰富用户体验。

+
+ +
+
+ +
+
2023年 - 技术革新
+

全面升级平台技术架构,提升用户体验。

+
+
+
+
+ + +
+
+
+

我们的团队

+
+
+ +
+
+
+ CEO +
张总
+

首席执行官

+
+
+ +
+
+ CTO +
李总
+

首席技术官

+
+
+ +
+
+ COO +
王总
+

首席运营官

+
+
+ +
+
+ CMO +
刘总
+

首席市场官

+
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/website/case.html b/website/case.html new file mode 100644 index 0000000..c868eb4 --- /dev/null +++ b/website/case.html @@ -0,0 +1,285 @@ + + + + + + 成功案例 - 结伴客 + + + + + + + + + + +
+
+

成功案例

+

人生就像一场旅行,每一次结伴都是一段独特的故事
看看我们的用户和商家如何创造美好回忆

+
+
+ + +
+
+
+

用户案例

+
+
+ +
+
+
+ 用户案例1 +
+
从陌生人到旅行伙伴
+
+
+

通过结伴客找到了同样喜欢徒步的小王,两人一起完成了川藏线的徒步旅行,成为了很好的朋友。

+
+ 查看详情 +
+
+
+ +
+
+ 用户案例2 +
+
难忘的农场体验
+
+
+

认领了一只小羊,定期到农场看望它,体验了真正的农场生活,这成为最难忘的旅行回忆。

+
+ 查看详情 +
+
+
+ +
+
+ 用户案例3 +
+
浪漫的送花惊喜
+
+
+

通过结伴客为结伴伙伴订购了鲜花,给了她一个浪漫的惊喜,两人的关系更进一步。

+
+ 查看详情 +
+
+
+
+
+ + +
+
+
+

商家案例

+
+
+ +
+
+
+
+
绿野农场 - 动物认领业务增长
+
+
+

通过结伴客平台,绿野农场的动物认领业务增长了300%,吸引了大量城市用户前来体验农场生活。

+
+
    +
  • + 月均认领动物数量增长 + 300% +
  • +
  • + 农场参观人数增长 + 200% +
  • +
  • + 用户满意度 + 4.9 +
  • +
+
+
+
+ +
+
+
+
花好月圆花店 - 送花服务拓展
+
+
+

加入结伴客平台后,花店的送花服务订单增长了150%,特别是在节假日期间订单量暴增。

+
+
    +
  • + 月均订单增长 + 150% +
  • +
  • + 复购率提升 + 80% +
  • +
  • + 用户好评率 + 4.8 +
  • +
+
+
+
+
+
+ + +
+
+
+

平台成就

+
+
+ +
+
+
+
10000+
+
成功结伴
+
+
+ +
+
+
5000+
+
动物认领
+
+
+ +
+
+
500+
+
合作商家
+
+
+ +
+
+
4.8
+
用户评分
+
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/website/contact.html b/website/contact.html new file mode 100644 index 0000000..1ed7c22 --- /dev/null +++ b/website/contact.html @@ -0,0 +1,247 @@ + + + + + + 联系我们 - 结伴客 + + + + + + + + + + +
+
+

联系我们

+

人生本就是一段孤独的旅程,但联系让我们不再孤单
有任何问题或建议?欢迎随时与我们联系

+
+
+ + +
+
+
+

联系信息

+
+
+ +
+
+
+
+ +
+

公司地址

+

北京市朝阳区某某大厦

+
+
+ +
+
+
+ +
+

联系电话

+

400-123-4567

+
+
+ +
+
+
+ +
+

联系邮箱

+

contact@jiebanke.com

+
+
+
+
+ + +
+
+
+
+
+

留言给我们

+

有任何问题或建议,请填写以下表单,我们会尽快回复您。

+ +
+
+
+ + +
+ +
+ + +
+
+ +
+
+ + +
+ +
+ + +
+
+ +
+
+ + +
+
+ +
+
+ +
+
+
+
+
+
+
+
+ + +
+
+
+

我们在哪

+
+
+ +
+
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/website/css/style.css b/website/css/style.css new file mode 100644 index 0000000..38cf74f --- /dev/null +++ b/website/css/style.css @@ -0,0 +1,893 @@ +:root { + --primary-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + --secondary-gradient: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); + /* 字体大小定义 */ + --font-size-xs: 0.75rem; /* 12px */ + --font-size-sm: 0.875rem; /* 14px */ + --font-size-base: 1rem; /* 16px */ + --font-size-lg: 1.125rem; /* 18px */ + --font-size-xl: 1.25rem; /* 20px */ + --font-size-2xl: 1.5rem; /* 24px */ + --font-size-3xl: 1.875rem; /* 30px */ + --font-size-4xl: 2.25rem; /* 36px */ + --font-size-5xl: 3rem; /* 48px */ + --font-size-6xl: 3.75rem; /* 60px */ + --font-size-7xl: 4.5rem; /* 72px */ +} + +body { + font-size: var(--font-size-base); + line-height: 1.6; +} + +/* 导航栏样式 */ +.navbar-brand { + font-weight: 700; + font-size: var(--font-size-2xl); +} + +.navbar-nav .nav-link { + font-weight: 500; + font-size: var(--font-size-base); + margin: 0 5px; + padding: 0.5rem 1rem; +} + +/* 横幅区域样式 */ +.hero-section { + background: var(--primary-gradient); + color: white; + padding: 120px 0 100px; + margin-bottom: 80px; + position: relative; + overflow: hidden; +} + +.hero-section::before { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: url('data:image/svg+xml;utf8,'); + background-size: 100% 100%; +} + +.hero-section h1 { + font-size: var(--font-size-5xl); + font-weight: 700; + margin-bottom: 1.5rem; +} + +.hero-section .lead { + font-size: var(--font-size-xl); + margin-bottom: 2.5rem; + opacity: 0.9; +} + +/* 区块标题样式 */ +.section-title { + position: relative; + padding-bottom: 15px; + margin-bottom: 40px; + font-size: var(--font-size-3xl); +} + +.section-title::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + transform: translateX(-50%); + width: 60px; + height: 3px; + background: var(--primary-gradient); + border-radius: 3px; +} + +/* 页脚样式 */ +.footer { + background-color: #1a1a1a; + color: #fff; + padding: 70px 0 30px; + font-size: var(--font-size-sm); +} + +.footer a { + color: #ccc; + text-decoration: none; + transition: color 0.3s ease; + font-size: var(--font-size-sm); +} + +.footer a:hover { + color: #fff; +} + +.footer h5 { + font-size: var(--font-size-lg); + margin-bottom: 1.5rem; +} + +/* 首页特有样式 */ +.feature-icon { + width: 80px; + height: 80px; + display: flex; + align-items: center; + justify-content: center; + background: var(--primary-gradient); + color: white; + border-radius: 50%; + font-size: 2rem; + margin: 0 auto 20px; + transition: transform 0.3s ease; +} + +.feature-box { + text-align: center; + padding: 30px; + transition: transform 0.3s ease, box-shadow 0.3s ease; + height: 100%; + border-radius: 10px; +} + +.feature-box:hover { + transform: translateY(-10px); + box-shadow: 0 10px 30px rgba(0,0,0,0.1); +} + +.feature-box:hover .feature-icon { + transform: scale(1.1); +} + +.feature-box h3 { + font-size: var(--font-size-2xl); + margin-bottom: 1rem; +} + +.feature-box p { + font-size: var(--font-size-base); + color: #6c757d; +} + +.testimonial-card { + height: 100%; + border: none; + box-shadow: 0 5px 15px rgba(0,0,0,0.05); + transition: transform 0.3s ease; + border-radius: 10px; + overflow: hidden; +} + +.testimonial-card:hover { + transform: translateY(-5px); +} + +.testimonial-card .card-text { + font-size: var(--font-size-base); + line-height: 1.7; +} + +.testimonial-card h6 { + font-size: var(--font-size-lg); +} + +.cta-section { + background: var(--secondary-gradient); + color: white; + padding: 100px 0; + margin: 80px 0; + border-radius: 0; +} + +.cta-section h2 { + font-size: var(--font-size-4xl); + font-weight: 700; + margin-bottom: 1.5rem; +} + +.cta-section .lead { + font-size: var(--font-size-2xl); + margin-bottom: 2.5rem; + opacity: 0.9; +} + +.social-icon { + display: inline-flex; + align-items: center; + justify-content: center; + width: 40px; + height: 40px; + background: rgba(255,255,255,0.1); + border-radius: 50%; + margin-right: 10px; + transition: background 0.3s ease; +} + +.social-icon:hover { + background: rgba(255,255,255,0.2); +} + +.btn-rounded { + border-radius: 50px; + padding: 12px 35px; + font-weight: 600; + font-size: var(--font-size-base); +} + +.stats-number { + font-size: var(--font-size-4xl); + font-weight: 700; + margin-bottom: 10px; + color: #667eea; +} + +.stats-label { + color: #6c757d; + font-size: var(--font-size-base); +} + +/* 关于我们页面特有样式 */ +.team-member { + text-align: center; + margin-bottom: 40px; + transition: transform 0.3s ease; +} + +.team-member:hover { + transform: translateY(-10px); +} + +.team-photo { + width: 150px; + height: 150px; + border-radius: 50%; + object-fit: cover; + margin: 0 auto 20px; + border: 5px solid #f8f9fa; + box-shadow: 0 10px 30px rgba(0,0,0,0.1); +} + +.team-member h5 { + font-size: var(--font-size-xl); + margin-bottom: 0.25rem; +} + +.team-member .text-muted { + font-size: var(--font-size-sm); +} + +.value-box { + text-align: center; + padding: 40px 20px; + height: 100%; + border-radius: 10px; + transition: transform 0.3s ease, box-shadow 0.3s ease; + background: white; + border: 1px solid #eee; +} + +.value-box:hover { + transform: translateY(-10px); + box-shadow: 0 15px 30px rgba(0,0,0,0.1); +} + +.value-icon { + width: 80px; + height: 80px; + display: flex; + align-items: center; + justify-content: center; + background: var(--primary-gradient); + color: white; + border-radius: 50%; + font-size: 2rem; + margin: 0 auto 20px; +} + +.value-box h3 { + font-size: var(--font-size-2xl); + margin-bottom: 1rem; +} + +.value-box p { + font-size: var(--font-size-base); + color: #6c757d; +} + +.milestone { + position: relative; + padding: 20px 0; +} + +.milestone:not(:last-child)::after { + content: ""; + position: absolute; + top: 0; + left: 20px; + height: 100%; + width: 2px; + background: #667eea; + z-index: 1; +} + +.milestone-icon { + width: 40px; + height: 40px; + display: flex; + align-items: center; + justify-content: center; + background: var(--primary-gradient); + color: white; + border-radius: 50%; + position: relative; + z-index: 2; + margin-bottom: 10px; +} + +.milestone h5 { + font-size: var(--font-size-lg); + margin-bottom: 0.5rem; +} + +.milestone p { + font-size: var(--font-size-base); + color: #6c757d; + margin-bottom: 0; +} + +/* 商家合作页面特有样式 */ +.benefit-box { + text-align: center; + padding: 40px 20px; + height: 100%; + border-radius: 10px; + transition: transform 0.3s ease, box-shadow 0.3s ease; + background: white; + border: 1px solid #eee; +} + +.benefit-box:hover { + transform: translateY(-10px); + box-shadow: 0 15px 30px rgba(0,0,0,0.1); +} + +.benefit-icon { + width: 70px; + height: 70px; + display: flex; + align-items: center; + justify-content: center; + background: var(--primary-gradient); + color: white; + border-radius: 50%; + font-size: 1.8rem; + margin: 0 auto 20px; +} + +.benefit-box h3 { + font-size: var(--font-size-2xl); + margin-bottom: 1rem; +} + +.benefit-box p { + font-size: var(--font-size-base); + color: #6c757d; +} + +.process-step { + text-align: center; + padding: 30px 20px; + position: relative; +} + +.process-number { + display: inline-flex; + align-items: center; + justify-content: center; + width: 60px; + height: 60px; + border-radius: 50%; + background: var(--primary-gradient); + color: white; + font-weight: 700; + font-size: 1.5rem; + margin-bottom: 20px; + box-shadow: 0 5px 15px rgba(102, 126, 234, 0.4); +} + +.process-step h5 { + font-size: var(--font-size-xl); + margin-bottom: 0.5rem; +} + +.process-step p { + font-size: var(--font-size-base); + color: #6c757d; +} + +.process-line { + position: absolute; + top: 30px; + right: -20px; + width: 40px; + height: 2px; + background: #667eea; +} + +.process-step:last-child .process-line { + display: none; +} + +.stats-card { + text-align: center; + padding: 30px; + border-radius: 10px; + background: white; + box-shadow: 0 5px 15px rgba(0,0,0,0.05); + height: 100%; +} + +.stats-number { + font-size: var(--font-size-4xl); + font-weight: 700; + margin-bottom: 10px; + background: var(--secondary-gradient); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} + +.stats-label { + font-size: var(--font-size-base); + color: #6c757d; +} + +.card-title { + font-size: var(--font-size-2xl); + margin-bottom: 1rem; +} + +.card-text { + font-size: var(--font-size-base); + color: #6c757d; + margin-bottom: 1rem; +} + +/* 商家入驻申请页面特有样式 */ +.form-section { + background-color: #f8f9fa; + padding: 80px 0; +} + +.application-form { + background: white; + border-radius: 10px; + box-shadow: 0 10px 30px rgba(0,0,0,0.05); + padding: 40px; +} + +.application-form h3 { + font-size: var(--font-size-2xl); + margin-bottom: 1.5rem; + font-weight: 600; +} + +.form-label { + font-weight: 500; + font-size: var(--font-size-base); + margin-bottom: 0.5rem; +} + +.form-label .text-danger { + font-size: var(--font-size-sm); +} + +.form-control, .form-select { + padding: 12px 15px; + border: 1px solid #e1e5eb; + border-radius: 8px; + transition: all 0.3s ease; + font-size: var(--font-size-base); +} + +.form-control:focus, .form-select:focus { + border-color: #667eea; + box-shadow: 0 0 0 0.25rem rgba(102, 126, 234, 0.25); +} + +.form-control::placeholder { + color: #adb5bd; + font-size: var(--font-size-sm); +} + +.form-text { + font-size: var(--font-size-sm); + color: #6c757d; +} + +.btn-primary { + background: var(--primary-gradient); + border: none; + padding: 12px 30px; + font-weight: 600; + border-radius: 8px; + font-size: var(--font-size-base); +} + +.btn-primary:hover { + opacity: 0.9; +} + +.btn-outline-secondary { + font-size: var(--font-size-base); + padding: 12px 30px; +} + +.form-check-input:checked { + background-color: #667eea; + border-color: #667eea; +} + +.form-check-label { + font-size: var(--font-size-base); +} + +.form-check-label a { + color: #667eea; + text-decoration: none; +} + +.step-indicator { + display: flex; + justify-content: center; + margin-bottom: 40px; +} + +.step { + text-align: center; + position: relative; + flex: 1; + max-width: 200px; +} + +.step:not(:last-child)::after { + content: ""; + position: absolute; + top: 20px; + left: 50%; + right: -50%; + height: 2px; + background: #dee2e6; + z-index: 1; +} + +.step.active::after { + background: #667eea; +} + +.step-number { + width: 40px; + height: 40px; + display: flex; + align-items: center; + justify-content: center; + background: #e9ecef; + color: #6c757d; + border-radius: 50%; + font-weight: 700; + font-size: var(--font-size-base); + margin: 0 auto 10px; + position: relative; + z-index: 2; +} + +.step.active .step-number { + background: var(--primary-gradient); + color: white; +} + +.step.completed .step-number { + background: #28a745; + color: white; +} + +.step > div:last-child { + font-size: var(--font-size-sm); + color: #6c757d; +} + +.step.active > div:last-child { + color: #495057; + font-weight: 500; +} + +/* 联系我们页面特有样式 */ +.contact-info { + text-align: center; + padding: 40px 20px; + height: 100%; + border-radius: 10px; + transition: transform 0.3s ease, box-shadow 0.3s ease; + background: white; + border: 1px solid #eee; +} + +.contact-info:hover { + transform: translateY(-10px); + box-shadow: 0 15px 30px rgba(0,0,0,0.1); +} + +.contact-icon { + width: 80px; + height: 80px; + display: flex; + align-items: center; + justify-content: center; + background: var(--primary-gradient); + color: white; + border-radius: 50%; + font-size: 2rem; + margin: 0 auto 20px; +} + +.contact-info h3 { + font-size: var(--font-size-2xl); + margin-bottom: 1rem; +} + +.contact-info p { + font-size: var(--font-size-base); + color: #6c757d; +} + +.contact-form { + background: white; + border-radius: 10px; + box-shadow: 0 10px 30px rgba(0,0,0,0.05); + padding: 40px; +} + +.form-section h2 { + font-size: var(--font-size-3xl); + margin-bottom: 1rem; +} + +.form-section .lead { + font-size: var(--font-size-xl); + color: #6c757d; + margin-bottom: 2.5rem; +} + +.map-container { + height: 400px; + border-radius: 10px; + overflow: hidden; + box-shadow: 0 10px 30px rgba(0,0,0,0.1); +} + +/* 成功案例页面特有样式 */ +.case-card { + height: 100%; + transition: transform 0.3s ease, box-shadow 0.3s ease; + border: none; + border-radius: 10px; + overflow: hidden; + box-shadow: 0 5px 15px rgba(0,0,0,0.05); +} + +.case-card:hover { + transform: translateY(-10px); + box-shadow: 0 15px 30px rgba(0,0,0,0.1); +} + +.case-card .card-title { + font-size: var(--font-size-2xl); + margin-bottom: 1rem; +} + +.case-card .card-text { + font-size: var(--font-size-base); + color: #6c757d; + line-height: 1.7; + margin-bottom: 1rem; +} + +.case-image { + height: 200px; + object-fit: cover; +} + +.quote-mark { + font-size: 4rem; + color: rgba(102, 126, 234, 0.1); + line-height: 1; +} + +.testimonial-content { + position: relative; +} + +.list-group-item { + font-size: var(--font-size-base); + padding: 0.75rem 1.25rem; +} + +.badge { + font-size: var(--font-size-xs); + font-weight: 600; +} + +/* 合作政策页面特有样式 */ +.policy-section { + background-color: #f8f9fa; + padding: 80px 0; +} + +.policy-card { + border-radius: 10px; + box-shadow: 0 10px 30px rgba(0,0,0,0.05); +} + +.policy-card .card-title { + font-size: var(--font-size-3xl); + font-weight: 600; + margin-bottom: 1.5rem; +} + +.policy-title { + position: relative; + padding-left: 20px; + margin: 30px 0 20px; + font-size: var(--font-size-2xl); + font-weight: 600; +} + +.policy-title::before { + content: ""; + position: absolute; + left: 0; + top: 2px; + width: 4px; + height: 24px; + background: var(--primary-gradient); + border-radius: 2px; +} + +.policy-card h6 { + font-size: var(--font-size-lg); + font-weight: 600; + margin: 1.5rem 0 1rem; +} + +.policy-card p { + font-size: var(--font-size-base); + color: #6c757d; + margin-bottom: 1rem; +} + +.policy-card ul { + font-size: var(--font-size-base); + margin-bottom: 1.5rem; +} + +.policy-card li { + margin-bottom: 0.5rem; +} + +.toc { + position: sticky; + top: 100px; +} + +.toc h5 { + font-size: var(--font-size-lg); + margin-bottom: 1rem; +} + +.toc-item { + display: block; + padding: 8px 15px; + margin-bottom: 5px; + border-radius: 5px; + color: #6c757d; + text-decoration: none; + transition: all 0.3s ease; + font-size: var(--font-size-base); +} + +.toc-item:hover { + background: #e9ecef; + color: #495057; +} + +.toc-item.active { + background: var(--primary-gradient); + color: white; +} + +/* 响应式字体调整 */ +@media (max-width: 768px) { + .hero-section h1 { + font-size: var(--font-size-4xl); + } + + .hero-section .lead { + font-size: var(--font-size-lg); + } + + .section-title { + font-size: var(--font-size-2xl); + } + + .cta-section h2 { + font-size: var(--font-size-3xl); + } + + .cta-section .lead { + font-size: var(--font-size-xl); + } + + .stats-number { + font-size: var(--font-size-3xl); + } + + .policy-card .card-title { + font-size: var(--font-size-2xl); + } + + .policy-title { + font-size: var(--font-size-xl); + } + + .step { + max-width: 150px; + } +} + +@media (max-width: 576px) { + .hero-section h1 { + font-size: var(--font-size-3xl); + } + + .hero-section .lead { + font-size: var(--font-size-base); + } + + .section-title { + font-size: var(--font-size-xl); + } + + .cta-section h2 { + font-size: var(--font-size-2xl); + } + + .cta-section .lead { + font-size: var(--font-size-lg); + } + + .stats-number { + font-size: var(--font-size-2xl); + } + + .policy-card .card-title { + font-size: var(--font-size-xl); + } + + .policy-title { + font-size: var(--font-size-lg); + } + + .step { + max-width: 120px; + } + + .step > div:last-child { + font-size: var(--font-size-xs); + } + + .map-container { + height: 300px; + } +} \ No newline at end of file diff --git a/website/favicon.ico b/website/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..be15e2f45c8116e12c3f4b24df5155c98a4ac104 GIT binary patch literal 9662 zcmcIqYj9Op6+X1i$nb+Q{^<0d>DVHps5n+f>p1mMh00@SQHLtU*jhwOt=Ji9X_e52 zwc3g;wNNO1fVC6~2pwh$mNtm#BR3Cd9uOdq7a<{!8v-Px$z}U}`<}J3@5wp$ksHJ8 ztaa92k8iEL&e{8%;CbWlZ`w2uzYDz0*LvQSp65-$fXFMvpxpjklO$vPdq%8a{PbAC zH>Z~t{BA~R!7CUCAgjZ5JqLL!!yI*}OPjIAk&8dX{}{$x;M#_94#VKuSehMw4!LZz zKHw{t*!k!p-gv}af*Ll08qnkro-|iJ>1zq>{%>mn+#YH>2Y64i&VpNcV79!Ef0R6Z z&%wy2#3O7`mx=KCDluuFMDfhS&n1Um3icjjO&kGa6ax5}0{nHh-hORUc#)BEUF14{ zzK*d+0a;C8e;sPrMNHroTR!{`D!yQTUiEG3E2E!SK^HM7pd1)rCiXaEr1U|iYv$_b zn_>sqFRO1deS_ysB9SnEIC^`qXHw$~`-x*+bIJjj3t-c3dqL_>>hlW@e%0JkK6Usx z4 zivFYJZ@T`~y|HAU`1Omjapi9R?Cac-v%TYMkBcAq6d=z8bES^tEIj*zvV9#pw14(? zY_)x}sOm@ntj@I;+Y5%;`{1-E;>{@g7qqxfCzQ~65eAHz=Jo~=A54NM8X%Vgl4CmBJ#a?*hjpD>{u$Fh)Tc6ewu}Xh4|JM}o&)CY zn%UZCe4aY^4iG=`n*iB>&C^*wUQ<`-&A=+SSl=Zzv+Vrh>gnd$h81RA<0IykQ%{@M zTAwxSjlCVOoBwp}Hf25g&Ea#Ern#?P_YT)jCcYdw2xh_J<09q>7}rytX%MIM1!K;u z_*_PtpwAs`FQ|{=&RvGj<42GG3ca(^Y-wGCUfOADd&>=bYbY^f28J%0=Ncc5jDsE` z_S+@Dbd_|@r#e`r=O4X!9JN;c8&Rd>{E6R7JqL4koU2#SzHcSqCVqasi`&goQH}+c{+mrcb zunGEdeF*-bPEOarPW+NY3U*T!))tS10jfeOEU;h;zUP<`B*TCEa_>n`d4#TX7!P(Dayj`s4%XwWa3aV~g>= z`!n-i_rKN8o-+dnoH2mJYgR_CyRrQwo=b^2psqeVT8~cu-=iW2z7fwe>gKvl4CIXx|7N zU$ga>+7hGipgW!OXQAL1x*6v%!5!8Q>>HlVhKOs=vYJ64n>Y zjWy(Z4DAk$h_igb({FMI|&tj30zJ7XLYR@<|XC4+?5^Ku$QOvEEdD0-y z`Rym&t;sWyfpr{jVHc{U-YH^#KUJ6<+S6ub9vouf>Uu&PyB$c zm)Z-3Y%<0m_JiT|b9p}}`e3csH$7@%@nX|8&~Eo;=EpN*7v6CM<9$bdGVBX>Vfg8f z-}1P|V%Is)hCSv>DYn$}#~|or!R=D4=X!sAH2++#?+0F4mzKVhHlDRdY*M#>R-Ig? zeZ{$ZYUkp-KcMzpJG;;Lw(2LO_L2kgx)OT)=Bu&EvrmOa@m#m z^}~I07Vas3{zV63S{C~J23{zX zHTW2?Pjazk%cJg-U|S;fXWjD|e8w<`XK-fC(hp;g3cKWpIQ+)4iSe{1X?Urf#V2dW zymRG~F((L)d?~OOV%T%4U|~KkFZtz38KW>?ykYjJ=~WmnW7u!Kw#Iq(l;eXw>HDg% z*kdU}PflSh)Ty8Gd4I6xmUsF@)**wOK8QQ7zx9qLKj8iZ;w}Qt-53`HZx)ogyR9vJ zj3)M2+W-syKMMbTwh-e%jMca|ZeNk8d%FoWSRZQ%9CJx^#cuP^t!AT6SNoaaSRPG|E| xM5Q!-WWJbsAvhW+ckoI+lAln?Tk3$4*t%$)8sG*(t)tY{6pc&Pdguny{{ed2k+}c> literal 0 HcmV?d00001 diff --git a/website/images/logo.png b/website/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..20140bb279f65045def584ee2b2cf1b9b0140915 GIT binary patch literal 4317 zcmcgwcT`j9whtJ(f&~RZAp{W+QcijzK}qOMN)!v(?!m%%-}1e=_n()QlXK4Z?fu*BxA(VJwt0Cv&C)c` zL?95eT%7HF;5&BeQdfn4{c5bJ@J&PP>@P(iwB}7+N{D^=`Ur$-vw*W!w${U)!4pMd zxu7Tn!p265VQB=yW<{)+%L|8Os1PVrAY`In*Iq)S1RxXbNA|#bh}lq>z&Tz5`Nn&4 zc=6#pI*49ji?WGjzyOhujEjnmj1Wp0u}t(ATn79+wTwffzKF=enP|HygQ&G0UMRLm z0-?xQ3Wf)e$S5iu3s8t8I^7yYzymZKo`wU67=Xec;TZ%1>e~kmTa$o%hL64DH(T%< z6CEa#i5WOtOiTrqNu4QW;msgT8wrfRQL5K&R2Dd<=<4rC>rJ5*@=OkhmBg zAEbm3`BZ=g(7$-YU`rsbOeEomL=oS4>-9Y^D7G&dJ7m0CWlkL%;%4&GNOj z_K-xd2?8A@qDa&iwlf4j$t~6H@2dP&7q01l&k)?SGtL4jT$i|Sv%nXM`t}qdfPI6T ziNWPf^)(z27xo$bZSiLgLjXVoAX*59#HUg*R4U9PIt?Uas3ee#r-gtaJU;cieoPny zL;jD_{#dWCwxuGzEQTwA>_Xud_z7>=Q}d0EviL?G%kS{KFs?8Zf=4Y5Jr(KHO#1KR z`OnDx)zSaocyLnzeJvI4E2aLb;+MT21~MG}mnC@0Pd!c_FYwFs0R;)+R7v3Dr=hpb z3O?y-Tui65o(WIJs*`Yc3jEl=xnwRT@DSe*x zN;Q7P^}|=q^*1jQ)613j0_m?_%^76ZYxn5XQ&8ltrY0mQK}k#$H^-_iu+ti5_fS_> zcG$Jk7OX|uXnj|EnX*NqR9VUoxO~loBSw!U7E%SE=ZHGz2sM-4A z7b~`^C3P$9Z&sYt)!ojoGV&eG^7gd6T{h!U(y`)H*Eu>fRw?hvW4j+N2MtQ)j*kh~ zSC8pc{$prC0#jGTX68#w4Ugjg>K2I5Q3~D7HbC{R?P!fvNmPu^Gb)JFDe1S% zDfL!K@w9$$5;*R4RJkZOknmzr!t#M2>`DJ5v%5|+0+L=zwsva=aqrOOAMr$}zk-E9OkRtzLs%^mLdjNj!bQ z`V1l<&nd8{E2+5f-4;MkWix^HRFM9<_nMFoFZ`F-dxnnC5VSW z_44sgJDQs&$iWSd5iFT&hrC%Z)5I?SG6nICVj!mo><5G z-r7-$CH+f=H!d|t?t0q%{_K`hy{x7C&(&1rQeSSHtriQ3k~SD+H$s6OP}@Zj*C?sG#orJvJ+ikrW@TCxH@sp33O?V zF*0IfV(K2%81G|#y6t6F^36$atw*Fuk1KHTcfYEHPxr0M%_!S@ZA00;Tla?sKOP?4H9Ss9OjWNG z!^6s_JuaS#Tl|0=^sDLq3!r9GA%}`{iW%kn?p9|rv9wd6bo|fR_Z+wGki?dV)XdYK zp=U38eehP!_L>P2Zq5b`|4 z!|EwLS<$FkyT;C?#epj7QQ#xZF@Hi+i?OJ0q+k$93O0EYV_5J1j;YF6@%o|bA15793<6~g2VN*7*ozrBCq zKW{bbie^Y!O^$wOll5?o1`@P=W1X9IH3ZqaEhF+8ycZH&(b<27hC~!3SPd9rReRb# z`_)v9*)1FM0z%*-$B$?&tK3sH>=zi&r5L(3)-r6IW^Xb(jKvFnxxv#{IVl}s(wept zJ2OUmec$!Fr!8$#|3uAiYUx_*rK&qTJ5HRn$UWw1y9a;q`>f0Jw`L395mQthl(*;0 zVKNnjQx#)-_j!}F-<>=JbR5e}#>(37EUxK3F~*tq$45Hx?PRj*5?77qtRvTkuKApP zc7lBT*jrAY*P9os=N4~roAnRla3}Ji+B0%T5kIS8$A{!&tusi9XpqD2NUg%BsRcmg z;J(x|>5Y$R-sYaJCEjujv1m2c$XJ7m_z>kg!(ppd2*GYu$w3BDS$QYHFw3-5~+ zVy$U(uvRZTd`&r{GC#}6I_@$&nBtgkwM%TbPwZD6wh@Pp^k#W$tKH3z4#IPP+mjDY z-B;da-*ua{INf?g9)$m_KR5a4jwuF2sXGK5qS?siR z^8nDQ06BRc4CCAG`Rq;9PYR3mn{XL}LF;@o!rY=;1>^AdPULv@8cGm%XWdcl@)pG5 z>g#)O3j&;-erKv93~b08eLJD3^JekcXFhr3>!NnES?h#12bXN6YcK|lY>nxe_p+ZN zJ{}ua5w?vZ(p&#&VZJBhc57=I!eW&?<<(nmv1p0?fsuCkk^udCs*B2nt{7E+w>J9Z(#Inw+*aLyoo$s z5A|tukjDEZsn>iD4c23x9zcH7)Yqq;yk@6uZwBX(^RUwV lG{atIWU literal 0 HcmV?d00001 diff --git a/website/index.html b/website/index.html new file mode 100644 index 0000000..a4bfd65 --- /dev/null +++ b/website/index.html @@ -0,0 +1,264 @@ + + + + + + 结伴客 - 旅行结伴与动物认领平台 + + + + + + + + + + +
+
+

人生就像一场旅行,结伴客让你拥有不一样的体验

+

遇到的既有感人的,也有伤心的,既有令人兴奋的,也有令人灰心的,既有美妙的风景,也会有称不上景只有风的地方
但至少它能让你吃的健康

+ 商家入驻 + 联系我们 +
+
+ + +
+
+
+

平台特色

+
+
+ +
+
+
+
+ +
+

旅行结伴

+

找到志同道合的旅行伙伴,一起探索世界的美好,分享旅途中的点点滴滴。

+
+
+ +
+
+
+ +
+

动物认领

+

认领可爱的动物,定期探望它们,体验农场生活,感受生命的温暖。

+
+
+ +
+
+
+ +
+

送花服务

+

为结伴的伙伴或认领的动物订购鲜花,传递温暖和关爱。

+
+
+
+
+ + +
+
+
+

平台数据

+
+
+ +
+
+
10,000+
+
注册用户
+
+ +
+
500+
+
合作商家
+
+ +
+
50,000+
+
结伴次数
+
+ +
+
10,000+
+
动物认领
+
+
+
+ + +
+
+
+

用户评价

+
+
+ +
+
+
+
+
+
+

通过结伴客找到了一起徒步的伙伴,我们不仅完成了川藏线的徒步,还成为了很好的朋友。平台的匹配机制真的很棒!

+
+
张先生
+

旅行爱好者

+
+
+
+ +
+
+
+
+
+

认领了一只小羊,定期到农场看望它,体验了真正的农场生活。孩子们特别喜欢,这成为我们最难忘的旅行回忆。

+
+
李女士
+

家庭用户

+
+
+
+ +
+
+
+
+
+

作为农场主,结伴客为我们带来了大量城市客户。动物认领业务让我们在疫情后成功转型,真的很感谢这个平台。

+
+
王老板
+

绿野农场

+
+
+
+
+
+ + +
+
+

开始你的结伴之旅

+

加入结伴客,体验不一样的旅行方式

+ 商家入驻 + 联系我们 +
+
+ + + + + + + + \ No newline at end of file diff --git a/website/merchant/apply.html b/website/merchant/apply.html new file mode 100644 index 0000000..8957d19 --- /dev/null +++ b/website/merchant/apply.html @@ -0,0 +1,302 @@ + + + + + + 商家入驻申请 - 结伴客 + + + + + + + + + + +
+
+

商家入驻申请

+

人生就像一场旅行,让我们一起为旅客创造美好回忆
填写以下信息,加入结伴客商家生态

+
+
+ + +
+
+
+
1
+
填写信息
+
+
+
2
+
提交审核
+
+
+
3
+
签约入驻
+
+
+
4
+
上线运营
+
+
+
+ + +
+
+
+
+
+
+
+
+

基本信息

+
+
+ +
+
+ + +
+ +
+ + +
+
+ +
+
+ + +
+ +
+ + +
+
+ +
+
+ + +
+ +
+ + +
+
+ +
+
+ + +
+
+ +
+
+

服务信息

+
+
+ +
+
+ + +
+ +
+ + +
+
+ +
+
+ + +
+
+ +
+
+

资质证明

+
+
+ +
+
+ + +
请上传清晰的身份证正面照片
+
+ +
+ + +
请上传清晰的身份证背面照片
+
+
+ +
+
+ + +
请上传清晰的营业执照照片
+
+ +
+ + +
可上传其他相关资质证明
+
+
+ +
+
+
+ + +
+
+
+ +
+
+ + +
+
+
+
+
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/website/merchant/index.html b/website/merchant/index.html new file mode 100644 index 0000000..dccd584 --- /dev/null +++ b/website/merchant/index.html @@ -0,0 +1,293 @@ + + + + + + 商家合作 - 结伴客 + + + + + + + + + + +
+
+

商家合作

+

人生就像一场旅行,加入结伴客,为旅客提供温暖的港湾,让每一次相遇都成为美好回忆的一部分
与我们携手共创未来

+
+
+ + +
+
+
+

合作优势

+
+
+ +
+
+
+
+ +
+

庞大用户群体

+

接入超过10万注册用户,为您的业务带来稳定客源。

+
+
+ +
+
+
+ +
+

技术支持

+

提供完善的技术支持和培训,帮助您快速上手。

+
+
+ +
+
+
+ +
+

收益保障

+

透明的收益分配机制,确保您的利益最大化。

+
+
+
+
+ + +
+
+
+

合作类型

+
+
+ +
+
+
+
+
农场合作
+

提供动物认领服务,让用户定期探望认领的动物,体验农场生活。

+ 申请入驻 +
+
+
+ +
+
+
+
花店合作
+

为用户提供送花服务,满足用户在旅行中的情感表达需求。

+ 申请入驻 +
+
+
+ +
+
+
+
活动组织
+

组织各类旅行活动,为用户提供丰富的旅行体验选择。

+ 申请入驻 +
+
+
+
+
+ + +
+
+
+

入驻流程

+
+
+ +
+
+
+
+
1
+
提交申请
+

填写入驻申请表

+
+
+ +
+
2
+
资质审核
+

平台审核商家资质

+
+
+ +
+
3
+
签约入驻
+

签署合作协议

+
+
+ +
+
4
+
上线运营
+

正式开展业务

+
+
+
+
+
+ + +
+
+
+

商家数据

+
+
+ +
+
+
+
500+
+
合作商家
+
+
+ +
+
+
50000+
+
月均订单
+
+
+ +
+
+
1000万+
+
年交易额
+
+
+ +
+
+
4.8
+
用户评分
+
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/website/merchant/policy.html b/website/merchant/policy.html new file mode 100644 index 0000000..a9eb892 --- /dev/null +++ b/website/merchant/policy.html @@ -0,0 +1,257 @@ + + + + + + 合作政策 - 结伴客 + + + + + + + + + + +
+
+

合作政策

+

人生本就是一段孤独的旅程,但合作让我们携手同行
了解我们的合作条款和服务规范

+
+
+ + +
+
+
+ + +
+
+
+

商家合作政策

+ +

1. 合作原则

+

结伴客平台致力于为用户提供优质的旅行结伴和动物认领服务。我们与商家合作的基本原则包括:

+
    +
  • 诚信经营:商家需提供真实、准确的服务信息
  • +
  • 优质服务:商家应确保服务质量,满足用户需求
  • +
  • 合法合规:商家需遵守相关法律法规和平台规定
  • +
  • 互利共赢:平台与商家共同为用户提供价值
  • +
+ +

2. 商家资质要求

+

申请入驻的商家需满足以下基本条件:

+
    +
  • 具备合法的营业执照和相关经营许可
  • +
  • 拥有良好的商业信誉和经营状况
  • +
  • 具备提供相关服务的能力和资源
  • +
  • 认同并遵守平台的相关规定和政策
  • +
+ +

3. 服务标准

+

合作商家需遵守以下服务标准:

+
    +
  • 服务描述真实准确,不得夸大宣传
  • +
  • 按时提供服务,不得无故延误或取消
  • +
  • 保证服务质量,接受用户评价和监督
  • +
  • 及时处理用户投诉和纠纷
  • +
+ +

4. 费用与结算

+

平台费用和结算方式如下:

+
    +
  • 平台将按约定比例收取服务佣金
  • +
  • 具体佣金比例根据合作类型和服务内容确定
  • +
  • 结算周期为每月一次,商家可随时查看收入明细
  • +
  • 平台提供详细的财务报表和结算信息
  • +
+ +

5. 权利与义务

+
平台权利与义务:
+
    +
  • 为商家提供展示和交易平台
  • +
  • 维护平台正常运营和秩序
  • +
  • 保护商家合法权益
  • +
  • 提供必要的技术支持和培训
  • +
+ +
商家权利与义务:
+
    +
  • 在平台展示和销售服务
  • +
  • 获得合理的服务收益
  • +
  • 要求平台提供必要的支持
  • +
  • 遵守平台规定和合作协议
  • +
+ +

6. 违规处理

+

对于违反平台规定的商家,平台将视情节轻重采取以下措施:

+
    +
  • 警告并要求限期整改
  • +
  • 暂停服务或限制功能
  • +
  • 扣除保证金或违约金
  • +
  • 终止合作并追究法律责任
  • +
+ +

7. 争议解决

+

合作过程中如发生争议,双方应友好协商解决;协商不成的,任何一方可向平台所在地人民法院提起诉讼。

+ +

8. 政策变更

+

平台有权根据业务发展需要对本政策进行修改,修改后的政策将在平台上公布,商家应定期关注政策变化。

+ +
+

最后更新时间:2025年1月1日

+

如有疑问,请联系客服:400-123-4567

+
+
+
+
+
+
+
+ + + + + + + + + \ No newline at end of file