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('设置失败'); } } }