Systemconfig.php 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. <?php
  2. namespace app\common\model\base\config;
  3. use app\common\model\Common;
  4. use think\model\concern\SoftDelete;
  5. /**
  6. * 系统配置模型
  7. */
  8. class Systemconfig extends Common
  9. {
  10. use SoftDelete;
  11. protected $name = "system_configs";
  12. protected $pk = "config_id";
  13. protected $createTime = 'create_at';
  14. protected $updateTime = 'update_at';
  15. protected $deleteTime = 'delete_at';
  16. protected $schema = [
  17. 'config_id' => 'int',
  18. 'name' => 'varchar',
  19. 'key' => 'varchar',
  20. 'value' => 'varchar',
  21. 'status' => 'tinyint',
  22. 'group_code' => 'varchar',
  23. 'is_developer' => 'tinyint',
  24. 'type' => 'varchar',
  25. 'content' => 'json',
  26. 'tip' => 'varchar',
  27. 'weigh' => 'int',
  28. 'rule' => 'json',
  29. 'group_name' => 'varchar',
  30. 'extra_rule' => 'json',
  31. 'width' => 'varchar',
  32. 'height' => 'varchar',
  33. 'create_at' => 'datetime',
  34. 'update_at' => 'datetime',
  35. 'delete_at' => 'datetime',
  36. ];
  37. protected $json = ['content','extra_rule'];
  38. protected $jsonAssoc = true;
  39. //追加属性
  40. protected $append = [
  41. 'status_txt',
  42. 'type_txt',
  43. 'content_txt',
  44. 'extra_rule_txt',
  45. ];
  46. /**配置类型列表 */
  47. static public function getTypeList()
  48. {
  49. $typeList = [
  50. 'string' => '单行文本',
  51. 'text' => '多行文本',
  52. 'editor' => '编辑器',
  53. 'number' => '数字',
  54. 'date' => '日期',
  55. 'time' => '时间',
  56. 'datetime' => '日期时间',
  57. 'datetimerange' => '日期时间区间',
  58. 'select' => '列表',
  59. 'selects' => '列表(多选)',
  60. 'image' => '单图',
  61. 'images' => '多图',
  62. 'file' => '单文件',
  63. 'files' => '多文件',
  64. 'switch' => '开关',
  65. 'checkbox' => '复选',
  66. 'radio' => '单选',
  67. 'color' => '颜色',
  68. 'json' => 'JSON数组',
  69. 'slider' => '滑块',
  70. ];
  71. return $typeList;
  72. }
  73. /**配置状态列表 */
  74. static public function getStatusList()
  75. {
  76. return [1=>"可用",2=>"不可用"];
  77. }
  78. public function getStatusTxtAttr($value,$row)
  79. {
  80. $statusList = $this->getStatusList();
  81. return $statusList[$value ?? $row['status']] ?? '';
  82. }
  83. public function getTypeTxtAttr($value,$row)
  84. {
  85. $typeList = self::getTypeList();
  86. $value = $value ?? $row['type'] ?? '';
  87. return $typeList[$value] ?? '';
  88. }
  89. // value修改器
  90. public function setValueAttr($value,$data)
  91. {
  92. if(!empty($value)){
  93. switch($data['type']){
  94. case 'selects':
  95. case 'checkbox':
  96. $value = implode(',',$value);break;
  97. case 'file':
  98. case 'image':
  99. $value = str_replace(WEBURL,'',$value);break;
  100. case 'files':
  101. case 'images':
  102. $value = str_replace(WEBURL,'',implode(',',$value));break;
  103. case 'datetimerange':
  104. $tmp = ['start'=>$value[0],'end'=>$value[1]];
  105. $value = json_encode($tmp);
  106. break;
  107. case 'json':
  108. $value = json_encode($value);break;
  109. case 'slider':
  110. $value = $data['extra_rule']['range']!='false'?json_encode($value):$value;
  111. break;
  112. default:break;
  113. }
  114. return $value;
  115. }
  116. return '';
  117. }
  118. // value获取器
  119. public function getValueAttr($value,$data)
  120. {
  121. if($data['type']){
  122. switch($data['type']){
  123. case 'selects':
  124. case 'checkbox':
  125. $value = array_filter(explode(',',$value));break;
  126. case 'file':
  127. case 'image':
  128. $value = ImageToServer($value,WEBURL,1);break;
  129. case 'files':
  130. case 'images':
  131. $value = ImageToServer($value,WEBURL,2);break;
  132. case 'datetimerange':
  133. $value = json_decode($value,true);
  134. $value = $value?[$value['start'],$value['end']]:[];
  135. break;
  136. case 'json':
  137. if(!empty($value)){
  138. $value = json_decode($value,true);
  139. }else{
  140. $value = [];
  141. if(!empty($data['content'])){
  142. $tmp = [];
  143. foreach($data['content'] as $content){
  144. $tmp[$content['key']] = '';
  145. }
  146. $value[] = $tmp;
  147. }
  148. }
  149. break;
  150. case 'slider':
  151. foreach($data['extra_rule'] as $item){
  152. if($item['key']=='range'){
  153. if($item['value']!='false'){
  154. $value = !empty($value)?json_decode($value):[0,0];
  155. }else{
  156. $value = !empty($value)?intval($value):0;
  157. }
  158. break;
  159. }
  160. }
  161. break;
  162. }
  163. }
  164. return $value;
  165. }
  166. // content获取器
  167. public function getContentTxtAttr($value,$data)
  168. {
  169. if(!empty($data['content'])){
  170. $contentAry = [];
  171. foreach($data['content'] as $content){
  172. $contentAry[] = $content['key'].'|'.$content['value'];
  173. }
  174. return implode("\n",$contentAry);
  175. }
  176. return $value;
  177. }
  178. // content修改器
  179. public function setContentAttr($value,$data)
  180. {
  181. if(!empty($data['content_txt'])){
  182. $contentAry = explode("\n",$data['content_txt']);
  183. $contentAry = array_filter($contentAry);
  184. $newContent = [];
  185. foreach($contentAry as $item){
  186. $itemAry = explode('|',$item);
  187. $key = $itemAry[0];
  188. $value = $itemAry[1];
  189. $newContent[] = ['key'=>$key,'value'=>$value];
  190. }
  191. return json_encode($newContent);
  192. }
  193. return $value;
  194. }
  195. //排序修改器
  196. public function setWeighAttr($value,$data)
  197. {
  198. if(empty($value)){
  199. $maxWeigh = self::where('group_code',$data['group_code'])->max('weigh');
  200. return $maxWeigh + 1;
  201. }else{
  202. return $value;
  203. }
  204. }
  205. // 组件属性获取器
  206. public function getExtraRuleAttr($value,$data)
  207. {
  208. $value = $value??$data['extra_rule']??[];
  209. $res = [];
  210. foreach($value as $item){
  211. $res[$item['key']] = $item['value'];
  212. }
  213. return $res;
  214. }
  215. // 组件属性文本获取器
  216. public function getExtraRuleTxtAttr($value,$data)
  217. {
  218. if(!empty($data['extra_rule'])){
  219. $contentAry = [];
  220. foreach($data['extra_rule'] as $content){
  221. $contentAry[] = $content['key'].'|'.$content['value'];
  222. }
  223. return implode("\n",$contentAry);
  224. }
  225. return $value;
  226. }
  227. // 组件属性修改器
  228. public function setExtraRuleAttr($value,$data)
  229. {
  230. if(!empty($data['extra_rule_txt'])){
  231. $contentAry = explode("\n",$data['extra_rule_txt']);
  232. $contentAry = array_filter($contentAry);
  233. $newContent = [];
  234. foreach($contentAry as $item){
  235. $itemAry = explode('|',$item);
  236. $key = $itemAry[0];
  237. $value = $itemAry[1];
  238. $newContent[] = ['key'=>$key,'value'=>$value];
  239. }
  240. return json_encode($newContent);
  241. }
  242. return $value;
  243. }
  244. // 规则修改器
  245. public function setRuleAttr($value,$data)
  246. {
  247. $value = $value??$data['rule']??'';
  248. return empty($value)||$value=='null'?'':$value;
  249. }
  250. // 分类名称修改器
  251. public function setGroupNameAttr($value,$data)
  252. {
  253. if(!empty($data['group_code'])){
  254. return ConfigClass::where('code',$data['group_code'])->value('name');
  255. }else{
  256. return $value;
  257. }
  258. }
  259. }