mirror of
https://github.com/linshenkx/prompt-optimizer.git
synced 2026-05-07 05:56:49 +08:00
fix(pro-workspace): restore tool/variable/favorite actions via provide/inject
Migrate Pro workspace event handlers from emit to provide/inject pattern to fix broken event chain introduced by RouterView refactoring (2b669b9d). Fixed actions: - openToolManager: tool management modal not opening (#293) - openVariableManager: variable manager not accessible - handleSaveFavorite: save-to-favorite not working in Pro mode - saveToGlobal: save temporary variable to global failing - openPromptPreview: prompt preview panel not opening Pattern: provide('key', handler) in PromptOptimizerApp, inject with emit fallback in ContextSystemWorkspace and ContextUserWorkspace.
This commit is contained in:
@@ -1749,6 +1749,28 @@ void registerOptionalIntegrations({
|
||||
});
|
||||
provide("handleSaveFavorite", handleSaveFavorite);
|
||||
|
||||
// 提供 openToolManager 接口(供 Pro 工作区直接调用)
|
||||
provide("openToolManager", () => {
|
||||
showToolManager.value = true;
|
||||
});
|
||||
|
||||
// 提供 openVariableManager 接口(供 Pro 工作区直接调用)
|
||||
provide("openVariableManager", (variableName?: string) => {
|
||||
handleOpenVariableManager(variableName);
|
||||
});
|
||||
|
||||
// 提供 saveToGlobal 接口(供 Pro 工作区将临时变量保存到全局)
|
||||
provide("saveToGlobal", (name: string, value: string) => {
|
||||
variableManager?.customVariables?.value
|
||||
? (variableManager.customVariables.value[name] = value)
|
||||
: undefined;
|
||||
});
|
||||
|
||||
// 提供 openPromptPreview 接口(供 Pro 工作区打开提示词预览面板)
|
||||
provide("openPromptPreview", () => {
|
||||
showPreviewPanel.value = true;
|
||||
});
|
||||
|
||||
// 模板管理器
|
||||
const templateManagerState = useTemplateManager(services);
|
||||
|
||||
|
||||
@@ -40,9 +40,9 @@
|
||||
:scan-variables="scanVariables"
|
||||
:optimization-mode="optimizationMode"
|
||||
:tool-count="toolCount"
|
||||
@open-variable-manager="emit('open-variable-manager')"
|
||||
@open-variable-manager="handleOpenVariableManager"
|
||||
@open-context-editor="handleOpenContextEditor"
|
||||
@open-tool-manager="emit('open-tool-manager')"
|
||||
@open-tool-manager="handleOpenToolManager"
|
||||
:enable-tool-management="true"
|
||||
:collapsible="true"
|
||||
:max-height="300"
|
||||
@@ -131,7 +131,7 @@
|
||||
@openTemplateManager="handleOpenTemplateManager"
|
||||
@switchVersion="handleSwitchVersion"
|
||||
@switchToV0="handleSwitchToV0"
|
||||
@save-favorite="emit('save-favorite', $event)"
|
||||
@save-favorite="handleSaveFavorite"
|
||||
@open-preview="handleOpenPromptPreview"
|
||||
@apply-to-conversation="handleApplyToConversation"
|
||||
@apply-improvement="handleApplyImprovement"
|
||||
@@ -174,7 +174,7 @@
|
||||
:input-mode="inputMode"
|
||||
:button-size="buttonSize"
|
||||
@variable-change="handleVariableChange"
|
||||
@save-to-global="(name: string, value: string) => emit('save-to-global', name, value)"
|
||||
@save-to-global="handleSaveToGlobal"
|
||||
@temporary-variable-remove="handleVariableRemove"
|
||||
@temporary-variables-clear="handleVariablesClear"
|
||||
/>
|
||||
@@ -681,6 +681,13 @@ const appOpenContextEditor = inject<
|
||||
((messagesOrTab?: ContextEditorOpenArg, variables?: Record<string, string>) => void) | null
|
||||
>('openContextEditor', null)
|
||||
|
||||
// 注入 App 层统一的 open* 接口(Pro 工作区专有功能)
|
||||
const appOpenToolManager = inject<(() => void) | null>('openToolManager', null)
|
||||
const appOpenVariableManager = inject<((variableName?: string) => void) | null>('openVariableManager', null)
|
||||
const appHandleSaveFavorite = inject<((data: SaveFavoritePayload) => void) | null>('handleSaveFavorite', null)
|
||||
const appSaveToGlobal = inject<((name: string, value: string) => void) | null>('saveToGlobal', null)
|
||||
const appOpenPromptPreview = inject<(() => void) | null>('openPromptPreview', null)
|
||||
|
||||
// Pro Multi: message list is session-owned (per-submode isolation).
|
||||
// Keep emitting update:optimizationContext only as a backward-compat hook for non-App hosts.
|
||||
const proMultiSession = useProMultiMessageSession()
|
||||
@@ -733,6 +740,27 @@ const handleOpenContextEditor = (
|
||||
emit('open-context-editor')
|
||||
}
|
||||
|
||||
// Pro 工作区专有功能的处理函数(优先使用 inject,emit 作为兜底)
|
||||
const handleOpenToolManager = () => {
|
||||
if (appOpenToolManager) { appOpenToolManager(); return; }
|
||||
emit('open-tool-manager')
|
||||
}
|
||||
|
||||
const handleOpenVariableManager = () => {
|
||||
if (appOpenVariableManager) { appOpenVariableManager(); return; }
|
||||
emit('open-variable-manager')
|
||||
}
|
||||
|
||||
const handleSaveFavorite = (data: SaveFavoritePayload) => {
|
||||
if (appHandleSaveFavorite) { appHandleSaveFavorite(data); return; }
|
||||
emit('save-favorite', data)
|
||||
}
|
||||
|
||||
const handleSaveToGlobal = (name: string, value: string) => {
|
||||
if (appSaveToGlobal) { appSaveToGlobal(name, value); return; }
|
||||
emit('save-to-global', name, value)
|
||||
}
|
||||
|
||||
// ✅ 优化模式:固定为 'system'(此组件专门用于系统模式优化)
|
||||
const optimizationMode: OptimizationMode = 'system';
|
||||
|
||||
|
||||
@@ -185,7 +185,7 @@
|
||||
@openTemplateManager="handleOpenTemplateManager"
|
||||
@switchVersion="handleSwitchVersion"
|
||||
@switchToV0="handleSwitchToV0"
|
||||
@save-favorite="emit('save-favorite', $event)"
|
||||
@save-favorite="handleSaveFavorite"
|
||||
@open-preview="handleOpenPromptPreview"
|
||||
@apply-improvement="handleApplyImprovement"
|
||||
@save-local-edit="handleSaveLocalEdit"
|
||||
@@ -667,6 +667,8 @@ const emit = defineEmits<{
|
||||
// --- 打开面板/管理器 ---
|
||||
/** 打开变量管理器 */
|
||||
"open-variable-manager": [];
|
||||
/** 打开工具管理器 */
|
||||
"open-tool-manager": [];
|
||||
/** 打开模板管理器 */
|
||||
"open-template-manager": [type?: string];
|
||||
/** 配置模型 */
|
||||
@@ -720,6 +722,13 @@ const appOpenTemplateManager = inject<((type?: string) => void) | null>(
|
||||
null,
|
||||
)
|
||||
|
||||
// 注入 App 层统一的 open* 接口(Pro 工作区专有功能)
|
||||
const appOpenToolManager = inject<(() => void) | null>('openToolManager', null)
|
||||
const appOpenVariableManager = inject<((variableName?: string) => void) | null>('openVariableManager', null)
|
||||
const appHandleSaveFavorite = inject<((data: SaveFavoritePayload) => void) | null>('handleSaveFavorite', null)
|
||||
const appSaveToGlobal = inject<((name: string, value: string) => void) | null>('saveToGlobal', null)
|
||||
const appOpenPromptPreview = inject<(() => void) | null>('openPromptPreview', null)
|
||||
|
||||
const handleOpenModelManager = () => {
|
||||
if (appOpenModelManager) {
|
||||
appOpenModelManager('text')
|
||||
@@ -738,6 +747,22 @@ const handleOpenTemplateManager = (typeOrPayload?: string | Record<string, unkno
|
||||
emit('open-template-manager', type)
|
||||
}
|
||||
|
||||
// Pro 工作区专有功能的处理函数(优先使用 inject,emit 作为兜底)
|
||||
const handleOpenToolManager = () => {
|
||||
if (appOpenToolManager) { appOpenToolManager(); return; }
|
||||
emit('open-tool-manager')
|
||||
}
|
||||
|
||||
const handleOpenVariableManager = () => {
|
||||
if (appOpenVariableManager) { appOpenVariableManager(); return; }
|
||||
emit('open-variable-manager')
|
||||
}
|
||||
|
||||
const handleSaveFavorite = (data: SaveFavoritePayload) => {
|
||||
if (appHandleSaveFavorite) { appHandleSaveFavorite(data); return; }
|
||||
emit('save-favorite', data)
|
||||
}
|
||||
|
||||
// ========================
|
||||
// 内部状态管理
|
||||
// ========================
|
||||
@@ -1996,6 +2021,7 @@ const {
|
||||
temporaryVariables: computed(() => ({ ...temporaryVariables.value })),
|
||||
predefinedVariables,
|
||||
saveGlobalVariable: (name, value) => {
|
||||
if (appSaveToGlobal) { appSaveToGlobal(name, value); return; }
|
||||
if (variableManager?.isReady.value) {
|
||||
variableManager.addVariable(name, value)
|
||||
}
|
||||
@@ -2007,6 +2033,7 @@ const {
|
||||
})
|
||||
|
||||
const handleSaveToGlobalFromTest = (name: string, value: string) => {
|
||||
if (appSaveToGlobal) { appSaveToGlobal(name, value); return; }
|
||||
if (variableManager?.isReady.value) {
|
||||
variableManager.addVariable(name, value)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user