diff --git a/frontend/src/FloodAnalysisWorkspace.jsx b/frontend/src/FloodAnalysisWorkspace.jsx
index 364a1c3..c974406 100644
--- a/frontend/src/FloodAnalysisWorkspace.jsx
+++ b/frontend/src/FloodAnalysisWorkspace.jsx
@@ -35,13 +35,13 @@ const LIST_PAGE_SIZE = 20;
const VIEWS = [
{ key: 'extract', label: '水体提取' },
{ key: 'detect', label: '洪涝检测' },
- { key: 'impact', label: '套合分析' },
- { key: 'results', label: '结果与任务' },
+ { key: 'impact', label: '影响评估' },
+ { key: 'results', label: '成果管理' },
];
const SENSOR_ROWS = [
- { name: 'LT-1', status: '精密链路可用', tone: 'ok', capability: 'ENVI/SARscape' },
- { name: 'GF3', status: '快速路线可用', tone: 'warn', capability: 'Python/GDAL + Otsu' },
+ { name: 'LT-1', status: 'Gamma 标准化可用', tone: 'ok', capability: 'ENVI/SARscape' },
+ { name: 'GF3', status: '分析就绪链路可用', tone: 'ok', capability: 'SARscape + GDAL' },
{ name: 'Sentinel-1', status: '待接入', tone: 'muted', capability: '导入适配器' },
];
@@ -305,7 +305,7 @@ function SceneRow({ scene, readOnly, onShowMap, onExtractWater, onReset }) {
-
+
{isActiveStatus(scene.status) && (
)}
@@ -321,7 +321,7 @@ function WaterResultRow({ item, onShowMap }) {
- 水体 #{item.id}
+ 水体提取 #{item.id}
{item.scene_id && 场景 #{item.scene_id}}
{item.satellite && {item.satellite}}
@@ -335,7 +335,7 @@ function WaterResultRow({ item, onShowMap }) {
{item.error_msg &&
{item.error_msg}
}
-
+
);
@@ -347,17 +347,17 @@ function FloodProductRow({ product, onOpenManifest }) {
- {product.product_id || `产品 #${product.id}`}
+ {product.product_id || `成果 #${product.id}`}
- {product.detection_id && 洪涝 #{product.detection_id}}
+ {product.detection_id && 洪涝检测 #{product.detection_id}}
-
+
-
+
-
+
);
@@ -372,18 +372,18 @@ function FloodEventRow({ event, mapLayerVis, mapLoading, productBusy, onShowMap,
- 洪涝 #{event.id}
+ 洪涝检测 #{event.id}
{event.pre_satellite || event.post_satellite || '-'}
-
+
{event.error_msg &&
{event.error_msg}
}
@@ -400,17 +400,17 @@ function FloodEventRow({ event, mapLayerVis, mapLoading, productBusy, onShowMap,
style={buttonStyle(layers[key] ? 'success' : 'quiet', false, { padding: '3px 8px', fontSize: 11 })}
onClick={() => onToggleLayer(event.id, key, !layers[key])}
>
- {layers[key] ? '已显示' : '已隐藏'} {label}
+ {layers[key] ? '隐藏' : '显示'}{label}
))}
{onSelectImpact && (
)}
{onCreateProduct && (
)}
@@ -566,7 +566,7 @@ export default function FloodAnalysisWorkspace({
} catch (error) {
setScenes([]);
setScenesTotal(0);
- showMessage('error', `水体场景加载失败:${getErrorText(error)}`);
+ showMessage('error', `分析就绪场景加载失败:${getErrorText(error)}`);
} finally {
setScenesLoading(false);
}
@@ -582,7 +582,7 @@ export default function FloodAnalysisWorkspace({
} catch (error) {
setWaterResults([]);
setWaterTotal(0);
- showMessage('error', `水体结果加载失败:${getErrorText(error)}`);
+ showMessage('error', `水体提取成果加载失败:${getErrorText(error)}`);
} finally {
setWaterLoading(false);
}
@@ -595,7 +595,7 @@ export default function FloodAnalysisWorkspace({
setFloodEvents(res.items || []);
} catch (error) {
setFloodEvents([]);
- showMessage('error', `洪涝结果加载失败:${getErrorText(error)}`);
+ showMessage('error', `洪涝检测成果加载失败:${getErrorText(error)}`);
} finally {
setFloodLoading(false);
}
@@ -608,7 +608,7 @@ export default function FloodAnalysisWorkspace({
setFloodProducts(res.items || []);
} catch (error) {
setFloodProducts([]);
- showMessage('error', `洪涝产品加载失败:${getErrorText(error)}`);
+ showMessage('error', `发布成果加载失败:${getErrorText(error)}`);
} finally {
setProductLoading(false);
}
@@ -735,15 +735,15 @@ export default function FloodAnalysisWorkspace({
const handleSubmitPreprocess = async () => {
if (readOnly || selectedRadars.length === 0) return;
setActionBusy('geocode');
- showMessage('info', `正在提交 ${selectedRadars.length} 景水体预处理任务...`);
- onTaskStart?.(null, '正在提交水体预处理任务...');
+ showMessage('info', `正在提交 ${selectedRadars.length} 景分析就绪影像生成任务...`);
+ onTaskStart?.(null, '正在提交分析就绪影像生成任务...');
let ok = 0;
let fail = 0;
for (const radar of selectedRadars) {
try {
const res = await submitFloodPreprocess({ radar_data_id: radar.id });
ok += 1;
- if (res.data?.task_id) onTaskStart?.(res.data.task_id, '水体预处理任务已启动');
+ if (res.data?.task_id) onTaskStart?.(res.data.task_id, '分析就绪影像生成任务已启动');
} catch {
fail += 1;
}
@@ -751,7 +751,7 @@ export default function FloodAnalysisWorkspace({
setActionBusy('');
setSelectedRadars([]);
await refreshAll();
- showMessage(fail ? 'warn' : 'success', fail ? `提交完成:${ok} 成功,${fail} 失败。` : `已提交 ${ok} 个水体预处理任务。`);
+ showMessage(fail ? 'warn' : 'success', fail ? `提交完成:${ok} 成功,${fail} 失败。` : `已提交 ${ok} 个分析就绪影像生成任务。`);
};
const handleResetScene = async (scene) => {
@@ -794,9 +794,9 @@ export default function FloodAnalysisWorkspace({
{ id: `water_${item.id}`, label: `水体提取 #${item.id}` },
{ classified: preview },
);
- showMessage('success', `水体提取 #${item.id} 已加载到地图。`);
+ showMessage('success', `水体提取 #${item.id} 已显示在地图中。`);
} catch (error) {
- showMessage('error', `水体图层加载失败:${getErrorText(error)}`);
+ showMessage('error', `水体图层显示失败:${getErrorText(error)}`);
} finally {
setMapLoadingId(null);
}
@@ -887,9 +887,9 @@ export default function FloodAnalysisWorkspace({
classified: !!layers.classified,
},
}));
- showMessage('success', `洪涝结果 #${event.id} 已加载到地图。`);
+ showMessage('success', `洪涝检测 #${event.id} 已显示在地图中。`);
} catch (error) {
- showMessage('error', `洪涝图层加载失败:${getErrorText(error)}`);
+ showMessage('error', `洪涝图层显示失败:${getErrorText(error)}`);
} finally {
setMapLoadingId(null);
}
@@ -897,20 +897,20 @@ export default function FloodAnalysisWorkspace({
const handleShowPairCoverage = (pair) => {
if (!pair?.pre?.coverage_polygon || !pair?.post?.coverage_polygon) {
- showMessage('warn', '该候选配对缺少覆盖范围,无法上图。');
+ showMessage('warn', '该候选配对缺少覆盖范围,无法显示。');
return;
}
floodPanel.onShowFloodPairOnMap?.(pair);
- showMessage('success', '候选配对覆盖范围已加载到地图。');
+ showMessage('success', '候选配对覆盖范围已显示。');
};
const handleShowFloodVector = () => {
if (!impactResult?.flood_vector_geojson) {
- showMessage('warn', '该套合结果没有可用洪涝矢量。');
+ showMessage('warn', '该影响评估结果没有可用洪涝范围矢量。');
return;
}
floodPanel.onShowFloodVectorOnMap?.(impactResult);
- showMessage('success', '洪涝矢量已加载到地图。');
+ showMessage('success', '洪涝范围矢量已显示。');
};
const loadImpactResult = useCallback(async (detectionId, { silent = false } = {}) => {
@@ -920,11 +920,11 @@ export default function FloodAnalysisWorkspace({
const data = await getFloodImpact(detectionId);
setImpactResult(data);
if (!silent && data?.warnings?.includes?.('overlay has not been run')) {
- showMessage('warn', '该洪涝结果尚未运行套合分析。');
+ showMessage('warn', '该洪涝检测尚未执行影响评估。');
}
} catch (error) {
setImpactResult(null);
- if (!silent) showMessage('error', `套合结果加载失败:${getErrorText(error)}`);
+ if (!silent) showMessage('error', `影响评估结果加载失败:${getErrorText(error)}`);
} finally {
setImpactLoading(false);
}
@@ -937,9 +937,9 @@ export default function FloodAnalysisWorkspace({
await runFloodOverlay(selectedImpactEvent.id, { near_threshold_m: 500 });
await loadImpactResult(selectedImpactEvent.id, { silent: true });
await loadFloodEvents();
- showMessage('success', `洪涝结果 #${selectedImpactEvent.id} 套合分析已完成。`);
+ showMessage('success', `洪涝检测 #${selectedImpactEvent.id} 影响评估已完成。`);
} catch (error) {
- showMessage('error', `套合分析失败:${getErrorText(error)}`);
+ showMessage('error', `影响评估失败:${getErrorText(error)}`);
} finally {
setOverlayRunning(false);
}
@@ -951,10 +951,10 @@ export default function FloodAnalysisWorkspace({
try {
await createFloodProduct(event.id);
await loadFloodProducts();
- showMessage('success', `洪涝结果 #${event.id} 产品已生成。`);
+ showMessage('success', `洪涝检测 #${event.id} 成果已发布。`);
setResultMode('products');
} catch (error) {
- showMessage('error', `产品生成失败:${getErrorText(error)}`);
+ showMessage('error', `成果发布失败:${getErrorText(error)}`);
} finally {
setProductBusyId(null);
}
@@ -963,9 +963,9 @@ export default function FloodAnalysisWorkspace({
const handleOpenProductManifest = async (product) => {
try {
const manifest = await getFloodProductManifest(product.id || product.product_id);
- showMessage('success', `Manifest 已读取:${manifest?.schema || product.product_id || product.id}`);
+ showMessage('success', `成果清单已读取:${manifest?.schema || product.product_id || product.id}`);
} catch (error) {
- showMessage('error', `Manifest 读取失败:${getErrorText(error)}`);
+ showMessage('error', `成果清单读取失败:${getErrorText(error)}`);
}
};
@@ -1004,10 +1004,10 @@ export default function FloodAnalysisWorkspace({
-
-
-
-
+
+
+
+
@@ -1059,7 +1059,7 @@ export default function FloodAnalysisWorkspace({