Config.php 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. <?php
  2. /**
  3. * ----------------------------------------------------------------------------
  4. * 行到水穷处,坐看云起时
  5. * 开发软件,找贵阳云起信息科技,官网地址:https://www.56q7.com/
  6. * ----------------------------------------------------------------------------
  7. * Author: 老成
  8. * email:85556713@qq.com
  9. */
  10. declare(strict_types = 1);
  11. namespace app\admin\controller\general;
  12. use app\common\controller\Backend;
  13. use app\common\model\Addons;
  14. use app\common\model\Config as ConfigModel;
  15. use think\annotation\route\Group;
  16. use think\annotation\route\Route;
  17. use think\facade\Cache;
  18. /**
  19. * 系统配置
  20. */
  21. #[Group("general/config")]
  22. class Config extends Backend
  23. {
  24. public function _initialize()
  25. {
  26. parent::_initialize();
  27. }
  28. #[Route("GET","index")]
  29. public function index()
  30. {
  31. if($this->request->isAjax()){
  32. $group=$this->request->get('group');
  33. $list=ConfigModel::where(['group'=>$group])->select();
  34. if($group=='addons'){
  35. $result=[];
  36. foreach ($list as $item){
  37. $pack=$item->addons;
  38. if(!isset($result[$pack])){
  39. $name='';
  40. $type='';
  41. $addons=Addons::where(['pack'=>$pack])->find();
  42. if($addons){
  43. $name=$addons->name;
  44. $type=Addons::TYPE[$addons['type']];
  45. }
  46. $result[$pack]=[
  47. 'key'=>$pack,
  48. 'name'=>$name,
  49. 'type'=>$type,
  50. 'list'=>[]
  51. ];
  52. }
  53. $result[$pack]['list'][]=$item;
  54. //替换value中的{$host}为本地域名
  55. if($item['value']){
  56. $value=str_replace('{$host}',$this->request->host(),$item['value']);
  57. $item['value']=$value;
  58. }
  59. }
  60. $this->success('',array_values($result));
  61. }
  62. $this->success('',$list);
  63. }
  64. $groupList= ConfigModel::where(['group'=>'dictionary','name'=>'configgroup'])->find()->value;
  65. $typeList=ConfigModel::getTypeList();
  66. $this->assign('groupList',$groupList);
  67. $this->assign('typeList',$typeList);
  68. $this->assign('app_debug',config('app.app_debug'));
  69. return $this->fetch();
  70. }
  71. #[Route("POST","del")]
  72. public function del()
  73. {
  74. $app_debug=\think\facade\Config::get('app.app_debug');
  75. if(!$app_debug){
  76. $this->error(__('非调试模式下不能删除配置'));
  77. }
  78. $group=$this->request->post('group');
  79. $name=$this->request->post('name');
  80. $config=ConfigModel::where(['name'=>$name,'group'=>$group])->find();
  81. if(!$config->can_delete){
  82. $this->error(__('该配置不可删除'));
  83. }
  84. $config->delete();
  85. Cache::delete('site_config_'.$group);
  86. $this->success();
  87. }
  88. #[Route("POST","add")]
  89. public function add()
  90. {
  91. $app_debug=\think\facade\Config::get('app.app_debug');
  92. if(!$app_debug){
  93. $this->error(__('非调试模式下不能增加配置'));
  94. }
  95. $data=$this->request->post('row/a');
  96. $name=($data['group']=='addons')?$data['addons_pack'].'_'.$data['name']:$data['name'];
  97. ConfigModel::where(['name'=>$name,'group'=>$data['group']])->find() && $this->error(__('配置已存在'));
  98. if($data['group']=='addons' && $data['addons_pack']==''){
  99. $this->error(__('扩展包名不能为空'));
  100. }
  101. $extend='';
  102. switch ($data['type']){
  103. case 'radio':
  104. case 'select':
  105. if(!isset($data['options'])){
  106. $this->error(__('选项不能为空'));
  107. }
  108. $extend=htmlspecialchars_decode($data['options']);
  109. break;
  110. case 'checkbox':
  111. case 'selects':
  112. if(!isset($data['options'])){
  113. $this->error(__('选项不能为空'));
  114. }
  115. if($data['value']){
  116. $isarr=str_starts_with($data['value'], '[') && str_ends_with($data['value'], ']');
  117. if(!$isarr){
  118. $this->error(__('默认值必须是数组'));
  119. }
  120. }
  121. $extend=htmlspecialchars_decode($data['options']);
  122. break;
  123. case 'selectpage':
  124. case 'selectpages':
  125. if($data['url']===''){
  126. $this->error(__('参数%s不能为空',['s'=>'url']));
  127. }
  128. if($data['keyField']===''){
  129. $this->error(__('参数%s不能为空',['s'=>'keyField']));
  130. }
  131. if($data['labelField']===''){
  132. $this->error(__('参数%s不能为空',['s'=>'labelField']));
  133. }
  134. $extend=json_encode([
  135. 'url'=>$data['url'],
  136. 'keyField'=>$data['keyField'],
  137. 'labelField'=>$data['labelField'],
  138. ],JSON_UNESCAPED_UNICODE);
  139. break;
  140. case 'json':
  141. if(!$data['label']){
  142. $data['label']=['键名','键值'];
  143. }else{
  144. $data['label']=explode(',',$data['label']);
  145. }
  146. if(!$data['keys']){
  147. $data['keys']=['0','1'];
  148. }else{
  149. $data['keys']=explode(',',$data['keys']);
  150. }
  151. $extend=json_encode([$data['label'],$data['keys']],JSON_UNESCAPED_UNICODE);
  152. break;
  153. }
  154. (new ConfigModel())->save([
  155. 'name'=>$name,
  156. 'title'=>$data['title'],
  157. 'type'=>$data['type'],
  158. 'addons'=>($data['group']=='addons')?$data['addons_pack']:'',
  159. 'group'=>$data['group'],
  160. 'value'=>$data['value'],
  161. 'rules'=>str_replace(',',';',$data['rules']),
  162. 'tips'=>$data['tips'],
  163. 'extend'=>$extend,
  164. 'can_delete'=>1
  165. ]);
  166. Cache::delete('site_config_'.$data['group']);
  167. $this->success();
  168. }
  169. #[Route("POST","edit")]
  170. public function edit()
  171. {
  172. $app_debug=\think\facade\Config::get('app.app_debug');
  173. if(!$app_debug){
  174. $this->error(__('非调试模式下不能修改配置'));
  175. }
  176. $data=$this->request->post('row/a');
  177. $group=$data['group'];
  178. if($group=='addons'){
  179. unset($data['addons']);
  180. }
  181. foreach ($data as $key=>$value){
  182. $value=htmlspecialchars_decode($value);
  183. if($group=='dictionary' && $key=='configgroup'){
  184. $editvalue=json_decode($value,true);
  185. $arr=array_keys($editvalue);
  186. if(!in_array('basic',$arr)){
  187. $this->error(__('基础配置项必须存在'));
  188. }
  189. if(!in_array('addons',$arr)){
  190. $this->error(__('插件配置项必须存在'));
  191. }
  192. if(!in_array('dictionary',$arr)){
  193. $this->error(__('配置分组项必须存在'));
  194. }
  195. }
  196. ConfigModel::where(['group'=>$group,'name'=>$key])->update(['value'=>$value]);
  197. }
  198. Cache::delete('site_config_'.$data['group']);
  199. $this->success();
  200. }
  201. }