Limit.php 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <?php
  2. namespace Dcat\Admin\Grid\Displayers;
  3. use Dcat\Admin\Admin;
  4. use Dcat\Admin\Support\Helper;
  5. use Illuminate\Support\Str;
  6. class Limit extends AbstractDisplayer
  7. {
  8. protected function addScript()
  9. {
  10. $script = <<<'JS'
  11. $('.limit-more').click(function () {
  12. $(this).parent('.limit-text').toggleClass('d-none').siblings().toggleClass('d-none');
  13. });
  14. JS;
  15. Admin::script($script);
  16. }
  17. public function display($limit = 100, $end = '...')
  18. {
  19. // 数组
  20. if ($this->value !== null && ! is_scalar($this->value)) {
  21. $value = Helper::array($this->value);
  22. if (count($value) <= $limit) {
  23. return $value;
  24. }
  25. $value = array_slice($value, 0, $limit);
  26. array_push($value, $end);
  27. return $value;
  28. }
  29. // 字符串
  30. $this->addScript();
  31. $value = Str::limit($this->value, $limit, $end);
  32. $original = $this->column->getOriginal();
  33. if ($value == $original) {
  34. return $value;
  35. }
  36. return <<<HTML
  37. <div class="limit-text">
  38. <span class="text">{$value}</span>
  39. &nbsp;<a href="javascript:void(0);" class="limit-more">&nbsp;<i class="fa fa-angle-double-down"></i></a>
  40. </div>
  41. <div class="limit-text d-none">
  42. <span class="text">{$original}</span>
  43. &nbsp;<a href="javascript:void(0);" class="limit-more">&nbsp;<i class="fa fa-angle-double-up"></i></a>
  44. </div>
  45. HTML;
  46. }
  47. }