feat: add import detection toggles

This commit is contained in:
2026-04-30 20:24:23 +08:00
parent 242b419875
commit 0b8f2c9775
7 changed files with 239 additions and 26 deletions
+7
View File
@@ -53,6 +53,13 @@ export interface ImportLiveRoomsResult {
items: ImportLiveRoomItemResult[];
}
export interface ImportLiveRoomsRequest {
content: string;
platformOverride?: number | null;
detectRoomMetadata: boolean;
detectLiveStatus: boolean;
}
export interface ImportLiveRoomItemResult {
lineNumber: number;
rawLine: string;
+54 -5
View File
@@ -3,7 +3,7 @@ import { computed, nextTick, onBeforeUnmount, onMounted, reactive, ref } from "v
import { ElMessage } from "element-plus";
import apiClient, { getApiErrorMessage } from "@/api/client";
import { useViewport } from "@/composables/useViewport";
import type { BatchLiveRoomsResult, ImportLiveRoomsResult, LiveRoom, RecordTask } from "@/types";
import type { BatchLiveRoomsResult, ImportLiveRoomsRequest, ImportLiveRoomsResult, LiveRoom, RecordTask } from "@/types";
import {
autoStartDecisionLabelMap,
availabilityLabelMap,
@@ -49,7 +49,9 @@ const createForm = reactive({
const importForm = reactive({
content: "",
platformOverride: null as number | null
platformOverride: null as number | null,
detectRoomMetadata: true,
detectLiveStatus: true
});
const importResult = ref<ImportLiveRoomsResult | null>(null);
@@ -331,6 +333,8 @@ function resetCreateForm() {
function resetImportForm() {
importForm.content = "";
importForm.platformOverride = null;
importForm.detectRoomMetadata = true;
importForm.detectLiveStatus = true;
importResult.value = null;
}
@@ -367,10 +371,14 @@ async function importRooms() {
importResult.value = null;
try {
const { data } = await apiClient.post<ImportLiveRoomsResult>("/live-rooms/import", {
const payload: ImportLiveRoomsRequest = {
content: importForm.content,
platformOverride: importForm.platformOverride
});
platformOverride: importForm.platformOverride,
detectRoomMetadata: importForm.detectRoomMetadata,
detectLiveStatus: importForm.detectLiveStatus
};
const { data } = await apiClient.post<ImportLiveRoomsResult>("/live-rooms/import", payload);
importResult.value = data;
ElMessage.success(`导入完成:成功 ${data.successCount} 条,失败 ${data.failedCount} 条。`);
@@ -1098,6 +1106,31 @@ onBeforeUnmount(() => {
</el-form-item>
</el-form>
<div class="import-options">
<div class="settings-toggle-item import-options__item">
<div>
<div class="settings-toggle-item__label">检测直播间信息</div>
<div class="settings-toggle-item__hint">关闭后不在导入时拉取标题头像等信息</div>
</div>
<el-switch v-model="importForm.detectRoomMetadata" />
</div>
<div class="settings-toggle-item import-options__item">
<div>
<div class="settings-toggle-item__label">检测开播状态</div>
<div class="settings-toggle-item__hint">关闭后不在导入时请求开播状态也不会立即触发自动开录</div>
</div>
<el-switch v-model="importForm.detectLiveStatus" />
</div>
</div>
<el-alert
v-if="!importForm.detectRoomMetadata && !importForm.detectLiveStatus"
type="warning"
:closable="false"
show-icon
title="当前将只做本地解析并直接入库,不请求远端链接。适合一次导入很多直播间时使用。"
/>
<div v-if="importResult" class="import-result">
<div class="import-result__summary">
{{ importResult.totalCount }} 成功 {{ importResult.successCount }} 新增
@@ -1594,6 +1627,13 @@ onBeforeUnmount(() => {
font-weight: 600;
}
.settings-toggle-item__hint {
margin-top: 4px;
color: var(--text-muted);
font-size: 12px;
line-height: 1.5;
}
.dialog-form {
display: grid;
}
@@ -1602,6 +1642,15 @@ onBeforeUnmount(() => {
gap: 16px;
}
.import-options {
display: grid;
gap: 12px;
}
.import-options__item {
align-items: flex-start;
}
.import-result {
display: grid;
gap: 12px;