mirror of
https://gitee.com/koogua/course-tencent-cloud.git
synced 2025-06-25 12:09:09 +08:00
Merge branch 'koogua/v1.5.4' into demo
# Conflicts: # app/Http/Admin/Views/public/login.volt # app/Http/Home/Views/account/login_by_password.volt
This commit is contained in:
commit
ab06bbe74c
11
CHANGELOG.md
11
CHANGELOG.md
@ -1,6 +1,15 @@
|
|||||||
### [v1.5.4](https://gitee.com/koogua/course-tencent-cloud/releases/v1.5.4)(2022-06-30)
|
### [v1.5.4](https://gitee.com/koogua/course-tencent-cloud/releases/v1.5.4)(2022-06-15)
|
||||||
|
|
||||||
|
- 增加migration助手SettingTrait
|
||||||
|
- 增加积分兑换会员
|
||||||
|
- 增加ISP备案和电子执照配置
|
||||||
|
- 增加获取视频时长补偿机制
|
||||||
|
- 优化课程和套餐发货
|
||||||
|
- 优化验证码
|
||||||
|
- 优化视频点播回调处理任务
|
||||||
- 优化章节排序初始值和步长
|
- 优化章节排序初始值和步长
|
||||||
|
- 优化后台视频上传和转码
|
||||||
|
- 修正获取子分类查询条件
|
||||||
|
|
||||||
### [v1.5.3](https://gitee.com/koogua/course-tencent-cloud/releases/v1.5.3)(2022-05-30)
|
### [v1.5.3](https://gitee.com/koogua/course-tencent-cloud/releases/v1.5.3)(2022-05-30)
|
||||||
|
|
||||||
|
@ -20,23 +20,23 @@ class CategoryList extends Cache
|
|||||||
return $this->lifetime;
|
return $this->lifetime;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getKey($type = null)
|
public function getKey($id = null)
|
||||||
{
|
{
|
||||||
return "category_list:{$type}";
|
return "category_list:{$id}";
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param null $type
|
* @param null $id
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function getContent($type = null)
|
public function getContent($id = null)
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var Resultset $categories
|
* @var Resultset $categories
|
||||||
*/
|
*/
|
||||||
$categories = CategoryModel::query()
|
$categories = CategoryModel::query()
|
||||||
->columns(['id', 'parent_id', 'name', 'priority', 'level', 'path'])
|
->columns(['id', 'parent_id', 'name', 'priority', 'level', 'path'])
|
||||||
->where('type = :type:', ['type' => $type])
|
->where('type = :type:', ['type' => $id])
|
||||||
->andWhere('published = 1')
|
->andWhere('published = 1')
|
||||||
->andWhere('deleted = 0')
|
->andWhere('deleted = 0')
|
||||||
->orderBy('level ASC, priority ASC')
|
->orderBy('level ASC, priority ASC')
|
||||||
|
@ -19,16 +19,16 @@ class CategoryTreeList extends Cache
|
|||||||
return $this->lifetime;
|
return $this->lifetime;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getKey($type = null)
|
public function getKey($id = null)
|
||||||
{
|
{
|
||||||
return "category_tree_list:{$type}";
|
return "category_tree_list:{$id}";
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getContent($type = null)
|
public function getContent($id = null)
|
||||||
{
|
{
|
||||||
$builder = new CategoryTreeListBuilder();
|
$builder = new CategoryTreeListBuilder();
|
||||||
|
|
||||||
$list = $builder->handle($type);
|
$list = $builder->handle($id);
|
||||||
|
|
||||||
return $list ?: [];
|
return $list ?: [];
|
||||||
}
|
}
|
||||||
|
@ -145,6 +145,33 @@ class DeliverTask extends Task
|
|||||||
$service = new VipDeliverService();
|
$service = new VipDeliverService();
|
||||||
|
|
||||||
$service->handle($vip, $user);
|
$service->handle($vip, $user);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 先下单购买课程,发现会员有优惠,于是购买会员,再回头购买课程
|
||||||
|
* 自动关闭未支付订单,让用户可以使用会员价再次下单
|
||||||
|
*/
|
||||||
|
$this->closePendingOrders($user->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function closePendingOrders($userId)
|
||||||
|
{
|
||||||
|
$orders = $this->findUserPendingOrders($userId);
|
||||||
|
|
||||||
|
if ($orders->count() == 0) return;
|
||||||
|
|
||||||
|
$itemTypes = [
|
||||||
|
OrderModel::ITEM_COURSE,
|
||||||
|
OrderModel::ITEM_PACKAGE,
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach ($orders as $order) {
|
||||||
|
$case1 = in_array($order->item_type, $itemTypes);
|
||||||
|
$case2 = $order->promotion_type == 0;
|
||||||
|
if ($case1 && $case2) {
|
||||||
|
$order->status = OrderModel::STATUS_CLOSED;
|
||||||
|
$order->update();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function handleOrderConsumePoint(OrderModel $order)
|
protected function handleOrderConsumePoint(OrderModel $order)
|
||||||
@ -209,6 +236,20 @@ class DeliverTask extends Task
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int $userId
|
||||||
|
* @return ResultsetInterface|Resultset|OrderModel[]
|
||||||
|
*/
|
||||||
|
protected function findUserPendingOrders($userId)
|
||||||
|
{
|
||||||
|
$status = OrderModel::STATUS_PENDING;
|
||||||
|
|
||||||
|
return OrderModel::query()
|
||||||
|
->where('owner_id = :owner_id:', ['owner_id' => $userId])
|
||||||
|
->andWhere('status = :status:', ['status' => $status])
|
||||||
|
->execute();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param int $limit
|
* @param int $limit
|
||||||
* @return ResultsetInterface|Resultset|TaskModel[]
|
* @return ResultsetInterface|Resultset|TaskModel[]
|
||||||
|
@ -50,6 +50,7 @@ class Article extends Service
|
|||||||
'type' => CategoryModel::TYPE_ARTICLE,
|
'type' => CategoryModel::TYPE_ARTICLE,
|
||||||
'level' => 1,
|
'level' => 1,
|
||||||
'published' => 1,
|
'published' => 1,
|
||||||
|
'deleted' => 0,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,7 +74,10 @@ class FlashSale extends Service
|
|||||||
{
|
{
|
||||||
$packageRepo = new PackageRepo();
|
$packageRepo = new PackageRepo();
|
||||||
|
|
||||||
$items = $packageRepo->findAll(['published' => 1]);
|
$items = $packageRepo->findAll([
|
||||||
|
'published' => 1,
|
||||||
|
'deleted' => 0,
|
||||||
|
]);
|
||||||
|
|
||||||
if ($items->count() == 0) return [];
|
if ($items->count() == 0) return [];
|
||||||
|
|
||||||
|
@ -49,6 +49,7 @@ class Question extends Service
|
|||||||
'type' => CategoryModel::TYPE_ARTICLE,
|
'type' => CategoryModel::TYPE_ARTICLE,
|
||||||
'level' => 1,
|
'level' => 1,
|
||||||
'published' => 1,
|
'published' => 1,
|
||||||
|
'deleted' => 0,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ class Session extends Service
|
|||||||
|
|
||||||
$validator = new CaptchaValidator();
|
$validator = new CaptchaValidator();
|
||||||
|
|
||||||
$validator->checkCode($post['ticket'], $post['rand']);
|
$validator->checkCode($post['captcha']['ticket'], $post['captcha']['rand']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->auth->saveAuthInfo($user);
|
$this->auth->saveAuthInfo($user);
|
||||||
|
@ -48,8 +48,15 @@
|
|||||||
</fieldset>
|
</fieldset>
|
||||||
<div class="layui-form-item" id="upload-block">
|
<div class="layui-form-item" id="upload-block">
|
||||||
<label class="layui-form-label">视频文件</label>
|
<label class="layui-form-label">视频文件</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-inline">
|
||||||
<span class="layui-btn" id="upload-btn">选择视频</span>
|
<input class="layui-input" type="text" name="file_id" value="{{ file_id }}" readonly="readonly" lay-verify="required">
|
||||||
|
</div>
|
||||||
|
<div class="layui-inline">
|
||||||
|
{% if vod.file_id > 0 %}
|
||||||
|
<span class="layui-btn" id="upload-btn">重新上传</span>
|
||||||
|
{% else %}
|
||||||
|
<span class="layui-btn" id="upload-btn">选择视频</span>
|
||||||
|
{% endif %}
|
||||||
<input class="layui-hide" type="file" name="file" accept="video/*,audio/*">
|
<input class="layui-hide" type="file" name="file" accept="video/*,audio/*">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -61,12 +68,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-form-item">
|
|
||||||
<label class="layui-form-label">文件编号</label>
|
|
||||||
<div class="layui-input-block">
|
|
||||||
<input class="layui-input" type="text" name="file_id" value="{{ file_id }}" readonly="readonly" lay-verify="required">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<label class="layui-form-label"></label>
|
<label class="layui-form-label"></label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
|
@ -7,12 +7,12 @@
|
|||||||
|
|
||||||
<div class="kg-login-wrap">
|
<div class="kg-login-wrap">
|
||||||
<div class="layui-card">
|
<div class="layui-card">
|
||||||
<div class="layui-card-header">管理登录</div>
|
<div class="layui-card-header">后台登录</div>
|
||||||
<div class="layui-card-body">
|
<div class="layui-card-body">
|
||||||
<form class="layui-form kg-login-form" method="POST" action="{{ url({'for':'admin.login'}) }}">
|
<form class="layui-form kg-login-form" method="POST" action="{{ url({'for':'admin.login'}) }}">
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<label class="layui-icon layui-icon-username"></label>
|
<label class="layui-icon layui-icon-username"></label>
|
||||||
<input class="layui-input" type="text" name="account" value="100015@163.com" autocomplete="off" placeholder="手机 / 邮箱" lay-verify="required">
|
<input id="cl-account" class="layui-input" type="text" name="account" autocomplete="off" placeholder="手机 / 邮箱" lay-verify="required">
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<label class="layui-icon layui-icon-password"></label>
|
<label class="layui-icon layui-icon-password"></label>
|
||||||
@ -21,15 +21,17 @@
|
|||||||
{% if captcha.enabled == 1 %}
|
{% if captcha.enabled == 1 %}
|
||||||
<div id="captcha-block" class="layui-form-item">
|
<div id="captcha-block" class="layui-form-item">
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<button id="captcha-btn" class="layui-btn layui-btn-fluid" type="button" data-app-id="{{ captcha.app_id }}">点击完成验证</button>
|
<button id="cl-emit-btn" class="layui-btn layui-btn-fluid" type="button">点击完成验证</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<button id="submit-btn" class="layui-btn layui-btn-fluid {{ disabled_class }}" {{ disabled_submit }} lay-submit="true" lay-filter="go">立即登录</button>
|
<button id="cl-submit-btn" class="layui-btn layui-btn-fluid {{ disabled_class }}" {{ disabled_submit }} lay-submit="true" lay-filter="go">立即登录</button>
|
||||||
<input type="hidden" name="ticket">
|
<input id="cl-captcha-enabled" type="hidden" value="{{ captcha.enabled }}">
|
||||||
<input type="hidden" name="rand">
|
<input id="cl-captcha-appId" type="hidden" value="{{ captcha.app_id }}">
|
||||||
|
<input id="cl-captcha-ticket" type="hidden" name="captcha[ticket]">
|
||||||
|
<input id="cl-captcha-rand" type="hidden" name="captcha[rand]">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
@ -72,12 +74,7 @@
|
|||||||
|
|
||||||
{{ js_include('lib/jquery.min.js') }}
|
{{ js_include('lib/jquery.min.js') }}
|
||||||
{{ js_include('lib/jquery.buoyant.min.js') }}
|
{{ js_include('lib/jquery.buoyant.min.js') }}
|
||||||
|
{{ js_include('https://ssl.captcha.qq.com/TCaptcha.js', false) }}
|
||||||
{% if captcha.enabled == 1 %}
|
|
||||||
|
|
||||||
{{ js_include('https://ssl.captcha.qq.com/TCaptcha.js', false) }}
|
|
||||||
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
@ -98,24 +95,27 @@
|
|||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{% if captcha.enabled == 1 %}
|
<script>
|
||||||
<script>
|
layui.use(['jquery'], function () {
|
||||||
layui.use(['jquery', 'form'], function () {
|
|
||||||
var $ = layui.jquery;
|
var $ = layui.jquery;
|
||||||
new TencentCaptcha(
|
|
||||||
$('#captcha-btn')[0],
|
if ($('#cl-captcha-enabled').val() === '1') {
|
||||||
$('#captcha-btn').data('app-id'),
|
var captcha = new TencentCaptcha(
|
||||||
|
$('#cl-emit-btn')[0],
|
||||||
|
$('#cl-captcha-appId').val(),
|
||||||
function (res) {
|
function (res) {
|
||||||
if (res.ret === 0) {
|
if (res.ret === 0) {
|
||||||
$('input[name=ticket]').val(res.ticket);
|
$('#cl-captcha-ticket').val(res.ticket);
|
||||||
$('input[name=rand]').val(res.randstr);
|
$('#cl-captcha-rand').val(res.randstr);
|
||||||
|
$('#cl-submit-btn').removeClass('layui-btn-disabled').removeAttr('disabled');
|
||||||
$('#captcha-block').hide();
|
$('#captcha-block').hide();
|
||||||
$('#submit-btn').removeClass('layui-btn-disabled').removeAttr('disabled');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
}
|
||||||
</script>
|
|
||||||
{% endif %}
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
@ -62,7 +62,7 @@ class Account extends Service
|
|||||||
|
|
||||||
$validator = new CaptchaValidator();
|
$validator = new CaptchaValidator();
|
||||||
|
|
||||||
$validator->checkCode($post['ticket'], $post['rand']);
|
$validator->checkCode($post['captcha']['ticket'], $post['captcha']['rand']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->auth->saveAuthInfo($user);
|
$this->auth->saveAuthInfo($user);
|
||||||
|
@ -29,10 +29,10 @@
|
|||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<button id="cv-submit-btn" class="layui-btn layui-btn-fluid layui-btn-disabled" disabled="disabled" lay-submit="true" lay-filter="go">重置密码</button>
|
<button id="cv-submit-btn" class="layui-btn layui-btn-fluid layui-btn-disabled" disabled="disabled" lay-submit="true" lay-filter="go">重置密码</button>
|
||||||
<input id="cv-enabled" type="hidden" value="{{ captcha.enabled }}">
|
<input id="cv-captcha-enabled" type="hidden" value="{{ captcha.enabled }}">
|
||||||
<input id="cv-app-id" type="hidden" value="{{ captcha.app_id }}">
|
<input id="cv-captcha-appId" type="hidden" value="{{ captcha.app_id }}">
|
||||||
<input id="cv-ticket" type="hidden" name="ticket">
|
<input id="cv-captcha-ticket" type="hidden" name="captcha[ticket]">
|
||||||
<input id="cv-rand" type="hidden" name="rand">
|
<input id="cv-captcha-rand" type="hidden" name="captcha[rand]">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
<form class="layui-form account-form" method="POST" action="{{ url({'for':'home.account.pwd_login'}) }}">
|
<form class="layui-form account-form" method="POST" action="{{ url({'for':'home.account.pwd_login'}) }}">
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<label class="layui-icon layui-icon-username"></label>
|
<label class="layui-icon layui-icon-username"></label>
|
||||||
<input class="layui-input" type="text" name="account" value="100015@163.com" autocomplete="off" placeholder="手机 / 邮箱" lay-verify="required">
|
<input id="cl-account" class="layui-input" type="text" name="account" value="100015@163.com" autocomplete="off" placeholder="手机 / 邮箱" lay-verify="required">
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<label class="layui-icon layui-icon-password"></label>
|
<label class="layui-icon layui-icon-password"></label>
|
||||||
@ -13,16 +13,18 @@
|
|||||||
{% if captcha.enabled == 1 %}
|
{% if captcha.enabled == 1 %}
|
||||||
<div id="captcha-block" class="layui-form-item">
|
<div id="captcha-block" class="layui-form-item">
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<button id="captcha-btn" class="layui-btn layui-btn-fluid" type="button" data-app-id="{{ captcha.app_id }}">点击完成验证</button>
|
<button id="cl-emit-btn" class="layui-btn layui-btn-fluid" type="button">点击完成验证</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<button id="submit-btn" class="layui-btn layui-btn-fluid {{ disabled_class }}" {{ disabled_submit }} lay-submit="true" lay-filter="go">立即登录</button>
|
<button id="cl-submit-btn" class="layui-btn layui-btn-fluid {{ disabled_class }}" {{ disabled_submit }} lay-submit="true" lay-filter="go">立即登录</button>
|
||||||
<input type="hidden" name="return_url" value="{{ return_url }}">
|
<input type="hidden" name="return_url" value="{{ return_url }}">
|
||||||
<input id="ticket" type="hidden" name="ticket">
|
<input id="cl-captcha-enabled" type="hidden" value="{{ captcha.enabled }}">
|
||||||
<input id="rand" type="hidden" name="rand">
|
<input id="cl-captcha-appId" type="hidden" value="{{ captcha.app_id }}">
|
||||||
|
<input id="cl-captcha-ticket" type="hidden" name="captcha[ticket]">
|
||||||
|
<input id="cl-captcha-rand" type="hidden" name="captcha[rand]">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
@ -16,10 +16,10 @@
|
|||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<button id="cv-submit-btn" class="layui-btn layui-btn-fluid layui-btn-disabled" disabled="disabled" lay-submit="true" lay-filter="go">立即登录</button>
|
<button id="cv-submit-btn" class="layui-btn layui-btn-fluid layui-btn-disabled" disabled="disabled" lay-submit="true" lay-filter="go">立即登录</button>
|
||||||
<input type="hidden" name="return_url" value="{{ return_url }}">
|
<input type="hidden" name="return_url" value="{{ return_url }}">
|
||||||
<input id="cv-enabled" type="hidden" value="{{ captcha.enabled }}">
|
<input id="cv-captcha-enabled" type="hidden" value="{{ captcha.enabled }}">
|
||||||
<input id="cv-app-id" type="hidden" value="{{ captcha.app_id }}">
|
<input id="cv-captcha-appId" type="hidden" value="{{ captcha.app_id }}">
|
||||||
<input id="cv-ticket" type="hidden" name="ticket">
|
<input id="cv-captcha-ticket" type="hidden" name="captcha[ticket]">
|
||||||
<input id="cv-rand" type="hidden" name="rand">
|
<input id="cv-captcha-rand" type="hidden" name="captcha[rand]">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
@ -45,10 +45,10 @@
|
|||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<button id="cv-submit-btn" class="layui-btn layui-btn-fluid layui-btn-disabled" disabled="disabled" lay-submit="true" lay-filter="go">注册帐号</button>
|
<button id="cv-submit-btn" class="layui-btn layui-btn-fluid layui-btn-disabled" disabled="disabled" lay-submit="true" lay-filter="go">注册帐号</button>
|
||||||
<input type="hidden" name="return_url" value="{{ return_url }}">
|
<input type="hidden" name="return_url" value="{{ return_url }}">
|
||||||
<input id="cv-enabled" type="hidden" value="{{ captcha.enabled }}">
|
<input id="cv-captcha-enabled" type="hidden" value="{{ captcha.enabled }}">
|
||||||
<input id="cv-app-id" type="hidden" value="{{ captcha.app_id }}">
|
<input id="cv-captcha-appId" type="hidden" value="{{ captcha.app_id }}">
|
||||||
<input id="cv-ticket" type="hidden" name="ticket">
|
<input id="cv-captcha-ticket" type="hidden" name="captcha[ticket]">
|
||||||
<input id="cv-rand" type="hidden" name="rand">
|
<input id="cv-captcha-rand" type="hidden" name="captcha[rand]">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
@ -34,10 +34,10 @@
|
|||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<button id="cv-submit-btn" class="layui-btn layui-btn-fluid layui-btn-disabled" disabled="disabled" lay-submit="true" lay-filter="go">提交修改</button>
|
<button id="cv-submit-btn" class="layui-btn layui-btn-fluid layui-btn-disabled" disabled="disabled" lay-submit="true" lay-filter="go">提交修改</button>
|
||||||
<input id="cv-enabled" type="hidden" value="{{ captcha.enabled }}">
|
<input id="cv-captcha-enabled" type="hidden" value="{{ captcha.enabled }}">
|
||||||
<input id="cv-app-id" type="hidden" value="{{ captcha.app_id }}">
|
<input id="cv-captcha-appId" type="hidden" value="{{ captcha.app_id }}">
|
||||||
<input id="cv-ticket" type="hidden" name="ticket">
|
<input id="cv-captcha-ticket" type="hidden" name="captcha[ticket]">
|
||||||
<input id="cv-rand" type="hidden" name="rand">
|
<input id="cv-captcha-rand" type="hidden" name="captcha[rand]">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
@ -34,10 +34,10 @@
|
|||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<button id="cv-submit-btn" class="layui-btn layui-btn-fluid layui-btn-disabled" disabled="disabled" lay-submit="true" lay-filter="go">提交修改</button>
|
<button id="cv-submit-btn" class="layui-btn layui-btn-fluid layui-btn-disabled" disabled="disabled" lay-submit="true" lay-filter="go">提交修改</button>
|
||||||
<input id="cv-enabled" type="hidden" value="{{ captcha.enabled }}">
|
<input id="cv-captcha-enabled" type="hidden" value="{{ captcha.enabled }}">
|
||||||
<input id="cv-app-id" type="hidden" value="{{ captcha.app_id }}">
|
<input id="cv-captcha-appId" type="hidden" value="{{ captcha.app_id }}">
|
||||||
<input id="cv-ticket" type="hidden" name="ticket">
|
<input id="cv-captcha-ticket" type="hidden" name="captcha[ticket]">
|
||||||
<input id="cv-rand" type="hidden" name="rand">
|
<input id="cv-captcha-rand" type="hidden" name="captcha[rand]">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
@ -100,7 +100,7 @@ class Account extends Model
|
|||||||
$user = new User();
|
$user = new User();
|
||||||
|
|
||||||
$user->id = $this->id;
|
$user->id = $this->id;
|
||||||
$user->name = "user:{$this->id}";
|
$user->name = "user_{$this->id}";
|
||||||
|
|
||||||
if ($user->create() === false) {
|
if ($user->create() === false) {
|
||||||
throw new \RuntimeException('Create User Failed');
|
throw new \RuntimeException('Create User Failed');
|
||||||
|
@ -19,7 +19,10 @@ class XmTagList extends LogicService
|
|||||||
{
|
{
|
||||||
$tagRepo = new TagRepo();
|
$tagRepo = new TagRepo();
|
||||||
|
|
||||||
$allTags = $tagRepo->findAll(['published' => 1]);
|
$allTags = $tagRepo->findAll([
|
||||||
|
'published' => 1,
|
||||||
|
'deleted' => 0,
|
||||||
|
]);
|
||||||
|
|
||||||
if ($allTags->count() == 0) return [];
|
if ($allTags->count() == 0) return [];
|
||||||
|
|
||||||
|
@ -19,7 +19,10 @@ class XmTagList extends LogicService
|
|||||||
{
|
{
|
||||||
$tagRepo = new TagRepo();
|
$tagRepo = new TagRepo();
|
||||||
|
|
||||||
$allTags = $tagRepo->findAll(['published' => 1]);
|
$allTags = $tagRepo->findAll([
|
||||||
|
'published' => 1,
|
||||||
|
'deleted' => 0,
|
||||||
|
]);
|
||||||
|
|
||||||
if ($allTags->count() == 0) return [];
|
if ($allTags->count() == 0) return [];
|
||||||
|
|
||||||
|
@ -19,7 +19,10 @@ class XmTagList extends LogicService
|
|||||||
{
|
{
|
||||||
$tagRepo = new TagRepo();
|
$tagRepo = new TagRepo();
|
||||||
|
|
||||||
$allTags = $tagRepo->findAll(['published' => 1]);
|
$allTags = $tagRepo->findAll([
|
||||||
|
'published' => 1,
|
||||||
|
'deleted' => 0,
|
||||||
|
]);
|
||||||
|
|
||||||
if ($allTags->count() == 0) return [];
|
if ($allTags->count() == 0) return [];
|
||||||
|
|
||||||
|
@ -23,6 +23,7 @@ class TagList extends LogicService
|
|||||||
$params = $pagerQuery->getParams();
|
$params = $pagerQuery->getParams();
|
||||||
|
|
||||||
$params['published'] = 1;
|
$params['published'] = 1;
|
||||||
|
$params['deleted'] = 0;
|
||||||
|
|
||||||
$sort = $pagerQuery->getSort();
|
$sort = $pagerQuery->getSort();
|
||||||
$page = $pagerQuery->getPage();
|
$page = $pagerQuery->getPage();
|
||||||
|
@ -29,7 +29,7 @@ class MailCode extends LogicService
|
|||||||
|
|
||||||
$validator = new CaptchaValidator();
|
$validator = new CaptchaValidator();
|
||||||
|
|
||||||
$validator->checkCode($post['ticket'], $post['rand']);
|
$validator->checkCode($post['captcha']['ticket'], $post['captcha']['rand']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$service = new MailVerifyService();
|
$service = new MailVerifyService();
|
||||||
|
@ -29,7 +29,7 @@ class SmsCode extends LogicService
|
|||||||
|
|
||||||
$validator = new CaptchaValidator();
|
$validator = new CaptchaValidator();
|
||||||
|
|
||||||
$validator->checkCode($post['ticket'], $post['rand']);
|
$validator->checkCode($post['captcha']['ticket'], $post['captcha']['rand']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$service = new SmsVerifyService();
|
$service = new SmsVerifyService();
|
||||||
|
@ -1,27 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
|
|
||||||
* @license https://opensource.org/licenses/GPL-2.0
|
|
||||||
* @link https://www.koogua.com
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace App\Services\Logic\Verify;
|
|
||||||
|
|
||||||
use App\Services\Logic\Service as LogicService;
|
|
||||||
use App\Validators\Verify as VerifyValidator;
|
|
||||||
|
|
||||||
class Ticket extends LogicService
|
|
||||||
{
|
|
||||||
|
|
||||||
public function handle()
|
|
||||||
{
|
|
||||||
$rand = $this->request->getPost('rand', ['trim', 'string']);
|
|
||||||
|
|
||||||
$validator = new VerifyValidator();
|
|
||||||
|
|
||||||
$rand = $validator->checkRand($rand);
|
|
||||||
|
|
||||||
return $this->crypt->encryptBase64($rand);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (c) 2022 深圳市酷瓜软件有限公司
|
* @copyright Copyright (c) 2022 深圳市酷瓜软件有限公司
|
||||||
* @license https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
* @license https://opensource.org/licenses/GPL-2.0
|
||||||
* @link https://www.koogua.com
|
* @link https://www.koogua.com
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (c) 2022 深圳市酷瓜软件有限公司
|
* @copyright Copyright (c) 2022 深圳市酷瓜软件有限公司
|
||||||
* @license https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
* @license https://opensource.org/licenses/GPL-2.0
|
||||||
* @link https://www.koogua.com
|
* @link https://www.koogua.com
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -2,16 +2,16 @@ layui.use(['jquery'], function () {
|
|||||||
|
|
||||||
var $ = layui.jquery;
|
var $ = layui.jquery;
|
||||||
|
|
||||||
if ($('#captcha-btn').length > 0) {
|
if ($('#cl-captcha-enabled').val() === '1') {
|
||||||
var captcha = new TencentCaptcha(
|
var captcha = new TencentCaptcha(
|
||||||
$('#captcha-btn')[0],
|
$('#cl-emit-btn')[0],
|
||||||
$('#captcha-btn').data('app-id'),
|
$('#cl-captcha-appId').val(),
|
||||||
function (res) {
|
function (res) {
|
||||||
if (res.ret === 0) {
|
if (res.ret === 0) {
|
||||||
$('#ticket').val(res.ticket);
|
$('#cl-captcha-ticket').val(res.ticket);
|
||||||
$('#rand').val(res.randstr);
|
$('#cl-captcha-rand').val(res.randstr);
|
||||||
|
$('#cl-submit-btn').removeClass('layui-btn-disabled').removeAttr('disabled');
|
||||||
$('#captcha-block').hide();
|
$('#captcha-block').hide();
|
||||||
$('#submit-btn').removeClass('layui-btn-disabled').removeAttr('disabled');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -9,14 +9,14 @@ layui.use(['jquery', 'layer', 'util'], function () {
|
|||||||
var $emit = $('#cv-emit-btn');
|
var $emit = $('#cv-emit-btn');
|
||||||
var $submit = $('#cv-submit-btn');
|
var $submit = $('#cv-submit-btn');
|
||||||
|
|
||||||
if ($('#cv-enabled').val() === '1') {
|
if ($('#cv-captcha-enabled').val() === '1') {
|
||||||
var captcha = new TencentCaptcha(
|
var captcha = new TencentCaptcha(
|
||||||
$emit[0],
|
$emit[0],
|
||||||
$('#cv-app-id').val(),
|
$('#cv-captcha-appId').val(),
|
||||||
function (res) {
|
function (res) {
|
||||||
if (res.ret === 0) {
|
if (res.ret === 0) {
|
||||||
$('#cv-ticket').val(res.ticket);
|
$('#cv-captcha-ticket').val(res.ticket);
|
||||||
$('#cv-rand').val(res.randstr);
|
$('#cv-captcha-rand').val(res.randstr);
|
||||||
sendVerifyCode();
|
sendVerifyCode();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -49,8 +49,10 @@ layui.use(['jquery', 'layer', 'util'], function () {
|
|||||||
if (isEmail($account.val()) || isPhone($account.val())) {
|
if (isEmail($account.val()) || isPhone($account.val())) {
|
||||||
var postUrl;
|
var postUrl;
|
||||||
var postData = {
|
var postData = {
|
||||||
ticket: $('#cv-ticket').val(),
|
captcha: {
|
||||||
rand: $('#cv-rand').val(),
|
ticket: $('#cv-captcha-ticket').val(),
|
||||||
|
rand: $('#cv-captcha-rand').val(),
|
||||||
|
}
|
||||||
};
|
};
|
||||||
if (isPhone($account.val())) {
|
if (isPhone($account.val())) {
|
||||||
postData.phone = $account.val();
|
postData.phone = $account.val();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user