完成订单重构
This commit is contained in:
parent
7a6bc2940a
commit
5a6642ea1f
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
namespace app\admin\behavior;
|
||||
|
||||
use think\Exception;
|
||||
use think\Lang;
|
||||
|
||||
class OrderDispatchLog
|
||||
|
|
@ -9,22 +10,27 @@ class OrderDispatchLog
|
|||
//记录订单任务日志
|
||||
public function run(&$response)
|
||||
{
|
||||
try {
|
||||
|
||||
Lang::load(APP_PATH . 'admin/lang/zh-cn/orders/dispatch2.php');
|
||||
Lang::load(APP_PATH . 'admin/lang/zh-cn/orders/dispatch2.php');
|
||||
|
||||
$Model = new \app\admin\model\OrderDispatch();
|
||||
$statusList = $Model->getStatusList();
|
||||
$dispatch = $response['dispatch']; //订单对象
|
||||
$remark = $response['remark'] ?? ''; //备注
|
||||
$data = [
|
||||
'dispatch_id' => $dispatch->id,
|
||||
'order_id' => $dispatch->order_id,
|
||||
'worker_id' => $dispatch->worker_id,
|
||||
'status' => $dispatch->status,
|
||||
'status_text' => $statusList[$dispatch->status],
|
||||
'remark' => $remark,
|
||||
];
|
||||
\app\admin\model\OrderDispatchLog::create($data);
|
||||
//(new \app\admin\model\OrderDispatchLog())->cre($data);
|
||||
$Model = new \app\admin\model\OrderDispatch();
|
||||
$statusList = $Model->getStatusList();
|
||||
$dispatch = $response['dispatch']; //订单对象
|
||||
$remark = $response['remark'] ?? ''; //备注
|
||||
$data = [
|
||||
'dispatch_id' => $dispatch->id,
|
||||
'order_id' => $dispatch->order_id,
|
||||
'worker_id' => $dispatch->worker_id,
|
||||
'status' => $dispatch->status,
|
||||
'status_text' => $statusList[$dispatch->status],
|
||||
'remark' => $remark,
|
||||
'admin_user' => $dispatch->admin_user??'sys',
|
||||
];
|
||||
\app\admin\model\OrderDispatchLog::create($data);
|
||||
//(new \app\admin\model\OrderDispatchLog())->cre($data);
|
||||
}catch (Exception $exception){
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -396,7 +396,7 @@ class Order extends Backend
|
|||
//日志
|
||||
$hookParams = [
|
||||
'dispatch' => (new OrderDispatch())->where('id', $res)->find(),
|
||||
'remark' => '自动派单,操作人:' . $this->auth->nickname,
|
||||
'remark' => '系统自动派单',
|
||||
];
|
||||
Hook::listen('order_dispatch_change', $hookParams);
|
||||
|
||||
|
|
|
|||
|
|
@ -170,10 +170,12 @@ class Dispatch extends Backend
|
|||
$hookparams['remark'] = '';
|
||||
Hook::listen('order_change', $hookparams);
|
||||
|
||||
$dispatch = $this->model->get($this->model->id);
|
||||
$dispatch->admin_user = $this->auth->nickname;
|
||||
//dispatch log
|
||||
$hookParams2 = [
|
||||
'dispatch' => $this->model->get($this->model->id),
|
||||
'remark' => '手动派单,操作人:' . $this->auth->nickname,
|
||||
'dispatch' => $dispatch,
|
||||
'remark' => '手动派单',
|
||||
];
|
||||
Hook::listen('order_dispatch_change', $hookParams2);
|
||||
|
||||
|
|
|
|||
|
|
@ -208,6 +208,7 @@ class Dispatch2 extends Backend
|
|||
}
|
||||
$result = $row->allowField(true)->save($params);
|
||||
|
||||
$row->admin_user = $this->auth->nickname;
|
||||
if($workerChange){
|
||||
$hookParams = [
|
||||
'dispatch' => $row,
|
||||
|
|
|
|||
|
|
@ -52,6 +52,15 @@ class Dispatchlog extends Backend
|
|||
$dispatch_id = $this->request->get('dispatch_id');
|
||||
|
||||
if (false === $this->request->isAjax()) {
|
||||
//page2变更日志
|
||||
|
||||
$logs = $this->model
|
||||
->where('dispatch_id',$dispatch_id)
|
||||
->order('id','desc')
|
||||
->select();
|
||||
|
||||
$this->view->assign('logs',json_encode($logs));
|
||||
|
||||
return $this->view->fetch();
|
||||
}
|
||||
//如果发送的来源是 Selectpage,则转发到 Selectpage
|
||||
|
|
|
|||
|
|
@ -128,9 +128,10 @@ class Dispatchrecord extends Backend
|
|||
if($dispatch->status != $params['rate']){
|
||||
$dispatch->status = $params['rate'];
|
||||
$dispatch->save();
|
||||
$dispatch->admin_user = '管理员:'. $this->auth->nickname;
|
||||
$hookParams = [
|
||||
'dispatch' => $dispatch,
|
||||
'remark' => '管理员跟进:'.$this->auth->nickname.',备注内容:'.$params['remark'],
|
||||
'remark' => '人工跟进订单,备注内容:'.$params['remark'],
|
||||
];
|
||||
Hook::listen('order_dispatch_change', $hookParams);
|
||||
|
||||
|
|
|
|||
|
|
@ -27,14 +27,5 @@ class Dispatchlog extends Model
|
|||
protected $append = [
|
||||
|
||||
];
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,69 @@
|
|||
<style>
|
||||
.timeline-container {
|
||||
padding: 20px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.timeline {
|
||||
position: relative;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.timeline::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: 18px;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
width: 2px;
|
||||
background: #e4e7ed;
|
||||
}
|
||||
|
||||
.timeline-item {
|
||||
position: relative;
|
||||
padding-left: 40px;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.timeline-item:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.timeline-marker {
|
||||
position: absolute;
|
||||
left: 10px;
|
||||
top: 4px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
background-color: #409EFF;
|
||||
border: 2px solid #fff;
|
||||
border-radius: 50%;
|
||||
box-shadow: 0 0 0 2px #409EFF;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.timeline-content {
|
||||
background: #f9f9f9;
|
||||
border-radius: 4px;
|
||||
padding: 10px 15px;
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
.timeline-title {
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.timeline-time {
|
||||
font-size: 12px;
|
||||
color: #999;
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<div class="panel panel-default panel-intro">
|
||||
|
||||
<div class="panel-heading">
|
||||
|
|
@ -16,9 +82,46 @@
|
|||
</table>
|
||||
</div>
|
||||
<div class="tab-pane fade" id="second">
|
||||
<table id="table2" class="table table-striped table-bordered table-hover" width="100%">
|
||||
</table>
|
||||
<!-- <table id="table2" class="table table-striped table-bordered table-hover" width="100%">-->
|
||||
<!-- </table>-->
|
||||
|
||||
<div class="timeline" id="log-timeline"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
|
||||
|
||||
const logs = {$logs}; // 你可以用后端模板变量渲染进去
|
||||
|
||||
renderTimeline(logs);
|
||||
|
||||
function renderTimeline(logs) {
|
||||
const container = document.getElementById('log-timeline');
|
||||
container.innerHTML = '';
|
||||
|
||||
// 按时间倒序排序(最新在上)
|
||||
logs.sort((a, b) => new Date(b.create_time) - new Date(a.create_time));
|
||||
|
||||
logs.forEach(log => {
|
||||
const item = document.createElement('div');
|
||||
item.className = 'timeline-item';
|
||||
|
||||
item.innerHTML = `
|
||||
<div class="timeline-marker"></div>
|
||||
<div class="timeline-content">
|
||||
<h4 class="timeline-title">${log.status_text || '无状态'}</h4>
|
||||
<h4 class="timeline-title">${log.admin_user || '系统'}</h4>
|
||||
<p>${log.remark || '无备注'}</p>
|
||||
<p class="timeline-time">${log.create_time || ''}</p>
|
||||
</div>
|
||||
`;
|
||||
|
||||
container.appendChild(item);
|
||||
});
|
||||
}
|
||||
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -74,7 +74,11 @@ class OrderLogic
|
|||
|
||||
Hook::listen('order_change', $params);
|
||||
|
||||
|
||||
if($roleInfo['role'] == 1){ //后台操作
|
||||
$orderDispatch->admin_user = '管理员:'. $roleInfo['auth']->nickname;
|
||||
}else{
|
||||
$orderDispatch->admin_user = '师傅:'. $roleInfo['auth']->name;
|
||||
}
|
||||
$hookParams = [
|
||||
'dispatch' => $orderDispatch,
|
||||
'remark' => $roleInfo['remark'] ?? $orderDispatch->remark,
|
||||
|
|
@ -129,9 +133,14 @@ class OrderLogic
|
|||
//取消
|
||||
$dispatch->allowField(true)->save(['status' => OrderDispatch::STATUS_CANCEL, 'follow'=>2,'remark' => $remark]);
|
||||
|
||||
if(!empty($auth)){
|
||||
$dispatch->admin_user = '管理员:'.$auth->nickname;
|
||||
}else{
|
||||
$dispatch->admin_user = 'sys';
|
||||
}
|
||||
$hookParams = [
|
||||
'dispatch' => $dispatch,
|
||||
'remark' => '后台取消,操作说明:'.$remark?:'无'.',操作人:'.$auth->nickname
|
||||
'remark' => '后台取消,操作说明:'.$remark?:'无'
|
||||
];
|
||||
Hook::listen('order_dispatch_change', $hookParams);
|
||||
|
||||
|
|
|
|||
|
|
@ -166,6 +166,7 @@ class OrderDispatchService extends BaseService
|
|||
|
||||
$orderDispatch->save();
|
||||
|
||||
$orderDispatch->admin_user = '师傅:'. $orderDispatch->worker_name;
|
||||
$orderDispatchChangeParams = [
|
||||
'dispatch' => $orderDispatch,
|
||||
'remark' => $type == 'accept' ? '师傅接单' : '师傅拒接',
|
||||
|
|
@ -291,6 +292,7 @@ class OrderDispatchService extends BaseService
|
|||
$orderDispatch->plan_time = $planTime;
|
||||
$orderDispatch->save();
|
||||
|
||||
$orderDispatch->admin_user = '师傅:'. $orderDispatch->worker_name;
|
||||
$orderDispatchChangeParams = [
|
||||
'dispatch' => $orderDispatch,
|
||||
'remark' => '师傅已和客户预约,预约时间:' . $planTime,
|
||||
|
|
@ -310,6 +312,7 @@ class OrderDispatchService extends BaseService
|
|||
$orderDispatch->plan_time = $planTime;
|
||||
$orderDispatch->save();
|
||||
|
||||
$orderDispatch->admin_user = '师傅:'. $orderDispatch->worker_name;
|
||||
$orderDispatchChangeParams = [
|
||||
'dispatch' => $orderDispatch,
|
||||
'remark' => "师傅修改上门时间,旧的时间:{$orderDispatch->plan_time},新的时间:$planTime"
|
||||
|
|
@ -335,6 +338,7 @@ class OrderDispatchService extends BaseService
|
|||
$orderDispatch->arrive_time = $time;
|
||||
$orderDispatch->save();
|
||||
|
||||
$orderDispatch->admin_user = '师傅:'. $orderDispatch->worker_name;
|
||||
//派单状态变更
|
||||
$orderDispatchChangeParams = [
|
||||
'dispatch' => $orderDispatch,
|
||||
|
|
@ -417,6 +421,7 @@ class OrderDispatchService extends BaseService
|
|||
|
||||
$orderDispatch->save();
|
||||
|
||||
$orderDispatch->admin_user = '师傅:'. $orderDispatch->worker_name;
|
||||
//派单状态变更
|
||||
$orderDispatchChangeParams = [
|
||||
'dispatch' => $orderDispatch,
|
||||
|
|
|
|||
|
|
@ -100,36 +100,36 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
// 为表格1绑定事件
|
||||
Table.api.bindevent(table1);
|
||||
},
|
||||
second: function () {
|
||||
// 表格2
|
||||
var table2 = $("#table2");
|
||||
table2.bootstrapTable({
|
||||
url: 'orders/dispatchlog/index' + location.search,
|
||||
toolbar: '#toolbar1',
|
||||
sortName: 'id',
|
||||
search: false,
|
||||
commonSearch:false,
|
||||
visible: false,
|
||||
showToggle: false,
|
||||
showColumns: false,
|
||||
showExport: false,
|
||||
columns: [
|
||||
[
|
||||
{field: 'id', title: __('Id')},
|
||||
// {field: 'dispatch_id', title: __('Dispatch_id')},
|
||||
//{field: 'order_id', title: __('Order_id')},
|
||||
//{field: 'worker_id', title: __('Worker_id')},
|
||||
// {field: 'status', title: __('Status')},
|
||||
{field: 'status_text', title: __('Status_text'), operate: 'LIKE'},
|
||||
{field: 'remark', title: __('Remark'), operate: false, table: table2, class: 'autocontent', formatter: Table.api.formatter.content},
|
||||
{field: 'create_time', title: __('Create_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
|
||||
// {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
|
||||
]
|
||||
]
|
||||
});
|
||||
// 为表格2绑定事件
|
||||
Table.api.bindevent(table2);
|
||||
}
|
||||
// second: function () {
|
||||
// // 表格2
|
||||
// var table2 = $("#table2");
|
||||
// table2.bootstrapTable({
|
||||
// url: 'orders/dispatchlog/index' + location.search,
|
||||
// toolbar: '#toolbar1',
|
||||
// sortName: 'id',
|
||||
// search: false,
|
||||
// commonSearch:false,
|
||||
// visible: false,
|
||||
// showToggle: false,
|
||||
// showColumns: false,
|
||||
// showExport: false,
|
||||
// columns: [
|
||||
// [
|
||||
// {field: 'id', title: __('Id')},
|
||||
// // {field: 'dispatch_id', title: __('Dispatch_id')},
|
||||
// //{field: 'order_id', title: __('Order_id')},
|
||||
// //{field: 'worker_id', title: __('Worker_id')},
|
||||
// // {field: 'status', title: __('Status')},
|
||||
// {field: 'status_text', title: __('Status_text'), operate: 'LIKE'},
|
||||
// {field: 'remark', title: __('Remark'), operate: false, table: table2, class: 'autocontent', formatter: Table.api.formatter.content},
|
||||
// {field: 'create_time', title: __('Create_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
|
||||
// // {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
|
||||
// ]
|
||||
// ]
|
||||
// });
|
||||
// // 为表格2绑定事件
|
||||
// Table.api.bindevent(table2);
|
||||
// }
|
||||
},
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user