diff --git a/src/lib/components/admin/ArticleAttachments.svelte b/src/lib/components/admin/ArticleAttachments.svelte new file mode 100644 index 0000000..d828ffa --- /dev/null +++ b/src/lib/components/admin/ArticleAttachments.svelte @@ -0,0 +1,264 @@ + + +
+ {#if attachments.length === 0} +
当前文章暂无附件
+ {:else} +
+ {#each attachments as attachment (attachment.url)} +
+
+ {attachment.filename} +
+
+
{attachment.filename}
+
+ {#if attachment.source === 'session'} + 本次上传 (未引用) + {:else} + 正文引用 + {/if} +
+
+ +
+ {/each} +
+ {/if} +
+ + diff --git a/src/lib/components/admin/MarkdownEditor.svelte b/src/lib/components/admin/MarkdownEditor.svelte index 9b065e1..0f17ab7 100644 --- a/src/lib/components/admin/MarkdownEditor.svelte +++ b/src/lib/components/admin/MarkdownEditor.svelte @@ -8,7 +8,15 @@ import { placeholder as cmPlaceholder } from '@codemirror/view'; import { addToast } from '$lib/stores/toast.svelte'; - let { value = $bindable(''), placeholderText = '支持 Markdown 格式...' } = $props(); + let { + value = $bindable(''), + placeholderText = '支持 Markdown 格式...', + onUpload + } = $props<{ + value?: string; + placeholderText?: string; + onUpload?: (file: { url: string; key: string; filename: string }) => void; + }>(); let editorContainer: HTMLDivElement; let view: EditorView; @@ -36,6 +44,9 @@ if (data.success) { insertAtCursor('![', `](${data.url})`, file.name || '图片'); addToast('图片上传成功', 'success'); + if (onUpload) { + onUpload({ url: data.url, key: data.key, filename: data.filename }); + } } else { addToast(data.error || '上传失败', 'error'); }