Browse Source

预约单

lizhen_gitee 1 year ago
parent
commit
a3f719b56a

+ 109 - 1
application/admin/controller/Preorder.php

@@ -3,7 +3,8 @@
 namespace app\admin\controller;
 
 use app\common\controller\Backend;
-
+use think\Db;
+use app\common\service\UserService;
 /**
  * 预约单
  *
@@ -50,9 +51,16 @@ class Preorder extends Backend
             }
             list($where, $sort, $order, $offset, $limit) = $this->buildparams();
 
+            //只能看自己的
+            $where_op = [];
+            if($this->auth->company_id){
+                $where_op['pre_order.company_id'] = $this->auth->company_id;
+            }
+
             $list = $this->model
                     ->with(['company','user','servicetype','order'])
                     ->where($where)
+                    ->where($where_op)
                     ->order($sort, $order)
                     ->paginate($limit);
 
@@ -71,4 +79,104 @@ class Preorder extends Backend
         return $this->view->fetch();
     }
 
+    /**
+     * 取消
+     */
+    public function cancel(){
+
+        $id = input('id',0);
+        if(!$this->request->post()){
+            $this->assign('id',$id);
+            return $this->view->fetch();
+        }
+
+        $cancel_reason = input('cancel_reason','');
+        $update = [
+            'cancel_reason' => $cancel_reason,
+            'cancel_time'   => time(),
+            'updatetime'    => time(),
+            'pre_order_status' => 0,
+        ];
+        Db::name('pre_order')->where('id',$id)->update($update);
+        $userService = new UserService();
+        $params['pre_order_id'] = $id;
+        $userService->msgPreOrder($params);
+        $this->success('取消成功');
+    }
+
+    /**
+     * 开单
+     */
+    public function submitorder(){
+        $pre_order_id = input('id',0); //预约单id
+        $map = ['id'=>$pre_order_id];
+        $pre_order = Db::name('pre_order')->where($map)->find();
+        if(!$this->request->post()){
+            $this->assign('pre_order',$pre_order);
+            return $this->view->fetch();
+        }
+
+
+        $data = request_post_hub([
+            'user_name','user_car_number','user_mobile','user_address',
+            'servicetype_id','server_time','server_info','server_images','pay_fee'
+        ]);
+
+        Db::startTrans();
+
+        //预约单
+
+        $map = ['id'=>$pre_order_id];
+        $pre_order = Db::name('pre_order')->where($map)->lock(true)->find();
+
+
+        $data['pre_order_id'] = $pre_order_id;
+        $data['user_id'] = $pre_order['user_id'];
+
+
+        //修改状态
+        $update = [
+            'order_time'   => time(),
+            'updatetime'    => time(),
+            'pre_order_status' => 2,
+        ];
+        $update_rs = Db::name('pre_order')->where('id',$pre_order_id)->update($update);
+        if($update_rs === false){
+            Db::rollback();
+            $this->error('下单失败');
+        }
+
+
+        //检索car_id,没必要了
+
+        //准备数据
+        $data['orderno']    = createUniqueNo('O',$pre_order_id);
+        $data['ordertype']    = 1;  //类型:1=预约下单,2=在线下单,3=套餐订单
+        $data['company_id'] = $pre_order['company_id'];
+        $data['staff_id']   = $this->auth->id;
+        $data['total_fee']  = $data['pay_fee'];
+
+        $data['status'] = 2; //2=已支付,待处理
+        $data['createtime'] = time();
+
+        $order_id = Db::name('order')->insertGetId($data);
+        if(!$order_id){
+            Db::rollback();
+            $this->error('下单失败');
+        }
+
+
+        $update = [
+            'order_id'   => $order_id,
+        ];
+        $update_rs = Db::name('pre_order')->where('id',$pre_order_id)->update($update);
+        if($update_rs === false){
+            Db::rollback();
+            $this->error('下单失败');
+        }
+
+        Db::commit();
+        $this->success('下单完成',$order_id);
+    }
+
 }

+ 3 - 3
application/admin/lang/zh-cn/preorder.php

@@ -23,9 +23,9 @@ return [
     'Pre_order_status 2' => '已开单',
     'Createtime'         => '创建时间',
     'Updatetime'         => '更新时间',
-    'Company.name'       => '店名称',
+    'Company.name'       => '店名称',
     'User.nickname'      => '昵称',
     'User.mobile'        => '手机号',
-    'Servicetype.title'  => '标题',
-    'Order.orderno'      => '订单号'
+    'Servicetype.title'  => '服务类型',
+    'Order.orderno'      => '开单订单号'
 ];

+ 13 - 3
application/admin/view/preorder/index.html

@@ -1,5 +1,13 @@
 <div class="panel panel-default panel-intro">
-    {:build_heading()}
+    <div class="panel-heading">
+        {:build_heading(null,FALSE)}
+        <ul class="nav nav-tabs" data-field="pre_order_status">
+            <li class="{:$Think.get.status === null ? 'active' : ''}"><a href="#t-all" data-value="" data-toggle="tab">{:__('All')}</a></li>
+            {foreach name="preOrderStatusList" item="vo"}
+            <li class="{:$Think.get.status === (string)$key ? 'active' : ''}"><a href="#t-{$key}" data-value="{$key}" data-toggle="tab">{$vo}</a></li>
+            {/foreach}
+        </ul>
+    </div>
 
     <div class="panel-body">
         <div id="myTabContent" class="tab-content">
@@ -7,7 +15,7 @@
                 <div class="widget-body no-padding">
                     <div id="toolbar" class="toolbar">
                         <a href="javascript:;" class="btn btn-primary btn-refresh" title="{:__('Refresh')}" ><i class="fa fa-refresh"></i> </a>
-                        <a href="javascript:;" class="btn btn-success btn-add {:$auth->check('preorder/add')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
+                        <!--<a href="javascript:;" class="btn btn-success btn-add {:$auth->check('preorder/add')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
                         <a href="javascript:;" class="btn btn-success btn-edit btn-disabled disabled {:$auth->check('preorder/edit')?'':'hide'}" title="{:__('Edit')}" ><i class="fa fa-pencil"></i> {:__('Edit')}</a>
                         <a href="javascript:;" class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('preorder/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a>
                         
@@ -18,13 +26,15 @@
                                 <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
                                 <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
                             </ul>
-                        </div>
+                        </div>-->
 
                         
                     </div>
                     <table id="table" class="table table-striped table-bordered table-hover table-nowrap"
                            data-operate-edit="{:$auth->check('preorder/edit')}"
                            data-operate-del="{:$auth->check('preorder/del')}"
+                           data-operate-cancel="{:$auth->check('preorder/cancel')}"
+                           data-operate-submitorder="{:$auth->check('preorder/submitorder')}"
                            width="100%">
                     </table>
                 </div>

+ 59 - 12
public/assets/js/backend/preorder.js

@@ -7,8 +7,8 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
                 extend: {
                     index_url: 'preorder/index' + location.search,
                     add_url: 'preorder/add',
-                    edit_url: 'preorder/edit',
-                    del_url: 'preorder/del',
+//                    edit_url: 'preorder/edit',
+//                    del_url: 'preorder/del',
                     multi_url: 'preorder/multi',
                     import_url: 'preorder/import',
                     table: 'pre_order',
@@ -24,34 +24,75 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
                 sortName: 'id',
                 fixedColumns: true,
                 fixedRightNumber: 1,
+                search:false,
                 columns: [
                     [
                         {checkbox: true},
                         {field: 'id', title: __('Id')},
                         {field: 'pre_order_no', title: __('Pre_order_no'), operate: 'LIKE'},
+                        {field: 'pre_order_status', title: __('Pre_order_status'), searchList: {"0":__('Pre_order_status 0'),"1":__('Pre_order_status 1'),"2":__('Pre_order_status 2')}, formatter: Table.api.formatter.status},
+
                         {field: 'company_id', title: __('Company_id')},
+                        {field: 'company.name', title: __('Company.name'), operate: 'LIKE'},
+
                         {field: 'user_id', title: __('User_id')},
+//                        {field: 'user.nickname', title: __('User.nickname'), operate: 'LIKE'},
+//                        {field: 'user.mobile', title: __('User.mobile'), operate: 'LIKE'},
                         {field: 'name', title: __('Name'), operate: 'LIKE'},
                         {field: 'mobile', title: __('Mobile'), operate: 'LIKE'},
                         {field: 'address', title: __('Address'), operate: 'LIKE'},
                         {field: 'remark', title: __('Remark'), operate: 'LIKE'},
-                        {field: 'car_id', title: __('Car_id')},
+//                        {field: 'car_id', title: __('Car_id')},
                         {field: 'car_number', title: __('Car_number'), operate: 'LIKE'},
-                        {field: 'servicetype_id', title: __('Servicetype_id')},
+//                        {field: 'servicetype_id', title: __('Servicetype_id')},
+                        {field: 'servicetype.title', title: __('Servicetype.title'), operate: 'LIKE'},
+
                         {field: 'pre_time', title: __('Pre_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
-                        {field: 'order_id', title: __('Order_id')},
+//                        {field: 'order_id', title: __('Order_id')},
                         {field: 'order_time', title: __('Order_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
+                        {field: 'order.orderno', title: __('Order.orderno'), operate: 'LIKE'},
+
                         {field: 'cancel_time', title: __('Cancel_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
                         {field: 'cancel_reason', title: __('Cancel_reason'), operate: 'LIKE'},
-                        {field: 'pre_order_status', title: __('Pre_order_status'), searchList: {"0":__('Pre_order_status 0'),"1":__('Pre_order_status 1'),"2":__('Pre_order_status 2')}, formatter: Table.api.formatter.status},
                         {field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
                         {field: 'updatetime', title: __('Updatetime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
-                        {field: 'company.name', title: __('Company.name'), operate: 'LIKE'},
-                        {field: 'user.nickname', title: __('User.nickname'), operate: 'LIKE'},
-                        {field: 'user.mobile', title: __('User.mobile'), operate: 'LIKE'},
-                        {field: 'servicetype.title', title: __('Servicetype.title'), operate: 'LIKE'},
-                        {field: 'order.orderno', title: __('Order.orderno'), operate: 'LIKE'},
-                        {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
+
+                        {field: 'operate', title: __('Operate'), table: table,
+                            buttons:[
+                                {
+                                    name:'cancel',
+                                    text:'取消预约',
+                                    title:'取消预约',
+                                    icon:'fa fa-exclamation-circle',
+                                    classname:'btn btn-xs btn-info btn-dialog',
+                                    extend: 'data-area=["80%","80%"]',
+                                    url:'pre_order/cancel/id/{ids}?dialog=1',
+                                    target:'_self',
+                                    hidden:function($row){
+                                        if($row.pre_order_status == 1){
+                                            return false;
+                                        }
+                                        return true;
+                                    }
+                                },
+                                {
+                                    name:'submitorder',
+                                    text:'立即开单',
+                                    title:'立即开单',
+                                    icon:'fa fa-exclamation-circle',
+                                    classname:'btn btn-xs btn-info btn-dialog',
+                                    extend: 'data-area=["80%","80%"]',
+                                    url:'pre_order/submitorder/id/{ids}?dialog=1',
+                                    target:'_self',
+                                    hidden:function($row){
+                                        if($row.pre_order_status == 1){
+                                            return false;
+                                        }
+                                        return true;
+                                    }
+                                },
+                            ],
+                            events: Table.api.events.operate, formatter: Table.api.formatter.operate}
                     ]
                 ]
             });
@@ -65,6 +106,12 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
         edit: function () {
             Controller.api.bindevent();
         },
+        cancel: function () {
+            Controller.api.bindevent();
+        },
+        submitorder: function () {
+            Controller.api.bindevent();
+        },
         api: {
             bindevent: function () {
                 Form.api.bindevent($("form[role=form]"));