SystemConfig.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. <?php
  2. namespace app\admin\controller\setting;
  3. use think\Url;
  4. use service\FormBuilder as Form;
  5. use think\Request;
  6. use service\UtilService as Util;
  7. use service\JsonService as Json;
  8. use service\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. foreach ($list as $k=>$v){
  39. if(!is_null(json_decode($v['value'])))
  40. $list[$k]['value'] = json_decode($v['value'],true);
  41. if($v['type'] == 'upload' && !empty($v['value'])){
  42. if($v['upload_type'] == 1 || $v['upload_type'] == 3) $list[$k]['value'] = explode(',',$v['value']);
  43. }
  44. }
  45. $this->assign('config_tab',$config_tab);
  46. $this->assign('list',$list);
  47. return $this->fetch();
  48. }
  49. /**
  50. * 基础配置 单个
  51. * @return mixed|void
  52. */
  53. public function index_alone(){
  54. $tab_id = input('tab_id');
  55. if(!$tab_id) return $this->failed('参数错误,请重新打开');
  56. $this->assign('tab_id',$tab_id);
  57. $list = ConfigModel::getAll($tab_id);
  58. foreach ($list as $k=>$v){
  59. if(!is_null(json_decode($v['value'])))
  60. $list[$k]['value'] = json_decode($v['value'],true);
  61. if($v['type'] == 'upload' && !empty($v['value'])){
  62. if($v['upload_type'] == 1 || $v['upload_type'] == 3) $list[$k]['value'] = explode(',',$v['value']);
  63. }
  64. }
  65. $this->assign('list',$list);
  66. return $this->fetch();
  67. }
  68. /**
  69. * 添加字段
  70. * */
  71. public function create(Request $request){
  72. $data = Util::getMore(['type',],$request);//接收参数
  73. $tab_id = !empty($request->param('tab_id'))?$request->param('tab_id'):1;
  74. $formbuider = array();
  75. switch ($data['type']){
  76. case 0://文本框
  77. $formbuider = ConfigModel::createInputRule($tab_id);
  78. break;
  79. case 1://多行文本框
  80. $formbuider = ConfigModel::createTextAreaRule($tab_id);
  81. break;
  82. case 2://单选框
  83. $formbuider = ConfigModel::createRadioRule($tab_id);
  84. break;
  85. case 3://文件上传
  86. $formbuider = ConfigModel::createUploadRule($tab_id);
  87. break;
  88. case 4://多选框
  89. $formbuider = ConfigModel::createCheckboxRule($tab_id);
  90. break;
  91. }
  92. $form = Form::make_post_form('添加字段',$formbuider,Url::build('save'));
  93. $this->assign(compact('form'));
  94. return $this->fetch('public/form-builder');
  95. }
  96. /**
  97. * 保存字段
  98. * */
  99. public function save(Request $request){
  100. $data = Util::postMore([
  101. 'menu_name',
  102. 'type',
  103. 'config_tab_id',
  104. 'parameter',
  105. 'upload_type',
  106. 'required',
  107. 'width',
  108. 'high',
  109. 'value',
  110. 'info',
  111. 'desc',
  112. 'sort',
  113. 'status',],$request);
  114. if(!$data['info']) return Json::fail('请输入配置名称');
  115. if(!$data['menu_name']) return Json::fail('请输入字段名称');
  116. if($data['menu_name']){
  117. $oneConfig = ConfigModel::getOneConfig('menu_name',$data['menu_name']);
  118. if(!empty($oneConfig)) return Json::fail('请重新输入字段名称,之前的已经使用过了');
  119. }
  120. if(!$data['desc']) return Json::fail('请输入配置简介');
  121. if($data['sort'] < 0){
  122. $data['sort'] = 0;
  123. }
  124. if($data['type'] == 'text'){
  125. if(!ConfigModel::valiDateTextRole($data)) return Json::fail(ConfigModel::getErrorInfo());
  126. }
  127. if($data['type'] == 'textarea'){
  128. if(!ConfigModel::valiDateTextareaRole($data)) return Json::fail(ConfigModel::getErrorInfo());
  129. }
  130. if($data['type'] == 'radio' || $data['type'] == 'checkbox' ){
  131. if(!$data['parameter']) return Json::fail('请输入配置参数');
  132. if(!ConfigModel::valiDateRadioAndCheckbox($data)) return Json::fail(ConfigModel::getErrorInfo());
  133. $data['value'] = json_encode($data['value']);
  134. }
  135. ConfigModel::set($data);
  136. return Json::successful('添加菜单成功!');
  137. }
  138. /**
  139. * @param Request $request
  140. * @param $id
  141. * @return \think\response\Json
  142. */
  143. public function update_config(Request $request, $id)
  144. {
  145. $type = $request->post('type');
  146. if($type =='text' || $type =='textarea'|| $type == 'radio' || ($type == 'upload' && ($request->post('upload_type') == 1 || $request->post('upload_type') == 3))){
  147. $value = $request->post('value');
  148. }else{
  149. $value = $request->post('value/a');
  150. }
  151. $data = Util::postMore(['status','info','desc','sort','config_tab_id','required','parameter',['value',$value],'upload_type'],$request);
  152. $data['value'] = json_encode($data['value']);
  153. if(!ConfigModel::get($id)) return Json::fail('编辑的记录不存在!');
  154. ConfigModel::edit($data,$id);
  155. return Json::successful('修改成功!');
  156. }
  157. /**
  158. * 修改是否显示子子段
  159. * @param $id
  160. * @return mixed
  161. */
  162. public function edit_cinfig($id){
  163. $menu = ConfigModel::get($id)->getData();
  164. if(!$menu) return Json::fail('数据不存在!');
  165. $formbuider = array();
  166. $formbuider[] = Form::input('menu_name','字段变量',$menu['menu_name'])->disabled(1);
  167. // $formbuider[] = Form::input('type','字段类型',$menu['type'])->disabled(1);
  168. $formbuider[] = Form::hidden('type',$menu['type']);
  169. $formbuider[] = Form::select('config_tab_id','分类',(string)$menu['config_tab_id'])->setOptions(ConfigModel::getConfigTabAll(-1));
  170. $formbuider[] = Form::input('info','配置名称',$menu['info'])->autofocus(1);
  171. $formbuider[] = Form::input('desc','配置简介',$menu['desc']);
  172. switch ($menu['type']){
  173. case 'text':
  174. $menu['value'] = json_decode($menu['value'],true);
  175. //输入框验证规则
  176. $formbuider[] = Form::input('value','默认值',$menu['value']);
  177. if(!empty($menu['required'])){
  178. $formbuider[] = Form::number('width','文本框宽(%)',$menu['width']);
  179. $formbuider[] = Form::input('required','验证规则',$menu['required'])->placeholder('多个请用,隔开例如:required:true,url:true');
  180. }
  181. break;
  182. case 'textarea':
  183. $menu['value'] = json_decode($menu['value'],true);
  184. //多行文本
  185. if(!empty($menu['high'])){
  186. $formbuider[] = Form::textarea('value','默认值',$menu['value'])->rows(5);
  187. $formbuider[] = Form::number('width','文本框宽(%)',$menu['width']);
  188. $formbuider[] = Form::number('high','多行文本框高(%)',$menu['high']);
  189. }else{
  190. $formbuider[] = Form::input('value','默认值',$menu['value']);
  191. }
  192. break;
  193. case 'radio':
  194. $menu['value'] = json_decode($menu['value'],true);
  195. $parameter = explode("\n",$menu['parameter']);
  196. $options = [];
  197. if($parameter){
  198. foreach ($parameter as $v){
  199. $data = explode("=>",$v);
  200. $options[] = ['label'=>$data[1],'value'=>$data[0]];
  201. }
  202. $formbuider[] = Form::radio('value','默认值',$menu['value'])->options($options);
  203. }
  204. //单选和多选参数配置
  205. if(!empty($menu['parameter'])){
  206. $formbuider[] = Form::textarea('parameter','配置参数',$menu['parameter'])->placeholder("参数方式例如:\n1=白色\n2=红色\n3=黑色");
  207. }
  208. break;
  209. case 'checkbox':
  210. $menu['value'] = json_decode($menu['value'],true)?:[];
  211. $parameter = explode("\n",$menu['parameter']);
  212. $options = [];
  213. if($parameter) {
  214. foreach ($parameter as $v) {
  215. $data = explode("=>", $v);
  216. $options[] = ['label' => $data[1], 'value' => $data[0]];
  217. }
  218. $formbuider[] = Form::checkbox('value', '默认值', $menu['value'])->options($options);
  219. }
  220. //单选和多选参数配置
  221. if(!empty($menu['parameter'])){
  222. $formbuider[] = Form::textarea('parameter','配置参数',$menu['parameter'])->placeholder("参数方式例如:\n1=白色\n2=红色\n3=黑色");
  223. }
  224. break;
  225. case 'upload':
  226. if($menu['upload_type'] == 1 ){
  227. $menu['value'] = json_decode($menu['value'],true);
  228. $formbuider[] = Form::frameImageOne('value','图片',Url::build('admin/widget.images/index',array('fodder'=>'value')),(string)$menu['value'])->icon('image')->width('100%')->height('550px');
  229. }elseif ($menu['upload_type'] == 2 ){
  230. $menu['value'] = json_decode($menu['value'],true)?:[];
  231. $formbuider[] = Form::frameImages('value','多图片',Url::build('admin/widget.images/index',array('fodder'=>'value')),$menu['value'])->maxLength(5)->icon('images')->width('100%')->height('550px')->spin(0);
  232. }else{
  233. $menu['value'] = json_decode($menu['value'],true);
  234. $formbuider[] = Form::uploadFileOne('value','文件',Url::build('file_upload'))->name('file');
  235. }
  236. //上传类型选择
  237. if(!empty($menu['upload_type'])){
  238. $formbuider[] = Form::radio('upload_type','上传类型',$menu['upload_type'])->options([['value'=>1,'label'=>'单图'],['value'=>2,'label'=>'多图'],['value'=>3,'label'=>'文件']]);
  239. }
  240. break;
  241. }
  242. $formbuider[] = Form::number('sort','排序',$menu['sort']);
  243. $formbuider[] = Form::radio('status','状态',$menu['status'])->options([['value'=>1,'label'=>'显示'],['value'=>2,'label'=>'隐藏']]);
  244. $form = Form::make_post_form('编辑字段',$formbuider,Url::build('update_config',array('id'=>$id)));
  245. $this->assign(compact('form'));
  246. return $this->fetch('public/form-builder');
  247. }
  248. /**
  249. * 删除子字段
  250. * @return \think\response\Json
  251. */
  252. public function delete_cinfig(){
  253. $id = input('id');
  254. if(!ConfigModel::del($id))
  255. return Json::fail(ConfigModel::getErrorInfo('删除失败,请稍候再试!'));
  256. else
  257. return Json::successful('删除成功!');
  258. }
  259. /**
  260. * 保存数据 true
  261. * */
  262. public function save_basics(){
  263. $request = Request::instance();
  264. if($request->isPost()){
  265. $post = $request->post();
  266. $tab_id = $post['tab_id'];
  267. unset($post['tab_id']);
  268. foreach ($post as $k=>$v){
  269. if(is_array($v)){
  270. $res = ConfigModel::where('menu_name',$k)->column('type,upload_type');
  271. foreach ($res as $kk=>$vv){
  272. if($kk == 'upload'){
  273. if($vv == 1 || $vv == 3){
  274. $post[$k] = $v[0];
  275. }
  276. }
  277. }
  278. }
  279. }
  280. foreach ($post as $k=>$v){
  281. ConfigModel::edit(['value' => json_encode($v)],$k,'menu_name');
  282. }
  283. return $this->successfulNotice('修改成功');
  284. }
  285. }
  286. /**
  287. * 模板表单提交
  288. * */
  289. public function view_upload(){
  290. if($_POST['type'] == 3){
  291. $res = Upload::file($_POST['file'],'config/file');
  292. }else{
  293. $res = Upload::Image($_POST['file'],'config/image');
  294. }
  295. if(!$res->status) return Json::fail($res->error);
  296. return Json::successful('上传成功!',['url'=>$res->dir]);
  297. }
  298. /**
  299. * 文件上传
  300. * */
  301. public function file_upload(){
  302. $res = Upload::file($_POST['file'],'config/file');
  303. if(!$res->status) return Json::fail($res->error);
  304. return Json::successful('上传成功!',['url'=>$res->dir]);
  305. }
  306. /**
  307. * 获取文件名
  308. * */
  309. public function getImageName(){
  310. $request = Request::instance();
  311. $post = $request->post();
  312. $src = $post['src'];
  313. $data['name'] = basename($src);
  314. exit(json_encode($data));
  315. }
  316. /**
  317. * 删除原来图片
  318. * @param $url
  319. */
  320. public function rmPublicResource($url)
  321. {
  322. $res = Util::rmPublicResource($url);
  323. if($res->status)
  324. return $this->successful('删除成功!');
  325. else
  326. return $this->failed($res->msg);
  327. }
  328. }