feat:课程列表ai伴学模式修发布评论对接

This commit is contained in:
小张 2025-09-03 22:17:48 +08:00
parent 7b993f0648
commit 177bdbc009
2 changed files with 134 additions and 10 deletions

View File

@ -29,6 +29,24 @@ export class CommentApi {
return ApiRequest.get(`/lessons/${lessonId}/comments`, params) return ApiRequest.get(`/lessons/${lessonId}/comments`, params)
} }
// 发送课程评论
static async postCourseComment(courseId: string, data: {
content: string
imgs?: string
}): Promise<ApiResponse<any>> {
try {
console.log('🚀 发送课程评论:', { courseId, data })
const response = await ApiRequest.post<any>(`/aiol/aiolComment/course/${courseId}/add`, data)
console.log('✅ 发送课程评论成功:', response)
return response
} catch (error) {
console.error('❌ 发送课程评论失败:', error)
throw error
}
}
// 添加课程评论 // 添加课程评论
static addCourseComment(courseId: number, data: { static addCourseComment(courseId: number, data: {
content: string content: string

View File

@ -446,11 +446,30 @@
<!-- 左侧边栏 --> <!-- 左侧边栏 -->
<div class="sidebar"> <div class="sidebar">
<div class="sidebar-title">
<!-- 学期选择器 -->
<div class="semester-selector">
<select class="semester-dropdown">
<option value="2025-spring">2025年上学期</option>
<option value="2025-fall">2025年下学期</option>
<option value="2024-spring">2024年上学期</option>
</select>
<div class="dropdown-arrow">
<svg width="12" height="8" viewBox="0 0 12 8" fill="none">
<path d="M1 1L6 6L11 1" stroke="#0088D1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</div>
</div>
<!-- 开课时间 -->
<div class="course-time-info">
开课时间2025.09.01-2026.01.14
</div>
<div class="sidebar-title">
<h2>学习进度</h2> <h2>学习进度</h2>
<img src="/images/aiCompanion/fold.png" alt=""> <img src="/images/aiCompanion/fold.png" alt="">
</div> </div>
<!-- 学习进度 --> <!-- 学习进度 -->
<div class="progress-section"> <div class="progress-section">
<div class="progress-header"> <div class="progress-header">
@ -1029,6 +1048,7 @@ import { useMessage } from 'naive-ui'
// import { useAuth } from '@/composables/useAuth' // import { useAuth } from '@/composables/useAuth'
// import { useUserStore } from '@/stores/user' // import { useUserStore } from '@/stores/user'
import { CourseApi } from '@/api/modules/course' import { CourseApi } from '@/api/modules/course'
import { CommentApi } from '@/api/modules/comment'
import type { Course, CourseSection, CourseComment } from '@/api/types' import type { Course, CourseSection, CourseComment } from '@/api/types'
import QuillEditor from '@/components/common/QuillEditor.vue' import QuillEditor from '@/components/common/QuillEditor.vue'
import DPlayerVideo from '@/components/course/DPlayerVideo.vue' import DPlayerVideo from '@/components/course/DPlayerVideo.vue'
@ -1391,14 +1411,36 @@ const loadCourseComments = async () => {
} }
// //
const submitComment = () => { const submitComment = async () => {
if (newComment.value.trim()) { if (!newComment.value.trim()) {
// API message.warning('请输入评论内容')
console.log('提交评论:', newComment.value) return
// }
// await CourseApi.submitComment(courseId.value, newComment.value)
// loadCourseComments() try {
newComment.value = '' console.log('🚀 开始提交评论:', newComment.value)
// API
const response = await CommentApi.postCourseComment(courseId.value, {
content: newComment.value.trim(),
imgs: '' //
})
console.log('✅ 评论提交成功:', response)
//
if (response.data && response.data.code === 200 && response.data.success) {
message.success('评论发布成功')
newComment.value = ''
//
await loadCourseComments()
} else {
message.error(response.data?.message || '评论发布失败')
}
} catch (error) {
console.error('❌ 提交评论失败:', error)
message.error('评论发布失败,请稍后重试')
} }
} }
@ -2357,6 +2399,68 @@ onActivated(() => {
border: 1px solid white; border: 1px solid white;
} }
/* 学期选择器 */
.semester-selector {
position: relative;
width: 100%;
height: 42px;
margin: 20px 0 -3px 0;
box-sizing: border-box;
}
.semester-dropdown {
width: 100%;
height: 100%;
background: #E2F5FF;
border: 1px solid #0088D1;
border-radius: 4px;
padding: 0 40px 0 16px;
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 14px;
color: #0088D1;
appearance: none;
cursor: pointer;
outline: none;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
box-sizing: border-box;
}
.semester-dropdown:focus {
border-color: #0088D1;
box-shadow: 0 0 0 2px rgba(0, 136, 209, 0.1);
}
.dropdown-arrow {
position: absolute;
right: 16px;
top: 50%;
transform: translateY(-50%);
pointer-events: none;
}
/* 开课时间信息 */
.course-time-info {
width: 100%;
height: 20px;
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 14px;
color: #666666;
line-height: 20px;
text-align: left;
font-style: normal;
margin: 0 0 20px 0;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
box-sizing: border-box;
}
/* 进度头部样式 */ /* 进度头部样式 */
.progress-header { .progress-header {
margin-bottom: 20px; margin-bottom: 20px;
@ -5715,6 +5819,7 @@ onActivated(() => {
.banner-title-section { .banner-title-section {
width: 100%; width: 100%;
margin-bottom: 10px; margin-bottom: 10px;
height: 60px;
} }
.banner-content { .banner-content {
@ -5722,6 +5827,7 @@ onActivated(() => {
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
color: #000; color: #000;
height: 100%;
} }
.banner-text { .banner-text {