1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-06-28 05:11:39 +08:00

整理登录注册代码

This commit is contained in:
xiaochong0302 2020-05-25 20:32:12 +08:00
parent c0e405a51f
commit 2450d70fdc
28 changed files with 360 additions and 290 deletions

View File

@ -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();

View File

@ -395,7 +395,7 @@ class Course extends Service
$cache = new CourseTeacherListCache();
$cache->rebuild();
$cache->rebuild($course->id);
}
protected function saveCategories(CourseModel $course, $categoryIds)

View File

@ -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');
}
}
);

View File

@ -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');
}

View File

@ -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()
{
}

View 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 %}

View File

@ -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 %}

View File

@ -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">

View File

@ -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>

View File

@ -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 %}

View File

@ -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 %}

View File

@ -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>

View File

@ -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>

View 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>

View 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>

View 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>

View 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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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' %}

View File

@ -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') }}

View File

@ -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;
}
/**
* 数组转对象
*

View File

@ -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;
}

View 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');
}
}
);

View 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');
}
}
);