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

13图书归还-云图书管理系统(Vue3+Spring Boot+element plus)

目录

  • 1 接口地址
  • 2 后台代码
      • RecordController
      • BookController
  • 3 view/books/BookRecordsVue中前端框架搭建
  • 4 api/record.js文件写查询用户借阅记录的接口代码
  • 5 api/book.js中写归还图书、查询当前借阅图书接口代码
  • 6 BookRecordsVue中导入接口函数,并调用
  • 7 运行效果

1 接口地址

### 用户借阅历史
GET http://localhost:8082/record/pastBorrowedRecords### 用户当前所借图书
GET http://localhost:8082/book/currentBorrowedBooks### 图书归还
GET http://localhost:8082/book/returnBook

2 后台代码

RecordController

    //历史借阅记录@GetMapping("/pastBorrowedRecords")public Result pastBorrowedRecords(){User user = ThreadLocalUtil.get();LambdaQueryWrapper<Record> recordWrapper = new LambdaQueryWrapper<>();recordWrapper.eq(Record::getRecordBorrower,user.getUserName());List<Record> recordList = iRecordService.list(recordWrapper);System.out.println("曾经的借阅记录");return Result.success(recordList);}

BookController

//   获取用户当前借书数据@GetMapping("/currentBorrowedBooks")public Result currentBorrowedBooks(){User user = ThreadLocalUtil.get();
//      查询book表中借书人为本人的信息LambdaQueryWrapper<Book> bookWrapper = new LambdaQueryWrapper<>();bookWrapper.eq(Book::getBookBorrower,user.getUserName());List<Book> bookList = iBookService.list(bookWrapper);System.out.println("当前所借图书");return Result.success(bookList);}
}
    //用户归还图书功能@GetMapping("/returnBook")public Result returnBook(@RequestParam("bookId") Integer bookId){
//        获取用户信息User loginUser = ThreadLocalUtil.get();//通过book_id查找需要归还的图书Book bookMsg = iBookService.getById(bookId);String TheBorrowtime = bookMsg.getBookBorrowtime();//      获取当前时间DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");String TheRemandtime = LocalDate.now().format(formatter);UpdateWrapper<Book> updateWrapper = new UpdateWrapper<>();updateWrapper.eq("book_borrower",loginUser.getUserName()).eq("book_status","1").eq("book_id",bookId).set("book_status","0").set("book_borrower",null).set("book_borrowtime",null).set("book_returntime",null);boolean result = iBookService.update(updateWrapper); // 调用 update 方法//      图书状态修改之后 还需要新增一条借阅记录Record record = new Record();record.setRecordBookname(bookMsg.getBookName());record.setRecordBorrower(loginUser.getUserName());record.setRecordBookisbn(bookMsg.getBookIsbn());record.setRecordBorrowtime(TheBorrowtime);record.setRecordRemandtime(TheRemandtime);boolean result1 = iRecordService.save(record); // 调用 save 方法if (result1) {System.out.println("Record updated successfully.");return Result.success("归还图书成功");} else {return Result.error("归还失败,可能没有借阅信息或者是其他问题!");}}

3 view/books/BookRecordsVue中前端框架搭建

<script setup>
import { ref, computed } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'// 默认显示第一个tab
const activeTab = ref('current')
// 图书表单数据模型
const bookModel = ref({bookId: 0,bookName: '',bookIsbn: '',bookPress: '',bookAuthor: '',bookPagination: '',bookPrice: '',bookUploadtime: '',bookStatus: '',bookBorrower: '',bookBorrowtime: '',bookReturntime: ''
})// 借阅记录的数据模型
const recordModel = ref({recordId: 0,recordBookname: '',recordBookisbn: '',recordBorrower: '',recordBorrowtime: '',recordRemandtime: ''
})// 当前借阅的图书列表
const currentBorrowedBooks = ref([// 其他当前借阅的图书项...
])// 曾经的借阅记录列表
const pastBorrowedRecords = ref([// 其他借阅记录项...
])// 获取用户当前借阅的图书
const getUsersCurrentBorrowedBooks = async () => {}// 获取用户曾经的借阅记录
const getUsersPastBorrowedRecords = async () => {}// 初始化时获取用户当前借阅的图书和曾经的借阅记录
getUsersCurrentBorrowedBooks()
getUsersPastBorrowedRecords()// 归还图书
const returnBookToBackend = (book) => {}
</script><template><el-card class="page-container"><el-tabs v-model="activeTab" @tab-click="handleTabClick"><el-tab-pane label="当前借阅" name="current"><el-table :data="currentBorrowedBooks" style="width: 100%"><el-table-column prop="bookName" label="书名"></el-table-column><el-table-column prop="bookAuthor" label="作者"></el-table-column><el-table-column prop="bookPress" label="出版社"></el-table-column><el-table-column prop="bookBorrowtime" label="借阅时间"></el-table-column><el-table-column label="操作" width="180"><template #default="{ row }"><el-button type="danger" @click="returnBook(row)">归还</el-button></template></el-table-column></el-table></el-tab-pane><el-tab-pane label="借阅记录" name="past"><el-table :data="pastBorrowedRecords" style="width: 100%":default-sort="{ prop: 'recordRemandtime', order: 'ascending' }"><el-table-column prop="recordBookname" label="书名"></el-table-column><el-table-column prop="recordBookisbn" label="ISBN"></el-table-column><el-table-column prop="recordBorrower" label="借阅人"></el-table-column><el-table-column prop="recordBorrowtime" label="借阅时间" sortable></el-table-column><el-table-column prop="recordRemandtime" label="归还时间" sortable></el-table-column></el-table></el-tab-pane></el-tabs></el-card>
</template><style scoped>
.page-container {padding: 20px;
}
</style>

效果如下
在这里插入图片描述

4 api/record.js文件写查询用户借阅记录的接口代码

// 导入request
import request from '@/utils/request'// 查询用户借阅记录
export const pastBorrowedRecordsService = () => {return request.get('/record/pastBorrowedRecords')
}

5 api/book.js中写归还图书、查询当前借阅图书接口代码

// 用户当前借阅的图书
export const userBorrowListService = () => {return request.get('/book/currentBorrowedBooks')
}// 归还图书 发送get请求
export const bookReturnService = (bookId) => {return request.get('/book/returnBook', { params: { bookId: bookId } })
}

6 BookRecordsVue中导入接口函数,并调用

//导入用户当前借阅 userBorrowListService
import { userBorrowListService } from '@/api/book'
// 获取用户当前借阅的图书
const getUsersCurrentBorrowedBooks = async () => {// 这里可以调用后端API获取用户当前借阅的图书// 假设这里有一个返回当前借阅图书的模拟函数const result = await userBorrowListService()currentBorrowedBooks.value = result.data
}//导入用户借阅历史接口 pastBorrowedRecordsService
import { pastBorrowedRecordsService } from '@/api/record'
// 获取用户曾经的借阅记录
const getUsersPastBorrowedRecords = async () => {// 这里可以调用后端API获取用户曾经的借阅记录// 假设这里有一个返回借阅记录的模拟函数const result = await pastBorrowedRecordsService()pastBorrowedRecords.value = result.data
}// 初始化时获取用户当前借阅的图书和曾经的借阅记录
getUsersCurrentBorrowedBooks()
getUsersPastBorrowedRecords()// 导入 bookReturnService
import { bookReturnService } from '@/api/book'
// 归还图书
const returnBook = (book) => {// 提醒是否要归还这本书return ElMessageBox.confirm('确定要归还《' + book.bookName + '》吗?', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(() => {// 用户点击了确定// 这里可以调用后端API归还图书return bookReturnService(book.bookId).then(result => {ElMessage.success(result.data ? result.data : '图书已归还')getUsersCurrentBorrowedBooks();getUsersPastBorrowedRecords();})})
}

7 运行效果

在这里插入图片描述

相关文章:

13图书归还-云图书管理系统(Vue3+Spring Boot+element plus)

目录 1 接口地址2 后台代码RecordControllerBookController 3 view/books/BookRecordsVue中前端框架搭建4 api/record.js文件写查询用户借阅记录的接口代码5 api/book.js中写归还图书、查询当前借阅图书接口代码6 BookRecordsVue中导入接口函数&#xff0c;并调用7 运行效果 1 …...

中航资本:“女人的茅台”重挫!超7700亿元英伟达概念业绩爆发

今天早盘首要指数强势震动&#xff0c;申万一级工作指数跌多涨少&#xff0c;通讯指数涨逾1%居首。概念方面&#xff0c;存储器、动保、重组等概念板块涨幅居前。存储概念大涨首要仍是AI方向又有好消息&#xff0c;市值逾越7700亿元的英伟达概念龙头SK海力士发布效果超预期财报…...

day7:软件包管理

一&#xff0c;软件包概述 软件包概述 软件包用于安装&#xff0c;升级&#xff0c;卸载一个软件 软件包类型 二进制包 源码经过了编译&#xff08;而且成功了&#xff09;后产生的包&#xff0c;二进制包是linux下默认的安装包 编译好的文件&#xff0c;直接使用&#xff…...

探索Konko AI:快速集成大语言模型的最佳实践

探索Konko AI&#xff1a;快速集成大语言模型的最佳实践 引言 随着大语言模型&#xff08;LLM&#xff09;的普及&#xff0c;如何快速方便地集成这些模型成为众多开发者关注的焦点。Konko AI 提供了一个全面管理的 API&#xff0c;使开发者能够选择合适的开源或专有大语言模…...

网络地址和本地网络地址

本地网络地址&#xff08;Local Network Address&#xff0c;简称 LNA&#xff09;是指在一个子网内用于标识特定主机的部分。在 IPv4 地址中&#xff0c;一个完整的 IP 地址由两部分组成&#xff1a;网络地址部分&#xff08;Network Address&#xff09;和本地网络地址部分&a…...

【closerAI ComfyUI】AI绘画界新技术RF Inversion图像编辑和风格迁移!能跟ipadapter争高低吗?

AI绘画界新技术RF Inversion图像编辑和风格迁移&#xff01;能跟ipadapter争高低吗&#xff1f; 在人工智能绘画领域&#xff0c;技术的创新永不止步。closerAI ComfyUI最近推出了一项名为RF Inversion的新技术&#xff0c;它能够进行图像编辑和风格迁移&#xff0c;为艺术家和…...

【Spring篇】Spring的Aop详解

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【计算机网络】【Mybatis篇】【Spring篇】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 目录 &#x1f3af;初始Sprig AOP及…...

Spring与其他框架的比较

Spring 框架因其丰富的功能和灵活性&#xff0c;在 Java 领域内得到了广泛应用。然而&#xff0c;在不同的应用场景下&#xff0c;开发者可能会选择其他框架。下面将 Spring 框架与其他一些常见的 Java 框架进行比较&#xff0c;以便更好地理解它们各自的优缺点和适用场景。 1…...

论当前的云计算

随着技术的不断进步和数字化转型的加速&#xff0c;云计算已经成为当今信息技术领域的重要支柱。本文将探讨当前云计算的发展现状、市场趋势、技术革新以及面临的挑战与机遇。 云计算的发展现状 云计算&#xff0c;作为一种通过网络提供可伸缩的、按需分配的计算资源服务模式&a…...

Spring Boot 整合 RocketMQ 之消息消费手动提交 ACK 实战【案例分享】

前言&#xff1a; 上一篇我们分享了 RocketMQ 消息重试的一些基本原理&#xff0c;本篇我们基于 Spring Boot 整合 RocketMQ 来分享一下 RocketMQ 消息基于手动提交的案例&#xff0c;在分享手动进行消息 ACK 中也会分享消息重试的使用。 RocketMQ 系列文章传送门 RocketMQ …...

胃癌数据集(不定期更新)

恶性肿瘤其实就是癌症的一种&#xff0c;它是由一些不正常的细胞组成的&#xff0c;这些细胞会不停地生长和繁殖&#xff0c;而且它们还会侵犯周围的正常组织&#xff0c;甚至通过血液和淋巴系统跑到身体其他部位去。 恶性肿瘤有以下几个特点&#xff1a; 1、无限制生长&…...

zh/FAQ/CentOSStream-CentOS Stream 常见问题

CentOS Stream 是什么&#xff1f; CentOS Stream 是一个为开发者而设的发行版本&#xff0c;目的是要协助社群中的成员、Red Hat 伙伴及其它人在一个较稳定及可预测的 Linux 生态环境下充分利用创新的开源程序。 它的内容正是 Red Hat 有意收录于下个稳定版 RHEL 的软件。任何…...

多台西门子PLC与多台三菱PLC之间实时通讯的方案(PLC内不用编程)

PLC通讯智能网关IGT-DSER模块支持西门子、三菱、欧姆龙、罗克韦尔AB、GE等各种品牌的PLC之间通讯&#xff0c;同时也支持PLC与Modbus协议的变频器、智能仪表等设备通讯。网关有多个网口、串口&#xff0c;也可选择WIFI无线通讯。PLC内无需编程开发&#xff0c;在智能网关上配置…...

C++ [项目] 恶魔轮盘赌

现在才发现C游戏的支持率这么高&#xff0c;那就发几篇吧 零、前情提要 此篇是我与 同学的共创,他负责写人,我负责写机,简称人机, 不过有一点小插曲…… 一、基本介绍 支持Dev-C5.11版本(务必调为英文输入法),基本操作看游戏里的介绍,怎么做的……懒得说,能看懂就看注释,没有…...

微信小程序版本更新管理——实现自动更新

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

Python使用Selenium库实现CSDN自动化发帖

虽然CSDN上有很多优秀的作品&#xff0c;但也不乏很多很水的文章&#xff0c;我也不知道这种有什么意义。不过发这么水的文章多没意思&#xff0c;让浏览器自动化发帖就行了。以下程序能够实现CSDN自动化发帖&#xff0c;同时附自动给关注的人的文章点赞的程序。因为也有很多作…...

StringBulider和StringBuffer的底层源码剖析

要深入了解 StringBuffer 和 StringBuilder 的区别&#xff0c;从底层源码的角度来解析&#xff0c;包括它们的创建、扩容机制等&#xff0c;可以参考 JDK 1.8 的源码。 1. AbstractStringBuilder 类 StringBuffer 和 StringBuilder 都继承自 AbstractStringBuilder。…...

手机空号过滤接口-在线手机空号检测-手机空号过滤API

接口简介&#xff1a;在线检测手机号状态&#xff0c;与运营商平台联动大数据分析判断手机号状态。可划分出实号、空号、停机、流量卡、沉默号。 更新周期&#xff1a;两周 不支持号段&#xff1a;14、16、17、19号段 存在5%的误差&#xff0c;如需实时接口&#xff0c;可购买手…...

ubuntu 用ss-TPROXY实现透明代理,基于TPROXY的透明TCP/UDP代理,在 Linux 2.6.28 后进入官方内核。

TPROXY 是一个 Linux 内核模块&#xff0c;在 Linux 2.6.28 后进入官方内核。 1 安装 tproxy 相关依赖 参考ss-tproxy 的安装依赖。 bash ss-tproxy 使用了 bash 的一些语法特性&#xff0c;比如 shell 数组&#xff0c;因此必须用 bash 解释器执行。大多数发行版已经自带了…...

报错解决:opene3d draw_geometries(): incompatible function arguments.

1. 报错信息 o3d.visualization.draw_geometries(target_pcd) TypeError: draw_geometries(): incompatible function arguments. The following argument types are supported:1. (geometry_list: List[open3d.cpu.pybind.geometry.Geometry], window_name: str Open3D, wid…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...