# 练习代码 **Repository Path**: lu-chenbing/exercise-code ## Basic Information - **Project Name**: 练习代码 - **Description**: 练习生 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-02-27 - **Last Updated**: 2023-03-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 技术栈 - vue: 3.2.25 - vite: 2.7.2 - vue-router: 4.0.12 - less: 4.1.2 - pinia: 2.0.11 - axios: 0.24.0 - element-plus: 1.3.0-beta.5 - v-md-editor: 2.3.13 - lodash: 4.17.21 ## 整体结构分析 ### 一、 注册、登录功能的实现 1.模块展示 两者在同一个页面里,用v-if来决定展示哪个模块,在两个`

`中监听直接转换对应的值 ```vue

const displayLogin = ref(true) // 是否展示登录页面 const displayRegister = ref(false) // 是否展示注册页面 ``` 2. 输入格式判断 用v-model监听表达的输入,在前端判断输入的内容是否满足要求。用正则表达式对其判断,如果错误,通过改变`isError`来决定是否显示错误提示,通过动态绑定class来显示样式。 ```vue

{{ errorTip }}

``` 注册表单监听 input 事件,在输入过程中就一直检查。登录没有。 ```js const check = (checkObj) => { if (!/^[\w\u4e00-\u9fa5]{3,15}$/.test(checkObj.username)) { checkObj.isError = true errorTip.value = '用户名为3~15个字符,支持 _ 、字母、数字、中文' return } if (!/^.{6,16}$/.test(checkObj.password)) { checkObj.isError = true errorTip.value = '密码长度为6~16个字符' return } checkObj.isError = false errorTip.value = null } ``` 3. 发送请求 监听对应按钮的 click 事件,执行函数,首先检查输入的内容,然后发送请求,如果出错,显示对应的错误提示 ### 二、sidebar 侧边栏 1. 用户名展示 登录后展示用户名 `user.username`,并检查用户的登录状态, ```js user.checkLogin() setInterval(function () {user.checkLogin()}, 120000) ``` 2. 创建笔记本 ```vue 创建笔记本 ``` 3. 笔记本列表 用 element UI库中 menu 组件,默认打开第二项`:default-openeds="['2']"`。 用 v-for 遍历 `store.notebookList`, 点击后修改当前展示的笔记本,以此用`:class="{}"`动态绑定当前活动项的样式。点击时设置该项为 curNotebook ```vue
{{ notebook.title }}
``` 在 created 生命周期中执行获取到笔记本列表函数,对此进行判断,如果返回的笔记本列表为空,则应该是新用户,则创建一个默认笔记本,并创建一个笔记 “欢迎使用晨旭笔记”。 ```js store.getNotebookList().then(() => { if (store.notebookList.length === 0) { store.initialize().then(() => { store.addNote({title: '欢迎适应晨旭笔记', content: '欢迎欢迎,热烈欢迎'}) store.getNotebookList() }) } }) ``` 3. 回收站 用 elementUI 中 drawer 来展示回收站组件,监听 @open 事件,获取回收站笔记列表。 遍历列表,渲染回收笔记标题,更新事件,所属笔记本,操作;操作中有彻底删除按钮和恢复按钮。 ```vue ``` 4.退出登录 ```vue 退出登录 ``` ### 二、笔记 #### 笔记本相关信息 根据 curNotebook 来展示笔记本标题和获取笔记列表,用tooltip 来展示对笔记本的操作:修改笔记本标题、删除和排序。 根据笔记列表的长度来得知笔记的数量,以及往里面添加笔记 #### 笔记相关 每一项上展示笔记标题,更新时间和一个删除按钮。样式上 hover 后或点击后当前一项的 bottom-border 会隐藏。 笔记编写区域,分为笔记标题编写区和笔记内容编写区域, ```vue
{{ statusText }}
``` 引用lodash 中 debounce防抖函数,当用户停止编辑后,发送请求 ```js const onUpdateNote = _.debounce(function () { if (!store.curNote.id) return store.updateNote().then().catch(() => {statusText.value = '保存出错'}) }, 3000) ``` ### 三、后端请求 #### 用 Axios 发送请求,基于 Promise ```js import axios from 'axios' import {ElMessage} from 'element-plus' axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded' axios.defaults.baseURL = 默认的请求域名 axios.defaults.withCredentials = true axios.defaults.validateStatus = (status) => { return (status >= 200 && status < 300) || status === 400 } export default function request(url, type = 'GET', data = {}) { return new Promise((resolve, reject) => { let option = { url: url, method: type, } if (type.toLowerCase() === 'get') { option.params = data } else { option.data = data } axios(option).then(res => { if (res.status === 200) { resolve(res.data) } else { ElMessage.error(res.data.msg) reject(res.data) } }).catch(() => { ElMessage.error('网络异常') reject({msg: '网络异常'}) }) }) } ``` #### 与后端约定的请求接口 ```js const notebookUrl = { GET: '/notebooks', ADD: '/notebooks', UPDATE: '/notebooks/:id', DELETE: './notebooks/:id' } const noteUrl = { GET: '/notes/from/:notebookId', ADD: '/notes/to/:notebookId', UPDATE: '/notes/:noteId', DELETE: '/notes/:noteId' } const userUrl = { REGISTER: '/auth/register', // 注册 LOGIN: '/auth/login', // 登录 LOGOUT: '/auth/logout', // 注销 GET_INFO: '/auth' // 获取用户信息 } const trashUrl = { GET: '/notes/trash', REVERT: '/notes/:noteId/revert', DELETE: '/notes/:noteId/confirm' } export {notebookUrl, noteUrl, userUrl, trashUrl} ``` ### 四、pinia 状态管理 #### 1. 用户相关 - 用户名 - 注册 - 登录 - 注销 - 检查登录 #### 2. 笔记 1. 笔记本 - 获取笔记本列表 - 删除、增加笔记本 - 修改笔记本标题 - 设置当前笔记本 2. 笔记 - 获取笔记列表 - 设置当前笔记 - 删除、增加、修改笔记 3. 回收站 - 获取回收站笔记列表, - 彻底删除和恢复笔记