正在显示
7 个修改的文件
包含
83 行增加
和
50 行删除
@@ -51,17 +51,17 @@ class Car extends Backend | @@ -51,17 +51,17 @@ class Car extends Backend | ||
51 | list($where, $sort, $order, $offset, $limit) = $this->buildparams(); | 51 | list($where, $sort, $order, $offset, $limit) = $this->buildparams(); |
52 | 52 | ||
53 | $list = $this->model | 53 | $list = $this->model |
54 | - ->with(['route','driver']) | 54 | + ->with(['driver','route']) |
55 | ->where($where) | 55 | ->where($where) |
56 | ->order($sort, $order) | 56 | ->order($sort, $order) |
57 | ->paginate($limit); | 57 | ->paginate($limit); |
58 | 58 | ||
59 | foreach ($list as $row) { | 59 | foreach ($list as $row) { |
60 | - $row->visible(['id','car_model','reservation_time','license_plate','seat','colour','driver_license_img','driving_license_img','start_time','create_time']); | ||
61 | - $row->visible(['route']); | ||
62 | - $row->getRelation('route')->visible(['name']); | ||
63 | - $row->visible(['driver']); | 60 | + $row->visible(['id','car_model','license_plate','seat','colour','driver_license_img','driving_license_img','reservation_time','start_time','create_time']); |
61 | + $row->visible(['driver']); | ||
64 | $row->getRelation('driver')->visible(['name']); | 62 | $row->getRelation('driver')->visible(['name']); |
63 | + $row->visible(['route']); | ||
64 | + $row->getRelation('route')->visible(['name']); | ||
65 | } | 65 | } |
66 | 66 | ||
67 | $result = array("total" => $list->total(), "rows" => $list->items()); | 67 | $result = array("total" => $list->total(), "rows" => $list->items()); |
@@ -13,6 +13,6 @@ return [ | @@ -13,6 +13,6 @@ return [ | ||
13 | 'Reservation_time' => '预约时间', | 13 | 'Reservation_time' => '预约时间', |
14 | 'Start_time' => '发车时间', | 14 | 'Start_time' => '发车时间', |
15 | 'Create_time' => '创建时间', | 15 | 'Create_time' => '创建时间', |
16 | - 'Route.name' => '线路名称', | ||
17 | - 'Driver.name' => '司机名称' | 16 | + 'Driver.name' => '司机名称', |
17 | + 'Route.name' => '线路名称' | ||
18 | ]; | 18 | ]; |
@@ -25,6 +25,7 @@ class Car extends Model | @@ -25,6 +25,7 @@ class Car extends Model | ||
25 | 25 | ||
26 | // 追加属性 | 26 | // 追加属性 |
27 | protected $append = [ | 27 | protected $append = [ |
28 | + 'reservation_time_text', | ||
28 | 'start_time_text', | 29 | 'start_time_text', |
29 | 'create_time_text' | 30 | 'create_time_text' |
30 | ]; | 31 | ]; |
@@ -34,6 +35,13 @@ class Car extends Model | @@ -34,6 +35,13 @@ class Car extends Model | ||
34 | 35 | ||
35 | 36 | ||
36 | 37 | ||
38 | + public function getReservationTimeTextAttr($value, $data) | ||
39 | + { | ||
40 | + $value = $value ? $value : (isset($data['reservation_time']) ? $data['reservation_time'] : ''); | ||
41 | + return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value; | ||
42 | + } | ||
43 | + | ||
44 | + | ||
37 | public function getStartTimeTextAttr($value, $data) | 45 | public function getStartTimeTextAttr($value, $data) |
38 | { | 46 | { |
39 | $value = $value ? $value : (isset($data['start_time']) ? $data['start_time'] : ''); | 47 | $value = $value ? $value : (isset($data['start_time']) ? $data['start_time'] : ''); |
@@ -47,6 +55,11 @@ class Car extends Model | @@ -47,6 +55,11 @@ class Car extends Model | ||
47 | return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value; | 55 | return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value; |
48 | } | 56 | } |
49 | 57 | ||
58 | + protected function setReservationTimeAttr($value) | ||
59 | + { | ||
60 | + return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value); | ||
61 | + } | ||
62 | + | ||
50 | protected function setStartTimeAttr($value) | 63 | protected function setStartTimeAttr($value) |
51 | { | 64 | { |
52 | return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value); | 65 | return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value); |
@@ -58,14 +71,14 @@ class Car extends Model | @@ -58,14 +71,14 @@ class Car extends Model | ||
58 | } | 71 | } |
59 | 72 | ||
60 | 73 | ||
61 | - public function route() | 74 | + public function driver() |
62 | { | 75 | { |
63 | - return $this->belongsTo('Route', 'route_id', 'id', [], 'LEFT')->setEagerlyType(0); | 76 | + return $this->belongsTo('Driver', 'driver_id', 'id', [], 'LEFT')->setEagerlyType(0); |
64 | } | 77 | } |
65 | 78 | ||
66 | 79 | ||
67 | - public function driver() | 80 | + public function route() |
68 | { | 81 | { |
69 | - return $this->belongsTo('Driver', 'driver_id', 'id', [], 'LEFT')->setEagerlyType(0); | 82 | + return $this->belongsTo('Route', 'route_id', 'id', [], 'LEFT')->setEagerlyType(0); |
70 | } | 83 | } |
71 | } | 84 | } |
@@ -39,29 +39,13 @@ | @@ -39,29 +39,13 @@ | ||
39 | <div class="form-group"> | 39 | <div class="form-group"> |
40 | <label class="control-label col-xs-12 col-sm-2">{:__('Driver_license_img')}:</label> | 40 | <label class="control-label col-xs-12 col-sm-2">{:__('Driver_license_img')}:</label> |
41 | <div class="col-xs-12 col-sm-8"> | 41 | <div class="col-xs-12 col-sm-8"> |
42 | - <div class="input-group"> | ||
43 | - <input id="c-driver_license_img" class="form-control" size="50" name="row[driver_license_img]" type="text"> | ||
44 | - <div class="input-group-addon no-border no-padding"> | ||
45 | - <span><button type="button" id="faupload-driver_license_img" class="btn btn-danger faupload" data-input-id="c-driver_license_img" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp,image/webp" data-multiple="false" data-preview-id="p-driver_license_img"><i class="fa fa-upload"></i> {:__('Upload')}</button></span> | ||
46 | - <span><button type="button" id="fachoose-driver_license_img" class="btn btn-primary fachoose" data-input-id="c-driver_license_img" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span> | ||
47 | - </div> | ||
48 | - <span class="msg-box n-right" for="c-driver_license_img"></span> | ||
49 | - </div> | ||
50 | - <ul class="row list-inline faupload-preview" id="p-driver_license_img"></ul> | 42 | + <input id="c-driver_license_img" class="form-control" name="row[driver_license_img]" type="text"> |
51 | </div> | 43 | </div> |
52 | </div> | 44 | </div> |
53 | <div class="form-group"> | 45 | <div class="form-group"> |
54 | <label class="control-label col-xs-12 col-sm-2">{:__('Driving_license_img')}:</label> | 46 | <label class="control-label col-xs-12 col-sm-2">{:__('Driving_license_img')}:</label> |
55 | <div class="col-xs-12 col-sm-8"> | 47 | <div class="col-xs-12 col-sm-8"> |
56 | - <div class="input-group"> | ||
57 | - <input id="c-driving_license_img" class="form-control" size="50" name="row[driving_license_img]" type="text"> | ||
58 | - <div class="input-group-addon no-border no-padding"> | ||
59 | - <span><button type="button" id="faupload-driving_license_img" class="btn btn-danger faupload" data-input-id="c-driving_license_img" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp,image/webp" data-multiple="false" data-preview-id="p-driving_license_img"><i class="fa fa-upload"></i> {:__('Upload')}</button></span> | ||
60 | - <span><button type="button" id="fachoose-driving_license_img" class="btn btn-primary fachoose" data-input-id="c-driving_license_img" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span> | ||
61 | - </div> | ||
62 | - <span class="msg-box n-right" for="c-driving_license_img"></span> | ||
63 | - </div> | ||
64 | - <ul class="row list-inline faupload-preview" id="p-driving_license_img"></ul> | 48 | + <input id="c-driving_license_img" class="form-control" name="row[driving_license_img]" type="text"> |
65 | </div> | 49 | </div> |
66 | </div> | 50 | </div> |
67 | <div class="form-group"> | 51 | <div class="form-group"> |
@@ -73,7 +57,7 @@ | @@ -73,7 +57,7 @@ | ||
73 | <div class="form-group"> | 57 | <div class="form-group"> |
74 | <label class="control-label col-xs-12 col-sm-2">{:__('Start_time')}:</label> | 58 | <label class="control-label col-xs-12 col-sm-2">{:__('Start_time')}:</label> |
75 | <div class="col-xs-12 col-sm-8"> | 59 | <div class="col-xs-12 col-sm-8"> |
76 | - <input id="c-start_time" class="form-control datetimepicker" data-date-format="HH:mm" data-use-current="true" name="row[start_time]" type="text" value="{:date('H:i')}"> | 60 | + <input id="c-start_time" class="form-control datetimepicker" data-date-format=" HH:mm" data-use-current="true" name="row[start_time]" type="text" value="{:date('H:i')}"> |
77 | </div> | 61 | </div> |
78 | </div> | 62 | </div> |
79 | <div class="form-group"> | 63 | <div class="form-group"> |
@@ -39,29 +39,13 @@ | @@ -39,29 +39,13 @@ | ||
39 | <div class="form-group"> | 39 | <div class="form-group"> |
40 | <label class="control-label col-xs-12 col-sm-2">{:__('Driver_license_img')}:</label> | 40 | <label class="control-label col-xs-12 col-sm-2">{:__('Driver_license_img')}:</label> |
41 | <div class="col-xs-12 col-sm-8"> | 41 | <div class="col-xs-12 col-sm-8"> |
42 | - <div class="input-group"> | ||
43 | - <input id="c-driver_license_img" class="form-control" size="50" name="row[driver_license_img]" type="text" value="{$row.driver_license_img|htmlentities}"> | ||
44 | - <div class="input-group-addon no-border no-padding"> | ||
45 | - <span><button type="button" id="faupload-driver_license_img" class="btn btn-danger faupload" data-input-id="c-driver_license_img" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp,image/webp" data-multiple="false" data-preview-id="p-driver_license_img"><i class="fa fa-upload"></i> {:__('Upload')}</button></span> | ||
46 | - <span><button type="button" id="fachoose-driver_license_img" class="btn btn-primary fachoose" data-input-id="c-driver_license_img" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span> | ||
47 | - </div> | ||
48 | - <span class="msg-box n-right" for="c-driver_license_img"></span> | ||
49 | - </div> | ||
50 | - <ul class="row list-inline faupload-preview" id="p-driver_license_img"></ul> | 42 | + <input id="c-driver_license_img" class="form-control" name="row[driver_license_img]" type="text" value="{$row.driver_license_img|htmlentities}"> |
51 | </div> | 43 | </div> |
52 | </div> | 44 | </div> |
53 | <div class="form-group"> | 45 | <div class="form-group"> |
54 | <label class="control-label col-xs-12 col-sm-2">{:__('Driving_license_img')}:</label> | 46 | <label class="control-label col-xs-12 col-sm-2">{:__('Driving_license_img')}:</label> |
55 | <div class="col-xs-12 col-sm-8"> | 47 | <div class="col-xs-12 col-sm-8"> |
56 | - <div class="input-group"> | ||
57 | - <input id="c-driving_license_img" class="form-control" size="50" name="row[driving_license_img]" type="text" value="{$row.driving_license_img|htmlentities}"> | ||
58 | - <div class="input-group-addon no-border no-padding"> | ||
59 | - <span><button type="button" id="faupload-driving_license_img" class="btn btn-danger faupload" data-input-id="c-driving_license_img" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp,image/webp" data-multiple="false" data-preview-id="p-driving_license_img"><i class="fa fa-upload"></i> {:__('Upload')}</button></span> | ||
60 | - <span><button type="button" id="fachoose-driving_license_img" class="btn btn-primary fachoose" data-input-id="c-driving_license_img" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span> | ||
61 | - </div> | ||
62 | - <span class="msg-box n-right" for="c-driving_license_img"></span> | ||
63 | - </div> | ||
64 | - <ul class="row list-inline faupload-preview" id="p-driving_license_img"></ul> | 48 | + <input id="c-driving_license_img" class="form-control" name="row[driving_license_img]" type="text" value="{$row.driving_license_img|htmlentities}"> |
65 | </div> | 49 | </div> |
66 | </div> | 50 | </div> |
67 | <div class="form-group"> | 51 | <div class="form-group"> |
@@ -262,4 +262,55 @@ class Car extends Base | @@ -262,4 +262,55 @@ class Car extends Base | ||
262 | return $this->success($content); | 262 | return $this->success($content); |
263 | } | 263 | } |
264 | 264 | ||
265 | + /** | ||
266 | + * 退款接口 | ||
267 | + * @param $id | ||
268 | + * @return void | ||
269 | + * @throws \think\Exception | ||
270 | + * @throws \think\db\exception\DataNotFoundException | ||
271 | + * @throws \think\db\exception\ModelNotFoundException | ||
272 | + * @throws \think\exception\DbException | ||
273 | + * @throws \think\exception\PDOException | ||
274 | + */ | ||
275 | + public function refund($id){ | ||
276 | + $id=$this->request->param("id"); | ||
277 | + //查询订单 | ||
278 | + $order=Db::name("order")->where("id",$id)->find(); | ||
279 | + if($order['is_pay']==1){ | ||
280 | + $this->error("该订单无法退款"); | ||
281 | + //拼接退款参数 | ||
282 | + $pay_fee = $order['price']; | ||
283 | + $refund_fee = $pay_fee; | ||
284 | + $order_sn = $order['order_no']; | ||
285 | + $pay_type = 'wechat'; | ||
286 | + $reason = '订单退款'; | ||
287 | + $notifyurl = 'https://wyc.tenyes.cn/api/index/refundNotifyx';//退款回调地址 | ||
288 | + //直接调用退款方法传参即可 | ||
289 | + $response = \addons\epay\library\Service::submitRefund($pay_fee, $refund_fee, $order_sn, getRefundSn($order['user_id']), $pay_type, $reason, $notifyurl, '', 'miniapp'); | ||
290 | + $response = json_encode($response); | ||
291 | + $response = json_decode($response, true); | ||
292 | + file_put_contents("pcl_repay_v2.log", date("Y-m-d H:i:s") . "::" . json_encode($response, JSON_UNESCAPED_UNICODE) . PHP_EOL, FILE_APPEND); | ||
293 | + if (!empty($response['return_code'] == 'SUCCESS')) { | ||
294 | + //退款成功,更新退款记录 | ||
295 | + $relogs['update_time'] = time(); | ||
296 | + $relogs['is_pay'] = 3; | ||
297 | + $relogs['out_refund_no'] = $response['out_refund_no']; | ||
298 | + $relogs['refund_time'] = time(); | ||
299 | + $rs2 = Db::name('order') | ||
300 | + ->where(['id' => $order['id']]) | ||
301 | + ->update($relogs); | ||
302 | + } else { | ||
303 | + $this->error('退款失败'); | ||
304 | + } | ||
305 | + $this->success("退款成功"); | ||
306 | + }else{ | ||
307 | + $relogs['is_pay'] = 4; | ||
308 | + $rs2 = Db::name('order') | ||
309 | + ->where(['id' => $order['id']]) | ||
310 | + ->update($relogs); | ||
311 | + $this->success("取消成功"); | ||
312 | + } | ||
313 | + } | ||
314 | + | ||
315 | + | ||
265 | } | 316 | } |
@@ -34,10 +34,11 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin | @@ -34,10 +34,11 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin | ||
34 | {field: 'colour', title: __('Colour'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content}, | 34 | {field: 'colour', title: __('Colour'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content}, |
35 | {field: 'driver_license_img', title: __('Driver_license_img'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images}, | 35 | {field: 'driver_license_img', title: __('Driver_license_img'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images}, |
36 | {field: 'driving_license_img', title: __('Driving_license_img'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images}, | 36 | {field: 'driving_license_img', title: __('Driving_license_img'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images}, |
37 | - {field: 'route.name', title: __('Route.name'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content}, | ||
38 | - {field: 'driver.name', title: __('Driver.name'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content}, | ||
39 | {field: 'reservation_time', title: __('Reservation_time'),operate:'RANGE', addclass:'datetimerange',datetimeFormat:"HH:mm", autocomplete:false, formatter: Table.api.formatter.datetime}, | 37 | {field: 'reservation_time', title: __('Reservation_time'),operate:'RANGE', addclass:'datetimerange',datetimeFormat:"HH:mm", autocomplete:false, formatter: Table.api.formatter.datetime}, |
40 | {field: 'start_time', title: __('Start_time'),operate:'RANGE', addclass:'datetimerange',datetimeFormat:"HH:mm", autocomplete:false, formatter: Table.api.formatter.datetime}, | 38 | {field: 'start_time', title: __('Start_time'),operate:'RANGE', addclass:'datetimerange',datetimeFormat:"HH:mm", autocomplete:false, formatter: Table.api.formatter.datetime}, |
39 | + {field: 'create_time', title: __('Create_time'),operate:'RANGE', addclass:'datetimerange',datetimeFormat:"HH:mm", autocomplete:false, formatter: Table.api.formatter.datetime}, | ||
40 | + {field: 'driver.name', title: __('Driver.name'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content}, | ||
41 | + {field: 'route.name', title: __('Route.name'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content}, | ||
41 | {field: 'create_time', title: __('Create_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime}, | 42 | {field: 'create_time', title: __('Create_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime}, |
42 | {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate} | 43 | {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate} |
43 | ] | 44 | ] |
-
请 注册 或 登录 后发表评论