119119 </template >
120120
121121 <div class =" analysis-content" >
122- <div class =" markdown-content" v-html =" formattedStandardAnswer" ></div >
122+ <div class =" markdown-content" >
123+ <Viewer :value =" standardAnswerContent" :plugins =" plugins" />
124+ </div >
123125 </div >
124126 </el-card >
125127 </div >
@@ -142,7 +144,9 @@ import { useRoute, useRouter } from 'vue-router'
142144import { useUserStore } from ' ../stores/user'
143145import { getUserLevelDetail } from ' ../api/userLevel'
144146import { ElMessage } from ' element-plus'
145- import MarkdownIt from ' markdown-it'
147+ import { Viewer } from ' @bytemd/vue-next'
148+ import gfm from ' @bytemd/plugin-gfm'
149+ import mermaid from ' @bytemd/plugin-mermaid'
146150import {
147151 KnifeFork ,
148152 Clock ,
@@ -154,18 +158,18 @@ import {
154158} from ' @element-plus/icons-vue'
155159import GlobalNavbar from ' ../components/GlobalNavbar.vue'
156160
161+ // 导入 ByteMD 样式
162+ import ' bytemd/dist/index.css'
163+
157164const route = useRoute ()
158165const router = useRouter ()
159166const userStore = useUserStore ()
160167
161- // 初始化 Markdown 渲染器
162- const md = new MarkdownIt ({
163- html: false , // 禁用 HTML 标签
164- xhtmlOut: false , // 使用 HTML 标签而不是 XHTML
165- breaks: true , // 自动换行
166- linkify: true , // 自动识别链接
167- typographer: true // 启用智能引号和其他印刷符号
168- })
168+ // 配置 ByteMD 插件
169+ const plugins = [
170+ gfm (),
171+ mermaid ()
172+ ]
169173
170174const user = computed (() => userStore .user )
171175const loading = ref (false )
@@ -186,17 +190,9 @@ const trueOptionsList = computed(() => {
186190 }
187191})
188192
189- // 格式化标准答案(使用 markdown-it 渲染)
190- const formattedStandardAnswer = computed (() => {
191- if (! resultData .value ? .standardAnswer ) return ' '
192-
193- try {
194- return md .render (resultData .value .standardAnswer )
195- } catch (error) {
196- console .error (' Markdown 渲染失败:' , error)
197- // 如果渲染失败,回退到原始文本
198- return resultData .value .standardAnswer .replace (/ \n / g , ' <br>' )
199- }
193+ // 获取标准答案内容
194+ const standardAnswerContent = computed (() => {
195+ return resultData .value ? .standardAnswer || ' '
200196})
201197
202198// 获取分数样式类
@@ -483,6 +479,29 @@ onMounted(() => {
483479 color: var (-- text- secondary);
484480}
485481
482+ /* ByteMD Viewer 样式覆盖 */
483+ .markdown - content : deep (.bytemd - viewer ) {
484+ background: transparent;
485+ font- family: inherit;
486+ }
487+
488+ /* Mermaid 图表样式 */
489+ .markdown - content : deep (.mermaid ) {
490+ display: flex;
491+ justify- content: center;
492+ margin: 20px 0 ;
493+ background: var (-- bg- card);
494+ border- radius: 8px ;
495+ padding: 16px ;
496+ border: 1px solid var (-- border- light);
497+ box- shadow: 0 2px 8px var (-- shadow- light);
498+ }
499+
500+ .markdown - content : deep (.mermaid svg ) {
501+ max- width: 100 % ;
502+ height: auto;
503+ }
504+
486505/* 标题样式 */
487506.markdown - content : deep (h1),
488507.markdown - content : deep (h2),
0 commit comments