feat: add metadata console and seo ai rule pages

This commit is contained in:
root
2026-04-18 20:23:30 +08:00
parent 845d68110b
commit 2d1834422b
14 changed files with 1769 additions and 50 deletions

View File

@@ -2,6 +2,7 @@ export const loginApiUrl = "/guest/login";
export const getSystemConfigListApiUrl = "/system/config/list";
export const getSystemConfigSaveApiUrl = "/system/config/save";
export const getSystemConfigSeoAiRulesResetApiUrl = "/system/config/seo-ai-rules/reset";
export const getSystemPlanListApiUrl = "/system/plan/list";
export const getSystemPlanSaveApiUrl = "/system/plan/save";

View File

@@ -924,7 +924,15 @@ export namespace SiteList {
skipped_template_missing_count?: number;
skipped_duplicate_in_file_count?: number;
strategy_profile_counts?: Record<string, number>;
inserted_domains?: Array<{ d_id?: number; d_domain?: string; strategy_profile?: SeoStrategyProfile }>;
inserted_domains?: Array<{
d_id?: number;
d_domain?: string;
d_name?: string;
t_id?: number;
strategy_profile?: SeoStrategyProfile;
tkd_provider?: string;
tkd_mode?: string;
}>;
skipped_domains?: Array<{ d_domain?: string; reason?: string; t_id?: number }>;
run_root?: string;
uploaded_excel_path?: string;
@@ -934,6 +942,67 @@ export namespace SiteList {
probe_failed_count?: number;
summary_json_path?: string;
summary_html_path?: string;
next_step_notice?: string[];
codex_continue_prompt?: string;
post_import_workflow?: {
enabled?: boolean;
auto_ai_after_import?: boolean;
summary?: string;
inserted_domain_count?: number;
inserted_domain_hosts?: string[];
contains_openai_domains?: boolean;
artifact_audit?: {
summary?: {
total?: number;
state_ready_count?: number;
manifest_ready_count?: number;
positioning_ready_count?: number;
published_copy_ready_count?: number;
sitemap_generated_count?: number;
ai_pending_count?: number;
};
items?: Array<{
host?: string;
site_name?: string;
state_exists?: boolean;
manifest_exists?: boolean;
site_positioning_exists?: boolean;
published_copy_exists?: boolean;
ai_status?: string;
wait_for_ai_before_publish?: boolean;
sitemap_status?: "generated" | "queued_pending" | string;
existing_sitemaps?: string[];
notes?: string[];
}>;
};
recommended_for_operator?: "openai_continue" | "codex_continue";
recommended_for_technical?: "openai_continue" | "codex_continue";
notices?: string[];
choices?: Array<{
key?: "openai_continue" | "codex_continue";
label?: string;
audience?: string;
description?: string;
}>;
openai?: {
domain_ids?: number[];
domain_id_csv?: string;
hosts?: string[];
probe_status?: "passed" | "partial" | "failed" | "skipped" | string;
probe_summary_html_path?: string;
probe_summary_json_path?: string;
operator_steps?: string[];
};
codex?: {
workspace_path?: string;
open_in_vscode_hint?: string;
prompt?: string;
};
ui_suggestion?: {
message?: string;
button_labels?: string[];
};
};
}
export interface DomainImportRunSummaryItem {

View File

@@ -9,6 +9,9 @@ export namespace ConfigList {
sc_val: string;
sc_description: string;
}
export interface resetSeoAiRuleParams {
sc_code?: string;
}
export interface delParams {
sc_id: string;
}
@@ -18,5 +21,8 @@ export namespace ConfigList {
sc_val: string;
sc_description: string;
}
export interface SeoAiRuleCard extends ResList {
note?: Partial<ResList> | null;
}
export interface ResData extends ResultData {}
}

View File

@@ -78,4 +78,125 @@ export namespace VideoList {
tag_list?: any;
}
export interface ResData extends ResultData {}
export interface MetadataMissingTaskPoolPlanTaskStatus {
exists?: boolean;
enabled?: boolean;
limit_seconds?: number;
limit_human?: string;
status_label?: string;
db_ready?: boolean;
db_error?: string;
pt_id?: number;
pt_name?: string;
pt_code?: string;
last_run_at?: string;
}
export interface MetadataMissingTaskPoolStatusData {
generated_at?: string;
recommended_action?: string;
operator_hint?: string[];
workbench?: {
generated_at?: string;
videos_with_any_missing_metadata?: number;
queue_size?: number;
workbench_index_path?: string;
latest_run?: Record<string, any>;
};
task_pool?: {
generated_at?: string;
batch_count?: number;
pending_count?: number;
processing_count?: number;
done_count?: number;
skipped_count?: number;
task_pool_index_path?: string;
};
plan_task?: MetadataMissingTaskPoolPlanTaskStatus;
}
export interface MetadataMissingTaskPoolOpsData {
summary?: MetadataMissingTaskPoolStatusData;
ops?: {
generated_at?: string;
recommended_action?: string;
command_entries?: Array<{
label?: string;
command?: string;
}>;
artifact_entries?: Array<{
label?: string;
path?: string;
}>;
};
}
export interface MetadataMissingWorkbenchSummaryData {
generated_at?: string;
sample_limit?: number;
queue_limit?: number;
prompt_limit?: number;
run_id?: string;
top_missing_fields?: Array<{
field?: string;
missing_count?: number;
missing_ratio?: number;
}>;
next_actions?: Array<{
key?: string;
label?: string;
summary?: string;
}>;
operator_notes?: Array<{
title?: string;
content?: string;
}>;
queue?: {
queue_size?: number;
items?: Array<Record<string, any>>;
};
audit?: {
total_videos?: number;
videos_with_any_missing_metadata?: number;
field_stats?: Array<Record<string, any>>;
};
codex_dispatch_prompt?: string;
}
export interface MetadataMissingTaskPoolData {
generated_at?: string;
source_generated_at?: string;
batch_size?: number;
batch_limit?: number;
total_videos?: number;
videos_with_any_missing_metadata?: number;
queue_size?: number;
operator_hint?: string;
top_missing_fields?: Array<{
field?: string;
missing_count?: number;
missing_ratio?: number;
}>;
todo_summary?: Array<{
batch_id?: string;
label?: string;
focus_field?: string;
items_count?: number;
priority_level?: string;
}>;
batches?: Array<{
batch_id?: string;
batch_no?: number;
batch_label?: string;
focus_field?: string;
priority_level?: string;
items_count?: number;
status_label?: string;
owner?: string;
history_count?: number;
codex_prompt?: string;
items?: Array<Record<string, any>>;
}>;
}
}

View File

@@ -1,6 +1,6 @@
import { ResPage, ResultData } from "@/api/interface/index";
import { ConfigList } from "@/api/interface/system/config";
import { getSystemConfigListApiUrl, getSystemConfigSaveApiUrl } from "@/api/config";
import { getSystemConfigListApiUrl, getSystemConfigSaveApiUrl, getSystemConfigSeoAiRulesResetApiUrl } from "@/api/config";
import http from "@/api";
@@ -12,3 +12,7 @@ export const getConfigList = (params: ConfigList.ReqParams) => {
export const SaveApi = (params: ConfigList.saveParams) => {
return http.post<ResPage<ResultData>>(getSystemConfigSaveApiUrl, params);
};
export const resetSeoAiRulesApi = (params: ConfigList.resetSeoAiRuleParams) => {
return http.post<ResPage<ResultData>>(getSystemConfigSeoAiRulesResetApiUrl, params);
};

View File

@@ -19,3 +19,27 @@ export const batchData = (params: VideoList.delParams) => {
export const batchVipData = (params: VideoList.delParams) => {
return http.post<ResPage<ResultData>>(getVideoSetLevelApiUrl, params);
};
export const getMetadataMissingTaskPoolStatus = () => {
return http.get<VideoList.MetadataMissingTaskPoolStatusData>(`/video/metadata/missing/task-pool/status`);
};
export const getMetadataMissingTaskPoolOps = () => {
return http.get<VideoList.MetadataMissingTaskPoolOpsData>(`/video/metadata/missing/task-pool/ops`);
};
export const getMetadataMissingWorkbenchSummary = () => {
return http.get<VideoList.MetadataMissingWorkbenchSummaryData>(`/video/metadata/missing/workbench`);
};
export const getMetadataMissingTaskPoolSummary = () => {
return http.get<VideoList.MetadataMissingTaskPoolData>(`/video/metadata/missing/task-pool`);
};
export const runMetadataMissingWorkbench = () => {
return http.post<ResultData>(`/video/metadata/missing/workbench/run`, {});
};
export const runMetadataMissingTaskPool = () => {
return http.post<ResultData>(`/video/metadata/missing/task-pool/run`, {});
};