From 25abc09cb4954fdf598fac4bcedb70a1159bbcb7 Mon Sep 17 00:00:00 2001 From: lixinran Date: Wed, 10 Sep 2025 18:35:29 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=A1=A8=E6=A0=BC=E6=B8=B2=E6=9F=93?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E9=87=8D=E6=96=B0=EF=BC=88=E5=AE=8C=E6=95=B4?= =?UTF-8?q?=E7=89=88=EF=BC=89=E3=80=81=E9=A1=B9=E7=9B=AE=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=B8=85=E7=90=86=E5=92=8C=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/mindmap.db | Bin 3010560 -> 3022848 bytes frontend/src/lib/mind-elixir/src/dev.ts | 9 +++- frontend/src/lib/mind-elixir/src/index.less | 54 ++++++++++++++++++++ mind-elixir-core-master/src/dev.ts | 9 +++- mind-elixir-core-master/src/index.less | 54 ++++++++++++++++++++ 5 files changed, 124 insertions(+), 2 deletions(-) diff --git a/backend/mindmap.db b/backend/mindmap.db index 29149a0412801aaeb65d8dacb67818559bbc9760..fe4c9242974ad22b4da834150f908cfff3776425 100644 GIT binary patch delta 8416 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 }, + table(token: Tokens.Table) { + const header = token.header.map(cell => `${cell.text}`).join('') + const rows = token.rows.map(row => + `${row.map(cell => `${cell.text}`).join('')}` + ).join('') + return `${header}${rows}
` + }, } marked.use({ renderer, gfm: true }) diff --git a/frontend/src/lib/mind-elixir/src/index.less b/frontend/src/lib/mind-elixir/src/index.less index 48f580f..4243e26 100644 --- a/frontend/src/lib/mind-elixir/src/index.less +++ b/frontend/src/lib/mind-elixir/src/index.less @@ -317,4 +317,58 @@ background: #4f90f22d; border: 1px solid #4f90f2; } + + /* Markdown表格样式 */ + .markdown-table { + border-collapse: collapse; + width: 100%; + margin: 4px 0; + font-size: 11px; + border: 1px solid #e0e0e0; + border-radius: 6px; + box-shadow: 0 2px 8px rgba(0,0,0,0.08); + background-color: #fafafa; + overflow: hidden; + white-space: normal !important; /* 覆盖MindElixir的pre-wrap */ + } + + .markdown-table th, + .markdown-table td { + border: 1px solid #e0e0e0; + padding: 8px 12px; + text-align: left; + vertical-align: top; + position: relative; + white-space: normal !important; /* 覆盖MindElixir的pre-wrap */ + } + + .markdown-table th { + background-color: #f5f5f5; + font-weight: 600; + color: #333; + text-align: center; + border-bottom: 1px solid #d0d0d0; + } + + .markdown-table td { + background-color: #fff; + } + + .markdown-table tr:nth-child(even) td { + background-color: #f8f8f8; + } + + .markdown-table tr:hover td { + background-color: #f0f8ff; + } + + /* 移除多余的边框,保持简洁 */ + .markdown-table th:not(:last-child), + .markdown-table td:not(:last-child) { + border-right: 1px solid #e0e0e0; + } + + .markdown-table tr:not(:last-child) td { + border-bottom: 1px solid #e0e0e0; + } } diff --git a/mind-elixir-core-master/src/dev.ts b/mind-elixir-core-master/src/dev.ts index 4c7b732..8bce31b 100644 --- a/mind-elixir-core-master/src/dev.ts +++ b/mind-elixir-core-master/src/dev.ts @@ -38,7 +38,7 @@ const options: Options = { if (!text) return '' if (!obj.useMd) return text try { - // Configure marked renderer to add target="_blank" to links + // Configure marked renderer to add target="_blank" to links and table classes const renderer = { link(token: Tokens.Link) { const href = token.href || '' @@ -46,6 +46,13 @@ const options: Options = { const text = token.text || '' return `${text}` }, + table(token: Tokens.Table) { + const header = token.header.map(cell => `${cell.text}`).join('') + const rows = token.rows.map(row => + `${row.map(cell => `${cell.text}`).join('')}` + ).join('') + return `${header}${rows}
` + }, } marked.use({ renderer, gfm: true }) diff --git a/mind-elixir-core-master/src/index.less b/mind-elixir-core-master/src/index.less index 48f580f..4243e26 100644 --- a/mind-elixir-core-master/src/index.less +++ b/mind-elixir-core-master/src/index.less @@ -317,4 +317,58 @@ background: #4f90f22d; border: 1px solid #4f90f2; } + + /* Markdown表格样式 */ + .markdown-table { + border-collapse: collapse; + width: 100%; + margin: 4px 0; + font-size: 11px; + border: 1px solid #e0e0e0; + border-radius: 6px; + box-shadow: 0 2px 8px rgba(0,0,0,0.08); + background-color: #fafafa; + overflow: hidden; + white-space: normal !important; /* 覆盖MindElixir的pre-wrap */ + } + + .markdown-table th, + .markdown-table td { + border: 1px solid #e0e0e0; + padding: 8px 12px; + text-align: left; + vertical-align: top; + position: relative; + white-space: normal !important; /* 覆盖MindElixir的pre-wrap */ + } + + .markdown-table th { + background-color: #f5f5f5; + font-weight: 600; + color: #333; + text-align: center; + border-bottom: 1px solid #d0d0d0; + } + + .markdown-table td { + background-color: #fff; + } + + .markdown-table tr:nth-child(even) td { + background-color: #f8f8f8; + } + + .markdown-table tr:hover td { + background-color: #f0f8ff; + } + + /* 移除多余的边框,保持简洁 */ + .markdown-table th:not(:last-child), + .markdown-table td:not(:last-child) { + border-right: 1px solid #e0e0e0; + } + + .markdown-table tr:not(:last-child) td { + border-bottom: 1px solid #e0e0e0; + } }