更新
This commit is contained in:
parent
5a56bfdc52
commit
71834710c8
2
assets/css/joe.census.min.css
vendored
2
assets/css/joe.census.min.css
vendored
File diff suppressed because one or more lines are too long
@ -89,6 +89,7 @@
|
|||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(2, 1fr);
|
grid-template-columns: repeat(2, 1fr);
|
||||||
gap: 15px;
|
gap: 15px;
|
||||||
|
margin-bottom: 15px;
|
||||||
&-item {
|
&-item {
|
||||||
background: var(--background);
|
background: var(--background);
|
||||||
box-shadow: var(--box-shadow);
|
box-shadow: var(--box-shadow);
|
||||||
@ -119,4 +120,129 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
&__filing {
|
||||||
|
background: var(--background);
|
||||||
|
box-shadow: var(--box-shadow);
|
||||||
|
border-radius: var(--radius-wrap);
|
||||||
|
.title {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
height: 45px;
|
||||||
|
padding: 0 12px;
|
||||||
|
border-bottom: 1px solid var(--classC);
|
||||||
|
color: var(--main);
|
||||||
|
justify-content: space-between;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
.content {
|
||||||
|
padding: 15px;
|
||||||
|
.item {
|
||||||
|
position: relative;
|
||||||
|
&:last-child {
|
||||||
|
.wrapper {
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.head {
|
||||||
|
position: absolute;
|
||||||
|
top: 14px;
|
||||||
|
width: 13px;
|
||||||
|
height: 13px;
|
||||||
|
background: var(--classC);
|
||||||
|
border-radius: 50%;
|
||||||
|
}
|
||||||
|
.tail {
|
||||||
|
position: absolute;
|
||||||
|
left: 6px;
|
||||||
|
top: 0;
|
||||||
|
width: 1px;
|
||||||
|
height: 100%;
|
||||||
|
background: var(--classC);
|
||||||
|
}
|
||||||
|
.wrapper {
|
||||||
|
padding-left: 30px;
|
||||||
|
padding-bottom: 15px;
|
||||||
|
.panel {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
color: var(--routine);
|
||||||
|
cursor: pointer;
|
||||||
|
background: var(--classD);
|
||||||
|
padding: 10px;
|
||||||
|
height: 40px;
|
||||||
|
border-radius: 4px;
|
||||||
|
svg {
|
||||||
|
width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
fill: var(--minor);
|
||||||
|
transform: rotate(180deg);
|
||||||
|
transition: transform 0.25s;
|
||||||
|
}
|
||||||
|
&.in {
|
||||||
|
svg {
|
||||||
|
transform: rotate(90deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
left: -8px;
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
border-right: 8px solid var(--classD);
|
||||||
|
border-top: 8px solid transparent;
|
||||||
|
border-bottom: 8px solid transparent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.panel-body {
|
||||||
|
display: none;
|
||||||
|
padding-left: 20px;
|
||||||
|
li {
|
||||||
|
margin-top: 20px;
|
||||||
|
a {
|
||||||
|
color: var(--routine);
|
||||||
|
&:hover {
|
||||||
|
color: var(--theme);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.load {
|
||||||
|
padding-top: 15px;
|
||||||
|
.head {
|
||||||
|
top: 25px;
|
||||||
|
background: #2db7f5;
|
||||||
|
}
|
||||||
|
.button {
|
||||||
|
position: relative;
|
||||||
|
margin-left: 30px;
|
||||||
|
border: none;
|
||||||
|
background: #2db7f5;
|
||||||
|
color: #fff;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 0 12px;
|
||||||
|
height: 34px;
|
||||||
|
font-size: 13px;
|
||||||
|
&::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
left: -8px;
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
border-right: 8px solid #2db7f5;
|
||||||
|
border-top: 8px solid transparent;
|
||||||
|
border-bottom: 8px solid transparent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,22 +2,20 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
{
|
{
|
||||||
/* 转换字节 */
|
/* 转换字节 */
|
||||||
const bytesToSize = bytes => {
|
const bytesToSize = bytes => {
|
||||||
|
if (!bytes) return '0 B';
|
||||||
const k = 1024,
|
const k = 1024,
|
||||||
sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
|
sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
|
||||||
i = Math.floor(Math.log(bytes) / Math.log(k));
|
i = Math.floor(Math.log(bytes) / Math.log(k));
|
||||||
return (bytes / Math.pow(k, i)).toPrecision(3) + ' ' + sizes[i];
|
return (bytes / Math.pow(k, i)).toPrecision(3) + ' ' + sizes[i];
|
||||||
};
|
};
|
||||||
|
|
||||||
const categories = [];
|
const categories = [];
|
||||||
const upSeries = [];
|
const upSeries = [];
|
||||||
const downSeries = [];
|
const downSeries = [];
|
||||||
|
|
||||||
const flowDom = document.querySelector('#flow');
|
const flowDom = document.querySelector('#flow');
|
||||||
const workDom = document.querySelector('#work');
|
const workDom = document.querySelector('#work');
|
||||||
const flowChart = flowDom && echarts.init(flowDom);
|
const flowChart = flowDom && echarts.init(flowDom);
|
||||||
const workChart = workDom && echarts.init(workDom);
|
const workChart = workDom && echarts.init(workDom);
|
||||||
if (flowDom && workDom) initChart();
|
if (flowDom && workDom) initChart();
|
||||||
|
|
||||||
function initChart() {
|
function initChart() {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: Joe.BASE_API,
|
url: Joe.BASE_API,
|
||||||
@ -27,6 +25,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
routeType: 'server_status'
|
routeType: 'server_status'
|
||||||
},
|
},
|
||||||
success(res) {
|
success(res) {
|
||||||
|
if (!res.status) Qmsg.warning('服务器接口异常!');
|
||||||
{
|
{
|
||||||
$('.joe_census__server-item .count .up').html(`总发送:${bytesToSize(res.upTotal)}`);
|
$('.joe_census__server-item .count .up').html(`总发送:${bytesToSize(res.upTotal)}`);
|
||||||
$('.joe_census__server-item .count .down').html(`总接收:${bytesToSize(res.downTotal)}`);
|
$('.joe_census__server-item .count .down').html(`总接收:${bytesToSize(res.downTotal)}`);
|
||||||
@ -48,7 +47,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
grid: {
|
grid: {
|
||||||
left: '3%',
|
left: '3%',
|
||||||
right: '4%',
|
right: '4%',
|
||||||
bottom: '0',
|
bottom: '3%',
|
||||||
containLabel: true
|
containLabel: true
|
||||||
},
|
},
|
||||||
tooltip: {
|
tooltip: {
|
||||||
@ -250,6 +249,9 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
},
|
},
|
||||||
success(res) {
|
success(res) {
|
||||||
latelyChart.setOption({
|
latelyChart.setOption({
|
||||||
|
title: {
|
||||||
|
subtext: '单位 数量'
|
||||||
|
},
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'axis',
|
trigger: 'axis',
|
||||||
axisPointer: {
|
axisPointer: {
|
||||||
@ -294,4 +296,55 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 初始化归档 */
|
||||||
|
{
|
||||||
|
let page = 0;
|
||||||
|
initFiling();
|
||||||
|
function initFiling() {
|
||||||
|
if ($('.joe_census__filing .button').html() === 'loading...') return;
|
||||||
|
$.ajax({
|
||||||
|
url: Joe.BASE_API,
|
||||||
|
type: 'POST',
|
||||||
|
dataType: 'json',
|
||||||
|
data: {
|
||||||
|
routeType: 'article_filing',
|
||||||
|
page: ++page
|
||||||
|
},
|
||||||
|
success(res) {
|
||||||
|
if (!res.length) {
|
||||||
|
$('.joe_census__filing .item.load').remove();
|
||||||
|
return Qmsg.warning('没有更多内容了');
|
||||||
|
}
|
||||||
|
let htmlStr = '';
|
||||||
|
res.forEach(item => {
|
||||||
|
htmlStr += `
|
||||||
|
<div class="item">
|
||||||
|
<div class="tail"></div>
|
||||||
|
<div class="head"></div>
|
||||||
|
<div class="wrapper">
|
||||||
|
<div class="panel">${item.date}<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg"><path d="M21.6 772.8c28.8 28.8 74.4 28.8 103.2 0L512 385.6l387.2 387.2c28.8 28.8 74.4 28.8 103.2 0 28.8-28.8 28.8-74.4 0-103.2L615.2 282.4l-77.6-77.6c-14.4-14.4-37.6-14.4-51.2 0l-77.6 77.6L21.6 669.6c-28.8 28.8-28.8 75.2 0 103.2z" /></svg></div>
|
||||||
|
<ol class="panel-body">
|
||||||
|
${item.list.map(_ => `<li><a rel="noopener noreferrer" target="_blank" href="${_.permalink}">${_.title}</a></li>`).join('')}
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
});
|
||||||
|
$('#filing').append(htmlStr);
|
||||||
|
$('.joe_census__filing .button').html('加载更多');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
$('.joe_census__filing .content').on('click', '.panel', function () {
|
||||||
|
const panelBox = $(this).parents('.content');
|
||||||
|
panelBox.find('.panel').not($(this)).removeClass('in');
|
||||||
|
panelBox.find('.panel-body').not($(this).siblings('.panel-body')).stop().hide('fast');
|
||||||
|
$(this).toggleClass('in').siblings('.panel-body').stop().toggle('fast');
|
||||||
|
});
|
||||||
|
$('.joe_census__filing .button').on('click', function () {
|
||||||
|
initFiling();
|
||||||
|
$(this).html('loading...');
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
2
assets/js/joe.census.min.js
vendored
2
assets/js/joe.census.min.js
vendored
File diff suppressed because one or more lines are too long
15
census.php
15
census.php
@ -14,9 +14,9 @@
|
|||||||
|
|
||||||
<head>
|
<head>
|
||||||
<?php $this->need('public/include.php'); ?>
|
<?php $this->need('public/include.php'); ?>
|
||||||
<link rel="stylesheet" href="<?php $this->options->themeUrl('assets/css/joe.census.min.css?v=20210521'); ?>">
|
<link rel="stylesheet" href="<?php $this->options->themeUrl('assets/css/joe.census.min.css?v=202105211730'); ?>">
|
||||||
<script src="https://cdn.jsdelivr.net/npm/echarts@5.1.1/dist/echarts.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/echarts@5.1.1/dist/echarts.min.js"></script>
|
||||||
<script src="<?php $this->options->themeUrl('assets/js/joe.census.min.js?v=20210521'); ?>"></script>
|
<script src="<?php $this->options->themeUrl('assets/js/joe.census.min.js?v=202105211730'); ?>"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@ -106,6 +106,17 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
<div class="joe_census__filing">
|
||||||
|
<div class="title">文章归档</div>
|
||||||
|
<div class="content">
|
||||||
|
<div id="filing"></div>
|
||||||
|
<div class="item load">
|
||||||
|
<div class="tail"></div>
|
||||||
|
<div class="head"></div>
|
||||||
|
<button class="button">加载更多</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<?php $this->need('public/footer.php'); ?>
|
<?php $this->need('public/footer.php'); ?>
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
/* 获取主题当前版本号 */
|
/* 获取主题当前版本号 */
|
||||||
function _getVersion()
|
function _getVersion()
|
||||||
{
|
{
|
||||||
return "7.0.7";
|
return "7.0.8";
|
||||||
};
|
};
|
||||||
|
|
||||||
/* 判断是否是手机 */
|
/* 判断是否是手机 */
|
||||||
|
@ -294,6 +294,7 @@ function _getHuyaList($self)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 获取服务器状态 */
|
||||||
function _getServerStatus($self)
|
function _getServerStatus($self)
|
||||||
{
|
{
|
||||||
header("HTTP/1.1 200 OK");
|
header("HTTP/1.1 200 OK");
|
||||||
@ -325,6 +326,8 @@ function _getServerStatus($self)
|
|||||||
$response = json_decode(curl_exec($ch), true);
|
$response = json_decode(curl_exec($ch), true);
|
||||||
curl_close($ch);
|
curl_close($ch);
|
||||||
$self->response->throwJson(array(
|
$self->response->throwJson(array(
|
||||||
|
/* 状态 */
|
||||||
|
"status" => $response ? true : false,
|
||||||
/* 上行流量KB */
|
/* 上行流量KB */
|
||||||
"up" => $response["up"] ? $response["up"] : 0,
|
"up" => $response["up"] ? $response["up"] : 0,
|
||||||
/* 下行流量KB */
|
/* 下行流量KB */
|
||||||
@ -342,6 +345,7 @@ function _getServerStatus($self)
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 获取最近评论 */
|
||||||
function _getCommentLately($self)
|
function _getCommentLately($self)
|
||||||
{
|
{
|
||||||
header("HTTP/1.1 200 OK");
|
header("HTTP/1.1 200 OK");
|
||||||
@ -368,5 +372,37 @@ function _getCommentLately($self)
|
|||||||
|
|
||||||
function _getArticleFiling($self)
|
function _getArticleFiling($self)
|
||||||
{
|
{
|
||||||
|
header("HTTP/1.1 200 OK");
|
||||||
|
header('Access-Control-Allow-Origin:*');
|
||||||
|
header("Access-Control-Allow-Headers:Origin, X-Requested-With, Content-Type, Accept");
|
||||||
|
$page = $self->request->page;
|
||||||
|
$pageSize = 8;
|
||||||
|
if (!preg_match('/^\d+$/', $page)) return $self->response->throwJson(array("data" => "非法请求!已屏蔽!"));
|
||||||
|
if ($page == 0) $page = 1;
|
||||||
|
$offset = $pageSize * ($page - 1);
|
||||||
|
$time = time();
|
||||||
|
$db = Typecho_Db::get();
|
||||||
|
$prefix = $db->getPrefix();
|
||||||
|
$result = [];
|
||||||
|
$sql = "SELECT FROM_UNIXTIME(created, '%Y 年 %m 月') as date FROM `{$prefix}contents` WHERE created < {$time} AND (password is NULL or password = '') AND status = 'publish' AND type = 'post' GROUP BY FROM_UNIXTIME(created, '%Y 年 %m 月') DESC LIMIT {$pageSize} OFFSET {$offset}";
|
||||||
|
$temp = $db->fetchAll($sql);
|
||||||
|
$options = Typecho_Widget::widget('Widget_Options');
|
||||||
|
foreach ($temp as $item) {
|
||||||
|
$date = $item['date'];
|
||||||
|
$list = [];
|
||||||
|
$sql = "SELECT * FROM `{$prefix}contents` WHERE created < {$time} AND (password is NULL or password = '') AND status = 'publish' AND type = 'post' AND FROM_UNIXTIME(created, '%Y 年 %m 月') = '{$date}' ORDER BY created DESC";
|
||||||
|
$_list = $db->fetchAll($sql);
|
||||||
|
foreach ($_list as $_item) {
|
||||||
|
$type = $_item['type'];
|
||||||
|
$routeExists = (NULL != Typecho_Router::get($type));
|
||||||
|
$_item['pathinfo'] = $routeExists ? Typecho_Router::url($type, $_item) : '#';
|
||||||
|
$_item['permalink'] = Typecho_Common::url($_item['pathinfo'], $options->index);
|
||||||
|
$list[] = array(
|
||||||
|
"title" => date('m/d', $_item['created']) . ':' . $_item['title'],
|
||||||
|
"permalink" => $_item['permalink'],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
$result[] = array("date" => $date, "list" => $list);
|
||||||
|
}
|
||||||
|
$self->response->throwJson($result);
|
||||||
}
|
}
|
||||||
|
@ -56,4 +56,4 @@ class Widget_Contents_Post extends Widget_Abstract_Contents
|
|||||||
array($this, 'push')
|
array($this, 'push')
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "typecho-joe-next",
|
"name": "typecho-joe-next",
|
||||||
"version": "7.0.7",
|
"version": "7.0.8",
|
||||||
"description": "A Theme Of Typecho",
|
"description": "A Theme Of Typecho",
|
||||||
"main": "index.php",
|
"main": "index.php",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
|
@ -199,15 +199,15 @@
|
|||||||
</div>
|
</div>
|
||||||
<nav class="joe_dropdown__menu">
|
<nav class="joe_dropdown__menu">
|
||||||
<?php if ($this->user->group == 'administrator' || $this->user->group == 'editor' || $this->user->group == 'contributor') : ?>
|
<?php if ($this->user->group == 'administrator' || $this->user->group == 'editor' || $this->user->group == 'contributor') : ?>
|
||||||
<a rel="noopener noreferrer nofollow" target="_balnk" href="<?php $this->options->adminUrl("manage-posts.php"); ?>">管理文章</a>
|
<a rel="noopener noreferrer nofollow" target="_blank" href="<?php $this->options->adminUrl("manage-posts.php"); ?>">管理文章</a>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
<?php if ($this->user->group == 'administrator' || $this->user->group == 'editor') : ?>
|
<?php if ($this->user->group == 'administrator' || $this->user->group == 'editor') : ?>
|
||||||
<a rel="noopener noreferrer nofollow" target="_balnk" href="<?php $this->options->adminUrl("manage-comments.php"); ?>">管理评论</a>
|
<a rel="noopener noreferrer nofollow" target="_blank" href="<?php $this->options->adminUrl("manage-comments.php"); ?>">管理评论</a>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
<?php if ($this->user->group == 'administrator') : ?>
|
<?php if ($this->user->group == 'administrator') : ?>
|
||||||
<a rel="noopener noreferrer nofollow" target="_balnk" href="<?php $this->options->adminUrl("options-theme.php"); ?>">修改外观</a>
|
<a rel="noopener noreferrer nofollow" target="_blank" href="<?php $this->options->adminUrl("options-theme.php"); ?>">修改外观</a>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
<a rel="noopener noreferrer nofollow" target="_balnk" href="<?php $this->options->adminUrl(); ?>">进入后台</a>
|
<a rel="noopener noreferrer nofollow" target="_blank" href="<?php $this->options->adminUrl(); ?>">进入后台</a>
|
||||||
<a rel="noopener noreferrer nofollow" href="<?php $this->options->logoutUrl(); ?>">退出登录</a>
|
<a rel="noopener noreferrer nofollow" href="<?php $this->options->logoutUrl(); ?>">退出登录</a>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
<link rel="stylesheet" href="<?php $this->options->themeUrl('assets/css/joe.mode.min.css'); ?>">
|
<link rel="stylesheet" href="<?php $this->options->themeUrl('assets/css/joe.mode.min.css'); ?>">
|
||||||
<link rel="stylesheet" href="<?php $this->options->themeUrl('assets/css/joe.normalize.min.css'); ?>">
|
<link rel="stylesheet" href="<?php $this->options->themeUrl('assets/css/joe.normalize.min.css'); ?>">
|
||||||
<link rel="stylesheet" href="<?php $this->options->themeUrl('assets/css/joe.global.min.css'); ?>">
|
<link rel="stylesheet" href="<?php $this->options->themeUrl('assets/css/joe.global.min.css'); ?>">
|
||||||
<link rel="stylesheet" href="<?php $this->options->themeUrl('assets/css/joe.responsive.min.css?v=20210521'); ?>">
|
<link rel="stylesheet" href="<?php $this->options->themeUrl('assets/css/joe.responsive.min.css?v=202105211730'); ?>">
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/typecho-joe-next@6.0.0/plugin/qmsg/qmsg.css">
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/typecho-joe-next@6.0.0/plugin/qmsg/qmsg.css">
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.css" />
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.css" />
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/animate.css@3.7.2/animate.min.css" />
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/animate.css@3.7.2/animate.min.css" />
|
||||||
|
Loading…
Reference in New Issue
Block a user