SystemConfig.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426
  1. <?php
  2. namespace app\admin\controller\setting;
  3. use app\admin\model\system\SystemAttachment;
  4. use think\facade\Route as Url;
  5. use crmeb\services\FormBuilder as Form;
  6. use crmeb\services\UtilService as Util;
  7. use crmeb\services\JsonService as Json;
  8. use crmeb\services\UploadService as Upload;
  9. use app\admin\controller\AuthController;
  10. use app\admin\model\system\SystemConfig as ConfigModel;
  11. /**
  12. * 配置列表控制器
  13. * Class SystemConfig
  14. * @package app\admin\controller\system
  15. */
  16. class SystemConfig extends AuthController
  17. {
  18. /**
  19. * 基础配置
  20. * */
  21. public function index(){
  22. $type = input('type')!=0?input('type'):0;
  23. $tab_id = input('tab_id');
  24. if(!$tab_id) $tab_id = 1;
  25. $this->assign('tab_id',$tab_id);
  26. $list = ConfigModel::getAll($tab_id);
  27. if($type==3){//其它分类
  28. $config_tab = null;
  29. }else{
  30. $config_tab = ConfigModel::getConfigTabAll($type);
  31. foreach ($config_tab as $kk=>$vv){
  32. $arr = ConfigModel::getAll($vv['value'])->toArray();
  33. if(empty($arr)){
  34. unset($config_tab[$kk]);
  35. }
  36. }
  37. }
  38. $formbuider = [];
  39. // var_dump($list->toArray());
  40. foreach ($list as $data){
  41. switch ($data['type']){
  42. case 'text'://文本框
  43. switch ($data['input_type']){
  44. case 'input':
  45. $data['value'] = json_decode($data['value'],true)?:'';
  46. $formbuider[] = Form::input($data['menu_name'],$data['info'],$data['value'])->info($data['desc'])->placeholder($data['desc'])->col(13);
  47. break;
  48. case 'number':
  49. $data['value'] = json_decode($data['value'],true)?:0;
  50. $formbuider[] = Form::number($data['menu_name'],$data['info'],$data['value'])->info($data['desc']);
  51. break;
  52. case 'dateTime':
  53. $formbuider[] = Form::dateTime($data['menu_name'],$data['info'],$data['value'])->info($data['desc']);
  54. break;
  55. case 'color':
  56. $data['value'] = json_decode($data['value'],true)?:'';
  57. $formbuider[] = Form::color($data['menu_name'],$data['info'],$data['value'])->info($data['desc']);
  58. break;
  59. default:
  60. $data['value'] = json_decode($data['value'],true)?:'';
  61. $formbuider[] = Form::input($data['menu_name'],$data['info'],$data['value'])->info($data['desc'])->placeholder($data['desc'])->col(13);
  62. break;
  63. }
  64. break;
  65. case 'textarea'://多行文本框
  66. $data['value'] = json_decode($data['value'],true)?:'';
  67. $formbuider[] = Form::textarea($data['menu_name'],$data['info'],$data['value'])->placeholder($data['desc'])->info($data['desc'])->rows(6)->col(13);
  68. break;
  69. case 'radio'://单选框
  70. $data['value'] = json_decode($data['value'],true)?:'0';
  71. $parameter = explode("\n",$data['parameter']);
  72. $options = [];
  73. if($parameter) {
  74. foreach ($parameter as $v) {
  75. $pdata = explode("=>", $v);
  76. $options[] = ['label' => $pdata[1], 'value' => $pdata[0]];
  77. }
  78. $formbuider[] = Form::radio($data['menu_name'],$data['info'],$data['value'])->options($options)->info($data['desc'])->col(13);
  79. }
  80. break;
  81. case 'upload'://文件上传
  82. switch ($data['upload_type']){
  83. case 1:
  84. $data['value'] = json_decode($data['value'],true)?:'';
  85. $formbuider[] = Form::frameImageOne($data['menu_name'],$data['info'],Url::buildUrl('admin/widget.images/index',array('fodder'=>$data['menu_name'])),$data['value'])->icon('image')->width('70%')->height('500px')->info($data['desc'])->col(13);
  86. break;
  87. case 2:
  88. $data['value'] = json_decode($data['value'],true)?:[];
  89. $formbuider[] = Form::frameImages($data['menu_name'],$data['info'],Url::buildUrl('admin/widget.images/index',array('fodder'=>$data['menu_name'])),$data['value'])->maxLength(5)->icon('image')->width('70%')->height('500px')->info($data['desc'])->col(13);
  90. break;
  91. case 3:
  92. $data['value'] = json_decode($data['value'],true);
  93. $formbuider[] = Form::uploadFileOne($data['menu_name'],$data['info'],Url::buildUrl('file_upload'),$data['value'])->name('file')->info($data['desc'])->col(13);
  94. break;
  95. }
  96. break;
  97. case 'checkbox'://多选框
  98. $data['value'] = json_decode($data['value'],true)?:[];
  99. $parameter = explode("\n",$data['parameter']);
  100. $options = [];
  101. if($parameter) {
  102. foreach ($parameter as $v) {
  103. $pdata = explode("=>", $v);
  104. $options[] = ['label' => $pdata[1], 'value' => $pdata[0]];
  105. }
  106. $formbuider[] = Form::checkbox($data['menu_name'],$data['info'],$data['value'])->options($options)->info($data['desc'])->col(13);
  107. }
  108. break;
  109. case 'select'://多选框
  110. $data['value'] = json_decode($data['value'],true)?:[];
  111. $parameter = explode("\n",$data['parameter']);
  112. $options = [];
  113. if($parameter) {
  114. foreach ($parameter as $v) {
  115. $pdata = explode("=>", $v);
  116. $options[] = ['label' => $pdata[1], 'value' => $pdata[0]];
  117. }
  118. $formbuider[] = Form::select($data['menu_name'],$data['info'],$data['value'])->options($options)->info($data['desc'])->col(13);
  119. }
  120. break;
  121. }
  122. }
  123. $form = Form::make_post_form('编辑配置',$formbuider,Url::buildUrl('save_basics'));
  124. $this->assign(compact('form'));
  125. $this->assign('config_tab',$config_tab);
  126. $this->assign('list',$list);
  127. return $this->fetch();
  128. }
  129. /**
  130. * 基础配置 单个
  131. * @return mixed|void
  132. */
  133. public function index_alone(){
  134. $tab_id = input('tab_id');
  135. if(!$tab_id) return $this->failed('参数错误,请重新打开');
  136. $this->assign('tab_id',$tab_id);
  137. $list = ConfigModel::getAll($tab_id);
  138. foreach ($list as $k=>$v){
  139. if(!is_null(json_decode($v['value'])))
  140. $list[$k]['value'] = json_decode($v['value'],true);
  141. if($v['type'] == 'upload' && !empty($v['value'])){
  142. if($v['upload_type'] == 1 || $v['upload_type'] == 3) $list[$k]['value'] = explode(',',$v['value']);
  143. }
  144. }
  145. $this->assign('list',$list);
  146. return $this->fetch();
  147. }
  148. /**
  149. * 添加字段
  150. * @return string
  151. * @throws \FormBuilder\exception\FormBuilderException
  152. */
  153. public function create(){
  154. $data = Util::getMore(['type',]);//接收参数
  155. $tab_id = !empty(request()->param('tab_id')) ? request()->param('tab_id') : 1;
  156. $formbuider = array();
  157. switch ($data['type']){
  158. case 0://文本框
  159. $formbuider = ConfigModel::createInputRule($tab_id);
  160. break;
  161. case 1://多行文本框
  162. $formbuider = ConfigModel::createTextAreaRule($tab_id);
  163. break;
  164. case 2://单选框
  165. $formbuider = ConfigModel::createRadioRule($tab_id);
  166. break;
  167. case 3://文件上传
  168. $formbuider = ConfigModel::createUploadRule($tab_id);
  169. break;
  170. case 4://多选框
  171. $formbuider = ConfigModel::createCheckboxRule($tab_id);
  172. break;
  173. case 5://下拉框
  174. $formbuider = ConfigModel::createSelectRule($tab_id);
  175. break;
  176. }
  177. $form = Form::make_post_form('添加字段',$formbuider,Url::buildUrl('save'));
  178. $this->assign(compact('form'));
  179. $this->assign('get',request()->param());
  180. return $this->fetch();
  181. }
  182. /**
  183. * 保存字段
  184. * */
  185. public function save(){
  186. $data = Util::postMore([
  187. 'menu_name',
  188. 'type',
  189. 'input_type',
  190. 'config_tab_id',
  191. 'parameter',
  192. 'upload_type',
  193. 'required',
  194. 'width',
  195. 'high',
  196. 'value',
  197. 'info',
  198. 'desc',
  199. 'sort',
  200. 'status',]);
  201. if(!$data['info']) return Json::fail('请输入配置名称');
  202. if(!$data['menu_name']) return Json::fail('请输入字段名称');
  203. if($data['menu_name']){
  204. $oneConfig = ConfigModel::getOneConfig('menu_name',$data['menu_name']);
  205. if(!empty($oneConfig)) return Json::fail('请重新输入字段名称,之前的已经使用过了');
  206. }
  207. if(!$data['desc']) return Json::fail('请输入配置简介');
  208. if($data['sort'] < 0){
  209. $data['sort'] = 0;
  210. }
  211. if($data['type'] == 'text'){
  212. if(!ConfigModel::valiDateTextRole($data)) return Json::fail(ConfigModel::getErrorInfo());
  213. }
  214. if($data['type'] == 'textarea'){
  215. if(!ConfigModel::valiDateTextareaRole($data)) return Json::fail(ConfigModel::getErrorInfo());
  216. }
  217. if($data['type'] == 'radio' || $data['type'] == 'checkbox' ){
  218. if(!$data['parameter']) return Json::fail('请输入配置参数');
  219. if(!ConfigModel::valiDateRadioAndCheckbox($data)) return Json::fail(ConfigModel::getErrorInfo());
  220. $data['value'] = json_encode($data['value']);
  221. }
  222. ConfigModel::create($data);
  223. return Json::successful('添加菜单成功!');
  224. }
  225. /**
  226. * @param $id
  227. */
  228. public function update_config($id)
  229. {
  230. $type = request()->post('type');
  231. if($type =='text' || $type =='textarea'|| $type == 'radio' || ($type == 'upload' && (request()->post('upload_type') == 1 || request()->post('upload_type') == 3))){
  232. $value = request()->post('value');
  233. }else{
  234. $value = request()->post('value/a');
  235. }
  236. $data = Util::postMore(['status','info','desc','sort','config_tab_id','required','parameter',['value',$value],'upload_type','input_type']);
  237. $data['value'] = json_encode($data['value']);
  238. if(!ConfigModel::get($id)) return Json::fail('编辑的记录不存在!');
  239. ConfigModel::edit($data,$id);
  240. return Json::successful('修改成功!');
  241. }
  242. /**
  243. * 修改是否显示子子段
  244. * @param $id
  245. * @return mixed
  246. */
  247. public function edit_cinfig($id){
  248. $menu = ConfigModel::get($id)->getData();
  249. if(!$menu) return Json::fail('数据不存在!');
  250. $formbuider = array();
  251. $formbuider[] = Form::input('menu_name','字段变量',$menu['menu_name'])->disabled(1);
  252. $formbuider[] = Form::hidden('type',$menu['type']);
  253. $formbuider[] = Form::select('config_tab_id','分类',(string)$menu['config_tab_id'])->setOptions(ConfigModel::getConfigTabAll(-1));
  254. $formbuider[] = Form::input('info','配置名称',$menu['info'])->autofocus(1);
  255. $formbuider[] = Form::input('desc','配置简介',$menu['desc']);
  256. switch ($menu['type']){
  257. case 'text':
  258. $menu['value'] = json_decode($menu['value'],true);
  259. $formbuider[] = Form::select('input_type','类型',$menu['input_type'])->setOptions(ConfigModel::texttype());
  260. //输入框验证规则
  261. $formbuider[] = Form::input('value','默认值',$menu['value']);
  262. if(!empty($menu['required'])){
  263. $formbuider[] = Form::number('width','文本框宽(%)',$menu['width']);
  264. $formbuider[] = Form::input('required','验证规则',$menu['required'])->placeholder('多个请用,隔开例如:required:true,url:true');
  265. }
  266. break;
  267. case 'textarea':
  268. $menu['value'] = json_decode($menu['value'],true);
  269. //多行文本
  270. if(!empty($menu['high'])){
  271. $formbuider[] = Form::textarea('value','默认值',$menu['value'])->rows(5);
  272. $formbuider[] = Form::number('width','文本框宽(%)',$menu['width']);
  273. $formbuider[] = Form::number('high','多行文本框高(%)',$menu['high']);
  274. }else{
  275. $formbuider[] = Form::input('value','默认值',$menu['value']);
  276. }
  277. break;
  278. case 'radio':
  279. $menu['value'] = json_decode($menu['value'],true);
  280. $parameter = explode("\n",$menu['parameter']);
  281. $options = [];
  282. if($parameter){
  283. foreach ($parameter as $v){
  284. $data = explode("=>",$v);
  285. $options[] = ['label'=>$data[1],'value'=>$data[0]];
  286. }
  287. $formbuider[] = Form::radio('value','默认值',$menu['value'])->options($options);
  288. }
  289. //单选和多选参数配置
  290. if(!empty($menu['parameter'])){
  291. $formbuider[] = Form::textarea('parameter','配置参数',$menu['parameter'])->placeholder("参数方式例如:\n1=白色\n2=红色\n3=黑色");
  292. }
  293. break;
  294. case 'checkbox':
  295. $menu['value'] = json_decode($menu['value'],true)?:[];
  296. $parameter = explode("\n",$menu['parameter']);
  297. $options = [];
  298. if($parameter) {
  299. foreach ($parameter as $v) {
  300. $data = explode("=>", $v);
  301. $options[] = ['label' => $data[1], 'value' => $data[0]];
  302. }
  303. $formbuider[] = Form::checkbox('value', '默认值', $menu['value'])->options($options);
  304. }
  305. //单选和多选参数配置
  306. if(!empty($menu['parameter'])){
  307. $formbuider[] = Form::textarea('parameter','配置参数',$menu['parameter'])->placeholder("参数方式例如:\n1=白色\n2=红色\n3=黑色");
  308. }
  309. break;
  310. case 'upload':
  311. if($menu['upload_type'] == 1 ){
  312. $menu['value'] = json_decode($menu['value'],true);
  313. $formbuider[] = Form::frameImageOne('value','图片',Url::buildUrl('admin/widget.images/index',array('fodder'=>'value')),(string)$menu['value'])->icon('image')->width('100%')->height('550px');
  314. }elseif ($menu['upload_type'] == 2 ){
  315. $menu['value'] = json_decode($menu['value'],true)?:[];
  316. $formbuider[] = Form::frameImages('value','多图片',Url::buildUrl('admin/widget.images/index',array('fodder'=>'value')),$menu['value'])->maxLength(5)->icon('images')->width('100%')->height('550px')->spin(0);
  317. }else{
  318. $menu['value'] = json_decode($menu['value'],true);
  319. $formbuider[] = Form::uploadFileOne('value','文件',Url::buildUrl('file_upload'),$menu['value'])->name('file');
  320. }
  321. //上传类型选择
  322. if(!empty($menu['upload_type'])){
  323. $formbuider[] = Form::radio('upload_type','上传类型',$menu['upload_type'])->options([['value'=>1,'label'=>'单图'],['value'=>2,'label'=>'多图'],['value'=>3,'label'=>'文件']]);
  324. }
  325. break;
  326. }
  327. $formbuider[] = Form::number('sort','排序',$menu['sort']);
  328. $formbuider[] = Form::radio('status','状态',$menu['status'])->options([['value'=>1,'label'=>'显示'],['value'=>2,'label'=>'隐藏']]);
  329. $form = Form::make_post_form('编辑字段',$formbuider,Url::buildUrl('update_config',array('id'=>$id)));
  330. $this->assign(compact('form'));
  331. return $this->fetch('public/form-builder');
  332. }
  333. /**
  334. * 删除子字段
  335. * @return \think\response\Json
  336. */
  337. public function delete_cinfig(){
  338. $id = input('id');
  339. if(!ConfigModel::del($id))
  340. return Json::fail(ConfigModel::getErrorInfo('删除失败,请稍候再试!'));
  341. else
  342. return Json::successful('删除成功!');
  343. }
  344. /**
  345. * 保存数据 true
  346. * */
  347. public function save_basics(){
  348. $request = app('request');
  349. if($request->isPost()){
  350. $post = $request->post();
  351. foreach ($post as $k=>$v){
  352. if(is_array($v)){
  353. $res = ConfigModel::where('menu_name',$k)->column('upload_type','type');
  354. foreach ($res as $kk=>$vv){
  355. if($kk == 'upload'){
  356. if($vv == 1 || $vv == 3){
  357. $post[$k] = $v[0];
  358. }
  359. }
  360. }
  361. }
  362. }
  363. foreach ($post as $k=>$v){
  364. ConfigModel::edit(['value' => json_encode($v)],$k,'menu_name');
  365. }
  366. return $this->successful('修改成功');
  367. }
  368. }
  369. /**
  370. * 模板表单提交
  371. * */
  372. // public function view_upload(){
  373. // if($_POST['type'] == 3){
  374. // $res = Upload::file($_POST['file'],'config/file');
  375. // if(!$res->status) return Json::fail($res->error);
  376. // return Json::successful('上传成功!',['url'=>$res->filePath]);
  377. // }else{
  378. // $res = Upload::Image($_POST['file'],'config/image');
  379. // if(is_array($res)){
  380. // SystemAttachment::attachmentAdd($res['name'],$res['size'],$res['type'],$res['dir'],$res['thumb_path'],0,$res['image_type'],$res['time']);
  381. // return Json::successful('上传成功!',['url'=>$res['dir']]);
  382. // }else return Json::fail($res);
  383. // }
  384. // }
  385. /**
  386. * 文件上传
  387. * */
  388. public function file_upload(){
  389. $res = Upload::file($this->request->param('file','file'),'config/file');
  390. if(!$res->status) return Json::fail($res->error);
  391. return Json::successful('上传成功!',['filePath'=>$res->filePath]);
  392. }
  393. /**
  394. * 获取文件名
  395. * */
  396. // public function getImageName(){
  397. // $request = app('request');
  398. // $post = $request->post();
  399. // $src = $post['src'];
  400. // $data['name'] = basename($src);
  401. // exit(json_encode($data));
  402. // }
  403. /**
  404. * 删除原来图片
  405. * @param $url
  406. */
  407. // public function rmPublicResource($url)
  408. // {
  409. // $res = Util::rmPublicResource($url);
  410. // if($res->status)
  411. // return $this->successful('删除成功!');
  412. // else
  413. // return $this->failed($res->msg);
  414. // }
  415. }