前端代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="./vendor/bootstrap-4.3.1-dist/css/bootstrap.css">
<script src="./vendor/jquery/jquery-3.3.1.js"></script>
<script src="./vendor/popper.js/popper.min.js"></script>
<script src="./vendor/bootstrap-4.3.1-dist/js/bootstrap.js"></script>
<script src="./vendor/vue/vue.js"></script>
</head>
<body>
<div class="container" id="workarea">
<h3 class="mt-5 mb-3">图书管理系统 <small>在库图书{{bookList.length}}本</small></h3>
<div class="text-right">
<button class="btn-primary mb-2" v-on:click="showCreateBookDlg">新增图书</button>
</div>
<div class="row">
<div class="col-12">
<table class="table">
<thead>
<tr>
<th scope="col">序号</th>
<th scope="col">ISBN编号</th>
<th scope="col">图书名称</th>
<th scope="col">图书价格</th>
<th scope="col">操作</th>
</tr>
</thead>
<tbody>
<!-- virtual DOM -->
<tr v-for="(book,idx) in bookList">
<td>{{idx+1}}</td>
<td>{{book.isbn}}</td>
<td>{{book.name}}</td>
<td>{{book.price}}</td>
<td>
<button class="btn btn-primary btn-sm" @click="showUpdateModalDlg(idx)">修改</button>
<button class="btn btn-danger btn-sm" @click="showRemoveBookDlg(book.isbn,book.name)">删除</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- addBookModal -->
<div class="modal fade" id="addBookModal" data-backdrop="static" data-keyboard="false" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="staticBackdropLabel">创建新图书</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body" id="promptMsg">
<form action="/books" method="post">
<div class="form-group">
<label>ISBN编号</label>
<input name="isbn" class="form-control" v-model="newBook.isbn">
</div>
<div class="form-group">
<label>图书名称</label>
<input name="name" class="form-control" v-model="newBook.name">
</div>
<div class="form-group">
<label>图书价格</label>
<input name="price" class="form-control" v-model="newBook.price">
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
<button type="button" class="btn btn-primary" @click="createBook">确认保存</button>
</div>
</div>
</div>
</div>
<!-- delBookModal -->
<div class="modal fade" id="delBookModal" data-backdrop="static" data-keyboard="false" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">操作提示</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
{{removeBookMsg}}
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
<button type="button" class="btn btn-primary" @click="removeBook">确认删除</button>
</div>
</div>
</div>
</div>
<!-- modifyBookModal -->
<div class="modal fade" id="modifyBookModal" data-backdrop="static" data-keyboard="false" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">修改图书信息</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<form action="/books" method="post">
<div class="form-group">
<label>ISBN编号</label>
<input name="isbn" class="form-control-plaintext" readonly v-model="updatedBook.isbn">
</div>
<div class="form-group">
<label>图书名称</label>
<input name="name" class="form-control" v-model="updatedBook.name">
</div>
<div class="form-group">
<label>图书价格</label>
<input name="price" class="form-control" v-model="updatedBook.price">
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
<button type="button" class="btn btn-primary" @click="updateBook">确认保存</button>
</div>
</div>
</div>
</div>
</div>
<script>
//一个Vue对象,可以管控一个网页区域,实现数据绑定和各种操作
var vm = new Vue({
el:"#workarea",
created(){
this.loadData()
},
data(){
return {
bookList:[],
newBook:{},
updatedBook:{},
removeBookMsg:"",
removeBookISBN:""
}
},
methods:{
loadData(){
$.get('http://127.0.0.1:8080/books',(result)=>{
vm.$data.bookList=result.data;
});
},
showCreateBookDlg(){
$("#addBookModal").modal("show");
},
showRemoveBookDlg(isbn,name){
this.removeBookMsg=`您确认要删除图书《${name}》?`;
this.removeBookISBN=isbn;
$("#delBookModal").modal("show");
},
showUpdateModalDlg(idx){
this.updatedBook = this.bookList[idx];
$("#modifyBookModal").modal('show');
},
updateBook(){
let that = this;
$.ajax({
url:'http://127.0.0.1:8080/book/'+that.updatedBook.isbn,
type:'PUT',
data:that.updatedBook,
dataType:"json",
success:function(result){
if(result.type=='SUCCESS'){
$("#modifyBookModal").modal("hide");
let idx = that.bookList.findIndex(function(book){
return book.isbn==that.updatedBook.isbn;
});
that.bookList.splice(idx,1,that.updatedBook);
}
}
})
},
createBook(){
$.post('http://127.0.0.1:8080/book',this.newBook, (result)=>{
if(result.type=='SUCCESS'){
this.bookList.push(this.newBook);
this.newBook={};
$("#addBookModal").modal("hide");
}
})
},
removeBook(){
$.ajax({
url:'http://127.0.0.1:8080/book/'+this.removeBookISBN,
type:'DELETE',
success:function(result){
if(result.type=='SUCCESS'){
$("#delBookModal").modal("hide");
let bookList = vm.$data.bookList;
let idx = bookList.findIndex(function(book){
return book.isbn==vm.$data.removeBookISBN;
});
vm.$data.bookList.splice(idx,1);
}
}
});
}
}
});
</script>
</body>
</html>
后端代码
后端代码https://blog.csdn.net/qq_66228897/article/details/132224790?spm=1001.2014.3001.5501