1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-06-26 04:21:27 +08:00

增加后台刷新首页缓存小工具

This commit is contained in:
xiaochong0302 2020-12-26 17:44:18 +08:00
parent 0642d430ff
commit 9974430f18
6 changed files with 239 additions and 38 deletions

View File

@ -2,14 +2,9 @@
namespace App\Console\Tasks;
use App\Caches\IndexFreeCourseList as IndexFreeCourseListCache;
use App\Caches\IndexNewCourseList as IndexNewCourseListCache;
use App\Caches\IndexSimpleFreeCourseList as IndexSimpleFreeCourseListCache;
use App\Caches\IndexSimpleNewCourseList as IndexSimpleNewCourseListCache;
use App\Caches\IndexSimpleVipCourseList as IndexSimpleVipCourseListCache;
use App\Caches\IndexVipCourseList as IndexVipCourseListCache;
use App\Http\Admin\Services\Setting as SettingService;
use App\Library\Utils\Password as PasswordUtil;
use App\Services\Utils\IndexCourseCache as IndexCourseCacheUtil;
use App\Validators\Account as AccountValidator;
class MaintainTask extends Task
@ -25,39 +20,9 @@ class MaintainTask extends Task
{
$section = $params[0] ?? null;
$site = $this->getSettings('site');
$util = new IndexCourseCacheUtil();
$type = $site['index_tpl_type'] ?: 'full';
if (!$section || $section == 'new_course') {
if ($type == 'full') {
$cache = new IndexNewCourseListCache();
$cache->rebuild();
} else {
$cache = new IndexSimpleNewCourseListCache();
$cache->rebuild();
}
}
if (!$section || $section == 'free_course') {
if ($type == 'full') {
$cache = new IndexFreeCourseListCache();
$cache->rebuild();
} else {
$cache = new IndexSimpleFreeCourseListCache();
$cache->rebuild();
}
}
if (!$section || $section == 'vip_course') {
if ($type == 'full') {
$cache = new IndexVipCourseListCache();
$cache->rebuild();
} else {
$cache = new IndexSimpleVipCourseListCache();
$cache->rebuild();
}
}
$util->rebuild($section);
echo 'rebuild index course cache success' . PHP_EOL;
}

View File

@ -0,0 +1,30 @@
<?php
namespace App\Http\Admin\Controllers;
use App\Http\Admin\Services\Util as UtilService;
/**
* @RoutePrefix("/admin/util")
*/
class UtilController extends Controller
{
/**
* @Route("/index/cache", name="admin.util.index_cache")
*/
public function indexCacheAction()
{
$service = new UtilService();
if ($this->request->isPost()) {
$service->handleIndexCache();
return $this->jsonSuccess(['msg' => '更新缓存成功']);
}
$this->view->pick('util/index_cache');
}
}

View File

@ -14,6 +14,7 @@ class AuthNode extends Service
$nodes[] = $this->getFinanceNodes();
$nodes[] = $this->getUserNodes();
$nodes[] = $this->getSettingNodes();
$nodes[] = $this->getUtilNodes();
return $nodes;
}
@ -768,4 +769,27 @@ class AuthNode extends Service
];
}
protected function getUtilNodes()
{
return [
'id' => '6',
'title' => '实用工具',
'children' => [
[
'id' => '-1',
'title' => '常用工具',
'type' => 'menu',
'children' => [
[
'id' => '-1-1',
'title' => '首页缓存',
'type' => 'menu',
'route' => 'admin.util.index_cache',
],
],
],
],
];
}
}

View File

@ -0,0 +1,40 @@
<?php
namespace App\Http\Admin\Services;
use App\Caches\IndexSlideList as IndexSlideListCache;
use App\Services\Utils\IndexCourseCache as IndexCourseCacheUtil;
class Util extends Service
{
public function handleIndexCache()
{
$items = $this->request->getPost('items');
if ($items['slide'] == 1) {
$cache = new IndexSlideListCache();
$cache->rebuild();
}
$util = new IndexCourseCacheUtil();
if ($items['featured_course'] == 1) {
$util->rebuild('featured_course');
}
if ($items['new_course'] == 1) {
$util->rebuild('new_course');
}
if ($items['free_course'] == 1) {
$util->rebuild('free_course');
}
if ($items['vip_course'] == 1) {
$util->rebuild('vip_course');
}
}
}

View File

@ -0,0 +1,89 @@
{% extends 'templates/main.volt' %}
{% block content %}
<form class="layui-form kg-form" method="POST" action="{{ url({'for':'admin.util.index_cache'}) }}">
<fieldset class="layui-elem-field layui-field-title">
<legend>首页缓存</legend>
</fieldset>
<div class="layui-form-item">
<label class="layui-form-label">轮播图</label>
<div class="layui-input-block">
<input type="radio" name="items[slide]" value="1" title="是">
<input type="radio" name="items[slide]" value="0" title="否" checked="checked">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">推荐课程</label>
<div class="layui-input-block">
<input type="radio" name="items[featured_course]" value="1" title="是">
<input type="radio" name="items[featured_course]" value="0" title="否" checked="checked">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">新上课程</label>
<div class="layui-input-block">
<input type="radio" name="items[new_course]" value="1" title="是">
<input type="radio" name="items[new_course]" value="0" title="否" checked="checked">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">免费课程</label>
<div class="layui-input-block">
<input type="radio" name="items[free_course]" value="1" title="是">
<input type="radio" name="items[free_course]" value="0" title="否" checked="checked">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">会员课程</label>
<div class="layui-input-block">
<input type="radio" name="items[vip_course]" value="1" title="是">
<input type="radio" name="items[vip_course]" value="0" title="否" checked="checked">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"></label>
<div class="layui-input-block">
<button class="layui-btn" lay-submit="true" lay-filter="go">刷新</button>
<button type="button" class="kg-back layui-btn layui-btn-primary">返回</button>
</div>
</div>
</form>
{% endblock %}
{% block inline_js %}
<script>
layui.use(['jquery', 'form', 'layer'], function () {
var $ = layui.jquery;
var form = layui.form;
var layer = layui.layer;
form.on('submit(back_verify)', function (data) {
$.ajax({
type: 'POST',
url: data.form.action,
data: data.field,
success: function (res) {
if (res.code === 0) {
$('#back-verify-btn').remove();
$('#back-verify-tips').removeClass('layui-hide');
}
layer.msg(res.msg, {icon: 1});
},
error: function (xhr) {
var json = JSON.parse(xhr.responseText);
layer.msg(json.msg, {icon: 2});
}
});
return false;
});
});
</script>
{% endblock %}

View File

@ -0,0 +1,53 @@
<?php
namespace App\Services\Utils;
use App\Caches\IndexFreeCourseList as IndexFreeCourseListCache;
use App\Caches\IndexNewCourseList as IndexNewCourseListCache;
use App\Caches\IndexSimpleFreeCourseList as IndexSimpleFreeCourseListCache;
use App\Caches\IndexSimpleNewCourseList as IndexSimpleNewCourseListCache;
use App\Caches\IndexSimpleVipCourseList as IndexSimpleVipCourseListCache;
use App\Caches\IndexVipCourseList as IndexVipCourseListCache;
use App\Services\Service;
class IndexCourseCache extends Service
{
public function rebuild($section = null)
{
$site = $this->getSettings('site');
$type = $site['index_tpl_type'] ?: 'full';
if (!$section || $section == 'new_course') {
if ($type == 'full') {
$cache = new IndexNewCourseListCache();
$cache->rebuild();
} else {
$cache = new IndexSimpleNewCourseListCache();
$cache->rebuild();
}
}
if (!$section || $section == 'free_course') {
if ($type == 'full') {
$cache = new IndexFreeCourseListCache();
$cache->rebuild();
} else {
$cache = new IndexSimpleFreeCourseListCache();
$cache->rebuild();
}
}
if (!$section || $section == 'vip_course') {
if ($type == 'full') {
$cache = new IndexVipCourseListCache();
$cache->rebuild();
} else {
$cache = new IndexSimpleVipCourseListCache();
$cache->rebuild();
}
}
}
}