0
0
Files
Babyclass/app/Admin/Controllers/AreaController.php
2020-08-04 10:09:42 +08:00

183 lines
5.4 KiB
PHP

<?php
namespace App\Admin\Controllers;
use Illuminate\Http\Request;
use RuLong\Area\Models\OpenArea;
use Validator;
class AreaController extends Controller
{
public function index(Request $request)
{
$info = $request->info;
$type = $request->type;
$status = $request->status;
$psn = $request->psn;
$numPerPage = $request->numPerPage ?: 30;
$areas = OpenArea::when($info, function ($query) use ($info) {
$query->where('info', 'like', "%{$info}%");
})->when($type, function ($query) use ($type) {
$query->where('type', $type);
})->when(is_numeric($status), function ($query) use ($status) {
$query->where('status', $status);
})->when($psn, function ($query) use ($psn) {
$query->where('psn', $psn);
})->orderBy('sn', 'asc')->whereNotNull('psn')->paginate($numPerPage);
$list = OpenArea::treeShow();
return view('Admin::areas.index', compact('areas', 'list'));
}
public function create(Request $request)
{
$list = OpenArea::treeShow();
return view('Admin::areas.create', compact('list'));
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required|min:2|max:50',
'psn' => 'required',
], [
'name.required' => '名称必须填写',
'name.min' => '名称最少为:min字符',
'name.max' => '名称最多为:max字符',
'psn.required' => '所属必须选择',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
$name = $request->name;
$psn = $request->psn;
$status = $request->status;
$parent = OpenArea::where('sn', $request->psn)->first();
$last = OpenArea::where('psn', $parent->sn)->orderBy('sn', 'desc')->first();
if ($last) {
$sn = $last->sn + 1;
} else {
$sn = $parent->sn + 1;
}
$data = [
'sn' => $sn,
'psn' => $parent->sn,
'province' => $parent->province,
'city' => $parent->city,
'area' => $name,
'name' => $name,
'shortname' => $request->name,
'info' => $parent->info . ',' . $name,
'shortinfo' => $parent->shortinfo . ',' . $name,
'type' => '县级',
'depth' => 3,
'zone' => '',
'zip' => '',
'cnname' => '',
'enname' => '',
'name_first_char' => '',
'center' => '',
'lng' => '',
'lat' => '',
'status' => $status,
];
if (OpenArea::create($data)) {
return $this->success('', 'close');
} else {
return $this->error();
}
}
public function edit(OpenArea $area)
{
$list = OpenArea::treeShow();
return view('Admin::areas.edit', compact('area', 'list'));
}
public function update(Request $request, OpenArea $area)
{
$validator = Validator::make($request->all(), [
'name' => 'required|min:2|max:50',
'psn' => 'required',
], [
'name.required' => '名称必须填写',
'name.min' => '名称最少为:min字符',
'name.max' => '名称最多为:max字符',
'psn.required' => '所属必须选择',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
$name = $request->name;
$psn = $request->psn;
$status = $request->status;
$parent = OpenArea::where('sn', $request->psn)->first();
$data = [
'area' => $name,
'name' => $name,
'shortname' => $name,
'info' => $parent->info . ',' . $name,
'shortinfo' => $parent->shortinfo . ',' . $name,
'status' => $status,
];
if ($area->update($request->all())) {
return $this->success('', 'close');
} else {
return $this->error();
}
}
public function open(Request $request, OpenArea $area)
{
$status = $request->status;
$info = OpenArea::when($area, function ($query) use ($area) {
switch ($area->depth) {
case 1:
$query->where('province', $area->name);
break;
case 2:
$query->where('city', $area->name);
break;
case 3:
$query->where('area', $area->name);
break;
}
})->update(['status' => $status]);
if ($info) {
return $this->success('设置成功');
} else {
return $this->error('设置失败');
}
}
public function hot(Request $request, OpenArea $area)
{
if ($area->update($request->all())) {
return $this->success('设置成功');
} else {
return $this->error('设置失败');
}
}
}