正在显示
7 个修改的文件
包含
82 行增加
和
49 行删除
| @@ -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']); | 60 | + $row->visible(['id','car_model','license_plate','seat','colour','driver_license_img','driving_license_img','reservation_time','start_time','create_time']); |
| 63 | $row->visible(['driver']); | 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 | ] |
-
请 注册 或 登录 后发表评论