внешний интерфейс:
1. Используйте платформу vue для создания страницы и внедрите библиотеку компонентов element-ui.
2. Отобразите на странице содержание статьи и список комментариев.
3. Добавьте поле комментария, инкапсулированное с помощью компонентов Form и Input элемента-ui, чтобы пользователи могли вводить содержимое комментария.
4. Добавьте поле ответа под каждым комментарием и используйте компоненты Form и Input элемента-ui, чтобы инкапсулировать его, чтобы пользователи могли вводить содержимое ответа.
5. Реализовать функцию отправки комментариев и ответов и использовать библиотеку axios для отправки запросов на бэкенд.
задняя часть:
1. Используйте язык Java для написания внутреннего кода и используйте среду Spring Boot для сборки проекта.
2. Создайте класс сущности Comment для представления комментариев и информации об ответах.
3. Создайте контроллер для обработки запросов на добавление, удаление, изменение и запрос комментариев и ответов.
4. Создайте Сервис для реализации логики работы с данными комментариев и ответов.
5. Создайте Репозиторий для взаимодействия с базой данных.
Конкретные этапы реализации следующие:
внешний интерфейс:
1. Создайте проект на основе vue framework и внедрите библиотеку компонентов element-ui.
2. Отобразите на странице содержание статьи и список комментариев.
<template>
<div class="article">
<h1>{{ article.title }}</h1>
<p>{{ article.content }}</p>
<hr>
<h2>Комментарий</h2>
<el-form ref="commentForm" :model="comment" label-width="80px">
<el-form-item label="Комментарий">
<el-input type="textarea" v-model="comment.content" :autosize="{ minRows: 4, maxRows: 4 }"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitComment">Отправить комментарий</el-button>
</el-form-item>
</el-form>
<div class="comment-list">
<div v-for="(item, index) in commentList" :key="index" class="comment-item">
<div class="comment-content">{{ item.content }}</div>
<div class="comment-reply">
<el-form ref="replyForm" :model="reply[index]" label-width="80px">
<el-form-item label="отвечать">
<el-input type="textarea" v-model="reply[index].content" :autosize="{ minRows: 2, maxRows: 2 }"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitReply(index)">представлять на рассмотрениеотвечать</el-button>
</el-form-item>
</el-form>
</div>
<div class="reply-list">
<div v-for="(replyItem, replyIndex) in item.replyList" :key="replyIndex" class="reply-item">
<div class="reply-content">{{ replyItem.content }}</div>
<div class="reply-info">{{ replyItem.username }} отвечать {{ replyItem.targetUsername }}</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
article: {},
comment: {
content: ''
},
reply: [],
commentList: []
}
},
created() {
// Получить содержание статьи и список комментариев
axios.get('/article/' + this.$route.params.id).then(res => {
this.article = res.data
this.commentList = this.article.commentList
for (let i = 0; i < this.commentList.length; i++) {
this.reply.push({
content: ''
})
}
})
},
methods: {
submitComment() {
// Отправить комментарий
const data = {
articleId: this.$route.params.id,
content: this.comment.content
}
axios.post('/comment', data).then(res => {
this.commentList.push(res.data)
this.comment.content = ''
})
},
submitReply(index) {
// представлять на рассмотрениеотвечать
const data = {
commentId: this.commentList[index].id,
content: this.reply[index].content
}
axios.post('/reply', data).then(res => {
this.commentList[index].replyList.push(res.data)
this.reply[index].content = ''
})
}
}
}
</script>
3. Добавьте поле комментария, инкапсулированное с помощью компонентов Form и Input элемента-ui, чтобы пользователи могли вводить содержимое комментария.
<el-form ref="commentForm" :model="comment" label-width="80px">
<el-form-item label="Комментарий">
<el-input type="textarea" v-model="comment.content" :autosize="{ minRows: 4, maxRows: 4 }"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitComment">Отправить комментарий</el-button>
</el-form-item>
</el-form>
4. Добавьте поле ответа под каждым комментарием и используйте компоненты Form и Input элемента-ui, чтобы инкапсулировать его, чтобы пользователи могли вводить содержимое ответа.
<div class="comment-reply">
<el-form ref="replyForm" :model="reply[index]" label-width="80px">
<el-form-item label="отвечать">
<el-input type="textarea" v-model="reply[index].content" :autosize="{ minRows: 2, maxRows: 2 }"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitReply(index)">представлять на рассмотрениеотвечать</el-button>
</el-form-item>
</el-form>
</div>
5. Реализовать функцию отправки комментариев и ответов и использовать библиотеку axios для отправки запросов на бэкенд.
submitComment() {
// Отправить комментарий
const data = {
articleId: this.$route.params.id,
content:
this.comment.content
}
axios.post('/comment', data).then(res => {
this.commentList.push(res.data)
this.comment.content = ''
})
},
submitReply(index) {
// представлять на рассмотрениеотвечать
const data = {
commentId: this.commentList[index].id,
content: this.reply[index].content
}
axios.post('/reply', data).then(res => {
this.commentList[index].replyList.push(res.data)
this.reply[index].content = ''
})
}
задняя часть:
1. Создайте проект на основе Maven, используя среду Spring Boot.
2. Добавьте зависимости в pom.xml.
<dependencies>
<!-- Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Data JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- MySQL -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
3. Создайте класс сущности Comment для представления комментариев и информации об ответах.
@Entity
@Table(name = "comment")
public class Comment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "article_id")
private Integer articleId;
@Column(name = "user_id")
private Integer userId;
private String content;
@Column(name = "create_time")
private Date createTime;
// методы получения и установки
}
4. Создайте класс сущности Reply для представления информации об ответе.
@Entity
@Table(name = "reply")
public class Reply {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "comment_id")
private Integer commentId;
@Column(name = "user_id")
private Integer userId;
private String content;
@Column(name = "create_time")
private Date createTime;
// методы получения и установки
}
5. Создайте интерфейс CommentRepository для взаимодействия с базой данных.
public interface CommentRepository extends JpaRepository<Comment, Integer> {
List<Comment> findByArticleId(Integer articleId);
}
6. Создайте интерфейс ReplyRepository для взаимодействия с базой данных.
public interface ReplyRepository extends JpaRepository<Reply, Integer> {
List<Reply> findByCommentId(Integer commentId);
}
7. Создайте класс CommentService для реализации логики работы с данными комментариев и ответов.
@Service
public class CommentService {
@Autowired
private CommentRepository commentRepository;
@Autowired
private ReplyRepository replyRepository;
public List<Comment> getCommentList(Integer articleId) {
return commentRepository.findByArticleId(articleId);
}
public Comment addComment(Comment comment) {
comment.setCreateTime(new Date());
return commentRepository.save(comment);
}
public Reply addReply(Reply reply) {
reply.setCreateTime(new Date());
return replyRepository.save(reply);
}
}
8. Создайте класс CommentController для обработки запросов на добавление, удаление, изменение и запрос комментариев и ответов.
@RestController
public class CommentController {
@Autowired
private CommentService commentService;
@PostMapping("/comment")
public Comment addComment(@RequestBody Comment comment) {
return commentService.addComment(comment);
}
@PostMapping("/reply")
public Reply addReply(@RequestBody Reply reply) {
return commentService.addReply(reply);
}
}
Выше приведены конкретные шаги по реализации функций комментариев и ответов с использованием Java и vue.