feat: add import detection toggles
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user