|
|
@@ -1,221 +1,233 @@
|
|
|
<template>
|
|
|
- <el-dialog :close-on-click-modal="false" :visible="visible" :title="'试题管理 - 试卷ID: ' + paperId" width="90%" top="5vh"
|
|
|
- @close="closeDialog" custom-class="topic-manager-dialog">
|
|
|
- <div class="topic-manager-container">
|
|
|
- <!-- 试题列表 -->
|
|
|
- <div class="topic-list-container">
|
|
|
- <div class="topic-list-header">
|
|
|
- <h3>试题列表</h3>
|
|
|
- <el-button type="primary" icon="el-icon-plus" size="small" @click="showAddForm()">
|
|
|
- 添加试题
|
|
|
- </el-button>
|
|
|
- </div>
|
|
|
+ <div>
|
|
|
+ <el-dialog :close-on-click-modal="false" :visible="visible" :title="'试题管理 - 试卷ID: ' + paperId" width="90%"
|
|
|
+ top="5vh" @close="closeDialog" custom-class="topic-manager-dialog">
|
|
|
+ <div class="topic-manager-container">
|
|
|
+ <!-- 试题列表 -->
|
|
|
+ <div class="topic-list-container">
|
|
|
+ <div class="topic-list-header">
|
|
|
+ <h3>试题列表</h3>
|
|
|
+ <el-button type="primary" icon="el-icon-plus" size="small" @click="showAddForm()">
|
|
|
+ 添加试题
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
|
|
|
- <el-table :data="topics" row-key="id" height="600" v-loading="loading">
|
|
|
- <el-table-column label="排序" width="80">
|
|
|
- <template slot-scope="{}">
|
|
|
- <i class="el-icon-sort"></i>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <!-- <el-table-column label="ID" prop="id" width="60" /> -->
|
|
|
- <el-table-column label="题目内容" min-width="150">
|
|
|
- <template slot-scope="{ row }">
|
|
|
- <div v-if="row.show_type === 1" class="topic-content">
|
|
|
- {{ row.topic_name }}
|
|
|
- </div>
|
|
|
- <div v-else class="topic-content">
|
|
|
- <image-preview size="xs" :images="[row.topic_name]" />
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="题型" min-width="40">
|
|
|
- <template slot-scope="{ row }">
|
|
|
- <el-tag :type="getTopicTypeTag(row.topic_type)">
|
|
|
- {{ row.topic_type }}
|
|
|
- </el-tag>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="分数" prop="score" min-width="40" />
|
|
|
- <el-table-column label="正确答案" min-width="80">
|
|
|
- <template slot-scope="{ row }">
|
|
|
- <div v-if="row.answer_type === 1" class="topic-content">
|
|
|
- <text-ellipsis :text="row.correct_answer" :max-length="10" />
|
|
|
- </div>
|
|
|
- <div v-else class="topic-content">
|
|
|
- <image-preview size="xs" :images="row.correct_answer" />
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="解析" min-width="80">
|
|
|
- <template slot-scope="{ row }">
|
|
|
- <div v-if="row.show_type === 1" class="topic-content">
|
|
|
- <text-ellipsis :text="row.topic_analysis" :max-length="10" />
|
|
|
- </div>
|
|
|
- <div v-else class="topic-content">
|
|
|
- <image-preview size="xs" :images="row.topic_analysis" />
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="操作" min-width="60" fixed="right">
|
|
|
- <template slot-scope="{ row, $index }">
|
|
|
- <el-button size="mini" @click="editTopic(row)">编辑</el-button>
|
|
|
- <el-button size="mini" type="danger" @click="deleteTopic(row, $index)">删除</el-button>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- </el-table>
|
|
|
-
|
|
|
- <!-- 拖拽排序提示 -->
|
|
|
- <div class="drag-tips">
|
|
|
- <i class="el-icon-info"></i>
|
|
|
- 提示:可以通过拖拽行来调整试题顺序
|
|
|
+ <el-table :data="topics" row-key="id" height="600" v-loading="loading" :border="true"
|
|
|
+ :stripe="true">
|
|
|
+ <el-table-column label="排序" width="80">
|
|
|
+ <template slot-scope="{}">
|
|
|
+ <i class="el-icon-sort"></i>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <!-- <el-table-column label="ID" prop="id" width="60" /> -->
|
|
|
+ <el-table-column label="题目内容" min-width="200">
|
|
|
+ <template slot-scope="{ row }">
|
|
|
+ <div v-if="row.show_type === 1" class="topic-content clickable"
|
|
|
+ @click="showContentDialog('题目内容', row.topic_name)">
|
|
|
+ {{ row.topic_name }}
|
|
|
+ </div>
|
|
|
+ <div v-else class="topic-content clickable"
|
|
|
+ @click="showImageDialog('题目内容', row.topic_name)">
|
|
|
+ <image-preview size="xs" :images="[row.topic_name]" />
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="题型" width="80">
|
|
|
+ <template slot-scope="{ row }">
|
|
|
+ <el-tag :type="getTopicTypeTag(row.topic_type)">
|
|
|
+ {{ row.topic_type }}
|
|
|
+ </el-tag>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="分数" prop="score" width="60" align="center" />
|
|
|
+ <el-table-column label="正确答案" width="120">
|
|
|
+ <template slot-scope="{ row }">
|
|
|
+ <div v-if="row.show_type === 1" class="topic-content clickable"
|
|
|
+ @click="showContentDialog('正确答案', row.correct_answer)">
|
|
|
+ <text-ellipsis :text="row.correct_answer" :max-length="10" />
|
|
|
+ </div>
|
|
|
+ <div v-else class="topic-content clickable"
|
|
|
+ @click="showImageDialog('正确答案', row.correct_answer)">
|
|
|
+ <image-preview size="xs" :images="[row.correct_answer]" />
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="解析" width="120">
|
|
|
+ <template slot-scope="{ row }">
|
|
|
+ <div v-if="row.show_type === 1" class="topic-content clickable"
|
|
|
+ @click="showContentDialog('解析', row.topic_analysis)">
|
|
|
+ <text-ellipsis :text="row.topic_analysis" :max-length="10" />
|
|
|
+ </div>
|
|
|
+ <div v-else class="topic-content clickable"
|
|
|
+ @click="showImageDialog('解析', row.topic_analysis)">
|
|
|
+ <image-preview size="xs" :images="[row.topic_analysis]" />
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="操作" width="180" align="center" fixed="right">
|
|
|
+ <template slot-scope="{ row, $index }">
|
|
|
+ <el-button size="mini" type="primary" plain @click="editTopic(row)">编辑</el-button>
|
|
|
+ <el-button size="mini" type="danger" plain
|
|
|
+ @click="deleteTopic(row, $index)">删除</el-button>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+
|
|
|
+ <!-- 拖拽排序提示 -->
|
|
|
+ <div class="drag-tips">
|
|
|
+ <i class="el-icon-info"></i>
|
|
|
+ 提示:可以通过拖拽行来调整试题顺序
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
|
|
|
- <!-- 添加/编辑试题表单 -->
|
|
|
- <div class="topic-form-container">
|
|
|
- <h3>{{ isEdit ? '编辑试题' : '添加试题' }}</h3>
|
|
|
-
|
|
|
- <el-form :model="form" :rules="rules" ref="formRef" label-width="120px">
|
|
|
- <el-form-item label="题目类型" prop="topic_type">
|
|
|
- <el-select v-model="form.topic_type" placeholder="请选择题型" @change="changeTopicType">
|
|
|
- <el-option label="单选题" value="单选题"></el-option>
|
|
|
- <el-option label="多选题" value="多选题"></el-option>
|
|
|
- <el-option label="判断题" value="判断题"></el-option>
|
|
|
- <el-option label="填空题" value="填空题"></el-option>
|
|
|
- <el-option label="简答题" value="简答题"></el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item label="显示方式" prop="show_type">
|
|
|
- <el-radio-group v-model="form.show_type">
|
|
|
- <el-radio :label="1">文本</el-radio>
|
|
|
- <el-radio :label="2">图片</el-radio>
|
|
|
- </el-radio-group>
|
|
|
- </el-form-item>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
+
|
|
|
+ <!-- 添加/编辑试题弹窗 -->
|
|
|
+ <el-dialog :visible.sync="showForm" :title="isEdit ? '编辑试题' : '添加试题'" width="800px"
|
|
|
+ :close-on-click-modal="false">
|
|
|
+ <el-form :model="form" :rules="rules" ref="formRef" label-width="120px">
|
|
|
+ <el-form-item label="题目类型" prop="topic_type">
|
|
|
+ <el-select v-model="form.topic_type" placeholder="请选择题型" @change="changeTopicType">
|
|
|
+ <el-option label="单选题" value="单选题"></el-option>
|
|
|
+ <el-option label="多选题" value="多选题"></el-option>
|
|
|
+ <el-option label="判断题" value="判断题"></el-option>
|
|
|
+ <el-option label="填空题" value="填空题"></el-option>
|
|
|
+ <el-option label="简答题" value="简答题"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="显示方式" prop="show_type">
|
|
|
+ <el-radio-group v-model="form.show_type">
|
|
|
+ <el-radio :label="1">文本</el-radio>
|
|
|
+ <el-radio :label="2">图片</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="题目内容" prop="topic_name" v-if="form.show_type === 1">
|
|
|
+ <el-input type="textarea" :rows="3" v-model="form.topic_name" placeholder="请输入题目内容"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="题目图片" prop="topic_name" v-else>
|
|
|
+ <uploadImage :limit="1" v-model="form.topic_name"></uploadImage>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="分数" prop="score">
|
|
|
+ <el-input-number v-model="form.score" :min="1" :max="100"></el-input-number>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="图片选项/答案" prop="answer_type" v-if="form.show_type === 2">
|
|
|
+ <el-radio-group v-model="form.answer_type">
|
|
|
+ <el-radio :label="1">是</el-radio>
|
|
|
+ <el-radio :label="2">否</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <!-- 单选题、多选题 -->
|
|
|
+ <div v-if="['单选题', '多选题'].includes(form.topic_type)">
|
|
|
+ <template v-if="form.answer_type == 1">
|
|
|
+ <!-- 选项:图片方式 -->
|
|
|
+ <el-form-item v-for="(option, index) in options" :key="index"
|
|
|
+ :label="'选项 ' + String.fromCharCode(65 + index)"
|
|
|
+ :prop="'answer_' + String.fromCharCode(65 + index)">
|
|
|
+ <uploadImage :limit="1" v-model="options[index]" />
|
|
|
+ </el-form-item>
|
|
|
|
|
|
- <el-form-item label="题目内容" prop="topic_name" v-if="form.show_type === 1">
|
|
|
- <el-input type="textarea" :rows="3" v-model="form.topic_name" placeholder="请输入题目内容"></el-input>
|
|
|
- </el-form-item>
|
|
|
+ <!-- 正确答案:选择对应选项 -->
|
|
|
+ <el-form-item label="正确答案" prop="correct_answer">
|
|
|
+ <el-select v-model="form.correct_answer" placeholder="请选择正确答案" multiple
|
|
|
+ v-if="form.topic_type === '多选题'">
|
|
|
+ <el-option v-for="(option, index) in options" :key="index"
|
|
|
+ :label="'选项 ' + String.fromCharCode(65 + index)"
|
|
|
+ :value="String.fromCharCode(65 + index)" />
|
|
|
+ </el-select>
|
|
|
+ <el-select v-model="form.correct_answer" placeholder="请选择正确答案" v-else>
|
|
|
+ <el-option v-for="(option, index) in options" :key="index"
|
|
|
+ :label="'选项 ' + String.fromCharCode(65 + index)"
|
|
|
+ :value="String.fromCharCode(65 + index)" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template v-else>
|
|
|
+ <!-- 选项:文本方式 -->
|
|
|
+ <el-form-item v-for="(option, index) in options" :key="index"
|
|
|
+ :label="'选项 ' + String.fromCharCode(65 + index)"
|
|
|
+ :prop="'answer_' + String.fromCharCode(65 + index)">
|
|
|
+ <el-input v-model="options[index]"
|
|
|
+ :placeholder="'请输入选项' + String.fromCharCode(65 + index) + '的内容'" />
|
|
|
+ </el-form-item>
|
|
|
|
|
|
- <el-form-item label="题目图片" prop="topic_name" v-else>
|
|
|
- <uploadImage :limit="1" v-model="form.topic_name"></uploadImage>
|
|
|
- </el-form-item>
|
|
|
+ <!-- 正确答案:选择对应选项 -->
|
|
|
+ <el-form-item label="正确答案" prop="correct_answer">
|
|
|
+ <el-select v-model="form.correct_answer" placeholder="请选择正确答案" multiple
|
|
|
+ v-if="form.topic_type === '多选题'">
|
|
|
+ <el-option v-for="(option, index) in options" :key="index"
|
|
|
+ :label="String.fromCharCode(65 + index)" :value="String.fromCharCode(65 + index)" />
|
|
|
+ </el-select>
|
|
|
+ <el-select v-model="form.correct_answer" placeholder="请选择正确答案" v-else>
|
|
|
+ <el-option v-for="(option, index) in options" :key="index"
|
|
|
+ :label="String.fromCharCode(65 + index)" :value="String.fromCharCode(65 + index)" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ </div>
|
|
|
|
|
|
- <el-form-item label="分数" prop="score">
|
|
|
- <el-input-number v-model="form.score" :min="1" :max="100"></el-input-number>
|
|
|
- </el-form-item>
|
|
|
|
|
|
- <el-form-item label="图片选项/答案" prop="answer_type" v-if="form.show_type === 2">
|
|
|
- <el-radio-group v-model="form.answer_type">
|
|
|
- <el-radio :label="1">是</el-radio>
|
|
|
- <el-radio :label="2">否</el-radio>
|
|
|
+ <div v-else-if="form.topic_type === '判断题'">
|
|
|
+ <el-form-item label="正确答案" prop="correct_answer">
|
|
|
+ <el-radio-group v-model="form.correct_answer">
|
|
|
+ <el-radio label="正确">正确</el-radio>
|
|
|
+ <el-radio label="错误">错误</el-radio>
|
|
|
</el-radio-group>
|
|
|
</el-form-item>
|
|
|
+ </div>
|
|
|
|
|
|
- <!-- 单选题、多选题 -->
|
|
|
- <div v-if="['单选题', '多选题'].includes(form.topic_type)">
|
|
|
- <template v-if="form.answer_type == 1">
|
|
|
- <!-- 选项:图片方式 -->
|
|
|
- <el-form-item v-for="(option, index) in options" :key="index"
|
|
|
- :label="'选项 ' + String.fromCharCode(65 + index)"
|
|
|
- :prop="'answer_' + String.fromCharCode(65 + index)">
|
|
|
- <uploadImage :limit="1" v-model="options[index]" />
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <!-- 正确答案:选择对应选项 -->
|
|
|
- <el-form-item label="正确答案" prop="correct_answer">
|
|
|
- <el-select v-model="form.correct_answer" placeholder="请选择正确答案" multiple
|
|
|
- v-if="form.topic_type === '多选题'">
|
|
|
- <el-option v-for="(option, index) in options" :key="index"
|
|
|
- :label="'选项 ' + String.fromCharCode(65 + index)"
|
|
|
- :value="String.fromCharCode(65 + index)" />
|
|
|
- </el-select>
|
|
|
- <el-select v-model="form.correct_answer" placeholder="请选择正确答案" v-else>
|
|
|
- <el-option v-for="(option, index) in options" :key="index"
|
|
|
- :label="'选项 ' + String.fromCharCode(65 + index)"
|
|
|
- :value="String.fromCharCode(65 + index)" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- </template>
|
|
|
-
|
|
|
- <template v-else>
|
|
|
- <!-- 选项:文本方式 -->
|
|
|
- <el-form-item v-for="(option, index) in options" :key="index"
|
|
|
- :label="'选项 ' + String.fromCharCode(65 + index)"
|
|
|
- :prop="'answer_' + String.fromCharCode(65 + index)">
|
|
|
- <el-input v-model="options[index]"
|
|
|
- :placeholder="'请输入选项' + String.fromCharCode(65 + index) + '的内容'" />
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <!-- 正确答案:选择对应选项 -->
|
|
|
- <el-form-item label="正确答案" prop="correct_answer">
|
|
|
- <el-select v-model="form.correct_answer" placeholder="请选择正确答案" multiple
|
|
|
- v-if="form.topic_type === '多选题'">
|
|
|
- <el-option v-for="(option, index) in options" :key="index"
|
|
|
- :label="String.fromCharCode(65 + index)"
|
|
|
- :value="String.fromCharCode(65 + index)" />
|
|
|
- </el-select>
|
|
|
- <el-select v-model="form.correct_answer" placeholder="请选择正确答案" v-else>
|
|
|
- <el-option v-for="(option, index) in options" :key="index"
|
|
|
- :label="String.fromCharCode(65 + index)"
|
|
|
- :value="String.fromCharCode(65 + index)" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- </template>
|
|
|
+ <!-- 填空题,简答题 -->
|
|
|
+ <div v-else>
|
|
|
+ <div v-if="form.answer_type === 1">
|
|
|
+ <el-form-item label="正确答案" prop="correct_answer">
|
|
|
+ <uploadImage :limit="1" v-model="form.correct_answer"></uploadImage>
|
|
|
+ </el-form-item>
|
|
|
</div>
|
|
|
-
|
|
|
-
|
|
|
- <div v-else-if="form.topic_type === '判断题'">
|
|
|
+ <div v-else>
|
|
|
<el-form-item label="正确答案" prop="correct_answer">
|
|
|
- <el-radio-group v-model="form.correct_answer">
|
|
|
- <el-radio label="正确">正确</el-radio>
|
|
|
- <el-radio label="错误">错误</el-radio>
|
|
|
- </el-radio-group>
|
|
|
+ <el-input type="textarea" :rows="2" v-model="form.correct_answer"
|
|
|
+ placeholder="请输入正确答案"></el-input>
|
|
|
</el-form-item>
|
|
|
- <!-- 更详细的调试信息 -->
|
|
|
- <div style="color: red; font-size: 12px; background: #f0f0f0; padding: 5px; margin-top: 10px;">
|
|
|
- <div>调试信息 - 判断题:</div>
|
|
|
- <div>当前值: "{{ form.correct_answer }}"</div>
|
|
|
- <div>值类型: {{ typeof form.correct_answer }}</div>
|
|
|
- <div>值长度: {{ form.correct_answer ? form.correct_answer.length : 0 }}</div>
|
|
|
- <div>是否等于'正确': {{ form.correct_answer === '正确' }}</div>
|
|
|
- <div>是否等于'错误': {{ form.correct_answer === '错误' }}</div>
|
|
|
- <div>原始数据: {{ currentTopic ? currentTopic.correct_answer : '无' }}</div>
|
|
|
- </div>
|
|
|
</div>
|
|
|
-
|
|
|
- <!-- 填空题,简答题 -->
|
|
|
+ </div>
|
|
|
+ <el-form-item label="答案解析" prop="topic_analysis" class="mt-16">
|
|
|
+ <div v-if="form.show_type === 1">
|
|
|
+ <el-input type="textarea" :rows="3" v-model="form.topic_analysis"
|
|
|
+ placeholder="请输入题目解析"></el-input>
|
|
|
+ </div>
|
|
|
<div v-else>
|
|
|
- <div v-if="form.answer_type === 1">
|
|
|
- <el-form-item label="正确答案" prop="correct_answer">
|
|
|
- <uploadImage :limit="1" v-model="form.correct_answer"></uploadImage>
|
|
|
- </el-form-item>
|
|
|
- </div>
|
|
|
- <div v-else>
|
|
|
- <el-form-item label="正确答案" prop="correct_answer">
|
|
|
- <el-input type="textarea" :rows="2" v-model="form.correct_answer"
|
|
|
- placeholder="请输入正确答案"></el-input>
|
|
|
- </el-form-item>
|
|
|
- </div>
|
|
|
+ <uploadImage :limit="1" v-model="form.topic_analysis"></uploadImage>
|
|
|
</div>
|
|
|
- <el-form-item label="答案解析" prop="topic_analysis" class="mt-16">
|
|
|
- <div v-if="form.show_type === 1">
|
|
|
- <el-input type="textarea" :rows="3" v-model="form.topic_analysis"
|
|
|
- placeholder="请输入题目解析"></el-input>
|
|
|
- </div>
|
|
|
- <div v-else>
|
|
|
- <uploadImage :limit="1" v-model="form.topic_analysis"></uploadImage>
|
|
|
- </div>
|
|
|
- </el-form-item>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
|
|
|
- <el-form-item>
|
|
|
- <el-button type="primary" @click="submitForm">保存</el-button>
|
|
|
- <el-button @click="cancelForm">重置</el-button>
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
+ <div slot="footer" class="dialog-footer">
|
|
|
+ <el-button @click="cancelForm">取消</el-button>
|
|
|
+ <el-button type="primary" @click="submitForm">保存</el-button>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
+
|
|
|
+ <!-- 内容查看弹窗 -->
|
|
|
+ <el-dialog :visible.sync="contentDialogVisible" :title="contentDialogTitle" width="600px">
|
|
|
+ <div class="content-display">
|
|
|
+ <pre>{{ contentDialogContent }}</pre>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
+
|
|
|
+ <!-- 图片查看弹窗 -->
|
|
|
+ <el-dialog :visible.sync="imageDialogVisible" :title="imageDialogTitle" width="800px">
|
|
|
+ <div class="image-display">
|
|
|
+ <image-preview size="lg" :images="[imageDialogImage]" />
|
|
|
</div>
|
|
|
- </div>
|
|
|
- </el-dialog>
|
|
|
+ </el-dialog>
|
|
|
+ </div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
@@ -273,7 +285,15 @@ export default {
|
|
|
]
|
|
|
},
|
|
|
options: ['', '', '', ''],
|
|
|
- currentTopic: null
|
|
|
+ currentTopic: null,
|
|
|
+ // 内容查看弹窗
|
|
|
+ contentDialogVisible: false,
|
|
|
+ contentDialogTitle: '',
|
|
|
+ contentDialogContent: '',
|
|
|
+ // 图片查看弹窗
|
|
|
+ imageDialogVisible: false,
|
|
|
+ imageDialogTitle: '',
|
|
|
+ imageDialogImage: ''
|
|
|
};
|
|
|
},
|
|
|
watch: {
|
|
|
@@ -349,15 +369,6 @@ export default {
|
|
|
this.resetForm();
|
|
|
this.form.paper_id = this.paperId;
|
|
|
this.showForm = true;
|
|
|
- console.log('显示表单:', this.showForm); // 添加调试信息
|
|
|
-
|
|
|
- // 确保DOM更新后滚动到表单区域
|
|
|
- this.$nextTick(() => {
|
|
|
- const formContainer = this.$el.querySelector('.topic-form-container');
|
|
|
- if (formContainer) {
|
|
|
- formContainer.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
|
|
- }
|
|
|
- });
|
|
|
},
|
|
|
|
|
|
editTopic(topic) {
|
|
|
@@ -556,6 +567,20 @@ export default {
|
|
|
return typeMap[type] || 'default';
|
|
|
},
|
|
|
|
|
|
+ // 显示文本内容弹窗
|
|
|
+ showContentDialog(title, content) {
|
|
|
+ this.contentDialogTitle = title;
|
|
|
+ this.contentDialogContent = content;
|
|
|
+ this.contentDialogVisible = true;
|
|
|
+ },
|
|
|
+
|
|
|
+ // 显示图片内容弹窗
|
|
|
+ showImageDialog(title, image) {
|
|
|
+ this.imageDialogTitle = title;
|
|
|
+ this.imageDialogImage = image;
|
|
|
+ this.imageDialogVisible = true;
|
|
|
+ },
|
|
|
+
|
|
|
closeDialog() {
|
|
|
this.$emit('update:visible', false);
|
|
|
}
|
|
|
@@ -565,35 +590,11 @@ export default {
|
|
|
|
|
|
<style scoped>
|
|
|
.topic-manager-container {
|
|
|
- display: flex;
|
|
|
height: 70vh;
|
|
|
- transition: all 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.topic-list-container {
|
|
|
- flex: 1;
|
|
|
- padding-right: 20px;
|
|
|
- transition: width 0.3s ease;
|
|
|
-}
|
|
|
-
|
|
|
-.topic-form-container {
|
|
|
- width: 400px;
|
|
|
- padding-left: 20px;
|
|
|
- overflow-y: auto;
|
|
|
- border-left: 1px solid #eee;
|
|
|
- animation: fadeIn 0.3s ease;
|
|
|
-}
|
|
|
-
|
|
|
-@keyframes fadeIn {
|
|
|
- from {
|
|
|
- opacity: 0;
|
|
|
- transform: translateX(20px);
|
|
|
- }
|
|
|
-
|
|
|
- to {
|
|
|
- opacity: 1;
|
|
|
- transform: translateX(0);
|
|
|
- }
|
|
|
+ width: 100%;
|
|
|
}
|
|
|
|
|
|
.topic-list-header {
|
|
|
@@ -612,6 +613,36 @@ export default {
|
|
|
-webkit-box-orient: vertical;
|
|
|
}
|
|
|
|
|
|
+.topic-content.clickable {
|
|
|
+ cursor: pointer;
|
|
|
+ transition: all 0.3s ease;
|
|
|
+}
|
|
|
+
|
|
|
+.topic-content.clickable:hover {
|
|
|
+ background-color: #f5f7fa;
|
|
|
+ border-radius: 4px;
|
|
|
+ padding: 4px;
|
|
|
+}
|
|
|
+
|
|
|
+.content-display {
|
|
|
+ max-height: 400px;
|
|
|
+ overflow-y: auto;
|
|
|
+}
|
|
|
+
|
|
|
+.content-display pre {
|
|
|
+ white-space: pre-wrap;
|
|
|
+ word-wrap: break-word;
|
|
|
+ font-family: inherit;
|
|
|
+ margin: 0;
|
|
|
+ padding: 10px;
|
|
|
+ background-color: #f8f9fa;
|
|
|
+ border-radius: 4px;
|
|
|
+}
|
|
|
+
|
|
|
+.image-display {
|
|
|
+ text-align: center;
|
|
|
+}
|
|
|
+
|
|
|
.drag-tips {
|
|
|
margin-top: 10px;
|
|
|
padding: 8px 12px;
|
|
|
@@ -620,8 +651,4 @@ export default {
|
|
|
border-radius: 4px;
|
|
|
font-size: 12px;
|
|
|
}
|
|
|
-
|
|
|
-.image-preview {
|
|
|
- margin-top: 10px;
|
|
|
-}
|
|
|
</style>
|