feat(desktop): drop parked review flow, add publish management

SaaS 侧人工审核后才创建 publish job,desktop 不再做二次审核:移除
manual/waiting_user/parked/from_parked 状态机与 LeaseFromParked 查询,
desktop client 只执行发布并新增"发布管理"页(待发布队列 / 历史 / 再次
发送)。同时抽离 @geo/publisher-platforms 共享适配器包、新增 Redis-based
desktop_presence 与 publish_record_support,刷新 admin-web 发布弹窗与
媒体库;plan A / spec 文档同步口径。
This commit is contained in:
2026-04-20 09:52:48 +08:00
parent b16e9f0bd1
commit a617d39a4a
93 changed files with 5519 additions and 3594 deletions
@@ -1,6 +1,5 @@
import { computed, onMounted, onUnmounted, readonly, shallowRef } from "vue";
import { createPreviewRuntimeSnapshot } from "../mock/runtime-preview";
import type { DesktopRuntimeSnapshot } from "../types";
const snapshot = shallowRef<DesktopRuntimeSnapshot | null>(null);
@@ -15,12 +14,13 @@ async function refreshRuntimeSnapshot() {
error.value = null;
try {
if (window.desktopBridge?.app?.runtimeSnapshot) {
snapshot.value = await window.desktopBridge.app.runtimeSnapshot();
if (!window.desktopBridge?.app?.runtimeSnapshot) {
snapshot.value = null;
error.value = "desktop runtime bridge unavailable";
return;
}
snapshot.value = createPreviewRuntimeSnapshot();
snapshot.value = await window.desktopBridge.app.runtimeSnapshot();
} catch (err) {
error.value = err instanceof Error ? err.message : "runtime snapshot unavailable";
} finally {
@@ -28,6 +28,25 @@ async function refreshRuntimeSnapshot() {
}
}
async function refreshAccounts() {
if (!window.desktopBridge?.app?.refreshRuntimeAccounts) {
await refreshRuntimeSnapshot();
return;
}
loading.value = true;
error.value = null;
try {
await window.desktopBridge.app.refreshRuntimeAccounts();
snapshot.value = await window.desktopBridge.app.runtimeSnapshot();
} catch (err) {
error.value = err instanceof Error ? err.message : "refresh accounts failed";
} finally {
loading.value = false;
}
}
function startPolling() {
if (intervalHandle) {
return;
@@ -66,6 +85,7 @@ export function useDesktopRuntime() {
loading: readonly(loading),
error: readonly(error),
refresh: refreshRuntimeSnapshot,
refreshAccounts,
hasSnapshot: computed(() => snapshot.value !== null),
};
}