183 lines
5.4 KiB
PHP
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('设置失败');
|
|
}
|
|
}
|
|
|
|
}
|