提交代码
This commit is contained in:
114
app/Http/Controllers/LocationController.php
Normal file
114
app/Http/Controllers/LocationController.php
Normal file
@@ -0,0 +1,114 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use GuzzleHttp\Client;
|
||||
use Illuminate\Http\Request;
|
||||
use RuLong\Area\Models\Area;
|
||||
use Session;
|
||||
|
||||
class LocationController extends Controller
|
||||
{
|
||||
public function __construct(Request $request)
|
||||
{
|
||||
view()->share('nav', 2);
|
||||
|
||||
}
|
||||
|
||||
//自动设置默认地区
|
||||
public function setLocation(Request $request)
|
||||
{
|
||||
$lat = $request->lat;
|
||||
$lng = $request->lng;
|
||||
|
||||
if (!$lat || !$lng) {
|
||||
return $this->error('设置失败');
|
||||
}
|
||||
|
||||
$location = $this->getDefaultLocation();
|
||||
|
||||
if (!$location['real_area']) {
|
||||
$url = "http://api.map.baidu.com/geocoder";
|
||||
$client = new Client();
|
||||
$response = $client->request('GET', $url, [
|
||||
'timeout' => 30,
|
||||
'query' => [
|
||||
'location' => $lat . "," . $lng,
|
||||
'output' => 'json',
|
||||
],
|
||||
]);
|
||||
|
||||
if ($response->getStatusCode() == 200) {
|
||||
$data = json_decode($response->getBody()->getContents(), true);
|
||||
$city = $data['result']['addressComponent']['city'];
|
||||
} else {
|
||||
return $this->location($url);
|
||||
}
|
||||
$area = Area::where('name', $city)->first();
|
||||
|
||||
//如果地址没有开通,默认哈尔滨
|
||||
if ($area->status != 1) {
|
||||
$area = Area::where('sn', '230100')->first();
|
||||
$lat = $area->lat;
|
||||
$lng = $area->lng;
|
||||
}
|
||||
|
||||
Session::put('lat', $lat);
|
||||
Session::put('lng', $lng);
|
||||
Session::put('area', $area);
|
||||
Session::put('real_area', $area);
|
||||
return $this->success($city);
|
||||
} else {
|
||||
Session::put('lat', $lat);
|
||||
Session::put('lng', $lng);
|
||||
return $this->error(json_encode($location));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//设置地区
|
||||
public function setArea(Request $request)
|
||||
{
|
||||
$area_id = $request->area_id;
|
||||
if ($area_id) {
|
||||
$area = Area::find($area_id);
|
||||
} else {
|
||||
$area = [
|
||||
"id" => 0,
|
||||
"sn" => 0,
|
||||
"psn" => 0,
|
||||
"province" => "全国",
|
||||
"city" => "全国",
|
||||
"area" => "",
|
||||
"name" => "全国",
|
||||
];
|
||||
$area = (object) $area;
|
||||
}
|
||||
|
||||
session(['area' => $area]);
|
||||
$url = route('pick.lists');
|
||||
$callback = session('address_callback', '');
|
||||
if ($callback) {
|
||||
$url = $callback;
|
||||
}
|
||||
return $this->success('设置成功', $url);
|
||||
}
|
||||
|
||||
//设置城市
|
||||
public function address(Request $request)
|
||||
{
|
||||
$name = $request->name ?? '';
|
||||
$callback = $request->callback ?? '';
|
||||
if ($callback) {
|
||||
session(['address_callback' => $callback]);
|
||||
}
|
||||
$location = $this->getDefaultLocation();
|
||||
if (empty($name)) {
|
||||
$addresses = Area::where('psn', 0)->get();
|
||||
} else {
|
||||
$addresses = Area::where('name', 'like', "%{$name}%")->where('type', '地级')->get();
|
||||
}
|
||||
$hots = Area::where('hot', 1)->get();
|
||||
return view('location.address', compact('addresses', 'location', 'hots', 'name'));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user