From 5036daea3ee8c82b6f12a9645fd0518e757fa2d3 Mon Sep 17 00:00:00 2001 From: douboer Date: Sat, 7 Feb 2026 12:55:25 +0800 Subject: [PATCH] update at 2026-02-07 12:55:25 --- .gitignore | 1 + README.md | 2 +- frontend/index.html | 2 +- .../webicon.svg => public/favicon.svg} | 0 frontend/src/App.vue | 32 ++++++++++++------ frontend/{ => src}/assets/icons/Button.svg | 0 frontend/{ => src}/assets/icons/checkbox.svg | 0 .../{ => src}/assets/icons/choose-color.svg | 0 frontend/{ => src}/assets/icons/expand.svg | 0 .../{ => src}/assets/icons/export-png.svg | 0 .../{ => src}/assets/icons/export-svg.svg | 0 frontend/{ => src}/assets/icons/export.svg | 0 frontend/{ => src}/assets/icons/font-icon.svg | 0 .../assets/icons/font-size-decrease.svg | 0 .../assets/icons/font-size-increase.svg | 0 .../{ => src}/assets/icons/icons_idx _12.svg | 0 .../{ => src}/assets/icons/icons_idx _18.svg | 0 .../{ => src}/assets/icons/icons_idx _19.svg | 0 .../{ => src}/assets/icons/icons_idx _29.svg | 0 .../{ => src}/assets/icons/icons_idx _32.svg | 0 .../{ => src}/assets/icons/icons_idx _33.svg | 0 .../{ => src}/assets/icons/icons_idx _34.svg | 0 .../{ => src}/assets/icons/icons_idx _35.svg | 0 .../{ => src}/assets/icons/icons_idx _36.svg | 0 .../{ => src}/assets/icons/icons_idx _37.svg | 0 .../{ => src}/assets/icons/icons_idx _38.svg | 0 frontend/{ => src}/assets/icons/zhedie.svg | 0 frontend/{ => src}/assets/icons/星程字体.svg | 0 .../{ => src}/assets/icons/星程字体转换.svg | 0 frontend/{ => src}/assets/snapshot.png | Bin frontend/{ => src}/assets/vue.svg | 0 frontend/{ => src}/assets/webicon.png | Bin frontend/src/assets/webicon.svg | 9 +++++ frontend/src/components/FavoritesList.vue | 6 ++-- frontend/src/components/FontTree.vue | 12 +++---- frontend/src/components/SvgPreview.vue | 4 +-- frontend/src/types/modules.d.ts | 12 ++++++- frontend/vite.config.ts | 7 ---- 38 files changed, 56 insertions(+), 31 deletions(-) rename frontend/{assets/webicon.svg => public/favicon.svg} (100%) rename frontend/{ => src}/assets/icons/Button.svg (100%) rename frontend/{ => src}/assets/icons/checkbox.svg (100%) rename frontend/{ => src}/assets/icons/choose-color.svg (100%) rename frontend/{ => src}/assets/icons/expand.svg (100%) rename frontend/{ => src}/assets/icons/export-png.svg (100%) rename frontend/{ => src}/assets/icons/export-svg.svg (100%) rename frontend/{ => src}/assets/icons/export.svg (100%) rename frontend/{ => src}/assets/icons/font-icon.svg (100%) rename frontend/{ => src}/assets/icons/font-size-decrease.svg (100%) rename frontend/{ => src}/assets/icons/font-size-increase.svg (100%) rename frontend/{ => src}/assets/icons/icons_idx _12.svg (100%) rename frontend/{ => src}/assets/icons/icons_idx _18.svg (100%) rename frontend/{ => src}/assets/icons/icons_idx _19.svg (100%) rename frontend/{ => src}/assets/icons/icons_idx _29.svg (100%) rename frontend/{ => src}/assets/icons/icons_idx _32.svg (100%) rename frontend/{ => src}/assets/icons/icons_idx _33.svg (100%) rename frontend/{ => src}/assets/icons/icons_idx _34.svg (100%) rename frontend/{ => src}/assets/icons/icons_idx _35.svg (100%) rename frontend/{ => src}/assets/icons/icons_idx _36.svg (100%) rename frontend/{ => src}/assets/icons/icons_idx _37.svg (100%) rename frontend/{ => src}/assets/icons/icons_idx _38.svg (100%) rename frontend/{ => src}/assets/icons/zhedie.svg (100%) rename frontend/{ => src}/assets/icons/星程字体.svg (100%) rename frontend/{ => src}/assets/icons/星程字体转换.svg (100%) rename frontend/{ => src}/assets/snapshot.png (100%) rename frontend/{ => src}/assets/vue.svg (100%) rename frontend/{ => src}/assets/webicon.png (100%) create mode 100644 frontend/src/assets/webicon.svg diff --git a/.gitignore b/.gitignore index 6a4b9fe..006f18f 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,4 @@ dist-ssr *.sw? *.ttf +vite.config.ts diff --git a/README.md b/README.md index f1c08eb..228cfa6 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ ## 界面快照 -![snapshot](frontend/assets/snapshot.png) +![snapshot](frontend/src/assets/snapshot.png) ## 当前功能 diff --git a/frontend/index.html b/frontend/index.html index f41c537..7ec0630 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -2,7 +2,7 @@ - + Font2SVG - 字体转SVG工具 diff --git a/frontend/assets/webicon.svg b/frontend/public/favicon.svg similarity index 100% rename from frontend/assets/webicon.svg rename to frontend/public/favicon.svg diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 0cfb520..4423552 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -62,9 +62,15 @@ async function handleExport(format: ExportFormat) { if (selectedItems.length === 1) { // 单个字体,直接下载 SVG const item = selectedItems[0] + if (!item?.fontInfo.font) { + alert('选中字体未加载完成,请稍后重试') + return + } + + const font = item.fontInfo.font const svgResult = await generateSvg({ text: inputText, - font: item.fontInfo.font, + font, fontSize: uiStore.fontSize, fillColor: uiStore.textColor, letterSpacing: 0 @@ -87,9 +93,15 @@ async function handleExport(format: ExportFormat) { for (const item of selectedItems) { try { + const font = item.fontInfo.font + if (!font) { + console.warn(`字体 ${item.fontInfo.name} 尚未加载,已跳过导出`) + continue + } + const svgResult = await generateSvg({ text: inputText, - font: item.fontInfo.font, + font, fontSize: uiStore.fontSize, fillColor: uiStore.textColor, letterSpacing: 0 @@ -161,12 +173,12 @@ console.log('App.vue: script setup completed')
- logo + logo
- 星程SVG文字生成 TEXT to SVG + 星程SVG文字生成 TEXT to SVG
@@ -176,7 +188,7 @@ console.log('App.vue: script setup completed') class="w-4 h-4 shrink-0 cursor-pointer hover:opacity-70 transition-opacity flex items-center justify-center p-0 border-0 bg-transparent" title="减小字体" > - A- + A-
- A+ + A+
diff --git a/frontend/assets/icons/Button.svg b/frontend/src/assets/icons/Button.svg similarity index 100% rename from frontend/assets/icons/Button.svg rename to frontend/src/assets/icons/Button.svg diff --git a/frontend/assets/icons/checkbox.svg b/frontend/src/assets/icons/checkbox.svg similarity index 100% rename from frontend/assets/icons/checkbox.svg rename to frontend/src/assets/icons/checkbox.svg diff --git a/frontend/assets/icons/choose-color.svg b/frontend/src/assets/icons/choose-color.svg similarity index 100% rename from frontend/assets/icons/choose-color.svg rename to frontend/src/assets/icons/choose-color.svg diff --git a/frontend/assets/icons/expand.svg b/frontend/src/assets/icons/expand.svg similarity index 100% rename from frontend/assets/icons/expand.svg rename to frontend/src/assets/icons/expand.svg diff --git a/frontend/assets/icons/export-png.svg b/frontend/src/assets/icons/export-png.svg similarity index 100% rename from frontend/assets/icons/export-png.svg rename to frontend/src/assets/icons/export-png.svg diff --git a/frontend/assets/icons/export-svg.svg b/frontend/src/assets/icons/export-svg.svg similarity index 100% rename from frontend/assets/icons/export-svg.svg rename to frontend/src/assets/icons/export-svg.svg diff --git a/frontend/assets/icons/export.svg b/frontend/src/assets/icons/export.svg similarity index 100% rename from frontend/assets/icons/export.svg rename to frontend/src/assets/icons/export.svg diff --git a/frontend/assets/icons/font-icon.svg b/frontend/src/assets/icons/font-icon.svg similarity index 100% rename from frontend/assets/icons/font-icon.svg rename to frontend/src/assets/icons/font-icon.svg diff --git a/frontend/assets/icons/font-size-decrease.svg b/frontend/src/assets/icons/font-size-decrease.svg similarity index 100% rename from frontend/assets/icons/font-size-decrease.svg rename to frontend/src/assets/icons/font-size-decrease.svg diff --git a/frontend/assets/icons/font-size-increase.svg b/frontend/src/assets/icons/font-size-increase.svg similarity index 100% rename from frontend/assets/icons/font-size-increase.svg rename to frontend/src/assets/icons/font-size-increase.svg diff --git a/frontend/assets/icons/icons_idx _12.svg b/frontend/src/assets/icons/icons_idx _12.svg similarity index 100% rename from frontend/assets/icons/icons_idx _12.svg rename to frontend/src/assets/icons/icons_idx _12.svg diff --git a/frontend/assets/icons/icons_idx _18.svg b/frontend/src/assets/icons/icons_idx _18.svg similarity index 100% rename from frontend/assets/icons/icons_idx _18.svg rename to frontend/src/assets/icons/icons_idx _18.svg diff --git a/frontend/assets/icons/icons_idx _19.svg b/frontend/src/assets/icons/icons_idx _19.svg similarity index 100% rename from frontend/assets/icons/icons_idx _19.svg rename to frontend/src/assets/icons/icons_idx _19.svg diff --git a/frontend/assets/icons/icons_idx _29.svg b/frontend/src/assets/icons/icons_idx _29.svg similarity index 100% rename from frontend/assets/icons/icons_idx _29.svg rename to frontend/src/assets/icons/icons_idx _29.svg diff --git a/frontend/assets/icons/icons_idx _32.svg b/frontend/src/assets/icons/icons_idx _32.svg similarity index 100% rename from frontend/assets/icons/icons_idx _32.svg rename to frontend/src/assets/icons/icons_idx _32.svg diff --git a/frontend/assets/icons/icons_idx _33.svg b/frontend/src/assets/icons/icons_idx _33.svg similarity index 100% rename from frontend/assets/icons/icons_idx _33.svg rename to frontend/src/assets/icons/icons_idx _33.svg diff --git a/frontend/assets/icons/icons_idx _34.svg b/frontend/src/assets/icons/icons_idx _34.svg similarity index 100% rename from frontend/assets/icons/icons_idx _34.svg rename to frontend/src/assets/icons/icons_idx _34.svg diff --git a/frontend/assets/icons/icons_idx _35.svg b/frontend/src/assets/icons/icons_idx _35.svg similarity index 100% rename from frontend/assets/icons/icons_idx _35.svg rename to frontend/src/assets/icons/icons_idx _35.svg diff --git a/frontend/assets/icons/icons_idx _36.svg b/frontend/src/assets/icons/icons_idx _36.svg similarity index 100% rename from frontend/assets/icons/icons_idx _36.svg rename to frontend/src/assets/icons/icons_idx _36.svg diff --git a/frontend/assets/icons/icons_idx _37.svg b/frontend/src/assets/icons/icons_idx _37.svg similarity index 100% rename from frontend/assets/icons/icons_idx _37.svg rename to frontend/src/assets/icons/icons_idx _37.svg diff --git a/frontend/assets/icons/icons_idx _38.svg b/frontend/src/assets/icons/icons_idx _38.svg similarity index 100% rename from frontend/assets/icons/icons_idx _38.svg rename to frontend/src/assets/icons/icons_idx _38.svg diff --git a/frontend/assets/icons/zhedie.svg b/frontend/src/assets/icons/zhedie.svg similarity index 100% rename from frontend/assets/icons/zhedie.svg rename to frontend/src/assets/icons/zhedie.svg diff --git a/frontend/assets/icons/星程字体.svg b/frontend/src/assets/icons/星程字体.svg similarity index 100% rename from frontend/assets/icons/星程字体.svg rename to frontend/src/assets/icons/星程字体.svg diff --git a/frontend/assets/icons/星程字体转换.svg b/frontend/src/assets/icons/星程字体转换.svg similarity index 100% rename from frontend/assets/icons/星程字体转换.svg rename to frontend/src/assets/icons/星程字体转换.svg diff --git a/frontend/assets/snapshot.png b/frontend/src/assets/snapshot.png similarity index 100% rename from frontend/assets/snapshot.png rename to frontend/src/assets/snapshot.png diff --git a/frontend/assets/vue.svg b/frontend/src/assets/vue.svg similarity index 100% rename from frontend/assets/vue.svg rename to frontend/src/assets/vue.svg diff --git a/frontend/assets/webicon.png b/frontend/src/assets/webicon.png similarity index 100% rename from frontend/assets/webicon.png rename to frontend/src/assets/webicon.png diff --git a/frontend/src/assets/webicon.svg b/frontend/src/assets/webicon.svg new file mode 100644 index 0000000..bd830bc --- /dev/null +++ b/frontend/src/assets/webicon.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/frontend/src/components/FavoritesList.vue b/frontend/src/components/FavoritesList.vue index 10e160f..bf2804d 100644 --- a/frontend/src/components/FavoritesList.vue +++ b/frontend/src/components/FavoritesList.vue @@ -38,7 +38,7 @@ function isInPreview(fontId: string): boolean { >
- font + font
@@ -52,7 +52,7 @@ function isInPreview(fontId: string): boolean { class="w-[18px] h-[18px] shrink-0 border rounded-full flex items-center justify-center p-0 bg-transparent" :class="isInPreview(font.id) ? 'bg-[#9b6bc2] border-[#9b6bc2]' : 'border-[#c9cdd4]'" > - 选中 + 选中 @@ -61,7 +61,7 @@ function isInPreview(fontId: string): boolean { class="w-[18px] h-[17px] shrink-0 p-0 border-0 bg-transparent" > 收藏 收起 展开 @@ -79,7 +79,7 @@ function isInPreview(node: FontTreeNode): boolean {
@@ -88,7 +88,7 @@ function isInPreview(node: FontTreeNode): boolean {
- font + font
@@ -102,7 +102,7 @@ function isInPreview(node: FontTreeNode): boolean { class="w-[18px] h-[18px] shrink-0 border rounded-full flex items-center justify-center p-0 bg-transparent" :class="isInPreview(child) ? 'bg-[#9b6bc2] border-[#9b6bc2]' : 'border-[#c9cdd4]'" > - 选中 + 选中 @@ -111,7 +111,7 @@ function isInPreview(node: FontTreeNode): boolean { class="w-[18px] h-[17px] shrink-0 p-0 border-0 bg-transparent" > 收藏
- 字体 + 字体
@@ -109,7 +109,7 @@ function toggleSelectItem(item: PreviewItemType) { class="w-[18px] h-[18px] shrink-0 border rounded-full flex items-center justify-center p-0 bg-transparent" :class="item.selected ? 'bg-[#9b6bc2] border-[#9b6bc2]' : 'border-[#c9cdd4]'" > - 选中 + 选中
diff --git a/frontend/src/types/modules.d.ts b/frontend/src/types/modules.d.ts index 8a191cd..78ac49d 100644 --- a/frontend/src/types/modules.d.ts +++ b/frontend/src/types/modules.d.ts @@ -48,4 +48,14 @@ declare module 'opentype.js' { declare module 'harfbuzzjs' { export default function (): Promise -} \ No newline at end of file +} + +declare module 'harfbuzzjs/hb.js' { + const createHarfBuzz: any + export default createHarfBuzz +} + +declare module 'harfbuzzjs/hbjs.js' { + const bindHarfBuzz: any + export default bindHarfBuzz +} diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index f5221e2..4e63245 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -2,9 +2,6 @@ import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import UnoCSS from 'unocss/vite' import wasm from 'vite-plugin-wasm' -import fs from 'fs' -import path from 'path' -import { homedir } from 'os' // https://vite.dev/config/ export default defineConfig({ @@ -18,9 +15,5 @@ export default defineConfig({ server: { host: '0.0.0.0', port: 5174, - https: { - key: fs.readFileSync(path.join(homedir(), 'mac.biboer.cn_ecc/mac.biboer.cn.key')), - cert: fs.readFileSync(path.join(homedir(), 'mac.biboer.cn_ecc/fullchain.cer')) - } } })