feat: honor all-range export and batch scope
This commit is contained in:
+56
-20
@@ -339,16 +339,15 @@ export function createMarketController(options: CreateMarketControllerOptions) {
|
||||
const toolbarHandlers = {
|
||||
onExportAudienceProfile: async () => {
|
||||
syncSelectionStateFromDom();
|
||||
if (selectedAuthorIds.size === 0) {
|
||||
setToolbarExportStatus(toolbar, "请先勾选需要导出数据的达人");
|
||||
return;
|
||||
}
|
||||
|
||||
const exportTarget = readToolbarExportTarget(toolbar);
|
||||
if (!exportTarget.target) {
|
||||
setToolbarExportStatus(toolbar, exportTarget.error ?? "导出配置无效");
|
||||
return;
|
||||
}
|
||||
if (selectedAuthorIds.size === 0 && exportTarget.target.mode !== "all") {
|
||||
setToolbarExportStatus(toolbar, "请先勾选需要导出数据的达人");
|
||||
return;
|
||||
}
|
||||
|
||||
setToolbarBusyState(toolbar, true);
|
||||
try {
|
||||
@@ -356,16 +355,27 @@ export function createMarketController(options: CreateMarketControllerOptions) {
|
||||
const exportSelection = resolveAudienceProfileExportSelection(
|
||||
selectedHeaders
|
||||
);
|
||||
const selectedRecords = filterRecordsBySelectionStrict(
|
||||
await exportRecords(exportTarget.target, "画像导出中", {
|
||||
const resolvedRecords = await exportRecords(
|
||||
exportTarget.target,
|
||||
"画像导出中",
|
||||
{
|
||||
includeBackendMetrics: exportSelection.includeBackendMetrics,
|
||||
includeRates: exportSelection.includeRates,
|
||||
showDetailedProgress: false,
|
||||
spreadInfoConfigs: exportSelection.spreadInfoConfigs
|
||||
})
|
||||
}
|
||||
);
|
||||
const selectedRecords = filterRecordsForAudienceProfileExport(
|
||||
resolvedRecords,
|
||||
exportTarget.target
|
||||
);
|
||||
if (selectedRecords.length === 0) {
|
||||
setToolbarExportStatus(toolbar, "当前导出范围内没有选中的达人");
|
||||
setToolbarExportStatus(
|
||||
toolbar,
|
||||
exportTarget.target.mode === "all" && selectedAuthorIds.size > 0
|
||||
? "全部范围内没有选中的达人"
|
||||
: "当前导出范围内没有选中的达人"
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -510,18 +520,29 @@ export function createMarketController(options: CreateMarketControllerOptions) {
|
||||
setToolbarBusyState(toolbar, true);
|
||||
try {
|
||||
const hasSelectedAuthors = selectedAuthorIds.size > 0;
|
||||
const records = filterRecordsBySelection(
|
||||
await applySpreadThresholdFilter(
|
||||
await exportRecords(
|
||||
exportTarget.target,
|
||||
hasSelectedAuthors ? "提交已选达人中" : "提交中",
|
||||
{
|
||||
showDetailedProgress: !hasSelectedAuthors
|
||||
}
|
||||
),
|
||||
spreadFilter.filter
|
||||
)
|
||||
const resolvedRecords = await applySpreadThresholdFilter(
|
||||
await exportRecords(
|
||||
exportTarget.target,
|
||||
hasSelectedAuthors ? "提交已选达人中" : "提交中",
|
||||
{
|
||||
showDetailedProgress: !hasSelectedAuthors
|
||||
}
|
||||
),
|
||||
spreadFilter.filter
|
||||
);
|
||||
const records =
|
||||
exportTarget.target.mode === "all"
|
||||
? filterRecordsForAllRange(resolvedRecords)
|
||||
: filterRecordsBySelection(resolvedRecords);
|
||||
if (records.length === 0) {
|
||||
setToolbarExportStatus(
|
||||
toolbar,
|
||||
exportTarget.target.mode === "all" && hasSelectedAuthors
|
||||
? "全部范围内没有选中的达人"
|
||||
: "当前范围内没有可提交的达人"
|
||||
);
|
||||
return;
|
||||
}
|
||||
const authState = await getAuthState();
|
||||
if (!authState.isAuthenticated) {
|
||||
throw new Error("请先登录插件");
|
||||
@@ -1168,6 +1189,21 @@ export function createMarketController(options: CreateMarketControllerOptions) {
|
||||
return records.filter((record) => selectedAuthorIds.has(record.authorId));
|
||||
}
|
||||
|
||||
function filterRecordsForAllRange(records: MarketRecord[]): MarketRecord[] {
|
||||
return selectedAuthorIds.size === 0
|
||||
? records
|
||||
: filterRecordsBySelectionStrict(records);
|
||||
}
|
||||
|
||||
function filterRecordsForAudienceProfileExport(
|
||||
records: MarketRecord[],
|
||||
target: MarketExportTarget
|
||||
): MarketRecord[] {
|
||||
return target.mode === "all"
|
||||
? filterRecordsForAllRange(records)
|
||||
: filterRecordsBySelectionStrict(records);
|
||||
}
|
||||
|
||||
async function loadAudienceProfileSet(
|
||||
record: MarketRecord,
|
||||
exportSelection: AudienceProfileExportSelection
|
||||
|
||||
@@ -51,10 +51,11 @@ export function createSilentExportController(
|
||||
|
||||
const mergedRecords = new Map<string, MarketRecord>();
|
||||
const maxPageCount = target.mode === "count" ? target.pageCount : 200;
|
||||
const initialPage = target.mode === "all" ? 1 : baseRequest.initialPage;
|
||||
let totalPagesHint: number | undefined;
|
||||
|
||||
for (let offset = 0; offset < maxPageCount; offset += 1) {
|
||||
const pageNumber = baseRequest.initialPage + offset;
|
||||
const pageNumber = initialPage + offset;
|
||||
options.onProgress?.({
|
||||
currentPage: offset + 1,
|
||||
totalPages: target.mode === "count" ? target.pageCount : totalPagesHint
|
||||
|
||||
Reference in New Issue
Block a user