diff --git a/README.en.md b/README.en.md
index a469cdb1c2b1406d8423d31932c496d1d6ca0921..5935db6c662865919810ea4daab7af64d7275d03 100644
--- a/README.en.md
+++ b/README.en.md
@@ -1,7 +1,7 @@
# laravel-vue-admin
#### Description
-{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**}
+laravel+vue-element-admin
#### Software Architecture
Software architecture description
@@ -13,6 +13,7 @@ Software architecture description
* 命令行,生成 APP_KEY:`php artisan key:generate`
* 命令行,JWT的key:`php artisan jwt:secret`
* 导入根目录sql:laravel-vue-admin.sql
+* 任务调度:`php artisan schedule:run`
#### Instructions
diff --git a/README.md b/README.md
index a9ff12811a3e15054f3be050be08d0d5c18e7dc4..ccb3b771c7e6379713c98be0a9bd7873cbf32b6b 100644
--- a/README.md
+++ b/README.md
@@ -1,14 +1,12 @@
# laravel-vue-admin
#### 介绍
-{**以下是 Gitee 平台说明,您可以替换此简介**
-Gitee 是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台
-无论是个人、团队、或是企业,都能够用 Gitee 实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)}
+laravel+vue-element-admin
#### 软件架构
软件架构说明
-文档地址(无文档,自己对接):https://docs.apipost.cn/view/680a60d8e13e4745
+文档地址(无需文档,自己对接):https://docs.apipost.cn/view/680a60d8e13e4745
#### 安装教程
@@ -17,6 +15,7 @@ Gitee 是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN
* 命令行,生成 APP_KEY:`php artisan key:generate`
* 命令行,JWT的key:`php artisan jwt:secret`
* 导入根目录sql:laravel-vue-admin.sql
+* 任务调度:`php artisan schedule:run`
#### 使用说明
diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php
index fe7c1b5f34d2f6f4d89930284d9353bbe77cc8dd..c24df94547a51449cd67d945d19b279a7eefb6f5 100644
--- a/app/Console/Kernel.php
+++ b/app/Console/Kernel.php
@@ -25,6 +25,11 @@ class Kernel extends ConsoleKernel
protected function schedule(Schedule $schedule)
{
// $schedule->command('inspire')->hourly();
+
+ // var_dump('schedule:' . date('Y-m-d H:i:s'));
+
+ // 每月1号调用:按月分表自动生成
+ $schedule->command('autotablebuild')->monthlyOn();
}
/**
diff --git a/app/Modules/Admin/Entities/Rabc/Admin.php b/app/Modules/Admin/Entities/Rabc/Admin.php
index 7aa794a880333f74c07e97489bcd73d823665a2e..891b305287e2ace1e089325c17bcaa1d69a5e775 100644
--- a/app/Modules/Admin/Entities/Rabc/Admin.php
+++ b/app/Modules/Admin/Entities/Rabc/Admin.php
@@ -19,6 +19,16 @@ class Admin extends Authenticatable implements JWTSubject
protected $is_delete = 0; //是否开启删除(1.开启删除,就是直接删除;0.假删除)
protected $delete_field = 'is_delete'; //删除字段
+ public function getIsDelete()
+ {
+ return $this->is_delete;
+ }
+
+ public function getDeleteField()
+ {
+ return $this->delete_field;
+ }
+
/**
* 是否主动维护时间戳
*
diff --git a/app/Modules/Admin/Entities/Rabc/AdminMenu.php b/app/Modules/Admin/Entities/Rabc/AdminMenu.php
index 0d84a9eebc0b3301943e96c93b558f0df65da3ac..c599b9601398118a87945d007d47d6e4aafed20f 100644
--- a/app/Modules/Admin/Entities/Rabc/AdminMenu.php
+++ b/app/Modules/Admin/Entities/Rabc/AdminMenu.php
@@ -9,13 +9,25 @@ class AdminMenu extends Model
protected $primaryKey = 'menu_id';
protected $is_delete = 0;
- public static function getAllMenus()
+ public function getAllMenus()
{
- return self::orderBy('menu_sort', 'ASC')->get();
+ return $this->orderBy('menu_sort', 'ASC')->get();
}
public function getSelectLists()
{
return list_to_tree($this->orderBy('menu_sort', 'ASC')->get()->toArray());
}
+
+ public function getMenusByIds(array $menu_ids)
+ {
+ return $this->whereIn('menu_id', $menu_ids)
+ ->orderBy('menu_sort', 'ASC')
+ ->get();
+ }
+
+ public function getMenusByIdsForRabc(array $menu_ids)
+ {
+ return $this->whereIn('menu_id', $menu_ids)->where('api_url', '<>', '')->pluck('api_method', 'api_url');
+ }
}
diff --git a/app/Modules/Admin/Entities/Rabc/AdminRoleWithMenu.php b/app/Modules/Admin/Entities/Rabc/AdminRoleWithMenu.php
index f58acb31ffc174c3bb1e3a553519344ad07967e7..28aeb42d98060b484dbe6944689dc535ee56fcd4 100644
--- a/app/Modules/Admin/Entities/Rabc/AdminRoleWithMenu.php
+++ b/app/Modules/Admin/Entities/Rabc/AdminRoleWithMenu.php
@@ -8,4 +8,9 @@ class AdminRoleWithMenu extends Model
{
protected $primaryKey = 'with_id';
public $timestamps = false;
+
+ public function getMenuIdsByRoles(array $role_ids)
+ {
+ return array_unique(array_column($this->whereIn('role_id', $role_ids)->select('menu_id')->get()->toArray(), 'menu_id'));
+ }
}
diff --git a/app/Modules/Admin/Http/Controllers/AuthController.php b/app/Modules/Admin/Http/Controllers/AuthController.php
index 2e63e0d286c254dfb2d35daef1bc76f1619e9be2..e811b8cc32da7bb22e44a8c1dccfb112b017ea03 100644
--- a/app/Modules/Admin/Http/Controllers/AuthController.php
+++ b/app/Modules/Admin/Http/Controllers/AuthController.php
@@ -59,6 +59,6 @@ class AuthController extends BaseController
public function getRabcList()
{
// 临时测试数据
- return $this->successJson(list_to_tree(AdminMenu::getAllMenus()->toArray()));
+ return $this->successJson(list_to_tree(AdminMenu::getInstance()->getAllMenus()->toArray()));
}
}
diff --git a/app/Modules/Admin/Http/Middleware/CheckAuth.php b/app/Modules/Admin/Http/Middleware/CheckAuth.php
index 55b67d336890d6c86e8398737995fe5221c57108..eaf612d3de013aff8d33edcb46e4d13316e8ccdc 100644
--- a/app/Modules/Admin/Http/Middleware/CheckAuth.php
+++ b/app/Modules/Admin/Http/Middleware/CheckAuth.php
@@ -24,12 +24,11 @@ class CheckAuth
*/
public function handle(Request $request, Closure $next)
{
- return $next($request);
-
$this->guard = 'admin';
-
+ // Auth认证
+ $auth = Auth()->guard($this->guard);
try {
- if ( !Auth()->guard($this->guard)->check() ) { //未登录踢回,给予错误返回提示
+ if ( !$auth->check() ) { //未登录踢回,给予错误返回提示
return $this->errorJson('认证失败,请重新登录!');
}
} catch (TokenExpiredException $e) {
diff --git a/app/Modules/Admin/Http/Middleware/CheckRabc.php b/app/Modules/Admin/Http/Middleware/CheckRabc.php
new file mode 100644
index 0000000000000000000000000000000000000000..dec3e915c29bc76466c3bcfdf2056217b6a60285
--- /dev/null
+++ b/app/Modules/Admin/Http/Middleware/CheckRabc.php
@@ -0,0 +1,64 @@
+guard = 'admin';
+ // 开始验证路由权限
+ if (!$this->checkRabc($request, Auth()->guard($this->guard)->user()->getAuthIdentifier(), $load_error)){
+ return $this->errorJson('无权限' . (empty($load_error) ? '!' : ',' . $load_error), -2);
+ }
+
+ return $next($request);
+ }
+
+ private function checkRabc($request, int $admin_id, &$load_error = ''):bool
+ {
+ // 超级管理员账户无需验证
+ if ($admin_id == 1) return true;
+
+ $roles = Admin::getInstance()->detail($admin_id)->roles->toArray();
+ if (empty($roles)) return false;
+ $role_ids = array_column($roles, 'role_id');
+ if (empty($role_ids)) return false;
+ $menu_ids = AdminRoleWithMenu::getInstance()->getMenuIdsByRoles($role_ids);
+ if (empty($menu_ids)) return false;
+ $menus = AdminMenu::getInstance()->getMenusByIdsForRabc($menu_ids)->toArray();
+ if (empty($menus)) return false;
+
+ // 获取当前路由
+ $route_path = $request->route()->uri();
+ // 检测是否存在当前API
+ if (isset($menus[$route_path])){
+ // 验证请求方式
+ if ($menus[$route_path] == $request->getMethod()){
+ return true;
+ }
+ $load_error = '请求方式有误!';
+ }
+ return false;
+ }
+}
diff --git a/app/Modules/Admin/Http/Requests/Article/ArticleCategoryRequest.php b/app/Modules/Admin/Http/Requests/Article/ArticleCategoryRequest.php
index 6d8a7ade8bcdecd291719999b7e1ada4c02193ad..c66d42132bab6e8e448f6c8a2b47772454a345f3 100644
--- a/app/Modules/Admin/Http/Requests/Article/ArticleCategoryRequest.php
+++ b/app/Modules/Admin/Http/Requests/Article/ArticleCategoryRequest.php
@@ -7,6 +7,11 @@ use App\Modules\Admin\Http\Requests\BaseRequest;
class ArticleCategoryRequest extends BaseRequest
{
+ public function setInstance()
+ {
+ $this->instance = ArticleCategory::getInstance();
+ }
+
/**
* Get the validation rules that apply to the request.
*
@@ -14,15 +19,11 @@ class ArticleCategoryRequest extends BaseRequest
*/
public function rules()
{
- $instance = ArticleCategory::getInstance();
- $primarykey = $instance->getKeyName();
- $validate_id = ',' . request()->input($primarykey, 0) . ',' . $primarykey;
-
return [
'category_name' => [
'required',
'max:256',
- 'unique:' . $instance->getTable() . ',category_name' . $validate_id
+ 'unique:' . $this->instance->getTable() . ',category_name' . $this->validate_id
],
'category_sort' => [
'required',
diff --git a/app/Modules/Admin/Http/Requests/Article/ArticleRequest.php b/app/Modules/Admin/Http/Requests/Article/ArticleRequest.php
index 104ad616fc381e8b623c4ed8a518a3d0a5e5b330..8336bf2cb7fd6966c0c69789bc98a6c6f5d0ef8e 100644
--- a/app/Modules/Admin/Http/Requests/Article/ArticleRequest.php
+++ b/app/Modules/Admin/Http/Requests/Article/ArticleRequest.php
@@ -7,6 +7,11 @@ use App\Modules\Admin\Http\Requests\BaseRequest;
class ArticleRequest extends BaseRequest
{
+ public function setInstance()
+ {
+ $this->instance = Article::getInstance();
+ }
+
/**
* Get the validation rules that apply to the request.
*
@@ -14,15 +19,11 @@ class ArticleRequest extends BaseRequest
*/
public function rules()
{
- $instance = Article::getInstance();
- $primarykey = $instance->getKeyName();
- $validate_id = ',' . request()->input($primarykey, 0) . ',' . $primarykey;
-
return [
'article_title' => [
'required',
'max:256',
- 'unique:' . $instance->getTable() . ',article_title' . $validate_id,
+ 'unique:' . $this->instance->getTable() . ',article_title' . $this->validate_id,
],
'category_id' => [
'required',
diff --git a/app/Modules/Admin/Http/Requests/BaseRequest.php b/app/Modules/Admin/Http/Requests/BaseRequest.php
index 2c17922f9ec8644d16f67854afa5ea0d6b976770..00711c4917e48c3a137ef9992ea7c724f53394fc 100644
--- a/app/Modules/Admin/Http/Requests/BaseRequest.php
+++ b/app/Modules/Admin/Http/Requests/BaseRequest.php
@@ -6,6 +6,28 @@ use Illuminate\Foundation\Http\FormRequest;
class BaseRequest extends FormRequest
{
+ protected $instance;
+ protected $validate_id = '';
+
+ public function __construct(array $query = [], array $request = [], array $attributes = [], array $cookies = [], array $files = [], array $server = [], $content = null)
+ {
+ parent::__construct($query, $request, $attributes, $cookies, $files, $server, $content);
+
+ if ( method_exists($this, 'setInstance') ) {
+ $this->setInstance();
+ }
+
+ $this->setValidateId();
+ }
+
+ protected function setValidateId()
+ {
+ if ($this->instance){
+ $primarykey = $this->instance->getKeyName();
+ $this->validate_id = ',' . request()->input($primarykey, 0) . ',' . $primarykey . ($this->instance->getIsDelete() == 0 ? ',is_delete,0' : '');
+ }
+ }
+
/**
* Get the validation rules that apply to the request.
*
diff --git a/app/Modules/Admin/Http/Requests/Rabc/AdminMenuRequest.php b/app/Modules/Admin/Http/Requests/Rabc/AdminMenuRequest.php
index 0be8cf4dd85d78f4d4c31380869c05375fb8888a..be8ffb659eef03e72fbf7d6ea8324fe46fc2c904 100644
--- a/app/Modules/Admin/Http/Requests/Rabc/AdminMenuRequest.php
+++ b/app/Modules/Admin/Http/Requests/Rabc/AdminMenuRequest.php
@@ -7,6 +7,11 @@ use App\Modules\Admin\Http\Requests\BaseRequest;
class AdminMenuRequest extends BaseRequest
{
+ public function setInstance()
+ {
+ $this->instance = AdminMenu::getInstance();
+ }
+
/**
* Get the validation rules that apply to the request.
*
@@ -14,15 +19,11 @@ class AdminMenuRequest extends BaseRequest
*/
public function rules()
{
- $instance = AdminMenu::getInstance();
- $primarykey = $instance->getKeyName();
- $validate_id = ',' . request()->input($primarykey, 0) . ',' . $primarykey;
-
return [
'menu_name' => [
'required',
'max:256',
- 'unique:' . $instance->getTable() . ',menu_name' . $validate_id
+ 'unique:' . $this->instance->getTable() . ',menu_name' . $this->validate_id
],
];
}
diff --git a/app/Modules/Admin/Http/Requests/Rabc/AdminRequest.php b/app/Modules/Admin/Http/Requests/Rabc/AdminRequest.php
index 21343fefeac4ac927304c7d779f8c843f3c25959..5b597501fd6c0babf76231f0a7cc79bf57accac0 100644
--- a/app/Modules/Admin/Http/Requests/Rabc/AdminRequest.php
+++ b/app/Modules/Admin/Http/Requests/Rabc/AdminRequest.php
@@ -7,6 +7,11 @@ use App\Modules\Admin\Http\Requests\BaseRequest;
class AdminRequest extends BaseRequest
{
+ public function setInstance()
+ {
+ $this->instance = Admin::getInstance();
+ }
+
/**
* Get the validation rules that apply to the request.
*
@@ -14,15 +19,11 @@ class AdminRequest extends BaseRequest
*/
public function rules()
{
- $instance = Admin::getInstance();
- $primarykey = $instance->getKeyName();
- $validate_id = ',' . request()->input($primarykey, 0) . ',' . $primarykey;
-
return [
'admin_name' => [
'required',
'max:256',
- 'unique:' . $instance->getTable() . ',admin_name' . $validate_id
+ 'unique:' . $this->instance->getTable() . ',admin_name' . $this->validate_id
],
'admin_email' => [
'required',
diff --git a/app/Modules/Admin/Http/Requests/Rabc/AdminRoleRequest.php b/app/Modules/Admin/Http/Requests/Rabc/AdminRoleRequest.php
index 9d191f3225f38059f4022b0d3df38da63781cd48..c52ba766290b8f4f07b32d5a6a4fe0c610ac4abc 100644
--- a/app/Modules/Admin/Http/Requests/Rabc/AdminRoleRequest.php
+++ b/app/Modules/Admin/Http/Requests/Rabc/AdminRoleRequest.php
@@ -7,6 +7,11 @@ use App\Modules\Admin\Http\Requests\BaseRequest;
class AdminRoleRequest extends BaseRequest
{
+ public function setInstance()
+ {
+ $this->instance = AdminRole::getInstance();
+ }
+
/**
* Get the validation rules that apply to the request.
*
@@ -14,15 +19,11 @@ class AdminRoleRequest extends BaseRequest
*/
public function rules()
{
- $instance = AdminRole::getInstance();
- $primarykey = $instance->getKeyName();
- $validate_id = ',' . request()->input($primarykey, 0) . ',' . $primarykey;
-
return [
'role_name' => [
'required',
'max:256',
- 'unique:' . $instance->getTable() . ',role_name' . $validate_id
+ 'unique:' . $this->instance->getTable() . ',role_name' . $this->validate_id
],
'is_check' => [
'required',
diff --git a/app/Modules/Admin/Http/Requests/System/BannerRequest.php b/app/Modules/Admin/Http/Requests/System/BannerRequest.php
index e89679f4797294ccc864753d8bda8548bcf179a0..7671babe0a77db44e6e2420cfcd2d734cd321101 100644
--- a/app/Modules/Admin/Http/Requests/System/BannerRequest.php
+++ b/app/Modules/Admin/Http/Requests/System/BannerRequest.php
@@ -7,6 +7,11 @@ use App\Modules\Admin\Http\Requests\BaseRequest;
class BannerRequest extends BaseRequest
{
+ public function setInstance()
+ {
+ $this->instance = Banner::getInstance();
+ }
+
/**
* Get the validation rules that apply to the request.
*
@@ -14,15 +19,11 @@ class BannerRequest extends BaseRequest
*/
public function rules()
{
- $instance = Banner::getInstance();
- $primarykey = $instance->getKeyName();
- $validate_id = ',' . request()->input($primarykey, 0) . ',' . $primarykey;
-
return [
'banner_title' => [
'required',
'max:256',
- 'unique:' . $instance->getTable() . ',banner_title' . $validate_id
+ 'unique:' . $this->instance->getTable() . ',banner_title' . $this->validate_id
],
'banner_cover' => [
'required',
diff --git a/app/Modules/Admin/Http/Requests/System/ConfigRequest.php b/app/Modules/Admin/Http/Requests/System/ConfigRequest.php
index 7a0387df07b212d4c78a588e058a71208927f1cf..ba37ccb02d780dba704e8699bbd346a81f346b23 100644
--- a/app/Modules/Admin/Http/Requests/System/ConfigRequest.php
+++ b/app/Modules/Admin/Http/Requests/System/ConfigRequest.php
@@ -7,6 +7,11 @@ use App\Modules\Admin\Http\Requests\BaseRequest;
class ConfigRequest extends BaseRequest
{
+ public function setInstance()
+ {
+ $this->instance = Config::getInstance();
+ }
+
/**
* Get the validation rules that apply to the request.
*
@@ -14,10 +19,6 @@ class ConfigRequest extends BaseRequest
*/
public function rules()
{
- $instance = Config::getInstance();
- $primarykey = $instance->getKeyName();
- $validate_id = ',' . request()->input($primarykey, 0) . ',' . $primarykey;
-
return [
'config_title' => [
'required',
@@ -26,7 +27,7 @@ class ConfigRequest extends BaseRequest
'config_name' => [
'required',
'max:256',
- 'unique:' . $instance->getTable() . ',config_name' . $validate_id
+ 'unique:' . $this->instance->getTable() . ',config_name' . $this->validate_id
]
];
}
diff --git a/app/Modules/Admin/Http/Requests/System/FriendlinkRequest.php b/app/Modules/Admin/Http/Requests/System/FriendlinkRequest.php
index fb09d2b6e0a0aff97003c463cf42401b15c94dd9..bf1248a769e297e09bcfb60473dd75ec5f0d069f 100644
--- a/app/Modules/Admin/Http/Requests/System/FriendlinkRequest.php
+++ b/app/Modules/Admin/Http/Requests/System/FriendlinkRequest.php
@@ -7,6 +7,11 @@ use App\Modules\Admin\Http\Requests\BaseRequest;
class FriendlinkRequest extends BaseRequest
{
+ public function setInstance()
+ {
+ $this->instance = Friendlink::getInstance();
+ }
+
/**
* Get the validation rules that apply to the request.
*
@@ -14,15 +19,11 @@ class FriendlinkRequest extends BaseRequest
*/
public function rules()
{
- $instance = Friendlink::getInstance();
- $primarykey = $instance->getKeyName();
- $validate_id = ',' . request()->input($primarykey, 0) . ',' . $primarykey;
-
return [
'link_name' => [
'required',
'max:256',
- 'unique:' . $instance->getTable() . ',link_name' . $validate_id
+ 'unique:' . $this->instance->getTable() . ',link_name' . $this->validate_id
],
'link_url' => [
'url',
diff --git a/app/Modules/Admin/Http/Requests/System/ProtocolRequest.php b/app/Modules/Admin/Http/Requests/System/ProtocolRequest.php
index 324cd543975542820d927ab069f3e4137f20db68..d339d534cac23cf2c6564aa5f65741833ea53f4d 100644
--- a/app/Modules/Admin/Http/Requests/System/ProtocolRequest.php
+++ b/app/Modules/Admin/Http/Requests/System/ProtocolRequest.php
@@ -7,6 +7,11 @@ use App\Modules\Admin\Http\Requests\BaseRequest;
class ProtocolRequest extends BaseRequest
{
+ public function setInstance()
+ {
+ $this->instance = Protocol::getInstance();
+ }
+
/**
* Get the validation rules that apply to the request.
*
@@ -14,15 +19,11 @@ class ProtocolRequest extends BaseRequest
*/
public function rules()
{
- $instance = Protocol::getInstance();
- $primarykey = $instance->getKeyName();
- $validate_id = ',' . request()->input($primarykey, 0) . ',' . $primarykey;
-
return [
'protocol_name' => [
'required',
'max:256',
- 'unique:' . $instance->getTable() . ',protocol_name' . $validate_id
+ 'unique:' . $this->instance->getTable() . ',protocol_name' . $this->validate_id
],
'protocol_type' => [
'required',
diff --git a/app/Modules/Admin/Http/Requests/System/VersionRequest.php b/app/Modules/Admin/Http/Requests/System/VersionRequest.php
index 25fdc379a7bb72a71173a7d2522464ca4b3494e9..1165aa5170ef2bff13dae8c2d54908751747c885 100644
--- a/app/Modules/Admin/Http/Requests/System/VersionRequest.php
+++ b/app/Modules/Admin/Http/Requests/System/VersionRequest.php
@@ -7,6 +7,11 @@ use App\Modules\Admin\Http\Requests\BaseRequest;
class VersionRequest extends BaseRequest
{
+ public function setInstance()
+ {
+ $this->instance = Version::getInstance();
+ }
+
/**
* Get the validation rules that apply to the request.
*
@@ -14,15 +19,11 @@ class VersionRequest extends BaseRequest
*/
public function rules()
{
- $instance = Version::getInstance();
- $primarykey = $instance->getKeyName();
- $validate_id = ',' . request()->input($primarykey, 0) . ',' . $primarykey;
-
return [
'version_name' => [
'required',
'max:256',
- 'unique:' . $instance->getTable() . ',version_name' . $validate_id
+ 'unique:' . $this->instance->getTable() . ',version_name' . $this->validate_id
],
'version_number' => [
'required',
diff --git a/app/Modules/Admin/Resources/vue-element-admin/api/admin_menus.js b/app/Modules/Admin/Resources/vue-element-admin/api/admin_menus.js
index f703136f881d1dcec5e6d619cc3967bd673c9918..4d5aef92309a8c3ac3de34ebdec09f4b1f0521fa 100644
--- a/app/Modules/Admin/Resources/vue-element-admin/api/admin_menus.js
+++ b/app/Modules/Admin/Resources/vue-element-admin/api/admin_menus.js
@@ -17,7 +17,7 @@ export function getList(params) {
export function create(data) {
return request({
- url: '/admin_menus',
+ url: '/admin_menus/create',
method: 'post',
data
})
@@ -25,7 +25,7 @@ export function create(data) {
export function update(data) {
return request({
- url: `/admin_menus`,
+ url: `/admin_menus/update`,
method: 'put',
data
})
@@ -33,7 +33,7 @@ export function update(data) {
export function setDel(data) {
return request({
- url: `/admin_menus`,
+ url: `/admin_menus/delete`,
method: 'delete',
data
})
diff --git a/app/Modules/Admin/Resources/vue-element-admin/api/admin_roles.js b/app/Modules/Admin/Resources/vue-element-admin/api/admin_roles.js
index a73024ec2383b7e01f51128112ae909e581f29e7..150c68079d4193d4af9e84e953ee45de16c08cad 100644
--- a/app/Modules/Admin/Resources/vue-element-admin/api/admin_roles.js
+++ b/app/Modules/Admin/Resources/vue-element-admin/api/admin_roles.js
@@ -17,7 +17,7 @@ export function getList(params) {
export function create(data) {
return request({
- url: '/admin_roles',
+ url: '/admin_roles/create',
method: 'post',
data
})
@@ -25,7 +25,7 @@ export function create(data) {
export function update(data) {
return request({
- url: `/admin_roles`,
+ url: `/admin_roles/update`,
method: 'put',
data
})
@@ -33,7 +33,7 @@ export function update(data) {
export function setDel(data) {
return request({
- url: `/admin_roles`,
+ url: `/admin_roles/delete`,
method: 'delete',
data
})
diff --git a/app/Modules/Admin/Resources/vue-element-admin/api/adminloginlogs.js b/app/Modules/Admin/Resources/vue-element-admin/api/adminloginlogs.js
index 79d6ed6f875f7b7315368e615ae26838300b3931..2e3fea3b57442fcc4c596752398af06a4085092d 100644
--- a/app/Modules/Admin/Resources/vue-element-admin/api/adminloginlogs.js
+++ b/app/Modules/Admin/Resources/vue-element-admin/api/adminloginlogs.js
@@ -10,7 +10,7 @@ export function getList(params) {
export function setDel(data) {
return request({
- url: `/adminloginlogs`,
+ url: `/adminloginlogs/delete`,
method: 'delete',
data
})
diff --git a/app/Modules/Admin/Resources/vue-element-admin/api/adminlogs.js b/app/Modules/Admin/Resources/vue-element-admin/api/adminlogs.js
index 5b0062f5955617803f193d73cc9ede1259cfbfd4..c303f103dcea0b4a0575fabd1f430d1351738db5 100644
--- a/app/Modules/Admin/Resources/vue-element-admin/api/adminlogs.js
+++ b/app/Modules/Admin/Resources/vue-element-admin/api/adminlogs.js
@@ -10,7 +10,7 @@ export function getList(params) {
export function setDel(data) {
return request({
- url: `/adminlogs`,
+ url: `/adminlogs/delete`,
method: 'delete',
data
})
diff --git a/app/Modules/Admin/Resources/vue-element-admin/api/admins.js b/app/Modules/Admin/Resources/vue-element-admin/api/admins.js
index 6ef7f82a3e65874fdf2ea0bbb84fa9148f62ec90..201bbe3451f0e5874739e9ad5abe3f08b2de6f47 100644
--- a/app/Modules/Admin/Resources/vue-element-admin/api/admins.js
+++ b/app/Modules/Admin/Resources/vue-element-admin/api/admins.js
@@ -26,7 +26,7 @@ export function getList(params) {
export function create(data) {
return request({
- url: '/admins',
+ url: '/admins/create',
method: 'post',
data
})
@@ -34,7 +34,7 @@ export function create(data) {
export function update(data) {
return request({
- url: `/admins`,
+ url: `/admins/update`,
method: 'put',
data
})
@@ -42,7 +42,7 @@ export function update(data) {
export function setDel(data) {
return request({
- url: `/admins`,
+ url: `/admins/delete`,
method: 'delete',
data
})
diff --git a/app/Modules/Admin/Resources/vue-element-admin/api/article_categories.js b/app/Modules/Admin/Resources/vue-element-admin/api/article_categories.js
index b3914ff948505cc880cbc71f40e5d651ced4269d..99b3a5d6ba213a7112f16b63587021537d195e30 100644
--- a/app/Modules/Admin/Resources/vue-element-admin/api/article_categories.js
+++ b/app/Modules/Admin/Resources/vue-element-admin/api/article_categories.js
@@ -2,14 +2,14 @@ import request from '@/utils/request'
export function getCategorySelect() {
return request({
- url: '/article_categorys/getSelectLists',
+ url: '/article_categories/getSelectLists',
method: 'get'
})
}
export function getList(params) {
return request({
- url: 'article_categorys',
+ url: 'article_categories',
method: 'get',
params
})
@@ -17,7 +17,7 @@ export function getList(params) {
export function create(data) {
return request({
- url: '/article_categorys',
+ url: '/article_categories/create',
method: 'post',
data
})
@@ -25,7 +25,7 @@ export function create(data) {
export function update(data) {
return request({
- url: `/article_categorys`,
+ url: `/article_categories/update`,
method: 'put',
data
})
@@ -33,7 +33,7 @@ export function update(data) {
export function setDel(data) {
return request({
- url: `/article_categorys`,
+ url: `/article_categories/delete`,
method: 'delete',
data
})
@@ -41,7 +41,7 @@ export function setDel(data) {
export function changeFiledStatus(data) {
return request({
- url: `/article_categorys/changeFiledStatus`,
+ url: `/article_categories/changeFiledStatus`,
method: 'put',
data
})
diff --git a/app/Modules/Admin/Resources/vue-element-admin/api/articles.js b/app/Modules/Admin/Resources/vue-element-admin/api/articles.js
index f020954a620c770eb07c259909f9c503077db2bd..74cc0609b1164390c044ec44598088f84f03352d 100644
--- a/app/Modules/Admin/Resources/vue-element-admin/api/articles.js
+++ b/app/Modules/Admin/Resources/vue-element-admin/api/articles.js
@@ -25,7 +25,7 @@ export function detail(id) {
export function create(data) {
return request({
- url: '/articles',
+ url: '/articles/create',
method: 'post',
data
})
@@ -33,7 +33,7 @@ export function create(data) {
export function update(data) {
return request({
- url: `/articles`,
+ url: `/articles/update`,
method: 'put',
data
})
@@ -41,7 +41,7 @@ export function update(data) {
export function setDel(data) {
return request({
- url: `/articles`,
+ url: `/articles/delete`,
method: 'delete',
data
})
diff --git a/app/Modules/Admin/Resources/vue-element-admin/api/banners.js b/app/Modules/Admin/Resources/vue-element-admin/api/banners.js
index 6804acb09bb4387df745a3b3f23e5512f0a0ded7..188f87d583b16875db4d23b0a4764bf3e22c3495 100644
--- a/app/Modules/Admin/Resources/vue-element-admin/api/banners.js
+++ b/app/Modules/Admin/Resources/vue-element-admin/api/banners.js
@@ -10,7 +10,7 @@ export function getList(params) {
export function create(data) {
return request({
- url: '/banners',
+ url: '/banners/create',
method: 'post',
data
});
@@ -18,7 +18,7 @@ export function create(data) {
export function update(data) {
return request({
- url: '/banners',
+ url: '/banners/update',
method: 'put',
data
});
@@ -26,7 +26,7 @@ export function update(data) {
export function setDel(data) {
return request({
- url: '/banners',
+ url: '/banners/delete',
method: 'delete',
data
});
diff --git a/app/Modules/Admin/Resources/vue-element-admin/api/configs.js b/app/Modules/Admin/Resources/vue-element-admin/api/configs.js
index 0316ce4012c376be098a20f1b2a6c6ee544c3a23..92ea787c68a869a30fc2bed20dd0cc35f16834b5 100644
--- a/app/Modules/Admin/Resources/vue-element-admin/api/configs.js
+++ b/app/Modules/Admin/Resources/vue-element-admin/api/configs.js
@@ -10,7 +10,7 @@ export function getList(query) {
export function create(data) {
return request({
- url: '/configs',
+ url: '/configs/create',
method: 'post',
data
})
@@ -18,7 +18,7 @@ export function create(data) {
export function update(data) {
return request({
- url: '/configs',
+ url: '/configs/update',
method: 'put',
data
})
@@ -26,7 +26,7 @@ export function update(data) {
export function setDel(data) {
return request({
- url: '/configs',
+ url: '/configs/delete',
method: 'delete',
data
})
diff --git a/app/Modules/Admin/Resources/vue-element-admin/api/friendlinks.js b/app/Modules/Admin/Resources/vue-element-admin/api/friendlinks.js
index e06be8a420e11bec8b1b20c67d65a5ba800a81e8..d4804eeea2af2255d2f2984b7453c82e178ca9ce 100644
--- a/app/Modules/Admin/Resources/vue-element-admin/api/friendlinks.js
+++ b/app/Modules/Admin/Resources/vue-element-admin/api/friendlinks.js
@@ -10,7 +10,7 @@ export function getList(params) {
export function create(data) {
return request({
- url: '/friendlinks',
+ url: '/friendlinks/create',
method: 'post',
data
})
@@ -19,7 +19,7 @@ export function create(data) {
export function update(data) {
console.log(data)
return request({
- url: '/friendlinks',
+ url: '/friendlinks/update',
method: 'put',
data
})
@@ -27,7 +27,7 @@ export function update(data) {
export function setDel(data) {
return request({
- url: '/friendlinks',
+ url: '/friendlinks/delete',
method: 'delete',
data
})
diff --git a/app/Modules/Admin/Resources/vue-element-admin/api/login.js b/app/Modules/Admin/Resources/vue-element-admin/api/login.js
index 1e694b109a3cdd0dcaeb55e268bd14f6ebd0605c..13124efabd22c77bc0907f7ff6a5688a3bf54315 100644
--- a/app/Modules/Admin/Resources/vue-element-admin/api/login.js
+++ b/app/Modules/Admin/Resources/vue-element-admin/api/login.js
@@ -1,30 +1,30 @@
import request from '@/utils/request'
export function login(data) {
- return request({
- url: '/auth/login',
- method: 'post',
- data
- })
+ return request({
+ url: '/auth/login',
+ method: 'post',
+ data
+ })
}
export function getInfo() {
- return request({
- url: '/auth/me',
- method: 'post'
- })
+ return request({
+ url: '/auth/me',
+ method: 'post'
+ })
}
export function getMenus() {
- return request({
- url: '/auth/getRabcList',
- method: 'post'
- })
+ return request({
+ url: '/auth/getRabcList',
+ method: 'post'
+ })
}
export function logout() {
- return request({
- url: '/auth/logout',
- method: 'post'
- })
+ return request({
+ url: '/auth/logout',
+ method: 'post'
+ })
}
diff --git a/app/Modules/Admin/Resources/vue-element-admin/api/remote-search.js b/app/Modules/Admin/Resources/vue-element-admin/api/remote-search.js
deleted file mode 100644
index 02e42b46e56ac4dbb0bf6e4afb341562cc66eca5..0000000000000000000000000000000000000000
--- a/app/Modules/Admin/Resources/vue-element-admin/api/remote-search.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import request from '@/utils/request'
-
-export function searchUser(name) {
- return request({
- url: '/vue-element-admin/search/user',
- method: 'get',
- params: { name }
- })
-}
-
-export function transactionList(query) {
- return request({
- url: '/vue-element-admin/transaction/list',
- method: 'get',
- params: query
- })
-}
diff --git a/app/Modules/Admin/Routes/web.php b/app/Modules/Admin/Routes/web.php
index 88545284b9486e27391c703a2722c90018bc1220..4f398be3674a82d1409ddb6b8a5e72be85dee346 100644
--- a/app/Modules/Admin/Routes/web.php
+++ b/app/Modules/Admin/Routes/web.php
@@ -13,6 +13,7 @@
use Illuminate\Support\Facades\Route;
use App\Modules\Admin\Http\Middleware\CheckAuth;
+use App\Modules\Admin\Http\Middleware\CheckRabc;
use App\Modules\Admin\Http\Middleware\AdminLog;
Route::prefix('admin')->group(function() {
@@ -39,107 +40,110 @@ Route::prefix('admin')->group(function() {
Route::get('logsStatistics', 'IndexController@logsStatistics');
// 月份表列表
Route::get('get_month_lists', 'IndexController@getMonthList');
-
// 文件上传
Route::post('upload_file', 'UploadController@file');
- Route::prefix('banners')->group(function() {
- Route::get('/', 'System\BannerController@index');
- Route::post('/', 'System\BannerController@create');
- Route::put('/', 'System\BannerController@update');
- Route::delete('/', 'System\BannerController@delete');
- Route::put('/changeFiledStatus', 'System\BannerController@changeFiledStatus');
- });
-
- // 配置管理
- Route::prefix('configs')->group(function() {
- Route::get('/', 'System\ConfigController@index');
- Route::post('/', 'System\ConfigController@create');
- Route::put('/', 'System\ConfigController@update');
- Route::delete('/', 'System\ConfigController@delete');
- Route::put('/changeFiledStatus', 'System\ConfigController@changeFiledStatus');
- });
-
- // 友情链接
- Route::prefix('friendlinks')->group(function() {
- Route::get('/', 'System\FriendlinkController@index');
- Route::post('/', 'System\FriendlinkController@create');
- Route::put('/', 'System\FriendlinkController@update');
- Route::delete('/', 'System\FriendlinkController@delete');
- Route::put('/changeFiledStatus', 'System\FriendlinkController@changeFiledStatus');
- });
-
- Route::prefix('protocols')->group(function() {
- Route::get('/', 'System\ProtocolController@index');
- Route::post('/', 'System\ProtocolController@create');
- Route::put('/', 'System\ProtocolController@update');
- Route::delete('/', 'System\ProtocolController@delete');
- });
-
- Route::prefix('versions')->group(function() {
- Route::get('/', 'System\VersionController@index');
- Route::post('/', 'System\VersionController@create');
- Route::put('/', 'System\VersionController@update');
- Route::delete('/', 'System\VersionController@delete');
- Route::put('/changeFiledStatus', 'System\VersionController@changeFiledStatus');
- });
-
- Route::prefix('admins')->group(function() {
- Route::get('/', 'Rabc\AdminController@index');
- Route::post('/', 'Rabc\AdminController@create');
- Route::put('/', 'Rabc\AdminController@update');
- Route::delete('/', 'Rabc\AdminController@delete');
- Route::get('/getSelectLists', 'Rabc\AdminController@getSelectLists');
- Route::put('/changeFiledStatus', 'Rabc\AdminController@changeFiledStatus');
- });
-
- Route::prefix('admin_roles')->group(function() {
- Route::get('/', 'Rabc\AdminRoleController@index');
- Route::post('/', 'Rabc\AdminRoleController@create');
- Route::put('/', 'Rabc\AdminRoleController@update');
- Route::delete('/', 'Rabc\AdminRoleController@delete');
- Route::get('/getSelectLists', 'Rabc\AdminRoleController@getSelectLists');
- Route::put('/changeFiledStatus', 'Rabc\AdminRoleController@changeFiledStatus');
- });
-
- Route::prefix('admin_menus')->group(function() {
- Route::get('/', 'Rabc\AdminMenuController@index');
- Route::post('/', 'Rabc\AdminMenuController@create');
- Route::put('/', 'Rabc\AdminMenuController@update');
- Route::delete('/', 'Rabc\AdminMenuController@delete');
- Route::get('/getSelectLists', 'Rabc\AdminMenuController@getSelectLists');
- Route::put('/changeFiledStatus', 'Rabc\AdminMenuController@changeFiledStatus');
- });
-
- // 管理员日志
- Route::prefix('adminlogs')->group(function() {
- Route::get('/', 'Log\AdminLogController@index');
- Route::delete('/', 'Log\AdminLogController@delete');
- });
-
- // 管理员登录日志
- Route::prefix('adminloginlogs')->group(function() {
- Route::get('/', 'Log\AdminLoginLogController@index');
- Route::delete('/', 'Log\AdminLoginLogController@delete');
- });
-
- // 文章分类
- Route::prefix('article_categorys')->group(function() {
- Route::get('/', 'Article\ArticleCategoryController@index');
- Route::post('/', 'Article\ArticleCategoryController@create');
- Route::put('/', 'Article\ArticleCategoryController@update');
- Route::delete('/', 'Article\ArticleCategoryController@delete');
- Route::get('/getSelectLists', 'Article\ArticleCategoryController@getSelectLists');
- Route::put('/changeFiledStatus', 'Article\ArticleCategoryController@changeFiledStatus');
- });
-
- // 文章管理
- Route::prefix('articles')->group(function() {
- Route::get('/', 'Article\ArticleController@index');
- Route::get('/detail', 'Article\ArticleController@detail');
- Route::post('/', 'Article\ArticleController@create');
- Route::put('/', 'Article\ArticleController@update');
- Route::delete('/', 'Article\ArticleController@delete');
+ // 权限中间件
+ Route::middleware([CheckRabc::class])->group(function () {
+ Route::prefix('banners')->group(function() {
+ Route::get('/', 'System\BannerController@index');
+ Route::post('/create', 'System\BannerController@create');
+ Route::put('/update', 'System\BannerController@update');
+ Route::delete('/delete', 'System\BannerController@delete');
+ Route::put('/changeFiledStatus', 'System\BannerController@changeFiledStatus');
+ });
+
+ // 配置管理
+ Route::prefix('configs')->group(function() {
+ Route::get('/', 'System\ConfigController@index');
+ Route::post('/create', 'System\ConfigController@create');
+ Route::put('/update', 'System\ConfigController@update');
+ Route::delete('/delete', 'System\ConfigController@delete');
+ Route::put('/changeFiledStatus', 'System\ConfigController@changeFiledStatus');
+ });
+
+ // 友情链接
+ Route::prefix('friendlinks')->group(function() {
+ Route::get('/', 'System\FriendlinkController@index');
+ Route::post('/create', 'System\FriendlinkController@create');
+ Route::put('/update', 'System\FriendlinkController@update');
+ Route::delete('/delete', 'System\FriendlinkController@delete');
+ Route::put('/changeFiledStatus', 'System\FriendlinkController@changeFiledStatus');
+ });
+
+ Route::prefix('protocols')->group(function() {
+ Route::get('/', 'System\ProtocolController@index');
+ Route::post('/create', 'System\ProtocolController@create');
+ Route::put('/update', 'System\ProtocolController@update');
+ Route::delete('/delete', 'System\ProtocolController@delete');
+ });
+
+ Route::prefix('versions')->group(function() {
+ Route::get('/', 'System\VersionController@index');
+ Route::post('/create', 'System\VersionController@create');
+ Route::put('/update', 'System\VersionController@update');
+ Route::delete('/delete', 'System\VersionController@delete');
+ Route::put('/changeFiledStatus', 'System\VersionController@changeFiledStatus');
+ });
+
+ Route::prefix('admins')->group(function() {
+ Route::get('/', 'Rabc\AdminController@index');
+ Route::post('/create', 'Rabc\AdminController@create');
+ Route::put('/update', 'Rabc\AdminController@update');
+ Route::delete('/delete', 'Rabc\AdminController@delete');
+ Route::get('/getSelectLists', 'Rabc\AdminController@getSelectLists');
+ Route::put('/changeFiledStatus', 'Rabc\AdminController@changeFiledStatus');
+ });
+
+ Route::prefix('admin_roles')->group(function() {
+ Route::get('/', 'Rabc\AdminRoleController@index');
+ Route::post('/create', 'Rabc\AdminRoleController@create');
+ Route::put('/update', 'Rabc\AdminRoleController@update');
+ Route::delete('/delete', 'Rabc\AdminRoleController@delete');
+ Route::get('/getSelectLists', 'Rabc\AdminRoleController@getSelectLists');
+ Route::put('/changeFiledStatus', 'Rabc\AdminRoleController@changeFiledStatus');
+ });
+
+ Route::prefix('admin_menus')->group(function() {
+ Route::get('/', 'Rabc\AdminMenuController@index');
+ Route::post('/create', 'Rabc\AdminMenuController@create');
+ Route::put('/update', 'Rabc\AdminMenuController@update');
+ Route::delete('/delete', 'Rabc\AdminMenuController@delete');
+ Route::get('/getSelectLists', 'Rabc\AdminMenuController@getSelectLists');
+ Route::put('/changeFiledStatus', 'Rabc\AdminMenuController@changeFiledStatus');
+ });
+
+ // 管理员日志
+ Route::prefix('adminlogs')->group(function() {
+ Route::get('/', 'Log\AdminLogController@index');
+ Route::delete('/delete', 'Log\AdminLogController@delete');
+ });
+
+ // 管理员登录日志
+ Route::prefix('adminloginlogs')->group(function() {
+ Route::get('/', 'Log\AdminLoginLogController@index');
+ Route::delete('/delete', 'Log\AdminLoginLogController@delete');
+ });
+
+ // 文章分类
+ Route::prefix('article_categories')->group(function() {
+ Route::get('/', 'Article\ArticleCategoryController@index');
+ Route::post('/create', 'Article\ArticleCategoryController@create');
+ Route::put('/update', 'Article\ArticleCategoryController@update');
+ Route::delete('/delete', 'Article\ArticleCategoryController@delete');
+ Route::get('/getSelectLists', 'Article\ArticleCategoryController@getSelectLists');
+ Route::put('/changeFiledStatus', 'Article\ArticleCategoryController@changeFiledStatus');
+ });
+
+ // 文章管理
+ Route::prefix('articles')->group(function() {
+ Route::get('/', 'Article\ArticleController@index');
+ Route::get('/detail', 'Article\ArticleController@detail');
+ Route::post('/create', 'Article\ArticleController@create');
+ Route::put('/update', 'Article\ArticleController@update');
+ Route::delete('/delete', 'Article\ArticleController@delete');
+ Route::put('/changeFiledStatus', 'Article\ArticleController@changeFiledStatus');
+ });
});
});
});
diff --git a/app/Modules/Admin/Services/IndexService.php b/app/Modules/Admin/Services/IndexService.php
index 16867215d3f2ed06e702e129009b06dfe5ed43a0..d41e49a0f08d4c710c7202b73ae0d8c3ddee3bc0 100644
--- a/app/Modules/Admin/Services/IndexService.php
+++ b/app/Modules/Admin/Services/IndexService.php
@@ -7,6 +7,7 @@ use App\Modules\Admin\Entities\Log\AdminLog;
use App\Modules\Admin\Entities\Rabc\Admin;
use App\Modules\Admin\Entities\System\Banner;
use App\Modules\Admin\Entities\System\Friendlink;
+use Illuminate\Support\Facades\Cache;
class IndexService extends BaseService
{
@@ -58,73 +59,82 @@ class IndexService extends BaseService
*/
public function logsStatistics()
{
- $default_data = [
- 'xAxis' => [
- 'data' => [
-
+ $default_time_interval = 300;
+ // 时段间隔:5分钟,自己调整
+ $time_interval_key = "logs-statistics's-time-interval";
+ $time_interval = Cache::get($time_interval_key, $default_time_interval);
+ // 通过缓存进行读写
+ return Cache::remember('logs-statistics', $time_interval, function() use ($time_interval, $time_interval_key){
+ $default_data = [
+ 'xAxis' => [
+ 'data' => [],
],
- ],
- 'list_name' => [
- // 'GET',
- 'POST',
- 'PUT',
- 'DELETE',
- ],
- 'data_lists' => [
- // 'GET' => [],
- 'POST' => [
-
+ 'list_name' => [
+ // 'GET',
+ 'POST',
+ 'PUT',
+ 'DELETE',
],
- 'PUT' => [
-
+ 'data_lists' => [
+ // 'GET' => [],
+ 'POST' => [],
+ 'PUT' => [],
+ 'DELETE' => [],
],
- 'DELETE' => [
+ ];
+ $adminLogInstance = AdminLog::getInstance();
+ $interval_nums = 100; // 时段次数:100个时间段,自己调整
+ $hours = ceil($time_interval / 3600); // 时间间隔设置,超过几小时:查询时的开始时间需要加上才有意义
+ $time = strtotime(date('Y-m-d H:i', strtotime('+' . $hours . ' hour')) . ':00');
- ],
- ],
- ];
- $adminLogInstance = AdminLog::getInstance();
- $interval_nums = 100; // 时段次数:100个时间段,自己调整
- $time_interval = 300; // 时段间隔:5分钟,自己调整
- $hours = ceil($time_interval / 3600); // 时间间隔设置,超过几小时:查询时的开始时间需要加上才有意义
- $time = strtotime(date('Y-m-d H:i', strtotime('+' . $hours . ' hour')) . ':00');
+ // 数据查询
+ $list = $adminLogInstance->whereBetWeen('created_time', [
+ $time - $interval_nums * $time_interval,
+ $time,
+ ])->get();
- // 数据查询
- $list = $adminLogInstance->whereBetWeen('created_time', [
- $time - $interval_nums * $time_interval,
- $time,
- ])->get();
- for ($i = 0; $i < $interval_nums; $i++) {
- $end_time = $time - $time_interval;
- // 默认X轴的时段
- $default_data['xAxis']['data'][$i] = date('Y-m-d H:i', $end_time);
+ // 是否存在区间有效的日志记录
+ $has_records = false;
- // $default_data['data_lists']['GET'][$i] =
- $default_data['data_lists']['POST'][$i]
- = $default_data['data_lists']['PUT'][$i]
- = $default_data['data_lists']['DELETE'][$i]
- = 0;
+ for ($i = 0; $i < $interval_nums; $i++) {
+ $end_time = $time - $time_interval;
+ // 默认X轴的时段
+ $default_data['xAxis']['data'][$i] = date('Y-m-d H:i', $end_time);
- if ( $list ) {
- foreach ($list as $v) {
- if ($v->created_time >= $end_time && $v->created_time <= $time){
- if ( $v->log_method == 'GET' ) {
- // ++$default_data['data_lists']['GET'][$i];
- } elseif ( $v->log_method == 'POST' ) {
- ++$default_data['data_lists']['POST'][$i];
- } elseif ( $v->log_method == 'PUT' ) {
- ++$default_data['data_lists']['PUT'][$i];
- } elseif ( $v->log_method == 'DELETE' ) {
- ++$default_data['data_lists']['DELETE'][$i];
+ // $default_data['data_lists']['GET'][$i] =
+ $default_data['data_lists']['POST'][$i]
+ = $default_data['data_lists']['PUT'][$i]
+ = $default_data['data_lists']['DELETE'][$i]
+ = 0;
+
+ if ( $list ) {
+ foreach ($list as $v) {
+ if ($v->created_time >= $end_time && $v->created_time <= $time){
+ $has_records = true;
+ if ( $v->log_method == 'GET' ) {
+ // ++$default_data['data_lists']['GET'][$i];
+ } elseif ( $v->log_method == 'POST' ) {
+ ++$default_data['data_lists']['POST'][$i];
+ } elseif ( $v->log_method == 'PUT' ) {
+ ++$default_data['data_lists']['PUT'][$i];
+ } elseif ( $v->log_method == 'DELETE' ) {
+ ++$default_data['data_lists']['DELETE'][$i];
+ }
}
}
}
+
+ // 把当前的结束时间设置为下一次的开始时间
+ $time = $end_time;
}
- // 把当前的结束时间设置为下一次的开始时间
- $time = $end_time;
- }
- return (array)$default_data;
+ // 当没有记录是,时间间隔慢慢往上扩大两倍,实现统计图效果
+ if (!$has_records){
+ Cache::put($time_interval_key, $time_interval * 2);
+ }
+
+ return (array)$default_data;
+ });
}
/**
diff --git a/composer.lock b/composer.lock
index 31c707e98932f5efe99f3dec52ce2a1fdabcff54..10876da8d1c412559f0c2bcc130ffc2cdc30fa15 100644
--- a/composer.lock
+++ b/composer.lock
@@ -405,16 +405,16 @@
},
{
"name": "egulias/email-validator",
- "version": "2.1.24",
+ "version": "2.1.25",
"source": {
"type": "git",
"url": "https://github.com/egulias/EmailValidator.git",
- "reference": "ca90a3291eee1538cd48ff25163240695bd95448"
+ "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ca90a3291eee1538cd48ff25163240695bd95448",
- "reference": "ca90a3291eee1538cd48ff25163240695bd95448",
+ "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4",
+ "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4",
"shasum": "",
"mirrors": [
{
@@ -471,7 +471,7 @@
"type": "github"
}
],
- "time": "2020-11-14T15:56:27+00:00"
+ "time": "2020-12-29T14:50:06+00:00"
},
{
"name": "fideloper/proxy",
@@ -5576,7 +5576,13 @@
"type": "zip",
"url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/233c10688f4c1a6e66ed2ef123038b1363d1bedc",
"reference": "233c10688f4c1a6e66ed2ef123038b1363d1bedc",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"illuminate/routing": "^6|^7|^8",
@@ -5719,7 +5725,13 @@
"type": "zip",
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b",
"reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"php": "^7.1 || ^8.0"
@@ -5784,7 +5796,13 @@
"type": "zip",
"url": "https://api.github.com/repos/facade/flare-client-php/zipball/fd688d3c06658f2b3b5f7bb19f051ee4ddf02492",
"reference": "fd688d3c06658f2b3b5f7bb19f051ee4ddf02492",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"facade/ignition-contracts": "~1.0",
@@ -5835,17 +5853,23 @@
},
{
"name": "facade/ignition",
- "version": "2.5.3",
+ "version": "2.5.8",
"source": {
"type": "git",
"url": "https://github.com/facade/ignition.git",
- "reference": "d8dc4f90ed469f9f9313b976fb078c20585d5c99"
+ "reference": "8e907d81244649c5ea746e2ec30c32c5f59df472"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/facade/ignition/zipball/d8dc4f90ed469f9f9313b976fb078c20585d5c99",
- "reference": "d8dc4f90ed469f9f9313b976fb078c20585d5c99",
- "shasum": ""
+ "url": "https://api.github.com/repos/facade/ignition/zipball/8e907d81244649c5ea746e2ec30c32c5f59df472",
+ "reference": "8e907d81244649c5ea746e2ec30c32c5f59df472",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"ext-json": "*",
@@ -5902,7 +5926,7 @@
"laravel",
"page"
],
- "time": "2020-12-09T20:25:45+00:00"
+ "time": "2020-12-29T09:12:55+00:00"
},
{
"name": "facade/ignition-contracts",
@@ -5916,7 +5940,13 @@
"type": "zip",
"url": "https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267",
"reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"php": "^7.3|^8.0"
@@ -6019,7 +6049,13 @@
"type": "zip",
"url": "https://api.github.com/repos/filp/whoops/zipball/307fb34a5ab697461ec4c9db865b20ff2fd40771",
"reference": "307fb34a5ab697461ec4c9db865b20ff2fd40771",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"php": "^5.5.9 || ^7.0 || ^8.0",
@@ -6080,7 +6116,13 @@
"type": "zip",
"url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
"reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"php": "^5.3|^7.0|^8.0"
@@ -6127,7 +6169,13 @@
"type": "zip",
"url": "https://api.github.com/repos/laravel/sail/zipball/d9b0575ece889a35b9741789452c1c7abca5bc2f",
"reference": "d9b0575ece889a35b9741789452c1c7abca5bc2f",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"illuminate/contracts": "^8.0|^9.0",
@@ -6182,7 +6230,13 @@
"type": "zip",
"url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/c86c717e4bf3c6d98422da5c38bfa7b0f494b04c",
"reference": "c86c717e4bf3c6d98422da5c38bfa7b0f494b04c",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"php": "^7.1|^8",
@@ -6243,7 +6297,13 @@
"type": "zip",
"url": "https://api.github.com/repos/mockery/mockery/zipball/20cab678faed06fac225193be281ea0fddb43b93",
"reference": "20cab678faed06fac225193be281ea0fddb43b93",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"hamcrest/hamcrest-php": "^2.0.1",
@@ -6311,7 +6371,13 @@
"type": "zip",
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220",
"reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"php": "^7.1 || ^8.0"
@@ -6365,7 +6431,13 @@
"type": "zip",
"url": "https://api.github.com/repos/nunomaduro/collision/zipball/7c2b95589bf81e274e61e47f7672a1b2c3e06eaa",
"reference": "7c2b95589bf81e274e61e47f7672a1b2c3e06eaa",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"facade/ignition-contracts": "^1.0",
@@ -6449,7 +6521,13 @@
"type": "zip",
"url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133",
"reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"ext-dom": "*",
@@ -6558,7 +6636,13 @@
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
"reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"php": "^7.2 || ^8.0"
@@ -6607,7 +6691,13 @@
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556",
"reference": "069a785b2141f5bcf49f3e353548dc1cce6df556",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"ext-filter": "*",
@@ -6659,7 +6749,13 @@
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
"reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"php": "^7.2 || ^8.0",
@@ -6773,7 +6869,13 @@
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f3e026641cc91909d421802dd3ac7827ebfd97e1",
"reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"ext-dom": "*",
@@ -6846,7 +6948,13 @@
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8",
"reference": "aa4be8575f26070b100fccb67faabb28f21f66f8",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"php": ">=7.3"
@@ -6902,7 +7010,13 @@
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
"reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"php": ">=7.3"
@@ -6961,7 +7075,13 @@
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
"reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"php": ">=7.3"
@@ -7016,7 +7136,13 @@
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
"reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"php": ">=7.3"
@@ -7071,7 +7197,13 @@
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8e16c225d57c3d6808014df6b1dd7598d0a5bbbe",
"reference": "8e16c225d57c3d6808014df6b1dd7598d0a5bbbe",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"doctrine/instantiator": "^1.3.1",
@@ -7170,7 +7302,13 @@
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2",
"reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"php": ">=7.3"
@@ -7222,7 +7360,13 @@
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
"reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"php": ">=7.3"
@@ -7274,7 +7418,13 @@
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
"reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"php": ">=7.3"
@@ -7325,7 +7475,13 @@
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382",
"reference": "55f4261989e546dc112258c7a75935a81a7ce382",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"php": ">=7.3",
@@ -7395,7 +7551,13 @@
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88",
"reference": "739b35e53379900cc9ac327b2147867b8b6efd88",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"nikic/php-parser": "^4.7",
@@ -7448,7 +7610,13 @@
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d",
"reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"php": ">=7.3"
@@ -7510,7 +7678,13 @@
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac",
"reference": "388b6ced16caa751030f6a69e588299fa09200ac",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"php": ">=7.3"
@@ -7569,7 +7743,13 @@
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65",
"reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"php": ">=7.3",
@@ -7642,7 +7822,13 @@
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455",
"reference": "a90ccbddffa067b51f574dea6eb25d5680839455",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"php": ">=7.3",
@@ -7702,7 +7888,13 @@
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc",
"reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"nikic/php-parser": "^4.6",
@@ -7755,7 +7947,13 @@
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
"reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"php": ">=7.3",
@@ -7808,7 +8006,13 @@
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
"reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"php": ">=7.3"
@@ -7859,7 +8063,13 @@
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172",
"reference": "cd9d8cf3c5804de4341c283ed787f099f5506172",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"php": ">=7.3"
@@ -7918,7 +8128,13 @@
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
"reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"php": ">=7.3"
@@ -7969,7 +8185,13 @@
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2",
"reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"php": ">=7.3"
@@ -8021,7 +8243,13 @@
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
"reference": "c6c1022351a901512170118436c764e473f6de8c",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"php": ">=7.3"
@@ -8142,7 +8370,13 @@
"type": "zip",
"url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a",
"reference": "75a63c33a8577608444246075ea0af0d052e452a",
- "shasum": ""
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
},
"require": {
"ext-dom": "*",