refactor: kb & station & terminal
This commit is contained in:
@@ -3,7 +3,6 @@
|
||||
namespace App\Filament\Widgets;
|
||||
|
||||
use App\Models\Document;
|
||||
use App\Models\Group;
|
||||
use Filament\Widgets\StatsOverviewWidget as BaseWidget;
|
||||
use Filament\Widgets\StatsOverviewWidget\Stat;
|
||||
|
||||
@@ -13,49 +12,29 @@ class KnowledgeBaseStatsWidget extends BaseWidget
|
||||
|
||||
protected function getStats(): array
|
||||
{
|
||||
// 统计文档数据
|
||||
$totalDocuments = Document::count();
|
||||
$completedDocuments = Document::where('conversion_status', 'completed')->count();
|
||||
$failedDocuments = Document::where('conversion_status', 'failed')->count();
|
||||
$processingDocuments = Document::whereIn('conversion_status', ['pending', 'processing'])->count();
|
||||
|
||||
// 统计分组数据
|
||||
$totalGroups = Group::count();
|
||||
|
||||
// 计算转换成功率
|
||||
$conversionRate = $totalDocuments > 0
|
||||
? round(($completedDocuments / $totalDocuments) * 100, 1)
|
||||
|
||||
$conversionRate = $totalDocuments > 0
|
||||
? round(($completedDocuments / $totalDocuments) * 100, 1)
|
||||
: 0;
|
||||
|
||||
return [
|
||||
Stat::make('文档总数', $totalDocuments)
|
||||
->description('知识库中的文档总数')
|
||||
->descriptionIcon('heroicon-m-document-text')
|
||||
->color('primary')
|
||||
->chart([7, 12, 15, 18, 22, 25, $totalDocuments]),
|
||||
|
||||
->color('primary'),
|
||||
|
||||
Stat::make('转换完成', $completedDocuments)
|
||||
->description("成功率: {$conversionRate}%")
|
||||
->descriptionIcon('heroicon-m-check-circle')
|
||||
->color('success')
|
||||
->chart([5, 10, 12, 15, 18, 20, $completedDocuments]),
|
||||
|
||||
->color('success'),
|
||||
|
||||
Stat::make('转换失败', $failedDocuments)
|
||||
->description('需要重新处理')
|
||||
->descriptionIcon('heroicon-m-x-circle')
|
||||
->color('danger')
|
||||
->url(route('filament.admin.resources.documents.index', ['tableFilters[conversion_status][value]' => 'failed'])),
|
||||
|
||||
Stat::make('处理中', $processingDocuments)
|
||||
->description('等待转换或转换中')
|
||||
->descriptionIcon('heroicon-m-arrow-path')
|
||||
->color('warning'),
|
||||
|
||||
Stat::make('知识库分组', $totalGroups)
|
||||
->description('专用知识库数量')
|
||||
->descriptionIcon('heroicon-m-folder')
|
||||
->color('info')
|
||||
->url(route('filament.admin.resources.groups.index')),
|
||||
->color('danger'),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
namespace App\Filament\Widgets;
|
||||
|
||||
use App\Models\Station;
|
||||
use App\Models\Terminal;
|
||||
use App\Models\TerminalPrompt;
|
||||
use Filament\Widgets\StatsOverviewWidget as BaseWidget;
|
||||
use Filament\Widgets\StatsOverviewWidget\Stat;
|
||||
|
||||
@@ -14,23 +14,20 @@ class TerminalStatsWidget extends BaseWidget
|
||||
protected function getStats(): array
|
||||
{
|
||||
// 统计终端数据
|
||||
$totalStations = Station::count();
|
||||
$totalTerminals = Terminal::count();
|
||||
$onlineTerminals = Terminal::where('is_online', true)->count();
|
||||
|
||||
// 统计提示词
|
||||
$totalPrompts = TerminalPrompt::count();
|
||||
|
||||
return [
|
||||
Stat::make('线站数量', $totalStations)
|
||||
->description('线站')
|
||||
->descriptionIcon('heroicon-m-building-office')
|
||||
->color('info'),
|
||||
|
||||
Stat::make('终端总数', $totalTerminals)
|
||||
->description("{$onlineTerminals} 个在线")
|
||||
->descriptionIcon('heroicon-m-computer-desktop')
|
||||
->color('primary')
|
||||
->url(route('filament.admin.resources.terminals.index')),
|
||||
|
||||
Stat::make('提示词配置', $totalPrompts)
|
||||
->description('终端提示词总数')
|
||||
->descriptionIcon('heroicon-m-chat-bubble-left-right')
|
||||
->color('success'),
|
||||
->color('primary'),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user