更新架构
This commit is contained in:
1 parent
0f48ce7894
commit
89d7761887
4 files changed
+392
-103
No files matched your search
@@ -0,0 +1,352 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\admin\controller;
|
||||
|
||||
use app\admin\BaseController;
|
||||
use think\response\Json;
|
||||
use app\model\AdminModules;
|
||||
|
||||
class ModulesController extends BaseController
|
||||
{
|
||||
/**
|
||||
* 获取所有模块列表
|
||||
* @return Json
|
||||
*/
|
||||
public function getList()
|
||||
{
|
||||
try {
|
||||
$modules = AdminModules::where('delete_time', null)
|
||||
->order('sort', 'asc')
|
||||
->order('id', 'asc')
|
||||
->select()
|
||||
->toArray();
|
||||
|
||||
$this->logSuccess('模块管理', '获取模块列表', ['count' => count($modules)]);
|
||||
|
||||
return json([
|
||||
'code' => 200,
|
||||
'msg' => '获取成功',
|
||||
'data' => [
|
||||
'list' => $modules,
|
||||
'total' => count($modules)
|
||||
]
|
||||
]);
|
||||
} catch (\Exception $e) {
|
||||
$this->logFail('模块管理', '获取模块列表', $e->getMessage());
|
||||
return json([
|
||||
'code' => 500,
|
||||
'msg' => '获取失败:' . $e->getMessage(),
|
||||
'data' => []
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取模块详情
|
||||
* @return Json
|
||||
*/
|
||||
public function getDetail(int $id)
|
||||
{
|
||||
try {
|
||||
$module = AdminModules::where('id', $id)
|
||||
->where('delete_time', null)
|
||||
->find();
|
||||
|
||||
if (!$module) {
|
||||
return json([
|
||||
'code' => 404,
|
||||
'msg' => '模块不存在',
|
||||
'data' => null
|
||||
]);
|
||||
}
|
||||
|
||||
$this->logSuccess('模块管理', '获取模块详情', ['id' => $id]);
|
||||
|
||||
return json([
|
||||
'code' => 200,
|
||||
'msg' => '获取成功',
|
||||
'data' => $module
|
||||
]);
|
||||
} catch (\Exception $e) {
|
||||
$this->logFail('模块管理', '获取模块详情', $e->getMessage());
|
||||
return json([
|
||||
'code' => 500,
|
||||
'msg' => '获取失败:' . $e->getMessage(),
|
||||
'data' => null
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加模块
|
||||
* @return Json
|
||||
*/
|
||||
public function add()
|
||||
{
|
||||
try {
|
||||
$data = [
|
||||
'name' => input('post.name', '', 'trim'),
|
||||
'code' => input('post.code', '', 'trim'),
|
||||
'description' => input('post.description', '', 'trim'),
|
||||
'icon' => input('post.icon', '', 'trim'),
|
||||
'path' => input('post.path', '', 'trim'),
|
||||
'sort' => (int)input('post.sort', 0),
|
||||
'status' => (int)input('post.status', 1),
|
||||
'is_show' => (int)input('post.is_show', 1),
|
||||
'create_time' => date('Y-m-d H:i:s'),
|
||||
'update_time' => date('Y-m-d H:i:s')
|
||||
];
|
||||
|
||||
if (empty($data['name']) || empty($data['code'])) {
|
||||
return json([
|
||||
'code' => 400,
|
||||
'msg' => '模块名称和编码不能为空',
|
||||
'data' => null
|
||||
]);
|
||||
}
|
||||
|
||||
$exists = AdminModules::where('code', $data['code'])
|
||||
->where('delete_time', null)
|
||||
->find();
|
||||
|
||||
if ($exists) {
|
||||
return json([
|
||||
'code' => 400,
|
||||
'msg' => '模块编码已存在',
|
||||
'data' => null
|
||||
]);
|
||||
}
|
||||
|
||||
$id = AdminModules::insertGetId($data);
|
||||
|
||||
$this->logSuccess('模块管理', '添加模块', ['id' => $id, 'name' => $data['name']]);
|
||||
|
||||
return json([
|
||||
'code' => 200,
|
||||
'msg' => '添加成功',
|
||||
'data' => ['id' => $id]
|
||||
]);
|
||||
} catch (\Exception $e) {
|
||||
$this->logFail('模块管理', '添加模块', $e->getMessage());
|
||||
return json([
|
||||
'code' => 500,
|
||||
'msg' => '添加失败:' . $e->getMessage(),
|
||||
'data' => null
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑模块
|
||||
* @return Json
|
||||
*/
|
||||
public function edit()
|
||||
{
|
||||
try {
|
||||
$id = (int)input('post.id', 0);
|
||||
|
||||
if (empty($id)) {
|
||||
return json([
|
||||
'code' => 400,
|
||||
'msg' => '参数错误',
|
||||
'data' => null
|
||||
]);
|
||||
}
|
||||
|
||||
$data = [
|
||||
'name' => input('post.name', '', 'trim'),
|
||||
'code' => input('post.code', '', 'trim'),
|
||||
'description' => input('post.description', '', 'trim'),
|
||||
'icon' => input('post.icon', '', 'trim'),
|
||||
'path' => input('post.path', '', 'trim'),
|
||||
'sort' => (int)input('post.sort', 0),
|
||||
'status' => (int)input('post.status', 1),
|
||||
'is_show' => (int)input('post.is_show', 1),
|
||||
'update_time' => date('Y-m-d H:i:s')
|
||||
];
|
||||
|
||||
if (empty($data['name']) || empty($data['code'])) {
|
||||
return json([
|
||||
'code' => 400,
|
||||
'msg' => '模块名称和编码不能为空',
|
||||
'data' => null
|
||||
]);
|
||||
}
|
||||
|
||||
$exists = AdminModules::where('code', $data['code'])
|
||||
->where('id', '<>', $id)
|
||||
->where('delete_time', null)
|
||||
->find();
|
||||
|
||||
if ($exists) {
|
||||
return json([
|
||||
'code' => 400,
|
||||
'msg' => '模块编码已存在',
|
||||
'data' => null
|
||||
]);
|
||||
}
|
||||
|
||||
AdminModules::where('id', $id)->update($data);
|
||||
|
||||
$this->logSuccess('模块管理', '编辑模块', ['id' => $id, 'name' => $data['name']]);
|
||||
|
||||
return json([
|
||||
'code' => 200,
|
||||
'msg' => '编辑成功',
|
||||
'data' => null
|
||||
]);
|
||||
} catch (\Exception $e) {
|
||||
$this->logFail('模块管理', '编辑模块', $e->getMessage());
|
||||
return json([
|
||||
'code' => 500,
|
||||
'msg' => '编辑失败:' . $e->getMessage(),
|
||||
'data' => null
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除模块
|
||||
* @return Json
|
||||
*/
|
||||
public function delete(int $id)
|
||||
{
|
||||
try {
|
||||
if (empty($id)) {
|
||||
return json([
|
||||
'code' => 400,
|
||||
'msg' => '参数错误',
|
||||
'data' => null
|
||||
]);
|
||||
}
|
||||
|
||||
AdminModules::where('id', $id)->update([
|
||||
'delete_time' => date('Y-m-d H:i:s')
|
||||
]);
|
||||
|
||||
$this->logSuccess('模块管理', '删除模块', ['id' => $id]);
|
||||
|
||||
return json([
|
||||
'code' => 200,
|
||||
'msg' => '删除成功',
|
||||
'data' => null
|
||||
]);
|
||||
} catch (\Exception $e) {
|
||||
$this->logFail('模块管理', '删除模块', $e->getMessage());
|
||||
return json([
|
||||
'code' => 500,
|
||||
'msg' => '删除失败:' . $e->getMessage(),
|
||||
'data' => null
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除模块
|
||||
* @return Json
|
||||
*/
|
||||
public function batchDelete()
|
||||
{
|
||||
try {
|
||||
$ids = input('post.ids', []);
|
||||
$ids = array_map('intval', $ids);
|
||||
|
||||
if (empty($ids)) {
|
||||
return json([
|
||||
'code' => 400,
|
||||
'msg' => '请选择要删除的模块',
|
||||
'data' => null
|
||||
]);
|
||||
}
|
||||
|
||||
AdminModules::whereIn('id', $ids)
|
||||
->update([
|
||||
'delete_time' => date('Y-m-d H:i:s')
|
||||
]);
|
||||
|
||||
$this->logSuccess('模块管理', '批量删除模块', ['ids' => $ids]);
|
||||
|
||||
return json([
|
||||
'code' => 200,
|
||||
'msg' => '批量删除成功',
|
||||
'data' => null
|
||||
]);
|
||||
} catch (\Exception $e) {
|
||||
$this->logFail('模块管理', '批量删除模块', $e->getMessage());
|
||||
return json([
|
||||
'code' => 500,
|
||||
'msg' => '批量删除失败:' . $e->getMessage(),
|
||||
'data' => null
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改状态
|
||||
* @return Json
|
||||
*/
|
||||
public function changeStatus()
|
||||
{
|
||||
try {
|
||||
$id = (int)input('post.id', 0);
|
||||
$status = (int)input('post.status', 0);
|
||||
|
||||
if (empty($id)) {
|
||||
return json([
|
||||
'code' => 400,
|
||||
'msg' => '参数错误',
|
||||
'data' => null
|
||||
]);
|
||||
}
|
||||
|
||||
AdminModules::where('id', $id)->update([
|
||||
'status' => $status,
|
||||
'update_time' => date('Y-m-d H:i:s')
|
||||
]);
|
||||
|
||||
$this->logSuccess('模块管理', '修改状态', ['id' => $id, 'status' => $status]);
|
||||
|
||||
return json([
|
||||
'code' => 200,
|
||||
'msg' => '状态修改成功',
|
||||
'data' => null
|
||||
]);
|
||||
} catch (\Exception $e) {
|
||||
$this->logFail('模块管理', '修改状态', $e->getMessage());
|
||||
return json([
|
||||
'code' => 500,
|
||||
'msg' => '状态修改失败:' . $e->getMessage(),
|
||||
'data' => null
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取模块选择列表
|
||||
* @return Json
|
||||
*/
|
||||
public function getSelectList()
|
||||
{
|
||||
try {
|
||||
$modules = AdminModules::where('delete_time', null)
|
||||
->where('status', 1)
|
||||
->where('is_show', 1)
|
||||
->order('sort', 'asc')
|
||||
->column('id, name, code');
|
||||
|
||||
return json([
|
||||
'code' => 200,
|
||||
'msg' => '获取成功',
|
||||
'data' => $modules
|
||||
]);
|
||||
} catch (\Exception $e) {
|
||||
return json([
|
||||
'code' => 500,
|
||||
'msg' => '获取失败:' . $e->getMessage(),
|
||||
'data' => []
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -102,3 +102,13 @@ Route::post('saveLegalInfos', 'app\\admin\\controller\\SiteSettingsController@sa
|
||||
// 数据统计路由
|
||||
Route::get('contentstats', 'app\\admin\\controller\\AnalyticsController@getContentStats');
|
||||
Route::get('usersstats', 'app\\admin\\controller\\AnalyticsController@getUserStats');
|
||||
|
||||
// 模块管理路由
|
||||
Route::get('modules/list', 'app\\admin\\controller\\ModulesController@getList');
|
||||
Route::get('modules/:id', 'app\\admin\\controller\\ModulesController@getDetail');
|
||||
Route::post('modules', 'app\\admin\\controller\\ModulesController@add');
|
||||
Route::put('modules/:id', 'app\\admin\\controller\\ModulesController@edit');
|
||||
Route::delete('modules/:id', 'app\\admin\\controller\\ModulesController@delete');
|
||||
Route::post('modules/batchDelete', 'app\\admin\\controller\\ModulesController@batchDelete');
|
||||
Route::post('modules/status', 'app\\admin\\controller\\ModulesController@changeStatus');
|
||||
Route::get('modules/select/list', 'app\\admin\\controller\\ModulesController@getSelectList');
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\model;
|
||||
|
||||
use think\Model;
|
||||
use think\model\concern\SoftDelete;
|
||||
|
||||
class AdminModules extends Model
|
||||
{
|
||||
use SoftDelete;
|
||||
|
||||
protected $name = 'admin_modules';
|
||||
|
||||
protected $type = [
|
||||
'id' => 'integer',
|
||||
'name' => 'string',
|
||||
'code' => 'string',
|
||||
'path' => 'string',
|
||||
'icon' => 'string',
|
||||
'description' => 'string',
|
||||
'sort' => 'integer',
|
||||
'status' => 'integer',
|
||||
'is_show' => 'integer',
|
||||
'create_time' => 'datetime',
|
||||
'update_time' => 'datetime',
|
||||
'delete_time' => 'datetime',
|
||||
];
|
||||
}
|
||||
-103
@@ -1,103 +0,0 @@
|
||||
Backend is running... 后端运行中...<style>
|
||||
#think_page_trace {position:fixed; bottom:0; right:0; font-size:14px; width:100%; z-index:999999; color:#000; text-align:left; font-family:'微软雅黑';}
|
||||
#think_page_trace_tab {display:none; background:white; margin:0; height: 250px;}
|
||||
#think_page_trace_tab_tit {height:30px; padding: 6px 12px 0; border-bottom:1px solid #ececec; border-top:1px solid #ececec; font-size:16px;}
|
||||
#think_page_trace_tab_tit>span {color:#000; padding-right:12px; height:30px; line-height:30px; display:inline-block; margin-right:3px; cursor:pointer; font-weight:700;}
|
||||
#think_page_trace_tab_cont {overflow:auto; height:212px; padding:0; line-height:24px;}
|
||||
#think_page_trace_tab_cont>div {display:none;}
|
||||
#think_page_trace_tab_cont>div>ol {padding:0; margin:0;}
|
||||
#think_page_trace_tab_cont>div>ol>li {border-bottom:1px solid #eee; font-size:14px; padding:0 12px;}
|
||||
#think_page_trace_close {display:none; text-align:right; height:15px; position:absolute; top:10px; right:12px; cursor:pointer; z-index: 999999;}
|
||||
#think_page_trace_close>img {vertical-align:top;}
|
||||
#think_page_trace_open {height:30px; float:right; text-align:right; overflow:hidden; position:fixed; bottom:0; right:0; color:#000; line-height:30px; cursor:pointer; z-index:999999;}
|
||||
#think_page_trace_open>div {background:#232323; color:#fff; padding:0 6px; float:right; line-height:30px; font-size:14px;}
|
||||
</style>
|
||||
|
||||
<div id="think_page_trace">
|
||||
<div id="think_page_trace_tab">
|
||||
<div id="think_page_trace_tab_tit">
|
||||
<span>基本</span>
|
||||
<span>文件</span>
|
||||
<span>流程</span>
|
||||
<span>错误</span>
|
||||
<span>SQL</span>
|
||||
<span>调试</span>
|
||||
</div>
|
||||
<div id="think_page_trace_tab_cont">
|
||||
<div>
|
||||
<ol>
|
||||
<li>请求信息 : 2026-01-15 10:16:13 HTTP/1.1 GET : http://localhost:8000/admin</li><li>运行时间 : 0.016702s [ 吞吐率:59.87req/s ] 内存消耗:2,516.36kb 文件加载:112</li><li>缓存信息 : 0 reads,0 writes</li><li>会话信息 : SESSION_ID=6892e22bca2caa199cd7b85e5525b388</li> </ol>
|
||||
</div>
|
||||
<div>
|
||||
<ol>
|
||||
<li>E:\Demos\DemoCompany\PHP\official\tp\public\router.php ( 0.78 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\public\index.php ( 0.82 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\autoload.php ( 0.73 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\composer\autoload_real.php ( 1.63 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\composer\platform_check.php ( 0.90 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\composer\ClassLoader.php ( 15.99 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\composer\autoload_static.php ( 4.83 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\topthink\think-helper\src\helper.php ( 8.34 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\topthink\think-validate\src\helper.php ( 2.19 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\topthink\think-orm\src\helper.php ( 1.47 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\topthink\think-orm\stubs\load_stubs.php ( 0.16 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\topthink\framework\src\think\Exception.php ( 1.69 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\topthink\think-container\src\Facade.php ( 2.71 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\symfony\deprecation-contracts\function.php ( 0.99 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\symfony\polyfill-mbstring\bootstrap.php ( 8.26 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\symfony\polyfill-mbstring\bootstrap80.php ( 9.78 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\symfony\var-dumper\Resources\functions\dump.php ( 1.49 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\topthink\think-dumper\src\helper.php ( 0.18 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\symfony\var-dumper\VarDumper.php ( 4.30 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\topthink\framework\src\think\App.php ( 15.30 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\topthink\think-container\src\Container.php ( 15.76 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\psr\container\src\ContainerInterface.php ( 1.02 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\topthink\framework\src\think\Http.php ( 6.04 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\topthink\think-helper\src\helper\Str.php ( 7.29 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\topthink\framework\src\think\Env.php ( 4.68 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\topthink\framework\src\helper.php ( 18.78 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\topthink\framework\src\think\Config.php ( 5.54 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\config\app.php ( 1.21 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\config\cache.php ( 0.78 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\config\console.php ( 0.23 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\config\cookie.php ( 0.56 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\config\database.php ( 2.13 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\topthink\framework\src\think\facade\Env.php ( 1.67 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\config\filesystem.php ( 0.61 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\config\lang.php ( 0.91 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\config\log.php ( 1.35 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\config\middleware.php ( 0.29 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\config\route.php ( 1.68 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\config\session.php ( 0.57 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\config\trace.php ( 0.34 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\config\view.php ( 0.82 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\topthink\framework\src\think\Lang.php ( 7.35 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\topthink\framework\src\lang\zh-cn.php ( 13.70 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\topthink\framework\src\think\Event.php ( 7.67 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\topthink\framework\src\think\initializer\Error.php ( 3.31 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\topthink\framework\src\think\initializer\RegisterService.php ( 1.33 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\services.php ( 0.18 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\topthink\framework\src\think\service\PaginatorService.php ( 1.52 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\topthink\framework\src\think\Service.php ( 1.64 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\topthink\framework\src\think\service\ValidateService.php ( 0.99 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\topthink\framework\src\think\service\ModelService.php ( 2.04 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tp\vendor\topthink\think-multi-app\src\Service.php ( 1.08 KB )</li><li>E:\Demos\DemoCompany\PHP\official\tLine truncated
|
||||
</div>
|
||||
<div>
|
||||
<ol>
|
||||
</ol>
|
||||
</div>
|
||||
<div>
|
||||
<ol>
|
||||
</ol>
|
||||
</div>
|
||||
<div>
|
||||
<ol>
|
||||
</ol>
|
||||
</div>
|
||||
<div>
|
||||
<ol>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="think_page_trace_close">
|
||||
<img src="data:image/gif;base64,R0lGODlhDwAPAJEAAAAAAAMDA////wAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MUQxMjc1MUJCQUJDMTFFMTk0OUVGRjc3QzU4RURFNkEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MUQxMjc1MUNCQUJDMTFFMTk0OUVGRjc3QzU4RURFNkEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxRDEyNzUxOUJBQkMxMUUxOTQ5RUZGNzdDNThFREU2QSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxRDEyNzUxQUJBQkMxMUUxOTQ5RUZGNzdDNThFREU2QSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAAAAAAALAAAAAAPAA8AAAIdjI6JZqotoJPR1fnsgRR3C2jZl3Ai9aWZZooV+RQAOw==" />
|
||||
</div>
|
||||
</div>
|
||||
<div id="think_page_trace_open">
|
||||
<div>0.019183s </div>
|
||||
<img width="30" style="" title="ShowPageTrace" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjVERDVENkZGQjkyNDExRTE5REY3RDQ5RTQ2RTRDQUJCIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjVERDVENzAwQjkyNDExRTE5REY3RDQ5RTQ2RTRDQUJCIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NURENUQ2RkRCOTI0MTFFMTlERjdENDlFNDZFNENBQkIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NURENUQ2RkVCOTI0MTFFMTlERjdENDlFNDZFNENBQkIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5fx6IRAAAMCElEQVR42sxae3BU1Rk/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 truncated
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
(function(){
|
||||
var tab_tit = document.getElementById('think_page_trace_tab_tit').getElementsByTagName('span');
|
||||
var tab_cont = document.getElementById('think_page_trace_tab_cont').getElementsByTagName('div');
|
||||
var open = document.getElementById('think_page_trace_open');
|
||||
var close = document.getElementById('think_page_trace_close').children[0];
|
||||
var trace = document.getElementById('think_page_trace_tab');
|
||||
var cookie = document.cookie.match(/thinkphp_show_page_trace=(\d\|\d)/);
|
||||
var history = (cookie && typeof cookie[1] != 'undefined' && cookie[1].split('|')) || [0,0];
|
||||
open.onclick = function(){
|
||||
trace.style.display = 'block';
|
||||
this.style.display = 'none';
|
||||
close.parentNode.style.display = 'block';
|
||||
history[0] = 1;
|
||||
document.cookie = 'thinkphp_show_page_trace='+history.join('|')
|
||||
}
|
||||
close.onclick = function(){
|
||||
trace.style.display = 'none';
|
||||
this.parentNode.style.display = 'none';
|
||||
open.style.display = 'block';
|
||||
history[0] = 0;
|
||||
document.cookie = 'thinkphp_show_page_trace='+history.join('|')
|
||||
}
|
||||
for(var i = 0; i < tab_tit.length; i++){
|
||||
tab_tit[i].onclick = (function(i){
|
||||
return function(){
|
||||
for(var j = 0; j < tab_cont.length; j++){
|
||||
tab_cont[j].style.display = 'none';
|
||||
tab_tit[j].style.color = '#999';
|
||||
}
|
||||
tab_cont[i].style.display = 'block';
|
||||
tab_tit[i].style.color = '#000';
|
||||
history[1] = i;
|
||||
document.cookie = 'thinkphp_show_page_trace='+history.join('|')
|
||||
}
|
||||
})(i)
|
||||
}
|
||||
parseInt(history[0]) && open.click();
|
||||
tab_tit[history[1]].click();
|
||||
})();
|
||||
</script>
|
||||
|
||||
Reference in new issue
Block a user