SystemConfig.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. <?php
  2. /**
  3. *
  4. * @author: xaboy<365615158@qq.com>
  5. * @day: 2017/11/02
  6. */
  7. namespace app\admin\model\system;
  8. use basic\ModelBasic;
  9. use service\FormBuilder as Form;
  10. use traits\ModelTrait;
  11. use \app\admin\model\system\SystemConfigTab;
  12. class SystemConfig extends ModelBasic {
  13. use ModelTrait;
  14. /**
  15. * 修改单个配置
  16. * */
  17. public static function setValue($menu,$value){
  18. if(empty($menu) || !($config_one = self::get(['menu_name'=>$menu]))) return self::setErrorInfo('字段名称错误');
  19. if($config_one['type'] == 'radio' || $config_one['type'] == 'checkbox'){
  20. $parameter = array();
  21. $option = array();
  22. $parameter = explode(',',$config_one['parameter']);
  23. foreach ($parameter as $k=>$v){
  24. if(isset($v) && !empty($v)){
  25. $option[$k] = explode('-',$v);
  26. }
  27. }
  28. $value_arr = array();//选项的值
  29. foreach ($option as $k=>$v){
  30. foreach ($v as $kk=>$vv)
  31. if(!$kk){
  32. $value_arr[$k] = $vv;
  33. }
  34. }
  35. $i = 0;//
  36. if(is_array($value)){
  37. foreach ($value as $value_v){
  38. if(in_array($value_v,$value_arr)){
  39. $i++;
  40. }
  41. }
  42. if(count($value) != $i) return self::setErrorInfo('输入的值不属于选项中的参数');
  43. }else{
  44. if(in_array($value,$value_arr)){
  45. $i++;
  46. }
  47. if(!$i) return self::setErrorInfo('输入的值不属于选项中的参数');
  48. }
  49. if($config_one['type'] == 'radio' && is_array($value)) return self::setErrorInfo('单选按钮的值是字符串不是数组');
  50. }
  51. $bool = self::edit(['value' => json_encode($value)],$menu,'menu_name');
  52. return $bool;
  53. }
  54. /**
  55. * 获取单个参数配置
  56. * */
  57. public static function getValue($menu){
  58. if(empty($menu) || !($config_one = self::get(['menu_name'=>$menu]))) return false;
  59. return json_decode($config_one['value'],true);
  60. }
  61. /**
  62. * 获得多个参数
  63. * @param $menus
  64. * @return array
  65. */
  66. public static function getMore($menus)
  67. {
  68. $menus = is_array($menus) ? implode(',',$menus) : $menus;
  69. $list = self::where('menu_name','IN',$menus)->column('value','menu_name')?:[];
  70. foreach ($list as $menu => $value){
  71. $list[$menu] = json_decode($value,true);
  72. }
  73. return $list;
  74. }
  75. public static function getAllConfig()
  76. {
  77. $list = self::column('value','menu_name')?:[];
  78. foreach ($list as $menu => $value){
  79. $list[$menu] = json_decode($value,true);
  80. }
  81. return $list;
  82. }
  83. /**
  84. * text 判断
  85. * */
  86. public static function valiDateTextRole($data){
  87. if (!$data['width']) return self::setErrorInfo('请输入文本框的宽度');
  88. if ($data['width'] <= 0) return self::setErrorInfo('请输入正确的文本框的宽度');
  89. return true;
  90. }
  91. /**
  92. * radio 和 checkbox规则的判断
  93. * */
  94. public static function valiDateRadioAndCheckbox($data){
  95. $parameter = array();
  96. $option = array();
  97. $option_new = array();
  98. $data['parameter'] = str_replace("\r\n","\n",$data['parameter']);//防止不兼容
  99. $parameter = explode("\n",$data['parameter']);
  100. if(count($parameter) < 2)return self::setErrorInfo('请输入正确格式的配置参数');
  101. foreach ($parameter as $k=>$v){
  102. if(isset($v) && !empty($v)){
  103. $option[$k] = explode('=>',$v);
  104. }
  105. }
  106. if(count($option) < 2)return self::setErrorInfo('请输入正确格式的配置参数');
  107. $bool = 1;
  108. foreach ($option as $k=>$v){
  109. $option_new[$k] = $option[$k][0];
  110. foreach ($v as $kk=>$vv){
  111. $vv_num = strlen($vv);
  112. if(!$vv_num){
  113. $bool = 0;
  114. }
  115. }
  116. }
  117. // dump($option);
  118. if(!$bool)return self::setErrorInfo('请输入正确格式的配置参数');
  119. $num1 = count($option_new);//提取该数组的数目
  120. $arr2 = array_unique($option_new);//合并相同的元素
  121. $num2 = count($arr2);//提取合并后数组个数
  122. if($num1>$num2)return self::setErrorInfo('请输入正确格式的配置参数');
  123. return true;
  124. }
  125. /**
  126. * textarea 判断
  127. * */
  128. public static function valiDateTextareaRole($data){
  129. if (!$data['width']) return self::setErrorInfo('请输入多行文本框的宽度');
  130. if (!$data['high']) return self::setErrorInfo('请输入多行文本框的高度');
  131. if ($data['width'] < 0) return self::setErrorInfo('请输入正确的多行文本框的宽度');
  132. if ($data['high'] < 0) return self::setErrorInfo('请输入正确的多行文本框的宽度');
  133. return true;
  134. }
  135. /**
  136. * 获取一数据
  137. * */
  138. public static function getOneConfig($filed,$value){
  139. $where[$filed] = $value;
  140. return self::where($where)->find();
  141. }
  142. /**
  143. * 获取配置分类
  144. * */
  145. public static function getAll($id){
  146. $where['config_tab_id'] = $id;
  147. $where['status'] = 1;
  148. return self::where($where)->order('sort desc,id asc')->select();
  149. }
  150. /**
  151. * 获取所有配置分类
  152. * */
  153. public static function getConfigTabAll($type=0){
  154. $configAll = SystemConfigTab::getAll($type);
  155. $config_tab = array();
  156. foreach ($configAll as $k=>$v){
  157. if(!$v['info']){
  158. $config_tab[$k]['value'] = $v['id'];
  159. $config_tab[$k]['label'] = $v['title'];
  160. $config_tab[$k]['icon'] = $v['icon'];
  161. $config_tab[$k]['type'] = $v['type'];
  162. }
  163. }
  164. return $config_tab;
  165. }
  166. /**
  167. * 选择类型
  168. * */
  169. public static function radiotype($type='text'){
  170. return [
  171. ['value'=>'text','label'=>'文本框','disabled'=>1]
  172. ,['value'=>'textarea','label'=>'多行文本框','disabled'=>1]
  173. ,['value'=>'radio','label'=>'单选按钮','disabled'=>1]
  174. ,['value'=>'upload','label'=>'文件上传','disabled'=>1]
  175. ,['value'=>'checkbox','label'=>'多选按钮','disabled'=>1]
  176. ];
  177. }
  178. /**
  179. * 文本框
  180. * */
  181. public static function createInputRule($tab_id){
  182. $formbuider = array();
  183. $formbuider[] = Form::radio('type','类型','text')->options(self::radiotype());
  184. $formbuider[] = Form::select('config_tab_id','分类',$tab_id)->setOptions(SystemConfig::getConfigTabAll(-1));
  185. $formbuider[] = Form::input('info','配置名称')->autofocus(1);
  186. $formbuider[] = Form::input('menu_name','字段变量')->placeholder('例如:site_url');
  187. $formbuider[] = Form::input('desc','配置简介');
  188. $formbuider[] = Form::input('value','默认值');
  189. $formbuider[] = Form::number('width','文本框宽(%)',100);
  190. $formbuider[] = Form::input('required','验证规则')->placeholder('多个请用,隔开例如:required:true,url:true');
  191. $formbuider[] = Form::number('sort','排序');
  192. $formbuider[] = Form::radio('status','状态',1)->options([['value'=>1,'label'=>'显示'],['value'=>2,'label'=>'隐藏']]);
  193. return $formbuider;
  194. }
  195. /**
  196. * 多行文本框
  197. * */
  198. public static function createTextAreaRule($tab_id){
  199. $formbuider = array();
  200. $formbuider[] = Form::radio('type','类型','textarea')->options(self::radiotype());
  201. $formbuider[] = Form::select('config_tab_id','分类',$tab_id)->setOptions(SystemConfig::getConfigTabAll(-1));
  202. $formbuider[] = Form::input('info','配置名称')->autofocus(1);
  203. $formbuider[] = Form::input('menu_name','字段变量')->placeholder('例如:site_url');
  204. $formbuider[] = Form::input('desc','配置简介');
  205. $formbuider[] = Form::textarea('value','默认值');
  206. $formbuider[] = Form::number('width','文本框宽(%)',100);
  207. $formbuider[] = Form::number('high','多行文本框高(%)',5);
  208. $formbuider[] = Form::number('sort','排序');
  209. $formbuider[] = Form::radio('status','状态',1)->options([['value'=>1,'label'=>'显示'],['value'=>2,'label'=>'隐藏']]);
  210. return $formbuider;
  211. }
  212. /**
  213. * 单选按钮
  214. * */
  215. public static function createRadioRule($tab_id){
  216. $formbuider = array();
  217. $formbuider[] = Form::radio('type','类型','radio')->options(self::radiotype());
  218. $formbuider[] = Form::select('config_tab_id','分类',$tab_id)->setOptions(SystemConfig::getConfigTabAll(-1));
  219. $formbuider[] = Form::input('info','配置名称')->autofocus(1);
  220. $formbuider[] = Form::input('menu_name','字段变量')->placeholder('例如:site_url');
  221. $formbuider[] = Form::input('desc','配置简介');
  222. $formbuider[] = Form::textarea('parameter','配置参数')->placeholder("参数方式例如:\n1=>男\n2=>女\n3=>保密");
  223. $formbuider[] = Form::input('value','默认值');
  224. $formbuider[] = Form::number('sort','排序');
  225. $formbuider[] = Form::radio('status','状态',1)->options([['value'=>1,'label'=>'显示'],['value'=>2,'label'=>'隐藏']]);
  226. return $formbuider;
  227. }
  228. /**
  229. * 文件上传
  230. * */
  231. public static function createUploadRule($tab_id){
  232. $formbuider = array();
  233. $formbuider[] = Form::radio('type','类型','upload')->options(self::radiotype());
  234. $formbuider[] = Form::select('config_tab_id','分类',$tab_id)->setOptions(SystemConfig::getConfigTabAll(-1));
  235. $formbuider[] = Form::input('info','配置名称')->autofocus(1);
  236. $formbuider[] = Form::input('menu_name','字段变量')->placeholder('例如:site_url');
  237. $formbuider[] = Form::input('desc','配置简介');
  238. $formbuider[] = Form::radio('upload_type','上传类型',1)->options([['value'=>1,'label'=>'单图'],['value'=>2,'label'=>'多图'],['value'=>3,'label'=>'文件']]);
  239. $formbuider[] = Form::number('sort','排序');
  240. $formbuider[] = Form::radio('status','状态',1)->options([['value'=>1,'label'=>'显示'],['value'=>2,'label'=>'隐藏']]);
  241. return $formbuider;
  242. }
  243. /**
  244. * 多选框
  245. * */
  246. public static function createCheckboxRule($tab_id){
  247. $formbuider = array();
  248. $formbuider[] = Form::radio('type','类型','checkbox')->options(self::radiotype());
  249. $formbuider[] = Form::select('config_tab_id','分类',$tab_id)->setOptions(SystemConfig::getConfigTabAll(-1));
  250. $formbuider[] = Form::input('info','配置名称')->autofocus(1);
  251. $formbuider[] = Form::input('menu_name','字段变量')->placeholder('例如:site_url');
  252. $formbuider[] = Form::input('desc','配置简介');
  253. $formbuider[] = Form::textarea('parameter','配置参数')->placeholder("参数方式例如:\n1=>白色\n2=>红色\n3=>黑色");
  254. // $formbuider[] = Form::input('value','默认值');
  255. $formbuider[] = Form::number('sort','排序');
  256. $formbuider[] = Form::radio('status','状态',1)->options([['value'=>1,'label'=>'显示'],['value'=>2,'label'=>'隐藏']]);
  257. return $formbuider;
  258. }
  259. /**
  260. * 插入数据到数据库
  261. * */
  262. public static function set($data)
  263. {
  264. return self::create($data);
  265. }
  266. }