feat: open storage artifacts via admin preview

This commit is contained in:
www
2026-04-19 21:29:51 +08:00
parent e801249e21
commit 8884f9c416
22 changed files with 101 additions and 63 deletions

View File

@@ -55,15 +55,14 @@ import { ref } from "vue";
import { ElMessage } from "element-plus";
import { SiteList } from "@/api/interface/site/list";
import { getDomainExternalSeoAizhanKeywordAttentionQueue } from "@/api/modules/site/list";
import { openAdminArtifact } from "@/utils/adminArtifact";
const BASE_URL = import.meta.env.VITE_API_URL as string;
const visible = ref(false);
const loading = ref(false);
const queue = ref<SiteList.DomainExternalSeoAizhanKeywordAttentionQueueData>({});
const openPublicPath = (path?: string) => {
if (!path) return;
window.open(`${BASE_URL}/${String(path).replace(/^\/+/, "")}`, "_blank", "noopener");
void openAdminArtifact(path);
};
const loadQueue = async () => {

View File

@@ -69,10 +69,10 @@ import { computed, ref } from "vue";
import { ElMessage } from "element-plus";
import { SiteList } from "@/api/interface/site/list";
import { getDomainExternalSeoAizhanKeywordProbeSummary } from "@/api/modules/site/list";
import { openAdminArtifact } from "@/utils/adminArtifact";
import DomainExternalSeoAizhanKeywordAttentionDialog from "./domainExternalSeoAizhanKeywordAttentionDialog.vue";
import DomainExternalSeoAizhanKeywordTrendDialog from "./domainExternalSeoAizhanKeywordTrendDialog.vue";
const BASE_URL = import.meta.env.VITE_API_URL as string;
const visible = ref(false);
const loading = ref(false);
const summary = ref<SiteList.DomainExternalSeoAizhanKeywordProbeData>({});
@@ -80,8 +80,7 @@ const attentionDialogRef = ref();
const trendDialogRef = ref();
const openPublicPath = (path?: string) => {
if (!path) return;
window.open(`${BASE_URL}/${String(path).replace(/^\/+/, "")}`, "_blank", "noopener");
void openAdminArtifact(path);
};
const alertTitle = computed(() => {

View File

@@ -59,8 +59,8 @@ import { computed, ref } from "vue";
import { ElMessage } from "element-plus";
import { SiteList } from "@/api/interface/site/list";
import { getDomainExternalSeoAizhanKeywordTrendSummary } from "@/api/modules/site/list";
import { openAdminArtifact } from "@/utils/adminArtifact";
const BASE_URL = import.meta.env.VITE_API_URL as string;
const visible = ref(false);
const loading = ref(false);
const summary = ref<SiteList.DomainExternalSeoAizhanKeywordTrendData>({});
@@ -74,8 +74,7 @@ const alertType = computed(() => {
});
const openPublicPath = (path?: string) => {
if (!path) return;
window.open(`${BASE_URL}/${String(path).replace(/^\/+/, "")}`, "_blank", "noopener");
void openAdminArtifact(path);
};
const loadSummary = async () => {

View File

@@ -65,15 +65,14 @@ import { ref } from "vue";
import { ElMessage } from "element-plus";
import { SiteList } from "@/api/interface/site/list";
import { getDomainExternalSeoBaiduFeedbackSummary } from "@/api/modules/site/list";
import { openAdminArtifact } from "@/utils/adminArtifact";
const BASE_URL = import.meta.env.VITE_API_URL as string;
const visible = ref(false);
const loading = ref(false);
const summary = ref<SiteList.DomainExternalSeoBaiduFeedbackSummaryData>({});
const openPublicPath = (path?: string) => {
if (!path) return;
window.open(`${BASE_URL}/${String(path).replace(/^\/+/, "")}`, "_blank", "noopener");
void openAdminArtifact(path);
};
const loadSummary = async () => {

View File

@@ -61,6 +61,7 @@ import { ref } from "vue";
import { ElMessage } from "element-plus";
import { SiteList } from "@/api/interface/site/list";
import { getDomainExternalSeoBaiduProviderPlan } from "@/api/modules/site/list";
import { openAdminArtifact } from "@/utils/adminArtifact";
import DomainExternalSeoBaiduPushDialog from "./domainExternalSeoBaiduPushDialog.vue";
import DomainExternalSeoBaiduFeedbackDialog from "./domainExternalSeoBaiduFeedbackDialog.vue";
import DomainExternalSeoSiteQueryDialog from "./domainExternalSeoSiteQueryDialog.vue";
@@ -68,7 +69,6 @@ import DomainExternalSeoBaiduPushTaskDialog from "./domainExternalSeoBaiduPushTa
import DomainExternalSeoBaiduPushAttentionDialog from "./domainExternalSeoBaiduPushAttentionDialog.vue";
import DomainExternalSeoBaiduPushTrendDialog from "./domainExternalSeoBaiduPushTrendDialog.vue";
const BASE_URL = import.meta.env.VITE_API_URL as string;
const visible = ref(false);
const loading = ref(false);
const summary = ref<SiteList.DomainExternalSeoBaiduProviderPlanData>({});
@@ -80,8 +80,7 @@ const attentionDialogRef = ref();
const trendDialogRef = ref();
const openPublicPath = (path?: string) => {
if (!path) return;
window.open(`${BASE_URL}/${String(path).replace(/^\/+/, "")}`, "_blank", "noopener");
void openAdminArtifact(path);
};
const openPushSummaryDialog = () => {

View File

@@ -68,15 +68,14 @@ import { ref } from "vue";
import { ElMessage } from "element-plus";
import { SiteList } from "@/api/interface/site/list";
import { getDomainExternalSeoBaiduPushAttentionQueue } from "@/api/modules/site/list";
import { openAdminArtifact } from "@/utils/adminArtifact";
const BASE_URL = import.meta.env.VITE_API_URL as string;
const visible = ref(false);
const loading = ref(false);
const queue = ref<SiteList.DomainExternalSeoBaiduPushAttentionQueueData>({});
const openPublicPath = (path?: string) => {
if (!path) return;
window.open(`${BASE_URL}/${String(path).replace(/^\/+/, "")}`, "_blank", "noopener");
void openAdminArtifact(path);
};
const loadQueue = async () => {

View File

@@ -70,11 +70,11 @@ import { ref } from "vue";
import { ElMessage } from "element-plus";
import { SiteList } from "@/api/interface/site/list";
import { getDomainExternalSeoBaiduPushSummary } from "@/api/modules/site/list";
import { openAdminArtifact } from "@/utils/adminArtifact";
import DomainExternalSeoBaiduPushTaskDialog from "./domainExternalSeoBaiduPushTaskDialog.vue";
import DomainExternalSeoBaiduPushAttentionDialog from "./domainExternalSeoBaiduPushAttentionDialog.vue";
import DomainExternalSeoBaiduPushTrendDialog from "./domainExternalSeoBaiduPushTrendDialog.vue";
const BASE_URL = import.meta.env.VITE_API_URL as string;
const visible = ref(false);
const loading = ref(false);
const summary = ref<SiteList.DomainExternalSeoBaiduPushSummaryData>({});
@@ -83,8 +83,7 @@ const attentionDialogRef = ref();
const trendDialogRef = ref();
const openPublicPath = (path?: string) => {
if (!path) return;
window.open(`${BASE_URL}/${String(path).replace(/^\/+/, "")}`, "_blank", "noopener");
void openAdminArtifact(path);
};
const loadSummary = async () => {

View File

@@ -66,8 +66,8 @@ import { computed, ref } from "vue";
import { ElMessage } from "element-plus";
import { SiteList } from "@/api/interface/site/list";
import { getDomainExternalSeoBaiduPushTrendSummary } from "@/api/modules/site/list";
import { openAdminArtifact } from "@/utils/adminArtifact";
const BASE_URL = import.meta.env.VITE_API_URL as string;
const visible = ref(false);
const loading = ref(false);
const summary = ref<SiteList.DomainExternalSeoBaiduPushTrendData>({});
@@ -80,8 +80,7 @@ const alertType = computed(() => {
});
const openPublicPath = (path?: string) => {
if (!path) return;
window.open(`${BASE_URL}/${String(path).replace(/^\/+/, "")}`, "_blank", "noopener");
void openAdminArtifact(path);
};
const loadSummary = async () => {

View File

@@ -43,16 +43,15 @@ import { ref } from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
import { SiteList } from "@/api/interface/site/list";
import { getDomainExternalSeoFailedQueue } from "@/api/modules/site/list";
import { openAdminArtifact } from "@/utils/adminArtifact";
const BASE_URL = import.meta.env.VITE_API_URL as string;
const visible = ref(false);
const loading = ref(false);
const rows = ref<SiteList.DomainExternalSeoFailedQueueItem[]>([]);
const queue = ref<SiteList.DomainExternalSeoFailedQueueData>({});
const openPublicPath = (path?: string) => {
if (!path) return;
window.open(`${BASE_URL}/${String(path).replace(/^\/+/, "")}`, "_blank", "noopener");
void openAdminArtifact(path);
};
const showCommand = async (title: string, command?: string) => {

View File

@@ -39,17 +39,14 @@ import { ref } from "vue";
import { ElMessage } from "element-plus";
import { SiteList } from "@/api/interface/site/list";
import { getDomainExternalSeoManualImportRuns } from "@/api/modules/site/list";
import { openAdminArtifact } from "@/utils/adminArtifact";
const BASE_URL = import.meta.env.VITE_API_URL as string;
const visible = ref(false);
const loading = ref(false);
const rows = ref<SiteList.DomainExternalSeoManualImportRunItem[]>([]);
const openPublicPath = (path?: string) => {
if (!path) {
return;
}
window.open(`${BASE_URL}/${String(path).replace(/^\/+/, "")}`, "_blank", "noopener");
void openAdminArtifact(path);
};
const loadRuns = async () => {

View File

@@ -370,6 +370,7 @@
import { ref } from "vue";
import { ElMessage, UploadRawFile } from "element-plus";
import { SiteList } from "@/api/interface/site/list";
import { openAdminArtifact } from "@/utils/adminArtifact";
import {
getDomainExternalSeoManualImportTemplate,
getDomainExternalSeoCnOverview,
@@ -606,7 +607,7 @@ const downloadManualTemplate = async () => {
ElMessage.warning("模板生成成功但没有可打开的文件路径");
return;
}
window.open(`${import.meta.env.VITE_API_URL}/${String(path).replace(/^\/+/, "")}`, "_blank", "noopener");
await openAdminArtifact(path);
} catch (_error) {
ElMessage.error("生成站外手工导入模板失败");
}
@@ -620,7 +621,7 @@ const downloadSearchConsolePropertyMapTemplate = async () => {
ElMessage.warning("映射模板生成成功但没有可打开的文件路径");
return;
}
window.open(`${import.meta.env.VITE_API_URL}/${String(path).replace(/^\/+/, "")}`, "_blank", "noopener");
await openAdminArtifact(path);
} catch (_error) {
ElMessage.error("生成 Search Console 映射模板失败");
}
@@ -663,7 +664,7 @@ const uploadManualReport = async (param: any) => {
ElMessage.success(`导入完成:共 ${res.data.rows_total || 0} 行,写入 ${res.data.imported_count || 0} 行`);
const summaryHtmlPath = res.data.summary_html_path;
if (summaryHtmlPath) {
window.open(`${import.meta.env.VITE_API_URL}/${String(summaryHtmlPath).replace(/^\/+/, "")}`, "_blank", "noopener");
await openAdminArtifact(summaryHtmlPath);
}
await loadSummary();
openRealSummaryDialog();
@@ -697,7 +698,7 @@ const uploadSearchConsolePropertyMap = async (param: any) => {
ElMessage.success(`Search Console 映射上传完成:${res.data.mapped_hosts_count || 0} 个 host`);
const summaryHtmlPath = res.data.summary_html_path;
if (summaryHtmlPath) {
window.open(`${import.meta.env.VITE_API_URL}/${String(summaryHtmlPath).replace(/^\/+/, "")}`, "_blank", "noopener");
await openAdminArtifact(summaryHtmlPath);
}
await loadSummary();
openRealSummaryDialog();

View File

@@ -52,6 +52,7 @@ import { computed, ref } from "vue";
import { ElMessage } from "element-plus";
import { SiteList } from "@/api/interface/site/list";
import { getDomainExternalSeoRealSummary } from "@/api/modules/site/list";
import { openAdminArtifact } from "@/utils/adminArtifact";
const visible = ref(false);
const loading = ref(false);
@@ -90,8 +91,7 @@ const loadSummary = async () => {
};
const openSummaryFile = (path?: string) => {
if (!path) return;
window.open(`${import.meta.env.VITE_API_URL}/${String(path).replace(/^\/+/, "")}`, "_blank", "noopener");
void openAdminArtifact(path);
};
const statusLabel = (status?: string) => {

View File

@@ -145,6 +145,7 @@ import { computed, ref } from "vue";
import { ElMessage } from "element-plus";
import { SiteList } from "@/api/interface/site/list";
import { getDomainExternalSeoRealSummary, getDomainExternalSeoSnapshotRuns, getDomainExternalSeoSummary, getDomainExternalSeoTrendSummary } from "@/api/modules/site/list";
import { openAdminArtifact } from "@/utils/adminArtifact";
import DomainExternalSeoSnapshotRunDialog from "./domainExternalSeoSnapshotRunDialog.vue";
const visible = ref(false);
@@ -215,8 +216,7 @@ const formatDateTime = (value?: string) => {
};
const openSummaryFile = (path?: string) => {
if (!path) return;
window.open(`${import.meta.env.VITE_API_URL}/${String(path).replace(/^\/+/, "")}`, "_blank", "noopener");
void openAdminArtifact(path);
};
const openSnapshotRunsDialog = () => {

View File

@@ -71,15 +71,14 @@ import { ref } from "vue";
import { ElMessage } from "element-plus";
import { SiteList } from "@/api/interface/site/list";
import { getDomainExternalSeoSearchConsoleFetchSummary } from "@/api/modules/site/list";
import { openAdminArtifact } from "@/utils/adminArtifact";
const BASE_URL = import.meta.env.VITE_API_URL as string;
const visible = ref(false);
const loading = ref(false);
const summary = ref<SiteList.DomainExternalSeoSearchConsoleFetchData>({});
const openPublicPath = (path?: string) => {
if (!path) return;
window.open(`${BASE_URL}/${String(path).replace(/^\/+/, "")}`, "_blank", "noopener");
void openAdminArtifact(path);
};
const loadSummary = async () => {

View File

@@ -66,17 +66,16 @@ import { ref } from "vue";
import { ElMessage } from "element-plus";
import { SiteList } from "@/api/interface/site/list";
import { getDomainExternalSeoSearchConsoleProviderPlan } from "@/api/modules/site/list";
import { openAdminArtifact } from "@/utils/adminArtifact";
import DomainExternalSeoSearchConsoleFetchDialog from "./domainExternalSeoSearchConsoleFetchDialog.vue";
const BASE_URL = import.meta.env.VITE_API_URL as string;
const visible = ref(false);
const loading = ref(false);
const summary = ref<SiteList.DomainExternalSeoSearchConsoleProviderPlanData>({});
const fetchDialogRef = ref();
const openPublicPath = (path?: string) => {
if (!path) return;
window.open(`${BASE_URL}/${String(path).replace(/^\/+/, "")}`, "_blank", "noopener");
void openAdminArtifact(path);
};
const openFetchDialog = () => {

View File

@@ -62,15 +62,14 @@ import { computed, ref } from "vue";
import { ElMessage } from "element-plus";
import { SiteList } from "@/api/interface/site/list";
import { getDomainExternalSeoSiteQueryProbeSummary } from "@/api/modules/site/list";
import { openAdminArtifact } from "@/utils/adminArtifact";
const BASE_URL = import.meta.env.VITE_API_URL as string;
const visible = ref(false);
const loading = ref(false);
const summary = ref<SiteList.DomainExternalSeoSiteQueryProbeData>({});
const openPublicPath = (path?: string) => {
if (!path) return;
window.open(`${BASE_URL}/${String(path).replace(/^\/+/, "")}`, "_blank", "noopener");
void openAdminArtifact(path);
};
const alertTitle = computed(() => {

View File

@@ -130,16 +130,15 @@ import { ref } from "vue";
import { ElMessage } from "element-plus";
import { SiteList } from "@/api/interface/site/list";
import { getDomainExternalSeoSnapshotRuns } from "@/api/modules/site/list";
import { openAdminArtifact } from "@/utils/adminArtifact";
const BASE_URL = import.meta.env.VITE_API_URL as string;
const visible = ref(false);
const loading = ref(false);
const rows = ref<SiteList.DomainExternalSeoSnapshotRunItem[]>([]);
const summary = ref<SiteList.DomainExternalSeoSnapshotRunData | null>(null);
const openPublicPath = (path?: string) => {
if (!path) return;
window.open(`${BASE_URL}/${String(path).replace(/^\/+/, "")}`, "_blank", "noopener");
void openAdminArtifact(path);
};
const loadRuns = async () => {

View File

@@ -137,16 +137,15 @@ import { ref } from "vue";
import { ElMessage } from "element-plus";
import { SiteList } from "@/api/interface/site/list";
import { getDomainExternalSeoSnapshotValidateRuns } from "@/api/modules/site/list";
import { openAdminArtifact } from "@/utils/adminArtifact";
const BASE_URL = import.meta.env.VITE_API_URL as string;
const visible = ref(false);
const loading = ref(false);
const rows = ref<SiteList.DomainExternalSeoSnapshotValidateRunItem[]>([]);
const summary = ref<SiteList.DomainExternalSeoSnapshotValidateRunData | null>(null);
const openPublicPath = (path?: string) => {
if (!path) return;
window.open(`${BASE_URL}/${String(path).replace(/^\/+/, "")}`, "_blank", "noopener");
void openAdminArtifact(path);
};
const loadRuns = async () => {

View File

@@ -81,13 +81,13 @@ import { ref } from "vue";
import { ElMessage } from "element-plus";
import { SiteList } from "@/api/interface/site/list";
import { getDomainExternalSeoSummary } from "@/api/modules/site/list";
import { openAdminArtifact } from "@/utils/adminArtifact";
import DomainExternalSeoFailedQueueDialog from "./domainExternalSeoFailedQueueDialog.vue";
import DomainExternalSeoTrendDialog from "./domainExternalSeoTrendDialog.vue";
import DomainExternalSeoRealSummaryDialog from "./domainExternalSeoRealSummaryDialog.vue";
import DomainExternalSeoProviderDialog from "./domainExternalSeoProviderDialog.vue";
import DomainExternalSeoSearchConsolePlanDialog from "./domainExternalSeoSearchConsolePlanDialog.vue";
const BASE_URL = import.meta.env.VITE_API_URL as string;
const visible = ref(false);
const loading = ref(false);
const rows = ref<SiteList.DomainExternalSeoHostItem[]>([]);
@@ -99,10 +99,7 @@ const providerDialogRef = ref();
const searchConsolePlanDialogRef = ref();
const openPublicPath = (path?: string) => {
if (!path) {
return;
}
window.open(`${BASE_URL}/${String(path).replace(/^\/+/, "")}`, "_blank", "noopener");
void openAdminArtifact(path);
};
const trendLabel = () => {

View File

@@ -72,15 +72,14 @@ import { ref } from "vue";
import { ElMessage } from "element-plus";
import { SiteList } from "@/api/interface/site/list";
import { getDomainExternalSeoTrendSummary } from "@/api/modules/site/list";
import { openAdminArtifact } from "@/utils/adminArtifact";
const BASE_URL = import.meta.env.VITE_API_URL as string;
const visible = ref(false);
const loading = ref(false);
const summary = ref<SiteList.DomainExternalSeoTrendData>({});
const openPublicPath = (path?: string) => {
if (!path) return;
window.open(`${BASE_URL}/${String(path).replace(/^\/+/, "")}`, "_blank", "noopener");
void openAdminArtifact(path);
};
const trendLabel = () => {