5 changed files with 70 additions and 224 deletions
-
39app/controller/substance/ResourceController.php
-
148app/controller/substance/ResourceDirController.php
-
73app/service/ResourceDirService.php
-
26app/service/ResourceService.php
-
8route/substance.php
@ -1,148 +0,0 @@ |
|||
<?php |
|||
|
|||
namespace app\controller\substance; |
|||
|
|||
use app\model\Resource; |
|||
use app\model\ResourceDir; |
|||
use app\service\ResourceDirService; |
|||
use app\service\ResourceService; |
|||
use app\validate\ResourceValidate; |
|||
use think\exception\ValidateException; |
|||
use think\facade\Db; |
|||
use think\facade\Lang; |
|||
use think\Request; |
|||
|
|||
/** |
|||
* 文件夹使用的也是Resource 视为类型不同的文件(资源) |
|||
*/ |
|||
class ResourceDirController |
|||
{ |
|||
/** |
|||
* 文件夹 列表页 |
|||
*/ |
|||
public function index(ResourceDir $resource_dir, Request $request, $id = 0) |
|||
{ |
|||
//左侧顶级文件夹列表
|
|||
$top_resource_dir = $resource_dir::where('type', 2)->where('parent_id', 0)->field('id, name')->select()->toArray(); |
|||
//选中的文件夹 默认顶级第一个
|
|||
$select_dir_id = $id ?: $top_resource_dir[0]['id']; |
|||
//选中的文件夹基础信息
|
|||
$resource_dir_info = $resource_dir::find($select_dir_id); |
|||
//选中文件夹下所有内容
|
|||
$resource_list = (new ResourceDirService())->getResourceDirAndResource($select_dir_id); |
|||
|
|||
$ret = [ |
|||
'top_resource_dir' => $top_resource_dir, |
|||
'resource_dir_info' => $resource_dir_info, |
|||
'resource_list' => $resource_list |
|||
]; |
|||
|
|||
return jsonReturn(0, Lang::get('成功'), $ret); |
|||
} |
|||
|
|||
/** |
|||
* 文件夹 详情 |
|||
* @param Request $request |
|||
* @return \think\response\Json |
|||
*/ |
|||
public function read(Request $request) |
|||
{ |
|||
$resource_list = (new ResourceDirService())->getResourceDirAndResource($request->param('id')); |
|||
if ($request->param('in_share')) { |
|||
//说明这是分享点击进来的 需要给列表加上url 点击链接
|
|||
$resource_service = new ResourceService(); |
|||
foreach ($resource_list as $resource) { |
|||
$resource->share_read_url = $resource_service->getShareReadUrl($resource, $request->param('share_id'), $request->param('share_item_id')); |
|||
} |
|||
} |
|||
return jsonReturn(0, Lang::get('成功'), $resource_list); |
|||
} |
|||
|
|||
/** |
|||
* 创建文件夹 |
|||
*/ |
|||
public function save(Request $request) |
|||
{ |
|||
if ($request->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 = (new ResourceDirService())->addResourceDir($request->param()); |
|||
|
|||
Db::commit(); |
|||
} catch (\Exception $e) { |
|||
Db::rollback(); |
|||
return jsonReturn(-5, $e->getMessage()); |
|||
} |
|||
|
|||
return json($res); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 文件夹 重命名 |
|||
*/ |
|||
public function rename(Resource $resource, Request $request) |
|||
{ |
|||
try { |
|||
validate(ResourceValidate::class)->scene('rename_dir')->check($request->param()); |
|||
} catch (ValidateException $e) { |
|||
return jsonReturn(-1, $e->getError()); |
|||
} |
|||
try { |
|||
$resource::whereIn('id', $request->param('ids'))->update(['name' => $request->param('name')]); |
|||
return jsonReturn(0, Lang::get('成功')); |
|||
} catch (\Exception $e) { |
|||
return jsonReturn(-5, $e->getMessage()); |
|||
} |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 资源 移动到 |
|||
*/ |
|||
// public function moveTo(Request $request)
|
|||
// {
|
|||
// //保存到数据库
|
|||
// Db::startTrans();
|
|||
// try {
|
|||
// // 移动资源
|
|||
// $res = (new ResourceDirService())->moveTo($request->param('ids'), $request->param('to_id'));
|
|||
// Db::commit();
|
|||
// } catch (\Exception $e) {
|
|||
// Db::rollback();
|
|||
// return jsonReturn(-5, $e->getMessage());
|
|||
// }
|
|||
//
|
|||
// return json($res);
|
|||
// }
|
|||
//
|
|||
//
|
|||
// /**
|
|||
// * 资源 移动到
|
|||
// */
|
|||
// public function copyTo(Request $request)
|
|||
// {
|
|||
// Db::startTrans();
|
|||
// try {
|
|||
// // 复制资源
|
|||
// $res = (new ResourceDirService())->copyTo($request->param('ids'), $request->param('to_id'));
|
|||
// Db::commit();
|
|||
// } catch (\Exception $e) {
|
|||
// Db::rollback();
|
|||
// return jsonReturn(-5, $e->getMessage());
|
|||
// }
|
|||
//
|
|||
// return json($res);
|
|||
// }
|
|||
} |
|||
@ -1,73 +0,0 @@ |
|||
<?php |
|||
|
|||
namespace app\service; |
|||
|
|||
use app\exception\ModelException; |
|||
use app\model\Resource; |
|||
use app\model\ResourceDir; |
|||
|
|||
class ResourceDirService extends Service |
|||
{ |
|||
|
|||
|
|||
/** |
|||
* @param $resource_dir_id 文件夹id |
|||
* @return array |
|||
* 获取一个文件夹下的所有文件夹 和资源 |
|||
*/ |
|||
public function getResourceDirAndResource($resource_dir_id) |
|||
{ |
|||
$resource_list = ResourceDir::where('parent_id', $resource_dir_id) |
|||
->order('type', 'desc') //文件夹放在上面
|
|||
->order('create_time', 'desc') |
|||
->select(); |
|||
return $resource_list; |
|||
} |
|||
|
|||
|
|||
/** |
|||
* @param $ids 需要复制的文件夹资源ids |
|||
* @param $to_id 文件夹资源id |
|||
* @return array |
|||
* 复制操作 |
|||
*/ |
|||
public function copyTo($ids, $to_id) |
|||
{ |
|||
|
|||
// 更新 新的文件夹资源 以及所有父文件夹资源 大小和数量
|
|||
foreach ($ids as $resource_id) { |
|||
$resource = Resource::find($resource_id); |
|||
(new ResourceDirService())->changeDirSizeAndCount($resource, $to_id, '+'); |
|||
} |
|||
|
|||
|
|||
//递归复制
|
|||
$this->copyFolderRecursively($ids, $to_id); |
|||
return dataReturn($this->sucCode, $this->copyMsg); |
|||
} |
|||
|
|||
/** |
|||
* @param $ids 需要复制的普通资源ids |
|||
* @param $to_id 文件夹资源id |
|||
* @return array |
|||
* 递归复制资源文件夹及其内容 |
|||
*/ |
|||
|
|||
|
|||
/** |
|||
* @param $resource |
|||
* @return string |
|||
* 获取一个资源的 所属文件夹路径名称 |
|||
*/ |
|||
public function getResourceDirNamePath($resource) |
|||
{ |
|||
//没有所属目录
|
|||
if (!$resource->resource_dir) { |
|||
return ''; |
|||
} |
|||
//根据所属目录的idpath找到所有目录路径
|
|||
$all_resource_dir_name = ResourceDir::whereIn('id', $resource->resource_dir->id_path)->column('name'); |
|||
|
|||
return implode('-', $all_resource_dir_name); |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue