feat: open storage artifacts via admin preview
This commit is contained in:
@@ -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 () => {
|
||||
|
||||
@@ -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(() => {
|
||||
|
||||
@@ -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 () => {
|
||||
|
||||
@@ -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 () => {
|
||||
|
||||
@@ -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 = () => {
|
||||
|
||||
@@ -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 () => {
|
||||
|
||||
@@ -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 () => {
|
||||
|
||||
@@ -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 () => {
|
||||
|
||||
@@ -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) => {
|
||||
|
||||
@@ -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 () => {
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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) => {
|
||||
|
||||
@@ -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 = () => {
|
||||
|
||||
@@ -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 () => {
|
||||
|
||||
@@ -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 = () => {
|
||||
|
||||
@@ -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(() => {
|
||||
|
||||
@@ -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 () => {
|
||||
|
||||
@@ -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 () => {
|
||||
|
||||
@@ -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 = () => {
|
||||
|
||||
@@ -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 = () => {
|
||||
|
||||
Reference in New Issue
Block a user