You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

220 lines
6.3 KiB

<?php
namespace App\Http\Controllers\Admin;
use App\Admin;
use App\Forms\EmptyForm;
use App\Http\Controllers\Controller;
use App\Models\CommonModel;
use App\Models\Uploads;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
use Kris\LaravelFormBuilder\FormBuilder;
use Kris\LaravelFormBuilder\FormBuilderTrait;
class CommonController extends Controller
{
use FormBuilderTrait;
public $guardName = "admin";
public $urlPrefix;
public $bladePath;
public $modelName;
public $modelClass;
public $model;
public $formClass;
public function __construct()
{
view()->share([
"urlPrefix" => $this->urlPrefix,
"bladePath" => $this->bladePath,
"modelName" => $this->modelName,
"guardName" => $this->guardName
]);
if ($this->modelClass) {
$this->model = new $this->modelClass;
} else {
$this->model = new CommonModel();
}
if (!$this->formClass) {
$this->formClass = EmptyForm::class;
}
}
public function guard()
{
return auth()->guard($this->guardName);
}
public function guardName()
{
return $this->guardName;
}
public function callback($success = true, $msg = "", $url = "")
{
return view("public.callback", ["success" => $success, "msg" => $msg, "url" => $url, "timer" => 3]);
}
public function error($msg, $url = '', $data = false)
{
if (request()->ajax()) {
return $this->ajaxError($msg, $data);
}
return $this->callback(false, $msg, $url);
}
public function success($msg, $url = '', $data = false)
{
if (request()->ajax()) {
return $this->ajaxSuccess($msg, $data);
}
return $this->callback(true, $msg, $url);
}
public function ajaxResponse($response)
{
return response()->json($response);
}
public function ajaxSuccess($msg = "", $data = false)
{
$response = [
"msg" => $msg,
"status" => 1,
"data" => $data
];
return $this->ajaxResponse($response);
}
public function ajaxError($msg = "", $data = false)
{
$response = [
"msg" => $msg,
"status" => 0,
"data" => $data
];
return $this->ajaxResponse($response);
}
public function list(Request $request)
{
$data = $this->model->paginate(10);
return view($this->bladePath . ".index", compact("data"));
}
public function create(FormBuilder $formBuilder)
{
$form = $formBuilder->create($this->formClass, [
"method" => "POST",
"id" => "fm",
"url" => url($this->urlPrefix . "/store")
]);
return view($this->bladePath . ".create", compact("form"));
}
public function store(Request $request)
{
try {
$data = (new CommonModel())->setTable($this->model->getTable())->filterRequestColumns($request, ["id"]);
$model = $this->model->create($data);
$this->stored($model);
$url = $request->_previous ? $request->_previous : url($this->urlPrefix);
return $this->success("新增成功", $url, $model);
} catch (\Exception $exception) {
return $this->error("新增失败:" . $exception->getMessage());
}
}
public function stored($model)
{
//
}
public function edit($id = null, Request $request, FormBuilder $formBuilder)
{
$vo = $this->model->find($id ?: $request->id);
$form = $formBuilder->create($this->formClass, [
"method" => "POST",
"id" => "fm",
"url" => url($this->urlPrefix . "/update/" . $vo->id),
"class" => "form form-horizontal validate-form",
"model" => $vo
]);
$form->add("_previous", "hidden", ["value" => (url()->previous())]);
return view($this->bladePath . ".create", compact("form"));
}
public function update($id = null, Request $request)
{
try {
$data = (new CommonModel())->setTable($this->model->getTable())->filterRequestColumns($request, ["id"]);
$model = $this->model->find($id ?: $request->id);
$model->update($data);
$this->updated($model);
$url = $request->_previous ? $request->_previous : url($this->urlPrefix);
return $this->success("修改成功", $url, $model);
} catch (\Exception $exception) {
return $this->error("修改失败:" . $exception->getMessage());
}
}
public function updated($model)
{
//
}
public function delete(Request $request)
{
try {
$model = $this->model->find($request->id);
$model->delete();
$this->deleted($model);
return $this->success("删除成功");
} catch (\Exception $exception) {
return $this->error("删除失败:" . $exception->getMessage());
}
}
public function deleted($model)
{
//
}
public function upload(Request $request)
{
$file = $request->file("file");
$original_name = $file->getClientOriginalName();
$extension = last(explode(".", $original_name));
if (!in_array($extension, ["mp4","jpg", "jpeg", "gif", "png", "bmp", "pdf", "ppt", "pptx", "doc", "docx", "xls", "xlsx", "zip", "rar"])) {
return response('不正确的文件格式', 403);
}
$save_folder = $request->folder ? $request->folder : "public";
if (!is_dir(Storage::path($save_folder))) {
Storage::makeDirectory($save_folder);
}
$name = uniqid() . "." . $extension;
$store_result = $file->storeAs($save_folder, $name);
$upload = new Uploads();
$upload->original_name = $original_name;
$upload->folder = $save_folder;
$upload->name = $name;
$upload->extension = $extension;
$upload->creator_type = get_class(Auth::guard("admin")->user());
$upload->creator_id = Auth::guard("admin")->id();
$upload->size = Storage::size($save_folder . "/" . $name);
$upload->save();
return $this->ajaxResponse($upload);
}
}