1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-06-29 13:51:37 +08:00

整理前端代码

This commit is contained in:
xiaochong0302 2020-05-30 19:51:20 +08:00
parent 24214e8baa
commit ea8f2732fd
22 changed files with 408 additions and 246 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\TeacherList as CourseTeacherListService;
use App\Services\Frontend\Course\TopicList as CourseTopicListService;
use App\Services\Frontend\Reward\OptionList as RewardOptionList;
use Phalcon\Mvc\View;
/**
@ -61,66 +62,24 @@ class CourseController extends Controller
$service = new CourseQueryService();
$categoryPaths = $service->handleCategoryPaths($course['category_id']);
$course['category_paths'] = $service->handleCategoryPaths($course['category_id']);
$service = new CourseChapterListService();
$chapters = $service->handle($id);
$service = new CoursePackageListService();
$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();
$teachers = $service->handle($id);
$service = new CourseTopicListService();
$service = new RewardOptionList();
$topics = $service->handle($id);
$service = new CourseRecommendedListService();
$recommendedCourses = $service->handle($id);
$service = new CourseRelatedListService();
$relatedCourses = $service->handle($id);
$rewardOptions = $service->handle();
$this->view->setVar('course', $course);
$this->view->setVar('chapters', $chapters);
$this->view->setVar('packages', $packages);
$this->view->setVar('consults', $consults);
$this->view->setVar('reviews', $reviews);
$this->view->setVar('teachers', $teachers);
$this->view->setVar('topics', $topics);
$this->view->setVar('recommended_courses', $recommendedCourses);
$this->view->setVar('related_courses', $relatedCourses);
$this->view->setVar('category_paths', $categoryPaths);
}
/**
* @Get("/{id:[0-9]+}/chapters", name="web.course.chapters")
*/
public function chaptersAction($id)
{
$service = new CourseChapterListService();
$chapters = $service->handle($id);
return $this->jsonSuccess(['chapters' => $chapters]);
$this->view->setVar('reward_options', $rewardOptions);
}
/**
@ -132,22 +91,23 @@ class CourseController extends Controller
$packages = $service->handle($id);
return $this->jsonSuccess(['packages' => $packages]);
$this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
$this->view->setVar('packages', $packages);
}
/**
* @Get("/{id:[0-9]+}/consults", name="web.course.consults")
*/
public function consultsAction($id)
{
$target = $this->request->get('target', 'trim', 'tab-consults');
$service = new CourseConsultListService();
$pager = $service->handle($id);
$pager->target = $this->request->get('target', 'trim', 'tab-consults');
$pager->items = kg_array_object($pager->items);
$pager->target = $target;
$this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
$this->view->setVar('pager', $pager);
@ -158,30 +118,19 @@ class CourseController extends Controller
*/
public function reviewsAction($id)
{
$target = $this->request->get('target', 'trim', 'tab-reviews');
$service = new CourseReviewListService();
$pager = $service->handle($id);
$pager->target = $this->request->get('target', 'trim', 'tab-reviews');
$pager->items = kg_array_object($pager->items);
$pager->target = $target;
$this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
$this->view->setVar('pager', $pager);
}
/**
* @Get("/{id:[0-9]+}/teachers", name="web.course.teachers")
*/
public function teachersAction($id)
{
$service = new CourseTeacherListService();
$teachers = $service->handle($id);
return $this->jsonSuccess(['teachers' => $teachers]);
}
/**
* @Get("/{id:[0-9]+}/recommended", name="web.course.recommended")
*/
@ -191,7 +140,8 @@ class CourseController extends Controller
$courses = $service->handle($id);
return $this->jsonSuccess(['courses' => $courses]);
$this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
$this->view->setVar('courses', $courses);
}
/**
@ -203,7 +153,8 @@ class CourseController extends Controller
$courses = $service->handle($id);
return $this->jsonSuccess(['courses' => $courses]);
$this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
$this->view->setVar('courses', $courses);
}
/**
@ -215,7 +166,20 @@ class CourseController extends Controller
$topics = $service->handle($id);
return $this->jsonSuccess(['topics' => $topics]);
$this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
$this->view->setVar('topics', $topics);
}
/**
* @Get("/{id:[0-9]+}/reward", name="web.course.reward")
*/
public function rewardAction($id)
{
$service = new RewardOptionList();
$options = $service->handle();
$this->view->setVar('options', $options);
}
/**

View File

@ -23,9 +23,9 @@ class OrderController extends Controller
$service = new OrderConfirmService();
$info = $service->handle($itemId, $itemType);
$confirm = $service->handle($itemId, $itemType);
$this->view->setVar('info', $info);
$this->view->setVar('confirm', $confirm);
}
/**

View File

@ -0,0 +1,65 @@
{%- macro vod_lesson_info(lesson) %}
{% set url = lesson.me.owned ? url({'for':'web.chapter.show','id':lesson.id}) : 'javascript:' %}
<a href="{{ url }}">
<i class="layui-icon layui-icon-play"></i>
<span class="title">{{ lesson.title }}</span>
{% if lesson.free == 1 %}
<span class="layui-badge free-badge">免费</span>
{% endif %}
{% if lesson.me.duration > 0 %}
<span class="study-time" title="学习时长:{{ lesson.me.duration|total_duration }}"><i class="layui-icon layui-icon-time"></i></span>
{% endif %}
<span class="duration">{{ lesson.attrs.duration|total_duration }}</span>
</a>
{%- endmacro %}
{%- macro live_lesson_info(lesson) %}
{% set url = lesson.me.owned ? url({'for':'web.chapter.show','id':lesson.id}) : 'javascript:' %}
{% set over_flag = lesson.attrs.end_time < time() ? '已结束' : '' %}
<a href="{{ url }}">
<i class="layui-icon layui-icon-video"></i>
<span class="title">{{ lesson.title }}</span>
{% if lesson.free == 1 %}
<span class="layui-badge free-badge">免费</span>
{% endif %}
{% if lesson.me.duration > 0 %}
<span class="study-time" title="学习时长:{{ lesson.me.duration|total_duration }}"><i class="layui-icon layui-icon-time"></i></span>
{% endif %}
<span class="live">{{ date('m月d日',lesson.attrs.start_time) }} {{ date('H:i',lesson.attrs.start_time) }}~{{ date('H:i',lesson.attrs.end_time) }} {{ over_flag }}</span>
</a>
{%- endmacro %}
{%- macro read_lesson_info(lesson) %}
{% set url = lesson.me.owned ? url({'for':'web.chapter.show','id':lesson.id}) : 'javascript:' %}
<a href="{{ url }}">
<i class="layui-icon layui-icon-read"></i>
<span class="title">{{ lesson.title|e }}</span>
{% if lesson.free == 1 %}
<span class="layui-badge free-badge">免费</span>
{% endif %}
{% if lesson.me.duration > 0 %}
<span class="study-time" title="学习时长:{{ lesson.me.duration|total_duration }}"><i class="layui-icon layui-icon-time"></i></span>
{% endif %}
</a>
{%- endmacro %}
<div class="layui-collapse">
{% for chapter in chapters %}
<div class="layui-colla-item">
<h2 class="layui-colla-title">{{ chapter.title }}</h2>
<div class="layui-colla-content layui-show">
<ul class="lesson-list">
{% for lesson in chapter.children %}
{% if course.model == 'vod' %}
<li class="lesson-item clearfix">{{ vod_lesson_info(lesson) }}</li>
{% elseif course.model == 'live' %}
<li class="lesson-item clearfix">{{ live_lesson_info(lesson) }}</li>
{% elseif course.model == 'read' %}
<li class="lesson-item clearfix">{{ read_lesson_info(lesson) }}</li>
{% endif %}
{% endfor %}
</ul>
</div>
</div>
{% endfor %}
</div>

View File

@ -1,33 +0,0 @@
{%- macro live_lesson_info(lesson) %}
{% set url = lesson.me.owned ? url({'for':'web.chapter.show','id':lesson.id}) : 'javascript:' %}
{% set over_flag = lesson.attrs.end_time < time() ? '已结束' : '' %}
<a href="{{ url }}">
<i class="layui-icon layui-icon-video"></i>
<span class="title">{{ lesson.title }}</span>
{% if lesson.free == 1 %}
<span class="layui-badge free-badge">免费</span>
{% endif %}
{% if lesson.me.duration > 0 %}
<span class="study-time" title="学习时长:{{ lesson.me.duration|total_duration }}"><i class="layui-icon layui-icon-time"></i></span>
{% endif %}
<span class="live">{{ date('m月d日',lesson.attrs.start_time) }} {{ date('H:i',lesson.attrs.start_time) }}~{{ date('H:i',lesson.attrs.end_time) }} {{ over_flag }}</span>
</a>
{%- endmacro %}
<div class="layui-collapse">
{% for chapter in chapters %}
<div class="layui-colla-item">
<h2 class="layui-colla-title">{{ chapter.title }}</h2>
<div class="layui-colla-content layui-show">
<ul class="lesson-list">
{% for lesson in chapter.children %}
<li class="lesson-item">{{ live_lesson_info(lesson) }}</li>
{% endfor %}
</ul>
</div>
</div>
{% endfor %}
</div>

View File

@ -1,31 +0,0 @@
{%- macro read_lesson_info(lesson) %}
{% set url = lesson.me.owned ? url({'for':'web.chapter.show','id':lesson.id}) : 'javascript:' %}
<a href="{{ url }}">
<i class="layui-icon layui-icon-read"></i>
<span class="title">{{ lesson.title|e }}</span>
{% if lesson.free == 1 %}
<span class="layui-badge free-badge">免费</span>
{% endif %}
{% if lesson.me.duration > 0 %}
<span class="study-time" title="学习时长:{{ lesson.me.duration|total_duration }}"><i class="layui-icon layui-icon-time"></i></span>
{% endif %}
</a>
{%- endmacro %}
<div class="layui-collapse">
{% for chapter in chapters %}
<div class="layui-colla-item">
<h2 class="layui-colla-title">{{ chapter.title|e }}</h2>
<div class="layui-colla-content layui-show">
<ul class="lesson-list">
{% for lesson in chapter.children %}
<li class="lesson-item">{{ read_lesson_info(lesson) }}</li>
{% endfor %}
</ul>
</div>
</div>
{% endfor %}
</div>

View File

@ -1,32 +0,0 @@
{%- macro vod_lesson_info(lesson) %}
{% set url = lesson.me.owned ? url({'for':'web.chapter.show','id':lesson.id}) : 'javascript:' %}
<a href="{{ url }}">
<i class="layui-icon layui-icon-play"></i>
<span class="title">{{ lesson.title }}</span>
{% if lesson.free == 1 %}
<span class="layui-badge free-badge">免费</span>
{% endif %}
{% if lesson.me.duration > 0 %}
<span class="study-time" title="学习时长:{{ lesson.me.duration|total_duration }}"><i class="layui-icon layui-icon-time"></i></span>
{% endif %}
<span class="duration">{{ lesson.attrs.duration|total_duration }}</span>
</a>
{%- endmacro %}
<div class="layui-collapse">
{% for chapter in chapters %}
<div class="layui-colla-item">
<h2 class="layui-colla-title">{{ chapter.title }}</h2>
<div class="layui-colla-content layui-show">
<ul class="lesson-list">
{% for lesson in chapter.children %}
<li class="lesson-item clearfix">{{ vod_lesson_info(lesson) }}</li>
{% endfor %}
</ul>
</div>
</div>
{% endfor %}
</div>

View File

@ -1,20 +1,43 @@
<div class="cover">
<img src="{{ course.cover }}" alt="{{ course.summary|e }}">
<img src="{{ course.cover }}" alt="{{ course.title|e }}">
</div>
<div class="info">
<p class="duration">课程时长:{{ course.attrs.duration|total_duration }}</p>
<p class="expiry">
<span class="study-expiry">学习期限:<span class="layui-badge-rim">{{ course.study_expiry }}个月</span></span>
<span class="refund-expiry">退款期限:<span class="layui-badge-rim">{{ course.refund_expiry }}天</span></span>
{% if course.model == 'vod' %}
<p>课程时长 <span>{{ course.attrs.duration|total_duration }}</span></p>
{% elseif course.model == 'live' %}
<p>直播时间 <span>{{ course.attrs.start_date }} ~ {{ course.attrs.end_date }}</span></p>
{% endif %}
{% if course.market_price > 0 %}
<p>
学习期限 <span class="expiry">{{ course.study_expiry }}个月</span>
退款期限 <span class="expiry">{{ course.refund_expiry }}天</span>
</p>
{% endif %}
<p>
{% if course.market_price > 0 %}
市场价格 <span class="price">¥{{ course.market_price }}</span>
{% else %}
市场价格 <span class="free">免费</span>
{% endif %}
{% if course.vip_price > 0 %}
会员价格 <span class="price">¥{{ course.vip_price }}</span>
{% else %}
会员价格 <span class="free">免费</span>
{% endif %}
</p>
<p class="price">
<span class="market-price">市场价格:<span class="layui-badge-rim">¥{{ course.market_price }}</span></span>
<span class="vip-price">会员价格:<span class="layui-badge-rim">¥{{ course.vip_price }}</span></span>
</p>
<p class="stats">
<span class="user-count">{{ course.user_count }}次学习</span>
<span class="review-count">{{ course.review_count }}次评价</span>
<span class="favorite-count">{{ course.favorite_count }}次收藏</span>
<p>
难度 <span>{{ level_info(course.level) }}</span>
课时 <span>{{ course.lesson_count }}</span>
学员 <span>{{ course.user_count }}</span>
收藏 <span>{{ course.favorite_count }}</span>
评分 <span>{{ course.rating }}</span>
</p>
<div class="share">
<a class="favorite" href="javascript:"><i class="layui-icon layui-icon-heart"></i></a>
<a class="mobile" href="javascript:"><i class="layui-icon layui-icon-cellphone"></i></a>
<a class="weibo" href="javascript:"><i class="layui-icon layui-icon-login-weibo"></i></a>
<a class="wechat" href="javascript:"><i class="layui-icon layui-icon-login-wechat"></i></a>
<a class="qq" href="javascript:"><i class="layui-icon layui-icon-login-qq"></i></a>
</div>
</div>

View File

@ -0,0 +1,26 @@
{% if course.me.owned == 0 and course.market_price > 0 %}
<div class="sidebar-order module">
<div class="order">
{% set order_url = url({'for':'web.order.confirm'},{'item_id':course.id,'item_type':'course'}) %}
<a class="layui-btn layui-btn-fluid layui-bg-red" href="{{ order_url }}">立即购买</a>
</div>
<div class="consult">
<a class="layui-btn layui-btn-fluid layui-bg-blue" href="javascript:">课程咨询</a>
</div>
</div>
{% endif %}
{% if course.market_price == 0 %}
<div class="layui-card">
<div class="layui-card-header">赞赏支持</div>
<div class="layui-card-body">
<div class="sidebar-order">
{% for option in reward_options %}
{% set item_id = [course.id,option.id]|join('-') %}
{% set order_url = url({'for':'web.order.confirm'},{'item_id':item_id,'item_type':'reward'}) %}
<a class="layui-btn layui-btn-xs reward-btn" href="{{ order_url }}">{{ option.title }}</a>
{% endfor %}
</div>
</div>
</div>
{% endif %}

View File

@ -13,7 +13,7 @@
<span>会员价 <i>¥{{ package.vip_price }}</i></span>
</div>
<div class="order">
<a class="layui-btn layui-btn-sm" href="{{ order_url }}">立即购买</a>
<a class="layui-btn layui-btn-sm layui-bg-red" href="{{ order_url }}">立即购买</a>
</div>
</div>
<div class="package-course-list">

View File

@ -1,7 +1,9 @@
<div class="course-widget layui-card">
{{ partial('partials/macro_course') }}
<div class="layui-card">
<div class="layui-card-header">推荐课程</div>
<div class="layui-card-body">
{% for course in recommended_courses %}
{% for course in courses %}
{{ sidebar_course_card(course) }}
{% endfor %}
</div>

View File

@ -1,7 +1,9 @@
{{ partial('partials/macro_course') }}
<div class="layui-card">
<div class="layui-card-header">相关课程</div>
<div class="layui-card-body">
{% for course in related_courses %}
{% for course in courses %}
{{ sidebar_course_card(course) }}
{% endfor %}
</div>

View File

@ -11,12 +11,13 @@
{% 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>
<img src="{{ item.user.avatar }}" alt="{{ item.user.name }}">
</div>
<div class="info">
<div class="rating">{{ star_info(item.rating) }}</div>
<div class="user">
<a href="{{ user_url }}">{{ item.user.name }}</a>
</div>
<div class="content">{{ item.content }}</div>
<div class="footer">
<span>{{ date('Y-m-d H:i',item.create_time) }}</span>

View File

@ -7,7 +7,7 @@
<div class="breadcrumb">
<span class="layui-breadcrumb">
<a href="{{ url({'for':'web.course.list'}) }}">全部课程</a>
{% for path in category_paths %}
{% for path in course.category_paths %}
<a href="{{ path.url }}">{{ path.name }}</a>
{% endfor %}
<a><cite>{{ course.title }}</cite></a>
@ -18,23 +18,24 @@
{{ partial('course/meta') }}
</div>
{% set show_packages = packages ? 1 : 0 %}
{% set show_consults = course.market_price > 0 ? 1 : 0 %}
{% set show_reviews = course.market_price > 0 ? 1 : 0 %}
<div class="layout-main clearfix">
{% set show_tab_packages = 1 %}
{% set show_tab_consults = course.consult_count > 0 ? 1 : 0 %}
{% set show_tab_reviews = course.review_count > 0 ? 1 : 0 %}
<div class="layout-content module">
<div class="layui-tab layui-tab-brief course-tab">
<ul class="layui-tab-title">
<li class="layui-this">详情</li>
<li>目录</li>
{% if show_packages == 1 %}
{% if show_tab_packages == 1 %}
<li>套餐</li>
{% endif %}
{% if show_consults == 1 %}
{% if show_tab_consults == 1 %}
<li>咨询</li>
{% endif %}
{% if show_reviews == 1 %}
{% if show_tab_reviews == 1 %}
<li>评价</li>
{% endif %}
</ul>
@ -42,45 +43,47 @@
<div class="layui-tab-item layui-show">
<div class="course-details">{{ course.details }}</div>
</div>
<div class="layui-tab-item" id="tab-chapters">
{% if course.model == 'vod' %}
{{ partial('course/chapters_vod') }}
{% elseif course.model == 'live' %}
{{ partial('course/chapters_live') }}
{% elseif course.model == 'read' %}
{{ partial('course/chapters_read') }}
{% endif %}
<div class="layui-tab-item">
{{ partial('course/chapters') }}
</div>
{% if show_packages == 1 %}
<div class="layui-tab-item" id="tab-packages">
{{ partial('course/packages') }}
</div>
{% if show_tab_packages == 1 %}
{% set package_url = url({'for':'web.course.packages','id':course.id}) %}
<div class="layui-tab-item" id="tab-packages" data-url="{{ package_url }}"></div>
{% endif %}
{% if show_consults == 1 %}
{% if show_tab_consults == 1 %}
{% 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 %}
{% if show_reviews == 1 %}
{% if show_tab_reviews == 1 %}
{% 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 %}
</div>
</div>
</div>
{% set show_sidebar_teachers = 1 %}
{% set show_sidebar_topics = 1 %}
{% set show_sidebar_recommended = 1 %}
{% set show_sidebar_related = 1 %}
<div class="layout-sidebar">
{% if teachers %}
{{ partial('course/sidebar_teachers') }}
{{ partial('course/order') }}
{{ partial('course/teachers') }}
{% if show_sidebar_topics %}
{% set topic_url = url({'for':'web.course.topics','id':course.id}) %}
<div class="sidebar" id="sidebar-topics" data-url="{{ topic_url }}"></div>
{% endif %}
{% if topics %}
{{ partial('course/sidebar_topics') }}
{% if show_sidebar_recommended %}
{% set recommended_url = url({'for':'web.course.recommended','id':course.id}) %}
<div class="sidebar" id="sidebar-recommended" data-url="{{ recommended_url }}"></div>
{% endif %}
{% if recommended_courses %}
{{ partial('course/sidebar_recommended') }}
{% endif %}
{% if related_courses %}
{{ partial('course/sidebar_related') }}
{% if show_sidebar_related %}
{% set related_url = url({'for':'web.course.related','id':course.id}) %}
<div class="sidebar" id="sidebar-related" data-url="{{ related_url }}"></div>
{% endif %}
</div>
</div>
{% endblock %}
@ -88,19 +91,30 @@
{% block inline_js %}
<script>
if ($('#tab-packages').length > 0) {
var $tabPackages = $('#tab-packages');
helper.ajaxLoadHtml($tabPackages.attr('data-url'), $tabPackages.attr('id'));
}
if ($('#tab-consults').length > 0) {
console.log('#tab-consults#');
var obj = $('#tab-consults');
helper.ajaxPager(obj.attr('data-url'), obj.attr('id'));
var $tabConsults = $('#tab-consults');
helper.ajaxLoadHtml($tabConsults.attr('data-url'), $tabConsults.attr('id'));
}
if ($('#tab-reviews').length > 0) {
console.log('#tab-reviews#');
var obj = $('#tab-reviews');
helper.ajaxPager(obj.attr('data-url'), obj.attr('id'));
var $tabReviews = $('#tab-reviews');
helper.ajaxLoadHtml($tabReviews.attr('data-url'), $tabReviews.attr('id'));
}
if ($('#sidebar-topics').length > 0) {
var $sdTopics = $('#sidebar-topics');
helper.ajaxLoadHtml($sdTopics.attr('data-url'), $sdTopics.attr('id'));
}
if ($('#sidebar-recommended').length > 0) {
var $sdRecommended = $('#sidebar-recommended');
helper.ajaxLoadHtml($sdRecommended.attr('data-url'), $sdRecommended.attr('id'));
}
if ($('#sidebar-related').length > 0) {
var $sdRelated = $('#sidebar-related');
helper.ajaxLoadHtml($sdRelated.attr('data-url'), $sdRelated.attr('id'));
}
</script>
{% endblock %}

View File

@ -2,15 +2,17 @@
<div class="layui-card-header">授课教师</div>
<div class="layui-card-body">
{% for teacher in teachers %}
<div class="sidebar-teacher-card clearfix">
{% set teacher_url = url({'for':'web.user.show','id':teacher.id}) %}
<div class="sidebar-teacher-card clearfix" title="{{ teacher.about|e }}">
<div class="avatar">
<img src="{{ teacher.avatar }}" alt="{{ teacher.about }}">
<img src="{{ teacher.avatar }}" alt="{{ teacher.about|e }}">
</div>
<div class="info">
<div class="name">
<a href="{{ url({'for':'web.user.show','id':teacher.id}) }}">{{ teacher.name }}</a>
<a href="{{ teacher_url }}">{{ teacher.name }}</a>
</div>
<div class="title">{{ teacher.title }}</div>
{% set title = teacher.title ? teacher.title : '小小教书匠' %}
<div class="title">{{ title }}</div>
</div>
</div>
{% endfor %}

View File

@ -0,0 +1,54 @@
{% extends 'templates/base.volt' %}
{% block content %}
{%- macro cart_course_card(course) %}
{% set course_url = url({'for':'web.course.show','id':course.id}) %}
<div class="cover">
<img src="{{ course.cover }}!cover_270" alt="course.title|e">
</div>
<div class="info">
<p><a href="{{ course_url }}" target="_blank">{{ course.title }}</a></p>
<p>
市场价格 <span class="price">{{ course.market_price }}</span>
会员价格 <span class="price">{{ course.vip_price }}</span>
</p>
<p>
学习期限 <span class="expiry">{{ course.study_expiry }}</span>
退款期限 <span class="expiry">{{ course.refund_expiry }}</span>
</p>
</div>
{%- endmacro %}
{%- macro reward_course_card(reward) %}
<div>I am reward</div>
{%- endmacro %}
{%- macro vip_course_card(vip) %}
<div>I am vip</div>
{%- endmacro %}
<div class="layui-breadcrumb breadcrumb">
<a href="/">首页</a>
<a><cite>确认订单</cite></a>
</div>
<div class="cart module">
{% if confirm.item_type == 'course' %}
{% set course = confirm.item_info.course %}
{{ cart_course_card(course) }}
{% elseif confirm.item_type == 'package' %}
{% set package = confirm.item_info.package %}
{% for course in package.courses %}
{{ cart_course_card(course) }}
{% endfor %}
{% elseif confirm.item_type == 'reward' %}
{% set reward = confirm.item_info.reward %}
{{ cart_reward_card(reward) }}
{% elseif confirm.item_type == 'vip' %}
{% set vip = confirm.item_info.vip %}
{{ cart_vip_card(vip) }}
{% endif %}
</div>
{% endblock %}

View File

@ -35,11 +35,11 @@ class CourseInfo extends FrontendService
'keywords' => $course->keywords,
'category_id' => $course->category_id,
'teacher_id' => $course->teacher_id,
'market_price' => (float)$course->market_price,
'vip_price' => (float)$course->vip_price,
'market_price' => $course->market_price,
'vip_price' => $course->vip_price,
'study_expiry' => $course->study_expiry,
'refund_expiry' => $course->refund_expiry,
'rating' => (float)$course->rating,
'rating' => $course->rating,
'model' => $course->model,
'level' => $course->level,
'attrs' => $course->attrs,

View File

@ -0,0 +1,34 @@
<?php
namespace App\Services\Frontend\Reward;
use App\Repos\Reward as RewardRepo;
use App\Services\Frontend\Service as FrontendService;
class OptionList extends FrontendService
{
public function handle()
{
$rewardRepo = new RewardRepo();
$rewards = $rewardRepo->findAll(['deleted' => 0]);
if ($rewards->count() == 0) {
return [];
}
$result = [];
foreach ($rewards as $reward) {
$result[] = [
'id' => $reward->id,
'title' => $reward->title,
'price' => $reward->price,
];
}
return $result;
}
}

View File

@ -32,6 +32,10 @@ trait Auth
*/
public function getLoginUser()
{
$userRepo = new UserRepo();
return $userRepo->findById(100015);
$authUser = $this->getAuthUser();
$validator = new AppValidator();

View File

@ -118,6 +118,15 @@ body {
width: 320px;
}
.layout-sidebar .loading {
padding: 15px;
text-align: center;
}
.layout-sidebar .sidebar {
margin-bottom: 15px;
}
.index-module .layui-tab {
margin-bottom: 0;
}
@ -310,10 +319,41 @@ body {
}
.course-meta .info {
position: relative;
float: left;
width: 80%;
font-size: 12px;
}
.course-meta .info .share {
position: absolute;
top: 0;
right: 0;
}
.course-meta .share a {
margin-right: 5px;
color: #999;
}
.course-meta .share a:hover {
color: #000;
}
.course-meta .info .price {
color: red;
font-size: 14px;
}
.course-meta .info .free {
color: green;
}
.course-meta .info span {
color: #999;
margin: 0 5px;
}
.course-meta .cover img {
width: 210px;
height: 118px;
@ -323,16 +363,26 @@ body {
line-height: 30px;
}
.course-meta .stats span {
margin-right: 5px;
}
.course-tab {
margin: 0;
}
.course-tab .layui-tab-content {
padding: 30px 0;
padding: 20px 0;
}
.course-tab .loading {
text-align: center;
padding: 15px;
}
.course-tab .loading .layui-icon {
font-size: 30px;
}
.course-details {
font-size: 12px;
color: #999;
}
.lesson-item {
@ -448,6 +498,7 @@ body {
}
.review-card {
position: relative;
padding-bottom: 10px;
margin-bottom: 10px;
border-bottom: 1px dashed #ccc;
@ -473,31 +524,48 @@ body {
.review-card .info {
float: left;
width: 650px;
font-size: 12px;
}
.review-card .rating {
position: absolute;
top: 0;
right: 0;
margin-bottom: 10px;
}
.review-card .rating .layui-icon {
color: orange;
font-size: 12px;
}
.review-card .title {
margin-bottom: 10px;
}
.review-card .user {
margin-bottom: 10px;
color: #999;
}
.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-order .order {
margin-bottom: 10px;
}
.sidebar-order .reward-btn {
width: 84px;
margin: 5px;
}
.sidebar-teacher-card {

View File

@ -22,11 +22,12 @@ util.fixbar({
var helper = {};
helper.ajaxPager = function (url, target) {
var index = layer.load();
helper.ajaxLoadHtml = function (url, target) {
var $target = $('#' + target);
var html = '<div class="loading"><i class="layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop"></i></div>';
$target.html(html);
$.get(url, function (html) {
$('#' + target).html(html);
layer.close(index);
$target.html(html);
});
}
@ -87,5 +88,5 @@ $('.kg-delete').on('click', function () {
$('body').on('click', '.layui-laypage > a', function () {
var url = $(this).attr('data-url');
var target = $(this).attr('data-target');
helper.ajaxPager(url, target);
helper.ajaxLoadHtml(url, target);
});

View File

@ -1,2 +0,0 @@
*
!.gitignore