FormController.php 11 KB

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