1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-06-23 03:50:56 +08:00

更新composer包,优化前台课程页

This commit is contained in:
xiaochong0302 2020-09-15 20:01:37 +08:00
parent 504e8e0171
commit 970f2b8903
13 changed files with 239 additions and 178 deletions

View File

@ -9,7 +9,7 @@
- [前台演示](https://ctc.koogua.com) - [前台演示](https://ctc.koogua.com)
- [后台演示](https://ctc.koogua.com/admin) - [后台演示](https://ctc.koogua.com/admin)
帐号100015@163.com / 123456 (前后台通用) > 帐号100015@163.com / 123456 (前后台通用)
PS**管理后台已禁止提交并隐藏私人配置** PS**管理后台已禁止提交并隐藏私人配置**
@ -19,7 +19,7 @@ PS**管理后台已禁止提交并隐藏私人配置**
- 前端框架:[layui 2.5.6](https://layui.com) [layim 3.9.5](https://www.layui.com/layim)(已授权) - 前端框架:[layui 2.5.6](https://layui.com) [layim 3.9.5](https://www.layui.com/layim)(已授权)
- 全文检索:[xunsearch 1.4.9](http://www.xunsearch.com) - 全文检索:[xunsearch 1.4.9](http://www.xunsearch.com)
- 即时通讯:[workerman 3.5.22](https://workerman.net) - 即时通讯:[workerman 3.5.22](https://workerman.net)
- 其它依赖:[php7.3](https://php.net) [mysql5.7](https://mysql.com) [redis5.0](https://redis.io) - 基础依赖:[php7.3](https://php.net) [mysql5.7](https://mysql.com) [redis5.0](https://redis.io)
#### 使用协议 #### 使用协议
@ -56,7 +56,7 @@ PS**管理后台已禁止提交并隐藏私人配置**
#### 通过这个项目能学到什么? #### 通过这个项目能学到什么?
1. 项目规划phalcon实战缓存JWT即时通讯全文检索 1. 项目规划phalcon实战缓存JWT即时通讯全文检索
2. docker操作docker服务编排supervisordevops 2. dockersupervisordevops
3. gitlinuxphpmysqlredisnginx 3. gitlinuxphpmysqlredisnginx
#### 开发计划 #### 开发计划
@ -73,7 +73,7 @@ PS**管理后台已禁止提交并隐藏私人配置**
#### 加入我们 #### 加入我们
这是我的创业项目,个人能力和精力有限,要兼顾产品规划以及开发,还要处理除报税记账之外的所有琐碎事情。 这是我的创业项目,个人能力和精力有限,要兼顾产品规划以及开发,还要处理很多琐碎事情。
目前在南山科技园某个众创空间,希望有能独挡一面的**深圳前端同学**加入我们。 目前在南山科技园某个众创空间,希望有 **深圳前端同学** 加入我们。
联系邮箱76632555@qq.com 联系邮箱76632555@qq.com

View File

@ -5,9 +5,9 @@ namespace App\Http\Desktop\Controllers;
use App\Http\Desktop\Services\CourseQuery as CourseQueryService; use App\Http\Desktop\Services\CourseQuery as CourseQueryService;
use App\Services\Frontend\Course\ChapterList as CourseChapterListService; use App\Services\Frontend\Course\ChapterList as CourseChapterListService;
use App\Services\Frontend\Course\ConsultList as CourseConsultListService; use App\Services\Frontend\Course\ConsultList as CourseConsultListService;
use App\Services\Frontend\Course\CourseFavorite as CourseFavoriteService;
use App\Services\Frontend\Course\CourseInfo as CourseInfoService; use App\Services\Frontend\Course\CourseInfo as CourseInfoService;
use App\Services\Frontend\Course\CourseList as CourseListService; use App\Services\Frontend\Course\CourseList as CourseListService;
use App\Services\Frontend\Course\Favorite as CourseFavoriteService;
use App\Services\Frontend\Course\PackageList as CoursePackageListService; use App\Services\Frontend\Course\PackageList as CoursePackageListService;
use App\Services\Frontend\Course\RecommendedList as CourseRecommendedListService; use App\Services\Frontend\Course\RecommendedList as CourseRecommendedListService;
use App\Services\Frontend\Course\RelatedList as CourseRelatedListService; use App\Services\Frontend\Course\RelatedList as CourseRelatedListService;

View File

@ -27,7 +27,7 @@
{% if lesson.me.duration > 0 %} {% if lesson.me.duration > 0 %}
<span class="study-time" title="学习时长:{{ lesson.me.duration|duration }}"><i class="layui-icon layui-icon-time"></i></span> <span class="study-time" title="学习时长:{{ lesson.me.duration|duration }}"><i class="layui-icon layui-icon-time"></i></span>
{% endif %} {% 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> <span class="live" title="{{ date('Y-m-d H:i',lesson.attrs.start_time) }}">{{ live_status_info(lesson) }}</span>
</a> </a>
{%- endmacro %} {%- endmacro %}
@ -46,6 +46,16 @@
</a> </a>
{%- endmacro %} {%- endmacro %}
{%- macro live_status_info(lesson) %}
{% if lesson.attrs.stream.status == 'active' %}
<span class="active">{{ date('m月d日 H:i',lesson.attrs.start_time) }} 直播中</span>
{% elseif lesson.attrs.start_time > time() %}
<span class="pending">{{ date('m月d日 H:i',lesson.attrs.start_time) }} 倒计时</span>
{% elseif lesson.attrs.end_time < time() %}
<span class="finished">{{ date('m月d日 H:i',lesson.attrs.start_time) }} 已结束</span>
{% endif %}
{%- endmacro %}
<div class="layui-collapse"> <div class="layui-collapse">
{% for chapter in chapters %} {% for chapter in chapters %}
<div class="layui-colla-item"> <div class="layui-colla-item">
@ -53,11 +63,11 @@
<div class="layui-colla-content layui-show"> <div class="layui-colla-content layui-show">
<ul class="lesson-list"> <ul class="lesson-list">
{% for lesson in chapter.children %} {% for lesson in chapter.children %}
{% if lesson.model == '1' %} {% if lesson.model == 1 %}
<li class="lesson-item clearfix">{{ vod_lesson_info(lesson) }}</li> <li class="lesson-item clearfix">{{ vod_lesson_info(lesson) }}</li>
{% elseif lesson.model == '2' %} {% elseif lesson.model == 2 %}
<li class="lesson-item clearfix">{{ live_lesson_info(lesson) }}</li> <li class="lesson-item clearfix">{{ live_lesson_info(lesson) }}</li>
{% elseif lesson.model == '3' %} {% elseif lesson.model == 3 %}
<li class="lesson-item clearfix">{{ read_lesson_info(lesson) }}</li> <li class="lesson-item clearfix">{{ read_lesson_info(lesson) }}</li>
{% endif %} {% endif %}
{% endfor %} {% endfor %}

View File

@ -1,40 +1,72 @@
{%- macro vod_meta_info(course) %}
<p class="item">
<span class="key">课程时长</span><span class="value">{{ course.attrs.duration|duration }}</span>
</p>
{{ meta_expiry_info(course) }}
{{ meta_price_info(course) }}
{{ meta_stats_info(course) }}
{%- endmacro %}
{%- macro live_meta_info(course) %}
<p class="item">
<span class="key">直播时间</span><span class="value">{{ course.attrs.start_date }} ~ {{ course.attrs.end_date }}</span>
</p>
{{ meta_expiry_info(course) }}
{{ meta_price_info(course) }}
{{ meta_stats_info(course) }}
{%- endmacro %}
{%- macro read_meta_info(course) %}
<p class="item">
<span class="key">课程时长</span><span class="value">{{ course.attrs.duration|duration }}</span>
</p>
{{ meta_expiry_info(course) }}
{{ meta_price_info(course) }}
{{ meta_stats_info(course) }}
{%- endmacro %}
{%- macro meta_expiry_info(course) %}
<p class="item">
<span class="key">学习期限</span><span class="value">{{ course.study_expiry }}个月</span>
<span class="key">退款期限</span><span class="value">{{ course.refund_expiry }}天</span>
</p>
{%- endmacro %}
{%- macro meta_price_info(course) %}
<p class="item">
{% if course.market_price > 0 %}
<span class="key">市场价格</span><span class="value price">{{ '¥%0.2f'|format(course.market_price) }}</span>
{% else %}
<span class="key">市场价格</span><span class="value free">免费</span>
{% endif %}
{% if course.vip_price > 0 %}
<span class="key">会员价格</span><span class="value price">{{ '¥%0.2f'|format(course.vip_price) }}</span>
{% else %}
<span class="key">会员价格</span><span class="value free">免费</span>
{% endif %}
</p>
{%- endmacro %}
{%- macro meta_stats_info(course) %}
<p class="item">
<span class="key">难度级别</span><span class="value">{{ level_info(course.level) }}</span>
<span class="key">学习人次</span><span class="value">{{ course.user_count }}</span>
<span class="key">综合评分</span><span class="value">{{ "%0.1f"|format(course.ratings.rating) }}</span>
</p>
{%- endmacro %}
<div class="course-meta wrap clearfix"> <div class="course-meta wrap clearfix">
<div class="cover"> <div class="cover">
<img src="{{ course.cover }}" alt="{{ course.title|e }}"> <img src="{{ course.cover }}!cover_270" alt="{{ course.title }}">
</div> </div>
<div class="info"> <div class="info">
{% if course.model == '1' %} {% if course.model == 1 %}
<p class="item"> {{ vod_meta_info(course) }}
<span class="key">课程时长</span><span class="value">{{ course.attrs.duration|duration }}</span> {% elseif course.model == 2 %}
</p> {{ live_meta_info(course) }}
{% elseif course.model == '2' %} {% elseif course.model == 3 %}
<p class="item"> {{ read_meta_info(course) }}
<span class="key">直播时间</span><span class="value">{{ course.attrs.start_date }} ~ {{ course.attrs.end_date }}</span>
</p>
{% endif %} {% endif %}
{% if course.market_price > 0 %}
<p class="item">
<span class="key">学习期限</span><span class="value">{{ course.study_expiry }}个月</span>
<span class="key">退款期限</span><span class="value">{{ course.refund_expiry }}天</span>
</p>
{% endif %}
<p class="item">
{% if course.market_price > 0 %}
<span class="key">市场价格</span><span class="price">{{ '¥%0.2f'|format(course.market_price) }}</span>
{% else %}
<span class="key">市场价格</span><span class="free">免费</span>
{% endif %}
{% if course.vip_price > 0 %}
<span class="key">会员价格</span><span class="price">{{ '¥%0.2f'|format(course.vip_price) }}</span>
{% else %}
<span class="key">会员价格</span><span class="free">免费</span>
{% endif %}
</p>
<p class="item">
<span class="key">难度级别</span><span class="value">{{ level_info(course.level) }}</span>
<span class="key">学习人次</span><span class="value">{{ course.user_count }}</span>
<span class="key">综合评分</span><span class="value">{{ "%0.1f"|format(course.ratings.rating) }}</span>
</p>
</div> </div>
<div class="rating"> <div class="rating">
<p class="item"> <p class="item">

View File

@ -23,7 +23,9 @@
<div class="vip-option-card"> <div class="vip-option-card">
<div class="title">{{ option.title }}</div> <div class="title">{{ option.title }}</div>
<div class="price">¥{{ option.price }}</div> <div class="price">¥{{ option.price }}</div>
<div class="order"><a class="layui-btn layui-btn-sm layui-bg-red" href="{{ order_url }}">立即开通</a></div> <div class="order">
<button class="layui-btn layui-btn-sm layui-bg-red btn-order" data-url="{{ order_url }}">立即开通</button>
</div>
</div> </div>
</div> </div>
{% endfor %} {% endfor %}

View File

@ -147,18 +147,21 @@ class ChapterInfo extends FrontendService
protected function incrUserCourseCount(UserModel $user) protected function incrUserCourseCount(UserModel $user)
{ {
$user->course_count += 1; $user->course_count += 1;
$user->update(); $user->update();
} }
protected function incrCourseUserCount(CourseModel $course) protected function incrCourseUserCount(CourseModel $course)
{ {
$course->user_count += 1; $course->user_count += 1;
$course->update(); $course->update();
} }
protected function incrChapterUserCount(ChapterModel $chapter) protected function incrChapterUserCount(ChapterModel $chapter)
{ {
$chapter->user_count += 1; $chapter->user_count += 1;
$chapter->update(); $chapter->update();
} }

View File

@ -64,6 +64,7 @@ class ConsultLike extends FrontendService
protected function incrLikeCount(ConsultModel $consult) protected function incrLikeCount(ConsultModel $consult)
{ {
$consult->like_count += 1; $consult->like_count += 1;
$consult->update(); $consult->update();
} }

View File

@ -10,7 +10,7 @@ use App\Services\Frontend\CourseTrait;
use App\Services\Frontend\Service as FrontendService; use App\Services\Frontend\Service as FrontendService;
use App\Validators\UserLimit as UserLimitValidator; use App\Validators\UserLimit as UserLimitValidator;
class Favorite extends FrontendService class CourseFavorite extends FrontendService
{ {
use CourseTrait; use CourseTrait;
@ -66,6 +66,7 @@ class Favorite extends FrontendService
protected function incrCourseFavoriteCount(CourseModel $course) protected function incrCourseFavoriteCount(CourseModel $course)
{ {
$course->favorite_count += 1; $course->favorite_count += 1;
$course->update(); $course->update();
} }
@ -80,6 +81,7 @@ class Favorite extends FrontendService
protected function incrUserFavoriteCount(UserModel $user) protected function incrUserFavoriteCount(UserModel $user)
{ {
$user->favorite_count += 1; $user->favorite_count += 1;
$user->update(); $user->update();
} }

View File

@ -64,6 +64,7 @@ class ReviewLike extends FrontendService
protected function incrLikeCount(ReviewModel $review) protected function incrLikeCount(ReviewModel $review)
{ {
$review->like_count += 1; $review->like_count += 1;
$review->update(); $review->update();
} }

View File

@ -10,13 +10,13 @@
"swiftmailer/swiftmailer": "^6.0", "swiftmailer/swiftmailer": "^6.0",
"peppeocchi/php-cron-scheduler": "^2.4", "peppeocchi/php-cron-scheduler": "^2.4",
"yansongda/pay": "^2.9", "yansongda/pay": "^2.9",
"tencentcloud/tencentcloud-sdk-php": "3.*", "tencentcloud/tencentcloud-sdk-php": "^3.0",
"qcloudsms/qcloudsms_php": "0.1.*", "qcloudsms/qcloudsms_php": "^0.1",
"qcloud/cos-sdk-v5": "2.*", "qcloud/cos-sdk-v5": "^2.0",
"workerman/gateway-worker": "^3.0.12", "workerman/gateway-worker": "^3.0",
"workerman/gatewayclient": "^3.0.12", "workerman/gatewayclient": "^3.0",
"whichbrowser/parser": "^2.0", "whichbrowser/parser": "^2.0",
"hightman/xunsearch": "^1.4.14", "hightman/xunsearch": "^1.4",
"aferrandini/phpqrcode": "1.0.1", "aferrandini/phpqrcode": "1.0.1",
"xiaochong0302/ip2region": "^1.0", "xiaochong0302/ip2region": "^1.0",
"robmorgan/phinx": "^0.12", "robmorgan/phinx": "^0.12",

244
composer.lock generated
View File

@ -1,20 +1,20 @@
{ {
"_readme": [ "_readme": [
"This file locks the dependencies of your project to a known state", "This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "66628b38c16e2071e5636757472860e8", "content-hash": "cce345a8509cd31ff8492310a2a2332a",
"packages": [ "packages": [
{ {
"name": "aferrandini/phpqrcode", "name": "aferrandini/phpqrcode",
"version": "1.0.1", "version": "1.0.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/aferrandini/PHPQRCode.git", "url": "https://github.com/aferrandini/PHPQRCode.git",
"reference": "3c1c0454d43710ab5bbe19a51ad4cb41c22e3d46" "reference": "3c1c0454d43710ab5bbe19a51ad4cb41c22e3d46"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/aferrandini/PHPQRCode/zipball/3c1c0454d43710ab5bbe19a51ad4cb41c22e3d46", "url": "https://api.github.com/repos/aferrandini/PHPQRCode/zipball/3c1c0454d43710ab5bbe19a51ad4cb41c22e3d46",
"reference": "3c1c0454d43710ab5bbe19a51ad4cb41c22e3d46", "reference": "3c1c0454d43710ab5bbe19a51ad4cb41c22e3d46",
@ -747,26 +747,26 @@
], ],
"time": "2019-07-01T23:21:34+00:00" "time": "2019-07-01T23:21:34+00:00"
}, },
{ {
"name": "hightman/xunsearch", "name": "hightman/xunsearch",
"version": "1.4.14", "version": "1.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/hightman/xs-sdk-php.git", "url": "https://github.com/hightman/xs-sdk-php.git",
"reference": "d2faba65b9b4c0c0ea6e8b2ad5bafdefcbf3db87" "reference": "8ec1a3aa3ef58b83cd4e0e72a171f6446f4136b9"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/hightman/xs-sdk-php/zipball/d2faba65b9b4c0c0ea6e8b2ad5bafdefcbf3db87", "url": "https://api.github.com/repos/hightman/xs-sdk-php/zipball/8ec1a3aa3ef58b83cd4e0e72a171f6446f4136b9",
"reference": "d2faba65b9b4c0c0ea6e8b2ad5bafdefcbf3db87", "reference": "8ec1a3aa3ef58b83cd4e0e72a171f6446f4136b9",
"shasum": "", "shasum": "",
"mirrors": [ "mirrors": [
{ {
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true "preferred": true
} }
] ]
}, },
"require": { "require": {
"ext-mbstring": "*", "ext-mbstring": "*",
"lib-pcre": "*", "lib-pcre": "*",
@ -781,26 +781,26 @@
"dev-master": "1.4.x-dev" "dev-master": "1.4.x-dev"
} }
}, },
"autoload": { "autoload": {
"classmap": [ "classmap": [
"lib/", "lib/",
"wrapper/yii-ext/" "wrapper/yii-ext/"
], ],
"psr-4": { "psr-4": {
"hightman\\xunsearch\\": "wrapper/yii2-ext/" "hightman\\xunsearch\\": "wrapper/yii2-ext/"
} }
}, },
"notification-url": "https://packagist.jp/downloads/", "notification-url": "https://packagist.org/downloads/",
"license": [ "license": [
"GPL-2.0+" "GPL-2.0+"
], ],
"authors": [ "authors": [
{ {
"name": "hightman", "name": "hightman",
"email": "hightman@twomice.net", "email": "hightman@twomice.net",
"role": "Founder and project leader" "role": "Founder and project leader"
} }
], ],
"description": "xunsearch php sdk, include yii, yii2 supports", "description": "xunsearch php sdk, include yii, yii2 supports",
"homepage": "http://www.xunsearch.com/", "homepage": "http://www.xunsearch.com/",
"keywords": [ "keywords": [
@ -809,7 +809,7 @@
"yii", "yii",
"yii2" "yii2"
], ],
"time": "2019-11-01T02:17:32+00:00" "time": "2020-09-03T16:46:04+00:00"
}, },
{ {
"name": "lcobucci/jwt", "name": "lcobucci/jwt",
@ -1436,26 +1436,26 @@
], ],
"time": "2017-10-23T01:57:42+00:00" "time": "2017-10-23T01:57:42+00:00"
}, },
{ {
"name": "qcloud/cos-sdk-v5", "name": "qcloud/cos-sdk-v5",
"version": "v2.0.0", "version": "v2.0.9",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/tencentyun/cos-php-sdk-v5.git", "url": "https://github.com/tencentyun/cos-php-sdk-v5.git",
"reference": "a8ac2dc1f58ddb36e5d702d19f9d7cb8d6f1dc5e" "reference": "d9fa5e8468ce4462d671976555efaa9acd2896e4"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/tencentyun/cos-php-sdk-v5/zipball/a8ac2dc1f58ddb36e5d702d19f9d7cb8d6f1dc5e", "url": "https://api.github.com/repos/tencentyun/cos-php-sdk-v5/zipball/d9fa5e8468ce4462d671976555efaa9acd2896e4",
"reference": "a8ac2dc1f58ddb36e5d702d19f9d7cb8d6f1dc5e", "reference": "d9fa5e8468ce4462d671976555efaa9acd2896e4",
"shasum": "", "shasum": "",
"mirrors": [ "mirrors": [
{ {
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true "preferred": true
} }
] ]
}, },
"require": { "require": {
"guzzlehttp/guzzle": "~6.3", "guzzlehttp/guzzle": "~6.3",
"guzzlehttp/guzzle-services": "~1.1", "guzzlehttp/guzzle-services": "~1.1",
@ -1487,7 +1487,7 @@
"php", "php",
"qcloud" "qcloud"
], ],
"time": "2019-09-25T12:28:54+00:00" "time": "2020-06-16T13:09:21+00:00"
}, },
{ {
"name": "qcloudsms/qcloudsms_php", "name": "qcloudsms/qcloudsms_php",
@ -2949,30 +2949,30 @@
], ],
"time": "2020-07-06T13:23:11+00:00" "time": "2020-07-06T13:23:11+00:00"
}, },
{ {
"name": "tencentcloud/tencentcloud-sdk-php", "name": "tencentcloud/tencentcloud-sdk-php",
"version": "3.0.92", "version": "3.0.251",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/TencentCloud/tencentcloud-sdk-php.git", "url": "https://github.com/TencentCloud/tencentcloud-sdk-php.git",
"reference": "71164956c234368c65c00e321e96f6dbd0f8d9c0" "reference": "a3b3054262e48776e8014d5e385a8932b0102f29"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/TencentCloud/tencentcloud-sdk-php/zipball/71164956c234368c65c00e321e96f6dbd0f8d9c0", "url": "https://api.github.com/repos/TencentCloud/tencentcloud-sdk-php/zipball/a3b3054262e48776e8014d5e385a8932b0102f29",
"reference": "71164956c234368c65c00e321e96f6dbd0f8d9c0", "reference": "a3b3054262e48776e8014d5e385a8932b0102f29",
"shasum": "", "shasum": "",
"mirrors": [ "mirrors": [
{ {
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true "preferred": true
} }
] ]
}, },
"require": { "require": {
"guzzlehttp/guzzle": "^6.3", "guzzlehttp/guzzle": "^6.3",
"guzzlehttp/psr7": "^1.4", "guzzlehttp/psr7": "^1.4",
"php": ">=5.6.33" "php": ">=5.6.0"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@ -2997,7 +2997,7 @@
], ],
"description": "TencentCloudApi php sdk", "description": "TencentCloudApi php sdk",
"homepage": "https://github.com/TencentCloud/tencentcloud-sdk-php", "homepage": "https://github.com/TencentCloud/tencentcloud-sdk-php",
"time": "2019-09-27T09:23:30+00:00" "time": "2020-09-15T00:59:07+00:00"
}, },
{ {
"name": "whichbrowser/parser", "name": "whichbrowser/parser",
@ -3064,28 +3064,28 @@
], ],
"time": "2018-10-02T09:26:41+00:00" "time": "2018-10-02T09:26:41+00:00"
}, },
{ {
"name": "workerman/gateway-worker", "name": "workerman/gateway-worker",
"version": "v3.0.13", "version": "v3.0.18",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/walkor/GatewayWorker.git", "url": "https://github.com/walkor/GatewayWorker.git",
"reference": "38b44c95f21cd340b5a9cff3987ddb2abb9a2a38" "reference": "50d3a77deb7f7fb206d641ee0307ae1c41d5d41d"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/walkor/GatewayWorker/zipball/38b44c95f21cd340b5a9cff3987ddb2abb9a2a38", "url": "https://api.github.com/repos/walkor/GatewayWorker/zipball/50d3a77deb7f7fb206d641ee0307ae1c41d5d41d",
"reference": "38b44c95f21cd340b5a9cff3987ddb2abb9a2a38", "reference": "50d3a77deb7f7fb206d641ee0307ae1c41d5d41d",
"shasum": "", "shasum": "",
"mirrors": [ "mirrors": [
{ {
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true "preferred": true
} }
] ]
}, },
"require": { "require": {
"workerman/workerman": ">=3.1.8" "workerman/workerman": ">=3.5.0"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@ -3102,7 +3102,7 @@
"communication", "communication",
"distributed" "distributed"
], ],
"time": "2019-07-02T11:55:24+00:00" "time": "2020-07-15T06:45:01+00:00"
}, },
{ {
"name": "workerman/gatewayclient", "name": "workerman/gatewayclient",

View File

@ -92,6 +92,11 @@
width: 320px; width: 320px;
} }
.layui-main .vditor-reset {
font: 14px Helvetica Neue, Helvetica, PingFang SC, Tahoma, Arial, sans-serif;
color: #666;
}
body { body {
display: flex; display: flex;
flex-flow: column; flex-flow: column;
@ -500,7 +505,6 @@ body {
.course-meta .info .price { .course-meta .info .price {
color: red; color: red;
font-size: 14px;
} }
.course-meta .info .free { .course-meta .info .free {
@ -548,11 +552,6 @@ body {
font-size: 30px; font-size: 30px;
} }
.course-details {
line-height: 1.8em;
color: #666;
}
.lesson-item { .lesson-item {
position: relative; position: relative;
padding: 0 10px; padding: 0 10px;
@ -583,6 +582,10 @@ body {
color: #666; color: #666;
} }
.lesson-item .live .active {
color: red;
}
.lesson-item .study-time { .lesson-item .study-time {
color: green; color: green;
} }

View File

@ -3,6 +3,13 @@ layui.use(['jquery', 'helper'], function () {
var $ = layui.jquery; var $ = layui.jquery;
var helper = layui.helper; var helper = layui.helper;
$('.btn-order').on('click', function () {
var url = $(this).data('url');
helper.checkLogin(function () {
window.location.href = url;
});
});
if ($('#tab-discount-courses').length > 0) { if ($('#tab-discount-courses').length > 0) {
var $tabDiscountCourses = $('#tab-discount-courses'); var $tabDiscountCourses = $('#tab-discount-courses');
helper.ajaxLoadHtml($tabDiscountCourses.data('url'), $tabDiscountCourses.attr('id')); helper.ajaxLoadHtml($tabDiscountCourses.data('url'), $tabDiscountCourses.attr('id'));