FormField.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <?php
  2. namespace addons\qingdong\model;
  3. use think\Model;
  4. use traits\model\SoftDelete;
  5. /**
  6. * 表单字段
  7. */
  8. class FormField extends Model {
  9. use SoftDelete;
  10. const LEADS_TYPE = 'leads';
  11. const CUSTOMER_TYPE = 'customer';
  12. const CONTACTS_TYPE = 'contacts';
  13. const CONTRACT_TYPE = 'contract';
  14. const RECEIVABLES_TYPE = 'examine';
  15. const BUSINESS_TYPE = 'business';
  16. // 表名,不含前缀
  17. protected $name = 'qingdong_form_field';
  18. // 自动写入时间戳字段
  19. protected $autoWriteTimestamp = 'int';
  20. // 定义时间戳字段名
  21. protected $createTime = 'createtime';
  22. protected $updateTime = 'updatetime';
  23. protected $deleteTime = 'deletetime';
  24. public function getUpdatetimeAttr($value){
  25. return date('Y-m-d H:i',$value);
  26. }
  27. /**
  28. * 获取表单字段
  29. */
  30. public static function getFields($type){
  31. $fields=self::where(['types'=>$type,'field'=>['like',"main_%"],'list_show'=>1,'info_type'=>'main'])->select();
  32. $js=[];
  33. foreach ($fields as $v){
  34. $d=[
  35. 'field' => $v['field'],
  36. 'title' => $v['name'],
  37. 'operate' => 'like',
  38. 'autocomplete' => false,
  39. ];
  40. if($v['form_type'] == 'Cascader'){
  41. $d['extend']='data-toggle="city-picker"';
  42. }else if($v['form_type'] == 'uploadImage'){//图片
  43. continue;
  44. }else if($v['form_type'] == 'uploadFile'){//文件
  45. continue;
  46. }else if($v['form_type'] == 'DatePicker' ){//日期
  47. $d['operate']='RANGE';
  48. $d['addclass']='datetimerange';
  49. $d['formatter']='Table.api.formatter.datetime';
  50. $d['extend']='data-locale="{format:\"YYYY-MM-DD\"}"';
  51. }else if($v['form_type'] == 'TimePicker' ){//时间
  52. $d['operate']='RANGE';
  53. $d['addclass']='datetimerange';
  54. $d['formatter']='Table.api.formatter.datetime';
  55. }else if($v['form_type'] == 'textarea'){//文本
  56. $d['operate']=false;
  57. }else if(in_array($v['form_type'],['select','checkbox','radio'])){//文件
  58. $d['searchList']=json_encode(explode('|',$v['setting']),JSON_UNESCAPED_UNICODE);
  59. }else if(in_array($v['form_type'],['Rate'])){//文件
  60. $d['searchList']=json_encode([1=>1,2=>2,3=>3,4=>4,5=>5],JSON_UNESCAPED_UNICODE);
  61. }
  62. $js[] = $d;
  63. }
  64. return json_encode($js,JSON_UNESCAPED_UNICODE);
  65. }
  66. /**
  67. * 验证表单字段
  68. */
  69. public static function checkFields($types,$params,$id=null)
  70. {
  71. switch ($types){
  72. case 'leads'://线索
  73. $model=new Leads();
  74. break;
  75. case 'customer'://客户
  76. $model=new Customer();
  77. break;
  78. case 'contract'://合同
  79. $model=new Contract();
  80. break;
  81. case 'contacts'://联系人
  82. $model=new Contacts();
  83. break;
  84. case 'receivabels'://回款
  85. $model=new Receivables();
  86. break;
  87. }
  88. $fields=self::where(['types'=>$types,'info_type'=>'main'])->select();
  89. foreach ($fields as $v){
  90. //必填
  91. if($v['is_null'] == 1){
  92. if (!isset($params[$v['field']]) || empty($params[$v['field']])) {
  93. return $v['name'] . '不能为空!';
  94. }
  95. }
  96. //唯一
  97. if($v['is_unique'] == 1){
  98. if (!isset($params[$v['field']]) || empty($params[$v['field']])) {
  99. continue;
  100. }
  101. $where=[];
  102. if(!empty($id)){
  103. $where['id']=['neq',$id];
  104. }
  105. if(is_array($params[$v['field']])){
  106. $params[$v['field']]=implode(',',$params[$v['field']]);
  107. }
  108. $where[$v['field']]=$params[$v['field']];
  109. if($model->where($where)->count() > 0){
  110. return $v['name'] ."【{$params[$v['field']]}】". '已存在!';
  111. }
  112. }
  113. }
  114. return true;
  115. }
  116. /**
  117. * 获取搜索条件
  118. */
  119. public static function updateWhereField($types,$params){
  120. $fields=self::where(['types'=>$types,'info_type'=>'main'])->select();
  121. $where=[];
  122. foreach ($fields as $v){
  123. if(!isset($params[$v['field']]) || $params[$v['field']] === ''){
  124. continue;
  125. }
  126. if($v['form_type'] == 'uploadImage'){//图片
  127. continue;
  128. }else if($v['form_type'] == 'uploadFile'){//文件
  129. continue;
  130. }else if($v['form_type'] == 'DatePicker' ){//日期
  131. $times=explode(',',$params[$v['field']]);
  132. $where[$v['field']]=['between',$times ];
  133. }else if($v['form_type'] == 'TimePicker' ){//时间
  134. $times=explode(',',$params[$v['field']]);
  135. $where[$v['field']]=['between',$times ];
  136. }else if($v['form_type'] == 'textarea'){//文本
  137. continue;
  138. }else if(in_array($v['form_type'],['select','checkbox','radio'])){//
  139. $where[$v['field']]=$params[$v['field']];
  140. }else if(in_array($v['form_type'],['Rate'])){//星级
  141. $where[$v['field']]=$params[$v['field']];
  142. }else{
  143. $where[$v['field']]=['like',"%{$params[$v['field']]}%" ];
  144. }
  145. }
  146. return $where;
  147. }
  148. }