退款数据

This commit is contained in:
hant 2025-05-27 23:54:30 +08:00
parent 1ab27a7bb8
commit 353fd4c3eb
7 changed files with 1186 additions and 15 deletions

View File

@ -185,7 +185,7 @@ class Aftersale extends Backend
$start = now()->modify('-30 days')->format('Y-m-d'); $start = now()->modify('-30 days')->format('Y-m-d');
$end_at = now()->format('Y-m-d 23:29:59'); $end_at = now()->format('Y-m-d 23:29:59');
$area_code = request()->get('area_id'); $item_id = request()->get('item_id');
$filter = request()->get('range', ''); $filter = request()->get('range', '');
if (!empty($filter)) { if (!empty($filter)) {
$arr = explode(' - ', $filter); $arr = explode(' - ', $filter);
@ -201,8 +201,11 @@ class Aftersale extends Backend
$build->group('a.item_title'); $build->group('a.item_title');
if ($area_code) {
$build->where('area_id', 'like', $this->getSelectAreaCode($area_code) . '%'); if ($item_id) {
$item_ids = $this->getItemsById($item_id);
$item_ids [] = $item_id;
$build->whereIn('item_id', $item_ids);
} }
$build->field( $build->field(
@ -243,4 +246,79 @@ class Aftersale extends Backend
return $val; return $val;
} }
private function getItemsById(mixed $item_id)
{
$build = new \app\admin\model\Item();
$data = $build->getAllData();
return \app\admin\model\Item::getAllChildIds($data,$item_id);
}
public function worker()
{
$build = new \app\admin\model\Worker();
$build->alias('a')
->join('order b', 'a.id = b.worker_id', 'right')
->join('aftersale c', 'b.id = c.admin_id', 'left')
->where('b.status', Order::STATUS_FINISHED);
$start = now()->modify('-30 days')->format('Y-m-d');
$end_at = now()->format('Y-m-d 23:29:59');
$filter = request()->get('range', '');
if (!empty($filter)) {
$arr = explode(' - ', $filter);
if (trim($arr[0])) {
$start = trim($arr[0]);
}
if (trim($arr[1])) {
$end_at = trim($arr[1]) . ' 23:29:59';
}
}
$keyword = request()->get('keyword');
$build->where('audit_time', '>=', $start);
$build->where('audit_time', '<=', $end_at);
if (!is_null($keyword)) {
$build->where(function ($q) use ($keyword) {
$q->where('name', 'like', '%' . $keyword . '%')
->whereor('a.tel', 'like', '%' . $keyword . '%');
});
}
$build->group('a.id');
$build->field(
[
'a.id',
'a.name',
'a.tel',
'count(b.id) order_total',
'count(c.id) after_total',
]
);
$res = $build->paginate();
$total = $res->total();
$ress = $res->items();
// dd(Admin::getLastSql());
$data = [];
foreach ($ress as $res) {
$item = $res->toArray();
$item['rate'] = $this->mydiv($item['after_total'],$item['order_total']) . '%';
$data [] = $item;
}
return [
'rows' => $data,
'total' => $total
];
}
} }

View File

@ -70,12 +70,50 @@ class Item extends Model
foreach ($items as $item){ foreach ($items as $item){
if ($item['pid'] != 0 && isset($pid_map[$item['pid']])){ if ($item['pid'] != 0 && isset($pid_map[$item['pid']])){
$res_items [] = [ $res_items [] = [
...$item,'ptitle' => $pid_map[$item['pid']]['title'] ...$item->toArray(),'ptitle' => $pid_map[$item['pid']]['title']
]; ];
} }
} }
return $res_items; return $res_items;
} }
public function getAllData(){
$items = $this
->where('status',1)
->field(['id','title','key_word','pid'])
->order('pid','asc')
->order('sort','desc')
->select();
$res_items = [];
foreach ($items as $item){
$res_items [] = $item->toArray();
}
return $res_items;
}
static function getAllChildIds(array $data, int $parentId): array {
// 先构建 pid 索引表,加速查找
$index = [];
foreach ($data as $item) {
$index[$item['pid']][] = $item;
}
// 递归函数,闭包形式避免污染全局
$collect = function($pid) use (&$collect, &$index) {
$ids = [];
if (isset($index[$pid])) {
foreach ($index[$pid] as $child) {
$ids[] = $child['id'];
$ids = array_merge($ids, $collect($child['id']));
}
}
return $ids;
};
return $collect($parentId);
}
} }

View File

@ -167,7 +167,7 @@
<li><a href="#second" data-val="second" data-toggle="tab">城市退款</a></li> <li><a href="#second" data-val="second" data-toggle="tab">城市退款</a></li>
<li><a href="#third" data-val="third" data-toggle="tab">服务项目退款</a></li> <li><a href="#third" data-val="third" data-toggle="tab">服务项目退款</a></li>
<li><a href="#fourth" data-val="fourth" data-toggle="tab">师傅退款</a></li> <li><a href="#fourth" data-val="fourth" data-toggle="tab">师傅退款</a></li>
<li><a href="#fiveth" data-val="fiveth" data-toggle="tab">全部退款订单</a></li> <!-- <li><a href="#fiveth" data-val="fiveth" data-toggle="tab">全部退款订单</a></li>-->
</ul> </ul>
</div> </div>
@ -177,7 +177,7 @@
<div class="tab-pane fade active in" style="height: 100%" id="first"> <div class="tab-pane fade active in" style="height: 100%" id="first">
<div id="chart-filter-table" style="margin-top:20px;margin-bottom: 30px;"> <div id="chart-filter-table" style="margin-top:20px;margin-bottom: 30px;">
<div style="display: flex;position: relative" class="col-sm-6 row"> <div style="display: flex;position: relative" class="col-sm-6 row">
<input type="text" class="form-control mr-2" id="keyword" placeholder="名称/电话号码" > <input type="text" style="max-width: 200px" class="form-control mr-2" id="keyword" placeholder="名称/电话号码" >
<input type="text" class="form-control datetimerange" data-locale='{"format":"YYYY-MM-DD"}' <input type="text" class="form-control datetimerange" data-locale='{"format":"YYYY-MM-DD"}'
placeholder="指定日期" name="filter[daterange]" id="daterange-table" autocomplete="off" style="width: 180px;"> placeholder="指定日期" name="filter[daterange]" id="daterange-table" autocomplete="off" style="width: 180px;">
<button class="btn btn-default ml-2" id="first-search">查询</button> <button class="btn btn-default ml-2" id="first-search">查询</button>
@ -214,12 +214,14 @@
<div class="tab-pane fade" id="third"> <div class="tab-pane fade" id="third">
<div id="chart-filter-table3" style="margin-top:20px;margin-bottom: 30px;"> <div id="chart-filter-table3" style="margin-top:20px;margin-bottom: 30px;">
<div style="display: flex;position: relative" class="col-sm-6 row"> <div style="display: flex;position: relative" class="col-lg-6 col-sm-8 row">
<input type="text" id="item_id" class="zd-input__inner mr-2" style="width: 275px"> <div style="max-width: 275px">
<input type="text" id="item_id" class="zd-input__inner mr-2" style="width: 275px">
</div>
<input type="text" id="item_id_value" style="display: none" name="row[item_id]"> <input type="text" id="item_id_value" style="display: none" name="row[item_id]">
<input type="text" class="form-control datetimerange ml-2" data-locale='{"format":"YYYY-MM-DD"}' <input type="text" class="form-control datetimerange ml-2" style="max-width: 200px" data-locale='{"format":"YYYY-MM-DD"}'
placeholder="指定日期" name="filter[daterange]" id="daterange-table3" autocomplete="off" style="width: 180px;"> placeholder="指定日期" name="filter[daterange]" id="daterange-table3" autocomplete="off" >
<button class="btn btn-default ml-2" id="first-search3">查询</button> <button class="btn btn-default ml-2" id="first-search3">查询</button>
</div> </div>
<!-- 查询按钮 --> <!-- 查询按钮 -->
@ -231,13 +233,24 @@
</div> </div>
<div class="tab-pane fade" id="fourth"> <div class="tab-pane fade" id="fourth">
<div id="chart-filter-table4" style="margin-top:20px;margin-bottom: 30px;">
<div style="display: flex;position: relative" class="col-sm-6 row">
<input type="text" style="max-width: 200px" class="form-control mr-2" id="keyword4" placeholder="名称/电话号码" >
<input type="text" class="form-control datetimerange" data-locale='{"format":"YYYY-MM-DD"}'
placeholder="指定日期" name="filter[daterange]" id="daterange-table4" autocomplete="off" style="width: 180px;">
<button class="btn btn-default ml-2" id="first-search4">查询</button>
</div>
<!-- 查询按钮 -->
</div>
<table id="table4" class="table table-striped table-bordered table-hover" width="100%"> <table id="table4" class="table table-striped table-bordered table-hover" width="100%">
</table> </table>
</div> </div>
<div class="tab-pane fade" id="fiveth"> <!-- <div class="tab-pane fade" id="fiveth">-->
<table id="table5" class="table table-striped table-bordered table-hover" width="100%"> <!-- <table id="table5" class="table table-striped table-bordered table-hover" width="100%">-->
</table> <!-- </table>-->
</div> <!-- </div>-->
</div> </div>
</div> </div>
</div> </div>

View File

@ -0,0 +1,968 @@
array:138 [
0 => array:5 [
"id" => 598
"title" => "刷墙补漆"
"key_word" => null
"pid" => 0
"status_text" => ""
]
1 => array:5 [
"id" => 614
"title" => "美缝施工"
"key_word" => null
"pid" => 0
"status_text" => ""
]
2 => array:5 [
"id" => 619
"title" => "拆除清运"
"key_word" => null
"pid" => 0
"status_text" => ""
]
3 => array:5 [
"id" => 627
"title" => "家政保洁"
"key_word" => null
"pid" => 0
"status_text" => ""
]
4 => array:5 [
"id" => 638
"title" => "电路维修"
"key_word" => null
"pid" => 0
"status_text" => ""
]
5 => array:5 [
"id" => 646
"title" => "水路维修"
"key_word" => null
"pid" => 0
"status_text" => ""
]
6 => array:5 [
"id" => 668
"title" => "开锁换锁"
"key_word" => null
"pid" => 0
"status_text" => ""
]
7 => array:5 [
"id" => 676
"title" => "门窗维修"
"key_word" => null
"pid" => 0
"status_text" => ""
]
8 => array:5 [
"id" => 686
"title" => "收纳整理"
"key_word" => null
"pid" => 0
"status_text" => ""
]
9 => array:5 [
"id" => 695
"title" => "沙发翻新"
"key_word" => null
"pid" => 0
"status_text" => ""
]
10 => array:5 [
"id" => 704
"title" => "地板维修"
"key_word" => null
"pid" => 0
"status_text" => ""
]
11 => array:5 [
"id" => 719
"title" => "软装清洗"
"key_word" => null
"pid" => 0
"status_text" => ""
]
12 => array:5 [
"id" => 599
"title" => "墙面修补"
"key_word" => null
"pid" => 598
"status_text" => ""
]
13 => array:5 [
"id" => 607
"title" => "墙面刷漆"
"key_word" => null
"pid" => 598
"status_text" => ""
]
14 => array:5 [
"id" => 610
"title" => "墙面翻新"
"key_word" => null
"pid" => 598
"status_text" => ""
]
15 => array:5 [
"id" => 600
"title" => "裂缝"
"key_word" => null
"pid" => 599
"status_text" => ""
]
16 => array:5 [
"id" => 601
"title" => "孔洞"
"key_word" => null
"pid" => 599
"status_text" => ""
]
17 => array:5 [
"id" => 602
"title" => "起皮"
"key_word" => null
"pid" => 599
"status_text" => ""
]
18 => array:5 [
"id" => 603
"title" => "发霉"
"key_word" => null
"pid" => 599
"status_text" => ""
]
19 => array:5 [
"id" => 604
"title" => "鼓包"
"key_word" => null
"pid" => 599
"status_text" => ""
]
20 => array:5 [
"id" => 605
"title" => "墙面污渍"
"key_word" => null
"pid" => 599
"status_text" => ""
]
21 => array:5 [
"id" => 606
"title" => "划痕"
"key_word" => null
"pid" => 599
"status_text" => ""
]
22 => array:5 [
"id" => 608
"title" => "乳胶漆"
"key_word" => null
"pid" => 607
"status_text" => ""
]
23 => array:5 [
"id" => 609
"title" => "艺术漆"
"key_word" => null
"pid" => 607
"status_text" => ""
]
24 => array:5 [
"id" => 611
"title" => "毛坯房刷漆"
"key_word" => null
"pid" => 610
"status_text" => ""
]
25 => array:5 [
"id" => 612
"title" => "局部翻新"
"key_word" => null
"pid" => 610
"status_text" => ""
]
26 => array:5 [
"id" => 613
"title" => "整体翻新"
"key_word" => null
"pid" => 610
"status_text" => ""
]
27 => array:5 [
"id" => 615
"title" => "瓷砖美缝"
"key_word" => null
"pid" => 614
"status_text" => ""
]
28 => array:5 [
"id" => 616
"title" => "石材美缝"
"key_word" => null
"pid" => 614
"status_text" => ""
]
29 => array:5 [
"id" => 617
"title" => "马赛克美缝"
"key_word" => null
"pid" => 614
"status_text" => ""
]
30 => array:5 [
"id" => 618
"title" => "美缝清理维护"
"key_word" => null
"pid" => 614
"status_text" => ""
]
31 => array:5 [
"id" => 620
"title" => "墙体拆除"
"key_word" => null
"pid" => 619
"status_text" => ""
]
32 => array:5 [
"id" => 621
"title" => "地面拆除"
"key_word" => null
"pid" => 619
"status_text" => ""
]
33 => array:5 [
"id" => 622
"title" => "吊顶拆除"
"key_word" => null
"pid" => 619
"status_text" => ""
]
34 => array:5 [
"id" => 623
"title" => "门窗拆除"
"key_word" => null
"pid" => 619
"status_text" => ""
]
35 => array:5 [
"id" => 624
"title" => "家具拆除"
"key_word" => null
"pid" => 619
"status_text" => ""
]
36 => array:5 [
"id" => 625
"title" => "垃圾清运"
"key_word" => null
"pid" => 619
"status_text" => ""
]
37 => array:5 [
"id" => 626
"title" => "建筑废料处理"
"key_word" => null
"pid" => 619
"status_text" => ""
]
38 => array:5 [
"id" => 628
"title" => "日常保洁"
"key_word" => null
"pid" => 627
"status_text" => ""
]
39 => array:5 [
"id" => 629
"title" => "深度保洁"
"key_word" => null
"pid" => 627
"status_text" => ""
]
40 => array:5 [
"id" => 630
"title" => "开荒保洁"
"key_word" => null
"pid" => 627
"status_text" => ""
]
41 => array:5 [
"id" => 631
"title" => "玻璃清洗"
"key_word" => null
"pid" => 627
"status_text" => ""
]
42 => array:5 [
"id" => 632
"title" => "地毯清洗"
"key_word" => null
"pid" => 627
"status_text" => ""
]
43 => array:5 [
"id" => 633
"title" => "沙发清洗"
"key_word" => null
"pid" => 627
"status_text" => ""
]
44 => array:5 [
"id" => 634
"title" => "窗帘清洗"
"key_word" => null
"pid" => 627
"status_text" => ""
]
45 => array:5 [
"id" => 635
"title" => "家电清洗"
"key_word" => null
"pid" => 627
"status_text" => ""
]
46 => array:5 [
"id" => 636
"title" => "卫生间除垢"
"key_word" => null
"pid" => 627
"status_text" => ""
]
47 => array:5 [
"id" => 637
"title" => "厨房除油"
"key_word" => null
"pid" => 627
"status_text" => ""
]
48 => array:5 [
"id" => 639
"title" => "电路检修"
"key_word" => null
"pid" => 638
"status_text" => ""
]
49 => array:5 [
"id" => 640
"title" => "灯具安装维修"
"key_word" => null
"pid" => 638
"status_text" => ""
]
50 => array:5 [
"id" => 641
"title" => "开关插座安装维修"
"key_word" => null
"pid" => 638
"status_text" => ""
]
51 => array:5 [
"id" => 642
"title" => "配电箱维修"
"key_word" => null
"pid" => 638
"status_text" => ""
]
52 => array:5 [
"id" => 643
"title" => "线路改造"
"key_word" => null
"pid" => 638
"status_text" => ""
]
53 => array:5 [
"id" => 644
"title" => "电器维修"
"key_word" => null
"pid" => 638
"status_text" => ""
]
54 => array:5 [
"id" => 645
"title" => "智能家居安装调试"
"key_word" => null
"pid" => 638
"status_text" => ""
]
55 => array:5 [
"id" => 647
"title" => "水路维修"
"key_word" => null
"pid" => 646
"status_text" => ""
]
56 => array:5 [
"id" => 654
"title" => "水路改造"
"key_word" => null
"pid" => 646
"status_text" => ""
]
57 => array:5 [
"id" => 655
"title" => "漏水"
"key_word" => null
"pid" => 646
"status_text" => ""
]
58 => array:5 [
"id" => 656
"title" => "堵塞"
"key_word" => null
"pid" => 646
"status_text" => ""
]
59 => array:5 [
"id" => 657
"title" => "噪音"
"key_word" => null
"pid" => 646
"status_text" => ""
]
60 => array:5 [
"id" => 658
"title" => "水压异常"
"key_word" => null
"pid" => 646
"status_text" => ""
]
61 => array:5 [
"id" => 659
"title" => "水质浑浊"
"key_word" => null
"pid" => 646
"status_text" => ""
]
62 => array:5 [
"id" => 660
"title" => "管道疏通"
"key_word" => null
"pid" => 646
"status_text" => ""
]
63 => array:5 [
"id" => 667
"title" => "化粪池清理"
"key_word" => null
"pid" => 646
"status_text" => ""
]
64 => array:5 [
"id" => 648
"title" => "水龙头更换维修"
"key_word" => null
"pid" => 647
"status_text" => ""
]
65 => array:5 [
"id" => 649
"title" => "角阀更换维修"
"key_word" => null
"pid" => 647
"status_text" => ""
]
66 => array:5 [
"id" => 650
"title" => "马桶维修"
"key_word" => null
"pid" => 647
"status_text" => ""
]
67 => array:5 [
"id" => 651
"title" => "地漏维修"
"key_word" => null
"pid" => 647
"status_text" => ""
]
68 => array:5 [
"id" => 652
"title" => "热水器维修"
"key_word" => null
"pid" => 647
"status_text" => ""
]
69 => array:5 [
"id" => 653
"title" => "净水器安装维修"
"key_word" => null
"pid" => 647
"status_text" => ""
]
70 => array:5 [
"id" => 661
"title" => "下水道疏通"
"key_word" => null
"pid" => 660
"status_text" => ""
]
71 => array:5 [
"id" => 662
"title" => "马桶疏通"
"key_word" => null
"pid" => 660
"status_text" => ""
]
72 => array:5 [
"id" => 663
"title" => "地漏疏通"
"key_word" => null
"pid" => 660
"status_text" => ""
]
73 => array:5 [
"id" => 664
"title" => "洗手池疏通"
"key_word" => null
"pid" => 660
"status_text" => ""
]
74 => array:5 [
"id" => 665
"title" => "浴缸疏通"
"key_word" => null
"pid" => 660
"status_text" => ""
]
75 => array:5 [
"id" => 666
"title" => "厨房管道疏通"
"key_word" => null
"pid" => 660
"status_text" => ""
]
76 => array:5 [
"id" => 669
"title" => "门锁开锁"
"key_word" => null
"pid" => 668
"status_text" => ""
]
77 => array:5 [
"id" => 670
"title" => "汽车开锁"
"key_word" => null
"pid" => 668
"status_text" => ""
]
78 => array:5 [
"id" => 671
"title" => "保险柜开锁"
"key_word" => null
"pid" => 668
"status_text" => ""
]
79 => array:5 [
"id" => 672
"title" => "门锁更换"
"key_word" => null
"pid" => 668
"status_text" => ""
]
80 => array:5 [
"id" => 673
"title" => "指纹锁安装"
"key_word" => null
"pid" => 668
"status_text" => ""
]
81 => array:5 [
"id" => 674
"title" => "智能锁安装"
"key_word" => null
"pid" => 668
"status_text" => ""
]
82 => array:5 [
"id" => 675
"title" => "锁具维修"
"key_word" => null
"pid" => 668
"status_text" => ""
]
83 => array:5 [
"id" => 677
"title" => "门窗安装"
"key_word" => null
"pid" => 676
"status_text" => ""
]
84 => array:5 [
"id" => 678
"title" => "门窗维修"
"key_word" => null
"pid" => 676
"status_text" => ""
]
85 => array:5 [
"id" => 679
"title" => "门窗更换"
"key_word" => null
"pid" => 676
"status_text" => ""
]
86 => array:5 [
"id" => 680
"title" => "门窗密封条更换"
"key_word" => null
"pid" => 676
"status_text" => ""
]
87 => array:5 [
"id" => 681
"title" => "门窗五金件更换"
"key_word" => null
"pid" => 676
"status_text" => ""
]
88 => array:5 [
"id" => 682
"title" => "纱窗安装维修"
"key_word" => null
"pid" => 676
"status_text" => ""
]
89 => array:5 [
"id" => 683
"title" => "变形"
"key_word" => null
"pid" => 676
"status_text" => ""
]
90 => array:5 [
"id" => 684
"title" => "开裂"
"key_word" => null
"pid" => 676
"status_text" => ""
]
91 => array:5 [
"id" => 685
"title" => "漏风"
"key_word" => null
"pid" => 676
"status_text" => ""
]
92 => array:5 [
"id" => 687
"title" => "衣橱整理"
"key_word" => null
"pid" => 686
"status_text" => ""
]
93 => array:5 [
"id" => 688
"title" => "厨房整理"
"key_word" => null
"pid" => 686
"status_text" => ""
]
94 => array:5 [
"id" => 689
"title" => "书房整理"
"key_word" => null
"pid" => 686
"status_text" => ""
]
95 => array:5 [
"id" => 690
"title" => "儿童房整理"
"key_word" => null
"pid" => 686
"status_text" => ""
]
96 => array:5 [
"id" => 691
"title" => "客厅整理"
"key_word" => null
"pid" => 686
"status_text" => ""
]
97 => array:5 [
"id" => 692
"title" => "储物间整理"
"key_word" => null
"pid" => 686
"status_text" => ""
]
98 => array:5 [
"id" => 693
"title" => "搬家整理"
"key_word" => null
"pid" => 686
"status_text" => ""
]
99 => array:5 [
"id" => 694
"title" => "空间规划"
"key_word" => null
"pid" => 686
"status_text" => ""
]
100 => array:5 [
"id" => 696
"title" => "沙发清洗"
"key_word" => null
"pid" => 695
"status_text" => ""
]
101 => array:5 [
"id" => 697
"title" => "沙发维修"
"key_word" => null
"pid" => 695
"status_text" => ""
]
102 => array:5 [
"id" => 698
"title" => "沙发换皮"
"key_word" => null
"pid" => 695
"status_text" => ""
]
103 => array:5 [
"id" => 699
"title" => "沙发换布"
"key_word" => null
"pid" => 695
"status_text" => ""
]
104 => array:5 [
"id" => 700
"title" => "沙发更换海绵"
"key_word" => null
"pid" => 695
"status_text" => ""
]
105 => array:5 [
"id" => 701
"title" => "沙发框架加固"
"key_word" => null
"pid" => 695
"status_text" => ""
]
106 => array:5 [
"id" => 702
"title" => "破损"
"key_word" => null
"pid" => 695
"status_text" => ""
]
107 => array:5 [
"id" => 703
"title" => "塌陷"
"key_word" => null
"pid" => 695
"status_text" => ""
]
108 => array:5 [
"id" => 705
"title" => "地板安装"
"key_word" => null
"pid" => 704
"status_text" => ""
]
109 => array:5 [
"id" => 706
"title" => "地板维修"
"key_word" => null
"pid" => 704
"status_text" => ""
]
110 => array:5 [
"id" => 707
"title" => "地板更换"
"key_word" => null
"pid" => 704
"status_text" => ""
]
111 => array:5 [
"id" => 708
"title" => "地板打磨翻新"
"key_word" => null
"pid" => 704
"status_text" => ""
]
112 => array:5 [
"id" => 709
"title" => "地板打蜡保养"
"key_word" => null
"pid" => 704
"status_text" => ""
]
113 => array:5 [
"id" => 710
"title" => "木地板防潮处理"
"key_word" => null
"pid" => 704
"status_text" => ""
]
114 => array:5 [
"id" => 711
"title" => "地板开裂"
"key_word" => null
"pid" => 704
"status_text" => ""
]
115 => array:5 [
"id" => 712
"title" => "地板起供"
"key_word" => null
"pid" => 704
"status_text" => ""
]
116 => array:5 [
"id" => 713
"title" => "地板磨损"
"key_word" => null
"pid" => 704
"status_text" => ""
]
117 => array:5 [
"id" => 714
"title" => "地板异响"
"key_word" => null
"pid" => 704
"status_text" => ""
]
118 => array:5 [
"id" => 715
"title" => "地板变色"
"key_word" => null
"pid" => 704
"status_text" => ""
]
119 => array:5 [
"id" => 716
"title" => "地板受潮"
"key_word" => null
"pid" => 704
"status_text" => ""
]
120 => array:5 [
"id" => 717
"title" => "地板松动"
"key_word" => null
"pid" => 704
"status_text" => ""
]
121 => array:5 [
"id" => 718
"title" => "地板老化"
"key_word" => null
"pid" => 704
"status_text" => ""
]
122 => array:5 [
"id" => 720
"title" => "窗帘清洗"
"key_word" => null
"pid" => 719
"status_text" => ""
]
123 => array:5 [
"id" => 721
"title" => "地毯清洗"
"key_word" => null
"pid" => 719
"status_text" => ""
]
124 => array:5 [
"id" => 722
"title" => "沙发清洗"
"key_word" => null
"pid" => 719
"status_text" => ""
]
125 => array:5 [
"id" => 723
"title" => "床垫清洗"
"key_word" => null
"pid" => 719
"status_text" => ""
]
126 => array:5 [
"id" => 724
"title" => "抱枕清洗"
"key_word" => null
"pid" => 719
"status_text" => ""
]
127 => array:5 [
"id" => 725
"title" => "桌布清洗"
"key_word" => null
"pid" => 719
"status_text" => ""
]
128 => array:5 [
"id" => 726
"title" => "布艺家具清洗"
"key_word" => null
"pid" => 719
"status_text" => ""
]
129 => array:5 [
"id" => 727
"title" => "家电清洗"
"key_word" => null
"pid" => 719
"status_text" => ""
]
130 => array:5 [
"id" => 728
"title" => "空调清洗"
"key_word" => null
"pid" => 719
"status_text" => ""
]
131 => array:5 [
"id" => 729
"title" => "油烟机清洗"
"key_word" => null
"pid" => 719
"status_text" => ""
]
132 => array:5 [
"id" => 730
"title" => "冰箱清洗"
"key_word" => null
"pid" => 719
"status_text" => ""
]
133 => array:5 [
"id" => 731
"title" => "洗衣机清洗"
"key_word" => null
"pid" => 719
"status_text" => ""
]
134 => array:5 [
"id" => 732
"title" => "热水器清洗"
"key_word" => null
"pid" => 719
"status_text" => ""
]
135 => array:5 [
"id" => 733
"title" => "微波炉清洗"
"key_word" => null
"pid" => 719
"status_text" => ""
]
136 => array:5 [
"id" => 734
"title" => "烤箱清洗"
"key_word" => null
"pid" => 719
"status_text" => ""
]
137 => array:5 [
"id" => 735
"title" => "饮水机清洗"
"key_word" => null
"pid" => 719
"status_text" => ""
]
]

View File

@ -36,6 +36,14 @@
transition: all .3s; transition: all .3s;
pointer-events: none; pointer-events: none;
} }
.zd-input__close {
position: absolute;
height: 100%;
right: 30px;
top: 0;
text-align: center;
color: #c0c4cc;
}
.zd-input__suffix-inner { .zd-input__suffix-inner {
pointer-events: all; pointer-events: all;

View File

@ -15,6 +15,8 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'template', 'addtabs'
Controller.api.second(); Controller.api.second();
}else if (tabVal === 'third'){ }else if (tabVal === 'third'){
Controller.api.third(); Controller.api.third();
}else if (tabVal === 'fourth'){
Controller.api.fourth();
} }
}); });
Controller.api.first(); Controller.api.first();
@ -70,6 +72,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'template', 'addtabs'
}); });
}, },
second: function (){ second: function (){
Table.api.init(); Table.api.init();
// 表格2 // 表格2
@ -162,6 +165,53 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'template', 'addtabs'
}); });
Controller.api.itemspicker(); Controller.api.itemspicker();
}, },
fourth: function (){
Table.api.init();
// 表格2
var table = $("#table4");
table.bootstrapTable({
url: 'statistics/aftersale/worker',
sortName: 'id',
search: false,
commonSearch: false,
visible: false,
showToggle: false,
showColumns: false,
showExport: true,
searchFormVisible: true,
columns: [
[
{field: 'name', title: '名称', operate: false},
{field: 'tel', title: '电话', operate: false},
{field: 'order_total', title: '订单总数', operate: false},
{field: 'after_total', title: '退款订单数', operate: false},
{field: 'rate', title: '退款率', operate: false},
]
]
});
// 为表格2绑定事件
Table.api.bindevent(table);
$('#first-search4').on('click', function () {
const range = $('#daterange-table4').val();
const keyword = $('#keyword4').val();
let data = '';
if (range !== ''){
data += 'range=' + range;
}
if (keyword !== ''){
data += '&keyword=' + keyword;
}
// data = encodeURIComponent(data);
$("#table4").bootstrapTable('refresh',{
url:'statistics/aftersale/worker?' + data,
});
});
},
datepicker: function () { datepicker: function () {
var ranges = {}; var ranges = {};
ranges[__('Today')] = [Moment().startOf('day'), Moment().endOf('day')]; ranges[__('Today')] = [Moment().startOf('day'), Moment().endOf('day')];

View File

@ -71,6 +71,13 @@
this.$container = this.$el.wrap(`<div class="${this.CLASS.wrap}"></div>`) this.$container = this.$el.wrap(`<div class="${this.CLASS.wrap}"></div>`)
.wrap(`<div class="${this.CLASS.inputwrap}"></div>`).addClass(this.CLASS.input).prop('readonly', !this.options.search).closest('.' + this.CLASS.wrap); .wrap(`<div class="${this.CLASS.inputwrap}"></div>`).addClass(this.CLASS.input).prop('readonly', !this.options.search).closest('.' + this.CLASS.wrap);
this.$closeBtn = $(`<span class="zd-input__close">
<svg style="height: 100%" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<line x1="18" y1="6" x2="6" y2="18" />
<line x1="6" y1="6" x2="18" y2="18" />
</svg>
</span>`).insertAfter(this.$el);
//文本框右侧图标 //文本框右侧图标
this.$arrow = $(`<span class="zd-input__suffix"> this.$arrow = $(`<span class="zd-input__suffix">
<span class="zd-input__suffix-inner"> <span class="zd-input__suffix-inner">
@ -85,6 +92,7 @@
</svg> </svg>
</span> </span>
</span>`).insertAfter(this.$el); </span>`).insertAfter(this.$el);
//下拉列表 //下拉列表
this.$dropdownWrap = $(`<div class="${this.CLASS.dropdownPanel}"></div>`).appendTo(this.$container).wrap(`<div class="${this.CLASS.dropdownWrap}"></div>`); this.$dropdownWrap = $(`<div class="${this.CLASS.dropdownPanel}"></div>`).appendTo(this.$container).wrap(`<div class="${this.CLASS.dropdownWrap}"></div>`);
@ -107,12 +115,13 @@
}, this)); }, this));
this.$container.on('click.item', '.' + this.CLASS.menuNode, $.proxy(this._nodeClick, this)) this.$container.on('click.item', '.' + this.CLASS.menuNode, $.proxy(this._nodeClick, this))
.on('click.item', '.' + 'zd-input__close', $.proxy(this._clear, this))
.on('dblclick.item', '.' + this.CLASS.menuNode, $.proxy(this._nodeDoubleClick, this)); .on('dblclick.item', '.' + this.CLASS.menuNode, $.proxy(this._nodeDoubleClick, this));
this.$el.on('keyup.wrap', $.proxy(this._keyup, this)); this.$el.on('keyup.wrap', $.proxy(this._keyup, this));
this.$el.on('input', $.proxy(function (event) { this.$el.on('input', $.proxy(function (event) {
this.search(this.$el.val()) this.search(this.$el.val());
}, this)); }, this));
} }
ZdCascader.prototype._wrapClick = function () { ZdCascader.prototype._wrapClick = function () {
@ -157,6 +166,13 @@
} else } else
this._loadChildren($that); this._loadChildren($that);
} }
ZdCascader.prototype._clear = function (event) {
if (this.options.onChange && typeof this.options.onChange === "function") {
this.options.onChange(this, {id:null}, '');
}
this.$el.val('');
event.stopPropagation();
}
ZdCascader.prototype._nodeDoubleClick = function (event) { ZdCascader.prototype._nodeDoubleClick = function (event) {
var $that = event.currentTarget ? $(event.currentTarget) : $(event); // li var $that = event.currentTarget ? $(event.currentTarget) : $(event); // li
var $wrap = $that.closest('.' + this.CLASS.menuWrap); var $wrap = $that.closest('.' + this.CLASS.menuWrap);