SystemConfig.php 14 KB

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