Tree.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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. return [
  42. '@container' => (new Field($this->name))->getElementClassSelector(),
  43. '@tree' => '.da-tree',
  44. '@input' => sprintf('input[name="%s"][type="hidden"]', $this->name),
  45. ];
  46. }
  47. /**
  48. * 选中下拉选框.
  49. *
  50. * @param Browser $browser
  51. * @param mixed $values
  52. *
  53. * @return Browser
  54. */
  55. public function choose(Browser $browser, $values)
  56. {
  57. $values = json_encode((array) $values);
  58. $browser->script(<<<JS
  59. var tree = $('{$this->getTreeSelector($browser)}');
  60. tree.jstree("uncheck_all");
  61. tree.jstree("select_node", {$values});
  62. JS
  63. );
  64. return $browser;
  65. }
  66. /**
  67. * 展开所有选项.
  68. *
  69. * @param Browser $browser
  70. */
  71. public function expand(Browser $browser)
  72. {
  73. $browser->script(<<<JS
  74. $('{$this->getTreeSelector($browser)}').jstree("open_all");
  75. JS
  76. );
  77. }
  78. /**
  79. * 选中所有.
  80. *
  81. * @param Browser $browser
  82. *
  83. * @return Browser
  84. */
  85. public function checkAll(Browser $browser)
  86. {
  87. $browser->script(<<<JS
  88. $('{$this->getTreeSelector($browser)}').jstree("check_all");
  89. JS
  90. );
  91. return $browser;
  92. }
  93. /**
  94. * 取消选中所有.
  95. *
  96. * @param Browser $browser
  97. *
  98. * @return Browser
  99. */
  100. public function unCheckAll(Browser $browser)
  101. {
  102. $browser->script(<<<JS
  103. $('{$this->getTreeSelector($browser)}').jstree("uncheck_all");
  104. JS
  105. );
  106. return $browser;
  107. }
  108. /**
  109. * @param \Laravel\Dusk\Browser $browser
  110. *
  111. * @return string
  112. */
  113. protected function getTreeSelector(Browser $browser)
  114. {
  115. return $this->formatSelector($browser, $this->elements()['@tree']);
  116. }
  117. }