+
运行设置
控制分组轮换、单用户节奏,以及首次进入全流程的分组。
-
启动前生效
+
启动前生效
@@ -105,21 +107,12 @@
class="h-11 w-full rounded-lg border border-gray-300 bg-white px-4 text-sm text-gray-800 outline-none focus:border-blue-500 disabled:cursor-not-allowed disabled:opacity-60"
@blur="handlePostUserSleepBlur" />
-
-
-
-
+
每组支持 0-3 个视图
+
第 {{ effectiveInitialFullGroupNumber }} 组起始全流程
+
+
+ :class="['rounded-xl border p-4 transition-all', count > 0 ? 'cursor-pointer bg-white hover:border-blue-300 hover:shadow-sm' : 'bg-gray-50', effectiveInitialFullGroupNumber === index + 1 ? 'border-blue-500 ring-2 ring-blue-100' : 'border-gray-200']"
+ @click="handleSelectInitialFullGroup(index)">
第 {{ index + 1 }} 组
{{ groupRangeLabel(index) }}
-
{{ groupViewText(count)
- }}
+
+ {{ effectiveInitialFullGroupNumber === index + 1 ? '全流程' : groupViewText(count) }}
+
+
+
+ {{ count > 0 ? '点击此卡片设为起始全流程组' : '当前分组未启用,无法作为起始组' }}
+ @click.stop @blur="handleGroupCountBlur(index)" />
@@ -370,7 +372,6 @@ const dataPoolLabel = computed(() => (isBrotherInfoMode.value ? '大哥池' : '
const normalizedGroupSwitchMinutes = computed(() => clampMinutes(configForm.groupSwitchMinutes))
const normalizedGroupViewCounts = computed(() => normalizeGroupViewCounts(configForm.groupViewCounts))
const effectiveInitialFullGroupNumber = computed(() => resolveInitialFullGroupNumber(configForm.initialFullGroupNumber, normalizedGroupViewCounts.value))
-const startFullGroupOptions = computed(() => normalizedGroupViewCounts.value.map((enabledCount, groupIndex) => ({ value: groupIndex + 1, label: `第 ${groupIndex + 1} 组`, hint: groupRangeLabel(groupIndex), enabled: enabledCount > 0 })))
const browserViewGroups = computed(() => normalizedGroupViewCounts.value.map((enabledCount, groupIndex) => {
const baseViewId = TIKTOK_VIEW_IDS[groupIndex * 3]
return { groupIndex, label: `视图 ${baseViewId}-${baseViewId + 2}`, views: Array.from({ length: 3 }, (_, offset) => ({ viewId: baseViewId + offset, enabled: offset < enabledCount, active: activeViewId.value === baseViewId + offset })) }
@@ -426,7 +427,7 @@ async function showBrowserWorkspace(viewId, fallbackStatusText) {
}
function handleGreetingConfirm(data) { configForm.prologueList = { yolo: data.sentences || [], ...(data.translations || {}) }; configForm.needTranslate = Boolean(data.needTranslate); showGreetingDialog.value = false; invalidatePreparedState(); void saveSharedConfig() }
function handleSwitchMinutesBlur() { configForm.groupSwitchMinutes = clampMinutes(configForm.groupSwitchMinutes); invalidatePreparedState() }
-function handleInitialFullGroupChange() { configForm.initialFullGroupNumber = effectiveInitialFullGroupNumber.value; invalidatePreparedState(); void saveSharedConfig() }
+function handleSelectInitialFullGroup(index) { if (isConfigControlDisabled.value) return; if ((normalizedGroupViewCounts.value[index] || 0) <= 0) return; const nextGroupNumber = index + 1; if (configForm.initialFullGroupNumber === nextGroupNumber) return; configForm.initialFullGroupNumber = nextGroupNumber; invalidatePreparedState('全流程起始分组已变更,请重新预热视图'); void saveSharedConfig() }
function handlePostUserSleepBlur() { configForm.postUserSleepSeconds = clampPositiveSeconds(configForm.postUserSleepSeconds, 6); invalidatePreparedState() }
function handleGroupCountBlur(index) { configForm.groupViewCounts[index] = clampGroupCount(configForm.groupViewCounts[index]); configForm.initialFullGroupNumber = effectiveInitialFullGroupNumber.value; invalidatePreparedState('视图配置已变更,请重新预热视图') }
function groupViewText(count) { return count <= 0 ? '不启用' : `开启 ${count} 个` }