label('编辑'), Actions\DeleteAction::make() ->label('删除'), ]; } public function infolist(Infolist $infolist): Infolist { return $infolist ->schema([ Infolists\Components\Section::make('基本信息') ->schema([ Infolists\Components\TextEntry::make('name') ->label('终端名称'), Infolists\Components\TextEntry::make('code') ->label('终端编码') ->copyable(), Infolists\Components\TextEntry::make('ip_address') ->label('IP地址') ->copyable() ->placeholder('未设置'), Infolists\Components\TextEntry::make('station_id') ->label('线站ID') ->placeholder('未绑定'), ]) ->columns(2), Infolists\Components\Section::make('组态图配置') ->schema([ Infolists\Components\TextEntry::make('diagram_url') ->label('组态图URL') ->copyable() ->placeholder('未设置') ->url(fn ($state) => $state) ->openUrlInNewTab(), ]), Infolists\Components\Section::make('显示配置') ->schema([ Infolists\Components\KeyValueEntry::make('display_config') ->label('显示参数') ->keyLabel('参数名称') ->valueLabel('参数值'), ]), Infolists\Components\Section::make('知识库关联') ->schema([ Infolists\Components\RepeatableEntry::make('knowledgeBases') ->label('关联的知识库') ->schema([ Infolists\Components\TextEntry::make('name') ->label('知识库名称'), Infolists\Components\TextEntry::make('pivot.priority') ->label('优先级') ->badge() ->color('success'), ]) ->columns(2) ->placeholder('未关联任何知识库'), ]) ->collapsible(), Infolists\Components\Section::make('AI提示词配置') ->schema([ Infolists\Components\TextEntry::make('prompt.prompt_template') ->label('提示词模板') ->markdown() ->placeholder('未配置提示词'), ]) ->collapsible(), Infolists\Components\Section::make('状态信息') ->schema([ Infolists\Components\IconEntry::make('is_online') ->label('在线状态') ->boolean() ->trueIcon('heroicon-o-check-circle') ->falseIcon('heroicon-o-x-circle') ->trueColor('success') ->falseColor('danger'), Infolists\Components\TextEntry::make('last_online_at') ->label('最后在线时间') ->dateTime('Y-m-d H:i:s') ->placeholder('从未在线'), ]) ->columns(2), Infolists\Components\Section::make('同步历史') ->schema([ Infolists\Components\RepeatableEntry::make('syncLogs') ->label('同步记录') ->schema([ Infolists\Components\TextEntry::make('status') ->label('状态') ->badge() ->formatStateUsing(fn (string $state): string => match ($state) { 'pending' => '待同步', 'syncing' => '同步中', 'synced' => '已同步', 'failed' => '失败', default => '未知', }) ->color(fn (string $state): string => match ($state) { 'pending' => 'warning', 'syncing' => 'info', 'synced' => 'success', 'failed' => 'danger', default => 'gray', }), Infolists\Components\TextEntry::make('created_at') ->label('创建时间') ->dateTime('Y-m-d H:i:s'), Infolists\Components\TextEntry::make('synced_at') ->label('同步完成时间') ->dateTime('Y-m-d H:i:s') ->placeholder('未完成'), Infolists\Components\TextEntry::make('error_message') ->label('错误信息') ->placeholder('无') ->color('danger') ->columnSpanFull(), ]) ->columns(3) ->placeholder('暂无同步记录') ->contained(false), ]) ->description('显示最近的配置同步记录,按时间倒序排列') ->collapsible() ->collapsed(), Infolists\Components\Section::make('时间信息') ->schema([ Infolists\Components\TextEntry::make('created_at') ->label('创建时间') ->dateTime('Y-m-d H:i:s'), Infolists\Components\TextEntry::make('updated_at') ->label('更新时间') ->dateTime('Y-m-d H:i:s'), ]) ->columns(2) ->collapsed(), ]); } }