diff --git a/packages/web-shell/client/components/QueuedPromptDisplay.test.tsx b/packages/web-shell/client/components/QueuedPromptDisplay.test.tsx index e50e25560a7..169ecbba8f3 100644 --- a/packages/web-shell/client/components/QueuedPromptDisplay.test.tsx +++ b/packages/web-shell/client/components/QueuedPromptDisplay.test.tsx @@ -73,6 +73,36 @@ describe('QueuedPromptDisplay', () => { expect(container.textContent).toContain('排队消息二'); }); + it('shows server queue status without an insert action', () => { + const onInsert = vi.fn(); + const { container } = setup({ + prompts: [{ id: 1, text: '等待处理', serverState: 'queued' }], + onInsert, + }); + + expect(container.textContent).toContain('服务器排队中...'); + expect(container.querySelector('[role="status"]')).toBeTruthy(); + expect( + container.querySelector('[class*="queuedPromptSpinner"]'), + ).toBeNull(); + const buttons = [...container.querySelectorAll('button')]; + expect(buttons).toHaveLength(2); + expect(buttons.every((button) => !button.disabled)).toBe(true); + expect(container.textContent).not.toContain('插入'); + expect(onInsert).not.toHaveBeenCalled(); + }); + + it('keeps the spinner while a prompt is still submitting', () => { + const { container } = setup({ + prompts: [{ id: 1, text: '正在发送', serverState: 'submitting' }], + }); + + expect(container.textContent).toContain('提交中...'); + expect( + container.querySelector('[class*="queuedPromptSpinner"]'), + ).toBeTruthy(); + }); + it('renders queued reference annotations as tags', () => { const serialized = 'orders'; const text = `inspect ${serialized} now`; diff --git a/packages/web-shell/client/components/QueuedPromptDisplay.tsx b/packages/web-shell/client/components/QueuedPromptDisplay.tsx index 7e0bef08eb2..d68d45c893c 100644 --- a/packages/web-shell/client/components/QueuedPromptDisplay.tsx +++ b/packages/web-shell/client/components/QueuedPromptDisplay.tsx @@ -163,6 +163,7 @@ export function QueuedPromptDisplay({ const imageCount = prompt.images?.length ?? 0; const isCommand = isCommandPrompt(prompt.text); const isSubmitting = prompt.serverState === 'submitting'; + const isQueued = prompt.serverState === 'queued'; const isRunning = prompt.serverState === 'running'; const isRemoving = prompt.isRemoving === true; const isBusy = @@ -208,19 +209,23 @@ export function QueuedPromptDisplay({ {imageCount > 0 ? ` ${t('queue.imageCount', { count: imageCount })}` : ''} - {isSubmitting || prompt.isEditing || isRemoving ? ( - - + {isSubmitting || isQueued || prompt.isEditing || isRemoving ? ( + + {(isSubmitting || prompt.isEditing || isRemoving) && ( + + )} {isRemoving ? t('queue.removing') : prompt.isEditing ? t('queue.editing') - : t('queue.submitting')} + : isQueued + ? t('queue.serverQueued') + : t('queue.submitting')} ) : null} - {imageCount === 0 && ( + {imageCount === 0 && !isQueued && (