diff --git a/src/components/ReviewDetail.vue b/src/components/ReviewDetail.vue index fa422dd..098b4aa 100644 --- a/src/components/ReviewDetail.vue +++ b/src/components/ReviewDetail.vue @@ -3,6 +3,8 @@ import { computed, onMounted, ref } from "vue"; import { useRoute, useRouter } from "vue-router"; import { getReportDetail, getFragmentDetail, getTaskReview, type ReviewFeedItem } from "@/api/review"; import { getSessionDetail } from "@/api/studySessions"; +import { updateFragments } from "@/api/reportFragments"; +import { ElMessage } from "element-plus"; const route = useRoute(); const router = useRouter(); @@ -15,6 +17,11 @@ const content = ref(""); const sourceTypeLabel = ref(""); const taskNum = ref(""); +// 编辑状态 +const isEditing = ref(false); +const editContent = ref(""); +const saving = ref(false); + // 当前会话信息 const sessionInfo = ref<{ taskName: string; @@ -114,6 +121,42 @@ const goToDetail = (type: string, id: number) => { router.push(`/review/detail/${type}/${id}`); }; +const enterEdit = () => { + editContent.value = content.value; + isEditing.value = true; +}; + +const cancelEdit = () => { + isEditing.value = false; + editContent.value = ""; +}; + +const saveEdit = async () => { + if (!editContent.value.trim()) { + ElMessage.warning("内容不能为空"); + return; + } + if (editContent.value === content.value) { + isEditing.value = false; + return; + } + saving.value = true; + try { + const res = await updateFragments(contentId.value, editContent.value); + if (res?.code === 200) { + content.value = editContent.value; + isEditing.value = false; + ElMessage.success("保存成功"); + } else { + ElMessage.error(res?.message || "保存失败"); + } + } catch (e: any) { + ElMessage.error(e.message || "请求失败"); + } finally { + saving.value = false; + } +}; + onMounted(() => { loadDetail(); }); @@ -137,14 +180,38 @@ onMounted(() => { 学习时间:{{ sessionInfo.startTime?.replace("T", " ")?.substring(0, 16) }} + + 编辑 + -
-

- {{ line || " " }} -

+ +
+ +
+ 取消 + 保存 +
-
暂无内容
+ + @@ -342,4 +409,15 @@ onMounted(() => { color: #b8860b; } +.edit-area { + margin-top: 12px; +} + +.edit-actions { + display: flex; + justify-content: flex-end; + gap: 8px; + margin-top: 12px; +} + \ No newline at end of file