FormHelperTrait.php 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. <?php
  2. namespace App\Module\Farm\AdminControllers\Helper;
  3. use App\Module\Farm\Enums\BUFF_TYPE;
  4. use App\Module\Farm\Enums\DISASTER_TYPE;
  5. use App\Module\Farm\Enums\GROWTH_STAGE;
  6. use App\Module\Farm\Enums\LAND_STATUS;
  7. use App\Module\Farm\Enums\LAND_TYPE;
  8. use App\Module\Farm\Enums\SEED_TYPE;
  9. use App\Module\Farm\Enums\UPGRADE_TYPE;
  10. use App\Module\Farm\Models\FarmLandType;
  11. use App\Module\Farm\Models\FarmSeed;
  12. use App\Module\GameItems\AdminControllers\LazyRenderable\ItemLazyRenderable;
  13. use Dcat\Admin\Form;
  14. use Dcat\Admin\Form\Field;
  15. /**
  16. * 表单辅助特性
  17. *
  18. * 提供农场模块后台控制器的表单构建功能的具体实现
  19. */
  20. trait FormHelperTrait
  21. {
  22. /**
  23. * 添加神灵加持类型选择
  24. *
  25. * @param string $field 字段名
  26. * @param string $label 标签名
  27. * @return Field\Select
  28. */
  29. public function selectBuffType(string $field = 'buff_type', string $label = '加持类型'): Field\Select
  30. {
  31. return $this->form->select($field, $label)->options([
  32. BUFF_TYPE::HARVEST_GOD->value => BUFF_TYPE::getName(BUFF_TYPE::HARVEST_GOD->value),
  33. BUFF_TYPE::RAIN_GOD->value => BUFF_TYPE::getName(BUFF_TYPE::RAIN_GOD->value),
  34. BUFF_TYPE::WEED_KILLER_GOD->value => BUFF_TYPE::getName(BUFF_TYPE::WEED_KILLER_GOD->value),
  35. BUFF_TYPE::PEST_CLEANER_GOD->value => BUFF_TYPE::getName(BUFF_TYPE::PEST_CLEANER_GOD->value),
  36. ])->required();
  37. }
  38. /**
  39. * 添加生长阶段选择
  40. *
  41. * @param string $field 字段名
  42. * @param string $label 标签名
  43. * @return Field\Select
  44. */
  45. public function selectGrowthStage(string $field = 'growth_stage', string $label = '生长阶段'): Field\Select
  46. {
  47. return $this->form->select($field, $label)->options([
  48. GROWTH_STAGE::SEED->value => GROWTH_STAGE::getName(GROWTH_STAGE::SEED->value),
  49. GROWTH_STAGE::SPROUT->value => GROWTH_STAGE::getName(GROWTH_STAGE::SPROUT->value),
  50. GROWTH_STAGE::GROWTH->value => GROWTH_STAGE::getName(GROWTH_STAGE::GROWTH->value),
  51. GROWTH_STAGE::MATURE->value => GROWTH_STAGE::getName(GROWTH_STAGE::MATURE->value),
  52. GROWTH_STAGE::WITHERED->value => GROWTH_STAGE::getName(GROWTH_STAGE::WITHERED->value),
  53. ])->required();
  54. }
  55. /**
  56. * 添加土地类型选择
  57. *
  58. * @param string $field 字段名
  59. * @param string $label 标签名
  60. * @return Field\Select
  61. */
  62. public function selectLandType(string $field = 'land_type', string $label = '土地类型'): Field\Select
  63. {
  64. $options = FarmLandType::pluck('name', 'id')->toArray();
  65. return $this->form->select($field, $label)->options($options)->required();
  66. }
  67. /**
  68. * 添加种子类型选择
  69. *
  70. * @param string $field 字段名
  71. * @param string $label 标签名
  72. * @return Field\Select
  73. */
  74. public function selectSeedType(string $field = 'type', string $label = '种子类型'): Field\Select
  75. {
  76. return $this->form->select($field, $label)->options([
  77. SEED_TYPE::NORMAL->value => SEED_TYPE::getName(SEED_TYPE::NORMAL->value),
  78. SEED_TYPE::MYSTERIOUS->value => SEED_TYPE::getName(SEED_TYPE::MYSTERIOUS->value),
  79. SEED_TYPE::GIANT->value => SEED_TYPE::getName(SEED_TYPE::GIANT->value),
  80. ])->required();
  81. }
  82. /**
  83. * 添加升级类型选择
  84. *
  85. * @param string $field 字段名
  86. * @param string $label 标签名
  87. * @return Field\Select
  88. */
  89. public function selectUpgradeType(string $field = 'upgrade_type', string $label = '升级类型'): Field\Select
  90. {
  91. return $this->form->select($field, $label)->options([
  92. UPGRADE_TYPE::LAND->value => UPGRADE_TYPE::getName(UPGRADE_TYPE::LAND->value),
  93. UPGRADE_TYPE::HOUSE->value => UPGRADE_TYPE::getName(UPGRADE_TYPE::HOUSE->value),
  94. ])->required();
  95. }
  96. /**
  97. * 添加种子选择(下拉列表)
  98. *
  99. * @param string $field 字段名
  100. * @param string $label 标签名
  101. * @return Field\Select
  102. */
  103. public function selectSeedDropdown(string $field = 'seed_id', string $label = '种子'): Field\Select
  104. {
  105. $options = FarmSeed::pluck('name', 'id')->toArray();
  106. return $this->form->select($field, $label)->options($options)->required();
  107. }
  108. /**
  109. * 添加种子选择(表格选择器)
  110. *
  111. * @param string $field 字段名
  112. * @param string $label 标签名
  113. * @param int|null $type 种子类型,可选
  114. * @return Field\SelectTable
  115. */
  116. public function selectSeed(string $field = 'seed_id', string $label = '种子', ?int $type = null)
  117. {
  118. $table = \App\Module\Farm\AdminControllers\LazyRenderable\FarmSeedLazyRenderable::make([
  119. 'type' => $type
  120. ]);
  121. return $this->form->selectTable($field, $label)->from($table)
  122. ->title($label)
  123. ->dialogWidth('70%')
  124. ->model($table->getModel(), $table->getModelSelectId(), $table->getModelViewName());
  125. }
  126. /**
  127. * 添加是否施肥开关
  128. *
  129. * @param string $field 字段名
  130. * @param string $label 标签名
  131. * @return Field\Switch
  132. */
  133. public function switchFertilized(string $field = 'fertilized', string $label = '已施肥'): Field\SwitchField
  134. {
  135. return $this->form->switch($field, $label)->default(false);
  136. }
  137. /**
  138. * 添加产量加成滑块
  139. *
  140. * @param string $field 字段名
  141. * @param string $label 标签名
  142. * @return Field\Rate
  143. */
  144. public function rateOutputBonus(string $field = 'output_bonus', string $label = '产量加成'): Field\Rate
  145. {
  146. return $this->form->rate($field, $label)->max(1)->required();
  147. }
  148. /**
  149. * 添加灾害抵抗滑块
  150. *
  151. * @param string $field 字段名
  152. * @param string $label 标签名
  153. * @return Field\Rate
  154. */
  155. public function rateDisasterResistance(string $field = 'disaster_resistance', string $label = '灾害抵抗'): Field\Rate
  156. {
  157. return $this->form->rate($field, $label)->max(1)->required();
  158. }
  159. /**
  160. * 添加是否特殊土地开关
  161. *
  162. * @param string $field 字段名
  163. * @param string $label 标签名
  164. * @return Field\Switch
  165. */
  166. public function switchIsSpecial(string $field = 'is_special', string $label = '特殊土地'): Field\Switch
  167. {
  168. return $this->form->switch($field, $label)->default(false);
  169. }
  170. /**
  171. * 添加灾害抵抗表格
  172. *
  173. * @param string $field 字段名
  174. * @param string $label 标签名
  175. * @return Field\Table
  176. */
  177. public function tableDisasterResistance(string $field = 'disaster_resistance', string $label = '灾害抵抗'): Field\Table
  178. {
  179. return $this->form->table($field, $label, function (Form\NestedForm $table) {
  180. $table->select('type', '灾害类型')->options([
  181. DISASTER_TYPE::DROUGHT->value => DISASTER_TYPE::getName(DISASTER_TYPE::DROUGHT->value),
  182. DISASTER_TYPE::PEST->value => DISASTER_TYPE::getName(DISASTER_TYPE::PEST->value),
  183. DISASTER_TYPE::WEED->value => DISASTER_TYPE::getName(DISASTER_TYPE::WEED->value),
  184. ])->required();
  185. $table->rate('resistance', '抵抗率')->max(1)->required();
  186. });
  187. }
  188. /**
  189. * 添加种子产出表格
  190. *
  191. * @param string $field 字段名
  192. * @param string $label 标签名
  193. * @return Field\Table
  194. */
  195. public function tableSeedOutputs(string $field = 'outputs', string $label = '种子产出'): Field\Table
  196. {
  197. return $this->form->table($field, $label, function (Form\NestedForm $table) {
  198. $table->text('item_id', '物品ID')->required();
  199. $table->text('item_name', '物品名称')->required();
  200. $table->number('min_quantity', '最小数量')->min(1)->default(1)->required();
  201. $table->number('max_quantity', '最大数量')->min(1)->default(1)->required();
  202. $table->rate('probability', '概率')->max(1)->required();
  203. });
  204. }
  205. /**
  206. * 添加键值对JSON编辑器
  207. *
  208. * @param string $field 字段名
  209. * @param string $label 标签名
  210. * @return Field\KeyValue
  211. */
  212. public function formKeyValueJson(string $field, string $label): Field\KeyValue
  213. {
  214. return $this->form->keyValue($field, $label)
  215. ->saving(function ($value) {
  216. return json_encode($value, JSON_UNESCAPED_UNICODE);
  217. });
  218. }
  219. }