返回

与时俱进,创新前行——Spring Boot + vue-element开发个人博客项目实战教程(二十一)

后端

好的,我已收到您的输入信息。请稍等片刻,我将根据您的要求,为您撰写一篇专业级别的文章。以下是文章的正文:

今天我们继续我们的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>

至此,我们就完成了个人博客项目实战教程的第二十一章。在这一章中,我们学习了