feat: add MCP creator screenshot metrics recognition
This commit is contained in:
@@ -954,7 +954,7 @@ export default function Home() {
|
||||
selectedItem: Assignment,
|
||||
file: File,
|
||||
kind: "publish" | "creator-center" | "task-result",
|
||||
) => {
|
||||
): Promise<{ exposure?: number | null; views?: number | null; ocrStatus?: string }> => {
|
||||
const compressed = await compressScreenshot(file);
|
||||
const headers: Record<string, string> = {
|
||||
"Content-Type": compressed.type || "image/jpeg",
|
||||
@@ -973,7 +973,12 @@ export default function Home() {
|
||||
headers,
|
||||
body: compressed,
|
||||
});
|
||||
const uploadResult = (await uploadResponse.json()) as { error?: string };
|
||||
const uploadResult = (await uploadResponse.json()) as {
|
||||
error?: string;
|
||||
exposure?: number | null;
|
||||
views?: number | null;
|
||||
ocrStatus?: string;
|
||||
};
|
||||
if (!uploadResponse.ok) {
|
||||
throw new Error(
|
||||
uploadResult.error ||
|
||||
@@ -984,6 +989,7 @@ export default function Home() {
|
||||
: "发布截图上传失败"),
|
||||
);
|
||||
}
|
||||
return uploadResult;
|
||||
};
|
||||
|
||||
const submitNote = async (event: FormEvent) => {
|
||||
@@ -1082,22 +1088,31 @@ export default function Home() {
|
||||
setToast("请选择创作者中心截图");
|
||||
return;
|
||||
}
|
||||
if (
|
||||
!/^\d{1,12}$/.test(creatorExposure) ||
|
||||
!/^\d{1,12}$/.test(creatorViews)
|
||||
) {
|
||||
setToast("请填写正确的曝光量和阅读量");
|
||||
return;
|
||||
}
|
||||
try {
|
||||
setCreatorWorking(true);
|
||||
let exposureValue = creatorExposure;
|
||||
let viewsValue = creatorViews;
|
||||
if (creatorScreenshot) {
|
||||
setCreatorStage("正在上传截图…");
|
||||
await uploadEvidence(
|
||||
const ocrResult = await uploadEvidence(
|
||||
selected,
|
||||
creatorScreenshot,
|
||||
"creator-center",
|
||||
);
|
||||
if (typeof ocrResult.exposure === "number") {
|
||||
exposureValue = String(ocrResult.exposure);
|
||||
setCreatorExposure(exposureValue);
|
||||
}
|
||||
if (typeof ocrResult.views === "number") {
|
||||
viewsValue = String(ocrResult.views);
|
||||
setCreatorViews(viewsValue);
|
||||
}
|
||||
if (ocrResult.ocrStatus === "success") {
|
||||
setCreatorStage("已识别截图数据,正在保存…");
|
||||
}
|
||||
}
|
||||
if (!/^\d{1,12}$/.test(exposureValue) || !/^\d{1,12}$/.test(viewsValue)) {
|
||||
throw new Error("未识别到完整数据,请填写曝光量和阅读量");
|
||||
}
|
||||
setCreatorStage("正在保存数据…");
|
||||
const response = await fetch(partnerApi("/api/partner"), {
|
||||
@@ -1109,8 +1124,8 @@ export default function Home() {
|
||||
claimToken,
|
||||
delegationToken,
|
||||
distributionId: selected.id,
|
||||
exposure: creatorExposure,
|
||||
views: creatorViews,
|
||||
exposure: exposureValue,
|
||||
views: viewsValue,
|
||||
}),
|
||||
});
|
||||
const result = (await response.json()) as { error?: string };
|
||||
@@ -1593,7 +1608,7 @@ export default function Home() {
|
||||
<div className="evidence-empty-state">
|
||||
<b>+</b>
|
||||
<strong>点击选择第7天创作者中心截图</strong>
|
||||
<small>截图仅用于运营核对,不再自动OCR</small>
|
||||
<small>上传后自动识别曝光量和阅读量,识别失败可手动填写</small>
|
||||
</div>
|
||||
)}
|
||||
<label className="evidence-upload-action">
|
||||
|
||||
Reference in New Issue
Block a user