schema([ Forms\Components\Select::make('status') ->options([ 'pending' => 'در انتظار', 'uploaded' => 'بارگذاری شده', 'verified' => 'تأیید شده', 'rejected' => 'رد شده', ]) ->label('وضعیت'), Forms\Components\Textarea::make('notes') ->rows(3) ->label('یادداشت'), Forms\Components\Select::make('verified_by') ->relationship('verifier', 'name') ->label('تأییدکننده'), Forms\Components\DateTimePicker::make('verified_at') ->label('تاریخ تأیید'), ]); } public function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('form.title')->label('فرم تعهدنامه')->limit(40), Tables\Columns\TextColumn::make('status') ->label('وضعیت') ->badge() ->color(fn (string $state): string => match ($state) { 'pending' => 'warning', 'uploaded' => 'info', 'verified' => 'success', 'rejected' => 'danger', default => 'gray', }) ->formatStateUsing(fn (string $state): string => match ($state) { 'pending' => 'در انتظار', 'uploaded' => 'بارگذاری شده', 'verified' => 'تأیید شده', 'rejected' => 'رد شده', default => $state, }), Tables\Columns\TextColumn::make('uploader.name')->label('بارگذاری توسط')->toggleable(), Tables\Columns\TextColumn::make('verifier.name')->label('تأییدکننده')->toggleable(), Tables\Columns\TextColumn::make('verified_at')->label('تاریخ تأیید')->dateTime('Y/m/d H:i')->toggleable(), Tables\Columns\TextColumn::make('notes')->label('یادداشت')->limit(40)->toggleable(), ]) ->defaultSort('created_at', 'desc') // ساخت دستی مجاز نیست — این رکوردها از آپلود تعهدنامه توسط مشتری ایجاد می‌شوند ->headerActions([]) ->actions([ Tables\Actions\EditAction::make(), Tables\Actions\Action::make('download') ->label('دانلود فایل') ->icon('heroicon-o-arrow-down-tray') ->url(fn ($record) => $record->uploaded_file_path ? asset('storage/' . $record->uploaded_file_path) : null) ->openUrlInNewTab() ->visible(fn ($record) => !empty($record->uploaded_file_path)), ]) ->bulkActions([]); } }