网上会看到很多 AI 的应用介绍或者教程
以上这些都不是。AI 对于开发人员的最大价值就是 —— 开发提效
所以,未来可能让你失业的不是 AI ,而是你身边懂 AI 的同事
ChatGPT 提问:
你是互联网行业一名资深的产品经理,现在主导设计一个博客产品的需求,这个产品是面向编程技术人员的,例如简书、博客园、掘金这种网站。要求产品以博客功能为主,不要有其他无关功能。你来写这个产品的需求文档,先列出需求大纲。
ChatGPT 回复了详细的需求大纲,非常专业、全面。
自己定,没必要交给 ChatGPT
创建 Vue3 开发环境,参考官网 https://cn.vuejs.org/guide/quick-start.html
并安装 ElementPlus https://element-plus.gitee.io/zh-CN/
去掉无用代码
./assets/main.css
,只保留第一行 base.css
,其他全部注释掉基于之前的需求和页面,继续提问
你现在是一名资深前端工程师,精通 vue3 技术栈,接下里要根据上面的需求来开发这个项目。 以上需求你能理解吗?
提问:
根据以上需求,需要拆分几个页面?以及如何配置 vue3 路由? 需要你写出: 1. 每个页面的名称、介绍、文件目录; 2. 路由配置代码;
PS:路由配置可以不用 import()
语法,直接要求 ChatGPT 重写即可
根据 ChatGPT 的分析,写代码
(可以到*等渠道获得 挺便宜的)
其中会用到 Copilot ,写起来很快
提问
根据你对以上需求的理解,这个项目需要服务端提供哪些 API 接口? 请写出:1. 接口地址;2.接口描述;3.请求数据格式的示例;4.返回数据格式的示例;
检查这个 API 设计,它可能会遗漏一些,可以继续提问:
你还有一些需求没有考虑到,例如博客分类、搜索博客、删除博客、点赞、收藏、评论等。 请再详细分析上面的需求,重新给出一个 API 列表
PS:设计中尽量保证 API 完善,其他再有遗漏的,可以开发中继续补充
先安装 axios npm i axios --save
提问:
以上接口设计,我想用 axios 进行封装,要求拆分为 blog comment user 三个模块,应该创建哪些 js 文件? 先列出文件名称、目录和说明
ChatGPT 列出了四个文件:blogAPI commentAPI userAPI 和 axiosInstance
继续提问:
根据你的设计,先写出 axiosInstance.js 的代码内容。 请求时要带上 token
PS:重写 response 拦截器,可用 Copilot 生成代码
继续提问:
再根据上面的 API 设计,写出 blogApi.js 的代码内容 (它可能考虑不那么全面,可继续追问:你没有考到了搜索、点赞、收藏。请重新写这份代码。)
根据以上方式,继续提问其他 API 的代码
ChatGPT 提问:
请用 vue3 和 ElementPlus 写一个顶部导航栏,宽度 100% 。 导航栏分左右两部分。左侧是 logo 和导航菜单。右侧是搜索组件和登录菜单。 导航菜单有三个:前端 java 和 python,使用 vue-router 实现链接。每个菜单前面加上合适的 icon
把代码贴过来测试,效果并不好
所以,遇到复杂的功能、设计,要去拆分任务,一步一步去执行 —— 这和你带团队、带项目是一样的
ChatGPT 提问:
请用 vue3 和 ElementPlus 写一个组件,组件包括两个部分: 第一,顶部导航栏。宽度 100% 。左右结构,左侧是 log ,右侧是“登录”链接。 第二,主体部分。宽度 1000px ,左右居中。主体部分要包含
组件。
直接手写
链接到首页text-decoration: none;
修改网页标题
index.html
写默认标题 TechBloghooks/usePageTitle.js
使用 vue3 composition API 写一个 hook ,可以在多个组件中使用,用来修改网页标题
ChatGPT 提问
使用 vue3 和 ElementPlus 写一个菜单组件,包含:前端、Java、Python、小程序 要求如下: 1. 每个菜单点击时,都跳转到首页,并加一个 query `?category=xxx` 2. activeMenu 要根据 url query `category` 参数实时变化,默认值是空 3. 使用 vue3 setup script 语法
新建组件 components/NavMenu.vue
,把代码贴上。并增加:
margin-left: 20px
border-bottom
我想把一个 div 的位置仅往下移动 1px (其他方向不变),同时不影响父元素的位置。使用 css 怎么写?
代码
position: relative; margin-bottom: -1px;
最后,把
组件引用到 App.vue
ChatGPT 提问
使用 vue3 和 ElementPlus 写一个 input search 组件。要求: 1. 搜索时跳转到当前 path ,并加一个 query `?keyword=xxx` ,且保留现有的 url query 2. 实时监听 url query `keyword` 并讲内容显示到 input 中 3. 使用 vue3 setup script 语法
新建组件 components/SearchInput.vue
,把代码贴上。并增加
@keyup.enter
最后,把
组件引用到 App.vue
新建组件 components/UserInfo.vue
先写一个“登录”链接,后面再补充用户信息
ChatGPT 提问
使用 vue3 和 ElementPlus 写一个注册页面,包含一个标题“注册新用户”和一个表单。要求: 1. 页面内容水平垂直居中 2. 注册表单包含:用户名(必填)、密码(必填)、确认密码、昵称、注册按钮 3. 注册表单要根据 item 数据类型设置校验规则 4. 使用 vue3 setup script 语法
把代码拷贝到 views/UserRegisterView.vue
做如下调整:
margin-bottom
; 2.调整 form 宽度; 3.高度太大,有滚动条,改成 80vh
;(可画图解释)
ChatGPT 提问
使用 vue3 和 ElementPlus 写一个登录页面,包含一个标题“用户登录”和一个表单。要求: 1. 页面内容水平垂直居中。标题和表单之前有 20px 间隔 2. 登录表单包含:用户名(必填)、密码(必填)、登录按钮。登录按钮后加一个链接“新用户请注册”,点击跳转到注册页 3. 登录表单要根据 item 数据类型设置校验规则 4. 使用 vue3 setup script 语法
遇到问题再继续修改,例如 以上代码有两个问题:1. form 的 label 宽度没有固定;2.页面内容没有垂直居中;
把代码拷贝到 views/UserLoginView.vue
并做如下调整:
80vh
;label-width="100px"
App.vue
中请求用户信息,并存储到 Piniacomponents/UserInfo.vue
获取用户信息简介 | Pinia
参考当前的 stores/counter.js
来写即可
先写 mock-server
再写代码,参考 App.vue
使用 watchEffect
监测变化,并跳转 —— 可抽离单独的 Hook useNavToLogin.js
【注意】这里没有使用导航守卫,有问题 (代码参考 router/index.js
)
跳转,没问题/login
,无法第一时间获取到 pinia store修改 components/UserInfo.vue
代码
ChatGPT 提问:
使用 vue3 和 ElementPlus 写一个下拉菜单,标题是 `nickname` 下拉菜单有两个: 1. 创建博客,点击跳转到 `/create-edit-blog` 2. 我的博客,点击跳转到 `/my-blogs` 3. 注销,点击执行一个函数
ChatGPT 写的不好,再用 Copilot 提问 使用 element-plus 实现一个下拉菜单
,也写的不好
最后不得已从官网拷贝 Dropdown 下拉菜单 | Element Plus
另外,ElementPlus 的 icon 需要单独安装和注册,参考 main.js
完善代码(结合 Copilot)
v-if
v-else
判断显示内容获取博客列表的接口 /api/blogs
ChatGPT 提问
生成 10 条博客数据,JSON 格式,用于 mock 服务。 编程技术类博客,如前端、Java、Python、小程序等,内容要贴近真实的技术博客内容。 每条博客内容如下: - id (唯一,不可重复) - 标题 - 简介(50-100字) - 分类(随机选择:前端, java, python, 小程序)要和标题、简介对应好 - 作者 - 点赞数量 - 收藏数量 - 评论数量 - 创建时间 - 更新时间
PS:ChatGPT 可能会使用 JS 函数生成,直接停止,并要求 不要使用 JS 函数,直接生成静态 JSON 数据格式
考虑到分页,返回的 data
应该改为 { list: [], total: 100 }
最后,分页后 id 也不能重复,所以使用 MockJS 来随机生成 id ,使用 Random.id()
需要考虑的条件:
第一,需要改造一下 blogApi.js 中的 getBlogList
,增加参数
第二,在首页 HomeView.vue 中请求数据。使用 Copilot 生成代码。
第三,渲染博客列表,使用 Copilot 生成代码
ChatGPT 提问
用 vue3 和 ElementPlus 写一个博客卡片组件(BlogCard.vue),用于在博客列表中显示单个博客信息 该组件接受一个属性 blog ,是一个 js 对象 该组件的 UI 分为上中下三层结构: - 上层显示:博客作者(blog.author)并在前面加 icon ,分类(blog.category),时间(blog.updatedAt) - 中层显示:博客标题(blog.title),博客简介(blog.summary),且点击标题跳转到 `/blog/:id` - 下层显示:点赞数量(blog.likes),收藏数量(blog.favorites)、评论数量(blog.comments)。每个使用合适的 icon 来表示 还要求: - 当鼠标 hover 卡片,设置浅灰色背景 - 点击卡片跳转到 `/blog/:id` - CSS 样式要美观,可参考当前博客网站的样式 - 使用 vue3 setup script 语法
新建组件 components/BlogCard.vue
并粘贴相应代码
样式有点问题,继续调整一下:
你给出的代码非常好。不过有几个样式的地方需要优化: 1. 内容和边框的间距太大了,再小一些 2. 上层显示的三个信息,全部靠左显示,中间要有间隙。 3. 上层显示的三个信息,“时间”和“分类”使用灰色
代码进行如下调整
margin-bottom
处理时间格式,新建 utils/date.js
,然后用 Copilot 快速生成
ChatGPT 提问
使用 vue3 和 ElementPlus 写一个分页组件,水平居中显示 可用的变量有 total page pageSize 使用 vue3 setup script
然后用 Copilot 快速生成 handleCurrentChange
函数代码
获取博客详情接口 /api/blogs/${id}
用 ChatGPT 生成博客内容
用 JSON 格式写一个真实的编程技术博客,博客包括: - id - 标题 - 内容,要求:使用 markdown 格式,包含标题、文本、列表、代码块,1000 字左右 - 作者 - 分类(随机选择:前端, java, python, 小程序)要和标题、简介对应好 - 点赞数量 - 是否点赞 - 收藏数量 - 是否收藏 - 评论数量 - 创建时间
然后借助 Copilot 在 mock-server 中完善接口
其他接口:
根据 id 获取博客数据 —— 使用 Copilot 可快速完成
使用 useTitle
修改博客标题
显示博客信息:标题,作者,时间,内容
使用 ChatGPT 提问
用 js 把 markdown 格式转换为 html 格式?有没有第三方库可以使用?
markdown-it
toRaw(blogInfo.content)
/* 优化 pre code 样式 */
使用 Copilot 生成模板
优化代码
根据 isLiked
和 isFavorited
判断,显示按钮 active 状态。手写即可
添加点击事件,执行 点赞/取消点赞,收藏/取消收藏。可使用 Copilot 生成代码
// 点赞或取消点赞
// 收藏或取消收藏
ChatGPT 提问:
使用 JSON 格式,生成一个编程技术博客的评论列表,一共 5 条。评论内容要真实。 每条评论包含: - id - 评论内容 - 创建时间 - 作者用户名 - 作者昵称
然后配合 Copilot 编写 mock 代码
使用 Copilot 生成
新建一个 views/subviews/CommentView.vue
,并引入到 views/BlogDetailView.vue
获取博客列表数据,直接使用 Copilot 生成
显示评论列表,直接用 Copilot 生成
CSS 也可自动生成,且样式很好看
最后,再加用户名前面加一个 icon
前提:该一下 mock 数据,让一条数据是自己的
获取当年用户名:从 pinia store 中引入
删除评论 —— 直接使用 Copilot 生成
CSS 也可以生成// 删除一条评论
使用 Copilot 生成
(以及 CSS)// 发表评论
PS:在此生成“创建博客”按钮
mock 增加:删除博客。使用 Copilot
在 blogApi.js
获取博客列表,加一个 opt my
默认 false
参数传给服务端,让服务端处理
获取博客列表数据,使用 Copilot 生成,参考代码的注释
【注意】加上 my: true
表示“我的博客”
显示列表和操作
// 跳转到编辑页
// 删除博客
分页:可以把“首页”分页,单独抽离一个组件
需要改动
path: '/'
,不要只考虑首页使用 Copilot 生成代码,在 table 上面写
使用 Copilot 生成
如果用户未登录,则跳转到登录页。参考“我的博客”页 —— 可抽离单独的 Hook useNavToLogin.js
使用 Coplit 根据注释生成
第一,
// 获取 url params id
第二,根据 id 获取博客数据。先引入 api ,再写
// onMounted 根据 id 获取博客详情页,id 为空则不获取
第三,修改标题。先引入 hook ,再写
// 定义标题,有 id 则为编辑,否则为创建
和// 设置网页标题
第一,标题栏(和“提交”按钮),ChatGPT 生成
使用 vue3 和 ElementPlus 写一个 div ,左右结构 左侧是 `title` ,右侧是“提交”按钮,点击执行一个事件 使用 vue3 setup script 语法
第二,博客标题和类型,ChatGPT 生成
使用 vue3 和 ElementPlus 写一个 div ,左右结构 左侧:一个文字“标题”,一个 input ,v-model 对应 `blogDetails.title` 右侧:一个文字“类型”(可选:前端、Java、Python、小程序),v-model 对应 `blogDetails.category` 中间要有间隔 使用 vue3 setup script 语法
第三,内容 textarea ,回车使用 Copilot 直接生成
第一,confirm 确认是否提交
ElMessageBox
以后(并修改为 async
函数),Copilot 给出的答案就好了第二,验证 title content category 是否为空 —— 使用 Copilot 即可
第三,(先引入 api)然后使用 Copilot 生成代码 // 如果没有 id ,则创建博客。没有 id 则更新博客
使用 ChatGPT 和 Copilot 快速生成代码,完成项目开发