FormController.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. <?php
  2. namespace App\Admin\Controllers\Config;
  3. use App\Model\BaseArea;
  4. use App\Model\Communities;
  5. use App\Model\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']);
  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. }
  90. }
  91. $tab->add(SystemConfig::$groups[$k]??$k,$form->render());
  92. $form = null;
  93. }
  94. $c = new Content();
  95. return $c->title("配置")->description('设置')->row($tab->render());
  96. }
  97. public function setting_form_save()
  98. {
  99. $inputs = request()->input();
  100. unset($inputs['_token']);
  101. $data = [];
  102. $json = [];
  103. $jsonArr = [];
  104. foreach ($inputs as $k => $v){
  105. $groups = explode('____',$k);
  106. $num = count($groups);
  107. if ($num< 1)
  108. continue;
  109. else if ($num === 2){
  110. //普通字段配置
  111. SystemConfig::where(['group'=>$groups[0],'key'=>$groups[1]])->update(['value'=>$v]);
  112. }else if ($num === 3){
  113. if ($groups[2] == "Switch"){
  114. if ($v=="on")
  115. $v = 1;
  116. else
  117. $v = 0;
  118. if ($groups[1] =='use_personal')
  119. {
  120. $v = $v==0?1:0;
  121. }
  122. SystemConfig::where(['group'=>$groups[0],'key'=>$groups[1]])->update(['value'=>$v]);
  123. }else if ($groups[2] == "checkbox"){
  124. $origin_data = SystemConfig::get($groups[0],$groups[1]);
  125. $origin_data = json_decode($origin_data,true);
  126. foreach ($origin_data as $kk => $datum){
  127. $origin_data[$kk]['value'] =0;
  128. foreach ($v as $vv){
  129. if ($datum['key'] == $vv)
  130. $origin_data[$kk]['value'] =1;
  131. }
  132. }
  133. SystemConfig::where(['group'=>$groups[0],'key'=>$groups[1]])->update(['value'=>json_encode($origin_data)]);
  134. }
  135. }else if ($num == 4){
  136. if ($groups[2]=="JA"){
  137. $jsonArr[$groups[0]][$groups[1]][$groups[3]] = $v;
  138. }else{
  139. //JSON字段配置
  140. $json[$groups[0]][$groups[1]][$groups[3]] = $v;
  141. }
  142. }
  143. }
  144. if (count($json)>0){
  145. foreach ($json as $k =>$value){
  146. foreach ($value as $kk => $item){
  147. SystemConfig::where(['group'=>$k,'key'=>$kk])->update(['value'=>json_encode($item)]);
  148. }
  149. }
  150. }
  151. if (count($jsonArr)>0){
  152. foreach ($jsonArr as $k =>$value){
  153. foreach ($value as $kk => $item){
  154. $res = SystemConfig::where(['group'=>$k,'key'=>$kk])->first();
  155. if (!$res)
  156. continue;
  157. $json = json_decode($res['value'],true);
  158. foreach ($item as $kkk => $item2){
  159. $json[$kkk]['value'] = $item2;
  160. $res->update(['value'=>json_encode($json)]);
  161. }
  162. }
  163. }
  164. }
  165. $files = request()->file();
  166. foreach ($files as $key => $file){
  167. $groups = explode('____',$key);
  168. $file_name ='upload/SystemFiles/'.uniqid().'.'.$file->getClientOriginalExtension();
  169. file_put_contents(public_path($file_name),file_get_contents($file->getRealPath()));
  170. SystemConfig::where(['group'=>$groups[0],'key'=>$groups[1]])->update(['value'=>$file_name]);
  171. }
  172. admin_info('保存成功');
  173. return back();
  174. }
  175. public function setCommunity()
  176. {
  177. $id = request('pid')?:'1';
  178. $grid = new Grid(new BaseArea());
  179. $grid->model()->where('pid',$id);
  180. $c = new Content();
  181. return $c->title("配置")->description('设置')->body($grid->render());
  182. }
  183. public function setAreaById()
  184. {
  185. $id = request('id');
  186. $type = request('t');
  187. $m = request('m');
  188. if ($m == "0")
  189. {
  190. $rs = Communities::where('id',$id)->update(['is_door'=>$type]);
  191. if ($rs)
  192. {
  193. admin_toastr('设置成功','info');
  194. return back();
  195. }
  196. admin_toastr('设置失败','error');
  197. return back();
  198. }
  199. $rs = BaseArea::where('relation','like',"%{$id}%")->orwhere('id',$id)->update(['is_door'=>intval($type)]);
  200. $rs = BaseArea::where(['grade'=>5])->where('relation','like',"%{$id}%")->get(['id']);
  201. $ds = [];
  202. foreach ($rs as $r){
  203. $ds[] = $r['id'];
  204. }
  205. $rs = Communities::whereIn('area_id',$ds)->update(['is_door'=>intval($type)]);
  206. admin_toastr('设置成功','info');
  207. return back();
  208. }
  209. public function setPrice()
  210. {
  211. $id = request('pid');
  212. $key = request('key');
  213. $p = request('price');
  214. $m = request('m');
  215. $text = request('text');
  216. if ($m == "1")
  217. {
  218. $rs = Communities::where('id',$id)->update([$key=>($p/10)]);
  219. if ($rs)
  220. {
  221. return response()->json(['status'=>'ok']);
  222. }
  223. return response()->json(['status'=>'error']);
  224. }
  225. $rs = BaseArea::where('merger_name','like',"%{$text}%")->update([$key=>$p/10]);
  226. if(!$rs) return response()->json(['status'=>'error']);
  227. $rs = BaseArea::where('merger_name','like',"%{$text}%")->get(['id']);
  228. $ds = [];
  229. foreach ($rs as $r){
  230. $ds[] = $r['id'];
  231. }
  232. $rs = Communities::whereIn('area_id',$ds)->update([$key=>$p/10]);
  233. if ($rs)
  234. {
  235. return response()->json(['status'=>'ok']);
  236. }
  237. return response()->json(['status'=>'error']);
  238. }
  239. }