// +---------------------------------------------------------------------- namespace App\Services\Common; use App\Models\AgentRegionModel; use App\Services\BaseService; /** * 代理城市管理-服务类 * @author laravel开发员 * @since 2020/11/11 * @package App\Services\Common */ class AgentRegionService extends BaseService { public static $instance = null; /** * 构造函数 * @author laravel开发员 * @since 2020/11/11 */ public function __construct() { $this->model = new AgentRegionModel(); } /** * 获取城市列表 * @return array * @since 2020/11/11 * @author laravel开发员 */ public function getList() { $param = request()->all(); // 查询条件 $map = []; // 上级ID $pid = intval(getter($param, 'pid', 0)); if (!$pid) { $map[] = ['pid', '=', 0]; } else { $map[] = ['pid', '=', $pid]; } // 城市名称 $name = getter($param, "name"); if ($name) { $map[] = ['name', 'like', "%{$name}%"]; } $list = $this->model->getList($map, [['sort', 'asc']]); if (!empty($list)) { foreach ($list as &$val) { $val['label'] = $val['name']; $val['value'] = $val['id']; if ($val['level'] <= 2) { $val['hasChildren'] = true; } } } return message("操作成功", true, $list); } /** * 列表 * @param $params * @param int $pageSize * @return array */ public function getDataList($params, $pageSize = 10) { $where = ['a.mark' => 1]; $list = $this->model->from('agent_region as a') ->where($where) ->where(function ($query) use($params){ $keyword = isset($params['keyword'])? $params['keyword'] : ''; if($keyword){ $query->where('a.name','like',"%{$keyword}%"); } }) ->where(function ($query) use($params){ $status = isset($params['status'])? $params['status'] : 0; if($status>0 && is_array($status)){ $query->whereIn('a.status', $status); }else if($status){ $query->where('a.status', $status); } $pid = isset($params['pid'])? $params['pid'] : 0; if($pid>=0){ $query->where('a.pid', $pid); } }) ->select(['a.*']) ->orderBy('a.sort','asc') ->orderBy('a.id','desc') ->paginate($pageSize > 0 ? $pageSize : 9999999); $list = $list? $list->toArray() :[]; if($list){ foreach($list['data'] as &$item){ $item['create_time'] = $item['create_time']? datetime($item['create_time'],'Y-m-d H.i.s') : ''; $item['expanded'] = true; $item['children'] = $this->model->with(['children'])->where(['pid'=> $item['id'],'mark'=>1])->get(); if($item['children']){ foreach($item['children'] as &$v){ $v['expanded'] = true; } } } // $list['data'] = $this->formatRegions($list['data'],[]); } return [ 'pageSize'=> $pageSize, 'total'=>isset($list['total'])? $list['total'] : 0, 'list'=> isset($list['data'])? $list['data'] : [], ]; } public function edit() { $data = request()->post(); // 验证重名 $id = isset($data['id'])? trim($data['id']) : 0; $pid = isset($data['pid'])? trim($data['pid']) : 0; $name = isset($data['name'])? trim($data['name']) : ''; if($name){ $checkId = $this->model->where(['pid'=> $pid,'name'=>$name,'mark'=>1])->value('id'); if($checkId && ($checkId != $id)){ return message('该区域代理名称已存在',false); } } return parent::edit($data); } /** * 选项 * @return array|false|mixed */ public function options() { $param = request()->all(); // 用户ID $keyword = getter($param, "keyword"); $parentId = getter($param, "pid"); $userId = getter($param, "id"); $datas = $this->model->where(function($query) use($parentId){ if($parentId){ $query->where(['id'=> $parentId,'mark'=>1]); }else{ $query->where(['status'=> 1,'mark'=>1]); } }) ->where(function($query) use($userId){ if($userId){ $query->whereNotIn('id', [$userId]); } }) ->where(function($query) use($keyword){ if($keyword){ $query->where('name','like',"%{$keyword}%"); } }) ->select(['id as value','name as label','pid','status']) ->get(); $datas = $datas? $datas->toArray() : []; if($datas){ $datas = $this->formatRegions($datas,0, []); } return array_values($datas); } /** * 格式化数据 * @param $regions * @param int $pid * @param array $agents * @param array $temps * @return array|false|mixed */ public function formatRegions($regions, $pid=0, $agents=[],$temps=[]) { if(!is_array($regions) || empty($regions)){ return false; } foreach($regions as $item){ $id = isset($item['value'])? $item['value'] : 0; $parentId = isset($item['pid'])? $item['pid'] : 0; if($pid){ if($parentId == $pid){ $children = $this->formatRegions($regions, $id, $agents); if($children){ $item['children'][0] = ['label'=>'全市','value'=>$id]; $item['children'] = array_merge($item['children'], $children); } $temps[] = $item; } }else if(!$parentId){ $children = $this->formatRegions($regions, $id, $agents); if($children){ $item['children'] = $children; } $temps[$id] = $item; } } return $temps; } }