From 9fc13e952f9c8365bed61ec94f20fd793d3f6127 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 17 Jul 2024 18:03:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=A4=B9=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controller/ResourceController.php | 63 ++++++++++++++++++++++++++++---- app/controller/ResourceDirController.php | 56 ++++++++++++++++++++++++++++ app/exception/BaseException.php | 24 ++++++++++++ app/model/AccreditFile.php | 9 +++++ app/model/File.php | 1 + app/model/Resource.php | 16 +++++++- app/model/ResourceDir.php | 46 +++++++++++++++++++++++ app/validate/ResourceValidate.php | 11 ++++-- route/app.php | 15 ++++++-- 9 files changed, 225 insertions(+), 16 deletions(-) create mode 100644 app/controller/ResourceDirController.php create mode 100644 app/exception/BaseException.php create mode 100644 app/model/ResourceDir.php diff --git a/app/controller/ResourceController.php b/app/controller/ResourceController.php index fdd827f..725ab9a 100644 --- a/app/controller/ResourceController.php +++ b/app/controller/ResourceController.php @@ -55,15 +55,14 @@ class ResourceController */ public function save(Resource $resource, Request $request) { - $param = $request->param(); // 数据验证 try { - switch ($param['copyright_type']) { + switch ($request->param('copyright_type')) { case 1: - validate(ResourceValidate::class)->scene('save_selfown')->check($param); + validate(ResourceValidate::class)->scene('save_selfown')->check($request->param()); break; case 2: - validate(ResourceValidate::class)->scene('save_purchase')->check($param); + validate(ResourceValidate::class)->scene('save_purchase')->check($request->param()); break; } } catch (ValidateException $e) { @@ -74,13 +73,14 @@ class ResourceController Db::startTrans(); try { // 1. 保存站点到数据库 - $res = $resource->addResource($param); + $res = $resource->addResource($request->param()); Db::commit(); } catch (\Exception $e) { Db::rollback(); return jsonReturn(-5, $e->getMessage()); } + return json($res); } @@ -89,9 +89,58 @@ class ResourceController */ public function detail(Resource $resource, $id) { - $resource_detail = $resource::with('user') - ->with('files') + $resource_detail = $resource::with(['user', 'accredit_files', 'files']) ->find($id); return jsonReturn(0, Lang::get('成功'), $resource_detail); } + + /** + * 资源 分享 + */ + public function share() + { + //todo + } + + /** + * 资源 重命名 + */ + public function rename(Resource $resource, Request $request, $id) + { + try { + validate(ResourceValidate::class)->scene('rename')->check($request->param()); + } catch (ValidateException $e) { + return jsonReturn(-1, $e->getError()); + } + + try { + $resource_detail = $resource::find($id); + $resource_detail->name = $request->param('name'); + $resource_detail->save(); + return jsonReturn(0, Lang::get('成功')); + } catch (\Exception $e) { + return jsonReturn(-5, $e->getMessage()); + } + } + + /** + * 资源 移动到 + */ + public function moveTo() + { + } + + /** + * 资源 复制到 + */ + public function copyTo() + { + } + + /** + * 删除 + */ + public function delete() + { + } } diff --git a/app/controller/ResourceDirController.php b/app/controller/ResourceDirController.php new file mode 100644 index 0000000..5f0ba46 --- /dev/null +++ b/app/controller/ResourceDirController.php @@ -0,0 +1,56 @@ +param('type') != 2) { + return jsonReturn(-1, '仅支持创建文件夹'); + } + // 数据验证 + try { + validate(ResourceValidate::class)->scene('save_dir')->check($request->param()); + } catch (ValidateException $e) { + return jsonReturn(-1, $e->getError()); + } + + //保存到数据库 + Db::startTrans(); + try { + // 新增文件夹 + $res = $resource_dir->addResourceDir($request->param()); + + Db::commit(); + } catch (\Exception $e) { + Db::rollback(); + return jsonReturn(-5, $e->getMessage()); + } + + return json($res); + } +} diff --git a/app/exception/BaseException.php b/app/exception/BaseException.php new file mode 100644 index 0000000..13387fb --- /dev/null +++ b/app/exception/BaseException.php @@ -0,0 +1,24 @@ +errMsg; + } + if (!$code) { + $code = $this->errCode; + } + + parent::__construct($msg, $code); + } +} diff --git a/app/model/AccreditFile.php b/app/model/AccreditFile.php index 63447ab..c0e82e7 100644 --- a/app/model/AccreditFile.php +++ b/app/model/AccreditFile.php @@ -6,4 +6,13 @@ use app\exception\ModelException; class AccreditFile extends Model { + /** + * @param $resource 资源对象 + * @param $accredit_files 授权文件数组 + * @param $file_input_mode 素材录入方式 + * 添加资源 素材关联表 + */ + public function addAccreditFile($resource, $accredit_files) + { + } } diff --git a/app/model/File.php b/app/model/File.php index cb415c4..9fbd1a5 100644 --- a/app/model/File.php +++ b/app/model/File.php @@ -7,6 +7,7 @@ use app\exception\ModelException; class File extends Model { /** + * @param $resource 资源对象 * @param $files 素材数组 * @param $file_input_mode 素材录入方式 * 添加资源 素材关联表 diff --git a/app/model/Resource.php b/app/model/Resource.php index c4be9ac..8e32d63 100644 --- a/app/model/Resource.php +++ b/app/model/Resource.php @@ -11,12 +11,23 @@ class Resource extends Model return $this->belongsTo(User::class); } + /** + * 资源 素材 多对多 + */ public function files() { return $this->belongsToMany(File::class, ResourceFile::class, 'file_id', 'resource_id'); } /** + * 资源 授权文件 一对多 + */ + public function accreditFiles() + { + return $this->hasMany(AccreditFile::class, 'resource_id', 'id'); + } + + /** * @param $param 前端提交的参数 * @return array * 添加资源 @@ -28,7 +39,10 @@ class Resource extends Model $param = $this->beforeAddResource($param); //插入资源表 $resource = self::create($param); - + //存在授权文件 插入授权文件表 + if ($param['copyright_type'] == 2 && isset($param['accredit_files'])) { + $resource->accreditFiles()->saveAll($param['accredit_files']); + } //插入素材表 (new File())->addFile($resource, $param['files'], $param['file_input_mode']); } catch (\Exception $e) { diff --git a/app/model/ResourceDir.php b/app/model/ResourceDir.php new file mode 100644 index 0000000..e12506e --- /dev/null +++ b/app/model/ResourceDir.php @@ -0,0 +1,46 @@ +getMessage()); + } + return dataReturn($this->sucCode, $this->addMsg, $resource->id); + } + + /** + * @param $param 递归获取一个文件夹下所有ids + * @return array + * 添加文件夹 + */ + public function getFolderIds($folderId) + { + $folderIds = []; + // 获取直接子文件夹 + $sub_folders = Resource::where('parent_id', $folderId) + ->where('type', 2) + ->select(); + foreach ($sub_folders as $subfolder) { + $folderIds[] = $subfolder['id']; + $folderIds = array_merge($folderIds, $this->getFolderIds($subfolder['id'])); + } + + return $folderIds; + } +} diff --git a/app/validate/ResourceValidate.php b/app/validate/ResourceValidate.php index 05123db..319a449 100644 --- a/app/validate/ResourceValidate.php +++ b/app/validate/ResourceValidate.php @@ -15,21 +15,24 @@ class ResourceValidate extends Validate * @var array */ protected $rule = [ - 'name|资源名称' => 'require', + 'name|名称' => 'require', 'resource_type|资源类型' => 'require', 'accredit_main_body|被授权主体' => 'require', 'supplier|供应商' => 'require', 'price|价格' => 'require|number', 'accredit_file_number|授权文件号码' => 'require', + 'accredit_files|授权文件' => 'require', "use_range|适用范围" => 'require', "file_input_mode|素材录入方式" => 'require', "files|素材" => 'require', ]; protected $scene = [ - 'save_purchase' => ['name', 'resource_type', 'accredit_main_body', 'supplier', 'price', 'accredit_file_number', 'use_range', 'file_input_mode', 'files'], - 'save_selfown' => ['name', 'resource_type', 'file_input_mode', 'files'], - // 'update' => ['id', 'title', 'domain', 'parent_id'], + 'save_purchase' => ['name', 'resource_type', 'accredit_main_body', 'supplier', 'price', 'accredit_file_number', 'accredit_files', 'use_range', 'file_input_mode', 'files'], //新增采购 + 'save_selfown' => ['name', 'resource_type', 'file_input_mode', 'files'], //新增自有 + 'rename' => ['name'], + + 'save_dir' => ['name'], //新增文件夹 // 'setStatus' => ['id', 'status'], ]; diff --git a/route/app.php b/route/app.php index f6d23d1..0a15ad2 100644 --- a/route/app.php +++ b/route/app.php @@ -17,10 +17,17 @@ Route::get('think', function () { Route::get('hello/:name', 'index/hello'); Route::group('resource', function () { - Route::get('/index', 'resource/index'); - Route::post('/save', 'resource/save'); - Route::get('/detail/:id', 'resource/detail'); -}); + Route::get('/index', 'index'); + Route::post('/save', 'save'); + Route::get('/detail/:id', 'detail'); + Route::get('/share/:id', 'share'); + Route::post('/rename/:id', 'rename'); +})->prefix('resource/'); + +Route::group('resourceDir', function () { + Route::get('/index', 'index'); + Route::post('/save', 'save'); +})->prefix('resourceDir/'); Route::group('oss', function () { Route::post('/upload', 'oss/upload');