mirror of
https://gitee.com/zongzhige/shopxo.git
synced 2026-06-06 03:56:57 +08:00
154 lines
5.4 KiB
PHP
154 lines
5.4 KiB
PHP
|
|
<?php
|
|||
|
|
// +----------------------------------------------------------------------
|
|||
|
|
// | ShopXO 国内领先企业级B2C免费开源电商系统
|
|||
|
|
// +----------------------------------------------------------------------
|
|||
|
|
// | Copyright (c) 2011~2099 http://shopxo.net All rights reserved.
|
|||
|
|
// +----------------------------------------------------------------------
|
|||
|
|
// | Licensed ( https://opensource.org/licenses/mit-license.php )
|
|||
|
|
// +----------------------------------------------------------------------
|
|||
|
|
// | Author: Devil
|
|||
|
|
// +----------------------------------------------------------------------
|
|||
|
|
namespace app\service;
|
|||
|
|
|
|||
|
|
use think\facade\Db;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 后台顶部导航「待处理」铃铛数据
|
|||
|
|
* @author Devil
|
|||
|
|
* @blog http://gong.gg/
|
|||
|
|
* @version 1.0.0
|
|||
|
|
* @datetime 2026-05-13
|
|||
|
|
*/
|
|||
|
|
class AdminNavTodoService
|
|||
|
|
{
|
|||
|
|
/**
|
|||
|
|
* 待处理铃铛数据(用于后台 nav)
|
|||
|
|
* @author Devil
|
|||
|
|
* @blog http://gong.gg/
|
|||
|
|
* @version 1.0.0
|
|||
|
|
* @date 2026-05-13
|
|||
|
|
* @param [array] $params [admin=管理员数组,可空则取登录态]
|
|||
|
|
* @return [array] [data=>[[key,name,count,url,title]], total, has_pending]
|
|||
|
|
*/
|
|||
|
|
public static function PendingTodoData($params = [])
|
|||
|
|
{
|
|||
|
|
// data 单项字段:
|
|||
|
|
// key 唯一标识
|
|||
|
|
// name 列表展示名称
|
|||
|
|
// count 待处理数量
|
|||
|
|
// url 业务页地址(模板用 submit-popup + data-offcanvas=right 在右侧侧栏打开)
|
|||
|
|
// title 侧栏标题
|
|||
|
|
// 扩展事件入参含 admin、data(引用,可 push 与上同结构的元素)
|
|||
|
|
$admin = isset($params['admin']) ? $params['admin'] : AdminService::LoginInfo();
|
|||
|
|
$data = [];
|
|||
|
|
if(empty($admin))
|
|||
|
|
{
|
|||
|
|
return [
|
|||
|
|
'data' => [],
|
|||
|
|
'total' => 0,
|
|||
|
|
'has_pending' => false,
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 订单待发货(status=2 与订单列表筛选项一致)
|
|||
|
|
if(AdminIsPower('order', 'index'))
|
|||
|
|
{
|
|||
|
|
$count = (int) Db::name('Order')->where([
|
|||
|
|
['status', '=', 2],
|
|||
|
|
['is_delete_time', '=', 0],
|
|||
|
|
])->count();
|
|||
|
|
if($count > 0)
|
|||
|
|
{
|
|||
|
|
$data[] = [
|
|||
|
|
'key' => 'order',
|
|||
|
|
'name' => MyLang('common.nav_pending_todo_order_delivery'),
|
|||
|
|
'count' => $count,
|
|||
|
|
'url' => MyUrl('admin/order/index', ['status' => 2]),
|
|||
|
|
'title' => MyLang('common.nav_pending_todo_order_delivery'),
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 订单售后待确认/待审核(status 0、2 与列表筛选项一致)
|
|||
|
|
if(AdminIsPower('orderaftersale', 'index'))
|
|||
|
|
{
|
|||
|
|
$count = (int) Db::name('OrderAftersale')->where([
|
|||
|
|
['status', 'in', [0, 2]],
|
|||
|
|
])->count();
|
|||
|
|
if($count > 0)
|
|||
|
|
{
|
|||
|
|
$data[] = [
|
|||
|
|
'key' => 'order_aftersale',
|
|||
|
|
'name' => MyLang('common.nav_pending_todo_order_aftersale_audit'),
|
|||
|
|
'count' => $count,
|
|||
|
|
'url' => MyUrl('admin/orderaftersale/index', ['status' => '0,2']),
|
|||
|
|
'title' => MyLang('common.nav_pending_todo_order_aftersale_audit'),
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 商品评论待回复(is_reply=0 与列表筛选项一致)
|
|||
|
|
if(AdminIsPower('goodscomments', 'index'))
|
|||
|
|
{
|
|||
|
|
$count = (int) Db::name('GoodsComments')->where([
|
|||
|
|
['is_reply', '=', 0],
|
|||
|
|
])->count();
|
|||
|
|
if($count > 0)
|
|||
|
|
{
|
|||
|
|
$data[] = [
|
|||
|
|
'key' => 'goods_comments',
|
|||
|
|
'name' => MyLang('common.nav_pending_todo_goods_comments_reply'),
|
|||
|
|
'count' => $count,
|
|||
|
|
'url' => MyUrl('admin/goodscomments/index', ['is_reply' => 0]),
|
|||
|
|
'title' => MyLang('common.nav_pending_todo_goods_comments_reply'),
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 用户待审核(status=3 与用户列表筛选项「待审核」一致)
|
|||
|
|
if(AdminIsPower('user', 'index'))
|
|||
|
|
{
|
|||
|
|
$count = (int) Db::name('User')->where([
|
|||
|
|
['status', '=', 3],
|
|||
|
|
['is_delete_time', '=', 0],
|
|||
|
|
])->count();
|
|||
|
|
if($count > 0)
|
|||
|
|
{
|
|||
|
|
$data[] = [
|
|||
|
|
'key' => 'user_pending_audit',
|
|||
|
|
'name' => MyLang('common.nav_pending_todo_user_audit'),
|
|||
|
|
'count' => $count,
|
|||
|
|
'url' => MyUrl('admin/user/index', ['status' => 3]),
|
|||
|
|
'title' => MyLang('common.nav_pending_todo_user_audit'),
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$hook_name = 'plugins_service_admin_nav_pending_todo_data';
|
|||
|
|
MyEventTrigger($hook_name, [
|
|||
|
|
'hook_name' => $hook_name,
|
|||
|
|
'is_backend' => true,
|
|||
|
|
'admin' => $admin,
|
|||
|
|
'data' => &$data,
|
|||
|
|
]);
|
|||
|
|
|
|||
|
|
$total = 0;
|
|||
|
|
if(!empty($data) && is_array($data))
|
|||
|
|
{
|
|||
|
|
foreach($data as $v)
|
|||
|
|
{
|
|||
|
|
if(!empty($v['count']))
|
|||
|
|
{
|
|||
|
|
$total += (int) $v['count'];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return [
|
|||
|
|
'data' => is_array($data) ? $data : [],
|
|||
|
|
'total' => $total,
|
|||
|
|
'has_pending' => $total > 0,
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
?>
|