first commit

This commit is contained in:
liu
2026-07-13 15:23:29 +08:00
commit 50885a98c8
473 changed files with 33772 additions and 0 deletions
@@ -0,0 +1,184 @@
<?php
namespace Modules\SystemTool\Http\Controllers;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Modules\AnnoRoute\Attribute\DeleteRoute;
use Modules\AnnoRoute\Attribute\GetRoute;
use Modules\AnnoRoute\Attribute\PostRoute;
use Modules\AnnoRoute\Attribute\PutRoute;
use Modules\AnnoRoute\Attribute\RequestAttribute;
use Modules\Common\Http\Controllers\BaseController;
use Modules\SystemTool\Http\Requests\SysFileMoveOrCopyRequest;
use Modules\SystemTool\Models\SysFileModel;
use Modules\SystemTool\Services\SysFileService;
use Symfony\Component\HttpFoundation\StreamedResponse;
/**
* 文件列表
*/
#[RequestAttribute('/system/file/list', 'system.file.list')]
class SysFileController extends BaseController
{
protected array $searchField = [
'group_id' => '=',
'name' => 'like',
'file_type' => '=',
];
public function __construct(
protected SysFileService $service
) {}
/** 查询文件列表 */
#[GetRoute(authorize: 'query')]
public function query(Request $request): JsonResponse
{
$params = $request->all();
$pageSize = $params['pageSize'] ?? 10;
$query = SysFileModel::query();
$data = $this->buildSearch($params, $query)
->paginate($pageSize)
->toArray();
return $this->success($data);
}
/** 上传文件 */
#[PostRoute('/upload', 'upload')]
public function uploadImage(Request $request): JsonResponse
{
$data = $request->validate([
'file' => 'required|file',
'group_id' => [
'nullable', 'integer',
function ($attribute, $value, $fail) {
if ($value == 0) {
return;
}
if (!DB::table('sys_file_group')->where('id', $value)->exists()) {
$fail('所选的分组 ID 不存在。');
}
},
],
]);
$result = $this->service->upload(
$data['file'],
$data['group_id'] ?? 0,
10,
Auth::id()
);
return $this->success($result);
}
/** 获取回收站文件列表 */
#[GetRoute('/trashed', 'trashed')]
public function trashed(): JsonResponse
{
$list = $this->service->getTrashedList(request()->all());
return $this->success($list);
}
/** 删除文件(软删除) */
#[DeleteRoute('/{id}', authorize: 'delete', where: ['id' => '[0-9]+'])]
public function delete(int $id): JsonResponse
{
$this->service->delete($id);
return $this->success();
}
/** 批量删除文件 */
#[DeleteRoute('/batch/delete', 'delete')]
public function batchDelete(Request $request): JsonResponse
{
$ids = $request->input('ids', []);
$count = $this->service->batchDelete($ids);
return $this->success(['count' => $count]);
}
/** 彻底删除文件 */
#[DeleteRoute('/force-delete/{id}', 'force-delete', where: ['id' => '[0-9]+'])]
public function forceDelete(int $id): JsonResponse
{
$this->service->forceDelete($id);
return $this->success();
}
/** 批量彻底删除文件 */
#[DeleteRoute('/batch/force-delete', 'force-delete')]
public function batchForceDelete(Request $request): JsonResponse
{
$ids = $request->input('ids', []);
$count = $this->service->batchForceDelete($ids);
return $this->success(['count' => $count]);
}
/** 恢复文件 */
#[PostRoute('/restore/{id}', 'restore', where: ['id' => '[0-9]+'])]
public function restore(int $id): JsonResponse
{
$this->service->restore($id);
return $this->success();
}
/** 批量恢复文件 */
#[PostRoute('/batch/restore', 'restore')]
public function batchRestore(Request $request): JsonResponse
{
$ids = $request->input('ids', []);
$count = $this->service->batchRestore($ids);
return $this->success(['count' => $count]);
}
/** 复制文件 */
#[PostRoute('/copy', 'copy')]
public function copy(SysFileMoveOrCopyRequest $request): JsonResponse
{
$data = $request->validated();
if(! is_array($data['ids'])) {
$result = $this->service->copy($data['ids'], $data['group_id']);
} else {
$result = $this->service->batchCopy($data['ids'], $data['group_id']);
}
return $this->success($result);
}
/** 移动文件 */
#[PostRoute('/move', 'move')]
public function move(SysFileMoveOrCopyRequest $request): JsonResponse
{
$data = $request->validated();
if(! is_array($data['ids'])) {
$result = $this->service->move($data['ids'], $data['group_id']);
} else {
$result = $this->service->batchMove($data['ids'], $data['group_id']);
}
return $this->success($result);
}
/** 重命名文件 */
#[PutRoute('/rename/{id}', 'rename', where: ['id' => '[0-9]+'])]
public function rename(int $id, Request $request): JsonResponse
{
$newName = $request->input('name');
$this->service->rename($id, $newName);
return $this->success();
}
/** 下载文件 */
#[GetRoute('/download/{id}', false, where: ['id' => '[0-9]+'])]
public function download(int $id): StreamedResponse
{
return $this->service->download($id);
}
/** 清空回收站文件 */
#[DeleteRoute('/clean/trashed', 'clean-trashed')]
public function cleanTrashed(Request $request): JsonResponse
{
$count = $this->service->cleanTrashed();
return $this->success(['count' => $count]);
}
}