初始化项目

This commit is contained in:
2026-02-08 22:38:13 +08:00
commit 334d2c6312
201 changed files with 32724 additions and 0 deletions

View File

@@ -0,0 +1,172 @@
<?php
namespace App\Http\Controllers\System\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Services\System\CityService;
class City extends Controller
{
protected $cityService;
public function __construct(CityService $cityService)
{
$this->cityService = $cityService;
}
public function index(Request $request)
{
$result = $this->cityService->getList($request->all());
return response()->json([
'code' => 200,
'message' => 'success',
'data' => $result
]);
}
public function tree()
{
$tree = $this->cityService->getCachedTree();
return response()->json([
'code' => 200,
'message' => 'success',
'data' => $tree
]);
}
public function show(int $id)
{
$city = $this->cityService->getById($id);
if (!$city) {
return response()->json([
'code' => 404,
'message' => '城市不存在',
'data' => null
], 404);
}
return response()->json([
'code' => 200,
'message' => 'success',
'data' => $city
]);
}
public function store(Request $request)
{
try {
$city = $this->cityService->create($request->all());
return response()->json([
'code' => 200,
'message' => '创建成功',
'data' => $city
], 201);
} catch (\Exception $e) {
return response()->json([
'code' => 422,
'message' => $e->getMessage(),
'data' => null
], 422);
}
}
public function update(Request $request, int $id)
{
try {
$city = $this->cityService->update($id, $request->all());
return response()->json([
'code' => 200,
'message' => '更新成功',
'data' => $city
]);
} catch (\Exception $e) {
return response()->json([
'code' => 422,
'message' => $e->getMessage(),
'data' => null
], 422);
}
}
public function destroy(int $id)
{
try {
$this->cityService->delete($id);
return response()->json([
'code' => 200,
'message' => '删除成功',
'data' => null
]);
} catch (\Exception $e) {
return response()->json([
'code' => 400,
'message' => $e->getMessage(),
'data' => null
], 400);
}
}
public function batchDelete(Request $request)
{
$this->cityService->batchDelete($request->input('ids', []));
return response()->json([
'code' => 200,
'message' => '批量删除成功',
'data' => null
]);
}
public function batchUpdateStatus(Request $request)
{
$this->cityService->batchUpdateStatus(
$request->input('ids', []),
$request->input('status', true)
);
return response()->json([
'code' => 200,
'message' => '批量更新状态成功',
'data' => null
]);
}
public function children(int $parentId)
{
$children = $this->cityService->getChildren($parentId);
return response()->json([
'code' => 200,
'message' => 'success',
'data' => $children
]);
}
public function provinces()
{
$provinces = $this->cityService->getProvinces();
return response()->json([
'code' => 200,
'message' => 'success',
'data' => $provinces
]);
}
public function cities(int $provinceId)
{
$cities = $this->cityService->getCities($provinceId);
return response()->json([
'code' => 200,
'message' => 'success',
'data' => $cities
]);
}
public function districts(int $cityId)
{
$districts = $this->cityService->getDistricts($cityId);
return response()->json([
'code' => 200,
'message' => 'success',
'data' => $districts
]);
}
}

View File

@@ -0,0 +1,142 @@
<?php
namespace App\Http\Controllers\System\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Services\System\ConfigService;
class Config extends Controller
{
protected $configService;
public function __construct(ConfigService $configService)
{
$this->configService = $configService;
}
public function index(Request $request)
{
$result = $this->configService->getList($request->all());
return response()->json([
'code' => 200,
'message' => 'success',
'data' => $result
]);
}
public function show(int $id)
{
$config = $this->configService->getById($id);
if (!$config) {
return response()->json([
'code' => 404,
'message' => '配置不存在',
'data' => null
], 404);
}
return response()->json([
'code' => 200,
'message' => 'success',
'data' => $config
]);
}
public function store(Request $request)
{
try {
$config = $this->configService->create($request->all());
return response()->json([
'code' => 200,
'message' => '创建成功',
'data' => $config
], 201);
} catch (\Exception $e) {
return response()->json([
'code' => 422,
'message' => $e->getMessage(),
'data' => null
], 422);
}
}
public function update(Request $request, int $id)
{
try {
$config = $this->configService->update($id, $request->all());
return response()->json([
'code' => 200,
'message' => '更新成功',
'data' => $config
]);
} catch (\Exception $e) {
return response()->json([
'code' => 422,
'message' => $e->getMessage(),
'data' => null
], 422);
}
}
public function destroy(int $id)
{
try {
$this->configService->delete($id);
return response()->json([
'code' => 200,
'message' => '删除成功',
'data' => null
]);
} catch (\Exception $e) {
return response()->json([
'code' => 400,
'message' => $e->getMessage(),
'data' => null
], 400);
}
}
public function batchDelete(Request $request)
{
$this->configService->batchDelete($request->input('ids', []));
return response()->json([
'code' => 200,
'message' => '批量删除成功',
'data' => null
]);
}
public function batchUpdateStatus(Request $request)
{
$this->configService->batchUpdateStatus(
$request->input('ids', []),
$request->input('status', true)
);
return response()->json([
'code' => 200,
'message' => '批量更新状态成功',
'data' => null
]);
}
public function getGroups()
{
$groups = $this->configService->getGroups();
return response()->json([
'code' => 200,
'message' => 'success',
'data' => $groups
]);
}
public function getByGroup(Request $request)
{
$configs = $this->configService->getByGroup($request->input('group'));
return response()->json([
'code' => 200,
'message' => 'success',
'data' => $configs
]);
}
}

View File

@@ -0,0 +1,211 @@
<?php
namespace App\Http\Controllers\System\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Services\System\DictionaryService;
class Dictionary extends Controller
{
protected $dictionaryService;
public function __construct(DictionaryService $dictionaryService)
{
$this->dictionaryService = $dictionaryService;
}
public function index(Request $request)
{
$result = $this->dictionaryService->getList($request->all());
return response()->json([
'code' => 200,
'message' => 'success',
'data' => $result
]);
}
public function all()
{
$dictionaries = $this->dictionaryService->getAll();
return response()->json([
'code' => 200,
'message' => 'success',
'data' => $dictionaries
]);
}
public function show(int $id)
{
$dictionary = $this->dictionaryService->getById($id);
if (!$dictionary) {
return response()->json([
'code' => 404,
'message' => '字典不存在',
'data' => null
], 404);
}
return response()->json([
'code' => 200,
'message' => 'success',
'data' => $dictionary
]);
}
public function store(Request $request)
{
try {
$dictionary = $this->dictionaryService->create($request->all());
return response()->json([
'code' => 200,
'message' => '创建成功',
'data' => $dictionary
], 201);
} catch (\Exception $e) {
return response()->json([
'code' => 422,
'message' => $e->getMessage(),
'data' => null
], 422);
}
}
public function update(Request $request, int $id)
{
try {
$dictionary = $this->dictionaryService->update($id, $request->all());
return response()->json([
'code' => 200,
'message' => '更新成功',
'data' => $dictionary
]);
} catch (\Exception $e) {
return response()->json([
'code' => 422,
'message' => $e->getMessage(),
'data' => null
], 422);
}
}
public function destroy(int $id)
{
try {
$this->dictionaryService->delete($id);
return response()->json([
'code' => 200,
'message' => '删除成功',
'data' => null
]);
} catch (\Exception $e) {
return response()->json([
'code' => 400,
'message' => $e->getMessage(),
'data' => null
], 400);
}
}
public function batchDelete(Request $request)
{
$this->dictionaryService->batchDelete($request->input('ids', []));
return response()->json([
'code' => 200,
'message' => '批量删除成功',
'data' => null
]);
}
public function batchUpdateStatus(Request $request)
{
$this->dictionaryService->batchUpdateStatus(
$request->input('ids', []),
$request->input('status', true)
);
return response()->json([
'code' => 200,
'message' => '批量更新状态成功',
'data' => null
]);
}
public function getItemsList(Request $request)
{
$result = $this->dictionaryService->getItemsList($request->all());
return response()->json([
'code' => 200,
'message' => 'success',
'data' => $result
]);
}
public function storeItem(Request $request)
{
try {
$item = $this->dictionaryService->createItem($request->all());
return response()->json([
'code' => 200,
'message' => '创建成功',
'data' => $item
], 201);
} catch (\Exception $e) {
return response()->json([
'code' => 422,
'message' => $e->getMessage(),
'data' => null
], 422);
}
}
public function updateItem(Request $request, int $id)
{
try {
$item = $this->dictionaryService->updateItem($id, $request->all());
return response()->json([
'code' => 200,
'message' => '更新成功',
'data' => $item
]);
} catch (\Exception $e) {
return response()->json([
'code' => 422,
'message' => $e->getMessage(),
'data' => null
], 422);
}
}
public function destroyItem(int $id)
{
$this->dictionaryService->deleteItem($id);
return response()->json([
'code' => 200,
'message' => '删除成功',
'data' => null
]);
}
public function batchDeleteItems(Request $request)
{
$this->dictionaryService->batchDeleteItems($request->input('ids', []));
return response()->json([
'code' => 200,
'message' => '批量删除成功',
'data' => null
]);
}
public function batchUpdateItemsStatus(Request $request)
{
$this->dictionaryService->batchUpdateItemsStatus(
$request->input('ids', []),
$request->input('status', true)
);
return response()->json([
'code' => 200,
'message' => '批量更新状态成功',
'data' => null
]);
}
}

View File

@@ -0,0 +1,126 @@
<?php
namespace App\Http\Controllers\System\Admin;
use App\Http\Controllers\Controller;
use App\Http\Requests\LogRequest;
use App\Services\System\LogService;
use Maatwebsite\Excel\Facades\Excel;
use App\Exports\GenericExport;
class Log extends Controller
{
protected $logService;
public function __construct(LogService $logService)
{
$this->logService = $logService;
}
public function index(LogRequest $request)
{
$result = $this->logService->getList($request->validated());
return response()->json([
'code' => 200,
'message' => 'success',
'data' => $result
]);
}
public function export(LogRequest $request)
{
$params = $request->validated();
$pageSize = $params['page_size'] ?? 10000; // 导出时默认获取更多数据
// 获取所有符合条件的日志(不分页)
$query = $this->logService->getListQuery($params);
$logs = $query->limit($pageSize)->get();
// 准备导出数据
$headers = [
'ID', '用户名', '模块', '操作', '请求方法', 'URL', 'IP地址',
'状态码', '状态', '错误信息', '执行时间(ms)', '创建时间'
];
$data = [];
foreach ($logs as $log) {
$data[] = [
$log->id,
$log->username,
$log->module,
$log->action,
$log->method,
$log->url,
$log->ip,
$log->status_code,
$log->status === 'success' ? '成功' : '失败',
$log->error_message ?? '-',
$log->execution_time,
$log->created_at->format('Y-m-d H:i:s'),
];
}
$filename = '系统操作日志_' . date('YmdHis') . '.xlsx';
return Excel::download(new GenericExport($headers, $data), $filename);
}
public function show(int $id)
{
$log = $this->logService->getById($id);
if (!$log) {
return response()->json([
'code' => 404,
'message' => '日志不存在',
'data' => null
], 404);
}
return response()->json([
'code' => 200,
'message' => 'success',
'data' => $log
]);
}
public function destroy(int $id)
{
$this->logService->delete($id);
return response()->json([
'code' => 200,
'message' => '删除成功',
'data' => null
]);
}
public function batchDelete(Request $request)
{
$this->logService->batchDelete($request->input('ids', []));
return response()->json([
'code' => 200,
'message' => '批量删除成功',
'data' => null
]);
}
public function clearLogs(Request $request)
{
$days = $request->input('days', 30);
$this->logService->clearLogs($days);
return response()->json([
'code' => 200,
'message' => '清理成功',
'data' => null
]);
}
public function getStatistics(LogRequest $request)
{
$statistics = $this->logService->getStatistics($request->validated());
return response()->json([
'code' => 200,
'message' => 'success',
'data' => $statistics
]);
}
}

View File

@@ -0,0 +1,152 @@
<?php
namespace App\Http\Controllers\System\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Services\System\TaskService;
class Task extends Controller
{
protected $taskService;
public function __construct(TaskService $taskService)
{
$this->taskService = $taskService;
}
public function index(Request $request)
{
$result = $this->taskService->getList($request->all());
return response()->json([
'code' => 200,
'message' => 'success',
'data' => $result
]);
}
public function all()
{
$tasks = $this->taskService->getAll();
return response()->json([
'code' => 200,
'message' => 'success',
'data' => $tasks
]);
}
public function show(int $id)
{
$task = $this->taskService->getById($id);
if (!$task) {
return response()->json([
'code' => 404,
'message' => '任务不存在',
'data' => null
], 404);
}
return response()->json([
'code' => 200,
'message' => 'success',
'data' => $task
]);
}
public function store(Request $request)
{
try {
$task = $this->taskService->create($request->all());
return response()->json([
'code' => 200,
'message' => '创建成功',
'data' => $task
], 201);
} catch (\Exception $e) {
return response()->json([
'code' => 422,
'message' => $e->getMessage(),
'data' => null
], 422);
}
}
public function update(Request $request, int $id)
{
try {
$task = $this->taskService->update($id, $request->all());
return response()->json([
'code' => 200,
'message' => '更新成功',
'data' => $task
]);
} catch (\Exception $e) {
return response()->json([
'code' => 422,
'message' => $e->getMessage(),
'data' => null
], 422);
}
}
public function destroy(int $id)
{
$this->taskService->delete($id);
return response()->json([
'code' => 200,
'message' => '删除成功',
'data' => null
]);
}
public function batchDelete(Request $request)
{
$this->taskService->batchDelete($request->input('ids', []));
return response()->json([
'code' => 200,
'message' => '批量删除成功',
'data' => null
]);
}
public function batchUpdateStatus(Request $request)
{
$this->taskService->batchUpdateStatus(
$request->input('ids', []),
$request->input('status', true)
);
return response()->json([
'code' => 200,
'message' => '批量更新状态成功',
'data' => null
]);
}
public function run(int $id)
{
try {
$result = $this->taskService->run($id);
return response()->json([
'code' => 200,
'message' => '执行成功',
'data' => $result
]);
} catch (\Exception $e) {
return response()->json([
'code' => 400,
'message' => $e->getMessage(),
'data' => null
], 400);
}
}
public function getStatistics()
{
$statistics = $this->taskService->getStatistics();
return response()->json([
'code' => 200,
'message' => 'success',
'data' => $statistics
]);
}
}

View File

@@ -0,0 +1,152 @@
<?php
namespace App\Http\Controllers\System\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Services\System\UploadService;
class Upload extends Controller
{
protected $uploadService;
public function __construct(UploadService $uploadService)
{
$this->uploadService = $uploadService;
}
public function upload(Request $request)
{
try {
$request->validate([
'file' => 'required|file|max:10240',
]);
$file = $request->file('file');
$directory = $request->input('directory', 'uploads');
$options = [
'compress' => $request->input('compress', false),
'quality' => $request->input('quality', 80),
'width' => $request->input('width'),
'height' => $request->input('height'),
];
$result = $this->uploadService->upload($file, $directory, $options);
return response()->json([
'code' => 200,
'message' => '上传成功',
'data' => $result
]);
} catch (\Exception $e) {
return response()->json([
'code' => 400,
'message' => $e->getMessage(),
'data' => null
], 400);
}
}
public function uploadMultiple(Request $request)
{
try {
$request->validate([
'files' => 'required|array',
'files.*' => 'file|max:10240',
]);
$files = $request->file('files');
$directory = $request->input('directory', 'uploads');
$options = [
'compress' => $request->input('compress', false),
'quality' => $request->input('quality', 80),
'width' => $request->input('width'),
'height' => $request->input('height'),
];
$results = $this->uploadService->uploadMultiple($files, $directory, $options);
return response()->json([
'code' => 200,
'message' => '上传成功',
'data' => $results
]);
} catch (\Exception $e) {
return response()->json([
'code' => 400,
'message' => $e->getMessage(),
'data' => null
], 400);
}
}
public function uploadBase64(Request $request)
{
try {
$request->validate([
'base64' => 'required|string',
]);
$base64 = $request->input('base64');
$directory = $request->input('directory', 'uploads');
$fileName = $request->input('file_name');
$result = $this->uploadService->uploadBase64($base64, $directory, $fileName);
return response()->json([
'code' => 200,
'message' => '上传成功',
'data' => $result
]);
} catch (\Exception $e) {
return response()->json([
'code' => 400,
'message' => $e->getMessage(),
'data' => null
], 400);
}
}
public function delete(Request $request)
{
try {
$request->validate([
'path' => 'required|string',
]);
$path = $request->input('path');
$this->uploadService->delete($path);
return response()->json([
'code' => 200,
'message' => '删除成功',
'data' => null
]);
} catch (\Exception $e) {
return response()->json([
'code' => 400,
'message' => $e->getMessage(),
'data' => null
], 400);
}
}
public function batchDelete(Request $request)
{
try {
$request->validate([
'paths' => 'required|array',
]);
$paths = $request->input('paths', []);
$this->uploadService->deleteMultiple($paths);
return response()->json([
'code' => 200,
'message' => '批量删除成功',
'data' => null
]);
} catch (\Exception $e) {
return response()->json([
'code' => 400,
'message' => $e->getMessage(),
'data' => null
], 400);
}
}
}