feat: 插件声明式设置体系——registerSettings schema + 标准控件表单 + 一级导航入口开关

This commit is contained in:
Rick Ye
2026-09-11 01:45:32 +08:00
parent 8349db9947
commit 2ad1743e10
10 changed files with 887 additions and 13 deletions
+26
View File
@@ -25,6 +25,7 @@ import type {
WorkspaceFile,
WorkspaceMeta
} from '@shared/types'
import type { PluginSettingsSchemas, PluginSettingsValuesMap } from '@aso/plugin-sdk'
const api = {
// 窗口控制(自绘标题栏按钮)
@@ -142,6 +143,31 @@ const api = {
pluginsDirs: (): Promise<{ user: string[]; project: string[]; global: string[] }> =>
ipcRenderer.invoke('plugins:dirs'),
pluginsReadRenderer: (id: string): Promise<string> => ipcRenderer.invoke('plugins:readRenderer', id),
pluginsSettingsSchemas: (): Promise<PluginSettingsSchemas> => ipcRenderer.invoke('plugins:settingsSchemas'),
pluginsSettingsValues: (): Promise<PluginSettingsValuesMap> => ipcRenderer.invoke('plugins:settingsValues'),
pluginsSetSettingValue: (id: string, key: string, value: unknown): Promise<void> =>
ipcRenderer.invoke('plugins:setSettingValue', id, key, value),
pluginsSetSettingsNav: (id: string, on: boolean): Promise<void> =>
ipcRenderer.invoke('plugins:setSettingsNav', id, on),
pluginsSettingsAction: (id: string, key: string): Promise<void> =>
ipcRenderer.invoke('plugins:settingsAction', id, key),
pluginsPickPath: (mode: 'file' | 'directory' | 'image'): Promise<string | null> =>
ipcRenderer.invoke('plugins:pickPath', mode),
pluginsReadImage: (path: string): Promise<string | null> => ipcRenderer.invoke('plugins:readImage', path),
onPluginsSettingsSchemas: (callback: (schemas: PluginSettingsSchemas) => void): (() => void) => {
const listener = (_e: Electron.IpcRendererEvent, schemas: PluginSettingsSchemas): void => callback(schemas)
ipcRenderer.on('plugins:settingsSchemas', listener)
return () => {
ipcRenderer.removeListener('plugins:settingsSchemas', listener)
}
},
onPluginsSettingsValues: (callback: (values: PluginSettingsValuesMap) => void): (() => void) => {
const listener = (_e: Electron.IpcRendererEvent, values: PluginSettingsValuesMap): void => callback(values)
ipcRenderer.on('plugins:settingsValues', listener)
return () => {
ipcRenderer.removeListener('plugins:settingsValues', listener)
}
},
pluginsSetEnabled: (id: string, enabled: boolean): Promise<void> =>
ipcRenderer.invoke('plugins:setEnabled', id, enabled),
pluginsReload: (): Promise<void> => ipcRenderer.invoke('plugins:reload'),