diff --git a/src/App.vue b/src/App.vue index 3ba0284..17acf76 100644 --- a/src/App.vue +++ b/src/App.vue @@ -15,9 +15,11 @@ const route = useRoute(); - - - + + + + + diff --git a/src/api/reportFragments.ts b/src/api/reportFragments.ts index 3c56eb7..66f416d 100644 --- a/src/api/reportFragments.ts +++ b/src/api/reportFragments.ts @@ -3,4 +3,12 @@ import request from "@/utils/request"; export const createFragments = (sessionNum: string, content: string) => { return request.post(`/report-fragments`, {sessionNum, content}) +} + +export const updateFragments = (id: number, content: string) => { + return request.put(`/report-fragments/${id}`, {content}) +} + +export const getFragmentsBySession = (sessionNum: string) => { + return request.get(`/report-fragments/session/${sessionNum}`) } \ No newline at end of file diff --git a/src/components/ReviewDetail.vue b/src/components/ReviewDetail.vue index fa422dd..96e3957 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 || " " }} - + + + + + 取消 + 保存 + - 暂无内容 + + + + + {{ line || " " }} + + + 暂无内容 + @@ -176,13 +243,13 @@ onMounted(() => { - 残片 + 残片{{ idx + 1 }} {{ f.content.length > 150 ? f.content.substring(0, 150) + "..." : f.content }} @@ -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 diff --git a/src/components/StartTask.vue b/src/components/StartTask.vue index 51400ed..3e86bd6 100644 --- a/src/components/StartTask.vue +++ b/src/components/StartTask.vue @@ -1,5 +1,5 @@ + 任务编号:{{ taskInfo.taskNum }} @@ -298,6 +365,34 @@ onUnmounted(() => { + + + + 当前会话学习残片 + + {{ index + 1 }} + + + + 取消 + 保存 + + + + {{ fragment.content }} + 编辑 + + + @@ -325,6 +420,7 @@ onUnmounted(() => { 确认结束 +
- {{ line || " " }} -
+ {{ line || " " }} +