columns([
TextColumn::make('official_title')
->label('教材信息')
->html()
->formatStateUsing(function ($state, Model $record): string {
$cover = $record->cover_path ?? null;
$coverUrl = null;
if ($cover) {
$coverUrl = Str::startsWith($cover, ['http://', 'https://', '/'])
? $cover
: Storage::disk('public')->url($cover);
}
$seriesName = $record->series->name ?? '未归类系列';
$stage = match ($record->stage) {
'primary' => '小学',
'junior' => '初中',
'senior' => '高中',
default => $record->stage ?: '未标注',
};
$semester = match ($record->semester) {
1 => '上学期',
2 => '下学期',
default => '未标注',
};
$naming = match ($record->naming_scheme) {
'new' => '新体系',
'old' => '旧体系',
default => $record->naming_scheme ?: '未标注',
};
$status = match ($record->status) {
'draft' => '草稿',
'published' => '已发布',
'archived' => '已归档',
default => $record->status ?: '未知',
};
$badgeTone = match ($record->status) {
'published' => 'text-emerald-600 bg-emerald-50 border-emerald-100',
'draft' => 'text-amber-600 bg-amber-50 border-amber-100',
'archived' => 'text-slate-500 bg-slate-100 border-slate-200',
default => 'text-slate-500 bg-slate-100 border-slate-200',
};
$title = e($state ?: '未命名教材');
$coverHtml = $coverUrl
? ""
: "