当前位置: 首页 > news >正文

基于 Vue 3 和 Element Plus 构建图书管理系统

基于 Vue 3 和 Element Plus 构建图书管理系统

本文将介绍如何使用 Vue 3 和 Element Plus 构建一个简单的图书管理系统。这个系统将包括以下功能:

  • 添加新书
  • 显示图书列表
  • 分页显示图书
  • 删除图书

相关链接

接口地址
elementplus中文地址

项目结构

我们的项目结构如下:

src/
├── components/
│   └── BookManager.vue
├── App.vue
└── main.js

BookManager.vue 是我们主要的组件文件,它包含了图书管理的所有逻辑。App.vuemain.js 是 Vue 3 项目的基础文件。

引入必要的库

main.js 文件中,我们引入 Vue 3 和 Element Plus,并进行初始化:

import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import App from './App.vue'const app = createApp(App)
app.use(ElementPlus)
app.mount('#app')

图书管理组件

components/BookManager.vue 文件中,我们将实现图书管理功能。

模板部分
<template><div class="button-container"><el-button type="primary" @click="dialogFormVisible = true">新增图书</el-button></div><el-dialog v-model="dialogFormVisible" title="新增图书" width="300px"><el-form :model="form" label-position="right" label-width="100px"><el-form-item label="书名"><el-input v-model="form.bookname" /></el-form-item><el-form-item label="作者"><el-input v-model="form.author" /></el-form-item><el-form-item label="出版社"><el-input v-model="form.publisher" /></el-form-item></el-form><template #footer><div class="dialog-footer"><el-button @click="dialogFormVisible = false">取消</el-button><el-button type="primary" @click="addBook">提交</el-button></div></template></el-dialog><el-table :data="paginatedBooks" style="width: 100%"><el-table-column prop="id" label="ID" width="80" /><el-table-column prop="bookname" label="书名" width="120" /><el-table-column prop="author" label="作者" width="120" /><el-table-column prop="publisher" label="出版社" width="120" /><el-table-column prop="createdAt" label="创建时间" width="220" /><el-table-column prop="updatedAt" label="更新时间" width="220" /><el-table-column label="选项操作" min-width="100"><template #default="scope"><el-buttonlinktype="danger"size="small"@click.prevent="deleteRow(scope.row.id)">删除</el-button></template></el-table-column></el-table><div class="pagination-container"><el-pagination@current-change="handleCurrentChange":current-page="currentPage":page-size="pageSize":total="books.length"layout="prev, pager, next"style="margin-top: 20px;"/></div>
</template>

在模板部分,我们使用 Element Plus 的组件来创建一个对话框,用于添加新书,并显示图书列表和分页功能。

脚本部分
<script setup>
import { ref, onMounted, computed } from 'vue';
import { ElMessage } from 'element-plus';
import axios from 'axios';const dialogFormVisible = ref(false);
const books = ref([]);
const form = ref({bookname: '',author: '',publisher: ''
});
const currentPage = ref(1);
const pageSize = ref(10);const getBooksAll = async () => {const config = {method: 'get',url: 'http://ajax-api.itheima.net/api/books',};try {const response = await axios(config);if (Array.isArray(response.data.data)) {books.value = response.data.data.sort((a, b) => a.id - b.id);} else {throw new Error("数据格式错误");}} catch (error) {console.log(error);ElMessage({showClose: true,message: error.message || error,type: 'error',});}
};const paginatedBooks = computed(() => {const start = (currentPage.value - 1) * pageSize.value;return books.value.slice(start, start + pageSize.value);
});const handleCurrentChange = (newPage) => {currentPage.value = newPage;
};const addBook = async () => {const config = {method: 'post',url: "http://ajax-api.itheima.net/api/books",headers: {'Content-Type': 'application/json'},data: JSON.stringify(form.value)};try {await axios(config);ElMessage({showClose: true,message: '添加图书成功',type: "success",});await getBooksAll();form.value = { bookname: '', author: '', publisher: '' };dialogFormVisible.value = false;} catch (error) {console.log(error);}
};const deleteRow = async (id) => {const config = {method: 'delete',url: `http://ajax-api.itheima.net/api/books/${id}`,headers: {'User-Agent': 'Apifox/1.0.0 (https://apifox.com)'}};try {await axios(config);await getBooksAll();ElMessage({showClose: true,message: '删除成功',type: 'success',});} catch (error) {console.log(error);}
};onMounted(async () => {await getBooksAll();
});
</script>
样式部分
<style scoped>
.button-container {margin: 20px 0;padding-left: 10px;
}
.pagination-container {display: flex;justify-content: center;margin-top: 5px;
}
</style>

关键实现细节

  1. 获取图书列表
    使用 axios 发送 GET 请求,从服务器获取图书列表,并将其存储在 books 变量中。使用 onMounted 钩子在组件挂载时调用 getBooksAll 方法。

  2. 分页显示图书
    使用 computed 计算属性 paginatedBooks 来实现分页功能,根据当前页码和每页显示的数量来切割图书列表。

  3. 添加新书
    使用 axios 发送 POST 请求,将新书信息发送到服务器。成功添加后,刷新图书列表,并重置表单和对话框状态。

  4. 删除图书
    使用 axios 发送 DELETE 请求,根据图书 ID 删除图书。成功删除后,刷新图书列表。

  5. 消息提示
    使用 Element Plus 的 ElMessage 组件在操作成功或失败时显示消息提示。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 计算机毕业设计Python深度学习游戏推荐系统 Django PySpark游戏可视化 游戏数据分析 游戏爬虫 Scrapy 机器学习 人工智能 大数据毕设
  • Airdrop 2049 第二季如何捕捉全新机遇?专家大咖带你揭秘!
  • B树:深入解析与实战应用
  • 华为的热机备份和流量限制
  • 纯净IP的判断标准及代理深度分析
  • Unity3d开发google chrome的dinosaur游戏
  • 数据可视化入门
  • 【CPO-TCN-BiGRU-Attention回归预测】基于冠豪猪算法CPO优化时间卷积双向门控循环单元融合注意力机制
  • https 单向认证和双向认证
  • Postfix+Dovecot+Roundcube开源邮件系统搭建系列1-2:系统搭建目标+MariaDB数据库配置(MySQL)
  • 网络规划设计师教程(第二版) pdf
  • 数据库系统概论:数据库完整性
  • Pytorch:显卡驱动版本、Pytorch版本的关系
  • vue中:class、watch、v-show使用
  • GEO数据挖掘从数据下载处理质控到差异分析全流程分析步骤指南
  • 【面试系列】之二:关于js原型
  • 2017 年终总结 —— 在路上
  • Angular 响应式表单 基础例子
  • Java教程_软件开发基础
  • Linux gpio口使用方法
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Python爬虫--- 1.3 BS4库的解析器
  • React系列之 Redux 架构模式
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • SpiderData 2019年2月23日 DApp数据排行榜
  • swift基础之_对象 实例方法 对象方法。
  • ucore操作系统实验笔记 - 重新理解中断
  • vue.js框架原理浅析
  • vue的全局变量和全局拦截请求器
  • 利用jquery编写加法运算验证码
  • 聊聊redis的数据结构的应用
  • 如何正确配置 Ubuntu 14.04 服务器?
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ![CDATA[ ]] 是什么东东
  • # 飞书APP集成平台-数字化落地
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • $.ajax,axios,fetch三种ajax请求的区别
  • (12)Hive调优——count distinct去重优化
  • (2)STL算法之元素计数
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (一)springboot2.7.6集成activit5.23.0之集成引擎
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)Mysql的优化设置
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)负载均衡,回话保持,cookie
  • (转)项目管理杂谈-我所期望的新人
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET 快速重构概要1
  • .NET框架设计—常被忽视的C#设计技巧
  • .NET之C#编程:懒汉模式的终结,单例模式的正确打开方式
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • [ vulhub漏洞复现篇 ] ECShop 2.x / 3.x SQL注入/远程执行代码漏洞 xianzhi-2017-02-82239600