Tree.php 2.5 KB

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