Vue2+Vue3前端开发_Day12-Day14_大事件管理系统

参考课程:

黑马程序员 Vue2+Vue3基础入门到实战项目】

[https://www.bilibili.com/video/BV1HV4y1a7n4]

@ZZHow(ZZHow1024)

项目收获

  • Vue3 composition API
  • Pinia / Pinia 持久化处理
  • Element Plus(表单校验,表格处理,组件封装)
  • pnpm 包管理升级
  • Eslint + prettier 更规范的配置
  • husky(Git hooks 工具)代码提交之前,进行校验
  • 请求模块设计
  • VueRouter4 路由设计

创建项目

  • pnpm 包管理器

    • 官网:

    pnpm - 速度快、节省磁盘空间的软件包管理器 | pnpm中文文档 | pnpm中文网

    • 优势:比同类工具快 2 倍左右、节省磁盘空间等。

    • 安装 pnpm:npm install -g pnpm

    • 创建项目:pnpm create vue

    • npm、yarn 和 pnpm 命令对比:

      npmyarnpnpm
      npm installyarnpnpm install
      npm install axiosyarn add axiospnpm add axios
      npm install axios -Dyarn add axios-Dpnpm add axios -D
      npm uninstall axiosyarn remove axiospnpm remove axios
      npm run devyarn devpnpm dev
  • 使用 pnpm 创建项目

    1. pnpm create vue
    2. 选择 Add Vue Router for Single Page Application development、Add Pinia for state management、Add ESLint for code quality 和 Add Prettier for code formatting。
    3. 进入项目目录,安装依赖,启动项目。
  • Eslint 配置代码风格

    • 配置文件:.eslintrc.cjs

      rules: {'prettier/prettier': ['warn',{singleQuote: true, // 单引号semi: false, // 无分号printWidth: 80, // 每行宽度至多80字符trailingComma: 'none', // 不加对象|数组最后逗号endOfLine: 'auto' // 换行符号不限制(win mac 不一致)}],'vue/multi-word-component-names': ['warn',{ignores: ['index'] // vue组件名称多单词组成(忽略index.vue)}],'vue/no-setup-props-destructure': ['off'], // 关闭 props 解构的校验// 💡 添加未定义变量错误提示,create-vue@3.6.3 关闭,这里加上是为了支持下一个章节演示。'no-undef': 'error'
      }
      
      • Prettier 风格配置

        • 官网:

        Prettier · Opinionated Code Formatter

        1. 单引号
        2. 不使用分号
        3. 每行宽度至多 80 字符
        4. 不加对象,数组最后逗号
        5. 换行符号不限制(Windows 和 macOS 不一致)
      • Vue 组件名称多单词组成(忽略 index.vue)

      • props 解构(关闭)

  • 配置代码检查工作流

    • 提交前做代码检查
      1. 初始化 Git 仓库,执行 git init

      2. 初始化 Husky 工具配置。

        • 执行 pnpm dlx husky-init && pnpm install
        • 官网:

        Husky

      3. 修改 .husky/pre-commit 文件。

        • npm test 改为 pnpm lint
      • 问题:默认进行的是全量检查,有耗时问题和历史问题
    • 暂存区 ESLint 校验
      1. 安装 lint-staged 包,执行 pnpm ilint-staged -D

      2. package.json 配置 lint-staged 命令。

        {// ... 省略 ..."lint-staged": {"*.{js,ts,vue}": ["eslint --fix"]}
        }{"scripts": {// ... 省略 ..."lint-staged": "lint-staged"}
        }
        
      3. 修改 .husky/pre-commit 文件。

        • pnpm lint 改为 pnpm lint-staged
  • 目录调整

    • 默认生成的目录结构不满足我们的开发需求,需要做一些自定义改动。
    • 步骤:
      1. 删除一些初始化的默认文件。
      2. 修改剩余代码内容。
      3. 新增调整我们需要的目录结构。
      4. 拷贝全局样式和图片,安装预处理器支持。

前置知识

  • Vue Router 4

    • 路由初始化
      1. 创建路由实例由 createRouter 实现。
      2. 路由模式:
        1. history 模式使用 createWebHistory()
        2. hash 模式使用 createWebHashHistory()
        3. 参数是基础路径,默认 /,import.meta.env.BASE_URL 是 Vite 的环境变量。
  • Vite 环境变量

    • 官方文档:

    环境变量和模式

  • Element Plus 组件库

    • 按需引入 Element Plus
      1. 安装:pnpm add element-plus

      2. 配置按需导入。

        • 官方文档:

        快速开始 | Element Plus

      3. 直接使用组件。

    • 彩蛋:默认 components 下的文件也会被自动注册。
  • Pinia 构建仓库和持久化

    • 状态管理 - Pinia
      • 用户仓库 - User
      • 持久化 - pinia-plugin-persistedstate
    • 统一管理
      • Pinia 独立维护
      • 仓库统一导出
  • 请求工具设计

    • Axios 配置
      • 创建 Axios 实例:基准地址,超时时间。
      • 请求拦截器:携带 Token。
      • 响应拦截器:业务失败处理,摘取核心响应数据,401 处理。
  • 整体路由设计

    • 登录 - 一级路由
    • 架子 - 一级路由
      • 文章分类 - 二级路由
      • 文章管理 - 二级路由
      • 基本资料 - 二级路由
      • 更换头像 - 二级路由
      • 重置密码 - 二级路由

项目开发

  • 登录注册

    • 需求:
      1. 注册登录 静态结构&基本切换
      2. 注册功能(校验 + 注册)
      3. 登录功能(校验 + 登录 + 存 Token)
    • 普通校验:
      1. el-form → :model="nuleForm",绑定的整个 form 的数据对象{ xxx, xxx, xxx }。
      2. el-form → :rules="rules",绑定的整个 rules 规则对象 { xxx, xxx, xxx }。
      3. 表单元素 → v-model="ruleForm.xxx",给表单元素,绑定 form 的子属性。
      4. el-form-item → prop 配置生效的是哪个校验规则(和 rules 中的字段要对应)。
    • 自定义校验(校验函数):
      • validator: (rule, value, callback) => {}
        1. rule:当前校验规则相关的信息。
        2. value:所校验的表单元素目前的表单值。
        3. callback:无论成功还是失败,都需要 callback 回调。
      • callback():校验成功。
      • callback (new Error (错误信息)) 校验失败。
    • 预校验
      • await form.value.validate() ,能等到说明校验通过。
    • ESLint 全局变量名
      • 打开文件 .eslintrc.cjs

        globals: {ElMessage: 'readonly',ElMessageBox: 'readonly',ElLoading: 'readonly'
        }
        
  • 首页

    • layout 架子
      • 需求:
        • 基本架子拆解(菜单组件的使用)。
        • 登录访问拦截。
        • 用户基本信息获取&渲染。
        • 退出功能 [element-plus 确认框]。
      • el-menu 整个菜单组件:
        • :default-active="$route.path":配置默认高亮的菜单项。
        • router 选项开启,el-menu-ithm 的 index 就是点击跳转的路径。
      • el-menu-item 菜单项:
        • index="/article/channel":配置的是访问的跳转路径。
      • Vue Router 4:
        • 根据返回值决定,是放行还是拦截。
        • 返回值:
          • undefined / true:直接放行。
          • false:拦回 from 的地址页面。
          • 具体路径 或 路径对象:拦截到对应的地址。
    • 文章分类页面 - [element-plus 表格]
      • 需求:
        • 基本架子 - PageContainer 封装。
        • 文章分类渲染 & loading 处理。
        • 文章分类添加编辑[element-plus 弹层]。
        • 文章分类删除。
    • 文章管理页面 - [element-plus 进阶]
      • 需求:
        • 文章列表渲染(带搜索 & 带分页)。
        • 添加文章(糖屉 & 文件上传 & 富文本)。
        • 编辑文章(共用抽屉)。
        • 删除文章。
  • 中文国际化处理

    • 使用 <el-config-providen :locale="zh-cn"> 将需要配置的组件包裹起来
    • 导入中文包:import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
  • 富文本编辑器 [Vue-Quill]

    • 官网:

      VueQuill

    • 使用步骤:

      1. 安装:pnpm add @vueup/vue-quill@latest

      2. 注册成局部组件

        import { QuillEditor } from '@vueup/vue-quill'
        import '@vueup/vue-quill/dist/vue-quill.snow.css'
        
      3. 页面中使用绑定

        <div class="editor"><quill-editortheme="snow"v-model:content="formModel.content"contentType="html"></quill-editor>
        </div>
        
      4. 样式美化

        .editor {width: 100%;:deep(.ql-editor) {min-height: 200px;}
        }
        
  • 个人中心

    • 基本资料。
    • 更换头像。
    • 重置密码。

项目演示

  • 在线演示:https://fe-bigevent-web.itheima.net/login
  • 接口文档:https://apifox.com/apidoc/shared-26c67aee-0233-4d23-aab7-08448fdf95ff/api-93850835
  • 基地址:http://big-event-vue-api-t.itheima.net

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/94289.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/94289.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[ACTF新生赛2020]明文攻击

BUUCTF在线评测BUUCTF 是一个 CTF 竞赛和训练平台&#xff0c;为各位 CTF 选手提供真实赛题在线复现等服务。https://buuoj.cn/challenges#[ACTF%E6%96%B0%E7%94%9F%E8%B5%9B2020]%E6%98%8E%E6%96%87%E6%94%BB%E5%87%BB下载查看&#xff0c;一个压缩包和一张图片。压缩包需要密…

关于日本服务器的三种线路讲解

租用日本服务器时&#xff0c;哪种线路选择更适合?当初次接触跨境业务的站长们着手租用日本服务器时&#xff0c;会发现不同服务商提供的网络线路五花八门&#xff0c;从陌生的运营商名称到复杂的技术参数&#xff0c;常常使其感到眼花缭乱。为了帮助大家理清思路&#xff0c;…

【大白话解析】 OpenZeppelin 的 MerkleProof 库:Solidity 默克尔证明验证工具全指南​​(附源代码)

🧩 一、Merkle Tree 是什么?为什么要验证它? 想象你有一个名单,比如: ["Alice", "Bob", "Charlie", "Dave"] 你想让别人验证:“我(比如 Alice)是不是在这个名单里?”,但不想把整个名单都放在区块链上(太贵!)。 于是你…

机械学习综合练习项目

数据集合完整项目文件已经上传一、项目介绍案例介绍 案例是针对“红酒.csv”数据集&#xff0c;在红葡萄酒质量分析的场景 中&#xff0c;利用多元线性回归来探索红葡萄酒的不同化学成分如何共同 影响其质量评分。在建立线性回归模型之后&#xff0c;当给出了红葡萄酒 的新的一…

第3篇:配置管理的艺术 - 让框架更灵活

前言 在前一章中&#xff0c;我们设计了强大的注解API。本章将深入探讨配置管理系统的设计&#xff0c;学习如何将注解中的声明式配置转换为运行时可用的配置对象。 配置管理的核心挑战 在我们的框架中&#xff0c;配置来源有三个层级&#xff1a;主要挑战&#xff1a; &#x…

发版混乱怎么规范

你是否经历过这种场景&#xff1a;临到发版&#xff0c;一堆功能代码挤在一起&#xff0c;测试分不清范围&#xff0c;修复一个Bug可能引发三个新Bug&#xff1f;发布过程像一场豪赌&#xff1f;问题的核心往往在于分支策略和流程的混乱。今天&#xff0c;我们就来建立一套在绝…

【golang长途旅行第30站】channel管道------解决线程竞争的好手

channel 为什么需要channel 使用全局变量加锁同步来解决goroutine的竞争&#xff0c;可以但不完美难以精确控制等待时间​&#xff08;主线程无法准确知道所有 goroutine 何时完成&#xff09;。全局变量容易引发竞态条件​&#xff08;即使加锁&#xff0c;代码复杂度也会增加…

苹果XR芯片介绍

苹果的 XR 芯片技术主要体现在 A 系列、M 系列处理器以及专为空间计算设计的 R1 协处理器中。以下从技术架构、产品迭代和综合对比三个维度展开分析&#xff1a;一、技术架构解析1. A 系列芯片&#xff08;以 A12 Bionic 为例&#xff09;制程工艺&#xff1a;7nm&#xff08;台…

达梦数据库巡检常用SQL(三)

达梦数据库巡检常用SQL(三) 数据库SQL运行检查 数据库SQL运行检查 死锁的事务情况: SELECT TO_CHAR(HAPPEN_TIME,YYYY-MM-DD HH24:MI:SS) HAPPEN_TIME,SQL_TEXT FROM V$DEADLOCK_HISTORY WHERE HAPPEN_TIME >DATEADD(DAY,-30,

基于SpringBoot的校园周边美食探索及分享平台

1. 项目简介 项目名称&#xff1a;校园周边美食探索及分享平台 项目背景&#xff1a;针对校园师生对周边美食信息的需求&#xff0c;构建一个集美食推荐、鉴赏、评论互动及社交功能于一体的平台&#xff0c;帮助用户发现优质美食资源并进行分享交流。 主要目标&#xff1a; 提供…

Go数据结构与算法-常见的排序算法

虽然看过别人写了很多遍&#xff0c;而且自己也写过很多遍&#xff08;指的是笔记&#xff09;&#xff0c;但是还是要写的就是排序算法。毕竟是初学Go语言&#xff0c;虽然之前写过&#xff0c;但是还是打算再写一遍。主要包括插入排序、选择排序、冒泡排序、快速排序、堆排序…

第 6 篇:目标规则与负载均衡 - `DestinationRule` 详解

系列文章:《Istio 服务网格详解》 第 6 篇:目标规则与负载均衡 - DestinationRule 详解 本篇焦点: 深入理解 DestinationRule 的核心作用:定义流量在到达目的地之后的行为。 详细剖析其三大核心功能:服务子集 (Subsets), 流量策略 (Traffic Policy), TLS 设置。 动手实战…

一个简洁的 C++ 日志模块实现

一个简洁的 C 日志模块实现 1. 引言 日志功能在软件开发中扮演着至关重要的角色&#xff0c;它帮助开发者追踪程序执行过程、诊断问题以及监控系统运行状态。本文介绍一个使用 C 实现的轻量级日志模块&#xff0c;该模块支持多日志级别、线程安全&#xff0c;并提供了简洁易用…

C语言---数据类型

文章目录数据类型分类1. 基本类型 (Basic Types)a. 整数类型 (Integer Types)char (字符型)int (整型)short (短整型)long (长整型)long long (C99标准引入)图片汇总b. 浮点类型 (Floating-Point Types)float (单精度浮点型)double (双精度浮点型)long double (长双精度浮点型)…

本搭建乌云漏洞库

1.下载镜像站文件&#xff0c;并拖入虚拟机 2.将bugs.rar解压至网站根目录下 /var/www/html 3.配置bugs/conn.php 4.在bugs下创建upload目录&#xff0c;将10-14、15-a、15-b、16压缩包文件解压到该upload目录 5.把wooyun.rar解压到 /mysql/data/wooyun目录下 6.配置hosts文件后…

Vmware虚拟机 处理器配置选项配置介绍

1. 处理器配置选项好&#x1f44c;&#xff0c;我来帮你逐一解读 VMware 里 虚拟机处理器 这些选项的含义。 你截的图里&#xff0c;主要有三块内容&#xff1a; 处理器数量 每个处理器的内核数量 ©虚拟化引擎1️⃣ 处理器数量 这是分配给虚拟机的 逻辑 CPU 插槽数。一般…

day40-tomcat

1.每日复盘与今日内容1.1复盘keepalived高可用配置抢占式与非抢占式脑裂keepalived处理Nginx挂掉1.2今日内容部署、安装、配置tomcat(systemctl)Tomcat主配置文件部署静态页部署zrlog&#x1f35f;&#x1f35f;&#x1f35f;&#x1f35f;&#x1f35f;接入负载均衡挂载到NFS2…

【RA-Eco-RA4E2-64PIN-V1.0 开发板】步进电机的串口控制

【RA-Eco-RA4E2-64PIN-V1.0 开发板】步进电机的串口控制 本文介绍了 RA-Eco-RA4E2-64PIN-V1.0 开发板通过串口指令实现 28BYJ-48 步进电机旋转角度和速度的精确控制的项目设计。 项目介绍 硬件连接&#xff1a;28BYJ-48 步进电机、ULN2003 驱动板、Jlink 调试器、供电电源等&am…

PiscCode基于 Mediapipe 的人体多模态关键点检测与可视化系统 —— HumanMultiLandmarker 深度解析

一、引言 在计算机视觉领域&#xff0c;人体关键点检测&#xff08;Human Pose Estimation&#xff0c;HPE&#xff09;一直是研究和应用的热点方向之一。随着深度学习与实时图像处理技术的发展&#xff0c;人体姿势估计已经从传统的 2D 检测走向了 3D 空间建模&#xff0c;并…

文献阅读笔记【物理信息机器学习】:Physics-informed machine learning

文献阅读笔记&#xff1a;Physics-informed machine learningSummaryResearch ObjectiveBackground / Problem Statement问题背景研究现状需解决的问题问题出现的原因分析问题解决思路Method(s)问题建模作者解决问题的方法/算法1. 观测偏差&#xff08;Observational Biases&am…