1
0
Fork 0
medical-record-server/app/Admin/Services/KeywordService.php

107 lines
3.0 KiB
PHP

<?php
namespace App\Admin\Services;
use App\ModelFilters\KeywordFilter;
use App\Models\Keyword;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Slowlyo\OwlAdmin\Models\AdminPermission;
use Slowlyo\OwlAdmin\Services\AdminPermissionService;
/**
* @method Keyword getModel()
* @method Keyword|\Illuminate\Database\Query\Builder query()
*/
class KeywordService extends BaseService
{
protected array $withRelationships = [];
protected string $modelName = Keyword::class;
protected string $modelFilterName = KeywordFilter::class;
public function getTree($filters = [])
{
$list = $this->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
]);
}
}
}