FormController.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. <?php
  2. namespace App\Admin\Controllers\Config;
  3. use App\Model\BaseArea;
  4. use App\Model\Communities;
  5. use App\Models\SystemConfig;
  6. use App\Http\Controllers\Controller;
  7. use Encore\Admin\Form\Tab;
  8. use Encore\Admin\Grid;
  9. use Encore\Admin\Layout\Content;
  10. use Encore\Admin\Widgets\Form;
  11. use Encore\Admin\Widgets\Table;
  12. /**
  13. * @author pxwei
  14. * Class ConfigController
  15. * @package App\Admin\Controllers\Form
  16. */
  17. class FormController extends Controller
  18. {
  19. public function form()
  20. {
  21. $dbs = SystemConfig::orderby('sort','desc')->orderby('created_at','asc')->get(['id','group','key','value','comment','chinese','fieldType'])->toArray();
  22. $configs = [];
  23. foreach ($dbs as $db){
  24. $configs[$db['group']][] = $db;
  25. }
  26. $tab = new \Encore\Admin\Widgets\Tab();
  27. foreach ($configs as $k => $config){
  28. $form = new Form();
  29. $form->action("/admin/setting_form_save");
  30. foreach ($config as $value){
  31. switch ($value['fieldType']){
  32. case SystemConfig::Field_textarea:
  33. $form->textarea($value['group'].'____'.$value['key'],$value['chinese'])->help($value['comment'])->rows(1)->default($value['value']);
  34. break;
  35. case SystemConfig::Filed_richText:
  36. $form->editor($value['group'].'____'.$value['key'],$value['chinese'])->default($value['value']);
  37. break;
  38. case SystemConfig::Field_Time:
  39. $form->time($value['group'].'____'.$value['key'],$value['chinese'])->default($value['value'])->format('HH:mm');
  40. break;
  41. case SystemConfig::Field_File:
  42. $form->file($value['group'].'____'.$value['key'],$value['chinese'])->help('当前文件:'.$value['value']);
  43. break;
  44. case SystemConfig::Field_Switch:
  45. $states = [
  46. 'on' => ['value' => 1, 'text' => '开', 'color' => 'success'],
  47. 'off' => ['value' => 0, 'text' => '关', 'color' => 'danger'],
  48. ];
  49. $s = $value['value'];
  50. if ($value['key']=='use_personal')
  51. {
  52. $s = $s==0?1:0;
  53. }
  54. $form->switch($value['group'].'____'.$value['key'].'____Switch',$value['chinese'])->help($value['comment'])->default($s)->states($states);
  55. break;
  56. case SystemConfig::Field_Checkbox:
  57. $data = [];
  58. $default = [];
  59. foreach (json_decode($value['value'],true) as $v){
  60. $data[$v['key']] =$v['text'];
  61. if ($v['value'] == 1)
  62. $default[] = $v['key'];
  63. }
  64. $form->checkbox($value['group'].'____'.$value['key'].'____checkbox',$value['chinese'])->options($data)->default($default)->help($value['comment'])->canCheckAll();
  65. break;
  66. case SystemConfig::Field_Json:
  67. $json = json_decode($value['value'],true);
  68. if (!$json)
  69. $form->display('json',$value['chinese'])->default('字段JSON解析失败');
  70. else{
  71. $form->fieldset($value['chinese'].'_配置组', function (Form $form)use ($json,$value) {
  72. foreach ($json as $kk=> $v){
  73. $form->text($value['group'].'____'.$value['key'].'____J____'.$kk,$kk)->default($v);
  74. }
  75. });
  76. }
  77. break;
  78. case SystemConfig::Field_Json_Array:
  79. $json = json_decode($value['value'],true);
  80. if (!$json)
  81. $form->display('json',$value['chinese'])->default('数组JSON解析失败');
  82. else{
  83. $form->fieldset($value['chinese'].'_配置组', function (Form $form)use ($json,$value) {
  84. foreach ($json as $kk=> $v){
  85. $form->text($value['group'].'____'.$value['key'].'____JA____'.$kk,$v['text'])->default($v['value']);
  86. }
  87. });
  88. }
  89. break;
  90. case SystemConfig::Field_Image:
  91. $form->image($value['group'].'____'.$value['key'],$value['chinese'])->default($value['value']);
  92. }
  93. }
  94. $tab->add(SystemConfig::$groups[$k]??$k,$form->render());
  95. $form = null;
  96. }
  97. $c = new Content();
  98. return $c->title("配置")->description('设置')->row($tab->render());
  99. }
  100. public function setting_form_save()
  101. {
  102. $inputs = request()->input();
  103. unset($inputs['_token']);
  104. $data = [];
  105. $json = [];
  106. $jsonArr = [];
  107. foreach ($inputs as $k => $v){
  108. $groups = explode('____',$k);
  109. $num = count($groups);
  110. if ($num< 1)
  111. continue;
  112. else if ($num === 2){
  113. //普通字段配置
  114. SystemConfig::where(['group'=>$groups[0],'key'=>$groups[1]])->update(['value'=>$v]);
  115. }else if ($num === 3){
  116. if ($groups[2] == "Switch"){
  117. if ($v=="on")
  118. $v = 1;
  119. else
  120. $v = 0;
  121. if ($groups[1] =='use_personal')
  122. {
  123. $v = $v==0?1:0;
  124. }
  125. SystemConfig::where(['group'=>$groups[0],'key'=>$groups[1]])->update(['value'=>$v]);
  126. }else if ($groups[2] == "checkbox"){
  127. $origin_data = SystemConfig::get($groups[0],$groups[1]);
  128. $origin_data = json_decode($origin_data,true);
  129. foreach ($origin_data as $kk => $datum){
  130. $origin_data[$kk]['value'] =0;
  131. foreach ($v as $vv){
  132. if ($datum['key'] == $vv)
  133. $origin_data[$kk]['value'] =1;
  134. }
  135. }
  136. SystemConfig::where(['group'=>$groups[0],'key'=>$groups[1]])->update(['value'=>json_encode($origin_data)]);
  137. }
  138. }else if ($num == 4){
  139. if ($groups[2]=="JA"){
  140. $jsonArr[$groups[0]][$groups[1]][$groups[3]] = $v;
  141. }else{
  142. //JSON字段配置
  143. $json[$groups[0]][$groups[1]][$groups[3]] = $v;
  144. }
  145. }
  146. }
  147. if (count($json)>0){
  148. foreach ($json as $k =>$value){
  149. foreach ($value as $kk => $item){
  150. SystemConfig::where(['group'=>$k,'key'=>$kk])->update(['value'=>json_encode($item)]);
  151. }
  152. }
  153. }
  154. if (count($jsonArr)>0){
  155. foreach ($jsonArr as $k =>$value){
  156. foreach ($value as $kk => $item){
  157. $res = SystemConfig::where(['group'=>$k,'key'=>$kk])->first();
  158. if (!$res)
  159. continue;
  160. $json = json_decode($res['value'],true);
  161. foreach ($item as $kkk => $item2){
  162. $json[$kkk]['value'] = $item2;
  163. $res->update(['value'=>json_encode($json)]);
  164. }
  165. }
  166. }
  167. }
  168. $files = request()->file();
  169. foreach ($files as $key => $file){
  170. $groups = explode('____',$key);
  171. $file_name ='upload/SystemFiles/'.uniqid().'.'.$file->getClientOriginalExtension();
  172. file_put_contents(public_path($file_name),file_get_contents($file->getRealPath()));
  173. SystemConfig::where(['group'=>$groups[0],'key'=>$groups[1]])->update(['value'=>$file_name]);
  174. }
  175. admin_info('保存成功');
  176. return back();
  177. }
  178. public function setCommunity()
  179. {
  180. $id = request('pid')?:'1';
  181. $grid = new Grid(new BaseArea());
  182. $grid->model()->where('pid',$id);
  183. $c = new Content();
  184. return $c->title("配置")->description('设置')->body($grid->render());
  185. }
  186. public function setAreaById()
  187. {
  188. $id = request('id');
  189. $type = request('t');
  190. $m = request('m');
  191. if ($m == "0")
  192. {
  193. $rs = Communities::where('id',$id)->update(['is_door'=>$type]);
  194. if ($rs)
  195. {
  196. admin_toastr('设置成功','info');
  197. return back();
  198. }
  199. admin_toastr('设置失败','error');
  200. return back();
  201. }
  202. $rs = BaseArea::where('relation','like',"%{$id}%")->orwhere('id',$id)->update(['is_door'=>intval($type)]);
  203. $rs = BaseArea::where(['grade'=>5])->where('relation','like',"%{$id}%")->get(['id']);
  204. $ds = [];
  205. foreach ($rs as $r){
  206. $ds[] = $r['id'];
  207. }
  208. $rs = Communities::whereIn('area_id',$ds)->update(['is_door'=>intval($type)]);
  209. admin_toastr('设置成功','info');
  210. return back();
  211. }
  212. public function setPrice()
  213. {
  214. $id = request('pid');
  215. $key = request('key');
  216. $p = request('price');
  217. $m = request('m');
  218. $text = request('text');
  219. if ($m == "1")
  220. {
  221. $rs = Communities::where('id',$id)->update([$key=>($p/10)]);
  222. if ($rs)
  223. {
  224. return response()->json(['status'=>'ok']);
  225. }
  226. return response()->json(['status'=>'error']);
  227. }
  228. $rs = BaseArea::where('merger_name','like',"%{$text}%")->update([$key=>$p/10]);
  229. if(!$rs) return response()->json(['status'=>'error']);
  230. $rs = BaseArea::where('merger_name','like',"%{$text}%")->get(['id']);
  231. $ds = [];
  232. foreach ($rs as $r){
  233. $ds[] = $r['id'];
  234. }
  235. $rs = Communities::whereIn('area_id',$ds)->update([$key=>$p/10]);
  236. if ($rs)
  237. {
  238. return response()->json(['status'=>'ok']);
  239. }
  240. return response()->json(['status'=>'error']);
  241. }
  242. }