From 25a38ed14683efdd1b9e3f845e197e017b183e03 Mon Sep 17 00:00:00 2001 From: xman <1946321327@qq.com> Date: Mon, 16 Jun 2025 13:44:20 +0800 Subject: [PATCH 01/13] sb --- application/admin/controller/statistics/Dispatcher.php | 4 ++++ public/assets/js/backend/statistics/dispatcher.js | 2 ++ 2 files changed, 6 insertions(+) diff --git a/application/admin/controller/statistics/Dispatcher.php b/application/admin/controller/statistics/Dispatcher.php index a012811..44dd440 100644 --- a/application/admin/controller/statistics/Dispatcher.php +++ b/application/admin/controller/statistics/Dispatcher.php @@ -137,6 +137,8 @@ class Dispatcher extends Backend // 使用 IFNULL 确保结果为 null 时返回 0 "IFNULL(COUNT(CASE WHEN status = 60 THEN 1 END), 0) AS finish_num", //完成数 "IFNULL(COUNT(CASE WHEN status IN (".$orderValid.") THEN 1 END), 0) AS count_num", //总订单数 (排除取消 和草稿) + "IFNULL(COUNT(CASE WHEN is_overtime = 1 THEN 1 END), 0) AS overtime_num", //超时数 + "IFNULL(SUM(CASE WHEN status = 60 THEN total END), 0) AS total", //成效额 "IFNULL(SUM(CASE WHEN status = 60 THEN performance END), 0) AS performance", //业绩 "IFNULL(SUM(CASE WHEN status = 60 THEN (cost + material_cost) END), 0) AS cost_total", //总成本 @@ -196,6 +198,8 @@ class Dispatcher extends Backend $datum->performance_avg = $this->_calc($datum->performance,$datum->finish_num,2); //客单价 = 总成效额 / 完单数 $datum->total_avg = $this->_calc($datum->total,$datum->finish_num,2); + //超时率 + $datum->overtime_rate = $this->_calc($datum->overtime_num,$datum->count_num,4,true); if(!empty($datum->dispatch_admin_id)){ $datum->admin_user = Admin::where('id',$datum->dispatch_admin_id)->value('nickname')??'系统'; diff --git a/public/assets/js/backend/statistics/dispatcher.js b/public/assets/js/backend/statistics/dispatcher.js index 61cb680..23a6bec 100644 --- a/public/assets/js/backend/statistics/dispatcher.js +++ b/public/assets/js/backend/statistics/dispatcher.js @@ -46,6 +46,8 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'echarts', 'echarts-t {field: 'total_avg', title: __('客单价(¥)'), operate: false}, {field: 'avg_time_diff', title: __('派单时效(小时)'), operate: false}, + {field: 'overtime_num', title: __('派单超时数'), operate: false}, + {field: 'overtime_rate', title: __('派单超时率(%)'), operate: false}, //{field: 'admin_user', title: __('派单员'),operate: "LIKE",visible:false}, //{field: 'city_name', title: __('城市'),operate: "LIKE",visible:false}, From bcef5370b8ebd34e773149196ad5f2149559a597 Mon Sep 17 00:00:00 2001 From: xman <1946321327@qq.com> Date: Mon, 16 Jun 2025 13:49:35 +0800 Subject: [PATCH 02/13] sb --- application/admin/controller/statistics/Worker.php | 3 +-- public/assets/js/backend/statistics/worker.js | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/application/admin/controller/statistics/Worker.php b/application/admin/controller/statistics/Worker.php index b8600dc..395652f 100644 --- a/application/admin/controller/statistics/Worker.php +++ b/application/admin/controller/statistics/Worker.php @@ -301,8 +301,7 @@ class Worker extends Backend $datum->arrive_rate = $this->_calc($datum->arrive_count,$datum->get_count,4,true); //好评率 $datum->good_rate = $this->_calc($datum->good_count,$datum->finish_num,4,true); - - //及时联系率 + //及时联系率=(已预约上门数/已接单数)。 $datum->get_time_rate = $this->_calc($datum->get_js_count,$datum->get_count,4,true); diff --git a/public/assets/js/backend/statistics/worker.js b/public/assets/js/backend/statistics/worker.js index 55c3d80..fde4074 100644 --- a/public/assets/js/backend/statistics/worker.js +++ b/public/assets/js/backend/statistics/worker.js @@ -43,7 +43,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'echarts', 'echarts-t {field: 'cash_value', title: __('变现值'), operate: false}, {field: 'refuse_rate', title: __('拒单率(%)'), operate: false}, {field: 'arrive_rate', title: __('上门率(%)'), operate: false}, - {field: 'get_time_rate', title: __('接单及时率(%)'), operate: false}, + {field: 'get_time_rate', title: __('及时联系率(%)'), operate: false}, {field: 'good_rate', title: __('好评率(%)'), operate: false}, From 2d871656acb0d2fc6735b350cada241584877e54 Mon Sep 17 00:00:00 2001 From: xman <1946321327@qq.com> Date: Mon, 16 Jun 2025 14:43:25 +0800 Subject: [PATCH 03/13] sb --- .../admin/behavior/OrderDispatchLog.php | 1 + .../admin/controller/AutoDispatchLogic.php | 1 + .../admin/controller/orders/Dispatch2.php | 11 +++- .../controller/orders/Dispatchrecord.php | 15 ++--- .../admin/view/orders/dispatchlog/index.html | 56 ++++++++++++++++++- .../admin/view/orders/dispatchrecord/add.html | 15 +++-- .../command/CheckOrderDispatchGotCommand.php | 22 ++++++++ public/assets/js/backend/orders/dispatch2.js | 4 +- 8 files changed, 108 insertions(+), 17 deletions(-) diff --git a/application/admin/behavior/OrderDispatchLog.php b/application/admin/behavior/OrderDispatchLog.php index 110b5fc..26c103e 100644 --- a/application/admin/behavior/OrderDispatchLog.php +++ b/application/admin/behavior/OrderDispatchLog.php @@ -30,6 +30,7 @@ class OrderDispatchLog 'status' => $dispatch->status, 'status_text' => $statusList[$dispatch->status], 'remark' => $remark, + 'images' => $dispatch->record_images??'', 'admin_user' => $dispatch->admin_user??'系统', ]; \app\admin\model\OrderDispatchLog::create($data); diff --git a/application/admin/controller/AutoDispatchLogic.php b/application/admin/controller/AutoDispatchLogic.php index e769791..9bbf842 100644 --- a/application/admin/controller/AutoDispatchLogic.php +++ b/application/admin/controller/AutoDispatchLogic.php @@ -41,6 +41,7 @@ class AutoDispatchLogic $worker = (new Worker())->where('id', $worker_id)->find(); $insert ['worker_name'] = $worker['name']; $insert ['worker_tel'] = $worker['tel']; + $insert['follow'] = 1; $orderDispatch = new OrderDispatch(); $res = $orderDispatch->allowField(true)->save($insert); $order->status = \app\admin\model\Order::STATUS_DISPATCHED; diff --git a/application/admin/controller/orders/Dispatch2.php b/application/admin/controller/orders/Dispatch2.php index 36198f9..bf197f3 100644 --- a/application/admin/controller/orders/Dispatch2.php +++ b/application/admin/controller/orders/Dispatch2.php @@ -85,16 +85,23 @@ class Dispatch2 extends Backend $row->btn_record = in_array($row->status, $this->model->btnActiveStatusList('btn_record')) && $this->auth->check('orders/dispatchrecord/add'); if(!in_array($row->status, $this->model->btnActiveStatusList('btn_record')) ){ + //正常情况,执行不到这里来,不用担心循环执行问题 $row->follow = 2; OrderDispatch::where('id',$row->id)->update(['follow'=>2]); } if($row->btn_record){ - if($row->follow == 0 ){ + if($row->btn_record != 2){ + return true; + }else{ + return false; + } + + /*if($row->follow == 0 ){ $row->btn_record = true; }else{ $row->btn_record = false; - } + }*/ // if($row->type == 2) // { diff --git a/application/admin/controller/orders/Dispatchrecord.php b/application/admin/controller/orders/Dispatchrecord.php index bd60cb5..e9ec383 100644 --- a/application/admin/controller/orders/Dispatchrecord.php +++ b/application/admin/controller/orders/Dispatchrecord.php @@ -126,10 +126,10 @@ class Dispatchrecord extends Backend $params['need_notice'] = 0; $params['status'] = 1; - if(!empty($params['rate'])){ //修改任务的状态 + /* if(!empty($params['rate'])){ //修改任务的状态 if($dispatch->status != $params['rate']){ $dispatch->status = $params['rate']; - $dispatch->save(); + $dispatch->save();*/ $groups = $this->auth->getGroups($this->auth->id); $groupName = ''; @@ -139,17 +139,18 @@ class Dispatchrecord extends Backend } $dispatch->admin_user = $groupName.':'. $this->auth->nickname; + $dispatch->record_images = $params['images']; $hookParams = [ 'dispatch' => $dispatch, - 'remark' => '人工跟进,备注内容:'.$params['remark'], + 'remark' => '跟进订单,跟进内容:'.$params['remark'], ]; Hook::listen('order_dispatch_change', $hookParams); - if($params['rate'] == 10){ + /* if($params['rate'] == 10){ $dispatch->got_time = date('Y-m-d H:i:s', time()); - } - } - } + }*/ + /* } + }*/ $dispatch->follow = 1; } $dispatch->record_count ++; diff --git a/application/admin/view/orders/dispatchlog/index.html b/application/admin/view/orders/dispatchlog/index.html index 32df1da..de686b7 100644 --- a/application/admin/view/orders/dispatchlog/index.html +++ b/application/admin/view/orders/dispatchlog/index.html @@ -98,6 +98,18 @@ + + + + + diff --git a/application/admin/view/orders/dispatchrecord/add.html b/application/admin/view/orders/dispatchrecord/add.html index 18f98b4..95b4fd1 100644 --- a/application/admin/view/orders/dispatchrecord/add.html +++ b/application/admin/view/orders/dispatchrecord/add.html @@ -17,7 +17,7 @@
- +
@@ -44,6 +44,7 @@ {if condition='$dispatch.type eq 1'} + - - - +<!– const STATUS_GOTIT = 10; //已接–> +<!– const STATUS_PLANIT = 20; //已预约–> +<!– const STATUS_OVERTIME = 25; //超时(过了预约时间)–> +<!– const STATUS_CLOCK = 30; //已打卡–>
+-->
@@ -70,6 +72,9 @@ + + +
diff --git a/application/common/command/CheckOrderDispatchGotCommand.php b/application/common/command/CheckOrderDispatchGotCommand.php index 16b97e0..482d83b 100644 --- a/application/common/command/CheckOrderDispatchGotCommand.php +++ b/application/common/command/CheckOrderDispatchGotCommand.php @@ -16,6 +16,7 @@ use think\Hook; class CheckOrderDispatchGotCommand extends Command { protected $title = '【自动派单未接单检测,五分钟未接单,重派派单】/【自动派接单五分钟未预约,重新派单】/【自动派单上门时间已到,未完成上门】,每分钟执行一次'; + protected function configure() { $this->setName('check:dispatch-toget') @@ -27,6 +28,8 @@ class CheckOrderDispatchGotCommand extends Command $this->_toget(); $this->_toplan(); $this->_toarrive(); + $this->_tofinished(); + $output->info('OVER'); } @@ -127,4 +130,23 @@ class CheckOrderDispatchGotCommand extends Command } } + + private function _tofinished(): void + { + + //https://f1jo9ghdket.feishu.cn/wiki/PCK8wtWnSihQrukCRq1c3nCynyd + //5.自动订单派单完之后不需要进入待跟进状态,当师傅确认上门之后10分钟之内没有更新进度(首次更新进度),则需要进入待跟进状态,需要人为跟进。 + + $Model = new OrderDispatch(); + $now = date('Y-m-d H:i:s', time() -600); //创建三十分名以 + $count = $Model->where('status', OrderDispatch::STATUS_CLOCK) + ->where('type', 2) + ->where('follow', 1) + ->whereNull('estimated_finish_time') + ->where('arrive_time', '<=', $now) + ->update(['follow'=>0]); + + echo '已上门未更新:'. $count. PHP_EOL; + } + } \ No newline at end of file diff --git a/public/assets/js/backend/orders/dispatch2.js b/public/assets/js/backend/orders/dispatch2.js index 1532d5f..2c606bd 100644 --- a/public/assets/js/backend/orders/dispatch2.js +++ b/public/assets/js/backend/orders/dispatch2.js @@ -123,11 +123,11 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form','layer'], function ($, //{field: 'order.source_shop', title: __('Order.source_shop'), operate: '='}, // {field: 'order.source', title: __('Order.source')}, - {field: 'orderb.customer', title: __('Order.customer'), operate: false}, + {field: 'orderb.customer', title: __('Order.customer'), operate: 'like'}, {field: 'orderb.tel', title: __('Order.tel'), operate: 'like'}, {field: 'orderb.address', title: __('Order.address'), operate: false, table: table, class: 'autocontent', formatter: Table.api.formatter.content}, - {field: 'orderb.item_title', title: __('Order.item_title'), operate: false}, + {field: 'orderb.item_title', title: __('Order.item_title'), operate: 'like'}, {field: 'orderb.detail', title: __('Order.detail'), operate: false, table: table, class: 'autocontent', formatter: Table.api.formatter.content}, {field: 'order.images', title: __('Order.images'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images}, From d6e2ce6d93a424de2ed0076d0e929db5694af6e5 Mon Sep 17 00:00:00 2001 From: xman <1946321327@qq.com> Date: Mon, 16 Jun 2025 15:46:13 +0800 Subject: [PATCH 04/13] sb --- .../admin/view/orders/auditorder/edit.html | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/application/admin/view/orders/auditorder/edit.html b/application/admin/view/orders/auditorder/edit.html index ac0e306..bea7774 100755 --- a/application/admin/view/orders/auditorder/edit.html +++ b/application/admin/view/orders/auditorder/edit.html @@ -173,6 +173,40 @@ +
+ +
+
+ +
+ +
+ +
+ +
+
+ + + +
+ +
+
+ +
+ + +
+ +
+ +
+
+ + +
@@ -187,6 +221,7 @@
+
From 984bceaebb112e3a89a31e17fa67e91d39b363c6 Mon Sep 17 00:00:00 2001 From: xman <1946321327@qq.com> Date: Mon, 16 Jun 2025 16:20:41 +0800 Subject: [PATCH 05/13] sb --- public/assets/js/backend/order.js | 1 + 1 file changed, 1 insertion(+) diff --git a/public/assets/js/backend/order.js b/public/assets/js/backend/order.js index 6fa0f47..4993f48 100644 --- a/public/assets/js/backend/order.js +++ b/public/assets/js/backend/order.js @@ -198,6 +198,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'cascader'], function title: __('Edit'), extend: 'data-toggle="tooltip" data-container="body"', classname: 'btn btn-xs btn-info btn-editone', + dropdown: "更多", visible: function (row) { if (row.status != 60 && row.status != 70) { return true; From 5896d2171e01220cdedecff12ac039070de273b3 Mon Sep 17 00:00:00 2001 From: xman <1946321327@qq.com> Date: Mon, 16 Jun 2025 16:35:02 +0800 Subject: [PATCH 06/13] sb --- application/admin/controller/Ajax.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/admin/controller/Ajax.php b/application/admin/controller/Ajax.php index 9b603d6..01c0b7a 100755 --- a/application/admin/controller/Ajax.php +++ b/application/admin/controller/Ajax.php @@ -304,7 +304,7 @@ class Ajax extends Backend $where['level'] = 3; } } - $provincelist = Db::name('areas')->where($where)->field('id as value,name')->select(); + $provincelist = Db::name('areas')->where($where)->field('code as value,name')->select(); $this->success('', '', $provincelist); } From aff4782cea26eba1611e0b69d322ed31ddabfb56 Mon Sep 17 00:00:00 2001 From: xman <1946321327@qq.com> Date: Mon, 16 Jun 2025 17:28:03 +0800 Subject: [PATCH 07/13] =?UTF-8?q?=E4=B8=89=E7=BA=A7=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/orders/Dispatch2.php | 223 +++++++++++++++++- .../admin/view/common/area_select.html | 14 ++ .../admin/view/orders/dispatch2/index.html | 19 ++ application/common/controller/Backend.php | 20 ++ public/assets/js/backend/orders/dispatch2.js | 10 +- 5 files changed, 283 insertions(+), 3 deletions(-) create mode 100644 application/admin/view/common/area_select.html diff --git a/application/admin/controller/orders/Dispatch2.php b/application/admin/controller/orders/Dispatch2.php index bf197f3..ad68d05 100644 --- a/application/admin/controller/orders/Dispatch2.php +++ b/application/admin/controller/orders/Dispatch2.php @@ -16,6 +16,7 @@ use think\exception\DbException; use think\exception\PDOException; use think\exception\ValidateException; use think\Hook; +use think\Loader; /** * 派单列管理 @@ -92,9 +93,9 @@ class Dispatch2 extends Backend if($row->btn_record){ if($row->btn_record != 2){ - return true; + $row->btn_record = true; }else{ - return false; + $row->btn_record = false; } /*if($row->follow == 0 ){ @@ -132,6 +133,7 @@ class Dispatch2 extends Backend } } + $result = array("total" => $list->total(), "rows" => $list->items()); return json($result); @@ -495,4 +497,221 @@ class Dispatch2 extends Backend $this->success(__('取消成功')); } + + + /** + * 生成查询所需要的条件,排序方式 + * @param mixed $searchfields 快速查询的字段 + * @param boolean $relationSearch 是否关联查询 + * @return array + */ + protected function buildparams($searchfields = null, $relationSearch = null) + { + $searchfields = is_null($searchfields) ? $this->searchFields : $searchfields; + $relationSearch = is_null($relationSearch) ? $this->relationSearch : $relationSearch; + $search = $this->request->get("search", ''); + $filter = $this->request->get("filter", ''); + $op = $this->request->get("op", '', 'trim'); + $sort = $this->request->get("sort", !empty($this->model) && $this->model->getPk() ? $this->model->getPk() : 'id'); + $order = $this->request->get("order", "DESC"); + $offset = max(0, $this->request->get("offset/d", 0)); + $limit = max(0, $this->request->get("limit/d", 0)); + $limit = $limit ?: 999999; + //新增自动计算页码 + $page = $limit ? intval($offset / $limit) + 1 : 1; + if ($this->request->has("page")) { + $page = max(0, $this->request->get("page/d", 1)); + } + $this->request->get([config('paginate.var_page') => $page]); + $filter = (array)json_decode($filter, true); + + $province_id = $filter['province_id']??null; + $city_id = $filter['city_id']??null; + $area_id = $filter['city_id']??null; + unset($filter['city_id']); + unset($filter['province_id']); + unset($filter['area_id']); + + if(!empty($area_id)){ + $filter['orderb.area_id'] = $area_id; + }else{ + if(!empty($city_id)){ + $filter['orderb.area_id'] = $city_id; + }else{ + if(!empty($province_id)){ + $filter['orderb.area_id'] = $province_id; + } + } + } + + $op = (array)json_decode($op, true); + $op['orderb.area_id'] = 'like%'; + $filter = $filter ? $filter : []; + $where = []; + $alias = []; + $bind = []; + $name = ''; + $aliasName = ''; + if (!empty($this->model) && $relationSearch) { + $name = $this->model->getTable(); + $alias[$name] = Loader::parseName(basename(str_replace('\\', '/', get_class($this->model)))); + $aliasName = $alias[$name] . '.'; + } + $sortArr = explode(',', $sort); + foreach ($sortArr as $index => & $item) { + $item = stripos($item, ".") === false ? $aliasName . trim($item) : $item; + } + unset($item); + $sort = implode(',', $sortArr); + $adminIds = $this->getDataLimitAdminIds(); + if (is_array($adminIds)) { + $where[] = [$aliasName . $this->dataLimitField, 'in', $adminIds]; + } + if ($search) { + $searcharr = is_array($searchfields) ? $searchfields : explode(',', $searchfields); + foreach ($searcharr as $k => &$v) { + $v = stripos($v, ".") === false ? $aliasName . $v : $v; + } + unset($v); + $where[] = [implode("|", $searcharr), "LIKE", "%{$search}%"]; + } + $index = 0; + foreach ($filter as $k => $v) { + if (!preg_match('/^[a-zA-Z0-9_\-\.]+$/', $k)) { + continue; + } + $sym = $op[$k] ?? '='; + if (stripos($k, ".") === false) { + $k = $aliasName . $k; + } + $v = !is_array($v) ? trim($v) : $v; + $sym = strtoupper($op[$k] ?? $sym); + //null和空字符串特殊处理 + if (!is_array($v)) { + if (in_array(strtoupper($v), ['NULL', 'NOT NULL'])) { + $sym = strtoupper($v); + } + if (in_array($v, ['""', "''"])) { + $v = ''; + $sym = '='; + } + } + + switch ($sym) { + case '=': + case '<>': + $where[] = [$k, $sym, (string)$v]; + break; + case 'LIKE': + case 'NOT LIKE': + case 'LIKE %...%': + case 'NOT LIKE %...%': + $where[] = [$k, trim(str_replace('%...%', '', $sym)), "%{$v}%"]; + break; + + // ✅ 新增:右匹配(like%) + case 'LIKE%': + $where[] = [$k, 'LIKE', "{$v}%"]; + break; + + // ✅ 新增:左匹配(%like) + case '%LIKE': + $where[] = [$k, 'LIKE', "%{$v}"]; + break; + case '>': + case '>=': + case '<': + case '<=': + $where[] = [$k, $sym, intval($v)]; + break; + case 'FINDIN': + case 'FINDINSET': + case 'FIND_IN_SET': + $v = is_array($v) ? $v : explode(',', str_replace(' ', ',', $v)); + $findArr = array_values($v); + foreach ($findArr as $idx => $item) { + $bindName = "item_" . $index . "_" . $idx; + $bind[$bindName] = $item; + $where[] = "FIND_IN_SET(:{$bindName}, `" . str_replace('.', '`.`', $k) . "`)"; + } + break; + case 'IN': + case 'IN(...)': + case 'NOT IN': + case 'NOT IN(...)': + $where[] = [$k, str_replace('(...)', '', $sym), is_array($v) ? $v : explode(',', $v)]; + break; + case 'BETWEEN': + case 'NOT BETWEEN': + $arr = array_slice(explode(',', $v), 0, 2); + if (stripos($v, ',') === false || !array_filter($arr, function ($v) { + return $v != '' && $v !== false && $v !== null; + })) { + continue 2; + } + //当出现一边为空时改变操作符 + if ($arr[0] === '') { + $sym = $sym == 'BETWEEN' ? '<=' : '>'; + $arr = $arr[1]; + } elseif ($arr[1] === '') { + $sym = $sym == 'BETWEEN' ? '>=' : '<'; + $arr = $arr[0]; + } + $where[] = [$k, $sym, $arr]; + break; + case 'RANGE': + case 'NOT RANGE': + $v = str_replace(' - ', ',', $v); + $arr = array_slice(explode(',', $v), 0, 2); + if (stripos($v, ',') === false || !array_filter($arr)) { + continue 2; + } + //当出现一边为空时改变操作符 + if ($arr[0] === '') { + $sym = $sym == 'RANGE' ? '<=' : '>'; + $arr = $arr[1]; + } elseif ($arr[1] === '') { + $sym = $sym == 'RANGE' ? '>=' : '<'; + $arr = $arr[0]; + } + $tableArr = explode('.', $k); + if (count($tableArr) > 1 && $tableArr[0] != $name && !in_array($tableArr[0], $alias) + && !empty($this->model) && $this->relationSearch) { + //修复关联模型下时间无法搜索的BUG + $relation = Loader::parseName($tableArr[0], 1, false); + $alias[$this->model->$relation()->getTable()] = $tableArr[0]; + } + $where[] = [$k, str_replace('RANGE', 'BETWEEN', $sym) . ' TIME', $arr]; + break; + case 'NULL': + case 'IS NULL': + case 'NOT NULL': + case 'IS NOT NULL': + $where[] = [$k, strtolower(str_replace('IS ', '', $sym))]; + break; + default: + break; + } + $index++; + } + if (!empty($this->model)) { + $this->model->alias($alias); + } + $model = $this->model; + $where = function ($query) use ($where, $alias, $bind, &$model) { + if (!empty($model)) { + $model->alias($alias); + $model->bind($bind); + } + foreach ($where as $k => $v) { + if (is_array($v)) { + call_user_func_array([$query, 'where'], $v); + } else { + $query->where($v); + } + } + }; + return [$where, $sort, $order, $offset, $limit, $page, $alias, $bind]; + } + } diff --git a/application/admin/view/common/area_select.html b/application/admin/view/common/area_select.html new file mode 100644 index 0000000..a5148c3 --- /dev/null +++ b/application/admin/view/common/area_select.html @@ -0,0 +1,14 @@ + diff --git a/application/admin/view/orders/dispatch2/index.html b/application/admin/view/orders/dispatch2/index.html index c6d1e05..fef88ac 100644 --- a/application/admin/view/orders/dispatch2/index.html +++ b/application/admin/view/orders/dispatch2/index.html @@ -54,3 +54,22 @@
+ + + + + + diff --git a/application/common/controller/Backend.php b/application/common/controller/Backend.php index 67e9d79..43106a3 100755 --- a/application/common/controller/Backend.php +++ b/application/common/controller/Backend.php @@ -278,6 +278,26 @@ class Backend extends Controller } $this->request->get([config('paginate.var_page') => $page]); $filter = (array)json_decode($filter, true); + + $province_id = $filter['province_id']??null; + $city_id = $filter['city_id']??null; + $area_id = $filter['city_id']??null; + unset($filter['city_id']); + unset($filter['province_id']); + unset($filter['area_id']); + + if(!empty($area_id)){ + $filter['area_id'] = $area_id; + }else{ + if(!empty($city_id)){ + $filter['area_id'] = $city_id; + }else{ + if(!empty($province_id)){ + $filter['area_id'] = $province_id; + } + } + } + $op = (array)json_decode($op, true); $filter = $filter ? $filter : []; $where = []; diff --git a/public/assets/js/backend/orders/dispatch2.js b/public/assets/js/backend/orders/dispatch2.js index 2c606bd..a58b496 100644 --- a/public/assets/js/backend/orders/dispatch2.js +++ b/public/assets/js/backend/orders/dispatch2.js @@ -94,8 +94,9 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form','layer'], function ($, }, + {field: 'got_time', title: __('接单时间'), operate:'RANGE', addclass:'datetimerange', autocomplete:false}, - {field: 'plan_time', title: __('Plan_time'), operate:false, addclass:'datetimerange', autocomplete:false, + {field: 'plan_time', title: __('Plan_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter:function(value,row,index){ if(row.status == 25){ return' '+value+''; @@ -153,6 +154,13 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form','layer'], function ($, //{field: 'update_time', title: __('Update_time'), operate:false, addclass:'datetimerange', autocomplete:false}, {field: 'finish_time', title: __('Finish_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false}, + {field: 'area', title: __('地区'), searchList: function (column) { + return Template('categorytpl', {}); + }, formatter: function (value, row, index) { + return '无'; + }, visible: false + }, + {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate, align:'left', From 754621ecac3d5fbabcf8d464adacd2ec1783eb0a Mon Sep 17 00:00:00 2001 From: xman <1946321327@qq.com> Date: Mon, 16 Jun 2025 17:30:21 +0800 Subject: [PATCH 08/13] =?UTF-8?q?=E4=B8=89=E7=BA=A7=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/view/orders/dispatch2/index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/application/admin/view/orders/dispatch2/index.html b/application/admin/view/orders/dispatch2/index.html index fef88ac..ad2dce2 100644 --- a/application/admin/view/orders/dispatch2/index.html +++ b/application/admin/view/orders/dispatch2/index.html @@ -60,9 +60,9 @@
- - - + + + From dba8e571fc9708fbd7c799af00dd03733ae60c42 Mon Sep 17 00:00:00 2001 From: xman <1946321327@qq.com> Date: Mon, 16 Jun 2025 17:34:18 +0800 Subject: [PATCH 09/13] =?UTF-8?q?=E4=B8=89=E7=BA=A7=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/orders/Revisitorder.php | 22 +++++++++++++++++++ .../admin/view/orders/revisitorder/index.html | 16 ++++++++++++++ .../assets/js/backend/orders/revisitorder.js | 7 ++++++ 3 files changed, 45 insertions(+) diff --git a/application/admin/controller/orders/Revisitorder.php b/application/admin/controller/orders/Revisitorder.php index 969b267..343018d 100644 --- a/application/admin/controller/orders/Revisitorder.php +++ b/application/admin/controller/orders/Revisitorder.php @@ -167,6 +167,28 @@ class Revisitorder extends Backend $op['revisit_id'] = '='; } + + $province_id = $filter['province_id']??null; + $city_id = $filter['city_id']??null; + $area_id = $filter['city_id']??null; + unset($filter['city_id']); + unset($filter['province_id']); + unset($filter['area_id']); + + if(!empty($area_id)){ + $filter['area_id'] = $area_id; + }else{ + if(!empty($city_id)){ + $filter['area_id'] = $city_id; + }else{ + if(!empty($province_id)){ + $filter['area_id'] = $province_id; + } + } + } + $op['orderb.area_id'] = 'like%'; + + /* if($returnvalue>0){ $op['aftersale_id'] = '>'; $op['status'] = '70'; diff --git a/application/admin/view/orders/revisitorder/index.html b/application/admin/view/orders/revisitorder/index.html index d193d40..3039f1d 100644 --- a/application/admin/view/orders/revisitorder/index.html +++ b/application/admin/view/orders/revisitorder/index.html @@ -44,3 +44,19 @@
+ + + diff --git a/public/assets/js/backend/orders/revisitorder.js b/public/assets/js/backend/orders/revisitorder.js index ebac4b3..ffaa599 100644 --- a/public/assets/js/backend/orders/revisitorder.js +++ b/public/assets/js/backend/orders/revisitorder.js @@ -122,6 +122,13 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin //{field: 'review.admin_id', title: __('Review.admin_id')}, + {field: 'area', title: __('地区'), searchList: function (column) { + return Template('categorytpl', {}); + }, formatter: function (value, row, index) { + return '无'; + }, visible: false + }, + {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate, buttons:[ From 0718b4626c8a832bb2e77c29c3f8dce9014c5609 Mon Sep 17 00:00:00 2001 From: xman <1946321327@qq.com> Date: Mon, 16 Jun 2025 17:39:14 +0800 Subject: [PATCH 10/13] =?UTF-8?q?=E4=B8=89=E7=BA=A7=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/orders/Revisitorder.php | 2 +- .../admin/controller/statistics/Worker.php | 24 +++++++++++++++++++ .../admin/view/statistics/worker/index.html | 17 +++++++++++++ public/assets/js/backend/statistics/worker.js | 9 ++++++- 4 files changed, 50 insertions(+), 2 deletions(-) diff --git a/application/admin/controller/orders/Revisitorder.php b/application/admin/controller/orders/Revisitorder.php index 343018d..1292a5c 100644 --- a/application/admin/controller/orders/Revisitorder.php +++ b/application/admin/controller/orders/Revisitorder.php @@ -186,7 +186,7 @@ class Revisitorder extends Backend } } } - $op['orderb.area_id'] = 'like%'; + $op['area_id'] = 'LIKE%'; /* if($returnvalue>0){ diff --git a/application/admin/controller/statistics/Worker.php b/application/admin/controller/statistics/Worker.php index 395652f..1db788f 100644 --- a/application/admin/controller/statistics/Worker.php +++ b/application/admin/controller/statistics/Worker.php @@ -353,7 +353,31 @@ class Worker extends Backend $this->request->get([config('paginate.var_page') => $page]); $filter = (array)json_decode($filter, true); unset($filter['daterange']); + + + + $province_id = $filter['province_id']??null; + $city_id = $filter['city_id']??null; + $area_id = $filter['city_id']??null; + unset($filter['city_id']); + unset($filter['province_id']); + unset($filter['area_id']); + + if(!empty($area_id)){ + $filter['fa_worker.area_id'] = $area_id; + }else{ + if(!empty($city_id)){ + $filter['fa_worker.area_id'] = $city_id; + }else{ + if(!empty($province_id)){ + $filter['fa_worker.area_id'] = $province_id; + } + } + } + $op = (array)json_decode($op, true); + $op['fa_worker.area_id'] = 'LIKE%'; + $filter = $filter ? $filter : []; $where = []; $alias = []; diff --git a/application/admin/view/statistics/worker/index.html b/application/admin/view/statistics/worker/index.html index 345bc64..c5cb644 100644 --- a/application/admin/view/statistics/worker/index.html +++ b/application/admin/view/statistics/worker/index.html @@ -340,3 +340,20 @@ --> + + + + diff --git a/public/assets/js/backend/statistics/worker.js b/public/assets/js/backend/statistics/worker.js index fde4074..b634c7f 100644 --- a/public/assets/js/backend/statistics/worker.js +++ b/public/assets/js/backend/statistics/worker.js @@ -62,7 +62,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'echarts', 'echarts-t } }, */ - {field: 'area2.merge_name', title: __('地区'),operate: 'LIKE',visible:false}, + {field: 'area2.merge_name', title: __('地区'),operate: false}, {field: 'daterange', title: __('时间筛选'), addclass:'datetimerange', autocomplete:false, @@ -74,6 +74,13 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'echarts', 'echarts-t defaultValue: Config.default_daterange }, + {field: 'area', title: __('地区'), searchList: function (column) { + return Template('categorytpl', {}); + }, formatter: function (value, row, index) { + return '无'; + }, visible: false + }, + {field: 'operate', title: __('Operate'), table: table2, events: Table.api.events.operate, formatter: Table.api.formatter.operate, buttons: [ { From e3bab20f7be0597e32ca295f9f15ad33f4fad0ed Mon Sep 17 00:00:00 2001 From: xman <1946321327@qq.com> Date: Mon, 16 Jun 2025 17:44:03 +0800 Subject: [PATCH 11/13] =?UTF-8?q?=E4=B8=89=E7=BA=A7=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/Order.php | 32 +++++++++++++++++++ .../admin/controller/orders/Revisitorder.php | 9 ++++++ .../admin/controller/statistics/Worker.php | 9 ++++++ application/admin/view/order/index.html | 17 ++++++++++ application/common/controller/Backend.php | 9 ++++++ public/assets/js/backend/order.js | 8 +++++ 6 files changed, 84 insertions(+) diff --git a/application/admin/controller/Order.php b/application/admin/controller/Order.php index 5a7d55c..fec957d 100644 --- a/application/admin/controller/Order.php +++ b/application/admin/controller/Order.php @@ -790,7 +790,30 @@ class Order extends Backend } $this->request->get([config('paginate.var_page') => $page]); $filter = (array)json_decode($filter, true); + + + + $province_id = $filter['province_id']??null; + $city_id = $filter['city_id']??null; + $area_id = $filter['city_id']??null; + unset($filter['city_id']); + unset($filter['province_id']); + unset($filter['area_id']); + + if(!empty($area_id)){ + $filter['area_id'] = $area_id; + }else{ + if(!empty($city_id)){ + $filter['area_id'] = $city_id; + }else{ + if(!empty($province_id)){ + $filter['area_id'] = $province_id; + } + } + } + $op = (array)json_decode($op, true); + $op['area_id'] = 'LIKE%'; $filter = $filter ? $filter : []; $where = []; $alias = []; @@ -855,6 +878,15 @@ class Order extends Backend case 'NOT LIKE %...%': $where[] = [$k, trim(str_replace('%...%', '', $sym)), "%{$v}%"]; break; + // ✅ 新增:右匹配(like%) + case 'LIKE%': + $where[] = [$k, 'LIKE', "{$v}%"]; + break; + + // ✅ 新增:左匹配(%like) + case '%LIKE': + $where[] = [$k, 'LIKE', "%{$v}"]; + break; case '>': case '>=': case '<': diff --git a/application/admin/controller/orders/Revisitorder.php b/application/admin/controller/orders/Revisitorder.php index 1292a5c..1ace67e 100644 --- a/application/admin/controller/orders/Revisitorder.php +++ b/application/admin/controller/orders/Revisitorder.php @@ -259,6 +259,15 @@ class Revisitorder extends Backend case 'NOT LIKE %...%': $where[] = [$k, trim(str_replace('%...%', '', $sym)), "%{$v}%"]; break; + // ✅ 新增:右匹配(like%) + case 'LIKE%': + $where[] = [$k, 'LIKE', "{$v}%"]; + break; + + // ✅ 新增:左匹配(%like) + case '%LIKE': + $where[] = [$k, 'LIKE', "%{$v}"]; + break; case '>': case '>=': case '<': diff --git a/application/admin/controller/statistics/Worker.php b/application/admin/controller/statistics/Worker.php index 1db788f..e240d2e 100644 --- a/application/admin/controller/statistics/Worker.php +++ b/application/admin/controller/statistics/Worker.php @@ -440,6 +440,15 @@ class Worker extends Backend case 'NOT LIKE %...%': $where[] = [$k, trim(str_replace('%...%', '', $sym)), "%{$v}%"]; break; + // ✅ 新增:右匹配(like%) + case 'LIKE%': + $where[] = [$k, 'LIKE', "{$v}%"]; + break; + + // ✅ 新增:左匹配(%like) + case '%LIKE': + $where[] = [$k, 'LIKE', "%{$v}"]; + break; case '>': case '>=': case '<': diff --git a/application/admin/view/order/index.html b/application/admin/view/order/index.html index 80e7b3b..825784b 100644 --- a/application/admin/view/order/index.html +++ b/application/admin/view/order/index.html @@ -124,3 +124,20 @@ } + + + + diff --git a/application/common/controller/Backend.php b/application/common/controller/Backend.php index 43106a3..b226d8c 100755 --- a/application/common/controller/Backend.php +++ b/application/common/controller/Backend.php @@ -361,6 +361,15 @@ class Backend extends Controller case 'NOT LIKE %...%': $where[] = [$k, trim(str_replace('%...%', '', $sym)), "%{$v}%"]; break; + // ✅ 新增:右匹配(like%) + case 'LIKE%': + $where[] = [$k, 'LIKE', "{$v}%"]; + break; + + // ✅ 新增:左匹配(%like) + case '%LIKE': + $where[] = [$k, 'LIKE', "%{$v}"]; + break; case '>': case '>=': case '<': diff --git a/public/assets/js/backend/order.js b/public/assets/js/backend/order.js index 4993f48..2a4d1c8 100644 --- a/public/assets/js/backend/order.js +++ b/public/assets/js/backend/order.js @@ -183,6 +183,14 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'cascader'], function addclass: 'datetimerange', autocomplete: false }, + + {field: 'area', title: __('地区'), searchList: function (column) { + return Template('categorytpl', {}); + }, formatter: function (value, row, index) { + return '无'; + }, visible: false + }, + { field: 'operate', title: __('Operate'), From e9e5ad25a085467f5f21b297e91e388776f21878 Mon Sep 17 00:00:00 2001 From: xman <1946321327@qq.com> Date: Mon, 16 Jun 2025 17:58:33 +0800 Subject: [PATCH 12/13] =?UTF-8?q?=E4=B8=89=E7=BA=A7=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/orders/Auditorder.php | 2 +- application/admin/model/Order.php | 5 +++++ public/assets/js/backend/orders/auditorder.js | 4 ++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/application/admin/controller/orders/Auditorder.php b/application/admin/controller/orders/Auditorder.php index c9e8b66..ceddbab 100644 --- a/application/admin/controller/orders/Auditorder.php +++ b/application/admin/controller/orders/Auditorder.php @@ -65,7 +65,7 @@ class Auditorder extends Backend $list = $this->model ->scope('tab',Order::TAB_AUDIT) ->alias('order') - ->with(['auditadmin']) + ->with(['auditadmin','workerman']) ->where($where) ->order($sort, $order) ->paginate($limit); diff --git a/application/admin/model/Order.php b/application/admin/model/Order.php index d656580..0aea1cd 100644 --- a/application/admin/model/Order.php +++ b/application/admin/model/Order.php @@ -262,4 +262,9 @@ class Order extends Model return $query; } + + public function workerman(){ + return $this->belongsTo(Worker::class,'worker_id',); + } + } diff --git a/public/assets/js/backend/orders/auditorder.js b/public/assets/js/backend/orders/auditorder.js index fdda437..12ac61b 100755 --- a/public/assets/js/backend/orders/auditorder.js +++ b/public/assets/js/backend/orders/auditorder.js @@ -84,6 +84,10 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin {field: 'cost', title: __('Cost'), operate:false}, {field: 'material_cost', title: __('材料成本'), operate:false}, {field: 'performance', title: __('Performance'), operate:false}, + + {field: 'workerman.images', title: __('师傅收款码'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images}, + {field: 'trans_images', title: __('转账凭证'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images}, + // {field: 'cancel_reason_id', title: __('Cancel_reason_id')}, //{field: 'cancel_detail', title: __('Cancel_detail'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content}, // {field: 'audit_admin_id', title: __('Audit_admin_id')}, From 802a14cda5469f765b5022bec29671319f07e6e7 Mon Sep 17 00:00:00 2001 From: xman <1946321327@qq.com> Date: Mon, 16 Jun 2025 18:16:10 +0800 Subject: [PATCH 13/13] =?UTF-8?q?=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/workers/Worker.php | 2 +- application/admin/view/workers/worker/add.html | 8 ++++++++ application/admin/view/workers/worker/edit.html | 8 ++++++++ public/assets/js/backend/workers/worker.js | 1 + 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/application/admin/controller/workers/Worker.php b/application/admin/controller/workers/Worker.php index 31a9da7..ed455b1 100644 --- a/application/admin/controller/workers/Worker.php +++ b/application/admin/controller/workers/Worker.php @@ -164,7 +164,7 @@ class Worker extends Backend $area = Area::getByCode($params['area_id']); if($area){ - $location = getLocation($area->merge_name); + $location = getLocation($area->merge_name.' '.$params['address']); if(!empty($location)){ $params['lng'] = $location['lng']; $params['lat'] = $location['lat']; diff --git a/application/admin/view/workers/worker/add.html b/application/admin/view/workers/worker/add.html index 8be80d2..374bde5 100644 --- a/application/admin/view/workers/worker/add.html +++ b/application/admin/view/workers/worker/add.html @@ -20,6 +20,14 @@ + +
+ +
+ +
+
+
diff --git a/application/admin/view/workers/worker/edit.html b/application/admin/view/workers/worker/edit.html index dd35d03..e01c404 100644 --- a/application/admin/view/workers/worker/edit.html +++ b/application/admin/view/workers/worker/edit.html @@ -38,6 +38,14 @@ value="{$row.area_id}"/>
+ +
+ +
+ +
+
+
diff --git a/public/assets/js/backend/workers/worker.js b/public/assets/js/backend/workers/worker.js index 88b958b..b1727cf 100644 --- a/public/assets/js/backend/workers/worker.js +++ b/public/assets/js/backend/workers/worker.js @@ -60,6 +60,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'jstree'], //{field: 'lng', title: __('Lng'), operate:'BETWEEN'}, //{field: 'lat', title: __('Lat'), operate:'BETWEEN'}, {field: 'area.short_merge_name', title: __('Area.short_merge_name'), searchable: false}, + {field: 'address', title: __('地址'), searchable: false}, {field: 'rate', title: '分成'}, {field: 'rate_remark', title: '分成备注'}, {field: 'remark', title: '备注'},