xxxrrrdddd 3 yıl önce
ebeveyn
işleme
b6556b6f38

+ 32 - 1
application/admin/controller/MobileOrder.php

@@ -3,6 +3,7 @@
 namespace app\admin\controller;
 
 use app\common\controller\Backend;
+use app\common\model\MobileOrderOperation;
 
 /**
  * 
@@ -54,7 +55,7 @@ class MobileOrder extends Backend
             list($where, $sort, $order, $offset, $limit) = $this->buildparams();
 
             $list = $this->model
-                ->with(['info'])
+                ->with(['info','operation','operation.admin'])
                 ->where($where)
                 ->order($sort, $order)
                 ->paginate($limit);
@@ -78,6 +79,19 @@ class MobileOrder extends Backend
         }
         return $this->view->fetch();
     }
+    public function edit($ids = null)
+    {
+        $model=$this->model->find($ids);
+        $row=$model->toArray();
+        if($this->request->isGet()){
+            $row['address']=$model->originData()['address'];
+            $row['city']=\app\common\model\Area::getNameString($row['city'],'/');
+            $this->assign('row',$row);
+            return view();
+        }else{
+            $this->success('');
+        }
+    }
 
     public function status(){
         return \app\common\model\MobileOrder::$status;
@@ -85,4 +99,21 @@ class MobileOrder extends Backend
     public function pay_type(){
         return \app\common\model\MobileOrder::$payTypes;
     }
+    public function add_operation(){
+        $id=input('ids/d');
+        if($this->request->isGet()){
+            return view();
+        }else{
+            $content=input('row.content');
+            $this->validate(compact('content'),[
+                'content'=>'max:250',
+            ]);
+            MobileOrderOperation::create([
+                'mobile_order_id'=>$id,
+                'admin_id'=>$this->auth->id,
+                'content'=>$content,
+            ]);
+            $this->success();
+        }
+    }
 }

+ 12 - 0
application/admin/model/MobileOrderAdmin.php

@@ -0,0 +1,12 @@
+<?php
+
+namespace app\admin\model;
+
+use think\Model;
+
+/**
+ * 配置模型
+ */
+class MobileOrderAdmin extends Model
+{
+}

+ 10 - 0
application/admin/model/MobileOrderOperation.php

@@ -0,0 +1,10 @@
+<?php
+
+namespace app\admin\model;
+
+/**
+ * 配置模型
+ */
+class MobileOrderOperation extends \app\common\model\MobileOrderOperation
+{
+}

+ 15 - 0
application/admin/view/mobile_order/add_operation.html

@@ -0,0 +1,15 @@
+<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('记录内容')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-no" class="form-control" name="row[content]" type="text" data-rule="required">
+        </div>
+    </div>
+    <div class="form-group layer-footer">
+        <label class="control-label col-xs-12 col-sm-2"></label>
+        <div class="col-xs-12 col-sm-8">
+            <button type="submit" class="btn btn-success btn-embossed">{:__('OK')}</button>
+            <button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
+        </div>
+    </div>
+</form>

+ 6 - 163
application/admin/view/mobile_order/edit.html

@@ -1,191 +1,34 @@
 <form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
-
     <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('No')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-no" class="form-control" name="row[no]" type="text" value="{$row.no|htmlentities}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Type')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-type" min="0" class="form-control" name="row[type]" type="number" value="{$row.type|htmlentities}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Order_no')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-order_no" class="form-control" name="row[order_no]" type="text" value="{$row.order_no|htmlentities}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Mobile_id')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-mobile_id" min="0" data-rule="required" data-source="mobile/index" class="form-control selectpage" name="row[mobile_id]" type="text" value="{$row.mobile_id|htmlentities}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
+        <label class="control-label col-xs-12 col-sm-2">收货人{:__('Name')}:</label>
         <div class="col-xs-12 col-sm-8">
             <input id="c-name" class="form-control" name="row[name]" type="text" value="{$row.name|htmlentities}">
         </div>
     </div>
     <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Phone')}:</label>
+        <label class="control-label col-xs-12 col-sm-2">收货人{:__('Phone')}:</label>
         <div class="col-xs-12 col-sm-8">
             <input id="c-phone" class="form-control" name="row[phone]" type="text" value="{$row.phone|htmlentities}">
         </div>
     </div>
     <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Id_no')}:</label>
+        <label class="control-label col-xs-12 col-sm-2">收货人{:__('Id_no')}:</label>
         <div class="col-xs-12 col-sm-8">
             <input id="c-id_no" class="form-control" name="row[id_no]" type="text" value="{$row.id_no|htmlentities}">
         </div>
     </div>
     <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('City')}:</label>
+        <label class="control-label col-xs-12 col-sm-2">收货人{:__('City')}:</label>
         <div class="col-xs-12 col-sm-8">
-            <div class='control-relative'><input id="c-city" class="form-control" data-toggle="city-picker" name="row[city]" type="text" value="{$row.city|htmlentities}"></div>
+            <div class='control-relative'><input id="c-city" data-level="district" class="form-control" data-toggle="city-picker" name="row[city]" type="text" value="{$row.city|htmlentities}"></div>
         </div>
     </div>
     <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Address')}:</label>
+        <label class="control-label col-xs-12 col-sm-2">收货人{:__('Address')}:</label>
         <div class="col-xs-12 col-sm-8">
             <input id="c-address" class="form-control" name="row[address]" type="text" value="{$row.address|htmlentities}">
         </div>
     </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Remark')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-remark" class="form-control" name="row[remark]" type="text" value="{$row.remark|htmlentities}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Pay_type')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-pay_type" min="0" class="form-control" name="row[pay_type]" type="number" value="{$row.pay_type|htmlentities}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Create_time')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-create_time" min="0" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[create_time]" type="text" value="{:$row.create_time?datetime($row.create_time):''}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Update_time')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-update_time" min="0" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[update_time]" type="text" value="{:$row.update_time?datetime($row.update_time):''}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Pay_time')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-pay_time" min="0" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[pay_time]" type="text" value="{:$row.pay_time?datetime($row.pay_time):''}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Expire_time')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-expire_time" min="0" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[expire_time]" type="text" value="{:$row.expire_time?datetime($row.expire_time):''}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Trans_name')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-trans_name" class="form-control" name="row[trans_name]" type="text" value="{$row.trans_name|htmlentities}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Trans_no')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-trans_no" class="form-control" name="row[trans_no]" type="text" value="{$row.trans_no|htmlentities}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Amount_original')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-amount_original" min="0" class="form-control" step="0.01" name="row[amount_original]" type="number" value="{$row.amount_original|htmlentities}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Amount_hd')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-amount_hd" min="0" class="form-control" step="0.01" name="row[amount_hd]" type="number" value="{$row.amount_hd|htmlentities}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Amount_charge')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-amount_charge" min="0" class="form-control" step="0.01" name="row[amount_charge]" type="number" value="{$row.amount_charge|htmlentities}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Amount')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-amount" min="0" class="form-control" step="0.01" name="row[amount]" type="number" value="{$row.amount|htmlentities}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Pay_no')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-pay_no" class="form-control" name="row[pay_no]" type="text" value="{$row.pay_no|htmlentities}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-status" min="0" class="form-control" name="row[status]" type="number" value="{$row.status|htmlentities}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Payment_id')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-payment_id" min="0" data-rule="required" data-source="payment/index" class="form-control selectpage" name="row[payment_id]" type="text" value="{$row.payment_id|htmlentities}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Open_idcard_face_img')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-open_idcard_face_img" class="form-control" name="row[open_idcard_face_img]" type="text" value="{$row.open_idcard_face_img|htmlentities}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Open_idcard_back_img')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-open_idcard_back_img" class="form-control" name="row[open_idcard_back_img]" type="text" value="{$row.open_idcard_back_img|htmlentities}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Open_face_img')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-open_face_img" class="form-control" name="row[open_face_img]" type="text" value="{$row.open_face_img|htmlentities}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Open_name')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-open_name" class="form-control" name="row[open_name]" type="text" value="{$row.open_name|htmlentities}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Open_id_no')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-open_id_no" class="form-control" name="row[open_id_no]" type="text" value="{$row.open_id_no|htmlentities}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Open_phone')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-open_phone" class="form-control" name="row[open_phone]" type="text" value="{$row.open_phone|htmlentities}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Open_uploaded')}:</label>
-        <div class="col-xs-12 col-sm-8">
-            <input id="c-open_uploaded" min="0" class="form-control" name="row[open_uploaded]" type="number" value="{$row.open_uploaded|htmlentities}">
-        </div>
-    </div>
     <div class="form-group layer-footer">
         <label class="control-label col-xs-12 col-sm-2"></label>
         <div class="col-xs-12 col-sm-8">

+ 3 - 2
application/admin/view/mobile_order/index.html

@@ -20,8 +20,9 @@
                         
                     </div>
                     <table id="table" class="table table-striped table-bordered table-hover table-nowrap"
-                           data-operate-edit="{:$auth->check('mobile_order/edit')}" 
-                           data-operate-del="{:$auth->check('mobile_order/del')}" 
+                           data-operate-edit="{:$auth->check('mobile_order/edit')}"
+                           data-operate-del="{:$auth->check('mobile_order/del')}"
+                           data-add_operation="{:$auth->check('mobile_order/add_operation')}"
                            width="100%">
                     </table>
                 </div>

+ 3 - 3
application/common/model/Area.php

@@ -130,14 +130,14 @@ class Area extends Model
         }
         return [$provinceId,$cityId,$id];
     }
-    public static function getNameString($id){
+    public static function getNameString($id,$sp=''){
         if(!$id){
             return '';
         }
-        $cacheName='area_'.serialize($id);
+        $cacheName='area_'.serialize($id).md5($sp);
         $res=Cache::get($cacheName);
         if(!$res){
-            $res=implode('',self::whereIn('id',$id)->column('name'));
+            $res=implode($sp,self::whereIn('id',$id)->column('name'));
             Cache::set($cacheName,$res,0);
         }
         return $res;

+ 10 - 0
application/common/model/MobileOrder.php

@@ -3,6 +3,7 @@
 namespace app\common\model;
 
 use app\admin\model\Admin;
+use app\admin\model\MobileOrderAdmin;
 use think\db\Query;
 use think\Model;
 
@@ -45,6 +46,12 @@ class MobileOrder extends Model
     public function info(){
         return $this->hasOne(MobileOrderInfo::class);
     }
+    public function operation(){
+        return $this->hasMany(MobileOrderOperation::class)->order('mobile_order_operation.id','desc');
+    }
+    public function admin(){
+        return $this->hasMany(MobileOrderAdmin::class);
+    }
     public function proxy(){
         $columns=Admin::getTableInfo()['fields'];
         unset($columns['password']);
@@ -108,4 +115,7 @@ class MobileOrder extends Model
     public function scopePayed(Query $query){
         $query->where('status','>=',self::STATUS_WAIT_SEND);
     }
+    public function originData(){
+        return $this->origin;
+    }
 }

+ 29 - 0
application/common/model/MobileOrderOperation.php

@@ -0,0 +1,29 @@
+<?php
+
+namespace app\common\model;
+
+use app\admin\model\Admin;
+use think\Model;
+use Yansongda\Supports\Str;
+
+/**
+ * 配置模型
+ */
+class MobileOrderOperation extends Model
+{
+  protected $autoWriteTimestamp=true;
+  protected $updateTime=null;
+    protected $append=[
+        'create_time_format',
+        'create_time_format_short',
+    ];
+  public function getCreateTimeFormatAttr($a,$m){
+      return date('Y-m-d H:i:s',$m['create_time']);
+  }
+    public function getCreateTimeFormatShortAttr($a,$m){
+        return date('m/d',$m['create_time']);
+    }
+    public function admin(){
+      return $this->belongsTo(Admin::class);
+    }
+}

+ 40 - 4
public/assets/js/backend/mobile_order.js

@@ -61,6 +61,13 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
                             },width:200},
                         {field: 'status', title: __('Status'),formatter: Table.api.formatter.label,searchList:status},
                         {field: 'remark_backend', title: __('备注'),formatter: Table.api.formatter.content,operate:false},
+                        {field: '', title: __('客服记录'),formatter(_,order){
+                            let a=[]
+                                order.operation.forEach(item=>{
+                                    a.push(`<div>${item.create_time_format_short} ${item.admin?item.admin.nickname:'-'} ${item.content}</div>`)
+                                })
+                                return `<div style="text-align: left;font-size: 10px;">${a.join('')}</div>`
+                            },operate:false},
                         {field: 'pay_link', title: __('付款链接'),formatter:Table.api.formatter.url,operate:false},
                         {field: 'create_time', title: __('Create_time'),formatter: Table.api.formatter.datetime,addClass:'datetimerange',operate: 'range'},
                         {field: 'update_time', title: __('更新时间'),formatter: Table.api.formatter.datetime,addClass:'datetimerange',operate: 'range'},
@@ -77,14 +84,40 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
                         {field: 'open_name', title: __('开卡人姓名')},
                         {field: 'open_id_no', title: __('开卡人身份证号码')},
                         {field: 'open_phone', title: __('开卡人手机号')},*/
-                        {field: 'trans_no', title: __('Trans_no')},
-                        {field: 'phone', title: __('收货人手机')},
+                        {field: 'trans_no', title: __('Trans_no'),visible: false},
+                        {field: 'phone', title: __('收货人手机'),visible: false},
                         {
                             field: 'operate',
                             title: __('Operate'),
                             table: table,
-                            events: Table.api.events.operate,
-                            formatter: Table.api.formatter.operate
+                            events: Table.api.events.buttons,
+                            formatter: Table.api.formatter.buttons,
+                            buttons:[
+                                {
+                                    name: 'detail',
+                                    text: __('添加'),
+                                    title: __('添加'),
+                                    classname: 'btn btn-xs btn-info btn-dialog',
+                                    url: 'mobile_order/add_operation?a=1',
+                                    callback: function (data) {
+                                    },
+                                    visible: function (row) {
+                                        return $('#table').data('add_operation');
+                                    }
+                                },
+                                {
+                                    name: 'detail',
+                                    text: __('编辑'),
+                                    title: __('编辑'),
+                                    classname: 'btn btn-xs btn-info btn-dialog',
+                                    url: 'mobile_order/edit?a=1',
+                                    callback: function (data) {
+                                    },
+                                    visible: function (row) {
+                                        return $('#table').data('add_operation');
+                                    }
+                                }
+                            ]
                         }
                     ]
                 ],
@@ -99,6 +132,9 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
         edit: function () {
             Controller.api.bindevent();
         },
+        add_operation(){
+            Controller.api.bindevent();
+        },
         api: {
             bindevent: function () {
                 Form.api.bindevent($("form[role=form]"));