diff --git a/web/pages/Assistants.tsx b/web/pages/Assistants.tsx index 453c2f8..7722af3 100644 --- a/web/pages/Assistants.tsx +++ b/web/pages/Assistants.tsx @@ -273,7 +273,8 @@ export const AssistantsPage: React.FC = () => { const updateTemplateSuggestionState = ( field: 'prompt' | 'opener', value: string, - caret: number | null + caret: number | null, + control?: HTMLTextAreaElement | HTMLInputElement | null ) => { if (caret === null || caret < 0) { setTemplateSuggestion(null); @@ -294,11 +295,18 @@ export const AssistantsPage: React.FC = () => { setTemplateSuggestion(null); return; } + if (!control) { + setTemplateSuggestion(null); + return; + } + const anchor = getTemplateSuggestionAnchor(control, caret); setTemplateSuggestion({ field, start, end: caret, query: token, + anchorLeft: anchor.left, + anchorTop: anchor.top, }); }; @@ -765,16 +773,16 @@ export const AssistantsPage: React.FC = () => { onChange={(e) => { const next = e.target.value; updateAssistant('prompt', next); - updateTemplateSuggestionState('prompt', next, e.currentTarget.selectionStart); + updateTemplateSuggestionState('prompt', next, e.currentTarget.selectionStart, e.currentTarget); }} onKeyUp={(e) => { - updateTemplateSuggestionState('prompt', e.currentTarget.value, e.currentTarget.selectionStart); + updateTemplateSuggestionState('prompt', e.currentTarget.value, e.currentTarget.selectionStart, e.currentTarget); }} onClick={(e) => { - updateTemplateSuggestionState('prompt', e.currentTarget.value, e.currentTarget.selectionStart); + updateTemplateSuggestionState('prompt', e.currentTarget.value, e.currentTarget.selectionStart, e.currentTarget); }} onFocus={(e) => { - updateTemplateSuggestionState('prompt', e.currentTarget.value, e.currentTarget.selectionStart); + updateTemplateSuggestionState('prompt', e.currentTarget.value, e.currentTarget.selectionStart, e.currentTarget); }} onBlur={() => { window.setTimeout(() => { @@ -784,7 +792,13 @@ export const AssistantsPage: React.FC = () => { placeholder="设定小助手的人设、语气、行为规范以及业务逻辑..." /> {templateSuggestion?.field === 'prompt' && filteredSystemTemplateVariables.length > 0 && ( -
+
{filteredSystemTemplateVariables.map((item) => (