Browse Source

抢单页面blade版

master
李可松 4 years ago
parent
commit
9412a221b7
  1. 4
      app/Admin/Controllers/ImsCjdcOrderMainController.php
  2. 61
      app/Http/Controllers/GrabOrderController.php
  3. 53
      app/Http/Middleware/WechatAuth.php
  4. 86
      resources/views/web/grab_order.blade.php
  5. 6
      routes/web.php

4
app/Admin/Controllers/ImsCjdcOrderMainController.php

@ -114,8 +114,8 @@ class ImsCjdcOrderMainController extends AdminController
$actions->append(new CheckRow($actions->row->id, $grid->model()->getCurrentPage(), '<div type="button" class="btn btn-outline-info btn-sm">配送</div>')); $actions->append(new CheckRow($actions->row->id, $grid->model()->getCurrentPage(), '<div type="button" class="btn btn-outline-info btn-sm">配送</div>'));
$actions->append(new OrderStateHandle('<div type="button" class="btn btn-outline-warning btn-sm">取消接单</div>', 2)); $actions->append(new OrderStateHandle('<div type="button" class="btn btn-outline-warning btn-sm">取消接单</div>', 2));
} }
$url = config('app.url') . '/grab.html#order&amp;id=837023';
$actions->append('<div type="button" class="btn btn-sm grid-column-copyable" data-original-title="复制成功" data-content="'.$url.'">复制</div>');
$url = route('grab_order', ['id' => $this->id]);
$actions->append('<div type="button" class="btn btn-sm grid-column-copyable" data-original-title="复制成功" data-content="'.$url.'">抢单链接</div>');
} elseif ($state == 8) { } elseif ($state == 8) {
$actions->append(new OrderStateHandle('<div type="button" class="btn btn-outline-secondary btn-sm">同意</div>', 9)); $actions->append(new OrderStateHandle('<div type="button" class="btn btn-outline-secondary btn-sm">同意</div>', 9));
$actions->append(new OrderRefund($actions->row->id, $grid->model()->getCurrentPage(), '<div type="button" class="btn btn-outline-secondary btn-sm">拒绝</div>')); $actions->append(new OrderRefund($actions->row->id, $grid->model()->getCurrentPage(), '<div type="button" class="btn btn-outline-secondary btn-sm">拒绝</div>'));

61
app/Http/Controllers/GrabOrderController.php

@ -8,7 +8,6 @@ use App\Models\v3\LanzuEmployees;
use App\Models\v3\User; use App\Models\v3\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Redis;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
/** /**
@ -20,17 +19,59 @@ class GrabOrderController extends Controller
public function index(Request $request) public function index(Request $request)
{ {
$id = (int)$request->route('id');
if (!$id || !$order = ImsCjdcOrderMain::find($id)) {
return self::error('唉呀,来晚啦,订单已经被接走啦~~~');
try {
$user = $request->user();
$id = $request->route('id');
$fields = ['id', 'order_num', 'refund_time', 'complete_time', 'money', 'tel', 'name', 'address', 'note', 'area',
'lat', 'lng', 'pay_type', 'order_type', 'market_id', 'total_money', 'created_at', 'pay_time'];
if (!$id || !$order = ImsCjdcOrderMain::where('state', 3)->find($id, $fields)) {
throw new \Exception('唉呀,来晚啦,订单已经被接走啦~~~');
}
} catch (\Exception $exception) {
$error_msg = $exception->getMessage();
} }
/*$order = ImsCjdcOrderMain::with(['market:id,name'])
->where([['state', '=', 2], ['pay_time', '>', 0]])
->orderBy('pay_time')->orderByDesc('id')
->limit(15)->get();*/
return view('web.grab_order', [
'error_msg' => $error_msg ?? null,
'user' => $user ?? null,
'order' => $order ?? [],
]);
}
/**
* blade模板抢单
*/
public function grabOrderPost(Request $request): JsonResponse
{
$id = $request->route('id');
/** @var User $user */
$user = session('wechat_user');
try {
$employee = LanzuEmployees::where(['user_id' => $user->id, 'status' => 1])->orderByDesc('id')->first();
if (!$employee || !in_array(29, $employee->position)) { //29是骑手,见:config("role.position")
throw new \Exception("您还不是骑手,请联系管理员增加骑手权限");
}
return view('web.grab_order', ['order_list' => $order ?? []]);
$order = ImsCjdcOrderMain::where('id', $id)->first();
if (!$order) {
throw new \Exception('订单跑丢了~~');
} else if ($order->state != 3) {
throw new \Exception('您来晚啦,订单已经被人接走啦~~');
}
$SelectHorseman = new \App\Admin\Forms\SelectHorseman;
$result = $SelectHorseman->selectHorseman(['horseman_id' => $employee->id, 'order_id' => $order->id]);
if (!$result) {
throw new \Exception('服务器开小差,抢单失败~');
}
return self::success('抢单成功,已消息通知客户,请尽快配送');
} catch (\Exception $exception) {
return self::error($exception->getMessage());
}
} }
/** /**
@ -65,7 +106,7 @@ class GrabOrderController extends Controller
throw new \Exception('用户信息不存在'); throw new \Exception('用户信息不存在');
} }
$employee = LanzuEmployees::where(['user_id' => $user->id, 'name' => $formData['name']])->orderByDesc('id')->first();
$employee = LanzuEmployees::where(['user_id' => $user->id, 'name' => $formData['name'], 'status' => 1])->orderByDesc('id')->first();
if (!$employee || !in_array(29, $employee->position)) { //29是骑手,见:config("role.position") if (!$employee || !in_array(29, $employee->position)) { //29是骑手,见:config("role.position")
throw new \Exception("您还不是骑手,请联系管理员增加骑手权限"); throw new \Exception("您还不是骑手,请联系管理员增加骑手权限");
} }

53
app/Http/Middleware/WechatAuth.php

@ -0,0 +1,53 @@
<?php
namespace App\Http\Middleware;
use App\Models\v3\User;
use Closure;
use EasyWeChat\Factory;
use Exception;
use Illuminate\Http\Request;
class WechatAuth
{
/**
* Handle an incoming request.
*
* @param Request $request
* @param Closure $next
* @return mixed
* @throws Exception
*/
public function handle(Request $request, Closure $next)
{
$sessionKey = 'wechat_user';
$user = $request->session()->get($sessionKey);
if (!$user) {
$config = config('wechat.official_account.default');
$app = Factory::officialAccount($config);
$code = $request->input('code');
if (empty($code)) {
return $app->oauth->scopes(['snsapi_userinfo'])->redirect($request->url());
} else {
$wechatUser = $app->oauth->user();
if (!$wechatUser) {
throw new \Exception('获取用户信息失败');
} else if (empty($user->unionid)) {
# TODO 调试unionid
if (config('app.debug') && $request->server('REMOTE_ADDR') == '127.0.0.1') {
$wechatUser['unionid'] = 'onhl355f-ofX5e0-4I4vn0bswVPM';
} else
throw new Exception('获取UnionId失败');
}
}
$user = User::where('unionid', $wechatUser->unionid)->first();
if (!$user) {
throw new Exception('您的账号未在小程序上登录过,获取用户信息失败');
}
$request->session()->put($sessionKey, $user);
}
return $next($request);
}
}

86
resources/views/web/grab_order.blade.php

@ -5,9 +5,93 @@
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge"> <meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>抢单大厅</title> <title>抢单大厅</title>
<script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
<script type="text/javascript">
(function (doc, win) {
var docEl = doc.documentElement,
resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
recalc = function () {
var clientWidth = docEl.clientWidth;
if (!clientWidth) return;
docEl.style.fontSize = 100 * (clientWidth / 750) + 'px';
};
if (!doc.addEventListener) return;
win.addEventListener(resizeEvt, recalc, false);
doc.addEventListener('DOMContentLoaded', recalc, false);
})(document, window);
</script>
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<style>
*{margin:0;padding:0;}
body {
font-size: .28rem;
padding: .2rem;
}
#grab {
width: 2.4rem;
padding: 1.2rem 0;
line-height: 0;
display: block;
margin: .5rem auto .7rem;
border: 0;
border-radius: 50%;
background-color: #009bed;
color: #fff;
font-size: .36rem;
outline: 0;
}
.order-info {
font-size: .3rem;
}
.order-info li {
margin: .2rem 0;
}
h2#error {
font-size: .36rem;
color: #f00;
text-align: center;
}
h2#error:before {
content: '😭';
display: block;
font-size: 2rem;
line-height: 2;
margin: 1rem auto .8rem;
}
</style>
</head> </head>
<body> <body>
@if($error_msg)
<h2 id="error">{{ $error_msg }}</h2>
@else
<button id="grab">立即抢单</button>
@endif
@php($pay_type = [1 => '微信支付', 2 => '余额支付', 3 => '积分支付', 4 => '货到付款'])
@if($order)
<ul class="order-info">
<li><b>订单编号:</b>{{ $order->order_num }}</li>
<li><b>客户姓名:</b>{{ $order->name }}</li>
<li><b>客户电话:</b>{{ substr_replace($order->tel, '****', 3, 4) }}</li>
<li><b>客户地址:</b>{{ $order->address }}</li>
<li><b>订单备注:</b>{{ $order->note }}</li>
<li><b>付款金额:</b>{{ $order->money }}</li>
<li><b>订单金额:</b>{{ $order->total_money }}(不含配送费)</li>
<li><b>支付方式:</b>{{ $pay_type[$order->pay_type] ?? '' }}</li>
<li><b>下单时间:</b>{{ date('Y-m-d H:i:s', $order->created_at) }}</li>
<li><b>付款时间:</b>{{ $order->pay_time ? date('Y-m-d H:i:s', $order->pay_time) : '' }}</li>
</ul>
<script>
$(function () {
$('#grab').click(function () {
$.post('{{ request()->url() }}', {
_token: '{{ csrf_token() }}',
}, function (res) {
alert(res.message);
});
});
})
</script>
@endif
</body> </body>
</html> </html>

6
routes/web.php

@ -1,6 +1,7 @@
<?php <?php
use App\Http\Controllers\GrabOrderController; use App\Http\Controllers\GrabOrderController;
use App\Http\Middleware\WechatAuth;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
/* /*
@ -18,6 +19,11 @@ Route::get('/', function () {
return redirect('admin'); return redirect('admin');
}); });
Route::middleware(WechatAuth::class)->group(function () {
Route::get('grab_order/{id}', [GrabOrderController::class, 'index'])->where(['id' => '\d+'])->name('grab_order');
Route::post('grab_order/{id}', [GrabOrderController::class, 'grabOrderPost'])->where(['id' => '\d+']);
});
Route::get('/test', 'TestController@Test'); Route::get('/test', 'TestController@Test');
Route::get('/export', 'TestController@export'); Route::get('/export', 'TestController@export');
Route::any('/rpc', 'TestController@testRpc'); Route::any('/rpc', 'TestController@testRpc');

Loading…
Cancel
Save