feat(platform): expose amap service capabilities

This commit is contained in:
lingniu
2026-07-05 23:35:13 +08:00
parent 2e6d62c493
commit 07336e08bc
3 changed files with 102 additions and 0 deletions

View File

@@ -1665,6 +1665,32 @@ export function Dashboard({
onClick: openTimeMonitorRaw
}
];
const amapCapabilityItems = [
{
label: '实时底图',
value: amapConfigured ? '可用' : '降级',
detail: amapConfigured ? '车辆在线分布、最后位置和地图选车可直接使用高德底图。' : '未配置 Web JS Key 时保留坐标预览。',
color: amapConfigured ? 'green' as const : 'orange' as const
},
{
label: '轨迹路径',
value: amapConfigured ? '可回放' : '坐标线',
detail: amapConfigured ? '轨迹回放可叠加道路底图,辅助判断停留、绕行和断点。' : '缺少底图时只展示历史坐标证据。',
color: amapConfigured ? 'green' as const : 'orange' as const
},
{
label: '区域围栏',
value: amapApiConfigured ? '可扩展' : '待接入',
detail: amapApiConfigured ? '服务端 API 可承接围栏、区域、路线和位置服务扩展。' : '围栏和区域能力需要服务端地图 API。',
color: amapApiConfigured ? 'blue' as const : 'orange' as const
},
{
label: '地址解析',
value: amapSecurityProxyEnabled ? '代理可用' : '待代理',
detail: amapSecurityProxyEnabled ? '逆地理和路线请求可通过安全代理收敛密钥。' : '生产环境建议通过 /_AMapService 代理服务端能力。',
color: amapSecurityProxyEnabled ? 'green' as const : 'orange' as const
}
];
const customerQuestionActions = [
{
question: '这辆车现在在哪里?',
@@ -2676,6 +2702,21 @@ export function Dashboard({
<Typography.Text type="secondary">
32960808MQTT
</Typography.Text>
<div className="vp-amap-capability-list" aria-label="地图服务能力清单">
<div className="vp-amap-capability-head">
<strong></strong>
<span> Web JS API 使</span>
</div>
<div className="vp-amap-capability-grid">
{amapCapabilityItems.map((item) => (
<div key={item.label} className="vp-amap-capability-item">
<Tag color={item.color}>{item.label}</Tag>
<strong>{item.value}</strong>
<span>{item.detail}</span>
</div>
))}
</div>
</div>
</div>
<div className="vp-amap-service-foundation-grid">
{amapVehicleServiceItems.map((item) => (

View File

@@ -2593,6 +2593,60 @@ body {
gap: 10px;
}
.vp-amap-capability-list {
padding: 12px;
border: 1px solid rgba(22, 100, 255, 0.14);
border-radius: 8px;
background: rgba(255, 255, 255, 0.78);
display: grid;
gap: 10px;
}
.vp-amap-capability-head {
display: grid;
gap: 3px;
}
.vp-amap-capability-head strong {
color: var(--vp-text);
font-size: 14px;
line-height: 20px;
}
.vp-amap-capability-head span {
color: var(--vp-text-muted);
font-size: 12px;
line-height: 18px;
}
.vp-amap-capability-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 8px;
}
.vp-amap-capability-item {
min-width: 0;
padding: 10px;
border: 1px solid var(--vp-border);
border-radius: 8px;
background: #ffffff;
display: grid;
gap: 6px;
}
.vp-amap-capability-item strong {
color: var(--vp-text);
font-size: 14px;
line-height: 20px;
}
.vp-amap-capability-item span {
color: var(--vp-text-muted);
font-size: 12px;
line-height: 18px;
}
.vp-amap-service-foundation-grid {
min-width: 0;
display: grid;
@@ -11749,6 +11803,7 @@ button.vp-realtime-command-item:focus-visible {
.vp-customer-cockpit,
.vp-customer-cockpit-actions,
.vp-amap-service-foundation,
.vp-amap-capability-grid,
.vp-amap-service-foundation-grid,
.vp-customer-vehicle-monitor,
.vp-customer-vehicle-monitor-grid,

View File

@@ -778,6 +778,12 @@ test('dashboard prioritizes customer vehicle service command over data sources',
expect(screen.getByRole('button', { name: '车辆健康与能耗工作台 SOC/氢能字段 1,286,320 今日数据 字段证据' })).toBeInTheDocument();
expect(screen.getByRole('button', { name: '车辆健康与能耗工作台 异常维护 7 告警 告警事件' })).toBeInTheDocument();
expect(screen.getByRole('button', { name: '车辆健康与能耗工作台 里程能耗 1 天窗口 统计查询' })).toBeInTheDocument();
expect(screen.getByText('地图服务能力清单')).toBeInTheDocument();
expect(screen.getByText('把高德 Web JS 和服务端 API 翻译成客户能使用的车辆服务能力。')).toBeInTheDocument();
expect(screen.getByText('实时底图')).toBeInTheDocument();
expect(screen.getByText('轨迹路径')).toBeInTheDocument();
expect(screen.getByText('区域围栏')).toBeInTheDocument();
expect(screen.getByText('地址解析')).toBeInTheDocument();
});
test('dashboard presents a customer dispatch operations home', async () => {