sq1995liu

在http/apis.js/添加后端请求路由

/* eslint-disable */
import { head } from \'shelljs\'
import{get,post,put,del} from \'./index\'


//用户登录
export const login = (params, headers) => post("/login/", params, headers)

//书籍管理接口
export const getBookList=(params,headers)=>get("/book/",params,headers)
export const addBook=(params,headers)=>post("/book/",params,headers)
export const editBook=(params,headers)=>put(\'/book/\',params,headers)
export const delBook = (params, headers) => del("/book/", params, headers)

router/index.js 添加路由

import Books from \'@/views/books/Books\'
 //图书增删改查案例
    {
      path: \'/books\',
      name: \'Books\',
      component: Books
    },

src\views\books\Books.vue 这里是父组件

<template>
	<div>
		<h1>图书管理系统</h1>
		<div style="margin: 30px;">
			<button @click="addNew">新增图书</button>
			<BookEdit
				v-show=\'dialogVisible\'
				:visible.sync=\'dialogVisible\'
				:data=\'editData\'
				@save=\'save\'
			></BookEdit>
		</div>
		<div>
			<table style=\'margin: auto; border: solid 1px black;\'>
				<tr>
					<th>图书编号</th>
					<th>图书名字</th>
					<th>出版时间</th>
					<th>阅读数</th>
					<th>评论数</th>
					<th>操作</th>
					</tr>
				<tr v-for="(book, index) in books" :key="book.id">


					<td>{{book.id}}</td>
					<td>{{book.btitle}}</td>
					<td>{{book.bpub_date}}</td>
					<td>{{book.bread}}</td>
					<td>{{book.bcomment}}</td>
					<td>
						<button @click="edit(index)">修改</button>
						<button @click="del(index)">删除</button>
					</td>
				</tr>
			</table>
		</div>
	</div>
</template>
<script>
import { getBookList, addBook, editBook, delBook } from \'@/http/apis\'
import BookEdit from \'@/views/books/BookEdit\'
export default {
	components: {
		BookEdit
	},
	data() {
		return {
			dialogVisible: false,
			books: [
				{ id: 3, btitle: "...", bpub_date: "2020-08-11", bread: 100, bcomment: 50
		}
			],
			editData: { // 编辑的内容
				btitle: "",
				bpub_date: "",
				bread: 0,
				bcomment: 0
			}
		}
	},
	methods: {
		// 1.点击新增图书时初始化数据
		addNew() {
			this.editData = { // 初始化 编辑内容
				btitle: "",
				bpub_date: "",
				bread: 100,
				bcomment: 0
			}
			this.dialogVisible = true // 显示弹框
		},
		// 2.获取图书列表
		get() {
			getBookList().then((data) => {
				// console.log(data)
				// books: [{btitle: "西游记", bpub_date: "2020-08-11", bread: 100,bcomment: 50}]
				this.books = data.books
			})
		},
		// 3.修改或者添加图书
		save() {
			// 根据editData中的id判断是更新还是新增
			
			console.log(this.editData)
			if (this.editData.id) {
				// 如果有id, 修改图书
				// 修改请求
				let params = this.editData
				editBook(params).then((res)=>{
					console.log(res)
					this.get()
				})
			} else {
				// 增加图书
				addBook(this.editData).then((res) => {
					this.get()
				})
			}
		},
		// 点击修改弹出修改页面
		edit(index) {
			this.editData = JSON.parse(JSON.stringify(this.books[index])) // 复制this.books[index] 的数据
			// this.editData = this.books[index] //
			this.dialogVisible = true
		},
		// 删除
		del(index) {
			let params = {
				id: this.books[index].id
			}
			delBook(params).then((res)=>{
				console.log(res)
				this.get()
			})
		}
	},
	created() {
		this.get()
	}
}
</script>
<style>
table tr td {
	width: 150px;
	border: solid 1px black;
}
</style>

src\views\books\BookEdit.vue 子组件

<template>
	<div>
		<el-dialog
			title="新增图书"
			:visible="visible"
		>
			<div><span>图书名称:</span>
				<el-input
					class=\'elinput\'
					v-model="data.btitle"
				></el-input>
			</div>
			<div><span>发布日期:</span>
				<el-input
					class=\'elinput\'
					v-model="data.bpub_date"
				>
				</el-input>
			</div>
			<div><span>阅读量:</span>
				<el-input
					class=\'elinput\'
					v-model="data.bread"
				></el-input>
			</div>
			<div><span>评论量:</span>
				<el-input
					class=\'elinput\'
					v-model="data.bcomment"
				></el-input>
			</div>
			<el-button @click="cancel">取 消</el-button>
			<el-button
				type="primary"
				@click="addBook"
			>确 定</el-button>
		</el-dialog>
	</div>
</template>
<script>
// import { addbook } from \'@/http/apis\'
export default {
	props: [\'data\', \'visible\'],
	data() {
		return {
		}
	},
	methods: {
		addBook() {
			this.$emit(\'update:visible\', false)
			this.$emit(\'save\')
		},
		cancel() {
			this.$emit(\'update:visible\', false)
		}
	},
	mounted() {
	}
}
</script>
<style>
.elinput {
	width: 220px;
	height: 40px;
}
</style>

图书管理系统后端

分类:

技术点:

相关文章: