1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-06-24 20:06:09 +08:00

阶段性优化

This commit is contained in:
xiaochong0302 2023-12-06 20:24:09 +08:00
parent 5268e6370c
commit 3dd5490bdb
32 changed files with 359 additions and 222 deletions

View File

@ -39,7 +39,7 @@
<th>图标</th>
<th>名称</th>
<th>层级</th>
<th>子</th>
<th>子节点</th>
<th>排序</th>
<th>发布</th>
<th>操作</th>

View File

@ -12,7 +12,7 @@
<tbody>
<tr>
<td>当前版本</td>
<td><a href="{{ gitee_url ~ '/releases/v' ~ app_info.version }}" target="_blank">{{ app_info.version }}</a></td>
<td><a href="{{ gitee_url ~ '/releases/v' ~ app_info.version }}" target="_blank">{{ app_info.alias }} {{ app_info.version }}</a></td>
</tr>
<tr>
<td>获取渠道</td>

View File

@ -8,7 +8,9 @@
namespace App\Http\Home\Controllers;
use App\Http\Home\Services\FullH5Url as FullH5UrlService;
use App\Services\Logic\Teacher\CourseList as TeacherCourseListService;
use App\Services\Logic\Teacher\TeacherList as TeacherListService;
use App\Services\Logic\User\UserInfo as UserInfoService;
use Phalcon\Mvc\View;
/**
@ -29,7 +31,7 @@ class TeacherController extends Controller
return $this->response->redirect($location);
}
$this->seo->prependTitle('');
$this->seo->prependTitle('师');
}
/**
@ -59,11 +61,34 @@ class TeacherController extends Controller
return $this->response->redirect($location);
}
$this->dispatcher->forward([
'controller' => 'user',
'action' => 'show',
'params' => ['id' => $id],
]);
$service = new UserInfoService();
$user = $service->handle($id);
if ($user['deleted'] == 1) {
$this->notFound();
}
$this->seo->prependTitle(['讲师', $user['name']]);
$this->view->setVar('user', $user);
}
/**
* @Get("/{id:[0-9]+}/courses", name="home.teacher.courses")
*/
public function coursesAction($id)
{
$model = $this->request->getQuery('model', 'trim', 'vod');
$service = new TeacherCourseListService();
$pager = $service->handle($id);
$pager->target = "tab-{$model}";
$this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
$this->view->setVar('pager', $pager);
}
}

View File

@ -131,23 +131,22 @@ class ArticleQuery extends Service
$validator = new ArticleQueryValidator();
if (isset($query['tag_id'])) {
$validator->checkTag($query['tag_id']);
$params['tag_id'] = $query['tag_id'];
$tag = $validator->checkTag($query['tag_id']);
$params['tag_id'] = $tag->id;
}
if (isset($query['tc']) && $query['tc'] != 'all') {
$validator->checkCategory($query['tc']);
$params['tc'] = $query['tc'];
$category = $validator->checkCategory($query['tc']);
$params['tc'] = $category->id;
}
if (isset($query['sc']) && $query['sc'] != 'all') {
$validator->checkCategory($query['sc']);
$params['sc'] = $query['sc'];
$category = $validator->checkCategory($query['sc']);
$params['sc'] = $category->id;
}
if (isset($query['sort'])) {
$validator->checkSort($query['sort']);
$params['sort'] = $query['sort'];
$params['sort'] = $validator->checkSort($query['sort']);;
}
return $params;

View File

@ -7,7 +7,6 @@
namespace App\Http\Home\Services;
use App\Caches\Category as CategoryCache;
use App\Models\Category as CategoryModel;
use App\Models\Course as CourseModel;
use App\Services\Category as CategoryService;
@ -187,32 +186,6 @@ class CourseQuery extends Service
return $result;
}
public function handleCategoryPaths($categoryId)
{
$result = [];
$cache = new CategoryCache();
$subCategory = $cache->get($categoryId);
$topCategory = $cache->get($subCategory->parent_id);
$topParams = ['tc' => $topCategory->id];
$result['top'] = [
'name' => $topCategory->name,
'url' => $this->baseUrl . $this->buildParams($topParams),
];
$subParams = ['tc' => $topCategory->id, 'sc' => $subCategory->id];
$result['sub'] = [
'name' => $subCategory->name,
'url' => $this->baseUrl . $this->buildParams($subParams),
];
return $result;
}
public function getParams()
{
$query = $this->request->getQuery();
@ -221,29 +194,31 @@ class CourseQuery extends Service
$validator = new CourseQueryValidator();
if (isset($query['tag_id'])) {
$tag = $validator->checkTag($query['tag_id']);
$params['tag_id'] = $tag->id;
}
if (isset($query['tc']) && $query['tc'] != 'all') {
$validator->checkTopCategory($query['tc']);
$params['tc'] = $query['tc'];
$category = $validator->checkCategory($query['tc']);
$params['tc'] = $category->id;
}
if (isset($query['sc']) && $query['sc'] != 'all') {
$validator->checkSubCategory($query['sc']);
$params['sc'] = $query['sc'];
$category = $validator->checkCategory($query['sc']);
$params['sc'] = $category->id;
}
if (isset($query['model']) && $query['model'] != 'all') {
$validator->checkModel($query['model']);
$params['model'] = $query['model'];
$params['model'] = $validator->checkModel($query['model']);
}
if (isset($query['level']) && $query['level'] != 'all') {
$validator->checkLevel($query['level']);
$params['level'] = $query['level'];
$params['level'] = $validator->checkLevel($query['level']);
}
if (isset($query['sort'])) {
$validator->checkSort($query['sort']);
$params['sort'] = $query['sort'];
$params['sort'] = $validator->checkSort($query['sort']);
}
return $params;

View File

@ -131,23 +131,22 @@ class QuestionQuery extends Service
$validator = new QuestionQueryValidator();
if (isset($query['tag_id'])) {
$validator->checkTag($query['tag_id']);
$params['tag_id'] = $query['tag_id'];
$tag = $validator->checkTag($query['tag_id']);
$params['tag_id'] = $tag->id;
}
if (isset($query['tc']) && $query['tc'] != 'all') {
$validator->checkCategory($query['tc']);
$params['tc'] = $query['tc'];
$category = $validator->checkCategory($query['tc']);
$params['tc'] = $category->id;
}
if (isset($query['sc']) && $query['sc'] != 'all') {
$validator->checkCategory($query['sc']);
$params['sc'] = $query['sc'];
$category = $validator->checkCategory($query['sc']);
$params['sc'] = $category->id;
}
if (isset($query['sort'])) {
$validator->checkSort($query['sort']);
$params['sort'] = $query['sort'];
$params['sort'] = $validator->checkSort($query['sort']);;
}
return $params;

View File

@ -4,7 +4,7 @@
<div class="layui-card">
<div class="layui-card-header">授课教师</div>
<div class="layui-card-body">
{% set teacher_url = url({'for':'home.user.show','id':teacher.id}) %}
{% set teacher_url = url({'for':'home.teacher.show','id':teacher.id}) %}
<div class="sidebar-user-card">
<div class="avatar">
<img src="{{ teacher.avatar }}!avatar_160" alt="{{ teacher.name }}">

View File

@ -1,9 +1,9 @@
{%- macro priority_info(value) %}
{%- macro priority_type(value) %}
{% if value == 10 %}
<span class="layui-badge layui-bg-red"></span>
{% elseif value == 20 %}
<span class="layui-badge layui-bg-blue"></span>
{% elseif value == 30 %}
<span class="layui-badge layui-bg-gray"></span>
{% endif %}
{%- endmacro %}

View File

@ -0,0 +1,4 @@
<div class="no-records">
<div class="icon"><i class="layui-icon layui-icon-tree"></i></div>
<div class="text">没有相关记录</div>
</div>

View File

@ -22,7 +22,6 @@
{% if pager.total_pages > 0 %}
<table class="layui-table consult-table" lay-skin="line">
<colgroup>
<col>
<col>
<col>
<col width="15%">
@ -30,7 +29,6 @@
<thead>
<tr>
<th>内容</th>
<th>优先级</th>
<th>时间</th>
<th>操作</th>
</tr>
@ -47,7 +45,6 @@
<p class="content layui-elip" title="{{ item.question }}">咨询:{{ item.question }}</p>
<p class="content layui-elip" title="{{ item.answer }}">回复:{{ answer }}</p>
</td>
<td>{{ priority_info(item.priority) }}</td>
<td>{{ date('Y-m-d',item.create_time) }}</td>
<td>
<button class="layui-btn layui-btn-xs layui-bg-green btn-show-consult" data-url="{{ show_url }}">详情</button>

View File

@ -18,14 +18,12 @@
<col>
<col>
<col>
<col>
</colgroup>
<thead>
<tr>
<th>名称</th>
<th>课时</th>
<th>标题</th>
<th>类型</th>
<th>学员</th>
<th>收藏</th>
<th>评分</th>
</tr>
</thead>
@ -33,10 +31,9 @@
{% for item in pager.items %}
{% set course_url = url({'for':'home.course.show','id':item.id}) %}
<tr>
<td><a href="{{ course_url }}">{{ item.title }}</a> {{ model_type(item.model) }}</td>
<td>{{ item.lesson_count }}</td>
<td><a href="{{ course_url }}">{{ item.title }}</a></td>
<td><span class="layui-badge layui-bg-green">{{ model_type(item.model) }}</span></td>
<td>{{ item.user_count }}</td>
<td>{{ item.favorite_count }}</td>
<td>{{ "%0.1f"|format(item.rating) }}</td>
</tr>
{% endfor %}

View File

@ -0,0 +1,16 @@
{{ partial('macros/course') }}
{% if pager.total_pages > 0 %}
<div class="course-list">
<div class="layui-row layui-col-space20">
{% for item in pager.items %}
<div class="layui-col-md3">
{{ course_card(item) }}
</div>
{% endfor %}
</div>
</div>
{{ partial('partials/pager_ajax') }}
{% else %}
{{ partial('partials/empty') }}
{% endif %}

View File

@ -6,7 +6,7 @@
<div class="layui-breadcrumb breadcrumb">
<a href="/">首页</a>
<a><cite>师</cite></a>
<a><cite>师</cite></a>
</div>
<div id="teacher-list" data-url="{{ pager_url }}"></div>

View File

@ -0,0 +1,81 @@
{% extends 'templates/main.volt' %}
{% block content %}
{{ partial('macros/user') }}
{% set share_url = share_url('user',user.id,auth_user.id) %}
{% set qrcode_url = url({'for':'home.qrcode'},{'text':share_url}) %}
{% set avatar_class = user.vip == 1 ? 'avatar vip' : 'avatar' %}
<div class="breadcrumb">
<span class="layui-breadcrumb">
<a href="/">首页</a>
<a><cite>讲师</cite></a>
<a><cite>{{ user.name }}</cite></a>
</span>
<span class="share">
<a class="share-wechat" href="javascript:" title="分享到微信"><i class="layui-icon layui-icon-login-wechat"></i></a>
<a class="share-qq" href="javascript:" title="分享到QQ空间"><i class="layui-icon layui-icon-login-qq"></i></a>
<a class="share-weibo" href="javascript:" title="分享到微博"><i class="layui-icon layui-icon-login-weibo"></i></a>
<a class="share-link kg-copy" href="javascript:" title="复制链接" data-clipboard-text="{{ share_url }}"><i class="layui-icon layui-icon-share"></i></a>
</span>
</div>
<div class="user-profile wrap">
<div class="{{ avatar_class }}">
<img src="{{ user.avatar }}!avatar_160" alt="{{ user.name }}">
</div>
<div class="info">
<p>
<span class="name">{{ user.name }}</span>
<span>{{ gender_icon(user.gender) }}</span>
</p>
<p>
<span><i class="layui-icon layui-icon-location"></i></span>
<span>{{ user.area|default('火星') }}</span>
</p>
<p>
<span><i class="layui-icon layui-icon-time"></i></span>
<span title="{{ date('Y-m-d H:i:s',user.active_time) }}">{{ user.active_time|time_ago }}</span>
</p>
</div>
<div class="about">{{ user.about|default('这个家伙很懒,什么都没留下') }}</div>
</div>
{% set courses_url = url({'for':'home.teacher.courses','id':user.id}) %}
<div class="tab-wrap">
<div class="layui-tab layui-tab-brief user-tab">
<ul class="layui-tab-title">
<li class="layui-this">点播课程</li>
<li>直播课程</li>
<li>图文课程</li>
<li>面授课程</li>
</ul>
<div class="layui-tab-content">
<div class="layui-tab-item layui-show" id="tab-vod" data-url="{{ courses_url }}?model=1"></div>
<div class="layui-tab-item" id="tab-live" data-url="{{ courses_url }}?model=2"></div>
<div class="layui-tab-item" id="tab-read" data-url="{{ courses_url }}?model=3"></div>
<div class="layui-tab-item" id="tab-offline" data-url="{{ courses_url }}?model=4"></div>
</div>
</div>
</div>
<div class="layui-hide">
<input type="hidden" name="share.title" value="{{ user.name }}">
<input type="hidden" name="share.pic" value="{{ user.avatar }}">
<input type="hidden" name="share.url" value="{{ share_url }}">
<input type="hidden" name="share.qrcode" value="{{ qrcode_url }}">
</div>
{% endblock %}
{% block include_js %}
{{ js_include('lib/clipboard.min.js') }}
{{ js_include('home/js/teacher.show.js') }}
{{ js_include('home/js/user.share.js') }}
{{ js_include('home/js/copy.js') }}
{% endblock %}

View File

@ -32,9 +32,7 @@ class TeacherLive extends Repository
->addFrom(ChapterModel::class, 'chapter')
->join(ChapterLiveModel::class, 'chapter.id = cl.chapter_id', 'cl')
->join(CourseModel::class, 'chapter.course_id = course.id', 'course')
->join(CourseUserModel::class, 'course.id = cu.course_id', 'cu')
->where('cu.user_id = :user_id:', ['user_id' => $userId])
->andWhere('cu.role_type = :role_type:', ['role_type' => CourseUserModel::ROLE_TEACHER])
->where('course.teacher_id = :teacher_id:', ['teacher_id' => $userId])
->andWhere('course.model = :model:', ['model' => CourseModel::MODEL_LIVE])
->andWhere('cl.start_time > :start_time:', ['start_time' => strtotime('today')])
->orderBy('cl.start_time ASC');

View File

@ -117,6 +117,11 @@ class ArticleList extends LogicService
$query = [];
if (isset($params['owner_id'])) {
$user = $validator->checkUser($params['owner_id']);
$query['owner_id'] = $user->id;
}
if (isset($params['tag_id'])) {
$tag = $validator->checkTag($params['tag_id']);
$query['tag_id'] = $tag->id;

View File

@ -0,0 +1,73 @@
<?php
/**
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
namespace App\Services\Logic\Consult;
use App\Builders\ConsultList as ConsultListBuilder;
use App\Library\Paginator\Query as PagerQuery;
use App\Repos\Consult as ConsultRepo;
use App\Services\Logic\Service as LogicService;
class ConsultList extends LogicService
{
public function handle()
{
$pagerQuery = new PagerQuery();
$sort = $pagerQuery->getSort();
$page = $pagerQuery->getPage();
$limit = $pagerQuery->getLimit();
$params = $pagerQuery->getParams();
$params['deleted'] = 0;
$consultRepo = new ConsultRepo();
$pager = $consultRepo->paginate($params, $sort, $page, $limit);
return $this->handleConsults($pager);
}
public function handleConsults($pager)
{
if ($pager->total_items == 0) {
return $pager;
}
$builder = new ConsultListBuilder();
$consults = $pager->items->toArray();
$courses = $builder->getCourses($consults);
$users = $builder->getUsers($consults);
$items = [];
foreach ($consults as $consult) {
$course = $courses[$consult['course_id']] ?? new \stdClass();
$owner = $users[$consult['owner_id']] ?? new \stdClass();
$items[] = [
'id' => $consult['id'],
'question' => $consult['question'],
'answer' => $consult['answer'],
'priority' => $consult['priority'],
'like_count' => $consult['like_count'],
'reply_time' => $consult['reply_time'],
'create_time' => $consult['create_time'],
'course' => $course,
'owner' => $owner,
];
}
$pager->items = $items;
return $pager;
}
}

View File

@ -58,7 +58,7 @@ class CourseList extends LogicService
return $this->handleCourses($pager);
}
protected function handleCourses($pager)
public function handleCourses($pager)
{
if ($pager->total_items == 0) {
return $pager;
@ -105,12 +105,24 @@ class CourseList extends LogicService
$query = [];
if (isset($params['teacher_id'])) {
$user = $validator->checkUser($params['teacher_id']);
$query['teacher_id'] = $user->id;
}
if (isset($params['tag_id'])) {
$tag = $validator->checkTag($params['tag_id']);
$query['tag_id'] = $tag->id;
}
if (isset($params['tc'])) {
$query['tc'] = $validator->checkTopCategory($params['tc']);
$category = $validator->checkCategory($params['tc']);
$query['tc'] = $category->id;
}
if (isset($params['sc'])) {
$query['sc'] = $validator->checkSubCategory($params['sc']);
$category = $validator->checkCategory($params['sc']);
$query['sc'] = $category->id;
}
if (isset($params['model'])) {

View File

@ -123,6 +123,11 @@ class QuestionList extends LogicService
$query = [];
if (isset($params['owner_id'])) {
$user = $validator->checkUser($params['owner_id']);
$query['owner_id'] = $user->id;
}
if (isset($params['tag_id'])) {
$tag = $validator->checkTag($params['tag_id']);
$query['tag_id'] = $tag->id;

View File

@ -7,9 +7,9 @@
namespace App\Services\Logic\Teacher\Console;
use App\Builders\ConsultList as ConsultListBuilder;
use App\Library\Paginator\Query as PagerQuery;
use App\Repos\TeacherConsult as TeacherConsultRepo;
use App\Services\Logic\Consult\ConsultList as ConsultListService;
use App\Services\Logic\Service as LogicService;
class ConsultList extends LogicService
@ -21,13 +21,12 @@ class ConsultList extends LogicService
$pagerQuery = new PagerQuery();
$params = $pagerQuery->getParams();
$sort = $pagerQuery->getSort();
$page = $pagerQuery->getPage();
$limit = $pagerQuery->getLimit();
$params = $pagerQuery->getParams();
$params['user_id'] = $user->id;
$params['teacher_id'] = $user->id;
$params['status'] = $params['status'] ?? null;
if ($params['status'] == 'pending') {
@ -45,43 +44,9 @@ class ConsultList extends LogicService
protected function handleConsults($pager)
{
if ($pager->total_items == 0) {
return $pager;
}
$service = new ConsultListService();
$builder = new ConsultListBuilder();
$consults = $pager->items->toArray();
$courses = $builder->getCourses($consults);
$chapters = $builder->getChapters($consults);
$users = $builder->getUsers($consults);
$items = [];
foreach ($consults as $consult) {
$course = $courses[$consult['course_id']] ?? new \stdClass();
$chapter = $chapters[$consult['chapter_id']] ?? new \stdClass();
$owner = $users[$consult['owner_id']] ?? new \stdClass();
$items[] = [
'id' => $consult['id'],
'question' => $consult['question'],
'answer' => $consult['answer'],
'priority' => $consult['priority'],
'like_count' => $consult['like_count'],
'reply_time' => $consult['reply_time'],
'create_time' => $consult['create_time'],
'course' => $course,
'chapter' => $chapter,
'owner' => $owner,
];
}
$pager->items = $items;
return $pager;
return $service->handleConsults($pager);
}
}

View File

@ -18,14 +18,14 @@ class LiveList extends LogicService
{
$user = $this->getLoginUser();
$teacherLiveRepo = new TeacherLiveRepo();
$pagerQuery = new PagerQuery();
$page = $pagerQuery->getPage();
$limit = $pagerQuery->getLimit();
$pager = $teacherLiveRepo->paginate($user->id, $page, $limit);
$repo = new TeacherLiveRepo();
$pager = $repo->paginate($user->id, $page, $limit);
if ($pager->total_items == 0) {
return $pager;

View File

@ -8,7 +8,8 @@
namespace App\Services\Logic\Teacher;
use App\Library\Paginator\Query as PagerQuery;
use App\Repos\TeacherCourse as TeacherCourseRepo;
use App\Repos\Course as CourseRepo;
use App\Services\Logic\Course\CourseList as CourseListService;
use App\Services\Logic\Service as LogicService;
use App\Services\Logic\UserTrait;
@ -19,55 +20,29 @@ class CourseList extends LogicService
public function handle($id)
{
$user = $this->checkUser($id);
$user = $this->checkUserCache($id);
$pagerQuery = new PagerQuery();
$sort = $pagerQuery->getSort();
$page = $pagerQuery->getPage();
$limit = $pagerQuery->getLimit();
$params = $pagerQuery->getParams();
$repo = new TeacherCourseRepo();
$params['teacher_id'] = $user->id;
$pager = $repo->paginate($user->id, $page, $limit);
$courseRepo = new CourseRepo();
$pager = $courseRepo->paginate($params, $sort, $page, $limit);
return $this->handleCourses($pager);
}
protected function handleCourses($pager)
{
if ($pager->total_items == 0) {
return $pager;
}
$service = new CourseListService();
$courses = $pager->items->toArray();
$baseUrl = kg_cos_url();
$items = [];
foreach ($courses as $course) {
$course['cover'] = $baseUrl . $course['cover'];
$items[] = [
'id' => $course['id'],
'title' => $course['title'],
'cover' => $course['cover'],
'market_price' => (float)$course['market_price'],
'vip_price' => (float)$course['vip_price'],
'rating' => (float)$course['rating'],
'model' => $course['model'],
'level' => $course['level'],
'user_count' => $course['user_count'],
'lesson_count' => $course['lesson_count'],
'review_count' => $course['review_count'],
'favorite_count' => $course['favorite_count'],
];
}
$pager->items = $items;
return $pager;
return $service->handleCourses($pager);
}
}

View File

@ -21,7 +21,7 @@ class AnswerList extends LogicService
public function handle($id)
{
$user = $this->checkUser($id);
$user = $this->checkUserCache($id);
$pagerQuery = new PagerQuery();

View File

@ -21,7 +21,7 @@ class ArticleList extends LogicService
public function handle($id)
{
$user = $this->checkUser($id);
$user = $this->checkUserCache($id);
$pagerQuery = new PagerQuery();
@ -29,7 +29,6 @@ class ArticleList extends LogicService
$params['owner_id'] = $user->id;
$params['published'] = ArticleModel::PUBLISH_APPROVED;
$params['private'] = 0;
$params['deleted'] = 0;
$sort = $pagerQuery->getSort();

View File

@ -21,7 +21,7 @@ class CourseList extends LogicService
public function handle($id)
{
$user = $this->checkUser($id);
$user = $this->checkUserCache($id);
$pagerQuery = new PagerQuery();
@ -34,14 +34,14 @@ class CourseList extends LogicService
$page = $pagerQuery->getPage();
$limit = $pagerQuery->getLimit();
$courseUserRepo = new CourseUserRepo();
$repo = new CourseUserRepo();
$pager = $courseUserRepo->paginate($params, $sort, $page, $limit);
$pager = $repo->paginate($params, $sort, $page, $limit);
return $this->handleCourses($pager);
return $this->handlePager($pager);
}
protected function handleCourses($pager)
protected function handlePager($pager)
{
if ($pager->total_items == 0) {
return $pager;

View File

@ -21,7 +21,7 @@ class QuestionList extends LogicService
public function handle($id)
{
$user = $this->checkUser($id);
$user = $this->checkUserCache($id);
$pagerQuery = new PagerQuery();

View File

@ -9,7 +9,6 @@ namespace App\Validators;
use App\Exceptions\BadRequest as BadRequestException;
use App\Models\Article as ArticleModel;
use App\Models\Category as CategoryModel;
class ArticleQuery extends Validator
{
@ -18,30 +17,21 @@ class ArticleQuery extends Validator
{
$validator = new Category();
$category = $validator->checkCategoryCache($id);
if (!$category) {
throw new BadRequestException('article_query.invalid_category');
}
if ($category->type != CategoryModel::TYPE_ARTICLE) {
throw new BadRequestException('article_query.invalid_category');
}
return $category;
return $validator->checkCategoryCache($id);
}
public function checkTag($id)
{
$validator = new Tag();
$tag = $validator->checkTagCache($id);
return $validator->checkTagCache($id);
}
if (!$tag) {
throw new BadRequestException('article_query.invalid_tag');
}
public function checkUser($id)
{
$validator = new User();
return $tag;
return $validator->checkUserCache($id);
}
public function checkSort($sort)

View File

@ -7,10 +7,7 @@
namespace App\Validators;
use App\Caches\Category as CategoryCache;
use App\Caches\Tag as TagCache;
use App\Exceptions\BadRequest as BadRequestException;
use App\Models\Category as CategoryModel;
use App\Models\Course as CourseModel;
class CourseQuery extends Validator
@ -20,30 +17,21 @@ class CourseQuery extends Validator
{
$validator = new Category();
$category = $validator->checkCategoryCache($id);
if (!$category) {
throw new BadRequestException('course_query.invalid_category');
}
if ($category->type != CategoryModel::TYPE_COURSE) {
throw new BadRequestException('course_query.invalid_category');
}
return $category;
return $validator->checkCategoryCache($id);
}
public function checkTag($id)
{
$validator = new Tag();
$tag = $validator->checkTagCache($id);
return $validator->checkTagCache($id);
}
if (!$tag) {
throw new BadRequestException('course_query.invalid_tag');
}
public function checkUser($id)
{
$validator = new User();
return $tag;
return $validator->checkUserCache($id);
}
public function checkLevel($level)

View File

@ -7,7 +7,6 @@
namespace App\Validators;
use App\Caches\Tag as TagCache;
use App\Exceptions\BadRequest as BadRequestException;
use App\Models\Question as QuestionModel;
@ -18,26 +17,21 @@ class QuestionQuery extends Validator
{
$validator = new Category();
$category = $validator->checkCategoryCache($id);
if (!$category) {
throw new BadRequestException('question_query.invalid_category');
}
return $category;
return $validator->checkCategoryCache($id);
}
public function checkTag($id)
{
$tagCache = new TagCache();
$validator = new Tag();
$tag = $tagCache->get($id);
return $validator->checkTagCache($id);
}
if (!$tag) {
throw new BadRequestException('question_query.invalid_tag');
}
public function checkUser($id)
{
$validator = new User();
return $tag;
return $validator->checkUserCache($id);
}
public function checkSort($sort)

View File

@ -155,7 +155,7 @@ final class V20210403184518 extends AbstractMigration
'id' => 5,
'parent_id' => 0,
'level' => 1,
'name' => '',
'name' => '师',
'path' => ',5,',
'target' => '_self',
'url' => '/teacher/list',

View File

@ -96,6 +96,20 @@
background-color: #f2f2f2;
}
.no-records {
padding: 20px;
color: #999;
text-align: center;
}
.no-records .icon {
margin-bottom: 10px;
}
.no-records .icon .layui-icon {
font-size: 100px;
}
.pager {
margin-top: 20px;
text-align: center;

View File

@ -0,0 +1,26 @@
layui.use(['jquery', 'helper'], function () {
var $ = layui.jquery;
var helper = layui.helper;
if ($('#tab-vod').length > 0) {
var $tabVod = $('#tab-vod');
helper.ajaxLoadHtml($tabVod.data('url'), $tabVod.attr('id'));
}
if ($('#tab-live').length > 0) {
var $tabLive = $('#tab-live');
helper.ajaxLoadHtml($tabLive.data('url'), $tabLive.attr('id'));
}
if ($('#tab-read').length > 0) {
var $tabRead = $('#tab-read');
helper.ajaxLoadHtml($tabRead.data('url'), $tabRead.attr('id'));
}
if ($('#tab-offline').length > 0) {
var $tabOffline = $('#tab-offline');
helper.ajaxLoadHtml($tabOffline.data('url'), $tabOffline.attr('id'));
}
});