fix(admin-web): make article copy robust
Frontend CI / Frontend (push) Successful in 2m54s

This commit is contained in:
2026-05-20 17:00:57 +08:00
parent 6359a2ddd3
commit eda90ea1e4
7 changed files with 34 additions and 26 deletions
+2 -1
View File
@@ -18,6 +18,7 @@ import PublishArticleModal from '@/components/PublishArticleModal.vue'
import { articlesApi } from '@/lib/api'
import { buildArticleClipboardContent, resolveArticleActionState } from '@/lib/article-list-actions'
import { useArticleRegenerateAction } from '@/lib/article-regenerate-action'
import { copyTextToClipboard } from '@/lib/clipboard'
import { getGenerateStatusMeta, getPublishStatusMeta, hasActiveGenerationStatus } from '@/lib/display'
import { formatError } from '@/lib/errors'
import { useCompanyStore } from '@/stores/company'
@@ -268,7 +269,7 @@ async function copyArticle(articleId: number): Promise<void> {
return
}
await navigator.clipboard.writeText(content)
await copyTextToClipboard(content)
message.success(t('common.copySuccess'))
} catch (error) {
message.error(formatError(error) || t('common.noData'))
@@ -16,6 +16,7 @@ import { computed, ref, watch } from 'vue'
import { useI18n } from 'vue-i18n'
import { publishTasksApi, tenantAccountsApi } from '@/lib/api'
import { copyTextToClipboard } from '@/lib/clipboard'
import { formatDateTime } from '@/lib/display'
import { formatError } from '@/lib/errors'
import { resolvePlatformLogoUrl } from '@/lib/publish-account-cards'
@@ -473,23 +474,6 @@ function rowClassName(record: PublishTaskItem): string {
return isPendingStatus(record.status) ? 'publish-management-row--pending' : ''
}
async function copyTextToClipboard(text: string): Promise<void> {
if (navigator.clipboard?.writeText) {
await navigator.clipboard.writeText(text)
return
}
const textarea = document.createElement('textarea')
textarea.value = text
textarea.setAttribute('readonly', 'true')
textarea.style.position = 'fixed'
textarea.style.left = '-9999px'
document.body.appendChild(textarea)
textarea.select()
document.execCommand('copy')
document.body.removeChild(textarea)
}
async function copyErrorMessage(record: PublishTaskItem): Promise<void> {
if (!record.errorMessage) {
return
+2 -1
View File
@@ -34,6 +34,7 @@ import PublishArticleModal from '@/components/PublishArticleModal.vue'
import { articlesApi, templatesApi, workspaceApi } from '@/lib/api'
import { buildArticleClipboardContent, resolveArticleActionState } from '@/lib/article-list-actions'
import { useArticleRegenerateAction } from '@/lib/article-regenerate-action'
import { copyTextToClipboard } from '@/lib/clipboard'
import {
formatDateTime,
getGenerateStatusMeta,
@@ -466,7 +467,7 @@ async function copyArticle(articleId: number): Promise<void> {
return
}
await navigator.clipboard.writeText(content)
await copyTextToClipboard(content)
message.success(t('common.copySuccess'))
} catch (error) {
message.error(formatError(error) || t('common.noData'))
+2 -1
View File
@@ -29,6 +29,7 @@ import PublishArticleModal from '@/components/PublishArticleModal.vue'
import { articlesApi, tenantAccountsApi, workspaceApi } from '@/lib/api'
import { buildArticleClipboardContent, resolveArticleActionState } from '@/lib/article-list-actions'
import { useArticleRegenerateAction } from '@/lib/article-regenerate-action'
import { copyTextToClipboard } from '@/lib/clipboard'
import { formatDateTime, getTemplateMeta, hasActiveGenerationStatus } from '@/lib/display'
import { formatError } from '@/lib/errors'
import { isMediaPublishAccount } from '@/lib/publish-platforms'
@@ -265,7 +266,7 @@ async function copyArticle(articleId: number): Promise<void> {
return
}
await navigator.clipboard.writeText(content)
await copyTextToClipboard(content)
message.success(t('common.copySuccess'))
} catch (error) {
message.error(formatError(error) || t('common.noData'))