SystemConfig.php 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755
  1. <<<<<<< HEAD
  2. <?php
  3. namespace app\admin\controller\setting;
  4. use think\facade\Route as Url;
  5. use app\admin\controller\AuthController;
  6. use app\admin\model\system\{
  7. SystemConfig as ConfigModel, SystemConfigTab as ConfigTabModel
  8. };
  9. use crmeb\services\{
  10. CacheService,
  11. FormBuilder as Form,
  12. UtilService as Util,
  13. JsonService as Json
  14. };
  15. use crmeb\services\upload\Upload;
  16. /**
  17. * 配置列表控制器
  18. * Class SystemConfig
  19. * @package app\admin\controller\system
  20. */
  21. class SystemConfig extends AuthController
  22. {
  23. /**
  24. * 基础配置
  25. * */
  26. public function index()
  27. {
  28. [$type, $tab_id, $children_tab_id] = Util::getMore([
  29. ['type', 0],//配置类型
  30. ['tab_id', 1],//当前分类ID
  31. ['children_tab_id', null],//当前子集分类ID
  32. ], null, true);
  33. $config_tab = null;//顶级分类
  34. $children_config_tab = null;//二级分类
  35. if ($type == 3) {//其它分类
  36. $config_tab = null;
  37. } else {
  38. $config_tab = ConfigModel::getConfigTabAll($type);//获取一级tab
  39. }
  40. $children_config_tab = ConfigModel::getConfigChildrenTabAll($tab_id);//获取二级tab
  41. if (!$children_tab_id && $children_config_tab) {
  42. $children_tab_id = $children_config_tab[0]['id'];
  43. }
  44. if ($children_tab_id) {
  45. $tid = $children_tab_id;
  46. } else {
  47. $tid = $tab_id;
  48. }
  49. //获取分类配置参数
  50. $list = ConfigModel::getAll($tid);
  51. $formbuider = ConfigModel::builder_config_from_data($list);//生产表单json
  52. $form = Form::make_post_form('编辑配置', $formbuider, Url::buildUrl('save_basics'));
  53. $this->assign('tab_id', $tab_id);
  54. $this->assign('children_tab_id', $children_tab_id);
  55. $this->assign('config_tab', $config_tab);
  56. $this->assign('children_config_tab', $children_config_tab);
  57. $this->assign(compact('form'));
  58. $this->assign('list', $list);
  59. return $this->fetch();
  60. }
  61. /**
  62. * 基础配置 单个
  63. * @return mixed|void
  64. */
  65. public function index_alone()
  66. {
  67. $tab_id = input('tab_id');
  68. if (!$tab_id) return $this->failed('参数错误,请重新打开');
  69. $this->assign('tab_id', $tab_id);
  70. $list = ConfigModel::getAll($tab_id);
  71. foreach ($list as $k => $v) {
  72. if (!is_null(json_decode($v['value'])))
  73. $list[$k]['value'] = json_decode($v['value'], true);
  74. if ($v['type'] == 'upload' && !empty($v['value'])) {
  75. if ($v['upload_type'] == 1 || $v['upload_type'] == 3) $list[$k]['value'] = explode(',', $v['value']);
  76. }
  77. }
  78. $this->assign('list', $list);
  79. return $this->fetch();
  80. }
  81. /**
  82. * 添加字段
  83. * @return string
  84. * @throws \FormBuilder\exception\FormBuilderException
  85. */
  86. public function create()
  87. {
  88. $data = Util::getMore(['type',]);//接收参数
  89. $tab_id = !empty(request()->param('tab_id')) ? request()->param('tab_id') : 1;
  90. //前面通用字段
  91. $formbuiderheader = array();
  92. $formbuiderheader[] = Form::select('config_tab_id', '分类', 0)->setOptions(function () {
  93. $menuList = ConfigTabModel::field(['id', 'pid', 'title'])->select()->toArray();
  94. $list = sort_list_tier($menuList, '顶级', 'pid', 'id');
  95. $options = [['value' => 0, 'label' => '顶级按钮']];
  96. foreach ($list as $option) {
  97. $options[] = ['value' => $option['id'], 'label' => $option['html'] . $option['title']];
  98. }
  99. return $options;
  100. })->filterable(1);
  101. $formbuiderheader[] = Form::select('input_type', '类型')->setOptions(ConfigModel::texttype());
  102. $formbuiderheader[] = Form::input('info', '配置名称')->autofocus(1);
  103. $formbuiderheader[] = Form::input('menu_name', '字段变量')->placeholder('例如:site_url');
  104. $formbuiderheader[] = Form::input('desc', '配置简介');
  105. //不同类型不同字段
  106. $formbuider = array();
  107. switch ($data['type']) {
  108. case 0://文本框
  109. $formbuider = ConfigModel::createInputRule($tab_id);
  110. break;
  111. case 1://多行文本框
  112. $formbuider = ConfigModel::createTextAreaRule($tab_id);
  113. break;
  114. case 2://单选框
  115. $formbuider = ConfigModel::createRadioRule($tab_id);
  116. break;
  117. case 3://文件上传
  118. $formbuider = ConfigModel::createUploadRule($tab_id);
  119. break;
  120. case 4://多选框
  121. $formbuider = ConfigModel::createCheckboxRule($tab_id);
  122. break;
  123. case 5://下拉框
  124. $formbuider = ConfigModel::createSelectRule($tab_id);
  125. break;
  126. }
  127. //后面通用字段
  128. $formbuiderfoot = array();
  129. $formbuiderfoot[] = Form::number('sort', '排序');
  130. $formbuiderfoot[] = Form::radio('status', '状态', 1)->options(ConfigModel::formstatus());
  131. $formbuiders = array_merge($formbuiderheader, $formbuider, $formbuiderfoot);
  132. $form = Form::make_post_form('添加字段', $formbuiders, Url::buildUrl('save'));
  133. $this->assign(compact('form'));
  134. $this->assign('get', request()->param());
  135. return $this->fetch();
  136. }
  137. /**
  138. * 保存字段
  139. * */
  140. public function save()
  141. {
  142. $data = Util::postMore([
  143. 'menu_name',
  144. 'type',
  145. 'input_type',
  146. 'config_tab_id',
  147. 'parameter',
  148. 'upload_type',
  149. 'required',
  150. 'width',
  151. 'high',
  152. 'value',
  153. 'info',
  154. 'desc',
  155. 'sort',
  156. 'status',]);
  157. if (!$data['info']) return Json::fail('请输入配置名称');
  158. if (!$data['menu_name']) return Json::fail('请输入字段名称');
  159. if ($data['menu_name']) {
  160. $oneConfig = ConfigModel::getOneConfig('menu_name', $data['menu_name']);
  161. if (!empty($oneConfig)) return Json::fail('请重新输入字段名称,之前的已经使用过了');
  162. }
  163. if (!$data['desc']) return Json::fail('请输入配置简介');
  164. if ($data['sort'] < 0) {
  165. $data['sort'] = 0;
  166. }
  167. if ($data['type'] == 'text') {
  168. if (!ConfigModel::valiDateTextRole($data)) return Json::fail(ConfigModel::getErrorInfo());
  169. }
  170. if ($data['type'] == 'textarea') {
  171. if (!ConfigModel::valiDateTextareaRole($data)) return Json::fail(ConfigModel::getErrorInfo());
  172. }
  173. $data['parameter'] = htmlspecialchars_decode($data['parameter']);
  174. if ($data['type'] == 'radio' || $data['type'] == 'checkbox') {
  175. if (!$data['parameter']) return Json::fail('请输入配置参数');
  176. if (!ConfigModel::valiDateRadioAndCheckbox($data)) return Json::fail(ConfigModel::getErrorInfo());
  177. $data['value'] = json_encode($data['value']);
  178. }
  179. ConfigModel::create($data);
  180. CacheService::clear();
  181. return Json::successful('添加菜单成功!');
  182. }
  183. /**
  184. * @param $id
  185. */
  186. public function update_config($id)
  187. {
  188. $type = request()->post('type');
  189. if ($type == 'text' || $type == 'textarea' || $type == 'radio' || ($type == 'upload' && (request()->post('upload_type') == 1 || request()->post('upload_type') == 3))) {
  190. $value = request()->post('value');
  191. } else {
  192. $value = request()->post('value/a');
  193. }
  194. $data = Util::postMore(['status', 'info', 'desc', 'sort', 'config_tab_id', 'required', 'parameter', ['value', $value], 'upload_type', 'input_type']);
  195. $data['value'] = htmlspecialchars_decode(json_encode($data['value']));
  196. $data['parameter'] = htmlspecialchars_decode($data['parameter']);
  197. if (!ConfigModel::get($id)) return Json::fail('编辑的记录不存在!');
  198. ConfigModel::edit($data, $id);
  199. return Json::successful('修改成功!');
  200. }
  201. /**
  202. * 修改是否显示子子段
  203. * @param $id
  204. * @return mixed
  205. */
  206. public function edit_config($id)
  207. {
  208. $menu = ConfigModel::get($id)->getData();
  209. if (!$menu) return Json::fail('数据不存在!');
  210. $formbuider = array();
  211. $formbuider[] = Form::input('menu_name', '字段变量', $menu['menu_name'])->disabled(1);
  212. $formbuider[] = Form::hidden('type', $menu['type']);
  213. // $formbuider[] = Form::select('config_tab_id', '分类', (string)$menu['config_tab_id'])->setOptions(ConfigModel::getConfigTabAll(-1));
  214. $formbuider[] = Form::select('config_tab_id', '分类', (string)$menu['config_tab_id'])->setOptions(function () {
  215. $menuList = ConfigTabModel::field(['id', 'pid', 'title'])->select()->toArray();
  216. $list = sort_list_tier($menuList, '顶级', 'pid', 'id');
  217. $options = [['value' => 0, 'label' => '顶级按钮']];
  218. foreach ($list as $option) {
  219. $options[] = ['value' => $option['id'], 'label' => $option['html'] . $option['title']];
  220. }
  221. return $options;
  222. })->filterable(1);
  223. $formbuider[] = Form::input('info', '配置名称', $menu['info'])->autofocus(1);
  224. $formbuider[] = Form::input('desc', '配置简介', $menu['desc']);
  225. switch ($menu['type']) {
  226. case 'text':
  227. $menu['value'] = json_decode($menu['value'], true);
  228. $formbuider[] = Form::select('input_type', '类型', $menu['input_type'])->setOptions(ConfigModel::texttype());
  229. //输入框验证规则
  230. $formbuider[] = Form::input('value', '默认值', $menu['value']);
  231. if (!empty($menu['required'])) {
  232. $formbuider[] = Form::number('width', '文本框宽(%)', $menu['width']);
  233. $formbuider[] = Form::input('required', '验证规则', $menu['required'])->placeholder('多个请用,隔开例如:required:true,url:true');
  234. }
  235. break;
  236. case 'textarea':
  237. $menu['value'] = json_decode($menu['value'], true);
  238. //多行文本
  239. if (!empty($menu['high'])) {
  240. $formbuider[] = Form::textarea('value', '默认值', $menu['value'])->rows(5);
  241. $formbuider[] = Form::number('width', '文本框宽(%)', $menu['width']);
  242. $formbuider[] = Form::number('high', '多行文本框高(%)', $menu['high']);
  243. } else {
  244. $formbuider[] = Form::input('value', '默认值', $menu['value']);
  245. }
  246. break;
  247. case 'radio':
  248. $menu['value'] = json_decode($menu['value'], true);
  249. $parameter = explode("\n", htmlspecialchars_decode($menu['parameter']));
  250. $options = [];
  251. if ($parameter) {
  252. foreach ($parameter as $v) {
  253. $data = explode("=>", $v);
  254. $options[] = ['label' => $data[1], 'value' => $data[0]];
  255. }
  256. $formbuider[] = Form::radio('value', '默认值', $menu['value'])->options($options);
  257. }
  258. //单选和多选参数配置
  259. if (!empty($menu['parameter'])) {
  260. $formbuider[] = Form::textarea('parameter', '配置参数', $menu['parameter'])->placeholder("参数方式例如:\n1=白色\n2=红色\n3=黑色");
  261. }
  262. break;
  263. case 'checkbox':
  264. $menu['value'] = json_decode($menu['value'], true) ?: [];
  265. $parameter = explode("\n", htmlspecialchars_decode($menu['parameter']));
  266. $options = [];
  267. if ($parameter) {
  268. foreach ($parameter as $v) {
  269. $data = explode("=>", $v);
  270. $options[] = ['label' => $data[1], 'value' => $data[0]];
  271. }
  272. $formbuider[] = Form::checkbox('value', '默认值', $menu['value'])->options($options);
  273. }
  274. //单选和多选参数配置
  275. if (!empty($menu['parameter'])) {
  276. $formbuider[] = Form::textarea('parameter', '配置参数', $menu['parameter'])->placeholder("参数方式例如:\n1=白色\n2=红色\n3=黑色");
  277. }
  278. break;
  279. case 'upload':
  280. if ($menu['upload_type'] == 1) {
  281. $menu['value'] = json_decode($menu['value'], true);
  282. $formbuider[] = Form::frameImageOne('value', '图片', Url::buildUrl('admin/widget.images/index', array('fodder' => 'value')), (string)$menu['value'])->icon('image')->width('100%')->height('550px');
  283. } elseif ($menu['upload_type'] == 2) {
  284. $menu['value'] = json_decode($menu['value'], true) ?: [];
  285. $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);
  286. } else {
  287. $menu['value'] = json_decode($menu['value'], true);
  288. $formbuider[] = Form::uploadFileOne('value', '文件', Url::buildUrl('file_upload'), $menu['value'])->name('file');
  289. }
  290. //上传类型选择
  291. if (!empty($menu['upload_type'])) {
  292. $formbuider[] = Form::radio('upload_type', '上传类型', $menu['upload_type'])->options([['value' => 1, 'label' => '单图'], ['value' => 2, 'label' => '多图'], ['value' => 3, 'label' => '文件']]);
  293. }
  294. break;
  295. }
  296. $formbuider[] = Form::number('sort', '排序', $menu['sort']);
  297. $formbuider[] = Form::radio('status', '状态', $menu['status'])->options([['value' => 1, 'label' => '显示'], ['value' => 2, 'label' => '隐藏']]);
  298. $form = Form::make_post_form('编辑字段', $formbuider, Url::buildUrl('update_config', array('id' => $id)));
  299. $this->assign(compact('form'));
  300. return $this->fetch('public/form-builder');
  301. }
  302. /**
  303. * 删除子字段
  304. * @return \think\response\Json
  305. */
  306. public function delete_config()
  307. {
  308. $id = input('id');
  309. if (!ConfigModel::del($id)) {
  310. return Json::fail(ConfigModel::getErrorInfo('删除失败,请稍候再试!'));
  311. } else {
  312. CacheService::clear();
  313. return Json::successful('删除成功!');
  314. }
  315. }
  316. /**
  317. * 保存数据 true
  318. * */
  319. public function save_basics()
  320. {
  321. $request = app('request');
  322. if ($request->isPost()) {
  323. $post = $request->post();
  324. foreach ($post as $k => $v) {
  325. if (is_array($v)) {
  326. $res = ConfigModel::where('menu_name', $k)->column('upload_type', 'type');
  327. foreach ($res as $kk => $vv) {
  328. if ($kk == 'upload') {
  329. if ($vv == 1 || $vv == 3) {
  330. $post[$k] = $v[0];
  331. }
  332. }
  333. }
  334. }
  335. }
  336. foreach ($post as $k => $v) {
  337. ConfigModel::edit(['value' => json_encode($v)], $k, 'menu_name');
  338. }
  339. CacheService::clear();
  340. return $this->successful('修改成功');
  341. }
  342. }
  343. /**
  344. * 文件上传
  345. * */
  346. public function file_upload()
  347. {
  348. $upload = new Upload('local');
  349. $res = $upload->to('config/file')->move($this->request->param('file', 'file'));
  350. if ($res === false) return Json::fail($upload->getError());
  351. return Json::successful('上传成功!', ['filePath' => $res->filePath]);
  352. }
  353. }
  354. =======
  355. <?php
  356. namespace app\admin\controller\setting;
  357. use think\facade\Route as Url;
  358. use app\admin\controller\AuthController;
  359. use app\admin\model\system\{
  360. SystemConfig as ConfigModel, SystemConfigTab as ConfigTabModel
  361. };
  362. use crmeb\services\{
  363. CacheService,
  364. FormBuilder as Form,
  365. UtilService as Util,
  366. JsonService as Json
  367. };
  368. use crmeb\services\upload\Upload;
  369. /**
  370. * 配置列表控制器
  371. * Class SystemConfig
  372. * @package app\admin\controller\system
  373. */
  374. class SystemConfig extends AuthController
  375. {
  376. /**
  377. * 基础配置
  378. * */
  379. public function index()
  380. {
  381. [$type, $tab_id, $children_tab_id] = Util::getMore([
  382. ['type', 0],//配置类型
  383. ['tab_id', 1],//当前分类ID
  384. ['children_tab_id', null],//当前子集分类ID
  385. ], null, true);
  386. $config_tab = null;//顶级分类
  387. $children_config_tab = null;//二级分类
  388. if ($type == 3) {//其它分类
  389. $config_tab = null;
  390. } else {
  391. $config_tab = ConfigModel::getConfigTabAll($type);//获取一级tab
  392. }
  393. $children_config_tab = ConfigModel::getConfigChildrenTabAll($tab_id);//获取二级tab
  394. if (!$children_tab_id && $children_config_tab) {
  395. $children_tab_id = $children_config_tab[0]['id'];
  396. }
  397. if ($children_tab_id) {
  398. $tid = $children_tab_id;
  399. } else {
  400. $tid = $tab_id;
  401. }
  402. //获取分类配置参数
  403. $list = ConfigModel::getAll($tid);
  404. $formbuider = ConfigModel::builder_config_from_data($list);//生产表单json
  405. $form = Form::make_post_form('编辑配置', $formbuider, Url::buildUrl('save_basics'));
  406. $this->assign('tab_id', $tab_id);
  407. $this->assign('children_tab_id', $children_tab_id);
  408. $this->assign('config_tab', $config_tab);
  409. $this->assign('children_config_tab', $children_config_tab);
  410. $this->assign(compact('form'));
  411. $this->assign('list', $list);
  412. return $this->fetch();
  413. }
  414. /**
  415. * 基础配置 单个
  416. * @return mixed|void
  417. */
  418. public function index_alone()
  419. {
  420. $tab_id = input('tab_id');
  421. if (!$tab_id) return $this->failed('参数错误,请重新打开');
  422. $this->assign('tab_id', $tab_id);
  423. $list = ConfigModel::getAll($tab_id);
  424. foreach ($list as $k => $v) {
  425. if (!is_null(json_decode($v['value'])))
  426. $list[$k]['value'] = json_decode($v['value'], true);
  427. if ($v['type'] == 'upload' && !empty($v['value'])) {
  428. if ($v['upload_type'] == 1 || $v['upload_type'] == 3) $list[$k]['value'] = explode(',', $v['value']);
  429. }
  430. }
  431. $this->assign('list', $list);
  432. return $this->fetch();
  433. }
  434. /**
  435. * 添加字段
  436. * @return string
  437. * @throws \FormBuilder\exception\FormBuilderException
  438. */
  439. public function create()
  440. {
  441. $data = Util::getMore(['type',]);//接收参数
  442. $tab_id = !empty(request()->param('tab_id')) ? request()->param('tab_id') : 1;
  443. //前面通用字段
  444. $formbuiderheader = array();
  445. $formbuiderheader[] = Form::select('config_tab_id', '分类', 0)->setOptions(function () {
  446. $menuList = ConfigTabModel::field(['id', 'pid', 'title'])->select()->toArray();
  447. $list = sort_list_tier($menuList, '顶级', 'pid', 'id');
  448. $options = [['value' => 0, 'label' => '顶级按钮']];
  449. foreach ($list as $option) {
  450. $options[] = ['value' => $option['id'], 'label' => $option['html'] . $option['title']];
  451. }
  452. return $options;
  453. })->filterable(1);
  454. $formbuiderheader[] = Form::select('input_type', '类型')->setOptions(ConfigModel::texttype());
  455. $formbuiderheader[] = Form::input('info', '配置名称')->autofocus(1);
  456. $formbuiderheader[] = Form::input('menu_name', '字段变量')->placeholder('例如:site_url');
  457. $formbuiderheader[] = Form::input('desc', '配置简介');
  458. //不同类型不同字段
  459. $formbuider = array();
  460. switch ($data['type']) {
  461. case 0://文本框
  462. $formbuider = ConfigModel::createInputRule($tab_id);
  463. break;
  464. case 1://多行文本框
  465. $formbuider = ConfigModel::createTextAreaRule($tab_id);
  466. break;
  467. case 2://单选框
  468. $formbuider = ConfigModel::createRadioRule($tab_id);
  469. break;
  470. case 3://文件上传
  471. $formbuider = ConfigModel::createUploadRule($tab_id);
  472. break;
  473. case 4://多选框
  474. $formbuider = ConfigModel::createCheckboxRule($tab_id);
  475. break;
  476. case 5://下拉框
  477. $formbuider = ConfigModel::createSelectRule($tab_id);
  478. break;
  479. }
  480. //后面通用字段
  481. $formbuiderfoot = array();
  482. $formbuiderfoot[] = Form::number('sort', '排序');
  483. $formbuiderfoot[] = Form::radio('status', '状态', 1)->options(ConfigModel::formstatus());
  484. $formbuiders = array_merge($formbuiderheader, $formbuider, $formbuiderfoot);
  485. $form = Form::make_post_form('添加字段', $formbuiders, Url::buildUrl('save'));
  486. $this->assign(compact('form'));
  487. $this->assign('get', request()->param());
  488. return $this->fetch();
  489. }
  490. /**
  491. * 保存字段
  492. * */
  493. public function save()
  494. {
  495. $data = Util::postMore([
  496. 'menu_name',
  497. 'type',
  498. 'input_type',
  499. 'config_tab_id',
  500. 'parameter',
  501. 'upload_type',
  502. 'required',
  503. 'width',
  504. 'high',
  505. 'value',
  506. 'info',
  507. 'desc',
  508. 'sort',
  509. 'status',]);
  510. if (!$data['info']) return Json::fail('请输入配置名称');
  511. if (!$data['menu_name']) return Json::fail('请输入字段名称');
  512. if ($data['menu_name']) {
  513. $oneConfig = ConfigModel::getOneConfig('menu_name', $data['menu_name']);
  514. if (!empty($oneConfig)) return Json::fail('请重新输入字段名称,之前的已经使用过了');
  515. }
  516. if (!$data['desc']) return Json::fail('请输入配置简介');
  517. if ($data['sort'] < 0) {
  518. $data['sort'] = 0;
  519. }
  520. if ($data['type'] == 'text') {
  521. if (!ConfigModel::valiDateTextRole($data)) return Json::fail(ConfigModel::getErrorInfo());
  522. }
  523. if ($data['type'] == 'textarea') {
  524. if (!ConfigModel::valiDateTextareaRole($data)) return Json::fail(ConfigModel::getErrorInfo());
  525. }
  526. $data['parameter'] = htmlspecialchars_decode($data['parameter']);
  527. if ($data['type'] == 'radio' || $data['type'] == 'checkbox') {
  528. if (!$data['parameter']) return Json::fail('请输入配置参数');
  529. if (!ConfigModel::valiDateRadioAndCheckbox($data)) return Json::fail(ConfigModel::getErrorInfo());
  530. $data['value'] = json_encode($data['value']);
  531. }
  532. ConfigModel::create($data);
  533. CacheService::clear();
  534. return Json::successful('添加菜单成功!');
  535. }
  536. /**
  537. * @param $id
  538. */
  539. public function update_config($id)
  540. {
  541. $type = request()->post('type');
  542. if ($type == 'text' || $type == 'textarea' || $type == 'radio' || ($type == 'upload' && (request()->post('upload_type') == 1 || request()->post('upload_type') == 3))) {
  543. $value = request()->post('value');
  544. } else {
  545. $value = request()->post('value/a');
  546. }
  547. $data = Util::postMore(['status', 'info', 'desc', 'sort', 'config_tab_id', 'required', 'parameter', ['value', $value], 'upload_type', 'input_type']);
  548. $data['value'] = htmlspecialchars_decode(json_encode($data['value']));
  549. $data['parameter'] = htmlspecialchars_decode($data['parameter']);
  550. if (!ConfigModel::get($id)) return Json::fail('编辑的记录不存在!');
  551. ConfigModel::edit($data, $id);
  552. return Json::successful('修改成功!');
  553. }
  554. /**
  555. * 修改是否显示子子段
  556. * @param $id
  557. * @return mixed
  558. */
  559. public function edit_config($id)
  560. {
  561. $menu = ConfigModel::get($id)->getData();
  562. if (!$menu) return Json::fail('数据不存在!');
  563. $formbuider = array();
  564. $formbuider[] = Form::input('menu_name', '字段变量', $menu['menu_name'])->disabled(1);
  565. $formbuider[] = Form::hidden('type', $menu['type']);
  566. // $formbuider[] = Form::select('config_tab_id', '分类', (string)$menu['config_tab_id'])->setOptions(ConfigModel::getConfigTabAll(-1));
  567. $formbuider[] = Form::select('config_tab_id', '分类', (string)$menu['config_tab_id'])->setOptions(function () {
  568. $menuList = ConfigTabModel::field(['id', 'pid', 'title'])->select()->toArray();
  569. $list = sort_list_tier($menuList, '顶级', 'pid', 'id');
  570. $options = [['value' => 0, 'label' => '顶级按钮']];
  571. foreach ($list as $option) {
  572. $options[] = ['value' => $option['id'], 'label' => $option['html'] . $option['title']];
  573. }
  574. return $options;
  575. })->filterable(1);
  576. $formbuider[] = Form::input('info', '配置名称', $menu['info'])->autofocus(1);
  577. $formbuider[] = Form::input('desc', '配置简介', $menu['desc']);
  578. switch ($menu['type']) {
  579. case 'text':
  580. $menu['value'] = json_decode($menu['value'], true);
  581. $formbuider[] = Form::select('input_type', '类型', $menu['input_type'])->setOptions(ConfigModel::texttype());
  582. //输入框验证规则
  583. $formbuider[] = Form::input('value', '默认值', $menu['value']);
  584. if (!empty($menu['required'])) {
  585. $formbuider[] = Form::number('width', '文本框宽(%)', $menu['width']);
  586. $formbuider[] = Form::input('required', '验证规则', $menu['required'])->placeholder('多个请用,隔开例如:required:true,url:true');
  587. }
  588. break;
  589. case 'textarea':
  590. $menu['value'] = json_decode($menu['value'], true);
  591. //多行文本
  592. if (!empty($menu['high'])) {
  593. $formbuider[] = Form::textarea('value', '默认值', $menu['value'])->rows(5);
  594. $formbuider[] = Form::number('width', '文本框宽(%)', $menu['width']);
  595. $formbuider[] = Form::number('high', '多行文本框高(%)', $menu['high']);
  596. } else {
  597. $formbuider[] = Form::input('value', '默认值', $menu['value']);
  598. }
  599. break;
  600. case 'radio':
  601. $menu['value'] = json_decode($menu['value'], true);
  602. $parameter = explode("\n", htmlspecialchars_decode($menu['parameter']));
  603. $options = [];
  604. if ($parameter) {
  605. foreach ($parameter as $v) {
  606. $data = explode("=>", $v);
  607. $options[] = ['label' => $data[1], 'value' => $data[0]];
  608. }
  609. $formbuider[] = Form::radio('value', '默认值', $menu['value'])->options($options);
  610. }
  611. //单选和多选参数配置
  612. if (!empty($menu['parameter'])) {
  613. $formbuider[] = Form::textarea('parameter', '配置参数', $menu['parameter'])->placeholder("参数方式例如:\n1=白色\n2=红色\n3=黑色");
  614. }
  615. break;
  616. case 'checkbox':
  617. $menu['value'] = json_decode($menu['value'], true) ?: [];
  618. $parameter = explode("\n", htmlspecialchars_decode($menu['parameter']));
  619. $options = [];
  620. if ($parameter) {
  621. foreach ($parameter as $v) {
  622. $data = explode("=>", $v);
  623. $options[] = ['label' => $data[1], 'value' => $data[0]];
  624. }
  625. $formbuider[] = Form::checkbox('value', '默认值', $menu['value'])->options($options);
  626. }
  627. //单选和多选参数配置
  628. if (!empty($menu['parameter'])) {
  629. $formbuider[] = Form::textarea('parameter', '配置参数', $menu['parameter'])->placeholder("参数方式例如:\n1=白色\n2=红色\n3=黑色");
  630. }
  631. break;
  632. case 'upload':
  633. if ($menu['upload_type'] == 1) {
  634. $menu['value'] = json_decode($menu['value'], true);
  635. $formbuider[] = Form::frameImageOne('value', '图片', Url::buildUrl('admin/widget.images/index', array('fodder' => 'value')), (string)$menu['value'])->icon('image')->width('100%')->height('550px');
  636. } elseif ($menu['upload_type'] == 2) {
  637. $menu['value'] = json_decode($menu['value'], true) ?: [];
  638. $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);
  639. } else {
  640. $menu['value'] = json_decode($menu['value'], true);
  641. $formbuider[] = Form::uploadFileOne('value', '文件', Url::buildUrl('file_upload'), $menu['value'])->name('file');
  642. }
  643. //上传类型选择
  644. if (!empty($menu['upload_type'])) {
  645. $formbuider[] = Form::radio('upload_type', '上传类型', $menu['upload_type'])->options([['value' => 1, 'label' => '单图'], ['value' => 2, 'label' => '多图'], ['value' => 3, 'label' => '文件']]);
  646. }
  647. break;
  648. }
  649. $formbuider[] = Form::number('sort', '排序', $menu['sort']);
  650. $formbuider[] = Form::radio('status', '状态', $menu['status'])->options([['value' => 1, 'label' => '显示'], ['value' => 2, 'label' => '隐藏']]);
  651. $form = Form::make_post_form('编辑字段', $formbuider, Url::buildUrl('update_config', array('id' => $id)));
  652. $this->assign(compact('form'));
  653. return $this->fetch('public/form-builder');
  654. }
  655. /**
  656. * 删除子字段
  657. * @return \think\response\Json
  658. */
  659. public function delete_config()
  660. {
  661. $id = input('id');
  662. if (!ConfigModel::del($id)) {
  663. return Json::fail(ConfigModel::getErrorInfo('删除失败,请稍候再试!'));
  664. } else {
  665. CacheService::clear();
  666. return Json::successful('删除成功!');
  667. }
  668. }
  669. /**
  670. * 保存数据 true
  671. * */
  672. public function save_basics()
  673. {
  674. $request = app('request');
  675. if ($request->isPost()) {
  676. $post = $request->post();
  677. foreach ($post as $k => $v) {
  678. if (is_array($v)) {
  679. $res = ConfigModel::where('menu_name', $k)->column('upload_type', 'type');
  680. foreach ($res as $kk => $vv) {
  681. if ($kk == 'upload') {
  682. if ($vv == 1 || $vv == 3) {
  683. $post[$k] = $v[0];
  684. }
  685. }
  686. }
  687. }
  688. }
  689. foreach ($post as $k => $v) {
  690. ConfigModel::edit(['value' => json_encode($v)], $k, 'menu_name');
  691. }
  692. CacheService::clear();
  693. return $this->successful('修改成功');
  694. }
  695. }
  696. /**
  697. * 文件上传
  698. * */
  699. public function file_upload()
  700. {
  701. $upload = new Upload('local');
  702. $res = $upload->to('config/file')->move($this->request->param('file', 'file'));
  703. if ($res === false) return Json::fail($upload->getError());
  704. return Json::successful('上传成功!', ['filePath' => $res->filePath]);
  705. }
  706. }
  707. >>>>>>> 386b37d33e5ba817cba00df29efaefbd692e4dd1