添加图书API

dev
lynn 6 months ago
parent 22b5328314
commit f64e5023d6

@ -0,0 +1,33 @@
import request from "@/utils/request";
export function save(data) {
return request({
method: "post",
url: "/api/admin/book/save",
data
})
}
export function destroy(params) {
return request({
method: "get",
url: "/api/admin/book/destroy",
params
})
}
export function show(params) {
return request({
method: "get",
url: "/api/admin/book/show",
params
})
}
export function index(params) {
return request({
method: "get",
url: "/api/admin/book/index",
params
})
}

@ -176,12 +176,7 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="分类" prop="category"> <el-form-item label="分类" prop="category">
<el-select v-model="bookForm.category" placeholder="请选择分类"> <el-input v-model="bookForm.category" placeholder="请输入分类"></el-input>
<el-option label="技术类" value="tech"></el-option>
<el-option label="商业类" value="business"></el-option>
<el-option label="管理类" value="management"></el-option>
<el-option label="金融类" value="finance"></el-option>
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -229,6 +224,8 @@
</template> </template>
<script> <script>
import { save } from '@/api/library'
import { uploads } from '@/api/uploads'
export default { export default {
name: 'Library', name: 'Library',
data() { data() {
@ -300,7 +297,8 @@ export default {
year: null, year: null,
category: '', category: '',
description: '', description: '',
cover: '' cover: '',
cover_id: ''
}, },
bookRules: { bookRules: {
title: [ title: [
@ -310,7 +308,7 @@ export default {
{ required: true, message: '请输入作者', trigger: 'blur' } { required: true, message: '请输入作者', trigger: 'blur' }
], ],
category: [ category: [
{ required: true, message: '请选择分类', trigger: 'change' } { required: true, message: '请输入分类', trigger: 'blur' }
] ]
} }
} }
@ -338,7 +336,7 @@ export default {
management: 'warning', management: 'warning',
finance: 'danger' finance: 'danger'
} }
return categoryMap[category] return categoryMap[category] || 'info'
}, },
getStatusTagType(status) { getStatusTagType(status) {
const statusMap = { const statusMap = {
@ -402,57 +400,66 @@ export default {
triggerCoverUpload() { triggerCoverUpload() {
this.$refs.coverInput.click() this.$refs.coverInput.click()
}, },
handleCoverUpload(event) { async handleCoverUpload(event) {
const file = event.target.files[0] const file = event.target.files[0]
if (file) { if (file) {
if (!file.type.match(/^image\/(jpeg|jpg|png)$/)) { if (!file.type.match(/^image\/(jpeg|jpg|png)$/)) {
this.$message.error('请选择 JPG 或 PNG 格式的图片') this.$message.error('请选择 JPG 或 PNG 格式的图片')
return return
} }
if (file.size > 2 * 1024 * 1024) { if (file.size > 2 * 1024 * 1024) {
this.$message.error('图片大小不能超过 2MB') this.$message.error('图片大小不能超过 2MB')
return return
} }
//
const reader = new FileReader() const reader = new FileReader()
reader.onload = (e) => { reader.onload = (e) => {
this.bookForm.cover = e.target.result this.bookForm.cover = e.target.result
} }
reader.readAsDataURL(file) reader.readAsDataURL(file)
//
const formData = new FormData()
formData.append('file', file)
try {
const res = await uploads(formData)
this.bookForm.cover_id = res.id
this.$message.success('封面上传成功')
} catch (e) {
this.$message.error('封面上传失败')
}
} }
}, },
saveBook() { async saveBook() {
this.$refs.bookForm.validate((valid) => { this.$refs.bookForm.validate(async (valid) => {
if (valid) { if (valid) {
console.log('保存图书:', this.bookForm)
//
const loading = this.$loading({ const loading = this.$loading({
lock: true, lock: true,
text: '正在保存...', text: '正在保存...',
spinner: 'el-icon-loading', spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)' background: 'rgba(0, 0, 0, 0.7)'
}) })
try {
setTimeout(() => { const params = {
title: this.bookForm.title,
author: this.bookForm.author,
isbn: this.bookForm.isbn,
publisher: this.bookForm.publisher,
publish_year: this.bookForm.year,
category: this.bookForm.category,
description: this.bookForm.description,
cover_id: this.bookForm.cover_id
}
console.log('params', params)
await save(params)
loading.close() loading.close()
this.$message.success('图书添加成功!') this.$message.success('图书添加成功!')
this.showUploadModal = false this.showUploadModal = false
this.resetForm() this.resetForm()
//
// } catch (e) {
const newBook = { loading.close()
id: Date.now(), this.$message.error('添加失败,请重试' + e.message)
...this.bookForm, }
categoryText: this.getCategoryText(this.bookForm.category),
status: 'available',
statusText: '可借阅',
addDate: new Date().toISOString().split('T')[0],
addTime: new Date().toTimeString().split(' ')[0].substring(0, 5)
}
this.list.unshift(newBook)
}, 1000)
} else { } else {
this.$message.error('请填写必填字段') this.$message.error('请填写必填字段')
return false return false
@ -469,7 +476,8 @@ export default {
year: null, year: null,
category: '', category: '',
description: '', description: '',
cover: '' cover: '',
cover_id: ''
} }
}, },
getCategoryText(category) { getCategoryText(category) {
@ -479,7 +487,7 @@ export default {
management: '管理类', management: '管理类',
finance: '金融类' finance: '金融类'
} }
return categoryMap[category] || '' return categoryMap[category] || category || ''
} }
} }
} }
@ -720,11 +728,9 @@ export default {
.book-stats { .book-stats {
grid-template-columns: 1fr; grid-template-columns: 1fr;
} }
.library-container { .library-container {
padding: 10px; padding: 10px;
} }
.stat-number { .stat-number {
font-size: 24px; font-size: 24px;
} }

Loading…
Cancel
Save