// +---------------------------------------------------------------------- namespace App\Services\System; use App\Models\System\Dict; use App\Models\System\DictGroup; use App\Support\Tree; class DictService { /** * @title 获取列表数据 * * @param [type] $request * @return void */ public function getDataList($request) { $map = []; if ($request->filled('title')) { $map[] = ['title', 'like', '%' . $request->input('title') . '%']; } if ($request->filled('name')) { $map[] = ['group_name', '=', $request->input('name')]; } if ($request->filled('group_id')) { $map[] = ['group_id', '=', $request->input('group_id')]; } $query = Dict::where($map)->orderBy('sort', 'asc')->orderBy('id', 'desc'); if($request->filled('page')){ $data = [ 'total' => $query->count(), 'page' => $request->input('page', 1), 'data' => $query->offset($request->input('offset', 0))->limit($request->input('limit', 10))->get(), ]; }else{ $data = $query->get(); } return $data; } /** * @title 字段分类数据 * * @param [type] $request * @return void */ public function getCategoryList($request){ $map = []; if ($request->filled('title')) { $map[] = ['title', 'like', '%' . $request->input('title') . '%']; } if ($request->filled('name')) { $map[] = ['name', 'like', '%' . $request->input('name') . '%']; } $query = DictGroup::where($map)->orderBy('id', 'desc'); if($request->filled('is_tree') && $request->filled('is_tree') == 1){ $query = $query->get()->toArray(); $tree = new Tree(); $data = $tree->list_to_tree($query, 0, 'id', 'parent_id'); }else{ $data = [ 'total' => $query->count(), 'page' => $request->input('page', 1), 'data' => $query->limit($request->input('limit', 10))->offset($request->input('page', 1) - 1)->get(), ]; } return $data; } /** * @title 创建字典 * * @param [type] $request * @return void */ public function create($request){ $request->validate([ 'title' => 'required', 'values' => 'required', ]); $data = $request->all(); $data['group_name'] = DictGroup::where('id', '=', $data['group_id'])->value('name'); $dict = Dict::create($data); if($dict->values == ''){ $dict->values = $dict->id; $dict->save(); } $this->setDictCache(true); return $dict; } /** * @title 更新字典 * * @param [type] $request * @return void */ public function update($request){ try { $dict = Dict::findOrFail($request->input('id')); } catch (\Throwable $th) { throw new \Exception("改字典不存在", 1); } if ($request->filled('title')) { $dict->title = $request->input('title'); } if ($request->filled('values')) { $dict->values = $request->input('values'); } if ($request->filled('sort')) { $dict->sort = $request->input('sort'); } if ($request->filled('status')) { $dict->status = $request->input('status'); } if ($request->filled('group_id')) { $dict->group_id = $request->input('group_id'); $dict->group_name = DictGroup::where('id', '=', $request->input('group_id'))->value('name'); } $dict->save(); $this->setDictCache(true); return $dict; } /** * @title 删除字典 * * @param [type] $request * @return void */ public function delete($request){ try { $dict = Dict::findOrFail($request->input('id')); } catch (\Throwable $th) { throw new \Exception("改字典不存在", 1); } $dict->delete(); $this->setDictCache(true); return $dict; } /** * @title 创建字典分类 * * @param [type] $request * @return void */ public function createCategory($request){ $request->validate([ 'title' => 'required|unique:system_dict_groups', 'name' => 'required|unique:system_dict_groups', ]); $data = $request->all(); $data['status'] = 1; $group = DictGroup::create($data); $this->setDictCache(true); return $group; } /** * @title 更新字典分类 * * @param [type] $request * @return void */ public function updateCategory($request){ try { $dict = DictGroup::findOrFail($request->input('id')); } catch (\Throwable $th) { throw new \Exception("改字典不存在", 1); } if ($request->filled('parent_id')) { $dict->parent_id = $request->input('parent_id'); } if ($request->filled('title')) { $dict->title = $request->input('title'); } if ($request->filled('name')) { $dict->name = $request->input('name'); } if ($request->filled('sort')) { $dict->sort = $request->input('sort'); } if ($request->filled('status')) { $dict->status = $request->input('status'); } $dict->save(); $this->setDictCache(true); return $dict; } /** * @title 删除字典 * * @param [type] $request * @return void */ public function deleteCategory($request){ try { $dict = DictGroup::findOrFail($request->input('id')); } catch (\Throwable $th) { throw new \Exception("改字典不存在", 1); } $dict->delete(); $this->setDictCache(true); return $dict; } public function getDictionaryAll(){ $map = []; $map[] = ['status', '=', 1]; $list = Dict::where($map)->get(); $data = []; foreach ($list as $key => $value) { $data[$value['group_name']][] = $value; } return $data; } public function setDictCache($refresh = false){ if (!cache('dict') || $refresh){ $data = $this->getDictionaryAll(); cache('dict', $data); } } }