diff --git a/app/admin/controller/Article.php b/app/admin/controller/ArticlesController.php
similarity index 86%
rename from app/admin/controller/Article.php
rename to app/admin/controller/ArticlesController.php
index f6c1053..bcdee73 100644
--- a/app/admin/controller/Article.php
+++ b/app/admin/controller/ArticlesController.php
@@ -11,7 +11,7 @@ use think\facade\Request;
use app\admin\controller\Log;
use app\admin\controller\BaseController;
-class Article extends BaseController
+class ArticlesController extends BaseController
{
/**
* 获取控制器名称
@@ -428,16 +428,64 @@ class Article extends BaseController
//统计文章数量
public function counts() {
- $total = Articles::where('delete_time', null)
- ->where('status', '<>', 3)
- ->count();
+ try {
+ // 获取文章总数
+ $total = Articles::where('delete_time', null)
+ ->where('status', '<>', 3)
+ ->count();
+
+ // 获取今日新增文章数
+ $today = strtotime(date('Y-m-d'));
+ $todayNew = Articles::where('delete_time', null)
+ ->where('status', '<>', 3)
+ ->where('create_time', '>=', $today)
+ ->count();
+
+ // 获取最近7天的文章数据
+ $dates = [];
+ $counts = [];
+ $totalCounts = []; // 存储每天的总文章数
+ $totalSoFar = 0; // 用于累计总文章数
- return json([
- 'code' => 0,
- 'msg' => '获取成功',
- 'data' => [
- 'total' => $total
- ]
- ]);
+ for ($i = 6; $i >= 0; $i--) {
+ $date = date('Y-m-d', strtotime("-$i days"));
+ $start = strtotime($date);
+ $end = $start + 86400;
+
+ // 获取当天新增文章数
+ $count = Articles::where('delete_time', null)
+ ->where('status', '<>', 3)
+ ->where('create_time', '>=', $start)
+ ->where('create_time', '<', $end)
+ ->count();
+
+ // 获取截至当天的总文章数
+ $totalCount = Articles::where('delete_time', null)
+ ->where('status', '<>', 3)
+ ->where('create_time', '<', $end)
+ ->count();
+
+ $dates[] = $date;
+ $counts[] = $count;
+ $totalCounts[] = $totalCount;
+ }
+
+ return json([
+ 'code' => 0,
+ 'msg' => '获取成功',
+ 'data' => [
+ 'total' => $total,
+ 'todayNew' => $todayNew,
+ 'dates' => $dates,
+ 'counts' => $counts,
+ 'totalCounts' => $totalCounts
+ ]
+ ]);
+ } catch (\Exception $e) {
+ return json([
+ 'code' => 1,
+ 'msg' => '获取失败:' . $e->getMessage()
+ ]);
+ }
}
}
\ No newline at end of file
diff --git a/app/admin/controller/Index.php b/app/admin/controller/IndexController.php
similarity index 60%
rename from app/admin/controller/Index.php
rename to app/admin/controller/IndexController.php
index 4f29bb4..1e4656f 100644
--- a/app/admin/controller/Index.php
+++ b/app/admin/controller/IndexController.php
@@ -4,18 +4,25 @@
*/
namespace app\admin\controller;
use app\admin\controller\Base;
+use app\admin\model\DailyStats;
+use app\admin\model\Log\LogsOperation;
+use app\index\model\Attachments;
use think\facade\Db;
use think\facade\View;
use think\facade\Env;
use think\facade\Config;
+use app\admin\controller\Log;
-class Index extends Base{
+use app\admin\model\AdminUserGroup;
+use app\admin\model\AdminSysMenu;
+
+class IndexController extends Base{
# 首页
public function index(){
$menus = [];
$menu = [];
$where = ['group_id'=>$this->aUser['group_id']];
- $role = Db::name('admin_user_group')->where($where)->find();
+ $role = AdminUserGroup::where($where)->find();
if($role){
$role['rights'] = (isset($role['rights']) && $role['rights']) ? json_decode($role['rights'],true) : [];
}
@@ -25,7 +32,7 @@ class Index extends Base{
['status','=',1]
];
// 获取所有菜单
- $menus = Db::name('admin_sys_menu')->order('type,sort desc')->where($where)->select()->toArray();
+ $menus = AdminSysMenu::order('type,sort desc')->where($where)->select()->toArray();
// 构建树形结构菜单
$menuTree = [];
@@ -61,118 +68,168 @@ class Index extends Base{
}
# 欢迎页面
public function welcome(){
- // 获取今日统计数据
- $today = date('Y-m-d');
- $todayStats = Db::name('daily_stats')
- ->where('date', $today)
- ->find();
+ try {
+ // 获取最近7天的日期
+ $dates = [];
+ for ($i = 6; $i >= 0; $i--) {
+ $dates[] = date('Y-m-d', strtotime("-$i day"));
+ }
- // 获取最近7天的访问趋势
- $last7Days = Db::name('daily_stats')
- ->where('date', '>=', date('Y-m-d', strtotime('-7 days')))
- ->where('date', '<=', $today)
- ->order('date', 'asc')
- ->select()
- ->toArray();
+ // 初始化数据数组
+ $visitData = [];
+ $userData = [];
+ $resourceData = [];
+ $articleData = [];
- // 获取用户增长趋势
- $userGrowth = Db::name('daily_stats')
- ->where('date', '>=', date('Y-m-d', strtotime('-30 days')))
- ->where('date', '<=', $today)
- ->field('date, new_users, total_users')
- ->order('date', 'asc')
- ->select()
- ->toArray();
+ // 直接查询每天的数据
+ foreach ($dates as $date) {
+ $dayStats = Db::name('daily_stats')
+ ->where('date', $date)
+ ->find();
- // 获取资源下载统计
- $resourceStats = Db::name('daily_stats')
- ->where('date', '>=', date('Y-m-d', strtotime('-7 days')))
- ->where('date', '<=', $today)
- ->field('date, daily_resources, resource_downloads')
- ->order('date', 'asc')
- ->select()
- ->toArray();
+ // 访问数据
+ $visitData[] = [
+ 'date' => $date,
+ 'visits' => $dayStats ? intval($dayStats['daily_visits']) : 0,
+ 'uv' => $dayStats ? intval($dayStats['unique_visitors']) : 0
+ ];
- // 获取文章访问统计
- $articleStats = Db::name('daily_stats')
- ->where('date', '>=', date('Y-m-d', strtotime('-7 days')))
- ->where('date', '<=', $today)
- ->field('date, daily_articles, article_views')
- ->order('date', 'asc')
- ->select()
- ->toArray();
+ // 用户数据
+ $userData[] = [
+ 'date' => $date,
+ 'total' => $dayStats ? intval($dayStats['total_users']) : 0,
+ 'new' => $dayStats ? intval($dayStats['new_users']) : 0
+ ];
- // 获取最近的活动记录
- $recentActivities = $this->getRecentActivities();
+ // 资源数据
+ $resourceData[] = [
+ 'date' => $date,
+ 'total' => $dayStats ? intval($dayStats['total_resources']) : 0,
+ 'new' => $dayStats ? intval($dayStats['daily_resources']) : 0,
+ 'downloads' => $dayStats ? intval($dayStats['resource_downloads']) : 0
+ ];
- // 准备图表数据
- $chartData = [
- 'visitTrend' => $this->formatVisitTrendData($last7Days),
- 'userGrowth' => $this->formatUserGrowthData($userGrowth),
- 'resourceStats' => $this->formatResourceStatsData($resourceStats),
- 'articleStats' => $this->formatArticleStatsData($articleStats)
- ];
+ // 文章数据
+ $articleData[] = [
+ 'date' => $date,
+ 'total' => $dayStats ? intval($dayStats['total_articles']) : 0,
+ 'new' => $dayStats ? intval($dayStats['daily_articles']) : 0,
+ 'views' => $dayStats ? intval($dayStats['article_views']) : 0
+ ];
+ }
- // 准备统计数据
- $stats = [
- 'total_users' => $todayStats['total_users'] ?? 0,
- 'daily_visits' => $todayStats['daily_visits'] ?? 0,
- 'total_articles' => $todayStats['total_articles'] ?? 0,
- 'total_resources' => $todayStats['total_resources'] ?? 0,
- ];
+ // 获取今日统计数据
+ $today = date('Y-m-d');
+ $todayStats = Db::name('daily_stats')
+ ->where('date', $today)
+ ->find();
- return View::fetch('', [
- 'stats' => $stats,
- 'chartData' => $chartData,
- 'recentActivities' => $recentActivities
- ]);
+ // 获取最近的操作日志
+ $recentActivities = Db::name('logs_operation')
+ ->field('operation_time, module, operation')
+ ->order('operation_time DESC')
+ ->limit(5)
+ ->select()
+ ->each(function($item) {
+ $item['content'] = date('Y年m月d日 H:i:s', strtotime($item['operation_time'])) . ' 在 ' .
+ ($item['module'] ?: '未知模块') . ' ' .
+ ($item['operation'] ?: '未知操作');
+ $item['icon'] = $this->getActivityIcon($item['module'] ?: '其他');
+ return $item;
+ });
+
+ // 处理图表数据
+ $chartData = [
+ 'visitTrend' => [
+ 'dates' => array_map(function($item) { return date('m-d', strtotime($item['date'])); }, $visitData),
+ 'visits' => array_column($visitData, 'visits'),
+ 'uvs' => array_column($visitData, 'uv')
+ ],
+ 'userGrowth' => [
+ 'dates' => array_map(function($item) { return date('m-d', strtotime($item['date'])); }, $userData),
+ 'newUsers' => array_column($userData, 'new'),
+ 'totalUsers' => array_column($userData, 'total')
+ ],
+ 'resourceStats' => [
+ 'dates' => array_map(function($item) { return date('m-d', strtotime($item['date'])); }, $resourceData),
+ 'newResources' => array_column($resourceData, 'new'),
+ 'totalResources' => array_column($resourceData, 'total'),
+ 'downloads' => array_column($resourceData, 'downloads')
+ ],
+ 'articleStats' => [
+ 'dates' => array_map(function($item) { return date('m-d', strtotime($item['date'])); }, $articleData),
+ 'newArticles' => array_column($articleData, 'new'),
+ 'totalArticles' => array_column($articleData, 'total'),
+ 'views' => array_column($articleData, 'views')
+ ]
+ ];
+
+ // 传递给视图
+ View::assign([
+ 'todayStats' => $todayStats ?: [
+ 'total_users' => 0,
+ 'new_users' => 0,
+ 'total_visits' => 0,
+ 'daily_visits' => 0,
+ 'unique_visitors' => 0,
+ 'total_articles' => 0,
+ 'daily_articles' => 0,
+ 'article_views' => 0,
+ 'total_resources' => 0,
+ 'daily_resources' => 0,
+ 'resource_downloads' => 0
+ ],
+ 'recentActivities' => $recentActivities,
+ 'chartData' => $chartData
+ ]);
+
+ return View::fetch();
+ } catch (\Exception $e) {
+ // 记录错误日志
+ \think\facade\Log::error('获取统计数据失败:' . $e->getMessage());
+ // 返回空数据
+ View::assign([
+ 'todayStats' => [
+ 'total_users' => 0,
+ 'new_users' => 0,
+ 'total_visits' => 0,
+ 'daily_visits' => 0,
+ 'unique_visitors' => 0,
+ 'total_articles' => 0,
+ 'daily_articles' => 0,
+ 'article_views' => 0,
+ 'total_resources' => 0,
+ 'daily_resources' => 0,
+ 'resource_downloads' => 0
+ ],
+ 'recentActivities' => [],
+ 'chartData' => [
+ 'visitTrend' => ['dates' => [], 'visits' => [], 'uvs' => []],
+ 'userGrowth' => ['dates' => [], 'newUsers' => [], 'totalUsers' => []],
+ 'resourceStats' => ['dates' => [], 'newResources' => [], 'totalResources' => [], 'downloads' => []],
+ 'articleStats' => ['dates' => [], 'newArticles' => [], 'totalArticles' => [], 'views' => []]
+ ]
+ ]);
+ return View::fetch();
+ }
}
/**
- * 获取最近的活动记录
+ * 根据操作类型获取对应的图标
*/
- private function getRecentActivities()
+ private function getActivityIcon($type)
{
- $today = date('Y-m-d');
- $activities = [];
-
- // 获取今日新用户
- $newUsers = Db::name('daily_stats')
- ->where('date', $today)
- ->value('new_users');
- if ($newUsers > 0) {
- $activities[] = [
- 'icon' => '👥',
- 'title' => '新增用户 ' . $newUsers . ' 人',
- 'time' => '今日'
- ];
- }
-
- // 获取今日文章
- $newArticles = Db::name('daily_stats')
- ->where('date', $today)
- ->value('daily_articles');
- if ($newArticles > 0) {
- $activities[] = [
- 'icon' => '📝',
- 'title' => '发布文章 ' . $newArticles . ' 篇',
- 'time' => '今日'
- ];
- }
-
- // 获取今日资源
- $newResources = Db::name('daily_stats')
- ->where('date', $today)
- ->value('daily_resources');
- if ($newResources > 0) {
- $activities[] = [
- 'icon' => '📦',
- 'title' => '上传资源 ' . $newResources . ' 个',
- 'time' => '今日'
- ];
- }
-
- return $activities;
+ $icons = [
+ '用户管理' => '👥',
+ '文章管理' => '📝',
+ '资源管理' => '📦',
+ '系统设置' => '⚙️',
+ '登录' => '🔑',
+ '退出' => '🚪',
+ '其他' => '📌'
+ ];
+
+ return $icons[$type] ?? '📌';
}
/**
@@ -280,7 +337,7 @@ class Index extends Base{
'create_time' => time(),
'update_time' => time()
];
- return Db::name('attachments')->insertGetId($data);
+ return Attachments::insertGetId($data);
}
# 图片上传
diff --git a/app/admin/controller/Log.php b/app/admin/controller/LogController.php
similarity index 99%
rename from app/admin/controller/Log.php
rename to app/admin/controller/LogController.php
index cf491fb..60c0c62 100644
--- a/app/admin/controller/Log.php
+++ b/app/admin/controller/LogController.php
@@ -9,7 +9,7 @@ use think\facade\Cookie;
use app\admin\model\Log\LogsLogin;
use app\admin\model\Log\LogsOperation;
-class Log extends Base
+class LogController extends Base
{
/**
* 登录日志列表
diff --git a/app/admin/controller/Login.php b/app/admin/controller/LoginController.php
similarity index 95%
rename from app/admin/controller/Login.php
rename to app/admin/controller/LoginController.php
index 472249b..b3ae2a6 100644
--- a/app/admin/controller/Login.php
+++ b/app/admin/controller/LoginController.php
@@ -13,10 +13,10 @@ use app\admin\model\YzAdminConfig;
use app\admin\model\AdminUser;
use app\admin\model\Log\LogsLogin;
-class Login
+class LoginController extends Base
{
- protected $app;
- protected $config;
+ public $app;
+ public $config;
public function __construct(App $app)
{
@@ -36,7 +36,7 @@ class Login
}
// 记录登录日志
- protected function recordLoginLog($username, $status, $reason = '')
+ public function recordLoginLog($username, $status, $reason = '')
{
$data = [
'username' => $username,
@@ -52,14 +52,14 @@ class Login
}
// 获取IP地址位置
- protected function getLocation($ip)
+ public function getLocation($ip)
{
// 这里可以接入IP地址库或第三方API
return '未知';
}
// 获取设备类型
- protected function getDeviceType()
+ public function getDeviceType()
{
$agent = Request::header('user-agent');
if (preg_match('/(iPhone|iPod|Android|ios|iPad|Mobile)/i', $agent)) {
diff --git a/app/admin/controller/Resources.php b/app/admin/controller/ResourcesController.php
similarity index 86%
rename from app/admin/controller/Resources.php
rename to app/admin/controller/ResourcesController.php
index ea0ad0f..a9daa8e 100644
--- a/app/admin/controller/Resources.php
+++ b/app/admin/controller/ResourcesController.php
@@ -12,7 +12,7 @@ use think\facade\Db;
use app\admin\controller\Log;
use think\App;
-class Resources extends BaseController
+class ResourcesController extends BaseController
{
// 资源列表
public function lists()
@@ -370,16 +370,64 @@ class Resources extends BaseController
//统计资源数量
public function counts()
{
- $total = Resource::where('delete_time', null)
- ->where('status', '<>', 3)
- ->count();
- return json([
- 'code' => 0,
- 'msg' => '获取成功',
- 'data' => [
- 'total' => $total
- ]
- ]);
+ try {
+ // 获取资源总数
+ $total = Resource::where('delete_time', null)
+ ->where('status', '<>', 3)
+ ->count();
+
+ // 获取今日新增资源数
+ $today = strtotime(date('Y-m-d'));
+ $todayNew = Resource::where('delete_time', null)
+ ->where('status', '<>', 3)
+ ->where('create_time', '>=', $today)
+ ->count();
+
+ // 获取最近7天的资源数据
+ $dates = [];
+ $counts = [];
+ $totalCounts = []; // 存储每天的总资源数
+
+ for ($i = 6; $i >= 0; $i--) {
+ $date = date('Y-m-d', strtotime("-$i days"));
+ $start = strtotime($date);
+ $end = $start + 86400;
+
+ // 获取当天新增资源数
+ $count = Resource::where('delete_time', null)
+ ->where('status', '<>', 3)
+ ->where('create_time', '>=', $start)
+ ->where('create_time', '<', $end)
+ ->count();
+
+ // 获取截至当天的总资源数
+ $totalCount = Resource::where('delete_time', null)
+ ->where('status', '<>', 3)
+ ->where('create_time', '<', $end)
+ ->count();
+
+ $dates[] = $date;
+ $counts[] = $count;
+ $totalCounts[] = $totalCount;
+ }
+
+ return json([
+ 'code' => 0,
+ 'msg' => '获取成功',
+ 'data' => [
+ 'total' => $total,
+ 'todayNew' => $todayNew,
+ 'dates' => $dates,
+ 'counts' => $counts,
+ 'totalCounts' => $totalCounts
+ ]
+ ]);
+ } catch (\Exception $e) {
+ return json([
+ 'code' => 1,
+ 'msg' => '获取失败:' . $e->getMessage()
+ ]);
+ }
}
// 构建树形结构
diff --git a/app/admin/controller/UsersController.php b/app/admin/controller/UsersController.php
new file mode 100644
index 0000000..7e8feb6
--- /dev/null
+++ b/app/admin/controller/UsersController.php
@@ -0,0 +1,81 @@
+where('status', 1)
+ ->count();
+
+ // 获取今日新增用户数
+ $today = strtotime(date('Y-m-d'));
+ $todayNew = Users::where('delete_time', 0)
+ ->where('status', 1)
+ ->where('create_time', '>=', $today)
+ ->count();
+
+ // 获取最近7天的用户数据
+ $dates = [];
+ $counts = [];
+ $totalCounts = []; // 存储每天的总用户数
+
+ for ($i = 6; $i >= 0; $i--) {
+ $date = date('Y-m-d', strtotime("-$i days"));
+ $start = strtotime($date);
+ $end = $start + 86400;
+
+ // 获取当天新增用户数
+ $count = Users::where('delete_time', 0)
+ ->where('status', 1)
+ ->where('create_time', '>=', $start)
+ ->where('create_time', '<', $end)
+ ->count();
+
+ // 获取截至当天的总用户数
+ $totalCount = Users::where('delete_time', 0)
+ ->where('status', 1)
+ ->where('create_time', '<', $end)
+ ->count();
+
+ $dates[] = $date;
+ $counts[] = $count;
+ $totalCounts[] = $totalCount;
+ }
+
+ return json([
+ 'code' => 0,
+ 'msg' => '获取成功',
+ 'data' => [
+ 'total' => $total,
+ 'todayNew' => $todayNew,
+ 'dates' => $dates,
+ 'counts' => $counts,
+ 'totalCounts' => $totalCounts
+ ]
+ ]);
+ } catch (\Exception $e) {
+ return json([
+ 'code' => 1,
+ 'msg' => '获取失败:' . $e->getMessage()
+ ]);
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/admin/controller/Yunzer.php b/app/admin/controller/YunzerController.php
similarity index 99%
rename from app/admin/controller/Yunzer.php
rename to app/admin/controller/YunzerController.php
index 08ace06..34dbf24 100644
--- a/app/admin/controller/Yunzer.php
+++ b/app/admin/controller/YunzerController.php
@@ -14,7 +14,7 @@ use app\admin\model\AdminUserGroup;
use app\admin\model\AdminConfig;
use app\admin\model\ZIconfont;
-class Yunzer extends Base{
+class YunzerController extends Base{
# 菜单列表
public function menuinfo(){
$lists = AdminSysMenu::where('parent_id', 0)->order('sort DESC,smid DESC')->select();
diff --git a/app/admin/controller/Yunzeradmin.php b/app/admin/controller/YunzeradminController.php
similarity index 99%
rename from app/admin/controller/Yunzeradmin.php
rename to app/admin/controller/YunzeradminController.php
index 1df2918..53431c2 100644
--- a/app/admin/controller/Yunzeradmin.php
+++ b/app/admin/controller/YunzeradminController.php
@@ -11,7 +11,7 @@ use app\admin\model\AdminUser;
use app\admin\model\Banner;
-class Yunzeradmin extends Base
+class YunzeradminController extends Base
{
// 角色列表
public function groupinfo()
diff --git a/app/admin/model/ApiKey.php b/app/admin/model/ApiKey.php
new file mode 100644
index 0000000..35a0f93
--- /dev/null
+++ b/app/admin/model/ApiKey.php
@@ -0,0 +1,8 @@
+顶级分类');
// 获取所有分类作为父级选项
$.ajax({
- url: '/admin/article/articlecate',
+ url: '/admin/articles/articlecate',
type: 'POST',
async: false,
success: function (res) {
@@ -472,7 +472,7 @@
// 监听表单提交
form.on('submit(saveCategory)', function (data) {
- var url = data.field.id ? '/admin/article/cateedit' : '/admin/article/cateadd';
+ var url = data.field.id ? '/admin/articles/cateedit' : '/admin/articles/cateadd';
$.post(url, data.field, function (res) {
if (res.code === 0) {
layer.msg(res.msg, { icon: 1 });
@@ -490,7 +490,7 @@
if (!id) return;
layer.confirm('确定要删除该分类吗?', function (index) {
- $.post('/admin/article/catedel', { id: id }, function (res) {
+ $.post('/admin/articles/catedel', { id: id }, function (res) {
if (res.code === 0) {
layer.msg(res.msg, { icon: 1 });
that.initCategoryList();
diff --git a/app/admin/view/article/articlelist.php b/app/admin/view/articles/articlelist.php
similarity index 96%
rename from app/admin/view/article/articlelist.php
rename to app/admin/view/articles/articlelist.php
index 88cb3da..4477daa 100644
--- a/app/admin/view/article/articlelist.php
+++ b/app/admin/view/articles/articlelist.php
@@ -87,7 +87,7 @@
// 初始化表格
table.render({
elem: '#articleTable',
- url: '/admin/article/articlelist',
+ url: '/admin/articles/articlelist',
method: 'post',
cols: [[
{ field: 'id', title: 'ID', align: 'center', width: 80 },
@@ -174,18 +174,18 @@
}
function add() {
- window.location.href = '/admin/article/add';
+ window.location.href = '/admin/articles/add';
}
function edit(id) {
- window.location.href = '/admin/article/edit?id=' + id;
+ window.location.href = '/admin/articles/edit?id=' + id;
}
function del(id) {
layer.confirm('确定要删除该文章吗?', {
btn: ['确定', '取消']
}, function () {
- $.post('/admin/article/delete', { id: id }, function (res) {
+ $.post('/admin/articles/delete', { id: id }, function (res) {
if (res.code == 0) {
layer.msg(res.msg, { icon: 1 });
setTimeout(function () {
diff --git a/app/admin/view/article/cateadd.php b/app/admin/view/articles/cateadd.php
similarity index 100%
rename from app/admin/view/article/cateadd.php
rename to app/admin/view/articles/cateadd.php
diff --git a/app/admin/view/article/cateedit.php b/app/admin/view/articles/cateedit.php
similarity index 100%
rename from app/admin/view/article/cateedit.php
rename to app/admin/view/articles/cateedit.php
diff --git a/app/admin/view/article/edit.php b/app/admin/view/articles/edit.php
similarity index 100%
rename from app/admin/view/article/edit.php
rename to app/admin/view/articles/edit.php
diff --git a/app/admin/view/index/welcome.php b/app/admin/view/index/welcome.php
index 2fd19bf..5ac53a4 100644
--- a/app/admin/view/index/welcome.php
+++ b/app/admin/view/index/welcome.php
@@ -161,8 +161,7 @@
}
.activity-title {
font-weight: 500;
- color: #1e293b;
- margin-bottom: 4px;
+ color: #9b9b9b;
}
.activity-time {
font-size: 12px;
@@ -212,22 +211,22 @@
用户总数
-
{$stats.total_users|number_format}
+
{$todayStats.total_users|number_format}
👥
今日访问
-
{$stats.daily_visits|number_format}
+
{$todayStats.daily_visits|number_format}
📊
文章总数
-
{$stats.total_articles|number_format}
+
{$todayStats.total_articles|number_format}
📝
资源总数
-
{$stats.total_resources|number_format}
+
{$todayStats.total_resources|number_format}
📦
@@ -258,10 +257,9 @@
{volist name="recentActivities" id="activity"}
-
{$activity.icon}
+
{$activity.icon|default='📌'}
-
{$activity.title}
-
{$activity.time}
+
{$activity.content}
{/volist}
@@ -314,6 +312,42 @@ function updateTime() {
document.getElementById('current-time').innerHTML = timeString;
}
+// 获取用户统计数据
+function getUserCounts() {
+ fetch('{:url("users/counts")}')
+ .then(response => response.json())
+ .then(res => {
+ console.log('用户统计接口返回数据:', res);
+ if (res.code === 0 && res.data) {
+ // 更新用户总数
+ document.querySelector('.stat-card:nth-child(1) .stat-value').textContent = res.data.total.toLocaleString();
+
+ // 更新用户增长图表
+ if (window.userChart) {
+ window.userChart.setOption({
+ xAxis: {
+ data: res.data.dates
+ },
+ series: [{
+ name: '新增用户',
+ data: res.data.counts
+ }, {
+ name: '总用户数',
+ data: res.data.totalCounts
+ }]
+ });
+ }
+ } else {
+ console.warn('用户统计接口返回异常:', res);
+ document.querySelector('.stat-card:nth-child(1) .stat-value').textContent = '0';
+ }
+ })
+ .catch(error => {
+ console.error('获取用户统计失败:', error);
+ document.querySelector('.stat-card:nth-child(1) .stat-value').textContent = '0';
+ });
+}
+
// 获取文章统计数据
function getArticleCounts() {
fetch('{:url("articles/counts")}')
@@ -323,12 +357,30 @@ function getArticleCounts() {
if (res.code === 0 && res.data) {
// 更新文章总数
document.querySelector('.stat-card:nth-child(3) .stat-value').textContent = res.data.total.toLocaleString();
+
+ // 更新文章统计图表
+ if (window.articleChart) {
+ window.articleChart.setOption({
+ xAxis: {
+ data: res.data.dates
+ },
+ series: [{
+ name: '新增文章',
+ data: res.data.counts
+ }, {
+ name: '总文章数',
+ data: res.data.totalCounts
+ }]
+ });
+ }
} else {
console.warn('文章统计接口返回异常:', res);
+ document.querySelector('.stat-card:nth-child(3) .stat-value').textContent = '0';
}
})
.catch(error => {
console.error('获取文章统计失败:', error);
+ document.querySelector('.stat-card:nth-child(3) .stat-value').textContent = '0';
});
}
@@ -341,12 +393,30 @@ function getResourcesCounts() {
if (res.code === 0 && res.data) {
// 更新资源总数
document.querySelector('.stat-card:nth-child(4) .stat-value').textContent = res.data.total.toLocaleString();
+
+ // 更新资源统计图表
+ if (window.resourceChart) {
+ window.resourceChart.setOption({
+ xAxis: {
+ data: res.data.dates
+ },
+ series: [{
+ name: '新增资源',
+ data: res.data.counts
+ }, {
+ name: '总资源数',
+ data: res.data.totalCounts
+ }]
+ });
+ }
} else {
console.warn('资源统计接口返回异常:', res);
+ document.querySelector('.stat-card:nth-child(4) .stat-value').textContent = '0';
}
})
.catch(error => {
console.error('获取资源统计失败:', error);
+ document.querySelector('.stat-card:nth-child(4) .stat-value').textContent = '0';
});
}
@@ -355,6 +425,7 @@ setInterval(updateTime, 1000);
// 页面加载完成后获取统计数据
document.addEventListener('DOMContentLoaded', function() {
+ getUserCounts();
getArticleCounts();
getResourcesCounts();
});
@@ -476,6 +547,9 @@ function initUserGrowth() {
data: {$chartData.userGrowth.totalUsers|json_encode},
itemStyle: {
color: '#10b981'
+ },
+ lineStyle: {
+ width: 3
}
}
]
@@ -497,7 +571,7 @@ function initResourceStats() {
}
},
legend: {
- data: ['新增资源', '下载量']
+ data: ['新增资源', '总资源数', '下载量']
},
grid: {
left: '3%',
@@ -517,18 +591,33 @@ function initResourceStats() {
{
name: '新增资源',
type: 'bar',
- data: {$chartData.resourceStats.resources|json_encode},
+ data: {$chartData.resourceStats.newResources|json_encode},
itemStyle: {
color: '#3881fd'
}
},
+ {
+ name: '总资源数',
+ type: 'line',
+ smooth: true,
+ data: {$chartData.resourceStats.totalResources|json_encode},
+ itemStyle: {
+ color: '#10b981'
+ },
+ lineStyle: {
+ width: 3
+ }
+ },
{
name: '下载量',
type: 'line',
smooth: true,
data: {$chartData.resourceStats.downloads|json_encode},
itemStyle: {
- color: '#10b981'
+ color: '#f59e0b'
+ },
+ lineStyle: {
+ width: 3
}
}
]
@@ -550,7 +639,7 @@ function initArticleStats() {
}
},
legend: {
- data: ['新增文章', '访问量']
+ data: ['新增文章', '总文章数', '浏览量']
},
grid: {
left: '3%',
@@ -570,18 +659,33 @@ function initArticleStats() {
{
name: '新增文章',
type: 'bar',
- data: {$chartData.articleStats.articles|json_encode},
+ data: {$chartData.articleStats.newArticles|json_encode},
itemStyle: {
color: '#3881fd'
}
},
{
- name: '访问量',
+ name: '总文章数',
+ type: 'line',
+ smooth: true,
+ data: {$chartData.articleStats.totalArticles|json_encode},
+ itemStyle: {
+ color: '#10b981'
+ },
+ lineStyle: {
+ width: 3
+ }
+ },
+ {
+ name: '浏览量',
type: 'line',
smooth: true,
data: {$chartData.articleStats.views|json_encode},
itemStyle: {
- color: '#10b981'
+ color: '#f59e0b'
+ },
+ lineStyle: {
+ width: 3
}
}
]
@@ -591,18 +695,32 @@ function initArticleStats() {
// 初始化所有图表
document.addEventListener('DOMContentLoaded', function() {
- initVisitTrend();
- initUserGrowth();
- initResourceStats();
- initArticleStats();
-
- // 监听窗口大小变化,重绘图表
- window.addEventListener('resize', function() {
- var charts = document.querySelectorAll('.chart-container');
- charts.forEach(function(chart) {
- echarts.getInstanceByDom(chart)?.resize();
+ // 确保ECharts已加载
+ if (typeof echarts === 'undefined') {
+ console.error('ECharts未加载');
+ return;
+ }
+
+ // 初始化图表
+ try {
+ initVisitTrend();
+ initUserGrowth();
+ initResourceStats();
+ initArticleStats();
+
+ // 监听窗口大小变化,重绘图表
+ window.addEventListener('resize', function() {
+ var charts = document.querySelectorAll('.chart-container');
+ charts.forEach(function(chart) {
+ var instance = echarts.getInstanceByDom(chart);
+ if (instance) {
+ instance.resize();
+ }
+ });
});
- });
+ } catch (error) {
+ console.error('初始化图表失败:', error);
+ }
});
diff --git a/app/index/controller/BaseController.php b/app/index/controller/BaseController.php
index 60e5846..96ee0e7 100644
--- a/app/index/controller/BaseController.php
+++ b/app/index/controller/BaseController.php
@@ -6,7 +6,8 @@ namespace app\index\controller;
use think\App;
use think\facade\View;
use think\facade\Request;
-use think\facade\Config;
+use think\facade\Db;
+use app\service\VisitStatsService;
/**
* 前台控制器基础类
@@ -18,6 +19,7 @@ abstract class BaseController
* @var \think\Request
*/
protected $request;
+ protected $visitStats;
/**
* 应用实例
@@ -34,6 +36,7 @@ abstract class BaseController
{
$this->app = $app;
$this->request = $this->app->request;
+ $this->visitStats = new VisitStatsService();
// 控制器初始化
$this->initialize();
@@ -44,20 +47,25 @@ abstract class BaseController
*/
protected function initialize()
{
+ // 记录访问
+ $this->visitStats->recordVisit($this->getControllerName());
+
+ // 获取配置
+ $configList = Db::table('yz_admin_config')
+ ->where('config_status', 1)
+ ->order('config_sort DESC')
+ ->select()
+ ->toArray();
+
+ // 将配置数据转换为键值对形式
+ $config = [];
+ foreach ($configList as $item) {
+ $config[$item['config_name']] = $item['config_value'];
+ }
+
// 设置通用变量
View::assign([
- 'site_name' => '网站名称',
- 'site_description' => '网站描述',
- 'site_keywords' => '网站关键词',
- 'config' => [
- 'admin_name' => Config::get('site.name', '云泽科技'),
- 'admin_phone' => Config::get('site.phone', '400-123-4567'),
- 'admin_email' => Config::get('site.email', 'admin@example.com'),
- 'admin_wechat' => Config::get('site.wechat_qrcode', '/static/images/wechat_qrcode.jpg'),
- 'logo' => Config::get('site.logo', '/static/images/logo.png'),
- 'logo1' => Config::get('site.logo1', '/static/images/logo1.png'),
- 'admin_route' => Config::get('site.admin_route', '/admin/')
- ]
+ 'config' => $config
]);
}
diff --git a/app/service/VisitStatsService.php b/app/service/VisitStatsService.php
new file mode 100644
index 0000000..599aca4
--- /dev/null
+++ b/app/service/VisitStatsService.php
@@ -0,0 +1,191 @@
+redis = Cache::store('redis')->handler();
+ } catch (\Exception $e) {
+ // Redis连接失败,使用文件缓存
+ $this->redis = Cache::store('file')->handler();
+ Log::error('Redis连接失败,已切换到文件缓存:' . $e->getMessage());
+ }
+ }
+
+ /**
+ * 记录访问并更新统计数据
+ */
+ public function recordVisit(string $page = 'home', string $userId = null): array
+ {
+ try {
+ $date = date('Y-m-d');
+ $hour = date('H');
+ $userId = $userId ?? Request::ip();
+
+ // 使用管道提高性能
+ $pipe = $this->redis->multi();
+
+ // 总访问量(PV)
+ $pipe->incr($this->prefix.'total_visits');
+
+ // 每日访问量
+ $pipe->incr($this->prefix.'daily:'.$date);
+
+ // 页面统计
+ $pipe->zIncrBy($this->prefix.'page_views', 1, $page);
+
+ // UV统计(使用HyperLogLog节省内存)
+ $pipe->pfAdd($this->prefix.'uv:'.$date, [$userId]);
+
+ // 时段统计
+ $pipe->hIncrBy($this->prefix.'hourly:'.$date, $hour, 1);
+
+ // 执行所有命令
+ $result = $pipe->exec();
+
+ // 更新数据库统计
+ $this->updateDailyStats($date, [
+ 'total_visits' => $result[0],
+ 'daily_visits' => $result[1],
+ 'unique_visitors' => $this->getUniqueVisitors($date)
+ ]);
+
+ return [
+ 'total' => $result[0],
+ 'daily' => $result[1],
+ 'page' => $result[2],
+ 'uv' => $result[3],
+ 'hourly'=> $result[4]
+ ];
+ } catch (\Exception $e) {
+ Log::error('访问统计失败:' . $e->getMessage());
+ return [
+ 'total' => 0,
+ 'daily' => 0,
+ 'page' => 0,
+ 'uv' => 0,
+ 'hourly'=> 0
+ ];
+ }
+ }
+
+ /**
+ * 更新每日统计数据
+ */
+ protected function updateDailyStats(string $date, array $stats)
+ {
+ try {
+ // 获取其他统计数据
+ $otherStats = [
+ 'total_users' => Db::name('users')->count(), // 移除 delete_time 条件
+ 'new_users' => Db::name('users')->whereDay('create_time', $date)->count(),
+ 'total_articles' => Db::name('articles')->where('delete_time', null)->count(),
+ 'daily_articles' => Db::name('articles')->whereDay('create_time', $date)->count(),
+ 'article_views' => Db::name('articles')->whereDay('update_time', $date)->sum('views'),
+ 'total_resources' => Db::name('resources')->where('delete_time', null)->count(),
+ 'daily_resources' => Db::name('resources')->whereDay('create_time', $date)->count(),
+ 'resource_downloads' => Db::name('resources')->whereDay('update_time', $date)->sum('downloads')
+ ];
+
+ // 记录日志,方便调试
+ Log::info('统计数据:' . json_encode($otherStats, JSON_UNESCAPED_UNICODE));
+
+ // 合并统计数据
+ $stats = array_merge($stats, $otherStats);
+
+ // 检查记录是否存在
+ $exists = Db::name('daily_stats')->where('date', $date)->find();
+
+ if ($exists) {
+ // 更新已存在的记录
+ Db::name('daily_stats')->where('date', $date)->update([
+ 'total_users' => $stats['total_users'],
+ 'new_users' => $stats['new_users'],
+ 'total_visits' => $stats['total_visits'],
+ 'daily_visits' => $stats['daily_visits'],
+ 'unique_visitors' => $stats['unique_visitors'],
+ 'total_articles' => $stats['total_articles'],
+ 'daily_articles' => $stats['daily_articles'],
+ 'article_views' => $stats['article_views'],
+ 'total_resources' => $stats['total_resources'],
+ 'daily_resources' => $stats['daily_resources'],
+ 'resource_downloads' => $stats['resource_downloads']
+ ]);
+ } else {
+ // 插入新记录
+ Db::name('daily_stats')->insert([
+ 'date' => $date,
+ 'total_users' => $stats['total_users'],
+ 'new_users' => $stats['new_users'],
+ 'total_visits' => $stats['total_visits'],
+ 'daily_visits' => $stats['daily_visits'],
+ 'unique_visitors' => $stats['unique_visitors'],
+ 'total_articles' => $stats['total_articles'],
+ 'daily_articles' => $stats['daily_articles'],
+ 'article_views' => $stats['article_views'],
+ 'total_resources' => $stats['total_resources'],
+ 'daily_resources' => $stats['daily_resources'],
+ 'resource_downloads' => $stats['resource_downloads']
+ ]);
+ }
+ } catch (\Exception $e) {
+ Log::error('更新统计数据失败:' . $e->getMessage());
+ }
+ }
+
+ /**
+ * 获取总访问量
+ */
+ public function getTotalVisits(): int
+ {
+ try {
+ return (int)$this->redis->get($this->prefix.'total_visits');
+ } catch (\Exception $e) {
+ Log::error('获取总访问量失败:' . $e->getMessage());
+ return 0;
+ }
+ }
+
+ /**
+ * 获取当日访问量
+ */
+ public function getDailyVisits(string $date = null): int
+ {
+ try {
+ $date = $date ?? date('Y-m-d');
+ return (int)$this->redis->get($this->prefix.'daily:'.$date);
+ } catch (\Exception $e) {
+ Log::error('获取当日访问量失败:' . $e->getMessage());
+ return 0;
+ }
+ }
+
+ /**
+ * 获取独立访客数(UV)
+ */
+ public function getUniqueVisitors(string $date = null): int
+ {
+ try {
+ $date = $date ?? date('Y-m-d');
+ return $this->redis->pfCount($this->prefix.'uv:'.$date);
+ } catch (\Exception $e) {
+ Log::error('获取独立访客数失败:' . $e->getMessage());
+ return 0;
+ }
+ }
+}
+
\ No newline at end of file
diff --git a/config/cache.php b/config/cache.php
index a8d69d2..c181a42 100644
--- a/config/cache.php
+++ b/config/cache.php
@@ -14,9 +14,9 @@ return [
// 驱动方式
'type' => 'File',
// 缓存保存目录
- 'path' => '',
+ 'path' => runtime_path() . 'cache',
// 缓存前缀
- 'prefix' => '',
+ 'prefix' => 'cache_',
// 缓存有效期 0表示永久缓存
'expire' => 0,
// 缓存标签前缀
@@ -25,5 +25,23 @@ return [
'serialize' => [],
],
// 更多的缓存连接
+ 'redis' => [
+ // 驱动方式
+ 'type' => 'redis',
+ // 服务器地址
+ 'host' => env('redis.host', '127.0.0.1'),
+ // 端口
+ 'port' => env('redis.port', 6379),
+ // 密码
+ 'password' => env('redis.password', '920103'),
+ // 数据库索引
+ 'select' => env('redis.select', 0),
+ // 连接超时时间
+ 'timeout' => 0,
+ // 是否持久化连接
+ 'persistent' => false,
+ // 缓存前缀
+ 'prefix' => 'yz_:',
+ ],
],
];
diff --git a/public/static/images/logo.png b/public/static/images/logo.png
index ab69e49..41d0929 100644
Binary files a/public/static/images/logo.png and b/public/static/images/logo.png differ
diff --git a/public/static/images/logo1.png b/public/static/images/logo1.png
new file mode 100644
index 0000000..ab69e49
Binary files /dev/null and b/public/static/images/logo1.png differ
diff --git a/public/static/images/qrcode.jpg b/public/static/images/wechat_qrcode.jpg
similarity index 100%
rename from public/static/images/qrcode.jpg
rename to public/static/images/wechat_qrcode.jpg
diff --git a/runtime/admin/temp/02890b205219b043551566c44acd91e7.php b/runtime/admin/temp/02890b205219b043551566c44acd91e7.php
deleted file mode 100644
index 689dbe2..0000000
--- a/runtime/admin/temp/02890b205219b043551566c44acd91e7.php
+++ /dev/null
@@ -1,131 +0,0 @@
-
-
-
-
-
-
后台管理系统
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/03e4ab61ce303403afa76cd64a82b52f.php b/runtime/admin/temp/03e4ab61ce303403afa76cd64a82b52f.php
deleted file mode 100644
index bf53eec..0000000
--- a/runtime/admin/temp/03e4ab61ce303403afa76cd64a82b52f.php
+++ /dev/null
@@ -1,311 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/a4422e18098f908e0359a72e8b02a77c.php b/runtime/admin/temp/060aaf82e6a412e1d93b52eb2415c06f.php
similarity index 96%
rename from runtime/admin/temp/a4422e18098f908e0359a72e8b02a77c.php
rename to runtime/admin/temp/060aaf82e6a412e1d93b52eb2415c06f.php
index 1b750d6..4f5dad4 100644
--- a/runtime/admin/temp/a4422e18098f908e0359a72e8b02a77c.php
+++ b/runtime/admin/temp/060aaf82e6a412e1d93b52eb2415c06f.php
@@ -1,4 +1,4 @@
-
+
@@ -181,7 +181,7 @@
// 初始化表格
table.render({
elem: '#articleTable',
- url: '/admin/article/articlelist',
+ url: '/admin/articles/articlelist',
method: 'post',
cols: [[
{ field: 'id', title: 'ID', align: 'center', width: 80 },
@@ -268,18 +268,18 @@
}
function add() {
- window.location.href = '/admin/article/add';
+ window.location.href = '/admin/articles/add';
}
function edit(id) {
- window.location.href = '/admin/article/edit?id=' + id;
+ window.location.href = '/admin/articles/edit?id=' + id;
}
function del(id) {
layer.confirm('确定要删除该文章吗?', {
btn: ['确定', '取消']
}, function () {
- $.post('/admin/article/delete', { id: id }, function (res) {
+ $.post('/admin/articles/delete', { id: id }, function (res) {
if (res.code == 0) {
layer.msg(res.msg, { icon: 1 });
setTimeout(function () {
diff --git a/runtime/admin/temp/0bb846ef0dc9844f59dd163e5d6fca56.php b/runtime/admin/temp/0bb846ef0dc9844f59dd163e5d6fca56.php
deleted file mode 100644
index 9d613fc..0000000
--- a/runtime/admin/temp/0bb846ef0dc9844f59dd163e5d6fca56.php
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
-
跳转提示
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/0ca4cf5d689610e0c0dc92d8689bc694.php b/runtime/admin/temp/0ca4cf5d689610e0c0dc92d8689bc694.php
deleted file mode 100644
index cb6d686..0000000
--- a/runtime/admin/temp/0ca4cf5d689610e0c0dc92d8689bc694.php
+++ /dev/null
@@ -1,205 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/0d3b17806247be3f9294dd993f5ff7bf.php b/runtime/admin/temp/0d3b17806247be3f9294dd993f5ff7bf.php
deleted file mode 100644
index 8dee733..0000000
--- a/runtime/admin/temp/0d3b17806247be3f9294dd993f5ff7bf.php
+++ /dev/null
@@ -1,343 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/10e05e3d82b5fc92954f2eaa74fca286.php b/runtime/admin/temp/10e05e3d82b5fc92954f2eaa74fca286.php
deleted file mode 100644
index c17bc89..0000000
--- a/runtime/admin/temp/10e05e3d82b5fc92954f2eaa74fca286.php
+++ /dev/null
@@ -1,316 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/15ce02ee4fbe4bcbe1b70cd1c4c479ed.php b/runtime/admin/temp/15ce02ee4fbe4bcbe1b70cd1c4c479ed.php
deleted file mode 100644
index 2e1a403..0000000
--- a/runtime/admin/temp/15ce02ee4fbe4bcbe1b70cd1c4c479ed.php
+++ /dev/null
@@ -1,277 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- | 排序 |
- 类型 |
- 按钮名 |
- 图标 |
- 状态 |
- 操作 |
-
-
-
- $vo): $mod = ($i % 2 );++$i;?>
-
- |
-
-
- 功能模块
- 超链接
-
- |
- |
- |
-
-
- 开启
-
- 禁用
-
- |
-
-
-
-
-
- |
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/19f310fa6c5fb9bf679d1f5703436071.php b/runtime/admin/temp/19f310fa6c5fb9bf679d1f5703436071.php
deleted file mode 100644
index e8818c3..0000000
--- a/runtime/admin/temp/19f310fa6c5fb9bf679d1f5703436071.php
+++ /dev/null
@@ -1,409 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/1c825d7302c9198f86d61f24e6c74d99.php b/runtime/admin/temp/1c825d7302c9198f86d61f24e6c74d99.php
deleted file mode 100644
index 64be6c3..0000000
--- a/runtime/admin/temp/1c825d7302c9198f86d61f24e6c74d99.php
+++ /dev/null
@@ -1,732 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
最近动态
-
- $activity): $mod = ($i % 2 );++$i;?>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/d04910006695a190f91404debb0c9683.php b/runtime/admin/temp/2022feb4cf19b13311bd33466ada27df.php
similarity index 98%
rename from runtime/admin/temp/d04910006695a190f91404debb0c9683.php
rename to runtime/admin/temp/2022feb4cf19b13311bd33466ada27df.php
index 82937ae..d261565 100644
--- a/runtime/admin/temp/d04910006695a190f91404debb0c9683.php
+++ b/runtime/admin/temp/2022feb4cf19b13311bd33466ada27df.php
@@ -1,4 +1,4 @@
-
+
diff --git a/runtime/admin/temp/223471353fa834ae2baca5b39cf40267.php b/runtime/admin/temp/223471353fa834ae2baca5b39cf40267.php
deleted file mode 100644
index 82f2004..0000000
--- a/runtime/admin/temp/223471353fa834ae2baca5b39cf40267.php
+++ /dev/null
@@ -1,227 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- | ID |
- 文本 |
- 富文本 |
- 百度文本 |
- 图片 |
- 参照 |
- 时间戳 |
- 日期 |
- 日期时间 |
- 网址链接 |
- 操作 |
-
-
-
- $vo): $mod = ($i % 2 );++$i;?>
-
- |
- |
- |
- |
-
-
- |
-
-
- 开启
-
- 关闭
-
- |
- |
- |
- |
- |
-
-
-
- |
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/3233de1b9d870d17c8b51c0d13088c4b.php b/runtime/admin/temp/3233de1b9d870d17c8b51c0d13088c4b.php
deleted file mode 100644
index 0dc2aae..0000000
--- a/runtime/admin/temp/3233de1b9d870d17c8b51c0d13088c4b.php
+++ /dev/null
@@ -1,177 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/33fe660e71fd18dda768b12bc1ec5aac.php b/runtime/admin/temp/33fe660e71fd18dda768b12bc1ec5aac.php
deleted file mode 100644
index 96e57b2..0000000
--- a/runtime/admin/temp/33fe660e71fd18dda768b12bc1ec5aac.php
+++ /dev/null
@@ -1,379 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/34d283a1bcbe58ecbdbcd3d1f0e36700.php b/runtime/admin/temp/34d283a1bcbe58ecbdbcd3d1f0e36700.php
index 97841dd..b872a21 100644
--- a/runtime/admin/temp/34d283a1bcbe58ecbdbcd3d1f0e36700.php
+++ b/runtime/admin/temp/34d283a1bcbe58ecbdbcd3d1f0e36700.php
@@ -1,4 +1,4 @@
-
+
@@ -147,18 +147,6 @@
-
-
-
-
diff --git a/runtime/admin/temp/3577c54c0ca6a5033f6739658aed0574.php b/runtime/admin/temp/3577c54c0ca6a5033f6739658aed0574.php
deleted file mode 100644
index 1861d29..0000000
--- a/runtime/admin/temp/3577c54c0ca6a5033f6739658aed0574.php
+++ /dev/null
@@ -1,170 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/3ad2724e5fb71079a54a9e6219360097.php b/runtime/admin/temp/3ad2724e5fb71079a54a9e6219360097.php
deleted file mode 100644
index 3222f65..0000000
--- a/runtime/admin/temp/3ad2724e5fb71079a54a9e6219360097.php
+++ /dev/null
@@ -1,426 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/413d41632850e6a39f16abf9573c9dfd.php b/runtime/admin/temp/413d41632850e6a39f16abf9573c9dfd.php
deleted file mode 100644
index a85d64d..0000000
--- a/runtime/admin/temp/413d41632850e6a39f16abf9573c9dfd.php
+++ /dev/null
@@ -1,177 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/4362e65c6d8297a2ebddffccccfcd7f3.php b/runtime/admin/temp/4362e65c6d8297a2ebddffccccfcd7f3.php
deleted file mode 100644
index b597f10..0000000
--- a/runtime/admin/temp/4362e65c6d8297a2ebddffccccfcd7f3.php
+++ /dev/null
@@ -1,304 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/4a16c5a5006908b0b790472a2898d2bf.php b/runtime/admin/temp/4a16c5a5006908b0b790472a2898d2bf.php
deleted file mode 100644
index 40bde98..0000000
--- a/runtime/admin/temp/4a16c5a5006908b0b790472a2898d2bf.php
+++ /dev/null
@@ -1,368 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/533c54f343e8a61c5a95c12da17f30ac.php b/runtime/admin/temp/533c54f343e8a61c5a95c12da17f30ac.php
deleted file mode 100644
index 1a3b501..0000000
--- a/runtime/admin/temp/533c54f343e8a61c5a95c12da17f30ac.php
+++ /dev/null
@@ -1,171 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/57d210b0392c6ab0bf9a8c64d5dcfe4b.php b/runtime/admin/temp/57d210b0392c6ab0bf9a8c64d5dcfe4b.php
deleted file mode 100644
index 0a59d76..0000000
--- a/runtime/admin/temp/57d210b0392c6ab0bf9a8c64d5dcfe4b.php
+++ /dev/null
@@ -1,241 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- | 类型 |
- 菜单名 |
- 图标 |
- 排序 |
- 状态 |
- 操作 |
-
-
-
- $vo): $mod = ($i % 2 );++$i;?>
-
- |
-
- 功能模块:
- 超链接:
- 顶级
-
- |
- |
- |
- |
- 禁用'; ?> |
-
-
-
-
-
-
- |
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/59fe0658cc9cd89331c4634f2d4b0bed.php b/runtime/admin/temp/59fe0658cc9cd89331c4634f2d4b0bed.php
deleted file mode 100644
index 9359f02..0000000
--- a/runtime/admin/temp/59fe0658cc9cd89331c4634f2d4b0bed.php
+++ /dev/null
@@ -1,284 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/5fcc0e440c64e4a69fa6ab9d4849f68a.php b/runtime/admin/temp/5fcc0e440c64e4a69fa6ab9d4849f68a.php
deleted file mode 100644
index 2e17de5..0000000
--- a/runtime/admin/temp/5fcc0e440c64e4a69fa6ab9d4849f68a.php
+++ /dev/null
@@ -1,217 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/638faa80cf1298b7198f7a359b25bb22.php b/runtime/admin/temp/638faa80cf1298b7198f7a359b25bb22.php
deleted file mode 100644
index 38095db..0000000
--- a/runtime/admin/temp/638faa80cf1298b7198f7a359b25bb22.php
+++ /dev/null
@@ -1,348 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/6d989ddcae31ded7beac469198045d10.php b/runtime/admin/temp/6d989ddcae31ded7beac469198045d10.php
deleted file mode 100644
index 20a0e26..0000000
--- a/runtime/admin/temp/6d989ddcae31ded7beac469198045d10.php
+++ /dev/null
@@ -1,409 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/6f472d37a02e7e3b8a4ad0660ee03e89.php b/runtime/admin/temp/6f472d37a02e7e3b8a4ad0660ee03e89.php
deleted file mode 100644
index 328d939..0000000
--- a/runtime/admin/temp/6f472d37a02e7e3b8a4ad0660ee03e89.php
+++ /dev/null
@@ -1,223 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- | 角色名 |
- 状态 |
- 添加时间 |
- 操作 |
-
-
-
- $vo): $mod = ($i % 2 );++$i;?>
-
- |
- 禁用'; ?> |
- |
-
-
-
- |
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/7013e3bcaaaa1c5a1494af79f99ce42f.php b/runtime/admin/temp/7013e3bcaaaa1c5a1494af79f99ce42f.php
deleted file mode 100644
index 72987fd..0000000
--- a/runtime/admin/temp/7013e3bcaaaa1c5a1494af79f99ce42f.php
+++ /dev/null
@@ -1,425 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/705995d2a8e3fb66a54834e54543f090.php b/runtime/admin/temp/705995d2a8e3fb66a54834e54543f090.php
deleted file mode 100644
index 9e2a71d..0000000
--- a/runtime/admin/temp/705995d2a8e3fb66a54834e54543f090.php
+++ /dev/null
@@ -1,252 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/766d6e3eeeea6e24fe0ab12371e8dfbf.php b/runtime/admin/temp/766d6e3eeeea6e24fe0ab12371e8dfbf.php
deleted file mode 100644
index 36a33ca..0000000
--- a/runtime/admin/temp/766d6e3eeeea6e24fe0ab12371e8dfbf.php
+++ /dev/null
@@ -1,248 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/792969fb591a0f355761a1b3bf3d1226.php b/runtime/admin/temp/792969fb591a0f355761a1b3bf3d1226.php
index 611a2bd..45f63c2 100644
--- a/runtime/admin/temp/792969fb591a0f355761a1b3bf3d1226.php
+++ b/runtime/admin/temp/792969fb591a0f355761a1b3bf3d1226.php
@@ -1,4 +1,4 @@
-
+
@@ -255,8 +255,7 @@
}
.activity-title {
font-weight: 500;
- color: #1e293b;
- margin-bottom: 4px;
+ color: #9b9b9b;
}
.activity-time {
font-size: 12px;
@@ -306,22 +305,22 @@
@@ -352,10 +351,9 @@
$activity): $mod = ($i % 2 );++$i;?>
@@ -408,21 +406,75 @@ function updateTime() {
document.getElementById('current-time').innerHTML = timeString;
}
+// 获取用户统计数据
+function getUserCounts() {
+ fetch('')
+ .then(response => response.json())
+ .then(res => {
+ console.log('用户统计接口返回数据:', res);
+ if (res.code === 0 && res.data) {
+ // 更新用户总数
+ document.querySelector('.stat-card:nth-child(1) .stat-value').textContent = res.data.total.toLocaleString();
+
+ // 更新用户增长图表
+ if (window.userChart) {
+ window.userChart.setOption({
+ xAxis: {
+ data: res.data.dates
+ },
+ series: [{
+ name: '新增用户',
+ data: res.data.counts
+ }, {
+ name: '总用户数',
+ data: res.data.totalCounts
+ }]
+ });
+ }
+ } else {
+ console.warn('用户统计接口返回异常:', res);
+ document.querySelector('.stat-card:nth-child(1) .stat-value').textContent = '0';
+ }
+ })
+ .catch(error => {
+ console.error('获取用户统计失败:', error);
+ document.querySelector('.stat-card:nth-child(1) .stat-value').textContent = '0';
+ });
+}
+
// 获取文章统计数据
function getArticleCounts() {
- fetch('')
+ fetch('')
.then(response => response.json())
.then(res => {
console.log('文章统计接口返回数据:', res);
if (res.code === 0 && res.data) {
// 更新文章总数
document.querySelector('.stat-card:nth-child(3) .stat-value').textContent = res.data.total.toLocaleString();
+
+ // 更新文章统计图表
+ if (window.articleChart) {
+ window.articleChart.setOption({
+ xAxis: {
+ data: res.data.dates
+ },
+ series: [{
+ name: '新增文章',
+ data: res.data.counts
+ }, {
+ name: '总文章数',
+ data: res.data.totalCounts
+ }]
+ });
+ }
} else {
console.warn('文章统计接口返回异常:', res);
+ document.querySelector('.stat-card:nth-child(3) .stat-value').textContent = '0';
}
})
.catch(error => {
console.error('获取文章统计失败:', error);
+ document.querySelector('.stat-card:nth-child(3) .stat-value').textContent = '0';
});
}
@@ -435,12 +487,30 @@ function getResourcesCounts() {
if (res.code === 0 && res.data) {
// 更新资源总数
document.querySelector('.stat-card:nth-child(4) .stat-value').textContent = res.data.total.toLocaleString();
+
+ // 更新资源统计图表
+ if (window.resourceChart) {
+ window.resourceChart.setOption({
+ xAxis: {
+ data: res.data.dates
+ },
+ series: [{
+ name: '新增资源',
+ data: res.data.counts
+ }, {
+ name: '总资源数',
+ data: res.data.totalCounts
+ }]
+ });
+ }
} else {
console.warn('资源统计接口返回异常:', res);
+ document.querySelector('.stat-card:nth-child(4) .stat-value').textContent = '0';
}
})
.catch(error => {
console.error('获取资源统计失败:', error);
+ document.querySelector('.stat-card:nth-child(4) .stat-value').textContent = '0';
});
}
@@ -449,6 +519,7 @@ setInterval(updateTime, 1000);
// 页面加载完成后获取统计数据
document.addEventListener('DOMContentLoaded', function() {
+ getUserCounts();
getArticleCounts();
getResourcesCounts();
});
@@ -570,6 +641,9 @@ function initUserGrowth() {
data: ,
itemStyle: {
color: '#10b981'
+ },
+ lineStyle: {
+ width: 3
}
}
]
@@ -591,7 +665,7 @@ function initResourceStats() {
}
},
legend: {
- data: ['新增资源', '下载量']
+ data: ['新增资源', '总资源数', '下载量']
},
grid: {
left: '3%',
@@ -611,18 +685,33 @@ function initResourceStats() {
{
name: '新增资源',
type: 'bar',
- data: ,
+ data: ,
itemStyle: {
color: '#3881fd'
}
},
+ {
+ name: '总资源数',
+ type: 'line',
+ smooth: true,
+ data: ,
+ itemStyle: {
+ color: '#10b981'
+ },
+ lineStyle: {
+ width: 3
+ }
+ },
{
name: '下载量',
type: 'line',
smooth: true,
data: ,
itemStyle: {
- color: '#10b981'
+ color: '#f59e0b'
+ },
+ lineStyle: {
+ width: 3
}
}
]
@@ -644,7 +733,7 @@ function initArticleStats() {
}
},
legend: {
- data: ['新增文章', '访问量']
+ data: ['新增文章', '总文章数', '浏览量']
},
grid: {
left: '3%',
@@ -664,18 +753,33 @@ function initArticleStats() {
{
name: '新增文章',
type: 'bar',
- data: ,
+ data: ,
itemStyle: {
color: '#3881fd'
}
},
{
- name: '访问量',
+ name: '总文章数',
+ type: 'line',
+ smooth: true,
+ data: ,
+ itemStyle: {
+ color: '#10b981'
+ },
+ lineStyle: {
+ width: 3
+ }
+ },
+ {
+ name: '浏览量',
type: 'line',
smooth: true,
data: ,
itemStyle: {
- color: '#10b981'
+ color: '#f59e0b'
+ },
+ lineStyle: {
+ width: 3
}
}
]
@@ -685,18 +789,32 @@ function initArticleStats() {
// 初始化所有图表
document.addEventListener('DOMContentLoaded', function() {
- initVisitTrend();
- initUserGrowth();
- initResourceStats();
- initArticleStats();
-
- // 监听窗口大小变化,重绘图表
- window.addEventListener('resize', function() {
- var charts = document.querySelectorAll('.chart-container');
- charts.forEach(function(chart) {
- echarts.getInstanceByDom(chart)?.resize();
+ // 确保ECharts已加载
+ if (typeof echarts === 'undefined') {
+ console.error('ECharts未加载');
+ return;
+ }
+
+ // 初始化图表
+ try {
+ initVisitTrend();
+ initUserGrowth();
+ initResourceStats();
+ initArticleStats();
+
+ // 监听窗口大小变化,重绘图表
+ window.addEventListener('resize', function() {
+ var charts = document.querySelectorAll('.chart-container');
+ charts.forEach(function(chart) {
+ var instance = echarts.getInstanceByDom(chart);
+ if (instance) {
+ instance.resize();
+ }
+ });
});
- });
+ } catch (error) {
+ console.error('初始化图表失败:', error);
+ }
});
diff --git a/runtime/admin/temp/7e7ad1a7e6ed8cb4133dc183d9d8fb6e.php b/runtime/admin/temp/7e7ad1a7e6ed8cb4133dc183d9d8fb6e.php
deleted file mode 100644
index 72da750..0000000
--- a/runtime/admin/temp/7e7ad1a7e6ed8cb4133dc183d9d8fb6e.php
+++ /dev/null
@@ -1,199 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/84edc0bba962f694a2d0f88ed9174143.php b/runtime/admin/temp/84edc0bba962f694a2d0f88ed9174143.php
deleted file mode 100644
index 22ad554..0000000
--- a/runtime/admin/temp/84edc0bba962f694a2d0f88ed9174143.php
+++ /dev/null
@@ -1,298 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/8f74a562a9b39596b131b5ce2a04e10e.php b/runtime/admin/temp/8f74a562a9b39596b131b5ce2a04e10e.php
deleted file mode 100644
index f72cb12..0000000
--- a/runtime/admin/temp/8f74a562a9b39596b131b5ce2a04e10e.php
+++ /dev/null
@@ -1,267 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/8fd05746d9f4d337d2b8ead74b013673.php b/runtime/admin/temp/8fd05746d9f4d337d2b8ead74b013673.php
deleted file mode 100644
index c0bdb2f..0000000
--- a/runtime/admin/temp/8fd05746d9f4d337d2b8ead74b013673.php
+++ /dev/null
@@ -1,181 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/95be89451b9d20c113b1e9b89d74e7ed.php b/runtime/admin/temp/95be89451b9d20c113b1e9b89d74e7ed.php
index 235defc..a9f23f9 100644
--- a/runtime/admin/temp/95be89451b9d20c113b1e9b89d74e7ed.php
+++ b/runtime/admin/temp/95be89451b9d20c113b1e9b89d74e7ed.php
@@ -1,4 +1,4 @@
-
+
@@ -141,18 +141,6 @@
-
-
-
-
diff --git a/runtime/admin/temp/98d1caa8565d62f428819a17e93f072b.php b/runtime/admin/temp/98d1caa8565d62f428819a17e93f072b.php
deleted file mode 100644
index 0378b95..0000000
--- a/runtime/admin/temp/98d1caa8565d62f428819a17e93f072b.php
+++ /dev/null
@@ -1,176 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/9d1675bab256bcb1262f747ef7d94459.php b/runtime/admin/temp/9d1675bab256bcb1262f747ef7d94459.php
deleted file mode 100644
index c29589e..0000000
--- a/runtime/admin/temp/9d1675bab256bcb1262f747ef7d94459.php
+++ /dev/null
@@ -1,619 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/a7bfd508279dfa35c2e6ff0e3f27da40.php b/runtime/admin/temp/a7bfd508279dfa35c2e6ff0e3f27da40.php
deleted file mode 100644
index 3bc8a50..0000000
--- a/runtime/admin/temp/a7bfd508279dfa35c2e6ff0e3f27da40.php
+++ /dev/null
@@ -1,619 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/a9d67e4df562a7a96e64c14bb80c557f.php b/runtime/admin/temp/a9d67e4df562a7a96e64c14bb80c557f.php
deleted file mode 100644
index a6dc072..0000000
--- a/runtime/admin/temp/a9d67e4df562a7a96e64c14bb80c557f.php
+++ /dev/null
@@ -1,218 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/afa4276487a18a3dcb5f95a687b90882.php b/runtime/admin/temp/afa4276487a18a3dcb5f95a687b90882.php
deleted file mode 100644
index 36140ef..0000000
--- a/runtime/admin/temp/afa4276487a18a3dcb5f95a687b90882.php
+++ /dev/null
@@ -1,223 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- | 角色名 |
- 状态 |
- 添加时间 |
- 操作 |
-
-
-
- $vo): $mod = ($i % 2 );++$i;?>
-
- |
- 禁用'; ?> |
- |
-
-
-
- |
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/afdc7ba517f0eba6675e7ddb71a0cccf.php b/runtime/admin/temp/afdc7ba517f0eba6675e7ddb71a0cccf.php
deleted file mode 100644
index 2b59e6d..0000000
--- a/runtime/admin/temp/afdc7ba517f0eba6675e7ddb71a0cccf.php
+++ /dev/null
@@ -1,218 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/b2b7ed878a16cded7916ccc3ff270d4b.php b/runtime/admin/temp/b2b7ed878a16cded7916ccc3ff270d4b.php
deleted file mode 100644
index 2f96b94..0000000
--- a/runtime/admin/temp/b2b7ed878a16cded7916ccc3ff270d4b.php
+++ /dev/null
@@ -1,248 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/b2c576f05dfebea99c813402f4da2e92.php b/runtime/admin/temp/b2c576f05dfebea99c813402f4da2e92.php
deleted file mode 100644
index a9d55ec..0000000
--- a/runtime/admin/temp/b2c576f05dfebea99c813402f4da2e92.php
+++ /dev/null
@@ -1,80 +0,0 @@
-
-
-
-
-
-
- 重置密码
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/b742557fe5ab4483e3082140659f1f68.php b/runtime/admin/temp/b742557fe5ab4483e3082140659f1f68.php
deleted file mode 100644
index b7dcd99..0000000
--- a/runtime/admin/temp/b742557fe5ab4483e3082140659f1f68.php
+++ /dev/null
@@ -1,239 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- | 真实姓名 |
- 账户 |
- 手机 |
- QQ |
- 角色 |
- 性别 |
- 状态 |
- 登陆次数 |
- 登陆时间 |
- 操作 |
-
-
-
- $vo): $mod = ($i % 2 );++$i;?>
-
- |
- |
- |
- |
- |
-
-
- 男
-
- 女
-
- 未知
-
- |
- 禁用'; ?> |
- |
- |
-
-
-
- |
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/b7a371608e8ada2d05d443e9741070b7.php b/runtime/admin/temp/b7a371608e8ada2d05d443e9741070b7.php
deleted file mode 100644
index 09e1875..0000000
--- a/runtime/admin/temp/b7a371608e8ada2d05d443e9741070b7.php
+++ /dev/null
@@ -1,277 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- | 排序 |
- 类型 |
- 按钮名 |
- 图标 |
- 状态 |
- 操作 |
-
-
-
- $vo): $mod = ($i % 2 );++$i;?>
-
- |
-
-
- 功能模块
- 超链接
-
- |
- |
- |
-
-
- 开启
-
- 禁用
-
- |
-
-
-
-
-
- |
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/c4cb272f04d884533b2554471a2dc765.php b/runtime/admin/temp/c4cb272f04d884533b2554471a2dc765.php
deleted file mode 100644
index 36079f6..0000000
--- a/runtime/admin/temp/c4cb272f04d884533b2554471a2dc765.php
+++ /dev/null
@@ -1,211 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/runtime/admin/temp/c5f36a7772c20379b8b97ddafceff134.php b/runtime/admin/temp/c5f36a7772c20379b8b97ddafceff134.php
index d591b8d..70c4480 100644
--- a/runtime/admin/temp/c5f36a7772c20379b8b97ddafceff134.php
+++ b/runtime/admin/temp/c5f36a7772c20379b8b97ddafceff134.php
@@ -1,4 +1,4 @@
-
+
@@ -100,10 +100,10 @@