From 992ae11b2161fb6ecc0376324651fd442bbe4f42 Mon Sep 17 00:00:00 2001 From: www Date: Sun, 19 Apr 2026 19:37:53 +0800 Subject: [PATCH] feat: improve spider md github links and copy actions --- src/api/interface/site/list.ts | 14 +++ src/views/site/domainSpiderMdDialog.vue | 159 +++++++++++++++++------- 2 files changed, 125 insertions(+), 48 deletions(-) diff --git a/src/api/interface/site/list.ts b/src/api/interface/site/list.ts index cb7003e..fcd9e01 100644 --- a/src/api/interface/site/list.ts +++ b/src/api/interface/site/list.ts @@ -1530,8 +1530,13 @@ export namespace SiteList { gitee_push_attempted?: number; gitee_push_status?: string; gitee_push_error?: string; + github_pushed?: number; + github_push_attempted?: number; + github_push_status?: string; + github_push_error?: string; files?: DomainSpiderMdFileItem[]; gitee_files?: DomainSpiderMdFileItem[]; + github_files?: DomainSpiderMdFileItem[]; } export interface DomainSpiderMdSummaryData { @@ -1564,6 +1569,15 @@ export namespace SiteList { root?: string; sources?: Record; }; + github?: { + enabled?: number; + configured?: number; + owner?: string; + repo?: string; + branch?: string; + root?: string; + sources?: Record; + }; latest_run?: DomainSpiderMdRunSummaryItem | null; runs?: DomainSpiderMdRunSummaryItem[]; } diff --git a/src/views/site/domainSpiderMdDialog.vue b/src/views/site/domainSpiderMdDialog.vue index 6703d7d..bd96a5f 100644 --- a/src/views/site/domainSpiderMdDialog.vue +++ b/src/views/site/domainSpiderMdDialog.vue @@ -6,13 +6,13 @@ 强制重生成 继续查看任务 刷新 - 当天若仅 Gitee 推送失败,可直接再次点击“生成并推送”重试,无需强制重生成。 + 当天若仅远端推送失败,可直接再次点击“生成并推送”重试,无需强制重生成。 @@ -20,10 +20,15 @@ {{ summary.run_root || "-" }} {{ summary.gitee?.root || "-" }} + {{ summary.github?.root || "-" }} {{ summary.gitee?.owner && summary.gitee?.repo ? `${summary.gitee.owner}/${summary.gitee.repo}` : "-" }} + + {{ summary.github?.owner && summary.github?.repo ? `${summary.github.owner}/${summary.github.repo}` : "-" }} + {{ summary.gitee?.branch || "-" }} + {{ summary.github?.branch || "-" }} {{ summary.runtime_config?.max_links_per_file || "-" }} {{ summary.runtime_config?.detail_limit_per_host || 0 }} / {{ summary.runtime_config?.forge_limit_per_host || 0 }} @@ -35,6 +40,9 @@ Gitee开关 {{ summary.gitee?.sources?.enabled || "-" }} / 根目录 {{ summary.gitee?.sources?.root || "-" }} + + GitHub开关 {{ summary.github?.sources?.enabled || "-" }} / 根目录 {{ summary.github?.sources?.root || "-" }} +
@@ -101,14 +102,14 @@ + + + @@ -165,20 +179,26 @@ const formatDateTime = (value?: string) => { return `${year}-${month}-${day} ${hour}:${minute}:${second}`; }; -const giteeTitle = computed(() => { - if (summary.value.gitee?.configured) { - return "当前已配置 Gitee 自动推送,生成后会自动返回可复制链接"; - } - if (summary.value.gitee?.enabled) { - return "Gitee 已启用但未配完整,当前只能保留本地文件"; - } - return "当前未启用 Gitee 推送,生成后仅保留本地文件"; +const remoteConfigured = computed(() => { + return Boolean(summary.value.gitee?.configured || summary.value.github?.configured); }); -const giteeDescription = computed(() => { +const remoteTitle = computed(() => { + if (summary.value.gitee?.configured || summary.value.github?.configured) { + return "当前已配置远端自动推送,生成后会自动返回可复制链接"; + } + if (summary.value.gitee?.enabled || summary.value.github?.enabled) { + return "远端推送已启用但未配完整,当前只能保留本地文件"; + } + return "当前未启用远端推送,生成后仅保留本地文件"; +}); + +const remoteDescription = computed(() => { const gitee = summary.value.gitee || {}; - const repo = gitee.owner && gitee.repo ? `${gitee.owner}/${gitee.repo}` : "未配置仓库"; - return `仓库:${repo};分支:${gitee.branch || "-"};根目录:${gitee.root || "-"}`; + const github = summary.value.github || {}; + const giteeRepo = gitee.owner && gitee.repo ? `${gitee.owner}/${gitee.repo}` : "未配置"; + const githubRepo = github.owner && github.repo ? `${github.owner}/${github.repo}` : "未配置"; + return `Gitee:${giteeRepo} / ${gitee.branch || "-"} / ${gitee.root || "-"};GitHub:${githubRepo} / ${github.branch || "-"} / ${github.root || "-"}`; }); const latestRunTitle = computed(() => { @@ -194,19 +214,60 @@ const latestRunDescription = computed(() => { const fileCount = Number(row.file_count || 0); const totalLinks = Number(row.total_links || 0); const runRoot = String(row.run_root || "").trim() || "-"; - const pushStatus = String(row.gitee_push_status || "").trim(); - const pushError = String(row.gitee_push_error || "").trim(); + const githubStatus = String(row.github_push_status || "").trim(); + const githubError = String(row.github_push_error || "").trim(); + const giteeStatus = String(row.gitee_push_status || "").trim(); + const giteeError = String(row.gitee_push_error || "").trim(); let pushed = "当前仅保留本地"; - if (pushStatus === "success") { + let pushError = ""; + + if (githubStatus === "success" && giteeStatus === "success") { + pushed = "已推送到 GitHub 和 Gitee"; + } else if (githubStatus === "success") { + pushed = "已推送到 GitHub"; + pushError = giteeError; + } else if (giteeStatus === "success") { pushed = "已推送到 Gitee"; - } else if (pushStatus === "failed") { - pushed = "本地生成成功,Gitee 推送失败"; - } else if (pushStatus === "partial_failed") { - pushed = "本地生成成功,Gitee 部分推送后失败"; + pushError = githubError; + } else if (githubStatus === "failed" || githubStatus === "partial_failed") { + pushed = githubStatus === "partial_failed" ? "本地生成成功,GitHub 部分推送后失败" : "本地生成成功,GitHub 推送失败"; + pushError = githubError; + } else if (giteeStatus === "failed" || giteeStatus === "partial_failed") { + pushed = giteeStatus === "partial_failed" ? "本地生成成功,Gitee 部分推送后失败" : "本地生成成功,Gitee 推送失败"; + pushError = giteeError; } + return `目录:${runRoot};文件数:${fileCount};链接数:${totalLinks};状态:${pushed}${pushError ? `;错误:${pushError}` : ""}`; }); +const remoteFiles = (row: SiteList.DomainSpiderMdRunSummaryItem) => { + const githubFiles = row.github_files || []; + if (githubFiles.length) return githubFiles; + return row.gitee_files || []; +}; + +const remoteMdFiles = (row: SiteList.DomainSpiderMdRunSummaryItem) => { + return remoteFiles(row).filter(item => String(item?.file_name || "").toLowerCase().endsWith(".md")); +}; + +const remoteStatus = (row: SiteList.DomainSpiderMdRunSummaryItem) => { + return String(row.github_push_status || row.gitee_push_status || "").trim(); +}; + +const emptyRemoteDescription = (row: SiteList.DomainSpiderMdRunSummaryItem) => { + const githubStatus = String(row.github_push_status || "").trim(); + const githubError = String(row.github_push_error || "").trim(); + const giteeStatus = String(row.gitee_push_status || "").trim(); + const giteeError = String(row.gitee_push_error || "").trim(); + if (githubStatus === "failed" || githubStatus === "partial_failed") { + return `GitHub 推送失败:${githubError || "请查看任务日志"}`; + } + if (giteeStatus === "failed" || giteeStatus === "partial_failed") { + return `Gitee 推送失败:${giteeError || "请查看任务日志"}`; + } + return "当前这轮还没有可复制的远端链接"; +}; + const loadData = async () => { const res = await getDomainSpiderMdSummary({ limit: 10 }); summary.value = res.data || {}; @@ -227,10 +288,12 @@ const copyText = async (text?: string) => { } }; -const copyAllHtmlLinks = async (items: Array<{ html_url?: string }>) => { - const lines = (items || []).map(item => String(item?.html_url || "").trim()).filter(Boolean); +const copyAllMdLinks = async (items: Array<{ download_url?: string; html_url?: string }>) => { + const lines = (items || []) + .map(item => String(item?.download_url || item?.html_url || "").trim()) + .filter(Boolean); if (!lines.length) { - ElMessage.warning("当前没有可复制的页面链接"); + ElMessage.warning("当前没有可复制的MD链接"); return; } await copyText(lines.join("\n"));