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