| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- <?php
- // +----------------------------------------------------------------------
- // | Description: 字段列表配置
- // +----------------------------------------------------------------------
- // | Author: Michael_xu | gengxiaoxu@5kcrm.com
- // +----------------------------------------------------------------------
- namespace app\admin\model;
-
- use think\Config;
- use think\Db;
- use think\Model;
-
- class UserField extends Model
- {
- protected $name = 'admin_user_field';
- protected $createTime = 'create_time';
- protected $updateTime = 'update_time';
- protected $autoWriteTimestamp = true;
-
- protected $type = [
- 'datas' => 'array',
- ];
-
- /**
- * 设置配置信息
- * @author Michael_xu
- * @param types 分类
- * @param param 参数
- * @param id 主键ID
- * @return
- */
- public function updateConfig($types, $param, $id = '')
- {
- if (!is_array($param['value']) || ($param['hide_value'] && !is_array($param['hide_value']))) {
- $this->error = '参数错误';
- return false;
- }
- $data = [];
- if ($id) {
- $resInfo = $this->where(['id' => $id])->find();
- } else {
- $resInfo = $this->where(['types' => $types,'user_id' => $param['user_id']])->find();
- }
- if (!$resInfo) {
- $data['types'] = $types;
- $data['user_id'] = $param['user_id'];
- }
- //处理value
- $valueData = [];
- //展示列
- if ($param['value']) {
- foreach ($param['value'] as $k=>$v) {
- $valueData[$v['field']]['width'] = $v['width'];
- $valueData[$v['field']]['is_hide'] = 0;
- }
- }
-
- //隐藏列
- if ($param['hide_value']) {
- foreach ($param['hide_value'] as $k=>$v) {
- $valueData[$v['field']]['width'] = $v['width'];
- $valueData[$v['field']]['is_hide'] = 1;
- }
- }
-
- $data['datas'] = $valueData;
- if ($resInfo) {
- $data['id'] = $resInfo['id'];
- $res = $this->update($data);
- } else {
- $res = $this->save($data);
- }
- if ($res == false) {
- $this->error = '设置出错';
- return false;
- }
- return true;
- }
-
- /**
- * 配置信息详情
- * @author Michael_xu
- * @param types 分类
- * @return
- */
- public function getConfig($types, $user_id)
- {
- $data = $this->where(['types' => $types,'user_id' => $user_id])->value('datas');
- return $data ? : [];
- }
-
- /**
- * 配置列宽度
- * @author Michael_xu
- * @param types 分类
- * @param field 字段
- * @param width 宽度
- * @return
- */
- public function setColumnWidth($types, $field, $width, $user_id)
- {
- $info = db('admin_user_field')->where(['types' => $types,'user_id' => $user_id])->find();
- if ($info) {
- $datas = json_decode($info['datas'], true);
- $datas[$field]['width'] = $width;
- $datas = json_encode($datas);
- $res = $this->where(['id' => $info['id']])->update(['datas' => $datas]);
- } else {
- $newTypes = $types;
- if ($types == 'crm_customer_pool') $newTypes = 'crm_customer';
- $fieldArr = db('admin_field')->where(['types' => ['in',['',$newTypes]]])->field('field,name')->order('types desc,order_id asc')->select();
- $value = [];
- foreach ($fieldArr as $k=>$v) {
- $field_width = '';
- if ($field == $v['field']) {
- $field_width = $width;
- }
- $value[$v['field']]['width'] = $field_width;
- $value[$v['field']]['is_hide'] = 0;
- $value[$v['field']]['field'] = $v['field'];
- }
- $param['value'] = $value;
- $param['hide_value'] = [];
- $param['user_id'] = $user_id;
- $res = $this->updateConfig($types, $param);
- }
- if (!$res) {
- $this->error = '设置出错,请重试!';
- return false;
- }
- return true;
- }
-
- /**
- * 列表数据
- * @author Michael_xu
- * @param types 分类
- * @return
- */
- public function getDataList($types, $user_id)
- {
- $fieldArr = (new Field)->getFieldList($types);
- $fieldList = [];
- $field_list = [];
- foreach ($fieldArr as $k=>$v) {
- $fieldList[] = $v['field'];
- $field_list[$v['field']]['name'] = $v['name'];
- $fieldArr[$k]['width'] = '';
- }
-
- //已设置字段
- $value = $this->where(['types' => $types,'user_id' => $user_id])->value('datas');
- $value = $value ? json_decode($value, true) : [];
-
- $valueList = [];
- $value_list = []; //显示列
-
- $hideList = [];
- $hide_list = []; //隐藏列
-
- if ($value) {
- $a = 0;
- $b = 0;
- foreach ($value as $k=>$v) {
- if (empty($v['is_hide'])) {
- $valueList[] = $k;
- $value_list[$a]['field'] = $k;
- $value_list[$a]['width'] = $v['width'];
- $value_list[$a]['name'] = $field_list[$k]['name'];
- $a++;
- } else {
- $hideList[] = $k;
- $hide_list[$b]['field'] = $k;
- $hide_list[$b]['width'] = $v['width'];
- $hide_list[$b]['name'] = $field_list[$k]['name'];
- $b++;
- }
- }
- $diffList = $valueList ? array_diff($fieldList, $valueList) : $fieldList;
- //隐藏的列(新增的字段数据)
- $hideList = $hideList ? array_diff($diffList,$hideList) : $diffList;
- foreach ($hideList as $k=>$v) {
- $hide_list[$b]['field'] = $v;
- $hide_list[$b]['width'] = '';
- $hide_list[$b]['name'] = $field_list[$v]['name'];
- $b++;
- }
- } else {
- $value_list = array_values($fieldArr);
- $hide_list = [];
- }
-
- $data = [];
- $data['value_list'] = $value_list ? : []; //展示列
- $data['hide_list'] = $hide_list ? : []; //隐藏列
- return $data ? : [];
- }
- }
|