Tree.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  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. * @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. * @return Browser
  82. */
  83. public function checkAll(Browser $browser)
  84. {
  85. $browser->script(<<<JS
  86. $('{$this->getTreeSelector($browser)}').jstree("check_all");
  87. JS
  88. );
  89. return $browser;
  90. }
  91. /**
  92. * 取消选中所有.
  93. *
  94. * @param Browser $browser
  95. * @return Browser
  96. */
  97. public function unCheckAll(Browser $browser)
  98. {
  99. $browser->script(<<<JS
  100. $('{$this->getTreeSelector($browser)}').jstree("uncheck_all");
  101. JS
  102. );
  103. return $browser;
  104. }
  105. /**
  106. * @param \Laravel\Dusk\Browser $browser
  107. * @return string
  108. */
  109. protected function getTreeSelector(Browser $browser)
  110. {
  111. return $this->formatSelector($browser, $this->elements()['@tree']);
  112. }
  113. }