feat: 支持指针模式复制粘贴、Markdown 链接渲染与多项优化

- 移除 Google Fonts 依赖,改用系统字体栈(优化国内访问)
- 指针模式下支持 Ctrl+C / Ctrl+V 复制粘贴选中便签与分组(自动重映射分组归属、偏移 24px 放置)
- 卡片渲染 Markdown 描述(marked + DOMPurify 消毒),新增「关联链接」按钮显示 link 字段
- 里程碑卡补渲染标签
- 忽略 *.tsbuildinfo 构建产物
This commit is contained in:
2026-08-05 21:45:09 +08:00
parent 81dd92cf22
commit 89b4c5f236
9 changed files with 244 additions and 6 deletions
@@ -3,6 +3,8 @@ import type { ParsedNote } from '@/types/card'
import { computed } from 'vue'
import StatusBadge from '@/components/shared/StatusBadge.vue'
import PriorityBadge from '@/components/shared/PriorityBadge.vue'
import CardLink from '@/components/shared/CardLink.vue'
import { renderMarkdown } from '@/utils/md'
const props = defineProps<{
card: ParsedNote
@@ -46,7 +48,10 @@ const achievementColor = computed(() => {
/>
</div>
</div>
<p class="metric-desc" v-if="card.description">{{ card.description }}</p>
<p class="metric-desc" v-if="card.description" v-html="renderMarkdown(card.description)" />
<div class="metric-link" v-if="card.link">
<CardLink :url="card.link" />
</div>
</div>
</template>
@@ -133,4 +138,28 @@ const achievementColor = computed(() => {
margin-top: 12px;
text-align: center;
}
.metric-link {
display: flex;
justify-content: center;
margin-top: 10px;
}
.metric-desc :deep(a) {
color: var(--accent);
text-decoration: none;
word-break: break-all;
}
.metric-desc :deep(a:hover) {
text-decoration: underline;
}
.metric-desc :deep(strong) {
color: var(--text-primary);
}
.metric-desc :deep(p) {
margin: 4px 0;
}
</style>