2 changed files with 96 additions and 0 deletions
			
			
		- 
					92app/AdminAgent/Actions/Tree/LoadSystemCategory.php
 - 
					4app/AdminAgent/Controllers/CategoryController.php
 
@ -0,0 +1,92 @@ | 
				
			|||
<?php | 
				
			|||
 | 
				
			|||
namespace App\AdminAgent\Actions\Tree; | 
				
			|||
 | 
				
			|||
use App\Models\Category; | 
				
			|||
use Dcat\Admin\Actions\Response; | 
				
			|||
use Dcat\Admin\Admin; | 
				
			|||
use Dcat\Admin\Traits\HasPermissions; | 
				
			|||
use Dcat\Admin\Tree\AbstractTool; | 
				
			|||
use Illuminate\Contracts\Auth\Authenticatable; | 
				
			|||
use Illuminate\Database\Eloquent\Model; | 
				
			|||
use Illuminate\Http\Request; | 
				
			|||
 | 
				
			|||
class LoadSystemCategory extends AbstractTool | 
				
			|||
{ | 
				
			|||
    /** | 
				
			|||
     * @return string | 
				
			|||
     */ | 
				
			|||
	protected $title = '导入系统分类'; | 
				
			|||
 | 
				
			|||
    /** | 
				
			|||
     * Handle the action request. | 
				
			|||
     * | 
				
			|||
     * @param Request $request | 
				
			|||
     * | 
				
			|||
     * @return Response | 
				
			|||
     */ | 
				
			|||
    public function handle(Request $request) | 
				
			|||
    { | 
				
			|||
		$system_cate = Category::where('agent_id', 0)->orderBy('pid')->get(); | 
				
			|||
		$system_name = $system_cate->pluck('name')->toArray(); | 
				
			|||
 | 
				
			|||
		$own_cate = Category::where('agent_id', Admin::user()->id)->get(); | 
				
			|||
		$own_name = $own_cate->pluck('name')->toArray(); | 
				
			|||
 | 
				
			|||
		$no_name = array_diff($system_name, $own_name); //找到系统有,但自己没有的分类名
 | 
				
			|||
		$max_id = Category::where('agent_id', Admin::user()->id)->max('id'); | 
				
			|||
 | 
				
			|||
		Category::insert(array_map(function ($name) { | 
				
			|||
			return [ | 
				
			|||
				'agent_id' => Admin::user()->id, | 
				
			|||
				'name' => $name, | 
				
			|||
				'pid' => 0, | 
				
			|||
				'sort' => 255, | 
				
			|||
			]; | 
				
			|||
		}, $no_name)); | 
				
			|||
 | 
				
			|||
		$own_cate = Category::where('agent_id', Admin::user()->id)->orderBy('id')->get(); //获取所有分类,包含新插入的分类
 | 
				
			|||
		$system_pid = $system_cate->pluck('pid', 'name')->toArray(); //获取原来系统的PID
 | 
				
			|||
		$own_id = $own_cate->pluck('id', 'name')->toArray(); //获取自己的PID,不考虑name重复的情况
 | 
				
			|||
 | 
				
			|||
		foreach ($own_cate as $cate) { | 
				
			|||
			//不是新插入的分类不处理
 | 
				
			|||
			if ($cate->id <= $max_id) continue; | 
				
			|||
 | 
				
			|||
			//如果原来系统PID不是0,则获取父类的名称,并在自己的分类中获取对应名称ID,再设置父分类
 | 
				
			|||
			$sys_pid = $system_pid[$cate['name']]; | 
				
			|||
			if ($sys_pid != 0) { | 
				
			|||
				$sys_pid_name = $system_cate->find($sys_pid)['name']; | 
				
			|||
				Category::where('id', $cate->id)->update(['pid' => $own_id[$sys_pid_name]]); | 
				
			|||
			} | 
				
			|||
		} | 
				
			|||
 | 
				
			|||
        return $this->response()->success('操作成功!')->refresh(); | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    /** | 
				
			|||
     * @return string|void | 
				
			|||
     */ | 
				
			|||
    protected function href() | 
				
			|||
    { | 
				
			|||
        // return admin_url('auth/users');
 | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    /** | 
				
			|||
	 * @return string|array|void | 
				
			|||
	 */ | 
				
			|||
	public function confirm() | 
				
			|||
	{ | 
				
			|||
		 return ['操作确认', '确定要导入系统分类吗?']; | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
    /** | 
				
			|||
     * @param Model|Authenticatable|HasPermissions|null $user | 
				
			|||
     * | 
				
			|||
     * @return bool | 
				
			|||
     */ | 
				
			|||
    protected function authorize($user): bool | 
				
			|||
    { | 
				
			|||
        return true; | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue