feat: rebuild warm operations workbench

This commit is contained in:
Codex
2026-07-30 14:49:33 +08:00
parent 25c853dea8
commit 570edf6bb2
88 changed files with 13413 additions and 2250 deletions
+16 -6
View File
@@ -1,10 +1,7 @@
import { useEffect, useMemo, useRef, useState } from 'react';
import type { InstanceContext } from '../app-shell.js';
import {
createOperationClient,
type OperationClient,
} from '../operations/operation-client.js';
import { createOperationClient, type OperationClient } from '../operations/operation-client.js';
import { safeUiError } from '../ui/locale.js';
export type OverviewFieldValue = string | number | boolean | null;
@@ -51,11 +48,22 @@ const SECTIONS = [
const FIELD_LABELS: Readonly<Record<string, string>> = {
Model: '型号',
Manufacturer: '制造商',
IMEI: 'IMEI',
Version: '固件版本',
Uptime: '运行时间',
Slots: '卡槽数',
Active: '活跃数',
Operator: '运营商',
Technology: '接入制式',
Signal: '信号强度',
MCC: 'MCC',
MNC: 'MNC',
Registration: '注册状态',
IPv4: 'IPv4 地址',
IPv6: 'IPv6 地址',
Download: '下行速率',
Upload: '上行速率',
'Messages today': '今日消息数',
Calls: '通话数',
Usage: '使用率',
@@ -214,7 +222,8 @@ export function OverviewSystemPage({
return;
setActionState({ busy: true, message: `正在${op.title}` });
try {
await client.list({ pageSize: 100 });
// Avoid pageSize=100 first-page truncation for late-sorted operation ids.
await client.list({ search: op.operationId, pageSize: 100 });
const prepared = await client.prepare({
operationId: op.operationId,
targets: [{ instanceId: instance.id, revision: targetRevision }],
@@ -235,7 +244,8 @@ export function OverviewSystemPage({
const job = await client.execute(prepared.id);
setActionState({
busy: false,
message: job.status === 'succeeded' ? `${op.title}已提交成功。` : `${op.title}结果未知或失败。`,
message:
job.status === 'succeeded' ? `${op.title}已提交成功。` : `${op.title}结果未知或失败。`,
...(job.status === 'succeeded' ? {} : { error: `${op.title}结果未知或失败。` }),
});
} catch (error) {