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

整理前端代码

This commit is contained in:
xiaochong0302 2020-05-28 19:38:00 +08:00
parent abdb4e1584
commit 24214e8baa
16 changed files with 342 additions and 140 deletions

View File

@ -14,6 +14,7 @@ use App\Services\Frontend\Course\RelatedList as CourseRelatedListService;
use App\Services\Frontend\Course\ReviewList as CourseReviewListService; use App\Services\Frontend\Course\ReviewList as CourseReviewListService;
use App\Services\Frontend\Course\TeacherList as CourseTeacherListService; use App\Services\Frontend\Course\TeacherList as CourseTeacherListService;
use App\Services\Frontend\Course\TopicList as CourseTopicListService; use App\Services\Frontend\Course\TopicList as CourseTopicListService;
use Phalcon\Mvc\View;
/** /**
* @RoutePrefix("/course") * @RoutePrefix("/course")
@ -70,6 +71,18 @@ class CourseController extends Controller
$packages = $service->handle($id); $packages = $service->handle($id);
$service = new CourseReviewListService();
$reviews = $service->handle($id);
$reviews->items = kg_array_object($reviews->items);
$service = new CourseConsultListService();
$consults = $service->handle($id);
$consults->items = kg_array_object($consults->items);
$service = new CourseTeacherListService(); $service = new CourseTeacherListService();
$teachers = $service->handle($id); $teachers = $service->handle($id);
@ -89,6 +102,8 @@ class CourseController extends Controller
$this->view->setVar('course', $course); $this->view->setVar('course', $course);
$this->view->setVar('chapters', $chapters); $this->view->setVar('chapters', $chapters);
$this->view->setVar('packages', $packages); $this->view->setVar('packages', $packages);
$this->view->setVar('consults', $consults);
$this->view->setVar('reviews', $reviews);
$this->view->setVar('teachers', $teachers); $this->view->setVar('teachers', $teachers);
$this->view->setVar('topics', $topics); $this->view->setVar('topics', $topics);
$this->view->setVar('recommended_courses', $recommendedCourses); $this->view->setVar('recommended_courses', $recommendedCourses);
@ -130,7 +145,12 @@ class CourseController extends Controller
$pager = $service->handle($id); $pager = $service->handle($id);
return $this->jsonPaginate($pager); $pager->target = $this->request->get('target', 'trim', 'tab-consults');
$pager->items = kg_array_object($pager->items);
$this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
$this->view->setVar('pager', $pager);
} }
/** /**
@ -142,7 +162,12 @@ class CourseController extends Controller
$pager = $service->handle($id); $pager = $service->handle($id);
return $this->jsonPaginate($pager); $pager->target = $this->request->get('target', 'trim', 'tab-reviews');
$pager->items = kg_array_object($pager->items);
$this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
$this->view->setVar('pager', $pager);
} }
/** /**

View File

@ -0,0 +1,22 @@
{% if pager.total_pages > 0 %}
<div class="review-list">
{% for item in pager.items %}
{% set user_url = url({'for':'web.user.show','id':item.id}) %}
<div class="review-card clearfix">
<div class="avatar">
<a href="{{ user_url }}">
<img src="{{ item.user.avatar }}" alt="{{ item.user.name }}" title="{{ item.user.name }}">
</a>
</div>
<div class="info">
<div class="title">{{ item.question }}</div>
<div class="content">{{ item.answer }}</div>
<div class="footer">
<span>{{ date('Y-m-d H:i',item.create_time) }}</span>
</div>
</div>
</div>
{% endfor %}
</div>
{{ partial('partials/pager_ajax') }}
{% endif %}

View File

@ -3,15 +3,20 @@
{% block content %} {% block content %}
{{ partial('partials/macro_course') }} {{ partial('partials/macro_course') }}
{{ partial('course/list_filter') }} {{ partial('course/list_filter') }}
<div class="course-list clearfix"> {% if pager.total_pages > 0 %}
<div class="course-list module clearfix">
{% for item in pager.items %} {% for item in pager.items %}
{{ course_card(item) }} {{ course_card(item) }}
{% endfor %} {% endfor %}
</div> </div>
{{ partial('partials/pager') }} {{ partial('partials/pager') }}
{% else %}
<div class="search-empty module">
<div class="icon"><i class="layui-icon layui-icon-face-surprised"></i></div>
<div class="text">没有检索到相关课程哦</div>
</div>
{% endif %}
{% endblock %} {% endblock %}

View File

@ -1,9 +1,10 @@
<div class="course-filter"> <div class="course-filter module">
<div class="filter-group"> <div class="filter-group">
<div class="title">方向</div> <div class="title">方向</div>
<div class="content"> <div class="content">
{% set tc_val = request.get('tc','int','all') %}
{% for category in top_categories %} {% for category in top_categories %}
{% set class = request.get('tc','int','all') == category.id ? 'layui-btn layui-btn-xs' : 'none' %} {% set class = tc_val == category.id ? 'layui-btn layui-btn-xs' : 'none' %}
<a class="{{ class }}" href="{{ category.url }}">{{ category.name }}</a> <a class="{{ class }}" href="{{ category.url }}">{{ category.name }}</a>
{% endfor %} {% endfor %}
</div> </div>
@ -12,8 +13,9 @@
<div class="filter-group"> <div class="filter-group">
<div class="title">分类</div> <div class="title">分类</div>
<div class="content"> <div class="content">
{% set sc_val = request.get('sc','int','all') %}
{% for category in sub_categories %} {% for category in sub_categories %}
{% set class = request.get('sc','int','all') == category.id ? 'layui-btn layui-btn-xs' : 'none' %} {% set class = sc_val == category.id ? 'layui-btn layui-btn-xs' : 'none' %}
<a class="{{ class }}" href="{{ category.url }}">{{ category.name }}</a> <a class="{{ class }}" href="{{ category.url }}">{{ category.name }}</a>
{% endfor %} {% endfor %}
</div> </div>
@ -22,8 +24,9 @@
<div class="filter-group"> <div class="filter-group">
<div class="title">类型</div> <div class="title">类型</div>
<div class="content"> <div class="content">
{% set model_val = request.get('model','trim','all') %}
{% for model in models %} {% for model in models %}
{% set class = request.get('model','trim','all') == model.id ? 'layui-btn layui-btn-xs' : 'none' %} {% set class = model_val == model.id ? 'layui-btn layui-btn-xs' : 'none' %}
<a class="{{ class }}" href="{{ model.url }}">{{ model.name }}</a> <a class="{{ class }}" href="{{ model.url }}">{{ model.name }}</a>
{% endfor %} {% endfor %}
</div> </div>
@ -31,8 +34,9 @@
<div class="filter-group"> <div class="filter-group">
<div class="title">难度</div> <div class="title">难度</div>
<div class="content"> <div class="content">
{% set level_val = request.get('level','trim','all') %}
{% for level in levels %} {% for level in levels %}
{% set class = request.get('level','trim','all') == level.id ? 'layui-btn layui-btn-xs' : 'none' %} {% set class = level_val == level.id ? 'layui-btn layui-btn-xs' : 'none' %}
<a class="{{ class }}" href="{{ level.url }}">{{ level.name }}</a> <a class="{{ class }}" href="{{ level.url }}">{{ level.name }}</a>
{% endfor %} {% endfor %}
</div> </div>
@ -40,8 +44,9 @@
<div class="filter-group"> <div class="filter-group">
<div class="title">排序</div> <div class="title">排序</div>
<div class="content"> <div class="content">
{% set sort_val = request.get('sort','trim','score') %}
{% for sort in sorts %} {% for sort in sorts %}
{% set class = request.get('sort','trim','score') == sort.id ? 'layui-btn layui-btn-xs' : 'none' %} {% set class = sort_val == sort.id ? 'layui-btn layui-btn-xs' : 'none' %}
<a class="{{ class }}" href="{{ sort.url }}">{{ sort.name }}</a> <a class="{{ class }}" href="{{ sort.url }}">{{ sort.name }}</a>
{% endfor %} {% endfor %}
</div> </div>

View File

@ -0,0 +1,29 @@
{%- macro star_info(rating) %}
{% set stars = [1,2,3,4,5] %}
{% for val in stars if val <= rating %}
<i class="layui-icon layui-icon-star-fill"></i>
{% endfor %}
{%- endmacro %}
{% if pager.total_pages > 0 %}
<div class="review-list">
{% for item in pager.items %}
{% set user_url = url({'for':'web.user.show','id':item.id}) %}
<div class="review-card clearfix">
<div class="avatar">
<a href="{{ user_url }}">
<img src="{{ item.user.avatar }}" alt="{{ item.user.name }}" title="{{ item.user.name }}">
</a>
</div>
<div class="info">
<div class="rating">{{ star_info(item.rating) }}</div>
<div class="content">{{ item.content }}</div>
<div class="footer">
<span>{{ date('Y-m-d H:i',item.create_time) }}</span>
</div>
</div>
</div>
{% endfor %}
</div>
{{ partial('partials/pager_ajax') }}
{% endif %}

View File

@ -24,7 +24,7 @@
<div class="layout-main clearfix"> <div class="layout-main clearfix">
<div class="layout-content module"> <div class="layout-content module">
<div class="layui-tab layui-tab-brief course-info-tab"> <div class="layui-tab layui-tab-brief course-tab">
<ul class="layui-tab-title"> <ul class="layui-tab-title">
<li class="layui-this">详情</li> <li class="layui-this">详情</li>
<li>目录</li> <li>目录</li>
@ -42,7 +42,7 @@
<div class="layui-tab-item layui-show"> <div class="layui-tab-item layui-show">
<div class="course-details">{{ course.details }}</div> <div class="course-details">{{ course.details }}</div>
</div> </div>
<div class="layui-tab-item"> <div class="layui-tab-item" id="tab-chapters">
{% if course.model == 'vod' %} {% if course.model == 'vod' %}
{{ partial('course/chapters_vod') }} {{ partial('course/chapters_vod') }}
{% elseif course.model == 'live' %} {% elseif course.model == 'live' %}
@ -52,13 +52,17 @@
{% endif %} {% endif %}
</div> </div>
{% if show_packages == 1 %} {% if show_packages == 1 %}
<div class="layui-tab-item">{{ partial('course/packages') }}</div> <div class="layui-tab-item" id="tab-packages">
{{ partial('course/packages') }}
</div>
{% endif %} {% endif %}
{% if show_consults == 1 %} {% if show_consults == 1 %}
<div class="layui-tab-item">咨询</div> {% set consult_url = url({'for':'web.course.consults','id':course.id}) %}
<div class="layui-tab-item" id="tab-consults" data-url="{{ consult_url }}"></div>
{% endif %} {% endif %}
{% if show_reviews == 1 %} {% if show_reviews == 1 %}
<div class="layui-tab-item">评价</div> {% set review_url = url({'for':'web.course.reviews','id':course.id}) %}
<div class="layui-tab-item" id="tab-reviews" data-url="{{ review_url }}"></div>
{% endif %} {% endif %}
</div> </div>
</div> </div>
@ -67,15 +71,12 @@
{% if teachers %} {% if teachers %}
{{ partial('course/sidebar_teachers') }} {{ partial('course/sidebar_teachers') }}
{% endif %} {% endif %}
{% if topics %} {% if topics %}
{{ partial('course/sidebar_topics') }} {{ partial('course/sidebar_topics') }}
{% endif %} {% endif %}
{% if recommended_courses %} {% if recommended_courses %}
{{ partial('course/sidebar_recommended') }} {{ partial('course/sidebar_recommended') }}
{% endif %} {% endif %}
{% if related_courses %} {% if related_courses %}
{{ partial('course/sidebar_related') }} {{ partial('course/sidebar_related') }}
{% endif %} {% endif %}
@ -83,3 +84,23 @@
</div> </div>
{% endblock %} {% endblock %}
{% block inline_js %}
<script>
if ($('#tab-consults').length > 0) {
console.log('#tab-consults#');
var obj = $('#tab-consults');
helper.ajaxPager(obj.attr('data-url'), obj.attr('id'));
}
if ($('#tab-reviews').length > 0) {
console.log('#tab-reviews#');
var obj = $('#tab-reviews');
helper.ajaxPager(obj.attr('data-url'), obj.attr('id'));
}
</script>
{% endblock %}

View File

@ -2,6 +2,8 @@
{% block content %} {% block content %}
{{ partial('partials/macro_course') }}
{%- macro category_courses(courses) %} {%- macro category_courses(courses) %}
<div class="layui-tab layui-tab-brief"> <div class="layui-tab layui-tab-brief">
<ul class="layui-tab-title"> <ul class="layui-tab-title">
@ -14,31 +16,9 @@
{% for category in courses %} {% for category in courses %}
{% set class = loop.first ? 'layui-tab-item layui-show' : 'layui-tab-item' %} {% set class = loop.first ? 'layui-tab-item layui-show' : 'layui-tab-item' %}
<div class="{{ class }}"> <div class="{{ class }}">
<div class="module-course-list clearfix"> <div class="index-course-list clearfix">
{% for course in category.courses %} {% for course in category.courses %}
<div class="course-card"> {{ course_card(course) }}
<div class="cover">
<a href="{{ url({'for':'web.course.show','id':course.id}) }}" title="{{ course.title }}">
<img lay-src="{{ course.cover }}!cover_270" alt="{{ course.title }}">
</a>
</div>
<div class="title">
<a href="{{ url({'for':'web.course.show','id':course.id}) }}" title="{{ course.title }}">{{ substr(course.title,0,15) }}</a>
</div>
<div class="meta">
{% if course.market_price > 0 %}
<span class="price">¥{{ course.market_price }}</span>
<span class="level">中级</span>
<span class="lesson">{{ course.lesson_count }}节课</span>
<span class="user">{{ course.user_count }}人购买</span>
{% else %}
<span class="free">免费</span>
<span class="level">中级</span>
<span class="lesson">{{ course.lesson_count }}节课</span>
<span class="user">{{ course.user_count }}人报名</span>
{% endif %}
</div>
</div>
{% endfor %} {% endfor %}
</div> </div>
</div> </div>
@ -47,7 +27,7 @@
</div> </div>
{%- endmacro %} {%- endmacro %}
<div class="index-module index-carousel"> <div class="index-module index-carousel module">
<div class="layui-carousel" id="carousel"> <div class="layui-carousel" id="carousel">
<div class="carousel" carousel-item> <div class="carousel" carousel-item>
{% for slide in slides %} {% for slide in slides %}
@ -61,21 +41,21 @@
</div> </div>
</div> </div>
<div class="index-module"> <div class="index-module module">
<div class="header">新上课程</div> <div class="header">新上课程</div>
<div class="content"> <div class="content">
{{ category_courses(new_courses) }} {{ category_courses(new_courses) }}
</div> </div>
</div> </div>
<div class="index-module"> <div class="index-module module">
<div class="header">免费课程</div> <div class="header">免费课程</div>
<div class="content"> <div class="content">
{{ category_courses(free_courses) }} {{ category_courses(free_courses) }}
</div> </div>
</div> </div>
<div class="index-module"> <div class="index-module module">
<div class="header">会员课程</div> <div class="header">会员课程</div>
<div class="content"> <div class="content">
{{ category_courses(vip_courses) }} {{ category_courses(vip_courses) }}

View File

@ -25,11 +25,11 @@
<div class="course-card"> <div class="course-card">
<div class="cover"> <div class="cover">
<a href="{{ course_url }}"> <a href="{{ course_url }}">
<img src="{{ course.cover }}!cover_270" alt="{{ course.title }}"> <img src="{{ course.cover }}!cover_270" alt="{{ course.title|e }}" title="{{ course.title|e }}">
</a> </a>
</div> </div>
<div class="title"> <div class="title">
<a href="{{ course_url }}">{{ substr(course.title,0,15) }}</a> <a href="{{ course_url }}" title="{{ course.title|e }}">{{ substr(course.title,0,15) }}</a>
</div> </div>
<div class="meta"> <div class="meta">
{% if course.market_price > 0 %} {% if course.market_price > 0 %}
@ -51,11 +51,11 @@
{% set course_url = url({'for':'web.course.show','id':course.id}) %} {% set course_url = url({'for':'web.course.show','id':course.id}) %}
<div class="sidebar-course-card clearfix"> <div class="sidebar-course-card clearfix">
<div class="cover"> <div class="cover">
<img src="{{ course.cover }}!cover_270" alt="{{ course.title }}"> <img src="{{ course.cover }}!cover_270" alt="{{ course.title|e }}">
</div> </div>
<div class="info"> <div class="info">
<div class="title"> <div class="title">
<a href="{{ course_url }}" title="{{ course.title }}">{{ substr(course.title,0,15) }}</a> <a href="{{ course_url }}" title="{{ course.title|e }}">{{ substr(course.title,0,15) }}</a>
</div> </div>
<div class="meta"> <div class="meta">
{% if course.market_price > 0 %} {% if course.market_price > 0 %}

View File

@ -0,0 +1,10 @@
{% if pager.total_pages > 1 %}
<div class="pager">
<div class="layui-box layui-laypage layui-laypage-default">
<a href="javascript:" data-target="{{ pager.target }}" data-url="{{ pager.first }}">首页</a>
<a href="javascript:" data-target="{{ pager.target }}" data-url="{{ pager.previous }}">上页</a>
<a href="javascript:" data-target="{{ pager.target }}" data-url="{{ pager.next }}">下页</a>
<a href="javascript:" data-target="{{ pager.target }}" data-url="{{ pager.last }}">尾页</a>
</div>
</div>
{% endif %}

View File

@ -1,15 +1,15 @@
{% if pager.total_pages > 0 %} <div class="search-course-list">
<div class="search-course-list">
{% for item in pager.items %} {% for item in pager.items %}
{% set course_url = url({'for':'web.course.show','id':item.id}) %}
<div class="search-course-card clearfix"> <div class="search-course-card clearfix">
<div class="cover"> <div class="cover">
<a href="{{ url({'for':'web.course.show','id':item.id}) }}"> <a href="{{ course_url }}">
<img src="{{ item.cover }}!cover_270" alt="{{ item.title|striptags }}"> <img src="{{ item.cover }}!cover_270" alt="{{ item.title|e }}">
</a> </a>
</div> </div>
<div class="info"> <div class="info">
<div class="title"> <div class="title">
<a href="{{ url({'for':'web.course.show','id':item.id}) }}">{{ item.title }}</a> <a href="{{ course_url }}">{{ item.title }}</a>
</div> </div>
<div class="summary">{{ item.summary }}</div> <div class="summary">{{ item.summary }}</div>
<div class="meta"> <div class="meta">
@ -22,14 +22,4 @@
</div> </div>
</div> </div>
{% endfor %} {% endfor %}
</div> </div>
{% else %}
<div class="search-empty">
<div class="icon">
<i class="layui-icon layui-icon-face-surprised"></i>
</div>
<div class="text">
没有找到<span class="query">{{ request.get('query') }}</span>相关内容,换个关键字试试吧!
</div>
</div>
{% endif %}

View File

@ -3,23 +3,31 @@
{% block content %} {% block content %}
{% set type = request.get('type','trim','course') %} {% set type = request.get('type','trim','course') %}
{% set query = request.get('query','striptags','') %}
{{ partial('partials/macro_course') }} {{ partial('partials/macro_course') }}
<div class="layui-breadcrumb breadcrumb"> <div class="layui-breadcrumb breadcrumb">
<a href="/">首页</a> <a href="/">首页</a>
<a href="#">搜索</a> <a href="#">搜索</a>
<a><cite>{{ request.get('query')|striptags }}</cite></a> <a><cite>{{ query }}</cite></a>
</div> </div>
<div class="layout-main clearfix"> <div class="layout-main clearfix">
<div class="layout-content module"> <div class="layout-content module">
{% if pager.total_pages > 0 %}
{% if type == 'course' %} {% if type == 'course' %}
{{ partial('search/content_course') }} {{ partial('search/content_course') }}
{% elseif type == 'other' %} {% elseif type == 'other' %}
{{ partial('search/content_other') }} {{ partial('search/content_other') }}
{% endif %} {% endif %}
{{ partial('partials/pager') }} {{ partial('partials/pager') }}
{% else %}
<div class="search-empty">
<div class="icon"><i class="layui-icon layui-icon-face-surprised"></i></div>
<div class="text">没有找到<span class="query">{{ query }}</span>相关内容,换个关键字试试吧!</div>
</div>
{% endif %}
</div> </div>
<div class="layout-sidebar"> <div class="layout-sidebar">
{{ partial('search/sidebar') }} {{ partial('search/sidebar') }}

View File

@ -30,70 +30,64 @@ class Course extends Repository
{ {
$builder = $this->modelsManager->createBuilder(); $builder = $this->modelsManager->createBuilder();
if (!empty($where['category_id'])) { $builder->from(CourseModel::class);
$where['category_id'] = is_array($where['category_id']) ? $where['category_id'] : [$where['category_id']];
$builder->addFrom(CourseModel::class, 'c');
$builder->join(CourseCategoryModel::class, 'c.id = cc.course_id', 'cc');
$builder->inWhere('cc.category_id', $where['category_id']);
} elseif (!empty($where['teacher_id'])) {
$where['teacher_id'] = is_array($where['teacher_id']) ? $where['teacher_id'] : [$where['teacher_id']];
$builder->addFrom(CourseModel::class, 'c');
$builder->join(CourseUserModel::class, 'c.id = cu.course_id', 'cu');
$builder->inWhere('cu.user_id', $where['teacher_id']);
$builder->andWhere('cu.role_type = :role_type:', ['role_type' => CourseUserModel::ROLE_TEACHER]);
} else {
$builder->addFrom(CourseModel::class, 'c');
$builder->where('1 = 1'); $builder->where('1 = 1');
if (!empty($where['category_id'])) {
$where['id'] = $this->getCategoryCourseIds($where['category_id']);
} elseif (!empty($where['teacher_id'])) {
$where['id'] = $this->getTeacherCourseIds($where['teacher_id']);
} }
if (!empty($where['id'])) { if (!empty($where['id'])) {
if (is_array($where['id'])) { if (is_array($where['id'])) {
$builder->inWhere('c.id', $where['id']); $builder->inWhere('id', $where['id']);
} else { } else {
$builder->andWhere('c.id = :id:', ['id' => $where['id']]); $builder->andWhere('id = :id:', ['id' => $where['id']]);
} }
} }
if (!empty($where['title'])) { if (!empty($where['title'])) {
$builder->andWhere('c.title LIKE :title:', ['title' => "%{$where['title']}%"]); $builder->andWhere('title LIKE :title:', ['title' => "%{$where['title']}%"]);
} }
if (!empty($where['model'])) { if (!empty($where['model'])) {
$builder->andWhere('c.model = :model:', ['model' => $where['model']]); $builder->andWhere('model = :model:', ['model' => $where['model']]);
} }
if (!empty($where['level'])) { if (!empty($where['level'])) {
$builder->andWhere('c.level = :level:', ['level' => $where['level']]); $builder->andWhere('level = :level:', ['level' => $where['level']]);
} }
if (isset($where['free'])) { if (isset($where['free'])) {
if ($where['free'] == 1) { if ($where['free'] == 1) {
$builder->andWhere('c.market_price = 0'); $builder->andWhere('market_price = 0');
} else { } else {
$builder->andWhere('c.market_price > 0'); $builder->andWhere('market_price > 0');
} }
} }
if (isset($where['published'])) { if (isset($where['published'])) {
$builder->andWhere('c.published = :published:', ['published' => $where['published']]); $builder->andWhere('published = :published:', ['published' => $where['published']]);
} }
if (isset($where['deleted'])) { if (isset($where['deleted'])) {
$builder->andWhere('c.deleted = :deleted:', ['deleted' => $where['deleted']]); $builder->andWhere('deleted = :deleted:', ['deleted' => $where['deleted']]);
} }
switch ($sort) { switch ($sort) {
case 'score': case 'score':
$orderBy = 'c.score DESC'; $orderBy = 'score DESC';
break; break;
case 'rating': case 'rating':
$orderBy = 'c.rating DESC'; $orderBy = 'rating DESC';
break; break;
case 'popular': case 'popular':
$orderBy = 'c.user_count DESC'; $orderBy = 'user_count DESC';
break; break;
default: default:
$orderBy = 'c.id DESC'; $orderBy = 'id DESC';
break; break;
} }
@ -335,4 +329,34 @@ class Course extends Repository
]); ]);
} }
protected function getCategoryCourseIds($categoryId)
{
$categoryIds = is_array($categoryId) ? $categoryId : [$categoryId];
$repo = new CourseCategory();
$rows = $repo->findByCategoryIds($categoryIds);
if ($rows->count() == 0) {
return [];
}
return kg_array_column($rows->toArray(), 'course_id');
}
protected function getTeacherCourseIds($teacherId)
{
$teacherIds = is_array($teacherId) ? $teacherId : [$teacherId];
$repo = new CourseUser();
$rows = $repo->findByTeacherIds($teacherIds);
if ($rows->count() == 0) {
return [];
}
return kg_array_column($rows->toArray(), 'course_id');
}
} }

View File

@ -27,7 +27,7 @@ class CourseCategory extends Repository
* @param array $categoryIds * @param array $categoryIds
* @return ResultsetInterface|Resultset|CourseCategoryModel[] * @return ResultsetInterface|Resultset|CourseCategoryModel[]
*/ */
public function findByCategoryIds($categoryIds) public function findByCategoryIds(array $categoryIds)
{ {
return CourseCategoryModel::query() return CourseCategoryModel::query()
->inWhere('category_id', $categoryIds) ->inWhere('category_id', $categoryIds)
@ -38,7 +38,7 @@ class CourseCategory extends Repository
* @param array $courseIds * @param array $courseIds
* @return ResultsetInterface|Resultset|CourseCategoryModel[] * @return ResultsetInterface|Resultset|CourseCategoryModel[]
*/ */
public function findByCourseIds($courseIds) public function findByCourseIds(array $courseIds)
{ {
return CourseCategoryModel::query() return CourseCategoryModel::query()
->inWhere('course_id', $courseIds) ->inWhere('course_id', $courseIds)

View File

@ -5,6 +5,8 @@ namespace App\Repos;
use App\Library\Paginator\Adapter\QueryBuilder as PagerQueryBuilder; use App\Library\Paginator\Adapter\QueryBuilder as PagerQueryBuilder;
use App\Models\CourseUser as CourseUserModel; use App\Models\CourseUser as CourseUserModel;
use Phalcon\Mvc\Model; use Phalcon\Mvc\Model;
use Phalcon\Mvc\Model\Resultset;
use Phalcon\Mvc\Model\ResultsetInterface;
class CourseUser extends Repository class CourseUser extends Repository
{ {
@ -116,4 +118,18 @@ class CourseUser extends Repository
]); ]);
} }
/**
* @param array $teacherIds
* @return ResultsetInterface|Resultset|CourseUserModel[]
*/
public function findByTeacherIds(array $teacherIds)
{
$roleType = CourseUserModel::ROLE_TEACHER;
return CourseUserModel::query()
->inWhere('user_id', $teacherIds)
->andWhere('role_type = :role_type:', ['role_type' => $roleType])
->execute();
}
} }

View File

@ -118,8 +118,8 @@ body {
width: 320px; width: 320px;
} }
.index-module { .index-module .layui-tab {
margin-bottom: 15px; margin-bottom: 0;
} }
.index-module .layui-tab-title { .index-module .layui-tab-title {
@ -127,17 +127,17 @@ body {
} }
.index-module .layui-tab-content { .index-module .layui-tab-content {
padding: 20px 0; padding: 20px 0 0 0;
} }
.index-module .header { .index-module .header {
text-align: center; text-align: center;
font-size: 20px; font-size: 18px;
line-height: 30px; padding-bottom: 15px;
border-bottom: 1px solid #f6f6f6;
} }
.index-carousel { .index-carousel {
margin-bottom: 30px;
text-align: center; text-align: center;
} }
@ -230,6 +230,7 @@ body {
} }
.query-badge { .query-badge {
padding: 2px 5px;
margin-right: 5px; margin-right: 5px;
margin-bottom: 5px; margin-bottom: 5px;
} }
@ -281,7 +282,6 @@ body {
.filter-group { .filter-group {
padding-bottom: 5px; padding-bottom: 5px;
border-bottom: 1px dashed #ccc;
height: 40px; height: 40px;
line-height: 40px; line-height: 40px;
} }
@ -327,12 +327,12 @@ body {
margin-right: 5px; margin-right: 5px;
} }
.course-info-tab { .course-tab {
margin: 0; margin: 0;
} }
.course-info-tab .layui-tab-content { .course-tab .layui-tab-content {
padding: 20px 0; padding: 30px 0;
} }
.lesson-item { .lesson-item {
@ -384,6 +384,7 @@ body {
width: 180px; width: 180px;
font-size: 12px; font-size: 12px;
text-align: center; text-align: center;
overflow: hidden;
} }
.package-info span { .package-info span {
@ -391,6 +392,7 @@ body {
} }
.package-info .title { .package-info .title {
padding: 0 10px;
margin-bottom: 10px; margin-bottom: 10px;
} }
@ -416,22 +418,22 @@ body {
} }
.package-course-list { .package-course-list {
width: 580px; width: 560px;
height: 170px; height: 170px;
overflow-x: auto; overflow-x: auto;
white-space: nowrap; white-space: nowrap;
} }
.package-course-card { .package-course-card {
width: 180px; width: 175px;
display: inline-block; display: inline-block;
margin-right: 10px; margin-right: 5px;
vertical-align: top; vertical-align: top;
} }
.package-course-card .cover { .package-course-card .cover {
width: 180px; width: 175px;
height: 96px; height: 95px;
margin-bottom: 10px; margin-bottom: 10px;
} }
@ -445,6 +447,59 @@ body {
white-space: normal; white-space: normal;
} }
.review-card {
padding-bottom: 10px;
margin-bottom: 10px;
border-bottom: 1px dashed #ccc;
}
.review-card:last-child {
border-bottom: none;
}
.review-card .avatar {
float: left;
width: 60px;
height: 60px;
margin-right: 15px;
}
.review-card .avatar img {
width: 100%;
height: 100%;
border-radius: 60px;
}
.review-card .info {
float: left;
width: 650px;
}
.review-card .rating {
margin-bottom: 10px;
}
.review-card .rating .layui-icon {
color: orange;
}
.review-card .title {
margin-bottom: 10px;
}
.review-card .content {
margin-bottom: 10px;
color: #999;
font-size: 12px;
word-wrap: break-word;
white-space: pre-wrap;
}
.review-card .footer {
color: #999;
font-size: 12px;
}
.sidebar-teacher-card { .sidebar-teacher-card {
margin-bottom: 15px; margin-bottom: 15px;
} }
@ -476,9 +531,9 @@ body {
} }
.topic-badge { .topic-badge {
padding: 5px; padding: 2px 5px;
margin-right: 10px; margin-right: 5px;
margin-bottom: 10px; margin-bottom: 5px;
} }
.sidebar-course-card { .sidebar-course-card {

View File

@ -20,6 +20,16 @@ util.fixbar({
} }
}); });
var helper = {};
helper.ajaxPager = function (url, target) {
var index = layer.load();
$.get(url, function (html) {
$('#' + target).html(html);
layer.close(index);
});
}
form.on('submit(go)', function (data) { form.on('submit(go)', function (data) {
var submit = $(this); var submit = $(this);
submit.attr('disabled', true).addClass('layui-btn-disabled'); submit.attr('disabled', true).addClass('layui-btn-disabled');
@ -74,6 +84,8 @@ $('.kg-delete').on('click', function () {
}); });
}); });
$('.kg-back').on('click', function () { $('body').on('click', '.layui-laypage > a', function () {
window.history.back(); var url = $(this).attr('data-url');
var target = $(this).attr('data-target');
helper.ajaxPager(url, target);
}); });