|
|
|
<?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)
|
|
|
|
{
|
|
|
|
$grantData = getFieldGrantData($user_id);
|
|
|
|
$userLevel = isSuperAdministrators($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($field_list[$k]['name'])) continue;
|
|
|
|
|
|
|
|
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 = [];
|
|
|
|
}
|
|
|
|
|
|
|
|
# 处理显示列的字段授权
|
|
|
|
foreach ($value_list AS $key => $value) {
|
|
|
|
if (!$userLevel && !empty($grantData[$types])) {
|
|
|
|
foreach ($grantData[$types] AS $k => $v) {
|
|
|
|
$status = getFieldGrantStatus($value['field'], $grantData[$types]);
|
|
|
|
|
|
|
|
if (empty($status['read'])) unset($value_list[(int)$key]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
# 处理隐藏列的字段授权
|
|
|
|
foreach ($hide_list AS $key => $value) {
|
|
|
|
if (!$userLevel && !empty($grantData[$types])) {
|
|
|
|
foreach ($grantData[$types] AS $k => $v) {
|
|
|
|
$status = getFieldGrantStatus($value['field'], $grantData[$types]);
|
|
|
|
|
|
|
|
if (empty($status['read'])) unset($hide_list[(int)$key]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$data = [];
|
|
|
|
$data['value_list'] = array_values($value_list) ? : []; //展示列
|
|
|
|
$data['hide_list'] = array_values($hide_list) ? : []; //隐藏列
|
|
|
|
|
|
|
|
if ($types == 'crm_visit') {
|
|
|
|
foreach ($data['value_list'] AS $key => $value) {
|
|
|
|
if ($value['name'] == '负责人') $data['value_list'][$key]['name'] = '回访人';
|
|
|
|
}
|
|
|
|
foreach ($data['hide_list'] AS $key => $value) {
|
|
|
|
if ($value['name'] == '负责人') $data['hide_list'][$key]['name'] = '回访人';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $data ? : [];
|
|
|
|
}
|
|
|
|
}
|