UserField.php 7.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  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. $grantData = getFieldGrantData($user_id);
  134. $userLevel = isSuperAdministrators($user_id);
  135. $fieldArr = (new Field)->getFieldList($types);
  136. $fieldList = [];
  137. $field_list = [];
  138. foreach ($fieldArr as $k=>$v) {
  139. $fieldList[] = $v['field'];
  140. $field_list[$v['field']]['name'] = $v['name'];
  141. $fieldArr[$k]['width'] = '';
  142. }
  143. //已设置字段
  144. $value = $this->where(['types' => $types,'user_id' => $user_id])->value('datas');
  145. $value = $value ? json_decode($value, true) : [];
  146. $valueList = [];
  147. $value_list = []; //显示列
  148. $hideList = [];
  149. $hide_list = []; //隐藏列
  150. if ($value) {
  151. $a = 0;
  152. $b = 0;
  153. foreach ($value as $k=>$v) {
  154. if (empty($field_list[$k]['name'])) continue;
  155. if (empty($v['is_hide'])) {
  156. $valueList[] = $k;
  157. $value_list[$a]['field'] = $k;
  158. $value_list[$a]['width'] = $v['width'];
  159. $value_list[$a]['name'] = $field_list[$k]['name'];
  160. $a++;
  161. } else {
  162. $hideList[] = $k;
  163. $hide_list[$b]['field'] = $k;
  164. $hide_list[$b]['width'] = $v['width'];
  165. $hide_list[$b]['name'] = $field_list[$k]['name'];
  166. $b++;
  167. }
  168. }
  169. $diffList = $valueList ? array_diff($fieldList, $valueList) : $fieldList;
  170. //隐藏的列(新增的字段数据)
  171. $hideList = $hideList ? array_diff($diffList,$hideList) : $diffList;
  172. foreach ($hideList as $k=>$v) {
  173. $hide_list[$b]['field'] = $v;
  174. $hide_list[$b]['width'] = '';
  175. $hide_list[$b]['name'] = $field_list[$v]['name'];
  176. $b++;
  177. }
  178. } else {
  179. $value_list = array_values($fieldArr);
  180. $hide_list = [];
  181. }
  182. # 处理显示列的字段授权
  183. foreach ($value_list AS $key => $value) {
  184. if (!$userLevel && !empty($grantData[$types])) {
  185. foreach ($grantData[$types] AS $k => $v) {
  186. $status = getFieldGrantStatus($value['field'], $grantData[$types]);
  187. if (empty($status['read'])) unset($value_list[(int)$key]);
  188. }
  189. }
  190. }
  191. # 处理隐藏列的字段授权
  192. foreach ($hide_list AS $key => $value) {
  193. if (!$userLevel && !empty($grantData[$types])) {
  194. foreach ($grantData[$types] AS $k => $v) {
  195. $status = getFieldGrantStatus($value['field'], $grantData[$types]);
  196. if (empty($status['read'])) unset($hide_list[(int)$key]);
  197. }
  198. }
  199. }
  200. $data = [];
  201. $data['value_list'] = array_values($value_list) ? : []; //展示列
  202. $data['hide_list'] = array_values($hide_list) ? : []; //隐藏列
  203. if ($types == 'crm_visit') {
  204. foreach ($data['value_list'] AS $key => $value) {
  205. if ($value['name'] == '负责人') $data['value_list'][$key]['name'] = '回访人';
  206. }
  207. foreach ($data['hide_list'] AS $key => $value) {
  208. if ($value['name'] == '负责人') $data['hide_list'][$key]['name'] = '回访人';
  209. }
  210. }
  211. return $data ? : [];
  212. }
  213. }