mirror of
https://gitee.com/koogua/course-tencent-cloud.git
synced 2025-06-24 20:06:09 +08:00
阶段性优化
This commit is contained in:
parent
5268e6370c
commit
3dd5490bdb
@ -39,7 +39,7 @@
|
||||
<th>图标</th>
|
||||
<th>名称</th>
|
||||
<th>层级</th>
|
||||
<th>子类</th>
|
||||
<th>子节点</th>
|
||||
<th>排序</th>
|
||||
<th>发布</th>
|
||||
<th>操作</th>
|
||||
|
@ -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>
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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 }}">
|
||||
|
@ -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 %}
|
4
app/Http/Home/Views/partials/empty.volt
Normal file
4
app/Http/Home/Views/partials/empty.volt
Normal 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>
|
@ -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>
|
||||
|
@ -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 %}
|
||||
|
16
app/Http/Home/Views/teacher/courses.volt
Normal file
16
app/Http/Home/Views/teacher/courses.volt
Normal 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 %}
|
@ -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>
|
||||
|
81
app/Http/Home/Views/teacher/show.volt
Normal file
81
app/Http/Home/Views/teacher/show.volt
Normal 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 %}
|
@ -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');
|
||||
|
@ -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;
|
||||
|
73
app/Services/Logic/Consult/ConsultList.php
Normal file
73
app/Services/Logic/Consult/ConsultList.php
Normal 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;
|
||||
}
|
||||
|
||||
}
|
@ -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'])) {
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ class AnswerList extends LogicService
|
||||
|
||||
public function handle($id)
|
||||
{
|
||||
$user = $this->checkUser($id);
|
||||
$user = $this->checkUserCache($id);
|
||||
|
||||
$pagerQuery = new PagerQuery();
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
|
@ -21,7 +21,7 @@ class QuestionList extends LogicService
|
||||
|
||||
public function handle($id)
|
||||
{
|
||||
$user = $this->checkUser($id);
|
||||
$user = $this->checkUserCache($id);
|
||||
|
||||
$pagerQuery = new PagerQuery();
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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',
|
||||
|
@ -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;
|
||||
|
26
public/static/home/js/teacher.show.js
Normal file
26
public/static/home/js/teacher.show.js
Normal 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'));
|
||||
}
|
||||
|
||||
});
|
Loading…
x
Reference in New Issue
Block a user