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中导入接口函数,并调用7 运行效果 1 …...
中航资本:“女人的茅台”重挫!超7700亿元英伟达概念业绩爆发
今天早盘首要指数强势震动,申万一级工作指数跌多涨少,通讯指数涨逾1%居首。概念方面,存储器、动保、重组等概念板块涨幅居前。存储概念大涨首要仍是AI方向又有好消息,市值逾越7700亿元的英伟达概念龙头SK海力士发布效果超预期财报…...
day7:软件包管理
一,软件包概述 软件包概述 软件包用于安装,升级,卸载一个软件 软件包类型 二进制包 源码经过了编译(而且成功了)后产生的包,二进制包是linux下默认的安装包 编译好的文件,直接使用ÿ…...
探索Konko AI:快速集成大语言模型的最佳实践
探索Konko AI:快速集成大语言模型的最佳实践 引言 随着大语言模型(LLM)的普及,如何快速方便地集成这些模型成为众多开发者关注的焦点。Konko AI 提供了一个全面管理的 API,使开发者能够选择合适的开源或专有大语言模…...
网络地址和本地网络地址
本地网络地址(Local Network Address,简称 LNA)是指在一个子网内用于标识特定主机的部分。在 IPv4 地址中,一个完整的 IP 地址由两部分组成:网络地址部分(Network Address)和本地网络地址部分&a…...
【closerAI ComfyUI】AI绘画界新技术RF Inversion图像编辑和风格迁移!能跟ipadapter争高低吗?
AI绘画界新技术RF Inversion图像编辑和风格迁移!能跟ipadapter争高低吗? 在人工智能绘画领域,技术的创新永不止步。closerAI ComfyUI最近推出了一项名为RF Inversion的新技术,它能够进行图像编辑和风格迁移,为艺术家和…...
【Spring篇】Spring的Aop详解
🧸安清h:个人主页 🎥个人专栏:【计算机网络】【Mybatis篇】【Spring篇】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 目录 🎯初始Sprig AOP及…...
Spring与其他框架的比较
Spring 框架因其丰富的功能和灵活性,在 Java 领域内得到了广泛应用。然而,在不同的应用场景下,开发者可能会选择其他框架。下面将 Spring 框架与其他一些常见的 Java 框架进行比较,以便更好地理解它们各自的优缺点和适用场景。 1…...
论当前的云计算
随着技术的不断进步和数字化转型的加速,云计算已经成为当今信息技术领域的重要支柱。本文将探讨当前云计算的发展现状、市场趋势、技术革新以及面临的挑战与机遇。 云计算的发展现状 云计算,作为一种通过网络提供可伸缩的、按需分配的计算资源服务模式&a…...
Spring Boot 整合 RocketMQ 之消息消费手动提交 ACK 实战【案例分享】
前言: 上一篇我们分享了 RocketMQ 消息重试的一些基本原理,本篇我们基于 Spring Boot 整合 RocketMQ 来分享一下 RocketMQ 消息基于手动提交的案例,在分享手动进行消息 ACK 中也会分享消息重试的使用。 RocketMQ 系列文章传送门 RocketMQ …...
胃癌数据集(不定期更新)
恶性肿瘤其实就是癌症的一种,它是由一些不正常的细胞组成的,这些细胞会不停地生长和繁殖,而且它们还会侵犯周围的正常组织,甚至通过血液和淋巴系统跑到身体其他部位去。 恶性肿瘤有以下几个特点: 1、无限制生长&…...
zh/FAQ/CentOSStream-CentOS Stream 常见问题
CentOS Stream 是什么? CentOS Stream 是一个为开发者而设的发行版本,目的是要协助社群中的成员、Red Hat 伙伴及其它人在一个较稳定及可预测的 Linux 生态环境下充分利用创新的开源程序。 它的内容正是 Red Hat 有意收录于下个稳定版 RHEL 的软件。任何…...
多台西门子PLC与多台三菱PLC之间实时通讯的方案(PLC内不用编程)
PLC通讯智能网关IGT-DSER模块支持西门子、三菱、欧姆龙、罗克韦尔AB、GE等各种品牌的PLC之间通讯,同时也支持PLC与Modbus协议的变频器、智能仪表等设备通讯。网关有多个网口、串口,也可选择WIFI无线通讯。PLC内无需编程开发,在智能网关上配置…...
C++ [项目] 恶魔轮盘赌
现在才发现C游戏的支持率这么高,那就发几篇吧 零、前情提要 此篇是我与 同学的共创,他负责写人,我负责写机,简称人机, 不过有一点小插曲…… 一、基本介绍 支持Dev-C5.11版本(务必调为英文输入法),基本操作看游戏里的介绍,怎么做的……懒得说,能看懂就看注释,没有…...
微信小程序版本更新管理——实现自动更新
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
Python使用Selenium库实现CSDN自动化发帖
虽然CSDN上有很多优秀的作品,但也不乏很多很水的文章,我也不知道这种有什么意义。不过发这么水的文章多没意思,让浏览器自动化发帖就行了。以下程序能够实现CSDN自动化发帖,同时附自动给关注的人的文章点赞的程序。因为也有很多作…...
StringBulider和StringBuffer的底层源码剖析
要深入了解 StringBuffer 和 StringBuilder 的区别,从底层源码的角度来解析,包括它们的创建、扩容机制等,可以参考 JDK 1.8 的源码。 1. AbstractStringBuilder 类 StringBuffer 和 StringBuilder 都继承自 AbstractStringBuilder。…...
手机空号过滤接口-在线手机空号检测-手机空号过滤API
接口简介:在线检测手机号状态,与运营商平台联动大数据分析判断手机号状态。可划分出实号、空号、停机、流量卡、沉默号。 更新周期:两周 不支持号段:14、16、17、19号段 存在5%的误差,如需实时接口,可购买手…...
ubuntu 用ss-TPROXY实现透明代理,基于TPROXY的透明TCP/UDP代理,在 Linux 2.6.28 后进入官方内核。
TPROXY 是一个 Linux 内核模块,在 Linux 2.6.28 后进入官方内核。 1 安装 tproxy 相关依赖 参考ss-tproxy 的安装依赖。 bash ss-tproxy 使用了 bash 的一些语法特性,比如 shell 数组,因此必须用 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…...
Clickhouse笔记(二) 集群搭建
0.集群规划 操作系统使用ubuntu2204server,8C8G100G。 节点分片部署192.168.50.5分片1副本1clickhouse-server/clickhouse-client/keeper192.168.50.6分片1副本2clickhouse-server/clickhouse-client/keeper192.168.60.7分片2副本1clickhouse-server/clickhouse-c…...
华为云购买弹性云服务器(教程)
配置弹性云服务器 基础配置 实例 操作系统...
Python异常检测- 单类支持向量机(One-Class SVM)
系列文章目录 Python异常检测- Isolation Forest(孤立森林) python异常检测 - 随机离群选择Stochastic Outlier Selection (SOS) python异常检测-局部异常因子(LOF)算法 Python异常检测- DBSCAN 文章目录 系列文章目录前言一、On…...
基于SpringBoot+Vue+uniapp微信小程序的婚庆摄影小程序的详细设计和实现(源码+lw+部署文档+讲解等)
项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…...
NGAC访问控制系列三:低代码产品NGAC运用与算法运用
目录 一、基于NGAC的低代码模型权限管理方案 二、多策略访问控制系统限制内部访问的线性时间算法 1、概述 2、权限控制图遍历算法 一、基于NGAC的低代码模型权限管理方案 NGAC在低代码平台的权限决策模型:功能权限数据权限 案例:对于七巧低代码开发平台&…...
Unity3D 面试题收录
Unity3D 客户端面试题收录(持续更新~) 面试题收录 本文收录一些对于 Unity3D 客户端可能遇到的面试题(持续更新~),答案仅出于个人理解,如有偏差,希望指正。 Unity3D MonoBehaviour 生命周期…...
Jrebel热部署不生效解决
打开setting找到build底下的complier勾选 build project automatically 设置自动构建项目 打开setting找到Advanced Setting勾选Complier中的第一项 Jrebel panel中勾选需要热部署的项目模块 项目配置信息:Edit Configuration中进行编辑,配置如下图…...
软件测试学习笔记丨Selenium键盘鼠标事件ActionChains
本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/22515 本文为霍格沃兹测试开发学社的学习经历分享,写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~ 说明:本篇博客基于sel…...
CI/CD(持续集成与持续交付)流水线
集成 Jenkins、GitLab Webhook、Nexus 和 RabbitMQ 可以形成一个全面的 CI/CD(持续集成与持续交付)流水线,结合消息队列可以创建事件驱动的工作流。以下是配置这四个工具以实现一个基本的 CI/CD 流程的详细步骤。 前置条件 Jenkins、GitLab、…...
分布式光伏发电有什么优劣势
分布式光伏发电是指在离电力消费地点较近的地方,通过安装光伏发电系统来发电。这种系统通常用于屋顶、地面或其他建筑物上,相比于集中式光伏发电系统,它有一些独特的优势和劣势: 优势: 地理适应性: 分布式…...
微网站价格/网络营销方式与工具有哪些
一张圆桌上坐着5名哲学家,每两个哲学家之间的桌上摆一根筷子,桌子的中间是一碗米饭。哲学家们倾注毕生精力用于思考和进餐,哲学家在思考时,并不影响他人。只有当哲学家饥饿的时候,才试图拿起左、 右两根筷子࿰…...
重庆政府服务网/seo顾问培训
今天是 201220122012 年 444 月 121212 日星期四,编写程序,输入今天开始到 121212 月 313131 日之间的任意日期,输出那一天是星期几。 输入格式 共两行,第一行包含一个整数 mmm,表示询问日期的月份。 第二行包含一个…...
网站建设与管理说课稿/cps广告联盟平台
小程序的一种封装方法 创建一个js 文件 添加以下代码 在需要请求的的文件中引入 在请求数据时使用...
新疆教育集团网站建设/大二网络营销实训报告
很多商家朋友说自己做店铺没有什么头绪,不知道该怎么做也不知道自己哪里不足。这种情况其实对于做店铺来说是很可怕的一件事。做店铺,一定要理清目的,知道我们每个阶段所要去实现的效果,并且要针对运营过程中的核心痛点来操作&…...
web网站开发方法/网站建设及网络推广
简介项目使用MSSql作为数据库,但是因为SQL服务器贵那么一点,并发连接差那么一点,要把数据迁移到MySQL,顺带迁移过程以及问题。环境 Visual Studio 2013 MySQL 5.7 Entity Framework 6.1.3正文迁移过程1. 安装MySQL,顺带…...
深圳网站制作费用多少/网站seo优化公司
1、torch.sigmoid 2、lstm的hidden_size先改成很小的,后来又增上去; 3、最最根本的原因是:cpu和cuda之间的数据传输太多,导致很慢很慢!!! truelabel.cuda() predtorch.sigmoid(pred).cuda() lo…...