Browse Source

文件夹操作

master
unknown 1 year ago
parent
commit
9fc13e952f
  1. 63
      app/controller/ResourceController.php
  2. 56
      app/controller/ResourceDirController.php
  3. 24
      app/exception/BaseException.php
  4. 9
      app/model/AccreditFile.php
  5. 1
      app/model/File.php
  6. 16
      app/model/Resource.php
  7. 46
      app/model/ResourceDir.php
  8. 11
      app/validate/ResourceValidate.php
  9. 15
      route/app.php

63
app/controller/ResourceController.php

@ -55,15 +55,14 @@ class ResourceController
*/ */
public function save(Resource $resource, Request $request) public function save(Resource $resource, Request $request)
{ {
$param = $request->param();
// 数据验证 // 数据验证
try { try {
switch ($param['copyright_type']) {
switch ($request->param('copyright_type')) {
case 1: case 1:
validate(ResourceValidate::class)->scene('save_selfown')->check($param);
validate(ResourceValidate::class)->scene('save_selfown')->check($request->param());
break; break;
case 2: case 2:
validate(ResourceValidate::class)->scene('save_purchase')->check($param);
validate(ResourceValidate::class)->scene('save_purchase')->check($request->param());
break; break;
} }
} catch (ValidateException $e) { } catch (ValidateException $e) {
@ -74,13 +73,14 @@ class ResourceController
Db::startTrans(); Db::startTrans();
try { try {
// 1. 保存站点到数据库 // 1. 保存站点到数据库
$res = $resource->addResource($param);
$res = $resource->addResource($request->param());
Db::commit(); Db::commit();
} catch (\Exception $e) { } catch (\Exception $e) {
Db::rollback(); Db::rollback();
return jsonReturn(-5, $e->getMessage()); return jsonReturn(-5, $e->getMessage());
} }
return json($res); return json($res);
} }
@ -89,9 +89,58 @@ class ResourceController
*/ */
public function detail(Resource $resource, $id) public function detail(Resource $resource, $id)
{ {
$resource_detail = $resource::with('user')
->with('files')
$resource_detail = $resource::with(['user', 'accredit_files', 'files'])
->find($id); ->find($id);
return jsonReturn(0, Lang::get('成功'), $resource_detail); 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()
{
}
} }

56
app/controller/ResourceDirController.php

@ -0,0 +1,56 @@
<?php
namespace app\controller;
use app\model\Resource;
use app\model\ResourceDir;
use app\validate\ResourceValidate;
use think\facade\Db;
use think\facade\Lang;
use think\exception\ValidateException;
use think\Request;
/**
* 文件夹使用的也是Resource 视为类型不同的文件(资源)
*/
class ResourceDirController
{
/**
* 文件夹 首页
*/
public function index()
{
echo 123;
die;
}
/**
* 创建文件夹
*/
public function save(ResourceDir $resource_dir, 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 = $resource_dir->addResourceDir($request->param());
Db::commit();
} catch (\Exception $e) {
Db::rollback();
return jsonReturn(-5, $e->getMessage());
}
return json($res);
}
}

24
app/exception/BaseException.php

@ -0,0 +1,24 @@
<?php
namespace app\exception;
use think\Exception;
class BaseException extends Exception
{
protected $errCode = 5000;
protected $errMsg = '系统错误';
public function __construct($msg = null, $code = null)
{
if (!$msg) {
$msg = $this->errMsg;
}
if (!$code) {
$code = $this->errCode;
}
parent::__construct($msg, $code);
}
}

9
app/model/AccreditFile.php

@ -6,4 +6,13 @@ use app\exception\ModelException;
class AccreditFile extends Model class AccreditFile extends Model
{ {
/**
* @param $resource 资源对象
* @param $accredit_files 授权文件数组
* @param $file_input_mode 素材录入方式
* 添加资源 素材关联表
*/
public function addAccreditFile($resource, $accredit_files)
{
}
} }

1
app/model/File.php

@ -7,6 +7,7 @@ use app\exception\ModelException;
class File extends Model class File extends Model
{ {
/** /**
* @param $resource 资源对象
* @param $files 素材数组 * @param $files 素材数组
* @param $file_input_mode 素材录入方式 * @param $file_input_mode 素材录入方式
* 添加资源 素材关联表 * 添加资源 素材关联表

16
app/model/Resource.php

@ -11,12 +11,23 @@ class Resource extends Model
return $this->belongsTo(User::class); return $this->belongsTo(User::class);
} }
/**
* 资源 素材 多对多
*/
public function files() public function files()
{ {
return $this->belongsToMany(File::class, ResourceFile::class, 'file_id', 'resource_id'); return $this->belongsToMany(File::class, ResourceFile::class, 'file_id', 'resource_id');
} }
/** /**
* 资源 授权文件 一对多
*/
public function accreditFiles()
{
return $this->hasMany(AccreditFile::class, 'resource_id', 'id');
}
/**
* @param $param 前端提交的参数 * @param $param 前端提交的参数
* @return array * @return array
* 添加资源 * 添加资源
@ -28,7 +39,10 @@ class Resource extends Model
$param = $this->beforeAddResource($param); $param = $this->beforeAddResource($param);
//插入资源表 //插入资源表
$resource = self::create($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']); (new File())->addFile($resource, $param['files'], $param['file_input_mode']);
} catch (\Exception $e) { } catch (\Exception $e) {

46
app/model/ResourceDir.php

@ -0,0 +1,46 @@
<?php
namespace app\model;
use app\exception\ModelException;
use think\facade\Db;
class ResourceDir extends Model
{
protected $table = 'zl_resource';
/**
* @param $param 前端提交的参数
* @return array
* 添加文件夹
*/
public function addResourceDir($param): array
{
try {
$resource = self::create($param);
} catch (\Exception $e) {
throw new ModelException($e->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;
}
}

11
app/validate/ResourceValidate.php

@ -15,21 +15,24 @@ class ResourceValidate extends Validate
* @var array * @var array
*/ */
protected $rule = [ protected $rule = [
'name|资源名称' => 'require',
'name|名称' => 'require',
'resource_type|资源类型' => 'require', 'resource_type|资源类型' => 'require',
'accredit_main_body|被授权主体' => 'require', 'accredit_main_body|被授权主体' => 'require',
'supplier|供应商' => 'require', 'supplier|供应商' => 'require',
'price|价格' => 'require|number', 'price|价格' => 'require|number',
'accredit_file_number|授权文件号码' => 'require', 'accredit_file_number|授权文件号码' => 'require',
'accredit_files|授权文件' => 'require',
"use_range|适用范围" => 'require', "use_range|适用范围" => 'require',
"file_input_mode|素材录入方式" => 'require', "file_input_mode|素材录入方式" => 'require',
"files|素材" => 'require', "files|素材" => 'require',
]; ];
protected $scene = [ 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'], // 'setStatus' => ['id', 'status'],
]; ];

15
route/app.php

@ -17,10 +17,17 @@ Route::get('think', function () {
Route::get('hello/:name', 'index/hello'); Route::get('hello/:name', 'index/hello');
Route::group('resource', function () { 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::group('oss', function () {
Route::post('/upload', 'oss/upload'); Route::post('/upload', 'oss/upload');

Loading…
Cancel
Save