feat: 批量更新账号资料支持勾选字段(含AI打标)

- 更新全部账号ID 升级为 批量更新账号资料:弹窗勾选 账号ID/昵称/粉丝数/IP属地/性别/简介/标签
- 标签勾选时调用 LLM 重新打标(覆盖已有标签),AI_TAGGING_TOOL 未配置自动跳过
- 只写入选中字段,爬取为空的字段跳过不清空;演示账号(xhs- 前缀)不参与
- .env.app.example 为 SEED_DEMO_DATA 补充注释
This commit is contained in:
ABAPPLO
2026-08-28 14:00:07 +08:00
parent 8e4e3de974
commit ed13262166
8 changed files with 546 additions and 257 deletions

View File

@@ -55,9 +55,9 @@ import {
import { isManagerRequest } from "../../../lib/user-auth";
import { extractPublishUrl } from "../../../lib/publish-url";
import {
getPublicAccountIdRefreshStatus,
startPublicAccountIdRefresh,
} from "../../../lib/account-id-refresh-service";
getAccountFieldRefreshStatus,
startAccountFieldRefresh,
} from "../../../lib/account-field-refresh-service";
type ActionBody = {
action?: string;
@@ -687,14 +687,15 @@ export async function POST(request: Request) {
const taskId = String(body.taskId ?? "").trim();
const pushes = await listGroupPushes(db, taskId || undefined);
return Response.json({ pushes });
} else if (body.action === "refresh_public_account_ids") {
const status = startPublicAccountIdRefresh(
} else if (body.action === "refresh_account_fields") {
const status = startAccountFieldRefresh(
db,
resolveCollectionMcpConfig(env as unknown as CollectionMcpBindings),
body.fields,
);
return Response.json({ refresh: status });
} else if (body.action === "public_account_id_refresh_status") {
return Response.json({ refresh: getPublicAccountIdRefreshStatus() });
} else if (body.action === "account_field_refresh_status") {
return Response.json({ refresh: getAccountFieldRefreshStatus() });
} else if (body.action === "wecom_group_chats") {
const groups = await listGroupChatRows(db);
return Response.json({ groups });