Accept Merge Request #40: (feature/hant -> develop)

Merge Request: 面板

Created By: @todayswind
Accepted By: @todayswind
URL: https://g-bcrc3009.coding.net/p/allocatr/d/allocatr/git/merge/40?initial=true
This commit is contained in:
todayswind 2025-05-07 23:35:08 +08:00 committed by Coding
commit 9405f14322
3 changed files with 470 additions and 402 deletions

View File

@ -4,6 +4,7 @@ namespace app\admin\controller;
use app\admin\addresmart\Address; use app\admin\addresmart\Address;
use app\admin\model\Abnormal; use app\admin\model\Abnormal;
use app\admin\model\Aftersale;
use app\admin\model\AuthGroupAccess; use app\admin\model\AuthGroupAccess;
use app\admin\model\order\Invoice; use app\admin\model\order\Invoice;
use app\admin\model\OrderAbnormal; use app\admin\model\OrderAbnormal;
@ -58,10 +59,12 @@ class Orderplan extends Backend
$top = $this->getTopTotal(); $top = $this->getTopTotal();
$lines = $this->getLine(); $lines = $this->getLine();
$pie = $this->getPie(); $pie = $this->getPie();
$order = $this->getOrder();
$this->success(data: [ $this->success(data: [
'top' => $top, 'top' => $top,
'lines' => $lines, 'lines' => $lines,
'pie' => $pie, 'pie' => $pie,
'order' => $order,
]); ]);
} }
@ -189,15 +192,71 @@ class Orderplan extends Backend
} }
private function buildDate($build) private function buildDate($build,$table_name = null)
{ {
$start = now()->modify('-14 days')->format('Y-m-d'); $start = now()->modify('-14 days')->format('Y-m-d');
$end_at = now()->format('Y-m-d'); $end_at = now()->format('Y-m-d');
if ($table_name){
$build->where($table_name.'.create_time', 'between', [$start, $end_at]);
}else{
$build->where('create_time', 'between', [$start, $end_at]); $build->where('create_time', 'between', [$start, $end_at]);
}
return $build; return $build;
} }
private function getOrder()
{
$build = new OrderAbnormal();
$res = $build
->where('status',0)
->count('id');
$out ['abnormal'] = $res;
$build = new \app\admin\model\Order();
$res = $build
->where('status',\app\admin\model\Order::STATUS_CHECKING)
->count('id');
$out ['check'] = $res;
$build = new \app\admin\model\Order();
$res = $build
->where('status',\app\admin\model\Order::STATUS_AUDITING)
->count('id');
$out ['auditing'] = $res;
$build = new \app\admin\model\Order();
$res = $build
->alias('a')
->join('order_review b','a.id = b.order_id','left')
->where('a.status','in',[\app\admin\model\Order::STATUS_FINISHED,\app\admin\model\Order::STATUS_CANCEL])
->whereNull('b.id')
->count('a.id');
$out ['review'] = $res;
$build = new Aftersale();
$res = $build
->where('status',1)
->count('id');
$out ['after_sale'] = $res;
$build = new Invoice();
$res = $build
->where('status',0)
->count('id');
$out ['invoice'] = $res;
return $out;
}
private function prepareEchartsBarData(array $data, string $startDate, string $endDate): array private function prepareEchartsBarData(array $data, string $startDate, string $endDate): array
{ {
// 将原始数据用日期作为键索引 // 将原始数据用日期作为键索引
@ -285,4 +344,5 @@ class Orderplan extends Backend
} }
} }

View File

@ -17,9 +17,10 @@
<!-- </form>--> <!-- </form>-->
<!-- </div>--> <!-- </div>-->
<div class="row" style="margin-bottom: 10px"> <div class="col-md-12" style="margin-bottom: 10px">
<div style="display: flex">
<!-- 卡片 1: 总用户数 --> <!-- 卡片 1: 总用户数 -->
<div class="col-md-4"> <div class="col-md-3">
<div class="myplan"> <div class="myplan">
<div class="myplan-title"> <div class="myplan-title">
<span style="color: red" class="fa fa-line-chart fa-fw"></span> <span style="color: red" class="fa fa-line-chart fa-fw"></span>
@ -32,7 +33,7 @@
</div> </div>
<!-- 卡片 1: 总用户数 --> <!-- 卡片 1: 总用户数 -->
<div class="col-md-4"> <div class="col-md-3">
<div class="myplan"> <div class="myplan">
<div class="myplan-title"> <div class="myplan-title">
<span style="color: #43cb34" class="fa fa-list-alt fa-fw"></span> <span style="color: #43cb34" class="fa fa-list-alt fa-fw"></span>
@ -45,7 +46,20 @@
</div> </div>
<!-- 卡片 1: 总用户数 --> <!-- 卡片 1: 总用户数 -->
<div class="col-md-4"> <div class="col-md-3">
<div class="myplan">
<div class="myplan-title">
<span style="color: #43cb34" class="fa fa-list-alt fa-fw"></span>
<span>总营业额</span>
</div>
<div class="myplan-num">
loading
</div>
</div>
</div>
<!-- 卡片 1: 总用户数 -->
<div class="col-md-3">
<div class="myplan"> <div class="myplan">
<div class="myplan-title"> <div class="myplan-title">
<span style="color: #b3d4fc" class="fa fa-group fa-fw"></span> <span style="color: #b3d4fc" class="fa fa-group fa-fw"></span>
@ -57,156 +71,10 @@
</div> </div>
</div> </div>
</div> </div>
<div class="col-md-8">
<div id="money_line" style="height: 600px;width: 100%">
</div>
</div>
<div class="col-md-4">
<div class="col-md-6">
<div class="todo-plan" style="color: #55d2fe">
<div class="todo-plan-title">
<div style="font-size: 32px" class="fa fa-warning"></div>
<div class="todo-plan-title-text" style="flex: 1">
<p>报错</p>
<p>单位/笔</p>
</div>
<div>
<a href="#">详情></a>
</div>
</div>
<div class="todo-plan-num text-center">
1,240
</div>
</div>
</div> </div>
<div class="col-md-6"> <div class="col-md-12">
<div class="todo-plan" style="color: #86a7ff"> <div class="col-md-3">
<div class="todo-plan-title">
<div style="font-size: 32px" class="fa fa-gear"></div>
<div class="todo-plan-title-text" style="flex: 1">
<p>待配置</p>
<p>单位/笔</p>
</div>
<div>
<a href="#">详情></a>
</div>
</div>
<div class="todo-plan-num text-center">
1,240
</div>
</div>
</div>
<div class="col-md-6">
<div class="todo-plan" style="color: #4de171">
<div class="todo-plan-title">
<div style="font-size: 32px" class="fa fa-envelope-open"></div>
<div class="todo-plan-title-text" style="flex: 1">
<p>待审核</p>
<p>单位/笔</p>
</div>
<div>
<a href="#">详情></a>
</div>
</div>
<div class="todo-plan-num text-center">
1,240
</div>
</div>
</div>
<div class="col-md-6">
<div class="todo-plan" style="color: #b896ff">
<div class="todo-plan-title">
<div style="font-size: 32px" class="fa fa-pencil"></div>
<div class="todo-plan-title-text" style="flex: 1">
<p>待回访</p>
<p>单位/笔</p>
</div>
<div>
<a href="#">详情></a>
</div>
</div>
<div class="todo-plan-num text-center">
1,240
</div>
</div>
</div>
<div class="col-md-6">
<div class="todo-plan" style="color: #f8bf18">
<div class="todo-plan-title">
<div style="font-size: 32px" class="fa fa-leaf"></div>
<div class="todo-plan-title-text" style="flex: 1">
<p>待售后</p>
<p>单位/笔</p>
</div>
<div>
<a href="#">详情></a>
</div>
</div>
<div class="todo-plan-num text-center">
1,240
</div>
</div>
</div>
<div class="col-md-6">
<div class="todo-plan" style="color: #f58164">
<div class="todo-plan-title">
<div style="font-size: 32px" class="fa fa-file-text-o"></div>
<div class="todo-plan-title-text" style="flex: 1">
<p>开票</p>
<p>单位/笔</p>
</div>
<div>
<a href="#">详情></a>
</div>
</div>
<div class="todo-plan-num text-center">
1,240
</div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="col-md-6">
<div id="cancel_order_pie" style="width: 100%;height:400px">
</div>
</div>
<div class="col-md-6">
<div id="item_pie" style="width: 100%;height:400px">
</div>
</div>
<div class="col-md-6">
<div id="area_pie" style="width: 100%;height:400px">
</div>
</div>
<div class="col-md-6">
<div id="source_pie" style="width: 100%;height:400px">
</div>
</div>
</div>
<div class="col-md-6">
<div class="col-md-6">
<div class="order-count-plan" style="color: #55d2fe"> <div class="order-count-plan" style="color: #55d2fe">
<div class="order-count-title"> <div class="order-count-title">
<div class="todo-plan-title-text text-left" style="flex: 1"> <div class="todo-plan-title-text text-left" style="flex: 1">
@ -221,24 +89,159 @@
</div> </div>
</div> </div>
</div> </div>
</div>
<div class="col-md-12" style="margin-top: 10px;margin-bottom: 10px">
<div class="col-md-2">
<div class="todo-plan" style="color: #55d2fe">
<div class="todo-plan-title">
<div style="font-size: 32px" class="fa fa-warning"></div>
<div class="todo-plan-title-text" style="flex: 1">
<p>报错</p>
<p>单位/笔</p>
</div>
<div>
<a onclick="Backend.api.addtabs('/admin/orders/abnormal','报错订单')" href="">详情></a>
</div>
</div>
<div class="todo-plan-num text-center">
loading
</div>
</div>
</div>
<div class="col-md-2">
<div class="todo-plan" style="color: #86a7ff">
<div class="todo-plan-title">
<div style="font-size: 32px" class="fa fa-gear"></div>
<div class="todo-plan-title-text" style="flex: 1">
<p>待配置</p>
<p>单位/笔</p>
</div>
<div>
<a onclick="Backend.api.addtabs('/admin/orders/configorder','待配置')" href="#">详情></a>
</div>
</div>
<div class="todo-plan-num text-center">
loading
</div>
</div>
</div>
<div class="col-md-2">
<div class="todo-plan" style="color: #4de171">
<div class="todo-plan-title">
<div style="font-size: 32px" class="fa fa-envelope-open"></div>
<div class="todo-plan-title-text" style="flex: 1">
<p>待审核</p>
<p>单位/笔</p>
</div>
<div>
<a onclick="Backend.api.addtabs('/admin/orders/auditorder','待审核')" href="#">详情></a>
</div>
</div>
<div class="todo-plan-num text-center">
loading
</div>
</div>
</div>
<div class="col-md-2">
<div class="todo-plan" style="color: #b896ff">
<div class="todo-plan-title">
<div style="font-size: 32px" class="fa fa-pencil"></div>
<div class="todo-plan-title-text" style="flex: 1">
<p>待回访</p>
<p>单位/笔</p>
</div>
<div>
<a onclick="Backend.api.addtabs('/admin/orders/revisitorder','待回访')" href="#">详情></a>
</div>
</div>
<div class="todo-plan-num text-center">
loading
</div>
</div>
</div>
<div class="col-md-2">
<div class="todo-plan" style="color: #f8bf18">
<div class="todo-plan-title">
<div style="font-size: 32px" class="fa fa-leaf"></div>
<div class="todo-plan-title-text" style="flex: 1">
<p>待售后</p>
<p>单位/笔</p>
</div>
<div>
<a onclick="Backend.api.addtabs('/admin/aftersales/aftersale','待售后')" href="#">详情></a>
</div>
</div>
<div class="todo-plan-num text-center">
loading
</div>
</div>
</div>
<div class="col-md-2">
<div class="todo-plan" style="color: #f58164">
<div class="todo-plan-title">
<div style="font-size: 32px" class="fa fa-file-text-o"></div>
<div class="todo-plan-title-text" style="flex: 1">
<p>开票</p>
<p>单位/笔</p>
</div>
<div>
<a onclick="Backend.api.addtabs('/admin/orders/abnormal','开票')" href="#">详情></a>
</div>
</div>
<div class="todo-plan-num text-center">
loading
</div>
</div>
</div>
</div>
<div class="col-md-12">
<div id="money_line" style="height: 600px;width: 100%">
</div>
</div>
<div class="col-md-12">
<div class="col-md-3">
<div id="cancel_order_pie" style="width: 100%;height:400px">
</div>
</div>
<div class="col-md-3">
<div id="item_pie" style="width: 100%;height:400px">
</div>
</div>
<div class="col-md-3">
<div id="area_pie" style="width: 100%;height:400px">
</div>
</div>
<div class="col-md-3">
<div id="source_pie" style="width: 100%;height:400px">
</div>
</div>
</div>
<div class="col-md-12">
<div class="col-md-6"> <div class="col-md-6">
<div class="order-count-plan" style="color: #55d2fe"> <div class="col-md-12">订单数据</div>
<div class="order-count-title" style="background-color: #f5f6ff;color: #6b6e73">
<div class="todo-plan-title-text text-left" style="flex: 1">
<span class="fa fa-phone-square"></span> 售后申请
</div>
</div>
<div class="order-count-num text-left">
1240
</div>
<div class="order-count-num-sub text-left">
待处理
</div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="col-md-6 "> <div class="col-md-6 ">
<div class="static-plan"> <div class="static-plan">
<div class="static-img fa fa-jpy" style="color: #2281df"> <div class="static-img fa fa-jpy" style="color: #2281df">
@ -468,6 +471,7 @@
</div> </div>
</div> </div>
</div> </div>
</div>
<div class="col-md-6"> <div class="col-md-6">
<h4 class="mb-4">热门服务</h4> <h4 class="mb-4">热门服务</h4>
@ -620,7 +624,6 @@
/*height: 100px;*/ /*height: 100px;*/
box-shadow: 0 2px 6px rgba(12, 72, 128, .1); box-shadow: 0 2px 6px rgba(12, 72, 128, .1);
border-radius: 4px; border-radius: 4px;
margin: 10px;
} }
.todo-plan-num { .todo-plan-num {

View File

@ -4,8 +4,10 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'echarts','echarts-th
dashboard: function () { dashboard: function () {
Fast.api.ajax({ Fast.api.ajax({
url: 'orderplan/data', url: 'orderplan/data',
method:'get'
}, function (data, ret) { }, function (data, ret) {
Controller.echarts.top(data.top); Controller.echarts.top(data.top);
Controller.echarts.order(data.order);
Controller.echarts.money_line(data.lines); Controller.echarts.money_line(data.lines);
Controller.echarts.cancel_order_pie(data.pie.cancel); Controller.echarts.cancel_order_pie(data.pie.cancel);
Controller.echarts.item_pie(data.pie.item); Controller.echarts.item_pie(data.pie.item);
@ -13,11 +15,6 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'echarts','echarts-th
Controller.echarts.source_pie(data.pie.source); Controller.echarts.source_pie(data.pie.source);
}); });
Controller.api.bindevent();
Controller.echarts.cancel_order_pie();
console.log(123);
}, },
add: function () { add: function () {
Controller.api.bindevent(); Controller.api.bindevent();
@ -33,10 +30,10 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'echarts','echarts-th
echarts: { echarts: {
top: function(data){ top: function(data){
let map = [ let map = [
'count','performance','worker' 'count','performance','total','worker'
]; ];
$('.myplan-num').each(function(index) { $('.myplan-num').each(function(index) {
if (index === 1){ if (index === 1 || index === 2){
$(this).html('¥' + data[map[index]]); $(this).html('¥' + data[map[index]]);
}else { }else {
$(this).html(data[map[index]]); $(this).html(data[map[index]]);
@ -44,6 +41,14 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'echarts','echarts-th
} }
}); });
}, },
order: function(data){
let map = [
'abnormal','check','auditing','check','review','invoice'
];
$('.todo-plan-num').each(function(index) {
$(this).html(data[map[index]]);
});
},
item_pie: function(data){ item_pie: function(data){
// 基本的饼图配置 // 基本的饼图配置
var myChart = echarts.init(document.getElementById('item_pie')); var myChart = echarts.init(document.getElementById('item_pie'));