release: bump version to 0.54.0
This commit is contained in:
@@ -8,6 +8,22 @@ This project follows the repository versioning rule:
|
|||||||
- `improvement` -> `+0.0.1`(bugfix + 小功能混合)
|
- `improvement` -> `+0.0.1`(bugfix + 小功能混合)
|
||||||
- `bugfix` -> `+0.0.1`
|
- `bugfix` -> `+0.0.1`
|
||||||
|
|
||||||
|
## [0.54.0] — 2026-05-13
|
||||||
|
|
||||||
|
Released: 2026-05-13
|
||||||
|
|
||||||
|
### Highlights
|
||||||
|
- 新增 Earth 轨迹显示设置,将卫星轨迹从图层列表迁移到桌面与移动设置面板,便于独立控制轨迹线显示。
|
||||||
|
- 优化卫星静止呼吸与低缩放圆点闪烁参数,让卫星态势视觉节奏更柔和、层次更清晰。
|
||||||
|
- 更新算力中心图标资产,统一 Earth 交互图标在高分辨率显示下的视觉规格。
|
||||||
|
|
||||||
|
### Added / Fixed / Improved
|
||||||
|
- 新增轨迹显示偏好持久化,并在卫星图层不可用时同步禁用轨迹设置入口。
|
||||||
|
- 调整卫星呼吸、透明度和 twinkle 参数,降低闪烁频率并增强可读性。
|
||||||
|
- 将轨迹控制状态同步到桌面设置、移动设置和图层卡片刷新流程。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## [0.53.0] — 2026-05-13
|
## [0.53.0] — 2026-05-13
|
||||||
|
|
||||||
Released: 2026-05-13
|
Released: 2026-05-13
|
||||||
|
|||||||
@@ -16,12 +16,13 @@
|
|||||||
## Current Version
|
## Current Version
|
||||||
|
|
||||||
- `main` 当前主线历史推导到:`0.16.5`
|
- `main` 当前主线历史推导到:`0.16.5`
|
||||||
- `dev` 当前开发分支历史推导到:`0.53.0`
|
- `dev` 当前开发分支历史推导到:`0.54.0`
|
||||||
|
|
||||||
## Timeline
|
## Timeline
|
||||||
|
|
||||||
| Version | Type | Branch | Commit | Summary |
|
| Version | Type | Branch | Commit | Summary |
|
||||||
| --- | --- | --- | --- | --- |
|
| --- | --- | --- | --- | --- |
|
||||||
|
| `0.54.0` | feature | `dev` | `pending` | 新增 Earth 轨迹显示设置并迁移到桌面/移动设置面板,持久化轨迹偏好,同时优化卫星呼吸闪烁参数和算力中心图标资产 |
|
||||||
| `0.53.0` | feature | `dev` | `pending` | 新增 Gitea Actions CI/CD、生产镜像、Kubernetes Helm chart 与 staging 部署 smoke test,明确 Vite 生产构建和 planet.sh 开发入口边界 |
|
| `0.53.0` | feature | `dev` | `pending` | 新增 Gitea Actions CI/CD、生产镜像、Kubernetes Helm chart 与 staging 部署 smoke test,明确 Vite 生产构建和 planet.sh 开发入口边界 |
|
||||||
| `0.52.0` | feature | `dev` | `pending` | 新增邮箱验证码账号自助链路、AISStream 船只实时采集与受控 snapshot/WS 展示、数据产品统计接口、受控图层接口和数据源批量运维 |
|
| `0.52.0` | feature | `dev` | `pending` | 新增邮箱验证码账号自助链路、AISStream 船只实时采集与受控 snapshot/WS 展示、数据产品统计接口、受控图层接口和数据源批量运维 |
|
||||||
| `0.51.1` | bugfix | `dev` | `pending` | 修复 Earth 静态资源模块相对路径与 Material Symbols 本地字体加载,避免部署路径变化或外部字体不可用时图标/边界资源失效 |
|
| `0.51.1` | bugfix | `dev` | `pending` | 修复 Earth 静态资源模块相对路径与 Material Symbols 本地字体加载,避免部署路径变化或外部字体不可用时图标/边界资源失效 |
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "planet-frontend",
|
"name": "planet-frontend",
|
||||||
"version": "0.53.0",
|
"version": "0.54.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"packageManager": "bun@1",
|
"packageManager": "bun@1",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="#38bdf8" class="bi bi-pc" viewBox="0 0 16 16">
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
||||||
<path d="M5 0a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1H5Zm.5 14a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1Zm2 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1ZM5 1.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5ZM5.5 3h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1 0-1Z"/>
|
<g fill="none">
|
||||||
|
<path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"/>
|
||||||
|
<path fill="#38bdf8" d="M3 19h1V6.36a1.5 1.5 0 0 1 1.026-1.423l8-2.666A1.5 1.5 0 0 1 15 3.694V19h1V9.99a.5.5 0 0 1 .598-.49l2.196.44A1.5 1.5 0 0 1 20 11.41V19h1a1 1 0 1 1 0 2H3a1 1 0 1 1 0-2"/>
|
||||||
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 383 B After Width: | Height: | Size: 821 B |
@@ -199,16 +199,6 @@
|
|||||||
<span class="layer-row-toggle-track"></span>
|
<span class="layer-row-toggle-track"></span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="layer-row" data-layer-name="轨迹 trails">
|
|
||||||
<span class="material-symbols-rounded layer-row-icon">timeline</span>
|
|
||||||
<div class="layer-row-copy">
|
|
||||||
<span class="layer-row-label">轨迹</span>
|
|
||||||
<span class="layer-row-meta">Trails</span>
|
|
||||||
</div>
|
|
||||||
<button id="toggle-trails" class="layer-row-toggle active" type="button" role="switch" aria-checked="true" title="切换轨迹显示">
|
|
||||||
<span class="layer-row-toggle-track"></span>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="layer-row" data-layer-name="卫星 satellites">
|
<div class="layer-row" data-layer-name="卫星 satellites">
|
||||||
<span class="material-symbols-rounded layer-row-icon">satellite_alt</span>
|
<span class="material-symbols-rounded layer-row-icon">satellite_alt</span>
|
||||||
<div class="layer-row-copy">
|
<div class="layer-row-copy">
|
||||||
@@ -889,6 +879,16 @@
|
|||||||
<span class="earth-mobile-settings-switch-track"></span>
|
<span class="earth-mobile-settings-switch-track"></span>
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
|
<label class="earth-mobile-settings-card">
|
||||||
|
<div class="earth-mobile-settings-copy">
|
||||||
|
<span class="earth-mobile-settings-label">轨迹显示</span>
|
||||||
|
<span class="earth-mobile-settings-subtitle">控制卫星轨迹线显示</span>
|
||||||
|
</div>
|
||||||
|
<span class="earth-mobile-settings-switch">
|
||||||
|
<input type="checkbox" data-trails-toggle checked>
|
||||||
|
<span class="earth-mobile-settings-switch-track"></span>
|
||||||
|
</span>
|
||||||
|
</label>
|
||||||
<label class="earth-mobile-settings-card">
|
<label class="earth-mobile-settings-card">
|
||||||
<div class="earth-mobile-settings-copy">
|
<div class="earth-mobile-settings-copy">
|
||||||
<span class="earth-mobile-settings-label">低缩放圆点</span>
|
<span class="earth-mobile-settings-label">低缩放圆点</span>
|
||||||
@@ -1190,6 +1190,16 @@
|
|||||||
<span class="earth-settings-switch-track"></span>
|
<span class="earth-settings-switch-track"></span>
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
|
<label class="earth-settings-item" for="toggle-trails-display">
|
||||||
|
<div class="earth-settings-copy">
|
||||||
|
<span class="earth-settings-item-title">轨迹显示</span>
|
||||||
|
<span class="earth-settings-item-subtitle">控制卫星轨迹线显示,卫星图层关闭时会自动隐藏</span>
|
||||||
|
</div>
|
||||||
|
<span class="earth-settings-switch">
|
||||||
|
<input id="toggle-trails-display" type="checkbox" data-trails-toggle checked>
|
||||||
|
<span class="earth-settings-switch-track"></span>
|
||||||
|
</span>
|
||||||
|
</label>
|
||||||
<label class="earth-settings-item" for="toggle-interactable-compact-dots">
|
<label class="earth-settings-item" for="toggle-interactable-compact-dots">
|
||||||
<div class="earth-settings-copy">
|
<div class="earth-settings-copy">
|
||||||
<span class="earth-settings-item-title">低缩放圆点</span>
|
<span class="earth-settings-item-title">低缩放圆点</span>
|
||||||
|
|||||||
@@ -339,13 +339,13 @@ export const SATELLITE_CONFIG = {
|
|||||||
dotZoomScalePower: 1,
|
dotZoomScalePower: 1,
|
||||||
ringSize: 0.07,
|
ringSize: 0.07,
|
||||||
apiPath: '/api/v1/visualization/geo/satellites',
|
apiPath: '/api/v1/visualization/geo/satellites',
|
||||||
breathingSpeed: 0.08,
|
breathingSpeed: 0.036,
|
||||||
breathingScaleAmplitude: 0.15,
|
breathingScaleAmplitude: 0.22,
|
||||||
breathingOpacityMin: 0.5,
|
breathingOpacityMin: 0.34,
|
||||||
breathingOpacityMax: 0.8,
|
breathingOpacityMax: 0.9,
|
||||||
dotBreathingSpeed: 0.12,
|
dotBreathingSpeed: 0.12,
|
||||||
dotBreathingScaleAmplitude: 0.2,
|
dotBreathingScaleAmplitude: 0.28,
|
||||||
dotOpacityMin: 0.7,
|
dotOpacityMin: 0.42,
|
||||||
dotOpacityMax: 1.0
|
dotOpacityMax: 1.0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
61
frontend/public/earth/js/controls.js
vendored
61
frontend/public/earth/js/controls.js
vendored
@@ -782,6 +782,7 @@ function getCurrentSharedSettingsSnapshot() {
|
|||||||
rotationMode,
|
rotationMode,
|
||||||
cruiseModules: getCruiseModules(),
|
cruiseModules: getCruiseModules(),
|
||||||
satelliteDisplayStyle: getSatelliteDisplayStyle(),
|
satelliteDisplayStyle: getSatelliteDisplayStyle(),
|
||||||
|
trailsEnabled: getShowTrails(),
|
||||||
layerVisibility: Object.fromEntries(
|
layerVisibility: Object.fromEntries(
|
||||||
getPersistedLayers().map((layer) => [layer.id, Boolean(layer.getVisible?.())]),
|
getPersistedLayers().map((layer) => [layer.id, Boolean(layer.getVisible?.())]),
|
||||||
),
|
),
|
||||||
@@ -834,6 +835,7 @@ function cloneEarthSettings(settings) {
|
|||||||
cruiseModules: [...(settings.shared.cruiseModules || DEFAULT_CRUISE_MODULES)],
|
cruiseModules: [...(settings.shared.cruiseModules || DEFAULT_CRUISE_MODULES)],
|
||||||
satelliteDisplayStyle:
|
satelliteDisplayStyle:
|
||||||
settings.shared.satelliteDisplayStyle || DEFAULT_SATELLITE_DISPLAY_STYLE,
|
settings.shared.satelliteDisplayStyle || DEFAULT_SATELLITE_DISPLAY_STYLE,
|
||||||
|
trailsEnabled: settings.shared.trailsEnabled !== false,
|
||||||
terrainOpacity: settings.shared.terrainOpacity,
|
terrainOpacity: settings.shared.terrainOpacity,
|
||||||
dayNightEnabled: settings.shared.dayNightEnabled,
|
dayNightEnabled: settings.shared.dayNightEnabled,
|
||||||
defaultEarthZoom: settings.shared.defaultEarthZoom,
|
defaultEarthZoom: settings.shared.defaultEarthZoom,
|
||||||
@@ -978,6 +980,11 @@ function normalizeEarthSettings(rawSettings, defaults) {
|
|||||||
typeof sharedSettings?.interactableCompactDotsEnabled === "boolean"
|
typeof sharedSettings?.interactableCompactDotsEnabled === "boolean"
|
||||||
? sharedSettings.interactableCompactDotsEnabled
|
? sharedSettings.interactableCompactDotsEnabled
|
||||||
: defaults.shared.interactableCompactDotsEnabled;
|
: defaults.shared.interactableCompactDotsEnabled;
|
||||||
|
const nextTrailsEnabled = typeof sharedSettings?.trailsEnabled === "boolean"
|
||||||
|
? sharedSettings.trailsEnabled
|
||||||
|
: typeof inputLayerVisibility.trails === "boolean"
|
||||||
|
? inputLayerVisibility.trails
|
||||||
|
: defaults.shared.trailsEnabled;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
version: EARTH_SETTINGS_VERSION,
|
version: EARTH_SETTINGS_VERSION,
|
||||||
@@ -987,6 +994,7 @@ function normalizeEarthSettings(rawSettings, defaults) {
|
|||||||
? nextCruiseModules
|
? nextCruiseModules
|
||||||
: [...DEFAULT_CRUISE_MODULES],
|
: [...DEFAULT_CRUISE_MODULES],
|
||||||
satelliteDisplayStyle: nextSatelliteDisplayStyle,
|
satelliteDisplayStyle: nextSatelliteDisplayStyle,
|
||||||
|
trailsEnabled: nextTrailsEnabled,
|
||||||
layerVisibility: normalizedLayerVisibility,
|
layerVisibility: normalizedLayerVisibility,
|
||||||
terrainOpacity: Number.isFinite(nextTerrainOpacity)
|
terrainOpacity: Number.isFinite(nextTerrainOpacity)
|
||||||
? nextTerrainOpacity
|
? nextTerrainOpacity
|
||||||
@@ -1371,6 +1379,10 @@ async function applyEarthSettings(settings, { applyLayers = true } = {}) {
|
|||||||
persist: false,
|
persist: false,
|
||||||
suppressStatus: true,
|
suppressStatus: true,
|
||||||
});
|
});
|
||||||
|
setTrailsDisplayEnabled(settings.shared.trailsEnabled, {
|
||||||
|
persist: false,
|
||||||
|
silent: true,
|
||||||
|
});
|
||||||
setSatelliteIdleBreathingEnabled(settings.shared.satelliteIdleBreathingEnabled, {
|
setSatelliteIdleBreathingEnabled(settings.shared.satelliteIdleBreathingEnabled, {
|
||||||
persist: false,
|
persist: false,
|
||||||
suppressStatus: true,
|
suppressStatus: true,
|
||||||
@@ -1774,14 +1786,34 @@ async function setVesselsLayerEnabled(button, enabled, { persist = true, silent
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function setTrailsLayerEnabled(button, enabled, { persist = true, silent = false } = {}) {
|
function syncTrailsDisplayControls() {
|
||||||
|
const trailsEnabled = getShowTrails();
|
||||||
|
const disabledState = getLayerDisabledState("trails");
|
||||||
|
document.querySelectorAll("[data-trails-toggle]").forEach((toggle) => {
|
||||||
|
if (!(toggle instanceof HTMLInputElement)) return;
|
||||||
|
toggle.checked = trailsEnabled;
|
||||||
|
toggle.disabled = disabledState.disabled;
|
||||||
|
const label = toggle.closest("label");
|
||||||
|
label?.classList.toggle("is-disabled", disabledState.disabled);
|
||||||
|
if (label instanceof HTMLElement) {
|
||||||
|
if (disabledState.disabled && disabledState.tooltip) {
|
||||||
|
label.title = disabledState.tooltip;
|
||||||
|
} else {
|
||||||
|
label.removeAttribute("title");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function setTrailsDisplayEnabled(enabled, { persist = true, silent = false } = {}) {
|
||||||
toggleTrails(enabled);
|
toggleTrails(enabled);
|
||||||
const disabledState = getLayerDisabledState("trails");
|
const disabledState = getLayerDisabledState("trails");
|
||||||
setLayerButtonState(button, {
|
setLayerButtonState(getLayerButton("trails"), {
|
||||||
active: enabled,
|
active: enabled,
|
||||||
disabled: disabledState.disabled,
|
disabled: disabledState.disabled,
|
||||||
tooltip: disabledState.tooltip || (enabled ? "隐藏轨迹" : "显示轨迹"),
|
tooltip: disabledState.tooltip || (enabled ? "隐藏轨迹" : "显示轨迹"),
|
||||||
});
|
});
|
||||||
|
syncTrailsDisplayControls();
|
||||||
syncMobileLayerCards();
|
syncMobileLayerCards();
|
||||||
if (persist) persistEarthSettings();
|
if (persist) persistEarthSettings();
|
||||||
if (!silent) {
|
if (!silent) {
|
||||||
@@ -1798,6 +1830,7 @@ function syncTrailsAvailability() {
|
|||||||
disabled: disabledState.disabled,
|
disabled: disabledState.disabled,
|
||||||
tooltip: disabledState.tooltip || (trailsEnabled ? "隐藏轨迹" : "显示轨迹"),
|
tooltip: disabledState.tooltip || (trailsEnabled ? "隐藏轨迹" : "显示轨迹"),
|
||||||
});
|
});
|
||||||
|
syncTrailsDisplayControls();
|
||||||
syncMobileLayerCards();
|
syncMobileLayerCards();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2021,23 +2054,6 @@ function getBuiltinLayerDefinitions() {
|
|||||||
setVisible: (visible, options = {}) =>
|
setVisible: (visible, options = {}) =>
|
||||||
setSatellitesLayerEnabled(getLayerButton("satellites"), visible, options),
|
setSatellitesLayerEnabled(getLayerButton("satellites"), visible, options),
|
||||||
},
|
},
|
||||||
{
|
|
||||||
id: "trails",
|
|
||||||
buttonId: "toggle-trails",
|
|
||||||
icon: "timeline",
|
|
||||||
label: "轨迹",
|
|
||||||
meta: "Trails",
|
|
||||||
keywords: "轨迹 trails",
|
|
||||||
defaultActive: true,
|
|
||||||
displayOrder: 20,
|
|
||||||
startupPriority: null,
|
|
||||||
startupMode: "visible",
|
|
||||||
startupLabel: "轨迹",
|
|
||||||
startupMessage: "",
|
|
||||||
getVisible: () => getShowTrails(),
|
|
||||||
setVisible: (visible, options = {}) =>
|
|
||||||
setTrailsLayerEnabled(getLayerButton("trails"), visible, options),
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
id: "terrain",
|
id: "terrain",
|
||||||
buttonId: "toggle-terrain",
|
buttonId: "toggle-terrain",
|
||||||
@@ -2698,6 +2714,13 @@ function setupSettingsControls() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
document.querySelectorAll("[data-trails-toggle]").forEach((toggle) => {
|
||||||
|
if (!(toggle instanceof HTMLInputElement)) return;
|
||||||
|
bindListener(toggle, "change", () => {
|
||||||
|
setTrailsDisplayEnabled(toggle.checked);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
document.querySelectorAll("[data-interactable-compact-dots-toggle]").forEach((toggle) => {
|
document.querySelectorAll("[data-interactable-compact-dots-toggle]").forEach((toggle) => {
|
||||||
if (!(toggle instanceof HTMLInputElement)) return;
|
if (!(toggle instanceof HTMLInputElement)) return;
|
||||||
bindListener(toggle, "change", () => {
|
bindListener(toggle, "change", () => {
|
||||||
|
|||||||
@@ -681,9 +681,9 @@ function createSatelliteTwinkleState(index) {
|
|||||||
return {
|
return {
|
||||||
phase: hashSatelliteUnit(index, 1) * Math.PI * 2,
|
phase: hashSatelliteUnit(index, 1) * Math.PI * 2,
|
||||||
secondaryPhase: hashSatelliteUnit(index, 2) * Math.PI * 2,
|
secondaryPhase: hashSatelliteUnit(index, 2) * Math.PI * 2,
|
||||||
speed: 0.62 + hashSatelliteUnit(index, 3) * 1.45,
|
speed: 0.38 + hashSatelliteUnit(index, 3) * 0.72,
|
||||||
floor: hashSatelliteUnit(index, 4) * 0.22,
|
floor: hashSatelliteUnit(index, 4) * 0.16,
|
||||||
intensity: 0.48 + hashSatelliteUnit(index, 5) * 0.52,
|
intensity: 0.68 + hashSatelliteUnit(index, 5) * 0.62,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "planet"
|
name = "planet"
|
||||||
version = "0.53.0"
|
version = "0.54.0"
|
||||||
description = "智能星球计划 - 态势感知系统"
|
description = "智能星球计划 - 态势感知系统"
|
||||||
requires-python = ">=3.14"
|
requires-python = ">=3.14"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
|||||||
Reference in New Issue
Block a user