1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-07-24 00:41:43 +08:00

Merge branch 'koogua/v1.5.2'

This commit is contained in:
koogua 2022-04-30 11:39:53 +08:00
commit 450b4c5210
32 changed files with 87 additions and 66 deletions

View File

@ -1,3 +1,12 @@
### [v1.5.2](https://gitee.com/koogua/course-tencent-cloud/releases/v1.5.2)(2022-04-17)
- 补充话题列表课程数据结构
- 调整发送验证码相关样式
- 优化套餐和话题下拉课程数据显示
- 去除礼物详情中多出来的"}}"标签
- 修正关闭秒杀订单时没有回填库存的问题
- vditor编辑器切换为七牛cdn加速
### [v1.5.1](https://gitee.com/koogua/course-tencent-cloud/releases/v1.5.1)(2022-03-17)
- 推荐课程等列表补充属性

View File

@ -45,7 +45,7 @@ class CourseTopicList extends Builder
'id', 'title', 'cover',
'market_price', 'vip_price',
'rating', 'model', 'level', 'attrs',
'user_count', 'lesson_count',
'user_count', 'lesson_count', 'review_count', 'favorite_count',
];
$courses = $courseRepo->findByIds($ids, $columns);

View File

@ -8,6 +8,7 @@
namespace App\Console\Tasks;
use App\Models\Order as OrderModel;
use App\Repos\FlashSale as FlashSaleRepo;
use App\Services\Logic\FlashSale\Queue as FlashSaleQueue;
use App\Services\Logic\FlashSale\UserOrderCache;
use Phalcon\Mvc\Model\Resultset;
@ -27,6 +28,7 @@ class CloseFlashSaleOrderTask extends Task
echo '------ start close order task ------' . PHP_EOL;
foreach ($orders as $order) {
$this->incrFlashSaleStock($order->promotion_id);
$this->pushFlashSaleQueue($order->promotion_id);
$this->deleteUserOrderCache($order->owner_id, $order->promotion_id);
$order->status = OrderModel::STATUS_CLOSED;
@ -36,6 +38,17 @@ class CloseFlashSaleOrderTask extends Task
echo '------ end close order task ------' . PHP_EOL;
}
protected function incrFlashSaleStock($saleId)
{
$flashSaleRepo = new FlashSaleRepo();
$flashSale = $flashSaleRepo->findById($saleId);
$flashSale->stock += 1;
$flashSale->update();
}
protected function pushFlashSaleQueue($saleId)
{
$queue = new FlashSaleQueue();

View File

@ -15,7 +15,6 @@ use App\Repos\Chapter as ChapterRepo;
use App\Repos\Course as CourseRepo;
use App\Services\ChapterVod as ChapterVodService;
use App\Services\CourseStat as CourseStatService;
use App\Services\Vod as VodService;
use App\Validators\ChapterLive as ChapterLiveValidator;
use App\Validators\ChapterOffline as ChapterOfflineValidator;
use App\Validators\ChapterRead as ChapterReadValidator;
@ -134,28 +133,14 @@ class ChapterContent extends Service
$vod = $chapterRepo->findChapterVod($chapter->id);
/**
* 无新文件上传
*/
if ($fileId == $vod->file_id) return;
/**
* 删除旧文件
*/
if ($vod->file_id) {
$this->deleteVodFile($vod->file_id);
}
$vod->file_id = $fileId;
$vod->file_transcode = [];
$vod->update();
$attrs = $chapter->attrs;
$attrs['duration'] = 0;
$attrs['file']['status'] = ChapterModel::FS_UPLOADED;
$chapter->attrs = $attrs;
$chapter->update();
$this->updateCourseVodAttrs($vod->course_id);
@ -331,13 +316,6 @@ class ChapterContent extends Service
$statService->updateOfflineAttrs($courseId);
}
protected function deleteVodFile($fileId)
{
$vodService = new VodService();
$vodService->deleteMedia($fileId);
}
protected function rebuildCatalogCache(ChapterModel $chapter)
{
$cache = new CatalogCache();

View File

@ -59,8 +59,9 @@ class Package extends Service
$result = [];
foreach ($items as $item) {
$price = $item->market_price > 0 ? sprintf("¥%0.2f", $item->market_price) : '免费';
$result[] = [
'name' => sprintf('%s - %s¥%0.2f', $item->id, $item->title, $item->market_price),
'name' => sprintf('%s - %s¥%0.2f', $item->id, $item->title, $price),
'value' => $item->id,
'selected' => in_array($item->id, $courseIds),
];

View File

@ -34,8 +34,9 @@ class Slide extends Service
$result = [];
foreach ($items as $item) {
$price = $item->market_price > 0 ? sprintf("¥%0.2f", $item->market_price) : '免费';
$result[] = [
'name' => sprintf('%s(¥%0.2f', $item->title, $item->market_price),
'name' => sprintf('%s- %s%s', $item->id, $item->title, $price),
'value' => $item->id,
];
}

View File

@ -45,8 +45,9 @@ class Topic extends Service
$result = [];
foreach ($items as $item) {
$price = $item->market_price > 0 ? sprintf("¥%0.2f", $item->market_price) : '免费';
$result[] = [
'name' => sprintf('%s - %s¥%0.2f', $item->id, $item->title, $item->market_price),
'name' => sprintf('%s - %s¥%0.2f', $item->id, $item->title, $price),
'value' => $item->id,
'selected' => in_array($item->id, $courseIds),
];

View File

@ -29,13 +29,13 @@
{% block link_css %}
{{ css_link('https://cdn.jsdelivr.net/npm/vditor/dist/index.css', false) }}
{{ css_link('https://cdn.staticfile.org/vditor/3.8.13/index.css', false) }}
{% endblock %}
{% block include_js %}
{{ js_include('https://cdn.jsdelivr.net/npm/vditor/dist/index.min.js', false) }}
{{ js_include('https://cdn.staticfile.org/vditor/3.8.13/index.min.js', false) }}
{{ js_include('admin/js/vditor.js') }}
{% endblock %}

View File

@ -28,13 +28,13 @@
{% block link_css %}
{{ css_link('https://cdn.jsdelivr.net/npm/vditor/dist/index.css', false) }}
{{ css_link('https://cdn.staticfile.org/vditor/3.8.13/index.css', false) }}
{% endblock %}
{% block include_js %}
{{ js_include('https://cdn.jsdelivr.net/npm/vditor/dist/index.min.js', false) }}
{{ js_include('https://cdn.staticfile.org/vditor/3.8.13/index.min.js', false) }}
{{ js_include('admin/js/vditor.js') }}
{% endblock %}

View File

@ -25,13 +25,13 @@
{% block link_css %}
{{ css_link('https://cdn.jsdelivr.net/npm/vditor/dist/index.css', false) }}
{{ css_link('https://cdn.staticfile.org/vditor/3.8.13/index.css', false) }}
{% endblock %}
{% block include_js %}
{{ js_include('https://cdn.jsdelivr.net/npm/vditor/dist/index.min.js', false) }}
{{ js_include('https://cdn.staticfile.org/vditor/3.8.13/index.min.js', false) }}
{{ js_include('lib/xm-select.js') }}
{{ js_include('admin/js/vditor.js') }}

View File

@ -50,7 +50,7 @@
{% block link_css %}
{% if chapter.model == 3 %}
{{ css_link('https://cdn.jsdelivr.net/npm/vditor/dist/index.css', false) }}
{{ css_link('https://cdn.staticfile.org/vditor/3.8.13/index.css', false) }}
{% endif %}
{% endblock %}
@ -59,7 +59,7 @@
{% if chapter.model == 3 %}
{{ js_include('https://cdn.jsdelivr.net/npm/vditor/dist/index.min.js', false) }}
{{ js_include('https://cdn.staticfile.org/vditor/3.8.13/index.min.js', false) }}
{{ js_include('admin/js/vditor.js') }}
{% elseif chapter.model == 1 %}

View File

@ -41,13 +41,13 @@
{% block link_css %}
{{ css_link('https://cdn.jsdelivr.net/npm/vditor/dist/index.css', false) }}
{{ css_link('https://cdn.staticfile.org/vditor/3.8.13/index.css', false) }}
{% endblock %}
{% block include_js %}
{{ js_include('https://cdn.jsdelivr.net/npm/vditor/dist/index.min.js', false) }}
{{ js_include('https://cdn.staticfile.org/vditor/3.8.13/index.min.js', false) }}
{{ js_include('lib/xm-select.js') }}
{{ js_include('admin/js/cover.upload.js') }}
{{ js_include('admin/js/vditor.js') }}

View File

@ -49,13 +49,13 @@
{% block link_css %}
{{ css_link('https://cdn.jsdelivr.net/npm/vditor/dist/index.css', false) }}
{{ css_link('https://cdn.staticfile.org/vditor/3.8.13/index.css', false) }}
{% endblock %}
{% block include_js %}
{{ js_include('https://cdn.jsdelivr.net/npm/vditor/dist/index.min.js', false) }}
{{ js_include('https://cdn.staticfile.org/vditor/3.8.13/index.min.js', false) }}
{{ js_include('admin/js/vditor.js') }}
{% endblock %}

View File

@ -56,13 +56,13 @@
{% block link_css %}
{{ css_link('https://cdn.jsdelivr.net/npm/vditor/dist/index.css', false) }}
{{ css_link('https://cdn.staticfile.org/vditor/3.8.13/index.css', false) }}
{% endblock %}
{% block include_js %}
{{ js_include('https://cdn.jsdelivr.net/npm/vditor/dist/index.min.js', false) }}
{{ js_include('https://cdn.staticfile.org/vditor/3.8.13/index.min.js', false) }}
{{ js_include('admin/js/vditor.js') }}
{% endblock %}

View File

@ -32,13 +32,13 @@
{% block link_css %}
{{ css_link('https://cdn.jsdelivr.net/npm/vditor/dist/index.css', false) }}
{{ css_link('https://cdn.staticfile.org/vditor/3.8.13/index.css', false) }}
{% endblock %}
{% block include_js %}
{{ js_include('https://cdn.jsdelivr.net/npm/vditor/dist/index.min.js', false) }}
{{ js_include('https://cdn.staticfile.org/vditor/3.8.13/index.min.js', false) }}
{{ js_include('admin/js/vditor.js') }}
{% endblock %}

View File

@ -45,13 +45,13 @@
{% block link_css %}
{{ css_link('https://cdn.jsdelivr.net/npm/vditor/dist/index.css', false) }}
{{ css_link('https://cdn.staticfile.org/vditor/3.8.13/index.css', false) }}
{% endblock %}
{% block include_js %}
{{ js_include('https://cdn.jsdelivr.net/npm/vditor/dist/index.min.js', false) }}
{{ js_include('https://cdn.staticfile.org/vditor/3.8.13/index.min.js', false) }}
{{ js_include('admin/js/vditor.js') }}
{% endblock %}

View File

@ -15,7 +15,7 @@
{% block link_css %}
{% if gift.type == 2 %}
{{ css_link('https://cdn.jsdelivr.net/npm/vditor/dist/index.css', false) }}
{{ css_link('https://cdn.staticfile.org/vditor/3.8.13/index.css', false) }}
{% endif %}
{% endblock %}
@ -23,7 +23,7 @@
{% block include_js %}
{% if gift.type == 2 %}
{{ js_include('https://cdn.jsdelivr.net/npm/vditor/dist/index.min.js', false) }}
{{ js_include('https://cdn.staticfile.org/vditor/3.8.13/index.min.js', false) }}
{{ js_include('admin/js/cover.upload.js') }}
{{ js_include('admin/js/vditor.js') }}
{% endif %}

View File

@ -25,13 +25,13 @@
{% block link_css %}
{{ css_link('https://cdn.jsdelivr.net/npm/vditor/dist/index.css', false) }}
{{ css_link('https://cdn.staticfile.org/vditor/3.8.13/index.css', false) }}
{% endblock %}
{% block include_js %}
{{ js_include('https://cdn.jsdelivr.net/npm/vditor/dist/index.min.js', false) }}
{{ js_include('https://cdn.staticfile.org/vditor/3.8.13/index.min.js', false) }}
{{ js_include('lib/xm-select.js') }}
{{ js_include('admin/js/vditor.js') }}

View File

@ -7,6 +7,8 @@
namespace App\Http\Home\Services;
use App\Models\Course as CourseModel;
use App\Repos\Chapter as ChapterRepo;
use App\Traits\Client as ClientTrait;
class FullH5Url extends Service
@ -118,7 +120,19 @@ class FullH5Url extends Service
public function getChapterInfoUrl($id)
{
return sprintf('%s/chapter/info?id=%s', $this->baseUrl, $id);
$chapterRepo = new ChapterRepo();
$chapter = $chapterRepo->findById($id);
if ($chapter->model == CourseModel::MODEL_VOD) {
return sprintf('%s/chapter/vod?id=%s', $this->baseUrl, $id);
} elseif ($chapter->model == CourseModel::MODEL_LIVE) {
return sprintf('%s/chapter/live?id=%s', $this->baseUrl, $id);
} elseif ($chapter->model == CourseModel::MODEL_READ) {
return sprintf('%s/chapter/read?id=%s', $this->baseUrl, $id);
} else {
return $this->getHomeUrl();
}
}
public function getUserIndexUrl($id)

View File

@ -23,7 +23,7 @@
<input class="layui-input" type="text" name="verify_code" autocomplete="off" placeholder="验证码" lay-verify="required">
</div>
<div class="layui-input-inline verify-btn-inline">
<button id="cv-emit-btn" class="layui-btn layui-btn-primary layui-btn-disabled" type="button" disabled="disabled">获取验证码</button>
<button id="cv-emit-btn" class="layui-btn layui-btn-disabled" type="button" disabled="disabled">获取验证码</button>
</div>
</div>
<div class="layui-form-item">

View File

@ -38,7 +38,7 @@
<input class="layui-input" type="text" name="verify_code" placeholder="验证码" lay-verify="required">
</div>
<div class="layui-input-inline verify-btn-inline">
<button id="cv-emit-btn" class="layui-btn layui-btn-primary layui-btn-disabled" type="button" disabled="disabled">获取验证码</button>
<button id="cv-emit-btn" class="layui-btn layui-btn-disabled" type="button" disabled="disabled">获取验证码</button>
</div>
</div>
<div class="layui-form-item">

View File

@ -41,13 +41,13 @@
{% block link_css %}
{{ css_link('https://cdn.jsdelivr.net/npm/vditor/dist/index.css', false) }}
{{ css_link('https://cdn.staticfile.org/vditor/3.8.13/index.css', false) }}
{% endblock %}
{% block include_js %}
{{ js_include('https://cdn.jsdelivr.net/npm/vditor/dist/index.min.js', false) }}
{{ js_include('https://cdn.staticfile.org/vditor/3.8.13/index.min.js', false) }}
{{ js_include('home/js/answer.edit.js') }}
{{ js_include('home/js/vditor.js') }}

View File

@ -36,13 +36,13 @@
{% block link_css %}
{{ css_link('https://cdn.jsdelivr.net/npm/vditor/dist/index.css', false) }}
{{ css_link('https://cdn.staticfile.org/vditor/3.8.13/index.css', false) }}
{% endblock %}
{% block include_js %}
{{ js_include('https://cdn.jsdelivr.net/npm/vditor/dist/index.min.js', false) }}
{{ js_include('https://cdn.staticfile.org/vditor/3.8.13/index.min.js', false) }}
{{ js_include('home/js/answer.edit.js') }}
{{ js_include('home/js/vditor.js') }}

View File

@ -76,13 +76,13 @@
{% block link_css %}
{{ css_link('https://cdn.jsdelivr.net/npm/vditor/dist/index.css', false) }}
{{ css_link('https://cdn.staticfile.org/vditor/3.8.13/index.css', false) }}
{% endblock %}
{% block include_js %}
{{ js_include('https://cdn.jsdelivr.net/npm/vditor/dist/index.min.js', false) }}
{{ js_include('https://cdn.staticfile.org/vditor/3.8.13/index.min.js', false) }}
{{ js_include('lib/xm-select.js') }}
{{ js_include('home/js/article.edit.js') }}
{{ js_include('home/js/vditor.js') }}

View File

@ -96,7 +96,7 @@
<div class="course-meta wrap clearfix">
<div class="cover">
<span class="model layui-badge layui-bg-green">{{ model_type(course.model) }}</span>
<img src="{{ course.cover }}!cover_270" alt="{{ course.title }}">
<img src="{{ course.cover }}" alt="{{ course.title }}">
</div>
<div class="info">
{% if course.model == 1 %}

View File

@ -32,7 +32,7 @@
<a href="{{ course_url }}">{{ gift.name }}</a>
</p>
{% else %}
<p class="item">{{ gift.name }} }}</p>
<p class="item">{{ gift.name }}</p>
{% endif %}
<p class="item stats">
<span class="key">兑换人次</span>

View File

@ -56,13 +56,13 @@
{% block link_css %}
{{ css_link('https://cdn.jsdelivr.net/npm/vditor/dist/index.css', false) }}
{{ css_link('https://cdn.staticfile.org/vditor/3.8.13/index.css', false) }}
{% endblock %}
{% block include_js %}
{{ js_include('https://cdn.jsdelivr.net/npm/vditor/dist/index.min.js', false) }}
{{ js_include('https://cdn.staticfile.org/vditor/3.8.13/index.min.js', false) }}
{{ js_include('lib/xm-select.js') }}
{{ js_include('home/js/question.edit.js') }}
{{ js_include('home/js/vditor.js') }}

View File

@ -28,7 +28,7 @@
<input class="layui-input" type="text" name="verify_code" lay-verify="required">
</div>
<div class="layui-input-inline verify-btn-inline">
<button id="cv-emit-btn" class="layui-btn layui-btn-primary layui-btn-disabled" type="button" disabled="disabled">获取验证码</button>
<button id="cv-emit-btn" class="layui-btn layui-btn-disabled" type="button" disabled="disabled">获取验证码</button>
</div>
</div>
<div class="layui-form-item">

View File

@ -28,7 +28,7 @@
<input class="layui-input" type="text" name="verify_code" lay-verify="required">
</div>
<div class="layui-input-inline verify-btn-inline">
<button id="cv-emit-btn" class="layui-btn layui-btn-primary layui-btn-disabled" type="button" disabled="disabled">获取验证码</button>
<button id="cv-emit-btn" class="layui-btn layui-btn-disabled" type="button" disabled="disabled">获取验证码</button>
</div>
</div>
<div class="layui-form-item">

View File

@ -16,7 +16,7 @@ class AppInfo
protected $link = 'https://koogua.com';
protected $version = '1.5.';
protected $version = '1.5.2';
public function __get($name)
{

View File

@ -52,7 +52,7 @@ $error['account.login_pwd_incorrect'] = '登录密码不正确';
$error['account.invalid_login_name'] = '无效的登录名';
$error['account.invalid_email'] = '无效的电子邮箱';
$error['account.invalid_phone'] = '无效的手机号';
$error['account.invalid_pwd'] = '无效的密码(字母或数字6-16位';
$error['account.invalid_pwd'] = '无效的密码(字母|数字|特殊字符6-16位';
$error['account.email_taken'] = '邮箱被占用';
$error['account.phone_taken'] = '手机号被占用';
$error['account.pwd_not_match'] = '密码不匹配';

View File

@ -1,6 +1,7 @@
layui.use(['jquery', 'util'], function () {
layui.use(['jquery', 'layer', 'util'], function () {
var $ = layui.jquery;
var layer = layui.layer;
var util = layui.util;
var timeCounting = false;
@ -62,6 +63,9 @@ layui.use(['jquery', 'util'], function () {
type: 'POST',
url: postUrl,
data: postData,
success: function () {
layer.msg('发送验证码成功', {icon: 1});
}
});
$submit.removeClass('layui-btn-disabled').removeAttr('disabled');
$emit.addClass('layui-btn-disabled').attr('disabled', 'disabled');