Skip to content

Commit 9b31f83

Browse files
committed
新增功能 - 优化 Markdown 中 Mermaid 图表的展示
1 parent 571e841 commit 9b31f83

File tree

2 files changed

+43
-22
lines changed

2 files changed

+43
-22
lines changed

coder-test-frontend/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@
88
"preview": "vite preview"
99
},
1010
"dependencies": {
11+
"@bytemd/plugin-gfm": "^1.22.0",
12+
"@bytemd/plugin-mermaid": "^1.22.0",
13+
"@bytemd/vue-next": "^1.22.0",
1114
"@element-plus/icons-vue": "^2.3.1",
1215
"axios": "^1.6.2",
1316
"element-plus": "^2.4.4",
14-
"markdown-it": "^14.1.0",
1517
"pinia": "^2.1.7",
1618
"vue": "^3.4.0",
1719
"vue-router": "^4.2.5"

coder-test-frontend/src/views/Result.vue

Lines changed: 40 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,9 @@
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'
142144
import { useUserStore } from '../stores/user'
143145
import { getUserLevelDetail } from '../api/userLevel'
144146
import { 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'
146150
import {
147151
KnifeFork,
148152
Clock,
@@ -154,18 +158,18 @@ import {
154158
} from '@element-plus/icons-vue'
155159
import GlobalNavbar from '../components/GlobalNavbar.vue'
156160
161+
// 导入 ByteMD 样式
162+
import 'bytemd/dist/index.css'
163+
157164
const route = useRoute()
158165
const router = useRouter()
159166
const 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
170174
const user = computed(() => userStore.user)
171175
const 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

Comments
 (0)