返回
与时俱进,创新前行——Spring Boot + vue-element开发个人博客项目实战教程(二十一)
后端
2024-01-22 07:10:15
好的,我已收到您的输入信息。请稍等片刻,我将根据您的要求,为您撰写一篇专业级别的文章。以下是文章的正文:
今天我们继续我们的Spring Boot + vue-element开发个人博客项目实战教程。在前面的章节中,我们已经完成了博客的基本功能,包括文章管理、评论管理、分类管理等。在这一章中,我们将继续完善博客的功能,包括个人介绍、公告管理和标签管理。
首先,我们来看一下个人介绍。个人介绍部分主要是写写我们自己的个人简介等信息,可以写一下我们学到的一些技术等东西,相当于我们的个人简历。在vue-element中,我们可以使用Form表单组件来实现个人介绍的功能。
<template>
<div class="profile-container">
<Form :model="formData" :rules="rules" ref="formData" label-width="100px">
<FormItem label="姓名:" prop="name">
<Input v-model="formData.name" placeholder="请输入您的姓名" />
</FormItem>
<FormItem label="头像:" prop="avatar">
<Avatar :src="formData.avatar" size="large" />
<Upload
action="https://jsonplaceholder.typicode.com/posts/"
:headers="headers"
:data="formData"
:multiple="false"
:on-success="handleAvatarSuccess"
:on-error="handleAvatarError"
>
<Button icon="ios-cloud-upload-outline">上传头像</Button>
</Upload>
</FormItem>
<FormItem label="简介:" prop="introduction">
<Input v-model="formData.introduction" type="textarea" placeholder="请输入您的简介" />
</FormItem>
<FormItem label="技能:" prop="skills">
<CheckboxGroup v-model="formData.skills">
<Checkbox label="HTML5" name="html5" />
<Checkbox label="CSS3" name="css3" />
<Checkbox label="JavaScript" name="javascript" />
<Checkbox label="Vue.js" name="vuejs" />
<Checkbox label="Spring Boot" name="springboot" />
</CheckboxGroup>
</FormItem>
<FormItem>
<Button type="primary" @click="submitForm">保存</Button>
<Button type="reset">重置</Button>
</FormItem>
</Form>
</div>
</template>
<script>
import { Form, FormItem, Input, Avatar, Upload, CheckboxGroup, Checkbox, Button } from 'element-ui'
export default {
components: {
Form,
FormItem,
Input,
Avatar,
Upload,
CheckboxGroup,
Checkbox,
Button
},
data() {
return {
formData: {
name: '',
avatar: '',
introduction: '',
skills: []
},
rules: {
name: [
{ required: true, message: '请输入您的姓名', trigger: 'blur' }
],
avatar: [
{ required: true, message: '请上传您的头像', trigger: 'blur' }
],
introduction: [
{ required: true, message: '请输入您的简介', trigger: 'blur' }
],
skills: [
{ required: true, message: '请选择您的技能', trigger: 'blur' }
]
},
headers: {
'Content-Type': 'multipart/form-data'
}
}
},
methods: {
submitForm() {
this.$refs.formData.validate((valid) => {
if (valid) {
// 提交表单
this.$message({
type: 'success',
message: '保存成功'
})
} else {
// 表单验证失败
this.$message({
type: 'error',
message: '请检查您输入的信息'
})
}
})
},
handleAvatarSuccess(res, file) {
this.formData.avatar = URL.createObjectURL(file.raw)
},
handleAvatarError(err, file) {
this.$message({
type: 'error',
message: '上传头像失败'
})
}
}
}
</script>
然后,我们来看一下公告管理。公告管理部分主要是用来发布一些网站的公告信息,可以是网站的更新信息、活动信息等。在vue-element中,我们可以使用Table表格组件来实现公告管理的功能。
<template>
<div class="announcement-container">
<Table :data="tableData" border stripe>
<TableColumn prop="title" label="公告标题" width="180">
<template slot-scope="scope">
<span>{{ scope.row.title }}</span>
</template>
</TableColumn>
<TableColumn prop="content" label="公告内容">
<template slot-scope="scope">
<span>{{ scope.row.content }}</span>
</template>
</TableColumn>
<TableColumn prop="createTime" label="发布时间" width="180">
<template slot-scope="scope">
<span>{{ scope.row.createTime }}</span>
</template>
</TableColumn>
<TableColumn prop="操作" label="操作" width="100">
<template slot-scope="scope">
<Button type="primary" size="mini" @click="handleEdit(scope.row)">编辑</Button>
<Button type="danger" size="mini" @click="handleDelete(scope.row)">删除</Button>
</template>
</TableColumn>
</Table>
</div>
</template>
<script>
import { Table, TableColumn, Button } from 'element-ui'
export default {
components: {
Table,
TableColumn,
Button
},
data() {
return {
tableData: [
{
title: '网站更新公告',
content: '网站已更新至最新版本,请查阅更新日志。',
createTime: '2023-03-08 10:00:00'
},
{
title: '活动预告',
content: '网站即将举行周年庆活动,敬请期待!',
createTime: '2023-03-10 12:00:00'
}
]
}
},
methods: {
handleEdit(row) {
// 编辑公告
this.$message({
type: 'success',
message: '编辑公告成功'
})
},
handleDelete(row) {
// 删除公告
this.$message({
type: 'success',
message: '删除公告成功'
})
}
}
}
</script>
最后,我们来看一下标签管理。标签管理部分主要是用来管理网站的文章标签,可以添加、编辑、删除标签。在vue-element中,我们可以使用Tag标签组件来实现标签管理的功能。
<template>
<div class="tag-container">
<Tag v-for="tag in tags" :key="tag.id">{{ tag.name }}</Tag>
<Button type="primary" size="mini" @click="handleAddTag">添加标签</Button>
</div>
</template>
<script>
import { Tag, Button } from 'element-ui'
export default {
components: {
Tag,
Button
},
data() {
return {
tags: [
{
id: 1,
name: 'HTML5'
},
{
id: 2,
name: 'CSS3'
},
{
id: 3,
name: 'JavaScript'
}
]
}
},
methods: {
handleAddTag() {
// 添加标签
this.$message({
type: 'success',
message: '添加标签成功'
})
}
}
}
</script>
至此,我们就完成了个人博客项目实战教程的第二十一章。在这一章中,我们学习了