query()->filter($filters, $this->getModelFilter())->sort()->get(); return array2tree($list->toArray(), $list->min('parent_id') ?: 0); } public function list() { return ['items' => $this->getTree(request()->all())]; } /** * 删除的前置方法 * * @param array $ids 主键id * @return mixed true: 继续后续操作, string: 中断操作, 返回错误提示 */ public function preDelete(array $ids) { // 删除子级 $this->query()->where(function ($q) use ($ids) { foreach ($ids as $id) { $q->orWhere('path', 'like', '%-'.$id.'-%'); } })->delete(); // 删除对应权限 AdminPermission::where('slug', Keyword::whereIn('id', $ids)->pluck('key'))->delete(); return true; } public function validate($data, $model = null) { $createRules = [ 'key' => ['required', Rule::unique('keywords', 'key')], 'name' => ['required'], ]; $updateRules = [ 'key' => [Rule::unique('keywords', 'key')->ignore(data_get($model, 'id'))] ]; $validator = Validator::make($data, $model ? $updateRules : $createRules, [ 'key.unique' => ':input 已经存在' ]); if ($validator->fails()) { return $validator->errors()->first(); } return true; } public function resloveData($data, $model = null) { $parent_id = data_get($data, 'parent_id'); if (!is_null($parent_id)) { if ($parent_id) { $parent = Keyword::findOrFail($parent_id); $data['level'] = $parent->level + 1; $data['type_key'] = $parent->key; $data['path'] = $parent->path.$parent_id.'-'; } else { $data['level'] = 1; $data['path'] = '-'; $data['parent_id'] = 0; } } return $data; } public function afterCreate($model) { if ($model->type_key == 'treat_type') { // 创建对应的权限 (new AdminPermissionService())->store([ 'slug' => $model->key, 'name' => $model->name, 'parent_id' => 0, 'order' => 1 ]); } } }