SystemConfig.php 19 KB

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