115 lines
3.3 KiB
PHP
115 lines
3.3 KiB
PHP
<?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'));
|
|
}
|
|
}
|