Tree.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <?php
  2. namespace Tests\Browser\Components\Form\Field;
  3. use Dcat\Admin\Form\Field;
  4. use Laravel\Dusk\Browser;
  5. use Tests\Browser\Components\Component;
  6. class Tree extends Component
  7. {
  8. protected $name;
  9. public function __construct($name = null)
  10. {
  11. $this->name = $name;
  12. }
  13. /**
  14. * 获取组件的 root selector.
  15. *
  16. * @return string
  17. */
  18. public function selector()
  19. {
  20. return '@container';
  21. }
  22. /**
  23. * 浏览器包含组件的断言
  24. *
  25. * @param Browser $browser
  26. * @return void
  27. */
  28. public function assert(Browser $browser)
  29. {
  30. $browser
  31. ->whenElementAvailable('@tree', 2)
  32. ->hasInput($this->name);
  33. }
  34. /**
  35. * 读取组件的元素快捷方式.
  36. *
  37. * @return array
  38. */
  39. public function elements()
  40. {
  41. $prefix = Field::FIELD_CLASS_PREFIX;
  42. return [
  43. '@container' => ".{$prefix}{$this->name}-tree-wrapper",
  44. '@tree' => '.da-tree',
  45. '@input' => sprintf('input[name="%s"][type="hidden"]', $this->name),
  46. ];
  47. }
  48. /**
  49. * 选中下拉选框.
  50. *
  51. * @param Browser $browser
  52. * @param mixed $values
  53. *
  54. * @return Browser
  55. */
  56. public function choose(Browser $browser, $values)
  57. {
  58. $values = json_encode((array) $values);
  59. $browser->script(<<<JS
  60. var tree = $('{$this->getTreeSelector($browser)}');
  61. tree.jstree("uncheck_all");
  62. tree.jstree("select_node", {$values});
  63. JS
  64. );
  65. return $browser;
  66. }
  67. /**
  68. * 展开所有选项.
  69. *
  70. * @param Browser $browser
  71. */
  72. public function expand(Browser $browser)
  73. {
  74. $browser->script(<<<JS
  75. $('{$this->getTreeSelector($browser)}').jstree("open_all");
  76. JS
  77. );
  78. }
  79. /**
  80. * 选中所有.
  81. *
  82. * @param Browser $browser
  83. *
  84. * @return Browser
  85. */
  86. public function checkAll(Browser $browser)
  87. {
  88. $browser->script(<<<JS
  89. $('{$this->getTreeSelector($browser)}').jstree("check_all");
  90. JS
  91. );
  92. return $browser;
  93. }
  94. /**
  95. * 取消选中所有.
  96. *
  97. * @param Browser $browser
  98. *
  99. * @return Browser
  100. */
  101. public function unCheckAll(Browser $browser)
  102. {
  103. $browser->script(<<<JS
  104. $('{$this->getTreeSelector($browser)}').jstree("uncheck_all");
  105. JS
  106. );
  107. return $browser;
  108. }
  109. /**
  110. * @param \Laravel\Dusk\Browser $browser
  111. *
  112. * @return string
  113. */
  114. protected function getTreeSelector(Browser $browser)
  115. {
  116. return $this->formatSelector($browser, $this->elements()['@tree']);
  117. }
  118. }