This commit is contained in:
xman 2025-03-26 20:12:03 +08:00
parent d986cd7b69
commit 4c26d857e8
3 changed files with 130 additions and 65 deletions

View File

@ -289,4 +289,67 @@ class Dispatch2 extends Backend
return $workers;
}
/**
* 取消派单
*
* @param $ids
* @return void
* @throws DbException
* @throws DataNotFoundException
* @throws ModelNotFoundException
*/
public function cancel()
{
if (false === $this->request->isPost()) {
$this->error(__("Invalid parameters"));
}
$ids = $this->request->post("ids/a");
$reason = $this->request->post("reason");
if (empty($ids)) {
$this->error(__('Parameter %s can not be empty', 'ids'));
}
$pk = $this->model->getPk();
$adminIds = $this->getDataLimitAdminIds();
if (is_array($adminIds)) {
$this->model->where($this->dataLimitField, 'in', $adminIds);
}
$list = $this->model->where($pk, 'in', $ids)->whereIn('status', $this->model->deleteStatusList())->select();
$remark = $reason;
$count = 0;
Db::startTrans();
try {
foreach ($list as $item) {
//$count += $item->delete();
$order = Order::where('id', $item->order_id)->where('status', Order::STATUS_DISPATCHED)->find();
if (!$order) {
$this->error('订单状态已变更,请刷新后操作');
}
//取消
$item->save(['status' => OrderDispatch::STATUS_CANCEL, 'remark' => $remark]);
//回退订单状态
$order->allowField(true)->save(['status' => Order::STATUS_DISPATCHING]);
$params['order'] = $order;
$params['role'] = 1;
$params['auth'] = $this->auth;
$params['remark'] = '派单被取消[ID' . $item->id . '],订单状态回退';
if (!empty($remark)) {
$params['remark'] .= ',操作备注:' . $remark;
}
Hook::listen('order_change', $params);
}
Db::commit();
} catch (PDOException | Exception $e) {
Db::rollback();
$this->error($e->getMessage());
}
/* if ($count) {
$this->success();
}*/
$this->success(__('取消成功'));
}
}

View File

@ -24,16 +24,18 @@
<a href="javascript:;" class="btn btn-warning btn-add btn-disabled disabled {:$auth->check('orders/abnormal/add')}?'':'hide'}" title="{:__('创建异常')}" ><i class="fa fa-plus"></i> {:__('创建异常')}</a>
<a href="javascript:;" class="btn btn-danger btn-cancel-selected btn-disabled disabled {:$auth->check('orders/dispatch2/cancel')?'':'hide'}" title="{:__('取消任务')}" ><i class="fa fa-trash"></i> {:__('取消任务')}</a>
<div class="dropdown btn-group {:$auth->check('orders/dispatch/multi')?'':'hide'}">
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
<ul class="dropdown-menu text-left" role="menu">
{foreach name="statusList" item="vo"}
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:" data-params="status={$key}">{:__('Set status to ' . $key)}</a></li>
{/foreach}
</ul>
</div>
<!-- <div class="dropdown btn-group {:$auth->check('orders/dispatch/multi')?'':'hide'}">
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
<ul class="dropdown-menu text-left" role="menu">
{foreach name="statusList" item="vo"}
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:" data-params="status={$key}">{:__('Set status to ' . $key)}</a></li>
{/foreach}
</ul>
</div>-->
</div>

View File

@ -8,7 +8,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form','layer'], function ($,
index_url: 'orders/dispatch2/index' + location.search,
//add_url: 'orders/dispatch/add',
edit_url: 'orders/dispatch2/edit',
del_url: 'orders/dispatc2h/del',
//del_url: 'orders/dispatc2h/del',
multi_url: 'orders/dispatch2/multi',
import_url: 'orders/dispatch2/import',
table: 'order_dispatch',
@ -82,62 +82,6 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form','layer'], function ($,
return false;
}
},
{
name: 'del',
text:"取消",
title:"取消",
icon: 'fa fa-trash',
//title: __('Del'),
extend: 'data-toggle="tooltip" data-container="body"',
classname: 'btn btn-xs btn-danger btn-delone',
click: function (data, row) {
layer.prompt({
formType: 2,
value: '',
title: '请输入备注',
maxlength: 140,
},function(value, index, elem) {
var url = 'orders/dispatch2/del' + row.id;
var options = {url: url, data: {remark: value}};
Fast.api.ajax(options, function (data, ret) {
// table.trigger("uncheckbox");
table.bootstrapTable('refresh');
})
},function (data, ret) {
var error = $(this).data("error") || $.noop;
if (typeof error === 'function') {
if (false === error.call(this, data, ret)) {
return false;
}
}
});
layer.close(index);
},
visible:function(row){
if(row.btn_cancel){
return true;
}
return false;
},
},
{
name:"abnormal",
text:"创建异常",
title:"创建异常",
classname:"btn-add btn-dialog",
icon:'fa fa-add',
url:function(row) {
return "orders/abnormal/add?order_id="+row.order_id
},
dropdown:"更多",
visible:function(row){
if(row.btn_income){
return true;
}
return false;
},
//refresh:true,
}
],
}
@ -147,6 +91,62 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form','layer'], function ($,
// 为表格绑定事件
Table.api.bindevent(table);
// 获取选中项
$(document).on("click", ".btn-cancel-selected", function () {
//Layer.alert(JSON.stringify(Table.api.selecteddata(table)));
// 获取选中项的 ID
var selectedData = Table.api.selecteddata(table);
var selectedIds = selectedData.map(item => item.id); // 假设每行数据有 `id` 字段
if (selectedIds.length === 0) {
Layer.alert("请先选择至少一项数据!");
return;
}
// 弹出确认框并要求输入文本
Layer.prompt({
title: "请输入操作理由",
formType: 2, // 多行文本输入框
}, function (inputValue, index) {
if (!inputValue) {
Layer.alert("输入内容不能为空!");
return;
}
// 关闭弹出框
Layer.close(index);
//这里可以加入 Ajax 请求处理逻辑
$.ajax({
url: 'orders/dispatch2/cancel',
type: 'POST',
data: {
ids: selectedIds,
reason: inputValue,
},
success: function (response,data) {
if(response.code == 1){
// 成功提示
Toastr.success(data.message || "操作成功!");
// 刷新表格
table.bootstrapTable('refresh');
}else{
Toastr.error(response.msg || "操作失败!");
}
return;
},
error: function () {
Toastr.error("操作失败,请重试!");
return;
}
});
});
});
},
add: function () {
Controller.api.bindevent();