123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | Description: 字段列表配置
  4. // +----------------------------------------------------------------------
  5. // | Author: Michael_xu | gengxiaoxu@5kcrm.com
  6. // +----------------------------------------------------------------------
  7. namespace app\admin\model;
  8. use think\Config;
  9. use think\Db;
  10. use think\Model;
  11. class UserField extends Model
  12. {
  13. protected $name = 'admin_user_field';
  14. protected $createTime = 'create_time';
  15. protected $updateTime = 'update_time';
  16. protected $autoWriteTimestamp = true;
  17. protected $type = [
  18. 'datas' => 'array',
  19. ];
  20. /**
  21. * 设置配置信息
  22. * @author Michael_xu
  23. * @param types 分类
  24. * @param param 参数
  25. * @param id 主键ID
  26. * @return
  27. */
  28. public function updateConfig($types, $param, $id = '')
  29. {
  30. if (!is_array($param['value']) || ($param['hide_value'] && !is_array($param['hide_value']))) {
  31. $this->error = '参数错误';
  32. return false;
  33. }
  34. $data = [];
  35. if ($id) {
  36. $resInfo = $this->where(['id' => $id])->find();
  37. } else {
  38. $resInfo = $this->where(['types' => $types,'user_id' => $param['user_id']])->find();
  39. }
  40. if (!$resInfo) {
  41. $data['types'] = $types;
  42. $data['user_id'] = $param['user_id'];
  43. }
  44. //处理value
  45. $valueData = [];
  46. //展示列
  47. if ($param['value']) {
  48. foreach ($param['value'] as $k=>$v) {
  49. $valueData[$v['field']]['width'] = $v['width'];
  50. $valueData[$v['field']]['is_hide'] = 0;
  51. }
  52. }
  53. //隐藏列
  54. if ($param['hide_value']) {
  55. foreach ($param['hide_value'] as $k=>$v) {
  56. $valueData[$v['field']]['width'] = $v['width'];
  57. $valueData[$v['field']]['is_hide'] = 1;
  58. }
  59. }
  60. $data['datas'] = $valueData;
  61. if ($resInfo) {
  62. $data['id'] = $resInfo['id'];
  63. $res = $this->update($data);
  64. } else {
  65. $res = $this->save($data);
  66. }
  67. if ($res == false) {
  68. $this->error = '设置出错';
  69. return false;
  70. }
  71. return true;
  72. }
  73. /**
  74. * 配置信息详情
  75. * @author Michael_xu
  76. * @param types 分类
  77. * @return
  78. */
  79. public function getConfig($types, $user_id)
  80. {
  81. $data = $this->where(['types' => $types,'user_id' => $user_id])->value('datas');
  82. return $data ? : [];
  83. }
  84. /**
  85. * 配置列宽度
  86. * @author Michael_xu
  87. * @param types 分类
  88. * @param field 字段
  89. * @param width 宽度
  90. * @return
  91. */
  92. public function setColumnWidth($types, $field, $width, $user_id)
  93. {
  94. $info = db('admin_user_field')->where(['types' => $types,'user_id' => $user_id])->find();
  95. if ($info) {
  96. $datas = json_decode($info['datas'], true);
  97. $datas[$field]['width'] = $width;
  98. $datas = json_encode($datas);
  99. $res = $this->where(['id' => $info['id']])->update(['datas' => $datas]);
  100. } else {
  101. $newTypes = $types;
  102. if ($types == 'crm_customer_pool') $newTypes = 'crm_customer';
  103. $fieldArr = db('admin_field')->where(['types' => ['in',['',$newTypes]]])->field('field,name')->order('types desc,order_id asc')->select();
  104. $value = [];
  105. foreach ($fieldArr as $k=>$v) {
  106. $field_width = '';
  107. if ($field == $v['field']) {
  108. $field_width = $width;
  109. }
  110. $value[$v['field']]['width'] = $field_width;
  111. $value[$v['field']]['is_hide'] = 0;
  112. $value[$v['field']]['field'] = $v['field'];
  113. }
  114. $param['value'] = $value;
  115. $param['hide_value'] = [];
  116. $param['user_id'] = $user_id;
  117. $res = $this->updateConfig($types, $param);
  118. }
  119. if (!$res) {
  120. $this->error = '设置出错,请重试!';
  121. return false;
  122. }
  123. return true;
  124. }
  125. /**
  126. * 列表数据
  127. * @author Michael_xu
  128. * @param types 分类
  129. * @return
  130. */
  131. public function getDataList($types, $user_id)
  132. {
  133. $fieldArr = (new Field)->getFieldList($types);
  134. $fieldList = [];
  135. $field_list = [];
  136. foreach ($fieldArr as $k=>$v) {
  137. $fieldList[] = $v['field'];
  138. $field_list[$v['field']]['name'] = $v['name'];
  139. $fieldArr[$k]['width'] = '';
  140. }
  141. //已设置字段
  142. $value = $this->where(['types' => $types,'user_id' => $user_id])->value('datas');
  143. $value = $value ? json_decode($value, true) : [];
  144. $valueList = [];
  145. $value_list = []; //显示列
  146. $hideList = [];
  147. $hide_list = []; //隐藏列
  148. if ($value) {
  149. $a = 0;
  150. $b = 0;
  151. foreach ($value as $k=>$v) {
  152. if (empty($v['is_hide'])) {
  153. $valueList[] = $k;
  154. $value_list[$a]['field'] = $k;
  155. $value_list[$a]['width'] = $v['width'];
  156. $value_list[$a]['name'] = $field_list[$k]['name'];
  157. $a++;
  158. } else {
  159. $hideList[] = $k;
  160. $hide_list[$b]['field'] = $k;
  161. $hide_list[$b]['width'] = $v['width'];
  162. $hide_list[$b]['name'] = $field_list[$k]['name'];
  163. $b++;
  164. }
  165. }
  166. $diffList = $valueList ? array_diff($fieldList, $valueList) : $fieldList;
  167. //隐藏的列(新增的字段数据)
  168. $hideList = $hideList ? array_diff($diffList,$hideList) : $diffList;
  169. foreach ($hideList as $k=>$v) {
  170. $hide_list[$b]['field'] = $v;
  171. $hide_list[$b]['width'] = '';
  172. $hide_list[$b]['name'] = $field_list[$v]['name'];
  173. $b++;
  174. }
  175. } else {
  176. $value_list = array_values($fieldArr);
  177. $hide_list = [];
  178. }
  179. $data = [];
  180. $data['value_list'] = $value_list ? : []; //展示列
  181. $data['hide_list'] = $hide_list ? : []; //隐藏列
  182. return $data ? : [];
  183. }
  184. }