Vue学习记录(十) --- Vue3综合应用

大事件管理系统

项目介绍

pnpm 包管理器 - 创建项目

  • 优势:比同类工具快2倍左右、节省磁盘空间
  • 安装:npm install -g pnpm
  • 创建项目:pnpm create vue
  • 安装依赖
  • 创建项目

提交至仓库前使用 husky 工具对代码进行检查

  • 初始化 git 仓库,执行 git init
  • 初始化 husky 工具配置,pnpm dlx husky-init && pnpm install
  • 修改 .husky/pre-commit 文件

目录调整

  1. 删除一些初始化的默认文件
  2. 修改剩余代码内容
  3. 新增调整完美需要的目录结构
  4. 拷贝全局样式和图片,安装预处理器支持

VueRouter4 语法解析

Element-plus 按需引入

  1. 使用包管理器安装 Element-plus:pnpm install element-lpus
  2. 安装按需导入插件:pnpm add -D unplugin-vue-components unplugin-auto-import
  3. 然后在页面中直接使用组件即可
  4. 默认 components 中的文件也会被自动注册

pinia 构建仓库和持久化

构建 pinia 用户模块

  • 安装 pinia 持久化插件
    • pnpm add pinia-plugin-persistedstate -D
  • 在 main.js 中配置持久化插件
  • 给模块配置持久化

pinia 独立维护

  1. 将 main.js 中有关 pinia 的代码 放入 store/index.js 中

仓库统一导出

  • 以 stores/index.js 作为唯一出口

数据交互 - 请求工具设计

创建 axios 实例

  • 安装 axios 包
    • pnpm add axios

完成 axios 基本配置

路由的设计和配置

  • -

登录注册页面(element-plus表单 + 表单校验)

  • element-plus 官网:https://element-plus.midfar.com/zh-CN/
  • 功能需求说明:
    1. 注册登录 静态结构 & 基本切换
    2. 注册功能(校验 + 注册)
    3. 登录功能(校验 + 登录 + 存token)

注册/登录 静态结构

  • 安装 element-plus 图标库:pnpm i @element-plus/icons-vue
  • 静态结构布置
    • 使用了 el-row、el-col、el-form、el-form-item、el-input 等组件
    • 可以在官网找到使用说明

注册功能(校验 + 注册)

element-plus 中的表单组件的使用说明
  • 结构相关
    • el-form: 整个表单组件
    • el-form-item:表单的一行
    • el-input:表单元素(输入框)
  • 校验相关
    • el-form => :model="ruleForm" 绑定的整个form的数据对象 { xxx, xxx, xxx }
    • el-form => :rules="rules" 绑定的整个rules规则对象 { xxx, xxx, xxx }
    • 表单元素 => v-model="ruleForm.xxx" 给表单元素,绑定form的子属性
    • el-form-item => prop配置生效的是哪个校验规则(和rules中的字段要对应)
  • 自定义校验
    • rule: 当前校验规则相关的信息
    • value:所校验的表单元素目前的表单值
    • callback:无论成功还失败,都需要 callback 回调
    • callback() 校验成功
    • callback(new Error(错误信息)) 校验失败

注册预校验

预校验
  • 使用 element-plus 表单组件中的方法
封装 api 接口
  • 在页面中调用

登录功能(校验 + 登录 + 存token)

  1. model 属性绑定 form 数据对象
  1. 封装 api 接口
  1. 绑定单击事件,实现登录预校验、调用登录接口、跳转页面

首页 layout (element-plus 菜单组件)

  • 功能需求说明
    1. 静态结构拆解(菜单组件的使用)
    2. 登录访问拦截
    3. 用户基本信息的获取和渲染
    4. 退出功能(element-plus 确认框)

静态结构拆解(菜单组件的使用)

  • 搭建静态结构
  • 标签
    • el-menu 整个菜单组件
      • :default-active="$route.path" 配置默认高亮的菜单项
      • router router选项开启,el-menu-item 的 index 就是点击跳转的路径
    • el-menu-item 菜单项
      • index="/article/channel" 配置的是访问路径

登录访问拦截

用户基本信息渲染

封装 api
  • 在 pinia 中对请求得到的用户信息进行持久化存储
  • 渲染用户信息
下拉菜单 & 退出功能
  • 给退出按钮绑定单击事件
  • 编写退出登录函数

文章分类页面 - 【element-plus 表格】

  • 功能需求说明:
    1. 基本架子 - PageContainer 封装
    2. 文章分类渲染 & loading 处理
    3. 文章分类添加编辑【element-plus 弹层】
    4. 文章分类删除

基本架子

  • 用到了 el-card 组件
  • 有多个页面复用,所以将其封装为组件
    • props 定制标题
    • 具名插槽 extra 定制头部右侧额外的按钮
    • 默认插槽 default 定制内容主体
  • 在页面中使用

文章分类渲染 & loading 处理

  • 封装 api
  • 页面中调用接口
  • 使用 el-table 标签
设置 loading 处理
  • 当 v-loading 为 true 时页面显示加载效果

文章分类添加【element-plus 弹层】

  • 封装 ChannelEdit 组件
  • 通过 dialog 绑定
完善弹层内容
  • 编辑/添加分类弹层的样式
  • 绑定表单并添加校验规则
  • 使用 v-model 和 prop 对变量进行绑定
添加/编辑分类 的提交
  • 封装 api
  • 在页面中调用 api
文章删除
  • 封装 api
  • 在页面中调用 api

文章管理页面

  • 功能需求说明
  1. 文章列表渲染(带搜索 + 带分页)
  2. 添加文章(抽屉 + 文件上传 + 富文本)
  3. 编辑文章(共用抽屉)
  4. 删除文章

文章列表渲染

  • 静态页面搭建(表单部分)
  • 静态页面搭建(表格部分)
  • 将组件配置为中文

将"文章分类"下拉菜单封装为组件 & 调用接口,动态渲染下拉分类

  • 在父组件和发布状态中进行参数绑定,便于将来提交表单

封装 api 接口 & 渲染页面 & 封装格式化日期函数

  • 封装 api 接口
  • 在页面中调用接口
  • 日期格式化(dayjs)

分页渲染

  • element plus 中的 pagination组件
  1. 将分页组件放到页面内
  1. 绑定两个单机事件,用于在分页逻辑变化时更新页面

添加 loading 效果和搜索重置

添加 loading 处理
  1. 设置 loading 变量
  2. 在获取文章列表前开启 loading,获取完毕后关闭 loading
  3. 给表格绑定 v-loading

添加文章(抽屉 + 文件上传 + 富文本)

element-plus 抽屉组件

  • 将抽屉组件封装到 ArticlEdit components 中
  • 在页面中加入抽屉组件
  • 在页面中封装添加文章和编辑文章的方法,通过传参来区分

文件上传(文件预览)

  • 在 element-plus 中找到 upload 组件中的 用户头像,粘贴有关内容
  • 实现图片预览

富文本

  1. 导包
  2. 在页面中引入
  3. 绑定数据
  4. 美化
  5. 效果

添加文章

  1. 封装接口
  2. 注册单击事件并调用
  3. 父组件监听是否成功,重新渲染
  4. 内容重置

编辑回显

  1. 封装 api 接口
  2. 在页面中调用接口
  3. ai 编写函数完成文件格式转换

编辑提交

  1. 封装编辑接口
  2. 提交时调用接口
相关推荐
hrrrrb20 分钟前
【CSS3】筑基篇
前端·css·css3
boy快快长大22 分钟前
【VUE】day01-vue基本使用、调试工具、指令与过滤器
前端·javascript·vue.js
三原26 分钟前
五年使用vue2、vue3经验,我直接上手react
前端·javascript·react.js
嘉琪coder32 分钟前
React的两种状态哲学:受控与非受控模式
前端·react.js
木胭脂沾染了灰42 分钟前
策略设计模式-下单
java·前端·设计模式
Eric_见嘉1 小时前
当敦煌壁画遇上 VS Code:我用古风色系开发了编程主题
前端·产品·visual studio code
拉不动的猪1 小时前
刷刷题28(http)
前端·javascript·面试
IT、木易2 小时前
大白话 CSS 中transform属性的常见变换类型(平移、旋转、缩放等)及使用场景
前端·css·面试