feat: 更新A2UIButton组件以支持A2UI快速操作和可用性检查;增强InjectionControlTab和QueueExecutionListView组件的错误处理和用户提示

This commit is contained in:
catlog22
2026-03-05 20:02:46 +08:00
parent 3fd55ebd4b
commit cff1e16441
6 changed files with 68 additions and 792 deletions

View File

@@ -8,15 +8,20 @@ import { MessageSquare } from 'lucide-react';
import { Button } from '@/components/ui/Button';
import { useDialogStyleContext } from '@/contexts/DialogStyleContext';
import { cn } from '@/lib/utils';
import { useNotificationStore } from '@/stores';
interface A2UIButtonProps {
className?: string;
compact?: boolean;
}
export function A2UIButton({ className, compact = false }: A2UIButtonProps) {
const { formatMessage } = useIntl();
const { preferences } = useDialogStyleContext();
const a2uiSurfaces = useNotificationStore((state) => state.a2uiSurfaces);
const isA2UIAvailable = Object.keys(a2uiSurfaces).length > 0;
// Don't render if hidden in preferences
if (!preferences.showA2UIButtonInToolbar) {
@@ -24,21 +29,36 @@ export function A2UIButton({ className, compact = false }: A2UIButtonProps) {
}
const handleClick = () => {
// Trigger A2UI quick action - this would typically open a dialog
// This would typically open the most relevant A2UI dialog
// For now, we'll just log the action
console.log('[A2UIButton] Quick action triggered');
if (isA2UIAvailable) {
console.log('[A2UIButton] Quick action triggered');
// Example: find the first popup surface and handle it
const firstPopupId = Object.keys(a2uiSurfaces).find(id => a2uiSurfaces[id].displayMode === 'popup');
if(firstPopupId) {
// In a real implementation, you might open a dialog here
// using the surface data.
console.log(`[A2UIButton] Would open dialog for surface: ${firstPopupId}`);
}
}
};
const buttonTitle = isA2UIAvailable
? formatMessage({ id: 'navigation.toolbar.a2ui.quickAction', defaultMessage: 'A2UI Quick Action' })
: formatMessage({ id: 'navigation.toolbar.a2ui.unavailable', defaultMessage: 'No A2UI action available' });
return (
<Button
variant="default"
size={compact ? 'icon' : 'sm'}
onClick={handleClick}
disabled={!isA2UIAvailable}
className={cn(
'gap-2 bg-primary text-primary-foreground hover:bg-primary/90',
!isA2UIAvailable && 'bg-muted-foreground/30 hover:bg-muted-foreground/30',
className
)}
title={formatMessage({ id: 'navigation.toolbar.a2ui.quickAction', defaultMessage: 'A2UI Quick Action' })}
title={buttonTitle}
>
<MessageSquare className="h-4 w-4" />
{!compact && (