107 lines
3.0 KiB
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
|
|
]);
|
|
|
|
}
|
|
}
|
|
}
|