course-card.blade.php 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. {{-- resources/views/components/library/course-card.blade.php
  2. 课程封面卡片(用于「最新课程」推荐位网格)。
  3. Props: $course — 由 Library\CourseController 加工后的课程数组。
  4. --}}
  5. @props(['course'])
  6. @php
  7. $teacher = $course['teacher'] ?? [];
  8. $status = $course['status'] ?? 'closed';
  9. $statusKey = $status === 'open' ? 'course_status_open' : 'course_status_closed';
  10. $cover = $course['cover_url'] ?? null;
  11. @endphp
  12. <a href="{{ $course['detail_url'] }}" class="course-card" target="_blank" rel="noopener">
  13. {{-- 封面 --}}
  14. <div class="course-card__cover" style="{{ empty($cover) ? 'background:'.$course['cover_gradient'] : '' }}">
  15. @if($cover)
  16. <img src="{{ $cover }}" alt="{{ $course['title'] }}" loading="lazy" class="course-card__cover-img">
  17. @else
  18. <span class="course-card__cover-fallback">{{ $course['title'] }}</span>
  19. @endif
  20. <span class="course-badge course-badge--{{ $status }}">
  21. {{ __("library.{$statusKey}") }}
  22. </span>
  23. </div>
  24. {{-- 正文 --}}
  25. <div class="course-card__body">
  26. <h3 class="course-card__title">{{ $course['title'] }}</h3>
  27. <div class="course-card__teacher">
  28. @if(!empty($teacher['name']))
  29. <x-ui.author-avatar
  30. :avatar="$teacher['avatar'] ?? null"
  31. :color="$teacher['color']"
  32. :initials="$teacher['initials']"
  33. :name="$teacher['name']"
  34. size="sm" />
  35. @endif
  36. </div>
  37. <div class="course-card__foot">
  38. @if($course['number'] > 0)
  39. <span class="course-card__period">{{ __('library.course_period', ['n' => $course['number']]) }}</span>
  40. @endif
  41. <span class="course-card__members">{{ __('library.course_members', ['n' => $course['member_count']]) }}</span>
  42. </div>
  43. </div>
  44. </a>