mirror of
https://gitee.com/koogua/course-tencent-cloud.git
synced 2025-06-28 05:11:39 +08:00
整理登录注册代码
This commit is contained in:
parent
c0e405a51f
commit
2450d70fdc
@ -65,7 +65,7 @@ class CourseRecommendedList extends Cache
|
||||
public function findCourses($limit = 5)
|
||||
{
|
||||
return CourseModel::query()
|
||||
->where('published = 1 AND deleted = 0')
|
||||
->where('published = 1 AND deleted = 0 AND market_price > 0')
|
||||
->orderBy('RAND()')
|
||||
->limit($limit)
|
||||
->execute();
|
||||
|
@ -395,7 +395,7 @@ class Course extends Service
|
||||
|
||||
$cache = new CourseTeacherListCache();
|
||||
|
||||
$cache->rebuild();
|
||||
$cache->rebuild($course->id);
|
||||
}
|
||||
|
||||
protected function saveCategories(CourseModel $course, $categoryIds)
|
||||
|
@ -23,7 +23,7 @@
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
|
||||
<div class="layui-input-block">
|
||||
<span id="captcha-btn" class="layui-btn layui-btn-primary layui-btn-fluid" data-app-id="{{ captcha.app_id }}">点击完成验证</span>
|
||||
<span id="verify-tips" class="kg-btn-verify layui-btn layui-btn-primary layui-btn-disabled layui-btn-fluid layui-hide"><i class="layui-icon layui-icon-ok"></i>验证成功</span>
|
||||
<span id="verify-btn" class="layui-btn layui-btn-primary layui-btn-disabled layui-btn-fluid layui-hide kg-verify-btn"><i class="layui-icon layui-icon-ok"></i>验证成功</span>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
@ -62,7 +62,7 @@
|
||||
$('input[name=rand]').val(res.randstr);
|
||||
$('#captcha-btn').remove();
|
||||
$('#submit-btn').removeAttr('disabled');
|
||||
$('#verify-tips').removeClass('layui-hide');
|
||||
$('#verify-btn').removeClass('layui-hide');
|
||||
}
|
||||
}
|
||||
);
|
||||
|
@ -37,8 +37,8 @@
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
|
||||
<div class="layui-input-inline" style="width:200px;">
|
||||
<span id="front-verify-btn" class="layui-btn layui-btn-primary layui-btn-fluid" app-id="{{ captcha.app_id }}">前台验证</span>
|
||||
<span id="front-verify-tips" class="kg-btn-verify layui-btn layui-btn-primary layui-btn-fluid layui-btn-disabled layui-hide"><i class="layui-icon layui-icon-ok"></i>前台验证成功</span>
|
||||
<span id="front-captcha-btn" class="layui-btn layui-btn-primary layui-btn-fluid" data-app-id="{{ captcha.app_id }}">前台验证</span>
|
||||
<span id="front-verify-tips" class="kg-verify-btn layui-btn layui-btn-primary layui-btn-fluid layui-btn-disabled layui-hide"><i class="layui-icon layui-icon-ok"></i>前台验证成功</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -46,7 +46,7 @@
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
|
||||
<div class="layui-input-inline" style="width:200px;">
|
||||
<span id="back-verify-btn" class="layui-btn layui-btn-primary layui-btn-fluid" disabled="true" lay-submit="true" lay-filter="back-verify">后台验证</span>
|
||||
<span id="back-verify-tips" class="kg-btn-verify layui-btn layui-btn-primary layui-btn-fluid layui-btn-disabled layui-hide"><i class="layui-icon layui-icon-ok"></i>后台验证成功</span>
|
||||
<span id="back-verify-tips" class="kg-verify-btn layui-btn layui-btn-primary layui-btn-fluid layui-btn-disabled layui-hide"><i class="layui-icon layui-icon-ok"></i>后台验证成功</span>
|
||||
<input type="hidden" name="ticket">
|
||||
<input type="hidden" name="rand">
|
||||
</div>
|
||||
@ -65,13 +65,13 @@
|
||||
var layer = layui.layer;
|
||||
|
||||
var captcha = new TencentCaptcha(
|
||||
$('#front-verify-btn')[0],
|
||||
$('#front-verify-btn').attr('app-id'),
|
||||
$('#front-captcha-btn')[0],
|
||||
$('#front-captcha-btn').attr('data-app-id'),
|
||||
function (res) {
|
||||
if (res.ret === 0) {
|
||||
$('input[name=ticket]').val(res.ticket);
|
||||
$('input[name=rand]').val(res.randstr);
|
||||
$('#front-verify-btn').remove();
|
||||
$('#front-captcha-btn').remove();
|
||||
$('#back-verify-btn').removeAttr('disabled');
|
||||
$('#front-verify-tips').removeClass('layui-hide');
|
||||
}
|
||||
|
@ -88,22 +88,22 @@ class AccountController extends Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* @Get("/password/reset", name="web.account.reset_pwd")
|
||||
* @Get("/password/forget", name="web.account.forget_pwd")
|
||||
*/
|
||||
public function resetPasswordAction()
|
||||
public function forgetPasswordAction()
|
||||
{
|
||||
$service = new AccountService();
|
||||
|
||||
$captcha = $service->getSectionSettings('captcha');
|
||||
|
||||
$this->view->pick('account/reset_password');
|
||||
$this->view->pick('account/forget_password');
|
||||
$this->view->setVar('captcha', $captcha);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Post("/password/reset", name="web.account.do_reset_pwd")
|
||||
* @Post("/password/reset", name="web.account.reset_pwd")
|
||||
*/
|
||||
public function doResetPasswordAction()
|
||||
public function resetPasswordAction()
|
||||
{
|
||||
|
||||
}
|
||||
|
51
app/Http/Web/Views/account/forget_password.volt
Normal file
51
app/Http/Web/Views/account/forget_password.volt
Normal file
@ -0,0 +1,51 @@
|
||||
{% extends 'templates/base.volt' %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="layui-breadcrumb breadcrumb">
|
||||
<a href="/">首页</a>
|
||||
<a><cite>重置密码</cite></a>
|
||||
</div>
|
||||
|
||||
<div class="register-container">
|
||||
<form class="layui-form" method="POST" action="{{ url({'for':'web.account.reset_pwd'}) }}">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-username"></i></label>
|
||||
<div class="layui-input-block">
|
||||
<input id="cv-account" class="layui-input" type="text" name="account" autocomplete="off" placeholder="手机 / 邮箱" lay-verify="required">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-password"></i></label>
|
||||
<div class="layui-input-block">
|
||||
<input class="layui-input" type="password" name="new_password" autocomplete="off" placeholder="新密码" lay-verify="required">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
|
||||
<div class="layui-input-block">
|
||||
<input class="layui-input" type="text" name="verify_code" placeholder="验证码" lay-verify="required">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<span id="cv-captcha-btn" class="layui-btn layui-btn-primary layui-btn-fluid" data-app-id="{{ captcha.app_id }}">点击完成验证</span>
|
||||
<span id="cv-verify-btn" class="layui-btn layui-btn-primary layui-btn-disabled layui-btn-fluid layui-hide verify-btn"><i class="layui-icon layui-icon-ok"></i>验证成功</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button id="cv-submit-btn" class="layui-btn layui-btn-fluid" disabled="disabled" lay-submit="true" lay-filter="go">立即重置</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block include_js %}
|
||||
|
||||
{{ js_include('https://ssl.captcha.qq.com/TCaptcha.js',false) }}
|
||||
{{ js_include('web/js/captcha.verify.js') }}
|
||||
|
||||
{% endblock %}
|
@ -2,6 +2,11 @@
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="layui-breadcrumb breadcrumb">
|
||||
<a href="/">首页</a>
|
||||
<a><cite>登录</cite></a>
|
||||
</div>
|
||||
|
||||
<div class="layui-tab layui-tab-brief login-tab">
|
||||
<ul class="layui-tab-title kg-tab-title">
|
||||
<li class="layui-this">密码登录</li>
|
||||
@ -17,4 +22,12 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block include_js %}
|
||||
|
||||
{{ js_include('https://ssl.captcha.qq.com/TCaptcha.js',false) }}
|
||||
{{ js_include('web/js/captcha.login.js') }}
|
||||
{{ js_include('web/js/captcha.verify.js') }}
|
||||
|
||||
{% endblock %}
|
@ -1,8 +1,8 @@
|
||||
<form class="layui-form kg-form" method="POST" action="{{ url({'for':'web.account.pwd_login'}) }}">
|
||||
<form class="layui-form" method="POST" action="{{ url({'for':'web.account.pwd_login'}) }}">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-username"></i></label>
|
||||
<div class="layui-input-block">
|
||||
<input class="layui-input" type="text" name="account" autocomplete="off" placeholder="邮箱" lay-verify="required">
|
||||
<input class="layui-input" type="text" name="account" autocomplete="off" placeholder="手机 / 邮箱" lay-verify="required">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
@ -11,22 +11,16 @@
|
||||
<input class="layui-input" type="password" name="password" autocomplete="off" placeholder="密码" lay-verify="required">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
|
||||
<div class="layui-input-block">
|
||||
<input class="layui-input" type="text" name="verify_code" placeholder="验证码" lay-verify="required">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
|
||||
<div class="layui-input-block">
|
||||
<span id="captcha-btn" class="layui-btn layui-btn-primary layui-btn-fluid" data-app-id="{{ captcha.app_id }}">点击完成验证</span>
|
||||
<span id="verify-tips" class="kg-btn-verify layui-btn layui-btn-primary layui-btn-disabled layui-btn-fluid layui-hide"><i class="layui-icon layui-icon-ok"></i>验证成功</span>
|
||||
<span id="verify-btn" class="layui-btn layui-btn-primary layui-btn-disabled layui-btn-fluid layui-hide verify-btn"><i class="layui-icon layui-icon-ok"></i>验证成功</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button id="submit-btn" class="layui-btn layui-btn-fluid" lay-submit="true" lay-filter="go">立即登录</button>
|
||||
<button id="submit-btn" class="layui-btn layui-btn-fluid" disabled="disabled" lay-submit="true" lay-filter="go">立即登录</button>
|
||||
<input type="hidden" name="return_url" value="{{ return_url }}">
|
||||
<input type="hidden" name="ticket">
|
||||
<input type="hidden" name="rand">
|
||||
|
@ -1,8 +1,8 @@
|
||||
<form class="layui-form kg-form" method="POST" action="{{ url({'for':'web.account.verify_login'}) }}">
|
||||
<form class="layui-form" method="POST" action="{{ url({'for':'web.account.verify_login'}) }}">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-username"></i></label>
|
||||
<div class="layui-input-block">
|
||||
<input class="layui-input" type="text" name="account" autocomplete="off" placeholder="手机 / 邮箱" lay-verify="required">
|
||||
<input id="cv-account" class="layui-input" type="text" name="account" autocomplete="off" placeholder="手机 / 邮箱" lay-verify="required">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
@ -14,16 +14,14 @@
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
|
||||
<div class="layui-input-block">
|
||||
<span id="phone-captcha-btn" class="layui-btn layui-btn-primary layui-btn-fluid" data-app-id="{{ captcha.app_id }}">点击完成验证</span>
|
||||
<span id="phone-verify-tips" class="kg-btn-verify layui-btn layui-btn-primary layui-btn-disabled layui-btn-fluid layui-hide"><i class="layui-icon layui-icon-ok"></i>验证成功</span>
|
||||
<span id="cv-captcha-btn" class="layui-btn layui-btn-primary layui-btn-fluid" data-app-id="{{ captcha.app_id }}">点击完成验证</span>
|
||||
<span id="cv-verify-btn" class="verify-btn layui-btn layui-btn-primary layui-btn-disabled layui-btn-fluid layui-hide"><i class="layui-icon layui-icon-ok"></i>验证成功</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button id="submit-btn" class="layui-btn layui-btn-fluid" lay-submit="true" lay-filter="go">立即登录</button>
|
||||
<button id="cv-submit-btn" class="layui-btn layui-btn-fluid" disabled="disabled" lay-submit="true" lay-filter="go">立即登录</button>
|
||||
<input type="hidden" name="return_url" value="{{ return_url }}">
|
||||
<input type="hidden" name="ticket">
|
||||
<input type="hidden" name="rand">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
@ -2,6 +2,11 @@
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="layui-breadcrumb breadcrumb">
|
||||
<a href="/">首页</a>
|
||||
<a><cite>注册</cite></a>
|
||||
</div>
|
||||
|
||||
<div class="register-container">
|
||||
<form class="layui-form" method="POST" action="{{ url({'for':'web.account.do_register'}) }}">
|
||||
<div class="layui-form-item">
|
||||
@ -30,52 +35,18 @@
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button id="submit-btn" class="layui-btn layui-btn-fluid" lay-submit="true" lay-filter="go">立即注册</button>
|
||||
<button id="submit-btn" class="layui-btn layui-btn-fluid" disabled="disabled" lay-submit="true" lay-filter="go">立即注册</button>
|
||||
<input type="hidden" name="return_url" value="{{ return_url }}">
|
||||
<input type="hidden" name="ticket">
|
||||
<input type="hidden" name="rand">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block inline_js %}
|
||||
{% block include_js %}
|
||||
|
||||
<script src="https://ssl.captcha.qq.com/TCaptcha.js"></script>
|
||||
{{ js_include('https://ssl.captcha.qq.com/TCaptcha.js',false) }}
|
||||
{{ js_include('web/js/captcha.js') }}
|
||||
|
||||
<script>
|
||||
var $ = layui.jquery;
|
||||
var layer = layui.layer;
|
||||
var captcha = new TencentCaptcha(
|
||||
$('#captcha-btn')[0],
|
||||
$('#captcha-btn').attr('data-app-id'),
|
||||
function (res) {
|
||||
if (res.ret === 0) {
|
||||
$('input[name=ticket]').val(res.ticket);
|
||||
$('input[name=rand]').val(res.randstr);
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/verify/code',
|
||||
data: {
|
||||
account: $('input[name=account]').val(),
|
||||
ticket: $('input[name=ticket]').val(),
|
||||
rand: $('input[name=rand]').val()
|
||||
},
|
||||
success: function (res) {
|
||||
var icon = res.code === 0 ? 1 : 2;
|
||||
if (res.msg) {
|
||||
layer.msg(res.msg, {icon: icon});
|
||||
}
|
||||
|
||||
},
|
||||
});
|
||||
$('#captcha-btn').remove();
|
||||
$('#submit-btn').removeAttr('disabled');
|
||||
$('#verify-tips').removeClass('layui-hide');
|
||||
}
|
||||
}
|
||||
);
|
||||
</script>
|
||||
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
@ -1,80 +0,0 @@
|
||||
{% extends 'templates/base.volt' %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="register-container">
|
||||
<form class="layui-form" method="POST" action="{{ url({'for':'web.account.do_reset_pwd'}) }}">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-username"></i></label>
|
||||
<div class="layui-input-block">
|
||||
<input class="layui-input" type="text" name="account" autocomplete="off" placeholder="手机 / 邮箱" lay-verify="required">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-password"></i></label>
|
||||
<div class="layui-input-block">
|
||||
<input class="layui-input" type="password" name="new_password" autocomplete="off" placeholder="新密码" lay-verify="required">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
|
||||
<div class="layui-input-block">
|
||||
<input class="layui-input" type="text" name="verify_code" placeholder="验证码" lay-verify="required">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<span id="captcha-btn" class="layui-btn layui-btn-primary layui-btn-fluid" data-app-id="{{ captcha.app_id }}">点击完成验证</span>
|
||||
<span id="verify-tips" class="btn-verify layui-btn layui-btn-primary layui-btn-disabled layui-btn-fluid layui-hide"><i class="layui-icon layui-icon-ok"></i>验证成功</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button id="submit-btn" class="layui-btn layui-btn-fluid" lay-submit="true" lay-filter="go">立即重置</button>
|
||||
<input type="hidden" name="ticket">
|
||||
<input type="hidden" name="rand">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block inline_js %}
|
||||
|
||||
<script src="https://ssl.captcha.qq.com/TCaptcha.js"></script>
|
||||
|
||||
<script>
|
||||
var $ = layui.jquery;
|
||||
var layer = layui.layer;
|
||||
var captcha = new TencentCaptcha(
|
||||
$('#captcha-btn')[0],
|
||||
$('#captcha-btn').attr('data-app-id'),
|
||||
function (res) {
|
||||
if (res.ret === 0) {
|
||||
$('input[name=ticket]').val(res.ticket);
|
||||
$('input[name=rand]').val(res.randstr);
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/verify/code',
|
||||
data: {
|
||||
account: $('input[name=account]').val(),
|
||||
ticket: $('input[name=ticket]').val(),
|
||||
rand: $('input[name=rand]').val()
|
||||
},
|
||||
success: function (res) {
|
||||
var icon = res.code === 0 ? 1 : 2;
|
||||
if (res.msg) {
|
||||
layer.msg(res.msg, {icon: icon});
|
||||
}
|
||||
|
||||
},
|
||||
});
|
||||
$('#captcha-btn').remove();
|
||||
$('#submit-btn').removeAttr('disabled');
|
||||
$('#verify-tips').removeClass('layui-hide');
|
||||
}
|
||||
}
|
||||
);
|
||||
</script>
|
||||
|
||||
{% endblock %}
|
@ -1,10 +1,14 @@
|
||||
{%- macro lesson_info(lesson) %}
|
||||
|
||||
{% set url = lesson.me.owned ? url({'for':'web.chapter.show','id':lesson.id}) : 'javascript:' %}
|
||||
{% set free_badge = lesson.free ? '<span class="layui-badge">免费</span>' : '' %}
|
||||
|
||||
{% if lesson.attrs.model == 'vod' %}
|
||||
<li>{{ lesson.title }}</li>
|
||||
<a href="{{ url }}"><i class="layui-icon layui-icon-play"></i> {{ lesson.title }} {{ free_badge }}</a>
|
||||
{% elseif lesson.attrs.model == 'live' %}
|
||||
<li>{{ lesson.title }}</li>
|
||||
<a href="{{ url }}"><i class="layui-icon layui-icon-video"></i> {{ lesson.title }} {{ free_badge }}</a>
|
||||
{% elseif lesson.attrs.model == 'read' %}
|
||||
<li>{{ lesson.title }}</li>
|
||||
<a href="{{ url }}"><i class="layui-icon layui-icon-note"></i> {{ lesson.title }} {{ free_badge }}</a>
|
||||
{% endif %}
|
||||
{%- endmacro %}
|
||||
|
||||
@ -15,7 +19,7 @@
|
||||
<div class="layui-colla-content layui-show">
|
||||
<ul class="lesson-list">
|
||||
{% for lesson in chapter.children %}
|
||||
{{ lesson_info(lesson) }}
|
||||
<li>{{ lesson_info(lesson) }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
|
@ -12,14 +12,13 @@
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="course-meta">
|
||||
<div class="left"></div>
|
||||
<div class="right"></div>
|
||||
</div>
|
||||
|
||||
<div class="course-body layui-clear">
|
||||
<div class="content">
|
||||
<div class="layui-tab layui-tab-brief">
|
||||
<div class="layout-main clearfix">
|
||||
<div class="layout-content">
|
||||
<div class="course-meta">
|
||||
<div class="left"></div>
|
||||
<div class="right"></div>
|
||||
</div>
|
||||
<div class="layui-tab layui-tab-brief course-info-tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this">详情</li>
|
||||
<li>目录</li>
|
||||
@ -36,21 +35,21 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sidebar">
|
||||
<div class="layout-sidebar">
|
||||
{% if teachers %}
|
||||
{{ partial('course/widget_teacher', {'teachers':teachers}) }}
|
||||
{{ partial('course/sidebar_teachers') }}
|
||||
{% endif %}
|
||||
|
||||
{% if topics %}
|
||||
{{ partial('course/widget_topic', {'topics':topics}) }}
|
||||
{{ partial('course/sidebar_topics') }}
|
||||
{% endif %}
|
||||
|
||||
{% if recommended_courses %}
|
||||
{{ partial('course/widget_recommended', {'courses':recommended_courses}) }}
|
||||
{{ partial('course/sidebar_recommended') }}
|
||||
{% endif %}
|
||||
|
||||
{% if related_courses %}
|
||||
{{ partial('course/widget_related', {'courses':related_courses}) }}
|
||||
{{ partial('course/sidebar_related') }}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
23
app/Http/Web/Views/course/sidebar_recommended.volt
Normal file
23
app/Http/Web/Views/course/sidebar_recommended.volt
Normal file
@ -0,0 +1,23 @@
|
||||
<div class="course-widget layui-card">
|
||||
<div class="layui-card-header">推荐课程</div>
|
||||
<div class="layui-card-body">
|
||||
{% for course in recommended_courses %}
|
||||
{% set url = url({'for':'web.course.show','id':course.id}) %}
|
||||
<div class="sidebar-course-card clearfix">
|
||||
<div class="cover">
|
||||
<img src="{{ course.cover }}!cover_270" alt="{{ course.title }}">
|
||||
</div>
|
||||
<div class="info">
|
||||
<div class="title">
|
||||
<a href="{{ url }}" title="{{ course.title }}">{{ substr(course.title,0,15) }}</a>
|
||||
</div>
|
||||
<div class="meta">
|
||||
<span class="price">¥{{ course.market_price }}</span>
|
||||
<span class="level">中级</span>
|
||||
<span class="user">{{ course.user_count }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
23
app/Http/Web/Views/course/sidebar_related.volt
Normal file
23
app/Http/Web/Views/course/sidebar_related.volt
Normal file
@ -0,0 +1,23 @@
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">相关课程</div>
|
||||
<div class="layui-card-body">
|
||||
{% for course in related_courses %}
|
||||
{% set url = url({'for':'web.course.show','id':course.id}) %}
|
||||
<div class="sidebar-course-card clearfix">
|
||||
<div class="cover">
|
||||
<img src="{{ course.cover }}!cover_270" alt="{{ course.title }}">
|
||||
</div>
|
||||
<div class="info">
|
||||
<div class="title">
|
||||
<a href="{{ url }}" title="{{ course.title }}">{{ substr(course.title,0,15) }}</a>
|
||||
</div>
|
||||
<div class="meta">
|
||||
<span class="price">¥{{ course.market_price }}</span>
|
||||
<span class="level">中级</span>
|
||||
<span class="user">{{ course.user_count }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
18
app/Http/Web/Views/course/sidebar_teachers.volt
Normal file
18
app/Http/Web/Views/course/sidebar_teachers.volt
Normal file
@ -0,0 +1,18 @@
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">授课教师</div>
|
||||
<div class="layui-card-body">
|
||||
{% for teacher in teachers %}
|
||||
<div class="sidebar-teacher-card clearfix">
|
||||
<div class="avatar">
|
||||
<img src="{{ teacher.avatar }}" alt="{{ teacher.about }}">
|
||||
</div>
|
||||
<div class="info">
|
||||
<div class="name">
|
||||
<a href="{{ url({'for':'web.user.show','id':teacher.id}) }}">{{ teacher.name }}</a>
|
||||
</div>
|
||||
<div class="title">{{ teacher.title }}</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
8
app/Http/Web/Views/course/sidebar_topics.volt
Normal file
8
app/Http/Web/Views/course/sidebar_topics.volt
Normal file
@ -0,0 +1,8 @@
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">热门专题</div>
|
||||
<div class="layui-card-body">
|
||||
{% for topic in topics %}
|
||||
<a class="layui-badge-rim topic-badge" href="{{ url({'for':'web.topic.show','id':topic.id}) }}">{{ topic.title }}</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
@ -1,18 +0,0 @@
|
||||
<div class="course-widget layui-card">
|
||||
<div class="layui-card-header">推荐课程</div>
|
||||
<div class="layui-card-body">
|
||||
{% for course in courses %}
|
||||
<div class="course">
|
||||
<div class="cover"></div>
|
||||
<div class="info">
|
||||
<div class="title">{{ course.title }}</div>
|
||||
<div class="meta">
|
||||
<span class="price"></span>
|
||||
<span class="level"></span>
|
||||
<span class="user"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
@ -1,18 +0,0 @@
|
||||
<div class="course-widget layui-card">
|
||||
<div class="layui-card-header">相关课程</div>
|
||||
<div class="layui-card-body">
|
||||
{% for course in courses %}
|
||||
<div class="course">
|
||||
<div class="cover"></div>
|
||||
<div class="info">
|
||||
<div class="title">{{ course.title }}</div>
|
||||
<div class="meta">
|
||||
<span class="price"></span>
|
||||
<span class="level"></span>
|
||||
<span class="user"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
@ -1,14 +0,0 @@
|
||||
<div class="teacher-widget layui-card">
|
||||
<div class="layui-card-header">授课教师</div>
|
||||
<div class="layui-card-body">
|
||||
{% for teacher in teachers %}
|
||||
<div class="teacher" title="{{ teacher.about }}">
|
||||
<div class="avatar"></div>
|
||||
<div class="info">
|
||||
<div class="name">{{ teacher.name }}</div>
|
||||
<div class="title">{{ teacher.title }}</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
@ -1,8 +0,0 @@
|
||||
<div class="topic-widget layui-card">
|
||||
<div class="layui-card-header">热门专题</div>
|
||||
<div class="layui-card-body">
|
||||
{% for topic in topics %}
|
||||
<a class="layui-badge" href="{{ url({'for':'web.topic.show','id':topic.id}) }}">{{ topic.title }}</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
@ -23,7 +23,7 @@
|
||||
|
||||
<div class="search">
|
||||
<form class="layui-form" action="{{ url({'for':'web.search.list'}) }}">
|
||||
<input class="layui-input" type="text" name="query" value="{{ request.get('query','trim','') }}" autocomplete="off" placeholder="请输入课程关键字...">
|
||||
<input class="layui-input" type="text" name="query" value="{{ request.get('query')|striptags }}" autocomplete="off" placeholder="请输入课程关键字...">
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
@ -9,8 +9,9 @@
|
||||
<div class="layui-breadcrumb breadcrumb">
|
||||
<a href="/">首页</a>
|
||||
<a href="#">搜索</a>
|
||||
<a><cite>{{ request.get('query') }}</cite></a>
|
||||
<a><cite>{{ request.get('query')|striptags }}</cite></a>
|
||||
</div>
|
||||
|
||||
<div class="layout-main clearfix">
|
||||
<div class="layout-content">
|
||||
{% if type == 'course' %}
|
||||
|
@ -5,6 +5,7 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<meta name="keywords" content="{{ site_seo.getKeywords() }}">
|
||||
<meta name="description" content="{{ site_seo.getDescription() }}">
|
||||
<meta name="csrf-token" content="{{ csrfToken.getToken() }}">
|
||||
<title>{{ site_seo.getTitle() }}</title>
|
||||
{{ icon_link('favicon.ico') }}
|
||||
{{ css_link('lib/layui/css/layui.css') }}
|
||||
|
@ -74,26 +74,6 @@ function kg_array_column($rows, $columnKey, $indexKey = null)
|
||||
return array_unique($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 依据白名单取数据
|
||||
*
|
||||
* @param array $params
|
||||
* @param array $whitelist
|
||||
* @return array
|
||||
*/
|
||||
function kg_array_whitelist($params, $whitelist)
|
||||
{
|
||||
$result = [];
|
||||
|
||||
foreach ($params as $key => $value) {
|
||||
if (in_array($key, $whitelist)) {
|
||||
$result[$key] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 数组转对象
|
||||
*
|
||||
|
@ -1,5 +1,9 @@
|
||||
.layui-badge, .layui-badge-rim {
|
||||
padding-bottom: 1px;
|
||||
body {
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
|
||||
.clearfix {
|
||||
zoom: 1
|
||||
}
|
||||
|
||||
.clearfix:after {
|
||||
@ -7,15 +11,7 @@
|
||||
clear: both;
|
||||
content: "";
|
||||
visibility: hidden;
|
||||
height: 0
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
|
||||
.clearfix {
|
||||
zoom: 1
|
||||
height: 0;
|
||||
}
|
||||
|
||||
.fl {
|
||||
@ -35,6 +31,19 @@ body {
|
||||
background-color: #393D49;
|
||||
}
|
||||
|
||||
#main {
|
||||
margin-top: 80px;
|
||||
margin-bottom: 40px;
|
||||
min-height: 550px;
|
||||
}
|
||||
|
||||
#footer {
|
||||
padding: 30px 0;
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
background: #474443;
|
||||
}
|
||||
|
||||
.logo {
|
||||
|
||||
}
|
||||
@ -58,19 +67,6 @@ body {
|
||||
background-color: rgba(255, 255, 255, 0.05);
|
||||
}
|
||||
|
||||
#main {
|
||||
margin-top: 80px;
|
||||
margin-bottom: 40px;
|
||||
min-height: 550px;
|
||||
}
|
||||
|
||||
#footer {
|
||||
padding: 30px 0;
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
background: #474443;
|
||||
}
|
||||
|
||||
#footer span, #footer a {
|
||||
color: #999;
|
||||
}
|
||||
@ -98,7 +94,9 @@ body {
|
||||
|
||||
.layout-content {
|
||||
float: left;
|
||||
width: 800px;
|
||||
width: 730px;
|
||||
padding: 30px;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.layout-sidebar {
|
||||
@ -124,10 +122,6 @@ body {
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
.index-module .content {
|
||||
|
||||
}
|
||||
|
||||
.index-carousel {
|
||||
margin-bottom: 30px;
|
||||
text-align: center;
|
||||
@ -206,10 +200,6 @@ body {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.search-course-card .meta {
|
||||
|
||||
}
|
||||
|
||||
.search-course-card .meta span {
|
||||
margin-right: 10px;
|
||||
}
|
||||
@ -294,6 +284,11 @@ body {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.course-meta {
|
||||
border: 1px dashed #ccc;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.course-meta .left {
|
||||
float: left;
|
||||
}
|
||||
@ -302,25 +297,111 @@ body {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.course-body {
|
||||
.course-info-tab .layui-tab-content {
|
||||
padding-top: 30px;
|
||||
}
|
||||
|
||||
.course-body .content {
|
||||
ul.lesson-list {
|
||||
|
||||
}
|
||||
|
||||
.lesson-list li {
|
||||
padding-left: 10px;
|
||||
line-height: 40px;
|
||||
}
|
||||
|
||||
.lesson-list li a {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.lesson-list li:hover {
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
|
||||
.sidebar-teacher-card {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.sidebar-teacher-card .avatar {
|
||||
float: left;
|
||||
width: 780px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.course-body .sidebar {
|
||||
.sidebar-teacher-card .avatar img {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border-radius: 60px;
|
||||
}
|
||||
|
||||
.sidebar-teacher-card .info {
|
||||
float: left;
|
||||
width: 320px;
|
||||
padding: 5px 0;
|
||||
}
|
||||
|
||||
.btn-verify {
|
||||
.sidebar-teacher-card .info .name {
|
||||
}
|
||||
|
||||
.sidebar-teacher-card .info .title {
|
||||
color: #999;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.topic-badge {
|
||||
padding: 5px;
|
||||
margin-right: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.sidebar-course-card {
|
||||
padding-bottom: 10px;
|
||||
margin-bottom: 10px;
|
||||
border-bottom: 1px dashed #ccc;
|
||||
}
|
||||
|
||||
.sidebar-course-card:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.sidebar-course-card .cover {
|
||||
float: left;
|
||||
width: 90px;
|
||||
height: 50px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.sidebar-course-card .cover img {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.sidebar-course-card .info {
|
||||
float: left;
|
||||
width: 190px;
|
||||
color: #999;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.sidebar-course-card .title {
|
||||
font-size: 12px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.sidebar-course-card .meta {
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
.sidebar-course-card .meta span {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.verify-tips-btn {
|
||||
color: green;
|
||||
}
|
||||
|
||||
.register-container {
|
||||
padding: 50px 30px;
|
||||
padding: 40px 30px;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
@ -329,7 +410,7 @@ body {
|
||||
}
|
||||
|
||||
.login-tab {
|
||||
padding: 30px;
|
||||
padding: 20px 30px;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
|
15
public/static/web/js/captcha.login.js
Normal file
15
public/static/web/js/captcha.login.js
Normal file
@ -0,0 +1,15 @@
|
||||
var $ = layui.jquery;
|
||||
var layer = layui.layer;
|
||||
var captcha = new TencentCaptcha(
|
||||
$('#captcha-btn')[0],
|
||||
$('#captcha-btn').attr('data-app-id'),
|
||||
function (res) {
|
||||
if (res.ret === 0) {
|
||||
$('input[name=ticket]').val(res.ticket);
|
||||
$('input[name=rand]').val(res.randstr);
|
||||
$('#captcha-btn').remove();
|
||||
$('#submit-btn').removeAttr('disabled');
|
||||
$('#verify-btn').removeClass('layui-hide');
|
||||
}
|
||||
}
|
||||
);
|
28
public/static/web/js/captcha.verify.js
Normal file
28
public/static/web/js/captcha.verify.js
Normal file
@ -0,0 +1,28 @@
|
||||
var $ = layui.jquery;
|
||||
var layer = layui.layer;
|
||||
var captcha = new TencentCaptcha(
|
||||
$('#cv-captcha-btn')[0],
|
||||
$('#cv-captcha-btn').attr('data-app-id'),
|
||||
function (res) {
|
||||
if (res.ret === 0) {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/verify/code',
|
||||
data: {
|
||||
account: $('#cv-account').val(),
|
||||
ticket: res.ticket,
|
||||
rand: res.randstr
|
||||
},
|
||||
success: function (res) {
|
||||
var icon = res.code === 0 ? 1 : 2;
|
||||
if (res.msg) {
|
||||
layer.msg(res.msg, {icon: icon});
|
||||
}
|
||||
}
|
||||
});
|
||||
$('#cv-captcha-btn').remove();
|
||||
$('#cv-submit-btn').removeAttr('disabled');
|
||||
$('#cv-verify-btn').removeClass('layui-hide');
|
||||
}
|
||||
}
|
||||
);
|
Loading…
x
Reference in New Issue
Block a user