1. <?php
  2. namespace App\Admin\Controllers;
  3. use App\Models\Tree;
  4. use SmallRuralDog\Admin\Auth\Database\Permission;
  5. use SmallRuralDog\Admin\Components\Attrs\SelectOption;
  6. use SmallRuralDog\Admin\Components\Attrs\TransferData;
  7. use SmallRuralDog\Admin\Components\Form\Cascader;
  8. use SmallRuralDog\Admin\Components\Form\Checkbox;
  9. use SmallRuralDog\Admin\Components\Form\CheckboxGroup;
  10. use SmallRuralDog\Admin\Components\Form\ColorPicker;
  11. use SmallRuralDog\Admin\Components\Form\CSwitch;
  12. use SmallRuralDog\Admin\Components\Form\DatePicker;
  13. use SmallRuralDog\Admin\Components\Form\DateTimePicker;
  14. use SmallRuralDog\Admin\Components\Form\IconChoose;
  15. use SmallRuralDog\Admin\Components\Form\Input;
  16. use SmallRuralDog\Admin\Components\Form\InputNumber;
  17. use SmallRuralDog\Admin\Components\Form\Radio;
  18. use SmallRuralDog\Admin\Components\Form\RadioGroup;
  19. use SmallRuralDog\Admin\Components\Form\Rate;
  20. use SmallRuralDog\Admin\Components\Form\Select;
  21. use SmallRuralDog\Admin\Components\Form\Slider;
  22. use SmallRuralDog\Admin\Components\Form\TimePicker;
  23. use SmallRuralDog\Admin\Components\Form\Transfer;
  24. use SmallRuralDog\Admin\Components\Form\Upload;
  25. use SmallRuralDog\Admin\Components\Form\WangEditor;
  26. use SmallRuralDog\Admin\Components\Widgets\Button;
  27. use SmallRuralDog\Admin\Components\Widgets\Dialog;
  28. use SmallRuralDog\Admin\Components\Widgets\Divider;
  29. use SmallRuralDog\Admin\Components\Widgets\Html;
  30. use SmallRuralDog\Admin\Components\Widgets\Markdown;
  31. use SmallRuralDog\Admin\Components\Widgets\Text;
  32. use SmallRuralDog\Admin\Controllers\AdminController;
  33. use SmallRuralDog\Admin\Form;
  34. use SmallRuralDog\Admin\Layout\Content;
  35. use SmallRuralDog\Admin\Layout\Row;
  36. class FormController extends AdminController
  37. {
  38. public function grid()
  39. {
  40. }
  41. public function store()
  42. {
  43. return \Admin::responseMessage("表单提交成功");
  44. }
  45. public function form($isEdit = false)
  46. {
  47. $form = new Form();
  48. $faker = \Faker\Factory::create();
  49. $form->ref('demoForm');
  50. $form->item('input')->component(Input::make())->required()->inputWidth(10);
  51. $form->item('textarea')->component(Input::make()->textarea())->required();
  52. $form->item('password')->component(Input::make()->password())->required();
  53. $form->item('file')->component(Upload::make()->file());
  54. $form->item('image')->component(Upload::make()->image()->width(200)->height(100));
  55. $form->item('avatar')->component(Upload::make()->avatar());
  56. $form->item('IconChoose')->component(IconChoose::make())->required();
  57. $form->item('InputNumber')->component(InputNumber::make())->required('number');
  58. $form->item('Select')->component(Select::make()->options(function () use ($faker) {
  59. return collect(range(0, 50))->map(function () use ($faker) {
  60. return SelectOption::make($faker->uuid, $faker->name)->avatar("https://gw.alipayobjects.com/zos/antfincdn/XAosXuNZyF/BiazfanxmamNRoxxVxka.png")->desc($faker->userName);
  61. })->all();
  62. }))->required();
  63. $form->item('Select-multiple')->component(Select::make()->multiple()->filterable()->options(function () {
  64. $faker = \Faker\Factory::create();
  65. return collect(range(0, 50))->map(function () use ($faker) {
  66. return SelectOption::make($faker->uuid, $faker->name)->avatar("https://gw.alipayobjects.com/zos/antfincdn/XAosXuNZyF/BiazfanxmamNRoxxVxka.png")->desc($faker->userName);
  67. })->all();
  68. }))->required('array');
  69. $form->item('Checkbox')->component(Checkbox::make(99999, $faker->name))->defaultValue(0);
  70. $form->item('CheckboxGroup')->component(CheckboxGroup::make([10], [
  71. Checkbox::make(10, $faker->name),
  72. Checkbox::make(20, $faker->name),
  73. ]))->required("array");
  74. $form->item('RadioGroup')->component(RadioGroup::make(11, [
  75. Radio::make(10, $faker->name),
  76. Radio::make(11, $faker->name),
  77. ]))->required("number");
  78. $form->item('Switch')->component(CSwitch::make(true))->refData('demoForm', function () {
  79. return <<<JS
  80. ref.formData.Switch2 = self.value
  81. JS;
  82. })->help("我可以控制下面的Switch2哦");
  83. $form->item('Switch2')->component(CSwitch::make(true))->ref('Switch2');
  84. $form->item('Slider')->defaultValue([20, 30])->component(Slider::make()->showInput()->range(true)->max(40)->min(10)->showStops());
  85. $form->item('Slider-vertical')->defaultValue(20)->component(Slider::make()->max(40)->min(10)->vertical(true, "100px"));
  86. $form->item('TimePicker')->component(TimePicker::make()->pickerOptions([
  87. 'start' => '00:00',
  88. 'step' => '00:30',
  89. 'end' => '24:00'
  90. ])->placeholder("TimePicker"));
  91. $form->item('TimePicker2')->component(TimePicker::make([])->pickerOptions([
  92. 'start' => '00:00',
  93. 'step' => '00:30',
  94. 'end' => '24:00'
  95. ])->isRange()->rangeSeparator("至")->placeholder("TimePicker"));
  96. $form->item('DatePicker')->component(DatePicker::make())->ref('DatePicker')->componentRightComponent(function () {
  97. return (new Content())->row(function (Row $row) {
  98. $row->item(Text::make("选择类型:"));
  99. $typeStr = "year/month/date/dates/week/datetime/datetimerange/daterange/monthrange";
  100. foreach (explode("/",$typeStr) as $type) {
  101. $row->item(Button::make($type)->type("text")->refData('DatePicker', function () use ($type) {
  102. return <<<JS
  103. ref.attrs.type="$type";
  104. JS;
  105. }));
  106. }
  107. })->className("ml-10");
  108. });
  109. $form->item('DatePicker2')->component(DatePicker::make([])->type("daterange"));
  110. $form->item('DateTimePicker')->component(DateTimePicker::make())->ref('DateTimePicker')->componentRightComponent(function () {
  111. return (new Content())->row(function (Row $row) {
  112. $row->item(Text::make("选择类型:"));
  113. $typeStr = "year/month/date/week/datetime/datetimerange/daterange";
  114. foreach (explode("/",$typeStr) as $type) {
  115. $row->item(Button::make($type)->type("text")->refData('DateTimePicker', function () use ($type) {
  116. return <<<JS
  117. ref.attrs.type="$type";
  118. JS;
  119. }));
  120. }
  121. })->className("ml-10");
  122. });
  123. $form->item('Rate')->component(Rate::make(1));
  124. $form->item('ColorPicker')->component(ColorPicker::make("#ff6600"));
  125. $form->item('Cascader')
  126. ->component(function () {
  127. return Cascader::make()->options((new Tree())->toTree())->value('id')->label('title')->expandTrigger('hover')->ref('Cascader');
  128. })
  129. ->componentBottomComponent(function () {
  130. return Content::make()->row(function (Row $row) {
  131. $button = Button::make("改变Cascader面板模式")->type('danger')->size('mini')->plain()->refData('Cascader', function () {
  132. return <<<JS
  133. ref.attrs.panel = !ref.attrs.panel
  134. JS;
  135. })->className('mt-10')->tooltip('我是动态注入实现的功能');
  136. $row->item(Html::make("下边"));
  137. $row->item($button);
  138. $row->item(Html::make("下边"));
  139. });
  140. })
  141. ->componentTopComponent(Html::make("上边")->ref("zrHtml"))
  142. ->componentLeftComponent(Html::make("左边"))
  143. ->componentRightComponent(Html::make("右边组件:可以选择一下联动数据,看下我的变化")->ref("zrHtml")->className('ml-10'))
  144. ->topComponent(Divider::make("item上边组件"))
  145. ->bottomComponent(Divider::make("item底部组件"))->refData("zrHtml", function () {
  146. return <<<JS
  147. ref.attrs.html = "动态注入change事件,获取到选择的数据,展现到这个组件:"+self.value.join("-")
  148. JS;
  149. });
  150. $form->item('Transfer', "权限", 'permissions.id')->component(
  151. Transfer::make()->data(Permission::get()->map(function ($item) {
  152. return TransferData::make($item->id, $item->name);
  153. }))->titles(['可授权', '已授权'])->filterable()
  154. );
  155. $form->item('WangEditor')->component(WangEditor::make()->style('height:200px;')->className('flex-sub'));
  156. $form->top(function (Content $content) {
  157. $content->row($this->code())->className('mb-10');
  158. });
  159. $form->successRefData("demoForm",function (){
  160. return <<<JS
  161. self.\$message.info("表单提交成功代码注入");
  162. JS;
  163. });
  164. $form->actions(function (Form\FormActions $formActions){
  165. $formActions->hideCancelButton();
  166. $formActions->submitButton()->content("提交表单")->style("width:200px");
  167. });
  168. return $form;
  169. }
  170. protected function code($name = "查看源代码", $ref = "codeButton")
  171. {
  172. return Button::make($name)->ref($ref)->dialog(function (Dialog $dialog) use ($name) {
  173. $dialog->width('80%')->title($name);
  174. $dialog->slot(function (Content $content) {
  175. $code = "```php\n";
  176. $code .= file_get_contents(admin_path("Controllers/FormController.php"));
  177. $code .= "\n```";
  178. $content->body(Markdown::make($code)->style("height:60vh;"));
  179. });
  180. });
  181. }
  182. }

预览

FireShot Capture 003 - LaravelVueAdmin - 127.0.0.1.png