{T}

项目需求和设计

借助 ChatGPT 和 Copilot ,快速完成项目需求和技术方案设计

  • 使用 ChatGPT 快速生成需求,并设计页面
  • 选择 Vue3 技术栈,搭建开发环境
  • 使用 ChatGPT 设计前端路由和 API
  • 搭建 Mock 服务,通过 Copilot 生成 Mock 代码

ChatGPT 每次回答都会不一样,ChatGPT 输入框使用 shift + enter 换行

需求

要做一个仿简书项目

需求大纲

ChatGPT 提问:

你是互联网行业一名资深的产品经理,现在主导设计一个博客产品的需求,这个产品是面向编程技术人员的,例如简书、博客园、掘金这种网站。要求产品以博客功能为主,不要有其他无关功能。你来写这个产品的需求文档,先列出需求大纲。

ChatGPT 回复了详细的需求大纲,非常专业、全面

需求大纲:博客产品

  1. 用户注册和登录功能

    • 用户可以注册新账号,并通过登录功能访问他们的个人博客空间。
    • 注册和登录过程应简单明了,以提供良好的用户体验。
  2. 个人博客空间

    • 用户可以创建个人博客,并在博客空间中展示自己的文章和信息。
    • 博客空间应包括用户的基本资料、头像等个人信息展示功能。
  3. 文章发布和编辑

    • 用户可以创建新的文章,并发布到他们的个人博客中。
    • 编辑器应具备基本的文本编辑功能,例如格式化文本、插入图片等。
    • 可以保存文章的草稿,并随时进行编辑和修改。
  4. 文章分类和标签

    • 用户可以为自己的文章指定分类和标签,以便读者更好地浏览和搜索相关主题的文章。
    • 分类和标签应该易于设置和管理。
  5. 文章评论和互动

    • 允许读者对文章进行评论和回复,以促进用户之间的交流和互动。
    • 评论功能应支持基本的格式化和表情符号。
  6. 文章搜索和过滤

    • 提供搜索功能,使用户能够根据关键词搜索相关的文章。
    • 支持按照分类、标签、发布时间等条件进行文章过滤和排序。
  7. 用户关注和订阅

    • 允许用户关注其他编程技术人员的博客,并收到他们发布的新文章通知。
    • 提供订阅功能,用户可以订阅特定分类或标签的文章。
  8. 用户个性化设置

    • 允许用户自定义个人博客的外观和风格,例如选择主题、背景图片等。
    • 提供个人设置选项,例如修改密码、管理订阅等。
  9. 数据安全和隐私保护

    • 保护用户的个人信息和文章内容的安全性和隐私性。
    • 采取必要的措施防止未经授权的访问和数据泄露。

以上是博客产品的需求大纲,包括了用户注册和登录、个人博客空间、文章发布和编辑、文章分类和标签、文章评论和互动、文章搜索和过滤、用户关注和订阅、用户个性化设置以及数据安全和隐私保护等主要功能。在后续的需求文档中,每个功能将会被进一步详细描述和规划

提取核心功能

整理核心功能:

  • 博客展示
    • 博客列表
    • 分类导航(如前端、Java、Python、小程序 等)
    • 搜索
  • 博客详情页
    • 展示博客内容
    • 点赞
    • 收藏
    • 评论
  • 用户管理
    • 注册
    • 登录
  • 博客管理
    • 我的博客列表(搜索、删除、编辑)
    • 创建博客
      • 编写博客内容(使用 markdown 语法)
      • 设置分类(如前端、Java、Python、小程序 等)
      • 发布博客
    • 编辑博客
      • 编辑博客内容(使用 markdown 语法)
      • 重新设置分类(如前端、Java、Python、小程序 等)
      • 重新发布博客

【注意】有些功能虽然不做,但实际开发中很重要

  • 互动(私信、好友等)
  • 推荐(热门推荐,根据个人标签推荐)
  • 统计和分析
  • 平台的管理(举报、置顶等)

详细需求

还可以继续通过 ChatGPT 细化需求,例如:

根据上文,请详细描述“用户管理” 部分的需求,按层级、条目列出

用户管理部分的需求可以按照以下层级和条目进行详细描述:

  1. 用户注册和登录

    • 提供用户注册功能,包括输入用户名、密码和其他必要的注册信息
    • 实现用户登录功能,验证用户名和密码的准确性,并提供错误处理机制
  2. 用户个人信息管理

    • 允许用户编辑和更新个人信息,如昵称、头像、个人简介等
    • 提供头像上传功能,支持常见的图片格式,并限制文件大小和尺寸
  3. 用户账号安全

    • 实施必要的安全措施,如密码加密存储、密码强度要求和安全问题等
    • 允许用户修改密码,要求验证当前密码的准确性
  4. 用户权限管理

    • 区分不同用户角色,如普通用户和管理员,以实现相应的权限管理
    • 管理员账号具备管理用户、评论和文章等功能的权限
  5. 用户搜索和过滤

    • 提供用户搜索功能,允许其他用户通过用户名或其他标识查找用户
    • 支持按照用户角色、注册时间等条件进行用户列表过滤和排序
  6. 用户关注和粉丝

    • 允许用户关注其他用户,并查看自己的关注列表
    • 显示用户的粉丝列表,即关注该用户的其他用户
  7. 用户通知和消息

    • 向用户发送通知,如新回复、被关注等相关信息
    • 提供消息功能,允许用户之间发送私信或站内信进行交流
  8. 用户注销和数据删除

    • 提供用户注销账号的功能,允许用户永久删除账号和相关数据
    • 在用户注销操作时,应提示用户确认并提供必要的警示信息

以上是用户管理部分的详细需求描述。在实际的产品开发中,每个条目的具体实现和细节可能会有所不同,根据实际情况进行调整和补充

设计页面

ChatGPT 提问:

以上功能比较全面,目前只实现如下核心功能: xxx xxx 这些核心功能,你分析需要多少个页面?每个页面都有哪些功能?按条目列出

根据 ChatGPT 的分析,我们可得到如下页面

  • 首页
  • 博客详情页
  • 注册
  • 登录
  • 我的博客列表
  • 创建/编辑博客

技术方案设计

使用 ChatGPT 根据需求,确定技术方案设计

技术选型

技术选型自己定,没必要交给 ChatGPT

  • 使用 Vue3、Pinia、Vue-router、ElementPlus

创建 Vue3 开发环境,参考官网 https://cn.vuejs.org/guide/quick-start.html

bash
pnpm create vue@latest

并安装 ElementPlus https://element-plus.gitee.io/zh-CN/

去掉无用代码

  • 对于 ./assets/main.css ,只保留第一行 base.css ,其他全部注释掉
  • 整理 App.vue、AbountView.vue、HomeView.vue

为 ChatGPT 切换角色

基于之前的需求和页面,继续提问

code
你现在是一名资深前端工程师,精通 vue3 技术栈,接下里要根据上面的需求来开发这个项目。
以上需求你能理解吗?

路由设计

提问:根据以上需求,需要拆分几个页面?以及如何配置 vue3 路由? 需要你写出:

  1. 每个页面的名称、介绍、文件目录;
  2. 路由配置代码;

根据以上需求,可以将页面拆分为以下几个部分:

1. 首页:

  • 名称: 首页
  • 介绍: 展示最新发布的博客文章,以及热门文章和推荐文章。
  • 文件目录: src/pages/Home.vue

2. 文章列表页:

  • 名称: 文章列表页
  • 介绍: 展示所有博客文章,支持按分类、标签、时间等条件进行筛选。
  • 文件目录: src/pages/Articles.vue

3. 文章详情页:

  • 名称: 文章详情页
  • 介绍: 展示单个博客文章的详细信息,包括文章内容、评论等。
  • 文件目录: src/pages/ArticleDetail.vue

4. 用户登录页:

  • 名称: 用户登录页
  • 介绍: 用户登录页面,支持用户名和密码登录。
  • 文件目录: src/pages/Login.vue

5. 用户注册页:

  • 名称: 用户注册页
  • 介绍: 用户注册页面,支持用户名、密码和邮箱注册。
  • 文件目录: src/pages/Register.vue

6. 用户个人中心页:

  • 名称: 用户个人中心页
  • 介绍: 展示用户的个人信息、博客文章、关注和粉丝等信息。
  • 文件目录: src/pages/Profile.vue

7. 关于我们页:

  • 名称: 关于我们页
  • 介绍: 展示关于我们页面的内容,包括团队介绍、联系方式等。
  • 文件目录: src/pages/About.vue

路由配置代码:

javascript
import { createRouter, createWebHistory } from 'vue-router'

const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home,
  },
  {
    path: '/articles',
    name: 'Articles',
    component: Articles,
  },
  {
    path: '/articles/:id',
    name: 'ArticleDetail',
    component: ArticleDetail,
  },
  {
    path: '/login',
    name: 'Login',
    component: Login,
  },
  {
    path: '/register',
    name: 'Register',
    component: Register,
  },
  {
    path: '/profile',
    name: 'Profile',
    component: Profile,
  },
  {
    path: '/about',
    name: 'About',
    component: About,
  },
]

const router = createRouter({
  history: createWebHistory(),
  routes,
})

export default router

注意:

  • 以上只是示例,您可以根据实际需求进行调整
  • 路由配置代码需要放置在 src/router/index.js 文件中
  • 需要在 main.js 文件中使用 router 实例

根据以上需求,可以将页面拆分为首页、文章列表页、文章详情页、用户登录页、用户注册页、用户个人中心页和关于我们页。路由配置代码可以参考以上示例进行修改。

API 设计

提问:根据你对以上需求的理解,这个项目需要服务端提供哪些 API 接口? 请写出:1. 接口地址;2.接口描述;3.请求数据格式的示例;4.返回数据格式的示例;

根据以上需求,这个项目需要服务端提供以下 API 接口:

1. 获取文章列表

接口地址: GET /api/articles

接口描述: 获取所有博客文章列表,支持按分类、标签、时间等条件进行筛选。

请求数据格式:

json
{
  "category": "string", // 分类名称
  "tag": "string", // 标签名称
  "start_time": "string", // 开始时间
  "end_time": "string", // 结束时间
  "page": "number", // 页码
  "page_size": "number", // 每页显示数量
}

返回数据格式:

json
{
  "data": [
    {
      "id": "string", // 文章 ID
      "title": "string", // 文章标题
      "author": "string", // 作者名称
      "category": "string", // 分类名称
      "tags": ["string", "string"], // 标签名称列表
      "created_at": "string", // 创建时间
      "updated_at": "string", // 更新时间
      "content": "string", // 文章内容
    },
    // ...
  ],
  "total": "number", // 总数
}

2. 获取文章详情

接口地址: GET /api/articles/:id

接口描述: 获取单个博客文章的详细信息。

请求数据格式:

json
{
  "id": "string", // 文章 ID
}

返回数据格式:

json
{
  "id": "string", // 文章 ID
  "title": "string", // 文章标题
  "author": "string", // 作者名称
  "category": "string", // 分类名称
  "tags": ["string", "string"], // 标签名称列表
  "created_at": "string", // 创建时间
  "updated_at": "string", // 更新时间
  "content": "string", // 文章内容
}

3. 创建文章

接口地址: POST /api/articles

接口描述: 创建一篇新的博客文章。

请求数据格式:

json
{
  "title": "string", // 文章标题
  "author": "string", // 作者名称
  "category": "string", // 分类名称
  "tags": ["string", "string"], // 标签名称列表
  "content": "string", // 文章内容
}

返回数据格式:

json
{
  "id": "string", // 文章 ID
}

4. 更新文章

接口地址: PUT /api/articles/:id

接口描述: 更新一篇已存在的博客文章。

请求数据格式:

json
{
  "title": "string", // 文章标题
  "author": "string", // 作者名称
  "category": "string", // 分类名称
  "tags": ["string", "string"], // 标签名称列表
  "content": "string", // 文章内容
}

返回数据格式:

json
{
  "id": "string", // 文章 ID
}

5. 删除文章

接口地址: DELETE /api/articles/:id

接口描述: 删除一篇博客文章

请求数据格式:

json
{
  "id": "string", // 文章 ID
}

返回数据格式:

json
{
  "message": "string", // 成功消息
}

6. 用户登录

接口地址: POST /api/users/login

接口描述: 用户登录。

请求数据格式:

json
{
  "username": "string", // 用户名
  "password": "string", // 密码
}

返回数据格式:

json
{
  "token": "string", // 用户登录令牌
}

7. 用户注册

接口地址: POST /api/users/register

接口描述: 用户注册。

请求数据格式:

json
{
  "username": "string", // 用户名
  "password": "string", // 密码
  "email": "string", // 邮箱地址
}

返回数据格式:

json
{
  "message": "string", // 成功消息
}

8. 获取用户信息

接口地址: GET /api/users/me

接口描述: 获取当前登录用户的个人信息。

请求数据格式:

json
{
  "token": "string", // 用户登录令牌
}

返回数据格式:

json
{
  "id": "string", // 用户 ID
  "username": "string", // 用户名
  "email": "string", // 邮箱地址
}

9. 更新用户信息

接口地址: PUT /api/users/me

接口描述: 更新当前登录用户的个人信息。

请求数据格式:

json
{
  "username": "string", // 用户名
  "email": "string", // 邮箱地址
}

返回数据格式:

json
{
  "message": "string", // 成功消息
}

10. 获取用户文章列表

接口地址: GET /api/users/:id/articles

接口描述: 获取指定用户的博客文章列表。

请求数据格式:

json
{
  "id": "string", // 用户 ID
}

返回数据格式:

json
{
  "data": [
    {
      "id": "string", // 文章 ID
      "title": "string", // 文章标题
      "author": "string", // 作者名称
      "category": "string", // 分类名称
      "tags": ["string", "string"], // 标签名称列表
      "created_at": "string", // 创建时间
      "updated_at": "string", // 更新时间
      "content": "string", // 文章内容
    },
    // ...
  ],
  "total": "number", // 总数
}

以上是这个项目需要的服务端 API 接口,您可以根据实际需求进行调整

检查这个 API 设计,它可能会遗漏一些,可以继续提问:

你还有一些需求没有考虑到,例如博客分类、搜索博客、删除博客、点赞、收藏、评论等。 请再详细分析上面的需求,重新给出一个 API 列表

PS:设计中尽量保证 API 完善,其他再有遗漏的,可以开发中继续补充

写 API 相关代码

先安装 axios npm i axios --save

以上接口设计,我想用 axios 进行封装,并封装 Axios 实例进行请求。要求拆分为 blog、comment、user 三个模块,应该创建哪些 js 文件? 先列出文件名称、目录和说明

ChatGPT 列出了四个文件:blogAPI commentAPI userAPI 和 axiosInstance

继续提问:根据你的设计,先写出 axiosInstance.js 的代码内容。请求时要带上 token

PS:重写 response 拦截器,可用 Copilot 生成代码

继续提问:再根据上面的 API 设计,写出 blogApi.js 的代码内容

(它可能考虑不那么全面,可继续追问:你没有考到了搜索、点赞、收藏。请重新写这份代码。)

根据以上方式,继续提问其他 API 的代码

搭建 mock 环境

直接提供一个 nodejs + mockjs 的环境,并先初始化 /api/blogs 路由

然后在 vue 前端项目中测试这个接口。PS:修改 axios 配置的 baseURL

为何使用 Mock 而不使用真实服务端

  • Mock 简单,下载就能运行
  • 真实服务端配置麻烦,且要安装、连接数据库
  • 本课程目标是学习 AI 工具的前端使用,不要“喧宾夺主”