From d4766bec9e99f21a01afcf28edbc69a4997e6b2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E4=BD=B3=E9=A2=96?= <3572749703@qq.com> Date: Sun, 25 May 2025 16:03:53 +0800 Subject: [PATCH 1/4] =?UTF-8?q?5.23=E5=A4=8D=E4=B9=A0-=E5=B0=9D=E8=AF=95?= =?UTF-8?q?=E4=BD=BF=E7=94=A8mock?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...50\257\225\344\275\277\347\224\250mock.md" | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 "\345\220\264\344\275\263\351\242\226/2025.5.23\345\244\215\344\271\240-\345\260\235\350\257\225\344\275\277\347\224\250mock.md" diff --git "a/\345\220\264\344\275\263\351\242\226/2025.5.23\345\244\215\344\271\240-\345\260\235\350\257\225\344\275\277\347\224\250mock.md" "b/\345\220\264\344\275\263\351\242\226/2025.5.23\345\244\215\344\271\240-\345\260\235\350\257\225\344\275\277\347\224\250mock.md" new file mode 100644 index 0000000..f241be2 --- /dev/null +++ "b/\345\220\264\344\275\263\351\242\226/2025.5.23\345\244\215\344\271\240-\345\260\235\350\257\225\344\275\277\347\224\250mock.md" @@ -0,0 +1,41 @@ +# Mock数据 + +## 安装Mock和axios +```bash +yarn add mockjs +``` +## 创建一个文件用来存储mock模拟数据 +> 在src目录下创建一个mock/index.js文件 +```js +import Mock from 'mockjs' + +let data=Mock.mock({ + "data|6":[ //生成6条数据 + { + "stuid|+1":1,//生成学生id,自增1 + "stuname":"@cname",//生成学生名字,都是中国人的名字, + "stuAddress":"@county(true)" //随机生成地址 + } + ] +}) +Mock.mock(/\/goods\/list/,'get',()=>{ + //第一个请求路径,第二个请求方式,第三个回调函数返回值 + return data +}) +``` +## 在入口文件main.js文件中引入模拟数据文件 + +```js +import "./mock.index.js" +``` + +## 在需要请求数据的页面使用axios请求数据 + +```js +import axios from 'axios' + +axios.get('/goods/list').then(res=>{ + console.log("这是我发送的请求") + console.log(res.data) //打印请求的数据 +}) +``` \ No newline at end of file -- Gitee From 0e7eb55a63e7dd50152d9eaca54c5ebf1cfe3617 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E4=BD=B3=E9=A2=96?= <3572749703@qq.com> Date: Sun, 25 May 2025 16:04:27 +0800 Subject: [PATCH 2/4] =?UTF-8?q?5.21=E7=BB=84=E4=BB=B6=E5=BA=93vant?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\347\273\204\344\273\266\345\272\223vant.md" | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 "\345\220\264\344\275\263\351\242\226/2025.5.21\347\273\204\344\273\266\345\272\223vant.md" diff --git "a/\345\220\264\344\275\263\351\242\226/2025.5.21\347\273\204\344\273\266\345\272\223vant.md" "b/\345\220\264\344\275\263\351\242\226/2025.5.21\347\273\204\344\273\266\345\272\223vant.md" new file mode 100644 index 0000000..d6b4f77 --- /dev/null +++ "b/\345\220\264\344\275\263\351\242\226/2025.5.21\347\273\204\344\273\266\345\272\223vant.md" @@ -0,0 +1,17 @@ +# UI组件库 +## 安装 +```bash +yarn add vant +``` +## 引入组件(Button为例) +```js +import { createApp } from 'vue'; +import { Button } from 'vant'; + +const app = createApp(); +app.use(Button); +``` +## 使用 +```js +主要按钮 +``` \ No newline at end of file -- Gitee From 4d165d2e7aa21f0d81f51fef4c54003bf5308b0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E4=BD=B3=E9=A2=96?= <3572749703@qq.com> Date: Sun, 25 May 2025 16:04:56 +0800 Subject: [PATCH 3/4] =?UTF-8?q?5.20=E5=89=8D=E7=AB=AF=E5=A2=9E=E5=88=A0?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...57\345\242\236\345\210\240\346\224\271.md" | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 "\345\220\264\344\275\263\351\242\226/2025.5.20\345\211\215\347\253\257\345\242\236\345\210\240\346\224\271.md" diff --git "a/\345\220\264\344\275\263\351\242\226/2025.5.20\345\211\215\347\253\257\345\242\236\345\210\240\346\224\271.md" "b/\345\220\264\344\275\263\351\242\226/2025.5.20\345\211\215\347\253\257\345\242\236\345\210\240\346\224\271.md" new file mode 100644 index 0000000..0962d3c --- /dev/null +++ "b/\345\220\264\344\275\263\351\242\226/2025.5.20\345\211\215\347\253\257\345\242\236\345\210\240\346\224\271.md" @@ -0,0 +1,55 @@ +# 1. api模块 +所有方法都使用 axios 发送 HTTP 请求,并返回后端数据 + +1. getById:通过 ID 获取单个图书信息(GET 请求) +2. addItem:创建新图书(POST 请求) +3. editItem:更新已有图书(PUT 请求) +```js +// 查找单个数据 +export const getById = async (id) => { + let data = await axios.get(`${url}/book/${id}`) + return data.data +} +// 新增数据 +export const addItem = async (obj) => { + let data = await axios.post(`${url}/book`,obj) + return data.data +} +// 编辑数据 +export const editItem = async (id,obj) => { + let data = await axios.put(`${url}/book/${id}`,obj) + return data.data +} +``` + +## 2. 生命周期钩子 +1. 获取 URL 中的id参数 +2. 如果id存在,调用 `getById方法` 获取图书详情 +3. 使用Object.assign将返回的数据合并到响应式对象obj中,自动更新表单显示 +```js +onMounted(async () => { + let id = route.params.id || 0 + let data = await getById(id) + Object.assign(obj,data.data) +}) +``` + +## 3. 新增和编辑 +1. 获取 URL 参数中的id,判断是新增还是编辑操作 +2. 调用对应的 API 方法:editItem(编辑)或addItem(新增) +3. 根据返回结果判断操作是否成功: + - 成功(code 为 1000):跳转到图书列表页 + - 失败:打印错误信息到控制台 +```js +async function btnSave(){ + let id = route.params.id || 0 + let data + if(id){ + data = await editItem(id,obj) + }else{ + data = await addItem(obj) + } + if(data.code === 1000){ router.push('/book') + }else{ console.log(data.msg);} +} +``` \ No newline at end of file -- Gitee From 4992ba5cb656e25d316160d1f48cd391e22327e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E4=BD=B3=E9=A2=96?= <3572749703@qq.com> Date: Sun, 25 May 2025 16:05:23 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E5=89=8D=E7=AB=AFCRUD=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...47\253\257CRUD\347\225\214\351\235\242.md" | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 "\345\220\264\344\275\263\351\242\226/2025.5.19\345\211\215\347\253\257CRUD\347\225\214\351\235\242.md" diff --git "a/\345\220\264\344\275\263\351\242\226/2025.5.19\345\211\215\347\253\257CRUD\347\225\214\351\235\242.md" "b/\345\220\264\344\275\263\351\242\226/2025.5.19\345\211\215\347\253\257CRUD\347\225\214\351\235\242.md" new file mode 100644 index 0000000..a5e42aa --- /dev/null +++ "b/\345\220\264\344\275\263\351\242\226/2025.5.19\345\211\215\347\253\257CRUD\347\225\214\351\235\242.md" @@ -0,0 +1,67 @@ +# 1. 创建生命周期钩子(onMounted) +组件挂载后自动调用对应方法,使用axios向后端请求数据,获取书籍列表 +- 调用 getAll() 获取全部书籍数据 +- 将返回的书籍数组解构后添加到 books 中 + +> books 更新触发 DOM 自动重渲染 +```js +onMounted(async () => { + let data = await getAll(); + books.push(...data.data) +}) +``` + +## api请求逻辑 +1. getAll 函数:获取图书列表 + - 根据是否有 keyword 发送不同请求 + - 返回格式需符合 { code, data, msg } 结构 +```js +export const getAll = async (keyword) => { + let data; + if (keyword) { data = await axios.get(`http://localhost:3000/book?keyword=${keyword}`) + } else { data = await axios.get(`http://localhost:3000/book`)} + return data.data; +} +``` + +2. delItem 函数:删除对应图书 + - 发送 DELETE 请求到 /book/:id + - 返回操作结果(成功 / 失败) +```js +export const delItem = async (id) => { + let data = await axios.delete(`http://localhost:3000/book/${id}`) + return data.data; +} +``` + +## 查找对应图书 +1. 获取并处理搜索关键字(去除首尾空格) +2. 调用 getAll(keyword) 发送搜索请求 +3. 清空当前 books 数组 +4. 将搜索结果添加到 books 中(触发 DOM 更新) +```js +async function btnQuery() { + let trimKeyword = keyword.value.trim(); + let data = await getAll(trimKeyword); + books.splice(0); + books.push(...data.data); +} +``` + +## 删除图书 +1. 弹出确认对话框 +2. 确认后调用 delItem(id) 发送删除请求 +3. 根据返回状态码(code === 1000)判断操作结果 +4. 成功则从 books 中移除对应项(触发 DOM 更新) +5. 失败则打印错误信息 +```js +async function btnDel(id) { + if (confirm('真的要删除吗?')) { + let res = await delItem(id); + if (res.code === 1000) { + let index = books.findIndex(item => item.id === id); + books.splice(index, 1); + } else { console.log(res.msg); } + } +} +``` \ No newline at end of file -- Gitee