book-cover.blade.php 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. {{-- resources/views/components/ui/book-cover.blade.php
  2. 书籍封面组件。支持图片封面和渐变+文字封面两种形式。
  3. Props:
  4. $image — 封面图片 URL(为空时显示渐变+文字)
  5. $gradient — 渐变 CSS 字符串,image 为空时使用
  6. $title — 书名(image 为空时显示在封面上)
  7. $subtitle — 副标题(可选)
  8. $size — sm | md | lg(控制尺寸)
  9. $style3d — true | false(是否显示 3D 书脊效果,默认 true)
  10. $alt — img alt 文字(默认使用 $title)
  11. --}}
  12. @props([
  13. 'image' => null,
  14. 'gradient' => 'linear-gradient(135deg, #2d2010 0%, #1a1208 100%)',
  15. 'title' => '',
  16. 'subtitle' => '',
  17. 'size' => 'md',
  18. 'style3d' => true,
  19. 'alt' => null,
  20. ])
  21. @php
  22. $sizes = [
  23. 'sm' => 'book-cover--sm',
  24. 'md' => 'book-cover--md',
  25. 'lg' => 'book-cover--lg',
  26. ];
  27. $sizeClass = $sizes[$size] ?? $sizes['md'];
  28. @endphp
  29. <div class="book-cover {{ $sizeClass }} {{ $style3d ? 'book-cover--3d' : '' }}"
  30. style="{{ $image ? '' : 'background: ' . $gradient }}">
  31. @if($image)
  32. <img src="{{ $image }}" alt="{{ $alt ?? $title }}" class="book-cover__img">
  33. @else
  34. <div class="book-cover__text">
  35. <div class="book-cover__title">{{ $title }}</div>
  36. @if($subtitle)
  37. <div class="book-cover__divider"></div>
  38. <div class="book-cover__subtitle">{{ $subtitle }}</div>
  39. @endif
  40. </div>
  41. @endif
  42. </div>